From 6fede7399c9a3e59cd4edf37e7f584f60c64c138 Mon Sep 17 00:00:00 2001 From: Marco Castignoli Date: Thu, 17 Nov 2022 17:39:18 +0100 Subject: [PATCH 01/87] improve ipfs service * injector: first add then files.cp * update ipfs deamon * add DEBUG functionalities * split .ipfs and repo --- environments/ipfs.yaml | 2 +- services/ipfs/Dockerfile.ipfs | 17 +++--- services/ipfs/README.md | 12 +++++ services/ipfs/entrypoint.sh | 53 +++++++++++-------- services/ipfs/init-config.sh | 11 ++-- services/ipfs/publish.sh | 35 ++++++------ .../verification/src/services/Injector.ts | 5 +- 7 files changed, 84 insertions(+), 51 deletions(-) create mode 100644 services/ipfs/README.md diff --git a/environments/ipfs.yaml b/environments/ipfs.yaml index 02b3c4ebd..284381908 100644 --- a/environments/ipfs.yaml +++ b/environments/ipfs.yaml @@ -26,7 +26,7 @@ services: volumes: - type: bind source: $REPOSITORY_PATH - target: /root/.ipfs/repository + target: /repository - type: bind source: ../services/ipfs/ipfs-${TAG}.key target: /app/ipfs-${TAG}.key diff --git a/services/ipfs/Dockerfile.ipfs b/services/ipfs/Dockerfile.ipfs index 6945951a3..11620a779 100644 --- a/services/ipfs/Dockerfile.ipfs +++ b/services/ipfs/Dockerfile.ipfs @@ -1,11 +1,16 @@ FROM ubuntu:20.04 RUN apt-get update && apt-get install -y cron curl -WORKDIR /app -RUN curl https://dist.ipfs.io/go-ipfs/v0.13.0/go-ipfs_v0.13.0_linux-amd64.tar.gz > go-ipfs.tar.gz && tar xvfz go-ipfs.tar.gz && cd go-ipfs && ./install.sh -ADD ./publish.sh ./publish.sh -ADD ./init-config.sh ./init-config.sh -ADD ./entrypoint.sh ./entrypoint.sh -ADD ./cron.job ./cron.job + +RUN mkdir /sourcify +WORKDIR /sourcify + +RUN curl https://dist.ipfs.io/go-ipfs/v0.16.0/go-ipfs_v0.16.0_linux-amd64.tar.gz > go-ipfs.tar.gz && tar xvfz go-ipfs.tar.gz && cd go-ipfs && ./install.sh + +ADD publish.sh ./publish.sh +ADD init-config.sh ./init-config.sh +ADD entrypoint.sh ./entrypoint.sh +ADD cron.job ./cron.job + # Terminate and auto-restart container if ipfs daemon crashes HEALTHCHECK --interval=2m CMD curl http://localhost:8080 || pkill entrypoint.sh ENTRYPOINT ./entrypoint.sh diff --git a/services/ipfs/README.md b/services/ipfs/README.md new file mode 100644 index 000000000..1f7e29eba --- /dev/null +++ b/services/ipfs/README.md @@ -0,0 +1,12 @@ +When testing use the following docker run command to prevent reimporting the repository each time. Note that the first time is mandatory. + +Setting `--env DEBUG=true` will: + +- prevent adding all the repo to ipfs (using the existing one, set with `-v /path_to_local_ipfs_folder:/root/.ipfs`) +- prevent using the private keys +- prevent running cron +- prevent using remote pinning services + +``` +docker run -it --rm --name sourcify_ipfs --env DEBUG=true -v /path_to_local_sourcify_repo:/repository/ -v /path_to_local_ipfs_folder:/root/.ipfs -p 5001:5001 -p 8080:8080 -p 4001:4001 ipfs_sourcify +``` diff --git a/services/ipfs/entrypoint.sh b/services/ipfs/entrypoint.sh index 47b426d63..8d15b327e 100755 --- a/services/ipfs/entrypoint.sh +++ b/services/ipfs/entrypoint.sh @@ -1,10 +1,29 @@ -#!/bin/bash +#!/bin/sh -if [ ! -f ~/.ipfs/config ] +if [ ! -f /root/.ipfs/config ] then echo "No config found. Initializing..." - bash ./init-config.sh + /bin/sh ./init-config.sh +fi + +if [ -z "$DEBUG" ] +then + date + echo "Starting ipfs add" + hash=$(ipfs add -Q -r /repository/contracts) + echo "Finished ipfs add! New ipfs hash: $hash" + date + + # Remove the old /contracts in MFS + echo "Removing /contracts from MFS" + ipfs files rm -r /contracts + echo "Removed /contracts from MFS" + + # cp the repo under MFS + echo "Copying $hash to MFS at /contracts" + ipfs files cp -p /ipfs/$hash /contracts + echo "Copied $hash to MFS at /contracts" fi ipfs daemon --enable-pubsub-experiment --enable-namesys-pubsub --enable-gc & @@ -14,28 +33,16 @@ echo "Sleeping 30 seconds" sleep 30 echo "Sleeped 30 seconds" -# Add the whole repo and publish on start -date -echo "Starting ipfs add" -hash=$(ipfs add -Q -r /root/.ipfs/repository/contracts) -echo "Finished ipfs add! New ipfs hash: $hash" -date - -# Remove the old /contracts in MFS -echo "Removing /contracts from MFS" -ipfs files rm -r /contracts -echo "Removed /contracts from MFS" -# cp the repo under MFS -echo "Copying $hash to MFS at /contracts" -ipfs files cp -p /ipfs/$hash /contracts -echo "Copied $hash to MFS at /contracts" -date - -bash ./publish.sh +sh ./publish.sh # Write the TAG var to /etc/environment so that the crontab can pick up the variable echo "TAG=$TAG" > /etc/environment -crontab cron.job -cron -f +if [ -z "$DEBUG" ] +then + /opt/bin/crontab cron.job + cron -f +fi + +tail -f /dev/null diff --git a/services/ipfs/init-config.sh b/services/ipfs/init-config.sh index 912074eb3..46579f64f 100644 --- a/services/ipfs/init-config.sh +++ b/services/ipfs/init-config.sh @@ -26,8 +26,11 @@ ipfs config --json Experimental.AcceleratedDHTClient true ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]' ipfs config --json Addresses.API '["/ip4/0.0.0.0/tcp/5001"]' -# Add remote pinning services -ipfs pin remote service add estuary https://api.estuary.tech/pinning $ESTUARY_PINNING_SECRET -ipfs pin remote service add web3.storage https://api.web3.storage/ $WEB3_STORAGE_PINNING_SECRET +if [ -z "$DEBUG" ] +then + # Add remote pinning services + ipfs pin remote service add estuary https://api.estuary.tech/pinning $ESTUARY_PINNING_SECRET + ipfs pin remote service add web3.storage https://api.web3.storage/ $WEB3_STORAGE_PINNING_SECRET -ipfs key import main /app/ipfs-${TAG}.key \ No newline at end of file + ipfs key import main /app/ipfs-${TAG}.key +fi \ No newline at end of file diff --git a/services/ipfs/publish.sh b/services/ipfs/publish.sh index 0d169cc5e..7fe1ad883 100755 --- a/services/ipfs/publish.sh +++ b/services/ipfs/publish.sh @@ -1,36 +1,36 @@ -#!/bin/bash +#!/bin/sh # Avoid cron job ipfs command not found. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # Update the contract stats. date echo "Started find in repository for stats" -REPOSITORY_PATH=/root/.ipfs/repository -CHAINS=$(find $REPOSITORY_PATH/contracts/full_match/ -mindepth 1 -maxdepth 1 -type d | rev | cut --delimiter=/ -f1 | rev) +REPOSITORY_PATH="/repository" +CHAINS=$(find $REPOSITORY_PATH/contracts/full_match/ -mindepth 1 -maxdepth 1 -type d | rev | cut -d "/" -f1 | rev) OUTPUT="{ " for chainId in ${CHAINS}; do - OUTPUT+=" \"$chainId\": {" - OUTPUT+=" \"full_match\": $(find $REPOSITORY_PATH/contracts/full_match/$chainId/ -mindepth 1 -maxdepth 1 -type d | wc -l)," - OUTPUT+=" \"partial_match\": $(find $REPOSITORY_PATH/contracts/partial_match/$chainId/ -mindepth 1 -maxdepth 1 -type d | wc -l)" + OUTPUT="$OUTPUT \"$chainId\": {" + OUTPUT="$OUTPUT \"full_match\": $(find $REPOSITORY_PATH/contracts/full_match/$chainId/ -mindepth 1 -maxdepth 1 -type d | wc -l)," + OUTPUT="$OUTPUT \"partial_match\": $(find $REPOSITORY_PATH/contracts/partial_match/$chainId/ -mindepth 1 -maxdepth 1 -type d | wc -l)" - if [[ $chainId == $(echo $CHAINS | rev | cut --delimiter=" " -f1 | rev) ]] + if [[ $chainId == $(echo $CHAINS | rev | cut -d " " -f1 | rev) ]] then - OUTPUT+=" }" + OUTPUT="$OUTPUT }" else - OUTPUT+=" }," + OUTPUT="$OUTPUT }," fi done -OUTPUT+="}" +OUTPUT="$OUTPUT}" echo "Finished find in repo for stats" echo $OUTPUT > $REPOSITORY_PATH/stats.json date # Update the new manifest and stats in MFS. -manifestHash=$(ipfs add -Q /root/.ipfs/repository/manifest.json) -statsHash=$(ipfs add -Q /root/.ipfs/repository/stats.json) +manifestHash=$(ipfs add -Q /repository/manifest.json) +statsHash=$(ipfs add -Q /repository/stats.json) # rm old files from MFS ipfs files rm /manifest.json ipfs files rm /stats.json @@ -48,7 +48,10 @@ echo "Published rootHash $rootHash under ipns key" timestamp=$(date -u +"%Y-%m-%dT%H:%MZ") pinName=sourcify-$TAG-$timestamp -echo "Pinning to remote services" -ipfs pin remote add --service=estuary $rootHash --background --name=$pinName -ipfs pin remote add --service=web3.storage $rootHash --background --name=$pinName -echo "Pinned to remote services (running in background)" \ No newline at end of file +if [ -z "$DEBUG" ] +then + echo "Pinning to remote services" + ipfs pin remote add --service=estuary $rootHash --background --name=$pinName + ipfs pin remote add --service=web3.storage $rootHash --background --name=$pinName + echo "Pinned to remote services (running in background)" +fi \ No newline at end of file diff --git a/services/verification/src/services/Injector.ts b/services/verification/src/services/Injector.ts index 61ecf5dec..a35043de7 100644 --- a/services/verification/src/services/Injector.ts +++ b/services/verification/src/services/Injector.ts @@ -996,7 +996,10 @@ export class Injector { chunks.push(chunk); } const fileBuffer = Buffer.concat(chunks); - await this.ipfsClient.files.write(mfsPath, fileBuffer, { create: true }); + const addResult = await this.ipfsClient.add(fileBuffer, { + pin: false, + }); + await this.ipfsClient.files.cp(addResult.cid, mfsPath, { parents: true }); } } } From a8cf1a3d2678889f90a7e785aaeb33a427ab8ccb Mon Sep 17 00:00:00 2001 From: Marco Castignoli Date: Tue, 22 Nov 2022 10:37:28 +0100 Subject: [PATCH 02/87] ipfs-fix bash instead of sh --- services/ipfs/entrypoint.sh | 8 ++++---- services/ipfs/publish.sh | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/services/ipfs/entrypoint.sh b/services/ipfs/entrypoint.sh index 8d15b327e..6617d94d5 100755 --- a/services/ipfs/entrypoint.sh +++ b/services/ipfs/entrypoint.sh @@ -1,10 +1,10 @@ -#!/bin/sh +#!/bin/bash if [ ! -f /root/.ipfs/config ] then echo "No config found. Initializing..." - /bin/sh ./init-config.sh + bash ./init-config.sh fi if [ -z "$DEBUG" ] @@ -34,14 +34,14 @@ sleep 30 echo "Sleeped 30 seconds" -sh ./publish.sh +bash ./publish.sh # Write the TAG var to /etc/environment so that the crontab can pick up the variable echo "TAG=$TAG" > /etc/environment if [ -z "$DEBUG" ] then - /opt/bin/crontab cron.job + crontab cron.job cron -f fi diff --git a/services/ipfs/publish.sh b/services/ipfs/publish.sh index 7fe1ad883..0e5004572 100755 --- a/services/ipfs/publish.sh +++ b/services/ipfs/publish.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # Avoid cron job ipfs command not found. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin From d7e5148084792ed4a7b58d3c3585bf019588026f Mon Sep 17 00:00:00 2001 From: Marco Castignoli Date: Tue, 22 Nov 2022 14:06:48 +0100 Subject: [PATCH 03/87] remove garbage collector option from ipfs daemon --- services/ipfs/entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/ipfs/entrypoint.sh b/services/ipfs/entrypoint.sh index 6617d94d5..c2f280177 100755 --- a/services/ipfs/entrypoint.sh +++ b/services/ipfs/entrypoint.sh @@ -26,7 +26,7 @@ then echo "Copied $hash to MFS at /contracts" fi -ipfs daemon --enable-pubsub-experiment --enable-namesys-pubsub --enable-gc & +ipfs daemon --enable-pubsub-experiment --enable-namesys-pubsub & # Wait for the daemon to initialize echo "Sleeping 30 seconds" From 24362d613945dd187408f057fcf951fc7be67c52 Mon Sep 17 00:00:00 2001 From: Kaan Uzdogan Date: Tue, 22 Nov 2022 18:53:52 +0100 Subject: [PATCH 04/87] Add truffle-plugin-verify to landing page --- ui/src/assets/integrations/truffle.png | Bin 0 -> 24960 bytes ui/src/pages/LandingPage/ToolsPlugin.tsx | 8 +++++++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 ui/src/assets/integrations/truffle.png diff --git a/ui/src/assets/integrations/truffle.png b/ui/src/assets/integrations/truffle.png new file mode 100644 index 0000000000000000000000000000000000000000..5c817e684fca1a5651c2e2e4ad9f088c45d72d97 GIT binary patch literal 24960 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 {/* Right col: Tools */}

- Frameworks & Plugins + Frameworks & Plugins

+
); From 4e6a16a850d2c0797e3fc2754b8adab686a804ad Mon Sep 17 00:00:00 2001 From: Marco Castignoli Date: Wed, 23 Nov 2022 13:59:36 +0100 Subject: [PATCH 05/87] ipfs-fix: temporarily disable healthcheck in dockerfile --- services/ipfs/Dockerfile.ipfs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/ipfs/Dockerfile.ipfs b/services/ipfs/Dockerfile.ipfs index 11620a779..3b9f4f201 100644 --- a/services/ipfs/Dockerfile.ipfs +++ b/services/ipfs/Dockerfile.ipfs @@ -12,5 +12,5 @@ ADD entrypoint.sh ./entrypoint.sh ADD cron.job ./cron.job # Terminate and auto-restart container if ipfs daemon crashes -HEALTHCHECK --interval=2m CMD curl http://localhost:8080 || pkill entrypoint.sh +# HEALTHCHECK --interval=2m CMD curl http://localhost:8080 || pkill entrypoint.sh ENTRYPOINT ./entrypoint.sh From a28081ffada51cef594c543055c99e0e561e3e6d Mon Sep 17 00:00:00 2001 From: Marco Castignoli Date: Wed, 23 Nov 2022 14:43:11 +0100 Subject: [PATCH 06/87] ipfs-fix: start the daemon before adding files and restore healthcheck --- services/ipfs/Dockerfile.ipfs | 2 +- services/ipfs/entrypoint.sh | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/services/ipfs/Dockerfile.ipfs b/services/ipfs/Dockerfile.ipfs index 3b9f4f201..11620a779 100644 --- a/services/ipfs/Dockerfile.ipfs +++ b/services/ipfs/Dockerfile.ipfs @@ -12,5 +12,5 @@ ADD entrypoint.sh ./entrypoint.sh ADD cron.job ./cron.job # Terminate and auto-restart container if ipfs daemon crashes -# HEALTHCHECK --interval=2m CMD curl http://localhost:8080 || pkill entrypoint.sh +HEALTHCHECK --interval=2m CMD curl http://localhost:8080 || pkill entrypoint.sh ENTRYPOINT ./entrypoint.sh diff --git a/services/ipfs/entrypoint.sh b/services/ipfs/entrypoint.sh index c2f280177..ab186be56 100755 --- a/services/ipfs/entrypoint.sh +++ b/services/ipfs/entrypoint.sh @@ -7,6 +7,14 @@ then bash ./init-config.sh fi + +ipfs daemon --enable-pubsub-experiment --enable-namesys-pubsub & + +# Wait for the daemon to initialize +echo "Sleeping 30 seconds" +sleep 30 +echo "Sleeped 30 seconds" + if [ -z "$DEBUG" ] then date @@ -26,13 +34,6 @@ then echo "Copied $hash to MFS at /contracts" fi -ipfs daemon --enable-pubsub-experiment --enable-namesys-pubsub & - -# Wait for the daemon to initialize -echo "Sleeping 30 seconds" -sleep 30 -echo "Sleeped 30 seconds" - bash ./publish.sh From 0345d6963b8642df3e2dd35f1fc3235cc2dba73a Mon Sep 17 00:00:00 2001 From: Marco Castignoli Date: Wed, 23 Nov 2022 15:06:20 +0100 Subject: [PATCH 07/87] ipfs-fix: restore await for addToIpfsMfs method --- services/verification/src/services/Injector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/verification/src/services/Injector.ts b/services/verification/src/services/Injector.ts index 80bf2bec9..1fbe35001 100644 --- a/services/verification/src/services/Injector.ts +++ b/services/verification/src/services/Injector.ts @@ -618,7 +618,7 @@ export class Injector { ); } - this.addToIpfsMfs(matchQuality, match.chainId, match.address); + await this.addToIpfsMfs(matchQuality, match.chainId, match.address); } else if (match.status === "extra-file-input-bug") { return match; } else { From d9a5b1f233479e100fe5518ebb52f731829e9701 Mon Sep 17 00:00:00 2001 From: Kaan Uzdogan Date: Thu, 24 Nov 2022 09:41:23 +0100 Subject: [PATCH 08/87] Add number of chains supported to landing page --- ui/src/pages/LandingPage/index.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/ui/src/pages/LandingPage/index.tsx b/ui/src/pages/LandingPage/index.tsx index 062c7227f..95328febe 100644 --- a/ui/src/pages/LandingPage/index.tsx +++ b/ui/src/pages/LandingPage/index.tsx @@ -1,7 +1,7 @@ // AnimateOnScroll import AOS from "aos"; import "aos/dist/aos.css"; -import { useRef, useState } from "react"; +import { useContext, useRef, useState } from "react"; import { BsChevronCompactDown } from "react-icons/bs"; import { HiCheckCircle } from "react-icons/hi"; import { Link } from "react-router-dom"; @@ -36,6 +36,8 @@ import CustomCarousel from "./CustomCarousel"; import metadata from "./metadata.json"; import PoweredBySourcify from "./PoweredBySourcify"; import ToolsPlugin from "./ToolsPlugin"; +import { Context } from "../../Context"; + AOS.init({ duration: 800, once: true, @@ -86,6 +88,7 @@ const A = ({ href, children }: FooterItemProps) => ( const LandingPage = () => { const [showMoreReadResources, setShowMoreReadResources] = useState(false); const [showMoreWatchResources, setShowMoreWatchResources] = useState(false); + const { sourcifyChains } = useContext(Context); const aboutRef = useRef(null); return ( @@ -287,6 +290,12 @@ const LandingPage = () => {

