From 356b1eef5116e2f3973557d9e4936a8aba31e2f0 Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Thu, 16 May 2024 14:29:28 +0200 Subject: [PATCH 1/7] refactor: parse evm transaction data (#2483) * refactor: split up decoders per abi type * refactor: clean up naming Co-authored-by: Mark Nardi * temp * fix types in `parseSmartContractDataFromTransactionData` * set contract info and parsed smartcontract data to activities * fix type for method registry * update EvmtransactionFromDapp popup * use parse function on activity generation * fix activity generation * set token transfer * fix typescript * Fix token standard * fix decoded input from blockscout --------- Co-authored-by: Nicole O'Brien --- .../popups/EvmTransactionFromDappPopup.svelte | 74 +++-- .../info/EvmSmartContractInformation.svelte | 2 +- .../blockscout-transaction.interface.ts | 2 +- .../evm/evm-contract-call-activity.type.ts | 3 +- .../evm/evm-token-minting-activity.type.ts | 3 +- .../evm/evm-token-transfer-activity.type.ts | 3 +- ...ateEvmActivityFromBlockscoutTransaction.ts | 70 +++-- ...erateEvmActivityFromLocalEvmTransaction.ts | 148 ++++----- ...sferActivityFromBlockscoutTokenTransfer.ts | 25 +- ...rtContractDataFromBlockscoutTransaction.ts | 89 ++++++ .../src/lib/core/layer-2/enums/index.ts | 1 + .../enums/parsed-smart-contract-type.enum.ts | 6 + .../erc20-transfer-method-inputs.interface.ts | 12 +- ...1-safe-transfer-method-inputs.interface.ts | 24 +- .../src/lib/core/layer-2/interfaces/index.ts | 1 + .../isc-call-method-inputs.interface.ts | 44 ++- .../isc-send-method-inputs.interface.ts | 52 ++-- .../parsed-contract-data.interface.ts | 40 +++ .../types/parsed-smart-contract-data.type.ts | 12 + .../utils/getMethodForEvmTransaction.ts | 31 -- .../getTransferInfoFromTransactionData.ts | 149 ---------- .../src/lib/core/layer-2/utils/index.ts | 2 +- ...rseSmartContractDataFromTransactionData.ts | 281 ++++++++++++++++++ .../core/network/classes/isc-chain.class.ts | 25 +- .../shared/src/lib/core/utils/abiDecoder.ts | 28 +- 25 files changed, 744 insertions(+), 383 deletions(-) create mode 100644 packages/shared/src/lib/core/activity/utils/evm/getSmartContractDataFromBlockscoutTransaction.ts create mode 100644 packages/shared/src/lib/core/layer-2/enums/parsed-smart-contract-type.enum.ts create mode 100644 packages/shared/src/lib/core/layer-2/interfaces/parsed-contract-data.interface.ts create mode 100644 packages/shared/src/lib/core/layer-2/types/parsed-smart-contract-data.type.ts delete mode 100644 packages/shared/src/lib/core/layer-2/utils/getMethodForEvmTransaction.ts delete mode 100644 packages/shared/src/lib/core/layer-2/utils/getTransferInfoFromTransactionData.ts create mode 100644 packages/shared/src/lib/core/layer-2/utils/parseSmartContractDataFromTransactionData.ts diff --git a/packages/desktop/components/popup/popups/EvmTransactionFromDappPopup.svelte b/packages/desktop/components/popup/popups/EvmTransactionFromDappPopup.svelte index b1823034d6..d2e7d08e26 100644 --- a/packages/desktop/components/popup/popups/EvmTransactionFromDappPopup.svelte +++ b/packages/desktop/components/popup/popups/EvmTransactionFromDappPopup.svelte @@ -11,20 +11,20 @@ import { EvmTransactionData } from '@core/layer-2/types' import { EvmTransactionDetails } from '@views/dashboard/send-flow/views/components' import { + IParsedInput, + ParsedSmartContractType, calculateEstimatedGasFeeFromTransactionData, calculateMaxGasFeeFromTransactionData, getHexEncodedTransaction, - getMethodForEvmTransaction, + parseSmartContractDataFromTransactionData, } from '@core/layer-2' import { getTokenFromSelectedAccountTokens } from '@core/token/stores' - import { getTransferInfoFromTransactionData } from '@core/layer-2/utils/getTransferInfoFromTransactionData' import { TokenTransferData } from '@core/wallet' import { Nft } from '@core/nfts' import { Alert, Link, Table, Text } from '@bloomwalletio/ui' import { PopupId, closePopup, modifyPopupState, openPopup } from '@desktop/auxiliary/popup' - import { truncateString } from '@core/utils' + import { Converter, truncateString } from '@core/utils' import { openUrlInBrowser } from '@core/app' - import { StardustActivityType } from '@core/activity' import { BASE_TOKEN_ID } from '@core/token/constants' import { checkActiveProfileAuth } from '@core/profile/actions' import { LedgerAppName } from '@core/ledger' @@ -53,34 +53,61 @@ let baseCoinTransfer: TokenTransferData | undefined let isSmartContractCall = false let methodName: string | undefined = undefined - let parameters: Record | undefined = undefined + let inputs: IParsedInput[] | undefined = undefined let busy = false - setTokenTransfer() - function setTokenTransfer(): void { - const transferInfo = getTransferInfoFromTransactionData(preparedTransaction, evmNetwork) - switch (transferInfo?.type) { - case StardustActivityType.Basic: { + setTransactionInformation() + function setTransactionInformation(): void { + if (!preparedTransaction.data) { + baseCoinTransfer = { + token: getTokenFromSelectedAccountTokens(BASE_TOKEN_ID, evmNetwork.id), + rawAmount: Converter.bigIntLikeToBigInt(preparedTransaction.value), + } as TokenTransferData + return + } + + const parsedData = parseSmartContractDataFromTransactionData( + { + to: preparedTransaction.to?.toString(), + data: String(preparedTransaction.data), + value: preparedTransaction.value, + }, + evmNetwork + ) + + methodName = parsedData?.parsedMethod?.name + inputs = parsedData?.parsedMethod?.inputs + + switch (parsedData?.type) { + case ParsedSmartContractType.CoinTransfer: { const transfer = { - token: getTokenFromSelectedAccountTokens(transferInfo.tokenId, evmNetwork.id), - rawAmount: transferInfo.rawAmount, + token: getTokenFromSelectedAccountTokens(BASE_TOKEN_ID, evmNetwork.id), + rawAmount: parsedData.rawAmount, } as TokenTransferData if (!transfer.token) { return } - if (transferInfo.tokenId === BASE_TOKEN_ID) { - baseCoinTransfer = transfer - } else { - tokenTransfer = transfer + baseCoinTransfer = transfer + break + } + case ParsedSmartContractType.TokenTransfer: { + const transfer = { + token: getTokenFromSelectedAccountTokens(parsedData.tokenId, evmNetwork.id), + rawAmount: parsedData.rawAmount, + } as TokenTransferData + if (!transfer.token) { + return } + + tokenTransfer = transfer break } - case StardustActivityType.Nft: { - nft = getNftByIdForAccount($selectedAccount.index, transferInfo.nftId) + case ParsedSmartContractType.NftTransfer: { + nft = getNftByIdForAccount($selectedAccount?.index as number, parsedData.nftId) break } - case StardustActivityType.SmartContract: { + case ParsedSmartContractType.SmartContract: { isSmartContractCall = true break } @@ -147,13 +174,6 @@ } } - $: void setMethodName(preparedTransaction) - function setMethodName(preparedTransaction: EvmTransactionData): void { - const [method, _parameters] = getMethodForEvmTransaction(String(preparedTransaction.data ?? '')) ?? [] - methodName = method - parameters = _parameters - } - function getSuccessMessage(): string { const recipient = truncateString(String(preparedTransaction.to), 6, 6) const assetName = @@ -216,7 +236,7 @@ onClick: () => onExplorerClick(String(preparedTransaction.to)), }, { key: localize('general.methodName'), value: methodName }, - { key: localize('general.parameters'), value: parameters }, + { key: localize('general.parameters'), value: inputs }, { key: localize('general.data'), value: String(preparedTransaction.data), copyable: true }, ]} /> diff --git a/packages/shared/src/components/activities/evm/info/EvmSmartContractInformation.svelte b/packages/shared/src/components/activities/evm/info/EvmSmartContractInformation.svelte index 10585f1736..e4b19d47ae 100644 --- a/packages/shared/src/components/activities/evm/info/EvmSmartContractInformation.svelte +++ b/packages/shared/src/components/activities/evm/info/EvmSmartContractInformation.svelte @@ -41,7 +41,7 @@ }, { key: localize('general.inputs'), - value: activity.parameters, + value: activity.inputs, }, { key: localize('general.data'), diff --git a/packages/shared/src/lib/auxiliary/blockscout/interfaces/blockscout-transaction.interface.ts b/packages/shared/src/lib/auxiliary/blockscout/interfaces/blockscout-transaction.interface.ts index 6d0eb2fa4a..ba931643d2 100644 --- a/packages/shared/src/lib/auxiliary/blockscout/interfaces/blockscout-transaction.interface.ts +++ b/packages/shared/src/lib/auxiliary/blockscout/interfaces/blockscout-transaction.interface.ts @@ -22,7 +22,7 @@ export interface IWatchlistName { interface IDecodedInput { method_call: string method_id: string - parameters: Record // IDecodedInputParameters + parameters: { name: string; type: string; value: unknown }[] // IDecodedInputParameters } interface ITokenTransfer { diff --git a/packages/shared/src/lib/core/activity/types/evm/evm-contract-call-activity.type.ts b/packages/shared/src/lib/core/activity/types/evm/evm-contract-call-activity.type.ts index 6e00dfb465..572461e293 100644 --- a/packages/shared/src/lib/core/activity/types/evm/evm-contract-call-activity.type.ts +++ b/packages/shared/src/lib/core/activity/types/evm/evm-contract-call-activity.type.ts @@ -1,5 +1,6 @@ import { EvmActivityType } from '@core/activity/enums/evm' import { BaseEvmActivity } from './base-evm-activity.type' +import { IParsedInput } from '@core/layer-2' export type EvmContractCallActivity = BaseEvmActivity & { type: EvmActivityType.ContractCall @@ -7,5 +8,5 @@ export type EvmContractCallActivity = BaseEvmActivity & { methodId?: string method?: string - parameters?: Record + inputs?: IParsedInput[] } diff --git a/packages/shared/src/lib/core/activity/types/evm/evm-token-minting-activity.type.ts b/packages/shared/src/lib/core/activity/types/evm/evm-token-minting-activity.type.ts index cbbb9033bb..c689f73f90 100644 --- a/packages/shared/src/lib/core/activity/types/evm/evm-token-minting-activity.type.ts +++ b/packages/shared/src/lib/core/activity/types/evm/evm-token-minting-activity.type.ts @@ -2,6 +2,7 @@ import { EvmActivityType } from '@core/activity/enums/evm' import { TokenStandard } from '@core/token' import { NftStandard } from '@core/nfts' import { BaseEvmActivity } from './base-evm-activity.type' +import { IParsedInput } from '@core/layer-2/interfaces' export type EvmTokenMintingActivity = BaseEvmActivity & { type: EvmActivityType.TokenMinting @@ -14,5 +15,5 @@ export type EvmTokenMintingActivity = BaseEvmActivity & { methodId?: string method?: string - parameters?: Record + inputs?: IParsedInput[] } diff --git a/packages/shared/src/lib/core/activity/types/evm/evm-token-transfer-activity.type.ts b/packages/shared/src/lib/core/activity/types/evm/evm-token-transfer-activity.type.ts index 6c8f42c4c7..011346a7a1 100644 --- a/packages/shared/src/lib/core/activity/types/evm/evm-token-transfer-activity.type.ts +++ b/packages/shared/src/lib/core/activity/types/evm/evm-token-transfer-activity.type.ts @@ -2,6 +2,7 @@ import { EvmActivityType } from '@core/activity/enums/evm' import { TokenStandard } from '@core/token' import { NftStandard } from '@core/nfts' import { BaseEvmActivity } from './base-evm-activity.type' +import { IParsedInput } from '@core/layer-2/interfaces' export type EvmTokenTransferActivity = BaseEvmActivity & { type: EvmActivityType.TokenTransfer @@ -14,5 +15,5 @@ export type EvmTokenTransferActivity = BaseEvmActivity & { methodId?: string method?: string - parameters?: Record + inputs?: IParsedInput[] } diff --git a/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromBlockscoutTransaction.ts b/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromBlockscoutTransaction.ts index 389cd95afa..a8891af219 100644 --- a/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromBlockscoutTransaction.ts +++ b/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromBlockscoutTransaction.ts @@ -3,16 +3,15 @@ import { IAccountState } from '@core/account' import { IEvmNetwork } from '@core/network' import { LocalEvmTransaction, buildPersistedEvmTransactionFromBlockscoutTransaction } from '@core/transactions' import { generateEvmActivityFromLocalEvmTransaction } from './generateEvmActivityFromLocalEvmTransaction' -import { BaseEvmActivity, EvmActivity, EvmCoinTransferActivity } from '@core/activity/types' +import { BaseEvmActivity, EvmActivity, EvmCoinTransferActivity, EvmTokenTransferActivity } from '@core/activity/types' import { BASE_TOKEN_ID } from '@core/token' import { generateBaseEvmActivity } from './generateBaseEvmActivity' import { EvmActivityType } from '@core/activity/enums/evm' -import { Converter, HEX_PREFIX } from '@core/utils' +import { Converter } from '@core/utils' import { EvmContractCallActivity } from '@core/activity/types/evm/evm-contract-call-activity.type' import { SubjectType } from '@core/wallet' import { ActivityDirection } from '@core/activity/enums' -import { getMethodForEvmTransaction } from '@core/layer-2' -import { addMethodToRegistry, getMethodFromRegistry } from '@core/layer-2/stores/method-registry.store' +import { getSmartContractDataFromBlockscoutTransaction } from './getSmartContractDataFromBlockscoutTransaction' export async function generateEvmActivityFromBlockscoutTransaction( blockscoutTransaction: IBlockscoutTransaction, @@ -52,7 +51,7 @@ async function generateEvmContractCallActivityFromBlockscoutTransaction( localTransaction: LocalEvmTransaction | undefined, evmNetwork: IEvmNetwork, account: IAccountState -): Promise { +): Promise { const baseActivity = await generateBaseEvmActivityFromBlockscoutTransaction( blockscoutTransaction, localTransaction, @@ -60,34 +59,43 @@ async function generateEvmContractCallActivityFromBlockscoutTransaction( account ) - let method: string | undefined - let parameters: Record | undefined - if (blockscoutTransaction.decoded_input) { - // if decoded input is available we know the method and parameters and contract is verified - const { method_id, method_call, parameters: _parameters } = blockscoutTransaction.decoded_input - method = blockscoutTransaction.method - parameters = _parameters + const methodId = blockscoutTransaction.decoded_input?.method_id ?? blockscoutTransaction.method // `method` is the methodId if the inputs cannot be decoded + const rawData = blockscoutTransaction.raw_input - if (!getMethodFromRegistry(HEX_PREFIX + method_id)) { - const fourBytePrefix = HEX_PREFIX + method_id - addMethodToRegistry(fourBytePrefix, method_call) - } - } else { - const [_method, _parameters] = getMethodForEvmTransaction(blockscoutTransaction.raw_input) ?? [] - method = _method - parameters = _parameters - } + const smartContractData = blockscoutTransaction + ? getSmartContractDataFromBlockscoutTransaction(blockscoutTransaction, evmNetwork) + : undefined - return { - ...baseActivity, - type: EvmActivityType.ContractCall, - verified: blockscoutTransaction.to.is_verified, - methodId: blockscoutTransaction.decoded_input?.method_id ?? blockscoutTransaction.method, // `method` is the methodId if the inputs cannot be decoded - method, - parameters: parameters, - rawData: blockscoutTransaction.raw_input, - contractAddress: blockscoutTransaction.to?.hash.toLowerCase(), - } as EvmContractCallActivity + switch (smartContractData?.type) { + case EvmActivityType.CoinTransfer: + return { + ...baseActivity, + type: EvmActivityType.CoinTransfer, + baseTokenTransfer: smartContractData.baseTokenTransfer, + methodId, + method: smartContractData.method, + inputs: smartContractData.inputs, + } as EvmCoinTransferActivity + case EvmActivityType.TokenTransfer: + return { + ...baseActivity, + type: EvmActivityType.TokenTransfer, + tokenTransfer: smartContractData.tokenTransfer, + methodId, + method: smartContractData.method, + inputs: smartContractData.inputs, + } as EvmTokenTransferActivity + case EvmActivityType.ContractCall: + default: + return { + ...baseActivity, + type: EvmActivityType.ContractCall, + rawData, + methodId, + method: smartContractData?.method, + inputs: smartContractData?.inputs, + } as EvmContractCallActivity + } } async function generateEvmCoinTransferActivityFromBlockscoutTransaction( diff --git a/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromLocalEvmTransaction.ts b/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromLocalEvmTransaction.ts index a30480bf8c..5603e6b245 100644 --- a/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromLocalEvmTransaction.ts +++ b/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromLocalEvmTransaction.ts @@ -1,5 +1,4 @@ import { IAccountState } from '@core/account' -import { StardustActivityType } from '@core/activity/enums' import { EvmActivityType } from '@core/activity/enums/evm' import { EvmActivity, @@ -7,8 +6,7 @@ import { EvmContractCallActivity, EvmTokenTransferActivity, } from '@core/activity/types' -import { getMethodForEvmTransaction } from '@core/layer-2/utils' -import { getTransferInfoFromTransactionData } from '@core/layer-2/utils/getTransferInfoFromTransactionData' +import { parseSmartContractDataFromTransactionData } from '@core/layer-2/utils/parseSmartContractDataFromTransactionData' import { IEvmNetwork } from '@core/network' import { NftStandard } from '@core/nfts' import { BASE_TOKEN_ID, TokenStandard } from '@core/token' @@ -16,77 +14,14 @@ import { LocalEvmTransaction } from '@core/transactions' import { SubjectType } from '@core/wallet' import { generateBaseEvmActivity } from './generateBaseEvmActivity' import { Converter } from '@core/utils' +import { ParsedSmartContractType } from '@core/layer-2' export async function generateEvmActivityFromLocalEvmTransaction( transaction: LocalEvmTransaction, evmNetwork: IEvmNetwork, account: IAccountState ): Promise { - if (transaction.data) { - const transferInfo = getTransferInfoFromTransactionData(transaction, evmNetwork) - if (!transferInfo) { - return - } - - const { to, from, gasUsed, estimatedGas, gasPrice, transactionHash, timestamp, blockNumber } = transaction - const baseActivity = await generateBaseEvmActivity( - { - recipient: transferInfo.recipientAddress ?? to?.toString().toLowerCase(), - from: from?.toString().toLowerCase(), - gasUsed: Number(gasUsed), - estimatedGas, - gasPrice: gasPrice ?? undefined, - transactionHash, - timestamp, - blockNumber, - }, - evmNetwork, - account - ) - if (transferInfo.type === StardustActivityType.SmartContract) { - const data = String(transaction.data ?? '') - const [method, parameters] = getMethodForEvmTransaction(data) ?? [] - return { - ...baseActivity, - type: EvmActivityType.ContractCall, - method, - parameters, - methodId: data.substring(0, 10), - rawData: data, - contract: { - type: SubjectType.SmartContract, - address: to?.toString().toLowerCase(), - name: '', - verified: false, - }, - } as EvmContractCallActivity - } else { - const tokenTransfer = - transferInfo?.type === StardustActivityType.Basic - ? { - standard: TokenStandard.Erc20, - tokenId: transferInfo.tokenId, - rawAmount: transferInfo.rawAmount, - } - : { - standard: NftStandard.Erc721, - tokenId: transferInfo.nftId, - rawAmount: BigInt(1), - } - - return { - ...baseActivity, - type: EvmActivityType.TokenTransfer, - contract: { - type: SubjectType.SmartContract, - address: to?.toString().toLowerCase(), - name: '', - verified: false, - }, - tokenTransfer, - } as EvmTokenTransferActivity - } - } else { + if (!transaction.data) { const { to, from, gasUsed, estimatedGas, gasPrice, transactionHash, timestamp, blockNumber } = transaction // i.e must be a coin transfer const baseActivity = await generateBaseEvmActivity( @@ -113,4 +48,81 @@ export async function generateEvmActivityFromLocalEvmTransaction( }, } as EvmCoinTransferActivity } + + const parsedData = parseSmartContractDataFromTransactionData( + { to: transaction.to?.toString(), data: transaction.data, value: transaction.value }, + evmNetwork + ) + if (!parsedData) { + return + } + + const { to, from, gasUsed, estimatedGas, gasPrice, transactionHash, timestamp, blockNumber } = transaction + let baseActivity = await generateBaseEvmActivity( + { + recipient: parsedData.recipientAddress ?? to?.toString().toLowerCase(), + from: from?.toString().toLowerCase(), + gasUsed: Number(gasUsed), + estimatedGas, + gasPrice: gasPrice ?? undefined, + transactionHash, + timestamp, + blockNumber, + }, + evmNetwork, + account + ) + + baseActivity = { + ...baseActivity, + method: parsedData.parsedMethod?.name, + inputs: parsedData.parsedMethod?.inputs, + methodId: parsedData.rawMethod, + rawData: String(transaction.data ?? ''), + contract: { + type: SubjectType.SmartContract, + address: to?.toString().toLowerCase(), + name: '', + verified: false, + }, + } as EvmContractCallActivity + + switch (parsedData.type) { + case ParsedSmartContractType.SmartContract: + return { + ...baseActivity, + type: EvmActivityType.ContractCall, + } as EvmContractCallActivity + case ParsedSmartContractType.CoinTransfer: + return { + ...baseActivity, + type: EvmActivityType.CoinTransfer, + baseTokenTransfer: { + tokenId: BASE_TOKEN_ID, + rawAmount: parsedData.rawAmount, + }, + } as EvmCoinTransferActivity + case ParsedSmartContractType.TokenTransfer: + return { + ...baseActivity, + type: EvmActivityType.TokenTransfer, + tokenTransfer: { + standard: TokenStandard.Erc20, + tokenId: parsedData.tokenId, + rawAmount: parsedData.rawAmount, + }, + } as EvmTokenTransferActivity + case ParsedSmartContractType.NftTransfer: + return { + ...baseActivity, + type: EvmActivityType.TokenTransfer, + tokenTransfer: { + standard: NftStandard.Erc721, + tokenId: parsedData.nftId, + rawAmount: BigInt(1), + }, + } as EvmTokenTransferActivity + default: + break + } } diff --git a/packages/shared/src/lib/core/activity/utils/evm/generateEvmTokenTransferActivityFromBlockscoutTokenTransfer.ts b/packages/shared/src/lib/core/activity/utils/evm/generateEvmTokenTransferActivityFromBlockscoutTokenTransfer.ts index e39b113236..99fa1412da 100644 --- a/packages/shared/src/lib/core/activity/utils/evm/generateEvmTokenTransferActivityFromBlockscoutTokenTransfer.ts +++ b/packages/shared/src/lib/core/activity/utils/evm/generateEvmTokenTransferActivityFromBlockscoutTokenTransfer.ts @@ -21,9 +21,7 @@ import { import { getOrRequestTokenFromPersistedTokens } from '@core/token/actions' import { isNftPersisted, persistErc721Nft } from '@core/nfts/actions' import { BASE_TOKEN_CONTRACT_ADDRESS } from '@core/layer-2/constants' -import { getMethodForEvmTransaction } from '@core/layer-2/utils' -import { addMethodToRegistry, getMethodFromRegistry } from '@core/layer-2/stores/method-registry.store' -import { HEX_PREFIX } from '@core/utils' +import { getSmartContractDataFromBlockscoutTransaction } from './getSmartContractDataFromBlockscoutTransaction' export async function generateEvmTokenTransferActivityFromBlockscoutTokenTransfer( blockscoutTokenTransfer: BlockscoutTokenTransfer, @@ -130,20 +128,9 @@ export async function generateEvmTokenTransferActivityFromBlockscoutTokenTransfe } } - const method: string = blockscoutTokenTransfer.method - let parameters: Record | undefined - if (blockscoutTransaction?.decoded_input) { - const { method_id, method_call, parameters: _parameters } = blockscoutTransaction.decoded_input - parameters = _parameters - - if (!getMethodFromRegistry(HEX_PREFIX + method_id)) { - const fourBytePrefix = HEX_PREFIX + method_id - addMethodToRegistry(fourBytePrefix, method_call) - } - } else if (blockscoutTransaction?.raw_input) { - const [, _parameters] = getMethodForEvmTransaction(blockscoutTransaction.raw_input) ?? [] - parameters = _parameters - } + const smartContractData = blockscoutTransaction + ? getSmartContractDataFromBlockscoutTransaction(blockscoutTransaction, evmNetwork) + : undefined return { ...baseActivity, @@ -156,8 +143,8 @@ export async function generateEvmTokenTransferActivityFromBlockscoutTokenTransfe }, methodId: blockscoutTransaction?.decoded_input?.method_id ?? blockscoutTransaction?.method, - method, - parameters, + method: smartContractData?.method, + inputs: smartContractData?.inputs, rawData: blockscoutTransaction?.raw_input ?? '', contract, } diff --git a/packages/shared/src/lib/core/activity/utils/evm/getSmartContractDataFromBlockscoutTransaction.ts b/packages/shared/src/lib/core/activity/utils/evm/getSmartContractDataFromBlockscoutTransaction.ts new file mode 100644 index 0000000000..af54e39d9d --- /dev/null +++ b/packages/shared/src/lib/core/activity/utils/evm/getSmartContractDataFromBlockscoutTransaction.ts @@ -0,0 +1,89 @@ +import { IBlockscoutTransaction } from '@auxiliary/blockscout/interfaces' +import { EvmActivityType } from '@core/activity/enums/evm' +import { ParsedSmartContractType } from '@core/layer-2/enums' +import { IParsedInput } from '@core/layer-2/interfaces' +import { addMethodToRegistry, getMethodFromRegistry } from '@core/layer-2/stores/method-registry.store' +import { parseSmartContractDataFromTransactionData } from '@core/layer-2/utils' +import { IEvmNetwork } from '@core/network' +import { NftStandard } from '@core/nfts/enums' +import { BASE_TOKEN_ID } from '@core/token' +import { TokenStandard } from '@core/token/enums' +import { HEX_PREFIX } from '@core/utils' + +export function getSmartContractDataFromBlockscoutTransaction( + blockscoutTransaction: IBlockscoutTransaction, + evmNetwork: IEvmNetwork +): { type; method; inputs; baseTokenTransfer; tokenTransfer } { + let type = EvmActivityType.ContractCall + let method: string | undefined + let inputs: IParsedInput[] | undefined + let baseTokenTransfer: + | { + tokenId: string + rawAmount: bigint + } + | undefined + let tokenTransfer: + | { + standard: TokenStandard.Erc20 | TokenStandard.Irc30 | NftStandard.Irc27 | NftStandard.Erc721 + tokenId: string + rawAmount: bigint + } + | undefined + + if (blockscoutTransaction.decoded_input) { + // if decoded input is available we know the method and parameters and contract is verified + const { method_id, method_call, parameters } = blockscoutTransaction.decoded_input + method = blockscoutTransaction.method + inputs = parameters + + if (!getMethodFromRegistry(HEX_PREFIX + method_id)) { + const fourBytePrefix = HEX_PREFIX + method_id + addMethodToRegistry(fourBytePrefix, method_call) + } + } else if (blockscoutTransaction?.raw_input) { + const parsedData = parseSmartContractDataFromTransactionData( + { + to: blockscoutTransaction.to.hash.toLowerCase(), + data: blockscoutTransaction.raw_input, + value: blockscoutTransaction.value, + }, + evmNetwork + ) + method = parsedData?.parsedMethod?.name + inputs = parsedData?.parsedMethod?.inputs + + switch (parsedData?.type) { + case ParsedSmartContractType.CoinTransfer: + type = EvmActivityType.CoinTransfer + baseTokenTransfer = { + tokenId: BASE_TOKEN_ID, + rawAmount: parsedData.rawAmount, + } + break + case ParsedSmartContractType.TokenTransfer: + type = EvmActivityType.TokenTransfer + + tokenTransfer = { + standard: parsedData.standard, + tokenId: parsedData.tokenId, + rawAmount: parsedData.rawAmount, + } + break + case ParsedSmartContractType.NftTransfer: + type = EvmActivityType.TokenTransfer + + tokenTransfer = { + standard: parsedData.standard, + tokenId: parsedData.nftId, + rawAmount: BigInt(1), + } + break + case ParsedSmartContractType.SmartContract: + type = EvmActivityType.ContractCall + break + } + } + + return { type, method, inputs, baseTokenTransfer, tokenTransfer } +} diff --git a/packages/shared/src/lib/core/layer-2/enums/index.ts b/packages/shared/src/lib/core/layer-2/enums/index.ts index 78dca2154e..3a133f5864 100644 --- a/packages/shared/src/lib/core/layer-2/enums/index.ts +++ b/packages/shared/src/lib/core/layer-2/enums/index.ts @@ -4,4 +4,5 @@ export * from './asset-type.enum' export * from './contract-type.enum' export * from './erc721-interface-id.enum' export * from './evm-error-message.enum' +export * from './parsed-smart-contract-type.enum' export * from './state-mutability-type.enum' diff --git a/packages/shared/src/lib/core/layer-2/enums/parsed-smart-contract-type.enum.ts b/packages/shared/src/lib/core/layer-2/enums/parsed-smart-contract-type.enum.ts new file mode 100644 index 0000000000..708a8ec94b --- /dev/null +++ b/packages/shared/src/lib/core/layer-2/enums/parsed-smart-contract-type.enum.ts @@ -0,0 +1,6 @@ +export enum ParsedSmartContractType { + CoinTransfer, + TokenTransfer, + NftTransfer, + SmartContract, +} diff --git a/packages/shared/src/lib/core/layer-2/interfaces/erc20-transfer-method-inputs.interface.ts b/packages/shared/src/lib/core/layer-2/interfaces/erc20-transfer-method-inputs.interface.ts index 2cd6af7e80..527bf6aede 100644 --- a/packages/shared/src/lib/core/layer-2/interfaces/erc20-transfer-method-inputs.interface.ts +++ b/packages/shared/src/lib/core/layer-2/interfaces/erc20-transfer-method-inputs.interface.ts @@ -1,4 +1,12 @@ export interface Erc20TransferMethodInputs { - _to: string - _value: string + _to: { + name: string + type: string + value: string + } + _value: { + name: string + type: string + value: string + } } diff --git a/packages/shared/src/lib/core/layer-2/interfaces/erc721-safe-transfer-method-inputs.interface.ts b/packages/shared/src/lib/core/layer-2/interfaces/erc721-safe-transfer-method-inputs.interface.ts index 33dbaa3645..6a455e2430 100644 --- a/packages/shared/src/lib/core/layer-2/interfaces/erc721-safe-transfer-method-inputs.interface.ts +++ b/packages/shared/src/lib/core/layer-2/interfaces/erc721-safe-transfer-method-inputs.interface.ts @@ -1,6 +1,22 @@ export interface Erc721SafeTransferMethodInputs { - from: string - to: string - tokenId: string - data?: string + from: { + name: string + type: string + value: string + } + to: { + name: string + type: string + value: string + } + tokenId: { + name: string + type: string + value: string + } + data?: { + name: string + type: string + value: string + } } diff --git a/packages/shared/src/lib/core/layer-2/interfaces/index.ts b/packages/shared/src/lib/core/layer-2/interfaces/index.ts index 381d338829..3331d84235 100644 --- a/packages/shared/src/lib/core/layer-2/interfaces/index.ts +++ b/packages/shared/src/lib/core/layer-2/interfaces/index.ts @@ -16,3 +16,4 @@ export * from './layer-2-smart-contract-call-data.interface' export * from './layer-2-target-address-parameter.interface' export * from './layer-2-transfer-allowance-metadata.interface' export * from './native-token-amount.interface' +export * from './parsed-contract-data.interface' diff --git a/packages/shared/src/lib/core/layer-2/interfaces/isc-call-method-inputs.interface.ts b/packages/shared/src/lib/core/layer-2/interfaces/isc-call-method-inputs.interface.ts index 8c20797410..d3ee7f6b8f 100644 --- a/packages/shared/src/lib/core/layer-2/interfaces/isc-call-method-inputs.interface.ts +++ b/packages/shared/src/lib/core/layer-2/interfaces/isc-call-method-inputs.interface.ts @@ -1,20 +1,36 @@ export interface IscCallMethodInputs { - contractHname: string - entryPoint: string + contractHname: { + name: string + type: string + value: string + } + entryPoint: { + name: string + type: string + value: string + } params: { - items: { - key: string - value: string - }[] + name: string + type: string + value: { + items: { + key: string + value: string + }[] + } } allowance: { - baseTokens: string - nativeTokens: { - ID: { - data: string - } - amount: string - }[] - nfts: string[] + name: string + type: string + value: { + baseTokens: string + nativeTokens: { + ID: { + data: string + } + amount: string + }[] + nfts: string[] + } } } diff --git a/packages/shared/src/lib/core/layer-2/interfaces/isc-send-method-inputs.interface.ts b/packages/shared/src/lib/core/layer-2/interfaces/isc-send-method-inputs.interface.ts index 8cffd081a7..1384ee1705 100644 --- a/packages/shared/src/lib/core/layer-2/interfaces/isc-send-method-inputs.interface.ts +++ b/packages/shared/src/lib/core/layer-2/interfaces/isc-send-method-inputs.interface.ts @@ -3,24 +3,16 @@ import { ILayer2SendOptionsParameter } from './layer-2-send-options-parameter.in export interface IscSendMethodInputs { targetAddress: { - data: string + name: string + type: string + value: { + data: string + } } assets: { - baseTokens: string - nativeTokens: { - ID: { - data: string - } - amount: string - }[] - nfts: string[] - } - adjustMinimumStorageDeposit: boolean - metadata: { - targetContract: number - entrypoint: number - params: ILayer2SendMetadataParameterParameters[] - allowance: { + name: string + type: string + value: { baseTokens: string nativeTokens: { ID: { @@ -30,7 +22,31 @@ export interface IscSendMethodInputs { }[] nfts: string[] } - gasBudget: number } - sendOptions: ILayer2SendOptionsParameter + adjustMinimumStorageDeposit: boolean + metadata: { + name: string + type: string + value: { + targetContract: number + entrypoint: number + params: ILayer2SendMetadataParameterParameters[] + allowance: { + baseTokens: string + nativeTokens: { + ID: { + data: string + } + amount: string + }[] + nfts: string[] + } + gasBudget: number + } + } + sendOptions: { + name: string + type: string + value: ILayer2SendOptionsParameter + } } diff --git a/packages/shared/src/lib/core/layer-2/interfaces/parsed-contract-data.interface.ts b/packages/shared/src/lib/core/layer-2/interfaces/parsed-contract-data.interface.ts new file mode 100644 index 0000000000..a134c4cb6e --- /dev/null +++ b/packages/shared/src/lib/core/layer-2/interfaces/parsed-contract-data.interface.ts @@ -0,0 +1,40 @@ +import { TokenStandard } from '@core/token' +import { ParsedSmartContractType } from '../enums' +import { NftStandard } from '@core/nfts' + +export interface IParsedCoinTransfer extends Omit { + type: ParsedSmartContractType.CoinTransfer + rawAmount: bigint +} + +export interface IParsedTokenTransfer extends Omit { + type: ParsedSmartContractType.TokenTransfer + standard: TokenStandard.Erc20 | TokenStandard.Irc30 + tokenId: string + rawAmount: bigint +} + +export interface IParsedNftTransfer extends Omit { + type: ParsedSmartContractType.NftTransfer + standard: NftStandard.Erc721 | NftStandard.Irc27 + nftId: string +} + +export interface IParsedSmartContractData { + type: ParsedSmartContractType.SmartContract + rawMethod: string + parsedMethod?: IParsedMethod + additionalBaseTokenAmount?: bigint + recipientAddress: string +} + +export interface IParsedMethod { + name: string + inputs: IParsedInput[] +} + +export interface IParsedInput { + name: string + type: string + value: unknown +} diff --git a/packages/shared/src/lib/core/layer-2/types/parsed-smart-contract-data.type.ts b/packages/shared/src/lib/core/layer-2/types/parsed-smart-contract-data.type.ts new file mode 100644 index 0000000000..acf63a00de --- /dev/null +++ b/packages/shared/src/lib/core/layer-2/types/parsed-smart-contract-data.type.ts @@ -0,0 +1,12 @@ +import { + IParsedCoinTransfer, + IParsedNftTransfer, + IParsedSmartContractData, + IParsedTokenTransfer, +} from '../interfaces/parsed-contract-data.interface' + +export type ParsedSmartContractData = + | IParsedCoinTransfer + | IParsedTokenTransfer + | IParsedNftTransfer + | IParsedSmartContractData diff --git a/packages/shared/src/lib/core/layer-2/utils/getMethodForEvmTransaction.ts b/packages/shared/src/lib/core/layer-2/utils/getMethodForEvmTransaction.ts deleted file mode 100644 index 99e18cc61e..0000000000 --- a/packages/shared/src/lib/core/layer-2/utils/getMethodForEvmTransaction.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { lookupMethodSignature } from './lookupMethodSignature' - -export function getMethodForEvmTransaction(rawData: string): [string, Record] | undefined { - const fourBytePrefix = rawData.substring(0, 10) - try { - const result = lookupMethodSignature(fourBytePrefix) - if (!result) { - throw Error('Method could not be found!') - } - - const matches = /(\w+)\((.*)\)$/.exec(result) - if (!matches) { - throw Error('Method signature could not be parsed!') - } - - const name = matches[1] - const parametersArr = matches[2] ?? '' - - const parameters: Record = parametersArr.split(',').reduce( - (acc, type, index) => { - acc[`param${index}`] = type - return acc - }, - {} as Record - ) - - return [name, parameters] - } catch (error) { - return undefined - } -} diff --git a/packages/shared/src/lib/core/layer-2/utils/getTransferInfoFromTransactionData.ts b/packages/shared/src/lib/core/layer-2/utils/getTransferInfoFromTransactionData.ts deleted file mode 100644 index 7e28ae3ae1..0000000000 --- a/packages/shared/src/lib/core/layer-2/utils/getTransferInfoFromTransactionData.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { StardustActivityType } from '@core/activity' -import { IEvmNetwork, isIscNetwork } from '@core/network' -import { BASE_TOKEN_ID } from '@core/token/constants' -import { LocalEvmTransaction } from '@core/transactions' -import { AbiDecoder, Converter, HEX_PREFIX } from '@core/utils' -import { isTrackedNftAddress, isTrackedTokenAddress } from '@core/wallet/actions' -import { ERC20_ABI, ERC721_ABI, ISC_SANDBOX_ABI } from '../abis' -import { ISC_MAGIC_CONTRACT_ADDRESS } from '../constants' -import { - Erc20TransferMethodInputs, - Erc721SafeTransferMethodInputs, - IscCallMethodInputs, - IscSendMethodInputs, -} from '../interfaces' - -type TransferInfo = - | { - type: StardustActivityType.Basic - tokenId: string - rawAmount: bigint - additionalBaseTokenAmount?: bigint - recipientAddress: string - } - | { type: StardustActivityType.Nft; nftId: string; additionalBaseTokenAmount?: bigint; recipientAddress: string } - | { type: StardustActivityType.SmartContract; recipientAddress: string } - -export function getTransferInfoFromTransactionData( - transaction: LocalEvmTransaction, - evmNetwork: IEvmNetwork -): TransferInfo | undefined { - const recipientAddress = transaction?.to?.toString()?.toLowerCase() - if (!recipientAddress) { - return undefined - } - - if (transaction.data) { - const isErc20 = isTrackedTokenAddress(evmNetwork.id, recipientAddress) - const isErc721 = isTrackedNftAddress(evmNetwork.id, recipientAddress) - const isIscContract = recipientAddress === ISC_MAGIC_CONTRACT_ADDRESS - - const abi = isErc721 ? ERC721_ABI : isErc20 ? ERC20_ABI : isIscContract ? ISC_SANDBOX_ABI : undefined - - if (!abi) { - return { type: StardustActivityType.SmartContract, recipientAddress } - } - - const abiDecoder = new AbiDecoder(abi, evmNetwork.provider) - const decoded = abiDecoder.decodeData(transaction.data as string) - - switch (decoded?.name) { - case 'call': { - if (!isIscNetwork(evmNetwork)) { - return { type: StardustActivityType.SmartContract, recipientAddress } - } - - const inputs = decoded.inputs as IscCallMethodInputs - const nativeToken = inputs?.allowance?.nativeTokens?.[0] - const nftId = inputs?.allowance?.nfts?.[0] - const agentId = inputs?.params.items?.find((item) => item.key === '0x61')?.value - - if (nativeToken) { - const rawAmount = - nativeToken.ID.data === BASE_TOKEN_ID - ? evmNetwork.denormaliseAmount(nativeToken.amount) - : BigInt(nativeToken.amount) - return { - type: StardustActivityType.Basic, - tokenId: nativeToken.ID.data, - rawAmount, - recipientAddress: HEX_PREFIX + agentId?.substring(agentId.length - 40), - } - } else if (nftId) { - return { - type: StardustActivityType.Nft, - nftId, - recipientAddress: HEX_PREFIX + agentId?.substring(agentId.length - 40), - } - } else { - return { type: StardustActivityType.SmartContract, recipientAddress } - } - } - case 'transfer': { - const inputs = decoded.inputs as Erc20TransferMethodInputs - - return { - type: StardustActivityType.Basic, - tokenId: recipientAddress, - rawAmount: BigInt(inputs._value), - recipientAddress: inputs._to, - } - } - case 'safeTransferFrom': { - const inputs = decoded.inputs as Erc721SafeTransferMethodInputs - - return { - type: StardustActivityType.Nft, - nftId: `${recipientAddress.toLowerCase()}:${inputs.tokenId}`, - recipientAddress: inputs.to, - } - } - case 'send': { - if (!isIscNetwork(evmNetwork)) { - return { type: StardustActivityType.SmartContract, recipientAddress } - } - - const inputs = decoded.inputs as IscSendMethodInputs - const nativeToken = inputs?.assets?.nativeTokens?.[0] - const nftId = inputs?.assets?.nfts?.[0] - const baseTokenAmount = BigInt(inputs.assets.baseTokens) - - if (nativeToken) { - return { - type: StardustActivityType.Basic, - tokenId: nativeToken.ID.data, - rawAmount: BigInt(nativeToken.amount), - additionalBaseTokenAmount: baseTokenAmount, - recipientAddress, // for now, set it to the magic contract address - } - } - if (nftId) { - return { - type: StardustActivityType.Nft, - nftId, - additionalBaseTokenAmount: baseTokenAmount, - recipientAddress, // for now, set it to the magic contract address - } - } else if (baseTokenAmount) { - return { - type: StardustActivityType.Basic, - tokenId: BASE_TOKEN_ID, - rawAmount: evmNetwork.denormaliseAmount(baseTokenAmount), - recipientAddress, // for now, set it to the magic contract address - } - } - - return { type: StardustActivityType.SmartContract, recipientAddress } - } - default: - return { type: StardustActivityType.SmartContract, recipientAddress } - } - } else { - return { - type: StardustActivityType.Basic, - tokenId: BASE_TOKEN_ID, - rawAmount: Converter.bigIntLikeToBigInt(transaction.value ?? 0), - recipientAddress, - } - } -} diff --git a/packages/shared/src/lib/core/layer-2/utils/index.ts b/packages/shared/src/lib/core/layer-2/utils/index.ts index 5626117f9f..57d6d77d33 100644 --- a/packages/shared/src/lib/core/layer-2/utils/index.ts +++ b/packages/shared/src/lib/core/layer-2/utils/index.ts @@ -11,12 +11,12 @@ export * from './getErc20TransferSmartContractData' export * from './getErc721TransferSmartContractData' export * from './getEvmTransactionFromHexString' export * from './getHexEncodedTransaction' -export * from './getMethodForEvmTransaction' export * from './getL2ToL1StorageDepositBuffer' export * from './isErcAsset' export * from './lookupMethodSignature' export * from './parseLayer2Metadata' export * from './parseLayer2MetadataForTransfer' export * from './parseSiweMessage' +export * from './parseSmartContractDataFromTransactionData' export * from './prepareEvmTransaction' export * from './validateSiwe' diff --git a/packages/shared/src/lib/core/layer-2/utils/parseSmartContractDataFromTransactionData.ts b/packages/shared/src/lib/core/layer-2/utils/parseSmartContractDataFromTransactionData.ts new file mode 100644 index 0000000000..d67542176b --- /dev/null +++ b/packages/shared/src/lib/core/layer-2/utils/parseSmartContractDataFromTransactionData.ts @@ -0,0 +1,281 @@ +import { IEvmNetwork, isIscNetwork } from '@core/network' +import { BASE_TOKEN_ID } from '@core/token/constants' +import { AbiDecoder, HEX_PREFIX } from '@core/utils' +import { isTrackedNftAddress, isTrackedTokenAddress } from '@core/wallet/actions' +import { ERC20_ABI, ERC721_ABI, ISC_SANDBOX_ABI } from '../abis' +import { ISC_BASE_COIN_ADDRESS, ISC_MAGIC_CONTRACT_ADDRESS } from '../constants' +import { + Erc20TransferMethodInputs, + Erc721SafeTransferMethodInputs, + IscCallMethodInputs, + IscSendMethodInputs, + IParsedMethod, + IParsedInput, +} from '../interfaces' +import { BigIntLike, BytesLike } from '@ethereumjs/util' +import { lookupMethodSignature } from './lookupMethodSignature' +import { ParsedSmartContractData } from '../types/parsed-smart-contract-data.type' +import { ParsedSmartContractType } from '../enums' +import { TokenStandard } from '@core/token' +import { NftStandard } from '@core/nfts' + +export function parseSmartContractDataFromTransactionData( + transaction: { to?: string; data: BytesLike; value?: BigIntLike }, + evmNetwork: IEvmNetwork +): ParsedSmartContractData | undefined { + const recipientAddress = transaction?.to?.toLowerCase() + if (!recipientAddress) { + return undefined + } + + const rawData = transaction.data as string + const isErc20 = isTrackedTokenAddress(evmNetwork.id, recipientAddress) || recipientAddress === ISC_BASE_COIN_ADDRESS + const isErc721 = isTrackedNftAddress(evmNetwork.id, recipientAddress) + const isIscContract = recipientAddress === ISC_MAGIC_CONTRACT_ADDRESS + + let parsedData + if (isIscContract) { + parsedData = parseSmartContractDataWithIscMagicAbi(evmNetwork, rawData, recipientAddress) + } else if (isErc20) { + parsedData = parseSmartContractDataWithErc20Abi(evmNetwork, rawData, recipientAddress) + } else if (isErc721) { + parsedData = parseSmartContractDataWithErc721Abi(evmNetwork, rawData, recipientAddress) + } + + return parsedData ?? parseSmartContractDataWithMethodRegistry(rawData, recipientAddress) +} + +function parseSmartContractDataWithIscMagicAbi( + network: IEvmNetwork, + data: string, + recipientAddress: string +): ParsedSmartContractData | undefined { + const iscMagicDecoder = new AbiDecoder(ISC_SANDBOX_ABI, network.provider) + const decodedData = iscMagicDecoder.decodeData(data) // TODO: Type this return + + if (!decodedData) { + return undefined + } + + const rawMethod = data.substring(0, 10) + const parsedMethod: IParsedMethod = { + name: decodedData.name, + inputs: Object.values(decodedData.inputs), + } + + switch (decodedData.name) { + case 'call': { + if (!isIscNetwork(network)) { + return undefined + } + + const inputs = decodedData.inputs as unknown as IscCallMethodInputs + const nativeToken = inputs?.allowance?.value?.nativeTokens?.[0] + const nftId = inputs?.allowance?.value?.nfts?.[0] + const agentId = inputs?.params?.value.items?.find((item) => item.key === '0x61')?.value + + if (nativeToken) { + const rawAmount = + nativeToken.ID.data === BASE_TOKEN_ID + ? network.denormaliseAmount(nativeToken.amount) + : BigInt(nativeToken.amount) + return { + type: ParsedSmartContractType.TokenTransfer, + standard: TokenStandard.Irc30, + tokenId: nativeToken.ID.data, + rawAmount, + parsedMethod, + rawMethod, + recipientAddress: HEX_PREFIX + agentId?.substring(agentId.length - 40), + } + } else if (nftId) { + return { + type: ParsedSmartContractType.NftTransfer, + standard: NftStandard.Irc27, + nftId, + parsedMethod, + rawMethod, + recipientAddress: HEX_PREFIX + agentId?.substring(agentId.length - 40), + } + } else { + return { type: ParsedSmartContractType.SmartContract, recipientAddress, rawMethod, parsedMethod } + } + } + case 'send': { + if (!isIscNetwork(network)) { + return undefined + } + + const inputs = decodedData.inputs as unknown as IscSendMethodInputs + const assets = inputs.assets?.value + + const nativeToken = assets?.nativeTokens?.[0] + const nftId = assets?.nfts?.[0] + const baseTokenAmount = BigInt(assets?.baseTokens ?? 0) + + if (nativeToken) { + return { + type: ParsedSmartContractType.TokenTransfer, + standard: TokenStandard.Irc30, + tokenId: nativeToken.ID.data, + rawAmount: BigInt(nativeToken.amount), + rawMethod, + parsedMethod, + additionalBaseTokenAmount: baseTokenAmount, + recipientAddress, // for now, set it to the magic contract address + } + } + if (nftId) { + return { + type: ParsedSmartContractType.NftTransfer, + standard: NftStandard.Irc27, + nftId, + rawMethod, + parsedMethod, + additionalBaseTokenAmount: baseTokenAmount, + recipientAddress, // for now, set it to the magic contract address + } + } else if (baseTokenAmount) { + return { + type: ParsedSmartContractType.CoinTransfer, + rawAmount: network.denormaliseAmount(baseTokenAmount), + rawMethod, + parsedMethod, + recipientAddress, // for now, set it to the magic contract address + } + } + + return { type: ParsedSmartContractType.SmartContract, recipientAddress, rawMethod, parsedMethod } + } + default: + return { type: ParsedSmartContractType.SmartContract, recipientAddress, rawMethod, parsedMethod } + } +} + +function parseSmartContractDataWithErc20Abi( + network: IEvmNetwork, + data: string, + recipientAddress: string +): ParsedSmartContractData | undefined { + const erc20Decoder = new AbiDecoder(ERC20_ABI, network.provider) + const decodedData = erc20Decoder.decodeData(data) // TODO: Type this return + + if (!decodedData) { + return undefined + } + + const rawMethod = data.substring(0, 10) + const parsedMethod: IParsedMethod = { + name: decodedData.name, + inputs: Object.values(decodedData.inputs), + } + + switch (decodedData.name) { + case 'transfer': { + const inputs = decodedData.inputs as unknown as Erc20TransferMethodInputs + + return { + type: ParsedSmartContractType.TokenTransfer, + standard: TokenStandard.Erc20, + tokenId: recipientAddress, + rawAmount: BigInt(inputs._value.value), + rawMethod, + parsedMethod, + recipientAddress: inputs._to.value, + } + } + // TODO: Support more ERC20 methods + default: { + return { + type: ParsedSmartContractType.SmartContract, + rawMethod, + parsedMethod, + recipientAddress, + } + } + } +} + +function parseSmartContractDataWithErc721Abi( + network: IEvmNetwork, + data: string, + recipientAddress: string +): ParsedSmartContractData | undefined { + const erc721Decoder = new AbiDecoder(ERC721_ABI, network.provider) + const decodedData = erc721Decoder.decodeData(data) // TODO: Type this return + + if (!decodedData) { + return undefined + } + + const rawMethod = data.substring(0, 10) + const parsedMethod: IParsedMethod = { + name: decodedData.name, + inputs: Object.values(decodedData.inputs), + } + + switch (decodedData.name) { + case 'safeTransferFrom': { + // Enum? + const inputs = decodedData.inputs as unknown as Erc721SafeTransferMethodInputs + + return { + type: ParsedSmartContractType.NftTransfer, + standard: NftStandard.Erc721, + nftId: `${recipientAddress}:${inputs.tokenId.value}`, + rawMethod, + parsedMethod, + recipientAddress: inputs.to.value, + } + } + // TODO: support more ERC721 methods + default: { + return { + type: ParsedSmartContractType.SmartContract, + recipientAddress, + rawMethod, + parsedMethod, + } + } + } +} + +function parseSmartContractDataWithMethodRegistry( + rawData: string, + recipientAddress: string +): ParsedSmartContractData | undefined { + const fourBytePrefix = rawData.substring(0, 10) + try { + const result = lookupMethodSignature(fourBytePrefix) + if (!result) { + throw Error('Method could not be found!') + } + + const matches = /(\w+)\((.*)\)$/.exec(result) + if (!matches) { + throw Error('Method signature could not be parsed!') + } + + const name = matches[1] + const inputsArr = matches[2] ?? '' + const inputs: IParsedInput[] = inputsArr.split(',').map((param, index) => { + // Method registry can either contain just `uint64` or `uint64 amount` + const [type, name] = param.trim().split(' ') + + return { + name: name ?? `param${index + 1}`, + type, + value: undefined, + } + }) + + return { + type: ParsedSmartContractType.SmartContract, + recipientAddress, + rawMethod: fourBytePrefix, + parsedMethod: { name, inputs }, + } + } catch (error) { + return undefined + } +} diff --git a/packages/shared/src/lib/core/network/classes/isc-chain.class.ts b/packages/shared/src/lib/core/network/classes/isc-chain.class.ts index 9320fedc05..42d0ab73f0 100644 --- a/packages/shared/src/lib/core/network/classes/isc-chain.class.ts +++ b/packages/shared/src/lib/core/network/classes/isc-chain.class.ts @@ -1,10 +1,10 @@ // Potential circular import so importing this first import { EvmNetwork } from './evm-network.class' - +// REQUIRED GAP FOR CIRCULAR IMPORTS ABOVE import { IAccountState } from '@core/account/interfaces' -import { StardustActivityType } from '@core/activity/enums' +import { ParsedSmartContractType } from '@core/layer-2' import { fetchIscAssetsForAccount } from '@core/layer-2/utils' -import { getTransferInfoFromTransactionData } from '@core/layer-2/utils/getTransferInfoFromTransactionData' +import { parseSmartContractDataFromTransactionData } from '@core/layer-2/utils/parseSmartContractDataFromTransactionData' import { NetworkType } from '@core/network/enums' import { Nft } from '@core/nfts/interfaces' import { getNftsFromNftIds } from '@core/nfts/utils' @@ -14,6 +14,7 @@ import { getPersistedTransactionsForChain } from '@core/transactions/stores' import { Converter } from '@core/utils' import { BigIntLike } from '@ethereumjs/util' import { IIscChain, IIscChainConfiguration, IIscChainMetadata } from '../interfaces' +import { NftStandard } from '@core/nfts/enums' export class IscChain extends EvmNetwork implements IIscChain { private readonly _chainApi: string @@ -54,19 +55,21 @@ export class IscChain extends EvmNetwork implements IIscChain { // Wrapped L1 IRC NFTs const transactionsOnChain = getPersistedTransactionsForChain(getActiveProfileId(), account.index, this) - const nftIdsOnChain: string[] = [] + const ircNftsIds: string[] = [] for (const transaction of transactionsOnChain) { - if (!transaction.local) { - continue - } - const transferInfo = getTransferInfoFromTransactionData(transaction.local, this) - if (transferInfo?.type !== StardustActivityType.Nft || transferInfo.nftId.includes(':')) { + if (!transaction.local || !transaction.local.data) { continue } + const parsedData = parseSmartContractDataFromTransactionData( + { to: transaction.local.to, data: transaction.local.data, value: transaction.local.value }, + this + ) - nftIdsOnChain.push(transferInfo.nftId) + if (parsedData?.type === ParsedSmartContractType.NftTransfer && parsedData.standard === NftStandard.Irc27) { + ircNftsIds.push(parsedData.nftId) + } } - const ircNfts = await getNftsFromNftIds(nftIdsOnChain, this.id) + const ircNfts = await getNftsFromNftIds(ircNftsIds, this.id) return [...ircNfts, ...erc721Nfts] } diff --git a/packages/shared/src/lib/core/utils/abiDecoder.ts b/packages/shared/src/lib/core/utils/abiDecoder.ts index 2df9ffa64c..b20048e8f0 100644 --- a/packages/shared/src/lib/core/utils/abiDecoder.ts +++ b/packages/shared/src/lib/core/utils/abiDecoder.ts @@ -25,7 +25,19 @@ export class AbiDecoder { this.web3 = _web3 } - public decodeData(data: string): { name: string; inputs: unknown } | undefined { + public decodeData(data: string): + | { + name: string + inputs: Record< + string, + { + name: string + type: string + value: unknown + } + > + } + | undefined { const functionSignature = data.slice(2, 10) const abiItem = this.abi[functionSignature] @@ -35,7 +47,13 @@ export class AbiDecoder { const decoded = this.web3.eth.abi.decodeParameters(abiItem.inputs ?? [], data.slice(10)) - const inputs: { [key: string]: unknown } = {} + const inputs: { + [key: string]: { + name: string + type: string + value: unknown + } + } = {} for (let i = 0; i < decoded.__length__; i++) { const dataInput = decoded[i] const abiInput = abiItem.inputs?.[i] @@ -45,7 +63,11 @@ export class AbiDecoder { } const parsedInput = this.parseInputParameter(abiInput, dataInput) - inputs[abiInput.name] = parsedInput + inputs[abiInput.name] = { + name: abiInput.name, + type: abiInput.type, + value: parsedInput, + } } return { From cfc16f9fa5c7dc8e43a020e055158f1602e37caf Mon Sep 17 00:00:00 2001 From: Tuditi <45079109+Tuditi@users.noreply.github.com> Date: Thu, 16 May 2024 15:44:50 +0200 Subject: [PATCH 2/7] chore: update bloom-ui (#2504) --- packages/shared/package.json | 2 +- yarn.lock | 39 +++++++++++++++++++++++++++++------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/packages/shared/package.json b/packages/shared/package.json index abd2e2972e..7f1c86016d 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -5,7 +5,7 @@ "author": "Bloom Labs Ltd ", "license": "PolyForm Strict License 1.0.0", "dependencies": { - "@bloomwalletio/ui": "0.20.22", + "@bloomwalletio/ui": "0.21.0", "@ethereumjs/common": "4.3.0", "@ethereumjs/rlp": "5.0.2", "@ethereumjs/tx": "5.3.0", diff --git a/yarn.lock b/yarn.lock index f2071551e0..f42da2ece6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -343,10 +343,10 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@bloomwalletio/ui@0.20.22": - version "0.20.22" - resolved "https://npm.pkg.github.com/download/@bloomwalletio/ui/0.20.22/a8f22408fe57db48e02b36208261aa334c479971#a8f22408fe57db48e02b36208261aa334c479971" - integrity sha512-m/+zQGTKVkIxbKxcdZmskz95y+j5nrwyCSIxqzsPJy2GkubhRGTLMyzPQBrWOfxZjTis9ApqF2W/yRLLRKyxXQ== +"@bloomwalletio/ui@0.21.0": + version "0.21.0" + resolved "https://npm.pkg.github.com/download/@bloomwalletio/ui/0.21.0/86d45a11b362f98fe3b0088f6b2e9a30aacbdb5d#86d45a11b362f98fe3b0088f6b2e9a30aacbdb5d" + integrity sha512-fVDfsoeRQwTo/no4HRNBqr8Eqh0hh1i/NeVuH5R94MKvDasb/SzmlfOLiZGwoP/jzaA+g+OoBMXNz2NhKTU/tw== dependencies: "@floating-ui/dom" "1.4.3" "@popperjs/core" "2.11.8" @@ -10645,7 +10645,16 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -10722,7 +10731,14 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -12227,7 +12243,16 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== From 597c987ee785606990fd593d92f1657115f805c8 Mon Sep 17 00:00:00 2001 From: Jean Ribeiro Date: Thu, 16 May 2024 12:53:07 -0300 Subject: [PATCH 3/7] fix: search more than one account (#2502) --- .../desktop/components/popup/popups/SyncAccountsPopup.svelte | 2 +- .../views/restore-profile/views/BalanceFinderView.svelte | 4 ++-- .../default-account-recovery-configuration.constant.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/desktop/components/popup/popups/SyncAccountsPopup.svelte b/packages/desktop/components/popup/popups/SyncAccountsPopup.svelte index fed8ada116..c62141e6c9 100644 --- a/packages/desktop/components/popup/popups/SyncAccountsPopup.svelte +++ b/packages/desktop/components/popup/popups/SyncAccountsPopup.svelte @@ -75,7 +75,7 @@ isDepthSearch = true recoverAccountsPayload = { accountStartIndex: isSingleAccountSearch ? $selectedAccountIndex : accountGapLimit, - accountGapLimit: 0, + accountGapLimit: 1, addressGapLimit: isSingleAccountSearch ? addressGapLimit : (searchCount - depthSearchCount) * addressGapLimit, diff --git a/packages/desktop/views/onboarding/views/restore-profile/views/BalanceFinderView.svelte b/packages/desktop/views/onboarding/views/restore-profile/views/BalanceFinderView.svelte index e347257156..fdc6b09d92 100644 --- a/packages/desktop/views/onboarding/views/restore-profile/views/BalanceFinderView.svelte +++ b/packages/desktop/views/onboarding/views/restore-profile/views/BalanceFinderView.svelte @@ -45,7 +45,7 @@ const recoverAccountsPayload: RecoverAccountsPayload = { accountStartIndex, accountGapLimit, - addressGapLimit: 0, + addressGapLimit: 1, syncOptions: { ...DEFAULT_SYNC_OPTIONS, addressStartIndex: 0 }, } @@ -72,7 +72,7 @@ depthSearch = true recoverAccountsPayload = { accountStartIndex: accountGapLimit, - accountGapLimit: 0, + accountGapLimit: 1, addressGapLimit: (searchCount - depthSearchCount) * addressGapLimit, syncOptions: { ...DEFAULT_SYNC_OPTIONS, addressStartIndex: 0 }, } diff --git a/packages/shared/src/lib/core/profile/constants/default-account-recovery-configuration.constant.ts b/packages/shared/src/lib/core/profile/constants/default-account-recovery-configuration.constant.ts index a40bc12753..0415d50222 100644 --- a/packages/shared/src/lib/core/profile/constants/default-account-recovery-configuration.constant.ts +++ b/packages/shared/src/lib/core/profile/constants/default-account-recovery-configuration.constant.ts @@ -4,13 +4,13 @@ import { AccountRecoveryConfiguration } from '../types' export const DEFAULT_ACCOUNT_RECOVERY_CONFIGURATION: AccountRecoveryConfiguration = { [ProfileType.Ledger]: { initialAccountRange: 3, - accountGapLimit: 0, + accountGapLimit: 1, numberOfRoundsBetweenBreadthSearch: 1, addressGapLimit: 5, }, [ProfileType.Software]: { initialAccountRange: 10, - accountGapLimit: 0, + accountGapLimit: 1, numberOfRoundsBetweenBreadthSearch: 1, addressGapLimit: 100, }, From adbfdc0022b4fe99a26638fc5a21ec8576d5b912 Mon Sep 17 00:00:00 2001 From: Nicole O'Brien Date: Fri, 17 May 2024 00:41:47 +0100 Subject: [PATCH 4/7] fix: campaigns leaderboards not showing (#2508) --- .../views/dashboard/campaigns/views/CampaignsGalleryView.svelte | 2 +- packages/shared/src/lib/core/tide/apis/tide.api.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/desktop/views/dashboard/campaigns/views/CampaignsGalleryView.svelte b/packages/desktop/views/dashboard/campaigns/views/CampaignsGalleryView.svelte index d60c5e194a..5fe72d3d9f 100644 --- a/packages/desktop/views/dashboard/campaigns/views/CampaignsGalleryView.svelte +++ b/packages/desktop/views/dashboard/campaigns/views/CampaignsGalleryView.svelte @@ -80,7 +80,7 @@ startTime: campaign.startTime, endTime: campaign.endTime, url: campaign.url, - chainId: campaign.evmNetwork, + chainId: campaign.chain, listingStatus: campaign.listingStatus, ERC20Reward: campaign.ERC20Reward, } as ICampaign diff --git a/packages/shared/src/lib/core/tide/apis/tide.api.ts b/packages/shared/src/lib/core/tide/apis/tide.api.ts index 2ee4bb9f41..db38008450 100644 --- a/packages/shared/src/lib/core/tide/apis/tide.api.ts +++ b/packages/shared/src/lib/core/tide/apis/tide.api.ts @@ -32,6 +32,7 @@ interface ICampaignsResponse { startTime: string endTime: string address: string + chain: number url: string evmNetwork: number projectId: number From 08d26d5bf8b7a62b32b4bcf5b55385647523d35d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 May 2024 11:33:07 +0200 Subject: [PATCH 5/7] Generated diff for 2024-05-17 (#2510) Co-authored-by: GitHub Actions --- firefly.diff | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/firefly.diff b/firefly.diff index ddfdd8c360..ae40a76865 100644 --- a/firefly.diff +++ b/firefly.diff @@ -71,6 +71,7 @@ delete mode 100644 packages/desktop/components/buttons/index.js delete mode 100644 packages/desktop/components/buttons/menu-buttons/AccountActionsButton.svelte delete mode 100644 packages/desktop/components/buttons/menu-buttons/index.js + delete mode 100644 packages/desktop/components/buttons/popup-buttons/FaucetRequestButton.svelte delete mode 100644 packages/desktop/components/buttons/popup-buttons/ImportErc20TokenButton.svelte delete mode 100644 packages/desktop/components/buttons/popup-buttons/RefreshTokenMetadataButton.svelte delete mode 100644 packages/desktop/components/drawers/network-config/NetworkConfigDrawerRouter.svelte @@ -189,7 +190,6 @@ rename packages/desktop/views/dashboard/collectibles/{index.js => index.ts} (100%) rename packages/desktop/views/dashboard/collectibles/views/{index.js => index.ts} (67%) rename packages/desktop/{components/buttons/popup-buttons => views/dashboard/developer/components}/CreateAliasButton.svelte (74%) - rename packages/desktop/{components/buttons/popup-buttons => views/dashboard/developer/components}/FaucetRequestButton.svelte (69%) rename packages/desktop/{components/buttons/popup-buttons => views/dashboard/developer/components}/MintNativeTokenButton.svelte (76%) rename packages/desktop/{components/buttons/popup-buttons => views/dashboard/developer/components}/MintNftButton.svelte (72%) rename packages/desktop/{components/buttons/popup-buttons => views/dashboard/developer/components}/TestDeepLinkButton.svelte (72%) @@ -1104,6 +1104,7 @@ delete mode 100644 packages/shared/lib/core/layer-2/constants/gas-multiplier.constant.ts delete mode 100644 packages/shared/lib/core/layer-2/enums/allowance.enum.ts delete mode 100644 packages/shared/lib/core/layer-2/enums/destination-network.enum.ts + delete mode 100644 packages/shared/lib/core/layer-2/enums/index.ts delete mode 100644 packages/shared/lib/core/layer-2/helpers/encodeAddress.ts delete mode 100644 packages/shared/lib/core/layer-2/helpers/encodeAssetAllowance.ts delete mode 100644 packages/shared/lib/core/layer-2/helpers/encodeSmartContractParameters.ts @@ -1164,6 +1165,7 @@ delete mode 100644 packages/shared/lib/core/market/utils/index.ts delete mode 100644 packages/shared/lib/core/network/actions/addOfficialNodesToClientOptions.ts delete mode 100644 packages/shared/lib/core/network/actions/chain-polling.ts + delete mode 100644 packages/shared/lib/core/network/actions/getAndUpdateNodeInfo.ts delete mode 100644 packages/shared/lib/core/network/actions/network-polling.ts delete mode 100644 packages/shared/lib/core/network/actions/showNetworkIssueNotification.ts delete mode 100644 packages/shared/lib/core/network/actions/toggleDisabledNodeInClientOptions.ts @@ -1204,6 +1206,7 @@ delete mode 100644 packages/shared/lib/core/network/stores/index.ts delete mode 100644 packages/shared/lib/core/network/stores/network-status.store.ts delete mode 100644 packages/shared/lib/core/network/stores/network.store.ts + delete mode 100644 packages/shared/lib/core/network/stores/node-info.store.ts delete mode 100644 packages/shared/lib/core/network/stores/selected-chain.store.ts delete mode 100644 packages/shared/lib/core/network/tests/network.test.ts delete mode 100644 packages/shared/lib/core/network/types/chain-configuration.type.ts @@ -1281,6 +1284,7 @@ delete mode 100644 packages/shared/lib/core/profile-manager/utils/validateWalletApiEvent.ts delete mode 100644 packages/shared/lib/core/profile/actions/active-accounts/findActiveAccountWithAddress.ts delete mode 100644 packages/shared/lib/core/profile/actions/active-profile/checkActiveProfileAuth.ts + delete mode 100644 packages/shared/lib/core/profile/actions/active-profile/checkAndUpdateActiveProfileNetwork.ts delete mode 100644 packages/shared/lib/core/profile/actions/active-profile/getCoinType.ts delete mode 100644 packages/shared/lib/core/profile/actions/active-profile/login.ts delete mode 100644 packages/shared/lib/core/profile/actions/active-profile/setActiveProfile.ts @@ -1301,6 +1305,8 @@ delete mode 100644 packages/shared/lib/core/router/enums/onboarding/storage-protection-setup-route.enum.ts delete mode 100644 packages/shared/lib/core/router/enums/onboarding/stronghold-setup-route.enum.ts delete mode 100644 packages/shared/lib/core/router/enums/settings/network-settings-route.enum.ts + delete mode 100644 packages/shared/lib/core/router/interfaces/router-event.interface.ts + delete mode 100644 packages/shared/lib/core/router/routers/app-router.ts delete mode 100644 packages/shared/lib/core/router/routers/collectibles-router.ts delete mode 100644 packages/shared/lib/core/router/routers/governance-router.ts delete mode 100644 packages/shared/lib/core/router/types/router-manager-extension-function.type.ts @@ -1491,7 +1497,7 @@ rename packages/shared/{components/atoms/iconButtons/index.js => src/components/iconButtons/index.ts} (100%) rename packages/shared/{ => src}/components/inputs/AliasInput.svelte (51%) rename packages/shared/{components/inputs/Dropdown2.svelte => src/components/inputs/Dropdown.svelte} (94%) - rename packages/shared/{ => src}/components/inputs/NodeInput.svelte (79%) + rename packages/shared/{ => src}/components/inputs/NodeInput.svelte (75%) rename packages/shared/{ => src}/components/inputs/OptionalInput.svelte (52%) rename packages/shared/{ => src}/components/inputs/SliderInput.svelte (56%) rename packages/shared/{ => src}/components/interfaces/index.ts (63%) @@ -1626,7 +1632,7 @@ rename packages/shared/{ => src}/lib/contexts/onboarding/constants/temporary-profile-manager-directory-name.constant.ts (100%) rename packages/shared/{ => src}/lib/contexts/onboarding/enums/create-profile-type.enum.ts (100%) rename packages/shared/{ => src}/lib/contexts/onboarding/enums/index.ts (79%) - rename packages/shared/{lib/core/network/enums/network-id.enum.ts => src/lib/contexts/onboarding/enums/onboarding-network-type.enum.ts} (72%) + rename packages/shared/{lib/core/network/enums/network-id.enum.ts => src/lib/contexts/onboarding/enums/onboarding-network-type.enum.ts} (57%) rename packages/shared/{ => src}/lib/contexts/onboarding/enums/onboarding-type.enum.ts (100%) rename packages/shared/{ => src}/lib/contexts/onboarding/enums/restore-profile-type.enum.ts (100%) rename packages/shared/{ => src}/lib/contexts/onboarding/enums/shimmer-claiming-account-state.enum.ts (100%) @@ -1669,7 +1675,7 @@ rename packages/shared/{ => src}/lib/contexts/onboarding/utils/sumTotalClaimedRewards.ts (75%) rename packages/shared/{ => src}/lib/contexts/onboarding/utils/sumTotalUnclaimedRewards.ts (86%) rename packages/shared/{ => src}/lib/contexts/onboarding/utils/validateBackupFile.ts (100%) - rename packages/shared/{ => src}/lib/contexts/settings/actions/deleteProfile.ts (69%) + rename packages/shared/{ => src}/lib/contexts/settings/actions/deleteProfile.ts (63%) rename packages/shared/{ => src}/lib/contexts/settings/actions/index.ts (100%) rename packages/shared/{ => src}/lib/contexts/settings/constants/index.ts (100%) rename packages/shared/{ => src}/lib/contexts/settings/index.ts (100%) @@ -1848,7 +1854,6 @@ rename packages/shared/{ => src}/lib/core/layer-2/constants/transfer-allowance.constant.ts (100%) rename packages/shared/{ => src}/lib/core/layer-2/enums/abi-type.enum.ts (100%) rename packages/shared/{ => src}/lib/core/layer-2/enums/contract-type.enum.ts (77%) - rename packages/shared/{ => src}/lib/core/layer-2/enums/index.ts (55%) rename packages/shared/{ => src}/lib/core/layer-2/enums/state-mutability-type.enum.ts (100%) rename packages/shared/{ => src}/lib/core/layer-2/errors/index.ts (100%) rename packages/shared/{ => src}/lib/core/layer-2/errors/layer1-recipient.error.ts (100%) @@ -1902,8 +1907,7 @@ rename packages/shared/{ => src}/lib/core/market/types/market-prices.type.ts (100%) rename packages/shared/{ => src}/lib/core/network/actions/addNodeToClientOptions.ts (76%) rename packages/shared/{ => src}/lib/core/network/actions/editNodeInClientOptions.ts (82%) - rename packages/shared/{ => src}/lib/core/network/actions/getAndUpdateNodeInfo.ts (85%) - rename packages/shared/{ => src}/lib/core/network/actions/index.ts (63%) + rename packages/shared/{ => src}/lib/core/network/actions/index.ts (56%) rename packages/shared/{ => src}/lib/core/network/actions/removeNodeFromClientOptions.ts (63%) rename packages/shared/{ => src}/lib/core/network/actions/toggleLocalPowInClientOptions.ts (84%) rename packages/shared/{ => src}/lib/core/network/actions/togglePrimaryNodeInClientOptions.ts (63%) @@ -1926,7 +1930,6 @@ rename packages/shared/{lib/core/network/interfaces/chain-metadata.interface.ts => src/lib/core/network/interfaces/isc-chain-metadata.interface.ts} (76%) rename packages/shared/{ => src}/lib/core/network/interfaces/node-info-response.interface.ts (62%) rename packages/shared/{ => src}/lib/core/network/interfaces/protocol.interface.ts (62%) - rename packages/shared/{ => src}/lib/core/network/stores/node-info.store.ts (83%) rename packages/shared/{ => src}/lib/core/network/types/network-metadata.type.ts (100%) rename packages/shared/{ => src}/lib/core/network/types/web3-provider.type.ts (100%) rename packages/shared/{ => src}/lib/core/network/utils/checkNodeUrlValidity.ts (95%) @@ -2003,14 +2006,13 @@ rename packages/shared/{ => src}/lib/core/profile/actions/active-accounts/index.ts (100%) rename packages/shared/{ => src}/lib/core/profile/actions/active-accounts/updateActiveAccountPersistedData.ts (63%) rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/checkAndRemoveProfilePicture.ts (100%) - rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/checkAndUpdateActiveProfileNetwork.ts (54%) rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/getBaseToken.ts (81%) rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/getNetworkHrp.ts (100%) - rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/index.ts (92%) + rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/index.ts (84%) rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/loadAccounts.ts (68%) rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/loadPersistedProfileIntoActiveProfile.ts (74%) rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/lockStronghold.ts (88%) - rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/logout.ts (66%) + rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/logout.ts (67%) rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/migrateStrongholdFromActiveProfile.ts (100%) rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/reflectLockedStronghold.ts (92%) rename packages/shared/{ => src}/lib/core/profile/actions/active-profile/resetActiveProfile.ts (59%) @@ -2056,7 +2058,7 @@ rename packages/shared/{ => src}/lib/core/profile/utils/validateProfileName.ts (100%) rename packages/shared/{ => src}/lib/core/router/actions/index.ts (100%) rename packages/shared/{ => src}/lib/core/router/classes/index.ts (100%) - rename packages/shared/{ => src}/lib/core/router/classes/router.class.ts (80%) + rename packages/shared/{ => src}/lib/core/router/classes/router.class.ts (75%) rename packages/shared/{ => src}/lib/core/router/classes/subrouter.class.ts (63%) rename packages/{mobile/lib/routers => shared/src/lib/core/router}/enums/app-route.enum.ts (100%) rename packages/shared/{ => src}/lib/core/router/enums/collectibles-route.enum.ts (100%) @@ -2082,19 +2084,17 @@ rename packages/shared/{ => src}/lib/core/router/enums/settings/security-settings-route.enum.ts (64%) rename packages/shared/{ => src}/lib/core/router/enums/settings/settings-route.enum.ts (72%) rename packages/shared/{ => src}/lib/core/router/index.ts (100%) - rename packages/shared/{ => src}/lib/core/router/interfaces/index.ts (100%) - rename packages/shared/{ => src}/lib/core/router/interfaces/router-event.interface.ts (67%) + rename packages/shared/{ => src}/lib/core/router/interfaces/index.ts (75%) rename packages/shared/{ => src}/lib/core/router/interfaces/router-manager-options.interface.ts (100%) rename packages/shared/{ => src}/lib/core/router/interfaces/router-manager.interface.ts (78%) - rename packages/shared/{ => src}/lib/core/router/interfaces/router.interface.ts (100%) - rename packages/shared/{ => src}/lib/core/router/routers/app-router.ts (63%) + rename packages/shared/{ => src}/lib/core/router/interfaces/router.interface.ts (50%) rename packages/shared/{ => src}/lib/core/router/routers/dashboard-router.ts (62%) rename packages/shared/{ => src}/lib/core/router/routers/index.ts (100%) rename packages/shared/{ => src}/lib/core/router/routers/settings-router.ts (56%) rename packages/shared/{ => src}/lib/core/router/stores/index.ts (100%) rename packages/shared/{ => src}/lib/core/router/stores/router-manager.store.ts (53%) rename packages/shared/{ => src}/lib/core/router/subrouters/index.ts (100%) - rename packages/shared/{ => src}/lib/core/router/subrouters/login-router.ts (70%) + rename packages/shared/{ => src}/lib/core/router/subrouters/login-router.ts (64%) rename packages/shared/{ => src}/lib/core/router/types/index.ts (100%) rename packages/shared/{ => src}/lib/core/router/types/router-manager-extension.type.ts (100%) rename packages/shared/{ => src}/lib/core/stronghold/actions/index.ts (100%) @@ -2183,7 +2183,7 @@ rename packages/shared/{ => src}/lib/core/utils/stores/currencies.store.ts (100%) rename packages/shared/{ => src}/lib/core/utils/stores/exchange-rates.store.ts (100%) rename packages/shared/{ => src}/lib/core/utils/stores/index.ts (100%) - rename packages/shared/{ => src}/lib/core/utils/string.ts (60%) + rename packages/shared/{ => src}/lib/core/utils/string.ts (59%) rename packages/shared/{ => src}/lib/core/utils/tests/convert.test.ts (60%) rename packages/shared/{ => src}/lib/core/utils/tests/crypto.test.ts (100%) rename packages/shared/{ => src}/lib/core/utils/tests/date.test.ts (100%) @@ -2263,7 +2263,7 @@ rename packages/shared/{ => src}/locales/lv.json (52%) rename packages/shared/{ => src}/locales/mk.json (52%) rename packages/shared/{ => src}/locales/no.json (52%) - rename packages/shared/{ => src}/locales/pl.json (52%) + rename packages/shared/{ => src}/locales/pl.json (51%) rename packages/shared/{ => src}/locales/pt-PT.json (52%) rename packages/shared/{ => src}/locales/ro.json (52%) rename packages/shared/{ => src}/locales/sk.json (51%) @@ -2273,7 +2273,7 @@ rename packages/shared/{ => src}/locales/uk.json (50%) rename packages/shared/{ => src}/locales/ur.json (52%) rename packages/shared/{ => src}/locales/vi.json (51%) - rename packages/shared/{ => src}/locales/zh-CN.json (51%) + rename packages/shared/{ => src}/locales/zh-CN.json (50%) rename packages/shared/{ => src}/locales/zh-TW.json (52%) delete mode 100644 packages/shared/style/style.scss rename packages/shared/{lib/tests/__mocks__ => test/mocks}/account.mock.ts (53%) From 16cc81931cfd1fd96c3df5b034043baf30603a89 Mon Sep 17 00:00:00 2001 From: Nicole O'Brien Date: Fri, 17 May 2024 11:02:19 +0100 Subject: [PATCH 6/7] feat: add gas selector to transaction flow (#2491) * feat: get gas prices from blockscout Co-authored-by: Tuditi * fix: convert gas prices to wei * temp: allow user to set gas speed on transaction summary * feat: allow user to set gas speed on transaction summary * fix: don't allow gas prices less than average * feta: improve gas price fetching * chore: rename * chore: set gas fee in TxSummaryView * chore: remove redundant prop * feat: select gas speed during dapp initiated transaction * chore: fix required gas price & cleanup * chore: improve type safety * chore: set max instead of estimated gas * chore: merge required and slow * fix: convert bigInt to hex * feat: disable gas selection if isTransferring * fix: precision issue --------- Co-authored-by: Tuditi Co-authored-by: Tuditi Co-authored-by: Tuditi <45079109+Tuditi@users.noreply.github.com> --- .../popups/EvmTransactionFromDappPopup.svelte | 73 +++++++++++++------ .../views/TransactionSummaryView.svelte | 46 +++++++++--- .../components/EvmTransactionDetails.svelte | 49 ++++++++++--- .../components/EvmTransactionSummary.svelte | 22 +++--- .../components/SetTransactionFeeMenu.svelte | 72 ++++++++++++++++++ .../views/components/{index.js => index.ts} | 0 .../blockscout/api/blockscout.api.ts | 8 ++ .../interfaces/blockscout-stats.interface.ts | 18 +++++ .../auxiliary/blockscout/interfaces/index.ts | 1 + .../actions/canAccountMakeEvmTransaction.ts | 2 +- .../src/lib/core/layer-2/actions/setGasFee.ts | 8 +- .../core/layer-2/constants/wei.constants.ts | 0 .../lib/core/layer-2/enums/gas-speed.enum.ts | 6 ++ .../src/lib/core/layer-2/enums/index.ts | 1 + .../gas-prices-by-speed.interface.ts | 8 ++ .../src/lib/core/layer-2/interfaces/index.ts | 1 + .../layer-2/utils/buildEvmTransactionData.ts | 2 +- .../core/layer-2/utils/convertGweiToWei.ts | 5 ++ .../src/lib/core/layer-2/utils/index.ts | 1 + .../core/network/classes/evm-network.class.ts | 30 +++++++- .../interfaces/evm-network.interface.ts | 4 +- .../lib/core/network/utils/isEvmNetwork.ts | 5 +- .../utils/send/validateSendConfirmation.ts | 8 +- packages/shared/src/locales/en.json | 5 +- 24 files changed, 311 insertions(+), 64 deletions(-) create mode 100644 packages/desktop/views/dashboard/send-flow/views/components/SetTransactionFeeMenu.svelte rename packages/desktop/views/dashboard/send-flow/views/components/{index.js => index.ts} (100%) create mode 100644 packages/shared/src/lib/auxiliary/blockscout/interfaces/blockscout-stats.interface.ts delete mode 100644 packages/shared/src/lib/core/layer-2/constants/wei.constants.ts create mode 100644 packages/shared/src/lib/core/layer-2/enums/gas-speed.enum.ts create mode 100644 packages/shared/src/lib/core/layer-2/interfaces/gas-prices-by-speed.interface.ts create mode 100644 packages/shared/src/lib/core/layer-2/utils/convertGweiToWei.ts diff --git a/packages/desktop/components/popup/popups/EvmTransactionFromDappPopup.svelte b/packages/desktop/components/popup/popups/EvmTransactionFromDappPopup.svelte index d2e7d08e26..67ecf7bc85 100644 --- a/packages/desktop/components/popup/popups/EvmTransactionFromDappPopup.svelte +++ b/packages/desktop/components/popup/popups/EvmTransactionFromDappPopup.svelte @@ -1,38 +1,39 @@ {/if} diff --git a/packages/desktop/views/dashboard/send-flow/views/TransactionSummaryView.svelte b/packages/desktop/views/dashboard/send-flow/views/TransactionSummaryView.svelte index c018d99f80..fb721fce51 100644 --- a/packages/desktop/views/dashboard/send-flow/views/TransactionSummaryView.svelte +++ b/packages/desktop/views/dashboard/send-flow/views/TransactionSummaryView.svelte @@ -10,7 +10,7 @@ import { IEvmNetwork, getNetwork, isEvmNetwork } from '@core/network' import { checkActiveProfileAuth } from '@core/profile/actions' import { getActiveProfileId, getIsActiveLedgerProfile } from '@core/profile/stores' - import { truncateString } from '@core/utils' + import { Converter, MILLISECONDS_PER_SECOND, truncateString } from '@core/utils' import { SendFlowParameters, SubjectType } from '@core/wallet' import { createEvmTransactionFromSendFlowParameters, @@ -22,14 +22,20 @@ import { sendFlowParameters } from '@core/wallet/stores' import { validateSendConfirmation } from '@core/wallet/utils' import { closePopup, modifyPopupState } from '@desktop/auxiliary/popup' - import { onMount } from 'svelte' + import { onDestroy, onMount } from 'svelte' import { sendFlowRouter } from '../send-flow.router' import { EvmTransactionSummary, StardustToEvmTransactionSummary, StardustTransactionSummary } from './components' import { TransactionSummaryProps } from './types' + import { GasSpeed, IGasPricesBySpeed } from '@core/layer-2' - export let transactionSummaryProps: TransactionSummaryProps + export let transactionSummaryProps: TransactionSummaryProps | undefined let { _onMount, preparedOutput, preparedTransaction } = transactionSummaryProps ?? {} + let selectedGasSpeed = GasSpeed.Required + let gasPrices: IGasPricesBySpeed = { + [GasSpeed.Required]: Converter.bigIntLikeToBigInt(preparedTransaction?.gasPrice as number), + } + $: void prepareTransactions($sendFlowParameters) $: isSourceNetworkLayer2 = !!evmNetwork $: isDestinationNetworkLayer2 = isEvmNetwork($sendFlowParameters?.destinationNetworkId) @@ -41,8 +47,8 @@ let recipientAddress: string let evmNetwork: IEvmNetwork | undefined - async function prepareTransactions(sendFlowParameters: SendFlowParameters): Promise { - if (_onMount) { + async function prepareTransactions(sendFlowParameters: SendFlowParameters | undefined): Promise { + if (_onMount || !sendFlowParameters || !$selectedAccount) { // The unlock stronghold/ledger flow passes the _onMount prop and the preparedTransactions return } @@ -51,7 +57,7 @@ const { recipient } = sendFlowParameters recipientAddress = - recipient.type === SubjectType.Account + recipient?.type === SubjectType.Account ? recipient.account.name : truncateString(recipient?.address, 6, 6) @@ -90,8 +96,15 @@ } } + async function setGasPrices(): Promise { + const _gasPrices = await evmNetwork?.getGasPrices() + if (_gasPrices) { + gasPrices = { ...gasPrices, ..._gasPrices } + } + } + async function onConfirmClick(): Promise { - if (!isValidTransaction()) { + if (!isValidTransaction() || !$selectedAccount) { return } @@ -104,7 +117,10 @@ try { busy = true modifyPopupState({ preventClose: true }) - if (isSourceNetworkLayer2) { + if (preparedTransaction && evmNetwork) { + preparedTransaction.gasPrice = Converter.bigIntToHex( + gasPrices?.[selectedGasSpeed] ?? gasPrices.required + ) const signedTransaction = await signEvmTransaction(preparedTransaction, evmNetwork, $selectedAccount) const profileId = getActiveProfileId() const account = getSelectedAccount() @@ -116,7 +132,7 @@ profileId, account ) - } else { + } else if (preparedOutput) { await signAndSendStardustTransaction(preparedOutput, $selectedAccount) } modifyPopupState({ preventClose: false }, true) @@ -144,8 +160,13 @@ } } + let intervalId: NodeJS.Timeout onMount(async () => { try { + if (isSourceNetworkLayer2 || isDestinationNetworkLayer2) { + await setGasPrices() + intervalId = setInterval(() => void setGasPrices, MILLISECONDS_PER_SECOND * 10) + } if (_onMount) { await _onMount() } else { @@ -157,6 +178,10 @@ hasMounted = true } }) + + onDestroy(() => { + clearInterval(intervalId) + }) {#if isSourceNetworkLayer2 && preparedTransaction && $sendFlowParameters && evmNetwork} {:else if !isSourceNetworkLayer2 && preparedOutput && $sendFlowParameters} {#if isDestinationNetworkLayer2} diff --git a/packages/desktop/views/dashboard/send-flow/views/components/EvmTransactionDetails.svelte b/packages/desktop/views/dashboard/send-flow/views/components/EvmTransactionDetails.svelte index 20afafeef8..7bd5113d8a 100644 --- a/packages/desktop/views/dashboard/send-flow/views/components/EvmTransactionDetails.svelte +++ b/packages/desktop/views/dashboard/send-flow/views/components/EvmTransactionDetails.svelte @@ -1,14 +1,27 @@ +> + {#if gasLimit} + +
+ +
+
+ {/if} +
diff --git a/packages/desktop/views/dashboard/send-flow/views/components/EvmTransactionSummary.svelte b/packages/desktop/views/dashboard/send-flow/views/components/EvmTransactionSummary.svelte index a9ab904ba8..35dceb3371 100644 --- a/packages/desktop/views/dashboard/send-flow/views/components/EvmTransactionSummary.svelte +++ b/packages/desktop/views/dashboard/send-flow/views/components/EvmTransactionSummary.svelte @@ -1,21 +1,18 @@ + + + + diff --git a/packages/desktop/views/dashboard/send-flow/views/components/index.js b/packages/desktop/views/dashboard/send-flow/views/components/index.ts similarity index 100% rename from packages/desktop/views/dashboard/send-flow/views/components/index.js rename to packages/desktop/views/dashboard/send-flow/views/components/index.ts diff --git a/packages/shared/src/lib/auxiliary/blockscout/api/blockscout.api.ts b/packages/shared/src/lib/auxiliary/blockscout/api/blockscout.api.ts index 08ca5cfb72..56f684874b 100644 --- a/packages/shared/src/lib/auxiliary/blockscout/api/blockscout.api.ts +++ b/packages/shared/src/lib/auxiliary/blockscout/api/blockscout.api.ts @@ -7,6 +7,7 @@ import { IBlockscoutApi, IBlockscoutAsset, IBlockscoutAssetDto, + IBlockscoutStats, IBlockscoutTokenInfo, IBlockscoutTokenInfoDto, IBlockscoutTransaction, @@ -61,6 +62,13 @@ export class BlockscoutApi extends BaseApi implements IBlockscoutApi { ) } + async getStats(): Promise { + const response = await this.get('stats') + if (response) { + return this.get('stats') + } + } + async getAssetMetadata(assetAddress: string): Promise { const response = await this.get(`tokens/${assetAddress}`) if (response) { diff --git a/packages/shared/src/lib/auxiliary/blockscout/interfaces/blockscout-stats.interface.ts b/packages/shared/src/lib/auxiliary/blockscout/interfaces/blockscout-stats.interface.ts new file mode 100644 index 0000000000..0b41055089 --- /dev/null +++ b/packages/shared/src/lib/auxiliary/blockscout/interfaces/blockscout-stats.interface.ts @@ -0,0 +1,18 @@ +export interface IBlockscoutStats { + total_blocks: string + total_addresses: string + total_transactions: string + average_block_time: number + coin_price: string + total_gas_used: string + transactions_today: string + gas_used_today: string + gas_prices: { + slow: number + average: number + fast: number + } + static_gas_price: string + market_cap: string + network_utilization_percentage: number +} diff --git a/packages/shared/src/lib/auxiliary/blockscout/interfaces/index.ts b/packages/shared/src/lib/auxiliary/blockscout/interfaces/index.ts index e6cefdfe6f..24a572aecd 100644 --- a/packages/shared/src/lib/auxiliary/blockscout/interfaces/index.ts +++ b/packages/shared/src/lib/auxiliary/blockscout/interfaces/index.ts @@ -1,3 +1,4 @@ +export * from './blockscout-stats.interface' export * from './blockscout-address-param.interface' export * from './blockscout-api.interface' export * from './blockscout-asset.interface' diff --git a/packages/shared/src/lib/core/layer-2/actions/canAccountMakeEvmTransaction.ts b/packages/shared/src/lib/core/layer-2/actions/canAccountMakeEvmTransaction.ts index 78cad3375e..f8272f6aeb 100644 --- a/packages/shared/src/lib/core/layer-2/actions/canAccountMakeEvmTransaction.ts +++ b/packages/shared/src/lib/core/layer-2/actions/canAccountMakeEvmTransaction.ts @@ -12,7 +12,7 @@ export async function canAccountMakeEvmTransaction( const gasLimit = Math.floor( FALLBACK_ESTIMATED_GAS[sendFlowType ?? SendFlowType.BaseCoinTransfer] * GAS_LIMIT_MULTIPLIER ) - const gasPrice = await network.getGasPrice() + const gasPrice = await network.getRequiredGasPrice() if (gasPrice === undefined) { return false } diff --git a/packages/shared/src/lib/core/layer-2/actions/setGasFee.ts b/packages/shared/src/lib/core/layer-2/actions/setGasFee.ts index 13978af091..a9f9db3da8 100644 --- a/packages/shared/src/lib/core/layer-2/actions/setGasFee.ts +++ b/packages/shared/src/lib/core/layer-2/actions/setGasFee.ts @@ -5,7 +5,13 @@ import { calculateMaxGasFeeFromTransactionData } from '@core/layer-2/utils' import { getEvmNetwork, isEvmNetwork } from '@core/network' import { SendFlowParameters, createEvmTransactionFromSendFlowParameters, updateSendFlowParameters } from '@core/wallet' -export async function setGasFee(sendFlowParams: SendFlowParameters, account: IAccountState): Promise { +export async function setGasFee( + sendFlowParams: SendFlowParameters | undefined, + account: IAccountState | undefined +): Promise { + if (!sendFlowParams || !account) { + throw new Error('Send flow parameter or account is undefined!') + } try { if (sendFlowParams.gasFee) { return diff --git a/packages/shared/src/lib/core/layer-2/constants/wei.constants.ts b/packages/shared/src/lib/core/layer-2/constants/wei.constants.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/packages/shared/src/lib/core/layer-2/enums/gas-speed.enum.ts b/packages/shared/src/lib/core/layer-2/enums/gas-speed.enum.ts new file mode 100644 index 0000000000..b0a85813d4 --- /dev/null +++ b/packages/shared/src/lib/core/layer-2/enums/gas-speed.enum.ts @@ -0,0 +1,6 @@ +export enum GasSpeed { + Fast = 'fast', + Average = 'average', + Slow = 'slow', + Required = 'required', +} diff --git a/packages/shared/src/lib/core/layer-2/enums/index.ts b/packages/shared/src/lib/core/layer-2/enums/index.ts index 3a133f5864..2d35c2a71a 100644 --- a/packages/shared/src/lib/core/layer-2/enums/index.ts +++ b/packages/shared/src/lib/core/layer-2/enums/index.ts @@ -4,5 +4,6 @@ export * from './asset-type.enum' export * from './contract-type.enum' export * from './erc721-interface-id.enum' export * from './evm-error-message.enum' +export * from './gas-speed.enum' export * from './parsed-smart-contract-type.enum' export * from './state-mutability-type.enum' diff --git a/packages/shared/src/lib/core/layer-2/interfaces/gas-prices-by-speed.interface.ts b/packages/shared/src/lib/core/layer-2/interfaces/gas-prices-by-speed.interface.ts new file mode 100644 index 0000000000..35c505a525 --- /dev/null +++ b/packages/shared/src/lib/core/layer-2/interfaces/gas-prices-by-speed.interface.ts @@ -0,0 +1,8 @@ +import { GasSpeed } from '../enums' + +export interface IGasPricesBySpeed { + [GasSpeed.Fast]?: bigint + [GasSpeed.Average]?: bigint + [GasSpeed.Slow]?: bigint + [GasSpeed.Required]: bigint +} diff --git a/packages/shared/src/lib/core/layer-2/interfaces/index.ts b/packages/shared/src/lib/core/layer-2/interfaces/index.ts index 3331d84235..4fe67ed87a 100644 --- a/packages/shared/src/lib/core/layer-2/interfaces/index.ts +++ b/packages/shared/src/lib/core/layer-2/interfaces/index.ts @@ -4,6 +4,7 @@ export * from './erc721-safe-transfer-method-inputs.interface' export * from './evm-address.interface' export * from './evm-signature.interface' export * from './evm-transaction-data.interface' +export * from './gas-prices-by-speed.interface' export * from './isc-call-method-inputs.interface' export * from './isc-send-method-inputs.interface' export * from './layer-2-asset-allowance.interface' diff --git a/packages/shared/src/lib/core/layer-2/utils/buildEvmTransactionData.ts b/packages/shared/src/lib/core/layer-2/utils/buildEvmTransactionData.ts index 2d0e34942a..6195e7c999 100644 --- a/packages/shared/src/lib/core/layer-2/utils/buildEvmTransactionData.ts +++ b/packages/shared/src/lib/core/layer-2/utils/buildEvmTransactionData.ts @@ -11,7 +11,7 @@ export async function buildEvmTransactionData( data: string | undefined ): Promise { const nonce = await evmNetwork.provider.eth.getTransactionCount(originAddress) - const gasPrice = await evmNetwork.provider.eth.getGasPrice() + const gasPrice = await evmNetwork.getRequiredGasPrice() const hexGasPrice = Converter.decimalToHex(Number(gasPrice), true) const estimatedGas = await evmNetwork.provider.eth.estimateGas({ from: originAddress, diff --git a/packages/shared/src/lib/core/layer-2/utils/convertGweiToWei.ts b/packages/shared/src/lib/core/layer-2/utils/convertGweiToWei.ts new file mode 100644 index 0000000000..5c441c858d --- /dev/null +++ b/packages/shared/src/lib/core/layer-2/utils/convertGweiToWei.ts @@ -0,0 +1,5 @@ +const WEI_PER_GWEI = 1000000000 + +export function convertGweiToWei(gwei: number): bigint { + return BigInt(Math.round(gwei * WEI_PER_GWEI)) +} diff --git a/packages/shared/src/lib/core/layer-2/utils/index.ts b/packages/shared/src/lib/core/layer-2/utils/index.ts index 57d6d77d33..3139e558cd 100644 --- a/packages/shared/src/lib/core/layer-2/utils/index.ts +++ b/packages/shared/src/lib/core/layer-2/utils/index.ts @@ -4,6 +4,7 @@ export * from './buildEvmTransactionDataForNft' export * from './buildEvmTransactionDataForToken' export * from './calculateEstimatedGasFeeFromTransactionData' export * from './calculateMaxGasFeeFromTransactionData' +export * from './convertGweiToWei' export * from './fetchIscAssetsForAccount' export * from './fetchEvmBalancesForAllAccounts' export * from './getEvmTokenMetadata' diff --git a/packages/shared/src/lib/core/network/classes/evm-network.class.ts b/packages/shared/src/lib/core/network/classes/evm-network.class.ts index 7ffba4f6d0..5cd7042c7b 100644 --- a/packages/shared/src/lib/core/network/classes/evm-network.class.ts +++ b/packages/shared/src/lib/core/network/classes/evm-network.class.ts @@ -18,6 +18,9 @@ import Web3 from 'web3' import { ChainId, NetworkHealth, NetworkNamespace, NetworkType } from '../enums' import { IBaseEvmNetworkConfiguration, IBlock, IEvmNetwork } from '../interfaces' import { EvmNetworkId, EvmNetworkType, Web3Provider } from '../types' +import { BlockscoutApi } from '@auxiliary/blockscout/api' +import { convertGweiToWei } from '@core/layer-2/utils' +import { IGasPricesBySpeed } from '@core/layer-2' export class EvmNetwork implements IEvmNetwork { public readonly provider: Web3Provider @@ -35,6 +38,8 @@ export class EvmNetwork implements IEvmNetwork { public health: Writable = writable(NetworkHealth.Operational) public statusPoll: number | undefined + private gasPrices: IGasPricesBySpeed | undefined + constructor({ id, namespace, @@ -99,7 +104,7 @@ export class EvmNetwork implements IEvmNetwork { return new this.provider.eth.Contract(abi, address) } - async getGasPrice(): Promise { + async getRequiredGasPrice(): Promise { try { const gasPrice = await this.provider.eth.getGasPrice() return BigInt(gasPrice) @@ -108,6 +113,29 @@ export class EvmNetwork implements IEvmNetwork { } } + async getGasPrices(): Promise { + try { + const required = (await this.getRequiredGasPrice()) ?? BigInt(0) + let gasPrices: IGasPricesBySpeed = { required } + try { + const blockscoutApi = new BlockscoutApi(this.id) + const stats = await blockscoutApi.getStats() + + Object.entries(stats?.gas_prices ?? {}).forEach(([key, value]) => { + const gasInWei = convertGweiToWei(value) + gasPrices[key] = gasInWei > required ? gasInWei : required + }) + } catch (err) { + console.error(err) + gasPrices = { ...this.gasPrices, required } + } + this.gasPrices = gasPrices + return gasPrices + } catch (err) { + console.error('Failed to fetch required gas prices!', err) + } + } + async getLatestBlock(): Promise { const number = await this.provider.eth.getBlockNumber() return this.provider.eth.getBlock(number) diff --git a/packages/shared/src/lib/core/network/interfaces/evm-network.interface.ts b/packages/shared/src/lib/core/network/interfaces/evm-network.interface.ts index 755944d7eb..6cfa56ccea 100644 --- a/packages/shared/src/lib/core/network/interfaces/evm-network.interface.ts +++ b/packages/shared/src/lib/core/network/interfaces/evm-network.interface.ts @@ -9,6 +9,7 @@ import { IBaseNetwork, IBaseNetworkMetadata } from './base-network.interface' import { IBlock } from './block.interface' import { IIscChainMetadata } from './isc-chain-metadata.interface' import { BigIntLike } from '@ethereumjs/util' +import { IGasPricesBySpeed } from '@core/layer-2' export interface IIscChain extends IEvmNetwork { type: NetworkType.Isc @@ -32,7 +33,8 @@ export interface IEvmNetwork extends IBaseNetwork, IBaseNetworkMetadata { provider: Web3Provider - getGasPrice(): Promise + getRequiredGasPrice(): Promise + getGasPrices(): Promise getBalance(account: IAccountState): Promise getNftsForAccount(account: IAccountState): Promise diff --git a/packages/shared/src/lib/core/network/utils/isEvmNetwork.ts b/packages/shared/src/lib/core/network/utils/isEvmNetwork.ts index c002261e2b..1c3b1c34ae 100644 --- a/packages/shared/src/lib/core/network/utils/isEvmNetwork.ts +++ b/packages/shared/src/lib/core/network/utils/isEvmNetwork.ts @@ -2,6 +2,9 @@ import { NetworkNamespace } from '../enums' import { EvmNetworkId, NetworkId } from '../types' import { getSplitNetworkId } from './getSplitNetworkId' -export function isEvmNetwork(networkId: NetworkId): networkId is EvmNetworkId { +export function isEvmNetwork(networkId: NetworkId | undefined): networkId is EvmNetworkId { + if (!networkId) { + return false + } return getSplitNetworkId(networkId)?.namespace === NetworkNamespace.Evm } diff --git a/packages/shared/src/lib/core/wallet/utils/send/validateSendConfirmation.ts b/packages/shared/src/lib/core/wallet/utils/send/validateSendConfirmation.ts index 425bd29a7a..4020a516f2 100644 --- a/packages/shared/src/lib/core/wallet/utils/send/validateSendConfirmation.ts +++ b/packages/shared/src/lib/core/wallet/utils/send/validateSendConfirmation.ts @@ -8,9 +8,13 @@ import { } from '@contexts/wallet' import { convertUnixTimestampToDate, isFutureDateTime } from '@core/utils' -export function validateSendConfirmation(output: Output): void { +export function validateSendConfirmation(output: Output | undefined): void { + if (!output) { + throw new Error('Output is undefined!') + } + const parseNumber: (value: string) => number = (value: string) => parseInt(value, 10) ?? 0 - const amount = parseNumber(output?.amount) + const amount = parseNumber(output.amount) const balance = parseNumber(getSelectedAccount()?.balances?.baseCoin.available.toString() ?? '0') const expirationDateTime = getDateFromUnlockCondition(output, UnlockConditionType.Expiration) diff --git a/packages/shared/src/locales/en.json b/packages/shared/src/locales/en.json index efecc6e730..3fefe4d93b 100644 --- a/packages/shared/src/locales/en.json +++ b/packages/shared/src/locales/en.json @@ -1725,7 +1725,10 @@ "appName": "App name", "question": "Question", "id": "ID", - "location": "Location" + "location": "Location", + "slow": "Slow", + "average": "Average", + "fast": "Fast" }, "filters":{ "title": "Filters", From 8a27eba5118f1a0f5ff549c3b6f2f4830d701600 Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Fri, 17 May 2024 13:50:50 +0200 Subject: [PATCH 7/7] chore: update web3 to 4.8 (#2509) * update web3 to 4.8 * update Contract type * update transaction receipt Co-authored-by: Tuditi * fix circular import * patch library Co-authored-by: Tuditi * fix types --------- Co-authored-by: Tuditi --- packages/shared/package.json | 2 +- .../utils/evm/generateBaseEvmActivity.ts | 2 +- ...ateEvmActivityFromBlockscoutTransaction.ts | 2 +- ...erateEvmActivityFromLocalEvmTransaction.ts | 4 +- .../src/lib/core/layer-2/abis/erc165.abi.ts | 6 +- .../src/lib/core/layer-2/abis/erc20.abi.ts | 4 +- .../src/lib/core/layer-2/abis/erc721.abi.ts | 18 +- .../lib/core/layer-2/abis/isc-sandbox.abi.ts | 4 +- .../actions/canAccountMakeEvmTransaction.ts | 8 +- .../getGasFeeForLayer1ToLayer2Transaction.ts | 2 +- .../getIscTransferSmartContractData.ts | 4 +- .../actions/getLayer2MetadataForTransfer.ts | 11 +- .../constants/evm-contract-abis.constant.ts | 9 - .../fallback-estimated-gas.constant.ts | 12 +- .../gas-limit-multiplier.constant.ts | 1 - .../src/lib/core/layer-2/constants/index.ts | 2 - .../core/layer-2/enums/contract-type.enum.ts | 5 - .../src/lib/core/layer-2/enums/index.ts | 1 - .../src/lib/core/layer-2/types/abi.type.ts | 3 - .../lib/core/layer-2/types/contract.type.ts | 3 - .../types/evm-transaction-data.type.ts | 2 +- .../src/lib/core/layer-2/types/index.ts | 2 - .../lib/core/layer-2/utils/addGasBuffer.ts | 5 + .../layer-2/utils/buildEvmTransactionData.ts | 4 +- .../layer-2/utils/fetchIscAssetsForAccount.ts | 6 +- .../getErc20TransferSmartContractData.ts | 4 +- .../getErc721TransferSmartContractData.ts | 4 +- .../core/layer-2/utils/getEvmTokenMetadata.ts | 15 +- .../src/lib/core/layer-2/utils/index.ts | 1 + .../core/network/classes/evm-network.class.ts | 21 +- .../network/interfaces/block.interface.ts | 4 - .../interfaces/evm-network.interface.ts | 8 +- .../src/lib/core/network/interfaces/index.ts | 1 - .../core/network/types/web3-provider.type.ts | 2 +- .../nfts/actions/checkForUntrackedNfts.ts | 6 +- .../lib/core/nfts/actions/persistErc721Nft.ts | 12 +- .../actions/persistNftWithContractMetadata.ts | 4 +- .../nfts/utils/buildPersistedErc721Nft.ts | 8 +- .../core/nfts/utils/getOwnerOfErc721Nft.ts | 8 +- .../types/local-evm-transaction.interface.ts | 15 +- ...EvmTransactionFromBlockscoutTransaction.ts | 26 +- .../shared/src/lib/core/utils/abiDecoder.ts | 27 +- .../send/createEvmToStardustTransaction.ts | 5 +- .../send/sendAndPersistTransactionFromEvm.ts | 13 +- .../actions/sendSignedEvmTransaction.ts | 2 +- .../wallet/tests/getOutputParameters.test.ts | 4 - patches/@noble+hashes+1.3.3.patch | 50 + yarn.lock | 1389 ++++------------- 48 files changed, 454 insertions(+), 1297 deletions(-) delete mode 100644 packages/shared/src/lib/core/layer-2/constants/gas-limit-multiplier.constant.ts delete mode 100644 packages/shared/src/lib/core/layer-2/enums/contract-type.enum.ts delete mode 100644 packages/shared/src/lib/core/layer-2/types/abi.type.ts delete mode 100644 packages/shared/src/lib/core/layer-2/types/contract.type.ts create mode 100644 packages/shared/src/lib/core/layer-2/utils/addGasBuffer.ts delete mode 100644 packages/shared/src/lib/core/network/interfaces/block.interface.ts create mode 100644 patches/@noble+hashes+1.3.3.patch diff --git a/packages/shared/package.json b/packages/shared/package.json index 7f1c86016d..644347ef3c 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -26,7 +26,7 @@ "sha3": "2.1.4", "svelte": "4.2.15", "svelte-i18n": "4.0.0", - "web3": "1.10.4", + "web3": "4.8.0", "zxcvbn": "4.4.2" }, "scripts": { diff --git a/packages/shared/src/lib/core/activity/utils/evm/generateBaseEvmActivity.ts b/packages/shared/src/lib/core/activity/utils/evm/generateBaseEvmActivity.ts index 70cf3de4b1..d3e69eae49 100644 --- a/packages/shared/src/lib/core/activity/utils/evm/generateBaseEvmActivity.ts +++ b/packages/shared/src/lib/core/activity/utils/evm/generateBaseEvmActivity.ts @@ -14,7 +14,7 @@ export async function generateBaseEvmActivity( recipient: string gasUsed: number blockNumber: number - estimatedGas?: number + estimatedGas?: bigint gasPrice?: BigIntLike timestamp?: number }, diff --git a/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromBlockscoutTransaction.ts b/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromBlockscoutTransaction.ts index a8891af219..b3abe6e15e 100644 --- a/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromBlockscoutTransaction.ts +++ b/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromBlockscoutTransaction.ts @@ -132,7 +132,7 @@ async function generateBaseEvmActivityFromBlockscoutTransaction( recipient: blockscoutTransaction.to.hash.toLowerCase(), from: blockscoutTransaction.from.hash.toLowerCase(), gasUsed: Number(blockscoutTransaction.gas_used), - estimatedGas: localTransaction?.estimatedGas, + estimatedGas: localTransaction?.estimatedGas ? BigInt(localTransaction.estimatedGas) : undefined, gasPrice: blockscoutTransaction.gas_price, transactionHash: blockscoutTransaction.hash, timestamp: new Date(blockscoutTransaction.timestamp).getTime(), diff --git a/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromLocalEvmTransaction.ts b/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromLocalEvmTransaction.ts index 5603e6b245..a07fb558d9 100644 --- a/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromLocalEvmTransaction.ts +++ b/packages/shared/src/lib/core/activity/utils/evm/generateEvmActivityFromLocalEvmTransaction.ts @@ -29,7 +29,7 @@ export async function generateEvmActivityFromLocalEvmTransaction( recipient: to?.toString().toLowerCase(), from: from?.toString().toLowerCase(), gasUsed: Number(gasUsed), - estimatedGas, + estimatedGas: estimatedGas ? BigInt(estimatedGas) : undefined, gasPrice: gasPrice ?? undefined, transactionHash, timestamp, @@ -63,7 +63,7 @@ export async function generateEvmActivityFromLocalEvmTransaction( recipient: parsedData.recipientAddress ?? to?.toString().toLowerCase(), from: from?.toString().toLowerCase(), gasUsed: Number(gasUsed), - estimatedGas, + estimatedGas: estimatedGas ? BigInt(estimatedGas) : undefined, gasPrice: gasPrice ?? undefined, transactionHash, timestamp, diff --git a/packages/shared/src/lib/core/layer-2/abis/erc165.abi.ts b/packages/shared/src/lib/core/layer-2/abis/erc165.abi.ts index 08b510c113..2cca82e4df 100644 --- a/packages/shared/src/lib/core/layer-2/abis/erc165.abi.ts +++ b/packages/shared/src/lib/core/layer-2/abis/erc165.abi.ts @@ -1,6 +1,8 @@ -import { Abi, AbiType, StateMutabilityType } from '@core/layer-2' +import { ContractAbi } from 'web3' +import { AbiType } from '../enums/abi-type.enum' +import { StateMutabilityType } from '../enums/state-mutability-type.enum' -export const ERC165_ABI: Abi = [ +export const ERC165_ABI: ContractAbi = [ // / @notice Query if a contract implements an interface // / @param interfaceID The interface identifier, as specified in ERC-165 // / @dev Interface identification is specified in ERC-165. This function diff --git a/packages/shared/src/lib/core/layer-2/abis/erc20.abi.ts b/packages/shared/src/lib/core/layer-2/abis/erc20.abi.ts index 83bc400421..fa9050dc2d 100644 --- a/packages/shared/src/lib/core/layer-2/abis/erc20.abi.ts +++ b/packages/shared/src/lib/core/layer-2/abis/erc20.abi.ts @@ -1,7 +1,7 @@ +import { ContractAbi } from 'web3' import { AbiType, StateMutabilityType } from '../enums' -import { Abi } from '../types' -export const ERC20_ABI: Abi = [ +export const ERC20_ABI: ContractAbi = [ { constant: true, inputs: [], diff --git a/packages/shared/src/lib/core/layer-2/abis/erc721.abi.ts b/packages/shared/src/lib/core/layer-2/abis/erc721.abi.ts index 87e61734ad..ffdafe0e02 100644 --- a/packages/shared/src/lib/core/layer-2/abis/erc721.abi.ts +++ b/packages/shared/src/lib/core/layer-2/abis/erc721.abi.ts @@ -1,8 +1,9 @@ -import { AbiType, StateMutabilityType } from '../enums' -import { Abi } from '../types' +import { ContractAbi } from 'web3' import { ERC165_ABI } from './erc165.abi' +import { AbiType } from '../enums/abi-type.enum' +import { StateMutabilityType } from '../enums/state-mutability-type.enum' -const ERC721_BASE_ABI: Abi = [ +const ERC721_BASE_ABI: ContractAbi = [ { inputs: [], payable: false, @@ -400,7 +401,7 @@ const ERC721_BASE_ABI: Abi = [ }, ] -export const ERC721_METADATA_ABI: Abi = [ +export const ERC721_METADATA_ABI: ContractAbi = [ // / @notice A descriptive name for a collection of NFTs in this contract // / // / function name() external view returns (string _name); @@ -468,7 +469,7 @@ export const ERC721_METADATA_ABI: Abi = [ }, ] -export const ERC721_ENUMERABLE_ABI: Abi = [ +export const ERC721_ENUMERABLE_ABI: ContractAbi = [ // / @notice Count NFTs tracked by this contract // / @return A count of valid NFTs tracked by this contract, where each one of // / them has an assigned and queryable owner not equal to the zero address @@ -556,4 +557,9 @@ export const ERC721_ENUMERABLE_ABI: Abi = [ }, ] -export const ERC721_ABI: Abi = [...ERC165_ABI, ...ERC721_BASE_ABI, ...ERC721_METADATA_ABI, ...ERC721_ENUMERABLE_ABI] +export const ERC721_ABI: ContractAbi = [ + ...ERC165_ABI, + ...ERC721_BASE_ABI, + ...ERC721_METADATA_ABI, + ...ERC721_ENUMERABLE_ABI, +] diff --git a/packages/shared/src/lib/core/layer-2/abis/isc-sandbox.abi.ts b/packages/shared/src/lib/core/layer-2/abis/isc-sandbox.abi.ts index 0293f49828..6ecc030663 100644 --- a/packages/shared/src/lib/core/layer-2/abis/isc-sandbox.abi.ts +++ b/packages/shared/src/lib/core/layer-2/abis/isc-sandbox.abi.ts @@ -1,7 +1,7 @@ +import { ContractAbi } from 'web3' import { AbiType, StateMutabilityType } from '../enums' -import { Abi } from '../types' -export const ISC_SANDBOX_ABI: Abi = [ +export const ISC_SANDBOX_ABI: ContractAbi = [ { inputs: [ { internalType: 'address', name: 'target', type: 'address' }, diff --git a/packages/shared/src/lib/core/layer-2/actions/canAccountMakeEvmTransaction.ts b/packages/shared/src/lib/core/layer-2/actions/canAccountMakeEvmTransaction.ts index f8272f6aeb..01dea59bcc 100644 --- a/packages/shared/src/lib/core/layer-2/actions/canAccountMakeEvmTransaction.ts +++ b/packages/shared/src/lib/core/layer-2/actions/canAccountMakeEvmTransaction.ts @@ -1,7 +1,8 @@ import { SendFlowType } from '@core/wallet/enums' import { getLayer2AccountBalanceForToken } from '../stores' -import { FALLBACK_ESTIMATED_GAS, GAS_LIMIT_MULTIPLIER } from '../constants' +import { FALLBACK_ESTIMATED_GAS } from '../constants' import { IEvmNetwork, calculateGasFee } from '@core/network' +import { addGasBuffer } from '../utils' export async function canAccountMakeEvmTransaction( accountIndex: number, @@ -9,9 +10,8 @@ export async function canAccountMakeEvmTransaction( sendFlowType: SendFlowType | undefined ): Promise { const baseTokenAccountBalance = getLayer2AccountBalanceForToken(accountIndex, network.id) - const gasLimit = Math.floor( - FALLBACK_ESTIMATED_GAS[sendFlowType ?? SendFlowType.BaseCoinTransfer] * GAS_LIMIT_MULTIPLIER - ) + const gasLimit = addGasBuffer(FALLBACK_ESTIMATED_GAS[sendFlowType ?? SendFlowType.BaseCoinTransfer]) + const gasPrice = await network.getRequiredGasPrice() if (gasPrice === undefined) { return false diff --git a/packages/shared/src/lib/core/layer-2/actions/getGasFeeForLayer1ToLayer2Transaction.ts b/packages/shared/src/lib/core/layer-2/actions/getGasFeeForLayer1ToLayer2Transaction.ts index 441ca4cb1f..ecef2cb3ba 100644 --- a/packages/shared/src/lib/core/layer-2/actions/getGasFeeForLayer1ToLayer2Transaction.ts +++ b/packages/shared/src/lib/core/layer-2/actions/getGasFeeForLayer1ToLayer2Transaction.ts @@ -23,7 +23,7 @@ export async function getGasFeeForLayer1ToLayer2Transaction(sendFlowParameters: return gasFeeEstimate } catch (err) { console.error(err) - return BigInt(FALLBACK_ESTIMATED_GAS[sendFlowParameters.type]) + return FALLBACK_ESTIMATED_GAS[sendFlowParameters.type] } } diff --git a/packages/shared/src/lib/core/layer-2/actions/getIscTransferSmartContractData.ts b/packages/shared/src/lib/core/layer-2/actions/getIscTransferSmartContractData.ts index aa788d713e..acee64b52a 100644 --- a/packages/shared/src/lib/core/layer-2/actions/getIscTransferSmartContractData.ts +++ b/packages/shared/src/lib/core/layer-2/actions/getIscTransferSmartContractData.ts @@ -1,11 +1,11 @@ import { IscChain } from '@core/network' import { getSelectedAccount } from '@core/account/stores' -import { ContractType } from '@core/layer-2/enums' import { ISC_MAGIC_CONTRACT_ADDRESS } from '@core/layer-2/constants' import { handleError } from '@core/error/handlers' import { TransferredAsset } from '../types' import { evmAddressToAgentId, getAgentBalanceParameters, getSmartContractHexName } from '../helpers' import { buildAssetAllowance } from '../utils' +import { ISC_SANDBOX_ABI } from '..' export function getIscTransferSmartContractData( recipientAddress: string, @@ -26,7 +26,7 @@ export function getIscTransferSmartContractData( const parameters = getAgentBalanceParameters(agentId) const allowance = buildAssetAllowance(iscChain, transferredAsset) - const contract = iscChain.getContract(ContractType.IscMagic, ISC_MAGIC_CONTRACT_ADDRESS) + const contract = iscChain.getContract(ISC_SANDBOX_ABI, ISC_MAGIC_CONTRACT_ADDRESS) const method = contract.methods.call(accountsCoreContract, transferAllowanceTo, parameters, allowance) return method.encodeABI() ?? '' } catch (err) { diff --git a/packages/shared/src/lib/core/layer-2/actions/getLayer2MetadataForTransfer.ts b/packages/shared/src/lib/core/layer-2/actions/getLayer2MetadataForTransfer.ts index cc8965b83c..22d02fe4a8 100644 --- a/packages/shared/src/lib/core/layer-2/actions/getLayer2MetadataForTransfer.ts +++ b/packages/shared/src/lib/core/layer-2/actions/getLayer2MetadataForTransfer.ts @@ -1,9 +1,10 @@ import { HEX_PREFIX } from '@core/utils' import type { SendFlowParameters } from '@core/wallet/types' import { SpecialStream } from '../classes' -import { ACCOUNTS_CONTRACT, EXTERNALLY_OWNED_ACCOUNT, GAS_LIMIT_MULTIPLIER, TRANSFER_ALLOWANCE } from '../constants' +import { ACCOUNTS_CONTRACT, EXTERNALLY_OWNED_ACCOUNT, TRANSFER_ALLOWANCE } from '../constants' import { encodeAddress, encodeAssetAllowance, encodeSmartContractParameters } from '../helpers' import { getIscChain } from '@core/network' +import { addGasBuffer } from '../utils' export function getLayer2MetadataForTransfer(sendFlowParameters: SendFlowParameters): string { const metadataStream = new SpecialStream() @@ -18,12 +19,12 @@ export function getLayer2MetadataForTransfer(sendFlowParameters: SendFlowParamet const gasFee = sendFlowParameters.gasFee ?? BigInt(0) const gasPerToken = iscChain.getMetadata()?.gasFeePolicy.gasPerToken - let gasLimit: number + let gasLimit: bigint if (gasPerToken) { // More information can be found here: https://wiki.iota.org/isc/reference/core-contracts/governance/#ratio32 - gasLimit = (Number(gasFee) * gasPerToken['a']) / gasPerToken['b'] + gasLimit = (gasFee * BigInt(gasPerToken['a'])) / BigInt(gasPerToken['b']) } else { - gasLimit = Number(gasFee) * GAS_LIMIT_MULTIPLIER + gasLimit = addGasBuffer(gasFee) } metadataStream.writeUInt8('senderContract', EXTERNALLY_OWNED_ACCOUNT) @@ -31,7 +32,7 @@ export function getLayer2MetadataForTransfer(sendFlowParameters: SendFlowParamet metadataStream.writeUInt32('targetContract', ACCOUNTS_CONTRACT) metadataStream.writeUInt32('contractFunction', TRANSFER_ALLOWANCE) // Gas budget is the ISC equivalent of gas limit in ethereum and what we use throughout the code - metadataStream.writeUInt64SpecialEncoding('gasLimit', BigInt(Math.floor(gasLimit))) + metadataStream.writeUInt64SpecialEncoding('gasLimit', gasLimit) const smartContractParameters = Object.entries({ a: encodedAddress }) const parameters = encodeSmartContractParameters(smartContractParameters) diff --git a/packages/shared/src/lib/core/layer-2/constants/evm-contract-abis.constant.ts b/packages/shared/src/lib/core/layer-2/constants/evm-contract-abis.constant.ts index 78cccc68e8..e69de29bb2 100644 --- a/packages/shared/src/lib/core/layer-2/constants/evm-contract-abis.constant.ts +++ b/packages/shared/src/lib/core/layer-2/constants/evm-contract-abis.constant.ts @@ -1,9 +0,0 @@ -import { ERC20_ABI, ERC721_ABI, ISC_SANDBOX_ABI } from '../abis' -import { ContractType } from '../enums' -import { Abi } from '../types' - -export const EVM_CONTRACT_ABIS: { [key in ContractType]: Abi } = { - [ContractType.Erc20]: ERC20_ABI, - [ContractType.Erc721]: ERC721_ABI, - [ContractType.IscMagic]: ISC_SANDBOX_ABI, -} diff --git a/packages/shared/src/lib/core/layer-2/constants/fallback-estimated-gas.constant.ts b/packages/shared/src/lib/core/layer-2/constants/fallback-estimated-gas.constant.ts index d8ad3cc5b1..8b2ca289a1 100644 --- a/packages/shared/src/lib/core/layer-2/constants/fallback-estimated-gas.constant.ts +++ b/packages/shared/src/lib/core/layer-2/constants/fallback-estimated-gas.constant.ts @@ -6,10 +6,10 @@ import { SendFlowType } from '@core/wallet/enums' * Base Token Transfer: < 24200 glow * Native Token Transfer: < 24350 glow * NFT Transfer: < 24700 glow */ -export const FALLBACK_ESTIMATED_GAS: { [key in SendFlowType]: number } = { - [SendFlowType.BaseCoinTransfer]: 10_000, - [SendFlowType.TokenTransfer]: 10_000, - [SendFlowType.NftTransfer]: 50_000, - [SendFlowType.TokenUnwrap]: 53_892, - [SendFlowType.NftUnwrap]: 72_307, +export const FALLBACK_ESTIMATED_GAS: { [key in SendFlowType]: bigint } = { + [SendFlowType.BaseCoinTransfer]: BigInt(10_000), + [SendFlowType.TokenTransfer]: BigInt(10_000), + [SendFlowType.NftTransfer]: BigInt(50_000), + [SendFlowType.TokenUnwrap]: BigInt(53_892), + [SendFlowType.NftUnwrap]: BigInt(72_307), } diff --git a/packages/shared/src/lib/core/layer-2/constants/gas-limit-multiplier.constant.ts b/packages/shared/src/lib/core/layer-2/constants/gas-limit-multiplier.constant.ts deleted file mode 100644 index 057efa4e59..0000000000 --- a/packages/shared/src/lib/core/layer-2/constants/gas-limit-multiplier.constant.ts +++ /dev/null @@ -1 +0,0 @@ -export const GAS_LIMIT_MULTIPLIER: number = 1.1 diff --git a/packages/shared/src/lib/core/layer-2/constants/index.ts b/packages/shared/src/lib/core/layer-2/constants/index.ts index 2983ce8dfb..8520b40ce9 100644 --- a/packages/shared/src/lib/core/layer-2/constants/index.ts +++ b/packages/shared/src/lib/core/layer-2/constants/index.ts @@ -4,11 +4,9 @@ export * from './contract-functions.constant' export * from './empty-buffer.constants' export * from './erc20-tokens-poll-interval.constant' export * from './ethereum-address-length.constant' -export * from './evm-contract-abis.constant' export * from './externally-owned-account-type-id.constant' export * from './externally-owned-account.constant' export * from './fallback-estimated-gas.constant' -export * from './gas-limit-multiplier.constant' export * from './isc-magic-contract-address.constant' export * from './layer2-tokens-poll-interval.constant' export * from './target-contracts.constant' diff --git a/packages/shared/src/lib/core/layer-2/enums/contract-type.enum.ts b/packages/shared/src/lib/core/layer-2/enums/contract-type.enum.ts deleted file mode 100644 index af339b9bfb..0000000000 --- a/packages/shared/src/lib/core/layer-2/enums/contract-type.enum.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum ContractType { - Erc20 = 'erc20', - Erc721 = 'erc721', - IscMagic = 'iscMagic', -} diff --git a/packages/shared/src/lib/core/layer-2/enums/index.ts b/packages/shared/src/lib/core/layer-2/enums/index.ts index 2d35c2a71a..9f8d6c6cf5 100644 --- a/packages/shared/src/lib/core/layer-2/enums/index.ts +++ b/packages/shared/src/lib/core/layer-2/enums/index.ts @@ -1,7 +1,6 @@ export * from './abi-type.enum' export * from './allowance.enum' export * from './asset-type.enum' -export * from './contract-type.enum' export * from './erc721-interface-id.enum' export * from './evm-error-message.enum' export * from './gas-speed.enum' diff --git a/packages/shared/src/lib/core/layer-2/types/abi.type.ts b/packages/shared/src/lib/core/layer-2/types/abi.type.ts deleted file mode 100644 index 5c75cb00bd..0000000000 --- a/packages/shared/src/lib/core/layer-2/types/abi.type.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { AbiItem } from 'web3-utils' - -export type Abi = AbiItem[] diff --git a/packages/shared/src/lib/core/layer-2/types/contract.type.ts b/packages/shared/src/lib/core/layer-2/types/contract.type.ts deleted file mode 100644 index f03824da72..0000000000 --- a/packages/shared/src/lib/core/layer-2/types/contract.type.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Contract as _Contract } from 'web3-eth-contract' - -export type Contract = _Contract diff --git a/packages/shared/src/lib/core/layer-2/types/evm-transaction-data.type.ts b/packages/shared/src/lib/core/layer-2/types/evm-transaction-data.type.ts index 1880cb46b7..ad15a312f7 100644 --- a/packages/shared/src/lib/core/layer-2/types/evm-transaction-data.type.ts +++ b/packages/shared/src/lib/core/layer-2/types/evm-transaction-data.type.ts @@ -1,3 +1,3 @@ import type { TypedTxData } from '@ethereumjs/tx' -export type EvmTransactionData = TypedTxData & { estimatedGas?: number; timestamp?: number } +export type EvmTransactionData = TypedTxData & { estimatedGas?: bigint; timestamp?: number } diff --git a/packages/shared/src/lib/core/layer-2/types/index.ts b/packages/shared/src/lib/core/layer-2/types/index.ts index 797274a189..9841e70a0d 100644 --- a/packages/shared/src/lib/core/layer-2/types/index.ts +++ b/packages/shared/src/lib/core/layer-2/types/index.ts @@ -1,5 +1,3 @@ -export * from './abi.type' -export * from './contract.type' export * from './evm-transaction-options.type' export * from './evm-transaction-data.type' export * from './layer-2-account-balance.type' diff --git a/packages/shared/src/lib/core/layer-2/utils/addGasBuffer.ts b/packages/shared/src/lib/core/layer-2/utils/addGasBuffer.ts new file mode 100644 index 0000000000..c041fd61bf --- /dev/null +++ b/packages/shared/src/lib/core/layer-2/utils/addGasBuffer.ts @@ -0,0 +1,5 @@ +const GAS_LIMIT_MULTIPLIER = BigInt(110) + +export function addGasBuffer(estimatedGas: bigint): bigint { + return (estimatedGas * GAS_LIMIT_MULTIPLIER) / BigInt(100) +} diff --git a/packages/shared/src/lib/core/layer-2/utils/buildEvmTransactionData.ts b/packages/shared/src/lib/core/layer-2/utils/buildEvmTransactionData.ts index 6195e7c999..996c83c1d9 100644 --- a/packages/shared/src/lib/core/layer-2/utils/buildEvmTransactionData.ts +++ b/packages/shared/src/lib/core/layer-2/utils/buildEvmTransactionData.ts @@ -1,7 +1,7 @@ import { IEvmNetwork } from '@core/network' import { Converter, HEX_PREFIX } from '@core/utils' -import { GAS_LIMIT_MULTIPLIER } from '../constants' import { EvmTransactionData } from '../types' +import { addGasBuffer } from './addGasBuffer' export async function buildEvmTransactionData( evmNetwork: IEvmNetwork, @@ -19,7 +19,7 @@ export async function buildEvmTransactionData( data, value: amount.toString(), }) - const gasLimit = Math.floor(estimatedGas * GAS_LIMIT_MULTIPLIER) + const gasLimit = addGasBuffer(estimatedGas) const to = destinationAddress diff --git a/packages/shared/src/lib/core/layer-2/utils/fetchIscAssetsForAccount.ts b/packages/shared/src/lib/core/layer-2/utils/fetchIscAssetsForAccount.ts index c33552080d..9e7bde390c 100644 --- a/packages/shared/src/lib/core/layer-2/utils/fetchIscAssetsForAccount.ts +++ b/packages/shared/src/lib/core/layer-2/utils/fetchIscAssetsForAccount.ts @@ -1,7 +1,6 @@ import { IAccountState } from '@core/account' import { calculateAndAddPersistedTokenBalanceChange, calculateAndAddPersistedNftBalanceChange } from '@core/activity' import { ISC_MAGIC_CONTRACT_ADDRESS } from '@core/layer-2/constants' -import { ContractType } from '@core/layer-2/enums' import { getSmartContractHexName, evmAddressToAgentId, getAgentBalanceParameters } from '@core/layer-2/helpers' import { IscChain } from '@core/network' import { isIrc27Nft, getNftsFromNftIds, Nft } from '@core/nfts' @@ -12,6 +11,7 @@ import { getOrRequestTokenFromPersistedTokens } from '@core/token/actions' import { Converter, PartialWithId } from '@core/utils' import { KeyValue } from '@ui' import { get } from 'svelte/store' +import { ISC_SANDBOX_ABI } from '../abis' export async function fetchIscAssetsForAccount( profileId: string, @@ -40,7 +40,7 @@ async function getL2NativeTokenBalancesForAddress(evmAddress: string, iscChain: const agentID = evmAddressToAgentId(evmAddress, iscChain.aliasAddress) const parameters = getAgentBalanceParameters(agentID) try { - const contract = iscChain.getContract(ContractType.IscMagic, ISC_MAGIC_CONTRACT_ADDRESS) + const contract = iscChain.getContract(ISC_SANDBOX_ABI, ISC_MAGIC_CONTRACT_ADDRESS) const nativeTokenResult = (await contract.methods .callView(accountsCoreContract, getBalanceFunc, parameters) .call()) as { items: KeyValue[] } @@ -67,7 +67,7 @@ async function fetchL2Irc27Nfts( const agentID = evmAddressToAgentId(evmAddress, iscChain.aliasAddress) const parameters = getAgentBalanceParameters(agentID) try { - const contract = iscChain.getContract(ContractType.IscMagic, ISC_MAGIC_CONTRACT_ADDRESS) + const contract = iscChain.getContract(ISC_SANDBOX_ABI, ISC_MAGIC_CONTRACT_ADDRESS) const nftResult = (await contract.methods .callView(accountsCoreContract, getBalanceFunc, parameters) .call()) as { items: KeyValue[] } diff --git a/packages/shared/src/lib/core/layer-2/utils/getErc20TransferSmartContractData.ts b/packages/shared/src/lib/core/layer-2/utils/getErc20TransferSmartContractData.ts index 1660e4d8a9..680cb8376e 100644 --- a/packages/shared/src/lib/core/layer-2/utils/getErc20TransferSmartContractData.ts +++ b/packages/shared/src/lib/core/layer-2/utils/getErc20TransferSmartContractData.ts @@ -1,6 +1,6 @@ import { IEvmNetwork } from '@core/network/interfaces' -import { ContractType } from '../enums' import { IToken } from '@core/token/interfaces' +import { ERC20_ABI } from '../abis' export function getErc20TransferSmartContractData( recipientAddress: string, @@ -8,6 +8,6 @@ export function getErc20TransferSmartContractData( amount: bigint, evmNetwork: IEvmNetwork ): string { - const contract = evmNetwork.getContract(ContractType.Erc20, token.id) + const contract = evmNetwork.getContract(ERC20_ABI, token.id) return contract.methods.transfer(recipientAddress, String(amount)).encodeABI() ?? '' } diff --git a/packages/shared/src/lib/core/layer-2/utils/getErc721TransferSmartContractData.ts b/packages/shared/src/lib/core/layer-2/utils/getErc721TransferSmartContractData.ts index cdf1e2f3da..e3eb448d84 100644 --- a/packages/shared/src/lib/core/layer-2/utils/getErc721TransferSmartContractData.ts +++ b/packages/shared/src/lib/core/layer-2/utils/getErc721TransferSmartContractData.ts @@ -1,6 +1,6 @@ import { IEvmNetwork } from '@core/network/interfaces' -import { ContractType } from '../enums' import { IErc721Nft } from '@core/nfts' +import { ERC721_ABI } from '../abis' export function getErc721TransferSmartContractData( originAddress: string, @@ -11,6 +11,6 @@ export function getErc721TransferSmartContractData( const nftAddress = nft.contractMetadata?.address ?? '' const nftTokenId = nft.tokenId ?? '' - const contract = evmNetwork.getContract(ContractType.Erc721, nftAddress) + const contract = evmNetwork.getContract(ERC721_ABI, nftAddress) return contract.methods.safeTransferFrom(originAddress, recipientAddress, nftTokenId).encodeABI() ?? '' } diff --git a/packages/shared/src/lib/core/layer-2/utils/getEvmTokenMetadata.ts b/packages/shared/src/lib/core/layer-2/utils/getEvmTokenMetadata.ts index d9e32198bc..e3dbd462e0 100644 --- a/packages/shared/src/lib/core/layer-2/utils/getEvmTokenMetadata.ts +++ b/packages/shared/src/lib/core/layer-2/utils/getEvmTokenMetadata.ts @@ -1,23 +1,24 @@ -import { ContractType } from '../enums' import { IErc20Metadata } from '@core/token/interfaces' import { TokenStandard } from '@core/token/enums' import { NetworkId } from '@core/network/types' import { getEvmNetwork } from '@core/network' import { IErc721ContractMetadata, NftStandard } from '@core/nfts' +import { ERC20_ABI } from '../abis' +import { ContractAbi } from 'web3' export async function getEvmTokenMetadata( tokenAddress: string, networkId: NetworkId, - tokenType: ContractType = ContractType.Erc20 + tokenAbi: ContractAbi = ERC20_ABI ): Promise { const evmNetwork = getEvmNetwork(networkId) - const contract = evmNetwork?.getContract(tokenType, tokenAddress) + const contract = evmNetwork?.getContract(tokenAbi, tokenAddress) if (contract) { - const isErc20 = tokenType === ContractType.Erc20 + const isErc20 = tokenAbi === ERC20_ABI const [name, symbol, decimals] = await Promise.all([ - contract.methods.name().call(), - contract.methods.symbol().call(), - isErc20 ? contract.methods.decimals().call() : 0, + contract.methods.name().call(), + contract.methods.symbol().call(), + isErc20 ? contract.methods.decimals().call() : 0, ]) const standard = isErc20 ? TokenStandard.Erc20 : NftStandard.Erc721 return { standard, name, symbol, decimals, address: tokenAddress } diff --git a/packages/shared/src/lib/core/layer-2/utils/index.ts b/packages/shared/src/lib/core/layer-2/utils/index.ts index 3139e558cd..70c96c20c6 100644 --- a/packages/shared/src/lib/core/layer-2/utils/index.ts +++ b/packages/shared/src/lib/core/layer-2/utils/index.ts @@ -1,3 +1,4 @@ +export * from './addGasBuffer' export * from './buildAssetAllowance' export * from './buildEvmTransactionData' export * from './buildEvmTransactionDataForNft' diff --git a/packages/shared/src/lib/core/network/classes/evm-network.class.ts b/packages/shared/src/lib/core/network/classes/evm-network.class.ts index 5cd7042c7b..ff9ebfbc59 100644 --- a/packages/shared/src/lib/core/network/classes/evm-network.class.ts +++ b/packages/shared/src/lib/core/network/classes/evm-network.class.ts @@ -1,8 +1,5 @@ import { getAddressFromAccountForNetwork, IAccountState } from '@core/account' import { IError } from '@core/error/interfaces' -import { EVM_CONTRACT_ABIS } from '@core/layer-2/constants' -import { ContractType } from '@core/layer-2/enums' -import { Contract } from '@core/layer-2/types' import { NETWORK_STATUS_POLL_INTERVAL } from '@core/network/constants' import { getPersistedErc721NftsForNetwork, updateErc721NftsOwnership } from '@core/nfts/actions' import { Nft } from '@core/nfts/interfaces' @@ -14,10 +11,12 @@ import { Converter } from '@core/utils' import features from '@features/features' import { CoinType } from '@iota/sdk/out/types' import { writable, Writable } from 'svelte/store' -import Web3 from 'web3' +import { Block, Contract, ContractAbi, Web3 } from 'web3' import { ChainId, NetworkHealth, NetworkNamespace, NetworkType } from '../enums' -import { IBaseEvmNetworkConfiguration, IBlock, IEvmNetwork } from '../interfaces' +import { IBaseEvmNetworkConfiguration, IEvmNetwork } from '../interfaces' import { EvmNetworkId, EvmNetworkType, Web3Provider } from '../types' +import { ERC20_ABI } from '@core/layer-2' +import { BigIntLike } from '@ethereumjs/util' import { BlockscoutApi } from '@auxiliary/blockscout/api' import { convertGweiToWei } from '@core/layer-2/utils' import { IGasPricesBySpeed } from '@core/layer-2' @@ -96,11 +95,7 @@ export class EvmNetwork implements IEvmNetwork { clearInterval(this.statusPoll) } - getContract(type: ContractType, address: string): Contract { - const abi = EVM_CONTRACT_ABIS[type] - if (!abi) { - throw new Error(`Unable to determine contract type "${type}"`) - } + getContract(abi: ContractAbi, address: string): Contract { return new this.provider.eth.Contract(abi, address) } @@ -136,7 +131,7 @@ export class EvmNetwork implements IEvmNetwork { } } - async getLatestBlock(): Promise { + async getLatestBlock(): Promise { const number = await this.provider.eth.getBlockNumber() return this.provider.eth.getBlock(number) } @@ -173,11 +168,11 @@ export class EvmNetwork implements IEvmNetwork { continue } - const contract = this.getContract(ContractType.Erc20, erc20Address) + const contract = this.getContract(ERC20_ABI, erc20Address) if (!contract || !this.coinType) { continue } - const rawBalance = await contract.methods.balanceOf(evmAddress).call() + const rawBalance = await contract.methods.balanceOf(evmAddress).call() erc20TokenBalances[erc20Address] = Converter.bigIntLikeToBigInt(rawBalance) } catch (err) { const error = (err as IError)?.message ?? err diff --git a/packages/shared/src/lib/core/network/interfaces/block.interface.ts b/packages/shared/src/lib/core/network/interfaces/block.interface.ts deleted file mode 100644 index 5a8ef4d5d1..0000000000 --- a/packages/shared/src/lib/core/network/interfaces/block.interface.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { BlockTransactionString } from 'web3-eth' - -/* eslint-disable @typescript-eslint/no-empty-interface */ -export interface IBlock extends BlockTransactionString {} diff --git a/packages/shared/src/lib/core/network/interfaces/evm-network.interface.ts b/packages/shared/src/lib/core/network/interfaces/evm-network.interface.ts index 6cfa56ccea..f3f915390b 100644 --- a/packages/shared/src/lib/core/network/interfaces/evm-network.interface.ts +++ b/packages/shared/src/lib/core/network/interfaces/evm-network.interface.ts @@ -1,14 +1,12 @@ import { IAccountState } from '@core/account/interfaces' -import { ContractType } from '@core/layer-2/enums' -import { Contract } from '@core/layer-2/types' import { Nft } from '@core/nfts/interfaces' import { ITokenBalance } from '@core/token/interfaces' import { ChainId, NetworkNamespace, NetworkType } from '../enums' import { EvmNetworkId, EvmNetworkType, Web3Provider } from '../types' import { IBaseNetwork, IBaseNetworkMetadata } from './base-network.interface' -import { IBlock } from './block.interface' import { IIscChainMetadata } from './isc-chain-metadata.interface' import { BigIntLike } from '@ethereumjs/util' +import { Block, Contract, ContractAbi } from 'web3' import { IGasPricesBySpeed } from '@core/layer-2' export interface IIscChain extends IEvmNetwork { @@ -38,6 +36,6 @@ export interface IEvmNetwork extends IBaseNetwork, IBaseNetworkMetadata { getBalance(account: IAccountState): Promise getNftsForAccount(account: IAccountState): Promise - getContract(type: ContractType, address: string): Contract - getLatestBlock(): Promise + getContract(abi: ContractAbi, address: string): Contract + getLatestBlock(): Promise } diff --git a/packages/shared/src/lib/core/network/interfaces/index.ts b/packages/shared/src/lib/core/network/interfaces/index.ts index d39998aa39..ec91b90712 100644 --- a/packages/shared/src/lib/core/network/interfaces/index.ts +++ b/packages/shared/src/lib/core/network/interfaces/index.ts @@ -1,5 +1,4 @@ export * from './base-network.interface' -export * from './block.interface' export * from './evm-network-configuration.interface' export * from './isc-chain-metadata.interface' export * from './evm-network.interface' diff --git a/packages/shared/src/lib/core/network/types/web3-provider.type.ts b/packages/shared/src/lib/core/network/types/web3-provider.type.ts index 4d48117ba6..0077ed24e8 100644 --- a/packages/shared/src/lib/core/network/types/web3-provider.type.ts +++ b/packages/shared/src/lib/core/network/types/web3-provider.type.ts @@ -1,3 +1,3 @@ -import Web3 from 'web3' +import { Web3 } from 'web3' export type Web3Provider = Web3 diff --git a/packages/shared/src/lib/core/nfts/actions/checkForUntrackedNfts.ts b/packages/shared/src/lib/core/nfts/actions/checkForUntrackedNfts.ts index f13575a7cd..dd6cbf3c3c 100644 --- a/packages/shared/src/lib/core/nfts/actions/checkForUntrackedNfts.ts +++ b/packages/shared/src/lib/core/nfts/actions/checkForUntrackedNfts.ts @@ -1,5 +1,4 @@ import { IAccountState } from '@core/account/interfaces' -import { ContractType } from '@core/layer-2/enums' import { getEvmNetworks } from '@core/network/stores' import { IEvmNetwork } from '@core/network/interfaces' import features from '@features/features' @@ -14,6 +13,7 @@ import { TokenTrackingStatus } from '@core/token' import { IBlockscoutAsset } from '@auxiliary/blockscout/interfaces' import { BlockscoutApi } from '@auxiliary/blockscout/api' import { addOrUpdateNftForAccount } from '../stores' +import { ERC721_ABI } from '@core/layer-2' export async function checkForUntrackedNfts(account: IAccountState): Promise { if (!features?.collectibles?.erc721?.enabled) { @@ -44,12 +44,12 @@ async function persistNftsFromExplorerAsset( const { token, value } = asset const { address, name, symbol } = token try { - const contract = evmNetwork.getContract(ContractType.Erc721, address) + const contract = evmNetwork.getContract(ERC721_ABI, address) const networkId = evmNetwork.id const nftPromises = Array.from({ length: Number(value) }).map(async (_, idx) => { try { - const tokenId = await contract.methods.tokenOfOwnerByIndex(evmAddress, idx).call() + const tokenId = await contract.methods.tokenOfOwnerByIndex(evmAddress, idx).call() const persistedNft = await persistNftWithContractMetadata( evmAddress, networkId, diff --git a/packages/shared/src/lib/core/nfts/actions/persistErc721Nft.ts b/packages/shared/src/lib/core/nfts/actions/persistErc721Nft.ts index 3d3388662c..e4dc964730 100644 --- a/packages/shared/src/lib/core/nfts/actions/persistErc721Nft.ts +++ b/packages/shared/src/lib/core/nfts/actions/persistErc721Nft.ts @@ -1,11 +1,11 @@ import { getEvmTokenMetadata } from '@core/layer-2/utils' -import { ContractType } from '../../layer-2/enums' import { EvmNetworkId } from '@core/network/types' import { persistNftWithContractMetadata } from './persistNftWithContractMetadata' import { IErc721ContractMetadata, IPersistedErc721Nft } from '@core/nfts' import { getEvmNetwork } from '@core/network' import { localize } from '@core/i18n' import { IAccountState, getAddressFromAccountForNetwork } from '@core/account' +import { ERC721_ABI } from '@core/layer-2' export async function persistErc721Nft( tokenAddress: string, @@ -14,17 +14,13 @@ export async function persistErc721Nft( expectedOwner?: IAccountState ): Promise { const evmNetwork = getEvmNetwork(networkId) - const contract = evmNetwork?.getContract(ContractType.Erc721, tokenAddress) + const contract = evmNetwork?.getContract(ERC721_ABI, tokenAddress) if (!contract) { return } - const metadata = (await getEvmTokenMetadata( - tokenAddress, - networkId, - ContractType.Erc721 - )) as IErc721ContractMetadata - let owner = await contract.methods.ownerOf(tokenId).call() + const metadata = (await getEvmTokenMetadata(tokenAddress, networkId, ERC721_ABI)) as IErc721ContractMetadata + let owner = await contract.methods.ownerOf(tokenId).call() owner = owner.toLowerCase() const expectedOwnerAddress = expectedOwner ? getAddressFromAccountForNetwork(expectedOwner, networkId) : undefined diff --git a/packages/shared/src/lib/core/nfts/actions/persistNftWithContractMetadata.ts b/packages/shared/src/lib/core/nfts/actions/persistNftWithContractMetadata.ts index 0770e3e2dc..7499b1f6e1 100644 --- a/packages/shared/src/lib/core/nfts/actions/persistNftWithContractMetadata.ts +++ b/packages/shared/src/lib/core/nfts/actions/persistNftWithContractMetadata.ts @@ -1,16 +1,16 @@ -import { Contract } from '@core/layer-2' import { EvmNetworkId } from '@core/network' import { IErc721ContractMetadata, IPersistedErc721Nft } from '../interfaces' import { addPersistedNft } from '../stores' import { buildPersistedErc721Nft } from '../utils' import { isNftPersisted } from './isNftPersisted' +import { Contract, ContractAbi } from 'web3' export async function persistNftWithContractMetadata( ownerAddress: string, networkId: EvmNetworkId, contractMetadata: IErc721ContractMetadata, tokenId: string, - contract: Contract + contract: Contract ): Promise { const nftId = tokenId ? `${contractMetadata.address.toLowerCase()}:${tokenId.toLowerCase()}` diff --git a/packages/shared/src/lib/core/nfts/utils/buildPersistedErc721Nft.ts b/packages/shared/src/lib/core/nfts/utils/buildPersistedErc721Nft.ts index 02e38520f3..72dba9f29a 100644 --- a/packages/shared/src/lib/core/nfts/utils/buildPersistedErc721Nft.ts +++ b/packages/shared/src/lib/core/nfts/utils/buildPersistedErc721Nft.ts @@ -1,17 +1,17 @@ import { Erc721InterfaceId } from '@core/layer-2/enums' -import { Contract } from '@core/layer-2/types' import { EvmNetworkId } from '@core/network/types' import { MimeType, NftStandard } from '../enums' import { IErc721ContractMetadata, IErc721TokenMetadata, IPersistedErc721Nft } from '../interfaces' import { getPrimaryNftUrl } from './getPrimaryNftUrl' +import { Contract, ContractAbi } from 'web3' export async function buildPersistedErc721Nft( nftId: string, ownerAddress: string, networkId: EvmNetworkId, tokenId: string, - contract: Contract, + contract: Contract, contractMetadata: IErc721ContractMetadata ): Promise { const persistedNft: IPersistedErc721Nft = { @@ -26,10 +26,10 @@ export async function buildPersistedErc721Nft( downloadMetadata: undefined, } - const hasTokenMetadata = await contract.methods.supportsInterface(Erc721InterfaceId.Metadata).call() + const hasTokenMetadata = await contract.methods.supportsInterface(Erc721InterfaceId.Metadata).call() if (hasTokenMetadata) { try { - const tokenUri = await contract.methods.tokenURI(tokenId).call() + const tokenUri = await contract.methods.tokenURI(tokenId).call() const composedTokenUri = getPrimaryNftUrl(tokenUri) if (!composedTokenUri) { throw new Error('Unable to create composed NFT URI!') diff --git a/packages/shared/src/lib/core/nfts/utils/getOwnerOfErc721Nft.ts b/packages/shared/src/lib/core/nfts/utils/getOwnerOfErc721Nft.ts index ef50d62087..f503e30ce4 100644 --- a/packages/shared/src/lib/core/nfts/utils/getOwnerOfErc721Nft.ts +++ b/packages/shared/src/lib/core/nfts/utils/getOwnerOfErc721Nft.ts @@ -1,11 +1,11 @@ -import { ContractType } from '@core/layer-2' +import { ERC721_ABI } from '@core/layer-2' import { getEvmNetwork } from '@core/network' import { IErc721Nft, IPersistedErc721Nft } from '../interfaces' -export async function getOwnerOfErc721Nft(nft: IPersistedErc721Nft | IErc721Nft): Promise { +export async function getOwnerOfErc721Nft(nft: IPersistedErc721Nft | IErc721Nft): Promise { const { networkId, contractMetadata, tokenId } = nft const network = getEvmNetwork(networkId) - const contract = network?.getContract(ContractType.Erc721, contractMetadata.address) - const owner = await contract?.methods.ownerOf(tokenId).call() + const contract = network?.getContract(ERC721_ABI, contractMetadata.address) + const owner = await contract?.methods.ownerOf(tokenId).call() return owner?.toLowerCase() } diff --git a/packages/shared/src/lib/core/transactions/types/local-evm-transaction.interface.ts b/packages/shared/src/lib/core/transactions/types/local-evm-transaction.interface.ts index 098bd32b5b..3b94ae2fa3 100644 --- a/packages/shared/src/lib/core/transactions/types/local-evm-transaction.interface.ts +++ b/packages/shared/src/lib/core/transactions/types/local-evm-transaction.interface.ts @@ -1,4 +1,15 @@ import { EvmTransactionData } from '@core/layer-2/types' -import { TransactionReceipt } from 'web3-core' -export type LocalEvmTransaction = TransactionReceipt & EvmTransactionData +// estimatedGas, gasLimit and nonce has to be a `number` instead of `biging` because bigints cannot be stored in local storage +export type LocalEvmTransaction = Omit & { + status: boolean + transactionHash: string + transactionIndex: number + blockNumber: number + to: string + from: string + gasUsed: number + estimatedGas?: number + gasLimit?: number + nonce?: number +} diff --git a/packages/shared/src/lib/core/transactions/utils/buildLocalEvmTransactionFromBlockscoutTransaction.ts b/packages/shared/src/lib/core/transactions/utils/buildLocalEvmTransactionFromBlockscoutTransaction.ts index fe1d8b0d03..71861ba5e4 100644 --- a/packages/shared/src/lib/core/transactions/utils/buildLocalEvmTransactionFromBlockscoutTransaction.ts +++ b/packages/shared/src/lib/core/transactions/utils/buildLocalEvmTransactionFromBlockscoutTransaction.ts @@ -1,45 +1,25 @@ import { BlockscoutTransactionStatus, IBlockscoutTransaction } from '@auxiliary/blockscout' -import { LegacyTxData, TransactionType } from '@ethereumjs/tx' -import { TransactionReceipt } from 'web3-core' +import { TransactionType } from '@ethereumjs/tx' import { LocalEvmTransaction } from '../types' export function buildPersistedEvmTransactionFromBlockscoutTransaction( blockscoutTransaction: IBlockscoutTransaction ): LocalEvmTransaction { - const transactionReceipt: TransactionReceipt = { - status: blockscoutTransaction.status === BlockscoutTransactionStatus.Ok ? true : false, + return { + status: blockscoutTransaction.status === BlockscoutTransactionStatus.Ok, transactionHash: blockscoutTransaction.hash, transactionIndex: blockscoutTransaction.position, - blockHash: '', // Unknown blockNumber: blockscoutTransaction.block, from: blockscoutTransaction.from.hash.toLowerCase(), to: blockscoutTransaction.to.hash.toLowerCase(), - // contractAddress?: string, - cumulativeGasUsed: Number(blockscoutTransaction.gas_used), // Not sure if this is the right field gasUsed: Number(blockscoutTransaction.gas_used), - effectiveGasPrice: Number(blockscoutTransaction.gas_price), - logs: [], - logsBloom: '', - // events?: { - // [eventName: string]: EventLog, - // }, - } - - const transactionData: LegacyTxData & { estimatedGas?: number; timestamp?: number } = { type: TransactionType.Legacy, ...(blockscoutTransaction.nonce && { nonce: blockscoutTransaction.nonce }), ...(blockscoutTransaction.gas_price && { gasPrice: blockscoutTransaction.gas_price }), ...(blockscoutTransaction.gas_limit && { gasLimit: blockscoutTransaction.gas_limit }), - // to?: AddressLike, // already set in transactionReceipt ...(blockscoutTransaction.value && { value: blockscoutTransaction.value }), ...(blockscoutTransaction.raw_input && blockscoutTransaction.raw_input !== '0x' && { data: blockscoutTransaction.raw_input }), // Not sure if this is the right field - - // estimatedGas?: number, // No way to know this for fetched transactions ...(blockscoutTransaction.timestamp && { timestamp: new Date(blockscoutTransaction.timestamp).getTime() }), } - return { - ...transactionReceipt, - ...transactionData, - } as LocalEvmTransaction } diff --git a/packages/shared/src/lib/core/utils/abiDecoder.ts b/packages/shared/src/lib/core/utils/abiDecoder.ts index b20048e8f0..a4ba9b3b52 100644 --- a/packages/shared/src/lib/core/utils/abiDecoder.ts +++ b/packages/shared/src/lib/core/utils/abiDecoder.ts @@ -1,14 +1,17 @@ -import { Abi } from '@core/layer-2' -import Web3 from 'web3' -import type { AbiItem, AbiInput } from 'web3-utils' +import type { AbiEventFragment, AbiFunctionFragment, AbiInput, AbiParameter, ContractAbi, Web3 } from 'web3' export class AbiDecoder { - public abi: Record + public abi: Record public web3: Web3 - constructor(_abi: Abi, _web3: Web3) { - const tmpAbi: Record = {} - for (const abiItem of _abi) { + constructor(_abi: ContractAbi, _web3: Web3) { + const tmpAbi: Record = {} + for (let abiItem of _abi) { + if (abiItem.type !== 'function' && abiItem.type !== 'event') { + continue + } + abiItem = abiItem as AbiFunctionFragment | AbiEventFragment + const functionParameters = abiItem.inputs?.map(concatInputsToString).join(',') ?? '' const functionSignature = `${abiItem.name}(${functionParameters})` @@ -45,7 +48,7 @@ export class AbiDecoder { return undefined } - const decoded = this.web3.eth.abi.decodeParameters(abiItem.inputs ?? [], data.slice(10)) + const decoded = this.web3.eth.abi.decodeParameters((abiItem.inputs as AbiInput[]) ?? [], data.slice(10)) const inputs: { [key: string]: { @@ -76,7 +79,7 @@ export class AbiDecoder { } } - private parseInputParameter(input: AbiInput, value: unknown): unknown { + private parseInputParameter(input: AbiParameter, value: unknown): unknown { if (input.type === 'tuple') { const parsedValueMap: { [key: string]: unknown } = {} input.components?.forEach((_input, index) => { @@ -91,9 +94,9 @@ export class AbiDecoder { const isArray = Array.isArray(value) if (isArray) { - return value.map((val) => this.web3.utils.toBN(val).toString()) + return value.map((val) => this.web3.utils.toBigInt(val).toString()) } else { - return this.web3.utils.toBN(value as string).toString() + return this.web3.utils.toBigInt(value as string).toString() } } else if (input.type.startsWith('address')) { const isArray = Array.isArray(value) @@ -109,7 +112,7 @@ export class AbiDecoder { } } -function concatInputsToString(input: AbiInput): string { +function concatInputsToString(input: AbiParameter): string { if (input.type === 'tuple') { return '(' + input.components?.map(concatInputsToString).join(',') + ')' } else if (input.type === 'tuple[]') { diff --git a/packages/shared/src/lib/core/wallet/actions/send/createEvmToStardustTransaction.ts b/packages/shared/src/lib/core/wallet/actions/send/createEvmToStardustTransaction.ts index 5aa50a8f9f..04d3055c47 100644 --- a/packages/shared/src/lib/core/wallet/actions/send/createEvmToStardustTransaction.ts +++ b/packages/shared/src/lib/core/wallet/actions/send/createEvmToStardustTransaction.ts @@ -3,7 +3,7 @@ import { IError } from '@core/error' import { localize } from '@core/i18n' import { buildUnwrapAssetParameters } from '@core/layer-2/actions' import { ISC_MAGIC_CONTRACT_ADDRESS } from '@core/layer-2/constants' -import { AssetType, ContractType, EvmErrorMessage } from '@core/layer-2/enums' +import { AssetType, EvmErrorMessage } from '@core/layer-2/enums' import { EvmTransactionData, TransferredAsset } from '@core/layer-2/types' import { buildAssetAllowance, buildEvmTransactionData, getL2ToL1StorageDepositBuffer } from '@core/layer-2/utils' import { StardustNetworkId } from '@core/network/types' @@ -15,6 +15,7 @@ import { TokenStandard } from '@core/token/enums' import { SendFlowType } from '../../enums' import { SendFlowParameters } from '../../types' import { getAmountAndTokenFromSendFlowParameters } from '../../utils' +import { ISC_SANDBOX_ABI } from '@core/layer-2' export async function createEvmToStardustTransaction( sendFlowParameters: SendFlowParameters, @@ -60,7 +61,7 @@ export async function createEvmToStardustTransaction( } const assetAllowance = buildAssetAllowance(iscChain, transferredAsset, storageDepositRequired) - const contract = iscChain?.getContract(ContractType.IscMagic, ISC_MAGIC_CONTRACT_ADDRESS) + const contract = iscChain?.getContract(ISC_SANDBOX_ABI, ISC_MAGIC_CONTRACT_ADDRESS) const data = (await contract?.methods .send(targetAddress, assetAllowance, adjustMinimumStorageDeposit, sendMetadata, sendOptions) diff --git a/packages/shared/src/lib/core/wallet/actions/send/sendAndPersistTransactionFromEvm.ts b/packages/shared/src/lib/core/wallet/actions/send/sendAndPersistTransactionFromEvm.ts index 80bbaabcb1..3fbd64d8c6 100644 --- a/packages/shared/src/lib/core/wallet/actions/send/sendAndPersistTransactionFromEvm.ts +++ b/packages/shared/src/lib/core/wallet/actions/send/sendAndPersistTransactionFromEvm.ts @@ -33,11 +33,20 @@ export async function sendAndPersistTransactionFromEvm( // taking precedence over send/receive activities const evmTransaction: LocalEvmTransaction = { ...preparedTransaction, - ...transactionReceipt, + status: true, + transactionHash: transactionReceipt.transactionHash.toString(), + transactionIndex: Number(transactionReceipt.transactionIndex), + blockNumber: Number(transactionReceipt.blockNumber), + to: transactionReceipt.to, + from: transactionReceipt.from, + gasUsed: Number(transactionReceipt.gasUsed), + estimatedGas: Number(preparedTransaction.estimatedGas), + nonce: Number(preparedTransaction.nonce), + gasLimit: Number(preparedTransaction.gasLimit), timestamp: Date.now(), } await persistEvmTransaction(profileId, account, evmNetwork, evmTransaction) - return transactionReceipt.transactionHash + return evmTransaction.transactionHash } async function persistEvmTransaction( diff --git a/packages/shared/src/lib/core/wallet/actions/sendSignedEvmTransaction.ts b/packages/shared/src/lib/core/wallet/actions/sendSignedEvmTransaction.ts index 133a93ed9e..691d01783e 100644 --- a/packages/shared/src/lib/core/wallet/actions/sendSignedEvmTransaction.ts +++ b/packages/shared/src/lib/core/wallet/actions/sendSignedEvmTransaction.ts @@ -1,8 +1,8 @@ -import { TransactionReceipt } from 'web3-core' import { updateSelectedAccount } from '@core/account/stores' import { closePopup } from '../../../../../../desktop/lib/auxiliary/popup' import { IEvmNetwork } from '@core/network' import { getIsActiveLedgerProfile } from '@core/profile/stores' +import { TransactionReceipt } from 'web3' export async function sendSignedEvmTransaction( evmNetwork: IEvmNetwork, diff --git a/packages/shared/src/lib/core/wallet/tests/getOutputParameters.test.ts b/packages/shared/src/lib/core/wallet/tests/getOutputParameters.test.ts index 80d964e0b1..1d22d12e20 100644 --- a/packages/shared/src/lib/core/wallet/tests/getOutputParameters.test.ts +++ b/packages/shared/src/lib/core/wallet/tests/getOutputParameters.test.ts @@ -101,10 +101,6 @@ jest.mock('../../layer-2/actions/getGasFeeForLayer1ToLayer2Transaction', () => ( getGasFeeForLayer1ToLayer2Transaction: jest.fn(({ type }) => FALLBACK_ESTIMATED_GAS[type]), })) -jest.mock('../../layer-2/constants/gas-limit-multiplier.constant', () => ({ - GAS_LIMIT_MULTIPLIER: 1.1, -})) - jest.mock('../../network/actions/getActiveNetworkId.ts', () => ({ getActiveNetworkId: jest.fn(() => { return SupportedNetworkId.Shimmer diff --git a/patches/@noble+hashes+1.3.3.patch b/patches/@noble+hashes+1.3.3.patch new file mode 100644 index 0000000000..2382e0f8dc --- /dev/null +++ b/patches/@noble+hashes+1.3.3.patch @@ -0,0 +1,50 @@ +diff --git a/node_modules/@noble/hashes/esm/utils.js b/node_modules/@noble/hashes/esm/utils.js +index 65546d2..88e9246 100644 +--- a/node_modules/@noble/hashes/esm/utils.js ++++ b/node_modules/@noble/hashes/esm/utils.js +@@ -5,7 +5,7 @@ + // from `crypto` to `cryptoNode`, which imports native module. + // Makes the utils un-importable in browsers without a bundler. + // Once node.js 18 is deprecated (2025-04-30), we can just drop the import. +-import { crypto } from '@noble/hashes/crypto'; ++// import { crypto } from '@noble/hashes/crypto'; + // Cast array to different type + export const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength); + export const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4)); +diff --git a/node_modules/@noble/hashes/src/utils.ts b/node_modules/@noble/hashes/src/utils.ts +index 28d4df7..78b5dc7 100644 +--- a/node_modules/@noble/hashes/src/utils.ts ++++ b/node_modules/@noble/hashes/src/utils.ts +@@ -6,7 +6,7 @@ + // from `crypto` to `cryptoNode`, which imports native module. + // Makes the utils un-importable in browsers without a bundler. + // Once node.js 18 is deprecated (2025-04-30), we can just drop the import. +-import { crypto } from '@noble/hashes/crypto'; ++// import { crypto } from '@noble/hashes/crypto'; + + // prettier-ignore + export type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array | +diff --git a/node_modules/@noble/hashes/utils.js b/node_modules/@noble/hashes/utils.js +index c907436..52c92de 100644 +--- a/node_modules/@noble/hashes/utils.js ++++ b/node_modules/@noble/hashes/utils.js +@@ -8,7 +8,7 @@ exports.randomBytes = exports.wrapXOFConstructorWithOpts = exports.wrapConstruct + // from `crypto` to `cryptoNode`, which imports native module. + // Makes the utils un-importable in browsers without a bundler. + // Once node.js 18 is deprecated (2025-04-30), we can just drop the import. +-const crypto_1 = require("@noble/hashes/crypto"); ++// const crypto_1 = require("@noble/hashes/crypto"); + // Cast array to different type + const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength); + exports.u8 = u8; +@@ -189,8 +189,8 @@ exports.wrapXOFConstructorWithOpts = wrapXOFConstructorWithOpts; + * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS. + */ + function randomBytes(bytesLength = 32) { +- if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') { +- return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength)); ++ if (crypto.crypto && typeof crypto.crypto.getRandomValues === 'function') { ++ return crypto.crypto.getRandomValues(new Uint8Array(bytesLength)); + } + throw new Error('crypto.getRandomValues must be defined'); + } diff --git a/yarn.lock b/yarn.lock index f42da2ece6..2785adb726 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,11 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== +"@adraffy/ens-normalize@^1.8.8": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + "@alloc/quick-lru@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" @@ -813,14 +818,6 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.42.0.tgz#484a1d638de2911e6f5a30c12f49c7e4a3270fb6" integrity sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw== -"@ethereumjs/common@2.6.5", "@ethereumjs/common@^2.6.4": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" - integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.5" - "@ethereumjs/common@4.3.0", "@ethereumjs/common@^4.3.0": version "4.3.0" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-4.3.0.tgz#5b45eec7dcf521fa4ddaf0b383072fbcf9913553" @@ -846,14 +843,6 @@ resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== -"@ethereumjs/tx@3.5.2": - version "3.5.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" - integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== - dependencies: - "@ethereumjs/common" "^2.6.4" - ethereumjs-util "^7.1.5" - "@ethereumjs/tx@5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-5.3.0.tgz#473f351729ef4e30eaa3a3fb5aaccd4405a7ee41" @@ -899,7 +888,7 @@ "@ethereumjs/rlp" "^5.0.2" ethereum-cryptography "^2.1.3" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.5.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== @@ -1174,7 +1163,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^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== @@ -2014,7 +2003,7 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": +"@sindresorhus/is@^4.0.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== @@ -2282,13 +2271,6 @@ dependencies: defer-to-connect "^2.0.0" -"@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== - dependencies: - defer-to-connect "^2.0.1" - "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" @@ -2332,13 +2314,6 @@ dependencies: "@babel/types" "^7.20.7" -"@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": - version "5.1.5" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" - integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== - dependencies: - "@types/node" "*" - "@types/body-parser@*": version "1.19.5" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" @@ -2354,7 +2329,7 @@ dependencies: "@types/node" "*" -"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": +"@types/cacheable-request@^6.0.1": version "6.0.3" resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== @@ -2545,11 +2520,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== -"@types/node@^12.12.6": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - "@types/node@^18.15.12": version "18.19.23" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.23.tgz#e02c759218bc9957423a3f7d585d511b17be2351" @@ -2564,13 +2534,6 @@ dependencies: undici-types "~5.26.4" -"@types/pbkdf2@^3.0.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" - integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== - dependencies: - "@types/node" "*" - "@types/plist@^3.0.1": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.5.tgz#9a0c49c0f9886c8c8696a7904dd703f6284036e0" @@ -2613,13 +2576,6 @@ dependencies: htmlparser2 "^8.0.0" -"@types/secp256k1@^4.0.1": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" - integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== - dependencies: - "@types/node" "*" - "@types/semver@^7.5.0": version "7.5.8" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" @@ -2697,6 +2653,13 @@ tapable "^2.2.0" webpack "^5" +"@types/ws@8.5.3": + version "8.5.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + "@types/ws@^8.5.10": version "8.5.10" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" @@ -3323,10 +3286,10 @@ abab@^2.0.6: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abortcontroller-polyfill@^1.7.5: - version "1.7.5" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" - integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== +abitype@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.7.1.tgz#16db20abe67de80f6183cf75f3de1ff86453b745" + integrity sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ== abstract-level@^1.0.2: version "1.0.4" @@ -3408,7 +3371,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3591,14 +3554,7 @@ arraybuffer.prototype.slice@^1.0.3: is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: +assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== @@ -3613,11 +3569,6 @@ async-exit-hook@^2.0.1: resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - async@^3.2.3: version "3.2.5" resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" @@ -3657,16 +3608,6 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== - axios@^1.3.4, axios@^1.6.0, axios@^1.6.5: version "1.6.7" resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" @@ -3748,7 +3689,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^3.0.2, base-x@^3.0.8: +base-x@^3.0.2: version "3.0.9" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== @@ -3765,13 +3706,6 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - bech32@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" @@ -3787,7 +3721,7 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bignumber.js@^9.0.0, bignumber.js@^9.1.2: +bignumber.js@^9.1.2: version "9.1.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== @@ -3813,11 +3747,6 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" -blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - bluebird-lst@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c" @@ -3825,27 +3754,22 @@ bluebird-lst@^1.0.9: dependencies: bluebird "^3.5.5" -bluebird@^3.5.0, bluebird@^3.5.5: +bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.11.6, bn.js@^4.11.9: +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.1.2, bn.js@^5.2.0, bn.js@^5.2.1: +bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.20.2, body-parser@^1.16.0: +body-parser@1.20.2: version "1.20.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== @@ -3903,18 +3827,6 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - browserslist@^4.21.10, browserslist@^4.22.2: version "4.23.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" @@ -3963,16 +3875,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-to-arraybuffer@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" - integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - buffer@6.0.3, buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" @@ -3981,7 +3883,7 @@ buffer@6.0.3, buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" -buffer@^5.0.5, buffer@^5.1.0, buffer@^5.5.0, buffer@^5.6.0: +buffer@^5.1.0, buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -3989,13 +3891,6 @@ buffer@^5.0.5, buffer@^5.1.0, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -bufferutil@^4.0.1: - version "4.0.8" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" - integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== - dependencies: - node-gyp-build "^4.3.0" - builder-util-runtime@9.2.3: version "9.2.3" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.3.tgz#0a82c7aca8eadef46d67b353c638f052c206b83c" @@ -4061,11 +3956,6 @@ cacheable-lookup@^5.0.3: resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== -cacheable-lookup@^6.0.4: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" - integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== - cacheable-request@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" @@ -4120,11 +4010,6 @@ cargo-cp-artifact@^0.1.6: resolved "https://registry.yarnpkg.com/cargo-cp-artifact/-/cargo-cp-artifact-0.1.8.tgz#353814f49f6aa76601a4bcb3ea5f3071180b90de" integrity sha512-3j4DaoTrsCD1MRkTF2Soacii0Nx7UHCce0EwUf4fHnggwiE4fbmF2AbnfzayR36DF8KGadfh7M/Yfy625kgPlA== -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - catering@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" @@ -4172,7 +4057,7 @@ char-regex@^1.0.2: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.1, chownr@^1.1.4: +chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -4197,18 +4082,7 @@ ci-info@^3.2.0, ci-info@^3.7.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== -cids@^0.7.1: - version "0.7.5" - resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" - integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== - dependencies: - buffer "^5.5.0" - class-is "^1.1.0" - multibase "~0.6.0" - multicodec "^1.0.0" - multihashes "~0.4.15" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: +cipher-base@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== @@ -4228,11 +4102,6 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -class-is@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" - integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== - class-transformer@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.5.1.tgz#24147d5dffd2a6cea930a3250a677addf96ab336" @@ -4372,7 +4241,7 @@ colorette@^2.0.10, colorette@^2.0.14, colorette@^2.0.20: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -4459,15 +4328,6 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-hash@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" - integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== - dependencies: - cids "^0.7.1" - multicodec "^0.5.5" - multihashes "^0.4.15" - content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" @@ -4515,15 +4375,7 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cors@^2.8.1: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -crc-32@^1.2.0: +crc-32@^1.2.0, crc-32@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== @@ -4535,7 +4387,7 @@ crc@^3.8.0: dependencies: buffer "^5.1.0" -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: +create-hash@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -4546,18 +4398,6 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - create-jest@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" @@ -4672,13 +4512,6 @@ d@1, d@^1.0.1, d@^1.0.2: es5-ext "^0.10.64" type "^2.7.2" -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" @@ -4688,7 +4521,7 @@ data-urls@^3.0.2: whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" -debug@2.6.9, debug@^2.2.0: +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -4707,18 +4540,11 @@ decimal.js@^10.4.2: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== -decode-uri-component@^0.2.0, decode-uri-component@^0.2.2: +decode-uri-component@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -4766,7 +4592,7 @@ default-gateway@^6.0.3: dependencies: execa "^5.0.0" -defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: +defer-to-connect@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== @@ -4950,11 +4776,6 @@ dom-serializer@^2.0.0: domhandler "^5.0.2" entities "^4.2.0" -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" @@ -5013,14 +4834,6 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -5125,19 +4938,6 @@ elliptic@6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -elliptic@^6.4.0, elliptic@^6.5.4: - version "6.5.5" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" - integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== - 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" - emittery@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" @@ -5292,7 +5092,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.53, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: version "0.10.64" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== @@ -5321,11 +5121,6 @@ es6-promise@^3.1.2: resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== -es6-promise@^4.2.8: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.4" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" @@ -5655,63 +5450,6 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -eth-ens-namehash@2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" - integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== - dependencies: - idna-uts46-hx "^2.3.1" - js-sha3 "^0.5.7" - -eth-lib@0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" - integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - -eth-lib@^0.1.26: - version "0.1.29" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" - integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - nano-json-stream-parser "^0.1.2" - servify "^0.1.12" - ws "^3.0.0" - xhr-request-promise "^0.1.2" - -ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== - dependencies: - js-sha3 "^0.8.0" - -ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" - integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== - dependencies: - "@types/pbkdf2" "^3.0.0" - "@types/secp256k1" "^4.0.1" - blakejs "^1.1.0" - browserify-aes "^1.2.0" - bs58check "^2.1.2" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2, ethereum-cryptography@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" @@ -5722,17 +5460,6 @@ ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2, ethereum-cryptograph "@scure/bip32" "1.3.3" "@scure/bip39" "1.2.2" -ethereumjs-util@^7.1.5: - version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - ethers@5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" @@ -5769,14 +5496,6 @@ ethers@5.7.2: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - event-emitter@^0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" @@ -5785,11 +5504,6 @@ event-emitter@^0.3.5: d "1" es5-ext "~0.10.14" -eventemitter3@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -5805,14 +5519,6 @@ events@^3.2.0, events@^3.3.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - execa@8.0.1, execa@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" @@ -5864,7 +5570,7 @@ expect@^29.0.0, expect@^29.7.0: jest-message-util "^29.7.0" jest-util "^29.7.0" -express@^4.14.0, express@^4.17.3: +express@^4.17.3: version "4.19.2" resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== @@ -5923,11 +5629,6 @@ ext@^1.7.0: dependencies: type "^2.7.2" -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - extract-zip@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" @@ -5939,11 +5640,6 @@ extract-zip@^2.0.1: optionalDependencies: "@types/yauzl" "^2.9.1" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - extsprintf@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" @@ -6119,16 +5815,6 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data-encoder@1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" - integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -6138,15 +5824,6 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -6185,15 +5862,6 @@ fs-extra@^11.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -6213,13 +5881,6 @@ fs-extra@^9.0.0, fs-extra@^9.0.1: jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -6305,7 +5966,7 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-stream@^6.0.0, get-stream@^6.0.1: +get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -6331,13 +5992,6 @@ get-tsconfig@^4.7.0: dependencies: resolve-pkg-maps "^1.0.0" -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" @@ -6390,14 +6044,6 @@ global-agent@^3.0.0: semver "^7.3.2" serialize-error "^7.0.1" -global@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -6458,25 +6104,6 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -got@12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" - integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== - dependencies: - "@sindresorhus/is" "^4.6.0" - "@szmarczak/http-timer" "^5.0.1" - "@types/cacheable-request" "^6.0.2" - "@types/responselike" "^1.0.0" - cacheable-lookup "^6.0.4" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - form-data-encoder "1.7.1" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^2.0.0" - got@^11.8.5: version "11.8.6" resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" @@ -6525,19 +6152,6 @@ handle-thing@^2.0.0: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -6586,7 +6200,7 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: +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== @@ -6690,11 +6304,6 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-https@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== - http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" @@ -6734,15 +6343,6 @@ http-shutdown@^1.2.2: resolved "https://registry.yarnpkg.com/http-shutdown/-/http-shutdown-1.2.2.tgz#41bc78fc767637c4c95179bc492f312c0ae64c5f" integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - http-status-codes@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-2.3.0.tgz#987fefb28c69f92a43aecc77feec2866349a8bfc" @@ -6756,14 +6356,6 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" -http2-wrapper@^2.1.10: - version "2.2.1" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" - integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" - https-browserify@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" @@ -6824,13 +6416,6 @@ idb-keyval@^6.2.1: resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== -idna-uts46-hx@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" - integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== - dependencies: - punycode "2.1.0" - ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -7057,11 +6642,6 @@ is-fullwidth-code-point@^5.0.0: dependencies: get-east-asian-width "^1.0.0" -is-function@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -7081,11 +6661,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - is-inside-container@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" @@ -7205,11 +6780,6 @@ is-typed-array@^1.1.13, is-typed-array@^1.1.3: dependencies: which-typed-array "^1.1.14" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -7276,10 +6846,10 @@ isomorphic-unfetch@3.1.0, isomorphic-unfetch@^3.1.0: node-fetch "^2.6.1" unfetch "^4.2.0" -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== +isomorphic-ws@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" + integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.2" @@ -7739,16 +7309,11 @@ jiti@^1.18.2, jiti@^1.21.0: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== -js-sha3@0.8.0, js-sha3@^0.8.0: +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-sha3@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -7769,11 +7334,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - jsdom@^20.0.0: version "20.0.3" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" @@ -7836,11 +7396,6 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -7856,7 +7411,7 @@ json-stable-stringify@^1.0.2: jsonify "^0.0.1" object-keys "^1.1.1" -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== @@ -7892,17 +7447,7 @@ jsonify@^0.0.1: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -keccak@^3.0.0, keccak@^3.0.3: +keccak@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== @@ -8170,11 +7715,6 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - lru-cache@^10.0.2, "lru-cache@^9.1.1 || ^10.0.0": version "10.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" @@ -8338,7 +7878,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.28.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.16, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -8385,13 +7925,6 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -8448,14 +7981,6 @@ minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - minipass@^3.0.0: version "3.3.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" @@ -8473,13 +7998,6 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - minizlib@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -8493,19 +8011,7 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== - dependencies: - mkdirp "*" - -mkdirp@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== - -mkdirp@^0.5.1, mkdirp@^0.5.5: +mkdirp@^0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -8527,11 +8033,6 @@ mlly@^1.2.0, mlly@^1.6.1: pkg-types "^1.0.3" ufo "^1.3.2" -mock-fs@^4.1.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" - integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== - modify-filename@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/modify-filename/-/modify-filename-1.1.0.tgz#9a2dec83806fbb2d975f22beec859ca26b393aa1" @@ -8562,22 +8063,6 @@ ms@2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multibase@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" - integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multibase@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" - integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - multicast-dns@^7.2.5: version "7.2.5" resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" @@ -8586,35 +8071,11 @@ multicast-dns@^7.2.5: dns-packet "^5.2.2" thunky "^1.0.2" -multicodec@^0.5.5: - version "0.5.7" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" - integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== - dependencies: - varint "^5.0.0" - -multicodec@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" - integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== - dependencies: - buffer "^5.6.0" - varint "^5.0.0" - multiformats@^9.4.2: version "9.9.0" resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== -multihashes@^0.4.15, multihashes@~0.4.15: - version "0.4.21" - resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" - integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== - dependencies: - buffer "^5.5.0" - multibase "^0.7.0" - varint "^5.0.0" - mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -8624,11 +8085,6 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nano-json-stream-parser@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" - integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== - nanoid@3.3.7, nanoid@^3.3.6, nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" @@ -8818,25 +8274,12 @@ npm-run-path@^5.1.0: dependencies: path-key "^4.0.0" -number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - nwsapi@2.2.7, nwsapi@^2.2.2: version "2.2.7" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -8866,13 +8309,6 @@ object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -oboe@2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== - dependencies: - http-https "^1.0.0" - obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -8970,11 +8406,6 @@ p-cancelable@^2.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -9024,11 +8455,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-headers@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" - integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -9150,27 +8576,11 @@ pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== -pbkdf2@^3.0.17: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - periscopic@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a" @@ -9498,11 +8908,6 @@ process-warning@^1.0.0: resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -9537,7 +8942,7 @@ proxy-from-env@^1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -psl@^1.1.28, psl@^1.1.33: +psl@^1.1.33: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== @@ -9550,11 +8955,6 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== - punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -9596,11 +8996,6 @@ qs@^6.11.2: dependencies: side-channel "^1.0.6" -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - query-string@7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" @@ -9611,15 +9006,6 @@ query-string@7.1.3: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -9798,32 +9184,6 @@ regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" -request@^2.79.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -9839,7 +9199,7 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: +resolve-alpn@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== @@ -9936,7 +9296,7 @@ rimraf@^5.0.5: dependencies: glob "^10.3.7" -ripemd160@^2.0.0, ripemd160@^2.0.1: +ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== @@ -9944,13 +9304,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - roarr@^2.15.3: version "2.15.4" resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" @@ -10004,7 +9357,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -10030,7 +9383,7 @@ safe-stable-stringify@^2.1.0: resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -10111,20 +9464,11 @@ schema-utils@^4.0.0, schema-utils@^4.2.0: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" -scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: +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== -secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -10216,17 +9560,6 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" -servify@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" - integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== - dependencies: - body-parser "^1.16.0" - cors "^2.8.1" - express "^4.14.0" - request "^2.79.0" - xhr "^2.3.3" - set-function-length@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" @@ -10264,7 +9597,7 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -sha.js@^2.4.0, sha.js@^2.4.8: +sha.js@^2.4.0: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -10340,15 +9673,6 @@ simple-concat@^1.0.0: resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== -simple-get@^2.7.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" - integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - simple-get@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" @@ -10560,21 +9884,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@^1.7.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" - integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" @@ -10622,11 +9931,6 @@ stream-shift@^1.0.2: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== - strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -10772,13 +10076,6 @@ strip-final-newline@^3.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== -strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -10966,23 +10263,6 @@ svelty-picker@4.1.4: dependencies: "@floating-ui/dom" "^1.4.5" -swarm-js@^0.1.40: - version "0.1.42" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" - integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== - dependencies: - bluebird "^3.5.0" - buffer "^5.0.5" - eth-lib "^0.1.26" - fs-extra "^4.0.2" - got "^11.8.5" - mime-types "^2.1.16" - mkdirp-promise "^5.0.1" - mock-fs "^4.1.0" - setimmediate "^1.0.5" - tar "^4.0.2" - xhr-request "^1.0.1" - symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -11053,19 +10333,6 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^4.0.2: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - tar@^6.1.12: version "6.2.0" resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" @@ -11152,11 +10419,6 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== - timers-ext@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" @@ -11229,14 +10491,6 @@ tough-cookie@^4.1.2: universalify "^0.2.0" url-parse "^1.5.3" -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - tr46@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" @@ -11288,11 +10542,6 @@ tweetnacl-util@^0.15.1: resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" @@ -11382,13 +10631,6 @@ typed-array-length@^1.0.5: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - typescript@5.3.3: version "5.3.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" @@ -11416,11 +10658,6 @@ uint8arrays@^3.0.0, uint8arrays@^3.1.0: dependencies: multiformats "^9.4.2" -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -11544,11 +10781,6 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -url-set-query@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" - integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== - url@0.11.3: version "0.11.3" resolved "https://registry.yarnpkg.com/url/-/url-0.11.3.tgz#6f495f4b935de40ce4a0a52faee8954244f3d3ad" @@ -11566,23 +10798,11 @@ usb@2.9.0: node-addon-api "^6.0.0" node-gyp-build "^4.5.0" -utf-8-validate@^5.0.2: - version "5.0.10" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" - integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== - dependencies: - node-gyp-build "^4.3.0" - utf8-byte-length@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== -utf8@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -11609,21 +10829,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - v8-to-istanbul@^9.0.1: version "9.2.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" @@ -11646,25 +10856,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -varint@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" - integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== - -vary@^1, vary@~1.1.2: +vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - verror@^1.10.0: version "1.10.1" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb" @@ -11711,235 +10907,218 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -web3-bzz@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.10.4.tgz#dcc787970767d9004c73d11d0eeef774ce16b880" - integrity sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw== +web3-core@^4.3.0, web3-core@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-4.3.2.tgz#f24b11d6a57dee527de8d42c89de2a439f0c4bed" + integrity sha512-uIMVd/j4BgOnwfpY8ZT+QKubOyM4xohEhFZXz9xB8wimXWMMlYVlIK/TbfHqFolS9uOerdSGhsMbcK9lETae8g== + dependencies: + web3-errors "^1.1.4" + web3-eth-accounts "^4.1.0" + web3-eth-iban "^4.0.7" + web3-providers-http "^4.1.0" + web3-providers-ws "^4.0.7" + web3-types "^1.3.1" + web3-utils "^4.1.0" + web3-validator "^2.0.3" + optionalDependencies: + web3-providers-ipc "^4.0.7" + +web3-errors@^1.1.3, web3-errors@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web3-errors/-/web3-errors-1.1.4.tgz#5667a0a5f66fc936e101ef32032ccc1e8ca4d5a1" + integrity sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ== dependencies: - "@types/node" "^12.12.6" - got "12.1.0" - swarm-js "^0.1.40" + web3-types "^1.3.1" -web3-core-helpers@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz#bd2b4140df2016d5dd3bb2b925fc29ad8678677c" - integrity sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g== +web3-eth-abi@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-4.2.1.tgz#b1260dace8380221f12f4274af240c1dfed1045c" + integrity sha512-IE91WUhhiDpBtbkl/DHUoZz7z7T5FXvl3zPLkrxT+dNlOT+wni+US/67jQCLvJRbqf9ApQ26lVYry0bovFgyqA== + dependencies: + abitype "0.7.1" + web3-errors "^1.1.4" + web3-types "^1.6.0" + web3-utils "^4.2.3" + web3-validator "^2.0.5" + +web3-eth-accounts@^4.1.0, web3-eth-accounts@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-4.1.2.tgz#652d6e3daf4d6cb3fe67cec6a878e768f6e8b8e8" + integrity sha512-y0JynDeTDnclyuE9mShXLeEj+BCrPHxPHOyPCgTchUBQsALF9+0OhP7WiS3IqUuu0Hle5bjG2f5ddeiPtNEuLg== dependencies: - web3-eth-iban "1.10.4" - web3-utils "1.10.4" + "@ethereumjs/rlp" "^4.0.1" + crc-32 "^1.2.2" + ethereum-cryptography "^2.0.0" + web3-errors "^1.1.4" + web3-types "^1.6.0" + web3-utils "^4.2.3" + web3-validator "^2.0.5" -web3-core-method@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.10.4.tgz#566b52f006d3cbb13b21b72b8d2108999bf5d6bf" - integrity sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA== +web3-eth-contract@^4.3.0, web3-eth-contract@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-4.4.0.tgz#21760ef39ab95b34c55e7eaee316e0632e56cd21" + integrity sha512-pZ/w6Lb6ZDUUs7f5GCKXiHDAGGvt2tdwiHkvgmQTRnq9b0MEsUpteDyPYspHxKzQWLgbeK37jPb8zbQe4kE/Hg== + dependencies: + web3-core "^4.3.2" + web3-errors "^1.1.4" + web3-eth "^4.6.0" + web3-eth-abi "^4.2.1" + web3-types "^1.6.0" + web3-utils "^4.2.3" + web3-validator "^2.0.5" + +web3-eth-ens@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-4.2.0.tgz#8734b034efd48a735f7052fef0205653a78b84cb" + integrity sha512-qYj34te2UctoObt8rlEIY/t2MuTMiMiiHhO2JAHRGqSLCQ7b8DM3RpvkiiSB0N0ZyEn+CetZqJCTYb8DNKBS/g== + dependencies: + "@adraffy/ens-normalize" "^1.8.8" + web3-core "^4.3.2" + web3-errors "^1.1.4" + web3-eth "^4.5.0" + web3-eth-contract "^4.3.0" + web3-net "^4.0.7" + web3-types "^1.5.0" + web3-utils "^4.2.2" + web3-validator "^2.0.5" + +web3-eth-iban@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-4.0.7.tgz#ee504f845d7b6315f0be78fcf070ccd5d38e4aaf" + integrity sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ== dependencies: - "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.10.4" - web3-core-promievent "1.10.4" - web3-core-subscriptions "1.10.4" - web3-utils "1.10.4" + web3-errors "^1.1.3" + web3-types "^1.3.0" + web3-utils "^4.0.7" + web3-validator "^2.0.3" -web3-core-promievent@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz#629b970b7934430b03c5033c79f3bb3893027e22" - integrity sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ== +web3-eth-personal@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-4.0.8.tgz#b51628c560de550ca8b354fa784f9556aae6065c" + integrity sha512-sXeyLKJ7ddQdMxz1BZkAwImjqh7OmKxhXoBNF3isDmD4QDpMIwv/t237S3q4Z0sZQamPa/pHebJRWVuvP8jZdw== dependencies: - eventemitter3 "4.0.4" + web3-core "^4.3.0" + web3-eth "^4.3.1" + web3-rpc-methods "^1.1.3" + web3-types "^1.3.0" + web3-utils "^4.0.7" + web3-validator "^2.0.3" -web3-core-requestmanager@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.10.4.tgz#eb1f147e6b9df84e3a37e602162f8925bdb4bb9a" - integrity sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg== +web3-eth@^4.3.1, web3-eth@^4.5.0, web3-eth@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-4.6.0.tgz#75c177e2bde88a613a6996fab515f104e16921da" + integrity sha512-8KtxlGsomovoFULqEpfixgmCpaJ2YIJGxbXUfezh2coXHjVgEopQhARYtKGClyV5kkdCIqwHS8Gvsm6TVNqH6Q== dependencies: - util "^0.12.5" - web3-core-helpers "1.10.4" - web3-providers-http "1.10.4" - web3-providers-ipc "1.10.4" - web3-providers-ws "1.10.4" - -web3-core-subscriptions@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.10.4.tgz#2f4dcb404237e92802a563265d11a33934dc38e6" - integrity sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.10.4" - -web3-core@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.10.4.tgz#639de68b8b9871d2dc8892e0dd4e380cb1361a98" - integrity sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww== - dependencies: - "@types/bn.js" "^5.1.1" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.10.4" - web3-core-method "1.10.4" - web3-core-requestmanager "1.10.4" - web3-utils "1.10.4" - -web3-eth-abi@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.10.4.tgz#16c19d0bde0aaf8c1a56cb7743a83156d148d798" - integrity sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ== - dependencies: - "@ethersproject/abi" "^5.6.3" - web3-utils "1.10.4" - -web3-eth-accounts@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.4.tgz#df30e85a7cd70e475f8cf52361befba408829e34" - integrity sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg== - dependencies: - "@ethereumjs/common" "2.6.5" - "@ethereumjs/tx" "3.5.2" - "@ethereumjs/util" "^8.1.0" - eth-lib "0.2.8" - scrypt-js "^3.0.1" - uuid "^9.0.0" - web3-core "1.10.4" - web3-core-helpers "1.10.4" - web3-core-method "1.10.4" - web3-utils "1.10.4" - -web3-eth-contract@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.4.tgz#22d39f04e11d9ff4e726e8025a56d78e843a2c3d" - integrity sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A== - dependencies: - "@types/bn.js" "^5.1.1" - web3-core "1.10.4" - web3-core-helpers "1.10.4" - web3-core-method "1.10.4" - web3-core-promievent "1.10.4" - web3-core-subscriptions "1.10.4" - web3-eth-abi "1.10.4" - web3-utils "1.10.4" - -web3-eth-ens@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.10.4.tgz#3d991adac52bc8e598f1f1b8528337fa6291004c" - integrity sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - web3-core "1.10.4" - web3-core-helpers "1.10.4" - web3-core-promievent "1.10.4" - web3-eth-abi "1.10.4" - web3-eth-contract "1.10.4" - web3-utils "1.10.4" - -web3-eth-iban@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz#bc61b4a1930d19b1df8762c606d669902558e54d" - integrity sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw== + setimmediate "^1.0.5" + web3-core "^4.3.2" + web3-errors "^1.1.4" + web3-eth-abi "^4.2.1" + web3-eth-accounts "^4.1.2" + web3-net "^4.0.7" + web3-providers-ws "^4.0.7" + web3-rpc-methods "^1.2.0" + web3-types "^1.6.0" + web3-utils "^4.2.3" + web3-validator "^2.0.5" + +web3-net@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-4.0.7.tgz#ed2c1bd700cf94be93a6dbd8bd8aa413d8681942" + integrity sha512-SzEaXFrBjY25iQGk5myaOfO9ZyfTwQEa4l4Ps4HDNVMibgZji3WPzpjq8zomVHMwi8bRp6VV7YS71eEsX7zLow== + dependencies: + web3-core "^4.3.0" + web3-rpc-methods "^1.1.3" + web3-types "^1.3.0" + web3-utils "^4.0.7" + +web3-providers-http@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-4.1.0.tgz#8d7afda67d1d8542ca85b30f60a3d1fe1993b561" + integrity sha512-6qRUGAhJfVQM41E5t+re5IHYmb5hSaLc02BE2MaRQsz2xKA6RjmHpOA5h/+ojJxEpI9NI2CrfDKOAgtJfoUJQg== dependencies: - bn.js "^5.2.1" - web3-utils "1.10.4" - -web3-eth-personal@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.10.4.tgz#e2ee920f47e84848288e03442659cdbb2c4deea2" - integrity sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.10.4" - web3-core-helpers "1.10.4" - web3-core-method "1.10.4" - web3-net "1.10.4" - web3-utils "1.10.4" - -web3-eth@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.10.4.tgz#3a908c635cb5d935bd30473e452f3bd7f2ee66a5" - integrity sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA== - dependencies: - web3-core "1.10.4" - web3-core-helpers "1.10.4" - web3-core-method "1.10.4" - web3-core-subscriptions "1.10.4" - web3-eth-abi "1.10.4" - web3-eth-accounts "1.10.4" - web3-eth-contract "1.10.4" - web3-eth-ens "1.10.4" - web3-eth-iban "1.10.4" - web3-eth-personal "1.10.4" - web3-net "1.10.4" - web3-utils "1.10.4" - -web3-net@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.10.4.tgz#20e12c60e4477d4298979d8d5d66b9abf8e66a09" - integrity sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow== - dependencies: - web3-core "1.10.4" - web3-core-method "1.10.4" - web3-utils "1.10.4" - -web3-providers-http@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.4.tgz#ca7aa58aeaf8123500c24ffe0595896319f830e8" - integrity sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ== - dependencies: - abortcontroller-polyfill "^1.7.5" cross-fetch "^4.0.0" - es6-promise "^4.2.8" - web3-core-helpers "1.10.4" + web3-errors "^1.1.3" + web3-types "^1.3.0" + web3-utils "^4.0.7" -web3-providers-ipc@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.4.tgz#2e03437909e4e7771d646ff05518efae44b783c3" - integrity sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw== +web3-providers-ipc@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-4.0.7.tgz#9ec4c8565053af005a5170ba80cddeb40ff3e3d3" + integrity sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g== dependencies: - oboe "2.1.5" - web3-core-helpers "1.10.4" + web3-errors "^1.1.3" + web3-types "^1.3.0" + web3-utils "^4.0.7" -web3-providers-ws@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.4.tgz#55d0c3ba36c6a79d105f02e20a707eb3978e7f82" - integrity sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA== +web3-providers-ws@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-4.0.7.tgz#7a78a0dcf077e0e802da524fbb37d080b356c14b" + integrity sha512-n4Dal9/rQWjS7d6LjyEPM2R458V8blRm0eLJupDEJOOIBhGYlxw5/4FthZZ/cqB7y/sLVi7K09DdYx2MeRtU5w== dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.10.4" - websocket "^1.0.32" + "@types/ws" "8.5.3" + isomorphic-ws "^5.0.0" + web3-errors "^1.1.3" + web3-types "^1.3.0" + web3-utils "^4.0.7" + ws "^8.8.1" -web3-shh@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.10.4.tgz#9852d6f3d05678e31e49235a60fea10ca7a9e21d" - integrity sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw== +web3-rpc-methods@^1.1.3, web3-rpc-methods@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/web3-rpc-methods/-/web3-rpc-methods-1.2.0.tgz#761dcb036ab16edb2b03e80c11e3f5df24690345" + integrity sha512-CWJ/g4I4WyYvLkf21wCZAehdhU/VjX/OAPHnqF5/FPDJlogOsOnGXHqi1Z5AP+ocdt395PNubd8jyMMJoYGSBA== dependencies: - web3-core "1.10.4" - web3-core-method "1.10.4" - web3-core-subscriptions "1.10.4" - web3-net "1.10.4" + web3-core "^4.3.2" + web3-types "^1.5.0" + web3-validator "^2.0.4" -web3-utils@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" - integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== +web3-types@^1.3.0, web3-types@^1.3.1, web3-types@^1.5.0, web3-types@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-types/-/web3-types-1.6.0.tgz#ebe7f140c31f7cc0ad15f238ad7e7ac72797ff3b" + integrity sha512-qgOtADqlD5hw+KPKBUGaXAcdNLL0oh6qTeVgXwewCfbL/lG9R+/GrgMQB1gbTJ3cit8hMwtH8KX2Em6OwO0HRw== + +web3-utils@^4.0.7, web3-utils@^4.1.0, web3-utils@^4.2.2, web3-utils@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-4.2.3.tgz#e1d30c4b087cd95f4307baeb80e3160f174e1cfd" + integrity sha512-m5plKTC2YtQntHITQRyIePw52UVP1IrShhmA2FACtn4zmc5ADmrXOlQWiPzxFP/18eRJsAaUAw2+CQn1u4WPxQ== dependencies: - "@ethereumjs/util" "^8.1.0" - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereum-cryptography "^2.1.2" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" + ethereum-cryptography "^2.0.0" + eventemitter3 "^5.0.1" + web3-errors "^1.1.4" + web3-types "^1.6.0" + web3-validator "^2.0.5" -web3@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.4.tgz#5d5e59b976eaf758b060fe1a296da5fe87bdc79c" - integrity sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA== +web3-validator@^2.0.3, web3-validator@^2.0.4, web3-validator@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/web3-validator/-/web3-validator-2.0.5.tgz#de1984bdb34f292251b86400dba7169700db0849" + integrity sha512-2gLOSW8XqEN5pw5jVUm20EB7A8SbQiekpAtiI0JBmCIV0a2rp97v8FgWY5E3UEqnw5WFfEqvcDVW92EyynDTyQ== dependencies: - web3-bzz "1.10.4" - web3-core "1.10.4" - web3-eth "1.10.4" - web3-eth-personal "1.10.4" - web3-net "1.10.4" - web3-shh "1.10.4" - web3-utils "1.10.4" + ethereum-cryptography "^2.0.0" + util "^0.12.5" + web3-errors "^1.1.4" + web3-types "^1.5.0" + zod "^3.21.4" + +web3@4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/web3/-/web3-4.8.0.tgz#c7c7d2a7616ae387f8b2e3a3e416153a4bff479a" + integrity sha512-kQSF2NlHk8yjS3SRiJW3S+U5ibkEmVRhB4/GYsVwGvdAkFC2b+EIE1Ob7J56OmqW9VBZgkx1+SuWqo5JTIJSYQ== + dependencies: + web3-core "^4.3.2" + web3-errors "^1.1.4" + web3-eth "^4.6.0" + web3-eth-abi "^4.2.1" + web3-eth-accounts "^4.1.2" + web3-eth-contract "^4.4.0" + web3-eth-ens "^4.2.0" + web3-eth-iban "^4.0.7" + web3-eth-personal "^4.0.8" + web3-net "^4.0.7" + web3-providers-http "^4.1.0" + web3-providers-ws "^4.0.7" + web3-rpc-methods "^1.2.0" + web3-types "^1.6.0" + web3-utils "^4.2.3" + web3-validator "^2.0.5" webidl-conversions@^3.0.0: version "3.0.1" @@ -12162,18 +11341,6 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -websocket@^1.0.32: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - whatwg-encoding@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" @@ -12297,15 +11464,6 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@^3.0.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - ws@^7.5.1: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" @@ -12316,35 +11474,10 @@ ws@^8.11.0, ws@^8.16.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== -xhr-request-promise@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" - integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== - dependencies: - xhr-request "^1.1.0" - -xhr-request@^1.0.1, xhr-request@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" - integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== - dependencies: - buffer-to-arraybuffer "^0.0.5" - object-assign "^4.1.1" - query-string "^5.0.1" - simple-get "^2.7.0" - timed-out "^4.0.1" - url-set-query "^1.0.0" - xhr "^2.0.4" - -xhr@^2.0.4, xhr@^2.3.3: - version "2.6.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" - integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== - dependencies: - global "~4.4.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" +ws@^8.8.1: + version "8.17.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" + integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== xml-name-validator@^4.0.0: version "4.0.0" @@ -12361,7 +11494,7 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.0, xtend@^4.0.2: +xtend@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -12378,12 +11511,7 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -12439,6 +11567,11 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +zod@^3.21.4: + version "3.23.8" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" + integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== + zxcvbn@4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/zxcvbn/-/zxcvbn-4.4.2.tgz#28ec17cf09743edcab056ddd8b1b06262cc73c30"