Sourcify is multi-chain and works on all EVM based networks.

+ {sourcifyChains.length > 0 && ( +

+ {" "} + Currently we support {sourcifyChains.length} different chains{" "} +

+ )}
@@ -354,7 +363,7 @@ const LandingPage = () => { // className="underline decoration-lightCoral-500 decoration-2 font-semibold text-ceruleanBlue-500" className="link-underline font-semibold text-ceruleanBlue-500" > - See all networks + See all {sourcifyChains.length > 0 && sourcifyChains.length} chains
From 3c7daf0412e443eabbb86595d1be80fe45afce36 Mon Sep 17 00:00:00 2001 From: Kaan Uzdogan Date: Thu, 24 Nov 2022 16:20:55 +0100 Subject: [PATCH 09/87] Add sourcify-chains types. Change NODE_ADDRESS env Adds types for sourcify-chains and avoids any setting in the chains. Change how Alchemy URLs are generated to avoid `undefined` in the rpc array. Remove separate NODE_ADDRESS_X and NODE_PORT_X env vars and use a single NODE_URL_X for each network. Add warnings when ALCHEMY_ID or NODE_URL_X are not set --- environments/.env.dev | 10 +-- environments/.env.latest | 9 +-- environments/.env.stable | 10 +-- services/core/src/sourcify-chains.ts | 113 +++++++++++++++++---------- services/core/src/utils/utils.ts | 3 +- 5 files changed, 86 insertions(+), 59 deletions(-) diff --git a/environments/.env.dev b/environments/.env.dev index d374e52e2..4bdba0dee 100644 --- a/environments/.env.dev +++ b/environments/.env.dev @@ -52,11 +52,11 @@ IPFS_API_EXTERNAL_PORT=5002 SERVER_URL=https://staging.sourcify.dev/server # Custom nodes -NODE_ADDRESS= -NODE_PORT_MAINNET= -NODE_PORT_RINKEBY= -NODE_PORT_GOERLI= -NODE_PORT_SEPOLIA= +NODE_URL_MAINNET= +NODE_URL_RINKEBY= +NODE_URL_GOERLI= +NODE_URL_SEPOLIA= + # Other config TESTING=false diff --git a/environments/.env.latest b/environments/.env.latest index 34cbffff6..c34a066db 100644 --- a/environments/.env.latest +++ b/environments/.env.latest @@ -53,11 +53,10 @@ IPFS_API_EXTERNAL_PORT=5002 SERVER_URL=https://staging.sourcify.dev/server # Custom nodes -NODE_ADDRESS=http://10.10.42.102 -NODE_PORT_MAINNET=8541 -NODE_PORT_RINKEBY=8544 -NODE_PORT_GOERLI=8545 -NODE_PORT_SEPOLIA=8546 +NODE_URL_MAINNET=http://10.10.42.102:8541 +NODE_URL_RINKEBY=http://10.10.42.102:8544 +NODE_URL_GOERLI=http://10.10.42.102:8545 +NODE_URL_SEPOLIA=http://10.10.42.102:8546 # Other config TESTING=false diff --git a/environments/.env.stable b/environments/.env.stable index 705bcbd4f..5e398f742 100644 --- a/environments/.env.stable +++ b/environments/.env.stable @@ -50,11 +50,11 @@ IPFS_API_EXTERNAL_PORT=5003 SERVER_URL=https://sourcify.dev/server # Custom nodes -NODE_ADDRESS=http://10.10.42.102 -NODE_PORT_MAINNET=8541 -NODE_PORT_RINKEBY=8544 -NODE_PORT_GOERLI=8545 -NODE_PORT_SEPOLIA=8546 +NODE_URL_MAINNET=http://10.10.42.102:8541 +NODE_URL_RINKEBY=http://10.10.42.102:8544 +NODE_URL_GOERLI=http://10.10.42.102:8545 +NODE_URL_SEPOLIA=http://10.10.42.102:8546 + # Other config TESTING=false diff --git a/services/core/src/sourcify-chains.ts b/services/core/src/sourcify-chains.ts index 3a5ea9c82..83edd367e 100644 --- a/services/core/src/sourcify-chains.ts +++ b/services/core/src/sourcify-chains.ts @@ -17,6 +17,17 @@ const AVALANCHE_SUBNET_SUFFIX = "address/${ADDRESS}/contract"; type ChainName = "eth" | "polygon" | "arb" | "opt"; +interface SourcifyChain { + supported: boolean; + monitored: boolean; + rpc?: string[]; + txRegex?: string; + contractFetchAddress?: string; +} +interface SourcifyChainsObject { + [chainId: string]: SourcifyChain; +} + /** * * @param chainName - "eth", "polygon" etc. @@ -24,38 +35,55 @@ type ChainName = "eth" | "polygon" | "arb" | "opt"; * @param useOwn Use the local node * @returns */ -function buildAlchemyURL( +function buildAlchemyAndCustomRpcURLs( chainSubName: string, chainName: ChainName, useOwn = false ) { - if (useOwn) { - const port = process.env[`NODE_PORT_${chainSubName.toUpperCase()}`]; - const url = `${process.env.NODE_ADDRESS}:${port}`; - if (!port || !url) return undefined; - return url; - } + const rpcURLs: string[] = []; - let id; + let alchemyId; switch (chainName) { case "opt": - id = process.env["ALCHEMY_ID_OPTIMISM"] || process.env["ALCHEMY_ID"]; + alchemyId = + process.env["ALCHEMY_ID_OPTIMISM"] || process.env["ALCHEMY_ID"]; break; case "arb": - id = process.env["ALCHEMY_ID_ARBITRUM"] || process.env["ALCHEMY_ID"]; + alchemyId = + process.env["ALCHEMY_ID_ARBITRUM"] || process.env["ALCHEMY_ID"]; break; default: - id = process.env["ALCHEMY_ID"]; + alchemyId = process.env["ALCHEMY_ID"]; break; } - const domain = { - eth: "g.alchemy.com", - polygon: "g.alchemy.com", - arb: "g.alchemy.com", - opt: "g.alchemy.com", - }[chainName]; - return `https://${chainName}-${chainSubName}.${domain}/v2/${id}`; + if (!alchemyId) + console.warn( + `Environment variable ALCHEMY_ID not set for ${chainName} ${chainSubName}!` + ); + + const domain = "g.alchemy.com"; + // No sepolia support yet + if (alchemyId && chainSubName !== "sepolia") + rpcURLs.concat( + `https://${chainName}-${chainSubName}.${domain}/v2/${alchemyId}` + ); + + if (useOwn) { + const url = process.env[`NODE_URL_${chainSubName.toUpperCase()}`]; + console.log(url); + if (url) { + console.log( + `Using custom RPC URL for ${chainName} ${chainSubName}: ${url}` + ); + rpcURLs.concat(url); + } else { + console.warn( + `Environment variable NODE_URL_${chainSubName.toUpperCase()} not set!` + ); + } + } + return rpcURLs; } // replaces INFURA_API_KEY in https://networkname.infura.io/v3/{INFURA_API_KEY} function replaceInfuraID(infuraURL: string) { @@ -65,16 +93,13 @@ function getBlockscoutRegex(blockscoutPrefix = "") { return BLOCKSCOUT_REGEX.replace("${BLOCKSCOUT_PREFIX}", blockscoutPrefix); } -export default { +const sourcifyChains: SourcifyChainsObject = { "1": { // Ethereum Mainnet supported: true, monitored: true, contractFetchAddress: "https://etherscan.io/" + ETHERSCAN_SUFFIX, - rpc: [ - buildAlchemyURL("mainnet", "eth", true), - buildAlchemyURL("mainnet", "eth"), - ], + rpc: buildAlchemyAndCustomRpcURLs("mainnet", "eth", true), txRegex: ETHERSCAN_REGEX, }, "4": { @@ -82,7 +107,7 @@ export default { supported: true, monitored: true, contractFetchAddress: "https://rinkeby.etherscan.io/" + ETHERSCAN_SUFFIX, - rpc: [buildAlchemyURL("rinkeby", "eth", true)], + rpc: buildAlchemyAndCustomRpcURLs("rinkeby", "eth", false), txRegex: ETHERSCAN_REGEX, }, "5": { @@ -90,17 +115,16 @@ export default { supported: true, monitored: true, contractFetchAddress: "https://goerli.etherscan.io/" + ETHERSCAN_SUFFIX, - rpc: [ - buildAlchemyURL("goerli", "eth", true), - buildAlchemyURL("goerli", "eth"), - ], + rpc: buildAlchemyAndCustomRpcURLs("goerli", "eth", true), txRegex: ETHERSCAN_REGEX, }, "11155111": { // Ethereum Sepolia Testnet supported: true, monitored: true, - rpc: [buildAlchemyURL("sepolia", "eth", true), "https://rpc.sepolia.org"], + rpc: buildAlchemyAndCustomRpcURLs("sepolia", "eth", true).concat( + "https://rpc.sepolia.org" + ), contractFetchAddress: "https://sepolia.etherscan.io/" + ETHERSCAN_SUFFIX, txRegex: ETHERSCAN_REGEX, }, @@ -156,7 +180,7 @@ export default { supported: true, monitored: true, contractFetchAddress: "https://polygonscan.com/" + ETHERSCAN_SUFFIX, - rpc: [buildAlchemyURL("mainnet", "polygon")], + rpc: buildAlchemyAndCustomRpcURLs("mainnet", "polygon"), txRegex: ETHERSCAN_REGEX, }, "534": { @@ -189,7 +213,7 @@ export default { supported: true, monitored: true, contractFetchAddress: "https://mumbai.polygonscan.com/" + ETHERSCAN_SUFFIX, - rpc: [buildAlchemyURL("mumbai", "polygon")], + rpc: buildAlchemyAndCustomRpcURLs("mumbai", "polygon"), txRegex: ETHERSCAN_REGEX, }, "42161": { @@ -198,7 +222,7 @@ export default { monitored: true, contractFetchAddress: "https://arbiscan.io/" + ETHERSCAN_SUFFIX, txRegex: ETHERSCAN_REGEX, - rpc: [buildAlchemyURL("mainnet", "arb")], + rpc: buildAlchemyAndCustomRpcURLs("mainnet", "arb"), }, "421613": { // Arbitrum Goerli Testnet @@ -207,7 +231,7 @@ export default { contractFetchAddress: "https://goerli-rollup-explorer.arbitrum.io/" + BLOCKSCOUT_SUFFIX, txRegex: getBlockscoutRegex(), - rpc: [buildAlchemyURL("goerli", "arb")], + rpc: buildAlchemyAndCustomRpcURLs("goerli", "arb"), }, "43113": { supported: true, @@ -269,7 +293,7 @@ export default { monitored: true, contractFetchAddress: "https://optimistic.etherscan.io/" + ETHERSCAN_SUFFIX, txRegex: ETHERSCAN_REGEX, - rpc: [buildAlchemyURL("mainnet", "opt")], + rpc: buildAlchemyAndCustomRpcURLs("mainnet", "opt"), }, "420": { supported: true, @@ -277,7 +301,7 @@ export default { contractFetchAddress: "https://blockscout.com/optimism/goerli/" + BLOCKSCOUT_SUFFIX, txRegex: getBlockscoutRegex("/optimism/goerli"), - rpc: [buildAlchemyURL("goerli", "opt")], + rpc: buildAlchemyAndCustomRpcURLs("goerli", "opt"), }, "28": { supported: true, @@ -383,7 +407,6 @@ export default { // MultiVAC Mainnet supported: true, monitored: false, - rpc: ["https://rpc.mtv.ac"], }, "11111": { // WAGMI Testnet @@ -479,17 +502,21 @@ export default { contractFetchAddress: "https://scan.crystaleum.org/" + BLOCKSCOUT_SUFFIX, txRegex: getBlockscoutRegex(), }, - "420666": { // Kekchain Testnet (kektest) + "420666": { + // Kekchain Testnet (kektest) supported: true, monitored: false, - contractFetchAddress: "https://testnet-explorer.kekchain.com/" + BLOCKSCOUT_SUFFIX, - txRegex: getBlockscoutRegex() + contractFetchAddress: + "https://testnet-explorer.kekchain.com/" + BLOCKSCOUT_SUFFIX, + txRegex: getBlockscoutRegex(), }, - "420420": { // Kekchain Main Net (kekistan) + "420420": { + // Kekchain Main Net (kekistan) supported: true, monitored: false, - contractFetchAddress: "https://mainnet-explorer.kekchain.com/" + BLOCKSCOUT_SUFFIX, - txRegex: getBlockscoutRegex() + contractFetchAddress: + "https://mainnet-explorer.kekchain.com/" + BLOCKSCOUT_SUFFIX, + txRegex: getBlockscoutRegex(), }, "7700": { // Canto Mainnet @@ -554,3 +581,5 @@ export default { txRegex: getBlockscoutRegex("/optimism/bedrock-alpha"), }, }; + +export default sourcifyChains; diff --git a/services/core/src/utils/utils.ts b/services/core/src/utils/utils.ts index cab038706..09c520924 100644 --- a/services/core/src/utils/utils.ts +++ b/services/core/src/utils/utils.ts @@ -1,9 +1,8 @@ import semver from "semver"; import * as chainsRaw from "../chains.json"; -import sourcifyChainsRaw from "../sourcify-chains"; +import sourcifyChains from "../sourcify-chains"; import { StringMap, ReformattedMetadata, Chain } from "./types"; const chains = chainsRaw as any; -const sourcifyChains = sourcifyChainsRaw as any; type ChainMap = { [chainId: string]: Chain; From 7c5253779fb549328727100d0c126d3194bb1001 Mon Sep 17 00:00:00 2001 From: Kaan Uzdogan Date: Thu, 24 Nov 2022 17:09:06 +0100 Subject: [PATCH 10/87] Fix concat vs push when adding rpcs --- services/core/src/sourcify-chains.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/core/src/sourcify-chains.ts b/services/core/src/sourcify-chains.ts index 83edd367e..c001fcd61 100644 --- a/services/core/src/sourcify-chains.ts +++ b/services/core/src/sourcify-chains.ts @@ -65,7 +65,7 @@ function buildAlchemyAndCustomRpcURLs( const domain = "g.alchemy.com"; // No sepolia support yet if (alchemyId && chainSubName !== "sepolia") - rpcURLs.concat( + rpcURLs.push( `https://${chainName}-${chainSubName}.${domain}/v2/${alchemyId}` ); @@ -76,7 +76,7 @@ function buildAlchemyAndCustomRpcURLs( console.log( `Using custom RPC URL for ${chainName} ${chainSubName}: ${url}` ); - rpcURLs.concat(url); + rpcURLs.push(url); } else { console.warn( `Environment variable NODE_URL_${chainSubName.toUpperCase()} not set!` From 9c28ac9147e860eb55f8c0e169b8a3b8706dcfaa Mon Sep 17 00:00:00 2001 From: Kaan Uzdogan Date: Fri, 25 Nov 2022 10:53:03 +0100 Subject: [PATCH 11/87] Remove first node check, req. tests for CI build Since the local/custom node is always the first one there's no need to check explicitly. This fixes errors caused by the changed env var name NODE_ADDRESS_ and NODE_PORT_ to NODE_URL_ Require tests to pass to build and deploy server&monitor on CI --- .circleci/continue_config.yml | 36 +++++++++++++++++++--------- services/core/src/sourcify-chains.ts | 27 ++++++++++----------- services/verification/src/utils.ts | 33 +++++++------------------ 3 files changed, 46 insertions(+), 50 deletions(-) diff --git a/.circleci/continue_config.yml b/.circleci/continue_config.yml index 1b6049285..9e95cc431 100644 --- a/.circleci/continue_config.yml +++ b/.circleci/continue_config.yml @@ -101,17 +101,29 @@ workflows: << pipeline.parameters.run-build-ui >>, ] jobs: + - tests-node-v16 + - npm-publish: + filters: + branches: + only: + - master + requires: + - tests-node-v16 - build-push-ipfs: run-build: << pipeline.parameters.run-build-ipfs >> # Always build monitor if there's a change in the server - build-push-monitor: run-build: << pipeline.parameters.run-build-server >> + requires: + - tests-node-v16 - build-push-repository: run-build: << pipeline.parameters.run-build-repository >> - build-push-s3: run-build: << pipeline.parameters.run-build-s3 >> - build-push-server: run-build: << pipeline.parameters.run-build-server >> + requires: + - tests-node-v16 - build-push-ui: run-build: << pipeline.parameters.run-build-ui >> - deploy: @@ -134,17 +146,19 @@ workflows: - verification-e2e-sepolia: requires: - deploy - # Always run - node-build: + + # Tests workflow for not staging or master + tests: + when: + and: + - or: + - not: + equal: [ master, << pipeline.git.branch >> ] + - not: + equal: [ staging, << pipeline.git.branch >> ] jobs: - - node-v16 - - npm-publish: - filters: - branches: - only: - - master - requires: - - node-v16 + - tests-node-v16 + # Has to run always. Can't regex filter on add-chain-{chainId} branch names see: https://stackoverflow.com/questions/55839004/circleci-regex-filtering-match-within-string test-new-chain: jobs: @@ -194,7 +208,7 @@ jobs: no_output_timeout: 30m command: | ./scripts/deploy.sh - node-v16: + tests-node-v16: docker: - image: cimg/node:16.15 working_directory: ~/source-verify diff --git a/services/core/src/sourcify-chains.ts b/services/core/src/sourcify-chains.ts index c001fcd61..43bc93cba 100644 --- a/services/core/src/sourcify-chains.ts +++ b/services/core/src/sourcify-chains.ts @@ -42,6 +42,17 @@ function buildAlchemyAndCustomRpcURLs( ) { const rpcURLs: string[] = []; + if (useOwn) { + const url = process.env[`NODE_URL_${chainSubName.toUpperCase()}`]; + if (url) { + rpcURLs.push(url); + } else { + console.warn( + `Environment variable NODE_URL_${chainSubName.toUpperCase()} not set!` + ); + } + } + let alchemyId; switch (chainName) { case "opt": @@ -69,20 +80,6 @@ function buildAlchemyAndCustomRpcURLs( `https://${chainName}-${chainSubName}.${domain}/v2/${alchemyId}` ); - if (useOwn) { - const url = process.env[`NODE_URL_${chainSubName.toUpperCase()}`]; - console.log(url); - if (url) { - console.log( - `Using custom RPC URL for ${chainName} ${chainSubName}: ${url}` - ); - rpcURLs.push(url); - } else { - console.warn( - `Environment variable NODE_URL_${chainSubName.toUpperCase()} not set!` - ); - } - } return rpcURLs; } // replaces INFURA_API_KEY in https://networkname.infura.io/v3/{INFURA_API_KEY} @@ -107,7 +104,7 @@ const sourcifyChains: SourcifyChainsObject = { supported: true, monitored: true, contractFetchAddress: "https://rinkeby.etherscan.io/" + ETHERSCAN_SUFFIX, - rpc: buildAlchemyAndCustomRpcURLs("rinkeby", "eth", false), + rpc: buildAlchemyAndCustomRpcURLs("rinkeby", "eth", true), txRegex: ETHERSCAN_REGEX, }, "5": { diff --git a/services/verification/src/utils.ts b/services/verification/src/utils.ts index 4a6df000c..4d52718e7 100644 --- a/services/verification/src/utils.ts +++ b/services/verification/src/utils.ts @@ -13,7 +13,6 @@ const solc = require("solc"); import { spawnSync } from "child_process"; import { StatusCodes } from "http-status-codes"; import { ethers } from "ethers"; -import promiseAny = require("promise.any"); // use import require to avoid error from typescript see: https://github.com/es-shims/Promise.allSettled/issues/5#issuecomment-723485612 const GITHUB_SOLC_REPO = "https://github.com/ethereum/solc-bin/raw/gh-pages/linux-amd64/"; @@ -82,31 +81,17 @@ export async function getBytecode( throw new Error("No RPC provider was given for this chain."); address = Web3.utils.toChecksumAddress(address); - // Check if the first provider is a local node (using NODE_ADDRESS). If so don't waste Alchemy requests by requesting all RPCs in parallel. - // Instead request first the local node and request Alchemy only if it fails. - const firstProvider = web3Array[0].currentProvider as HttpProvider; - if ( - process.env.NODE_ADDRESS && - firstProvider?.host?.includes(process.env.NODE_ADDRESS) - ) { - let rejectResponse; - for (const web3 of web3Array) { - try { - const bytecode = await raceWithTimeout(web3, RPC_TIMEOUT, address); // await sequentially - return bytecode; - } catch (err) { - rejectResponse = err; - } + // Request sequentially. Custom node is always before ALCHEMY so we don't waste resources if succeeds. + // TODO: remove promise-any dependency + for (const web3 of web3Array) { + try { + const bytecode = await raceWithTimeout(web3, RPC_TIMEOUT, address); + return bytecode; + } catch (err) { + console.log(err); } - throw rejectResponse; // None resolved - } else { - // No local node. Request all public RPCs in parallel. - const rpcPromises: Promise[] = web3Array.map((web3) => - raceWithTimeout(web3, RPC_TIMEOUT, address) - ); - // Promise.any for Node v15.0.0< i.e. return the first one that resolves. - return promiseAny(rpcPromises); } + throw new Error("None of the RPCs responded"); } const RECOMPILATION_ERR_MSG = From 88c3fa55193b88fa293d837b17c8fa798d0cc70d Mon Sep 17 00:00:00 2001 From: Kaan Uzdogan Date: Fri, 25 Nov 2022 11:03:38 +0100 Subject: [PATCH 12/87] Fix CI test run condition --- .circleci/continue_config.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.circleci/continue_config.yml b/.circleci/continue_config.yml index 9e95cc431..f81172d99 100644 --- a/.circleci/continue_config.yml +++ b/.circleci/continue_config.yml @@ -150,12 +150,11 @@ workflows: # Tests workflow for not staging or master tests: when: - and: - - or: - - not: - equal: [ master, << pipeline.git.branch >> ] - - not: - equal: [ staging, << pipeline.git.branch >> ] + or: + - not: + equal: [ master, << pipeline.git.branch >> ] + - not: + equal: [ staging, << pipeline.git.branch >> ] jobs: - tests-node-v16 From 68ba1a9d350c5fde933bf19bc70c55cc2aa73f04 Mon Sep 17 00:00:00 2001 From: Kaan Uzdogan Date: Fri, 25 Nov 2022 11:07:17 +0100 Subject: [PATCH 13/87] Fix CI test run condition - 2 --- .circleci/continue_config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/continue_config.yml b/.circleci/continue_config.yml index f81172d99..a0bff047a 100644 --- a/.circleci/continue_config.yml +++ b/.circleci/continue_config.yml @@ -152,9 +152,9 @@ workflows: when: or: - not: - equal: [ master, << pipeline.git.branch >> ] + equal: [ master, << pipeline.git.branch >> ] - not: - equal: [ staging, << pipeline.git.branch >> ] + equal: [ staging, << pipeline.git.branch >> ] jobs: - tests-node-v16 From f5b3fc5556dfd8c438759354bf835f97e7e5a06b Mon Sep 17 00:00:00 2001 From: Kaan Uzdogan Date: Fri, 25 Nov 2022 13:24:45 +0100 Subject: [PATCH 14/87] Fix CI test run condition - 3 --- .circleci/continue_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/continue_config.yml b/.circleci/continue_config.yml index a0bff047a..aa1674c69 100644 --- a/.circleci/continue_config.yml +++ b/.circleci/continue_config.yml @@ -150,7 +150,7 @@ workflows: # Tests workflow for not staging or master tests: when: - or: + and: - not: equal: [ master, << pipeline.git.branch >> ] - not: From 1041e708500153af36a9170d04438715e341b755 Mon Sep 17 00:00:00 2001 From: Marco Castignoli Date: Wed, 30 Nov 2022 14:56:30 +0100 Subject: [PATCH 15/87] first implementation of event-manager logging --- package-lock.json | 784 ++++++++++++++- package.json | 4 +- services/core/package-lock.json | 919 +++++++++++++++++- services/core/package.json | 4 +- services/core/src/index.ts | 3 + .../core/src/services/EventManager/index.ts | 22 + .../services/EventManager/listeners/logger.ts | 11 + .../EventManager/listeners/matchStored.ts | 15 + services/core/src/utils/EventManager.ts | 34 + services/core/src/utils/loggerLoki.ts | 27 + services/loki/docker-compose.yaml | 38 + .../verification/src/services/Injector.ts | 2 + src/server/middlewares/ApiLogging.ts | 20 + src/server/middlewares/GenericErrorHandler.ts | 2 + src/server/server.ts | 3 + 15 files changed, 1842 insertions(+), 46 deletions(-) create mode 100644 services/core/src/services/EventManager/index.ts create mode 100644 services/core/src/services/EventManager/listeners/logger.ts create mode 100644 services/core/src/services/EventManager/listeners/matchStored.ts create mode 100644 services/core/src/utils/EventManager.ts create mode 100644 services/core/src/utils/loggerLoki.ts create mode 100644 services/loki/docker-compose.yaml create mode 100644 src/server/middlewares/ApiLogging.ts diff --git a/package-lock.json b/package-lock.json index 8e72c6811..b3fd9801c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,9 @@ "memorystore": "^1.6.7", "node-fetch": "2.6.6", "serve-index": "^1.9.1", - "web3": "^1.2.11" + "web3": "^1.2.11", + "winston": "^3.8.2", + "winston-loki": "^6.0.6" }, "devDependencies": { "@types/bunyan": "^1.8.6", @@ -181,6 +183,24 @@ "uint8arrays": "^3.0.0" } }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.3.3", "dev": true, @@ -2930,6 +2950,201 @@ "murmurhash3js-revisited": "^3.0.0" } }, + "node_modules/@napi-rs/snappy-android-arm-eabi": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm-eabi/-/snappy-android-arm-eabi-7.1.1.tgz", + "integrity": "sha512-NKd/ztuVEgQaAaNVQ5zZaCB9VV+7+uBXBHqhaE5iSapQhLc41szTlT0s68FCee75OoT3vhqdA6Jp5TrzZ2WOaw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-android-arm64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm64/-/snappy-android-arm64-7.1.1.tgz", + "integrity": "sha512-DktruMAO0K0toTnxNHg2GWNIAPJqdvIchCsdsRaKyuEnG101qBg0mYiRCAhxHgbT6RJlOGbUPKkbA9KKRhEJUg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-darwin-arm64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-arm64/-/snappy-darwin-arm64-7.1.1.tgz", + "integrity": "sha512-3LZyoAw3Qa5F7sCCTkSkhmGlydwUKU6L3Jl46eKHO2Ctm8Gcjxww6T7MfwlwGZ6JqAM6d1d++WLzUZPCGXVmag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-darwin-x64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-x64/-/snappy-darwin-x64-7.1.1.tgz", + "integrity": "sha512-X1D2F67bQkPwr5iSR29/RnOrLwAkB55YO6t41toABzla3mflLDpzZcakz6FokIukykf7ey31/t73v/4pbgaBkg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-freebsd-x64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-freebsd-x64/-/snappy-freebsd-x64-7.1.1.tgz", + "integrity": "sha512-vSeuf+An8jFVHPAn5IbWE9hTGU9PFAaZLj/X7rKTQQtZstnDsHgWe6u4g7FHLuOdwQ8TvhcxAEpNlYIXIk4AJg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-arm-gnueabihf": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm-gnueabihf/-/snappy-linux-arm-gnueabihf-7.1.1.tgz", + "integrity": "sha512-/yyN6QsnOs3D1+jI3SfRX+gtnD86rbixdfmgxv9g40+FrDaDTLAu/3VuZIqH02qqq/xiWbDnkO+42RGxXDzTCw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-arm64-gnu": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-gnu/-/snappy-linux-arm64-gnu-7.1.1.tgz", + "integrity": "sha512-StEeUCSwUoajgrBtiCQPTkHu+0Q4QlYndghGZNdbN1zJ1ny70YzPpevaFBUyjI/eJ+FN9uICKtwTPtQNSILS5g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-arm64-musl": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-musl/-/snappy-linux-arm64-musl-7.1.1.tgz", + "integrity": "sha512-jWEBRzj+lswZVYf0b5eY0fjMlBL9L9yqjmTuv2UIMjJNHPuR282LK/s3Fm9sYIXQtKkiCo5JyhmIcoghZ3v0Eg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-x64-gnu": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-gnu/-/snappy-linux-x64-gnu-7.1.1.tgz", + "integrity": "sha512-41DPoAUFAU9VNrj/96qKfStH2Xq88ZYIsSz8BlITDm2ScoeDGOGbmaWguCXU7I+bC2uKWTmUVMXKqk6tVY6LEg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-x64-musl": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-musl/-/snappy-linux-x64-musl-7.1.1.tgz", + "integrity": "sha512-xR4hzFQqVq6J8Zf6XyUVtFJBaRgDyAQYUoBsCr92tZ7gI/0RlWCV6Q6JMO/wP5CSsvyFJIAtSUXXqlzIpw0GPA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-win32-arm64-msvc": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-arm64-msvc/-/snappy-win32-arm64-msvc-7.1.1.tgz", + "integrity": "sha512-2mHPadctsaYtrfSV5Na8ooTdI5rflPxP1pceY4us6vbjeWrfgB+KQCuEFOHsGXqFNfsi6L9nWH8nB9swnxnSyw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-win32-ia32-msvc": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-ia32-msvc/-/snappy-win32-ia32-msvc-7.1.1.tgz", + "integrity": "sha512-FOMgs9W71hdgjyl3T9F7b/WEIuoryfgBqsyhtHjAaa/98R0BUHl0bOoHg8ka0b5GgnhLBHkX2Yd6VD+Si9Q2ww==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-win32-x64-msvc": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-x64-msvc/-/snappy-win32-x64-msvc-7.1.1.tgz", + "integrity": "sha512-Mu3yELySvzhBcNTVCq+hYxVh+lH3/KjoQ5HIEb3DDPoX0AGRTm3XZa+usq8pFWjl91Cgp9nWK+9lVSkCCIRaKA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@noble/ed25519": { "version": "1.7.1", "dev": true, @@ -3435,27 +3650,22 @@ }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.1", @@ -3464,27 +3674,22 @@ }, "node_modules/@protobufjs/float": { "version": "1.0.2", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/path": { "version": "1.1.2", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@sindresorhus/is": { @@ -3784,7 +3989,6 @@ }, "node_modules/@types/long": { "version": "4.0.2", - "dev": true, "license": "MIT" }, "node_modules/@types/mime": { @@ -4507,9 +4711,16 @@ }, "node_modules/async": { "version": "3.2.4", - "dev": true, "license": "MIT" }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/async-limiter": { "version": "1.0.1", "license": "MIT" @@ -4852,6 +5063,17 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/btoa-lite": { "version": "1.0.0", "dev": true, @@ -5550,6 +5772,15 @@ "node": ">=0.10.0" } }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "dev": true, @@ -5563,9 +5794,39 @@ }, "node_modules/color-name": { "version": "1.1.4", - "dev": true, "license": "MIT" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, "node_modules/columnify": { "version": "1.6.0", "dev": true, @@ -6907,6 +7168,11 @@ "dev": true, "license": "MIT" }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, "node_modules/encodeurl": { "version": "1.0.2", "license": "MIT", @@ -8032,6 +8298,11 @@ "reusify": "^1.0.4" } }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, "node_modules/figgy-pudding": { "version": "3.5.2", "dev": true, @@ -8197,6 +8468,11 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "node_modules/fnv1a": { "version": "1.1.1", "dev": true, @@ -11908,6 +12184,11 @@ "node": ">=0.10.0" } }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, "node_modules/lerna": { "version": "3.22.1", "dev": true, @@ -12698,9 +12979,20 @@ "node": ">=4" } }, + "node_modules/logform": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", + "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "dependencies": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, "node_modules/long": { "version": "4.0.0", - "dev": true, "license": "Apache-2.0" }, "node_modules/loose-envify": { @@ -14908,6 +15200,14 @@ "wrappy": "1" } }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, "node_modules/onetime": { "version": "2.0.1", "dev": true, @@ -15725,7 +16025,6 @@ }, "node_modules/protobufjs": { "version": "6.11.3", - "dev": true, "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { @@ -16628,6 +16927,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-stable-stringify": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz", + "integrity": "sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA==", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "license": "MIT" @@ -16988,6 +17295,19 @@ "node": ">=4" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/slash": { "version": "3.0.0", "dev": true, @@ -17203,6 +17523,34 @@ "node": ">=0.10.0" } }, + "node_modules/snappy": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/snappy/-/snappy-7.1.1.tgz", + "integrity": "sha512-mL7GGPJ+WdsaFT5aR/uEqCq8cPg2VbhyifDEP7AeqIVDsAC8LBGYbZP1Qzoa2Ym84OW7JEQXqIpwqFp1EQw5BA==", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/snappy-android-arm-eabi": "7.1.1", + "@napi-rs/snappy-android-arm64": "7.1.1", + "@napi-rs/snappy-darwin-arm64": "7.1.1", + "@napi-rs/snappy-darwin-x64": "7.1.1", + "@napi-rs/snappy-freebsd-x64": "7.1.1", + "@napi-rs/snappy-linux-arm-gnueabihf": "7.1.1", + "@napi-rs/snappy-linux-arm64-gnu": "7.1.1", + "@napi-rs/snappy-linux-arm64-musl": "7.1.1", + "@napi-rs/snappy-linux-x64-gnu": "7.1.1", + "@napi-rs/snappy-linux-x64-musl": "7.1.1", + "@napi-rs/snappy-win32-arm64-msvc": "7.1.1", + "@napi-rs/snappy-win32-ia32-msvc": "7.1.1", + "@napi-rs/snappy-win32-x64-msvc": "7.1.1" + } + }, "node_modules/socket.io-client": { "version": "4.5.3", "dev": true, @@ -17437,6 +17785,14 @@ "dev": true, "license": "MIT" }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, "node_modules/static-extend": { "version": "0.1.2", "dev": true, @@ -18022,6 +18378,11 @@ "node": ">=0.10" } }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "node_modules/text-table": { "version": "0.2.0", "dev": true, @@ -18199,6 +18560,11 @@ "node": ">=8" } }, + "node_modules/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "dev": true, @@ -19396,6 +19762,65 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/winston": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz", + "integrity": "sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==", + "dependencies": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-loki": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/winston-loki/-/winston-loki-6.0.6.tgz", + "integrity": "sha512-cll+nv5T/b9uJXqca0N2WKL1JJNuJND9E6WOOAuSGkZ44L9VQ/QK9F+/5VKbv6LIP9p0nvPSOYxtACCDb/9iWw==", + "dependencies": { + "async-exit-hook": "2.0.1", + "btoa": "^1.2.1", + "protobufjs": "^6.8.8", + "winston-transport": "^4.3.0" + }, + "optionalDependencies": { + "snappy": "7.1.1" + } + }, + "node_modules/winston-transport": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "dev": true, @@ -40255,6 +40680,21 @@ "uint8arrays": "^3.0.0" } }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" + }, + "@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "@eslint/eslintrc": { "version": "1.3.3", "dev": true, @@ -64215,6 +64655,84 @@ "murmurhash3js-revisited": "^3.0.0" } }, + "@napi-rs/snappy-android-arm-eabi": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm-eabi/-/snappy-android-arm-eabi-7.1.1.tgz", + "integrity": "sha512-NKd/ztuVEgQaAaNVQ5zZaCB9VV+7+uBXBHqhaE5iSapQhLc41szTlT0s68FCee75OoT3vhqdA6Jp5TrzZ2WOaw==", + "optional": true + }, + "@napi-rs/snappy-android-arm64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm64/-/snappy-android-arm64-7.1.1.tgz", + "integrity": "sha512-DktruMAO0K0toTnxNHg2GWNIAPJqdvIchCsdsRaKyuEnG101qBg0mYiRCAhxHgbT6RJlOGbUPKkbA9KKRhEJUg==", + "optional": true + }, + "@napi-rs/snappy-darwin-arm64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-arm64/-/snappy-darwin-arm64-7.1.1.tgz", + "integrity": "sha512-3LZyoAw3Qa5F7sCCTkSkhmGlydwUKU6L3Jl46eKHO2Ctm8Gcjxww6T7MfwlwGZ6JqAM6d1d++WLzUZPCGXVmag==", + "optional": true + }, + "@napi-rs/snappy-darwin-x64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-x64/-/snappy-darwin-x64-7.1.1.tgz", + "integrity": "sha512-X1D2F67bQkPwr5iSR29/RnOrLwAkB55YO6t41toABzla3mflLDpzZcakz6FokIukykf7ey31/t73v/4pbgaBkg==", + "optional": true + }, + "@napi-rs/snappy-freebsd-x64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-freebsd-x64/-/snappy-freebsd-x64-7.1.1.tgz", + "integrity": "sha512-vSeuf+An8jFVHPAn5IbWE9hTGU9PFAaZLj/X7rKTQQtZstnDsHgWe6u4g7FHLuOdwQ8TvhcxAEpNlYIXIk4AJg==", + "optional": true + }, + "@napi-rs/snappy-linux-arm-gnueabihf": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm-gnueabihf/-/snappy-linux-arm-gnueabihf-7.1.1.tgz", + "integrity": "sha512-/yyN6QsnOs3D1+jI3SfRX+gtnD86rbixdfmgxv9g40+FrDaDTLAu/3VuZIqH02qqq/xiWbDnkO+42RGxXDzTCw==", + "optional": true + }, + "@napi-rs/snappy-linux-arm64-gnu": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-gnu/-/snappy-linux-arm64-gnu-7.1.1.tgz", + "integrity": "sha512-StEeUCSwUoajgrBtiCQPTkHu+0Q4QlYndghGZNdbN1zJ1ny70YzPpevaFBUyjI/eJ+FN9uICKtwTPtQNSILS5g==", + "optional": true + }, + "@napi-rs/snappy-linux-arm64-musl": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-musl/-/snappy-linux-arm64-musl-7.1.1.tgz", + "integrity": "sha512-jWEBRzj+lswZVYf0b5eY0fjMlBL9L9yqjmTuv2UIMjJNHPuR282LK/s3Fm9sYIXQtKkiCo5JyhmIcoghZ3v0Eg==", + "optional": true + }, + "@napi-rs/snappy-linux-x64-gnu": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-gnu/-/snappy-linux-x64-gnu-7.1.1.tgz", + "integrity": "sha512-41DPoAUFAU9VNrj/96qKfStH2Xq88ZYIsSz8BlITDm2ScoeDGOGbmaWguCXU7I+bC2uKWTmUVMXKqk6tVY6LEg==", + "optional": true + }, + "@napi-rs/snappy-linux-x64-musl": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-musl/-/snappy-linux-x64-musl-7.1.1.tgz", + "integrity": "sha512-xR4hzFQqVq6J8Zf6XyUVtFJBaRgDyAQYUoBsCr92tZ7gI/0RlWCV6Q6JMO/wP5CSsvyFJIAtSUXXqlzIpw0GPA==", + "optional": true + }, + "@napi-rs/snappy-win32-arm64-msvc": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-arm64-msvc/-/snappy-win32-arm64-msvc-7.1.1.tgz", + "integrity": "sha512-2mHPadctsaYtrfSV5Na8ooTdI5rflPxP1pceY4us6vbjeWrfgB+KQCuEFOHsGXqFNfsi6L9nWH8nB9swnxnSyw==", + "optional": true + }, + "@napi-rs/snappy-win32-ia32-msvc": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-ia32-msvc/-/snappy-win32-ia32-msvc-7.1.1.tgz", + "integrity": "sha512-FOMgs9W71hdgjyl3T9F7b/WEIuoryfgBqsyhtHjAaa/98R0BUHl0bOoHg8ka0b5GgnhLBHkX2Yd6VD+Si9Q2ww==", + "optional": true + }, + "@napi-rs/snappy-win32-x64-msvc": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-x64-msvc/-/snappy-win32-x64-msvc-7.1.1.tgz", + "integrity": "sha512-Mu3yELySvzhBcNTVCq+hYxVh+lH3/KjoQ5HIEb3DDPoX0AGRTm3XZa+usq8pFWjl91Cgp9nWK+9lVSkCCIRaKA==", + "optional": true + }, "@noble/ed25519": { "version": "1.7.1", "dev": true @@ -64601,48 +65119,38 @@ } }, "@protobufjs/aspromise": { - "version": "1.1.2", - "dev": true + "version": "1.1.2" }, "@protobufjs/base64": { - "version": "1.1.2", - "dev": true + "version": "1.1.2" }, "@protobufjs/codegen": { - "version": "2.0.4", - "dev": true + "version": "2.0.4" }, "@protobufjs/eventemitter": { - "version": "1.1.0", - "dev": true + "version": "1.1.0" }, "@protobufjs/fetch": { "version": "1.1.0", - "dev": true, "requires": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" } }, "@protobufjs/float": { - "version": "1.0.2", - "dev": true + "version": "1.0.2" }, "@protobufjs/inquire": { - "version": "1.1.0", - "dev": true + "version": "1.1.0" }, "@protobufjs/path": { - "version": "1.1.2", - "dev": true + "version": "1.1.2" }, "@protobufjs/pool": { - "version": "1.1.0", - "dev": true + "version": "1.1.0" }, "@protobufjs/utf8": { - "version": "1.1.0", - "dev": true + "version": "1.1.0" }, "@sindresorhus/is": { "version": "4.6.0" @@ -64893,8 +65401,7 @@ } }, "@types/long": { - "version": "4.0.2", - "dev": true + "version": "4.0.2" }, "@types/mime": { "version": "3.0.1", @@ -65357,8 +65864,12 @@ "dev": true }, "async": { - "version": "3.2.4", - "dev": true + "version": "3.2.4" + }, + "async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==" }, "async-limiter": { "version": "1.0.1" @@ -65617,6 +66128,11 @@ "safe-buffer": "^5.1.2" } }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + }, "btoa-lite": { "version": "1.0.0", "dev": true @@ -66077,6 +66593,30 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + } + } + }, "color-convert": { "version": "2.0.1", "dev": true, @@ -66085,8 +66625,25 @@ } }, "color-name": { + "version": "1.1.4" + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorspace": { "version": "1.1.4", - "dev": true + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "requires": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } }, "columnify": { "version": "1.6.0", @@ -67022,6 +67579,11 @@ "version": "7.0.3", "dev": true }, + "enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, "encodeurl": { "version": "1.0.2" }, @@ -67823,6 +68385,11 @@ "reusify": "^1.0.4" } }, + "fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, "figgy-pudding": { "version": "3.5.2", "dev": true @@ -67946,6 +68513,11 @@ } } }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "fnv1a": { "version": "1.1.1", "dev": true @@ -70496,6 +71068,11 @@ "version": "6.0.3", "dev": true }, + "kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, "lerna": { "version": "3.22.1", "dev": true, @@ -71114,9 +71691,20 @@ } } }, + "logform": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", + "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "requires": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, "long": { - "version": "4.0.0", - "dev": true + "version": "4.0.0" }, "loose-envify": { "version": "1.4.0", @@ -72625,6 +73213,14 @@ "wrappy": "1" } }, + "one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } + }, "onetime": { "version": "2.0.1", "dev": true, @@ -73163,7 +73759,6 @@ }, "protobufjs": { "version": "6.11.3", - "dev": true, "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -73747,6 +74342,11 @@ "is-regex": "^1.1.4" } }, + "safe-stable-stringify": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz", + "integrity": "sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA==" + }, "safer-buffer": { "version": "2.1.2" }, @@ -74002,6 +74602,21 @@ } } }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, "slash": { "version": "3.0.0", "dev": true @@ -74150,6 +74765,27 @@ } } }, + "snappy": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/snappy/-/snappy-7.1.1.tgz", + "integrity": "sha512-mL7GGPJ+WdsaFT5aR/uEqCq8cPg2VbhyifDEP7AeqIVDsAC8LBGYbZP1Qzoa2Ym84OW7JEQXqIpwqFp1EQw5BA==", + "optional": true, + "requires": { + "@napi-rs/snappy-android-arm-eabi": "7.1.1", + "@napi-rs/snappy-android-arm64": "7.1.1", + "@napi-rs/snappy-darwin-arm64": "7.1.1", + "@napi-rs/snappy-darwin-x64": "7.1.1", + "@napi-rs/snappy-freebsd-x64": "7.1.1", + "@napi-rs/snappy-linux-arm-gnueabihf": "7.1.1", + "@napi-rs/snappy-linux-arm64-gnu": "7.1.1", + "@napi-rs/snappy-linux-arm64-musl": "7.1.1", + "@napi-rs/snappy-linux-x64-gnu": "7.1.1", + "@napi-rs/snappy-linux-x64-musl": "7.1.1", + "@napi-rs/snappy-win32-arm64-msvc": "7.1.1", + "@napi-rs/snappy-win32-ia32-msvc": "7.1.1", + "@napi-rs/snappy-win32-x64-msvc": "7.1.1" + } + }, "socket.io-client": { "version": "4.5.3", "dev": true, @@ -74321,6 +74957,11 @@ "version": "0.1.8", "dev": true }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==" + }, "static-extend": { "version": "0.1.2", "dev": true, @@ -74711,6 +75352,11 @@ "version": "1.9.0", "dev": true }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "text-table": { "version": "0.2.0", "dev": true @@ -74838,6 +75484,11 @@ "version": "3.0.1", "dev": true }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, "truncate-utf8-bytes": { "version": "1.0.2", "dev": true, @@ -75666,6 +76317,53 @@ "execa": "^1.0.0" } }, + "winston": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz", + "integrity": "sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==", + "requires": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "dependencies": { + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + } + } + }, + "winston-loki": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/winston-loki/-/winston-loki-6.0.6.tgz", + "integrity": "sha512-cll+nv5T/b9uJXqca0N2WKL1JJNuJND9E6WOOAuSGkZ44L9VQ/QK9F+/5VKbv6LIP9p0nvPSOYxtACCDb/9iWw==", + "requires": { + "async-exit-hook": "2.0.1", + "btoa": "^1.2.1", + "protobufjs": "^6.8.8", + "snappy": "7.1.1", + "winston-transport": "^4.3.0" + } + }, + "winston-transport": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "requires": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + } + }, "word-wrap": { "version": "1.2.3", "dev": true diff --git a/package.json b/package.json index f656e4b9c..1f3878a76 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,9 @@ "memorystore": "^1.6.7", "node-fetch": "2.6.6", "serve-index": "^1.9.1", - "web3": "^1.2.11" + "web3": "^1.2.11", + "winston": "^3.8.2", + "winston-loki": "^6.0.6" }, "devDependencies": { "@types/bunyan": "^1.8.6", diff --git a/services/core/package-lock.json b/services/core/package-lock.json index 2774fe353..bdbc913f1 100644 --- a/services/core/package-lock.json +++ b/services/core/package-lock.json @@ -14,7 +14,9 @@ "node-fetch": "^2.6.1", "rimraf": "^3.0.2", "semver": "^7.3.7", - "web3": "^1.3.0" + "web3": "^1.3.0", + "winston": "^3.8.2", + "winston-loki": "^6.0.6" }, "bin": { "sourcify-core": "build/index.js" @@ -27,6 +29,24 @@ "typescript": "^4.9.3" } }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "node_modules/@ethereumjs/common": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", @@ -429,6 +449,255 @@ "@ethersproject/strings": "^5.7.0" } }, + "node_modules/@napi-rs/snappy-android-arm-eabi": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm-eabi/-/snappy-android-arm-eabi-7.1.1.tgz", + "integrity": "sha512-NKd/ztuVEgQaAaNVQ5zZaCB9VV+7+uBXBHqhaE5iSapQhLc41szTlT0s68FCee75OoT3vhqdA6Jp5TrzZ2WOaw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-android-arm64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm64/-/snappy-android-arm64-7.1.1.tgz", + "integrity": "sha512-DktruMAO0K0toTnxNHg2GWNIAPJqdvIchCsdsRaKyuEnG101qBg0mYiRCAhxHgbT6RJlOGbUPKkbA9KKRhEJUg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-darwin-arm64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-arm64/-/snappy-darwin-arm64-7.1.1.tgz", + "integrity": "sha512-3LZyoAw3Qa5F7sCCTkSkhmGlydwUKU6L3Jl46eKHO2Ctm8Gcjxww6T7MfwlwGZ6JqAM6d1d++WLzUZPCGXVmag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-darwin-x64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-x64/-/snappy-darwin-x64-7.1.1.tgz", + "integrity": "sha512-X1D2F67bQkPwr5iSR29/RnOrLwAkB55YO6t41toABzla3mflLDpzZcakz6FokIukykf7ey31/t73v/4pbgaBkg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-freebsd-x64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-freebsd-x64/-/snappy-freebsd-x64-7.1.1.tgz", + "integrity": "sha512-vSeuf+An8jFVHPAn5IbWE9hTGU9PFAaZLj/X7rKTQQtZstnDsHgWe6u4g7FHLuOdwQ8TvhcxAEpNlYIXIk4AJg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-arm-gnueabihf": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm-gnueabihf/-/snappy-linux-arm-gnueabihf-7.1.1.tgz", + "integrity": "sha512-/yyN6QsnOs3D1+jI3SfRX+gtnD86rbixdfmgxv9g40+FrDaDTLAu/3VuZIqH02qqq/xiWbDnkO+42RGxXDzTCw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-arm64-gnu": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-gnu/-/snappy-linux-arm64-gnu-7.1.1.tgz", + "integrity": "sha512-StEeUCSwUoajgrBtiCQPTkHu+0Q4QlYndghGZNdbN1zJ1ny70YzPpevaFBUyjI/eJ+FN9uICKtwTPtQNSILS5g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-arm64-musl": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-musl/-/snappy-linux-arm64-musl-7.1.1.tgz", + "integrity": "sha512-jWEBRzj+lswZVYf0b5eY0fjMlBL9L9yqjmTuv2UIMjJNHPuR282LK/s3Fm9sYIXQtKkiCo5JyhmIcoghZ3v0Eg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-x64-gnu": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-gnu/-/snappy-linux-x64-gnu-7.1.1.tgz", + "integrity": "sha512-41DPoAUFAU9VNrj/96qKfStH2Xq88ZYIsSz8BlITDm2ScoeDGOGbmaWguCXU7I+bC2uKWTmUVMXKqk6tVY6LEg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-x64-musl": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-musl/-/snappy-linux-x64-musl-7.1.1.tgz", + "integrity": "sha512-xR4hzFQqVq6J8Zf6XyUVtFJBaRgDyAQYUoBsCr92tZ7gI/0RlWCV6Q6JMO/wP5CSsvyFJIAtSUXXqlzIpw0GPA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-win32-arm64-msvc": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-arm64-msvc/-/snappy-win32-arm64-msvc-7.1.1.tgz", + "integrity": "sha512-2mHPadctsaYtrfSV5Na8ooTdI5rflPxP1pceY4us6vbjeWrfgB+KQCuEFOHsGXqFNfsi6L9nWH8nB9swnxnSyw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-win32-ia32-msvc": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-ia32-msvc/-/snappy-win32-ia32-msvc-7.1.1.tgz", + "integrity": "sha512-FOMgs9W71hdgjyl3T9F7b/WEIuoryfgBqsyhtHjAaa/98R0BUHl0bOoHg8ka0b5GgnhLBHkX2Yd6VD+Si9Q2ww==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-win32-x64-msvc": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-x64-msvc/-/snappy-win32-x64-msvc-7.1.1.tgz", + "integrity": "sha512-Mu3yELySvzhBcNTVCq+hYxVh+lH3/KjoQ5HIEb3DDPoX0AGRTm3XZa+usq8pFWjl91Cgp9nWK+9lVSkCCIRaKA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -502,6 +771,11 @@ "@types/node": "*" } }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "node_modules/@types/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", @@ -627,6 +901,19 @@ "node": ">=0.8" } }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", @@ -848,6 +1135,17 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -1039,6 +1337,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1355,6 +1693,11 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -1608,6 +1951,11 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -1625,6 +1973,11 @@ "node": ">= 0.8" } }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -2032,6 +2385,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -2071,6 +2429,17 @@ "npm": ">=3" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-typed-array": { "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", @@ -2173,6 +2542,33 @@ "json-buffer": "3.0.1" } }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/logform": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", + "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "dependencies": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, + "node_modules/logform/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "node_modules/lowercase-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", @@ -2605,6 +3001,14 @@ "wrappy": "1" } }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, "node_modules/p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", @@ -2679,6 +3083,31 @@ "node": ">= 0.6.0" } }, + "node_modules/protobufjs": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -2956,6 +3385,14 @@ "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", "optional": true }, + "node_modules/safe-stable-stringify": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz", + "integrity": "sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA==", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -3126,6 +3563,42 @@ "node": ">=4" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/snappy": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/snappy/-/snappy-7.1.1.tgz", + "integrity": "sha512-mL7GGPJ+WdsaFT5aR/uEqCq8cPg2VbhyifDEP7AeqIVDsAC8LBGYbZP1Qzoa2Ym84OW7JEQXqIpwqFp1EQw5BA==", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/snappy-android-arm-eabi": "7.1.1", + "@napi-rs/snappy-android-arm64": "7.1.1", + "@napi-rs/snappy-darwin-arm64": "7.1.1", + "@napi-rs/snappy-darwin-x64": "7.1.1", + "@napi-rs/snappy-freebsd-x64": "7.1.1", + "@napi-rs/snappy-linux-arm-gnueabihf": "7.1.1", + "@napi-rs/snappy-linux-arm64-gnu": "7.1.1", + "@napi-rs/snappy-linux-arm64-musl": "7.1.1", + "@napi-rs/snappy-linux-x64-gnu": "7.1.1", + "@napi-rs/snappy-linux-x64-musl": "7.1.1", + "@napi-rs/snappy-win32-arm64-msvc": "7.1.1", + "@napi-rs/snappy-win32-ia32-msvc": "7.1.1", + "@napi-rs/snappy-win32-x64-msvc": "7.1.1" + } + }, "node_modules/sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", @@ -3150,6 +3623,14 @@ "node": ">=0.10.0" } }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -3297,6 +3778,11 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "node_modules/timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", @@ -3330,6 +3816,11 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "node_modules/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -3904,6 +4395,54 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/winston": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz", + "integrity": "sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==", + "dependencies": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-loki": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/winston-loki/-/winston-loki-6.0.6.tgz", + "integrity": "sha512-cll+nv5T/b9uJXqca0N2WKL1JJNuJND9E6WOOAuSGkZ44L9VQ/QK9F+/5VKbv6LIP9p0nvPSOYxtACCDb/9iWw==", + "dependencies": { + "async-exit-hook": "2.0.1", + "btoa": "^1.2.1", + "protobufjs": "^6.8.8", + "winston-transport": "^4.3.0" + }, + "optionalDependencies": { + "snappy": "7.1.1" + } + }, + "node_modules/winston-transport": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3980,6 +4519,21 @@ } }, "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" + }, + "@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "@ethereumjs/common": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", @@ -4206,6 +4760,138 @@ "@ethersproject/strings": "^5.7.0" } }, + "@napi-rs/snappy-android-arm-eabi": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm-eabi/-/snappy-android-arm-eabi-7.1.1.tgz", + "integrity": "sha512-NKd/ztuVEgQaAaNVQ5zZaCB9VV+7+uBXBHqhaE5iSapQhLc41szTlT0s68FCee75OoT3vhqdA6Jp5TrzZ2WOaw==", + "optional": true + }, + "@napi-rs/snappy-android-arm64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm64/-/snappy-android-arm64-7.1.1.tgz", + "integrity": "sha512-DktruMAO0K0toTnxNHg2GWNIAPJqdvIchCsdsRaKyuEnG101qBg0mYiRCAhxHgbT6RJlOGbUPKkbA9KKRhEJUg==", + "optional": true + }, + "@napi-rs/snappy-darwin-arm64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-arm64/-/snappy-darwin-arm64-7.1.1.tgz", + "integrity": "sha512-3LZyoAw3Qa5F7sCCTkSkhmGlydwUKU6L3Jl46eKHO2Ctm8Gcjxww6T7MfwlwGZ6JqAM6d1d++WLzUZPCGXVmag==", + "optional": true + }, + "@napi-rs/snappy-darwin-x64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-x64/-/snappy-darwin-x64-7.1.1.tgz", + "integrity": "sha512-X1D2F67bQkPwr5iSR29/RnOrLwAkB55YO6t41toABzla3mflLDpzZcakz6FokIukykf7ey31/t73v/4pbgaBkg==", + "optional": true + }, + "@napi-rs/snappy-freebsd-x64": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-freebsd-x64/-/snappy-freebsd-x64-7.1.1.tgz", + "integrity": "sha512-vSeuf+An8jFVHPAn5IbWE9hTGU9PFAaZLj/X7rKTQQtZstnDsHgWe6u4g7FHLuOdwQ8TvhcxAEpNlYIXIk4AJg==", + "optional": true + }, + "@napi-rs/snappy-linux-arm-gnueabihf": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm-gnueabihf/-/snappy-linux-arm-gnueabihf-7.1.1.tgz", + "integrity": "sha512-/yyN6QsnOs3D1+jI3SfRX+gtnD86rbixdfmgxv9g40+FrDaDTLAu/3VuZIqH02qqq/xiWbDnkO+42RGxXDzTCw==", + "optional": true + }, + "@napi-rs/snappy-linux-arm64-gnu": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-gnu/-/snappy-linux-arm64-gnu-7.1.1.tgz", + "integrity": "sha512-StEeUCSwUoajgrBtiCQPTkHu+0Q4QlYndghGZNdbN1zJ1ny70YzPpevaFBUyjI/eJ+FN9uICKtwTPtQNSILS5g==", + "optional": true + }, + "@napi-rs/snappy-linux-arm64-musl": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-musl/-/snappy-linux-arm64-musl-7.1.1.tgz", + "integrity": "sha512-jWEBRzj+lswZVYf0b5eY0fjMlBL9L9yqjmTuv2UIMjJNHPuR282LK/s3Fm9sYIXQtKkiCo5JyhmIcoghZ3v0Eg==", + "optional": true + }, + "@napi-rs/snappy-linux-x64-gnu": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-gnu/-/snappy-linux-x64-gnu-7.1.1.tgz", + "integrity": "sha512-41DPoAUFAU9VNrj/96qKfStH2Xq88ZYIsSz8BlITDm2ScoeDGOGbmaWguCXU7I+bC2uKWTmUVMXKqk6tVY6LEg==", + "optional": true + }, + "@napi-rs/snappy-linux-x64-musl": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-musl/-/snappy-linux-x64-musl-7.1.1.tgz", + "integrity": "sha512-xR4hzFQqVq6J8Zf6XyUVtFJBaRgDyAQYUoBsCr92tZ7gI/0RlWCV6Q6JMO/wP5CSsvyFJIAtSUXXqlzIpw0GPA==", + "optional": true + }, + "@napi-rs/snappy-win32-arm64-msvc": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-arm64-msvc/-/snappy-win32-arm64-msvc-7.1.1.tgz", + "integrity": "sha512-2mHPadctsaYtrfSV5Na8ooTdI5rflPxP1pceY4us6vbjeWrfgB+KQCuEFOHsGXqFNfsi6L9nWH8nB9swnxnSyw==", + "optional": true + }, + "@napi-rs/snappy-win32-ia32-msvc": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-ia32-msvc/-/snappy-win32-ia32-msvc-7.1.1.tgz", + "integrity": "sha512-FOMgs9W71hdgjyl3T9F7b/WEIuoryfgBqsyhtHjAaa/98R0BUHl0bOoHg8ka0b5GgnhLBHkX2Yd6VD+Si9Q2ww==", + "optional": true + }, + "@napi-rs/snappy-win32-x64-msvc": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-x64-msvc/-/snappy-win32-x64-msvc-7.1.1.tgz", + "integrity": "sha512-Mu3yELySvzhBcNTVCq+hYxVh+lH3/KjoQ5HIEb3DDPoX0AGRTm3XZa+usq8pFWjl91Cgp9nWK+9lVSkCCIRaKA==", + "optional": true + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -4270,6 +4956,11 @@ "@types/node": "*" } }, + "@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "@types/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", @@ -4385,6 +5076,16 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==" + }, "async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", @@ -4580,6 +5281,11 @@ "safe-buffer": "^5.1.2" } }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -4721,6 +5427,46 @@ "mimic-response": "^1.0.0" } }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "requires": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -4977,6 +5723,11 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -5215,6 +5966,11 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, + "fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, "finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -5229,6 +5985,11 @@ "unpipe": "~1.0.0" } }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -5535,6 +6296,11 @@ "has-tostringtag": "^1.0.0" } }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -5558,6 +6324,11 @@ "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, "is-typed-array": { "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", @@ -5647,6 +6418,35 @@ "json-buffer": "3.0.1" } }, + "kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "logform": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz", + "integrity": "sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw==", + "requires": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "lowercase-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", @@ -5982,6 +6782,14 @@ "wrappy": "1" } }, + "one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } + }, "p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", @@ -6041,6 +6849,26 @@ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" }, + "protobufjs": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -6255,6 +7083,11 @@ "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", "optional": true }, + "safe-stable-stringify": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz", + "integrity": "sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA==" + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -6387,6 +7220,35 @@ } } }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "snappy": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/snappy/-/snappy-7.1.1.tgz", + "integrity": "sha512-mL7GGPJ+WdsaFT5aR/uEqCq8cPg2VbhyifDEP7AeqIVDsAC8LBGYbZP1Qzoa2Ym84OW7JEQXqIpwqFp1EQw5BA==", + "optional": true, + "requires": { + "@napi-rs/snappy-android-arm-eabi": "7.1.1", + "@napi-rs/snappy-android-arm64": "7.1.1", + "@napi-rs/snappy-darwin-arm64": "7.1.1", + "@napi-rs/snappy-darwin-x64": "7.1.1", + "@napi-rs/snappy-freebsd-x64": "7.1.1", + "@napi-rs/snappy-linux-arm-gnueabihf": "7.1.1", + "@napi-rs/snappy-linux-arm64-gnu": "7.1.1", + "@napi-rs/snappy-linux-arm64-musl": "7.1.1", + "@napi-rs/snappy-linux-x64-gnu": "7.1.1", + "@napi-rs/snappy-linux-x64-musl": "7.1.1", + "@napi-rs/snappy-win32-arm64-msvc": "7.1.1", + "@napi-rs/snappy-win32-ia32-msvc": "7.1.1", + "@napi-rs/snappy-win32-x64-msvc": "7.1.1" + } + }, "sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", @@ -6403,6 +7265,11 @@ "tweetnacl": "~0.14.0" } }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==" + }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -6520,6 +7387,11 @@ } } }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", @@ -6544,6 +7416,11 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -7016,6 +7893,46 @@ "is-typed-array": "^1.1.10" } }, + "winston": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz", + "integrity": "sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==", + "requires": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + } + }, + "winston-loki": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/winston-loki/-/winston-loki-6.0.6.tgz", + "integrity": "sha512-cll+nv5T/b9uJXqca0N2WKL1JJNuJND9E6WOOAuSGkZ44L9VQ/QK9F+/5VKbv6LIP9p0nvPSOYxtACCDb/9iWw==", + "requires": { + "async-exit-hook": "2.0.1", + "btoa": "^1.2.1", + "protobufjs": "^6.8.8", + "snappy": "7.1.1", + "winston-transport": "^4.3.0" + } + }, + "winston-transport": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "requires": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/services/core/package.json b/services/core/package.json index bdf098753..cf5036c6e 100644 --- a/services/core/package.json +++ b/services/core/package.json @@ -34,6 +34,8 @@ "node-fetch": "^2.6.1", "rimraf": "^3.0.2", "semver": "^7.3.7", - "web3": "^1.3.0" + "web3": "^1.3.0", + "winston": "^3.8.2", + "winston-loki": "^6.0.6" } } diff --git a/services/core/src/index.ts b/services/core/src/index.ts index 75ebbdd4d..5cba06003 100644 --- a/services/core/src/index.ts +++ b/services/core/src/index.ts @@ -5,3 +5,6 @@ export * from "./utils/utils"; export * from "./utils/logger"; export * from "./utils/CheckedContract"; export * from "./services/FileService"; +export * from "./services/EventManager"; +export * from "./services/EventManager/listeners/logger"; +export * from "./services/EventManager/listeners/matchStored"; diff --git a/services/core/src/services/EventManager/index.ts b/services/core/src/services/EventManager/index.ts new file mode 100644 index 000000000..9eff07a4f --- /dev/null +++ b/services/core/src/services/EventManager/index.ts @@ -0,0 +1,22 @@ +import { + GenericListenersInterface, + EventManager, +} from "../../utils/EventManager"; +import { Match } from "../../utils/types"; + +interface ListenersInterface extends GenericListenersInterface { + "*": ((event: string, argument: any) => void)[]; + "Server.ApiReplied": ((apiEvent: { + api: string; + success: boolean; + parameters: any; + response: any; + }) => void)[]; + "Injector.MatchStored": ((match: Match) => void)[]; +} + +export const SourcifyEventManager = new EventManager({ + "*": [], + "Server.ApiReplied": [], + "Injector.MatchStored": [], +}); diff --git a/services/core/src/services/EventManager/listeners/logger.ts b/services/core/src/services/EventManager/listeners/logger.ts new file mode 100644 index 000000000..416e6c23c --- /dev/null +++ b/services/core/src/services/EventManager/listeners/logger.ts @@ -0,0 +1,11 @@ +import { SourcifyEventManager } from "../."; +import { logger } from "../../../utils/loggerLoki"; + +SourcifyEventManager.on("*", [ + (event: string, argument: any) => { + logger.info({ + message: argument, + labels: { type: "logging", event: event }, + }); + }, +]); diff --git a/services/core/src/services/EventManager/listeners/matchStored.ts b/services/core/src/services/EventManager/listeners/matchStored.ts new file mode 100644 index 000000000..f64278296 --- /dev/null +++ b/services/core/src/services/EventManager/listeners/matchStored.ts @@ -0,0 +1,15 @@ +import { SourcifyEventManager } from ".."; +import { logger } from "../../../utils/loggerLoki"; +import { Match } from "../../../utils/types"; + +SourcifyEventManager.on("Injector.MatchStored", [ + (match: Match) => { + logger.info({ + message: match, + labels: { + type: "event", + event: "Injector.MatchStored", + }, + }); + }, +]); diff --git a/services/core/src/utils/EventManager.ts b/services/core/src/utils/EventManager.ts new file mode 100644 index 000000000..38c2ade76 --- /dev/null +++ b/services/core/src/utils/EventManager.ts @@ -0,0 +1,34 @@ +type ArgumentTypes = F extends (...args: infer A) => any ? A : never; + +export type GenericListenersInterface = { + [index: string]: ((...args: any) => any)[]; +}; + +export class EventManager< + ListenersInterface extends GenericListenersInterface +> { + listeners: ListenersInterface; + constructor(init: ListenersInterface) { + this.listeners = init; + } + on( + event: T, + listener: ListenersInterface[T] + ) { + const listeners = this.listeners[event]; + this.listeners[event] = listeners.concat(listener) as ListenersInterface[T]; + } + trigger< + T extends keyof ListenersInterface, + K extends ListenersInterface[T][any] + >(event: T, ...args: ArgumentTypes): ReturnType[] { + if (this.listeners["*"]) { + this.listeners["*"].map((listener: any) => + listener(event, ...(args as Array)) + ); + } + return this.listeners[event].map((listener: any) => + listener(...(args as Array)) + ); + } +} diff --git a/services/core/src/utils/loggerLoki.ts b/services/core/src/utils/loggerLoki.ts new file mode 100644 index 000000000..670625863 --- /dev/null +++ b/services/core/src/utils/loggerLoki.ts @@ -0,0 +1,27 @@ +import { createLogger, transports, format } from "winston"; +import LokiTransport from "winston-loki"; + +const loggerInstance = createLogger(); + +loggerInstance.add( + new LokiTransport({ + host: "http://127.0.0.1:3100", + basicAuth: "username:password", + json: true, + format: format.combine( + format((info) => { + const MESSAGE = Symbol.for("message"); + info[MESSAGE as any] = JSON.stringify(info.message); + return info; + })() + ), + }) +); + +loggerInstance.add( + new transports.Console({ + format: format.combine(format.timestamp(), format.json()), + }) +); + +export const logger = loggerInstance; diff --git a/services/loki/docker-compose.yaml b/services/loki/docker-compose.yaml new file mode 100644 index 000000000..02f6b8513 --- /dev/null +++ b/services/loki/docker-compose.yaml @@ -0,0 +1,38 @@ +version: "3" + +networks: + loki: + +services: + loki: + image: grafana/loki:2.6.1 + ports: + - "3100:3100" + command: -config.file=/etc/loki/local-config.yaml + networks: + - loki + + promtail: + image: grafana/promtail:2.6.1 + volumes: + - /var/log:/var/log + command: -config.file=/etc/promtail/config.yml + networks: + - loki + + grafana: + image: grafana/grafana:latest + ports: + - "3000:3000" + networks: + - loki + volumes: + - /docker_data/grafana_data:/var/lib/grafana + environment: + - HTTP_USER="admin" + - HTTP_PASS="admin" + restart: always + +volumes: + grafana-storage: + external: true \ No newline at end of file diff --git a/services/verification/src/services/Injector.ts b/services/verification/src/services/Injector.ts index 1fbe35001..e4d8aeef9 100644 --- a/services/verification/src/services/Injector.ts +++ b/services/verification/src/services/Injector.ts @@ -15,6 +15,7 @@ import { Metadata, Create2Args, Create2ConstructorArgument, + SourcifyEventManager, } from "@ethereum-sourcify/core"; import { RecompilationResult, @@ -619,6 +620,7 @@ export class Injector { } await this.addToIpfsMfs(matchQuality, match.chainId, match.address); + SourcifyEventManager.trigger("Injector.MatchStored", match); } else if (match.status === "extra-file-input-bug") { return match; } else { diff --git a/src/server/middlewares/ApiLogging.ts b/src/server/middlewares/ApiLogging.ts new file mode 100644 index 000000000..5684ba570 --- /dev/null +++ b/src/server/middlewares/ApiLogging.ts @@ -0,0 +1,20 @@ +import { SourcifyEventManager } from "@ethereum-sourcify/core"; + +export default function notFoundError(express: any): void { + const _send: Function = express.response.send; + (express.response as any).send = function (...args: any) { + let parsedResponse; + try { + parsedResponse = JSON.parse(args); + } catch (e) { + parsedResponse = {}; + } + SourcifyEventManager.trigger("Server.ApiReplied", { + api: this.req.path, + success: true, + parameters: this.req.body, + response: parsedResponse, + }); + return _send.bind(this)(...args); + }; +} diff --git a/src/server/middlewares/GenericErrorHandler.ts b/src/server/middlewares/GenericErrorHandler.ts index 217fe091f..a5c77cc09 100644 --- a/src/server/middlewares/GenericErrorHandler.ts +++ b/src/server/middlewares/GenericErrorHandler.ts @@ -2,6 +2,7 @@ import * as HttpStatus from "http-status-codes"; import { Request, Response } from "express"; import { Logger } from "@ethereum-sourcify/core"; import * as bunyan from "bunyan"; +import { SourcifyEventManager } from "@ethereum-sourcify/core"; export default function genericErrorHandler( err: any, @@ -12,6 +13,7 @@ export default function genericErrorHandler( if (err.log) { const logger: bunyan = Logger("Error"); logger.error(`Error: ${JSON.stringify(err)}`); + // TODO: add SourcifyEventManager.trigger("Error") } if (err.errors) { diff --git a/src/server/server.ts b/src/server/server.ts index 6532ff868..a57dc88ce 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -9,6 +9,7 @@ import { Logger, getSourcifyChains } from "@ethereum-sourcify/core"; import bunyan from "bunyan"; import genericErrorHandler from "./middlewares/GenericErrorHandler"; import notFoundHandler from "./middlewares/NotFoundError"; +import useApiLogging from "./middlewares/ApiLogging"; import session from "express-session"; import createMemoryStore from "memorystore"; import util from "util"; @@ -21,6 +22,8 @@ export class Server { port = config.server.port; constructor() { + useApiLogging(express); + this.app = express(); this.app.use( From bcd6ffe8387f9b4d13165c19aa65a29f01316a07 Mon Sep 17 00:00:00 2001 From: Marco Castignoli Date: Wed, 30 Nov 2022 16:24:06 +0100 Subject: [PATCH 16/87] improve eventmanager --- .../core/src/services/EventManager/index.ts | 18 ++++------- services/core/src/utils/EventManager.ts | 32 +++++++++---------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/services/core/src/services/EventManager/index.ts b/services/core/src/services/EventManager/index.ts index 9eff07a4f..1adc0c563 100644 --- a/services/core/src/services/EventManager/index.ts +++ b/services/core/src/services/EventManager/index.ts @@ -1,21 +1,17 @@ -import { - GenericListenersInterface, - EventManager, -} from "../../utils/EventManager"; +import { EventManager, GenericEvents } from "../../utils/EventManager"; import { Match } from "../../utils/types"; - -interface ListenersInterface extends GenericListenersInterface { - "*": ((event: string, argument: any) => void)[]; - "Server.ApiReplied": ((apiEvent: { +interface Events extends GenericEvents { + "*": (event: string, argument: any) => void; + "Server.ApiReplied": (apiEvent: { api: string; success: boolean; parameters: any; response: any; - }) => void)[]; - "Injector.MatchStored": ((match: Match) => void)[]; + }) => void; + "Injector.MatchStored": (match: Match) => void; } -export const SourcifyEventManager = new EventManager({ +export const SourcifyEventManager = new EventManager({ "*": [], "Server.ApiReplied": [], "Injector.MatchStored": [], diff --git a/services/core/src/utils/EventManager.ts b/services/core/src/utils/EventManager.ts index 38c2ade76..e3179138d 100644 --- a/services/core/src/utils/EventManager.ts +++ b/services/core/src/utils/EventManager.ts @@ -1,27 +1,27 @@ type ArgumentTypes = F extends (...args: infer A) => any ? A : never; -export type GenericListenersInterface = { - [index: string]: ((...args: any) => any)[]; +type Arrayify = { + [K in keyof T]: Array; }; -export class EventManager< - ListenersInterface extends GenericListenersInterface -> { - listeners: ListenersInterface; - constructor(init: ListenersInterface) { +export type GenericEvents = { + "*": (...args: any) => any; + [index: string]: (...args: any) => any; +}; + +export class EventManager { + listeners: Arrayify; + constructor(init: Arrayify) { this.listeners = init; } - on( - event: T, - listener: ListenersInterface[T] - ) { + on(event: T, listener: Arrayify[T]) { const listeners = this.listeners[event]; - this.listeners[event] = listeners.concat(listener) as ListenersInterface[T]; + this.listeners[event] = listeners.concat(listener) as Arrayify[T]; } - trigger< - T extends keyof ListenersInterface, - K extends ListenersInterface[T][any] - >(event: T, ...args: ArgumentTypes): ReturnType[] { + trigger[T][any]>( + event: T, + ...args: ArgumentTypes + ): ReturnType[] { if (this.listeners["*"]) { this.listeners["*"].map((listener: any) => listener(event, ...(args as Array)) From 0f36f9d925da2e658e2ed1bda1d1e4f5b44b39ad Mon Sep 17 00:00:00 2001 From: CharlieM <31941002+CharlieMc0@users.noreply.github.com> Date: Wed, 30 Nov 2022 09:16:39 -0700 Subject: [PATCH 17/87] added ZetaChain Athens testnet --- services/core/src/chains.json | 24 ++++++++++++++++++++++++ services/core/src/sourcify-chains.ts | 8 ++++++++ test/chains/chain-tests.js | 18 ++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/services/core/src/chains.json b/services/core/src/chains.json index 7d42a6520..afb2548d6 100644 --- a/services/core/src/chains.json +++ b/services/core/src/chains.json @@ -11135,5 +11135,29 @@ "standard": "none" } ] + }, + { + "name": "ZetaChain Athens Testnet", + "chain": "ZetaChain", + "icon": "Zetachain", + "rpc": ["https://api.athens2.zetachain.com/evm"], + "faucets": ["https://labs.zetachain.com/get-zeta"], + "nativeCurrency": { + "name": "Zeta", + "symbol": "aZETA", + "decimals": 18 + }, + "infoURL": "https://docs.zetachain.com/", + "shortName": "zetachain-athens", + "chainId": 7001, + "networkId": 7001, + "status": "active", + "explorers": [ + { + "name": "ZetaChain Athens Testnet Explorer", + "url": "https://explorer.athens.zetachain.com", + "standard": "none" + } + ] } ] diff --git a/services/core/src/sourcify-chains.ts b/services/core/src/sourcify-chains.ts index 43bc93cba..7ca72213e 100644 --- a/services/core/src/sourcify-chains.ts +++ b/services/core/src/sourcify-chains.ts @@ -577,6 +577,14 @@ const sourcifyChains: SourcifyChainsObject = { "https://blockscout.com/optimism/bedrock-alpha/" + BLOCKSCOUT_SUFFIX, txRegex: getBlockscoutRegex("/optimism/bedrock-alpha"), }, + "7001": { + // ZetaChain: Athens Testnet + supported: true, + monitored: false, + contractFetchAddress: "https://blockscout.athens2.zetachain.com/" + BLOCKSCOUT_SUFFIX, + txRegex: getBlockscoutRegex(), + rpc: ["https://archive.athens2.zetachain.com/evm"], + }, }; export default sourcifyChains; diff --git a/test/chains/chain-tests.js b/test/chains/chain-tests.js index 39e4dd84a..60b82f503 100644 --- a/test/chains/chain-tests.js +++ b/test/chains/chain-tests.js @@ -1159,6 +1159,24 @@ describe("Test Supported Chains", function () { "shared/withImmutables.metadata.json" ); + // ZetaChain: Athens Testnet + verifyContract( + "0x1f42652a86918fd84E74e066db94E3078d25Dd8D", + "7001", + "ZetaChain Athens Testnet", + ["shared/1_Storage.sol"], + "shared/1_Storage.metadata.json" + ); + verifyContractWithImmutables( + "0x7fe7d2F60399913e8ECeb8BAe9adDf9B809E8F6d", + "7001", + "ZetaChain Athens Testnet", + ["uint256"], + [7001], + ["shared/WithImmutables.sol"], + "shared/withImmutables.metadata.json" + ); + ////////////////////// // Helper functions // From 674164baec99c5863fd894a514face250519fa08 Mon Sep 17 00:00:00 2001 From: Marco Castignoli Date: Wed, 30 Nov 2022 17:23:28 +0100 Subject: [PATCH 18/87] event-manager: error handling --- services/core/src/services/EventManager/index.ts | 11 ++++++++++- .../src/services/EventManager/listeners/logger.ts | 15 +++++++++++---- src/server/middlewares/ApiLogging.ts | 2 +- src/server/middlewares/GenericErrorHandler.ts | 15 +++++++++------ 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/services/core/src/services/EventManager/index.ts b/services/core/src/services/EventManager/index.ts index 1adc0c563..13664ca71 100644 --- a/services/core/src/services/EventManager/index.ts +++ b/services/core/src/services/EventManager/index.ts @@ -2,9 +2,17 @@ import { EventManager, GenericEvents } from "../../utils/EventManager"; import { Match } from "../../utils/types"; interface Events extends GenericEvents { "*": (event: string, argument: any) => void; + "Server.Error": (errorEvent: { + message: string; + stack: string; + request: { + api: string; + parameters: any; + }; + }) => void; "Server.ApiReplied": (apiEvent: { api: string; - success: boolean; + status: number; parameters: any; response: any; }) => void; @@ -13,6 +21,7 @@ interface Events extends GenericEvents { export const SourcifyEventManager = new EventManager({ "*": [], + "Server.Error": [], "Server.ApiReplied": [], "Injector.MatchStored": [], }); diff --git a/services/core/src/services/EventManager/listeners/logger.ts b/services/core/src/services/EventManager/listeners/logger.ts index 416e6c23c..bec48848b 100644 --- a/services/core/src/services/EventManager/listeners/logger.ts +++ b/services/core/src/services/EventManager/listeners/logger.ts @@ -3,9 +3,16 @@ import { logger } from "../../../utils/loggerLoki"; SourcifyEventManager.on("*", [ (event: string, argument: any) => { - logger.info({ - message: argument, - labels: { type: "logging", event: event }, - }); + if (event.includes("Error")) { + logger.info({ + message: argument, + labels: { type: "errors", event: event }, + }); + } else { + logger.info({ + message: argument, + labels: { type: "logging", event: event }, + }); + } }, ]); diff --git a/src/server/middlewares/ApiLogging.ts b/src/server/middlewares/ApiLogging.ts index 5684ba570..4bfc22ec8 100644 --- a/src/server/middlewares/ApiLogging.ts +++ b/src/server/middlewares/ApiLogging.ts @@ -11,7 +11,7 @@ export default function notFoundError(express: any): void { } SourcifyEventManager.trigger("Server.ApiReplied", { api: this.req.path, - success: true, + status: this.statusCode, parameters: this.req.body, response: parsedResponse, }); diff --git a/src/server/middlewares/GenericErrorHandler.ts b/src/server/middlewares/GenericErrorHandler.ts index a5c77cc09..409c2ba9f 100644 --- a/src/server/middlewares/GenericErrorHandler.ts +++ b/src/server/middlewares/GenericErrorHandler.ts @@ -1,7 +1,5 @@ import * as HttpStatus from "http-status-codes"; import { Request, Response } from "express"; -import { Logger } from "@ethereum-sourcify/core"; -import * as bunyan from "bunyan"; import { SourcifyEventManager } from "@ethereum-sourcify/core"; export default function genericErrorHandler( @@ -10,10 +8,15 @@ export default function genericErrorHandler( res: Response, _next: any ): void { - if (err.log) { - const logger: bunyan = Logger("Error"); - logger.error(`Error: ${JSON.stringify(err)}`); - // TODO: add SourcifyEventManager.trigger("Error") + if (err) { + SourcifyEventManager.trigger("Server.Error", { + message: err.message, + stack: err.stack, + request: { + api: _req.path, + parameters: _req.body, + }, + }); } if (err.errors) { From da70ea047bbcab02f2582a3519550f3650786cd8 Mon Sep 17 00:00:00 2001 From: Marco Castignoli Date: Wed, 30 Nov 2022 17:24:12 +0100 Subject: [PATCH 19/87] event-manager: error handling --- src/server/middlewares/NotFoundError.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/server/middlewares/NotFoundError.ts b/src/server/middlewares/NotFoundError.ts index f939c5ad0..889e7d329 100644 --- a/src/server/middlewares/NotFoundError.ts +++ b/src/server/middlewares/NotFoundError.ts @@ -9,11 +9,6 @@ export default function notFoundError( res: Response, _next: any ): void { - if (err.log) { - const logger: bunyan = Logger("Error"); - logger.error(`Error: ${JSON.stringify(err)}`); - } - res.status(HttpStatus.StatusCodes.NOT_FOUND).json({ error: HttpStatus.getStatusText(err.message), }); From d80ae02e9b45f1ce4ca7bbb23a6ffdc45fb524e6 Mon Sep 17 00:00:00 2001 From: Kaan Uzdogan Date: Tue, 29 Nov 2022 11:01:36 +0100 Subject: [PATCH 20/87] simulateCreationBytecode with hardcoded const.arg. --- services/verification/package-lock.json | 1752 ++++++++++++++++- services/verification/package.json | 8 + .../verification/src/services/Injector.ts | 79 +- 3 files changed, 1808 insertions(+), 31 deletions(-) diff --git a/services/verification/package-lock.json b/services/verification/package-lock.json index 237a86928..f8f364064 100644 --- a/services/verification/package-lock.json +++ b/services/verification/package-lock.json @@ -11,6 +11,13 @@ "dependencies": { "@ethereum-sourcify/bytecode-utils": "*", "@ethereum-sourcify/core": "*", + "@ethereumjs/blockchain": "^6.0.2", + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/evm": "^1.2.2", + "@ethereumjs/statemanager": "^1.0.1", + "@ethereumjs/tx": "^4.0.1", + "@ethereumjs/util": "^8.0.2", + "@ethereumjs/vm": "^6.2.0", "bunyan": "^1.8.15", "ipfs-http-client": "^56.0.3", "node-fetch": "^2.6.1", @@ -27,6 +34,7 @@ "@types/node-fetch": "^2.5.7", "@types/promise.any": "^2.0.0", "@types/semver": "^7.3.9", + "lru-cache": "^7.14.1", "rimraf": "^3.0.2", "ts-node": "^9.0.0", "typescript": "^4.9.3" @@ -10608,20 +10616,287 @@ "resolved": "../core", "link": true }, + "node_modules/@ethereumjs/block": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-4.0.1.tgz", + "integrity": "sha512-cYkJaogUL5V3iZOSm7WgSP8Fvm9R/jN/dotRQZpj5SJ3fP6GF00xtmYpQGE10SnK/Lo+iyXwZ2K7M1zn/0wnXw==", + "dependencies": { + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/rlp": "^4.0.0", + "@ethereumjs/trie": "^5.0.1", + "@ethereumjs/tx": "^4.0.1", + "@ethereumjs/util": "^8.0.0", + "ethereum-cryptography": "^1.1.2", + "ethers": "^5.7.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/block/node_modules/ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dependencies": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + }, + "node_modules/@ethereumjs/blockchain": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-6.0.2.tgz", + "integrity": "sha512-32zKVQ8iOb7oOwKqGsLvdAzGaTQP6FepW6ssTycJOZ2r0NAHcN8+dsk77mv48yZkuQ4kt0D/73bj8lApiO5Uew==", + "dependencies": { + "@ethereumjs/block": "^4.0.1", + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/ethash": "^2.0.1", + "@ethereumjs/rlp": "^4.0.0", + "@ethereumjs/trie": "^5.0.1", + "@ethereumjs/util": "^8.0.2", + "abstract-level": "^1.0.3", + "debug": "^4.3.3", + "ethereum-cryptography": "^1.1.2", + "level": "^8.0.0", + "lru-cache": "^5.1.1", + "memory-level": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/blockchain/node_modules/ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dependencies": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + }, + "node_modules/@ethereumjs/blockchain/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@ethereumjs/blockchain/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, "node_modules/@ethereumjs/common": { - "version": "2.5.0", - "license": "MIT", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.0.1.tgz", + "integrity": "sha512-AHsJB7ydfb7TFCT7ORGY0tRiKkAylWZd/Qt6Lmc3Oycs66bMeE1JuYHbc0U6qsAZKZMFsUmL/UJDT/w7Z0cytw==", "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.1" + "@ethereumjs/util": "^8.0.0", + "crc-32": "^1.2.0" + } + }, + "node_modules/@ethereumjs/ethash": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-2.0.1.tgz", + "integrity": "sha512-3+Z7ot2j3MKD9+bzoqfAVoN+T89d+g7KKX2hwQ8s2wNvuZoki1uhg/hRy5XmHbOtFhQ0pjUqC1kk3U+CsN4+rQ==", + "dependencies": { + "@ethereumjs/block": "^4.0.1", + "@ethereumjs/rlp": "^4.0.0", + "@ethereumjs/util": "^8.0.0", + "abstract-level": "^1.0.3", + "bigint-crypto-utils": "^3.0.23", + "ethereum-cryptography": "^1.1.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/ethash/node_modules/ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dependencies": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + }, + "node_modules/@ethereumjs/evm": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/evm/-/evm-1.2.2.tgz", + "integrity": "sha512-veqCg9Od9dGvZVdREZvMGm+N4tyNQQd8ny639M9yFxMy7jF36hE6PSicgGZlya/fRpQKCVnosrk5PoM043ZgNQ==", + "dependencies": { + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/util": "^8.0.2", + "@ethersproject/providers": "^5.7.1", + "debug": "^4.3.3", + "ethereum-cryptography": "^1.1.2", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/evm/node_modules/ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dependencies": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.0.tgz", + "integrity": "sha512-LM4jS5n33bJN60fM5EC8VeyhUgga6/DjCPBV2vWjnfVtobqtOiNC4SQ1MRFqyBSmJGGdB533JZWewyvlcdJtkQ==", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/statemanager": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/statemanager/-/statemanager-1.0.1.tgz", + "integrity": "sha512-Ao9NPuoh7ijH+mexgCZdANSKF80Fd6DuzTgXUwag+uGhUclErjjJ7m2b4YCaUVwLkhgHPOTa8r2E4sPC/DltkQ==", + "dependencies": { + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/rlp": "^4.0.0", + "debug": "^4.3.3", + "ethereum-cryptography": "^1.1.2", + "ethers": "^5.7.1", + "js-sdsl": "^4.1.4" + } + }, + "node_modules/@ethereumjs/statemanager/node_modules/ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dependencies": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + }, + "node_modules/@ethereumjs/trie": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/trie/-/trie-5.0.1.tgz", + "integrity": "sha512-MA8uXR2pa+r8+wBvlyeZoUewwbUZe4Iy4zKi38THP6/flYvIIY+bTVjf/EA3jMhH68j6nJH5SFu5wi5SBdS/2A==", + "dependencies": { + "@ethereumjs/rlp": "^4.0.0", + "@ethereumjs/util": "^8.0.0", + "@types/readable-stream": "^2.3.13", + "ethereum-cryptography": "^1.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/trie/node_modules/ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dependencies": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" } }, "node_modules/@ethereumjs/tx": { - "version": "3.3.2", - "license": "MPL-2.0", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.0.1.tgz", + "integrity": "sha512-JFq66cjjwnWOdKuDNNq0Hr1j04A546ymUo/8xnPa7wAm3s+RyGVt8VbaNF71/GJqN4tuY62gxvTfZ+B62foyPw==", "dependencies": { - "@ethereumjs/common": "^2.5.0", - "ethereumjs-util": "^7.1.2" + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/rlp": "^4.0.0", + "@ethereumjs/util": "^8.0.0", + "ethereum-cryptography": "^1.1.2", + "ethers": "^5.7.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/tx/node_modules/ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dependencies": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.0.2.tgz", + "integrity": "sha512-b1Fcxmq+ckCdoLPhVIBkTcH8szigMapPuEmD8EDakvtI5Na5rzmX1sBW73YQqaPc7iUxGCAzZP1LrFQ7aEMugA==", + "dependencies": { + "@ethereumjs/rlp": "^4.0.0-beta.2", + "async": "^3.2.4", + "ethereum-cryptography": "^1.1.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dependencies": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + }, + "node_modules/@ethereumjs/vm": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-6.2.0.tgz", + "integrity": "sha512-YtgR4tHDqVhJE2tzQK58ckSZ2+/AOMSKiuFiQgdlJYQfaCtzJbFIdGdiiItsauPxm1HQr3Yv5kDdJOx+8YbzOA==", + "dependencies": { + "@ethereumjs/block": "^4.0.1", + "@ethereumjs/blockchain": "^6.0.1", + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/evm": "^1.2.0", + "@ethereumjs/rlp": "^4.0.0", + "@ethereumjs/statemanager": "^1.0.1", + "@ethereumjs/trie": "^5.0.1", + "@ethereumjs/tx": "^4.0.1", + "@ethereumjs/util": "^8.0.2", + "debug": "^4.3.3", + "ethereum-cryptography": "^1.1.2", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/vm/node_modules/ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dependencies": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" } }, "node_modules/@ethersproject/abi": { @@ -10731,6 +11006,25 @@ "@ethersproject/bytes": "^5.7.0" } }, + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, "node_modules/@ethersproject/bignumber": { "version": "5.7.0", "funding": [ @@ -10788,6 +11082,33 @@ "@ethersproject/bignumber": "^5.7.0" } }, + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, "node_modules/@ethersproject/hash": { "version": "5.7.0", "funding": [ @@ -10813,6 +11134,65 @@ "@ethersproject/strings": "^5.7.0" } }, + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, "node_modules/@ethersproject/keccak256": { "version": "5.7.0", "funding": [ @@ -10862,6 +11242,25 @@ "@ethersproject/logger": "^5.7.0" } }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, "node_modules/@ethersproject/properties": { "version": "5.7.0", "funding": [ @@ -10879,6 +11278,82 @@ "@ethersproject/logger": "^5.7.0" } }, + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, "node_modules/@ethersproject/rlp": { "version": "5.7.0", "funding": [ @@ -10897,6 +11372,26 @@ "@ethersproject/logger": "^5.7.0" } }, + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, "node_modules/@ethersproject/signing-key": { "version": "5.7.0", "funding": [ @@ -10923,6 +11418,29 @@ "version": "5.2.1", "license": "MIT" }, + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, "node_modules/@ethersproject/strings": { "version": "5.7.0", "funding": [ @@ -10967,6 +11485,58 @@ "@ethersproject/signing-key": "^5.7.0" } }, + "node_modules/@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, "node_modules/@ethersproject/web": { "version": "5.7.1", "funding": [ @@ -10988,6 +11558,28 @@ "@ethersproject/strings": "^5.7.0" } }, + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, "node_modules/@ipld/dag-cbor": { "version": "7.0.3", "license": "(Apache-2.0 AND MIT)", @@ -11011,6 +11603,28 @@ "multiformats": "^9.5.4" } }, + "node_modules/@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@noble/secp256k1": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "license": "BSD-3-Clause" @@ -11055,6 +11669,48 @@ "version": "1.1.0", "license": "BSD-3-Clause" }, + "node_modules/@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@scure/bip32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", + "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.1.1", + "@noble/secp256k1": "~1.6.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" + } + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "license": "MIT", @@ -11144,6 +11800,20 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/@types/responselike": { "version": "1.0.0", "license": "MIT", @@ -11167,6 +11837,23 @@ "version": "1.7.5", "license": "MIT" }, + "node_modules/abstract-level": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", + "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "dependencies": { + "buffer": "^6.0.3", + "catering": "^2.1.0", + "is-buffer": "^2.0.5", + "level-supports": "^4.0.0", + "level-transcoder": "^1.0.1", + "module-error": "^1.0.1", + "queue-microtask": "^1.2.3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/accepts": { "version": "1.3.8", "license": "MIT", @@ -11178,6 +11865,11 @@ "node": ">= 0.6" } }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, "node_modules/ajv": { "version": "6.12.6", "license": "MIT", @@ -11246,6 +11938,11 @@ "node": ">=0.8" } }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, "node_modules/async-limiter": { "version": "1.0.1", "license": "MIT" @@ -11311,6 +12008,30 @@ "tweetnacl": "^0.14.3" } }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "node_modules/bigint-crypto-utils": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", + "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", + "dependencies": { + "bigint-mod-arith": "^3.1.0" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/bigint-mod-arith": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", + "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", + "engines": { + "node": ">=10.4.0" + } + }, "node_modules/bignumber.js": { "version": "9.1.0", "license": "MIT", @@ -11392,6 +12113,17 @@ "version": "1.1.0", "license": "MIT" }, + "node_modules/browser-level": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", + "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", + "dependencies": { + "abstract-level": "^1.0.2", + "catering": "^2.1.1", + "module-error": "^1.0.2", + "run-parallel-limit": "^1.1.0" + } + }, "node_modules/browser-readablestream-to-it": { "version": "1.0.3", "license": "ISC" @@ -11601,6 +12333,14 @@ "version": "0.12.0", "license": "Apache-2.0" }, + "node_modules/catering": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", + "engines": { + "node": ">=6" + } + }, "node_modules/cborg": { "version": "1.9.6", "license": "Apache-2.0", @@ -11673,6 +12413,22 @@ "version": "1.1.0", "license": "MIT" }, + "node_modules/classic-level": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", + "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", + "hasInstallScript": true, + "dependencies": { + "abstract-level": "^1.0.2", + "catering": "^2.1.0", + "module-error": "^1.0.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/clone-response": { "version": "1.0.3", "license": "MIT", @@ -12267,6 +13023,53 @@ "version": "5.2.1", "license": "MIT" }, + "node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "node_modules/ethjs-unit": { "version": "0.1.6", "license": "MIT", @@ -12522,6 +13325,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, "node_modules/functions-have-names": { "version": "1.2.3", "license": "MIT", @@ -13038,6 +13846,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, "node_modules/is-callable": { "version": "1.2.7", "license": "MIT", @@ -13298,6 +14128,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-sha3": { "version": "0.8.0", "license": "MIT" @@ -13369,6 +14208,42 @@ "graceful-fs": "^4.1.9" } }, + "node_modules/level": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", + "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", + "dependencies": { + "browser-level": "^1.0.1", + "classic-level": "^1.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/level" + } + }, + "node_modules/level-supports": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/level-transcoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "dependencies": { + "buffer": "^6.0.3", + "module-error": "^1.0.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/long": { "version": "4.0.0", "license": "Apache-2.0" @@ -13384,13 +14259,12 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", + "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/make-error": { @@ -13398,6 +14272,14 @@ "dev": true, "license": "ISC" }, + "node_modules/mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/md5.js": { "version": "1.3.5", "license": "MIT", @@ -13414,6 +14296,19 @@ "node": ">= 0.6" } }, + "node_modules/memory-level": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", + "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", + "dependencies": { + "abstract-level": "^1.0.0", + "functional-red-black-tree": "^1.0.1", + "module-error": "^1.0.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/memorystream": { "version": "0.3.1", "engines": { @@ -13560,6 +14455,14 @@ "version": "4.14.0", "license": "MIT" }, + "node_modules/module-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", + "engines": { + "node": ">=10" + } + }, "node_modules/moment": { "version": "2.29.4", "license": "MIT", @@ -13737,6 +14640,11 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" + }, "node_modules/native-fetch": { "version": "3.0.0", "license": "MIT", @@ -14089,6 +14997,25 @@ "node": ">=0.10.0" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-lru": { "version": "5.1.1", "license": "MIT", @@ -14301,6 +15228,33 @@ "version": "5.2.1", "license": "MIT" }, + "node_modules/run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" + }, "node_modules/safe-buffer": { "version": "5.2.1", "funding": [ @@ -14370,6 +15324,17 @@ "node": ">=10" } }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/send": { "version": "0.18.0", "license": "MIT", @@ -15174,6 +16139,24 @@ "node": ">=8.0.0" } }, + "node_modules/web3-eth-accounts/node_modules/@ethereumjs/common": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", + "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.1" + } + }, + "node_modules/web3-eth-accounts/node_modules/@ethereumjs/tx": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", + "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", + "dependencies": { + "@ethereumjs/common": "^2.5.0", + "ethereumjs-util": "^7.1.2" + } + }, "node_modules/web3-eth-accounts/node_modules/eth-lib": { "version": "0.2.8", "license": "MIT", @@ -15473,7 +16456,8 @@ }, "node_modules/yallist": { "version": "4.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yn": { "version": "3.1.1", @@ -22223,18 +23207,275 @@ } } }, - "@ethereumjs/common": { - "version": "2.5.0", + "@ethereumjs/block": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-4.0.1.tgz", + "integrity": "sha512-cYkJaogUL5V3iZOSm7WgSP8Fvm9R/jN/dotRQZpj5SJ3fP6GF00xtmYpQGE10SnK/Lo+iyXwZ2K7M1zn/0wnXw==", + "requires": { + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/rlp": "^4.0.0", + "@ethereumjs/trie": "^5.0.1", + "@ethereumjs/tx": "^4.0.1", + "@ethereumjs/util": "^8.0.0", + "ethereum-cryptography": "^1.1.2", + "ethers": "^5.7.1" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "requires": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + } + } + }, + "@ethereumjs/blockchain": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-6.0.2.tgz", + "integrity": "sha512-32zKVQ8iOb7oOwKqGsLvdAzGaTQP6FepW6ssTycJOZ2r0NAHcN8+dsk77mv48yZkuQ4kt0D/73bj8lApiO5Uew==", + "requires": { + "@ethereumjs/block": "^4.0.1", + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/ethash": "^2.0.1", + "@ethereumjs/rlp": "^4.0.0", + "@ethereumjs/trie": "^5.0.1", + "@ethereumjs/util": "^8.0.2", + "abstract-level": "^1.0.3", + "debug": "^4.3.3", + "ethereum-cryptography": "^1.1.2", + "level": "^8.0.0", + "lru-cache": "^5.1.1", + "memory-level": "^1.0.0" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "requires": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "@ethereumjs/common": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.0.1.tgz", + "integrity": "sha512-AHsJB7ydfb7TFCT7ORGY0tRiKkAylWZd/Qt6Lmc3Oycs66bMeE1JuYHbc0U6qsAZKZMFsUmL/UJDT/w7Z0cytw==", + "requires": { + "@ethereumjs/util": "^8.0.0", + "crc-32": "^1.2.0" + } + }, + "@ethereumjs/ethash": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-2.0.1.tgz", + "integrity": "sha512-3+Z7ot2j3MKD9+bzoqfAVoN+T89d+g7KKX2hwQ8s2wNvuZoki1uhg/hRy5XmHbOtFhQ0pjUqC1kk3U+CsN4+rQ==", + "requires": { + "@ethereumjs/block": "^4.0.1", + "@ethereumjs/rlp": "^4.0.0", + "@ethereumjs/util": "^8.0.0", + "abstract-level": "^1.0.3", + "bigint-crypto-utils": "^3.0.23", + "ethereum-cryptography": "^1.1.2" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "requires": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + } + } + }, + "@ethereumjs/evm": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/evm/-/evm-1.2.2.tgz", + "integrity": "sha512-veqCg9Od9dGvZVdREZvMGm+N4tyNQQd8ny639M9yFxMy7jF36hE6PSicgGZlya/fRpQKCVnosrk5PoM043ZgNQ==", + "requires": { + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/util": "^8.0.2", + "@ethersproject/providers": "^5.7.1", + "debug": "^4.3.3", + "ethereum-cryptography": "^1.1.2", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "requires": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + } + } + }, + "@ethereumjs/rlp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.0.tgz", + "integrity": "sha512-LM4jS5n33bJN60fM5EC8VeyhUgga6/DjCPBV2vWjnfVtobqtOiNC4SQ1MRFqyBSmJGGdB533JZWewyvlcdJtkQ==" + }, + "@ethereumjs/statemanager": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/statemanager/-/statemanager-1.0.1.tgz", + "integrity": "sha512-Ao9NPuoh7ijH+mexgCZdANSKF80Fd6DuzTgXUwag+uGhUclErjjJ7m2b4YCaUVwLkhgHPOTa8r2E4sPC/DltkQ==", + "requires": { + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/rlp": "^4.0.0", + "debug": "^4.3.3", + "ethereum-cryptography": "^1.1.2", + "ethers": "^5.7.1", + "js-sdsl": "^4.1.4" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "requires": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + } + } + }, + "@ethereumjs/trie": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/trie/-/trie-5.0.1.tgz", + "integrity": "sha512-MA8uXR2pa+r8+wBvlyeZoUewwbUZe4Iy4zKi38THP6/flYvIIY+bTVjf/EA3jMhH68j6nJH5SFu5wi5SBdS/2A==", + "requires": { + "@ethereumjs/rlp": "^4.0.0", + "@ethereumjs/util": "^8.0.0", + "@types/readable-stream": "^2.3.13", + "ethereum-cryptography": "^1.1.2", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "requires": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + } + } + }, + "@ethereumjs/tx": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.0.1.tgz", + "integrity": "sha512-JFq66cjjwnWOdKuDNNq0Hr1j04A546ymUo/8xnPa7wAm3s+RyGVt8VbaNF71/GJqN4tuY62gxvTfZ+B62foyPw==", + "requires": { + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/rlp": "^4.0.0", + "@ethereumjs/util": "^8.0.0", + "ethereum-cryptography": "^1.1.2", + "ethers": "^5.7.1" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "requires": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + } + } + }, + "@ethereumjs/util": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.0.2.tgz", + "integrity": "sha512-b1Fcxmq+ckCdoLPhVIBkTcH8szigMapPuEmD8EDakvtI5Na5rzmX1sBW73YQqaPc7iUxGCAzZP1LrFQ7aEMugA==", "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.1" + "@ethereumjs/rlp": "^4.0.0-beta.2", + "async": "^3.2.4", + "ethereum-cryptography": "^1.1.2" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "requires": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + } } }, - "@ethereumjs/tx": { - "version": "3.3.2", - "requires": { - "@ethereumjs/common": "^2.5.0", - "ethereumjs-util": "^7.1.2" + "@ethereumjs/vm": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-6.2.0.tgz", + "integrity": "sha512-YtgR4tHDqVhJE2tzQK58ckSZ2+/AOMSKiuFiQgdlJYQfaCtzJbFIdGdiiItsauPxm1HQr3Yv5kDdJOx+8YbzOA==", + "requires": { + "@ethereumjs/block": "^4.0.1", + "@ethereumjs/blockchain": "^6.0.1", + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/evm": "^1.2.0", + "@ethereumjs/rlp": "^4.0.0", + "@ethereumjs/statemanager": "^1.0.1", + "@ethereumjs/trie": "^5.0.1", + "@ethereumjs/tx": "^4.0.1", + "@ethereumjs/util": "^8.0.2", + "debug": "^4.3.3", + "ethereum-cryptography": "^1.1.2", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "requires": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + } } }, "@ethersproject/abi": { @@ -22289,6 +23530,15 @@ "@ethersproject/bytes": "^5.7.0" } }, + "@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, "@ethersproject/bignumber": { "version": "5.7.0", "requires": { @@ -22314,6 +23564,23 @@ "@ethersproject/bignumber": "^5.7.0" } }, + "@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, "@ethersproject/hash": { "version": "5.7.0", "requires": { @@ -22328,6 +23595,45 @@ "@ethersproject/strings": "^5.7.0" } }, + "@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, "@ethersproject/keccak256": { "version": "5.7.0", "requires": { @@ -22344,12 +23650,65 @@ "@ethersproject/logger": "^5.7.0" } }, + "@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, "@ethersproject/properties": { "version": "5.7.0", "requires": { "@ethersproject/logger": "^5.7.0" } }, + "@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + }, + "dependencies": { + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} + } + } + }, + "@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, "@ethersproject/rlp": { "version": "5.7.0", "requires": { @@ -22357,6 +23716,16 @@ "@ethersproject/logger": "^5.7.0" } }, + "@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, "@ethersproject/signing-key": { "version": "5.7.0", "requires": { @@ -22373,6 +23742,19 @@ } } }, + "@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, "@ethersproject/strings": { "version": "5.7.0", "requires": { @@ -22395,6 +23777,38 @@ "@ethersproject/signing-key": "^5.7.0" } }, + "@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, "@ethersproject/web": { "version": "5.7.1", "requires": { @@ -22405,6 +23819,18 @@ "@ethersproject/strings": "^5.7.0" } }, + "@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, "@ipld/dag-cbor": { "version": "7.0.3", "requires": { @@ -22425,6 +23851,16 @@ "multiformats": "^9.5.4" } }, + "@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" + }, + "@noble/secp256k1": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==" + }, "@protobufjs/aspromise": { "version": "1.1.2" }, @@ -22459,6 +23895,30 @@ "@protobufjs/utf8": { "version": "1.1.0" }, + "@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" + }, + "@scure/bip32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", + "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", + "requires": { + "@noble/hashes": "~1.1.1", + "@noble/secp256k1": "~1.6.0", + "@scure/base": "~1.1.0" + } + }, + "@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", + "requires": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" + } + }, "@sindresorhus/is": { "version": "4.6.0" }, @@ -22526,6 +23986,22 @@ "version": "2.0.0", "dev": true }, + "@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "requires": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, "@types/responselike": { "version": "1.0.0", "requires": { @@ -22545,6 +24021,20 @@ "abortcontroller-polyfill": { "version": "1.7.5" }, + "abstract-level": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", + "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "requires": { + "buffer": "^6.0.3", + "catering": "^2.1.0", + "is-buffer": "^2.0.5", + "level-supports": "^4.0.0", + "level-transcoder": "^1.0.1", + "module-error": "^1.0.1", + "queue-microtask": "^1.2.3" + } + }, "accepts": { "version": "1.3.8", "requires": { @@ -22552,6 +24042,11 @@ "negotiator": "0.6.3" } }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, "ajv": { "version": "6.12.6", "requires": { @@ -22599,6 +24094,11 @@ "assert-plus": { "version": "1.0.0" }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, "async-limiter": { "version": "1.0.1" }, @@ -22632,6 +24132,24 @@ "tweetnacl": "^0.14.3" } }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "bigint-crypto-utils": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", + "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", + "requires": { + "bigint-mod-arith": "^3.1.0" + } + }, + "bigint-mod-arith": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", + "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==" + }, "bignumber.js": { "version": "9.1.0" }, @@ -22694,6 +24212,17 @@ "brorand": { "version": "1.1.0" }, + "browser-level": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", + "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", + "requires": { + "abstract-level": "^1.0.2", + "catering": "^2.1.1", + "module-error": "^1.0.2", + "run-parallel-limit": "^1.1.0" + } + }, "browser-readablestream-to-it": { "version": "1.0.3" }, @@ -22841,6 +24370,11 @@ "caseless": { "version": "0.12.0" }, + "catering": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==" + }, "cborg": { "version": "1.9.6" }, @@ -22886,6 +24420,18 @@ "class-is": { "version": "1.1.0" }, + "classic-level": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", + "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", + "requires": { + "abstract-level": "^1.0.2", + "catering": "^2.1.0", + "module-error": "^1.0.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "^4.3.0" + } + }, "clone-response": { "version": "1.0.3", "requires": { @@ -23309,6 +24855,43 @@ } } }, + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "ethjs-unit": { "version": "0.1.6", "requires": { @@ -23496,6 +25079,11 @@ "functions-have-names": "^1.2.2" } }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, "functions-have-names": { "version": "1.2.3" }, @@ -23830,6 +25418,11 @@ "has-tostringtag": "^1.0.0" } }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, "is-callable": { "version": "1.2.7" }, @@ -23974,6 +25567,11 @@ "iterate-iterator": "^1.0.1" } }, + "js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==" + }, "js-sha3": { "version": "0.8.0" }, @@ -24027,6 +25625,29 @@ "graceful-fs": "^4.1.9" } }, + "level": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", + "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", + "requires": { + "browser-level": "^1.0.1", + "classic-level": "^1.2.0" + } + }, + "level-supports": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==" + }, + "level-transcoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "requires": { + "buffer": "^6.0.3", + "module-error": "^1.0.1" + } + }, "long": { "version": "4.0.0" }, @@ -24034,15 +25655,20 @@ "version": "3.0.0" }, "lru-cache": { - "version": "6.0.0", - "requires": { - "yallist": "^4.0.0" - } + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", + "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", + "dev": true }, "make-error": { "version": "1.3.6", "dev": true }, + "mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==" + }, "md5.js": { "version": "1.3.5", "requires": { @@ -24054,6 +25680,16 @@ "media-typer": { "version": "0.3.0" }, + "memory-level": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", + "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", + "requires": { + "abstract-level": "^1.0.0", + "functional-red-black-tree": "^1.0.1", + "module-error": "^1.0.1" + } + }, "memorystream": { "version": "0.3.1" }, @@ -24145,6 +25781,11 @@ "mock-fs": { "version": "4.14.0" }, + "module-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==" + }, "moment": { "version": "2.29.4", "optional": true @@ -24265,6 +25906,11 @@ "nanoid": { "version": "3.3.4" }, + "napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" + }, "native-fetch": { "version": "3.0.0", "requires": {} @@ -24477,6 +26123,11 @@ "strict-uri-encode": "^1.0.0" } }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, "quick-lru": { "version": "5.1.1" }, @@ -24624,6 +26275,19 @@ } } }, + "run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" + }, "safe-buffer": { "version": "5.2.1" }, @@ -24657,6 +26321,16 @@ "version": "7.3.8", "requires": { "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + } } }, "send": { @@ -25197,6 +26871,24 @@ "web3-utils": "1.8.1" }, "dependencies": { + "@ethereumjs/common": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", + "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.1" + } + }, + "@ethereumjs/tx": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", + "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", + "requires": { + "@ethereumjs/common": "^2.5.0", + "ethereumjs-util": "^7.1.2" + } + }, "eth-lib": { "version": "0.2.8", "requires": { @@ -25425,7 +27117,9 @@ "version": "0.0.6" }, "yallist": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yn": { "version": "3.1.1", diff --git a/services/verification/package.json b/services/verification/package.json index 117a9fa13..bb3bf8f19 100644 --- a/services/verification/package.json +++ b/services/verification/package.json @@ -25,6 +25,7 @@ "@types/node-fetch": "^2.5.7", "@types/promise.any": "^2.0.0", "@types/semver": "^7.3.9", + "lru-cache": "^7.14.1", "rimraf": "^3.0.2", "ts-node": "^9.0.0", "typescript": "^4.9.3" @@ -32,6 +33,13 @@ "dependencies": { "@ethereum-sourcify/bytecode-utils": "*", "@ethereum-sourcify/core": "*", + "@ethereumjs/blockchain": "^6.0.2", + "@ethereumjs/common": "^3.0.1", + "@ethereumjs/evm": "^1.2.2", + "@ethereumjs/statemanager": "^1.0.1", + "@ethereumjs/tx": "^4.0.1", + "@ethereumjs/util": "^8.0.2", + "@ethereumjs/vm": "^6.2.0", "bunyan": "^1.8.15", "ipfs-http-client": "^56.0.3", "node-fetch": "^2.6.1", diff --git a/services/verification/src/services/Injector.ts b/services/verification/src/services/Injector.ts index 1fbe35001..3a79b6882 100644 --- a/services/verification/src/services/Injector.ts +++ b/services/verification/src/services/Injector.ts @@ -41,6 +41,14 @@ import { globSource, } from "ipfs-http-client"; import path from "path"; +import { EVM } from "@ethereumjs/evm"; +import { EEI } from "@ethereumjs/vm"; +import { Address } from "@ethereumjs/util"; +import { Chain as EthereumChain, Common, Hardfork } from "@ethereumjs/common"; +import { Transaction } from "@ethereumjs/tx"; +import { DefaultStateManager } from "@ethereumjs/statemanager"; +import { Blockchain } from "@ethereumjs/blockchain"; +import { env } from "process"; export interface InjectorConfig { silent?: boolean; @@ -302,7 +310,7 @@ export class Injector { match.libraryMap = libraryMap; if (deployedBytecode === recompiled.deployedBytecode) { - // if the bytecode doesn't contain metadata then "partial" match + // if the bytecode doesn't contain metadata hash then "partial" match, can't be "perfect" if (this.getMetadataPathFromCborEncoded(deployedBytecode) === null) { match.status = "partial"; return match; @@ -317,12 +325,35 @@ export class Injector { ); if (trimmedDeployedBytecode === trimmedCompiledRuntimeBytecode) { match.status = "partial"; - return match; } + // If same length, highly likely these contracts are a match if ( trimmedDeployedBytecode.length === trimmedCompiledRuntimeBytecode.length ) { + // TODO: Exmaple + const encodedConstructorArgs = + "000000000000000000000000c1a5b551edb9617613fec59ad7aea5f6a268d702"; + // Execute the creation code with the constructor arguments to see if we'll obtain the same runtime bytecode. + const simulatedBytecode = + "0x" + + (await this.simulateCreationBytecode( + recompiled.creationBytecode, + encodedConstructorArgs + )); + if (simulatedBytecode === deployedBytecode) { + match.status = "perfect"; + match.encodedConstructorArgs = encodedConstructorArgs; + return match; + } + const [trimmedSimulatedBytecode] = splitAuxdata(simulatedBytecode); + const [trimmedDeployedBytecode] = splitAuxdata(deployedBytecode); + if (trimmedSimulatedBytecode === trimmedDeployedBytecode) { + match.status = "partial"; + match.encodedConstructorArgs = encodedConstructorArgs; + // don't return yet + } + creationData = creationData || (await this.getCreationData(chain, address)); @@ -391,6 +422,50 @@ export class Injector { }; } + // TODO: need to know the evm version + private async simulateCreationBytecode( + creationBytecode: string, + encodedConstructorArgs: string + ): Promise { + const stateManager = new DefaultStateManager(); + const blockchain = await Blockchain.create(); + const common = new Common({ + chain: EthereumChain.Mainnet, + hardfork: Hardfork.Merge, + }); + const eei = new EEI(stateManager, common, blockchain); + + const evm = new EVM({ + common, + eei, + }); + if (creationBytecode.startsWith("0x")) { + creationBytecode = creationBytecode.slice(2); + } + const initcode = Buffer.from( + creationBytecode + encodedConstructorArgs, + "hex" + ); + const result = await evm.runCall({ + data: initcode, + gasLimit: BigInt(0xffffffffff), + caller: new Address( + Buffer.from("c1a5b551edb9617613fec59ad7aea5f6a268d702", "hex") + ), + }); + return result.execResult.returnValue.toString("hex"); + // const vm = await VM.create({ common }); + // const tx = Transaction.fromTxData({ + // data: creationBytecode + encodedConstructorArgs, + // }); + // const deploymentResult = await evm.runCode({ + // tx, + // skipBalance: true, + // skipNonce: true, + // }); + // return deploymentResult.execResult.returnValue.toString("hex"); + } + /** * Returns the `creationData` from the transaction that created the contract at the provided chain and address. * @param chain From e5704e3ae820add5da7f07e83f49ef7cf3e4bd0a Mon Sep 17 00:00:00 2001 From: Kaan Uzdogan Date: Fri, 2 Dec 2022 10:33:33 +0100 Subject: [PATCH 21/87] UI for passing msg.sender, const. args. --- ui/src/components/TextArea/index.tsx | 37 ++++++ .../ChainAddressForm/index.tsx | 120 +++++++++++++++++- ui/src/types.ts | 2 + 3 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 ui/src/components/TextArea/index.tsx diff --git a/ui/src/components/TextArea/index.tsx b/ui/src/components/TextArea/index.tsx new file mode 100644 index 000000000..665b6eb8f --- /dev/null +++ b/ui/src/components/TextArea/index.tsx @@ -0,0 +1,37 @@ +import React, { ChangeEventHandler } from "react"; + +type TextAreaProps = { + onChange?: ChangeEventHandler; + value?: string | number; + className?: string; + type?: string; + placeholder?: string; + id?: string; + disabled?: boolean; +}; + +const TextArea: React.FC = ({ + type = "text", + onChange, + value, + placeholder, + className, + id, + disabled, +}) => { + return ( +