diff --git a/.github/workflows/on-pr-publish.yaml b/.github/workflows/on-pr-publish.yaml
index fcb7af07..83dbccf6 100644
--- a/.github/workflows/on-pr-publish.yaml
+++ b/.github/workflows/on-pr-publish.yaml
@@ -23,14 +23,6 @@ jobs:
uses: ./.github/workflows/tests.yaml
if: ${{ needs.pre_job.outputs.should_skip != 'true' }}
needs: pre_job
- secrets:
- BUILD_HOSTNAME: ${{ secrets.BUILD_HOSTNAME }}
- BUILD_USERNAME: ${{ secrets.BUILD_USERNAME }}
- BUILD_KEY: ${{ secrets.BUILD_KEY }}
- with:
- STACK_ORCHESTRATOR_REF: "f2fd766f5400fcb9eb47b50675d2e3b1f2753702"
- GO_ETHEREUM_REF: "2ddad81c1a04ff494a706f2f757a0f75d2616fbd"
- IPLD_ETH_DB_REF: "6c00c38cc4e1db6f7c4cecbb62fdfd540fba50d6"
build:
name: Run docker build
runs-on: ubuntu-latest
@@ -40,21 +32,20 @@ jobs:
(needs.run-tests.result == 'success' || needs.run-tests.result == 'skipped') &&
github.event_name == 'release'
steps:
- - uses: actions/checkout@v2
- - name: Get the version
- id: vars
+ - uses: actions/checkout@v3
+ - id: vars
+ name: Output SHA and version tag
run: |
- echo ::set-output name=sha::$(echo ${GITHUB_SHA:0:7})
- echo ::set-output name=tag::$(echo ${GITHUB_REF#refs/tags/})
- - name: Run docker build
- run: make docker-build
- - name: Tag docker image SHA
- run: docker tag cerc-io/ipld-eth-server git.vdb.to/cerc-io/ipld-eth-server/ipld-eth-server:${{steps.vars.outputs.sha}}
- - name: Tag docker image TAG
- run: docker tag git.vdb.to/cerc-io/ipld-eth-server/ipld-eth-server:${{steps.vars.outputs.sha}} git.vdb.to/cerc-io/ipld-eth-server/ipld-eth-server:${{steps.vars.outputs.tag}}
- - name: Docker Login
- run: echo ${{ secrets.GITEA_TOKEN }} | docker login https://git.vdb.to -u cerccicd --password-stdin
- - name: Docker Push SHA
- run: docker push git.vdb.to/cerc-io/ipld-eth-server/ipld-eth-server:${{steps.vars.outputs.sha}}
- - name: Docker Push TAG
- run: docker push git.vdb.to/cerc-io/ipld-eth-server/ipld-eth-server:${{steps.vars.outputs.tag}}
+ echo sha=$(echo ${GITHUB_SHA:0:7}) >> "$GITHUB_OUTPUT"
+ echo tag=$(echo ${GITHUB_REF#refs/tags/}) >> "$GITHUB_OUTPUT""
+ - name: Build and tag Docker image
+ run: |
+ docker build . \
+ -t cerc-io/ipld-eth-server \
+ -t git.vdb.to/cerc-io/ipld-eth-server/ipld-eth-server:${{steps.vars.outputs.sha}} \
+ -t git.vdb.to/cerc-io/ipld-eth-server/ipld-eth-server:${{steps.vars.outputs.tag}}
+ - name: Push Docker tags
+ run: |
+ echo ${{ secrets.GITEA_TOKEN }} | docker login https://git.vdb.to -u cerccicd --password-stdin
+ docker push git.vdb.to/cerc-io/ipld-eth-server/ipld-eth-server:${{steps.vars.outputs.sha}}
+ docker push git.vdb.to/cerc-io/ipld-eth-server/ipld-eth-server:${{steps.vars.outputs.tag}}
diff --git a/.github/workflows/run_unit_test.sh b/.github/workflows/run_unit_test.sh
deleted file mode 100755
index 7a311477..00000000
--- a/.github/workflows/run_unit_test.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-
-set -e
-set -o pipefail
-
-# Set up repo
-start_dir=$(pwd)
-temp_dir=$(mktemp -d)
-cd $temp_dir
-
-git clone -b $(cat /tmp/git_head_ref) "https://github.com/$(cat /tmp/git_repository).git"
-cd ipld-eth-server
-
-## Remove the branch and github related info. This way future runs wont be confused.
-rm -f /tmp/git_head_ref /tmp/git_repository
-
-# Spin up DB and run migrations
-echo 'docker-compose up -d migrations ipld-eth-db'
-docker-compose up -d migrations ipld-eth-db
-trap "docker-compose down -v --remove-orphans; cd $start_dir ; rm -r $temp_dir" SIGINT SIGTERM ERR
-sleep 60
-
-# Remove old logs so there's no confusion, then run test
-rm -f /tmp/test.log /tmp/return_test.txt
-PGPASSWORD=password DATABASE_USER=vdbm DATABASE_PORT=8077 DATABASE_PASSWORD=password DATABASE_HOSTNAME=localhost DATABASE_NAME=vulcanize_testing make test | tee /tmp/test.log
-echo $? > /tmp/return_test.txt
-
-# Clean up
-docker-compose down -v --remove-orphans
-cd $start_dir
-rm -fr $temp_dir
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index fcb0c353..91b96d6a 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -1,212 +1,91 @@
name: Test the stack.
on:
workflow_call:
- secrets:
- BUILD_HOSTNAME:
- required: true
- BUILD_USERNAME:
- required: true
- BUILD_KEY:
- required: true
- inputs:
- STACK_ORCHESTRATOR_REF:
- required: true
- type: string
- GO_ETHEREUM_REF:
- required: true
- type: string
- IPLD_ETH_DB_REF:
- required: true
- type: string
jobs:
- build:
- name: Run docker build
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: Run docker build
- run: make docker-build
test:
- name: Run unit tests
- env:
- GOPATH: /tmp/go
- # To run the unit tests you need to add secrets to your repository.
- BUILD_HOSTNAME: ${{ secrets.BUILD_HOSTNAME }}
- BUILD_USERNAME: ${{ secrets.BUILD_USERNAME }}
- BUILD_KEY: ${{ secrets.BUILD_KEY }}
- #strategy:
- # matrix:
- # go-version: [1.16.x, 1.17.x, 1.18.x]
+ name: "Run unit tests"
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
-
- # Passed experience with GHA has taught me to store variables in files instead of passing them as variables.
- - name: Output variables to files
- run: |
- echo $GITHUB_REPOSITORY > /tmp/git_repository
- [ -z "$GITHUB_HEAD_REF" ] && echo $GITHUB_REF_NAME > /tmp/git_head_ref || echo $GITHUB_HEAD_REF > /tmp/git_head_ref
- echo "-----BEGIN OPENSSH PRIVATE KEY-----" >> /tmp/key
- echo ${{ env.BUILD_KEY }} >> /tmp/key
- echo "-----END OPENSSH PRIVATE KEY-----" >> /tmp/key
- chmod 400 /tmp/key
- cat /tmp/git_repository
- cat /tmp/git_head_ref
-
- - name: Raw SCP
- run: |
- scp -o 'StrictHostKeyChecking no' -o UserKnownHostsFile=/dev/null -q -i /tmp/key /tmp/git_repository ${{ env.BUILD_USERNAME }}@${{ env.BUILD_HOSTNAME }}:/tmp/git_repository
- scp -o 'StrictHostKeyChecking no' -o UserKnownHostsFile=/dev/null -q -i /tmp/key /tmp/git_head_ref ${{ env.BUILD_USERNAME }}@${{ env.BUILD_HOSTNAME }}:/tmp/git_head_ref
- scp -o 'StrictHostKeyChecking no' -o UserKnownHostsFile=/dev/null -q -i /tmp/key .github/workflows/run_unit_test.sh ${{ env.BUILD_USERNAME }}@${{ env.BUILD_HOSTNAME }}:/tmp/run_unit_test.sh
-
- - name: Trigger Unit Test
- run: |
- ssh -o 'StrictHostKeyChecking no' -o UserKnownHostsFile=/dev/null -q -i /tmp/key ${{ env.BUILD_USERNAME }}@${{ env.BUILD_HOSTNAME }} go install github.com/onsi/ginkgo/ginkgo@latest
- ssh -o 'StrictHostKeyChecking no' -o UserKnownHostsFile=/dev/null -q -i /tmp/key ${{ env.BUILD_USERNAME }}@${{ env.BUILD_HOSTNAME }} /tmp/run_unit_test.sh
-
- - name: Get the logs and cat them
- run: |
- scp -o 'StrictHostKeyChecking no' -o UserKnownHostsFile=/dev/null -q -i /tmp/key ${{ env.BUILD_USERNAME }}@${{ env.BUILD_HOSTNAME }}:/tmp/test.log .
- cat ./test.log
-
- - name: Check Error Code
- run: |
- scp -o 'StrictHostKeyChecking no' -o UserKnownHostsFile=/dev/null -q -i /tmp/key ${{ env.BUILD_USERNAME }}@${{ env.BUILD_HOSTNAME }}:/tmp/return_test.txt .
- [ $(cat ./return_test.txt) -eq 0 ]
-
- integrationtest:
- name: Run integration tests
- env:
- GOPATH: /tmp/go
- DB_WRITE: true
- ETH_FORWARD_ETH_CALLS: false
- ETH_PROXY_ON_ERROR: false
- ETH_HTTP_PATH: "go-ethereum:8545"
- runs-on: ubuntu-latest
- steps:
- - name: Create GOPATH
- run: mkdir -p /tmp/go
- - uses: actions/setup-go@v3
+ - uses: actions/checkout@v3
+ - uses: actions/setup-go@v4
with:
- go-version: "1.18.x"
+ go-version-file: 'go.mod'
check-latest: true
- - uses: actions/checkout@v2
- with:
- path: "./ipld-eth-server"
- - uses: actions/checkout@v2
- with:
- ref: ${{ inputs.STACK_ORCHESTRATOR_REF }}
- path: "./stack-orchestrator/"
- repository: vulcanize/stack-orchestrator
- - uses: actions/checkout@v2
- with:
- ref: ${{ inputs.GO_ETHEREUM_REF }}
- repository: cerc-io/go-ethereum
- path: "./go-ethereum/"
- - uses: actions/checkout@v2
- with:
- ref: ${{ inputs.IPLD_ETH_DB_REF }}
- repository: cerc-io/ipld-eth-db
- path: "./ipld-eth-db/"
- - name: Create config file
+ - name: "Run DB container"
+ run: docker compose -f test/compose-db.yml up --wait --quiet-pull
+ - name: "Build and run tests"
run: |
- echo vulcanize_go_ethereum=$GITHUB_WORKSPACE/go-ethereum/ > ./config.sh
- echo vulcanize_ipld_eth_db=$GITHUB_WORKSPACE/ipld-eth-db/ >> ./config.sh
- echo vulcanize_ipld_eth_server=$GITHUB_WORKSPACE/ipld-eth-server/ >> ./config.sh
- echo vulcanize_test_contract=$GITHUB_WORKSPACE/ipld-eth-server/test/contract >> ./config.sh
- echo genesis_file_path=start-up-files/go-ethereum/genesis.json >> ./config.sh
- echo db_write=$DB_WRITE >> ./config.sh
- echo eth_forward_eth_calls=$ETH_FORWARD_ETH_CALLS >> ./config.sh
- echo eth_proxy_on_error=$ETH_PROXY_ON_ERROR >> ./config.sh
- echo eth_http_path=$ETH_HTTP_PATH >> ./config.sh
- cat ./config.sh
- - name: Build geth
- run: |
- cd $GITHUB_WORKSPACE/stack-orchestrator/helper-scripts
- ./compile-geth.sh \
- -p "$GITHUB_WORKSPACE/config.sh" \
- -e docker
- - name: Run docker compose
- run: |
- docker-compose \
- -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-db-sharding.yml" \
- -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-go-ethereum.yml" \
- -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-ipld-eth-server.yml" \
- -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-contract.yml" \
- --env-file "$GITHUB_WORKSPACE/config.sh" \
- up -d --build
- - name: Test
- run: |
- cd $GITHUB_WORKSPACE/ipld-eth-server
- while [ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8081)" != "200" ]; do echo "waiting for ipld-eth-server..." && sleep 5; done && \
- while [ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8545)" != "200" ]; do echo "waiting for geth-statediff..." && sleep 5; done && \
- make integrationtest
+ go install github.com/onsi/ginkgo/v2/ginkgo
+ ginkgo -v -r --skipPackage=./integration
- integrationtest_forwardethcalls:
- name: Run integration tests for direct proxy fall-through of eth_calls
- env:
- GOPATH: /tmp/go
- DB_WRITE: false
- ETH_FORWARD_ETH_CALLS: true
- ETH_PROXY_ON_ERROR: false
- ETH_HTTP_PATH: "go-ethereum:8545"
+ integration-test:
+ name: "Run integration tests"
runs-on: ubuntu-latest
steps:
- - name: Create GOPATH
- run: mkdir -p /tmp/go
- - uses: actions/setup-go@v3
+ - uses: actions/checkout@v3
+ - uses: actions/setup-go@v4
with:
- go-version: "1.18.x"
+ go-version-file: 'go.mod'
check-latest: true
- - uses: actions/checkout@v2
+ - name: "Install stack-orchestrator"
+ # FIXME: using my dev branch for v5 migration changes until a release has them
+ # run: |
+ # curl -L -O https://github.com/cerc-io/stack-orchestrator/releases/latest/download/laconic-so
+ uses: actions/checkout@v3
with:
- path: "./ipld-eth-server"
- - uses: actions/checkout@v2
+ repository: cerc-io/stack-orchestrator
+ ref: roy/ipld-eth-ci
+ path: ./stack-orchestrator
+ - run: pip install ./stack-orchestrator
+ - name: "Run testnet stack"
+ run: ./scripts/integration-setup.sh
+ - name: "Build and run server"
+ env:
+ ETH_FORWARD_ETH_CALLS: false
+ ETH_CHAIN_ID: ${{ env.ETH_CHAIN_ID }}
+ ETH_CHAIN_CONFIG: ${{ env.ETH_CHAIN_CONFIG }}
+ DEPLOYER_PRIVATE_KEY: ${{ env.DEPLOYER_PRIVATE_KEY }}
+ run: docker compose -f test/compose-server.yml up --wait --quiet-pull
+ - name: "Run tests"
+ env:
+ ETH_CHAIN_ID: ${{ env.ETH_CHAIN_ID }}
+ ETH_HTTP_PATH: ${{ env.ETH_HTTP_PATH }}
+ run: |
+ go install github.com/onsi/ginkgo/v2/ginkgo
+ ginkgo -v --label-filter '!proxy' -r ./integration
+
+ integration-test-eth-proxy:
+ name: "Run direct-proxy integration tests"
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-go@v4
with:
- ref: ${{ inputs.STACK_ORCHESTRATOR_REF }}
- path: "./stack-orchestrator/"
- repository: vulcanize/stack-orchestrator
- - uses: actions/checkout@v2
+ go-version-file: 'go.mod'
+ check-latest: true
+ - name: "Install stack-orchestrator"
+ uses: actions/checkout@v3
with:
- ref: ${{ inputs.GO_ETHEREUM_REF }}
- repository: cerc-io/go-ethereum
- path: "./go-ethereum/"
- - uses: actions/checkout@v2
- with:
- ref: ${{ inputs.IPLD_ETH_DB_REF }}
- repository: cerc-io/ipld-eth-db
- path: "./ipld-eth-db/"
- - name: Create config file
+ repository: cerc-io/stack-orchestrator
+ ref: roy/ipld-eth-ci
+ path: ./stack-orchestrator
+ - run: pip install ./stack-orchestrator
+ - name: "Run testnet stack"
+ env:
+ CERC_RUN_STATEDIFF: false
+ run: ./scripts/integration-setup.sh
+ - name: "Build and run server"
+ env:
+ ETH_FORWARD_ETH_CALLS: true
+ ETH_CHAIN_ID: ${{ env.ETH_CHAIN_ID }}
+ ETH_CHAIN_CONFIG: ${{ env.ETH_CHAIN_CONFIG }}
+ DEPLOYER_PRIVATE_KEY: ${{ env.DEPLOYER_PRIVATE_KEY }}
+ run: docker compose -f test/compose-server.yml up --wait --quiet-pull
+ - name: "Run tests"
+ env:
+ ETH_CHAIN_ID: ${{ env.ETH_CHAIN_ID }}
+ ETH_HTTP_PATH: ${{ env.ETH_HTTP_PATH }}
run: |
- echo vulcanize_go_ethereum=$GITHUB_WORKSPACE/go-ethereum/ > ./config.sh
- echo vulcanize_ipld_eth_db=$GITHUB_WORKSPACE/ipld-eth-db/ >> ./config.sh
- echo vulcanize_ipld_eth_server=$GITHUB_WORKSPACE/ipld-eth-server/ >> ./config.sh
- echo vulcanize_test_contract=$GITHUB_WORKSPACE/ipld-eth-server/test/contract >>./config.sh
- echo genesis_file_path=start-up-files/go-ethereum/genesis.json >> ./config.sh
- echo db_write=$DB_WRITE >> ./config.sh
- echo eth_forward_eth_calls=$ETH_FORWARD_ETH_CALLS >> ./config.sh
- echo eth_proxy_on_error=$ETH_PROXY_ON_ERROR >> ./config.sh
- echo eth_http_path=$ETH_HTTP_PATH >> ./config.sh
- cat ./config.sh
- - name: Build geth
- run: |
- cd $GITHUB_WORKSPACE/stack-orchestrator/helper-scripts
- ./compile-geth.sh \
- -p "$GITHUB_WORKSPACE/config.sh" \
- -e docker
- - name: Run docker compose
- run: |
- docker-compose \
- -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-db-sharding.yml" \
- -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-go-ethereum.yml" \
- -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-ipld-eth-server.yml" \
- -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-contract.yml" \
- --env-file "$GITHUB_WORKSPACE/config.sh" \
- up -d --build
- - name: Test
- run: |
- cd $GITHUB_WORKSPACE/ipld-eth-server
- while [ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8081)" != "200" ]; do echo "waiting for ipld-eth-server..." && sleep 5; done && \
- while [ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8545)" != "200" ]; do echo "waiting for geth-statediff..." && sleep 5; done && \
- make integrationtest
+ go install github.com/onsi/ginkgo/v2/ginkgo
+ ginkgo -v --label-filter 'proxy' -r ./integration
diff --git a/Dockerfile b/Dockerfile
index 78502d6d..5186ca3d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,6 @@
-FROM golang:1.18-alpine as builder
+FROM golang:1.19-alpine as builder
-RUN apk --update --no-cache add make git g++ linux-headers
+RUN apk --update --no-cache add gcc musl-dev
# DEBUG
RUN apk add busybox-extras
@@ -19,12 +19,12 @@ RUN go mod download
COPY . .
# Build the binary
-RUN GCO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o ipld-eth-server .
+RUN GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o ipld-eth-server .
-# Copy migration tool
+# Get migration tool
WORKDIR /
-ARG GOOSE_VER="v2.6.0"
-ADD https://github.com/pressly/goose/releases/download/${GOOSE_VER}/goose-linux64 ./goose
+ARG GOOSE_VER="v3.6.1"
+ADD https://github.com/pressly/goose/releases/download/${GOOSE_VER}/goose_linux_x86_64 ./goose
RUN chmod +x ./goose
# app container
diff --git a/README.md b/README.md
index 3a8355ae..1f108f91 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ Additional, unique endpoints are exposed which utilize the new indexes and state
## Dependencies
Minimal build dependencies
-* Go (1.18)
+* Go (1.19)
* Git
* GCC compiler
* This repository
@@ -33,9 +33,9 @@ External dependency
## Install
Start by downloading ipld-eth-server and moving into the repo:
-`GO111MODULE=off go get -d github.com/cerc-io/ipld-eth-server/v4`
+`GO111MODULE=off go get -d github.com/cerc-io/ipld-eth-server/v5`
-`cd $GOPATH/src/github.com/cerc-io/ipld-eth-server/v4@v4.x.x`
+`cd $GOPATH/src/github.com/cerc-io/ipld-eth-server/v5@v5.x.x`
Then, build the binary:
@@ -67,11 +67,10 @@ The corresponding CLI flags can be found with the `./ipld-eth-server serve --hel
wsPath = "127.0.0.1:8081" # $SERVER_WS_PATH
httpPath = "127.0.0.1:8082" # $SERVER_HTTP_PATH
graphql = true # $SERVER_GRAPHQL
- graphqlEndpoint = "" # $SERVER_GRAPHQL_ENDPOINT
+ graphqlPath = "" # $SERVER_GRAPHQL_PATH
[ethereum]
chainID = "1" # $ETH_CHAIN_ID
- defaultSender = "" # $ETH_DEFAULT_SENDER_ADDR
rpcGasCap = "1000000000000" # $ETH_RPC_GAS_CAP
httpPath = "127.0.0.1:8545" # $ETH_HTTP_PATH
nodeID = "arch1" # $ETH_NODE_ID
@@ -80,9 +79,9 @@ The corresponding CLI flags can be found with the `./ipld-eth-server serve --hel
networkID = "1" # $ETH_NETWORK_ID
```
-The `database` fields are for connecting to a Postgres database that has been/is being populated by [ipld-eth-indexer](https://github.com/vulcanize/ipld-eth-indexer)
-The `server` fields set the paths for exposing the ipld-eth-server endpoints
-The `ethereum` fields set the chainID and default sender address to use for EVM simulation, and can optionally be used to configure a remote eth node to forward cache misses to
+The `database` fields are for connecting to a Postgres database that has been/is being populated by [ipld-eth-indexer](https://github.com/vulcanize/ipld-eth-indexer)
+The `server` fields set the paths for exposing the ipld-eth-server endpoints
+The `ethereum` fields set the chainID and default sender address to use for EVM simulation, and can optionally be used to configure a remote eth node to forward cache misses to
### Endpoints
@@ -92,61 +91,35 @@ TODO: Port the IPLD RPC subscription endpoints after the decoupling
#### Ethereum JSON-RPC
ipld-eth-server currently recapitulates portions of the Ethereum JSON-RPC api standard.
-The currently supported standard endpoints are:
-`eth_call`
-`eth_getBalance`
-`eth_getStorageAt`
-`eth_getCode`
-`eth_getProof`
-`eth_blockNumber`
-`eth_getHeaderByNumber`
-`eth_getHeaderByHash`
-`eth_getBlockByNumber`
-`eth_getBlockByHash`
-`eth_getTransactionCount`
-`eth_getBlockTransactionCountByHash`
-`eth_getBlockTransactionCountByNumber`
-`eth_getTransactionByHash`
-`eth_getRawTransactionByHash`
-`eth_getTransactionByBlockHashAndIndex`
-`eth_getTransactionByBlockNumberAndIndex`
-`eth_getRawTransactionByBlockHashAndIndex`
-`eth_getRawTransactionByBlockNumberAndIndex`
-`eth_getTransactionReceipt`
-`eth_getLogs`
-`eth_getUncleCountByBlockHash`
-`eth_getUncleCountByBlockNumber`
-`eth_getUncleByBlockHashAndIndex`
-`eth_getUncleByBlockNumberAndIndex`
+The currently supported standard endpoints are:
+- `eth_call`
+- `eth_getBalance`
+- `eth_getStorageAt`
+- `eth_getCode`
+- `eth_getProof`
+- `eth_blockNumber`
+- `eth_getHeaderByNumber`
+- `eth_getHeaderByHash`
+- `eth_getBlockByNumber`
+- `eth_getBlockByHash`
+- `eth_getTransactionCount`
+- `eth_getBlockTransactionCountByHash`
+- `eth_getBlockTransactionCountByNumber`
+- `eth_getTransactionByHash`
+- `eth_getRawTransactionByHash`
+- `eth_getTransactionByBlockHashAndIndex`
+- `eth_getTransactionByBlockNumberAndIndex`
+- `eth_getRawTransactionByBlockHashAndIndex`
+- `eth_getRawTransactionByBlockNumberAndIndex`
+- `eth_getTransactionReceipt`
+- `eth_getLogs`
+- `eth_getUncleCountByBlockHash`
+- `eth_getUncleCountByBlockNumber`
+- `eth_getUncleByBlockHashAndIndex`
+- `eth_getUncleByBlockNumberAndIndex`
TODO: Add the rest of the standard endpoints and unique endpoints (e.g. getSlice)
-
-### CLI Options and Environment variables
-
-
-| CLI Option | Environment Variable | Default Value | Comment |
-| ----------------------------- | ----------------------------- | ---------------- | ----------------------------------- |
-| `database-hostname` | `DATABASE_HOSTNAME` | localhost | IPLD database host |
-| `database-port` | `DATABASE_PORT` | 5432 | IPLD database port |
-| `database-name` | `DATABASE_NAME` | vulcanize_public | IPLD database name |
-| `database-user` | `DATABASE_USER` | | IPLD database user |
-| `database-password` | `DATABASE_PASSWORD` | | IPLD database password |
-| `eth-server-graphql` | `ETH_SERVER_GRAPHQL` | false | If `true` enable Eth GraphQL Server |
-| `eth-server-graphql-path` | `ETH_SERVER_GRAPHQLPATH` | | If `eth-server-graphql` set to true, endpoint url for graphql server (host:port) |
-| `eth-server-http` | `ETH_SERVER_HTTP` | true | If `true` enable Eth HTTP JSON-RPC Server |
-| `eth-server-http-path` | `ETH_SERVER_HTTPPATH` | | If `eth-server-http` set to `true`, endpoint url for Eth HTTP JSON-RPC server (host:port) |
-| `eth-server-ws` | `ETH_SERVER_WS` | false | If `true` enable Eth WS JSON-RPC Server |
-| `eth-server-ws-path` | `ETH_SERVER_WSPATH` | | If `eth-server-ws` set to `true`, endpoint url for Eth WS JSON-RPC server (host:port) |
-| `eth-server-ipc` | `ETH_SERVER_IPC` | false | If `true` enable Eth IPC JSON-RPC Server |
-| `eth-server-ipc-path` | `ETH_SERVER_IPC_PATH` | | If `eth-server-ws` set to `true`, path for Eth IPC JSON-RPC server |
-| `ipld-server-graphql` | `IPLD_SERVER_GRAPHQL` | false | If `true` enable IPLD GraphQL Server |
-| `ipld-server-graphql-path` | `IPLD_SERVER_GRAPHQLPATH` | | If `ipld-server-graphql` set to true, endpoint url for graphql server (host:port) |
-| `ipld-postgraphile-path` | `IPLD_POSTGRAPHILEPATH` | | If `ipld-server-graphql` set to true, http url for postgraphile server on top of IPLD db |
-| `tracing-http-path` | `TRACING_HTTPPATH` | | If `ipld-server-graphql` set to true, http url for tracing server |
-| `tracing-postgraphile-path` | `TRACING.POSTGRAPHILEPATH` | | If `ipld-server-graphql` set to true, http url for postgraphile server on top of tracing db |
-
-
### Testing
Follow steps in [test/README.md](./test/README.md)
diff --git a/chain.json b/chain.json
deleted file mode 100644
index 02d95d49..00000000
--- a/chain.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "chainId": 4,
- "homesteadBlock": 1,
- "eip150Block": 2,
- "eip150Hash": "0x9b095b36c15eaf13044373aef8ee0bd3a382a5abb92e402afa44b8249c3a90e9",
- "eip155Block": 3,
- "eip158Block": 3,
- "byzantiumBlock": 3,
- "constantinopleBlock": 3,
- "petersburgBlock": 3,
- "istanbulBlock": 3,
- "clique": {
- "period": 15,
- "epoch": 30000
- }
-}
\ No newline at end of file
diff --git a/cmd/root.go b/cmd/root.go
index 4ee233f7..7c403f78 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -25,8 +25,8 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/viper"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/prom"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/prom"
)
var (
diff --git a/cmd/serve.go b/cmd/serve.go
index 45aff289..49e51119 100644
--- a/cmd/serve.go
+++ b/cmd/serve.go
@@ -25,19 +25,16 @@ import (
"sync"
"time"
- "github.com/mailgun/groupcache/v2"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
"github.com/ethereum/go-ethereum/rpc"
+ "github.com/mailgun/groupcache/v2"
"github.com/spf13/cobra"
"github.com/spf13/viper"
- "github.com/vulcanize/gap-filler/pkg/mux"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/graphql"
- srpc "github.com/cerc-io/ipld-eth-server/v4/pkg/rpc"
- s "github.com/cerc-io/ipld-eth-server/v4/pkg/serve"
- v "github.com/cerc-io/ipld-eth-server/v4/version"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/graphql"
+ srpc "github.com/cerc-io/ipld-eth-server/v5/pkg/rpc"
+ s "github.com/cerc-io/ipld-eth-server/v5/pkg/serve"
+ v "github.com/cerc-io/ipld-eth-server/v5/version"
)
var ErrNoRpcEndpoints = errors.New("no rpc endpoints is available")
@@ -46,9 +43,7 @@ var ErrNoRpcEndpoints = errors.New("no rpc endpoints is available")
var serveCmd = &cobra.Command{
Use: "serve",
Short: "serve chain data from PG-IPFS",
- Long: `This command configures a VulcanizeDB ipld-eth-server.
-
-`,
+ Long: `This command configures a VulcanizeDB ipld-eth-server.`,
Run: func(cmd *cobra.Command, args []string) {
subCommand = cmd.CalledAs()
logWithCommand = *log.WithField("SubCommand", subCommand)
@@ -57,25 +52,29 @@ var serveCmd = &cobra.Command{
}
func serve() {
- logWithCommand.Infof("running ipld-eth-server version: %s", v.VersionWithMeta)
+ logWithCommand.Infof("ipld-eth-server version: %s", v.VersionWithMeta)
- var forwardPayloadChan chan eth.ConvertedPayload
wg := new(sync.WaitGroup)
- logWithCommand.Debug("loading server configuration variables")
serverConfig, err := s.NewConfig()
if err != nil {
logWithCommand.Fatal(err)
}
- logWithCommand.Infof("server config: %+v", serverConfig)
- logWithCommand.Debug("initializing new server service")
+ logWithCommand.Debug("server config: %+v", serverConfig)
server, err := s.NewServer(serverConfig)
if err != nil {
logWithCommand.Fatal(err)
}
+ if serverConfig.ForwardEthCalls {
+ logWithCommand.Info("Fowarding eth_call")
+ }
+ if serverConfig.ForwardGetStorageAt {
+ logWithCommand.Info("Fowarding eth_getStorageAt")
+ }
+ if serverConfig.ProxyOnError {
+ logWithCommand.Info("Proxy on error is enabled")
+ }
- logWithCommand.Info("starting up server servers")
- forwardPayloadChan = make(chan eth.ConvertedPayload, s.PayloadChanBufferSize)
- server.Serve(wg, forwardPayloadChan)
+ server.Serve(wg)
if err := startServers(server, serverConfig); err != nil {
logWithCommand.Fatal(err)
}
@@ -84,11 +83,6 @@ func serve() {
logWithCommand.Fatal(err)
}
- err = startIpldGraphQL(serverConfig)
- if err != nil {
- logWithCommand.Fatal(err)
- }
-
err = startGroupCacheService(serverConfig)
if err != nil {
logWithCommand.Fatal(err)
@@ -98,7 +92,7 @@ func serve() {
go startStateTrieValidator(serverConfig, server)
logWithCommand.Info("state validator enabled")
} else {
- logWithCommand.Info("state validator disabled")
+ logWithCommand.Debug("state validator disabled")
}
shutdown := make(chan os.Signal, 1)
@@ -113,33 +107,33 @@ func serve() {
func startServers(server s.Server, settings *s.Config) error {
if settings.IPCEnabled {
- logWithCommand.Info("starting up IPC server")
+ logWithCommand.Debug("starting up IPC server")
_, _, err := srpc.StartIPCEndpoint(settings.IPCEndpoint, server.APIs())
if err != nil {
return err
}
} else {
- logWithCommand.Info("IPC server is disabled")
+ logWithCommand.Debug("IPC server is disabled")
}
if settings.WSEnabled {
- logWithCommand.Info("starting up WS server")
+ logWithCommand.Debug("starting up WS server")
_, _, err := srpc.StartWSEndpoint(settings.WSEndpoint, server.APIs(), []string{"vdb", "net"}, nil)
if err != nil {
return err
}
} else {
- logWithCommand.Info("WS server is disabled")
+ logWithCommand.Debug("WS server is disabled")
}
if settings.HTTPEnabled {
- logWithCommand.Info("starting up HTTP server")
+ logWithCommand.Debug("starting up HTTP server")
_, err := srpc.StartHTTPEndpoint(settings.HTTPEndpoint, server.APIs(), []string{"vdb", "eth", "debug", "net"}, nil, []string{"*"}, rpc.HTTPTimeouts{})
if err != nil {
return err
}
} else {
- logWithCommand.Info("HTTP server is disabled")
+ logWithCommand.Debug("HTTP server is disabled")
}
return nil
@@ -147,7 +141,7 @@ func startServers(server s.Server, settings *s.Config) error {
func startEthGraphQL(server s.Server, settings *s.Config) (graphQLServer *graphql.Service, err error) {
if settings.EthGraphqlEnabled {
- logWithCommand.Info("starting up ETH GraphQL server")
+ logWithCommand.Debug("starting up ETH GraphQL server")
endPoint := settings.EthGraphqlEndpoint
if endPoint != "" {
graphQLServer, err = graphql.New(server.Backend(), endPoint, nil, []string{"*"}, rpc.HTTPTimeouts{})
@@ -157,69 +151,17 @@ func startEthGraphQL(server s.Server, settings *s.Config) (graphQLServer *graphq
err = graphQLServer.Start(nil)
}
} else {
- logWithCommand.Info("ETH GraphQL server is disabled")
+ logWithCommand.Debug("ETH GraphQL server is disabled")
}
return
}
-func startIpldGraphQL(settings *s.Config) error {
- if settings.IpldGraphqlEnabled {
- logWithCommand.Info("starting up IPLD GraphQL server")
-
- gqlIpldAddr, err := url.Parse(settings.IpldPostgraphileEndpoint)
- if err != nil {
- return err
- }
-
- gqlTracingAPIAddr, err := url.Parse(settings.TracingPostgraphileEndpoint)
- if err != nil {
- return err
- }
-
- ethClients, err := parseRpcAddresses(settings.EthHttpEndpoint)
- if err != nil {
- return err
- }
-
- var tracingClients []*rpc.Client
- tracingEndpoint := viper.GetString("tracing.httpPath")
- if tracingEndpoint != "" {
- tracingClients, err = parseRpcAddresses(tracingEndpoint)
- if err != nil {
- return err
- }
- }
-
- router, err := mux.NewServeMux(&mux.Options{
- BasePath: "/",
- EnableGraphiQL: true,
- Postgraphile: mux.PostgraphileOptions{
- Default: gqlIpldAddr,
- TracingAPI: gqlTracingAPIAddr,
- },
- RPC: mux.RPCOptions{
- DefaultClients: ethClients,
- TracingClients: tracingClients,
- },
- })
- if err != nil {
- return err
- }
-
- go http.ListenAndServe(settings.IpldGraphqlEndpoint, router)
- } else {
- logWithCommand.Info("IPLD GraphQL server is disabled")
- }
-
- return nil
-}
-
func startGroupCacheService(settings *s.Config) error {
gcc := settings.GroupCache
if gcc.Pool.Enabled {
- logWithCommand.Info("starting up groupcache pool HTTTP server")
+ logWithCommand.Debug("starting up groupcache pool HTTTP server")
pool := groupcache.NewHTTPPoolOpts(gcc.Pool.HttpEndpoint, &groupcache.HTTPPoolOptions{})
pool.Set(gcc.Pool.PeerHttpEndpoints...)
@@ -237,9 +179,9 @@ func startGroupCacheService(settings *s.Config) error {
// Start a HTTP server to listen for peer requests from the groupcache
go server.ListenAndServe()
- logWithCommand.Infof("groupcache pool endpoint opened for url %s", httpURL)
+ logWithCommand.Infof("groupcache pool endpoint opened at %s", httpURL)
} else {
- logWithCommand.Info("Groupcache pool is disabled")
+ logWithCommand.Debug("Groupcache pool is disabled")
}
return nil
@@ -320,21 +262,14 @@ func init() {
// flags for all config variables
// eth graphql and json-rpc parameters
- serveCmd.PersistentFlags().Bool("eth-server-graphql", false, "turn on the eth graphql server")
- serveCmd.PersistentFlags().String("eth-server-graphql-path", "", "endpoint url for eth graphql server (host:port)")
- serveCmd.PersistentFlags().Bool("eth-server-http", true, "turn on the eth http json-rpc server")
- serveCmd.PersistentFlags().String("eth-server-http-path", "", "endpoint url for eth http json-rpc server (host:port)")
- serveCmd.PersistentFlags().Bool("eth-server-ws", false, "turn on the eth websocket json-rpc server")
- serveCmd.PersistentFlags().String("eth-server-ws-path", "", "endpoint url for eth websocket json-rpc server (host:port)")
- serveCmd.PersistentFlags().Bool("eth-server-ipc", false, "turn on the eth ipc json-rpc server")
- serveCmd.PersistentFlags().String("eth-server-ipc-path", "", "path for eth ipc json-rpc server")
-
- // ipld and tracing graphql parameters
- serveCmd.PersistentFlags().Bool("ipld-server-graphql", false, "turn on the ipld graphql server")
- serveCmd.PersistentFlags().String("ipld-server-graphql-path", "", "endpoint url for ipld graphql server (host:port)")
- serveCmd.PersistentFlags().String("ipld-postgraphile-path", "", "http url to postgraphile on top of ipld database")
- serveCmd.PersistentFlags().String("tracing-http-path", "", "http url to tracing service")
- serveCmd.PersistentFlags().String("tracing-postgraphile-path", "", "http url to postgraphile on top of tracing db")
+ serveCmd.PersistentFlags().Bool("server-graphql", false, "turn on the eth graphql server")
+ serveCmd.PersistentFlags().String("server-graphql-path", "", "endpoint url for eth graphql server (host:port)")
+ serveCmd.PersistentFlags().Bool("server-http", true, "turn on the eth http json-rpc server")
+ serveCmd.PersistentFlags().String("server-http-path", "", "endpoint url for eth http json-rpc server (host:port)")
+ serveCmd.PersistentFlags().Bool("server-ws", false, "turn on the eth websocket json-rpc server")
+ serveCmd.PersistentFlags().String("server-ws-path", "", "endpoint url for eth websocket json-rpc server (host:port)")
+ serveCmd.PersistentFlags().Bool("server-ipc", false, "turn on the eth ipc json-rpc server")
+ serveCmd.PersistentFlags().String("server-ipc-path", "", "path for eth ipc json-rpc server")
serveCmd.PersistentFlags().String("eth-http-path", "", "http url for ethereum node")
serveCmd.PersistentFlags().String("eth-node-id", "", "eth node id")
@@ -363,27 +298,20 @@ func init() {
// and their bindings
// eth graphql server
- viper.BindPFlag("eth.server.graphql", serveCmd.PersistentFlags().Lookup("eth-server-graphql"))
- viper.BindPFlag("eth.server.graphqlPath", serveCmd.PersistentFlags().Lookup("eth-server-graphql-path"))
+ viper.BindPFlag("server.graphql", serveCmd.PersistentFlags().Lookup("server-graphql"))
+ viper.BindPFlag("server.graphqlPath", serveCmd.PersistentFlags().Lookup("server-graphql-path"))
// eth http json-rpc server
- viper.BindPFlag("eth.server.http", serveCmd.PersistentFlags().Lookup("eth-server-http"))
- viper.BindPFlag("eth.server.httpPath", serveCmd.PersistentFlags().Lookup("eth-server-http-path"))
+ viper.BindPFlag("server.http", serveCmd.PersistentFlags().Lookup("server-http"))
+ viper.BindPFlag("server.httpPath", serveCmd.PersistentFlags().Lookup("server-http-path"))
// eth websocket json-rpc server
- viper.BindPFlag("eth.server.ws", serveCmd.PersistentFlags().Lookup("eth-server-ws"))
- viper.BindPFlag("eth.server.wsPath", serveCmd.PersistentFlags().Lookup("eth-server-ws-path"))
+ viper.BindPFlag("server.ws", serveCmd.PersistentFlags().Lookup("server-ws"))
+ viper.BindPFlag("server.wsPath", serveCmd.PersistentFlags().Lookup("server-ws-path"))
// eth ipc json-rpc server
- viper.BindPFlag("eth.server.ipc", serveCmd.PersistentFlags().Lookup("eth-server-ipc"))
- viper.BindPFlag("eth.server.ipcPath", serveCmd.PersistentFlags().Lookup("eth-server-ipc-path"))
-
- // ipld and tracing graphql parameters
- viper.BindPFlag("ipld.server.graphql", serveCmd.PersistentFlags().Lookup("ipld-server-graphql"))
- viper.BindPFlag("ipld.server.graphqlPath", serveCmd.PersistentFlags().Lookup("ipld-server-graphql-path"))
- viper.BindPFlag("ipld.postgraphilePath", serveCmd.PersistentFlags().Lookup("ipld-postgraphile-path"))
- viper.BindPFlag("tracing.httpPath", serveCmd.PersistentFlags().Lookup("tracing-http-path"))
- viper.BindPFlag("tracing.postgraphilePath", serveCmd.PersistentFlags().Lookup("tracing-postgraphile-path"))
+ viper.BindPFlag("server.ipc", serveCmd.PersistentFlags().Lookup("server-ipc"))
+ viper.BindPFlag("server.ipcPath", serveCmd.PersistentFlags().Lookup("server-ipc-path"))
viper.BindPFlag("ethereum.httpPath", serveCmd.PersistentFlags().Lookup("eth-http-path"))
viper.BindPFlag("ethereum.nodeID", serveCmd.PersistentFlags().Lookup("eth-node-id"))
@@ -391,7 +319,6 @@ func init() {
viper.BindPFlag("ethereum.genesisBlock", serveCmd.PersistentFlags().Lookup("eth-genesis-block"))
viper.BindPFlag("ethereum.networkID", serveCmd.PersistentFlags().Lookup("eth-network-id"))
viper.BindPFlag("ethereum.chainID", serveCmd.PersistentFlags().Lookup("eth-chain-id"))
- viper.BindPFlag("ethereum.defaultSender", serveCmd.PersistentFlags().Lookup("eth-default-sender"))
viper.BindPFlag("ethereum.rpcGasCap", serveCmd.PersistentFlags().Lookup("eth-rpc-gas-cap"))
viper.BindPFlag("ethereum.chainConfig", serveCmd.PersistentFlags().Lookup("eth-chain-config"))
viper.BindPFlag("ethereum.supportsStateDiff", serveCmd.PersistentFlags().Lookup("eth-supports-state-diff"))
diff --git a/cmd/subscribe.go b/cmd/subscribe.go
deleted file mode 100644
index 155aebbc..00000000
--- a/cmd/subscribe.go
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright © 2019 Vulcanize, Inc
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-package cmd
-
-import (
- "bytes"
- "fmt"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/rpc"
- "github.com/spf13/cobra"
- "github.com/spf13/viper"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/client"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- w "github.com/cerc-io/ipld-eth-server/v4/pkg/serve"
-)
-
-// subscribeCmd represents the subscribe command
-var subscribeCmd = &cobra.Command{
- Use: "subscribe",
- Short: "This command is used to subscribe to the eth ipfs watcher data stream with the provided filters",
- Long: `This command is for demo and testing purposes and is used to subscribe to the watcher with the provided subscription configuration parameters.
-It does not do anything with the data streamed from the watcher other than unpack it and print it out for demonstration purposes.`,
- Run: func(cmd *cobra.Command, args []string) {
- subCommand = cmd.CalledAs()
- logWithCommand = *log.WithField("SubCommand", subCommand)
- subscribe()
- },
-}
-
-func init() {
- rootCmd.AddCommand(subscribeCmd)
-}
-
-func subscribe() {
- // Prep the subscription config/filters to be sent to the server
- ethSubConfig, err := eth.NewEthSubscriptionConfig()
- if err != nil {
- log.Fatal(err)
- }
-
- // Create a new rpc client and a subscription streamer with that client
- rpcClient, err := getRPCClient()
- if err != nil {
- logWithCommand.Fatal(err)
- }
- subClient := client.NewClient(rpcClient)
-
- // Buffered channel for reading subscription payloads
- payloadChan := make(chan w.SubscriptionPayload, 20000)
-
- // Subscribe to the watcher service with the given config/filter parameters
- sub, err := subClient.Stream(payloadChan, *ethSubConfig)
- if err != nil {
- logWithCommand.Fatal(err)
- }
- logWithCommand.Info("awaiting payloads")
- // Receive response payloads and print out the results
- for {
- select {
- case payload := <-payloadChan:
- if payload.Err != "" {
- logWithCommand.Error(payload.Err)
- continue
- }
- var ethData eth.IPLDs
- if err := rlp.DecodeBytes(payload.Data, ðData); err != nil {
- logWithCommand.Error(err)
- continue
- }
- var header types.Header
- err = rlp.Decode(bytes.NewBuffer(ethData.Header.Data), &header)
- if err != nil {
- logWithCommand.Error(err)
- continue
- }
- fmt.Printf("Header number %d, hash %s\n", header.Number.Int64(), header.Hash().Hex())
- fmt.Printf("header: %v\n", header)
- for _, trxRlp := range ethData.Transactions {
- var trx types.Transaction
- buff := bytes.NewBuffer(trxRlp.Data)
- stream := rlp.NewStream(buff, 0)
- err := trx.DecodeRLP(stream)
- if err != nil {
- logWithCommand.Error(err)
- continue
- }
- fmt.Printf("Transaction with hash %s\n", trx.Hash().Hex())
- fmt.Printf("trx: %v\n", trx)
- }
- for _, rctRlp := range ethData.Receipts {
- var rct types.Receipt
- buff := bytes.NewBuffer(rctRlp.Data)
- stream := rlp.NewStream(buff, 0)
- err = rct.DecodeRLP(stream)
- if err != nil {
- logWithCommand.Error(err)
- continue
- }
- fmt.Printf("Receipt with block hash %s, trx hash %s\n", rct.BlockHash.Hex(), rct.TxHash.Hex())
- fmt.Printf("rct: %v\n", rct)
- for _, l := range rct.Logs {
- if len(l.Topics) < 1 {
- logWithCommand.Error(fmt.Sprintf("log only has %d topics", len(l.Topics)))
- continue
- }
- fmt.Printf("Log for block hash %s, trx hash %s, address %s, and with topic0 %s\n",
- l.BlockHash.Hex(), l.TxHash.Hex(), l.Address.Hex(), l.Topics[0].Hex())
- fmt.Printf("log: %v\n", l)
- }
- }
- // This assumes leafs only
- for _, stateNode := range ethData.StateNodes {
- var acct types.StateAccount
- err = rlp.DecodeBytes(stateNode.IPLD.Data, &acct)
- if err != nil {
- logWithCommand.Error(err)
- continue
- }
- fmt.Printf("Account for key %s, and root %s, with balance %s\n",
- stateNode.StateLeafKey.Hex(), acct.Root.Hex(), acct.Balance.String())
- fmt.Printf("state account: %+v\n", acct)
- }
- for _, storageNode := range ethData.StorageNodes {
- fmt.Printf("Storage for state key %s ", storageNode.StateLeafKey.Hex())
- fmt.Printf("with storage key %s\n", storageNode.StorageLeafKey.Hex())
- var i []interface{}
- err := rlp.DecodeBytes(storageNode.IPLD.Data, &i)
- if err != nil {
- logWithCommand.Error(err)
- continue
- }
- // if a value node
- if len(i) == 1 {
- valueBytes, ok := i[0].([]byte)
- if !ok {
- continue
- }
- fmt.Printf("Storage leaf key: %s, and value hash: %s\n",
- storageNode.StorageLeafKey.Hex(), common.BytesToHash(valueBytes).Hex())
- }
- }
- case err = <-sub.Err():
- logWithCommand.Fatal(err)
- }
- }
-}
-
-func getRPCClient() (*rpc.Client, error) {
- vulcPath := viper.GetString("watcher.ethSubscription.wsPath")
- if vulcPath == "" {
- vulcPath = "ws://127.0.0.1:8080" // default to and try the default ws url if no path is provided
- }
- return rpc.Dial(vulcPath)
-}
diff --git a/cmd/validate.go b/cmd/validate.go
index f1d9f41f..5e2dd963 100644
--- a/cmd/validate.go
+++ b/cmd/validate.go
@@ -18,14 +18,14 @@ package cmd
import (
"time"
- validator "github.com/cerc-io/eth-ipfs-state-validator/v4/pkg"
- ipfsethdb "github.com/cerc-io/ipfs-ethdb/v4/postgres"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
+ validator "github.com/cerc-io/eth-ipfs-state-validator/v5/pkg"
+ ipfsethdb "github.com/cerc-io/ipfs-ethdb/v5/postgres/v0"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
"github.com/ethereum/go-ethereum/common"
"github.com/spf13/cobra"
"github.com/spf13/viper"
- s "github.com/cerc-io/ipld-eth-server/v4/pkg/serve"
+ s "github.com/cerc-io/ipld-eth-server/v5/pkg/serve"
)
const GroupName = "statedb-validate"
@@ -34,7 +34,7 @@ const CacheSizeInMB = 16 // 16 MB
var validateCmd = &cobra.Command{
Use: "validate",
- Short: "valdiate state",
+ Short: "validate state",
Long: `This command validates the trie for the given state root`,
Run: func(cmd *cobra.Command, args []string) {
subCommand = cmd.CalledAs()
diff --git a/cmd/version.go b/cmd/version.go
index e95bde18..3bfd5017 100644
--- a/cmd/version.go
+++ b/cmd/version.go
@@ -16,19 +16,17 @@
package cmd
import (
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
"github.com/spf13/cobra"
- v "github.com/cerc-io/ipld-eth-server/v4/version"
+ v "github.com/cerc-io/ipld-eth-server/v5/version"
)
// versionCmd represents the version command
var versionCmd = &cobra.Command{
Use: "version",
Short: "Prints the version of ipld-eth-server",
- Long: `Use this command to fetch the version of ipld-eth-server
-
-Usage: ./ipld-eth-server version`,
+ Long: `Use this command to fetch the version of ipld-eth-server`,
Run: func(cmd *cobra.Command, args []string) {
subCommand = cmd.CalledAs()
logWithCommand = *log.WithField("SubCommand", subCommand)
diff --git a/docker-compose.test.yml b/docker-compose.test.yml
deleted file mode 100644
index ecdd3e40..00000000
--- a/docker-compose.test.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-version: '3.2'
-
-services:
- contract:
- build:
- context: ./test/contract
- args:
- ETH_ADDR: "http://go-ethereum:8545"
- environment:
- ETH_ADDR: "http://go-ethereum:8545"
- ports:
- - "127.0.0.1:3000:3000"
diff --git a/docker-compose.yml b/docker-compose.yml
deleted file mode 100644
index 2051ec71..00000000
--- a/docker-compose.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-version: '3.2'
-
-services:
- migrations:
- restart: on-failure
- depends_on:
- - ipld-eth-db
- image: git.vdb.to/cerc-io/ipld-eth-db/ipld-eth-db:v4.2.3-alpha
- environment:
- DATABASE_USER: "vdbm"
- DATABASE_NAME: "vulcanize_testing"
- DATABASE_PASSWORD: "password"
- DATABASE_HOSTNAME: "ipld-eth-db"
- DATABASE_PORT: 5432
-
- ipld-eth-db:
- image: timescale/timescaledb:latest-pg14
- restart: always
- command: ["postgres", "-c", "log_statement=all"]
- environment:
- POSTGRES_USER: "vdbm"
- POSTGRES_DB: "vulcanize_testing"
- POSTGRES_PASSWORD: "password"
- ports:
- - "127.0.0.1:8077:5432"
-
- eth-server:
- restart: unless-stopped
- depends_on:
- - ipld-eth-db
- build:
- context: ./
- cache_from:
- - alpine:latest
- - golang:1.13-alpine
- environment:
- IPLD_SERVER_GRAPHQL: "true"
- IPLD_POSTGRAPHILEPATH: http://graphql:5000
- ETH_SERVER_HTTPPATH: 0.0.0.0:8081
- VDB_COMMAND: "serve"
- ETH_CHAIN_CONFIG: "/tmp/chain.json"
- DATABASE_NAME: "vulcanize_testing"
- DATABASE_HOSTNAME: "ipld-eth-db"
- DATABASE_PORT: 5432
- DATABASE_USER: "vdbm"
- DATABASE_PASSWORD: "password"
- ETH_CHAIN_ID: 4
- ETH_FORWARD_ETH_CALLS: $ETH_FORWARD_ETH_CALLS
- ETH_PROXY_ON_ERROR: $ETH_PROXY_ON_ERROR
- ETH_HTTP_PATH: $ETH_HTTP_PATH
- volumes:
- - type: bind
- source: ./chain.json
- target: /tmp/chain.json
- ports:
- - "127.0.0.1:8081:8081"
-
-volumes:
- vdb_db_eth_server:
diff --git a/documentation/apis.md b/documentation/apis.md
index 190e4b22..3c2c6034 100644
--- a/documentation/apis.md
+++ b/documentation/apis.md
@@ -40,9 +40,9 @@ An example of how to subscribe to a real-time Ethereum data feed from ipld-eth-s
"github.com/ethereum/go-ethereum/rpc"
"github.com/spf13/viper"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/client"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/watch"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/client"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/watch"
)
config, _ := eth.NewEthSubscriptionConfig()
@@ -160,9 +160,9 @@ An example of how to subscribe to a real-time Bitcoin data feed from ipld-eth-se
"github.com/ethereum/go-ethereum/rpc"
"github.com/spf13/viper"
- "github.com/vulcanize/ipld-eth-server/v4/pkg/btc"
- "github.com/vulcanize/ipld-eth-server/v4/pkg/client"
- "github.com/vulcanize/ipld-eth-server/v4/pkg/watch"
+ "github.com/vulcanize/ipld-eth-server/v5/pkg/btc"
+ "github.com/vulcanize/ipld-eth-server/v5/pkg/client"
+ "github.com/vulcanize/ipld-eth-server/v5/pkg/watch"
)
config, _ := btc.NewBtcSubscriptionConfig()
diff --git a/environments/example.toml b/environments/example.toml
index 78edbd75..0d992da1 100644
--- a/environments/example.toml
+++ b/environments/example.toml
@@ -1,5 +1,5 @@
[database]
- name = "vulcanize_public" # $DATABASE_NAME
+ name = "cerc_testing" # $DATABASE_NAME
hostname = "localhost" # $DATABASE_HOSTNAME
port = 5432 # $DATABASE_PORT
user = "postgres" # $DATABASE_USER
@@ -9,16 +9,18 @@
level = "info" # $LOGRUS_LEVEL
[server]
+ ipc = false
ipcPath = "~/.vulcanize/vulcanize.ipc" # $SERVER_IPC_PATH
- wsPath = "127.0.0.1:8081" # $SERVER_WS_PATH
- httpPath = "127.0.0.1:8082" # $SERVER_HTTP_PATH
+ ws = true
+ wsPath = "127.0.0.1:8080" # $SERVER_WS_PATH
+ http = true
+ httpPath = "127.0.0.1:8081" # $SERVER_HTTP_PATH
graphql = true # $SERVER_GRAPHQL
- graphqlEndpoint = "127.0.0.1:8083" # $SERVER_GRAPHQL_ENDPOINT
+ graphqlPath = "127.0.0.1:8082" # $SERVER_GRAPHQL_PATH
[ethereum]
chainConfig = "./chain.json" # ETH_CHAIN_CONFIG
chainID = "1" # $ETH_CHAIN_ID
- defaultSender = "" # $ETH_DEFAULT_SENDER_ADDR
rpcGasCap = "1000000000000" # $ETH_RPC_GAS_CAP
httpPath = "127.0.0.1:8545" # $ETH_HTTP_PATH
supportsStateDiff = true # $ETH_SUPPORTS_STATEDIFF
diff --git a/environments/subscribeExample.toml b/environments/subscribeExample.toml
deleted file mode 100644
index 14a82379..00000000
--- a/environments/subscribeExample.toml
+++ /dev/null
@@ -1,30 +0,0 @@
-[watcher]
- [watcher.ethSubscription]
- historicalData = false
- historicalDataOnly = false
- startingBlock = 0
- endingBlock = 0
- wsPath = "ws://127.0.0.1:8080"
- [watcher.ethSubscription.headerFilter]
- off = false
- uncles = false
- [watcher.ethSubscription.txFilter]
- off = false
- src = []
- dst = []
- [watcher.ethSubscription.receiptFilter]
- off = false
- contracts = []
- topic0s = []
- topic1s = []
- topic2s = []
- topic3s = []
- [watcher.ethSubscription.stateFilter]
- off = false
- addresses = []
- intermediateNodes = false
- [watcher.ethSubscription.storageFilter]
- off = true
- addresses = []
- storageKeys = []
- intermediateNodes = false
\ No newline at end of file
diff --git a/go.mod b/go.mod
index ca0fd5f6..1570fa90 100644
--- a/go.mod
+++ b/go.mod
@@ -1,86 +1,86 @@
-module github.com/cerc-io/ipld-eth-server/v4
+module github.com/cerc-io/ipld-eth-server/v5
-go 1.18
+go 1.19
require (
- github.com/cerc-io/eth-ipfs-state-validator/v4 v4.0.10-alpha
- github.com/cerc-io/go-eth-state-node-iterator v1.1.9
- github.com/cerc-io/ipfs-ethdb/v4 v4.0.10-alpha
- github.com/ethereum/go-ethereum v1.10.26
+ github.com/cerc-io/eth-ipfs-state-validator/v5 v5.0.0-alpha
+ github.com/cerc-io/ipfs-ethdb/v5 v5.0.0-alpha
+ github.com/cerc-io/ipld-eth-statedb v0.0.5-alpha
+ github.com/ethereum/go-ethereum v1.11.5
+ github.com/google/uuid v1.3.0
github.com/graph-gophers/graphql-go v1.3.0
- github.com/ipfs/go-block-format v0.0.3
- github.com/ipfs/go-cid v0.2.0
- github.com/ipfs/go-ipfs-blockstore v1.2.0
- github.com/ipfs/go-ipfs-ds-help v1.1.0
+ github.com/ipfs/go-cid v0.3.2
github.com/jmoiron/sqlx v1.3.5
github.com/joho/godotenv v1.4.0
- github.com/lib/pq v1.10.6
+ github.com/lib/pq v1.10.7
github.com/machinebox/graphql v0.2.2
github.com/mailgun/groupcache/v2 v2.3.0
- github.com/multiformats/go-multihash v0.2.0
- github.com/onsi/ginkgo v1.16.5
- github.com/onsi/gomega v1.19.0
- github.com/prometheus/client_golang v1.12.1
+ github.com/onsi/ginkgo/v2 v2.9.2
+ github.com/onsi/gomega v1.27.4
+ github.com/prometheus/client_golang v1.14.0
github.com/sirupsen/logrus v1.9.0
github.com/spf13/cobra v1.4.0
github.com/spf13/viper v1.11.0
- github.com/vulcanize/gap-filler v0.4.2
gorm.io/driver/postgres v1.3.7
gorm.io/gorm v1.23.5
)
require (
bazil.org/fuse v0.0.0-20200117225306-7b5117fecadc // indirect
- github.com/Stebalien/go-bitfield v0.0.1 // indirect
+ github.com/DataDog/zstd v1.5.2 // indirect
github.com/VictoriaMetrics/fastcache v1.6.0 // indirect
github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a // indirect
github.com/benbjohnson/clock v1.3.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
- github.com/btcsuite/btcd v0.22.1 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
- github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
github.com/cenkalti/backoff/v4 v4.1.3 // indirect
- github.com/cespare/xxhash/v2 v2.1.2 // indirect
- github.com/cheekybits/genny v1.0.0 // indirect
- github.com/containerd/cgroups v1.0.3 // indirect
- github.com/coreos/go-systemd/v22 v22.3.2 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/cockroachdb/errors v1.9.1 // indirect
+ github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
+ github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 // indirect
+ github.com/cockroachdb/redact v1.1.3 // indirect
+ github.com/containerd/cgroups v1.0.4 // indirect
+ github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect
github.com/cskr/pubsub v1.0.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect
- github.com/deckarep/golang-set v1.8.0 // indirect
- github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
+ github.com/deckarep/golang-set/v2 v2.1.0 // indirect
+ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect
github.com/deepmap/oapi-codegen v1.8.2 // indirect
- github.com/docker/go-units v0.4.0 // indirect
+ github.com/docker/go-units v0.5.0 // indirect
github.com/dustin/go-humanize v1.0.0 // indirect
github.com/edsrzf/mmap-go v1.0.0 // indirect
github.com/elastic/gosigar v0.14.2 // indirect
+ github.com/emirpasic/gods v1.18.1 // indirect
github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 // indirect
github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 // indirect
github.com/flynn/noise v1.0.0 // indirect
github.com/francoispqt/gojay v1.2.13 // indirect
- github.com/friendsofgo/graphiql v0.2.2 // indirect
- github.com/fsnotify/fsnotify v1.5.4 // indirect
+ github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff // indirect
github.com/georgysavva/scany v0.2.9 // indirect
+ github.com/getsentry/sentry-go v0.18.0 // indirect
github.com/go-logr/logr v1.2.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
- github.com/go-stack/stack v1.8.0 // indirect
- github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect
+ github.com/go-stack/stack v1.8.1 // indirect
+ github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
github.com/godbus/dbus/v5 v5.1.0 // indirect
+ github.com/gofrs/flock v0.8.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt/v4 v4.3.0 // indirect
- github.com/golang/protobuf v1.5.2 // indirect
+ github.com/golang/mock v1.6.0 // indirect
+ github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/go-cmp v0.5.9 // indirect
github.com/google/gopacket v1.1.19 // indirect
- github.com/google/uuid v1.3.0 // indirect
- github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f // indirect
+ github.com/google/pprof v0.0.0-20221203041831-ce31453925ec // indirect
+ github.com/gorilla/mux v1.8.0 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
- github.com/graphql-go/graphql v0.7.9 // indirect
github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-bexpr v0.1.10 // indirect
@@ -96,107 +96,105 @@ require (
github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect
github.com/ipfs/bbloom v0.0.4 // indirect
github.com/ipfs/go-bitfield v1.0.0 // indirect
- github.com/ipfs/go-bitswap v0.8.0 // indirect
- github.com/ipfs/go-blockservice v0.4.0 // indirect
+ github.com/ipfs/go-bitswap v0.11.0 // indirect
+ github.com/ipfs/go-block-format v0.0.3 // indirect
+ github.com/ipfs/go-blockservice v0.5.0 // indirect
github.com/ipfs/go-cidutil v0.1.0 // indirect
- github.com/ipfs/go-datastore v0.5.1 // indirect
- github.com/ipfs/go-delegated-routing v0.3.0 // indirect
+ github.com/ipfs/go-datastore v0.6.0 // indirect
+ github.com/ipfs/go-delegated-routing v0.7.0 // indirect
github.com/ipfs/go-ds-measure v0.2.0 // indirect
github.com/ipfs/go-fetcher v1.6.1 // indirect
github.com/ipfs/go-filestore v1.2.0 // indirect
github.com/ipfs/go-fs-lock v0.0.7 // indirect
- github.com/ipfs/go-graphsync v0.13.1 // indirect
+ github.com/ipfs/go-graphsync v0.14.1 // indirect
+ github.com/ipfs/go-ipfs-blockstore v1.2.0 // indirect
github.com/ipfs/go-ipfs-chunker v0.0.5 // indirect
github.com/ipfs/go-ipfs-delay v0.0.1 // indirect
+ github.com/ipfs/go-ipfs-ds-help v1.1.0 // indirect
github.com/ipfs/go-ipfs-exchange-interface v0.2.0 // indirect
github.com/ipfs/go-ipfs-exchange-offline v0.3.0 // indirect
- github.com/ipfs/go-ipfs-files v0.1.1 // indirect
- github.com/ipfs/go-ipfs-keystore v0.0.2 // indirect
+ github.com/ipfs/go-ipfs-keystore v0.1.0 // indirect
github.com/ipfs/go-ipfs-pinner v0.2.1 // indirect
github.com/ipfs/go-ipfs-posinfo v0.0.1 // indirect
github.com/ipfs/go-ipfs-pq v0.0.2 // indirect
- github.com/ipfs/go-ipfs-provider v0.7.1 // indirect
- github.com/ipfs/go-ipfs-routing v0.2.1 // indirect
+ github.com/ipfs/go-ipfs-provider v0.8.1 // indirect
+ github.com/ipfs/go-ipfs-routing v0.3.0 // indirect
github.com/ipfs/go-ipfs-util v0.0.2 // indirect
- github.com/ipfs/go-ipld-cbor v0.0.5 // indirect
+ github.com/ipfs/go-ipld-cbor v0.0.6 // indirect
github.com/ipfs/go-ipld-format v0.4.0 // indirect
github.com/ipfs/go-ipld-legacy v0.1.1 // indirect
- github.com/ipfs/go-ipns v0.1.2 // indirect
+ github.com/ipfs/go-ipns v0.3.0 // indirect
+ github.com/ipfs/go-libipfs v0.2.0 // indirect
github.com/ipfs/go-log v1.0.5 // indirect
github.com/ipfs/go-log/v2 v2.5.1 // indirect
- github.com/ipfs/go-merkledag v0.6.0 // indirect
+ github.com/ipfs/go-merkledag v0.9.0 // indirect
github.com/ipfs/go-metrics-interface v0.0.1 // indirect
github.com/ipfs/go-mfs v0.2.1 // indirect
- github.com/ipfs/go-namesys v0.5.0 // indirect
+ github.com/ipfs/go-namesys v0.6.0 // indirect
github.com/ipfs/go-path v0.3.0 // indirect
- github.com/ipfs/go-peertaskqueue v0.7.1 // indirect
- github.com/ipfs/go-unixfs v0.4.0 // indirect
- github.com/ipfs/go-unixfsnode v1.4.0 // indirect
- github.com/ipfs/go-verifcid v0.0.1 // indirect
- github.com/ipfs/interface-go-ipfs-core v0.7.0 // indirect
- github.com/ipfs/kubo v0.14.0 // indirect
- github.com/ipld/edelweiss v0.1.4 // indirect
- github.com/ipld/go-codec-dagpb v1.4.0 // indirect
- github.com/ipld/go-ipld-prime v0.17.0 // indirect
+ github.com/ipfs/go-peertaskqueue v0.8.0 // indirect
+ github.com/ipfs/go-unixfs v0.4.2 // indirect
+ github.com/ipfs/go-unixfsnode v1.5.1 // indirect
+ github.com/ipfs/go-verifcid v0.0.2 // indirect
+ github.com/ipfs/interface-go-ipfs-core v0.8.2 // indirect
+ github.com/ipfs/kubo v0.18.1 // indirect
+ github.com/ipld/edelweiss v0.2.0 // indirect
+ github.com/ipld/go-codec-dagpb v1.5.0 // indirect
+ github.com/ipld/go-ipld-prime v0.19.0 // indirect
github.com/jackc/chunkreader/v2 v2.0.1 // indirect
- github.com/jackc/pgconn v1.12.1 // indirect
+ github.com/jackc/pgconn v1.14.0 // indirect
github.com/jackc/pgio v1.0.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
- github.com/jackc/pgproto3/v2 v2.3.0 // indirect
- github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect
- github.com/jackc/pgtype v1.11.0 // indirect
- github.com/jackc/pgx/v4 v4.16.1 // indirect
- github.com/jackc/puddle v1.2.1 // indirect
+ github.com/jackc/pgproto3/v2 v2.3.2 // indirect
+ github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
+ github.com/jackc/pgtype v1.14.0 // indirect
+ github.com/jackc/pgx/v4 v4.18.1 // indirect
+ github.com/jackc/puddle v1.3.0 // indirect
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
github.com/jbenet/goprocess v0.1.4 // indirect
- github.com/jinzhu/copier v0.2.4 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.4 // indirect
- github.com/klauspost/compress v1.15.1 // indirect
- github.com/klauspost/cpuid/v2 v2.0.12 // indirect
- github.com/koron/go-ssdp v0.0.2 // indirect
- github.com/libp2p/go-buffer-pool v0.0.2 // indirect
+ github.com/klauspost/compress v1.15.15 // indirect
+ github.com/klauspost/cpuid/v2 v2.2.1 // indirect
+ github.com/koron/go-ssdp v0.0.3 // indirect
+ github.com/kr/pretty v0.3.1 // indirect
+ github.com/kr/text v0.2.0 // indirect
+ github.com/libp2p/go-buffer-pool v0.1.0 // indirect
github.com/libp2p/go-cidranger v1.1.0 // indirect
github.com/libp2p/go-doh-resolver v0.4.0 // indirect
- github.com/libp2p/go-eventbus v0.2.1 // indirect
- github.com/libp2p/go-flow-metrics v0.0.3 // indirect
- github.com/libp2p/go-libp2p v0.20.3 // indirect
+ github.com/libp2p/go-flow-metrics v0.1.0 // indirect
+ github.com/libp2p/go-libp2p v0.24.2 // indirect
github.com/libp2p/go-libp2p-asn-util v0.2.0 // indirect
- github.com/libp2p/go-libp2p-core v0.16.1 // indirect
- github.com/libp2p/go-libp2p-discovery v0.7.0 // indirect
- github.com/libp2p/go-libp2p-kad-dht v0.16.0 // indirect
- github.com/libp2p/go-libp2p-kbucket v0.4.7 // indirect
- github.com/libp2p/go-libp2p-loggables v0.1.0 // indirect
- github.com/libp2p/go-libp2p-peerstore v0.6.0 // indirect
- github.com/libp2p/go-libp2p-pubsub v0.6.1 // indirect
- github.com/libp2p/go-libp2p-pubsub-router v0.5.0 // indirect
- github.com/libp2p/go-libp2p-record v0.1.3 // indirect
- github.com/libp2p/go-libp2p-resource-manager v0.3.0 // indirect
- github.com/libp2p/go-libp2p-routing-helpers v0.2.3 // indirect
- github.com/libp2p/go-libp2p-swarm v0.11.0 // indirect
+ github.com/libp2p/go-libp2p-kad-dht v0.20.0 // indirect
+ github.com/libp2p/go-libp2p-kbucket v0.5.0 // indirect
+ github.com/libp2p/go-libp2p-pubsub v0.8.3 // indirect
+ github.com/libp2p/go-libp2p-pubsub-router v0.6.0 // indirect
+ github.com/libp2p/go-libp2p-record v0.2.0 // indirect
+ github.com/libp2p/go-libp2p-routing-helpers v0.6.0 // indirect
github.com/libp2p/go-libp2p-xor v0.1.0 // indirect
github.com/libp2p/go-mplex v0.7.0 // indirect
github.com/libp2p/go-msgio v0.2.0 // indirect
github.com/libp2p/go-nat v0.1.0 // indirect
- github.com/libp2p/go-netroute v0.2.0 // indirect
- github.com/libp2p/go-openssl v0.0.7 // indirect
+ github.com/libp2p/go-netroute v0.2.1 // indirect
+ github.com/libp2p/go-openssl v0.1.0 // indirect
github.com/libp2p/go-reuseport v0.2.0 // indirect
- github.com/libp2p/go-yamux/v3 v3.1.2 // indirect
- github.com/libp2p/zeroconf/v2 v2.1.1 // indirect
- github.com/lucas-clemente/quic-go v0.27.1 // indirect
+ github.com/libp2p/go-yamux/v4 v4.0.0 // indirect
+ github.com/libp2p/zeroconf/v2 v2.2.0 // indirect
+ github.com/lucas-clemente/quic-go v0.31.1 // indirect
github.com/magiconair/properties v1.8.6 // indirect
- github.com/marten-seemann/qtls-go1-16 v0.1.5 // indirect
- github.com/marten-seemann/qtls-go1-17 v0.1.1 // indirect
- github.com/marten-seemann/qtls-go1-18 v0.1.1 // indirect
+ github.com/marten-seemann/qpack v0.3.0 // indirect
+ github.com/marten-seemann/qtls-go1-18 v0.1.3 // indirect
+ github.com/marten-seemann/qtls-go1-19 v0.1.1 // indirect
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
- github.com/matryer/is v1.4.0 // indirect
- github.com/mattn/go-colorable v0.1.12 // indirect
- github.com/mattn/go-isatty v0.0.14 // indirect
+ github.com/marten-seemann/webtransport-go v0.4.3 // indirect
+ github.com/matryer/is v1.4.1 // indirect
+ github.com/mattn/go-colorable v0.1.13 // indirect
+ github.com/mattn/go-isatty v0.0.17 // indirect
+ github.com/mattn/go-pointer v0.0.1 // indirect
github.com/mattn/go-runewidth v0.0.9 // indirect
- github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
- github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
- github.com/miekg/dns v1.1.48 // indirect
+ github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
+ github.com/miekg/dns v1.1.50 // indirect
github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect
github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect
github.com/minio/sha256-simd v1.0.0 // indirect
@@ -204,93 +202,86 @@ require (
github.com/mitchellh/mapstructure v1.4.3 // indirect
github.com/mitchellh/pointerstructure v1.2.0 // indirect
github.com/mr-tron/base58 v1.2.0 // indirect
- github.com/multiformats/go-base32 v0.0.4 // indirect
- github.com/multiformats/go-base36 v0.1.0 // indirect
- github.com/multiformats/go-multiaddr v0.5.0 // indirect
+ github.com/multiformats/go-base32 v0.1.0 // indirect
+ github.com/multiformats/go-base36 v0.2.0 // indirect
+ github.com/multiformats/go-multiaddr v0.8.0 // indirect
github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect
github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect
- github.com/multiformats/go-multibase v0.1.0 // indirect
- github.com/multiformats/go-multicodec v0.5.0 // indirect
+ github.com/multiformats/go-multibase v0.1.1 // indirect
+ github.com/multiformats/go-multicodec v0.7.0 // indirect
+ github.com/multiformats/go-multihash v0.2.1 // indirect
github.com/multiformats/go-multistream v0.3.3 // indirect
- github.com/multiformats/go-varint v0.0.6 // indirect
- github.com/nxadm/tail v1.4.8 // indirect
+ github.com/multiformats/go-varint v0.0.7 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/opencontainers/runtime-spec v1.0.2 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
github.com/pelletier/go-toml v1.9.4 // indirect
- github.com/pelletier/go-toml/v2 v2.0.0-beta.8 // indirect
+ github.com/pelletier/go-toml/v2 v2.0.5 // indirect
github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 // indirect
github.com/pganalyze/pg_query_go/v2 v2.1.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e // indirect
- github.com/prometheus/client_model v0.2.0 // indirect
- github.com/prometheus/common v0.33.0 // indirect
- github.com/prometheus/procfs v0.7.3 // indirect
- github.com/prometheus/tsdb v0.10.0 // indirect
- github.com/raulk/clock v1.1.0 // indirect
- github.com/raulk/go-watchdog v1.2.0 // indirect
- github.com/rjeczalik/notify v0.9.1 // indirect
+ github.com/prometheus/client_model v0.3.0 // indirect
+ github.com/prometheus/common v0.39.0 // indirect
+ github.com/prometheus/procfs v0.9.0 // indirect
+ github.com/raulk/go-watchdog v1.3.0 // indirect
+ github.com/rogpeppe/go-internal v1.9.0 // indirect
github.com/rs/cors v1.7.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
+ github.com/samber/lo v1.36.0 // indirect
github.com/segmentio/fasthash v1.0.3 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
- github.com/smartystreets/assertions v1.0.1 // indirect
+ github.com/shopspring/decimal v1.2.0 // indirect
github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/spf13/afero v1.8.2 // indirect
github.com/spf13/cast v1.4.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 // indirect
- github.com/stretchr/objx v0.2.0 // indirect
- github.com/stretchr/testify v1.7.2 // indirect
+ github.com/status-im/keycard-go v0.2.0 // indirect
+ github.com/stretchr/objx v0.5.0 // indirect
+ github.com/stretchr/testify v1.8.1 // indirect
github.com/subosito/gotenv v1.2.0 // indirect
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect
github.com/thoas/go-funk v0.9.2 // indirect
- github.com/tidwall/gjson v1.14.0 // indirect
- github.com/tidwall/match v1.1.1 // indirect
- github.com/tidwall/pretty v1.2.0 // indirect
- github.com/tklauser/go-sysconf v0.3.5 // indirect
- github.com/tklauser/numcpus v0.2.2 // indirect
- github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef // indirect
- github.com/urfave/cli/v2 v2.10.2 // indirect
- github.com/valyala/fastjson v1.6.3 // indirect
- github.com/wI2L/jsondiff v0.2.0 // indirect
+ github.com/tklauser/go-sysconf v0.3.11 // indirect
+ github.com/tklauser/numcpus v0.6.0 // indirect
+ github.com/tyler-smith/go-bip39 v1.1.0 // indirect
+ github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa // indirect
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect
- github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2 // indirect
+ github.com/whyrusleeping/cbor-gen v0.0.0-20221220214510-0333c149dec0 // indirect
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f // indirect
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 // indirect
- github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
- go.opencensus.io v0.23.0 // indirect
+ go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/otel v1.7.0 // indirect
go.opentelemetry.io/otel/trace v1.7.0 // indirect
- go.uber.org/atomic v1.9.0 // indirect
- go.uber.org/dig v1.14.0 // indirect
- go.uber.org/fx v1.16.0 // indirect
- go.uber.org/multierr v1.8.0 // indirect
- go.uber.org/zap v1.21.0 // indirect
+ go.uber.org/atomic v1.10.0 // indirect
+ go.uber.org/dig v1.15.0 // indirect
+ go.uber.org/fx v1.18.2 // indirect
+ go.uber.org/multierr v1.9.0 // indirect
+ go.uber.org/zap v1.24.0 // indirect
go4.org v0.0.0-20200411211856-f5505b9728dd // indirect
- golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 // indirect
- golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
- golang.org/x/net v0.0.0-20220607020251-c690dde0001d // indirect
- golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
- golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
- golang.org/x/text v0.3.7 // indirect
- golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect
- golang.org/x/tools v0.1.10 // indirect
- golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect
- google.golang.org/protobuf v1.28.0 // indirect
- gopkg.in/ini.v1 v1.66.4 // indirect
+ golang.org/x/crypto v0.6.0 // indirect
+ golang.org/x/exp v0.0.0-20230206171751-46f607a40771 // indirect
+ golang.org/x/mod v0.9.0 // indirect
+ golang.org/x/net v0.8.0 // indirect
+ golang.org/x/sync v0.1.0 // indirect
+ golang.org/x/sys v0.6.0 // indirect
+ golang.org/x/text v0.8.0 // indirect
+ golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect
+ golang.org/x/tools v0.7.0 // indirect
+ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
+ google.golang.org/protobuf v1.28.1 // indirect
+ gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect
- gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
lukechampine.com/blake3 v1.1.7 // indirect
)
-replace github.com/ethereum/go-ethereum v1.10.26 => github.com/cerc-io/go-ethereum v1.10.26-statediff-4.2.2-alpha
+replace github.com/ethereum/go-ethereum v1.11.5 => github.com/cerc-io/go-ethereum v1.11.5-statediff-5.0.5-alpha
diff --git a/go.sum b/go.sum
index 7d885c28..9070a3c4 100644
--- a/go.sum
+++ b/go.sum
@@ -45,7 +45,6 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f
collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE=
dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU=
dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4=
dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU=
@@ -56,21 +55,27 @@ github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIo
github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno=
+github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo=
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
+github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8=
+github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
+github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y=
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
+github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
-github.com/Stebalien/go-bitfield v0.0.1 h1:X3kbSSPUaJK60wV2hjOPZwmpljr6VGCqdq4cBLhbQBo=
github.com/Stebalien/go-bitfield v0.0.1/go.mod h1:GNjFpasyUVkHMsfEOk8EFLJ9syQ6SI+XWrX9Wf2XH0s=
github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o=
github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw=
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
+github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
@@ -84,7 +89,6 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah
github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
-github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
@@ -96,8 +100,7 @@ github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6l
github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
-github.com/benbjohnson/clock v1.0.2/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
-github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
+github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
@@ -117,18 +120,14 @@ github.com/btcsuite/btcd v0.0.0-20190605094302-a0d1e3e36d50/go.mod h1:3J08xEfcug
github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI=
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94=
-github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA=
-github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c=
-github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y=
+github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo=
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
-github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
-github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
+github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 h1:KdUfX2zKommPRa+PD0sWZUyXe9w277ABlgELO7H04IM=
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts=
-github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o=
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY=
github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I=
@@ -145,55 +144,62 @@ github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8
github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/ceramicnetwork/go-dag-jose v0.1.0 h1:yJ/HVlfKpnD3LdYP03AHyTvbm3BpPiz2oZiOeReJRdU=
-github.com/cerc-io/eth-ipfs-state-validator/v4 v4.0.10-alpha h1:3titSea2MxnhOTRfsFenOV3Nz8AhHt3YZXzO+4Wqnro=
-github.com/cerc-io/eth-ipfs-state-validator/v4 v4.0.10-alpha/go.mod h1:i7PVGu+1jo8aPnRT70ZU+PZrxw1s8tCOzHPWAMJ+Dw8=
-github.com/cerc-io/go-eth-state-node-iterator v1.1.9 h1:ecwgx8ri3VOux9LuFy5N6W+/aWca+aORNBwMoxfdPC8=
-github.com/cerc-io/go-eth-state-node-iterator v1.1.9/go.mod h1:cTRY0YXObI0ILZ19/oopchujJZTxQnkLbJJNXVdZii0=
-github.com/cerc-io/go-ethereum v1.10.26-statediff-4.2.2-alpha h1:gesMZEbNU+fcAMctITi+KO/AK80YdTq6TVB5lb4EfnU=
-github.com/cerc-io/go-ethereum v1.10.26-statediff-4.2.2-alpha/go.mod h1:lKBVBWksSwBDR/5D9CAxaGQzDPIS3ueWb6idy7X1Shg=
-github.com/cerc-io/ipfs-ethdb/v4 v4.0.10-alpha h1:5iqNXeitkj3g7FxyKK/Pz+1HN7Ac9JZzCRj3Lv+uHiw=
-github.com/cerc-io/ipfs-ethdb/v4 v4.0.10-alpha/go.mod h1:dPscFRMvTWPKnoZ4U0D9v4bsrw6XdH7sOp8hUrVzOWA=
+github.com/cerc-io/eth-ipfs-state-validator/v5 v5.0.0-alpha h1:TGCr/v0CrDsz1Mjr4000omuEGw7RNdn+OYqIivlF3+Q=
+github.com/cerc-io/eth-ipfs-state-validator/v5 v5.0.0-alpha/go.mod h1:t+1UYws60dkLRecMN2NXl4LlKxQBLjhDh34swi6Jcvc=
+github.com/cerc-io/go-ethereum v1.11.5-statediff-5.0.5-alpha h1:Rj/5+dDbYWa5k58g7h1jNytbWa0NY8IEKExFWaI8bcA=
+github.com/cerc-io/go-ethereum v1.11.5-statediff-5.0.5-alpha/go.mod h1:DIk2wFexjyzvyjuzSOtBEIAPRNZTnLXNbIHEyq1Igek=
+github.com/cerc-io/ipfs-ethdb/v5 v5.0.0-alpha h1:I1iXTaIjbTH8ehzNXmT2waXcYBifi1yjK6FK3W3a0Pg=
+github.com/cerc-io/ipfs-ethdb/v5 v5.0.0-alpha/go.mod h1:EGAdV/YewEADFDDVF1k9GNwy8vNWR29Xb87sRHgMIng=
+github.com/cerc-io/ipld-eth-statedb v0.0.5-alpha h1:olsE5OCvfTrQGLE5T2Z4VYOfx8n5ONgciKdEW5I0x3I=
+github.com/cerc-io/ipld-eth-statedb v0.0.5-alpha/go.mod h1:6XprlGrhm65KkHesgcLwgIHWD0TvbkQ3T9ZsfBXKvsk=
github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk=
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE=
+github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs=
-github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
-github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I=
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
github.com/cockroachdb/cockroach-go/v2 v2.0.3 h1:ZA346ACHIZctef6trOTwBAEvPVm1k0uLm/bb2Atc+S8=
github.com/cockroachdb/cockroach-go/v2 v2.0.3/go.mod h1:hAuDgiVgDVkfirP9JnhXEfcXEPRKBpYdGz+l7mvYSzw=
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
+github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA=
+github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
+github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8=
+github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk=
+github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
+github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=
+github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs=
+github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 h1:ytcWPaNPhNoGMWEhDvS3zToKcDpRsLuRolQJBVGdozk=
+github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811/go.mod h1:Nb5lgvnQ2+oGlE/EyZy4+2/CxRh9KfvCXnag1vtpxVM=
+github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ=
+github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
+github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
-github.com/containerd/cgroups v1.0.3 h1:ADZftAkglvCiD44c77s5YmMqaP2pzVCFZvBmAlBdAP4=
-github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8=
+github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA=
+github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-semver v0.2.1-0.20180108230905-e214231b295a/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
-github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
-github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
+github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
+github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
@@ -216,12 +222,11 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4=
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU=
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U=
-github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4=
-github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo=
+github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI=
+github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4=
github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0=
-github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
-github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc=
-github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
+github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4=
+github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc=
github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218=
github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M=
github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU=
@@ -239,10 +244,10 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm
github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ=
github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
-github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/docker/docker v1.6.2 h1:HlFGsy+9/xrgMmhmN+NGhCc5SHGJ7I+kHosRR1xc/aI=
-github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
+github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
@@ -252,25 +257,30 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP
github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts=
github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
+github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM=
github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs=
github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4=
github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs=
+github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
+github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
-github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
+github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 h1:BBso6MBKW8ncyZLv37o+KNyy0HrrHgfnOaGQC2qvN+A=
github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5/go.mod h1:JpoxHjuQauoxiFMl1ie8Xc/7TfLuMZ5eOCONd1sUBHg=
+github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c=
github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0=
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
-github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6/go.mod h1:1i71OnUq3iUe1ma7Lr6yG6/rjvM3emb6yoL7xLFzcVQ=
github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ=
github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
@@ -279,48 +289,48 @@ github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiD
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
-github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og=
-github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
-github.com/friendsofgo/graphiql v0.2.2 h1:ccnuxpjgIkB+Lr9YB2ZouiZm7wvciSfqwpa9ugWzmn0=
-github.com/friendsofgo/graphiql v0.2.2/go.mod h1:8Y2kZ36AoTGWs78+VRpvATyt3LJBx0SZXmay80ZTRWo=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
-github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
+github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
+github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
+github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc=
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI=
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww=
github.com/georgysavva/scany v0.2.9 h1:Xt6rjYpHnMClTm/g+oZTnoSxUwiln5GqMNU+QeLNHQU=
github.com/georgysavva/scany v0.2.9/go.mod h1:yeOeC1BdIdl6hOwy8uefL2WNSlseFzbhlG/frrh65SA=
github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4=
github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4=
+github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c=
+github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0=
+github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
+github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98=
github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs=
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
+github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo=
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
-github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
-github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
@@ -329,19 +339,28 @@ github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
-github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I=
+github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw=
+github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4=
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
+github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
+github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
+github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
+github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
+github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
@@ -349,6 +368,8 @@ github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM=
+github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog=
github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
@@ -387,14 +408,15 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
+github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y=
+github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
@@ -409,9 +431,9 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
-github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
+github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
+github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -432,6 +454,8 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20221203041831-ce31453925ec h1:fR20TYVVwhK4O7r7y+McjRYyaTH6/vjwJOajE+XhlzM=
+github.com/google/pprof v0.0.0-20221203041831-ce31453925ec/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -445,12 +469,12 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4=
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f h1:KMlcu9X58lhTA/KrfX8Bi1LQSO4pzoVjTiL3h4Jk+Zk=
-github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
@@ -460,19 +484,15 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0=
github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc=
-github.com/graphql-go/graphql v0.7.9 h1:5Va/Rt4l5g3YjwDnid3vFfn43faaQBq7rMcIZ0VnV34=
-github.com/graphql-go/graphql v0.7.9/go.mod h1:k6yrAYQaSP59DC5UVxbgxESlmVyojThKdORUqGDGmrI=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
+github.com/grpc-ecosystem/grpc-gateway v1.9.5 h1:UImYN5qQ8tuGpGE16ZmjvcTtTw24zw1QAp/SlnNrZhI=
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
-github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
-github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0=
github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU=
github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48=
-github.com/hannahhoward/cbor-gen-for v0.0.0-20200817222906-ea96cece81f1/go.mod h1:jvfsLIxk0fY/2BKSQ1xf2406AKA5dwMmKKv0ADcOfN8=
github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e h1:3YKHER4nmd7b5qy5t0GWDTwSn4OyRgfAXSmo6VnryBY=
github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e/go.mod h1:I8h3MITA53gN9OnWGCgaMa0JWVRdXthWw4M3CPM54OY=
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
@@ -486,7 +506,6 @@ github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
-github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
@@ -514,12 +533,13 @@ github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc=
-github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM=
github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ=
github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y=
github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o=
+github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY=
@@ -542,26 +562,21 @@ github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
github.com/ipfs/go-bitfield v1.0.0 h1:y/XHm2GEmD9wKngheWNNCNL0pzrWXZwCdQGv1ikXknQ=
github.com/ipfs/go-bitfield v1.0.0/go.mod h1:N/UiujQy+K+ceU1EF5EkVd1TNqevLrCQMIcAEPrdtus=
-github.com/ipfs/go-bitswap v0.0.9/go.mod h1:kAPf5qgn2W2DrgAcscZ3HrM9qh4pH+X8Fkk3UPrwvis=
github.com/ipfs/go-bitswap v0.1.0/go.mod h1:FFJEf18E9izuCqUtHxbWEvq+reg7o4CW5wSAE1wsxj0=
github.com/ipfs/go-bitswap v0.1.2/go.mod h1:qxSWS4NXGs7jQ6zQvoPY3+NmOfHHG47mhkiLzBpJQIs=
-github.com/ipfs/go-bitswap v0.1.8/go.mod h1:TOWoxllhccevbWFUR2N7B1MTSVVge1s6XSMiCSA4MzM=
-github.com/ipfs/go-bitswap v0.3.4/go.mod h1:4T7fvNv/LmOys+21tnLzGKncMeeXUYUd1nUiJ2teMvI=
github.com/ipfs/go-bitswap v0.5.1/go.mod h1:P+ckC87ri1xFLvk74NlXdP0Kj9RmWAh4+H78sC6Qopo=
github.com/ipfs/go-bitswap v0.6.0/go.mod h1:Hj3ZXdOC5wBJvENtdqsixmzzRukqd8EHLxZLZc3mzRA=
-github.com/ipfs/go-bitswap v0.8.0 h1:UEV7kogQu2iGggkE9GhLykDrRCUpsNnpu2NODww/srw=
-github.com/ipfs/go-bitswap v0.8.0/go.mod h1:/h8sBij8UVEaNWl8ABzpLRA5Y1cttdNUnpeGo2AA/LQ=
+github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ=
+github.com/ipfs/go-bitswap v0.11.0/go.mod h1:05aE8H3XOU+LXpTedeAS0OZpcO1WFsj5niYQH9a1Tmk=
github.com/ipfs/go-block-format v0.0.1/go.mod h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc=
github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY=
github.com/ipfs/go-block-format v0.0.3 h1:r8t66QstRp/pd/or4dpnbVfXT5Gt7lOqRvC+/dDTpMc=
github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk=
-github.com/ipfs/go-blockservice v0.0.7/go.mod h1:EOfb9k/Y878ZTRY/CH0x5+ATtaipfbRhbvNSdgc/7So=
github.com/ipfs/go-blockservice v0.1.0/go.mod h1:hzmMScl1kXHg3M2BjTymbVPjv627N7sYcvYaKbop39M=
-github.com/ipfs/go-blockservice v0.1.4/go.mod h1:OTZhFpkgY48kNzbgyvcexW9cHrpjBYIjSR0KoDOFOLU=
github.com/ipfs/go-blockservice v0.2.1/go.mod h1:k6SiwmgyYgs4M/qt+ww6amPeUH9EISLRBnvUurKJhi8=
github.com/ipfs/go-blockservice v0.3.0/go.mod h1:P5ppi8IHDC7O+pA0AlGTF09jruB2h+oP3wVVaZl8sfk=
-github.com/ipfs/go-blockservice v0.4.0 h1:7MUijAW5SqdsqEW/EhnNFRJXVF8mGU5aGhZ3CQaCWbY=
-github.com/ipfs/go-blockservice v0.4.0/go.mod h1:kRjO3wlGW9mS1aKuiCeGhx9K1DagQ10ACpVO59qgAx4=
+github.com/ipfs/go-blockservice v0.5.0 h1:B2mwhhhVQl2ntW2EIpaWPwSCxSuqr5fFA93Ms4bYLEY=
+github.com/ipfs/go-blockservice v0.5.0/go.mod h1:W6brZ5k20AehbmERplmERn8o2Ni3ZZubvAxaIUeaT6w=
github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM=
github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM=
github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM=
@@ -570,9 +585,8 @@ github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67Fexh
github.com/ipfs/go-cid v0.0.6/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I=
github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I=
github.com/ipfs/go-cid v0.1.0/go.mod h1:rH5/Xv83Rfy8Rw6xG+id3DYAMUVmem1MowoKwdXmN2o=
-github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0=
-github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro=
-github.com/ipfs/go-cidutil v0.0.2/go.mod h1:ewllrvrxG6AMYStla3GD7Cqn+XYSLqjK0vc+086tB6s=
+github.com/ipfs/go-cid v0.3.2 h1:OGgOd+JCFM+y1DjWPmVH+2/4POtpDzwcr7VgnB7mZXc=
+github.com/ipfs/go-cid v0.3.2/go.mod h1:gQ8pKqT/sUxGY+tIwy1RPpAojYu7jAyCp5Tz1svoupw=
github.com/ipfs/go-cidutil v0.1.0 h1:RW5hO7Vcf16dplUU60Hs0AKDkQAVPVplr7lk97CFL+Q=
github.com/ipfs/go-cidutil v0.1.0/go.mod h1:e7OEVBMIv9JaOxt9zaGEmAoSlXW9jdFZ5lP/0PwcfpA=
github.com/ipfs/go-datastore v0.0.1/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE=
@@ -585,10 +599,10 @@ github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13X
github.com/ipfs/go-datastore v0.4.4/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA=
github.com/ipfs/go-datastore v0.4.5/go.mod h1:eXTcaaiN6uOlVCLS9GjJUJtlvJfM3xk23w3fyfrmmJs=
github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk=
-github.com/ipfs/go-datastore v0.5.1 h1:WkRhLuISI+XPD0uk3OskB0fYFSyqK8Ob5ZYew9Qa1nQ=
-github.com/ipfs/go-datastore v0.5.1/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk=
-github.com/ipfs/go-delegated-routing v0.3.0 h1:pF5apOJ/xdQkj22mRahW9GmSuCkgMLparKZWKJBO4CE=
-github.com/ipfs/go-delegated-routing v0.3.0/go.mod h1:2w79E1/G9YOaxyJJQgqIFSQaa/GdS2zSATEpK8aJUBM=
+github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk=
+github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8=
+github.com/ipfs/go-delegated-routing v0.7.0 h1:43FyMnKA+8XnyX68Fwg6aoGkqrf8NS5aG7p644s26PU=
+github.com/ipfs/go-delegated-routing v0.7.0/go.mod h1:u4zxjUWIe7APUW5ds9CfD0tJX3vM9JhIeNqA8kE4vHE=
github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk=
github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps=
github.com/ipfs/go-ds-badger v0.0.2/go.mod h1:Y3QpeSFWQf6MopLTiZD+VT6IC1yZqaGmjvRcKeSGij8=
@@ -596,7 +610,6 @@ github.com/ipfs/go-ds-badger v0.0.5/go.mod h1:g5AuuCGmr7efyzQhLL8MzwqcauPojGPUaH
github.com/ipfs/go-ds-badger v0.0.7/go.mod h1:qt0/fWzZDoPW6jpQeqUjR5kBfhDNB65jd9YlmAvpQBk=
github.com/ipfs/go-ds-badger v0.2.1/go.mod h1:Tx7l3aTph3FMFrRS838dcSJh+jjA7cX9DrGVwx/NOwE=
github.com/ipfs/go-ds-badger v0.2.3/go.mod h1:pEYw0rgg3FIrywKKnL+Snr+w/LjJZVMTBRn4FS6UHUk=
-github.com/ipfs/go-ds-badger v0.2.7/go.mod h1:02rnztVKA4aZwDuaRPTf8mpqcKmXP7mLl6JPxd14JHA=
github.com/ipfs/go-ds-badger v0.3.0 h1:xREL3V0EH9S219kFFueOYJJTcjgNSZ2HY1iSvN7U1Ro=
github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek=
github.com/ipfs/go-ds-flatfs v0.5.1 h1:ZCIO/kQOS/PSh3vcF1H6a8fkRGS7pOfwfPdx4n/KJH4=
@@ -608,20 +621,17 @@ github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUN
github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q=
github.com/ipfs/go-ds-measure v0.2.0 h1:sG4goQe0KDTccHMyT45CY1XyUbxe5VwTKpg2LjApYyQ=
github.com/ipfs/go-ds-measure v0.2.0/go.mod h1:SEUD/rE2PwRa4IQEC5FuNAmjJCyYObZr9UvVh8V3JxE=
-github.com/ipfs/go-fetcher v1.5.0/go.mod h1:5pDZ0393oRF/fHiLmtFZtpMNBQfHOYNPtryWedVuSWE=
github.com/ipfs/go-fetcher v1.6.1 h1:UFuRVYX5AIllTiRhi5uK/iZkfhSpBCGX7L70nSZEmK8=
github.com/ipfs/go-fetcher v1.6.1/go.mod h1:27d/xMV8bodjVs9pugh/RCjjK2OZ68UgAMspMdingNo=
github.com/ipfs/go-filestore v1.2.0 h1:O2wg7wdibwxkEDcl7xkuQsPvJFRBVgVSsOJ/GP6z3yU=
github.com/ipfs/go-filestore v1.2.0/go.mod h1:HLJrCxRXquTeEEpde4lTLMaE/MYJZD7WHLkp9z6+FF8=
github.com/ipfs/go-fs-lock v0.0.7 h1:6BR3dajORFrFTkb5EpCUFIAypsoxpGpDSVUdFwzgL9U=
github.com/ipfs/go-fs-lock v0.0.7/go.mod h1:Js8ka+FNYmgQRLrRXzU3CB/+Csr1BwrRilEcvYrHhhc=
-github.com/ipfs/go-graphsync v0.13.1 h1:lWiP/WLycoPUYyj3IDEi1GJNP30kFuYOvimcfeuZyQs=
-github.com/ipfs/go-graphsync v0.13.1/go.mod h1:y8e8G6CmZeL9Srvx1l15CtGiRdf3h5JdQuqPz/iYL0A=
+github.com/ipfs/go-graphsync v0.14.1 h1:tvFpBY9LcehIB7zi5SZIa+7aoxBOrGbdekhOXdnlT70=
+github.com/ipfs/go-graphsync v0.14.1/go.mod h1:S6O/c5iXOXqDgrQgiZSgOTRUSiVvpKEhrzqFHKnLVcs=
github.com/ipfs/go-ipfs-blockstore v0.0.1/go.mod h1:d3WClOmRQKFnJ0Jz/jj/zmksX0ma1gROTlovZKBmN08=
github.com/ipfs/go-ipfs-blockstore v0.1.0/go.mod h1:5aD0AvHPi7mZc6Ci1WCAhiBQu2IsfTduLl+422H6Rqw=
-github.com/ipfs/go-ipfs-blockstore v0.1.4/go.mod h1:Jxm3XMVjh6R17WvxFEiyKBLUGr86HgIYJW/D/MwqeYQ=
github.com/ipfs/go-ipfs-blockstore v0.2.1/go.mod h1:jGesd8EtCM3/zPgx+qr0/feTXGUeRai6adgwC+Q+JvE=
-github.com/ipfs/go-ipfs-blockstore v1.1.2/go.mod h1:w51tNR9y5+QXB0wkNcHt4O2aSZjTdqaEWaQdSxEyUOY=
github.com/ipfs/go-ipfs-blockstore v1.2.0 h1:n3WTeJ4LdICWs/0VSfjHrlqpPpl6MZ+ySd3j8qz0ykw=
github.com/ipfs/go-ipfs-blockstore v1.2.0/go.mod h1:eh8eTFLiINYNSNawfZOC7HOxNTxpB1PFuA5E1m/7exE=
github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ=
@@ -646,11 +656,8 @@ github.com/ipfs/go-ipfs-exchange-offline v0.2.0/go.mod h1:HjwBeW0dvZvfOMwDP0TSKX
github.com/ipfs/go-ipfs-exchange-offline v0.3.0 h1:c/Dg8GDPzixGd0MC8Jh6mjOwU57uYokgWRFidfvEkuA=
github.com/ipfs/go-ipfs-exchange-offline v0.3.0/go.mod h1:MOdJ9DChbb5u37M1IcbrRB02e++Z7521fMxqCNRrz9s=
github.com/ipfs/go-ipfs-files v0.0.3/go.mod h1:INEFm0LL2LWXBhNJ2PMIIb2w45hpXgPjNoE7yA8Y1d4=
-github.com/ipfs/go-ipfs-files v0.0.8/go.mod h1:wiN/jSG8FKyk7N0WyctKSvq3ljIa2NNTiZB55kpTdOs=
-github.com/ipfs/go-ipfs-files v0.1.1 h1:/MbEowmpLo9PJTEQk16m9rKzUHjeP4KRU9nWJyJO324=
-github.com/ipfs/go-ipfs-files v0.1.1/go.mod h1:8xkIrMWH+Y5P7HvJ4Yc5XWwIW2e52dyXUiC0tZyjDbM=
-github.com/ipfs/go-ipfs-keystore v0.0.2 h1:Fa9xg9IFD1VbiZtrNLzsD0GuELVHUFXCWF64kCPfEXU=
-github.com/ipfs/go-ipfs-keystore v0.0.2/go.mod h1:H49tRmibOEs7gLMgbOsjC4dqh1u5e0R/SWuc2ScfgSo=
+github.com/ipfs/go-ipfs-keystore v0.1.0 h1:gfuQUO/cyGZgZIHE6OrJas4OnwuxXCqJG7tI0lrB5Qc=
+github.com/ipfs/go-ipfs-keystore v0.1.0/go.mod h1:LvLw7Qhnb0RlMOfCzK6OmyWxICip6lQ06CCmdbee75U=
github.com/ipfs/go-ipfs-pinner v0.2.1 h1:kw9hiqh2p8TatILYZ3WAfQQABby7SQARdrdA+5Z5QfY=
github.com/ipfs/go-ipfs-pinner v0.2.1/go.mod h1:l1AtLL5bovb7opnG77sh4Y10waINz3Y1ni6CvTzx7oo=
github.com/ipfs/go-ipfs-posinfo v0.0.1 h1:Esoxj+1JgSjX0+ylc0hUmJCOv6V2vFoZiETLR6OtpRs=
@@ -658,20 +665,20 @@ github.com/ipfs/go-ipfs-posinfo v0.0.1/go.mod h1:SwyeVP+jCwiDu0C313l/8jg6ZxM0qqt
github.com/ipfs/go-ipfs-pq v0.0.1/go.mod h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY=
github.com/ipfs/go-ipfs-pq v0.0.2 h1:e1vOOW6MuOwG2lqxcLA+wEn93i/9laCY8sXAw76jFOY=
github.com/ipfs/go-ipfs-pq v0.0.2/go.mod h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY=
-github.com/ipfs/go-ipfs-provider v0.7.1 h1:eKToBUAb6ZY8iiA6AYVxzW4G1ep67XUaaEBUIYpxhfw=
-github.com/ipfs/go-ipfs-provider v0.7.1/go.mod h1:QwdDYRYnC5sYGLlOwVDY/0ZB6T3zcMtu+5+GdGeUuw8=
-github.com/ipfs/go-ipfs-routing v0.0.1/go.mod h1:k76lf20iKFxQTjcJokbPM9iBXVXVZhcOwc360N4nuKs=
+github.com/ipfs/go-ipfs-provider v0.8.1 h1:qt670pYmcNH3BCjyXDgg07o2WsTRsOdMwYc25ukCdjQ=
+github.com/ipfs/go-ipfs-provider v0.8.1/go.mod h1:qCpwpoohIRVXvNzkygzsM3qdqP/sXlrogtA5I45tClc=
github.com/ipfs/go-ipfs-routing v0.1.0/go.mod h1:hYoUkJLyAUKhF58tysKpids8RNDPO42BVMgK5dNsoqY=
-github.com/ipfs/go-ipfs-routing v0.2.1 h1:E+whHWhJkdN9YeoHZNj5itzc+OR292AJ2uE9FFiW0BY=
github.com/ipfs/go-ipfs-routing v0.2.1/go.mod h1:xiNNiwgjmLqPS1cimvAw6EyB9rkVDbiocA4yY+wRNLM=
+github.com/ipfs/go-ipfs-routing v0.3.0 h1:9W/W3N+g+y4ZDeffSgqhgo7BsBSJwPMcyssET9OWevc=
+github.com/ipfs/go-ipfs-routing v0.3.0/go.mod h1:dKqtTFIql7e1zYsEuWLyuOU+E0WJWW8JjbTPLParDWo=
github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc=
github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8=
github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ=
github.com/ipfs/go-ipld-cbor v0.0.2/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc=
github.com/ipfs/go-ipld-cbor v0.0.3/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc=
-github.com/ipfs/go-ipld-cbor v0.0.4/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4=
-github.com/ipfs/go-ipld-cbor v0.0.5 h1:ovz4CHKogtG2KB/h1zUp5U0c/IzZrL435rCh5+K/5G8=
github.com/ipfs/go-ipld-cbor v0.0.5/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4=
+github.com/ipfs/go-ipld-cbor v0.0.6 h1:pYuWHyvSpIsOOLw4Jy7NbBkCyzLDcl64Bf/LZW7eBQ0=
+github.com/ipfs/go-ipld-cbor v0.0.6/go.mod h1:ssdxxaLJPXH7OjF5V4NSjBbcfh+evoR4ukuru0oPXMA=
github.com/ipfs/go-ipld-format v0.0.1/go.mod h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms=
github.com/ipfs/go-ipld-format v0.0.2/go.mod h1:4B6+FM2u9OJ9zCV+kSbgFAZlOrv1Hqbf0INGQgiKf9k=
github.com/ipfs/go-ipld-format v0.2.0/go.mod h1:3l3C1uKoadTPbeNfrDi+xMInYKlx2Cvg1BuydPSdzQs=
@@ -682,8 +689,10 @@ github.com/ipfs/go-ipld-git v0.1.1 h1:TWGnZjS0htmEmlMFEkA3ogrNCqWjIxwr16x1OsdhG+
github.com/ipfs/go-ipld-legacy v0.1.0/go.mod h1:86f5P/srAmh9GcIcWQR9lfFLZPrIyyXQeVlOWeeWEuI=
github.com/ipfs/go-ipld-legacy v0.1.1 h1:BvD8PEuqwBHLTKqlGFTHSwrwFOMkVESEvwIYwR2cdcc=
github.com/ipfs/go-ipld-legacy v0.1.1/go.mod h1:8AyKFCjgRPsQFf15ZQgDB8Din4DML/fOmKZkkFkrIEg=
-github.com/ipfs/go-ipns v0.1.2 h1:O/s/0ht+4Jl9+VoxoUo0zaHjnZUS+aBQIKTuzdZ/ucI=
-github.com/ipfs/go-ipns v0.1.2/go.mod h1:ioQ0j02o6jdIVW+bmi18f4k2gRf0AV3kZ9KeHYHICnQ=
+github.com/ipfs/go-ipns v0.3.0 h1:ai791nTgVo+zTuq2bLvEGmWP1M0A6kGTXUsgv/Yq67A=
+github.com/ipfs/go-ipns v0.3.0/go.mod h1:3cLT2rbvgPZGkHJoPO1YMJeh6LtkxopCkKFcio/wE24=
+github.com/ipfs/go-libipfs v0.2.0 h1:MedvelDEddPYL3iDLoqAsviLeXUiwB1F2t8fkzx9/EU=
+github.com/ipfs/go-libipfs v0.2.0/go.mod h1:qX0d9h+wu53PFtCTXxdXVBakd6ZCvGDdkZUKmdLMLx0=
github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM=
github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk=
github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A=
@@ -696,64 +705,57 @@ github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscw
github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM=
github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g=
github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g=
-github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI=
github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY=
github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI=
-github.com/ipfs/go-merkledag v0.0.6/go.mod h1:QYPdnlvkOg7GnQRofu9XZimC5ZW5Wi3bKys/4GQQfto=
github.com/ipfs/go-merkledag v0.2.3/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk=
github.com/ipfs/go-merkledag v0.3.2/go.mod h1:fvkZNNZixVW6cKSZ/JfLlON5OlgTXNdRLz0p6QG/I2M=
github.com/ipfs/go-merkledag v0.5.1/go.mod h1:cLMZXx8J08idkp5+id62iVftUQV+HlYJ3PIhDfZsjA4=
-github.com/ipfs/go-merkledag v0.6.0 h1:oV5WT2321tS4YQVOPgIrWHvJ0lJobRTerU+i9nmUCuA=
github.com/ipfs/go-merkledag v0.6.0/go.mod h1:9HSEwRd5sV+lbykiYP+2NC/3o6MZbKNaa4hfNcH5iH0=
+github.com/ipfs/go-merkledag v0.9.0 h1:DFC8qZ96Dz1hMT7dtIpcY524eFFDiEWAF8hNJHWW2pk=
+github.com/ipfs/go-merkledag v0.9.0/go.mod h1:bPHqkHt5OZ0p1n3iqPeDiw2jIBkjAytRjS3WSBwjq90=
github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg=
github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY=
github.com/ipfs/go-mfs v0.2.1 h1:5jz8+ukAg/z6jTkollzxGzhkl3yxm022Za9f2nL5ab8=
github.com/ipfs/go-mfs v0.2.1/go.mod h1:Woj80iuw4ajDnIP6+seRaoHpPsc9hmL0pk/nDNDWP88=
-github.com/ipfs/go-namesys v0.5.0 h1:vZEkdqxRiSnxBBJrvYTkwHYBFgibGUSpNtg9BHRyN+o=
-github.com/ipfs/go-namesys v0.5.0/go.mod h1:zZOme8KDAUYDl4f5MnWSiTRhoxcM7kLkZIyps/HV/S0=
-github.com/ipfs/go-path v0.0.7/go.mod h1:6KTKmeRnBXgqrTvzFrPV3CamxcgvXX/4z79tfAd2Sno=
-github.com/ipfs/go-path v0.0.9/go.mod h1:VpDkSBKQ9EFQOUgi54Tq/O/tGi8n1RfYNks13M3DEs8=
+github.com/ipfs/go-namesys v0.6.0 h1:w4+Wq9bCILnuZRT1RBBdzZQFqtJeDG1duzN8mIDnHZ0=
+github.com/ipfs/go-namesys v0.6.0/go.mod h1:0L+3CHBgHxr08Cg+chVo9Ew285PGQfToThjll4g0/d4=
github.com/ipfs/go-path v0.2.1/go.mod h1:NOScsVgxfC/eIw4nz6OiGwK42PjaSJ4Y/ZFPn1Xe07I=
github.com/ipfs/go-path v0.3.0 h1:tkjga3MtpXyM5v+3EbRvOHEoo+frwi4oumw5K+KYWyA=
github.com/ipfs/go-path v0.3.0/go.mod h1:NOScsVgxfC/eIw4nz6OiGwK42PjaSJ4Y/ZFPn1Xe07I=
-github.com/ipfs/go-peertaskqueue v0.0.4/go.mod h1:03H8fhyeMfKNFWqzYEVyMbcPUeYrqP1MX6Kd+aN+rMQ=
github.com/ipfs/go-peertaskqueue v0.1.0/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U=
-github.com/ipfs/go-peertaskqueue v0.1.1/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U=
-github.com/ipfs/go-peertaskqueue v0.2.0/go.mod h1:5/eNrBEbtSKWCG+kQK8K8fGNixoYUnr+P7jivavs9lY=
github.com/ipfs/go-peertaskqueue v0.7.0/go.mod h1:M/akTIE/z1jGNXMU7kFB4TeSEFvj68ow0Rrb04donIU=
-github.com/ipfs/go-peertaskqueue v0.7.1 h1:7PLjon3RZwRQMgOTvYccZ+mjzkmds/7YzSWKFlBAypE=
-github.com/ipfs/go-peertaskqueue v0.7.1/go.mod h1:M/akTIE/z1jGNXMU7kFB4TeSEFvj68ow0Rrb04donIU=
+github.com/ipfs/go-peertaskqueue v0.8.0 h1:JyNO144tfu9bx6Hpo119zvbEL9iQ760FHOiJYsUjqaU=
+github.com/ipfs/go-peertaskqueue v0.8.0/go.mod h1:cz8hEnnARq4Du5TGqiWKgMr/BOSQ5XOgMOh1K5YYKKM=
github.com/ipfs/go-unixfs v0.2.4/go.mod h1:SUdisfUjNoSDzzhGVxvCL9QO/nKdwXdr+gbMUdqcbYw=
github.com/ipfs/go-unixfs v0.3.1/go.mod h1:h4qfQYzghiIc8ZNFKiLMFWOTzrWIAtzYQ59W/pCFf1o=
-github.com/ipfs/go-unixfs v0.4.0 h1:qSyyxfB/OiDdWHYiSbyaqKC7zfSE/TFL0QdwkRjBm20=
-github.com/ipfs/go-unixfs v0.4.0/go.mod h1:I7Nqtm06HgOOd+setAoCU6rf/HgVFHE+peeNuOv/5+g=
+github.com/ipfs/go-unixfs v0.4.2 h1:hdQlsHHK5tek9gC9mjGVua8xyTqC+eopGseCRcbCZNg=
+github.com/ipfs/go-unixfs v0.4.2/go.mod h1:L+x6JRlFE0PfyMqeoLYVOKLhn5IeZHvNT7ZI51Y9Qyc=
github.com/ipfs/go-unixfsnode v1.1.2/go.mod h1:5dcE2x03pyjHk4JjamXmunTMzz+VUtqvPwZjIEkfV6s=
-github.com/ipfs/go-unixfsnode v1.4.0 h1:9BUxHBXrbNi8mWHc6j+5C580WJqtVw9uoeEKn4tMhwA=
-github.com/ipfs/go-unixfsnode v1.4.0/go.mod h1:qc7YFFZ8tABc58p62HnIYbUMwj9chhUuFWmxSokfePo=
-github.com/ipfs/go-verifcid v0.0.1 h1:m2HI7zIuR5TFyQ1b79Da5N9dnnCP1vcu2QqawmWlK2E=
+github.com/ipfs/go-unixfsnode v1.5.1 h1:JcR3t5C2nM1V7PMzhJ/Qmo19NkoFIKweDSZyDx+CjkI=
+github.com/ipfs/go-unixfsnode v1.5.1/go.mod h1:ed79DaG9IEuZITJVQn4U6MZDftv6I3ygUBLPfhEbHvk=
github.com/ipfs/go-verifcid v0.0.1/go.mod h1:5Hrva5KBeIog4A+UpqlaIU+DEstipcJYQQZc0g37pY0=
-github.com/ipfs/interface-go-ipfs-core v0.4.0/go.mod h1:UJBcU6iNennuI05amq3FQ7g0JHUkibHFAfhfUIy927o=
-github.com/ipfs/interface-go-ipfs-core v0.7.0 h1:7tb+2upz8oCcjIyjo1atdMk+P+u7wPmI+GksBlLE8js=
-github.com/ipfs/interface-go-ipfs-core v0.7.0/go.mod h1:lF27E/nnSPbylPqKVXGZghal2hzifs3MmjyiEjnc9FY=
-github.com/ipfs/kubo v0.14.0 h1:qOmR3vd/n+ConnRiXrrLNlj4uek6S9BalMsmhG+a+u8=
-github.com/ipfs/kubo v0.14.0/go.mod h1:i++XWlyJH/PpZNHI//LyoloBFUykQvcbqhmFcW6PQzY=
-github.com/ipld/edelweiss v0.1.4 h1:g4+C2Ph+8SV2MCJBG3oRtetvxJYAS2WzlNGgsOY95iM=
-github.com/ipld/edelweiss v0.1.4/go.mod h1:JX1MR06BPcTOF+5xCYDLnylYkXS15iUN0/RXVSiUIQs=
+github.com/ipfs/go-verifcid v0.0.2 h1:XPnUv0XmdH+ZIhLGKg6U2vaPaRDXb9urMyNVCE7uvTs=
+github.com/ipfs/go-verifcid v0.0.2/go.mod h1:40cD9x1y4OWnFXbLNJYRe7MpNvWlMn3LZAG5Wb4xnPU=
+github.com/ipfs/interface-go-ipfs-core v0.8.2 h1:WDeCBnE4MENVOXbtfwwdAPJ2nBBS8PTmhZWWpm24HRM=
+github.com/ipfs/interface-go-ipfs-core v0.8.2/go.mod h1:F3EcmDy53GFkF0H3iEJpfJC320fZ/4G60eftnItrrJ0=
+github.com/ipfs/kubo v0.18.1 h1:mF8n2toZkWRc1JXs4pGknqoDGJ9NfP+upy/a8OS3oNg=
+github.com/ipfs/kubo v0.18.1/go.mod h1:VNKTz0OcX28GvsJQSEAprbMqzlSO19f4esoeDX4ZJLQ=
+github.com/ipld/edelweiss v0.2.0 h1:KfAZBP8eeJtrLxLhi7r3N0cBCo7JmwSRhOJp3WSpNjk=
+github.com/ipld/edelweiss v0.2.0/go.mod h1:FJAzJRCep4iI8FOFlRriN9n0b7OuX3T/S9++NpBDmA4=
github.com/ipld/go-car v0.4.0 h1:U6W7F1aKF/OJMHovnOVdst2cpQE5GhmHibQkAixgNcQ=
-github.com/ipld/go-car/v2 v2.1.1/go.mod h1:+2Yvf0Z3wzkv7NeI69i8tuZ+ft7jyjPYIWZzeVNeFcI=
-github.com/ipld/go-car/v2 v2.4.0 h1:8jI6/iKlyLqRZzLz31jFWTqKvslaVzFsin305sOuqNQ=
+github.com/ipld/go-car/v2 v2.5.1 h1:U2ux9JS23upEgrJScW8VQuxmE94560kYxj9CQUpcfmk=
github.com/ipld/go-codec-dagpb v1.3.0/go.mod h1:ga4JTU3abYApDC3pZ00BC2RSvC3qfBb9MSJkMLSwnhA=
-github.com/ipld/go-codec-dagpb v1.3.1/go.mod h1:ErNNglIi5KMur/MfFE/svtgQthzVvf+43MrzLbpcIZY=
-github.com/ipld/go-codec-dagpb v1.4.0 h1:VqADPIFng8G4vz5EQytmmcx/2gEgOHfBuw/kIuCgDAY=
-github.com/ipld/go-codec-dagpb v1.4.0/go.mod h1:ErNNglIi5KMur/MfFE/svtgQthzVvf+43MrzLbpcIZY=
-github.com/ipld/go-ipld-prime v0.9.0/go.mod h1:KvBLMr4PX1gWptgkzRjVZCrLmSGcZCb/jioOQwCqZN8=
+github.com/ipld/go-codec-dagpb v1.5.0 h1:RspDRdsJpLfgCI0ONhTAnbHdySGD4t+LHSPK4X1+R0k=
+github.com/ipld/go-codec-dagpb v1.5.0/go.mod h1:0yRIutEFD8o1DGVqw4RSHh+BUTlJA9XWldxaaWR/o4g=
github.com/ipld/go-ipld-prime v0.9.1-0.20210324083106-dc342a9917db/go.mod h1:KvBLMr4PX1gWptgkzRjVZCrLmSGcZCb/jioOQwCqZN8=
github.com/ipld/go-ipld-prime v0.11.0/go.mod h1:+WIAkokurHmZ/KwzDOMUuoeJgaRQktHtEaLglS3ZeV8=
-github.com/ipld/go-ipld-prime v0.14.0/go.mod h1:9ASQLwUFLptCov6lIYc70GRB4V7UTyLD0IJtrDJe6ZM=
-github.com/ipld/go-ipld-prime v0.16.0/go.mod h1:axSCuOCBPqrH+gvXr2w9uAOulJqBPhHPT2PjoiiU1qA=
-github.com/ipld/go-ipld-prime v0.17.0 h1:+U2peiA3aQsE7mrXjD2nYZaZrCcakoz2Wge8K42Ld8g=
-github.com/ipld/go-ipld-prime v0.17.0/go.mod h1:aYcKm5TIvGfY8P3QBKz/2gKcLxzJ1zDaD+o0bOowhgs=
-github.com/ipld/go-ipld-prime/storage/bsadapter v0.0.0-20211210234204-ce2a1c70cd73/go.mod h1:2PJ0JgxyB08t0b2WKrcuqI3di0V+5n6RS/LTUJhkoxY=
+github.com/ipld/go-ipld-prime v0.19.0 h1:5axC7rJmPc17Emw6TelxGwnzALk0PdupZ2oj2roDj04=
+github.com/ipld/go-ipld-prime v0.19.0/go.mod h1:Q9j3BaVXwaA3o5JUDNvptDDr/x8+F7FG6XJ8WI3ILg4=
+github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI=
+github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0=
+github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk=
+github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g=
+github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw=
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8=
@@ -769,8 +771,9 @@ github.com/jackc/pgconn v1.7.0/go.mod h1:sF/lPpNEMEOp+IYhyQGdAvrG20gWf6A1tKlr0v7
github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o=
github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY=
github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI=
-github.com/jackc/pgconn v1.12.1 h1:rsDFzIpRk7xT4B8FufgpCCeyjdNpKyghZeSefViE5W8=
github.com/jackc/pgconn v1.12.1/go.mod h1:ZkhRC59Llhrq3oSfrikvwQ5NaxYExr6twkdkMLaKono=
+github.com/jackc/pgconn v1.14.0 h1:vrbA9Ud87g6JdFWkHTJXppVce58qPIdP7N8y0Ml/A7Q=
+github.com/jackc/pgconn v1.14.0/go.mod h1:9mBNlny0UvkgJdCDvdVHYSjI+8tD2rnKK69Wz8ti++E=
github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE=
github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8=
github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE=
@@ -789,11 +792,13 @@ github.com/jackc/pgproto3/v2 v2.0.2/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwX
github.com/jackc/pgproto3/v2 v2.0.5/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
-github.com/jackc/pgproto3/v2 v2.3.0 h1:brH0pCGBDkBW07HWlN/oSBXrmo3WB0UvZd1pIuDcL8Y=
github.com/jackc/pgproto3/v2 v2.3.0/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
+github.com/jackc/pgproto3/v2 v2.3.2 h1:7eY55bdBeCz1F2fTzSz69QC+pG46jYq9/jtSPiJ5nn0=
+github.com/jackc/pgproto3/v2 v2.3.2/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
-github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg=
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
+github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
+github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg=
github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc=
github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw=
@@ -803,8 +808,9 @@ github.com/jackc/pgtype v1.3.1-0.20200510190516-8cd94a14c75a/go.mod h1:vaogEUkAL
github.com/jackc/pgtype v1.3.1-0.20200606141011-f6355165a91c/go.mod h1:cvk9Bgu/VzJ9/lxTO5R5sf80p0DiucVtN7ZxvaC4GmQ=
github.com/jackc/pgtype v1.4.2/go.mod h1:JCULISAZBFGrHaOXIIFiyfzW5VY0GRitRr8NeJsrdig=
github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM=
-github.com/jackc/pgtype v1.11.0 h1:u4uiGPz/1hryuXzyaBhSk6dnIyyG2683olG2OV+UUgs=
github.com/jackc/pgtype v1.11.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4=
+github.com/jackc/pgtype v1.14.0 h1:y+xUdabmyMkJLyApYuPj38mW+aAIqCe5uuBB51rH3Vw=
+github.com/jackc/pgtype v1.14.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4=
github.com/jackc/pgx v3.6.2+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y=
github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM=
@@ -815,16 +821,18 @@ github.com/jackc/pgx/v4 v4.6.1-0.20200510190926-94ba730bb1e9/go.mod h1:t3/cdRQl6
github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904/go.mod h1:ZDaNWkt9sW1JMiNn0kdYBaLelIhw7Pg4qd+Vk6tw7Hg=
github.com/jackc/pgx/v4 v4.8.1/go.mod h1:4HOLxrl8wToZJReD04/yB20GDwf4KBYETvlHciCnwW0=
github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs=
-github.com/jackc/pgx/v4 v4.16.1 h1:JzTglcal01DrghUqt+PmzWsZx/Yh7SC/CTQmSBMTd0Y=
github.com/jackc/pgx/v4 v4.16.1/go.mod h1:SIhx0D5hoADaiXZVyv+3gSm3LCIIINTVO0PficsvWGQ=
+github.com/jackc/pgx/v4 v4.18.1 h1:YP7G1KABtKpB5IHrO9vYwSrCOhs7p3uqhvhhQBptya0=
+github.com/jackc/pgx/v4 v4.18.1/go.mod h1:FydWkUyadDmdNH/mHnGob881GawxeEm7TcMCzkb+qQE=
github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v1.1.2/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
-github.com/jackc/puddle v1.2.1 h1:gI8os0wpRXFd4FiAY2dWiqRK037tjj3t7rKFeO4X5iw=
github.com/jackc/puddle v1.2.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
+github.com/jackc/puddle v1.3.0 h1:eHK/5clGOatcjX3oWGBO/MpxpbHzSwud5EWTSCI+MX0=
+github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA=
github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
@@ -833,7 +841,6 @@ github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4
github.com/jbenet/go-cienv v0.1.0 h1:Vc/s0QbQtoxX8MwwSLWWh+xNNZvM3Lw7NsTcHrvvhMc=
github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c h1:uUx61FiAa1GI6ZmVd2wf2vULeQZIKG66eybjNXKYCz4=
-github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c/go.mod h1:sdx1xVM9UuLw1tXnhJWN3piypTUO3vCIHYmG15KE/dU=
github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs=
github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk=
github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk=
@@ -844,8 +851,6 @@ github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZl
github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU=
github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
-github.com/jinzhu/copier v0.2.4 h1:dT3tI+8GzU8DjJFCj9mLYtjfRtUmK7edauduQdcZCpI=
-github.com/jinzhu/copier v0.2.4/go.mod h1:24xnZezI2Yqac9J61UC6/dG/k76ttpq0DdJI3QmUvro=
github.com/jinzhu/gorm v1.9.12/go.mod h1:vhTjlKSJUTWNtcbQtrMBFCxy7eXTzeCAzfL5fBZT/Qs=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
@@ -864,9 +869,8 @@ github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlT
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o=
@@ -878,23 +882,29 @@ github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4d
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0=
+github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0=
+github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8=
+github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE=
+github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE=
+github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro=
+github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
-github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
-github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A=
-github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
+github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
+github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
+github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw=
+github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4=
github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
+github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
-github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
-github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE=
-github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
+github.com/klauspost/cpuid/v2 v2.2.1 h1:U33DW0aiEj633gHYw3LoDNfkDiYnE5Q8M/TKJn2f2jI=
+github.com/klauspost/cpuid/v2 v2.2.1/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg=
github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -902,22 +912,25 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxv
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk=
github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk=
-github.com/koron/go-ssdp v0.0.2 h1:fL3wAoyT6hXHQlORyXUW4Q23kkQpJRgEAYcZB5BR71o=
-github.com/koron/go-ssdp v0.0.2/go.mod h1:XoLfkAiA2KeZsYh4DbHxD7h3nR2AZNqVQOa+LJuqPYs=
+github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8=
+github.com/koron/go-ssdp v0.0.3/go.mod h1:b2MxI6yh02pKrsyNoQUsk4+YNikaGhe4894J+Q5lDvA=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg=
+github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y=
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
@@ -926,73 +939,51 @@ github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.4.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
-github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs=
-github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
+github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
+github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ=
github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E=
-github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw=
github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ=
-github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs=
github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM=
+github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
+github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c=
github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic=
-github.com/libp2p/go-conn-security v0.0.1/go.mod h1:bGmu51N0KU9IEjX7kl2PQjgZa40JQWnayTvNMgD/vyk=
-github.com/libp2p/go-conn-security-multistream v0.0.2/go.mod h1:nc9vud7inQ+d6SO0I/6dSWrdMnHnzZNHeyUQqrAJulE=
github.com/libp2p/go-conn-security-multistream v0.1.0/go.mod h1:aw6eD7LOsHEX7+2hJkDxw1MteijaVcI+/eP2/x3J1xc=
github.com/libp2p/go-conn-security-multistream v0.2.0/go.mod h1:hZN4MjlNetKD3Rq5Jb/P5ohUnFLNzEAR4DLSzpn2QLU=
github.com/libp2p/go-conn-security-multistream v0.2.1/go.mod h1:cR1d8gA0Hr59Fj6NhaTpFhJZrjSYuNmhpT2r25zYR70=
-github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM=
github.com/libp2p/go-doh-resolver v0.4.0 h1:gUBa1f1XsPwtpE1du0O+nnZCUqtG7oYi7Bb+0S7FQqw=
github.com/libp2p/go-doh-resolver v0.4.0/go.mod h1:v1/jwsFusgsWIGX/c6vCRrnJ60x7bhTiq/fs2qt0cAg=
github.com/libp2p/go-eventbus v0.1.0/go.mod h1:vROgu5cs5T7cv7POWlWxBaVLxfSegC5UGQf8A2eEmx4=
-github.com/libp2p/go-eventbus v0.2.1 h1:VanAdErQnpTioN2TowqNcOijf6YwhuODe4pPKSDpxGc=
github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8=
github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8=
-github.com/libp2p/go-flow-metrics v0.0.2/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs=
-github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM=
github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs=
-github.com/libp2p/go-libp2p v0.0.30/go.mod h1:XWT8FGHlhptAv1+3V/+J5mEpzyui/5bvFsNuWYs611A=
+github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM=
+github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro=
github.com/libp2p/go-libp2p v0.1.0/go.mod h1:6D/2OBauqLUoqcADOJpn9WbKqvaM07tDw68qHM0BxUM=
github.com/libp2p/go-libp2p v0.1.1/go.mod h1:I00BRo1UuUSdpuc8Q2mN7yDF/oTUTRAX6JWpTiK9Rp8=
github.com/libp2p/go-libp2p v0.6.1/go.mod h1:CTFnWXogryAHjXAKEbOf1OWY+VeAP3lDMZkfEI5sT54=
github.com/libp2p/go-libp2p v0.7.0/go.mod h1:hZJf8txWeCduQRDC/WSqBGMxaTHCOYHt2xSU1ivxn0k=
github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniVO7zIHGMw=
github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o=
-github.com/libp2p/go-libp2p v0.13.0/go.mod h1:pM0beYdACRfHO1WcJlp65WXyG2A6NqYM+t2DTVAJxMo=
github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2QxCZlwRH0=
-github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m2kJVru3rM=
-github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4=
-github.com/libp2p/go-libp2p v0.18.0/go.mod h1:+veaZ9z1SZQhmc5PW78jvnnxZ89Mgvmh4cggO11ETmw=
-github.com/libp2p/go-libp2p v0.20.3 h1:tjjDNfp7FqdI/7v1rXtB/BtELaPlAThL2uzlj18kcrw=
-github.com/libp2p/go-libp2p v0.20.3/go.mod h1:I+vndVanE/p/SjFbnA+BEmmfAUEpWxrdXZeyQ1Dus5c=
-github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo=
-github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I=
+github.com/libp2p/go-libp2p v0.24.2 h1:iMViPIcLY0D6zr/f+1Yq9EavCZu2i7eDstsr1nEwSAk=
+github.com/libp2p/go-libp2p v0.24.2/go.mod h1:WuxtL2V8yGjam03D93ZBC19tvOUiPpewYv1xdFGWu1k=
github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw=
github.com/libp2p/go-libp2p-asn-util v0.2.0/go.mod h1:WoaWxbHKBymSN41hWSq/lGKJEca7TNm58+gGJi2WsLI=
-github.com/libp2p/go-libp2p-autonat v0.0.6/go.mod h1:uZneLdOkZHro35xIhpbtTzLlgYturpu4J5+0cZK3MqE=
github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8=
github.com/libp2p/go-libp2p-autonat v0.1.1/go.mod h1:OXqkeGOY2xJVWKAGV2inNF5aKN/djNA3fdpCWloIudE=
github.com/libp2p/go-libp2p-autonat v0.2.0/go.mod h1:DX+9teU4pEEoZUqR1PiMlqliONQdNbfzE1C718tcViI=
github.com/libp2p/go-libp2p-autonat v0.2.1/go.mod h1:MWtAhV5Ko1l6QBsHQNSuM6b1sRkXrpk0/LqCr+vCVxI=
github.com/libp2p/go-libp2p-autonat v0.2.2/go.mod h1:HsM62HkqZmHR2k1xgX34WuWDzk/nBwNHoeyyT4IWV6A=
-github.com/libp2p/go-libp2p-autonat v0.4.0/go.mod h1:YxaJlpr81FhdOv3W3BTconZPfhaYivRdf53g+S2wobk=
github.com/libp2p/go-libp2p-autonat v0.4.2/go.mod h1:YxaJlpr81FhdOv3W3BTconZPfhaYivRdf53g+S2wobk=
-github.com/libp2p/go-libp2p-autonat v0.6.0/go.mod h1:bFC6kY8jwzNNWoqc8iGE57vsfwyJ/lP4O4DOV1e0B2o=
-github.com/libp2p/go-libp2p-blankhost v0.0.1/go.mod h1:Ibpbw/7cPPYwFb7PACIWdvxxv0t0XCCI10t7czjAjTc=
github.com/libp2p/go-libp2p-blankhost v0.1.1/go.mod h1:pf2fvdLJPsC1FsVrNP3DUUvMzUts2dsLLBEpo1vW1ro=
github.com/libp2p/go-libp2p-blankhost v0.1.4/go.mod h1:oJF0saYsAXQCSfDq254GMNmLNz6ZTHTOvtF4ZydUvwU=
github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ=
-github.com/libp2p/go-libp2p-blankhost v0.3.0 h1:kTnLArltMabZlzY63pgGDA4kkUcLkBFSM98zBssn/IY=
-github.com/libp2p/go-libp2p-blankhost v0.3.0/go.mod h1:urPC+7U01nCGgJ3ZsV8jdwTp6Ji9ID0dMTvq+aJ+nZU=
-github.com/libp2p/go-libp2p-circuit v0.0.9/go.mod h1:uU+IBvEQzCu953/ps7bYzC/D/R0Ho2A9LfKVVCatlqU=
github.com/libp2p/go-libp2p-circuit v0.1.0/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFkZeIRmfunbA7pmFh8=
github.com/libp2p/go-libp2p-circuit v0.1.4/go.mod h1:CY67BrEjKNDhdTk8UgBX1Y/H5c3xkAcs3gnksxY7osU=
github.com/libp2p/go-libp2p-circuit v0.2.1/go.mod h1:BXPwYDN5A8z4OEY9sOfr2DUQMLQvKt/6oku45YUmjIo=
github.com/libp2p/go-libp2p-circuit v0.4.0/go.mod h1:t/ktoFIUzM6uLQ+o1G6NuBl2ANhBKN9Bc8jRIk31MoA=
-github.com/libp2p/go-libp2p-circuit v0.6.0 h1:rw/HlhmUB3OktS/Ygz6+2XABOmHKzZpPUuMNUMosj8w=
-github.com/libp2p/go-libp2p-circuit v0.6.0/go.mod h1:kB8hY+zCpMeScyvFrKrGicRdid6vNXbunKE4rXATZ0M=
-github.com/libp2p/go-libp2p-connmgr v0.2.4 h1:TMS0vc0TCBomtQJyWr7fYxcVYYhx+q/2gF++G5Jkl/w=
-github.com/libp2p/go-libp2p-connmgr v0.2.4/go.mod h1:YV0b/RIm8NGPnnNWM7hG9Q38OeQiQfKhHCCs1++ufn0=
github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco=
github.com/libp2p/go-libp2p-core v0.0.2/go.mod h1:9dAcntw/n46XycV4RnlBq3BpgrmyUi9LuoTNdPrbUco=
github.com/libp2p/go-libp2p-core v0.0.3/go.mod h1:j+YQMNz9WNSkNezXOsahp9kwZBKBvxLpKD316QWSJXE=
@@ -1000,86 +991,44 @@ github.com/libp2p/go-libp2p-core v0.0.4/go.mod h1:jyuCQP356gzfCFtRKyvAbNkyeuxb7O
github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI=
github.com/libp2p/go-libp2p-core v0.2.2/go.mod h1:8fcwTbsG2B+lTgRJ1ICZtiM5GWCWZVoVrLaDRvIRng0=
github.com/libp2p/go-libp2p-core v0.2.4/go.mod h1:STh4fdfa5vDYr0/SzYYeqnt+E6KfEV5VxfIrm0bcI0g=
-github.com/libp2p/go-libp2p-core v0.2.5/go.mod h1:6+5zJmKhsf7yHn1RbmYDu08qDUpIUxGdqHuEZckmZOA=
github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw=
github.com/libp2p/go-libp2p-core v0.3.1/go.mod h1:thvWy0hvaSBhnVBaW37BvzgVV68OUhgJJLAa6almrII=
github.com/libp2p/go-libp2p-core v0.4.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0=
github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0=
github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y=
-github.com/libp2p/go-libp2p-core v0.5.3/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y=
github.com/libp2p/go-libp2p-core v0.5.4/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y=
github.com/libp2p/go-libp2p-core v0.5.5/go.mod h1:vj3awlOr9+GMZJFH9s4mpt9RHHgGqeHCopzbYKZdRjM=
github.com/libp2p/go-libp2p-core v0.5.6/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo=
github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo=
github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo=
-github.com/libp2p/go-libp2p-core v0.6.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8=
github.com/libp2p/go-libp2p-core v0.7.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8=
github.com/libp2p/go-libp2p-core v0.8.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8=
github.com/libp2p/go-libp2p-core v0.8.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8=
github.com/libp2p/go-libp2p-core v0.8.2/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8=
github.com/libp2p/go-libp2p-core v0.8.5/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8=
-github.com/libp2p/go-libp2p-core v0.8.6/go.mod h1:dgHr0l0hIKfWpGpqAMbpo19pen9wJfdCGv51mTmdpmM=
-github.com/libp2p/go-libp2p-core v0.9.0/go.mod h1:ESsbz31oC3C1AvMJoGx26RTuCkNhmkSRCqZ0kQtJ2/8=
-github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg=
-github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg=
-github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg=
-github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8=
-github.com/libp2p/go-libp2p-core v0.15.1/go.mod h1:agSaboYM4hzB1cWekgVReqV5M4g5M+2eNNejV+1EEhs=
-github.com/libp2p/go-libp2p-core v0.16.1 h1:bWoiEBqVkpJ13hbv/f69tHODp86t6mvc4fBN4DkK73M=
-github.com/libp2p/go-libp2p-core v0.16.1/go.mod h1:O3i/7y+LqUb0N+qhzXjBjjpchgptWAVMG1Voegk7b4c=
-github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE=
-github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I=
github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI=
-github.com/libp2p/go-libp2p-discovery v0.0.5/go.mod h1:YtF20GUxjgoKZ4zmXj8j3Nb2TUSBHFlOCetzYdbZL5I=
github.com/libp2p/go-libp2p-discovery v0.1.0/go.mod h1:4F/x+aldVHjHDHuX85x1zWoFTGElt8HnoDzwkFZm29g=
github.com/libp2p/go-libp2p-discovery v0.2.0/go.mod h1:s4VGaxYMbw4+4+tsoQTqh7wfxg97AEdo4GYBt6BadWg=
github.com/libp2p/go-libp2p-discovery v0.3.0/go.mod h1:o03drFnz9BVAZdzC/QUQ+NeQOu38Fu7LJGEOK2gQltw=
github.com/libp2p/go-libp2p-discovery v0.5.0/go.mod h1:+srtPIU9gDaBNu//UHvcdliKBIcr4SfDcm0/PfPJLug=
-github.com/libp2p/go-libp2p-discovery v0.6.0/go.mod h1:/u1voHt0tKIe5oIA1RHBKQLVCWPna2dXmPNHc2zR9S8=
-github.com/libp2p/go-libp2p-discovery v0.7.0 h1:6Iu3NyningTb/BmUnEhcTwzwbs4zcywwbfTulM9LHuc=
-github.com/libp2p/go-libp2p-discovery v0.7.0/go.mod h1:zPug0Rxib1aQG9iIdwOpRpBf18cAfZgzicO826UQP4I=
-github.com/libp2p/go-libp2p-host v0.0.1/go.mod h1:qWd+H1yuU0m5CwzAkvbSjqKairayEHdR5MMl7Cwa7Go=
-github.com/libp2p/go-libp2p-host v0.0.3/go.mod h1:Y/qPyA6C8j2coYyos1dfRm0I8+nvd4TGrDGt4tA7JR8=
-github.com/libp2p/go-libp2p-interface-connmgr v0.0.1/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
-github.com/libp2p/go-libp2p-interface-connmgr v0.0.4/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
-github.com/libp2p/go-libp2p-interface-connmgr v0.0.5/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
-github.com/libp2p/go-libp2p-interface-pnet v0.0.1/go.mod h1:el9jHpQAXK5dnTpKA4yfCNBZXvrzdOU75zz+C6ryp3k=
-github.com/libp2p/go-libp2p-kad-dht v0.15.0/go.mod h1:rZtPxYu1TnHHz6n1RggdGrxUX/tA1C2/Wiw3ZMUDrU0=
-github.com/libp2p/go-libp2p-kad-dht v0.16.0 h1:epVRYl3O8dn47uV3wVD2+IobEvBPapEMVj4sWlvwQHU=
-github.com/libp2p/go-libp2p-kad-dht v0.16.0/go.mod h1:YYLlG8AbpWVGbI/zFeSbiGT0n0lluH7IG0sHeounyWA=
+github.com/libp2p/go-libp2p-kad-dht v0.20.0 h1:1bcMa74JFwExCHZMFEmjtHzxX5DovhJ07EtR6UOTEpc=
+github.com/libp2p/go-libp2p-kad-dht v0.20.0/go.mod h1:qPIXdiZsLczhV4/+4EO1jE8ae0YCW4ZOogc4WVIyTEU=
github.com/libp2p/go-libp2p-kbucket v0.3.1/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLwEpuGoFq9ubvoUOio=
-github.com/libp2p/go-libp2p-kbucket v0.4.7 h1:spZAcgxifvFZHBD8tErvppbnNiKA5uokDu3CV7axu70=
-github.com/libp2p/go-libp2p-kbucket v0.4.7/go.mod h1:XyVo99AfQH0foSf176k4jY1xUJ2+jUJIZCSDm7r2YKk=
-github.com/libp2p/go-libp2p-loggables v0.0.1/go.mod h1:lDipDlBNYbpyqyPX/KcoO+eq0sJYEVR2JgOexcivchg=
-github.com/libp2p/go-libp2p-loggables v0.1.0 h1:h3w8QFfCt2UJl/0/NW4K829HX/0S4KD31PQ7m8UXXO8=
+github.com/libp2p/go-libp2p-kbucket v0.5.0 h1:g/7tVm8ACHDxH29BGrpsQlnNeu+6OF1A9bno/4/U1oA=
+github.com/libp2p/go-libp2p-kbucket v0.5.0/go.mod h1:zGzGCpQd78b5BNTDGHNDLaTt9aDK/A02xeZp9QeFC4U=
github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90=
-github.com/libp2p/go-libp2p-metrics v0.0.1/go.mod h1:jQJ95SXXA/K1VZi13h52WZMa9ja78zjyy5rspMsC/08=
-github.com/libp2p/go-libp2p-mplex v0.1.1/go.mod h1:KUQWpGkCzfV7UIpi8SKsAVxyBgz1c9R5EvxgnwLsb/I=
github.com/libp2p/go-libp2p-mplex v0.2.0/go.mod h1:Ejl9IyjvXJ0T9iqUTE1jpYATQ9NM3g+OtR+EMMODbKo=
github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE=
github.com/libp2p/go-libp2p-mplex v0.2.2/go.mod h1:74S9eum0tVQdAfFiKxAyKzNdSuLqw5oadDq7+L/FELo=
github.com/libp2p/go-libp2p-mplex v0.2.3/go.mod h1:CK3p2+9qH9x+7ER/gWWDYJ3QW5ZxWDkm+dVvjfuG3ek=
github.com/libp2p/go-libp2p-mplex v0.4.0/go.mod h1:yCyWJE2sc6TBTnFpjvLuEJgTSw/u+MamvzILKdX7asw=
github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g=
-github.com/libp2p/go-libp2p-mplex v0.5.0/go.mod h1:eLImPJLkj3iG5t5lq68w3Vm5NAQ5BcKwrrb2VmOYb3M=
-github.com/libp2p/go-libp2p-mplex v0.6.0/go.mod h1:i3usuPrBbh9FD2fLZjGpotyNkwr42KStYZQY7BeTiu4=
github.com/libp2p/go-libp2p-nat v0.0.4/go.mod h1:N9Js/zVtAXqaeT99cXgTV9e75KpnWCvVOiGzlcHmBbY=
github.com/libp2p/go-libp2p-nat v0.0.5/go.mod h1:1qubaE5bTZMJE+E/uu2URroMbzdubFz1ChgiN79yKPE=
github.com/libp2p/go-libp2p-nat v0.0.6/go.mod h1:iV59LVhB3IkFvS6S6sauVTSOrNEANnINbI/fkaLimiw=
-github.com/libp2p/go-libp2p-nat v0.1.0/go.mod h1:DQzAG+QbDYjN1/C3B6vXucLtz3u9rEonLVPtZVzQqks=
-github.com/libp2p/go-libp2p-net v0.0.1/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c=
-github.com/libp2p/go-libp2p-net v0.0.2/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c=
-github.com/libp2p/go-libp2p-netutil v0.0.1/go.mod h1:GdusFvujWZI9Vt0X5BKqwWWmZFxecf9Gt03cKxm2f/Q=
-github.com/libp2p/go-libp2p-netutil v0.1.0 h1:zscYDNVEcGxyUpMd0JReUZTrpMfia8PmLKcKF72EAMQ=
github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU=
-github.com/libp2p/go-libp2p-noise v0.1.1/go.mod h1:QDFLdKX7nluB7DEnlVPbz7xlLHdwHFA9HiohJRr3vwM=
github.com/libp2p/go-libp2p-noise v0.2.0/go.mod h1:IEbYhBBzGyvdLBoxxULL/SGbJARhUeqlO8lVSREYu2Q=
-github.com/libp2p/go-libp2p-noise v0.3.0/go.mod h1:JNjHbociDJKHD64KTkzGnzqJ0FEV5gHJa6AB00kbCNQ=
-github.com/libp2p/go-libp2p-peer v0.0.1/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J0AMzcDUVruVoo=
-github.com/libp2p/go-libp2p-peer v0.1.1/go.mod h1:jkF12jGB4Gk/IOo+yomm+7oLWxF278F7UnrYUQ1Q8es=
github.com/libp2p/go-libp2p-peer v0.2.0/go.mod h1:RCffaCvUyW2CJmG2gAWVqwePwW7JMgxjsHm7+J5kjWY=
-github.com/libp2p/go-libp2p-peerstore v0.0.1/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20=
-github.com/libp2p/go-libp2p-peerstore v0.0.6/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20=
github.com/libp2p/go-libp2p-peerstore v0.1.0/go.mod h1:2CeHkQsr8svp4fZ+Oi9ykN1HBb6u0MOvdJ7YIsmcwtY=
github.com/libp2p/go-libp2p-peerstore v0.1.3/go.mod h1:BJ9sHlm59/80oSkpWgr1MyY1ciXAXV397W6h1GH/uKI=
github.com/libp2p/go-libp2p-peerstore v0.1.4/go.mod h1:+4BDbDiiKf4PzpANZDAT+knVdLxvqh7hXOujessqdzs=
@@ -1088,55 +1037,27 @@ github.com/libp2p/go-libp2p-peerstore v0.2.1/go.mod h1:NQxhNjWxf1d4w6PihR8btWIRj
github.com/libp2p/go-libp2p-peerstore v0.2.2/go.mod h1:NQxhNjWxf1d4w6PihR8btWIRjwRLBr4TYKfNgrUkOPA=
github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s=
github.com/libp2p/go-libp2p-peerstore v0.2.7/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s=
-github.com/libp2p/go-libp2p-peerstore v0.2.8/go.mod h1:gGiPlXdz7mIHd2vfAsHzBNAMqSDkt2UBFwgcITgw1lA=
-github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDHlwza8riYMaUzaN6hX0=
-github.com/libp2p/go-libp2p-peerstore v0.6.0 h1:HJminhQSGISBIRb93N6WK3t6Fa8OOTnHd/VBjL4mY5A=
-github.com/libp2p/go-libp2p-peerstore v0.6.0/go.mod h1:DGEmKdXrcYpK9Jha3sS7MhqYdInxJy84bIPtSu65bKc=
github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA=
-github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s=
-github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk=
-github.com/libp2p/go-libp2p-pubsub v0.6.0/go.mod h1:nJv87QM2cU0w45KPR1rZicq+FmFIOD16zmT+ep1nOmg=
-github.com/libp2p/go-libp2p-pubsub v0.6.1 h1:wycbV+f4rreCoVY61Do6g/BUk0RIrbNRcYVbn+QkjGk=
-github.com/libp2p/go-libp2p-pubsub v0.6.1/go.mod h1:nJv87QM2cU0w45KPR1rZicq+FmFIOD16zmT+ep1nOmg=
-github.com/libp2p/go-libp2p-pubsub-router v0.5.0 h1:WuYdY42DVIJ+N0qMdq2du/E9poJH+xzsXL7Uptwj9tw=
-github.com/libp2p/go-libp2p-pubsub-router v0.5.0/go.mod h1:TRJKskSem3C0aSb3CmRgPwq6IleVFzds6hS09fmZbGM=
+github.com/libp2p/go-libp2p-pubsub v0.8.3 h1:T4+pcfcFm1K2v5oFyk68peSjVroaoM8zFygf6Y5WOww=
+github.com/libp2p/go-libp2p-pubsub v0.8.3/go.mod h1:eje970FXxjhtFbVEoiae+VUw24ZoSlk67BsiZPLRzlw=
+github.com/libp2p/go-libp2p-pubsub-router v0.6.0 h1:D30iKdlqDt5ZmLEYhHELCMRj8b4sFAqrUcshIUvVP/s=
+github.com/libp2p/go-libp2p-pubsub-router v0.6.0/go.mod h1:FY/q0/RBTKsLA7l4vqC2cbRbOvyDotg8PJQ7j8FDudE=
github.com/libp2p/go-libp2p-quic-transport v0.10.0/go.mod h1:RfJbZ8IqXIhxBRm5hqUEJqjiiY8xmEuq3HUDS993MkA=
-github.com/libp2p/go-libp2p-quic-transport v0.11.2/go.mod h1:wlanzKtIh6pHrq+0U3p3DY9PJfGqxMgPaGKaK5LifwQ=
-github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc=
-github.com/libp2p/go-libp2p-quic-transport v0.15.0/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ=
-github.com/libp2p/go-libp2p-quic-transport v0.16.0/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ=
-github.com/libp2p/go-libp2p-quic-transport v0.16.1/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ=
-github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q=
github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q=
-github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGdsU/9W//C8dqjQDk=
-github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0=
-github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4=
-github.com/libp2p/go-libp2p-resource-manager v0.1.5/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y=
-github.com/libp2p/go-libp2p-resource-manager v0.3.0 h1:2+cYxUNi33tcydsVLt6K5Fv2E3OTiVeafltecAj15E0=
-github.com/libp2p/go-libp2p-resource-manager v0.3.0/go.mod h1:K+eCkiapf+ey/LADO4TaMpMTP9/Qde/uLlrnRqV4PLQ=
-github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys=
-github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY=
-github.com/libp2p/go-libp2p-routing-helpers v0.2.3/go.mod h1:795bh+9YeoFl99rMASoiVgHdi5bjack0N1+AFAdbvBw=
-github.com/libp2p/go-libp2p-secio v0.0.3/go.mod h1:hS7HQ00MgLhRO/Wyu1bTX6ctJKhVpm+j2/S2A5UqYb0=
+github.com/libp2p/go-libp2p-record v0.2.0 h1:oiNUOCWno2BFuxt3my4i1frNrt7PerzB3queqa1NkQ0=
+github.com/libp2p/go-libp2p-record v0.2.0/go.mod h1:I+3zMkvvg5m2OcSdoL0KPljyJyvNDFGKX7QdlpYUcwk=
+github.com/libp2p/go-libp2p-routing-helpers v0.6.0 h1:Rfyd+wp/cU0PjNjCphGzLYzd7Q51fjOMs5Sjj6zWGT0=
+github.com/libp2p/go-libp2p-routing-helpers v0.6.0/go.mod h1:wwK/XSLt6njjO7sRbjhf8w7PGBOfdntMQ2mOQPZ5s/Q=
github.com/libp2p/go-libp2p-secio v0.1.0/go.mod h1:tMJo2w7h3+wN4pgU2LSYeiKPrfqBgkOsdiKK77hE7c8=
github.com/libp2p/go-libp2p-secio v0.2.0/go.mod h1:2JdZepB8J5V9mBp79BmwsaPQhRPNN2NrnB2lKQcdy6g=
github.com/libp2p/go-libp2p-secio v0.2.1/go.mod h1:cWtZpILJqkqrSkiYcDBh5lA3wbT2Q+hz3rJQq3iftD8=
github.com/libp2p/go-libp2p-secio v0.2.2/go.mod h1:wP3bS+m5AUnFA+OFO7Er03uO1mncHG0uVwGrwvjYlNY=
-github.com/libp2p/go-libp2p-swarm v0.0.6/go.mod h1:s5GZvzg9xXe8sbeESuFpjt8CJPTCa8mhEusweJqyFy8=
github.com/libp2p/go-libp2p-swarm v0.1.0/go.mod h1:wQVsCdjsuZoc730CgOvh5ox6K8evllckjebkdiY5ta4=
github.com/libp2p/go-libp2p-swarm v0.2.2/go.mod h1:fvmtQ0T1nErXym1/aa1uJEyN7JzaTNyBcHImCxRpPKU=
github.com/libp2p/go-libp2p-swarm v0.2.3/go.mod h1:P2VO/EpxRyDxtChXz/VPVXyTnszHvokHKRhfkEgFKNM=
github.com/libp2p/go-libp2p-swarm v0.2.8/go.mod h1:JQKMGSth4SMqonruY0a8yjlPVIkb0mdNSwckW7OYziM=
github.com/libp2p/go-libp2p-swarm v0.3.0/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJegb7H57B5hWQR5Kk=
-github.com/libp2p/go-libp2p-swarm v0.4.0/go.mod h1:XVFcO52VoLoo0eitSxNQWYq4D6sydGOweTOAjJNraCw=
github.com/libp2p/go-libp2p-swarm v0.5.0/go.mod h1:sU9i6BoHE0Ve5SKz3y9WfKrh8dUat6JknzUehFx8xW4=
-github.com/libp2p/go-libp2p-swarm v0.5.3/go.mod h1:NBn7eNW2lu568L7Ns9wdFrOhgRlkRnIDg0FLKbuu3i8=
-github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc=
-github.com/libp2p/go-libp2p-swarm v0.10.0/go.mod h1:71ceMcV6Rg/0rIQ97rsZWMzto1l9LnNquef+efcRbmA=
-github.com/libp2p/go-libp2p-swarm v0.10.2/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs=
-github.com/libp2p/go-libp2p-swarm v0.11.0 h1:ITgsTEY2tA4OxFJGcWeugiMh2x5+VOEnI2JStT1EWxI=
-github.com/libp2p/go-libp2p-swarm v0.11.0/go.mod h1:sumjVYrC84gPSZOFKL8hNcnN6HZvJSwJ8ymaXeko4Lk=
-github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E=
github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E=
github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E=
github.com/libp2p/go-libp2p-testing v0.0.4/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E=
@@ -1145,32 +1066,14 @@ github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eq
github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc=
github.com/libp2p/go-libp2p-testing v0.3.0/go.mod h1:efZkql4UZ7OVsEfaxNHZPzIehtsBXMrXnCfJIgDti5g=
github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0=
-github.com/libp2p/go-libp2p-testing v0.4.2/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0=
-github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A=
-github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E=
-github.com/libp2p/go-libp2p-testing v0.8.0/go.mod h1:gRdsNxQSxAZowTgcLY7CC33xPmleZzoBpqSYbWenqPc=
-github.com/libp2p/go-libp2p-testing v0.9.2 h1:dCpODRtRaDZKF8HXT9qqqgON+OMEB423Knrgeod8j84=
+github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA=
github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M=
-github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY=
-github.com/libp2p/go-libp2p-tls v0.3.1/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY=
-github.com/libp2p/go-libp2p-transport v0.0.1/go.mod h1:UzbUs9X+PHOSw7S3ZmeOxfnwaQY5vGDzZmKPod3N3tk=
-github.com/libp2p/go-libp2p-transport v0.0.5/go.mod h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A=
-github.com/libp2p/go-libp2p-transport-upgrader v0.0.4/go.mod h1:RGq+tupk+oj7PzL2kn/m1w6YXxcIAYJYeI90h6BGgUc=
github.com/libp2p/go-libp2p-transport-upgrader v0.1.1/go.mod h1:IEtA6or8JUbsV07qPW4r01GnTenLW4oi3lOPbUMGJJA=
github.com/libp2p/go-libp2p-transport-upgrader v0.2.0/go.mod h1:mQcrHj4asu6ArfSoMuyojOdjx73Q47cYD7s5+gZOlns=
github.com/libp2p/go-libp2p-transport-upgrader v0.3.0/go.mod h1:i+SKzbRnvXdVbU3D1dwydnTmKRPXiAR/fyvi1dXuL4o=
-github.com/libp2p/go-libp2p-transport-upgrader v0.4.0/go.mod h1:J4ko0ObtZSmgn5BX5AmegP+dK3CSnU2lMCKsSq/EY0s=
github.com/libp2p/go-libp2p-transport-upgrader v0.4.2/go.mod h1:NR8ne1VwfreD5VIWIU62Agt/J18ekORFU/j1i2y8zvk=
-github.com/libp2p/go-libp2p-transport-upgrader v0.4.3/go.mod h1:bpkldbOWXMrXhpZbSV1mQxTrefOg2Fi+k1ClDSA4ppw=
-github.com/libp2p/go-libp2p-transport-upgrader v0.4.6/go.mod h1:JE0WQuQdy+uLZ5zOaI3Nw9dWGYJIA7mywEtP2lMvnyk=
-github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo=
-github.com/libp2p/go-libp2p-transport-upgrader v0.7.0/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg=
-github.com/libp2p/go-libp2p-transport-upgrader v0.7.1/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg=
-github.com/libp2p/go-libp2p-xor v0.0.0-20210714161855-5c005aca55db/go.mod h1:LSTM5yRnjGZbWNTA/hRwq2gGFrvRIbQJscoIL/u6InY=
github.com/libp2p/go-libp2p-xor v0.1.0 h1:hhQwT4uGrBcuAkUGXADuPltalOdpf9aag9kaYNT2tLA=
github.com/libp2p/go-libp2p-xor v0.1.0/go.mod h1:LSTM5yRnjGZbWNTA/hRwq2gGFrvRIbQJscoIL/u6InY=
-github.com/libp2p/go-libp2p-yamux v0.1.2/go.mod h1:xUoV/RmYkg6BW/qGxA9XJyg+HzXFYkeXbnhjmnYzKp8=
-github.com/libp2p/go-libp2p-yamux v0.1.3/go.mod h1:VGSQVrqkh6y4nm0189qqxMtvyBft44MOYYPpYKXiVt4=
github.com/libp2p/go-libp2p-yamux v0.2.0/go.mod h1:Db2gU+XfLpm6E4rG5uGCFX6uXA8MEXOxFcRoXUODaK8=
github.com/libp2p/go-libp2p-yamux v0.2.1/go.mod h1:1FBXiHDk1VyRM1C0aez2bCfHQ4vMZKkAQzZbkSQt5fI=
github.com/libp2p/go-libp2p-yamux v0.2.2/go.mod h1:lIohaR0pT6mOt0AZ0L2dFze9hds9Req3OfS+B+dv4qw=
@@ -1179,32 +1082,22 @@ github.com/libp2p/go-libp2p-yamux v0.2.7/go.mod h1:X28ENrBMU/nm4I3Nx4sZ4dgjZ6VhL
github.com/libp2p/go-libp2p-yamux v0.2.8/go.mod h1:/t6tDqeuZf0INZMTgd0WxIRbtK2EzI2h7HbFm9eAKI4=
github.com/libp2p/go-libp2p-yamux v0.4.0/go.mod h1:+DWDjtFMzoAwYLVkNZftoucn7PelNoy5nm3tZ3/Zw30=
github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po=
-github.com/libp2p/go-libp2p-yamux v0.5.1/go.mod h1:dowuvDu8CRWmr0iqySMiSxK+W0iL5cMVO9S94Y6gkv4=
github.com/libp2p/go-libp2p-yamux v0.5.4/go.mod h1:tfrXbyaTqqSU654GTvK3ocnSZL3BuHoeTSqhcel1wsE=
-github.com/libp2p/go-libp2p-yamux v0.6.0/go.mod h1:MRhd6mAYnFRnSISp4M8i0ClV/j+mWHo2mYLifWGw33k=
-github.com/libp2p/go-libp2p-yamux v0.8.0/go.mod h1:yTkPgN2ib8FHyU1ZcVD7aelzyAqXXwEPbyx+aSKm9h8=
-github.com/libp2p/go-libp2p-yamux v0.8.1/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE=
-github.com/libp2p/go-libp2p-yamux v0.8.2/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE=
-github.com/libp2p/go-maddr-filter v0.0.1/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q=
github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q=
github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M=
github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU=
github.com/libp2p/go-mplex v0.0.3/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0=
-github.com/libp2p/go-mplex v0.0.4/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0=
github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6aiKgxDU=
github.com/libp2p/go-mplex v0.1.1/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk=
github.com/libp2p/go-mplex v0.1.2/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk=
github.com/libp2p/go-mplex v0.2.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ=
github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ=
-github.com/libp2p/go-mplex v0.4.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E=
-github.com/libp2p/go-mplex v0.6.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E=
github.com/libp2p/go-mplex v0.7.0 h1:BDhFZdlk5tbr0oyFq/xv/NPGfjbnrsDam1EvutpBDbY=
github.com/libp2p/go-mplex v0.7.0/go.mod h1:rW8ThnRcYWft/Jb2jeORBmPd6xuG3dGxWN/W168L9EU=
github.com/libp2p/go-msgio v0.0.2/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ=
github.com/libp2p/go-msgio v0.0.3/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ=
github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ=
github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA=
-github.com/libp2p/go-msgio v0.1.0/go.mod h1:eNlv2vy9V2X/kNldcZ+SShFE++o2Yjxwx6RAYsmgJnE=
github.com/libp2p/go-msgio v0.2.0 h1:W6shmB+FeynDrUVl2dgFQvzfBZcXiyqY4VmpQLu9FqU=
github.com/libp2p/go-msgio v0.2.0/go.mod h1:dBVM1gW3Jk9XqHkU4eKdGvVHdLa51hoGfll6jMJMSlY=
github.com/libp2p/go-nat v0.0.3/go.mod h1:88nUEt0k0JD45Bk93NIwDqjlhiOwOoV36GchpcVc1yI=
@@ -1216,54 +1109,37 @@ github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdm
github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk=
github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A=
github.com/libp2p/go-netroute v0.1.6/go.mod h1:AqhkMh0VuWmfgtxKPp3Oc1LdU5QSWS7wl0QLhSZqXxQ=
-github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE=
-github.com/libp2p/go-netroute v0.2.0/go.mod h1:Vio7LTzZ+6hoT4CMZi5/6CpY3Snzh2vgZhWgxMNwlQI=
+github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU=
+github.com/libp2p/go-netroute v0.2.1/go.mod h1:hraioZr0fhBjG0ZRXJJ6Zj2IVEVNx6tDTFQfSmcq7mQ=
github.com/libp2p/go-openssl v0.0.2/go.mod h1:v8Zw2ijCSWBQi8Pq5GAixw6DbFfa9u6VIYDXnvOXkc0=
github.com/libp2p/go-openssl v0.0.3/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc=
github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc=
github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc=
-github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw=
github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc=
+github.com/libp2p/go-openssl v0.1.0 h1:LBkKEcUv6vtZIQLVTegAil8jbNpJErQ9AnT+bWV+Ooo=
+github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc=
github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA=
github.com/libp2p/go-reuseport v0.0.2/go.mod h1:SPD+5RwGC7rcnzngoYC86GjPzjSywuQyMVAheVBD9nQ=
-github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU=
github.com/libp2p/go-reuseport v0.2.0 h1:18PRvIMlpY6ZK85nIAicSBuXXvrYoSw3dsBAR7zc560=
github.com/libp2p/go-reuseport v0.2.0/go.mod h1:bvVho6eLMm6Bz5hmU0LYN3ixd3nPPvtIlaURZZgOY4k=
github.com/libp2p/go-reuseport-transport v0.0.2/go.mod h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs=
github.com/libp2p/go-reuseport-transport v0.0.3/go.mod h1:Spv+MPft1exxARzP2Sruj2Wb5JSyHNncjf1Oi2dEbzM=
github.com/libp2p/go-reuseport-transport v0.0.4/go.mod h1:trPa7r/7TJK/d+0hdBLOCGvpQQVOU74OXbNCIMkufGw=
-github.com/libp2p/go-reuseport-transport v0.0.5/go.mod h1:TC62hhPc8qs5c/RoXDZG6YmjK+/YWUPC0yYmeUecbjc=
-github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw=
github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k=
github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k=
github.com/libp2p/go-sockaddr v0.1.1/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k=
github.com/libp2p/go-stream-muxer v0.0.1/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14=
-github.com/libp2p/go-stream-muxer v0.1.0/go.mod h1:8JAVsjeRBCWwPoZeH0W1imLOcriqXJyFvB0mR4A04sQ=
-github.com/libp2p/go-stream-muxer-multistream v0.1.1/go.mod h1:zmGdfkQ1AzOECIAcccoL8L//laqawOsO03zX8Sa+eGw=
github.com/libp2p/go-stream-muxer-multistream v0.2.0/go.mod h1:j9eyPol/LLRqT+GPLSxvimPhNph4sfYfMoDPd7HkzIc=
github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA=
-github.com/libp2p/go-stream-muxer-multistream v0.4.0/go.mod h1:nb+dGViZleRP4XcyHuZSVrJCBl55nRBOMmiSL/dyziw=
-github.com/libp2p/go-tcp-transport v0.0.4/go.mod h1:+E8HvC8ezEVOxIo3V5vCK9l1y/19K427vCzQ+xHKH/o=
github.com/libp2p/go-tcp-transport v0.1.0/go.mod h1:oJ8I5VXryj493DEJ7OsBieu8fcg2nHGctwtInJVpipc=
github.com/libp2p/go-tcp-transport v0.1.1/go.mod h1:3HzGvLbx6etZjnFlERyakbaYPdfjg2pWP97dFZworkY=
github.com/libp2p/go-tcp-transport v0.2.0/go.mod h1:vX2U0CnWimU4h0SGSEsg++AzvBcroCGYw28kh94oLe0=
-github.com/libp2p/go-tcp-transport v0.2.1/go.mod h1:zskiJ70MEfWz2MKxvFB/Pv+tPIB1PpPUrHIWQ8aFw7M=
github.com/libp2p/go-tcp-transport v0.2.3/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU=
-github.com/libp2p/go-tcp-transport v0.2.4/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU=
-github.com/libp2p/go-tcp-transport v0.2.7/go.mod h1:lue9p1b3VmZj1MhhEGB/etmvF/nBQ0X9CW2DutBT3MM=
-github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI=
-github.com/libp2p/go-tcp-transport v0.5.0/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y=
-github.com/libp2p/go-tcp-transport v0.5.1/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y=
-github.com/libp2p/go-testutil v0.0.1/go.mod h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I=
github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc=
-github.com/libp2p/go-ws-transport v0.0.5/go.mod h1:Qbl4BxPfXXhhd/o0wcrgoaItHqA9tnZjoFZnxykuaXU=
github.com/libp2p/go-ws-transport v0.1.0/go.mod h1:rjw1MG1LU9YDC6gzmwObkPd/Sqwhw7yT74kj3raBFuo=
github.com/libp2p/go-ws-transport v0.2.0/go.mod h1:9BHJz/4Q5A9ludYWKoGCFC5gUElzlHoKzu0yY9p/klM=
github.com/libp2p/go-ws-transport v0.3.0/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk=
github.com/libp2p/go-ws-transport v0.4.0/go.mod h1:EcIEKqf/7GDjth6ksuS/6p7R49V4CBY6/E7R/iyhYUA=
-github.com/libp2p/go-ws-transport v0.5.0/go.mod h1:I2juo1dNTbl8BKSBYo98XY85kU2xds1iamArLvl8kNg=
-github.com/libp2p/go-ws-transport v0.6.0/go.mod h1:dXqtI9e2JV9FtF1NOtWVZSKXh5zXvnuwPXfj8GPBbYU=
-github.com/libp2p/go-yamux v1.2.1/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow=
github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow=
github.com/libp2p/go-yamux v1.2.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow=
github.com/libp2p/go-yamux v1.3.0/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow=
@@ -1272,24 +1148,16 @@ github.com/libp2p/go-yamux v1.3.5/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZ
github.com/libp2p/go-yamux v1.3.7/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE=
github.com/libp2p/go-yamux v1.4.0/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE=
github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE=
-github.com/libp2p/go-yamux/v2 v2.0.0/go.mod h1:NVWira5+sVUIU6tu1JWvaRn1dRnG+cawOJiflsAM+7U=
github.com/libp2p/go-yamux/v2 v2.2.0/go.mod h1:3So6P6TV6r75R9jiBpiIKgU/66lOarCZjqROGxzPpPQ=
-github.com/libp2p/go-yamux/v2 v2.3.0/go.mod h1:iTU+lOIn/2h0AgKcL49clNTwfEw+WSfDYrXe05EyKIs=
-github.com/libp2p/go-yamux/v3 v3.0.1/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo=
-github.com/libp2p/go-yamux/v3 v3.0.2/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo=
-github.com/libp2p/go-yamux/v3 v3.1.2 h1:lNEy28MBk1HavUAlzKgShp+F6mn/ea1nDYWftZhFW9Q=
-github.com/libp2p/go-yamux/v3 v3.1.2/go.mod h1:jeLEQgLXqE2YqX1ilAClIfCMDY+0uXQUKmmb/qp0gT4=
-github.com/libp2p/zeroconf/v2 v2.1.1 h1:XAuSczA96MYkVwH+LqqqCUZb2yH3krobMJ1YE+0hG2s=
-github.com/libp2p/zeroconf/v2 v2.1.1/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs=
+github.com/libp2p/go-yamux/v4 v4.0.0 h1:+Y80dV2Yx/kv7Y7JKu0LECyVdMXm1VUoko+VQ9rBfZQ=
+github.com/libp2p/go-yamux/v4 v4.0.0/go.mod h1:NWjl8ZTLOGlozrXSOZ/HlfG++39iKNnM5wwmtQP1YB4=
+github.com/libp2p/zeroconf/v2 v2.2.0 h1:Cup06Jv6u81HLhIj1KasuNM/RHHrJ8T7wOTS4+Tv53Q=
+github.com/libp2p/zeroconf/v2 v2.2.0/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs=
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
github.com/lucas-clemente/quic-go v0.19.3/go.mod h1:ADXpNbTQjq1hIzCpB+y/k5iz4n4z4IwqoLb94Kh5Hu8=
-github.com/lucas-clemente/quic-go v0.21.2/go.mod h1:vF5M1XqhBAHgbjKcJOXY3JZz3GP0T3FQhz/uyOUS38Q=
-github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0=
-github.com/lucas-clemente/quic-go v0.24.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0=
-github.com/lucas-clemente/quic-go v0.25.0/go.mod h1:YtzP8bxRVCBlO77yRanE264+fY/T2U9ZlW1AaHOsMOg=
-github.com/lucas-clemente/quic-go v0.27.1 h1:sOw+4kFSVrdWOYmUjufQ9GBVPqZ+tu+jMtXxXNmRJyk=
-github.com/lucas-clemente/quic-go v0.27.1/go.mod h1:AzgQoPda7N+3IqMMMkywBKggIFo2KT6pfnlrQ2QieeI=
+github.com/lucas-clemente/quic-go v0.31.1 h1:O8Od7hfioqq0PMYHDyBkxU2aA7iZ2W9pjbrWuja2YR4=
+github.com/lucas-clemente/quic-go v0.31.1/go.mod h1:0wFbizLgYzqHqtlyxyCaJKlE7bYgE6JQ+54TLd/Dq2g=
github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/machinebox/graphql v0.2.2 h1:dWKpJligYKhYKO5A2gvNhkJdQMNZeChZYyBbrZkBZfo=
@@ -1304,24 +1172,20 @@ github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc=
+github.com/marten-seemann/qpack v0.3.0 h1:UiWstOgT8+znlkDPOg2+3rIuYXJ2CnGDkGUXN6ki6hE=
+github.com/marten-seemann/qpack v0.3.0/go.mod h1:cGfKPBiP4a9EQdxCwEwI/GEeWAsjSekBvx/X8mh58+g=
github.com/marten-seemann/qtls v0.10.0/go.mod h1:UvMd1oaYDACI99/oZUYLzMCkBXQVT0aGm99sJhbT8hs=
github.com/marten-seemann/qtls-go1-15 v0.1.1/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I=
-github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I=
-github.com/marten-seemann/qtls-go1-15 v0.1.5/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I=
-github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk=
-github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ=
-github.com/marten-seemann/qtls-go1-16 v0.1.5/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk=
-github.com/marten-seemann/qtls-go1-17 v0.1.0-rc.1/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8=
-github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8=
-github.com/marten-seemann/qtls-go1-17 v0.1.1 h1:DQjHPq+aOzUeh9/lixAGunn6rIOQyWChPSI4+hgW7jc=
-github.com/marten-seemann/qtls-go1-17 v0.1.1/go.mod h1:C2ekUKcDdz9SDWxec1N/MvcXBpaX9l3Nx67XaR84L5s=
-github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1/go.mod h1:PUhIQk19LoFt2174H4+an8TYvWOGjb/hHwphBeaDHwI=
-github.com/marten-seemann/qtls-go1-18 v0.1.1 h1:qp7p7XXUFL7fpBvSS1sWD+uSqPvzNQK43DH+/qEkj0Y=
-github.com/marten-seemann/qtls-go1-18 v0.1.1/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4=
+github.com/marten-seemann/qtls-go1-18 v0.1.3 h1:R4H2Ks8P6pAtUagjFty2p7BVHn3XiwDAl7TTQf5h7TI=
+github.com/marten-seemann/qtls-go1-18 v0.1.3/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4=
+github.com/marten-seemann/qtls-go1-19 v0.1.1 h1:mnbxeq3oEyQxQXwI4ReCgW9DPoPR94sNlqWoDZnjRIE=
+github.com/marten-seemann/qtls-go1-19 v0.1.1/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI=
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk=
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU=
-github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE=
-github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
+github.com/marten-seemann/webtransport-go v0.4.3 h1:vkt5o/Ci+luknRteWdYGYH1KcB7ziup+J+1PzZJIvmg=
+github.com/marten-seemann/webtransport-go v0.4.3/go.mod h1:4xcfySgZMLP4aG5GBGj1egP7NlpfwgYJ1WJMvPPiVMU=
+github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ=
+github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
@@ -1329,8 +1193,9 @@ github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
-github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
-github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
+github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
+github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
+github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
@@ -1339,8 +1204,12 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
+github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0=
+github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc=
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
@@ -1348,22 +1217,24 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
+github.com/mattn/go-sqlite3 v2.0.1+incompatible h1:xQ15muvnzGBHpIpdrNi1DA5x0+TcBZzsIDwmw9uTHzw=
github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
-github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
-github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE=
-github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
+github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
+github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
+github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
-github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
-github.com/miekg/dns v1.1.48 h1:Ucfr7IIVyMBz4lRE8qmGUuZ4Wt3/ZGu9hmcMT3Uu4tQ=
-github.com/miekg/dns v1.1.48/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
+github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA=
+github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8=
github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms=
github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc=
@@ -1396,7 +1267,7 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ=
github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8=
github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8=
github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
@@ -1405,10 +1276,11 @@ github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o=
github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc=
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg=
github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA=
-github.com/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE=
-github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM=
-github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4=
+github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE=
+github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI=
github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM=
+github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0=
+github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4=
github.com/multiformats/go-multiaddr v0.0.1/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44=
github.com/multiformats/go-multiaddr v0.0.2/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44=
github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44=
@@ -1420,10 +1292,8 @@ github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u
github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI=
github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc=
github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0=
-github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc=
-github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM=
-github.com/multiformats/go-multiaddr v0.5.0 h1:i/JuOoVg4szYQ4YEzDGtb2h0o8M7CG/Yq6cGlcjWZpM=
-github.com/multiformats/go-multiaddr v0.5.0/go.mod h1:3KAxNkUqLTJ20AAwN4XVX4kZar+bR+gh4zgbfr3SNug=
+github.com/multiformats/go-multiaddr v0.8.0 h1:aqjksEcqK+iD/Foe1RRFsGZh8+XFiGo7FgUCZlpv3LU=
+github.com/multiformats/go-multiaddr v0.8.0/go.mod h1:Fs50eBDWvZu+l3/9S6xAE7ZYj6yhxlvaVZjakWN7xRs=
github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q=
github.com/multiformats/go-multiaddr-dns v0.0.2/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q=
github.com/multiformats/go-multiaddr-dns v0.2.0/go.mod h1:TJ5pr5bBO7Y1B18djPuRsVkduhQH2YqYSbxWJzYGdK0=
@@ -1443,32 +1313,21 @@ github.com/multiformats/go-multiaddr-net v0.1.5/go.mod h1:ilNnaM9HbmVFqsb/qcNysj
github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA=
github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs=
github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc=
-github.com/multiformats/go-multibase v0.1.0 h1:+cr9718eEwFIUxPP7sQmixYYhD4sRrU9aMXqYb+0diE=
-github.com/multiformats/go-multibase v0.1.0/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8=
-github.com/multiformats/go-multicodec v0.2.0/go.mod h1:/y4YVwkfMyry5kFbMTbLJKErhycTIftytRV+llXdyS4=
-github.com/multiformats/go-multicodec v0.3.0/go.mod h1:qGGaQmioCDh+TeFOnxrbU0DaIPw8yFgAZgFG0V7p1qQ=
-github.com/multiformats/go-multicodec v0.3.1-0.20210902112759-1539a079fd61/go.mod h1:1Hj/eHRaVWSXiSNNfcEPcwZleTmdNP81xlxDLnWU9GQ=
-github.com/multiformats/go-multicodec v0.3.1-0.20211210143421-a526f306ed2c/go.mod h1:1Hj/eHRaVWSXiSNNfcEPcwZleTmdNP81xlxDLnWU9GQ=
-github.com/multiformats/go-multicodec v0.4.1/go.mod h1:1Hj/eHRaVWSXiSNNfcEPcwZleTmdNP81xlxDLnWU9GQ=
-github.com/multiformats/go-multicodec v0.5.0 h1:EgU6cBe/D7WRwQb1KmnBvU7lrcFGMggZVTPtOW9dDHs=
-github.com/multiformats/go-multicodec v0.5.0/go.mod h1:DiY2HFaEp5EhEXb/iYzVAunmyX/aSFMxq2KMKfWEues=
+github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI=
+github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8=
+github.com/multiformats/go-multicodec v0.7.0 h1:rTUjGOwjlhGHbEMbPoSUJowG1spZTVsITRANCjKTUAQ=
+github.com/multiformats/go-multicodec v0.7.0/go.mod h1:GUC8upxSBE4oG+q3kWZRw/+6yC1BqO550bjhWsJbZlw=
github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U=
github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po=
github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew=
-github.com/multiformats/go-multihash v0.0.9/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew=
github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew=
github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc=
github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc=
github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg=
-github.com/multiformats/go-multihash v0.0.16/go.mod h1:zhfEIgVnB/rPMfxgFw15ZmGoNaKyNUIE4IWHG/kC+Ag=
-github.com/multiformats/go-multihash v0.1.0/go.mod h1:RJlXsxt6vHGaia+S8We0ErjhojtKzPP2AH4+kYM7k84=
-github.com/multiformats/go-multihash v0.2.0 h1:oytJb9ZA1OUW0r0f9ea18GiaPOo4SXyc7p2movyUuo4=
-github.com/multiformats/go-multihash v0.2.0/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc=
-github.com/multiformats/go-multistream v0.0.1/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg=
-github.com/multiformats/go-multistream v0.0.4/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg=
+github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108=
+github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc=
github.com/multiformats/go-multistream v0.1.0/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg=
github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38=
-github.com/multiformats/go-multistream v0.2.0/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k=
github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k=
github.com/multiformats/go-multistream v0.2.2/go.mod h1:UIcnm7Zuo8HKG+HkWgfQsGL+/MIEhyTqbODbIUwSXKs=
github.com/multiformats/go-multistream v0.3.3 h1:d5PZpjwRgVlbwfdTDjife7XszfZd8KYWfROYFlGcR8o=
@@ -1476,8 +1335,9 @@ github.com/multiformats/go-multistream v0.3.3/go.mod h1:ODRoqamLUsETKS9BNcII4gcR
github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
-github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY=
github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
+github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8=
+github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
@@ -1494,32 +1354,32 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
-github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
-github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E=
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
-github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc=
github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
+github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU=
+github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts=
github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY=
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
-github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw=
github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
+github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E=
+github.com/onsi/gomega v1.27.4/go.mod h1:riYq/GJKh8hhoM01HN6Vmuy93AarCXCBGpvFDK3q3fQ=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0=
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
@@ -1545,11 +1405,10 @@ github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtP
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
-github.com/pelletier/go-toml/v2 v2.0.0-beta.8 h1:dy81yyLYJDwMTifq24Oi/IslOslRrDSb3jwDggjz3Z0=
-github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
+github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg=
+github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas=
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+Tv1WTxkukpXeMlviSxvL7SRgk=
-github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw=
github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM=
github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0=
@@ -1558,6 +1417,9 @@ github.com/pganalyze/pg_query_go/v2 v2.1.0/go.mod h1:XAxmVqz1tEGqizcQ3YSdN90vCOH
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
+github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -1579,70 +1441,62 @@ github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU=
github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU=
-github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk=
-github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
+github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw=
+github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4=
+github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
-github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
-github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
-github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.33.0 h1:rHgav/0a6+uYgGdNt3jwz8FNSesO/Hsang3O0T9A5SE=
-github.com/prometheus/common v0.33.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE=
+github.com/prometheus/common v0.39.0 h1:oOyhkDq05hPZKItWVBkJ6g6AtGxi+fy7F4JvUV8uhsI=
+github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y=
github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
-github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/tsdb v0.10.0 h1:If5rVCMTp6W2SiRAQFlbpJNgVlgMEd+U2GZckwK38ic=
-github.com/prometheus/tsdb v0.10.0/go.mod h1:oi49uRhEe9dPUTlS3JRZOwJuVi6tmh10QSgwXEyGCt4=
-github.com/raulk/clock v1.1.0 h1:dpb29+UKMbLqiU/jqIJptgLR1nn23HLgMY0sTCDza5Y=
-github.com/raulk/clock v1.1.0/go.mod h1:3MpVxdZ/ODBQDxbN+kzshf5OSZwPjtMDx6BBXBmOeY0=
-github.com/raulk/go-watchdog v1.2.0 h1:konN75pw2BMmZ+AfuAm5rtFsWcJpKF3m02rKituuXNo=
-github.com/raulk/go-watchdog v1.2.0/go.mod h1:lzSbAl5sh4rtI8tYHU01BWIDzgzqaQLj6RcA1i4mlqI=
+github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI=
+github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY=
+github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk=
+github.com/raulk/go-watchdog v1.3.0/go.mod h1:fIvOnLbF0b0ZwkB9YU4mOW9Did//4vPZtDqv66NfsMU=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc=
-github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE=
-github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
-github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o=
+github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
+github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=
-github.com/rs/zerolog v1.21.0/go.mod h1:ZPhntP/xmq1nnND05hhpAh2QMhSsA4UN3MGZ6O2J3hM=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/samber/lo v1.36.0 h1:4LaOxH1mHnbDGhTVE0i1z8v/lWaQW8AIfOD3HU4mSaw=
+github.com/samber/lo v1.36.0/go.mod h1:HLeWcJRRyLKp3+/XBJvOrerCQn9mhdKMHyd7IRlgeQ8=
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtrmhM=
github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY=
@@ -1684,13 +1538,11 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
-github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8=
github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM=
-github.com/smartystreets/assertions v1.0.1 h1:voD4ITNjPL5jjBfgR/r8fPIIBrliWrWHeiJApdr3r4w=
-github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM=
github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa/go.mod h1:2RVY1rIf+2J2o/IM9+vPq9RzmHDSseB7FoXiSNIUsoU=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
@@ -1727,15 +1579,17 @@ github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DM
github.com/spf13/viper v1.11.0 h1:7OX/1FS6n7jHD1zGrZTM7WtY13ZELRyosK4k93oPr44=
github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk=
github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc=
-github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg=
-github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q=
+github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA=
+github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg=
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
@@ -1744,8 +1598,10 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
@@ -1754,42 +1610,34 @@ github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJ
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
github.com/thoas/go-funk v0.9.2 h1:oKlNYv0AY5nyf9g+/GhMgS/UO2ces0QRdPKwkhY3VCk=
github.com/thoas/go-funk v0.9.2/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q=
-github.com/tidwall/gjson v1.14.0 h1:6aeJ0bzojgWLa82gDQHcx3S0Lr/O51I9bJ5nv6JFx5w=
-github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
-github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
-github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
-github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
-github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
-github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4=
-github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI=
-github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA=
-github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM=
+github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
+github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
+github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms=
+github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ=
github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM=
-github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZW24CsNJDfeh9Ex6Pm0Rcpc7qrgKBiL44vF4=
-github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs=
+github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8=
+github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U=
+github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
+github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
-github.com/urfave/cli/v2 v2.0.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
-github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y=
-github.com/urfave/cli/v2 v2.10.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo=
+github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa h1:5SqCsI/2Qya2bCzK15ozrqo2sZxkh0FHynJZOTVoV6Q=
+github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa/go.mod h1:1CNUng3PtjQMtRzJO4FMXBQvkGtuYRxxiR9xMa7jMwI=
+github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
-github.com/valyala/fastjson v1.6.3 h1:tAKFnnwmeMGPbwJ7IwxcTPCNr3uIzoIj3/Fh90ra4xc=
-github.com/valyala/fastjson v1.6.3/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
+github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w=
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
+github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU=
github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM=
-github.com/vulcanize/gap-filler v0.4.2 h1:agi++vcjvyPN53Ah17UWq7qpi2uKW/9asXqPiimDxKY=
-github.com/vulcanize/gap-filler v0.4.2/go.mod h1:V5Qad/ihLQT4mI2EgWKNrXqGG5QqOKLHMQRnfFtbu68=
-github.com/wI2L/jsondiff v0.2.0 h1:dE00WemBa1uCjrzQUUTE/17I6m5qAaN0EMFOg2Ynr/k=
-github.com/wI2L/jsondiff v0.2.0/go.mod h1:axTcwtBkY4TsKuV+RgoMhHyHKKFRI6nnjRLi8LLYQnA=
github.com/wangjia184/sortedset v0.0.0-20160527075905-f5d03557ba30/go.mod h1:YkocrP2K2tcw938x9gCOmT5G5eCD6jsTz0SZuyAqwIE=
-github.com/warpfork/go-testmark v0.3.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0=
github.com/warpfork/go-testmark v0.10.0 h1:E86YlUMYfwIacEsQGlnTvjk1IgYkyTGjPhF0RnwTCmw=
github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw=
@@ -1798,11 +1646,9 @@ github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvS
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc h1:BCPnHtcboadS0DvysUuJXZ4lWVv5Bh5i7+tbIyi+ck4=
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc/go.mod h1:r45hJU7yEoA81k6MWNhpMj/kms0n14dkzkxYHoB96UM=
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 h1:5HZfQkwe0mIfyDmc1Em5GqlNRzcdtlv4HTNmdpt7XH0=
-github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11/go.mod h1:Wlo/SzPmxVp6vXpGt/zaXhHH0fn4IxgqZc82aKg6bpQ=
github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI=
-github.com/whyrusleeping/cbor-gen v0.0.0-20200710004633-5379fc63235d/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ=
-github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2 h1:bsUlNhdmbtlfdLVXAVfuvKQ01RnWAM09TVrJkI7NZs4=
-github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ=
+github.com/whyrusleeping/cbor-gen v0.0.0-20221220214510-0333c149dec0 h1:obKzQ1ey5AJg5NKjgtTo/CKwLImVP4ETLRcsmzFJ4Qw=
+github.com/whyrusleeping/cbor-gen v0.0.0-20221220214510-0333c149dec0/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ=
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E=
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8=
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k=
@@ -1815,20 +1661,26 @@ github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30/go.mod h1:j4l84
github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4=
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds=
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI=
-github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee h1:lYbXeSvJi5zk5GLKVuid9TVjS9a0OmLIDKTfoZBL6Ow=
-github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg=
github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE=
+github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
+github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
+github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI=
+github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg=
+github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM=
+github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
@@ -1844,11 +1696,9 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
-go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
-go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo=
-go.opentelemetry.io/otel v1.2.0/go.mod h1:aT17Fk0Z1Nor9e0uisf98LrntPGMnk4frBO9+dkf69I=
-go.opentelemetry.io/otel v1.6.3/go.mod h1:7BgNga5fNlF/iZjG06hM3yofffp0ofKCDwSXx1GC4dI=
+go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
+go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
go.opentelemetry.io/otel v1.7.0 h1:Z2lA3Tdch0iDcrhJXDIlC94XE+bxok1F9B+4Lz/lGsM=
go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk=
go.opentelemetry.io/otel/exporters/jaeger v1.7.0 h1:wXgjiRldljksZkZrldGVe6XrG9u3kYDyQmkZwmm5dI0=
@@ -1858,43 +1708,30 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.7.0 h1:MFAyzU
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.7.0 h1:pLP0MH4MAqeTEV0g/4flxw9O8Is48uAIauAnjznbW50=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.7.0 h1:8hPcgCg0rUJiKE6VWahRvjgLUrNl7rW2hffUEPKXVEM=
go.opentelemetry.io/otel/exporters/zipkin v1.7.0 h1:X0FZj+kaIdLi29UiyrEGDhRTYsEXj9GdEW5Y39UQFEE=
-go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU=
-go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw=
-go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc=
-go.opentelemetry.io/otel/sdk v1.2.0/go.mod h1:jNN8QtpvbsKhgaC6V5lHiejMoKD+V8uadoSafgHPx1U=
go.opentelemetry.io/otel/sdk v1.7.0 h1:4OmStpcKVOfvDOgCt7UriAPtKolwIhxpnSNI/yK+1B0=
-go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
-go.opentelemetry.io/otel/trace v1.2.0/go.mod h1:N5FLswTubnxKxOJHM7XZC074qpeEdLy3CgAVsdMucK0=
-go.opentelemetry.io/otel/trace v1.6.3/go.mod h1:GNJQusJlUgZl9/TQBPKU/Y/ty+0iVB5fjhKeJGZPGFs=
go.opentelemetry.io/otel/trace v1.7.0 h1:O37Iogk1lEkMRXewVtZ1BBTVn5JEp8GrJvP92bJqC6o=
go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU=
-go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
go.opentelemetry.io/proto/otlp v0.16.0 h1:WHzDWdXUvbc5bG2ObdrGfaNpQz7ft7QN9HHmJlbiB1E=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
-go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
-go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
-go.uber.org/dig v1.12.0/go.mod h1:X34SnWGr8Fyla9zQNO2GSO2D+TIuqB14OS8JhYocIyw=
-go.uber.org/dig v1.14.0 h1:VmGvIH45/aapXPQkaOrK5u4B5B7jxZB98HM/utx0eME=
-go.uber.org/dig v1.14.0/go.mod h1:jHAn/z1Ld1luVVyGKOAIFYz/uBFqKjjEEdIqVAqfQ2o=
-go.uber.org/fx v1.16.0 h1:N8i80+X1DCX+qMRiKzM+jPPZiIiyK/bVCysga3+B+1w=
-go.uber.org/fx v1.16.0/go.mod h1:OMoT5BnXcOaiexlpjtpE4vcAmzyDKyRs9TRYXCzamx8=
+go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
+go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
+go.uber.org/dig v1.15.0 h1:vq3YWr8zRj1eFGC7Gvf907hE0eRjPTZ1d3xHadD6liE=
+go.uber.org/dig v1.15.0/go.mod h1:pKHs0wMynzL6brANhB2hLMro+zalv1osARTviTcqHLM=
+go.uber.org/fx v1.18.2 h1:bUNI6oShr+OVFQeU8cDNbnN7VFsu+SsjHzUF51V/GAU=
+go.uber.org/fx v1.18.2/go.mod h1:g0V1KMQ66zIRk8bLu3Ea5Jt2w/cHlOIp4wdRsgh0JaY=
go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
-go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
-go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
-go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
-go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
-go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=
-go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
+go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
+go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
@@ -1902,11 +1739,9 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
-go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
-go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
-go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8=
-go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
+go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
+go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
go4.org v0.0.0-20200411211856-f5505b9728dd h1:BNJlw5kRTzdmyfh5U8F93HA2OwkP7ZGwA51eJ/0wKOU=
go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg=
@@ -1918,7 +1753,6 @@ golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnf
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -1935,10 +1769,10 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -1949,22 +1783,18 @@ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWP
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
-golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM=
-golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
+golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
-golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
@@ -1972,8 +1802,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
-golang.org/x/exp v0.0.0-20210615023648-acb5c1269671/go.mod h1:DVyR6MI7P4kEQgvZJSj1fQGrWIi2RzIrfYWycwheUAc=
-golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5 h1:rxKZ2gOnYxjfmakvUUqh9Gyb6KXfrj7JWTxORTYqb0E=
+golang.org/x/exp v0.0.0-20230206171751-46f607a40771 h1:xP7rWLUr1e1n2xkK5YB4LI0hPEy3LJC6Wk+D4pGlOJg=
+golang.org/x/exp v0.0.0-20230206171751-46f607a40771/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -1989,21 +1819,21 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
-golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o=
-golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=
+golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -2021,6 +1851,7 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -2032,6 +1863,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -2048,7 +1880,6 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
@@ -2060,15 +1891,14 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
-golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220517181318-183a9ca12b87/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220607020251-c690dde0001d h1:4SFsTMi4UahlKoloni7L4eYzhFRifURQLw+yv0QDCx8=
golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -2080,8 +1910,6 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -2093,8 +1921,10 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -2120,7 +1950,6 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190524122548-abf6ff778158/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190524152521-dbbf3f1254d4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190526052359-791d8a0f4d09/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -2137,7 +1966,6 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -2167,7 +1995,6 @@ golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -2176,32 +2003,35 @@ golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
+golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -2210,15 +2040,18 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20220922220347-f3bd1da661af h1:Yx9k8YCG3dvF87UAn2tu2HQLf2dt/eR1bXxpLMWeH+Y=
+golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -2226,12 +2059,14 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
@@ -2246,7 +2081,6 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -2258,7 +2092,6 @@ golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapK
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200108203644-89082a384178/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
@@ -2288,18 +2121,21 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20=
-golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4=
+golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618=
golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
+golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
+golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
@@ -2338,6 +2174,7 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
@@ -2368,7 +2205,6 @@ google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfG
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
@@ -2382,7 +2218,9 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac h1:qSNTkEN+L2mvWcLgJOR+8bdHX9rN/IdU3A1Ghpfb1Rg=
+google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
@@ -2404,12 +2242,10 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
-google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
-google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
+google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.46.0 h1:oCjezcn6g6A75TGoKYBPgKmVBLexhYLM6MebdrPApP8=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@@ -2424,8 +2260,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
-google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
+google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -2436,10 +2272,14 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
+gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
+gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
-gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU=
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
@@ -2459,6 +2299,7 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
@@ -2477,8 +2318,6 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
-lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA=
lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0=
lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
diff --git a/integration/deploy_helpers.go b/integration/deploy_helpers.go
new file mode 100644
index 00000000..d1ce6ec3
--- /dev/null
+++ b/integration/deploy_helpers.go
@@ -0,0 +1,82 @@
+package integration
+
+import (
+ "encoding/json"
+ "fmt"
+ "math/big"
+ "net/http"
+
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/rpc"
+ "github.com/ethereum/go-ethereum/statediff/types"
+)
+
+type ContractDeployed struct {
+ Address common.Address `json:"address"`
+ TransactionHash common.Hash `json:"txHash"`
+ BlockNumber int64 `json:"blockNumber"`
+ BlockHash common.Hash `json:"blockHash"`
+}
+
+type ContractDestroyed struct {
+ BlockNumber int64 `json:"blockNumber"`
+}
+
+type Tx struct {
+ From string `json:"from"`
+ To string `json:"to"`
+ Value *big.Int `json:"value"`
+ TransactionHash string `json:"txHash"`
+ BlockNumber int64 `json:"blockNumber"`
+ BlockHash string `json:"blockHash"`
+}
+
+type StorageKey struct {
+ Key string `json:"key"`
+}
+
+type CountIncremented struct {
+ BlockNumber *big.Int `json:"blockNumber"`
+}
+
+const ContractServerUrl = "http://localhost:3000"
+
+// Factory which creates endpoint functions
+func MakeGetAndDecodeFunc[R any](format string) func(...interface{}) (*R, error) {
+ return func(params ...interface{}) (*R, error) {
+ params = append([]interface{}{ContractServerUrl}, params...)
+ url := fmt.Sprintf(format, params...)
+ res, err := http.Get(url)
+ if err != nil {
+ return nil, err
+ }
+ defer res.Body.Close()
+
+ if res.StatusCode != http.StatusOK {
+ return nil, fmt.Errorf("%s: %s", url, res.Status)
+ }
+
+ var data R
+ decoder := json.NewDecoder(res.Body)
+ return &data, decoder.Decode(&data)
+ }
+}
+
+var (
+ DeployContract = MakeGetAndDecodeFunc[ContractDeployed]("%s/v1/deployContract")
+ DestroyContract = MakeGetAndDecodeFunc[ContractDestroyed]("%s/v1/destroyContract?addr=%s")
+ DeploySLVContract = MakeGetAndDecodeFunc[ContractDeployed]("%s/v1/deploySLVContract")
+ DestroySLVContract = MakeGetAndDecodeFunc[ContractDestroyed]("%s/v1/destroySLVContract?addr=%s")
+ SendEth = MakeGetAndDecodeFunc[Tx]("%s/v1/sendEth?to=%s&value=%s")
+ GetStorageSlotKey = MakeGetAndDecodeFunc[StorageKey]("%s/v1/getStorageKey?contract=%s&label=%s")
+ IncrementCount = MakeGetAndDecodeFunc[CountIncremented]("%s/v1/incrementCount%s?addr=%s")
+ Create2Contract = MakeGetAndDecodeFunc[ContractDeployed]("%s/v1/create2Contract?contract=%s&salt=%s")
+)
+
+func ClearWatchedAddresses(gethRPCClient *rpc.Client) error {
+ gethMethod := "statediff_watchAddress"
+ args := []types.WatchAddressArg{}
+
+ // Clear watched addresses
+ return gethRPCClient.Call(nil, gethMethod, types.Clear, args)
+}
diff --git a/integration/direct_proxy_integration_test.go b/integration/direct_proxy_integration_test.go
new file mode 100644
index 00000000..5b2b5df7
--- /dev/null
+++ b/integration/direct_proxy_integration_test.go
@@ -0,0 +1,378 @@
+package integration_test
+
+import (
+ "context"
+ "math/big"
+ "math/rand"
+
+ "github.com/ethereum/go-ethereum"
+ "github.com/ethereum/go-ethereum/common"
+ . "github.com/onsi/ginkgo/v2"
+ . "github.com/onsi/gomega"
+
+ "github.com/cerc-io/ipld-eth-server/v5/integration"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
+)
+
+var _ = Describe("Direct proxy integration test", Label("proxy"), func() {
+ ctx := context.Background()
+
+ var contract *integration.ContractDeployed
+ var tx *integration.Tx
+ var contractErr error
+ var txErr error
+
+ Describe("get Block", func() {
+ BeforeEach(func() {
+ contract, contractErr = integration.DeployContract()
+ Expect(contractErr).ToNot(HaveOccurred())
+ })
+
+ It("get not existing block by number", func() {
+ blockNum := contract.BlockNumber + 100
+
+ gethBlock, err := gethClient.BlockByNumber(ctx, big.NewInt(blockNum))
+ Expect(err).To(MatchError(ethereum.NotFound))
+ Expect(gethBlock).To(BeZero())
+
+ ipldBlock, err := ipldClient.BlockByNumber(ctx, big.NewInt(blockNum))
+ Expect(err).To(MatchError(ethereum.NotFound))
+ Expect(ipldBlock).To(BeZero())
+ })
+
+ It("get not existing block by hash", func() {
+ gethBlock, err := gethClient.BlockByHash(ctx, nonExistingBlockHash)
+ Expect(err).To(MatchError(ethereum.NotFound))
+ Expect(gethBlock).To(BeZero())
+
+ ipldBlock, err := ipldClient.BlockByHash(ctx, nonExistingBlockHash)
+ Expect(err).To(MatchError(ethereum.NotFound))
+ Expect(ipldBlock).To(BeZero())
+ })
+
+ It("get block by number", func() {
+ blockNum := contract.BlockNumber
+
+ _, err := gethClient.BlockByNumber(ctx, big.NewInt(blockNum))
+ Expect(err).ToNot(HaveOccurred())
+
+ _, err = ipldClient.BlockByNumber(ctx, big.NewInt(blockNum))
+ Expect(err).To(HaveOccurred())
+ })
+
+ It("get block by hash", func() {
+ _, err := gethClient.BlockByHash(ctx, contract.BlockHash)
+ Expect(err).ToNot(HaveOccurred())
+
+ _, err = ipldClient.BlockByHash(ctx, contract.BlockHash)
+ Expect(err).To(HaveOccurred())
+ })
+ })
+
+ Describe("Transaction", func() {
+ BeforeEach(func() {
+ contract, contractErr = integration.DeployContract()
+ Expect(contractErr).ToNot(HaveOccurred())
+ })
+
+ It("Get tx by hash", func() {
+ _, _, err := gethClient.TransactionByHash(ctx, contract.TransactionHash)
+ Expect(err).ToNot(HaveOccurred())
+
+ _, _, err = ipldClient.TransactionByHash(ctx, contract.TransactionHash)
+ Expect(err).To(HaveOccurred())
+ Expect(err.Error()).To(ContainSubstring("not found"))
+ })
+
+ It("Get tx by block hash and index", func() {
+ _, err := gethClient.TransactionInBlock(ctx, contract.BlockHash, 0)
+ Expect(err).ToNot(HaveOccurred())
+
+ _, err = ipldClient.TransactionInBlock(ctx, contract.BlockHash, 0)
+ Expect(err).To(HaveOccurred())
+ Expect(err.Error()).To(ContainSubstring("not found"))
+ })
+ })
+
+ Describe("Receipt", func() {
+ BeforeEach(func() {
+ contract, contractErr = integration.DeployContract()
+ Expect(contractErr).ToNot(HaveOccurred())
+ })
+
+ It("Get tx receipt", func() {
+ _, err := gethClient.TransactionReceipt(ctx, contract.TransactionHash)
+ Expect(err).ToNot(HaveOccurred())
+
+ _, err = ipldClient.TransactionReceipt(ctx, contract.TransactionHash)
+ Expect(err).To(HaveOccurred())
+ Expect(err.Error()).To(ContainSubstring("not found"))
+ })
+ })
+
+ Describe("FilterLogs", func() {
+ BeforeEach(func() {
+ contract, contractErr = integration.DeployContract()
+ Expect(contractErr).ToNot(HaveOccurred())
+ })
+
+ It("with blockhash", func() {
+ blockHash := contract.BlockHash
+ filterQuery := ethereum.FilterQuery{
+ //Addresses: addresses,
+ BlockHash: &blockHash,
+ Topics: [][]common.Hash{},
+ }
+
+ gethLogs, err := gethClient.FilterLogs(ctx, filterQuery)
+ Expect(err).ToNot(HaveOccurred())
+
+ ipldLogs, err := ipldClient.FilterLogs(ctx, filterQuery)
+ Expect(err).ToNot(HaveOccurred())
+
+ // not empty list
+ Expect(gethLogs).ToNot(BeEmpty())
+ // empty list
+ Expect(ipldLogs).To(BeEmpty())
+ })
+ })
+
+ Describe("CodeAt", func() {
+ BeforeEach(func() {
+ contract, contractErr = integration.DeployContract()
+ Expect(contractErr).ToNot(HaveOccurred())
+ })
+
+ It("gets code of deployed contract with block number", func() {
+ _, err := gethClient.CodeAt(ctx, contract.Address, big.NewInt(contract.BlockNumber))
+ Expect(err).ToNot(HaveOccurred())
+
+ ipldCode, err := ipldClient.CodeAt(ctx, contract.Address, big.NewInt(contract.BlockNumber))
+ Expect(err).ToNot(HaveOccurred())
+ Expect(ipldCode).To(BeEmpty())
+ })
+ It("gets code of contract that doesn't exist at this height", func() {
+ gethCode, err := gethClient.CodeAt(ctx, contract.Address, big.NewInt(contract.BlockNumber-1))
+ Expect(err).ToNot(HaveOccurred())
+
+ ipldCode, err := ipldClient.CodeAt(ctx, contract.Address, big.NewInt(contract.BlockNumber-1))
+ Expect(err).ToNot(HaveOccurred())
+
+ Expect(gethCode).To(BeEmpty())
+ Expect(gethCode).To(Equal(ipldCode))
+ })
+
+ It("gets code at non-existing address without block number", func() {
+ gethCode, err := gethClient.CodeAt(ctx, nonExistingAddress, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ ipldCode, err := ipldClient.CodeAt(ctx, nonExistingAddress, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ Expect(gethCode).To(BeEmpty())
+ Expect(gethCode).To(Equal(ipldCode))
+ })
+ It("gets code of deployed contract without block number", func() {
+ _, err := gethClient.CodeAt(ctx, contract.Address, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ ipldCode, err := ipldClient.CodeAt(ctx, contract.Address, nil)
+ Expect(err).ToNot(HaveOccurred())
+ Expect(ipldCode).To(BeEmpty())
+ })
+ })
+
+ Describe("Get balance", func() {
+ var newAddress common.Address
+ rand.Read(newAddress[:])
+
+ BeforeEach(func() {
+ tx, txErr = integration.SendEth(newAddress, "0.01")
+ Expect(txErr).ToNot(HaveOccurred())
+ })
+
+ It("gets balance for an account with eth without block number", func() {
+ gethBalance, err := gethClient.BalanceAt(ctx, newAddress, nil)
+ Expect(err).ToNot(HaveOccurred())
+ Expect(gethBalance.String()).To(Equal("10000000000000000"))
+
+ ipldBalance, err := ipldClient.BalanceAt(ctx, newAddress, nil)
+ Expect(err).ToNot(HaveOccurred())
+ Expect(ipldBalance.String()).To(Equal("0"))
+ })
+ It("gets balance for an account with eth with block number", func() {
+ _, err := gethClient.BalanceAt(ctx, newAddress, big.NewInt(tx.BlockNumber))
+ Expect(err).ToNot(HaveOccurred())
+
+ _, err = ipldClient.BalanceAt(ctx, newAddress, big.NewInt(tx.BlockNumber))
+ Expect(err).To(MatchError("header not found"))
+ })
+ It("gets historical balance for an account with eth with block number", func() {
+ _, err := gethClient.BalanceAt(ctx, newAddress, big.NewInt(tx.BlockNumber-1))
+ Expect(err).ToNot(HaveOccurred())
+
+ _, err = ipldClient.BalanceAt(ctx, newAddress, big.NewInt(tx.BlockNumber-1))
+ Expect(err).To(MatchError("header not found"))
+ })
+
+ It("gets balance for a non-existing account without block number", func() {
+ gethBalance, err := gethClient.BalanceAt(ctx, nonExistingAddress, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ ipldBalance, err := ipldClient.BalanceAt(ctx, nonExistingAddress, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ Expect(gethBalance).To(Equal(ipldBalance))
+ })
+ It("gets balance for an non-existing block number", func() {
+ gethBalance, err := gethClient.BalanceAt(ctx, newAddress, big.NewInt(tx.BlockNumber+3))
+ Expect(err).To(MatchError("header not found"))
+
+ ipldBalance, err := ipldClient.BalanceAt(ctx, nonExistingAddress, big.NewInt(tx.BlockNumber+3))
+ Expect(err).To(MatchError("header not found"))
+
+ Expect(gethBalance).To(Equal(ipldBalance))
+ })
+ })
+
+ Describe("Get Storage", func() {
+ BeforeEach(func() {
+ contract, contractErr = integration.DeployContract()
+ Expect(contractErr).ToNot(HaveOccurred())
+ })
+
+ It("gets ERC20 total supply (without block number)", func() {
+ gethStorage, err := gethClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ gethTotalSupply := new(big.Int).SetBytes(gethStorage)
+ Expect(gethTotalSupply).To(Equal(erc20TotalSupply))
+
+ ipldStorage, err := ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, nil)
+ Expect(err).ToNot(HaveOccurred())
+ Expect(ipldStorage).To(Equal(make([]byte, 32)))
+ })
+
+ It("gets ERC20 total supply (with block number)", func() {
+ gethStorage, err := gethClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(contract.BlockNumber))
+ Expect(err).ToNot(HaveOccurred())
+
+ gethTotalSupply := new(big.Int).SetBytes(gethStorage)
+ Expect(gethTotalSupply).To(Equal(erc20TotalSupply))
+
+ _, err = ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(contract.BlockNumber))
+ Expect(err).To(MatchError("header not found"))
+ })
+
+ It("gets storage for non-existing account", func() {
+ _, err := gethClient.StorageAt(ctx, nonExistingAddress, ercTotalSupplyIndex, big.NewInt(contract.BlockNumber))
+ Expect(err).ToNot(HaveOccurred())
+
+ _, err = ipldClient.StorageAt(ctx, nonExistingAddress, ercTotalSupplyIndex, big.NewInt(contract.BlockNumber))
+ Expect(err).To(MatchError("header not found"))
+ })
+
+ It("gets storage for non-existing contract slot", func() {
+ _, err := gethClient.StorageAt(ctx, contract.Address, randomHash, big.NewInt(contract.BlockNumber))
+ Expect(err).ToNot(HaveOccurred())
+
+ _, err = ipldClient.StorageAt(ctx, contract.Address, randomHash, big.NewInt(contract.BlockNumber))
+ Expect(err).To(MatchError("header not found"))
+ })
+
+ It("gets storage for non-existing contract", func() {
+ gethStorage, err := gethClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(0))
+ Expect(err).ToNot(HaveOccurred())
+
+ ipldStorage, err := ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(0))
+ Expect(err).ToNot(HaveOccurred())
+ Expect(gethStorage).To(Equal(ipldStorage))
+ })
+
+ It("gets storage for non-existing block number", func() {
+ blockNum := contract.BlockNumber + 100
+
+ gethStorage, err := gethClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(blockNum))
+ Expect(err).To(MatchError("header not found"))
+
+ ipldStorage, err := ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(blockNum))
+ Expect(err).To(MatchError("header not found"))
+ Expect(gethStorage).To(Equal(ipldStorage))
+ })
+
+ It("get storage after self destruct", func() {
+ tx, err := integration.DestroyContract(contract.Address)
+ Expect(err).ToNot(HaveOccurred())
+
+ gethStorage1, err := gethClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(tx.BlockNumber-1))
+ Expect(err).ToNot(HaveOccurred())
+ gethStorage2, err := gethClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(tx.BlockNumber))
+ Expect(err).ToNot(HaveOccurred())
+
+ Expect(gethStorage1).NotTo(Equal(gethStorage2))
+ Expect(gethStorage2).To(Equal(eth.EmptyNodeValue))
+
+ _, err = ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(tx.BlockNumber-1))
+ Expect(err).To(MatchError("header not found"))
+
+ _, err = ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(tx.BlockNumber))
+ Expect(err).To(MatchError("header not found"))
+
+ // Query the current block
+ ipldStorage3, err := ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ Expect(eth.EmptyNodeValue).To(Equal(ipldStorage3))
+ })
+ })
+
+ Describe("eth call", func() {
+ var msg ethereum.CallMsg
+
+ BeforeEach(func() {
+ contract, contractErr = integration.DeployContract()
+ Expect(contractErr).ToNot(HaveOccurred())
+
+ msg = ethereum.CallMsg{
+ To: &contract.Address,
+ Data: common.Hex2Bytes("18160ddd"), // totalSupply()
+ }
+ })
+
+ It("calls totalSupply() without block number", func() {
+ gethResult, err := gethClient.CallContract(ctx, msg, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ gethTotalSupply := new(big.Int).SetBytes(gethResult)
+ Expect(gethTotalSupply).To(Equal(erc20TotalSupply))
+
+ ipldResult, err := ipldClient.CallContract(ctx, msg, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ Expect(gethResult).To(Equal(ipldResult))
+ })
+
+ It("calls totalSupply() with block number", func() {
+ gethResult, err := gethClient.CallContract(ctx, msg, big.NewInt(contract.BlockNumber))
+ Expect(err).ToNot(HaveOccurred())
+
+ gethTotalSupply := new(big.Int).SetBytes(gethResult)
+ Expect(gethTotalSupply).To(Equal(erc20TotalSupply))
+
+ ipldResult, err := ipldClient.CallContract(ctx, msg, big.NewInt(contract.BlockNumber))
+ Expect(err).ToNot(HaveOccurred())
+
+ Expect(gethResult).To(Equal(ipldResult))
+ })
+ })
+
+ Describe("Chain ID", func() {
+ It("Check chain id", func() {
+ _, err := gethClient.ChainID(ctx)
+ Expect(err).ToNot(HaveOccurred())
+
+ _, err = ipldClient.ChainID(ctx)
+ Expect(err).ToNot(HaveOccurred())
+ })
+ })
+})
diff --git a/integration/integration_suite_test.go b/integration/integration_suite_test.go
new file mode 100644
index 00000000..be50b2ef
--- /dev/null
+++ b/integration/integration_suite_test.go
@@ -0,0 +1,53 @@
+package integration_test
+
+import (
+ "os"
+ "strconv"
+ "testing"
+
+ "github.com/ethereum/go-ethereum/ethclient"
+ "github.com/ethereum/go-ethereum/rpc"
+ . "github.com/onsi/ginkgo/v2"
+ . "github.com/onsi/gomega"
+)
+
+func TestIntegration(t *testing.T) {
+ RegisterFailHandler(Fail)
+ RunSpecs(t, "integration test suite")
+}
+
+var (
+ gethHttpPath = "http://127.0.0.1:8545"
+ ipldEthHttpPath = "http://127.0.0.1:8081"
+
+ gethClient *ethclient.Client
+ ipldClient *ethclient.Client
+ gethRPCClient *rpc.Client
+ ipldRPCClient *rpc.Client
+
+ testChainId int64 = 99
+)
+
+var _ = BeforeSuite(func() {
+ var err error
+
+ envChainID := os.Getenv("ETH_CHAIN_ID")
+ if len(envChainID) == 0 {
+ panic("ETH_CHAIN_ID must be set")
+ }
+ testChainId, err = strconv.ParseInt(envChainID, 10, 64)
+ Expect(err).ToNot(HaveOccurred())
+
+ if path := os.Getenv("ETH_HTTP_PATH"); len(path) != 0 {
+ gethHttpPath = "http://" + path
+ }
+ if path := os.Getenv("SERVER_HTTP_PATH"); len(path) != 0 {
+ ipldEthHttpPath = "http://" + path
+ }
+
+ gethClient, err = ethclient.Dial(gethHttpPath)
+ Expect(err).ToNot(HaveOccurred())
+
+ ipldClient, err = ethclient.Dial(ipldEthHttpPath)
+ Expect(err).ToNot(HaveOccurred())
+})
diff --git a/test/integration_test.go b/integration/integration_test.go
similarity index 51%
rename from test/integration_test.go
rename to integration/integration_test.go
index 0706df66..19764610 100644
--- a/test/integration_test.go
+++ b/integration/integration_test.go
@@ -3,97 +3,76 @@ package integration_test
import (
"context"
"math/big"
- "os"
- "strconv"
- "time"
+ "math/rand"
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/rlp"
- . "github.com/onsi/ginkgo"
+ . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- integration "github.com/cerc-io/ipld-eth-server/v4/test"
+ integration "github.com/cerc-io/ipld-eth-server/v5/integration"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
)
-const nonExistingBlockHash = "0x111111111111111111111111111111111111111111111111111111111111111"
-const nonExistingAddress = "0x1111111111111111111111111111111111111111"
-
var (
- randomAddr = common.HexToAddress("0x1C3ab14BBaD3D99F4203bd7a11aCB94882050E6f")
- randomHash = crypto.Keccak256Hash(randomAddr.Bytes())
+ nonExistingBlockHash = common.HexToHash("0x111111111111111111111111111111111111111111111111111111111111111")
+ nonExistingAddress = common.HexToAddress("0x1111111111111111111111111111111111111111")
+ randomAddr = common.HexToAddress("0x1C3ab14BBaD3D99F4203bd7a11aCB94882050E6f")
+ randomHash = crypto.Keccak256Hash(randomAddr.Bytes())
+
+ erc20TotalSupply, _ = new(big.Int).SetString("1000000000000000000000", 10)
+ ercTotalSupplyIndex = common.HexToHash("0x2")
)
-var _ = Describe("Integration test", func() {
- directProxyEthCalls, err := strconv.ParseBool(os.Getenv("ETH_FORWARD_ETH_CALLS"))
- Expect(err).To(BeNil())
- gethHttpPath := "http://127.0.0.1:8545"
- gethClient, err := ethclient.Dial(gethHttpPath)
- Expect(err).ToNot(HaveOccurred())
-
- ipldEthHttpPath := "http://127.0.0.1:8081"
- ipldClient, err := ethclient.Dial(ipldEthHttpPath)
- Expect(err).ToNot(HaveOccurred())
-
+var _ = Describe("Basic integration test", func() {
ctx := context.Background()
var contract *integration.ContractDeployed
- var erc20TotalSupply *big.Int
var tx *integration.Tx
- var bigIntResult bool
var contractErr error
var txErr error
- sleepInterval := 2 * time.Second
-
- BeforeEach(func() {
- if directProxyEthCalls {
- Skip("skipping no-direct-proxy-forwarding integration tests")
- }
- })
Describe("get Block", func() {
BeforeEach(func() {
contract, contractErr = integration.DeployContract()
- time.Sleep(sleepInterval)
+ Expect(contractErr).ToNot(HaveOccurred())
+
+ err := waitForBlock(ctx, ipldClient, contract.BlockNumber)
+ Expect(err).ToNot(HaveOccurred())
})
It("get not existing block by number", func() {
- Expect(contractErr).ToNot(HaveOccurred())
+ blockNum := big.NewInt(contract.BlockNumber + 100)
- blockNum := contract.BlockNumber + 100
-
- gethBlock, err := gethClient.BlockByNumber(ctx, big.NewInt(int64(blockNum)))
+ gethBlock, err := gethClient.BlockByNumber(ctx, blockNum)
Expect(err).To(MatchError(ethereum.NotFound))
Expect(gethBlock).To(BeZero())
- ipldBlock, err := ipldClient.BlockByNumber(ctx, big.NewInt(int64(blockNum)))
+ ipldBlock, err := ipldClient.BlockByNumber(ctx, blockNum)
Expect(err).To(MatchError(ethereum.NotFound))
Expect(ipldBlock).To(BeZero())
})
It("get not existing block by hash", func() {
- gethBlock, err := gethClient.BlockByHash(ctx, common.HexToHash(nonExistingBlockHash))
+ gethBlock, err := gethClient.BlockByHash(ctx, nonExistingBlockHash)
Expect(err).To(MatchError(ethereum.NotFound))
Expect(gethBlock).To(BeZero())
- ipldBlock, err := ipldClient.BlockByHash(ctx, common.HexToHash(nonExistingBlockHash))
+ ipldBlock, err := ipldClient.BlockByHash(ctx, nonExistingBlockHash)
Expect(err).To(MatchError(ethereum.NotFound))
Expect(ipldBlock).To(BeZero())
})
It("get block by number", func() {
- Expect(contractErr).ToNot(HaveOccurred())
+ blockNum := big.NewInt(contract.BlockNumber)
- blockNum := contract.BlockNumber
-
- gethBlock, err := gethClient.BlockByNumber(ctx, big.NewInt(int64(blockNum)))
+ gethBlock, err := gethClient.BlockByNumber(ctx, blockNum)
Expect(err).ToNot(HaveOccurred())
- ipldBlock, err := ipldClient.BlockByNumber(ctx, big.NewInt(int64(blockNum)))
+ ipldBlock, err := ipldClient.BlockByNumber(ctx, blockNum)
Expect(err).ToNot(HaveOccurred())
// check headers are equals
@@ -107,10 +86,10 @@ var _ = Describe("Integration test", func() {
})
It("get block by hash", func() {
- gethBlock, err := gethClient.BlockByHash(ctx, common.HexToHash(contract.BlockHash))
+ gethBlock, err := gethClient.BlockByHash(ctx, contract.BlockHash)
Expect(err).ToNot(HaveOccurred())
- ipldBlock, err := ipldClient.BlockByHash(ctx, common.HexToHash(contract.BlockHash))
+ ipldBlock, err := ipldClient.BlockByHash(ctx, contract.BlockHash)
Expect(err).ToNot(HaveOccurred())
// check headers are equals
@@ -127,16 +106,14 @@ var _ = Describe("Integration test", func() {
Describe("Transaction", func() {
BeforeEach(func() {
contract, contractErr = integration.DeployContract()
- time.Sleep(sleepInterval)
+ Expect(contractErr).ToNot(HaveOccurred())
})
It("Get tx by hash", func() {
- Expect(contractErr).ToNot(HaveOccurred())
-
- gethTx, _, err := gethClient.TransactionByHash(ctx, common.HexToHash(contract.TransactionHash))
+ gethTx, _, err := gethClient.TransactionByHash(ctx, contract.TransactionHash)
Expect(err).ToNot(HaveOccurred())
- ipldTx, _, err := ipldClient.TransactionByHash(ctx, common.HexToHash(contract.TransactionHash))
+ ipldTx, _, err := ipldClient.TransactionByHash(ctx, contract.TransactionHash)
Expect(err).ToNot(HaveOccurred())
compareTxs(gethTx, ipldTx)
@@ -145,10 +122,10 @@ var _ = Describe("Integration test", func() {
})
It("Get tx by block hash and index", func() {
- gethTx, err := gethClient.TransactionInBlock(ctx, common.HexToHash(contract.BlockHash), 0)
+ gethTx, err := gethClient.TransactionInBlock(ctx, contract.BlockHash, 0)
Expect(err).ToNot(HaveOccurred())
- ipldTx, err := ipldClient.TransactionInBlock(ctx, common.HexToHash(contract.BlockHash), 0)
+ ipldTx, err := ipldClient.TransactionInBlock(ctx, contract.BlockHash, 0)
Expect(err).ToNot(HaveOccurred())
compareTxs(gethTx, ipldTx)
@@ -158,16 +135,14 @@ var _ = Describe("Integration test", func() {
Describe("Receipt", func() {
BeforeEach(func() {
contract, contractErr = integration.DeployContract()
- time.Sleep(sleepInterval)
+ Expect(contractErr).ToNot(HaveOccurred())
})
It("Get tx receipt", func() {
- Expect(contractErr).ToNot(HaveOccurred())
-
- gethReceipt, err := gethClient.TransactionReceipt(ctx, common.HexToHash(contract.TransactionHash))
+ gethReceipt, err := gethClient.TransactionReceipt(ctx, contract.TransactionHash)
Expect(err).ToNot(HaveOccurred())
- ipldReceipt, err := ipldClient.TransactionReceipt(ctx, common.HexToHash(contract.TransactionHash))
+ ipldReceipt, err := ipldClient.TransactionReceipt(ctx, contract.TransactionHash)
Expect(err).ToNot(HaveOccurred())
Expect(gethReceipt).To(Equal(ipldReceipt))
@@ -185,13 +160,11 @@ var _ = Describe("Integration test", func() {
Describe("FilterLogs", func() {
BeforeEach(func() {
contract, contractErr = integration.DeployContract()
- time.Sleep(sleepInterval)
+ Expect(contractErr).ToNot(HaveOccurred())
})
It("with blockhash", func() {
- Expect(contractErr).ToNot(HaveOccurred())
-
- blockHash := common.HexToHash(contract.BlockHash)
+ blockHash := contract.BlockHash
filterQuery := ethereum.FilterQuery{
//Addresses: addresses,
BlockHash: &blockHash,
@@ -215,42 +188,40 @@ var _ = Describe("Integration test", func() {
Describe("CodeAt", func() {
BeforeEach(func() {
contract, contractErr = integration.DeployContract()
- time.Sleep(sleepInterval)
+ Expect(contractErr).ToNot(HaveOccurred())
})
It("gets code at non-existing address without block number", func() {
- Expect(contractErr).ToNot(HaveOccurred())
-
- gethCode, err := gethClient.CodeAt(ctx, common.HexToAddress(nonExistingAddress), nil)
+ gethCode, err := gethClient.CodeAt(ctx, nonExistingAddress, nil)
Expect(err).ToNot(HaveOccurred())
- ipldCode, err := ipldClient.CodeAt(ctx, common.HexToAddress(nonExistingAddress), nil)
+ ipldCode, err := ipldClient.CodeAt(ctx, nonExistingAddress, nil)
Expect(err).ToNot(HaveOccurred())
Expect(gethCode).To(BeEmpty())
Expect(gethCode).To(Equal(ipldCode))
})
It("gets code of deployed contract without block number", func() {
- gethCode, err := gethClient.CodeAt(ctx, common.HexToAddress(contract.Address), nil)
+ gethCode, err := gethClient.CodeAt(ctx, contract.Address, nil)
Expect(err).ToNot(HaveOccurred())
- ipldCode, err := ipldClient.CodeAt(ctx, common.HexToAddress(contract.Address), nil)
+ ipldCode, err := ipldClient.CodeAt(ctx, contract.Address, nil)
Expect(err).ToNot(HaveOccurred())
Expect(gethCode).To(Equal(ipldCode))
})
It("gets code of deployed contract with block number", func() {
- gethCode, err := gethClient.CodeAt(ctx, common.HexToAddress(contract.Address), big.NewInt(int64(contract.BlockNumber)))
+ gethCode, err := gethClient.CodeAt(ctx, contract.Address, big.NewInt(contract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
- ipldCode, err := ipldClient.CodeAt(ctx, common.HexToAddress(contract.Address), big.NewInt(int64(contract.BlockNumber)))
+ ipldCode, err := ipldClient.CodeAt(ctx, contract.Address, big.NewInt(contract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(gethCode).To(Equal(ipldCode))
})
It("gets code of contract that doesn't exist at this height", func() {
- gethCode, err := gethClient.CodeAt(ctx, common.HexToAddress(contract.Address), big.NewInt(int64(contract.BlockNumber-1)))
+ gethCode, err := gethClient.CodeAt(ctx, contract.Address, big.NewInt(contract.BlockNumber-1))
Expect(err).ToNot(HaveOccurred())
- ipldCode, err := ipldClient.CodeAt(ctx, common.HexToAddress(contract.Address), big.NewInt(int64(contract.BlockNumber-1)))
+ ipldCode, err := ipldClient.CodeAt(ctx, contract.Address, big.NewInt(contract.BlockNumber-1))
Expect(err).ToNot(HaveOccurred())
Expect(gethCode).To(BeEmpty())
@@ -259,63 +230,56 @@ var _ = Describe("Integration test", func() {
})
Describe("Get balance", func() {
- address := "0x1111111111111111111111111111111111111112"
+ var newAddress common.Address
+ rand.Read(newAddress[:])
+
BeforeEach(func() {
- tx, txErr = integration.SendEth(address, "0.01")
- time.Sleep(sleepInterval)
- })
-
- It("gets balance for an account with eth without block number", func() {
+ tx, txErr = integration.SendEth(newAddress, "0.01")
Expect(txErr).ToNot(HaveOccurred())
-
- gethBalance, err := gethClient.BalanceAt(ctx, common.HexToAddress(address), nil)
- Expect(err).ToNot(HaveOccurred())
-
- ipldBalance, err := ipldClient.BalanceAt(ctx, common.HexToAddress(address), nil)
- Expect(err).ToNot(HaveOccurred())
-
- Expect(gethBalance).To(Equal(ipldBalance))
})
+
It("gets balance for an account with eth with block number", func() {
- Expect(txErr).ToNot(HaveOccurred())
-
- gethBalance, err := gethClient.BalanceAt(ctx, common.HexToAddress(address), big.NewInt(int64(tx.BlockNumber)))
+ gethBalance, err := gethClient.BalanceAt(ctx, newAddress, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
- ipldBalance, err := ipldClient.BalanceAt(ctx, common.HexToAddress(address), big.NewInt(int64(tx.BlockNumber)))
+ ipldBalance, err := ipldClient.BalanceAt(ctx, newAddress, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(gethBalance).To(Equal(ipldBalance))
})
- It("gets historical balance for an account with eth with block number", func() {
- Expect(txErr).ToNot(HaveOccurred())
-
- gethBalance, err := gethClient.BalanceAt(ctx, common.HexToAddress(address), big.NewInt(int64(tx.BlockNumber-1)))
+ It("gets balance for an account with eth without block number", func() {
+ gethBalance, err := gethClient.BalanceAt(ctx, newAddress, nil)
Expect(err).ToNot(HaveOccurred())
- ipldBalance, err := ipldClient.BalanceAt(ctx, common.HexToAddress(address), big.NewInt(int64(tx.BlockNumber-1)))
+ ipldBalance, err := ipldClient.BalanceAt(ctx, newAddress, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ Expect(gethBalance).To(Equal(ipldBalance))
+ })
+
+ It("gets historical balance for an account with eth with block number", func() {
+ gethBalance, err := gethClient.BalanceAt(ctx, newAddress, big.NewInt(tx.BlockNumber-1))
+ Expect(err).ToNot(HaveOccurred())
+
+ ipldBalance, err := ipldClient.BalanceAt(ctx, newAddress, big.NewInt(tx.BlockNumber-1))
Expect(err).ToNot(HaveOccurred())
Expect(gethBalance).To(Equal(ipldBalance))
})
It("gets balance for a non-existing account without block number", func() {
- Expect(txErr).ToNot(HaveOccurred())
-
- gethBalance, err := gethClient.BalanceAt(ctx, common.HexToAddress(nonExistingAddress), nil)
+ gethBalance, err := gethClient.BalanceAt(ctx, nonExistingAddress, nil)
Expect(err).ToNot(HaveOccurred())
- ipldBalance, err := ipldClient.BalanceAt(ctx, common.HexToAddress(nonExistingAddress), nil)
+ ipldBalance, err := ipldClient.BalanceAt(ctx, nonExistingAddress, nil)
Expect(err).ToNot(HaveOccurred())
Expect(gethBalance).To(Equal(ipldBalance))
})
It("gets balance for an non-existing block number", func() {
- Expect(txErr).ToNot(HaveOccurred())
-
- gethBalance, err := gethClient.BalanceAt(ctx, common.HexToAddress(address), big.NewInt(int64(tx.BlockNumber+3)))
+ gethBalance, err := gethClient.BalanceAt(ctx, newAddress, big.NewInt(tx.BlockNumber+3))
Expect(err).To(MatchError("header not found"))
- ipldBalance, err := ipldClient.BalanceAt(ctx, common.HexToAddress(nonExistingAddress), big.NewInt(int64(tx.BlockNumber+3)))
+ ipldBalance, err := ipldClient.BalanceAt(ctx, newAddress, big.NewInt(tx.BlockNumber+3))
Expect(err).To(MatchError("header not found"))
Expect(gethBalance).To(Equal(ipldBalance))
@@ -323,126 +287,114 @@ var _ = Describe("Integration test", func() {
})
Describe("Get Storage", func() {
- var slvContract *integration.ContractDeployed
- var slvCountA *big.Int
-
- contractSalt := "SLVContractSalt"
+ var contractSalt string
+ countAIndex := common.HexToHash("0x5")
BeforeEach(func() {
contract, contractErr = integration.DeployContract()
- erc20TotalSupply, bigIntResult = new(big.Int).SetString("1000000000000000000000", 10)
-
- time.Sleep(sleepInterval)
- })
-
- It("gets ERC20 total supply (without block number)", func() {
Expect(contractErr).ToNot(HaveOccurred())
- Expect(bigIntResult).To(Equal(true))
+ Expect(contract.BlockNumber).ToNot(BeZero())
- totalSupplyIndex := "0x2"
+ contractSalt = common.Bytes2Hex(contract.BlockHash[:10])
- gethStorage, err := gethClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), nil)
+ err := waitForBlock(ctx, ipldClient, contract.BlockNumber)
Expect(err).ToNot(HaveOccurred())
-
- gethTotalSupply := new(big.Int).SetBytes(gethStorage)
- Expect(gethTotalSupply).To(Equal(erc20TotalSupply))
-
- ipldStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), nil)
- Expect(err).ToNot(HaveOccurred())
-
- ipldTotalSupply := new(big.Int).SetBytes(ipldStorage)
- Expect(ipldTotalSupply).To(Equal(erc20TotalSupply))
-
- Expect(gethStorage).To(Equal(ipldStorage))
})
It("gets ERC20 total supply (with block number)", func() {
- totalSupplyIndex := "0x2"
-
- gethStorage, err := gethClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), big.NewInt(int64(contract.BlockNumber)))
+ gethStorage, err := gethClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(contract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
gethTotalSupply := new(big.Int).SetBytes(gethStorage)
Expect(gethTotalSupply).To(Equal(erc20TotalSupply))
- ipldStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), big.NewInt(int64(contract.BlockNumber)))
+ ipldStorage, err := ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(contract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(gethStorage).To(Equal(ipldStorage))
})
+
+ It("gets ERC20 total supply (without block number)", func() {
+ gethStorage, err := gethClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ gethTotalSupply := new(big.Int).SetBytes(gethStorage)
+ Expect(gethTotalSupply).To(Equal(erc20TotalSupply))
+
+ ipldStorage, err := ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ Expect(gethStorage).To(Equal(ipldStorage))
+ })
+
It("gets storage for non-existing account", func() {
- totalSupplyIndex := "0x2"
-
- gethStorage, err := gethClient.StorageAt(ctx, common.HexToAddress(nonExistingAddress), common.HexToHash(totalSupplyIndex), big.NewInt(int64(contract.BlockNumber)))
+ gethStorage, err := gethClient.StorageAt(ctx, nonExistingAddress, ercTotalSupplyIndex, big.NewInt(contract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
- ipldStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(nonExistingAddress), common.HexToHash(totalSupplyIndex), big.NewInt(int64(contract.BlockNumber)))
+ ipldStorage, err := ipldClient.StorageAt(ctx, nonExistingAddress, ercTotalSupplyIndex, big.NewInt(contract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(gethStorage).To(Equal(ipldStorage))
})
+
It("gets storage for non-existing contract slot", func() {
- gethStorage, err := gethClient.StorageAt(ctx, common.HexToAddress(contract.Address), randomHash, big.NewInt(int64(contract.BlockNumber)))
+ gethStorage, err := gethClient.StorageAt(ctx, contract.Address, randomHash, big.NewInt(contract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
- ipldStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract.Address), randomHash, big.NewInt(int64(contract.BlockNumber)))
+ ipldStorage, err := ipldClient.StorageAt(ctx, contract.Address, randomHash, big.NewInt(contract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(gethStorage).To(Equal(ipldStorage))
})
+
It("gets storage for non-existing contract", func() {
- totalSupplyIndex := "0x2"
- gethStorage, err := gethClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), big.NewInt(0))
+ gethStorage, err := gethClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(0))
Expect(err).ToNot(HaveOccurred())
- ipldStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), big.NewInt(0))
+ ipldStorage, err := ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(0))
Expect(err).ToNot(HaveOccurred())
Expect(gethStorage).To(Equal(ipldStorage))
})
+
It("gets storage for non-existing block number", func() {
blockNum := contract.BlockNumber + 100
- totalSupplyIndex := "0x2"
-
- gethStorage, err := gethClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), big.NewInt(int64(blockNum)))
+ gethStorage, err := gethClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(blockNum))
Expect(err).To(MatchError("header not found"))
- ipldStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), big.NewInt(int64(blockNum)))
+ ipldStorage, err := ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(blockNum))
Expect(err).To(MatchError("header not found"))
Expect(gethStorage).To(Equal(ipldStorage))
})
- It("get storage for SLV countA after tx", func() {
- slvContract, contractErr = integration.Create2Contract("SLVToken", contractSalt)
+ It("gets storage for SLV countA after tx", func() {
+ slvContract, contractErr := integration.Create2Contract("SLVToken", contractSalt)
Expect(contractErr).ToNot(HaveOccurred())
- countAIndex := "0x5"
- time.Sleep(sleepInterval)
-
- gethStorage, err := gethClient.StorageAt(ctx, common.HexToAddress(slvContract.Address), common.HexToHash(countAIndex), nil)
+ gethStorage, err := gethClient.StorageAt(ctx, slvContract.Address, countAIndex, big.NewInt(slvContract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
- gethCountA := new(big.Int).SetBytes(gethStorage)
- slvCountA = gethCountA
+ slvCountA := new(big.Int).SetBytes(gethStorage)
- ipldStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(slvContract.Address), common.HexToHash(countAIndex), nil)
+ err = waitForBlock(ctx, ipldClient, slvContract.BlockNumber)
+ Expect(err).ToNot(HaveOccurred())
+
+ ipldStorage, err := ipldClient.StorageAt(ctx, slvContract.Address, countAIndex, big.NewInt(slvContract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
ipldCountA := new(big.Int).SetBytes(ipldStorage)
- Expect(ipldCountA.String()).To(Equal(slvCountA.String()))
+ Expect(ipldCountA).To(Equal(slvCountA))
- _, txErr = integration.IncrementCount(slvContract.Address, "A")
- Expect(txErr).ToNot(HaveOccurred())
+ inc, err := integration.IncrementCount("A", slvContract.Address)
+ Expect(err).ToNot(HaveOccurred())
slvCountA.Add(slvCountA, big.NewInt(1))
- time.Sleep(sleepInterval)
-
- ipldStorage, err = ipldClient.StorageAt(ctx, common.HexToAddress(slvContract.Address), common.HexToHash(countAIndex), nil)
+ ipldStorage, err = ipldClient.StorageAt(ctx, slvContract.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
ipldCountA = new(big.Int).SetBytes(ipldStorage)
- Expect(ipldCountA.String()).To(Equal(slvCountA.String()))
+ Expect(ipldCountA).To(Equal(slvCountA))
})
- It("get storage after self destruct", func() {
- totalSupplyIndex := "0x2"
- countAIndex := "0x5"
+ It("gets storage after destruction and redeploy", func() {
+ slvContract, contractErr := integration.Create2Contract("SLVToken", contractSalt)
+ Expect(contractErr).ToNot(HaveOccurred())
tx, err := integration.DestroyContract(contract.Address)
Expect(err).ToNot(HaveOccurred())
@@ -450,83 +402,68 @@ var _ = Describe("Integration test", func() {
slvTx, err := integration.DestroyContract(slvContract.Address)
Expect(err).ToNot(HaveOccurred())
- time.Sleep(sleepInterval)
-
- gethStorage1, err := gethClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), big.NewInt(tx.BlockNumber-1))
+ gethStorage1, err := gethClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(tx.BlockNumber-1))
Expect(err).ToNot(HaveOccurred())
- gethStorage2, err := gethClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), big.NewInt(tx.BlockNumber))
+ gethStorage2, err := gethClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(gethStorage1).NotTo(Equal(gethStorage2))
Expect(gethStorage2).To(Equal(eth.EmptyNodeValue))
- ipldStorage1, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), big.NewInt(tx.BlockNumber-1))
+ ipldStorage1, err := ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(tx.BlockNumber-1))
Expect(err).ToNot(HaveOccurred())
- ipldStorage2, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), big.NewInt(tx.BlockNumber))
+ ipldStorage2, err := ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(ipldStorage1).To(Equal(gethStorage1))
Expect(ipldStorage2).To(Equal(gethStorage2))
// Query the current block
- ipldStorage3, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract.Address), common.HexToHash(totalSupplyIndex), nil)
+ ipldStorage3, err := ipldClient.StorageAt(ctx, contract.Address, ercTotalSupplyIndex, nil)
Expect(err).ToNot(HaveOccurred())
Expect(ipldStorage2).To(Equal(ipldStorage3))
// Check for SLV contract
- gethStorage, err := gethClient.StorageAt(ctx, common.HexToAddress(slvContract.Address), common.HexToHash(countAIndex), big.NewInt(slvTx.BlockNumber))
+ gethStorage, err := gethClient.StorageAt(ctx, slvContract.Address, countAIndex, big.NewInt(slvTx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(gethStorage).To(Equal(eth.EmptyNodeValue))
- ipldStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(slvContract.Address), common.HexToHash(countAIndex), big.NewInt(slvTx.BlockNumber))
+ ipldStorage, err := ipldClient.StorageAt(ctx, slvContract.Address, countAIndex, big.NewInt(slvTx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(ipldStorage).To(Equal(gethStorage))
- slvCountA.Set(big.NewInt(0))
- })
-
- It("get storage after redeploying", func() {
+ // Redeploy to same address
slvContract, contractErr = integration.Create2Contract("SLVToken", contractSalt)
Expect(contractErr).ToNot(HaveOccurred())
- time.Sleep(sleepInterval)
- countAIndex := "0x5"
-
- gethStorage, err := gethClient.StorageAt(ctx, common.HexToAddress(slvContract.Address), common.HexToHash(countAIndex), nil)
+ gethStorage, err = gethClient.StorageAt(ctx, slvContract.Address, countAIndex, big.NewInt(slvContract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
- gethCountA := new(big.Int).SetBytes(gethStorage)
- Expect(gethCountA.String()).To(Equal(slvCountA.String()))
-
- ipldStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(slvContract.Address), common.HexToHash(countAIndex), nil)
+ ipldStorage, err = ipldClient.StorageAt(ctx, slvContract.Address, countAIndex, big.NewInt(slvContract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
- ipldCountA := new(big.Int).SetBytes(ipldStorage)
- Expect(ipldCountA.String()).To(Equal(slvCountA.String()))
-
Expect(gethStorage).To(Equal(ipldStorage))
+ ipldCountA := new(big.Int).SetBytes(ipldStorage)
+ Expect(ipldCountA.String()).To(Equal("0"))
+
})
})
Describe("eth call", func() {
+ var msg ethereum.CallMsg
+
BeforeEach(func() {
contract, contractErr = integration.DeployContract()
- erc20TotalSupply, bigIntResult = new(big.Int).SetString("1000000000000000000000", 10)
+ Expect(contractErr).ToNot(HaveOccurred())
- time.Sleep(sleepInterval)
+ msg = ethereum.CallMsg{
+ To: &contract.Address,
+ Data: common.Hex2Bytes("18160ddd"), // totalSupply()
+ }
})
It("calls totalSupply() without block number", func() {
- Expect(contractErr).ToNot(HaveOccurred())
- Expect(bigIntResult).To(Equal(true))
-
- contractAddress := common.HexToAddress(contract.Address)
-
- msg := ethereum.CallMsg{
- To: &contractAddress,
- Data: common.Hex2Bytes("18160ddd"), // totalSupply()
- }
gethResult, err := gethClient.CallContract(ctx, msg, nil)
Expect(err).ToNot(HaveOccurred())
@@ -540,19 +477,26 @@ var _ = Describe("Integration test", func() {
})
It("calls totalSupply() with block number", func() {
- contractAddress := common.HexToAddress(contract.Address)
-
- msg := ethereum.CallMsg{
- To: &contractAddress,
- Data: common.Hex2Bytes("18160ddd"), // totalSupply()
- }
- gethResult, err := gethClient.CallContract(ctx, msg, big.NewInt(int64(contract.BlockNumber)))
+ gethResult, err := gethClient.CallContract(ctx, msg, big.NewInt(contract.BlockNumber))
Expect(err).ToNot(HaveOccurred())
gethTotalSupply := new(big.Int).SetBytes(gethResult)
Expect(gethTotalSupply).To(Equal(erc20TotalSupply))
- ipldResult, err := ipldClient.CallContract(ctx, msg, big.NewInt(int64(contract.BlockNumber)))
+ ipldResult, err := ipldClient.CallContract(ctx, msg, big.NewInt(contract.BlockNumber))
+ Expect(err).ToNot(HaveOccurred())
+
+ Expect(gethResult).To(Equal(ipldResult))
+ })
+
+ It("calls totalSupply() with block hash", func() {
+ gethResult, err := gethClient.CallContractAtHash(ctx, msg, contract.BlockHash)
+ Expect(err).ToNot(HaveOccurred())
+
+ gethTotalSupply := new(big.Int).SetBytes(gethResult)
+ Expect(gethTotalSupply).To(Equal(erc20TotalSupply))
+
+ ipldResult, err := ipldClient.CallContractAtHash(ctx, msg, contract.BlockHash)
Expect(err).ToNot(HaveOccurred())
Expect(gethResult).To(Equal(ipldResult))
@@ -573,6 +517,7 @@ var _ = Describe("Integration test", func() {
})
func compareBlocks(block1 *types.Block, block2 *types.Block) {
+ GinkgoHelper()
Expect(block1.Header()).To(Equal(block2.Header()))
Expect(block1.Uncles()).To(Equal(block2.Uncles()))
@@ -586,11 +531,12 @@ func compareBlocks(block1 *types.Block, block2 *types.Block) {
}
func compareTxs(tx1 *types.Transaction, tx2 *types.Transaction) {
+ GinkgoHelper()
Expect(tx1.Data()).To(Equal(tx2.Data()))
Expect(tx1.Hash()).To(Equal(tx2.Hash()))
Expect(tx1.Size()).To(Equal(tx2.Size()))
- signer := types.NewEIP155Signer(big.NewInt(99))
+ signer := types.NewLondonSigner(big.NewInt(testChainId))
gethSender, err := types.Sender(signer, tx1)
Expect(err).ToNot(HaveOccurred())
diff --git a/integration/util_test.go b/integration/util_test.go
new file mode 100644
index 00000000..e33482cb
--- /dev/null
+++ b/integration/util_test.go
@@ -0,0 +1,29 @@
+package integration_test
+
+import (
+ "context"
+ "errors"
+ "time"
+
+ "github.com/ethereum/go-ethereum/ethclient"
+)
+
+func waitForBlock(ctx context.Context, client *ethclient.Client, target int64) error {
+ timeout := 10 * time.Second
+ for {
+ select {
+ case <-time.After(timeout):
+ return errors.New("timed out")
+ default:
+ latest, err := client.BlockNumber(ctx)
+ if err != nil {
+ return err
+ }
+ if uint64(target) <= latest {
+ return nil
+ }
+ time.Sleep(time.Second)
+ }
+ }
+
+}
diff --git a/test/watch_address_integration_test.go b/integration/watch_address_integration_test.go
similarity index 68%
rename from test/watch_address_integration_test.go
rename to integration/watch_address_integration_test.go
index 0ee334b7..4550aa8c 100644
--- a/test/watch_address_integration_test.go
+++ b/integration/watch_address_integration_test.go
@@ -3,41 +3,22 @@ package integration_test
import (
"context"
"math/big"
- "os"
- "strconv"
- "time"
"github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/rpc"
sdtypes "github.com/ethereum/go-ethereum/statediff/types"
- . "github.com/onsi/ginkgo"
+ . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
- integration "github.com/cerc-io/ipld-eth-server/v4/test"
+ integration "github.com/cerc-io/ipld-eth-server/v5/integration"
)
var (
gethMethod = "statediff_watchAddress"
ipldMethod = "vdb_watchAddress"
-
- sleepInterval = 2 * time.Second
)
var _ = Describe("WatchAddress integration test", func() {
- dbWrite, err := strconv.ParseBool(os.Getenv("DB_WRITE"))
- Expect(err).To(BeNil())
-
- gethHttpPath := "http://127.0.0.1:8545"
- gethRPCClient, err := rpc.Dial(gethHttpPath)
- Expect(err).ToNot(HaveOccurred())
-
- ipldEthHttpPath := "http://127.0.0.1:8081"
- ipldClient, err := ethclient.Dial(ipldEthHttpPath)
- Expect(err).ToNot(HaveOccurred())
- ipldRPCClient, err := rpc.Dial(ipldEthHttpPath)
- Expect(err).ToNot(HaveOccurred())
-
var (
ctx = context.Background()
@@ -45,11 +26,14 @@ var _ = Describe("WatchAddress integration test", func() {
contractErr error
incErr error
+ tx *integration.Tx
+ inc *integration.CountIncremented
+
contract1 *integration.ContractDeployed
contract2 *integration.ContractDeployed
contract3 *integration.ContractDeployed
- countAIndex string
+ countAIndex common.Hash
prevBalance1 *big.Int
prevBalance2 *big.Int
@@ -69,9 +53,13 @@ var _ = Describe("WatchAddress integration test", func() {
)
BeforeEach(func() {
- if !dbWrite {
- Skip("skipping WatchAddress API integration tests")
- }
+ var err error
+
+ gethRPCClient, err = rpc.Dial(gethHttpPath)
+ Expect(err).ToNot(HaveOccurred())
+
+ ipldRPCClient, err = rpc.Dial(ipldEthHttpPath)
+ Expect(err).ToNot(HaveOccurred())
})
It("test init", func() {
@@ -88,7 +76,7 @@ var _ = Describe("WatchAddress integration test", func() {
// Get the storage slot key
storageSlotAKey, err := integration.GetStorageSlotKey("SLVToken", "countA")
Expect(err).ToNot(HaveOccurred())
- countAIndex = storageSlotAKey.Key
+ countAIndex = common.HexToHash(storageSlotAKey.Key)
// Clear out watched addresses
err = integration.ClearWatchedAddresses(gethRPCClient)
@@ -97,21 +85,21 @@ var _ = Describe("WatchAddress integration test", func() {
// Get initial balances for all the contracts
// Contract 1
actualBalance1 = big.NewInt(0)
- initBalance1, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract1.Address), nil)
+ initBalance1, err := ipldClient.BalanceAt(ctx, contract1.Address, big.NewInt(contract1.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(initBalance1.String()).To(Equal(actualBalance1.String()))
prevBalance1 = big.NewInt(0)
// Contract 2
actualBalance2 = big.NewInt(0)
- initBalance2, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract2.Address), nil)
+ initBalance2, err := ipldClient.BalanceAt(ctx, contract2.Address, big.NewInt(contract2.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(initBalance2.String()).To(Equal(actualBalance2.String()))
prevBalance2 = big.NewInt(0)
// Contract 3
actualBalance3 = big.NewInt(0)
- initBalance3, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract3.Address), nil)
+ initBalance3, err := ipldClient.BalanceAt(ctx, contract3.Address, big.NewInt(contract3.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(initBalance3.String()).To(Equal(actualBalance3.String()))
prevBalance3 = big.NewInt(0)
@@ -119,7 +107,7 @@ var _ = Describe("WatchAddress integration test", func() {
// Get initial storage values for the contracts
// Contract 1, countA
actualCountA1 = big.NewInt(0)
- ipldCountA1Storage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract1.Address), common.HexToHash(countAIndex), nil)
+ ipldCountA1Storage, err := ipldClient.StorageAt(ctx, contract1.Address, countAIndex, big.NewInt(contract1.BlockNumber))
Expect(err).ToNot(HaveOccurred())
ipldCountA1 := new(big.Int).SetBytes(ipldCountA1Storage)
Expect(ipldCountA1.String()).To(Equal(actualCountA1.String()))
@@ -127,18 +115,18 @@ var _ = Describe("WatchAddress integration test", func() {
// Contract 2, countA
actualCountA2 = big.NewInt(0)
- ipldCountA2Storage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract2.Address), common.HexToHash(countAIndex), nil)
+ ipldCountA2Storage, err := ipldClient.StorageAt(ctx, contract2.Address, countAIndex, big.NewInt(contract2.BlockNumber))
Expect(err).ToNot(HaveOccurred())
ipldCountA2 := new(big.Int).SetBytes(ipldCountA2Storage)
- Expect(ipldCountA2.String()).To(Equal(actualCountA2.String()))
+ Expect(ipldCountA2.String()).To(Equal("0"))
prevCountA2 = big.NewInt(0)
// Contract 3, countA
actualCountA3 = big.NewInt(0)
- ipldCountA3Storage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract3.Address), common.HexToHash(countAIndex), nil)
+ ipldCountA3Storage, err := ipldClient.StorageAt(ctx, contract3.Address, countAIndex, big.NewInt(contract3.BlockNumber))
Expect(err).ToNot(HaveOccurred())
ipldCountA3 := new(big.Int).SetBytes(ipldCountA3Storage)
- Expect(ipldCountA3.String()).To(Equal(actualCountA2.String()))
+ Expect(ipldCountA3.String()).To(Equal("0"))
prevCountA3 = big.NewInt(0)
})
@@ -153,70 +141,64 @@ var _ = Describe("WatchAddress integration test", func() {
// WatchedAddresses = []
// Send eth to all three contract accounts
// Contract 1
- _, txErr = integration.SendEth(contract1.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract1.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance1.Add(actualBalance1, big.NewInt(10000000000000000))
- balance1AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract1.Address), nil)
+ balance1AfterTransfer, err := ipldClient.BalanceAt(ctx, contract1.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance1AfterTransfer.String()).To(Equal(actualBalance1.String()))
prevBalance1.Set(actualBalance1)
// Contract 2
- _, txErr = integration.SendEth(contract2.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract2.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance2.Add(actualBalance2, big.NewInt(10000000000000000))
- balance2AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract2.Address), nil)
+ balance2AfterTransfer, err := ipldClient.BalanceAt(ctx, contract2.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance2AfterTransfer.String()).To(Equal(actualBalance2.String()))
prevBalance2.Set(actualBalance2)
// Contract 3
- _, txErr = integration.SendEth(contract3.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract3.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance3.Add(actualBalance3, big.NewInt(10000000000000000))
- balance3AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract3.Address), nil)
+ balance3AfterTransfer, err := ipldClient.BalanceAt(ctx, contract3.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance3AfterTransfer.String()).To(Equal(actualBalance3.String()))
prevBalance3.Set(actualBalance3)
// Increment counts
// Contract 1, countA
- _, incErr = integration.IncrementCount(contract1.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract1.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA1.Add(actualCountA1, big.NewInt(1))
- countA1AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract1.Address), common.HexToHash(countAIndex), nil)
+ countA1AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract1.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA1AfterIncrement := new(big.Int).SetBytes(countA1AfterIncrementStorage)
Expect(countA1AfterIncrement.String()).To(Equal(actualCountA1.String()))
prevCountA1.Set(actualCountA1)
// Contract 2, countA
- _, incErr = integration.IncrementCount(contract2.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract2.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA2.Add(actualCountA2, big.NewInt(1))
- countA2AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract2.Address), common.HexToHash(countAIndex), nil)
+ countA2AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract2.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA2AfterIncrement := new(big.Int).SetBytes(countA2AfterIncrementStorage)
Expect(countA2AfterIncrement.String()).To(Equal(actualCountA2.String()))
prevCountA2.Set(actualCountA2)
// Contract 3, countA
- _, incErr = integration.IncrementCount(contract3.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract3.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA3.Add(actualCountA3, big.NewInt(1))
- countA3AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract3.Address), common.HexToHash(countAIndex), nil)
+ countA3AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract3.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA3AfterIncrement := new(big.Int).SetBytes(countA3AfterIncrementStorage)
Expect(countA3AfterIncrement.String()).To(Equal(actualCountA3.String()))
@@ -229,7 +211,7 @@ var _ = Describe("WatchAddress integration test", func() {
operation := sdtypes.Add
args := []sdtypes.WatchAddressArg{
{
- Address: contract1.Address,
+ Address: contract1.Address.String(),
CreatedAt: uint64(contract1.BlockNumber),
},
}
@@ -239,67 +221,61 @@ var _ = Describe("WatchAddress integration test", func() {
// WatchedAddresses = [Contract1]
// Send eth to all three contract accounts
// Contract 1
- _, txErr = integration.SendEth(contract1.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract1.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance1.Add(actualBalance1, big.NewInt(10000000000000000))
- balance1AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract1.Address), nil)
+ balance1AfterTransfer, err := ipldClient.BalanceAt(ctx, contract1.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance1AfterTransfer.String()).To(Equal(actualBalance1.String()))
prevBalance1.Set(actualBalance1)
// Contract 2
- _, txErr = integration.SendEth(contract2.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract2.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance2.Add(actualBalance2, big.NewInt(10000000000000000))
- balance2AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract2.Address), nil)
+ balance2AfterTransfer, err := ipldClient.BalanceAt(ctx, contract2.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance2AfterTransfer.String()).To(Equal(prevBalance2.String()))
// Contract 3
- _, txErr = integration.SendEth(contract3.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract3.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance3.Add(actualBalance3, big.NewInt(10000000000000000))
- balance3AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract3.Address), nil)
+ balance3AfterTransfer, err := ipldClient.BalanceAt(ctx, contract3.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance3AfterTransfer.String()).To(Equal(prevBalance3.String()))
// Increment counts
// Contract 1, countA
- _, incErr = integration.IncrementCount(contract1.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract1.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA1.Add(actualCountA1, big.NewInt(1))
- countA1AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract1.Address), common.HexToHash(countAIndex), nil)
+ countA1AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract1.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA1AfterIncrement := new(big.Int).SetBytes(countA1AfterIncrementStorage)
Expect(countA1AfterIncrement.String()).To(Equal(actualCountA1.String()))
prevCountA1.Set(actualCountA1)
// Contract 2, countA
- _, incErr = integration.IncrementCount(contract2.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract2.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA2.Add(actualCountA2, big.NewInt(1))
- countA2AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract2.Address), common.HexToHash(countAIndex), nil)
+ countA2AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract2.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA2AfterIncrement := new(big.Int).SetBytes(countA2AfterIncrementStorage)
Expect(countA2AfterIncrement.String()).To(Equal(prevCountA2.String()))
// Contract 3, countA
- _, incErr = integration.IncrementCount(contract3.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract3.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA3.Add(actualCountA3, big.NewInt(1))
- countA3AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract3.Address), common.HexToHash(countAIndex), nil)
+ countA3AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract3.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA3AfterIncrement := new(big.Int).SetBytes(countA3AfterIncrementStorage)
Expect(countA3AfterIncrement.String()).To(Equal(prevCountA3.String()))
@@ -311,7 +287,7 @@ var _ = Describe("WatchAddress integration test", func() {
operation := sdtypes.Add
args := []sdtypes.WatchAddressArg{
{
- Address: contract2.Address,
+ Address: contract2.Address.String(),
CreatedAt: uint64(contract2.BlockNumber),
},
}
@@ -321,69 +297,63 @@ var _ = Describe("WatchAddress integration test", func() {
// WatchedAddresses = [Contract1, Contract2]
// Send eth to all three contract accounts
// Contract 1
- _, txErr = integration.SendEth(contract1.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract1.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance1.Add(actualBalance1, big.NewInt(10000000000000000))
- balance1AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract1.Address), nil)
+ balance1AfterTransfer, err := ipldClient.BalanceAt(ctx, contract1.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance1AfterTransfer.String()).To(Equal(actualBalance1.String()))
prevBalance1.Set(actualBalance1)
// Contract 2
- _, txErr = integration.SendEth(contract2.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract2.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance2.Add(actualBalance2, big.NewInt(10000000000000000))
- balance2AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract2.Address), nil)
+ balance2AfterTransfer, err := ipldClient.BalanceAt(ctx, contract2.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance2AfterTransfer.String()).To(Equal(actualBalance2.String()))
prevBalance2.Set(actualBalance2)
// Contract 3
- _, txErr = integration.SendEth(contract3.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract3.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance3.Add(actualBalance3, big.NewInt(10000000000000000))
- balance3AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract3.Address), nil)
+ balance3AfterTransfer, err := ipldClient.BalanceAt(ctx, contract3.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance3AfterTransfer.String()).To(Equal(prevBalance3.String()))
// Increment counts
// Contract 1, countA
- _, incErr = integration.IncrementCount(contract1.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract1.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA1.Add(actualCountA1, big.NewInt(1))
- countA1AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract1.Address), common.HexToHash(countAIndex), nil)
+ countA1AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract1.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA1AfterIncrement := new(big.Int).SetBytes(countA1AfterIncrementStorage)
Expect(countA1AfterIncrement.String()).To(Equal(actualCountA1.String()))
prevCountA1.Set(actualCountA1)
// Contract 2, countA
- _, incErr = integration.IncrementCount(contract2.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract2.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA2.Add(actualCountA2, big.NewInt(1))
- countA2AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract2.Address), common.HexToHash(countAIndex), nil)
+ countA2AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract2.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA2AfterIncrement := new(big.Int).SetBytes(countA2AfterIncrementStorage)
Expect(countA2AfterIncrement.String()).To(Equal(actualCountA2.String()))
prevCountA2.Set(actualCountA2)
// Contract 3, countA
- _, incErr = integration.IncrementCount(contract3.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract3.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA3.Add(actualCountA3, big.NewInt(1))
- countA3AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract3.Address), common.HexToHash(countAIndex), nil)
+ countA3AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract3.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA3AfterIncrement := new(big.Int).SetBytes(countA3AfterIncrementStorage)
Expect(countA3AfterIncrement.String()).To(Equal(prevCountA3.String()))
@@ -395,7 +365,7 @@ var _ = Describe("WatchAddress integration test", func() {
operation := sdtypes.Remove
args := []sdtypes.WatchAddressArg{
{
- Address: contract1.Address,
+ Address: contract1.Address.String(),
CreatedAt: uint64(contract1.BlockNumber),
},
}
@@ -405,67 +375,61 @@ var _ = Describe("WatchAddress integration test", func() {
// WatchedAddresses = [Contract2]
// Send eth to all three contract accounts
// Contract 1
- _, txErr = integration.SendEth(contract1.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract1.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance1.Add(actualBalance1, big.NewInt(10000000000000000))
- balance1AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract1.Address), nil)
+ balance1AfterTransfer, err := ipldClient.BalanceAt(ctx, contract1.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance1AfterTransfer.String()).To(Equal(prevBalance1.String()))
// Contract 2
- _, txErr = integration.SendEth(contract2.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract2.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance2.Add(actualBalance2, big.NewInt(10000000000000000))
- balance2AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract2.Address), nil)
+ balance2AfterTransfer, err := ipldClient.BalanceAt(ctx, contract2.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance2AfterTransfer.String()).To(Equal(actualBalance2.String()))
prevBalance2.Set(actualBalance2)
// Contract 3
- _, txErr = integration.SendEth(contract3.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract3.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance3.Add(actualBalance3, big.NewInt(10000000000000000))
- balance3AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract3.Address), nil)
+ balance3AfterTransfer, err := ipldClient.BalanceAt(ctx, contract3.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance3AfterTransfer.String()).To(Equal(prevBalance3.String()))
// Increment counts
// Contract 1, countA
- _, incErr = integration.IncrementCount(contract1.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract1.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA1.Add(actualCountA1, big.NewInt(1))
- countA1AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract1.Address), common.HexToHash(countAIndex), nil)
+ countA1AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract1.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA1AfterIncrement := new(big.Int).SetBytes(countA1AfterIncrementStorage)
Expect(countA1AfterIncrement.String()).To(Equal(prevCountA1.String()))
// Contract 2, countA
- _, incErr = integration.IncrementCount(contract2.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract2.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA2.Add(actualCountA2, big.NewInt(1))
- countA2AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract2.Address), common.HexToHash(countAIndex), nil)
+ countA2AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract2.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA2AfterIncrement := new(big.Int).SetBytes(countA2AfterIncrementStorage)
Expect(countA2AfterIncrement.String()).To(Equal(actualCountA2.String()))
prevCountA2.Set(actualCountA2)
// Contract 3, countA
- _, incErr = integration.IncrementCount(contract3.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract3.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA3.Add(actualCountA3, big.NewInt(1))
- countA3AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract3.Address), common.HexToHash(countAIndex), nil)
+ countA3AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract3.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA3AfterIncrement := new(big.Int).SetBytes(countA3AfterIncrementStorage)
Expect(countA3AfterIncrement.String()).To(Equal(prevCountA3.String()))
@@ -477,11 +441,11 @@ var _ = Describe("WatchAddress integration test", func() {
operation := sdtypes.Set
args := []sdtypes.WatchAddressArg{
{
- Address: contract1.Address,
+ Address: contract1.Address.String(),
CreatedAt: uint64(contract1.BlockNumber),
},
{
- Address: contract3.Address,
+ Address: contract3.Address.String(),
CreatedAt: uint64(contract3.BlockNumber),
},
}
@@ -491,68 +455,62 @@ var _ = Describe("WatchAddress integration test", func() {
// WatchedAddresses = [Contract1, Contract3]
// Send eth to all three contract accounts
// Contract 1
- _, txErr = integration.SendEth(contract1.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract1.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance1.Add(actualBalance1, big.NewInt(10000000000000000))
- balance1AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract1.Address), nil)
+ balance1AfterTransfer, err := ipldClient.BalanceAt(ctx, contract1.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance1AfterTransfer.String()).To(Equal(actualBalance1.String()))
prevBalance1.Set(actualBalance1)
// Contract 2
- _, txErr = integration.SendEth(contract2.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract2.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance2.Add(actualBalance2, big.NewInt(10000000000000000))
- balance2AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract2.Address), nil)
+ balance2AfterTransfer, err := ipldClient.BalanceAt(ctx, contract2.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance2AfterTransfer.String()).To(Equal(prevBalance2.String()))
// Contract 3
- _, txErr = integration.SendEth(contract3.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract3.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance3.Add(actualBalance3, big.NewInt(10000000000000000))
- balance3AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract3.Address), nil)
+ balance3AfterTransfer, err := ipldClient.BalanceAt(ctx, contract3.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance3AfterTransfer.String()).To(Equal(actualBalance3.String()))
prevBalance3.Set(actualBalance3)
// Increment counts
// Contract 1, countA
- _, incErr = integration.IncrementCount(contract1.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract1.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA1.Add(actualCountA1, big.NewInt(1))
- countA1AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract1.Address), common.HexToHash(countAIndex), nil)
+ countA1AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract1.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA1AfterIncrement := new(big.Int).SetBytes(countA1AfterIncrementStorage)
Expect(countA1AfterIncrement.String()).To(Equal(actualCountA1.String()))
prevCountA1.Set(actualCountA1)
// Contract 2, countA
- _, incErr = integration.IncrementCount(contract2.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract2.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA2.Add(actualCountA2, big.NewInt(1))
- countA2AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract2.Address), common.HexToHash(countAIndex), nil)
+ countA2AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract2.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA2AfterIncrement := new(big.Int).SetBytes(countA2AfterIncrementStorage)
Expect(countA2AfterIncrement.String()).To(Equal(prevCountA2.String()))
// Contract 3, countA
- _, incErr = integration.IncrementCount(contract3.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract3.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA3.Add(actualCountA3, big.NewInt(1))
- countA3AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract3.Address), common.HexToHash(countAIndex), nil)
+ countA3AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract3.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA3AfterIncrement := new(big.Int).SetBytes(countA3AfterIncrementStorage)
Expect(countA3AfterIncrement.String()).To(Equal(actualCountA3.String()))
@@ -570,70 +528,64 @@ var _ = Describe("WatchAddress integration test", func() {
// WatchedAddresses = []
// Send eth to all three contract accounts
// Contract 1
- _, txErr = integration.SendEth(contract1.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract1.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance1.Add(actualBalance1, big.NewInt(10000000000000000))
- balance1AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract1.Address), nil)
+ balance1AfterTransfer, err := ipldClient.BalanceAt(ctx, contract1.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance1AfterTransfer.String()).To(Equal(actualBalance1.String()))
prevBalance1.Set(actualBalance1)
// Contract 2
- _, txErr = integration.SendEth(contract2.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract2.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance2.Add(actualBalance2, big.NewInt(10000000000000000))
- balance2AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract2.Address), nil)
+ balance2AfterTransfer, err := ipldClient.BalanceAt(ctx, contract2.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance2AfterTransfer.String()).To(Equal(actualBalance2.String()))
prevBalance2.Set(actualBalance2)
// Contract 3
- _, txErr = integration.SendEth(contract3.Address, "0.01")
- time.Sleep(sleepInterval)
+ tx, txErr = integration.SendEth(contract3.Address, "0.01")
Expect(txErr).ToNot(HaveOccurred())
actualBalance3.Add(actualBalance3, big.NewInt(10000000000000000))
- balance3AfterTransfer, err := ipldClient.BalanceAt(ctx, common.HexToAddress(contract3.Address), nil)
+ balance3AfterTransfer, err := ipldClient.BalanceAt(ctx, contract3.Address, big.NewInt(tx.BlockNumber))
Expect(err).ToNot(HaveOccurred())
Expect(balance3AfterTransfer.String()).To(Equal(actualBalance3.String()))
prevBalance3.Set(actualBalance3)
// Increment counts
// Contract 1, countA
- _, incErr = integration.IncrementCount(contract1.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract1.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA1.Add(actualCountA1, big.NewInt(1))
- countA1AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract1.Address), common.HexToHash(countAIndex), nil)
+ countA1AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract1.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA1AfterIncrement := new(big.Int).SetBytes(countA1AfterIncrementStorage)
Expect(countA1AfterIncrement.String()).To(Equal(actualCountA1.String()))
prevCountA1.Set(actualCountA1)
// Contract 2, countA
- _, incErr = integration.IncrementCount(contract2.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract2.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA2.Add(actualCountA2, big.NewInt(1))
- countA2AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract2.Address), common.HexToHash(countAIndex), nil)
+ countA2AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract2.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA2AfterIncrement := new(big.Int).SetBytes(countA2AfterIncrementStorage)
Expect(countA2AfterIncrement.String()).To(Equal(actualCountA2.String()))
prevCountA2.Set(actualCountA2)
// Contract 3, countA
- _, incErr = integration.IncrementCount(contract3.Address, "A")
- time.Sleep(sleepInterval)
+ inc, incErr = integration.IncrementCount("A", contract3.Address)
Expect(incErr).ToNot(HaveOccurred())
actualCountA3.Add(actualCountA3, big.NewInt(1))
- countA3AfterIncrementStorage, err := ipldClient.StorageAt(ctx, common.HexToAddress(contract3.Address), common.HexToHash(countAIndex), nil)
+ countA3AfterIncrementStorage, err := ipldClient.StorageAt(ctx, contract3.Address, countAIndex, inc.BlockNumber)
Expect(err).ToNot(HaveOccurred())
countA3AfterIncrement := new(big.Int).SetBytes(countA3AfterIncrementStorage)
Expect(countA3AfterIncrement.String()).To(Equal(actualCountA3.String()))
@@ -648,9 +600,11 @@ var _ = Describe("WatchAddress integration test", func() {
gethErr := gethRPCClient.Call(nil, gethMethod, operation, args)
Expect(gethErr).To(HaveOccurred())
+ Expect(gethErr.Error()).To(ContainSubstring("unexpected operation"))
ipldErr := ipldRPCClient.Call(nil, ipldMethod, operation, args)
Expect(ipldErr).To(HaveOccurred())
+ Expect(ipldErr.Error()).To(ContainSubstring("unexpected operation"))
Expect(ipldErr).To(Equal(gethErr))
})
@@ -661,9 +615,11 @@ var _ = Describe("WatchAddress integration test", func() {
gethErr := gethRPCClient.Call(nil, gethMethod, operation, args)
Expect(gethErr).To(HaveOccurred())
+ Expect(gethErr.Error()).To(ContainSubstring("WatchAddressArg"))
ipldErr := ipldRPCClient.Call(nil, ipldMethod, operation, args)
Expect(ipldErr).To(HaveOccurred())
+ Expect(ipldErr.Error()).To(ContainSubstring("WatchAddressArg"))
Expect(ipldErr).To(Equal(gethErr))
})
diff --git a/main.go b/main.go
index 58070814..3736f075 100644
--- a/main.go
+++ b/main.go
@@ -16,7 +16,7 @@
package main
import (
- "github.com/cerc-io/ipld-eth-server/v4/cmd"
+ "github.com/cerc-io/ipld-eth-server/v5/cmd"
)
func main() {
diff --git a/pkg/.DS_Store b/pkg/.DS_Store
deleted file mode 100644
index 19007879..00000000
Binary files a/pkg/.DS_Store and /dev/null differ
diff --git a/pkg/client/client.go b/pkg/client/client.go
deleted file mode 100644
index 524f0c36..00000000
--- a/pkg/client/client.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// VulcanizeDB
-// Copyright © 2019 Vulcanize
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-// Client is used by watchers to stream chain IPLD data from a vulcanizedb ipld-eth-server
-package client
-
-import (
- "context"
-
- "github.com/ethereum/go-ethereum/rpc"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/serve"
-)
-
-// Client is used to subscribe to the ipld-eth-server ipld data stream
-type Client struct {
- c *rpc.Client
-}
-
-// NewClient creates a new Client
-func NewClient(c *rpc.Client) *Client {
- return &Client{
- c: c,
- }
-}
-
-// Stream is the main loop for subscribing to iplds from an ipld-eth-server server
-func (c *Client) Stream(payloadChan chan serve.SubscriptionPayload, params eth.SubscriptionSettings) (*rpc.ClientSubscription, error) {
- return c.c.Subscribe(context.Background(), "vdb", payloadChan, "stream", params)
-}
diff --git a/pkg/debug/backend.go b/pkg/debug/backend.go
index bf4a1b40..cf1aea80 100644
--- a/pkg/debug/backend.go
+++ b/pkg/debug/backend.go
@@ -25,9 +25,8 @@ import (
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/eth/tracers"
- "github.com/ethereum/go-ethereum/rpc"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
)
var _ tracers.Backend = &Backend{}
@@ -42,13 +41,11 @@ type Backend struct {
}
// StateAtBlock retrieves the state database associated with a certain block
-func (b *Backend) StateAtBlock(ctx context.Context, block *types.Block, reexec uint64, base *state.StateDB, checkLive, preferDisk bool) (*state.StateDB, error) {
- rpcBlockNumber := rpc.BlockNumber(block.NumberU64())
- statedb, _, err := b.StateAndHeaderByNumberOrHash(ctx, rpc.BlockNumberOrHashWithNumber(rpcBlockNumber))
- return statedb, err
+func (b *Backend) StateAtBlock(ctx context.Context, block *types.Block, reexec uint64, base *state.StateDB, checkLive, preferDisk bool) (*state.StateDB, tracers.StateReleaseFunc, error) {
+ return nil, func() {}, errMethodNotSupported
}
// StateAtTransaction returns the execution environment of a certain transaction
-func (b *Backend) StateAtTransaction(ctx context.Context, block *types.Block, txIndex int, reexec uint64) (core.Message, vm.BlockContext, *state.StateDB, error) {
- return nil, vm.BlockContext{}, nil, errMethodNotSupported
+func (b *Backend) StateAtTransaction(ctx context.Context, block *types.Block, txIndex int, reexec uint64) (*core.Message, vm.BlockContext, *state.StateDB, tracers.StateReleaseFunc, error) {
+ return nil, vm.BlockContext{}, nil, func() {}, errMethodNotSupported
}
diff --git a/pkg/eth/api.go b/pkg/eth/api.go
index 0e923cca..6ba22c21 100644
--- a/pkg/eth/api.go
+++ b/pkg/eth/api.go
@@ -27,14 +27,11 @@ import (
"strconv"
"time"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
-
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/common/math"
"github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/eth/filters"
@@ -43,7 +40,9 @@ import (
"github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/statediff"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/shared"
+ ipld_direct_state "github.com/cerc-io/ipld-eth-statedb/direct_by_leaf"
)
const (
@@ -165,10 +164,10 @@ func (pea *PublicEthAPI) BlockNumber() hexutil.Uint64 {
}
// GetBlockByNumber returns the requested canonical block.
-// * When blockNr is -1 the chain head is returned.
-// * We cannot support pending block calls since we do not have an active miner
-// * When fullTx is true all transactions in the block are returned, otherwise
-// only the transaction hash is returned.
+// - When blockNr is -1 the chain head is returned.
+// - We cannot support pending block calls since we do not have an active miner
+// - When fullTx is true all transactions in the block are returned, otherwise
+// only the transaction hash is returned.
func (pea *PublicEthAPI) GetBlockByNumber(ctx context.Context, number rpc.BlockNumber, fullTx bool) (map[string]interface{}, error) {
block, err := pea.B.BlockByNumber(ctx, number)
if block != nil && err == nil {
@@ -510,7 +509,7 @@ type feeHistoryResult struct {
}
// FeeHistory returns the fee market history.
-func (pea *PublicEthAPI) FeeHistory(ctx context.Context, blockCount rpc.DecimalOrHex, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (*feeHistoryResult, error) {
+func (pea *PublicEthAPI) FeeHistory(ctx context.Context, blockCount int, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (*feeHistoryResult, error) {
if pea.rpc != nil {
var res *feeHistoryResult
if err := pea.rpc.CallContext(ctx, &res, "eth_feeHistory", blockCount, lastBlock, rewardPercentiles); err != nil {
@@ -596,7 +595,7 @@ func (pea *PublicEthAPI) localGetTransactionReceipt(ctx context.Context, hash co
if err != nil {
return nil, err
}
- err = receipts.DeriveFields(pea.B.Config.ChainConfig, blockHash, blockNumber, block.Transactions())
+ err = receipts.DeriveFields(pea.B.Config.ChainConfig, blockHash, blockNumber, block.BaseFee(), block.Transactions())
if err != nil {
return nil, err
}
@@ -612,6 +611,7 @@ func (pea *PublicEthAPI) localGetTransactionReceipt(ctx context.Context, hash co
from, _ := types.Sender(signer, tx)
fields := map[string]interface{}{
+ "type": hexutil.Uint64(receipt.Type),
"blockHash": blockHash,
"blockNumber": hexutil.Uint64(blockNumber),
"transactionHash": hash,
@@ -623,6 +623,7 @@ func (pea *PublicEthAPI) localGetTransactionReceipt(ctx context.Context, hash co
"contractAddress": nil,
"logs": receipt.Logs,
"logsBloom": receipt.Bloom,
+ "effectiveGasPrice": (*hexutil.Big)(receipt.EffectiveGasPrice),
}
// Assign receipt status or post state.
@@ -707,6 +708,7 @@ func (pea *PublicEthAPI) localGetLogs(crit filters.FilterCriteria) ([]*types.Log
if err != nil {
return nil, err
}
+ // we must avoid overshadowing `err` so that we update the value of the variable inside the defer
defer func() {
if p := recover(); p != nil {
shared.Rollback(tx)
@@ -720,12 +722,15 @@ func (pea *PublicEthAPI) localGetLogs(crit filters.FilterCriteria) ([]*types.Log
// If we have a blockHash to filter on, fire off single retrieval query
if crit.BlockHash != nil {
- filteredLogs, err := pea.B.Retriever.RetrieveFilteredLog(tx, filter, 0, crit.BlockHash)
+ var filteredLogs []LogResult
+ filteredLogs, err = pea.B.Retriever.RetrieveFilteredLogs(tx, filter, 0, crit.BlockHash)
if err != nil {
return nil, err
}
- return decomposeLogs(filteredLogs)
+ var logs []*types.Log
+ logs, err = decomposeLogs(filteredLogs)
+ return logs, err
}
// Otherwise, create block range from criteria
@@ -737,7 +742,8 @@ func (pea *PublicEthAPI) localGetLogs(crit filters.FilterCriteria) ([]*types.Log
}
if endingBlock == nil {
- endingBlockInt, err := pea.B.Retriever.RetrieveLastBlockNumber()
+ var endingBlockInt int64
+ endingBlockInt, err = pea.B.Retriever.RetrieveLastBlockNumber()
if err != nil {
return nil, err
}
@@ -748,12 +754,14 @@ func (pea *PublicEthAPI) localGetLogs(crit filters.FilterCriteria) ([]*types.Log
end := endingBlock.Int64()
var logs []*types.Log
for i := start; i <= end; i++ {
- filteredLogs, err := pea.B.Retriever.RetrieveFilteredLog(tx, filter, i, nil)
+ var filteredLogs []LogResult
+ filteredLogs, err = pea.B.Retriever.RetrieveFilteredLogs(tx, filter, i, nil)
if err != nil {
return nil, err
}
- logCIDs, err := decomposeLogs(filteredLogs)
+ var logCIDs []*types.Log
+ logCIDs, err = decomposeLogs(filteredLogs)
if err != nil {
return nil, err
}
@@ -761,10 +769,6 @@ func (pea *PublicEthAPI) localGetLogs(crit filters.FilterCriteria) ([]*types.Log
logs = append(logs, logCIDs...)
}
- if err := tx.Commit(); err != nil {
- return nil, err
- }
-
return logs, err // need to return err variable so that we return the err = tx.Commit() assignment in the defer
}
@@ -779,7 +783,9 @@ State and Storage
// block numbers are also allowed.
func (pea *PublicEthAPI) GetBalance(ctx context.Context, address common.Address, blockNrOrHash rpc.BlockNumberOrHash) (*hexutil.Big, error) {
bal, err := pea.localGetBalance(ctx, address, blockNrOrHash)
- if bal != nil && err == nil {
+ if err != nil && err != sql.ErrNoRows {
+ return nil, err
+ } else if bal != nil {
return bal, nil
}
if pea.config.ProxyOnError {
@@ -875,13 +881,17 @@ func (pea *PublicEthAPI) GetProof(ctx context.Context, address common.Address, s
return nil, err
}
+// this continues to use ipfs-ethdb based geth StateDB as it requires trie access
func (pea *PublicEthAPI) localGetProof(ctx context.Context, address common.Address, storageKeys []string, blockNrOrHash rpc.BlockNumberOrHash) (*AccountResult, error) {
- state, _, err := pea.B.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash)
+ state, _, err := pea.B.IPLDTrieStateDBAndHeaderByNumberOrHash(ctx, blockNrOrHash)
if state == nil || err != nil {
return nil, err
}
- storageTrie := state.StorageTrie(address)
+ storageTrie, err := state.StorageTrie(address)
+ if storageTrie == nil || err != nil {
+ return nil, err
+ }
storageHash := types.EmptyRootHash
codeHash := state.GetCodeHash(address)
storageProof := make([]StorageResult, len(storageKeys))
@@ -977,7 +987,7 @@ type OverrideAccount struct {
type StateOverride map[common.Address]OverrideAccount
// Apply overrides the fields of specified accounts into the given state.
-func (diff *StateOverride) Apply(state *state.StateDB) error {
+func (diff *StateOverride) Apply(state *ipld_direct_state.StateDB) error {
if diff == nil {
return nil
}
@@ -1054,7 +1064,7 @@ func DoCall(ctx context.Context, b *Backend, args CallArgs, blockNrOrHash rpc.Bl
log.Debugxf(ctx, "Executing EVM call finished %s runtime %s", time.Now().String(), time.Since(start).String())
}(time.Now())
- state, header, err := b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash)
+ state, header, err := b.IPLDDirectStateDBAndHeaderByNumberOrHash(ctx, blockNrOrHash)
if state == nil || err != nil {
return nil, err
}
@@ -1105,7 +1115,7 @@ func DoCall(ctx context.Context, b *Backend, args CallArgs, blockNrOrHash rpc.Bl
return nil, fmt.Errorf("execution aborted (timeout = %v)", timeout)
}
if err != nil {
- return result, fmt.Errorf("err: %w (supplied gas %d)", err, msg.Gas())
+ return result, fmt.Errorf("err: %w (supplied gas %d)", err, msg.GasLimit)
}
return result, nil
}
@@ -1144,12 +1154,10 @@ func (pea *PublicEthAPI) writeStateDiffAt(height int64) {
defer cancel()
var data json.RawMessage
params := statediff.Params{
- IntermediateStateNodes: true,
- IntermediateStorageNodes: true,
- IncludeBlock: true,
- IncludeReceipts: true,
- IncludeTD: true,
- IncludeCode: true,
+ IncludeBlock: true,
+ IncludeReceipts: true,
+ IncludeTD: true,
+ IncludeCode: true,
}
log.Debugf("Calling statediff_writeStateDiffAt(%d)", height)
if err := pea.rpc.CallContext(ctx, &data, "statediff_writeStateDiffAt", uint64(height), params); err != nil {
@@ -1167,12 +1175,10 @@ func (pea *PublicEthAPI) writeStateDiffFor(blockHash common.Hash) {
defer cancel()
var data json.RawMessage
params := statediff.Params{
- IntermediateStateNodes: true,
- IntermediateStorageNodes: true,
- IncludeBlock: true,
- IncludeReceipts: true,
- IncludeTD: true,
- IncludeCode: true,
+ IncludeBlock: true,
+ IncludeReceipts: true,
+ IncludeTD: true,
+ IncludeCode: true,
}
log.Debugf("Calling statediff_writeStateDiffFor(%s)", blockHash.Hex())
if err := pea.rpc.CallContext(ctx, &data, "statediff_writeStateDiffFor", blockHash, params); err != nil {
diff --git a/pkg/eth/api_test.go b/pkg/eth/api_test/api_test.go
similarity index 93%
rename from pkg/eth/api_test.go
rename to pkg/eth/api_test/api_test.go
index c543ab72..25de1b37 100644
--- a/pkg/eth/api_test.go
+++ b/pkg/eth/api_test/api_test.go
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
-package eth_test
+package eth_api_test
import (
"context"
@@ -31,14 +31,15 @@ import (
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/statediff/indexer/interfaces"
+ "github.com/ethereum/go-ethereum/statediff/indexer/ipld"
sdtypes "github.com/ethereum/go-ethereum/statediff/types"
"github.com/jmoiron/sqlx"
- . "github.com/onsi/ginkgo"
+ . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth/test_helpers"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth/test_helpers"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/shared"
)
var (
@@ -50,7 +51,8 @@ var (
blockHash = test_helpers.MockBlock.Header().Hash()
baseFee = test_helpers.MockLondonBlock.BaseFee()
ctx = context.Background()
- expectedBlock = map[string]interface{}{
+
+ expectedBlock = map[string]interface{}{
"number": (*hexutil.Big)(test_helpers.MockBlock.Number()),
"hash": test_helpers.MockBlock.Hash(),
"parentHash": test_helpers.MockBlock.ParentHash(),
@@ -150,6 +152,8 @@ var (
"logs": test_helpers.MockReceipts[0].Logs,
"logsBloom": test_helpers.MockReceipts[0].Bloom,
"status": hexutil.Uint(test_helpers.MockReceipts[0].Status),
+ "effectiveGasPrice": (*hexutil.Big)(big.NewInt(100)),
+ "type": hexutil.Uint64(types.LegacyTxType),
}
expectedReceipt2 = map[string]interface{}{
"blockHash": blockHash,
@@ -164,6 +168,8 @@ var (
"logs": test_helpers.MockReceipts[1].Logs,
"logsBloom": test_helpers.MockReceipts[1].Bloom,
"root": hexutil.Bytes(test_helpers.MockReceipts[1].PostState),
+ "effectiveGasPrice": (*hexutil.Big)(big.NewInt(200)),
+ "type": hexutil.Uint64(types.LegacyTxType),
}
expectedReceipt3 = map[string]interface{}{
"blockHash": blockHash,
@@ -178,80 +184,79 @@ var (
"logs": test_helpers.MockReceipts[2].Logs,
"logsBloom": test_helpers.MockReceipts[2].Bloom,
"root": hexutil.Bytes(test_helpers.MockReceipts[2].PostState),
+ "effectiveGasPrice": (*hexutil.Big)(big.NewInt(150)),
+ "type": hexutil.Uint64(types.LegacyTxType),
}
)
+var (
+ db *sqlx.DB
+ api *eth.PublicEthAPI
+ chainConfig = params.TestChainConfig
+)
+
+var _ = BeforeSuite(func() {
+ var (
+ err error
+ tx interfaces.Batch
+ )
+
+ db = shared.SetupDB()
+ indexAndPublisher := shared.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash())
+
+ backend, err := eth.NewEthBackend(db, ð.Config{
+ ChainConfig: chainConfig,
+ VMConfig: vm.Config{},
+ RPCGasCap: big.NewInt(10000000000), // Max gas capacity for a rpc call.
+ GroupCacheConfig: &shared.GroupCacheConfig{
+ StateDB: shared.GroupConfig{
+ Name: "api_test",
+ CacheSizeInMB: 8,
+ CacheExpiryInMins: 60,
+ LogStatsIntervalInSecs: 0,
+ },
+ },
+ })
+ Expect(err).ToNot(HaveOccurred())
+ api, _ = eth.NewPublicEthAPI(backend, nil, eth.APIConfig{StateDiffTimeout: shared.DefaultStateDiffTimeout})
+ tx, err = indexAndPublisher.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+
+ ipld := sdtypes.IPLD{
+ CID: ipld.Keccak256ToCid(ipld.RawBinary, test_helpers.CodeHash.Bytes()).String(),
+ Content: test_helpers.ContractCode,
+ }
+ err = indexAndPublisher.PushIPLD(tx, ipld)
+ Expect(err).ToNot(HaveOccurred())
+
+ for _, node := range test_helpers.MockStateNodes {
+ err = indexAndPublisher.PushStateNode(tx, node, test_helpers.MockBlock.Hash().String())
+ Expect(err).ToNot(HaveOccurred())
+ }
+
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+
+ uncles := test_helpers.MockBlock.Uncles()
+ uncleHashes := make([]common.Hash, len(uncles))
+ for i, uncle := range uncles {
+ uncleHashes[i] = uncle.Hash()
+ }
+ expectedBlock["uncles"] = uncleHashes
+
+ // setting chain config to for london block
+ chainConfig.LondonBlock = big.NewInt(2)
+ indexAndPublisher = shared.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash())
+
+ tx, err = indexAndPublisher.PushBlock(test_helpers.MockLondonBlock, test_helpers.MockLondonReceipts, test_helpers.MockLondonBlock.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+})
+
+var _ = AfterSuite(func() { shared.TearDownDB(db) })
var _ = Describe("API", func() {
- var (
- db *sqlx.DB
- api *eth.PublicEthAPI
- chainConfig = params.TestChainConfig
- )
- // Test db setup, rather than using BeforeEach we only need to setup once since the tests do not mutate the database
- // Note: if you focus one of the tests be sure to focus this and the defered It()
- It("test init", func() {
- var (
- err error
- tx interfaces.Batch
- )
-
- db = shared.SetupDB()
- indexAndPublisher := shared.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash())
-
- backend, err := eth.NewEthBackend(db, ð.Config{
- ChainConfig: chainConfig,
- VMConfig: vm.Config{},
- RPCGasCap: big.NewInt(10000000000), // Max gas capacity for a rpc call.
- GroupCacheConfig: &shared.GroupCacheConfig{
- StateDB: shared.GroupConfig{
- Name: "api_test",
- CacheSizeInMB: 8,
- CacheExpiryInMins: 60,
- LogStatsIntervalInSecs: 0,
- },
- },
- })
- Expect(err).ToNot(HaveOccurred())
- api, _ = eth.NewPublicEthAPI(backend, nil, eth.APIConfig{false, false, false, false, shared.DefaultStateDiffTimeout})
- tx, err = indexAndPublisher.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
- Expect(err).ToNot(HaveOccurred())
-
- ccHash := sdtypes.CodeAndCodeHash{
- Hash: test_helpers.ContractCodeHash,
- Code: test_helpers.ContractCode,
- }
-
- err = indexAndPublisher.PushCodeAndCodeHash(tx, ccHash)
- Expect(err).ToNot(HaveOccurred())
-
- for _, node := range test_helpers.MockStateNodes {
- err = indexAndPublisher.PushStateNode(tx, node, test_helpers.MockBlock.Hash().String())
- Expect(err).ToNot(HaveOccurred())
- }
-
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
-
- uncles := test_helpers.MockBlock.Uncles()
- uncleHashes := make([]common.Hash, len(uncles))
- for i, uncle := range uncles {
- uncleHashes[i] = uncle.Hash()
- }
- expectedBlock["uncles"] = uncleHashes
-
- // setting chain config to for london block
- chainConfig.LondonBlock = big.NewInt(2)
- indexAndPublisher = shared.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash())
-
- tx, err = indexAndPublisher.PushBlock(test_helpers.MockLondonBlock, test_helpers.MockLondonReceipts, test_helpers.MockLondonBlock.Difficulty())
- Expect(err).ToNot(HaveOccurred())
-
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
- })
-
- // Single test db tear down at end of all tests
- defer It("test teardown", func() { shared.TearDownDB(db) })
/*
Headers and blocks
@@ -326,12 +331,12 @@ var _ = Describe("API", func() {
It("Fetch BaseFee from london block by block number, returns `nil` for legacy block", func() {
block, err := api.GetBlockByNumber(ctx, number, false)
Expect(err).ToNot(HaveOccurred())
- _, ok := block["baseFee"]
+ _, ok := block["baseFeePerGas"]
Expect(ok).To(Equal(false))
block, err = api.GetBlockByNumber(ctx, londonBlockNum, false)
Expect(err).ToNot(HaveOccurred())
- Expect(block["baseFee"].(*big.Int)).To(Equal(baseFee))
+ Expect(block["baseFeePerGas"]).To(Equal((*hexutil.Big)(baseFee)))
})
It("Retrieves a block by number with uncles in correct order", func() {
block, err := api.GetBlockByNumber(ctx, londonBlockNum, false)
@@ -380,11 +385,11 @@ var _ = Describe("API", func() {
It("Fetch BaseFee from london block by block hash, returns `nil` for legacy block", func() {
block, err := api.GetBlockByHash(ctx, test_helpers.MockBlock.Hash(), true)
Expect(err).ToNot(HaveOccurred())
- _, ok := block["baseFee"]
+ _, ok := block["baseFeePerGas"]
Expect(ok).To(Equal(false))
block, err = api.GetBlockByHash(ctx, test_helpers.MockLondonBlock.Hash(), false)
Expect(err).ToNot(HaveOccurred())
- Expect(block["baseFee"].(*big.Int)).To(Equal(baseFee))
+ Expect(block["baseFeePerGas"]).To(Equal((*hexutil.Big)(baseFee)))
})
It("Retrieves a block by hash with uncles in correct order", func() {
block, err := api.GetBlockByHash(ctx, test_helpers.MockLondonBlock.Hash(), false)
diff --git a/pkg/serve/helpers.go b/pkg/eth/api_test/eth_suite_test.go
similarity index 56%
rename from pkg/serve/helpers.go
rename to pkg/eth/api_test/eth_suite_test.go
index 358568a3..30ac6459 100644
--- a/pkg/serve/helpers.go
+++ b/pkg/eth/api_test/eth_suite_test.go
@@ -14,24 +14,16 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
-package serve
+package eth_api_test
-import "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
+import (
+ "testing"
-func sendNonBlockingErr(sub Subscription, err error) {
- log.Error(err)
- select {
- case sub.PayloadChan <- SubscriptionPayload{Data: nil, Err: err.Error(), Flag: EmptyFlag}:
- default:
- log.Infof("unable to send error to subscription %s", sub.ID)
- }
-}
-
-func sendNonBlockingQuit(sub Subscription) {
- select {
- case sub.QuitChan <- true:
- log.Infof("closing subscription %s", sub.ID)
- default:
- log.Infof("unable to close subscription %s; channel has no receiver", sub.ID)
- }
+ . "github.com/onsi/ginkgo/v2"
+ . "github.com/onsi/gomega"
+)
+
+func TestETHSuite(t *testing.T) {
+ RegisterFailHandler(Fail)
+ RunSpecs(t, "ipld-eth-server/pkg/eth/api_test")
}
diff --git a/pkg/eth/backend.go b/pkg/eth/backend.go
index 03c9f2cc..6f614267 100644
--- a/pkg/eth/backend.go
+++ b/pkg/eth/backend.go
@@ -23,19 +23,14 @@ import (
"errors"
"fmt"
"math/big"
- "strconv"
"time"
- validator "github.com/cerc-io/eth-ipfs-state-validator/v4/pkg"
- ipfsethdb "github.com/cerc-io/ipfs-ethdb/v4/postgres"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/consensus"
"github.com/ethereum/go-ethereum/consensus/ethash"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/bloombits"
- "github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/crypto"
@@ -44,13 +39,17 @@ import (
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc"
- ethServerShared "github.com/ethereum/go-ethereum/statediff/indexer/shared"
- sdtrie "github.com/ethereum/go-ethereum/statediff/trie_helpers"
- sdtypes "github.com/ethereum/go-ethereum/statediff/types"
+ "github.com/ethereum/go-ethereum/statediff/indexer/ipld"
"github.com/ethereum/go-ethereum/trie"
"github.com/jmoiron/sqlx"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
+ validator "github.com/cerc-io/eth-ipfs-state-validator/v5/pkg"
+ ipfsethdb "github.com/cerc-io/ipfs-ethdb/v5/postgres/v0"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/shared"
+ ipld_direct_state "github.com/cerc-io/ipld-eth-statedb/direct_by_leaf"
+ ipld_sql "github.com/cerc-io/ipld-eth-statedb/sql"
+ ipld_trie_state "github.com/cerc-io/ipld-eth-statedb/trie_by_cid/state"
)
var (
@@ -61,61 +60,28 @@ var (
errMultipleHeadersForHash = errors.New("more than one headers for the given hash")
errTxHashNotFound = errors.New("transaction for hash not found")
errTxHashInMultipleBlocks = errors.New("transaction for hash found in more than one canonical block")
-
- // errMissingSignature is returned if a block's extra-data section doesn't seem
- // to contain a 65 byte secp256k1 signature.
-)
-
-const (
- RetrieveCanonicalBlockHashByNumber = `SELECT block_hash
- FROM canonical_header_hash($1) AS block_hash
- WHERE block_hash IS NOT NULL`
- RetrieveCanonicalHeaderByNumber = `SELECT cid, data FROM eth.header_cids
- INNER JOIN public.blocks ON (
- header_cids.mh_key = blocks.key
- AND header_cids.block_number = blocks.block_number
- )
- WHERE block_hash = (SELECT canonical_header_hash($1))`
- RetrieveTD = `SELECT CAST(td as Text) FROM eth.header_cids
- WHERE header_cids.block_hash = $1`
- RetrieveRPCTransaction = `SELECT blocks.data, header_id, transaction_cids.block_number, index
- FROM public.blocks, eth.transaction_cids
- WHERE blocks.key = transaction_cids.mh_key
- AND blocks.block_number = transaction_cids.block_number
- AND transaction_cids.tx_hash = $1
- AND transaction_cids.header_id = (SELECT canonical_header_hash(transaction_cids.block_number))`
- RetrieveCodeHashByLeafKeyAndBlockHash = `SELECT code_hash FROM eth.state_accounts, eth.state_cids, eth.header_cids
- WHERE state_accounts.header_id = state_cids.header_id
- AND state_accounts.state_path = state_cids.state_path
- AND state_accounts.block_number = state_cids.block_number
- AND state_cids.header_id = header_cids.block_hash
- AND state_cids.block_number = header_cids.block_number
- AND state_leaf_key = $1
- AND header_cids.block_number <= (SELECT block_number
- FROM eth.header_cids
- WHERE block_hash = $2)
- AND header_cids.block_hash = (SELECT canonical_header_hash(header_cids.block_number))
- ORDER BY header_cids.block_number DESC
- LIMIT 1`
- RetrieveCodeByMhKey = `SELECT data FROM public.blocks WHERE key = $1`
)
const (
StateDBGroupCacheName = "statedb"
)
+// Backend handles all interactions with IPLD/SQL-backed Ethereum state.
+// Note that this does not contain a geth state.StateDatabase, as it is not compatible with the
+// IPFS v0 blockstore nor the leaf-key indexed SQL schema.
type Backend struct {
// underlying postgres db
DB *sqlx.DB
// postgres db interfaces
- Retriever *CIDRetriever
- Fetcher *IPLDFetcher
- IPLDRetriever *IPLDRetriever
+ Retriever *Retriever
// ethereum interfaces
- EthDB ethdb.Database
- StateDatabase state.Database
+ EthDB ethdb.Database
+ // We use this state.Database for eth_call and any place we don't need trie access
+ IpldDirectStateDatabase ipld_direct_state.StateDatabase
+ // We use this where state must be accessed by trie
+ IpldTrieStateDatabase ipld_trie_state.Database
Config *Config
}
@@ -123,7 +89,6 @@ type Backend struct {
type Config struct {
ChainConfig *params.ChainConfig
VMConfig vm.Config
- DefaultSender *common.Address
RPCGasCap *big.Int
GroupCacheConfig *shared.GroupCacheConfig
}
@@ -136,7 +101,7 @@ func NewEthBackend(db *sqlx.DB, c *Config) (*Backend, error) {
groupName = StateDBGroupCacheName
}
- r := NewCIDRetriever(db)
+ r := NewRetriever(db)
ethDB := ipfsethdb.NewDatabase(db, ipfsethdb.CacheConfig{
Name: groupName,
Size: gcc.StateDB.CacheSizeInMB * 1024 * 1024,
@@ -144,15 +109,14 @@ func NewEthBackend(db *sqlx.DB, c *Config) (*Backend, error) {
})
logStateDBStatsOnTimer(ethDB.(*ipfsethdb.Database), gcc)
-
+ driver := ipld_sql.NewSQLXDriverFromPool(context.Background(), db)
return &Backend{
- DB: db,
- Retriever: r,
- Fetcher: NewIPLDFetcher(db),
- IPLDRetriever: NewIPLDRetriever(db),
- EthDB: ethDB,
- StateDatabase: state.NewDatabase(ethDB),
- Config: c,
+ DB: db,
+ Retriever: r,
+ EthDB: ethDB,
+ IpldDirectStateDatabase: ipld_direct_state.NewStateDatabase(driver),
+ IpldTrieStateDatabase: ipld_trie_state.NewDatabase(ethDB),
+ Config: c,
}, nil
}
@@ -161,27 +125,35 @@ func (b *Backend) ChainDb() ethdb.Database {
return b.EthDB
}
-// HeaderByNumber gets the canonical header for the provided block number
-func (b *Backend) HeaderByNumber(ctx context.Context, blockNumber rpc.BlockNumber) (*types.Header, error) {
+func (b *Backend) normalizeBlockNumber(blockNumber rpc.BlockNumber) (int64, error) {
var err error
number := blockNumber.Int64()
if blockNumber == rpc.LatestBlockNumber {
number, err = b.Retriever.RetrieveLastBlockNumber()
if err != nil {
- return nil, err
+ return 0, err
}
}
if blockNumber == rpc.EarliestBlockNumber {
number, err = b.Retriever.RetrieveFirstBlockNumber()
if err != nil {
- return nil, err
+ return 0, err
}
}
if blockNumber == rpc.PendingBlockNumber {
- return nil, errPendingBlockNumber
+ return 0, errPendingBlockNumber
}
if number < 0 {
- return nil, errNegativeBlockNumber
+ return 0, errNegativeBlockNumber
+ }
+ return number, nil
+}
+
+// HeaderByNumber gets the canonical header for the provided block number
+func (b *Backend) HeaderByNumber(ctx context.Context, blockNumber rpc.BlockNumber) (*types.Header, error) {
+ number, err := b.normalizeBlockNumber(blockNumber)
+ if err != nil {
+ return nil, err
}
_, canonicalHeaderRLP, err := b.GetCanonicalHeader(uint64(number))
if err != nil {
@@ -194,23 +166,7 @@ func (b *Backend) HeaderByNumber(ctx context.Context, blockNumber rpc.BlockNumbe
// HeaderByHash gets the header for the provided block hash
func (b *Backend) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) {
- // Begin tx
- tx, err := b.DB.Beginx()
- if err != nil {
- return nil, err
- }
- defer func() {
- if p := recover(); p != nil {
- shared.Rollback(tx)
- panic(p)
- } else if err != nil {
- shared.Rollback(tx)
- } else {
- err = tx.Commit()
- }
- }()
-
- _, headerRLP, err := b.IPLDRetriever.RetrieveHeaderByHash(tx, hash)
+ _, headerRLP, err := b.Retriever.RetrieveHeaderByHash(hash)
if err != nil {
return nil, err
}
@@ -229,14 +185,16 @@ func (b *Backend) HeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.Bl
return nil, err
}
if header == nil {
- return nil, errors.New("header for hash not found")
+ return nil, errHeaderHashNotFound
}
- canonicalHash, err := b.GetCanonicalHash(header.Number.Uint64())
- if err != nil {
- return nil, err
- }
- if blockNrOrHash.RequireCanonical && canonicalHash != hash {
- return nil, errors.New("hash is not currently canonical")
+ if blockNrOrHash.RequireCanonical {
+ canonicalHash, err := b.GetCanonicalHash(header.Number.Uint64())
+ if err != nil {
+ return nil, err
+ }
+ if canonicalHash != hash {
+ return nil, errors.New("hash is not currently canonical")
+ }
}
return header, nil
}
@@ -283,14 +241,16 @@ func (b *Backend) BlockByNumberOrHash(ctx context.Context, blockNrOrHash rpc.Blo
return nil, err
}
if header == nil {
- return nil, errors.New("header for hash not found")
+ return nil, errHeaderHashNotFound
}
- canonicalHash, err := b.GetCanonicalHash(header.Number.Uint64())
- if err != nil {
- return nil, err
- }
- if blockNrOrHash.RequireCanonical && canonicalHash != hash {
- return nil, errors.New("hash is not currently canonical")
+ if blockNrOrHash.RequireCanonical {
+ canonicalHash, err := b.GetCanonicalHash(header.Number.Uint64())
+ if err != nil {
+ return nil, err
+ }
+ if canonicalHash != hash {
+ return nil, errors.New("hash is not currently canonical")
+ }
}
block, err := b.BlockByHash(ctx, hash)
if err != nil {
@@ -306,28 +266,10 @@ func (b *Backend) BlockByNumberOrHash(ctx context.Context, blockNrOrHash rpc.Blo
// BlockByNumber returns the requested canonical block
func (b *Backend) BlockByNumber(ctx context.Context, blockNumber rpc.BlockNumber) (*types.Block, error) {
- var err error
- number := blockNumber.Int64()
- if blockNumber == rpc.LatestBlockNumber {
- number, err = b.Retriever.RetrieveLastBlockNumber()
- if err != nil {
- return nil, err
- }
+ number, err := b.normalizeBlockNumber(blockNumber)
+ if err != nil {
+ return nil, err
}
- if blockNumber == rpc.EarliestBlockNumber {
- number, err = b.Retriever.RetrieveFirstBlockNumber()
- if err != nil {
- return nil, err
- }
- }
- if blockNumber == rpc.PendingBlockNumber {
- return nil, errPendingBlockNumber
- }
- if number < 0 {
- return nil, errNegativeBlockNumber
- }
-
- // Get the canonical hash
canonicalHash, err := b.GetCanonicalHash(uint64(number))
if err != nil {
if err == sql.ErrNoRows {
@@ -346,6 +288,7 @@ func (b *Backend) BlockByHash(ctx context.Context, hash common.Hash) (*types.Blo
if err != nil {
return nil, err
}
+ // we must avoid overshadowing `err` so that we update the value of the variable inside the defer
defer func() {
if p := recover(); p != nil {
shared.Rollback(tx)
@@ -358,7 +301,8 @@ func (b *Backend) BlockByHash(ctx context.Context, hash common.Hash) (*types.Blo
}()
// Fetch header
- header, err := b.GetHeaderByBlockHash(tx, hash)
+ var header *types.Header
+ header, err = b.GetHeaderByBlockHash(tx, hash)
if err != nil {
log.Error("error fetching header: ", err)
if err == sql.ErrNoRows {
@@ -370,50 +314,45 @@ func (b *Backend) BlockByHash(ctx context.Context, hash common.Hash) (*types.Blo
blockNumber := header.Number.Uint64()
// Fetch uncles
- uncles, err := b.GetUnclesByBlockHashAndNumber(tx, hash, blockNumber)
+ var uncles []*types.Header
+ uncles, err = b.GetUnclesByBlockHashAndNumber(tx, hash, blockNumber)
if err != nil && err != sql.ErrNoRows {
log.Error("error fetching uncles: ", err)
return nil, err
}
- // When num. of uncles = 2,
- // Check if calculated uncle hash matches the one in header
- // If not, re-order the two uncles
- // Assumption: Max num. of uncles in mainnet = 2
- if len(uncles) == 2 {
- uncleHash := types.CalcUncleHash(uncles)
- if uncleHash != header.UncleHash {
- uncles[0], uncles[1] = uncles[1], uncles[0]
-
- uncleHash = types.CalcUncleHash(uncles)
- // Check if uncle hash matches after re-ordering
- if uncleHash != header.UncleHash {
- log.Error("uncle hash mismatch for block hash: ", hash.Hex())
- }
- }
+ // We should not have any non-determinism in the ordering of the uncles returned to us now
+ uncleHash := types.CalcUncleHash(uncles)
+ // Check if uncle hash matches expected hash
+ if uncleHash != header.UncleHash {
+ log.Error("uncle hash mismatch for block hash: ", hash.Hex())
+ err = fmt.Errorf("uncle hash mismatch for block hash: %s", hash.Hex())
+ return nil, err
}
// Fetch transactions
- transactions, err := b.GetTransactionsByBlockHashAndNumber(tx, hash, blockNumber)
+ var transactions types.Transactions
+ transactions, err = b.GetTransactionsByBlockHashAndNumber(tx, hash, blockNumber)
if err != nil && err != sql.ErrNoRows {
log.Error("error fetching transactions: ", err)
return nil, err
}
// Fetch receipts
- receipts, err := b.GetReceiptsByBlockHashAndNumber(tx, hash, blockNumber)
+ var receipts types.Receipts
+ receipts, err = b.GetReceiptsByBlockHashAndNumber(tx, hash, blockNumber)
if err != nil && err != sql.ErrNoRows {
log.Error("error fetching receipts: ", err)
return nil, err
}
// Compose everything together into a complete block
- return types.NewBlock(header, transactions, uncles, receipts, new(trie.Trie)), err
+ return types.NewBlock(header, transactions, uncles, receipts, trie.NewEmpty(nil)), err
}
// GetHeaderByBlockHash retrieves header for a provided block hash
func (b *Backend) GetHeaderByBlockHash(tx *sqlx.Tx, hash common.Hash) (*types.Header, error) {
- _, headerRLP, err := b.IPLDRetriever.RetrieveHeaderByHash(tx, hash)
+ _, headerRLP, err := b.Retriever.RetrieveHeaderByHash2(tx, hash)
if err != nil {
return nil, err
}
@@ -422,22 +361,40 @@ func (b *Backend) GetHeaderByBlockHash(tx *sqlx.Tx, hash common.Hash) (*types.He
return header, rlp.DecodeBytes(headerRLP, header)
}
+// CurrentHeader returns the current block's header
+func (b *Backend) CurrentHeader() *types.Header {
+ header, err := b.HeaderByNumber(context.Background(), rpc.LatestBlockNumber)
+ if err != nil {
+ return nil
+ }
+ return header
+}
+
+// GetBody returns the the body for the provided block hash and number
+func (b *Backend) GetBody(ctx context.Context, hash common.Hash, number rpc.BlockNumber) (*types.Body, error) {
+ if number < 0 || hash == (common.Hash{}) {
+ return nil, errors.New("invalid arguments; expect hash and no special block numbers")
+ }
+ block, err := b.BlockByHash(ctx, hash)
+ if err != nil {
+ return nil, err
+ }
+ if block != nil {
+ return block.Body(), nil
+ }
+ return nil, errors.New("block body not found")
+}
+
// GetUnclesByBlockHash retrieves uncles for a provided block hash
func (b *Backend) GetUnclesByBlockHash(tx *sqlx.Tx, hash common.Hash) ([]*types.Header, error) {
- _, uncleBytes, err := b.IPLDRetriever.RetrieveUnclesByBlockHash(tx, hash)
+ _, uncleBytes, err := b.Retriever.RetrieveUnclesByBlockHash(tx, hash)
if err != nil {
return nil, err
}
- uncles := make([]*types.Header, len(uncleBytes))
- for i, bytes := range uncleBytes {
- var uncle types.Header
- err = rlp.DecodeBytes(bytes, &uncle)
- if err != nil {
- return nil, err
- }
-
- uncles[i] = &uncle
+ uncles := make([]*types.Header, 0)
+ if err := rlp.DecodeBytes(uncleBytes, &uncles); err != nil {
+ return nil, err
}
return uncles, nil
@@ -445,20 +402,14 @@ func (b *Backend) GetUnclesByBlockHash(tx *sqlx.Tx, hash common.Hash) ([]*types.
// GetUnclesByBlockHashAndNumber retrieves uncles for a provided block hash and number
func (b *Backend) GetUnclesByBlockHashAndNumber(tx *sqlx.Tx, hash common.Hash, number uint64) ([]*types.Header, error) {
- _, uncleBytes, err := b.IPLDRetriever.RetrieveUncles(tx, hash, number)
+ _, uncleBytes, err := b.Retriever.RetrieveUncles(tx, hash, number)
if err != nil {
return nil, err
}
- uncles := make([]*types.Header, len(uncleBytes))
- for i, bytes := range uncleBytes {
- var uncle types.Header
- err = rlp.DecodeBytes(bytes, &uncle)
- if err != nil {
- return nil, err
- }
-
- uncles[i] = &uncle
+ uncles := make([]*types.Header, 0)
+ if err := rlp.DecodeBytes(uncleBytes, &uncles); err != nil {
+ return nil, err
}
return uncles, nil
@@ -466,7 +417,7 @@ func (b *Backend) GetUnclesByBlockHashAndNumber(tx *sqlx.Tx, hash common.Hash, n
// GetTransactionsByBlockHash retrieves transactions for a provided block hash
func (b *Backend) GetTransactionsByBlockHash(tx *sqlx.Tx, hash common.Hash) (types.Transactions, error) {
- _, transactionBytes, err := b.IPLDRetriever.RetrieveTransactionsByBlockHash(tx, hash)
+ _, transactionBytes, err := b.Retriever.RetrieveTransactionsByBlockHash(tx, hash)
if err != nil {
return nil, err
}
@@ -486,7 +437,7 @@ func (b *Backend) GetTransactionsByBlockHash(tx *sqlx.Tx, hash common.Hash) (typ
// GetTransactionsByBlockHashAndNumber retrieves transactions for a provided block hash and number
func (b *Backend) GetTransactionsByBlockHashAndNumber(tx *sqlx.Tx, hash common.Hash, number uint64) (types.Transactions, error) {
- _, transactionBytes, err := b.IPLDRetriever.RetrieveTransactions(tx, hash, number)
+ _, transactionBytes, err := b.Retriever.RetrieveTransactions(tx, hash, number)
if err != nil {
return nil, err
}
@@ -506,7 +457,7 @@ func (b *Backend) GetTransactionsByBlockHashAndNumber(tx *sqlx.Tx, hash common.H
// GetReceiptsByBlockHash retrieves receipts for a provided block hash
func (b *Backend) GetReceiptsByBlockHash(tx *sqlx.Tx, hash common.Hash) (types.Receipts, error) {
- _, receiptBytes, txs, err := b.IPLDRetriever.RetrieveReceiptsByBlockHash(tx, hash)
+ _, receiptBytes, txs, err := b.Retriever.RetrieveReceiptsByBlockHash(tx, hash)
if err != nil {
return nil, err
}
@@ -524,7 +475,7 @@ func (b *Backend) GetReceiptsByBlockHash(tx *sqlx.Tx, hash common.Hash) (types.R
// GetReceiptsByBlockHashAndNumber retrieves receipts for a provided block hash and number
func (b *Backend) GetReceiptsByBlockHashAndNumber(tx *sqlx.Tx, hash common.Hash, number uint64) (types.Receipts, error) {
- _, receiptBytes, txs, err := b.IPLDRetriever.RetrieveReceipts(tx, hash, number)
+ _, receiptBytes, txs, err := b.Retriever.RetrieveReceipts(tx, hash, number)
if err != nil {
return nil, err
}
@@ -576,6 +527,7 @@ func (b *Backend) GetReceipts(ctx context.Context, hash common.Hash) (types.Rece
if err != nil {
return nil, err
}
+ // we must avoid overshadowing `err` so that we update the value of the variable inside the defer
defer func() {
if p := recover(); p != nil {
shared.Rollback(tx)
@@ -587,13 +539,15 @@ func (b *Backend) GetReceipts(ctx context.Context, hash common.Hash) (types.Rece
}
}()
- headerCID, err := b.Retriever.RetrieveHeaderCIDByHash(tx, hash)
+ var blockNumber uint64
+ blockNumber, err = b.Retriever.RetrieveBlockNumberByHash(tx, hash)
if err != nil {
return nil, err
}
- blockNumber, _ := strconv.ParseUint(string(headerCID.BlockNumber), 10, 64)
- return b.GetReceiptsByBlockHashAndNumber(tx, hash, blockNumber)
+ var receipts types.Receipts
+ receipts, err = b.GetReceiptsByBlockHashAndNumber(tx, hash, blockNumber)
+ return receipts, err
}
// GetLogs returns all the logs for the given block hash
@@ -603,6 +557,7 @@ func (b *Backend) GetLogs(ctx context.Context, hash common.Hash, number uint64)
if err != nil {
return nil, err
}
+ // we must avoid overshadowing `err` so that we update the value of the variable inside the defer
defer func() {
if p := recover(); p != nil {
shared.Rollback(tx)
@@ -614,14 +569,16 @@ func (b *Backend) GetLogs(ctx context.Context, hash common.Hash, number uint64)
}
}()
- _, receiptBytes, txs, err := b.IPLDRetriever.RetrieveReceipts(tx, hash, number)
+ var receiptBytes [][]byte
+ var txs []common.Hash
+ _, receiptBytes, txs, err = b.Retriever.RetrieveReceipts(tx, hash, number)
if err != nil {
return nil, err
}
logs := make([][]*types.Log, len(receiptBytes))
for i, rctBytes := range receiptBytes {
var rct types.Receipt
- if err := rlp.DecodeBytes(rctBytes, &rct); err != nil {
+ if err = rlp.DecodeBytes(rctBytes, &rct); err != nil {
return nil, err
}
@@ -631,13 +588,27 @@ func (b *Backend) GetLogs(ctx context.Context, hash common.Hash, number uint64)
logs[i] = rct.Logs
}
- return logs, nil
+ return logs, err
}
-// StateAndHeaderByNumberOrHash returns the statedb and header for the provided block number or hash
-func (b *Backend) StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*state.StateDB, *types.Header, error) {
- if blockNr, ok := blockNrOrHash.Number(); ok {
- return b.StateAndHeaderByNumber(ctx, blockNr)
+// IPLDStateDBAndHeaderByNumberOrHash returns the statedb and header for the provided block number or hash
+func (b *Backend) IPLDDirectStateDBAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*ipld_direct_state.StateDB, *types.Header, error) {
+ if number, ok := blockNrOrHash.Number(); ok {
+ // Pending state is only known by the miner
+ if number == rpc.PendingBlockNumber {
+ return nil, nil, errPendingBlockNumber
+ }
+ // Otherwise resolve the block number and return its state
+ header, err := b.HeaderByNumber(ctx, number)
+ if err != nil {
+ return nil, nil, err
+ }
+ if header == nil {
+ return nil, nil, errHeaderNotFound
+ }
+ // TODO use GetCanonicalHeaderAndHash to avoid rehashing
+ statedb, err := ipld_direct_state.New(header.Hash(), b.IpldDirectStateDatabase)
+ return statedb, header, err
}
if hash, ok := blockNrOrHash.Hash(); ok {
header, err := b.HeaderByHash(ctx, hash)
@@ -645,37 +616,66 @@ func (b *Backend) StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHas
return nil, nil, err
}
if header == nil {
- return nil, nil, errors.New("header for hash not found")
+ return nil, nil, errHeaderHashNotFound
}
- canonicalHash, err := b.GetCanonicalHash(header.Number.Uint64())
- if err != nil {
- return nil, nil, err
+ if blockNrOrHash.RequireCanonical {
+ canonicalHash, err := b.GetCanonicalHash(header.Number.Uint64())
+ if err != nil {
+ return nil, nil, err
+ }
+ if canonicalHash != hash {
+ return nil, nil, errors.New("hash is not currently canonical")
+ }
}
- if blockNrOrHash.RequireCanonical && canonicalHash != hash {
- return nil, nil, errors.New("hash is not currently canonical")
- }
- stateDb, err := state.New(header.Root, b.StateDatabase, nil)
- return stateDb, header, err
+ statedb, err := ipld_direct_state.New(header.Hash(), b.IpldDirectStateDatabase)
+ return statedb, header, err
}
return nil, nil, errors.New("invalid arguments; neither block nor hash specified")
}
-// StateAndHeaderByNumber returns the statedb and header for a provided block number
-func (b *Backend) StateAndHeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*state.StateDB, *types.Header, error) {
- // Pending state is only known by the miner
- if number == rpc.PendingBlockNumber {
- return nil, nil, errPendingBlockNumber
+// IPLDStateDBAndHeaderByNumberOrHash returns the statedb and header for the provided block number or hash
+func (b *Backend) IPLDTrieStateDBAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*ipld_trie_state.StateDB, *types.Header, error) {
+ var header *types.Header
+ if number, ok := blockNrOrHash.Number(); ok {
+ // Pending state is only known by the miner
+ if number == rpc.PendingBlockNumber {
+ return nil, nil, errPendingBlockNumber
+ }
+ // Otherwise resolve the block number and return its state
+ blockHash, err := b.GetCanonicalHash(uint64(number))
+ if err != nil {
+ return nil, nil, err
+ }
+ header, err = b.HeaderByHash(ctx, blockHash)
+ if err != nil {
+ return nil, nil, err
+ }
+ if header == nil {
+ return nil, nil, errHeaderNotFound
+ }
+ } else if hash, ok := blockNrOrHash.Hash(); ok {
+ var err error
+ header, err = b.HeaderByHash(ctx, hash)
+ if err != nil {
+ return nil, nil, err
+ }
+ if header == nil {
+ return nil, nil, errHeaderHashNotFound
+ }
+ if blockNrOrHash.RequireCanonical {
+ canonicalHash, err := b.GetCanonicalHash(header.Number.Uint64())
+ if err != nil {
+ return nil, nil, err
+ }
+ if canonicalHash != hash {
+ return nil, nil, errors.New("hash is not currently canonical")
+ }
+ }
+ } else {
+ return nil, nil, errors.New("invalid arguments; neither block nor hash specified")
}
- // Otherwise resolve the block number and return its state
- header, err := b.HeaderByNumber(ctx, number)
- if err != nil {
- return nil, nil, err
- }
- if header == nil {
- return nil, nil, errors.New("header not found")
- }
- stateDb, err := state.New(header.Root, b.StateDatabase, nil)
- return stateDb, header, err
+ statedb, err := ipld_trie_state.New(header.Root, b.IpldTrieStateDatabase, nil)
+ return statedb, header, err
}
// GetCanonicalHash gets the canonical hash for the provided number, if there is one
@@ -687,23 +687,34 @@ func (b *Backend) GetCanonicalHash(number uint64) (common.Hash, error) {
return common.HexToHash(hashResult), nil
}
-type rowResult struct {
- CID string
- Data []byte
-}
-
// GetCanonicalHeader gets the canonical header for the provided number, if there is one
func (b *Backend) GetCanonicalHeader(number uint64) (string, []byte, error) {
+ type rowResult struct {
+ CID string
+ Data []byte
+ }
headerResult := new(rowResult)
- return headerResult.CID, headerResult.Data, b.DB.QueryRowx(RetrieveCanonicalHeaderByNumber, number).StructScan(headerResult)
+ return headerResult.CID, headerResult.Data,
+ b.DB.QueryRowx(RetrieveCanonicalHeaderByNumber, number).StructScan(headerResult)
+}
+
+// GetCanonicalHeader gets the canonical hash and header for the provided number, if they exist
+func (b *Backend) GetCanonicalHeaderAndHash(number uint64) (string, []byte, error) {
+ type rowResult struct {
+ Data []byte
+ BlockHash string
+ }
+ headerResult := new(rowResult)
+ return headerResult.BlockHash, headerResult.Data,
+ b.DB.QueryRowx(RetrieveCanonicalHeaderAndHashByNumber, number).StructScan(headerResult)
}
// GetEVM constructs and returns a vm.EVM
-func (b *Backend) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header) (*vm.EVM, func() error, error) {
+func (b *Backend) GetEVM(ctx context.Context, msg *core.Message, state vm.StateDB, header *types.Header) (*vm.EVM, func() error, error) {
vmError := func() error { return nil }
txContext := core.NewEVMTxContext(msg)
- context := core.NewEVMBlockContext(header, b, nil)
- return vm.NewEVM(context, txContext, state, b.Config.ChainConfig, b.Config.VMConfig), vmError, nil
+ evmCtx := core.NewEVMBlockContext(header, b, nil)
+ return vm.NewEVM(evmCtx, txContext, state, b.Config.ChainConfig, b.Config.VMConfig), vmError, nil
}
// GetAccountByNumberOrHash returns the account object for the provided address at the block corresponding to the provided number or hash
@@ -755,13 +766,21 @@ func (b *Backend) GetAccountByHash(ctx context.Context, address common.Address,
return nil, err
}
- _, accountRlp, err := b.IPLDRetriever.RetrieveAccountByAddressAndBlockHash(address, hash)
+ acctRecord, err := b.Retriever.RetrieveAccountByAddressAndBlockHash(address, hash)
if err != nil {
return nil, err
}
- acct := new(types.StateAccount)
- return acct, rlp.DecodeBytes(accountRlp, acct)
+ balance, ok := new(big.Int).SetString(acctRecord.Balance, 10)
+ if !ok {
+ return nil, fmt.Errorf("failed to parse balance %s", acctRecord.Balance)
+ }
+ return &types.StateAccount{
+ Nonce: acctRecord.Nonce,
+ Balance: balance,
+ Root: common.HexToHash(acctRecord.Root),
+ CodeHash: acctRecord.CodeHash,
+ }, nil
}
// GetCodeByNumberOrHash returns the byte code for the contract deployed at the provided address at the block with the provided hash or block number
@@ -799,20 +818,20 @@ func (b *Backend) GetCodeByNumber(ctx context.Context, address common.Address, b
return nil, err
}
if hash == (common.Hash{}) {
- return nil, fmt.Errorf("no canoncial block hash found for provided height (%d)", number)
+ return nil, fmt.Errorf("no canonical block hash found for provided height (%d)", number)
}
return b.GetCodeByHash(ctx, address, hash)
}
// GetCodeByHash returns the byte code for the contract deployed at the provided address at the block with the provided hash
func (b *Backend) GetCodeByHash(ctx context.Context, address common.Address, hash common.Hash) ([]byte, error) {
- codeHash := make([]byte, 0)
leafKey := crypto.Keccak256Hash(address.Bytes())
// Begin tx
tx, err := b.DB.Beginx()
if err != nil {
return nil, err
}
+ // we must avoid overshadowing `err` so that we update the value of the variable inside the defer
defer func() {
if p := recover(); p != nil {
shared.Rollback(tx)
@@ -823,17 +842,14 @@ func (b *Backend) GetCodeByHash(ctx context.Context, address common.Address, has
err = tx.Commit()
}
}()
+ var codeHash string
err = tx.Get(&codeHash, RetrieveCodeHashByLeafKeyAndBlockHash, leafKey.Hex(), hash.Hex())
if err != nil {
return nil, err
}
- var mhKey string
- mhKey, err = ethServerShared.MultihashKeyFromKeccak256(common.BytesToHash(codeHash))
- if err != nil {
- return nil, err
- }
- code := make([]byte, 0)
- err = tx.Get(&code, RetrieveCodeByMhKey, mhKey)
+ cid := ipld.Keccak256ToCid(ipld.RawBinary, common.HexToHash(codeHash).Bytes())
+ var code []byte
+ err = tx.Get(&code, RetrieveCodeByKey, cid.String())
return code, err
}
@@ -886,8 +902,7 @@ func (b *Backend) GetStorageByHash(ctx context.Context, address common.Address,
return nil, err
}
- _, _, storageRlp, err := b.IPLDRetriever.RetrieveStorageAtByAddressAndStorageSlotAndBlockHash(address, key, hash)
- return storageRlp, err
+ return b.Retriever.RetrieveStorageAtByAddressAndStorageSlotAndBlockHash(address, key, hash)
}
func (b *Backend) GetSlice(path string, depth int, root common.Hash, storage bool) (*GetSliceResponse, error) {
@@ -898,14 +913,23 @@ func (b *Backend) GetSlice(path string, depth int, root common.Hash, storage boo
metaData := metaDataFields{}
startTime := makeTimestamp()
- t, _ := b.StateDatabase.OpenTrie(root)
+ var t ipld_trie_state.Trie
+ var err error
+ if storage {
+ t, err = b.IpldTrieStateDatabase.OpenStorageTrie(common.Hash{}, common.Hash{}, root)
+ } else {
+ t, err = b.IpldTrieStateDatabase.OpenTrie(root)
+ }
+ if err != nil {
+ return nil, err
+ }
metaData.trieLoadingTime = makeTimestamp() - startTime
// Convert the head hex path to a decoded byte path
headPath := common.FromHex(path)
// Get Stem nodes
- err := b.getSliceStem(headPath, t, response, &metaData, storage)
+ err = b.getSliceStem(headPath, t, response, &metaData, storage)
if err != nil {
return nil, err
}
@@ -929,16 +953,16 @@ func (b *Backend) GetSlice(path string, depth int, root common.Hash, storage boo
return response, nil
}
-func (b *Backend) getSliceStem(headPath []byte, t state.Trie, response *GetSliceResponse, metaData *metaDataFields, storage bool) error {
+func (b *Backend) getSliceStem(headPath []byte, t ipld_trie_state.Trie, response *GetSliceResponse, metaData *metaDataFields, storage bool) error {
leavesFetchTime := int64(0)
totalStemStartTime := makeTimestamp()
for i := 0; i < len(headPath); i++ {
// Create path for each node along the stem
- nodePath := make([]byte, len(headPath[:i]))
- copy(nodePath, headPath[:i])
+ // nodePath := make([]byte, len(headPath[:i]))
+ nodePath := headPath[:i]
- rawNode, _, err := t.(*trie.StateTrie).TryGetNode(trie.HexToCompact(nodePath))
+ rawNode, _, err := t.TryGetNode(trie.HexToCompact(nodePath))
if err != nil {
return err
}
@@ -948,12 +972,12 @@ func (b *Backend) getSliceStem(headPath []byte, t state.Trie, response *GetSlice
continue
}
- node, nodeElements, err := ResolveNode(nodePath, rawNode, b.StateDatabase.TrieDB())
+ node, nodeElements, err := ResolveNode(nodePath, rawNode, b.IpldTrieStateDatabase.TrieDB())
if err != nil {
return err
}
- leafFetchTime, err := fillSliceNodeData(b.EthDB, response.TrieNodes.Stem, response.Leaves, node, nodeElements, storage)
+ leafFetchTime, err := fillSliceNodeData(b.IpldTrieStateDatabase, response.TrieNodes.Stem, response.Leaves, node, nodeElements, storage)
if err != nil {
return err
}
@@ -963,7 +987,7 @@ func (b *Backend) getSliceStem(headPath []byte, t state.Trie, response *GetSlice
if depthReached > metaData.maxDepth {
metaData.maxDepth = depthReached
}
- if node.NodeType == sdtypes.Leaf {
+ if node.NodeType == Leaf {
metaData.leafCount++
}
leavesFetchTime += leafFetchTime
@@ -977,10 +1001,10 @@ func (b *Backend) getSliceStem(headPath []byte, t state.Trie, response *GetSlice
return nil
}
-func (b *Backend) getSliceHead(headPath []byte, t state.Trie, response *GetSliceResponse, metaData *metaDataFields, storage bool) error {
+func (b *Backend) getSliceHead(headPath []byte, t ipld_trie_state.Trie, response *GetSliceResponse, metaData *metaDataFields, storage bool) error {
totalHeadStartTime := makeTimestamp()
- rawNode, _, err := t.(*trie.StateTrie).TryGetNode(trie.HexToCompact(headPath))
+ rawNode, _, err := t.TryGetNode(trie.HexToCompact(headPath))
if err != nil {
return err
}
@@ -990,12 +1014,12 @@ func (b *Backend) getSliceHead(headPath []byte, t state.Trie, response *GetSlice
return nil
}
- node, nodeElements, err := ResolveNode(headPath, rawNode, b.StateDatabase.TrieDB())
+ node, nodeElements, err := ResolveNode(headPath, rawNode, b.IpldTrieStateDatabase.TrieDB())
if err != nil {
return err
}
- leafFetchTime, err := fillSliceNodeData(b.EthDB, response.TrieNodes.Head, response.Leaves, node, nodeElements, storage)
+ leafFetchTime, err := fillSliceNodeData(b.IpldTrieStateDatabase, response.TrieNodes.Head, response.Leaves, node, nodeElements, storage)
if err != nil {
return err
}
@@ -1005,7 +1029,7 @@ func (b *Backend) getSliceHead(headPath []byte, t state.Trie, response *GetSlice
if depthReached > metaData.maxDepth {
metaData.maxDepth = depthReached
}
- if node.NodeType == sdtypes.Leaf {
+ if node.NodeType == Leaf {
metaData.leafCount++
}
@@ -1017,7 +1041,7 @@ func (b *Backend) getSliceHead(headPath []byte, t state.Trie, response *GetSlice
return nil
}
-func (b *Backend) getSliceTrie(headPath []byte, t state.Trie, response *GetSliceResponse, metaData *metaDataFields, depth int, storage bool) error {
+func (b *Backend) getSliceTrie(headPath []byte, t ipld_trie_state.Trie, response *GetSliceResponse, metaData *metaDataFields, depth int, storage bool) error {
it, timeTaken := getIteratorAtPath(t, headPath)
metaData.trieLoadingTime += timeTaken
@@ -1047,12 +1071,16 @@ func (b *Backend) getSliceTrie(headPath []byte, t state.Trie, response *GetSlice
continue
}
- node, nodeElements, err := sdtrie.ResolveNode(it, b.StateDatabase.TrieDB())
+ blob, err := it.NodeBlob(), it.Error()
+ if err != nil {
+ return err
+ }
+ node, nodeElements, err := ResolveNode(it.Path(), blob, b.IpldTrieStateDatabase.TrieDB())
if err != nil {
return err
}
- leafFetchTime, err := fillSliceNodeData(b.EthDB, response.TrieNodes.Slice, response.Leaves, node, nodeElements, storage)
+ leafFetchTime, err := fillSliceNodeData(b.IpldTrieStateDatabase, response.TrieNodes.Slice, response.Leaves, node, nodeElements, storage)
if err != nil {
return err
}
@@ -1062,7 +1090,7 @@ func (b *Backend) getSliceTrie(headPath []byte, t state.Trie, response *GetSlice
if depthReached > metaData.maxDepth {
metaData.maxDepth = depthReached
}
- if node.NodeType == sdtypes.Leaf {
+ if node.NodeType == Leaf {
metaData.leafCount++
}
leavesFetchTime += leafFetchTime
@@ -1129,6 +1157,15 @@ func (b *Backend) ServiceFilter(ctx context.Context, session *bloombits.MatcherS
panic("implement me")
}
+// Close closes the backing DB and EthDB instances
+func (b *Backend) Close() error {
+ err := b.EthDB.Close()
+ if err != nil {
+ log.Errorf("error closing EthDB: %s", err)
+ }
+ return b.DB.Close()
+}
+
func logStateDBStatsOnTimer(ethDB *ipfsethdb.Database, gcc *shared.GroupCacheConfig) {
// No stats logging if interval isn't a positive integer.
if gcc.StateDB.LogStatsIntervalInSecs <= 0 {
@@ -1139,7 +1176,7 @@ func logStateDBStatsOnTimer(ethDB *ipfsethdb.Database, gcc *shared.GroupCacheCon
go func() {
for range ticker.C {
- log.Infof("%s groupcache stats: %+v", StateDBGroupCacheName, ethDB.GetCacheStats())
+ log.Debugf("%s groupcache stats: %+v", StateDBGroupCacheName, ethDB.GetCacheStats())
}
}()
}
diff --git a/pkg/eth/backend_utils.go b/pkg/eth/backend_utils.go
index 68655604..ccd715e2 100644
--- a/pkg/eth/backend_utils.go
+++ b/pkg/eth/backend_utils.go
@@ -23,21 +23,18 @@ import (
"fmt"
"math/big"
- nodeiter "github.com/cerc-io/go-eth-state-node-iterator"
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/common/math"
- "github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc"
- sdtrie "github.com/ethereum/go-ethereum/statediff/trie_helpers"
- sdtypes "github.com/ethereum/go-ethereum/statediff/types"
"github.com/ethereum/go-ethereum/trie"
+ nodeiter "github.com/ethereum/go-ethereum/trie/concurrent_iterator"
+
+ "github.com/cerc-io/ipld-eth-statedb/trie_by_cid/state"
)
var nullHashBytes = common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000000")
@@ -67,7 +64,7 @@ func RPCMarshalHeader(head *types.Header) map[string]interface{} {
}
if head.BaseFee != nil {
- headerMap["baseFee"] = head.BaseFee
+ headerMap["baseFeePerGas"] = (*hexutil.Big)(head.BaseFee)
}
return headerMap
}
@@ -331,10 +328,10 @@ func getIteratorAtPath(t state.Trie, startKey []byte) (trie.NodeIterator, int64)
}
func fillSliceNodeData(
- ethDB ethdb.KeyValueReader,
+ sdb state.Database,
nodesMap map[string]string,
leavesMap map[string]GetSliceResponseAccount,
- node sdtypes.StateNode,
+ node StateNode,
nodeElements []interface{},
storage bool,
) (int64, error) {
@@ -344,8 +341,8 @@ func fillSliceNodeData(
// Extract account data if it's a Leaf node
leafStartTime := makeTimestamp()
- if node.NodeType == sdtypes.Leaf && !storage {
- stateLeafKey, storageRoot, code, err := extractContractAccountInfo(ethDB, node, nodeElements)
+ if node.NodeType == Leaf && !storage {
+ stateLeafKey, storageRoot, code, err := extractContractAccountInfo(sdb, node, nodeElements)
if err != nil {
return 0, fmt.Errorf("GetSlice account lookup error: %s", err.Error())
}
@@ -362,7 +359,7 @@ func fillSliceNodeData(
return makeTimestamp() - leafStartTime, nil
}
-func extractContractAccountInfo(ethDB ethdb.KeyValueReader, node sdtypes.StateNode, nodeElements []interface{}) (string, string, []byte, error) {
+func extractContractAccountInfo(sdb state.Database, node StateNode, nodeElements []interface{}) (string, string, []byte, error) {
var account types.StateAccount
if err := rlp.DecodeBytes(nodeElements[1].([]byte), &account); err != nil {
return "", "", nil, fmt.Errorf("error decoding account for leaf node at path %x nerror: %v", node.Path, err)
@@ -383,27 +380,32 @@ func extractContractAccountInfo(ethDB ethdb.KeyValueReader, node sdtypes.StateNo
// Extract codeHash and get code
codeHash := common.BytesToHash(account.CodeHash)
- codeBytes := rawdb.ReadCode(ethDB, codeHash)
+ codeBytes, err := sdb.ContractCode(codeHash)
+ if err != nil {
+ return "", "", nil, err
+ }
return stateLeafKeyString, storageRootString, codeBytes, nil
}
-func ResolveNode(path []byte, node []byte, trieDB *trie.Database) (sdtypes.StateNode, []interface{}, error) {
- nodePath := make([]byte, len(path))
- copy(nodePath, path)
-
- var nodeElements []interface{}
- if err := rlp.DecodeBytes(node, &nodeElements); err != nil {
- return sdtypes.StateNode{}, nil, err
+// IsLeaf checks if the node we are at is a leaf
+func IsLeaf(elements []interface{}) (bool, error) {
+ if len(elements) > 2 {
+ return false, nil
}
-
- ty, err := sdtrie.CheckKeyType(nodeElements)
- if err != nil {
- return sdtypes.StateNode{}, nil, err
+ if len(elements) < 2 {
+ return false, fmt.Errorf("node cannot be less than two elements in length")
+ }
+ switch elements[0].([]byte)[0] / 16 {
+ case '\x00':
+ return false, nil
+ case '\x01':
+ return false, nil
+ case '\x02':
+ return true, nil
+ case '\x03':
+ return true, nil
+ default:
+ return false, fmt.Errorf("unknown hex prefix")
}
- return sdtypes.StateNode{
- NodeType: ty,
- Path: nodePath,
- NodeValue: node,
- }, nodeElements, nil
}
diff --git a/pkg/eth/cid_retriever.go b/pkg/eth/cid_retriever.go
deleted file mode 100644
index 59198697..00000000
--- a/pkg/eth/cid_retriever.go
+++ /dev/null
@@ -1,771 +0,0 @@
-// VulcanizeDB
-// Copyright © 2019 Vulcanize
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-package eth
-
-import (
- "fmt"
- "math/big"
- "strconv"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/statediff/indexer/models"
- "github.com/jmoiron/sqlx"
- "github.com/lib/pq"
- "gorm.io/driver/postgres"
- "gorm.io/gorm"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
-)
-
-// Retriever interface for substituting mocks in tests
-type Retriever interface {
- RetrieveFirstBlockNumber() (int64, error)
- RetrieveLastBlockNumber() (int64, error)
- Retrieve(filter SubscriptionSettings, blockNumber int64) ([]CIDWrapper, bool, error)
-}
-
-// CIDRetriever satisfies the CIDRetriever interface for ethereum
-type CIDRetriever struct {
- db *sqlx.DB
- gormDB *gorm.DB
-}
-
-type IPLDModelRecord struct {
- models.IPLDModel
-}
-
-// TableName overrides the table name used by IPLD
-func (IPLDModelRecord) TableName() string {
- return "public.blocks"
-}
-
-type HeaderCIDRecord struct {
- CID string `gorm:"column:cid"`
- BlockHash string `gorm:"primaryKey"`
- BlockNumber string `gorm:"primaryKey"`
- ParentHash string
- Timestamp uint64
- StateRoot string
- TotalDifficulty string `gorm:"column:td"`
- TxRoot string
- RctRoot string `gorm:"column:receipt_root"`
- UncleRoot string
- Bloom []byte
- MhKey string
-
- // gorm doesn't check if foreign key exists in database.
- // It is required to eager load relations using preload.
- TransactionCIDs []TransactionCIDRecord `gorm:"foreignKey:HeaderID,BlockNumber;references:BlockHash,BlockNumber"`
- IPLD IPLDModelRecord `gorm:"foreignKey:MhKey,BlockNumber;references:Key,BlockNumber"`
-}
-
-// TableName overrides the table name used by HeaderCIDRecord
-func (HeaderCIDRecord) TableName() string {
- return "eth.header_cids"
-}
-
-type TransactionCIDRecord struct {
- CID string `gorm:"column:cid"`
- TxHash string `gorm:"primaryKey"`
- BlockNumber string `gorm:"primaryKey"`
- HeaderID string `gorm:"column:header_id"`
- Index int64
- Src string
- Dst string
- MhKey string
- IPLD IPLDModelRecord `gorm:"foreignKey:MhKey,BlockNumber;references:Key,BlockNumber"`
-}
-
-// TableName overrides the table name used by TransactionCIDRecord
-func (TransactionCIDRecord) TableName() string {
- return "eth.transaction_cids"
-}
-
-// NewCIDRetriever returns a pointer to a new CIDRetriever which supports the CIDRetriever interface
-func NewCIDRetriever(db *sqlx.DB) *CIDRetriever {
- gormDB, err := gorm.Open(postgres.New(postgres.Config{
- Conn: db,
- }), &gorm.Config{})
-
- if err != nil {
- log.Error(err)
- return nil
- }
-
- return &CIDRetriever{
- db: db,
- gormDB: gormDB,
- }
-}
-
-// RetrieveFirstBlockNumber is used to retrieve the first block number in the db
-func (ecr *CIDRetriever) RetrieveFirstBlockNumber() (int64, error) {
- var blockNumber int64
- err := ecr.db.Get(&blockNumber, "SELECT block_number FROM eth.header_cids ORDER BY block_number ASC LIMIT 1")
- return blockNumber, err
-}
-
-// RetrieveLastBlockNumber is used to retrieve the latest block number in the db
-func (ecr *CIDRetriever) RetrieveLastBlockNumber() (int64, error) {
- var blockNumber int64
- err := ecr.db.Get(&blockNumber, "SELECT block_number FROM eth.header_cids ORDER BY block_number DESC LIMIT 1")
- return blockNumber, err
-}
-
-// Retrieve is used to retrieve all of the CIDs which conform to the passed StreamFilters
-func (ecr *CIDRetriever) Retrieve(filter SubscriptionSettings, blockNumber int64) ([]CIDWrapper, bool, error) {
- log.Debug("retrieving cids")
-
- // Begin new db tx
- tx, err := ecr.db.Beginx()
- if err != nil {
- return nil, true, err
- }
- defer func() {
- if p := recover(); p != nil {
- shared.Rollback(tx)
- panic(p)
- } else if err != nil {
- shared.Rollback(tx)
- } else {
- err = tx.Commit()
- }
- }()
-
- // Retrieve cached header CIDs at this block height
- var headers []models.HeaderModel
- headers, err = ecr.RetrieveHeaderCIDs(tx, blockNumber)
- if err != nil {
- log.Error("header cid retrieval error", err)
- return nil, true, err
- }
- cws := make([]CIDWrapper, len(headers))
- empty := true
- for i, header := range headers {
- cw := new(CIDWrapper)
- cw.BlockNumber = big.NewInt(blockNumber)
- if !filter.HeaderFilter.Off {
- cw.Header = header
- empty = false
- if filter.HeaderFilter.Uncles {
- // Retrieve uncle cids for this header id
- var uncleCIDs []models.UncleModel
- uncleCIDs, err = ecr.RetrieveUncleCIDsByHeaderID(tx, header.BlockHash)
- if err != nil {
- log.Error("uncle cid retrieval error")
- return nil, true, err
- }
- cw.Uncles = uncleCIDs
- }
- }
- // Retrieve cached trx CIDs
- if !filter.TxFilter.Off {
- cw.Transactions, err = ecr.RetrieveTxCIDs(tx, filter.TxFilter, header.BlockHash)
- if err != nil {
- log.Error("transaction cid retrieval error")
- return nil, true, err
- }
- if len(cw.Transactions) > 0 {
- empty = false
- }
- }
- trxHashes := make([]string, len(cw.Transactions))
- for j, t := range cw.Transactions {
- trxHashes[j] = t.TxHash
- }
- // Retrieve cached receipt CIDs
- if !filter.ReceiptFilter.Off {
- cw.Receipts, err = ecr.RetrieveRctCIDs(tx, filter.ReceiptFilter, 0, header.BlockHash, trxHashes)
- if err != nil {
- log.Error("receipt cid retrieval error")
- return nil, true, err
- }
- if len(cw.Receipts) > 0 {
- empty = false
- }
- }
- // Retrieve cached state CIDs
- if !filter.StateFilter.Off {
- cw.StateNodes, err = ecr.RetrieveStateCIDs(tx, filter.StateFilter, header.BlockHash)
- if err != nil {
- log.Error("state cid retrieval error")
- return nil, true, err
- }
- if len(cw.StateNodes) > 0 {
- empty = false
- }
- }
- // Retrieve cached storage CIDs
- if !filter.StorageFilter.Off {
- cw.StorageNodes, err = ecr.RetrieveStorageCIDs(tx, filter.StorageFilter, header.BlockHash)
- if err != nil {
- log.Error("storage cid retrieval error")
- return nil, true, err
- }
- if len(cw.StorageNodes) > 0 {
- empty = false
- }
- }
- cws[i] = *cw
- }
-
- return cws, empty, err
-}
-
-// RetrieveHeaderCIDs retrieves and returns all of the header cids at the provided blockheight
-func (ecr *CIDRetriever) RetrieveHeaderCIDs(tx *sqlx.Tx, blockNumber int64) ([]models.HeaderModel, error) {
- log.Debug("retrieving header cids for block ", blockNumber)
- headers := make([]models.HeaderModel, 0)
- pgStr := `SELECT CAST(block_number as Text), block_hash, parent_hash, cid, mh_key, CAST(td as Text), node_id,
- CAST(reward as Text), state_root, uncle_root,tx_root, receipt_root, bloom, timestamp, times_validated, coinbase
- FROM eth.header_cids
- WHERE block_number = $1`
- return headers, tx.Select(&headers, pgStr, blockNumber)
-}
-
-// RetrieveUncleCIDsByHeaderID retrieves and returns all of the uncle cids for the provided header
-func (ecr *CIDRetriever) RetrieveUncleCIDsByHeaderID(tx *sqlx.Tx, headerID string) ([]models.UncleModel, error) {
- log.Debug("retrieving uncle cids for block id ", headerID)
- headers := make([]models.UncleModel, 0)
- pgStr := `SELECT CAST(block_number as Text), header_id, block_hash, parent_hash, cid, mh_key, CAST(reward as text)
- FROM eth.uncle_cids
- WHERE header_id = $1`
- return headers, tx.Select(&headers, pgStr, headerID)
-}
-
-// RetrieveTxCIDs retrieves and returns all of the trx cids at the provided blockheight that conform to the provided filter parameters
-// also returns the ids for the returned transaction cids
-func (ecr *CIDRetriever) RetrieveTxCIDs(tx *sqlx.Tx, txFilter TxFilter, headerID string) ([]models.TxModel, error) {
- log.Debug("retrieving transaction cids for header id ", headerID)
- args := make([]interface{}, 0, 3)
- results := make([]models.TxModel, 0)
- id := 1
- pgStr := fmt.Sprintf(`SELECT CAST(transaction_cids.block_number as Text), transaction_cids.tx_hash,
- transaction_cids.header_id, transaction_cids.cid, transaction_cids.mh_key, transaction_cids.dst,
- transaction_cids.src, transaction_cids.index, transaction_cids.tx_data, transaction_cids.tx_type
- FROM eth.transaction_cids
- INNER JOIN eth.header_cids ON (
- transaction_cids.header_id = header_cids.block_hash
- AND transaction_cids.block_number = header_cids.block_number
- )
- WHERE header_cids.block_hash = $%d`, id)
- args = append(args, headerID)
- id++
- if len(txFilter.Dst) > 0 {
- pgStr += fmt.Sprintf(` AND transaction_cids.dst = ANY($%d::VARCHAR(66)[])`, id)
- args = append(args, pq.Array(txFilter.Dst))
- id++
- }
- if len(txFilter.Src) > 0 {
- pgStr += fmt.Sprintf(` AND transaction_cids.src = ANY($%d::VARCHAR(66)[])`, id)
- args = append(args, pq.Array(txFilter.Src))
- }
- pgStr += ` ORDER BY transaction_cids.index`
- return results, tx.Select(&results, pgStr, args...)
-}
-
-func topicFilterCondition(id *int, topics [][]string, args []interface{}, pgStr string, first bool) (string, []interface{}) {
- for i, topicSet := range topics {
- if len(topicSet) == 0 {
- continue
- }
-
- if !first {
- pgStr += " AND"
- } else {
- first = false
- }
- pgStr += fmt.Sprintf(` eth.log_cids.topic%d = ANY ($%d)`, i, *id)
- args = append(args, pq.Array(topicSet))
- *id++
- }
- return pgStr, args
-}
-
-func logFilterCondition(id *int, pgStr string, args []interface{}, rctFilter ReceiptFilter) (string, []interface{}) {
- if len(rctFilter.LogAddresses) > 0 {
- pgStr += fmt.Sprintf(` AND eth.log_cids.address = ANY ($%d)`, *id)
- args = append(args, pq.Array(rctFilter.LogAddresses))
- *id++
- }
-
- // Filter on topics if there are any
- if hasTopics(rctFilter.Topics) {
- pgStr, args = topicFilterCondition(id, rctFilter.Topics, args, pgStr, false)
- }
-
- return pgStr, args
-}
-
-func receiptFilterConditions(id *int, pgStr string, args []interface{}, rctFilter ReceiptFilter, txHashes []string) (string, []interface{}) {
- rctCond := " AND (receipt_cids.tx_id = ANY ( "
- logQuery := "SELECT rct_id FROM eth.log_cids WHERE"
- if len(rctFilter.LogAddresses) > 0 {
- // Filter on log contract addresses if there are any
- pgStr += fmt.Sprintf(`%s %s eth.log_cids.address = ANY ($%d)`, rctCond, logQuery, *id)
- args = append(args, pq.Array(rctFilter.LogAddresses))
- *id++
-
- // Filter on topics if there are any
- if hasTopics(rctFilter.Topics) {
- pgStr, args = topicFilterCondition(id, rctFilter.Topics, args, pgStr, false)
- }
-
- pgStr += ")"
-
- // Filter on txHashes if there are any, and we are matching txs
- if rctFilter.MatchTxs && len(txHashes) > 0 {
- pgStr += fmt.Sprintf(` OR receipt_cids.tx_id = ANY($%d)`, *id)
- args = append(args, pq.Array(txHashes))
- }
- pgStr += ")"
- } else { // If there are no contract addresses to filter on
- // Filter on topics if there are any
- if hasTopics(rctFilter.Topics) {
- pgStr += rctCond + logQuery
- pgStr, args = topicFilterCondition(id, rctFilter.Topics, args, pgStr, true)
- pgStr += ")"
- // Filter on txHashes if there are any, and we are matching txs
- if rctFilter.MatchTxs && len(txHashes) > 0 {
- pgStr += fmt.Sprintf(` OR receipt_cids.tx_id = ANY($%d)`, *id)
- args = append(args, pq.Array(txHashes))
- }
- pgStr += ")"
- } else if rctFilter.MatchTxs && len(txHashes) > 0 {
- // If there are no contract addresses or topics to filter on,
- // Filter on txHashes if there are any, and we are matching txs
- pgStr += fmt.Sprintf(` AND receipt_cids.tx_id = ANY($%d)`, *id)
- args = append(args, pq.Array(txHashes))
- }
- }
-
- return pgStr, args
-}
-
-// RetrieveFilteredGQLLogs retrieves and returns all the log CIDs provided blockHash that conform to the provided
-// filter parameters.
-func (ecr *CIDRetriever) RetrieveFilteredGQLLogs(tx *sqlx.Tx, rctFilter ReceiptFilter, blockHash *common.Hash, blockNumber *big.Int) ([]LogResult, error) {
- log.Debug("retrieving log cids for receipt ids with block hash", blockHash.String())
- args := make([]interface{}, 0, 4)
- id := 1
- pgStr := `SELECT CAST(eth.log_cids.block_number as Text), eth.log_cids.header_id as block_hash,
- eth.log_cids.leaf_cid, eth.log_cids.index, eth.log_cids.rct_id, eth.log_cids.address,
- eth.log_cids.topic0, eth.log_cids.topic1, eth.log_cids.topic2, eth.log_cids.topic3, eth.log_cids.log_data,
- data, eth.receipt_cids.leaf_cid as cid, eth.receipt_cids.post_status, eth.receipt_cids.tx_id AS tx_hash
- FROM eth.log_cids, eth.receipt_cids, public.blocks
- WHERE eth.log_cids.rct_id = receipt_cids.tx_id
- AND eth.log_cids.header_id = receipt_cids.header_id
- AND eth.log_cids.block_number = receipt_cids.block_number
- AND log_cids.leaf_mh_key = blocks.key
- AND log_cids.block_number = blocks.block_number
- AND receipt_cids.header_id = $1`
-
- args = append(args, blockHash.String())
- id++
-
- if blockNumber != nil {
- pgStr += ` AND receipt_cids.block_number = $2`
- id++
- args = append(args, blockNumber.Int64())
- }
-
- pgStr, args = logFilterCondition(&id, pgStr, args, rctFilter)
- pgStr += ` ORDER BY log_cids.index`
-
- logCIDs := make([]LogResult, 0)
- err := tx.Select(&logCIDs, pgStr, args...)
- if err != nil {
- return nil, err
- }
-
- return logCIDs, nil
-}
-
-// RetrieveFilteredLog retrieves and returns all the log CIDs provided blockHeight or blockHash that conform to the provided
-// filter parameters.
-func (ecr *CIDRetriever) RetrieveFilteredLog(tx *sqlx.Tx, rctFilter ReceiptFilter, blockNumber int64, blockHash *common.Hash) ([]LogResult, error) {
- log.Debug("retrieving log cids for receipt ids")
- args := make([]interface{}, 0, 4)
- pgStr := `SELECT CAST(eth.log_cids.block_number as Text), eth.log_cids.leaf_cid, eth.log_cids.index, eth.log_cids.rct_id,
- eth.log_cids.address, eth.log_cids.topic0, eth.log_cids.topic1, eth.log_cids.topic2, eth.log_cids.topic3,
- eth.log_cids.log_data, eth.transaction_cids.tx_hash, eth.transaction_cids.index as txn_index,
- eth.receipt_cids.leaf_cid as cid, eth.receipt_cids.post_status, header_cids.block_hash
- FROM eth.log_cids, eth.receipt_cids, eth.transaction_cids, eth.header_cids
- WHERE eth.log_cids.rct_id = receipt_cids.tx_id
- AND eth.log_cids.header_id = eth.receipt_cids.header_id
- AND eth.log_cids.block_number = eth.receipt_cids.block_number
- AND receipt_cids.tx_id = transaction_cids.tx_hash
- AND receipt_cids.header_id = transaction_cids.header_id
- AND receipt_cids.block_number = transaction_cids.block_number
- AND transaction_cids.header_id = header_cids.block_hash
- AND transaction_cids.block_number = header_cids.block_number`
- id := 1
- if blockNumber > 0 {
- pgStr += fmt.Sprintf(` AND header_cids.block_number = $%d`, id)
- args = append(args, blockNumber)
- id++
- }
- if blockHash != nil {
- pgStr += fmt.Sprintf(` AND header_cids.block_hash = $%d`, id)
- args = append(args, blockHash.String())
- id++
- }
-
- pgStr, args = logFilterCondition(&id, pgStr, args, rctFilter)
- pgStr += ` ORDER BY log_cids.index`
-
- logCIDs := make([]LogResult, 0)
- err := tx.Select(&logCIDs, pgStr, args...)
- if err != nil {
- return nil, err
- }
-
- return logCIDs, nil
-}
-
-// RetrieveRctCIDs retrieves and returns all of the rct cids at the provided blockheight or block hash that conform to the provided
-// filter parameters and correspond to the provided tx ids
-func (ecr *CIDRetriever) RetrieveRctCIDs(tx *sqlx.Tx, rctFilter ReceiptFilter, blockNumber int64, blockHash string, txHashes []string) ([]models.ReceiptModel, error) {
- log.Debug("retrieving receipt cids for block ", blockNumber)
- args := make([]interface{}, 0, 5)
- pgStr := `SELECT CAST(receipt_cids.block_number as Text), receipt_cids.header_id, receipt_cids.tx_id,
- receipt_cids.leaf_cid, receipt_cids.leaf_mh_key, receipt_cids.contract, receipt_cids.contract_hash
- FROM eth.receipt_cids, eth.transaction_cids, eth.header_cids
- WHERE receipt_cids.tx_id = transaction_cids.tx_hash
- AND receipt_cids.header_id = transaction_cids.header_id
- AND receipt_cids.block_number = transaction_cids.block_number
- AND transaction_cids.header_id = header_cids.block_hash
- AND transaction_cids.block_number = header_cids.block_number`
- id := 1
- if blockNumber > 0 {
- pgStr += fmt.Sprintf(` AND header_cids.block_number = $%d`, id)
- args = append(args, blockNumber)
- id++
- }
- if blockHash != "" {
- pgStr += fmt.Sprintf(` AND header_cids.block_hash = $%d`, id)
- args = append(args, blockHash)
- id++
- }
-
- pgStr, args = receiptFilterConditions(&id, pgStr, args, rctFilter, txHashes)
-
- pgStr += ` ORDER BY transaction_cids.index`
- receiptCIDs := make([]models.ReceiptModel, 0)
- return receiptCIDs, tx.Select(&receiptCIDs, pgStr, args...)
-}
-
-func hasTopics(topics [][]string) bool {
- for _, topicSet := range topics {
- if len(topicSet) > 0 {
- return true
- }
- }
- return false
-}
-
-// RetrieveStateCIDs retrieves and returns all of the state node cids at the provided header ID that conform to the provided filter parameters
-func (ecr *CIDRetriever) RetrieveStateCIDs(tx *sqlx.Tx, stateFilter StateFilter, headerID string) ([]models.StateNodeModel, error) {
- log.Debug("retrieving state cids for header id ", headerID)
- args := make([]interface{}, 0, 2)
- pgStr := `SELECT CAST(state_cids.block_number as Text), state_cids.header_id,
- state_cids.state_leaf_key, state_cids.node_type, state_cids.cid, state_cids.mh_key, state_cids.state_path
- FROM eth.state_cids
- INNER JOIN eth.header_cids ON (
- state_cids.header_id = header_cids.block_hash
- AND state_cids.block_number = header_cids.block_number
- )
- WHERE header_cids.block_hash = $1`
- args = append(args, headerID)
- addrLen := len(stateFilter.Addresses)
- if addrLen > 0 {
- keys := make([]string, addrLen)
- for i, addr := range stateFilter.Addresses {
- keys[i] = crypto.Keccak256Hash(common.HexToAddress(addr).Bytes()).String()
- }
- pgStr += ` AND state_cids.state_leaf_key = ANY($2::VARCHAR(66)[])`
- args = append(args, pq.Array(keys))
- }
- if !stateFilter.IntermediateNodes {
- pgStr += ` AND state_cids.node_type = 2`
- }
- stateNodeCIDs := make([]models.StateNodeModel, 0)
- return stateNodeCIDs, tx.Select(&stateNodeCIDs, pgStr, args...)
-}
-
-// RetrieveStorageCIDs retrieves and returns all of the storage node cids at the provided header id that conform to the provided filter parameters
-func (ecr *CIDRetriever) RetrieveStorageCIDs(tx *sqlx.Tx, storageFilter StorageFilter, headerID string) ([]models.StorageNodeWithStateKeyModel, error) {
- log.Debug("retrieving storage cids for header id ", headerID)
- args := make([]interface{}, 0, 3)
- pgStr := `SELECT CAST(storage_cids.block_number as Text), storage_cids.header_id, storage_cids.storage_leaf_key,
- storage_cids.node_type, storage_cids.cid, storage_cids.mh_key, storage_cids.storage_path, storage_cids.state_path,
- state_cids.state_leaf_key
- FROM eth.storage_cids, eth.state_cids, eth.header_cids
- WHERE storage_cids.header_id = state_cids.header_id
- AND storage_cids.state_path = state_cids.state_path
- AND storage_cids.block_number = state_cids.block_number
- AND state_cids.header_id = header_cids.block_hash
- AND state_cids.block_number = header_cids.block_number
- AND header_cids.block_hash = $1`
- args = append(args, headerID)
- id := 2
- addrLen := len(storageFilter.Addresses)
- if addrLen > 0 {
- keys := make([]string, addrLen)
- for i, addr := range storageFilter.Addresses {
- keys[i] = crypto.Keccak256Hash(common.HexToAddress(addr).Bytes()).String()
- }
- pgStr += fmt.Sprintf(` AND state_cids.state_leaf_key = ANY($%d::VARCHAR(66)[])`, id)
- args = append(args, pq.Array(keys))
- id++
- }
- if len(storageFilter.StorageKeys) > 0 {
- pgStr += fmt.Sprintf(` AND storage_cids.storage_leaf_key = ANY($%d::VARCHAR(66)[])`, id)
- args = append(args, pq.Array(storageFilter.StorageKeys))
- }
- if !storageFilter.IntermediateNodes {
- pgStr += ` AND storage_cids.node_type = 2`
- }
- storageNodeCIDs := make([]models.StorageNodeWithStateKeyModel, 0)
- return storageNodeCIDs, tx.Select(&storageNodeCIDs, pgStr, args...)
-}
-
-// RetrieveBlockByHash returns all of the CIDs needed to compose an entire block, for a given block hash
-func (ecr *CIDRetriever) RetrieveBlockByHash(blockHash common.Hash) (models.HeaderModel, []models.UncleModel, []models.TxModel, []models.ReceiptModel, error) {
- log.Debug("retrieving block cids for block hash ", blockHash.String())
-
- // Begin new db tx
- tx, err := ecr.db.Beginx()
- if err != nil {
- return models.HeaderModel{}, nil, nil, nil, err
- }
- defer func() {
- if p := recover(); p != nil {
- shared.Rollback(tx)
- panic(p)
- } else if err != nil {
- shared.Rollback(tx)
- } else {
- err = tx.Commit()
- }
- }()
-
- var headerCID models.HeaderModel
- headerCID, err = ecr.RetrieveHeaderCIDByHash(tx, blockHash)
- if err != nil {
- log.Error("header cid retrieval error")
- return models.HeaderModel{}, nil, nil, nil, err
- }
- blockNumber, err := strconv.ParseInt(headerCID.BlockNumber, 10, 64)
- if err != nil {
- return models.HeaderModel{}, nil, nil, nil, err
- }
- var uncleCIDs []models.UncleModel
- uncleCIDs, err = ecr.RetrieveUncleCIDsByHeaderID(tx, headerCID.BlockHash)
- if err != nil {
- log.Error("uncle cid retrieval error")
- return models.HeaderModel{}, nil, nil, nil, err
- }
- var txCIDs []models.TxModel
- txCIDs, err = ecr.RetrieveTxCIDsByHeaderID(tx, headerCID.BlockHash, blockNumber)
- if err != nil {
- log.Error("tx cid retrieval error")
- return models.HeaderModel{}, nil, nil, nil, err
- }
- txHashes := make([]string, len(txCIDs))
- for i, txCID := range txCIDs {
- txHashes[i] = txCID.TxHash
- }
- var rctCIDs []models.ReceiptModel
- rctCIDs, err = ecr.RetrieveReceiptCIDsByByHeaderIDAndTxIDs(tx, headerCID.BlockHash, txHashes, blockNumber)
- if err != nil {
- log.Error("rct cid retrieval error")
- }
- return headerCID, uncleCIDs, txCIDs, rctCIDs, err
-}
-
-// RetrieveBlockByNumber returns all of the CIDs needed to compose an entire block, for a given block number
-func (ecr *CIDRetriever) RetrieveBlockByNumber(blockNumber int64) (models.HeaderModel, []models.UncleModel, []models.TxModel, []models.ReceiptModel, error) {
- log.Debug("retrieving block cids for block number ", blockNumber)
-
- // Begin new db tx
- tx, err := ecr.db.Beginx()
- if err != nil {
- return models.HeaderModel{}, nil, nil, nil, err
- }
- defer func() {
- if p := recover(); p != nil {
- shared.Rollback(tx)
- panic(p)
- } else if err != nil {
- shared.Rollback(tx)
- } else {
- err = tx.Commit()
- }
- }()
-
- var headerCID []models.HeaderModel
- headerCID, err = ecr.RetrieveHeaderCIDs(tx, blockNumber)
- if err != nil {
- log.Error("header cid retrieval error")
- return models.HeaderModel{}, nil, nil, nil, err
- }
- if len(headerCID) < 1 {
- return models.HeaderModel{}, nil, nil, nil, fmt.Errorf("header cid retrieval error, no header CIDs found at block %d", blockNumber)
- }
- var uncleCIDs []models.UncleModel
- uncleCIDs, err = ecr.RetrieveUncleCIDsByHeaderID(tx, headerCID[0].BlockHash)
- if err != nil {
- log.Error("uncle cid retrieval error")
- return models.HeaderModel{}, nil, nil, nil, err
- }
- var txCIDs []models.TxModel
- txCIDs, err = ecr.RetrieveTxCIDsByHeaderID(tx, headerCID[0].BlockHash, blockNumber)
- if err != nil {
- log.Error("tx cid retrieval error")
- return models.HeaderModel{}, nil, nil, nil, err
- }
- txHashes := make([]string, len(txCIDs))
- for i, txCID := range txCIDs {
- txHashes[i] = txCID.TxHash
- }
- var rctCIDs []models.ReceiptModel
- rctCIDs, err = ecr.RetrieveReceiptCIDsByByHeaderIDAndTxIDs(tx, headerCID[0].BlockHash, txHashes, blockNumber)
- if err != nil {
- log.Error("rct cid retrieval error")
- }
- return headerCID[0], uncleCIDs, txCIDs, rctCIDs, err
-}
-
-// RetrieveHeaderCIDByHash returns the header for the given block hash
-func (ecr *CIDRetriever) RetrieveHeaderCIDByHash(tx *sqlx.Tx, blockHash common.Hash) (models.HeaderModel, error) {
- log.Debug("retrieving header cids for block hash ", blockHash.String())
- pgStr := `SELECT block_hash, CAST(block_number as Text), parent_hash, cid, mh_key, CAST(td as Text),
- state_root, uncle_root, tx_root, receipt_root, bloom, timestamp FROM eth.header_cids
- WHERE block_hash = $1`
- var headerCID models.HeaderModel
- return headerCID, tx.Get(&headerCID, pgStr, blockHash.String())
-}
-
-// RetrieveTxCIDsByHeaderID retrieves all tx CIDs for the given header id
-func (ecr *CIDRetriever) RetrieveTxCIDsByHeaderID(tx *sqlx.Tx, headerID string, blockNumber int64) ([]models.TxModel, error) {
- log.Debug("retrieving tx cids for block id ", headerID)
- pgStr := `SELECT CAST(block_number as Text), header_id, index, tx_hash, cid, mh_key,
- dst, src, tx_data, tx_type, value
- FROM eth.transaction_cids
- WHERE header_id = $1 AND block_number = $2
- ORDER BY index`
- var txCIDs []models.TxModel
- return txCIDs, tx.Select(&txCIDs, pgStr, headerID, blockNumber)
-}
-
-// RetrieveReceiptCIDsByByHeaderIDAndTxIDs retrieves receipt CIDs by their associated tx IDs for the given header id
-func (ecr *CIDRetriever) RetrieveReceiptCIDsByByHeaderIDAndTxIDs(tx *sqlx.Tx, headerID string, txHashes []string, blockNumber int64) ([]models.ReceiptModel, error) {
- log.Debugf("retrieving receipt cids for tx hashes %v", txHashes)
- pgStr := `SELECT CAST(receipt_cids.block_number as Text), receipt_cids.header_id, receipt_cids.tx_id, receipt_cids.leaf_cid,
- receipt_cids.leaf_mh_key, receipt_cids.contract, receipt_cids.contract_hash
- FROM eth.receipt_cids, eth.transaction_cids
- WHERE tx_id = ANY($2)
- AND receipt_cids.tx_id = transaction_cids.tx_hash
- AND receipt_cids.header_id = transaction_cids.header_id
- AND receipt_cids.block_number = transaction_cids.block_number
- AND transaction_cids.header_id = $1
- AND transaction_cids.block_number = $3
- ORDER BY transaction_cids.index`
- var rctCIDs []models.ReceiptModel
- return rctCIDs, tx.Select(&rctCIDs, pgStr, headerID, pq.Array(txHashes), blockNumber)
-}
-
-// RetrieveHeaderAndTxCIDsByBlockNumber retrieves header CIDs and their associated tx CIDs by block number
-func (ecr *CIDRetriever) RetrieveHeaderAndTxCIDsByBlockNumber(blockNumber int64) ([]HeaderCIDRecord, error) {
- log.Debug("retrieving header cids and tx cids for block number ", blockNumber)
-
- var headerCIDs []HeaderCIDRecord
-
- // https://github.com/go-gorm/gorm/issues/4083#issuecomment-778883283
- // Will use join for TransactionCIDs once preload for 1:N is supported.
- err := ecr.gormDB.Preload("TransactionCIDs", func(tx *gorm.DB) *gorm.DB {
- return tx.Select("cid", "tx_hash", "index", "src", "dst", "header_id", "block_number")
- }).Joins("IPLD").Find(&headerCIDs, "header_cids.block_number = ?", blockNumber).Error
-
- if err != nil {
- log.Error("header cid retrieval error")
- return nil, err
- }
-
- return headerCIDs, nil
-}
-
-// RetrieveHeaderAndTxCIDsByBlockHash retrieves header CID and their associated tx CIDs by block hash (and optionally block number)
-func (ecr *CIDRetriever) RetrieveHeaderAndTxCIDsByBlockHash(blockHash common.Hash, blockNumber *big.Int) (HeaderCIDRecord, error) {
- log.Debug("retrieving header cid and tx cids for block hash ", blockHash.String())
-
- var headerCIDs []HeaderCIDRecord
-
- conditions := map[string]interface{}{"block_hash": blockHash.String()}
- if blockNumber != nil {
- conditions["header_cids.block_number"] = blockNumber.Int64()
- }
-
- // https://github.com/go-gorm/gorm/issues/4083#issuecomment-778883283
- // Will use join for TransactionCIDs once preload for 1:N is supported.
- err := ecr.gormDB.Preload("TransactionCIDs", func(tx *gorm.DB) *gorm.DB {
- return tx.Select("cid", "tx_hash", "index", "src", "dst", "header_id", "block_number")
- }).Joins("IPLD").Find(&headerCIDs, conditions).Error
-
- if err != nil {
- log.Error("header cid retrieval error")
- return HeaderCIDRecord{}, err
- }
-
- if len(headerCIDs) == 0 {
- return HeaderCIDRecord{}, errHeaderHashNotFound
- } else if len(headerCIDs) > 1 {
- return HeaderCIDRecord{}, errMultipleHeadersForHash
- }
-
- return headerCIDs[0], nil
-}
-
-// RetrieveTxCIDByHash returns the tx for the given tx hash (and optionally block number)
-func (ecr *CIDRetriever) RetrieveTxCIDByHash(txHash string, blockNumber *big.Int) (TransactionCIDRecord, error) {
- log.Debug("retrieving tx cid for tx hash ", txHash)
-
- var txCIDs []TransactionCIDRecord
-
- var err error
- if blockNumber != nil {
- err = ecr.gormDB.Joins("IPLD").Find(&txCIDs, "tx_hash = ? AND transaction_cids.header_id = (SELECT canonical_header_hash(transaction_cids.block_number)) AND transaction_cids.block_number = ?", txHash, blockNumber.Int64()).Error
- } else {
- err = ecr.gormDB.Joins("IPLD").Find(&txCIDs, "tx_hash = ? AND transaction_cids.header_id = (SELECT canonical_header_hash(transaction_cids.block_number))", txHash).Error
- }
- if err != nil {
- log.Error("tx retrieval error")
- return TransactionCIDRecord{}, err
- }
-
- if len(txCIDs) == 0 {
- return TransactionCIDRecord{}, errTxHashNotFound
- } else if len(txCIDs) > 1 {
- // a transaction can be part of a only one canonical block
- return TransactionCIDRecord{}, errTxHashInMultipleBlocks
- }
-
- return txCIDs[0], nil
-}
diff --git a/pkg/eth/cid_retriever_test.go b/pkg/eth/cid_retriever_test.go
deleted file mode 100644
index 5ab41827..00000000
--- a/pkg/eth/cid_retriever_test.go
+++ /dev/null
@@ -1,539 +0,0 @@
-// VulcanizeDB
-// Copyright © 2019 Vulcanize
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-package eth_test
-
-import (
- "math/big"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth/test_helpers"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/statediff/indexer/interfaces"
- "github.com/ethereum/go-ethereum/statediff/indexer/models"
- "github.com/ethereum/go-ethereum/trie"
- "github.com/jmoiron/sqlx"
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
-)
-
-var (
- openFilter = eth.SubscriptionSettings{
- Start: big.NewInt(0),
- End: big.NewInt(1),
- HeaderFilter: eth.HeaderFilter{},
- TxFilter: eth.TxFilter{},
- ReceiptFilter: eth.ReceiptFilter{},
- StateFilter: eth.StateFilter{},
- StorageFilter: eth.StorageFilter{},
- }
- rctAddressFilter = eth.SubscriptionSettings{
- Start: big.NewInt(0),
- End: big.NewInt(1),
- HeaderFilter: eth.HeaderFilter{
- Off: true,
- },
- TxFilter: eth.TxFilter{
- Off: true,
- },
- ReceiptFilter: eth.ReceiptFilter{
- LogAddresses: []string{test_helpers.Address.String()},
- },
- StateFilter: eth.StateFilter{
- Off: true,
- },
- StorageFilter: eth.StorageFilter{
- Off: true,
- },
- }
- rctTopicsFilter = eth.SubscriptionSettings{
- Start: big.NewInt(0),
- End: big.NewInt(1),
- HeaderFilter: eth.HeaderFilter{
- Off: true,
- },
- TxFilter: eth.TxFilter{
- Off: true,
- },
- ReceiptFilter: eth.ReceiptFilter{
- Topics: [][]string{{"0x0000000000000000000000000000000000000000000000000000000000000004"}},
- },
- StateFilter: eth.StateFilter{
- Off: true,
- },
- StorageFilter: eth.StorageFilter{
- Off: true,
- },
- }
- rctTopicsAndAddressFilter = eth.SubscriptionSettings{
- Start: big.NewInt(0),
- End: big.NewInt(1),
- HeaderFilter: eth.HeaderFilter{
- Off: true,
- },
- TxFilter: eth.TxFilter{
- Off: true,
- },
- ReceiptFilter: eth.ReceiptFilter{
- Topics: [][]string{
- {"0x0000000000000000000000000000000000000000000000000000000000000004"},
- {"0x0000000000000000000000000000000000000000000000000000000000000006"},
- },
- LogAddresses: []string{test_helpers.Address.String()},
- },
- StateFilter: eth.StateFilter{
- Off: true,
- },
- StorageFilter: eth.StorageFilter{
- Off: true,
- },
- }
- rctTopicsAndAddressFilterFail = eth.SubscriptionSettings{
- Start: big.NewInt(0),
- End: big.NewInt(1),
- HeaderFilter: eth.HeaderFilter{
- Off: true,
- },
- TxFilter: eth.TxFilter{
- Off: true,
- },
- ReceiptFilter: eth.ReceiptFilter{
- Topics: [][]string{
- {"0x0000000000000000000000000000000000000000000000000000000000000004"},
- {"0x0000000000000000000000000000000000000000000000000000000000000007"}, // This topic won't match on the mocks.Address.String() contract receipt
- },
- LogAddresses: []string{test_helpers.Address.String()},
- },
- StateFilter: eth.StateFilter{
- Off: true,
- },
- StorageFilter: eth.StorageFilter{
- Off: true,
- },
- }
- rctAddressesAndTopicFilter = eth.SubscriptionSettings{
- Start: big.NewInt(0),
- End: big.NewInt(1),
- HeaderFilter: eth.HeaderFilter{
- Off: true,
- },
- TxFilter: eth.TxFilter{
- Off: true,
- },
- ReceiptFilter: eth.ReceiptFilter{
- Topics: [][]string{{"0x0000000000000000000000000000000000000000000000000000000000000005"}},
- LogAddresses: []string{test_helpers.Address.String(), test_helpers.AnotherAddress.String()},
- },
- StateFilter: eth.StateFilter{
- Off: true,
- },
- StorageFilter: eth.StorageFilter{
- Off: true,
- },
- }
- rctsForAllCollectedTrxs = eth.SubscriptionSettings{
- Start: big.NewInt(0),
- End: big.NewInt(1),
- HeaderFilter: eth.HeaderFilter{
- Off: true,
- },
- TxFilter: eth.TxFilter{}, // Trx filter open so we will collect all trxs, therefore we will also collect all corresponding rcts despite rct filter
- ReceiptFilter: eth.ReceiptFilter{
- MatchTxs: true,
- Topics: [][]string{{"0x0000000000000000000000000000000000000000000000000000000000000006"}}, // Topic0 isn't one of the topic0s we have
- LogAddresses: []string{"0x0000000000000000000000000000000000000002"}, // Contract isn't one of the contracts we have
- },
- StateFilter: eth.StateFilter{
- Off: true,
- },
- StorageFilter: eth.StorageFilter{
- Off: true,
- },
- }
- rctsForSelectCollectedTrxs = eth.SubscriptionSettings{
- Start: big.NewInt(0),
- End: big.NewInt(1),
- HeaderFilter: eth.HeaderFilter{
- Off: true,
- },
- TxFilter: eth.TxFilter{
- Dst: []string{test_helpers.AnotherAddress.String()}, // We only filter for one of the trxs so we will only get the one corresponding receipt
- },
- ReceiptFilter: eth.ReceiptFilter{
- MatchTxs: true,
- Topics: [][]string{{"0x0000000000000000000000000000000000000000000000000000000000000006"}}, // Topic0 isn't one of the topic0s we have
- LogAddresses: []string{"0x0000000000000000000000000000000000000002"}, // Contract isn't one of the contracts we have
- },
- StateFilter: eth.StateFilter{
- Off: true,
- },
- StorageFilter: eth.StorageFilter{
- Off: true,
- },
- }
- stateFilter = eth.SubscriptionSettings{
- Start: big.NewInt(0),
- End: big.NewInt(1),
- HeaderFilter: eth.HeaderFilter{
- Off: true,
- },
- TxFilter: eth.TxFilter{
- Off: true,
- },
- ReceiptFilter: eth.ReceiptFilter{
- Off: true,
- },
- StateFilter: eth.StateFilter{
- Addresses: []string{test_helpers.AccountAddresss.Hex()},
- },
- StorageFilter: eth.StorageFilter{
- Off: true,
- },
- }
-)
-
-var _ = Describe("Retriever", func() {
- var (
- db *sqlx.DB
- diffIndexer interfaces.StateDiffIndexer
- retriever *eth.CIDRetriever
- )
- BeforeEach(func() {
- db = shared.SetupDB()
- diffIndexer = shared.SetupTestStateDiffIndexer(ctx, params.TestChainConfig, test_helpers.Genesis.Hash())
-
- retriever = eth.NewCIDRetriever(db)
- })
- AfterEach(func() {
- shared.TearDownDB(db)
- })
-
- Describe("Retrieve", func() {
- BeforeEach(func() {
- tx, err := diffIndexer.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
- Expect(err).ToNot(HaveOccurred())
- for _, node := range test_helpers.MockStateNodes {
- err = diffIndexer.PushStateNode(tx, node, test_helpers.MockBlock.Hash().String())
- Expect(err).ToNot(HaveOccurred())
- }
-
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
- })
- It("Retrieves all CIDs for the given blocknumber when provided an open filter", func() {
- type rctCIDAndMHKeyResult struct {
- LeafCID string `db:"leaf_cid"`
- LeafMhKey string `db:"leaf_mh_key"`
- }
- expectedRctCIDsAndLeafNodes := make([]rctCIDAndMHKeyResult, 0)
- pgStr := `SELECT receipt_cids.leaf_cid, receipt_cids.leaf_mh_key FROM eth.receipt_cids, eth.transaction_cids, eth.header_cids
- WHERE receipt_cids.tx_id = transaction_cids.tx_hash
- AND transaction_cids.header_id = header_cids.block_hash
- AND header_cids.block_number = $1
- ORDER BY transaction_cids.index`
- err := db.Select(&expectedRctCIDsAndLeafNodes, pgStr, test_helpers.BlockNumber.Uint64())
- Expect(err).ToNot(HaveOccurred())
- cids, empty, err := retriever.Retrieve(openFilter, 1)
- Expect(err).ToNot(HaveOccurred())
- Expect(empty).ToNot(BeTrue())
- Expect(len(cids)).To(Equal(1))
- Expect(cids[0].BlockNumber).To(Equal(test_helpers.MockCIDWrapper.BlockNumber))
-
- expectedHeaderCID := test_helpers.MockCIDWrapper.Header
- expectedHeaderCID.BlockHash = cids[0].Header.BlockHash
- expectedHeaderCID.NodeID = cids[0].Header.NodeID
- Expect(cids[0].Header).To(Equal(expectedHeaderCID))
- Expect(len(cids[0].Transactions)).To(Equal(4))
- Expect(eth.TxModelsContainsCID(cids[0].Transactions, test_helpers.MockCIDWrapper.Transactions[0].CID)).To(BeTrue())
- Expect(eth.TxModelsContainsCID(cids[0].Transactions, test_helpers.MockCIDWrapper.Transactions[1].CID)).To(BeTrue())
- Expect(eth.TxModelsContainsCID(cids[0].Transactions, test_helpers.MockCIDWrapper.Transactions[2].CID)).To(BeTrue())
- Expect(len(cids[0].Receipts)).To(Equal(4))
- Expect(eth.ReceiptModelsContainsCID(cids[0].Receipts, expectedRctCIDsAndLeafNodes[0].LeafCID)).To(BeTrue())
- Expect(eth.ReceiptModelsContainsCID(cids[0].Receipts, expectedRctCIDsAndLeafNodes[1].LeafCID)).To(BeTrue())
- Expect(eth.ReceiptModelsContainsCID(cids[0].Receipts, expectedRctCIDsAndLeafNodes[2].LeafCID)).To(BeTrue())
- Expect(len(cids[0].StateNodes)).To(Equal(2))
-
- for _, stateNode := range cids[0].StateNodes {
- if stateNode.CID == test_helpers.State1CID.String() {
- Expect(stateNode.StateKey).To(Equal(common.BytesToHash(test_helpers.ContractLeafKey).Hex()))
- Expect(stateNode.NodeType).To(Equal(2))
- Expect(stateNode.Path).To(Equal([]byte{'\x06'}))
- }
- if stateNode.CID == test_helpers.State2CID.String() {
- Expect(stateNode.StateKey).To(Equal(common.BytesToHash(test_helpers.AccountLeafKey).Hex()))
- Expect(stateNode.NodeType).To(Equal(2))
- Expect(stateNode.Path).To(Equal([]byte{'\x0c'}))
- }
- }
- Expect(len(cids[0].StorageNodes)).To(Equal(1))
- expectedStorageNodeCIDs := test_helpers.MockCIDWrapper.StorageNodes
- expectedStorageNodeCIDs[0].HeaderID = cids[0].StorageNodes[0].HeaderID
- expectedStorageNodeCIDs[0].StatePath = cids[0].StorageNodes[0].StatePath
- Expect(cids[0].StorageNodes).To(Equal(expectedStorageNodeCIDs))
- })
-
- It("Applies filters from the provided config.Subscription", func() {
- type rctCIDAndMHKeyResult struct {
- LeafCID string `db:"leaf_cid"`
- LeafMhKey string `db:"leaf_mh_key"`
- }
- expectedRctCIDsAndLeafNodes := make([]rctCIDAndMHKeyResult, 0)
- pgStr := `SELECT receipt_cids.leaf_cid, receipt_cids.leaf_mh_key FROM eth.receipt_cids, eth.transaction_cids, eth.header_cids
- WHERE receipt_cids.tx_id = transaction_cids.tx_hash
- AND transaction_cids.header_id = header_cids.block_hash
- AND header_cids.block_number = $1
- ORDER BY transaction_cids.index`
- err := db.Select(&expectedRctCIDsAndLeafNodes, pgStr, test_helpers.BlockNumber.Uint64())
- Expect(err).ToNot(HaveOccurred())
- cids1, empty, err := retriever.Retrieve(rctAddressFilter, 1)
- Expect(err).ToNot(HaveOccurred())
- Expect(empty).ToNot(BeTrue())
- Expect(len(cids1)).To(Equal(1))
- Expect(cids1[0].BlockNumber).To(Equal(test_helpers.MockCIDWrapper.BlockNumber))
- Expect(cids1[0].Header).To(Equal(models.HeaderModel{}))
- Expect(len(cids1[0].Transactions)).To(Equal(0))
- Expect(len(cids1[0].StateNodes)).To(Equal(0))
- Expect(len(cids1[0].StorageNodes)).To(Equal(0))
- Expect(len(cids1[0].Receipts)).To(Equal(1))
- expectedReceiptCID := test_helpers.MockCIDWrapper.Receipts[0]
- expectedReceiptCID.TxID = cids1[0].Receipts[0].TxID
- expectedReceiptCID.LeafCID = expectedRctCIDsAndLeafNodes[0].LeafCID
- expectedReceiptCID.LeafMhKey = expectedRctCIDsAndLeafNodes[0].LeafMhKey
- Expect(cids1[0].Receipts[0]).To(Equal(expectedReceiptCID))
-
- cids2, empty, err := retriever.Retrieve(rctTopicsFilter, 1)
- Expect(err).ToNot(HaveOccurred())
- Expect(empty).ToNot(BeTrue())
- Expect(len(cids2)).To(Equal(1))
- Expect(cids2[0].BlockNumber).To(Equal(test_helpers.MockCIDWrapper.BlockNumber))
- Expect(cids2[0].Header).To(Equal(models.HeaderModel{}))
- Expect(len(cids2[0].Transactions)).To(Equal(0))
- Expect(len(cids2[0].StateNodes)).To(Equal(0))
- Expect(len(cids2[0].StorageNodes)).To(Equal(0))
- Expect(len(cids2[0].Receipts)).To(Equal(1))
- expectedReceiptCID = test_helpers.MockCIDWrapper.Receipts[0]
- expectedReceiptCID.TxID = cids2[0].Receipts[0].TxID
- expectedReceiptCID.LeafCID = expectedRctCIDsAndLeafNodes[0].LeafCID
- expectedReceiptCID.LeafMhKey = expectedRctCIDsAndLeafNodes[0].LeafMhKey
- Expect(cids2[0].Receipts[0]).To(Equal(expectedReceiptCID))
-
- cids3, empty, err := retriever.Retrieve(rctTopicsAndAddressFilter, 1)
- Expect(err).ToNot(HaveOccurred())
- Expect(empty).ToNot(BeTrue())
- Expect(len(cids3)).To(Equal(1))
- Expect(cids3[0].BlockNumber).To(Equal(test_helpers.MockCIDWrapper.BlockNumber))
- Expect(cids3[0].Header).To(Equal(models.HeaderModel{}))
- Expect(len(cids3[0].Transactions)).To(Equal(0))
- Expect(len(cids3[0].StateNodes)).To(Equal(0))
- Expect(len(cids3[0].StorageNodes)).To(Equal(0))
- Expect(len(cids3[0].Receipts)).To(Equal(1))
- expectedReceiptCID = test_helpers.MockCIDWrapper.Receipts[0]
- expectedReceiptCID.TxID = cids3[0].Receipts[0].TxID
- expectedReceiptCID.LeafCID = expectedRctCIDsAndLeafNodes[0].LeafCID
- expectedReceiptCID.LeafMhKey = expectedRctCIDsAndLeafNodes[0].LeafMhKey
- Expect(cids3[0].Receipts[0]).To(Equal(expectedReceiptCID))
-
- cids4, empty, err := retriever.Retrieve(rctAddressesAndTopicFilter, 1)
- Expect(err).ToNot(HaveOccurred())
- Expect(empty).ToNot(BeTrue())
- Expect(len(cids4)).To(Equal(1))
- Expect(cids4[0].BlockNumber).To(Equal(test_helpers.MockCIDWrapper.BlockNumber))
- Expect(cids4[0].Header).To(Equal(models.HeaderModel{}))
- Expect(len(cids4[0].Transactions)).To(Equal(0))
- Expect(len(cids4[0].StateNodes)).To(Equal(0))
- Expect(len(cids4[0].StorageNodes)).To(Equal(0))
- Expect(len(cids4[0].Receipts)).To(Equal(1))
- expectedReceiptCID = test_helpers.MockCIDWrapper.Receipts[1]
- expectedReceiptCID.TxID = cids4[0].Receipts[0].TxID
- expectedReceiptCID.LeafCID = expectedRctCIDsAndLeafNodes[1].LeafCID
- expectedReceiptCID.LeafMhKey = expectedRctCIDsAndLeafNodes[1].LeafMhKey
- Expect(cids4[0].Receipts[0]).To(Equal(expectedReceiptCID))
-
- cids5, empty, err := retriever.Retrieve(rctsForAllCollectedTrxs, 1)
- Expect(err).ToNot(HaveOccurred())
- Expect(empty).ToNot(BeTrue())
- Expect(len(cids5)).To(Equal(1))
- Expect(cids5[0].BlockNumber).To(Equal(test_helpers.MockCIDWrapper.BlockNumber))
- Expect(cids5[0].Header).To(Equal(models.HeaderModel{}))
- Expect(len(cids5[0].Transactions)).To(Equal(4))
- Expect(eth.TxModelsContainsCID(cids5[0].Transactions, test_helpers.Trx1CID.String())).To(BeTrue())
- Expect(eth.TxModelsContainsCID(cids5[0].Transactions, test_helpers.Trx2CID.String())).To(BeTrue())
- Expect(eth.TxModelsContainsCID(cids5[0].Transactions, test_helpers.Trx3CID.String())).To(BeTrue())
- Expect(len(cids5[0].StateNodes)).To(Equal(0))
- Expect(len(cids5[0].StorageNodes)).To(Equal(0))
- Expect(len(cids5[0].Receipts)).To(Equal(4))
- Expect(eth.ReceiptModelsContainsCID(cids5[0].Receipts, expectedRctCIDsAndLeafNodes[0].LeafCID)).To(BeTrue())
- Expect(eth.ReceiptModelsContainsCID(cids5[0].Receipts, expectedRctCIDsAndLeafNodes[1].LeafCID)).To(BeTrue())
- Expect(eth.ReceiptModelsContainsCID(cids5[0].Receipts, expectedRctCIDsAndLeafNodes[2].LeafCID)).To(BeTrue())
-
- cids6, empty, err := retriever.Retrieve(rctsForSelectCollectedTrxs, 1)
- Expect(err).ToNot(HaveOccurred())
- Expect(empty).ToNot(BeTrue())
- Expect(len(cids6)).To(Equal(1))
- Expect(cids6[0].BlockNumber).To(Equal(test_helpers.MockCIDWrapper.BlockNumber))
- Expect(cids6[0].Header).To(Equal(models.HeaderModel{}))
- Expect(len(cids6[0].Transactions)).To(Equal(1))
- expectedTxCID := test_helpers.MockCIDWrapper.Transactions[1]
- expectedTxCID.TxHash = cids6[0].Transactions[0].TxHash
- expectedTxCID.HeaderID = cids6[0].Transactions[0].HeaderID
- Expect(cids6[0].Transactions[0]).To(Equal(expectedTxCID))
- Expect(len(cids6[0].StateNodes)).To(Equal(0))
- Expect(len(cids6[0].StorageNodes)).To(Equal(0))
- Expect(len(cids6[0].Receipts)).To(Equal(1))
- expectedReceiptCID = test_helpers.MockCIDWrapper.Receipts[1]
- expectedReceiptCID.TxID = cids6[0].Receipts[0].TxID
- expectedReceiptCID.LeafCID = expectedRctCIDsAndLeafNodes[1].LeafCID
- expectedReceiptCID.LeafMhKey = expectedRctCIDsAndLeafNodes[1].LeafMhKey
- Expect(cids6[0].Receipts[0]).To(Equal(expectedReceiptCID))
-
- cids7, empty, err := retriever.Retrieve(stateFilter, 1)
- Expect(err).ToNot(HaveOccurred())
- Expect(empty).ToNot(BeTrue())
- Expect(len(cids7)).To(Equal(1))
- Expect(cids7[0].BlockNumber).To(Equal(test_helpers.MockCIDWrapper.BlockNumber))
- Expect(cids7[0].Header).To(Equal(models.HeaderModel{}))
- Expect(len(cids7[0].Transactions)).To(Equal(0))
- Expect(len(cids7[0].Receipts)).To(Equal(0))
- Expect(len(cids7[0].StorageNodes)).To(Equal(0))
- Expect(len(cids7[0].StateNodes)).To(Equal(1))
- Expect(cids7[0].StateNodes[0]).To(Equal(models.StateNodeModel{
- BlockNumber: "1",
- HeaderID: cids7[0].StateNodes[0].HeaderID,
- NodeType: 2,
- StateKey: common.BytesToHash(test_helpers.AccountLeafKey).Hex(),
- CID: test_helpers.State2CID.String(),
- MhKey: test_helpers.State2MhKey,
- Path: []byte{'\x0c'},
- }))
-
- _, empty, err = retriever.Retrieve(rctTopicsAndAddressFilterFail, 1)
- Expect(err).ToNot(HaveOccurred())
- Expect(empty).To(BeTrue())
- })
- })
-
- Describe("RetrieveFirstBlockNumber", func() {
- It("Throws an error if there are no blocks in the database", func() {
- _, err := retriever.RetrieveFirstBlockNumber()
- Expect(err).To(HaveOccurred())
- })
- It("Gets the number of the first block that has data in the database", func() {
- tx, err := diffIndexer.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
- Expect(err).ToNot(HaveOccurred())
-
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
-
- num, err := retriever.RetrieveFirstBlockNumber()
- Expect(err).ToNot(HaveOccurred())
- Expect(num).To(Equal(int64(1)))
- })
-
- It("Gets the number of the first block that has data in the database", func() {
- payload := test_helpers.MockConvertedPayload
- payload.Block = newMockBlock(1010101)
- tx, err := diffIndexer.PushBlock(payload.Block, payload.Receipts, payload.Block.Difficulty())
- Expect(err).ToNot(HaveOccurred())
-
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
-
- num, err := retriever.RetrieveFirstBlockNumber()
- Expect(err).ToNot(HaveOccurred())
- Expect(num).To(Equal(int64(1010101)))
- })
-
- It("Gets the number of the first block that has data in the database", func() {
- payload1 := test_helpers.MockConvertedPayload
- payload1.Block = newMockBlock(1010101)
- payload2 := payload1
- payload2.Block = newMockBlock(5)
- tx, err := diffIndexer.PushBlock(payload1.Block, payload1.Receipts, payload1.Block.Difficulty())
- Expect(err).ToNot(HaveOccurred())
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
-
- tx, err = diffIndexer.PushBlock(payload2.Block, payload2.Receipts, payload2.Block.Difficulty())
- Expect(err).ToNot(HaveOccurred())
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
-
- num, err := retriever.RetrieveFirstBlockNumber()
- Expect(err).ToNot(HaveOccurred())
- Expect(num).To(Equal(int64(5)))
- })
- })
-
- Describe("RetrieveLastBlockNumber", func() {
- It("Throws an error if there are no blocks in the database", func() {
- _, err := retriever.RetrieveLastBlockNumber()
- Expect(err).To(HaveOccurred())
- })
- It("Gets the number of the latest block that has data in the database", func() {
- tx, err := diffIndexer.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
- Expect(err).ToNot(HaveOccurred())
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
-
- num, err := retriever.RetrieveLastBlockNumber()
- Expect(err).ToNot(HaveOccurred())
- Expect(num).To(Equal(int64(1)))
- })
-
- It("Gets the number of the latest block that has data in the database", func() {
- payload := test_helpers.MockConvertedPayload
- payload.Block = newMockBlock(1010101)
- tx, err := diffIndexer.PushBlock(payload.Block, payload.Receipts, payload.Block.Difficulty())
- Expect(err).ToNot(HaveOccurred())
-
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
-
- num, err := retriever.RetrieveLastBlockNumber()
- Expect(err).ToNot(HaveOccurred())
- Expect(num).To(Equal(int64(1010101)))
- })
-
- It("Gets the number of the latest block that has data in the database", func() {
- payload1 := test_helpers.MockConvertedPayload
- payload1.Block = newMockBlock(1010101)
- payload2 := payload1
- payload2.Block = newMockBlock(5)
- tx, err := diffIndexer.PushBlock(payload1.Block, payload1.Receipts, payload1.Block.Difficulty())
- Expect(err).ToNot(HaveOccurred())
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
-
- tx, err = diffIndexer.PushBlock(payload2.Block, payload2.Receipts, payload2.Block.Difficulty())
- Expect(err).ToNot(HaveOccurred())
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
-
- num, err := retriever.RetrieveLastBlockNumber()
- Expect(err).ToNot(HaveOccurred())
- Expect(num).To(Equal(int64(1010101)))
- })
- })
-})
-
-func newMockBlock(blockNumber uint64) *types.Block {
- header := test_helpers.MockHeader
- header.Number.SetUint64(blockNumber)
- return types.NewBlock(&test_helpers.MockHeader, test_helpers.MockTransactions, nil, test_helpers.MockReceipts, new(trie.Trie))
-}
diff --git a/pkg/eth/eth_suite_test.go b/pkg/eth/eth_suite_test.go
index 5a5782c7..37a8ce15 100644
--- a/pkg/eth/eth_suite_test.go
+++ b/pkg/eth/eth_suite_test.go
@@ -17,19 +17,13 @@
package eth_test
import (
- "io/ioutil"
"testing"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
- . "github.com/onsi/ginkgo"
+ . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
func TestETHSuite(t *testing.T) {
RegisterFailHandler(Fail)
- RunSpecs(t, "eth ipld server eth suite test")
+ RunSpecs(t, "ipld-eth-server/pkg/eth")
}
-
-var _ = BeforeSuite(func() {
- log.SetOutput(ioutil.Discard)
-})
diff --git a/pkg/eth/filterer.go b/pkg/eth/filterer.go
deleted file mode 100644
index d4cc936a..00000000
--- a/pkg/eth/filterer.go
+++ /dev/null
@@ -1,366 +0,0 @@
-// VulcanizeDB
-// Copyright © 2019 Vulcanize
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-package eth
-
-import (
- "bytes"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/ethereum/go-ethereum/statediff/indexer/ipld"
- "github.com/ethereum/go-ethereum/statediff/indexer/models"
- sdtypes "github.com/ethereum/go-ethereum/statediff/types"
- "github.com/ipfs/go-cid"
- "github.com/multiformats/go-multihash"
-)
-
-// Filterer interface for substituing mocks in tests
-type Filterer interface {
- Filter(filter SubscriptionSettings, payload ConvertedPayload) (*IPLDs, error)
-}
-
-// ResponseFilterer satisfies the ResponseFilterer interface for ethereum
-type ResponseFilterer struct{}
-
-// NewResponseFilterer creates a new Filterer satisfying the ResponseFilterer interface
-func NewResponseFilterer() *ResponseFilterer {
- return &ResponseFilterer{}
-}
-
-// Filter is used to filter through eth data to extract and package requested data into a Payload
-func (s *ResponseFilterer) Filter(filter SubscriptionSettings, payload ConvertedPayload) (*IPLDs, error) {
- if checkRange(filter.Start.Int64(), filter.End.Int64(), payload.Block.Number().Int64()) {
- response := new(IPLDs)
- response.TotalDifficulty = payload.TotalDifficulty
- if err := s.filterHeaders(filter.HeaderFilter, response, payload); err != nil {
- return nil, err
- }
- txHashes, err := s.filterTransactions(filter.TxFilter, response, payload)
- if err != nil {
- return nil, err
- }
- var filterTxs []common.Hash
- if filter.ReceiptFilter.MatchTxs {
- filterTxs = txHashes
- }
- if err := s.filerReceipts(filter.ReceiptFilter, response, payload, filterTxs); err != nil {
- return nil, err
- }
- if err := s.filterStateAndStorage(filter.StateFilter, filter.StorageFilter, response, payload); err != nil {
- return nil, err
- }
- response.BlockNumber = payload.Block.Number()
- return response, nil
- }
- return nil, nil
-}
-
-func (s *ResponseFilterer) filterHeaders(headerFilter HeaderFilter, response *IPLDs, payload ConvertedPayload) error {
- if !headerFilter.Off {
- headerRLP, err := rlp.EncodeToBytes(payload.Block.Header())
- if err != nil {
- return err
- }
- cid, err := ipld.RawdataToCid(ipld.MEthHeader, headerRLP, multihash.KECCAK_256)
- if err != nil {
- return err
- }
- response.Header = models.IPLDModel{
- BlockNumber: payload.Block.Number().String(),
- Data: headerRLP,
- Key: cid.String(),
- }
- if headerFilter.Uncles {
- response.Uncles = make([]models.IPLDModel, len(payload.Block.Body().Uncles))
- for i, uncle := range payload.Block.Body().Uncles {
- uncleRlp, err := rlp.EncodeToBytes(uncle)
- if err != nil {
- return err
- }
- cid, err := ipld.RawdataToCid(ipld.MEthHeader, uncleRlp, multihash.KECCAK_256)
- if err != nil {
- return err
- }
- response.Uncles[i] = models.IPLDModel{
- BlockNumber: uncle.Number.String(),
- Data: uncleRlp,
- Key: cid.String(),
- }
- }
- }
- }
- return nil
-}
-
-func checkRange(start, end, actual int64) bool {
- if (end <= 0 || end >= actual) && start <= actual {
- return true
- }
- return false
-}
-
-func (s *ResponseFilterer) filterTransactions(trxFilter TxFilter, response *IPLDs, payload ConvertedPayload) ([]common.Hash, error) {
- var trxHashes []common.Hash
- if !trxFilter.Off {
- trxLen := len(payload.Block.Body().Transactions)
- trxHashes = make([]common.Hash, 0, trxLen)
- response.Transactions = make([]models.IPLDModel, 0, trxLen)
- for i, trx := range payload.Block.Body().Transactions {
- // TODO: check if want corresponding receipt and if we do we must include this transaction
- if checkTransactionAddrs(trxFilter.Src, trxFilter.Dst, payload.TxMetaData[i].Src, payload.TxMetaData[i].Dst) {
- trxBuffer := new(bytes.Buffer)
- if err := trx.EncodeRLP(trxBuffer); err != nil {
- return nil, err
- }
- data := trxBuffer.Bytes()
- cid, err := ipld.RawdataToCid(ipld.MEthTx, data, multihash.KECCAK_256)
- if err != nil {
- return nil, err
- }
- response.Transactions = append(response.Transactions, models.IPLDModel{
- Data: data,
- Key: cid.String(),
- })
- trxHashes = append(trxHashes, trx.Hash())
- }
- }
- }
- return trxHashes, nil
-}
-
-// checkTransactionAddrs returns true if either the transaction src and dst are one of the wanted src and dst addresses
-func checkTransactionAddrs(wantedSrc, wantedDst []string, actualSrc, actualDst string) bool {
- // If we aren't filtering for any addresses, every transaction is a go
- if len(wantedDst) == 0 && len(wantedSrc) == 0 {
- return true
- }
- for _, src := range wantedSrc {
- if src == actualSrc {
- return true
- }
- }
- for _, dst := range wantedDst {
- if dst == actualDst {
- return true
- }
- }
- return false
-}
-
-func (s *ResponseFilterer) filerReceipts(receiptFilter ReceiptFilter, response *IPLDs, payload ConvertedPayload, trxHashes []common.Hash) error {
- if !receiptFilter.Off {
- response.Receipts = make([]models.IPLDModel, 0, len(payload.Receipts))
- rctLeafCID, rctIPLDData, err := GetRctLeafNodeData(payload.Receipts)
- if err != nil {
- return err
- }
-
- for idx, receipt := range payload.Receipts {
- // topics is always length 4
- topics := make([][]string, 4)
- contracts := make([]string, len(receipt.Logs))
- for _, l := range receipt.Logs {
- contracts = append(contracts, l.Address.String())
- for idx, t := range l.Topics {
- topics[idx] = append(topics[idx], t.String())
- }
- }
-
- // TODO: Verify this filter logic.
- if checkReceipts(receipt, receiptFilter.Topics, topics, receiptFilter.LogAddresses, contracts, trxHashes) {
- response.Receipts = append(response.Receipts, models.IPLDModel{
- BlockNumber: payload.Block.Number().String(),
- Data: rctIPLDData[idx],
- Key: rctLeafCID[idx].String(),
- })
- }
- }
- }
- return nil
-}
-
-func checkReceipts(rct *types.Receipt, wantedTopics, actualTopics [][]string, wantedAddresses []string, actualAddresses []string, wantedTrxHashes []common.Hash) bool {
- // If we aren't filtering for any topics, contracts, or corresponding trxs then all receipts are a go
- if len(wantedTopics) == 0 && len(wantedAddresses) == 0 && len(wantedTrxHashes) == 0 {
- return true
- }
- // Keep receipts that are from watched txs
- for _, wantedTrxHash := range wantedTrxHashes {
- if bytes.Equal(wantedTrxHash.Bytes(), rct.TxHash.Bytes()) {
- return true
- }
- }
- // If there are no wanted contract addresses, we keep all receipts that match the topic filter
- if len(wantedAddresses) == 0 {
- if match := filterMatch(wantedTopics, actualTopics); match {
- return true
- }
- }
- // If there are wanted contract addresses to filter on
- for _, wantedAddr := range wantedAddresses {
- // and this is an address of interest
- for _, actualAddr := range actualAddresses {
- if wantedAddr == actualAddr {
- // we keep the receipt if it matches on the topic filter
- if match := filterMatch(wantedTopics, actualTopics); match {
- return true
- }
- }
- }
- }
- return false
-}
-
-// filterMatch returns true if the actualTopics conform to the wantedTopics filter
-func filterMatch(wantedTopics, actualTopics [][]string) bool {
- // actualTopics should always be length 4, but the members can be nil slices
- matches := 0
- for i, actualTopicSet := range actualTopics {
- if i < len(wantedTopics) && len(wantedTopics[i]) > 0 {
- // If we have topics in this filter slot, count as a match if one of the topics matches
- matches += slicesShareString(actualTopicSet, wantedTopics[i])
- } else {
- // Filter slot is either empty or doesn't exist => not matching any topics at this slot => counts as a match
- matches++
- }
- }
- return matches == 4
-}
-
-// returns 1 if the two slices have a string in common, 0 if they do not
-func slicesShareString(slice1, slice2 []string) int {
- for _, str1 := range slice1 {
- for _, str2 := range slice2 {
- if str1 == str2 {
- return 1
- }
- }
- }
- return 0
-}
-
-// filterStateAndStorage filters state and storage nodes into the response according to the provided filters
-func (s *ResponseFilterer) filterStateAndStorage(stateFilter StateFilter, storageFilter StorageFilter, response *IPLDs, payload ConvertedPayload) error {
- response.StateNodes = make([]StateNode, 0, len(payload.StateNodes))
- response.StorageNodes = make([]StorageNode, 0)
- stateAddressFilters := make([]common.Hash, len(stateFilter.Addresses))
- for i, addr := range stateFilter.Addresses {
- stateAddressFilters[i] = crypto.Keccak256Hash(common.HexToAddress(addr).Bytes())
- }
- storageAddressFilters := make([]common.Hash, len(storageFilter.Addresses))
- for i, addr := range storageFilter.Addresses {
- storageAddressFilters[i] = crypto.Keccak256Hash(common.HexToAddress(addr).Bytes())
- }
- storageKeyFilters := make([]common.Hash, len(storageFilter.StorageKeys))
- for i, store := range storageFilter.StorageKeys {
- storageKeyFilters[i] = common.HexToHash(store)
- }
- for _, stateNode := range payload.StateNodes {
- if !stateFilter.Off && checkNodeKeys(stateAddressFilters, stateNode.LeafKey) {
- if stateNode.NodeType == sdtypes.Leaf || stateFilter.IntermediateNodes {
- cid, err := ipld.RawdataToCid(ipld.MEthStateTrie, stateNode.NodeValue, multihash.KECCAK_256)
- if err != nil {
- return err
- }
- response.StateNodes = append(response.StateNodes, StateNode{
- StateLeafKey: common.BytesToHash(stateNode.LeafKey),
- Path: stateNode.Path,
- IPLD: models.IPLDModel{
- BlockNumber: payload.Block.Number().String(),
- Data: stateNode.NodeValue,
- Key: cid.String(),
- },
- Type: stateNode.NodeType,
- })
- }
- }
- if !storageFilter.Off && checkNodeKeys(storageAddressFilters, stateNode.LeafKey) {
- for _, storageNode := range payload.StorageNodes[common.Bytes2Hex(stateNode.Path)] {
- if checkNodeKeys(storageKeyFilters, storageNode.LeafKey) {
- cid, err := ipld.RawdataToCid(ipld.MEthStorageTrie, storageNode.NodeValue, multihash.KECCAK_256)
- if err != nil {
- return err
- }
- response.StorageNodes = append(response.StorageNodes, StorageNode{
- StateLeafKey: common.BytesToHash(stateNode.LeafKey),
- StorageLeafKey: common.BytesToHash(storageNode.LeafKey),
- IPLD: models.IPLDModel{
- BlockNumber: payload.Block.Number().String(),
- Data: storageNode.NodeValue,
- Key: cid.String(),
- },
- Type: storageNode.NodeType,
- Path: storageNode.Path,
- })
- }
- }
- }
- }
- return nil
-}
-
-func checkNodeKeys(wantedKeys []common.Hash, actualKey []byte) bool {
- // If we aren't filtering for any specific keys, all nodes are a go
- if len(wantedKeys) == 0 {
- return true
- }
- for _, key := range wantedKeys {
- if bytes.Equal(key.Bytes(), actualKey) {
- return true
- }
- }
- return false
-}
-
-// GetRctLeafNodeData converts the receipts to receipt trie and returns the receipt leaf node IPLD data and
-// corresponding CIDs
-func GetRctLeafNodeData(rcts types.Receipts) ([]cid.Cid, [][]byte, error) {
- receiptTrie := ipld.NewRctTrie()
- for idx, rct := range rcts {
- ethRct, err := ipld.NewReceipt(rct)
- if err != nil {
- return nil, nil, err
- }
- if err = receiptTrie.Add(idx, ethRct.RawData()); err != nil {
- return nil, nil, err
- }
- }
-
- rctLeafNodes, keys, err := receiptTrie.GetLeafNodes()
- if err != nil {
- return nil, nil, err
- }
-
- ethRctleafNodeCids := make([]cid.Cid, len(rctLeafNodes))
- ethRctleafNodeData := make([][]byte, len(rctLeafNodes))
- for i, rln := range rctLeafNodes {
- var idx uint
-
- r := bytes.NewReader(keys[i].TrieKey)
- err = rlp.Decode(r, &idx)
- if err != nil {
- return nil, nil, err
- }
-
- ethRctleafNodeCids[idx] = rln.Cid()
- ethRctleafNodeData[idx] = rln.RawData()
- }
-
- return ethRctleafNodeCids, ethRctleafNodeData, nil
-}
diff --git a/pkg/eth/filterer_test.go b/pkg/eth/filterer_test.go
deleted file mode 100644
index 530ec01a..00000000
--- a/pkg/eth/filterer_test.go
+++ /dev/null
@@ -1,208 +0,0 @@
-// VulcanizeDB
-// Copyright © 2019 Vulcanize
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-package eth_test
-
-import (
- "bytes"
-
- "github.com/ethereum/go-ethereum/statediff/indexer/models"
- sdtypes "github.com/ethereum/go-ethereum/statediff/types"
-
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth/test_helpers"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
-)
-
-var (
- filterer *eth.ResponseFilterer
-)
-
-var _ = Describe("Filterer", func() {
- Describe("FilterResponse", func() {
- BeforeEach(func() {
- filterer = eth.NewResponseFilterer()
- })
-
- It("Transcribes all the data from the IPLDPayload into the StreamPayload if given an open filter", func() {
- iplds, err := filterer.Filter(openFilter, test_helpers.MockConvertedPayload)
- Expect(err).ToNot(HaveOccurred())
- Expect(iplds).ToNot(BeNil())
- Expect(iplds.BlockNumber.Int64()).To(Equal(test_helpers.MockIPLDs.BlockNumber.Int64()))
- Expect(iplds.Header).To(Equal(test_helpers.MockIPLDs.Header))
- var expectedEmptyUncles []models.IPLDModel
- Expect(iplds.Uncles).To(Equal(expectedEmptyUncles))
- Expect(len(iplds.Transactions)).To(Equal(4))
- Expect(shared.IPLDsContainBytes(iplds.Transactions, test_helpers.Tx1)).To(BeTrue())
- Expect(shared.IPLDsContainBytes(iplds.Transactions, test_helpers.Tx2)).To(BeTrue())
- Expect(shared.IPLDsContainBytes(iplds.Transactions, test_helpers.Tx3)).To(BeTrue())
- Expect(len(iplds.Receipts)).To(Equal(4))
- Expect(shared.IPLDsContainBytes(iplds.Receipts, test_helpers.Rct1IPLD)).To(BeTrue())
- Expect(shared.IPLDsContainBytes(iplds.Receipts, test_helpers.Rct2IPLD)).To(BeTrue())
- Expect(shared.IPLDsContainBytes(iplds.Receipts, test_helpers.Rct3IPLD)).To(BeTrue())
- Expect(len(iplds.StateNodes)).To(Equal(2))
- for _, stateNode := range iplds.StateNodes {
- Expect(stateNode.Type).To(Equal(sdtypes.Leaf))
- if bytes.Equal(stateNode.StateLeafKey.Bytes(), test_helpers.AccountLeafKey) {
- Expect(stateNode.IPLD).To(Equal(models.IPLDModel{
- BlockNumber: test_helpers.BlockNumber.String(),
- Data: test_helpers.State2IPLD.RawData(),
- Key: test_helpers.State2IPLD.Cid().String(),
- }))
- }
- if bytes.Equal(stateNode.StateLeafKey.Bytes(), test_helpers.ContractLeafKey) {
- Expect(stateNode.IPLD).To(Equal(models.IPLDModel{
- BlockNumber: test_helpers.BlockNumber.String(),
- Data: test_helpers.State1IPLD.RawData(),
- Key: test_helpers.State1IPLD.Cid().String(),
- }))
- }
- }
- Expect(iplds.StorageNodes).To(Equal(test_helpers.MockIPLDs.StorageNodes))
- })
-
- It("Applies filters from the provided config.Subscription", func() {
- iplds1, err := filterer.Filter(rctAddressFilter, test_helpers.MockConvertedPayload)
- Expect(err).ToNot(HaveOccurred())
- Expect(iplds1).ToNot(BeNil())
- Expect(iplds1.BlockNumber.Int64()).To(Equal(test_helpers.MockIPLDs.BlockNumber.Int64()))
- Expect(iplds1.Header).To(Equal(models.IPLDModel{}))
- Expect(len(iplds1.Uncles)).To(Equal(0))
- Expect(len(iplds1.Transactions)).To(Equal(0))
- Expect(len(iplds1.StorageNodes)).To(Equal(0))
- Expect(len(iplds1.StateNodes)).To(Equal(0))
- Expect(len(iplds1.Receipts)).To(Equal(1))
- Expect(iplds1.Receipts[0]).To(Equal(models.IPLDModel{
- BlockNumber: test_helpers.BlockNumber.String(),
- Data: test_helpers.Rct1IPLD,
- Key: test_helpers.Rct1CID.String(),
- }))
-
- iplds2, err := filterer.Filter(rctTopicsFilter, test_helpers.MockConvertedPayload)
- Expect(err).ToNot(HaveOccurred())
- Expect(iplds2).ToNot(BeNil())
- Expect(iplds2.BlockNumber.Int64()).To(Equal(test_helpers.MockIPLDs.BlockNumber.Int64()))
- Expect(iplds2.Header).To(Equal(models.IPLDModel{}))
- Expect(len(iplds2.Uncles)).To(Equal(0))
- Expect(len(iplds2.Transactions)).To(Equal(0))
- Expect(len(iplds2.StorageNodes)).To(Equal(0))
- Expect(len(iplds2.StateNodes)).To(Equal(0))
- Expect(len(iplds2.Receipts)).To(Equal(1))
- Expect(iplds2.Receipts[0]).To(Equal(models.IPLDModel{
- BlockNumber: test_helpers.BlockNumber.String(),
- Data: test_helpers.Rct1IPLD,
- Key: test_helpers.Rct1CID.String(),
- }))
-
- iplds3, err := filterer.Filter(rctTopicsAndAddressFilter, test_helpers.MockConvertedPayload)
- Expect(err).ToNot(HaveOccurred())
- Expect(iplds3).ToNot(BeNil())
- Expect(iplds3.BlockNumber.Int64()).To(Equal(test_helpers.MockIPLDs.BlockNumber.Int64()))
- Expect(iplds3.Header).To(Equal(models.IPLDModel{}))
- Expect(len(iplds3.Uncles)).To(Equal(0))
- Expect(len(iplds3.Transactions)).To(Equal(0))
- Expect(len(iplds3.StorageNodes)).To(Equal(0))
- Expect(len(iplds3.StateNodes)).To(Equal(0))
- Expect(len(iplds3.Receipts)).To(Equal(1))
- Expect(iplds3.Receipts[0]).To(Equal(models.IPLDModel{
- BlockNumber: test_helpers.BlockNumber.String(),
- Data: test_helpers.Rct1IPLD,
- Key: test_helpers.Rct1CID.String(),
- }))
-
- iplds4, err := filterer.Filter(rctAddressesAndTopicFilter, test_helpers.MockConvertedPayload)
- Expect(err).ToNot(HaveOccurred())
- Expect(iplds4).ToNot(BeNil())
- Expect(iplds4.BlockNumber.Int64()).To(Equal(test_helpers.MockIPLDs.BlockNumber.Int64()))
- Expect(iplds4.Header).To(Equal(models.IPLDModel{}))
- Expect(len(iplds4.Uncles)).To(Equal(0))
- Expect(len(iplds4.Transactions)).To(Equal(0))
- Expect(len(iplds4.StorageNodes)).To(Equal(0))
- Expect(len(iplds4.StateNodes)).To(Equal(0))
- Expect(len(iplds4.Receipts)).To(Equal(1))
- Expect(iplds4.Receipts[0]).To(Equal(models.IPLDModel{
- BlockNumber: test_helpers.BlockNumber.String(),
- Data: test_helpers.Rct2IPLD,
- Key: test_helpers.Rct2CID.String(),
- }))
-
- iplds5, err := filterer.Filter(rctsForAllCollectedTrxs, test_helpers.MockConvertedPayload)
- Expect(err).ToNot(HaveOccurred())
- Expect(iplds5).ToNot(BeNil())
- Expect(iplds5.BlockNumber.Int64()).To(Equal(test_helpers.MockIPLDs.BlockNumber.Int64()))
- Expect(iplds5.Header).To(Equal(models.IPLDModel{}))
- Expect(len(iplds5.Uncles)).To(Equal(0))
- Expect(len(iplds5.Transactions)).To(Equal(4))
- Expect(shared.IPLDsContainBytes(iplds5.Transactions, test_helpers.Tx1)).To(BeTrue())
- Expect(shared.IPLDsContainBytes(iplds5.Transactions, test_helpers.Tx2)).To(BeTrue())
- Expect(shared.IPLDsContainBytes(iplds5.Transactions, test_helpers.Tx3)).To(BeTrue())
- Expect(len(iplds5.StorageNodes)).To(Equal(0))
- Expect(len(iplds5.StateNodes)).To(Equal(0))
- Expect(len(iplds5.Receipts)).To(Equal(4))
- Expect(shared.IPLDsContainBytes(iplds5.Receipts, test_helpers.Rct1IPLD)).To(BeTrue())
- Expect(shared.IPLDsContainBytes(iplds5.Receipts, test_helpers.Rct2IPLD)).To(BeTrue())
- Expect(shared.IPLDsContainBytes(iplds5.Receipts, test_helpers.Rct3IPLD)).To(BeTrue())
-
- iplds6, err := filterer.Filter(rctsForSelectCollectedTrxs, test_helpers.MockConvertedPayload)
- Expect(err).ToNot(HaveOccurred())
- Expect(iplds6).ToNot(BeNil())
- Expect(iplds6.BlockNumber.Int64()).To(Equal(test_helpers.MockIPLDs.BlockNumber.Int64()))
- Expect(iplds6.Header).To(Equal(models.IPLDModel{}))
- Expect(len(iplds6.Uncles)).To(Equal(0))
- Expect(len(iplds6.Transactions)).To(Equal(1))
- Expect(shared.IPLDsContainBytes(iplds5.Transactions, test_helpers.Tx2)).To(BeTrue())
- Expect(len(iplds6.StorageNodes)).To(Equal(0))
- Expect(len(iplds6.StateNodes)).To(Equal(0))
- Expect(len(iplds6.Receipts)).To(Equal(1))
- Expect(iplds4.Receipts[0]).To(Equal(models.IPLDModel{
- BlockNumber: test_helpers.BlockNumber.String(),
- Data: test_helpers.Rct2IPLD,
- Key: test_helpers.Rct2CID.String(),
- }))
-
- iplds7, err := filterer.Filter(stateFilter, test_helpers.MockConvertedPayload)
- Expect(err).ToNot(HaveOccurred())
- Expect(iplds7).ToNot(BeNil())
- Expect(iplds7.BlockNumber.Int64()).To(Equal(test_helpers.MockIPLDs.BlockNumber.Int64()))
- Expect(iplds7.Header).To(Equal(models.IPLDModel{}))
- Expect(len(iplds7.Uncles)).To(Equal(0))
- Expect(len(iplds7.Transactions)).To(Equal(0))
- Expect(len(iplds7.StorageNodes)).To(Equal(0))
- Expect(len(iplds7.Receipts)).To(Equal(0))
- Expect(len(iplds7.StateNodes)).To(Equal(1))
- Expect(iplds7.StateNodes[0].StateLeafKey.Bytes()).To(Equal(test_helpers.AccountLeafKey))
- Expect(iplds7.StateNodes[0].IPLD).To(Equal(models.IPLDModel{
- BlockNumber: test_helpers.BlockNumber.String(),
- Data: test_helpers.State2IPLD.RawData(),
- Key: test_helpers.State2IPLD.Cid().String(),
- }))
-
- iplds8, err := filterer.Filter(rctTopicsAndAddressFilterFail, test_helpers.MockConvertedPayload)
- Expect(err).ToNot(HaveOccurred())
- Expect(iplds8).ToNot(BeNil())
- Expect(iplds8.BlockNumber.Int64()).To(Equal(test_helpers.MockIPLDs.BlockNumber.Int64()))
- Expect(iplds8.Header).To(Equal(models.IPLDModel{}))
- Expect(len(iplds8.Uncles)).To(Equal(0))
- Expect(len(iplds8.Transactions)).To(Equal(0))
- Expect(len(iplds8.StorageNodes)).To(Equal(0))
- Expect(len(iplds8.StateNodes)).To(Equal(0))
- Expect(len(iplds8.Receipts)).To(Equal(0))
- })
- })
-})
diff --git a/pkg/eth/helpers.go b/pkg/eth/helpers.go
index cce23579..fcbf3cac 100644
--- a/pkg/eth/helpers.go
+++ b/pkg/eth/helpers.go
@@ -18,25 +18,8 @@ package eth
import (
"time"
-
- sdtypes "github.com/ethereum/go-ethereum/statediff/types"
)
-func ResolveToNodeType(nodeType int) sdtypes.NodeType {
- switch nodeType {
- case 0:
- return sdtypes.Branch
- case 1:
- return sdtypes.Extension
- case 2:
- return sdtypes.Leaf
- case 3:
- return sdtypes.Removed
- default:
- return sdtypes.Unknown
- }
-}
-
// Timestamp in milliseconds
func makeTimestamp() int64 {
return time.Now().UnixNano() / int64(time.Millisecond)
diff --git a/pkg/eth/interfaces.go b/pkg/eth/interfaces.go
deleted file mode 100644
index 9e2dcae3..00000000
--- a/pkg/eth/interfaces.go
+++ /dev/null
@@ -1,47 +0,0 @@
-// VulcanizeDB
-// Copyright © 2019 Vulcanize
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-package eth
-
-import (
- "context"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/core"
- "github.com/ethereum/go-ethereum/core/bloombits"
- "github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/event"
- "github.com/ethereum/go-ethereum/rpc"
-)
-
-// FilterBackend is the geth interface we need to satisfy to use their filters
-type FilterBackend interface {
- ChainDb() ethdb.Database
- HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error)
- HeaderByHash(ctx context.Context, blockHash common.Hash) (*types.Header, error)
- GetReceipts(ctx context.Context, blockHash common.Hash) (types.Receipts, error)
- GetLogs(ctx context.Context, blockHash common.Hash) ([][]*types.Log, error)
-
- SubscribeNewTxsEvent(chan<- core.NewTxsEvent) event.Subscription
- SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription
- SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription
- SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription
- SubscribePendingLogsEvent(ch chan<- []*types.Log) event.Subscription
-
- BloomStatus() (uint64, uint64)
- ServiceFilter(ctx context.Context, session *bloombits.MatcherSession)
-}
diff --git a/pkg/eth/ipld_fetcher.go b/pkg/eth/ipld_fetcher.go
deleted file mode 100644
index f734f012..00000000
--- a/pkg/eth/ipld_fetcher.go
+++ /dev/null
@@ -1,248 +0,0 @@
-// VulcanizeDB
-// Copyright © 2019 Vulcanize
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-package eth
-
-import (
- "errors"
- "fmt"
- "math/big"
- "strconv"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/statediff/indexer/models"
- "github.com/jmoiron/sqlx"
-)
-
-// Fetcher interface for substituting mocks in tests
-type Fetcher interface {
- Fetch(cids CIDWrapper) (*IPLDs, error)
-}
-
-// IPLDFetcher satisfies the IPLDFetcher interface for ethereum
-// It interfaces directly with PG-IPFS
-type IPLDFetcher struct {
- db *sqlx.DB
-}
-
-// NewIPLDFetcher creates a pointer to a new IPLDFetcher
-func NewIPLDFetcher(db *sqlx.DB) *IPLDFetcher {
- return &IPLDFetcher{
- db: db,
- }
-}
-
-// Fetch is the exported method for fetching and returning all the IPLDS specified in the CIDWrapper
-func (f *IPLDFetcher) Fetch(cids CIDWrapper) (*IPLDs, error) {
- log.Debug("fetching iplds")
- iplds := new(IPLDs)
- var ok bool
- iplds.TotalDifficulty, ok = new(big.Int).SetString(cids.Header.TotalDifficulty, 10)
- if !ok {
- return nil, errors.New("eth fetcher: unable to set total difficulty")
- }
- iplds.BlockNumber = cids.BlockNumber
-
- tx, err := f.db.Beginx()
- if err != nil {
- return nil, err
- }
- defer func() {
- if p := recover(); p != nil {
- shared.Rollback(tx)
- panic(p)
- } else if err != nil {
- shared.Rollback(tx)
- } else {
- err = tx.Commit()
- }
- }()
-
- iplds.Header, err = f.FetchHeader(tx, cids.Header)
- if err != nil {
- return nil, fmt.Errorf("eth pg fetcher: header fetching error: %s", err.Error())
- }
- iplds.Uncles, err = f.FetchUncles(tx, cids.Uncles)
- if err != nil {
- return nil, fmt.Errorf("eth pg fetcher: uncle fetching error: %s", err.Error())
- }
- iplds.Transactions, err = f.FetchTrxs(tx, cids.Transactions)
- if err != nil {
- return nil, fmt.Errorf("eth pg fetcher: transaction fetching error: %s", err.Error())
- }
- iplds.Receipts, err = f.FetchRcts(tx, cids.Receipts)
- if err != nil {
- return nil, fmt.Errorf("eth pg fetcher: receipt fetching error: %s", err.Error())
- }
- iplds.StateNodes, err = f.FetchState(tx, cids.StateNodes)
- if err != nil {
- return nil, fmt.Errorf("eth pg fetcher: state fetching error: %s", err.Error())
- }
- iplds.StorageNodes, err = f.FetchStorage(tx, cids.StorageNodes)
- if err != nil {
- return nil, fmt.Errorf("eth pg fetcher: storage fetching error: %s", err.Error())
- }
- return iplds, err
-}
-
-// FetchHeader fetches header
-func (f *IPLDFetcher) FetchHeader(tx *sqlx.Tx, c models.HeaderModel) (models.IPLDModel, error) {
- log.Debug("fetching header ipld")
- blockNumber, err := strconv.ParseUint(c.BlockNumber, 10, 64)
- if err != nil {
- return models.IPLDModel{}, err
- }
-
- headerBytes, err := shared.FetchIPLDByMhKeyAndBlockNumber(tx, c.MhKey, blockNumber)
- if err != nil {
- return models.IPLDModel{}, err
- }
- return models.IPLDModel{
- BlockNumber: c.BlockNumber,
- Data: headerBytes,
- Key: c.CID,
- }, nil
-}
-
-// FetchUncles fetches uncles
-func (f *IPLDFetcher) FetchUncles(tx *sqlx.Tx, cids []models.UncleModel) ([]models.IPLDModel, error) {
- log.Debug("fetching uncle iplds")
- uncleIPLDs := make([]models.IPLDModel, len(cids))
- for i, c := range cids {
- blockNumber, err := strconv.ParseUint(c.BlockNumber, 10, 64)
- if err != nil {
- return nil, err
- }
- uncleBytes, err := shared.FetchIPLDByMhKeyAndBlockNumber(tx, c.MhKey, blockNumber)
- if err != nil {
- return nil, err
- }
- uncleIPLDs[i] = models.IPLDModel{
- BlockNumber: c.BlockNumber,
- Data: uncleBytes,
- Key: c.CID,
- }
- }
- return uncleIPLDs, nil
-}
-
-// FetchTrxs fetches transactions
-func (f *IPLDFetcher) FetchTrxs(tx *sqlx.Tx, cids []models.TxModel) ([]models.IPLDModel, error) {
- log.Debug("fetching transaction iplds")
- trxIPLDs := make([]models.IPLDModel, len(cids))
- for i, c := range cids {
- blockNumber, err := strconv.ParseUint(c.BlockNumber, 10, 64)
- if err != nil {
- return nil, err
- }
- txBytes, err := shared.FetchIPLDByMhKeyAndBlockNumber(tx, c.MhKey, blockNumber)
- if err != nil {
- return nil, err
- }
- trxIPLDs[i] = models.IPLDModel{
- BlockNumber: c.BlockNumber,
- Data: txBytes,
- Key: c.CID,
- }
- }
- return trxIPLDs, nil
-}
-
-// FetchRcts fetches receipts
-func (f *IPLDFetcher) FetchRcts(tx *sqlx.Tx, cids []models.ReceiptModel) ([]models.IPLDModel, error) {
- log.Debug("fetching receipt iplds")
- rctIPLDs := make([]models.IPLDModel, len(cids))
- for i, c := range cids {
- blockNumber, err := strconv.ParseUint(c.BlockNumber, 10, 64)
- if err != nil {
- return nil, err
- }
- rctBytes, err := shared.FetchIPLDByMhKeyAndBlockNumber(tx, c.LeafMhKey, blockNumber)
- if err != nil {
- return nil, err
- }
- //nodeVal, err := DecodeLeafNode(rctBytes)
- rctIPLDs[i] = models.IPLDModel{
- BlockNumber: c.BlockNumber,
- Data: rctBytes,
- Key: c.LeafCID,
- }
- }
- return rctIPLDs, nil
-}
-
-// FetchState fetches state nodes
-func (f *IPLDFetcher) FetchState(tx *sqlx.Tx, cids []models.StateNodeModel) ([]StateNode, error) {
- log.Debug("fetching state iplds")
- stateNodes := make([]StateNode, 0, len(cids))
- for _, stateNode := range cids {
- if stateNode.CID == "" {
- continue
- }
- blockNumber, err := strconv.ParseUint(stateNode.BlockNumber, 10, 64)
- if err != nil {
- return nil, err
- }
- stateBytes, err := shared.FetchIPLDByMhKeyAndBlockNumber(tx, stateNode.MhKey, blockNumber)
- if err != nil {
- return nil, err
- }
- stateNodes = append(stateNodes, StateNode{
- IPLD: models.IPLDModel{
- BlockNumber: stateNode.BlockNumber,
- Data: stateBytes,
- Key: stateNode.CID,
- },
- StateLeafKey: common.HexToHash(stateNode.StateKey),
- Type: ResolveToNodeType(stateNode.NodeType),
- Path: stateNode.Path,
- })
- }
- return stateNodes, nil
-}
-
-// FetchStorage fetches storage nodes
-func (f *IPLDFetcher) FetchStorage(tx *sqlx.Tx, cids []models.StorageNodeWithStateKeyModel) ([]StorageNode, error) {
- log.Debug("fetching storage iplds")
- storageNodes := make([]StorageNode, 0, len(cids))
- for _, storageNode := range cids {
- if storageNode.CID == "" || storageNode.StateKey == "" {
- continue
- }
- blockNumber, err := strconv.ParseUint(storageNode.BlockNumber, 10, 64)
- if err != nil {
- return nil, err
- }
- storageBytes, err := shared.FetchIPLDByMhKeyAndBlockNumber(tx, storageNode.MhKey, blockNumber)
- if err != nil {
- return nil, err
- }
- storageNodes = append(storageNodes, StorageNode{
- IPLD: models.IPLDModel{
- BlockNumber: storageNode.BlockNumber,
- Data: storageBytes,
- Key: storageNode.CID,
- },
- StateLeafKey: common.HexToHash(storageNode.StateKey),
- StorageLeafKey: common.HexToHash(storageNode.StorageKey),
- Type: ResolveToNodeType(storageNode.NodeType),
- Path: storageNode.Path,
- })
- }
- return storageNodes, nil
-}
diff --git a/pkg/eth/ipld_fetcher_test.go b/pkg/eth/ipld_fetcher_test.go
deleted file mode 100644
index 38d7d84c..00000000
--- a/pkg/eth/ipld_fetcher_test.go
+++ /dev/null
@@ -1,75 +0,0 @@
-// VulcanizeDB
-// Copyright © 2019 Vulcanize
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-package eth_test
-
-import (
- "github.com/ethereum/go-ethereum/params"
- "github.com/ethereum/go-ethereum/statediff/indexer/interfaces"
- "github.com/jmoiron/sqlx"
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth/test_helpers"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
-)
-
-var _ = Describe("IPLDFetcher", func() {
- var (
- db *sqlx.DB
- pubAndIndexer interfaces.StateDiffIndexer
- fetcher *eth.IPLDFetcher
- )
- Describe("Fetch", func() {
- BeforeEach(func() {
- var (
- err error
- tx interfaces.Batch
- )
- db = shared.SetupDB()
- pubAndIndexer = shared.SetupTestStateDiffIndexer(ctx, params.TestChainConfig, test_helpers.Genesis.Hash())
-
- tx, err = pubAndIndexer.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
- for _, node := range test_helpers.MockStateNodes {
- err = pubAndIndexer.PushStateNode(tx, node, test_helpers.MockBlock.Hash().String())
- Expect(err).ToNot(HaveOccurred())
- }
-
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
- fetcher = eth.NewIPLDFetcher(db)
-
- })
- AfterEach(func() {
- shared.TearDownDB(db)
- })
-
- It("Fetches and returns IPLDs for the CIDs provided in the CIDWrapper", func() {
- iplds, err := fetcher.Fetch(*test_helpers.MockCIDWrapper)
- Expect(err).ToNot(HaveOccurred())
- Expect(iplds).ToNot(BeNil())
- Expect(iplds.TotalDifficulty).To(Equal(test_helpers.MockConvertedPayload.TotalDifficulty))
- Expect(iplds.BlockNumber).To(Equal(test_helpers.MockConvertedPayload.Block.Number()))
- Expect(iplds.Header).To(Equal(test_helpers.MockIPLDs.Header))
- Expect(len(iplds.Uncles)).To(Equal(0))
- Expect(iplds.Transactions).To(Equal(test_helpers.MockIPLDs.Transactions))
- Expect(iplds.Receipts).To(Equal(test_helpers.MockIPLDs.Receipts))
- Expect(iplds.StateNodes).To(Equal(test_helpers.MockIPLDs.StateNodes))
- Expect(iplds.StorageNodes).To(Equal(test_helpers.MockIPLDs.StorageNodes))
- })
- })
-})
diff --git a/pkg/eth/ipld_retriever.go b/pkg/eth/ipld_retriever.go
deleted file mode 100644
index 3cfb6530..00000000
--- a/pkg/eth/ipld_retriever.go
+++ /dev/null
@@ -1,721 +0,0 @@
-// VulcanizeDB
-// Copyright © 2019 Vulcanize
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-package eth
-
-import (
- "fmt"
- "strconv"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
- "github.com/ethereum/go-ethereum/statediff/trie_helpers"
- sdtypes "github.com/ethereum/go-ethereum/statediff/types"
- "github.com/jmoiron/sqlx"
-
- "github.com/ethereum/go-ethereum/common"
- "github.com/ethereum/go-ethereum/crypto"
- "github.com/ethereum/go-ethereum/rlp"
- "github.com/lib/pq"
-)
-
-const (
- RetrieveHeadersByHashesPgStr = `SELECT cid, data
- FROM eth.header_cids
- INNER JOIN public.blocks ON (
- header_cids.mh_key = blocks.key
- AND header_cids.block_number = blocks.block_number
- )
- WHERE block_hash = ANY($1::VARCHAR(66)[])`
- RetrieveHeadersByBlockNumberPgStr = `SELECT cid, data
- FROM eth.header_cids
- INNER JOIN public.blocks ON (
- header_cids.mh_key = blocks.key
- AND header_cids.block_number = blocks.block_number
- )
- WHERE header_cids.block_number = $1`
- RetrieveHeaderByHashPgStr = `SELECT cid, data
- FROM eth.header_cids
- INNER JOIN public.blocks ON (
- header_cids.mh_key = blocks.key
- AND header_cids.block_number = blocks.block_number
- )
- WHERE block_hash = $1`
- RetrieveUnclesByHashesPgStr = `SELECT cid, data
- FROM eth.uncle_cids
- INNER JOIN public.blocks ON (
- uncle_cids.mh_key = blocks.key
- AND uncle_cids.block_number = blocks.block_number
- )
- WHERE block_hash = ANY($1::VARCHAR(66)[])`
- RetrieveUnclesPgStr = `SELECT uncle_cids.cid, data
- FROM eth.uncle_cids
- INNER JOIN eth.header_cids ON (
- uncle_cids.header_id = header_cids.block_hash
- AND uncle_cids.block_number = header_cids.block_number
- )
- INNER JOIN public.blocks ON (
- uncle_cids.mh_key = blocks.key
- AND uncle_cids.block_number = blocks.block_number
- )
- WHERE header_cids.block_hash = $1
- AND header_cids.block_number = $2
- ORDER BY uncle_cids.parent_hash`
- RetrieveUnclesByBlockHashPgStr = `SELECT uncle_cids.cid, data
- FROM eth.uncle_cids
- INNER JOIN eth.header_cids ON (
- uncle_cids.header_id = header_cids.block_hash
- AND uncle_cids.block_number = header_cids.block_number
- )
- INNER JOIN public.blocks ON (
- uncle_cids.mh_key = blocks.key
- AND uncle_cids.block_number = blocks.block_number
- )
- WHERE header_cids.block_hash = $1
- ORDER BY uncle_cids.parent_hash`
- RetrieveUnclesByBlockNumberPgStr = `SELECT uncle_cids.cid, data
- FROM eth.uncle_cids
- INNER JOIN eth.header_cids ON (
- uncle_cids.header_id = header_cids.block_hash
- AND uncle_cids.block_number = header_cids.block_number
- )
- INNER JOIN public.blocks ON (
- uncle_cids.mh_key = blocks.key
- AND uncle_cids.block_number = blocks.block_number
- )
- WHERE header_cids.block_number = $1`
- RetrieveUncleByHashPgStr = `SELECT cid, data
- FROM eth.uncle_cids
- INNER JOIN public.blocks ON (
- uncle_cids.mh_key = blocks.key
- AND uncle_cids.block_number = blocks.block_number
- )
- WHERE block_hash = $1`
- RetrieveTransactionsByHashesPgStr = `SELECT DISTINCT ON (tx_hash) cid, data
- FROM eth.transaction_cids
- INNER JOIN public.blocks ON (
- transaction_cids.mh_key = blocks.key
- AND transaction_cids.block_number = blocks.block_number
- )
- WHERE tx_hash = ANY($1::VARCHAR(66)[])`
- RetrieveTransactionsPgStr = `SELECT transaction_cids.cid, data
- FROM eth.transaction_cids
- INNER JOIN eth.header_cids ON (
- transaction_cids.header_id = header_cids.block_hash
- AND transaction_cids.block_number = header_cids.block_number
- )
- INNER JOIN public.blocks ON (
- transaction_cids.mh_key = blocks.key
- AND transaction_cids.block_number = blocks.block_number
- )
- WHERE block_hash = $1
- AND header_cids.block_number = $2
- ORDER BY eth.transaction_cids.index ASC`
- RetrieveTransactionsByBlockHashPgStr = `SELECT transaction_cids.cid, data
- FROM eth.transaction_cids
- INNER JOIN eth.header_cids ON (
- transaction_cids.header_id = header_cids.block_hash
- AND transaction_cids.block_number = header_cids.block_number
- )
- INNER JOIN public.blocks ON (
- transaction_cids.mh_key = blocks.key
- AND transaction_cids.block_number = blocks.block_number
- )
- WHERE block_hash = $1
- ORDER BY eth.transaction_cids.index ASC`
- RetrieveTransactionsByBlockNumberPgStr = `SELECT transaction_cids.cid, data
- FROM eth.transaction_cids
- INNER JOIN eth.header_cids ON (
- transaction_cids.header_id = header_cids.block_hash
- AND transaction_cids.block_number = header_cids.block_number
- )
- INNER JOIN public.blocks ON (
- transaction_cids.mh_key = blocks.key
- AND transaction_cids.block_number = blocks.block_number
- )
- WHERE header_cids.block_number = $1
- AND block_hash = (SELECT canonical_header_hash(header_cids.block_number))
- ORDER BY eth.transaction_cids.index ASC`
- RetrieveTransactionByHashPgStr = `SELECT DISTINCT ON (tx_hash) cid, data
- FROM eth.transaction_cids
- INNER JOIN public.blocks ON (
- transaction_cids.mh_key = blocks.key
- AND transaction_cids.block_number = blocks.block_number
- )
- WHERE tx_hash = $1`
- RetrieveReceiptsByTxHashesPgStr = `SELECT receipt_cids.leaf_cid, data
- FROM eth.receipt_cids
- INNER JOIN eth.transaction_cids ON (
- receipt_cids.tx_id = transaction_cids.tx_hash
- AND receipt_cids.header_id = transaction_cids.header_id
- AND receipt_cids.block_number = transaction_cids.block_number
- )
- INNER JOIN public.blocks ON (
- receipt_cids.leaf_mh_key = blocks.key
- AND receipt_cids.block_number = blocks.block_number
- )
- WHERE tx_hash = ANY($1::VARCHAR(66)[])
- AND transaction_cids.header_id = (SELECT canonical_header_hash(transaction_cids.block_number))`
- RetrieveReceiptsPgStr = `SELECT receipt_cids.leaf_cid, data, eth.transaction_cids.tx_hash
- FROM eth.receipt_cids
- INNER JOIN eth.transaction_cids ON (
- receipt_cids.tx_id = transaction_cids.tx_hash
- AND receipt_cids.header_id = transaction_cids.header_id
- AND receipt_cids.block_number = transaction_cids.block_number
- )
- INNER JOIN eth.header_cids ON (
- transaction_cids.header_id = header_cids.block_hash
- AND transaction_cids.block_number = header_cids.block_number
- )
- INNER JOIN public.blocks ON (
- receipt_cids.leaf_mh_key = blocks.key
- AND receipt_cids.block_number = blocks.block_number
- )
- WHERE block_hash = $1
- AND header_cids.block_number = $2
- ORDER BY eth.transaction_cids.index ASC`
- RetrieveReceiptsByBlockHashPgStr = `SELECT receipt_cids.leaf_cid, data, eth.transaction_cids.tx_hash
- FROM eth.receipt_cids
- INNER JOIN eth.transaction_cids ON (
- receipt_cids.tx_id = transaction_cids.tx_hash
- AND receipt_cids.header_id = transaction_cids.header_id
- AND receipt_cids.block_number = transaction_cids.block_number
- )
- INNER JOIN eth.header_cids ON (
- transaction_cids.header_id = header_cids.block_hash
- AND transaction_cids.block_number = header_cids.block_number
- )
- INNER JOIN public.blocks ON (
- receipt_cids.leaf_mh_key = blocks.key
- AND receipt_cids.block_number = blocks.block_number
- )
- WHERE block_hash = $1
- ORDER BY eth.transaction_cids.index ASC`
- RetrieveReceiptsByBlockNumberPgStr = `SELECT receipt_cids.leaf_cid, data
- FROM eth.receipt_cids
- INNER JOIN eth.transaction_cids ON (
- receipt_cids.tx_id = transaction_cids.tx_hash
- AND receipt_cids.header_id = transaction_cids.header_id
- AND receipt_cids.block_number = transaction_cids.block_number
- )
- INNER JOIN eth.header_cids ON (
- transaction_cids.header_id = header_cids.block_hash
- AND transaction_cids.block_number = header_cids.block_number
- )
- INNER JOIN public.blocks ON (
- receipt_cids.leaf_mh_key = blocks.key
- AND receipt_cids.block_number = blocks.block_number
- )
- WHERE header_cids.block_number = $1
- AND block_hash = (SELECT canonical_header_hash(header_cids.block_number))
- ORDER BY eth.transaction_cids.index ASC`
- RetrieveReceiptByTxHashPgStr = `SELECT receipt_cids.leaf_cid, data
- FROM eth.receipt_cids
- INNER JOIN eth.transaction_cids ON (
- receipt_cids.tx_id = transaction_cids.tx_hash
- AND receipt_cids.header_id = transaction_cids.header_id
- AND receipt_cids.block_number = transaction_cids.block_number
- )
- INNER JOIN public.blocks ON (
- receipt_cids.leaf_mh_key = blocks.key
- AND receipt_cids.block_number = blocks.block_number
- )
- WHERE tx_hash = $1
- AND transaction_cids.header_id = (SELECT canonical_header_hash(transaction_cids.block_number))`
- RetrieveAccountByLeafKeyAndBlockHashPgStr = `SELECT state_cids.cid, state_cids.mh_key, state_cids.block_number, state_cids.node_type
- FROM eth.state_cids
- INNER JOIN eth.header_cids ON (
- state_cids.header_id = header_cids.block_hash
- AND state_cids.block_number = header_cids.block_number
- )
- WHERE state_leaf_key = $1
- AND header_cids.block_number <= (SELECT block_number
- FROM eth.header_cids
- WHERE block_hash = $2)
- AND header_cids.block_hash = (SELECT canonical_header_hash(header_cids.block_number))
- ORDER BY header_cids.block_number DESC
- LIMIT 1`
- RetrieveAccountByLeafKeyAndBlockNumberPgStr = `SELECT state_cids.cid, state_cids.mh_key, state_cids.node_type
- FROM eth.state_cids
- INNER JOIN eth.header_cids ON (
- state_cids.header_id = header_cids.block_hash
- AND state_cids.block_number = header_cids.block_number
- )
- WHERE state_leaf_key = $1
- AND header_cids.block_number <= $2
- ORDER BY header_cids.block_number DESC
- LIMIT 1`
- RetrieveStorageLeafByAddressHashAndLeafKeyAndBlockNumberPgStr = `SELECT cid, mh_key, block_number, node_type, state_leaf_removed FROM get_storage_at_by_number($1, $2, $3)`
- RetrieveStorageLeafByAddressHashAndLeafKeyAndBlockHashPgStr = `SELECT cid, mh_key, block_number, node_type, state_leaf_removed FROM get_storage_at_by_hash($1, $2, $3)`
-)
-
-var EmptyNodeValue = make([]byte, common.HashLength)
-
-type rctIpldResult struct {
- LeafCID string `db:"leaf_cid"`
- Data []byte `db:"data"`
- TxHash string `db:"tx_hash"`
-}
-
-type ipldResult struct {
- CID string `db:"cid"`
- Data []byte `db:"data"`
- TxHash string `db:"tx_hash"`
-}
-
-type IPLDRetriever struct {
- db *sqlx.DB
-}
-
-func NewIPLDRetriever(db *sqlx.DB) *IPLDRetriever {
- return &IPLDRetriever{
- db: db,
- }
-}
-
-// RetrieveHeadersByHashes returns the cids and rlp bytes for the headers corresponding to the provided block hashes
-func (r *IPLDRetriever) RetrieveHeadersByHashes(hashes []common.Hash) ([]string, [][]byte, error) {
- headerResults := make([]ipldResult, 0)
- hashStrs := make([]string, len(hashes))
- for i, hash := range hashes {
- hashStrs[i] = hash.Hex()
- }
- if err := r.db.Select(&headerResults, RetrieveHeadersByHashesPgStr, pq.Array(hashStrs)); err != nil {
- return nil, nil, err
- }
- cids := make([]string, len(headerResults))
- headers := make([][]byte, len(headerResults))
- for i, res := range headerResults {
- cids[i] = res.CID
- headers[i] = res.Data
- }
- return cids, headers, nil
-}
-
-// RetrieveHeadersByBlockNumber returns the cids and rlp bytes for the headers corresponding to the provided block number
-// This can return more than one result since there can be more than one header (non-canonical headers)
-func (r *IPLDRetriever) RetrieveHeadersByBlockNumber(number uint64) ([]string, [][]byte, error) {
- headerResults := make([]ipldResult, 0)
- if err := r.db.Select(&headerResults, RetrieveHeadersByBlockNumberPgStr, number); err != nil {
- return nil, nil, err
- }
- cids := make([]string, len(headerResults))
- headers := make([][]byte, len(headerResults))
- for i, res := range headerResults {
- cids[i] = res.CID
- headers[i] = res.Data
- }
- return cids, headers, nil
-}
-
-// RetrieveHeaderByHash returns the cid and rlp bytes for the header corresponding to the provided block hash
-func (r *IPLDRetriever) RetrieveHeaderByHash(tx *sqlx.Tx, hash common.Hash) (string, []byte, error) {
- headerResult := new(ipldResult)
- return headerResult.CID, headerResult.Data, tx.Get(headerResult, RetrieveHeaderByHashPgStr, hash.Hex())
-}
-
-// RetrieveUnclesByHashes returns the cids and rlp bytes for the uncles corresponding to the provided uncle hashes
-func (r *IPLDRetriever) RetrieveUnclesByHashes(hashes []common.Hash) ([]string, [][]byte, error) {
- uncleResults := make([]ipldResult, 0)
- hashStrs := make([]string, len(hashes))
- for i, hash := range hashes {
- hashStrs[i] = hash.Hex()
- }
- if err := r.db.Select(&uncleResults, RetrieveUnclesByHashesPgStr, pq.Array(hashStrs)); err != nil {
- return nil, nil, err
- }
- cids := make([]string, len(uncleResults))
- uncles := make([][]byte, len(uncleResults))
- for i, res := range uncleResults {
- cids[i] = res.CID
- uncles[i] = res.Data
- }
- return cids, uncles, nil
-}
-
-// RetrieveUncles returns the cids and rlp bytes for the uncles corresponding to the provided block hash, number (of non-omner root block)
-func (r *IPLDRetriever) RetrieveUncles(tx *sqlx.Tx, hash common.Hash, number uint64) ([]string, [][]byte, error) {
- uncleResults := make([]ipldResult, 0)
- if err := tx.Select(&uncleResults, RetrieveUnclesPgStr, hash.Hex(), number); err != nil {
- return nil, nil, err
- }
- cids := make([]string, len(uncleResults))
- uncles := make([][]byte, len(uncleResults))
- for i, res := range uncleResults {
- cids[i] = res.CID
- uncles[i] = res.Data
- }
- return cids, uncles, nil
-}
-
-// RetrieveUnclesByBlockHash returns the cids and rlp bytes for the uncles corresponding to the provided block hash (of non-omner root block)
-func (r *IPLDRetriever) RetrieveUnclesByBlockHash(tx *sqlx.Tx, hash common.Hash) ([]string, [][]byte, error) {
- uncleResults := make([]ipldResult, 0)
- if err := tx.Select(&uncleResults, RetrieveUnclesByBlockHashPgStr, hash.Hex()); err != nil {
- return nil, nil, err
- }
- cids := make([]string, len(uncleResults))
- uncles := make([][]byte, len(uncleResults))
- for i, res := range uncleResults {
- cids[i] = res.CID
- uncles[i] = res.Data
- }
- return cids, uncles, nil
-}
-
-// RetrieveUnclesByBlockNumber returns the cids and rlp bytes for the uncles corresponding to the provided block number (of non-omner root block)
-func (r *IPLDRetriever) RetrieveUnclesByBlockNumber(number uint64) ([]string, [][]byte, error) {
- uncleResults := make([]ipldResult, 0)
- if err := r.db.Select(&uncleResults, RetrieveUnclesByBlockNumberPgStr, number); err != nil {
- return nil, nil, err
- }
- cids := make([]string, len(uncleResults))
- uncles := make([][]byte, len(uncleResults))
- for i, res := range uncleResults {
- cids[i] = res.CID
- uncles[i] = res.Data
- }
- return cids, uncles, nil
-}
-
-// RetrieveUncleByHash returns the cid and rlp bytes for the uncle corresponding to the provided uncle hash
-func (r *IPLDRetriever) RetrieveUncleByHash(hash common.Hash) (string, []byte, error) {
- uncleResult := new(ipldResult)
- return uncleResult.CID, uncleResult.Data, r.db.Get(uncleResult, RetrieveUncleByHashPgStr, hash.Hex())
-}
-
-// RetrieveTransactionsByHashes returns the cids and rlp bytes for the transactions corresponding to the provided tx hashes
-func (r *IPLDRetriever) RetrieveTransactionsByHashes(hashes []common.Hash) ([]string, [][]byte, error) {
- txResults := make([]ipldResult, 0)
- hashStrs := make([]string, len(hashes))
- for i, hash := range hashes {
- hashStrs[i] = hash.Hex()
- }
- if err := r.db.Select(&txResults, RetrieveTransactionsByHashesPgStr, pq.Array(hashStrs)); err != nil {
- return nil, nil, err
- }
- cids := make([]string, len(txResults))
- txs := make([][]byte, len(txResults))
- for i, res := range txResults {
- cids[i] = res.CID
- txs[i] = res.Data
- }
- return cids, txs, nil
-}
-
-// RetrieveTransactions returns the cids and rlp bytes for the transactions corresponding to the provided block hash, number
-func (r *IPLDRetriever) RetrieveTransactions(tx *sqlx.Tx, hash common.Hash, number uint64) ([]string, [][]byte, error) {
- txResults := make([]ipldResult, 0)
- if err := tx.Select(&txResults, RetrieveTransactionsPgStr, hash.Hex(), number); err != nil {
- return nil, nil, err
- }
- cids := make([]string, len(txResults))
- txs := make([][]byte, len(txResults))
- for i, res := range txResults {
- cids[i] = res.CID
- txs[i] = res.Data
- }
- return cids, txs, nil
-}
-
-// RetrieveTransactionsByBlockHash returns the cids and rlp bytes for the transactions corresponding to the provided block hash
-func (r *IPLDRetriever) RetrieveTransactionsByBlockHash(tx *sqlx.Tx, hash common.Hash) ([]string, [][]byte, error) {
- txResults := make([]ipldResult, 0)
- if err := tx.Select(&txResults, RetrieveTransactionsByBlockHashPgStr, hash.Hex()); err != nil {
- return nil, nil, err
- }
- cids := make([]string, len(txResults))
- txs := make([][]byte, len(txResults))
- for i, res := range txResults {
- cids[i] = res.CID
- txs[i] = res.Data
- }
- return cids, txs, nil
-}
-
-// RetrieveTransactionsByBlockNumber returns the cids and rlp bytes for the transactions corresponding to the provided block number
-func (r *IPLDRetriever) RetrieveTransactionsByBlockNumber(number uint64) ([]string, [][]byte, error) {
- txResults := make([]ipldResult, 0)
- if err := r.db.Select(&txResults, RetrieveTransactionsByBlockNumberPgStr, number); err != nil {
- return nil, nil, err
- }
- cids := make([]string, len(txResults))
- txs := make([][]byte, len(txResults))
- for i, res := range txResults {
- cids[i] = res.CID
- txs[i] = res.Data
- }
- return cids, txs, nil
-}
-
-// RetrieveTransactionByTxHash returns the cid and rlp bytes for the transaction corresponding to the provided tx hash
-func (r *IPLDRetriever) RetrieveTransactionByTxHash(hash common.Hash) (string, []byte, error) {
- txResult := new(ipldResult)
- return txResult.CID, txResult.Data, r.db.Get(txResult, RetrieveTransactionByHashPgStr, hash.Hex())
-}
-
-// DecodeLeafNode decodes the leaf node data
-func DecodeLeafNode(node []byte) ([]byte, error) {
- var nodeElements []interface{}
- if err := rlp.DecodeBytes(node, &nodeElements); err != nil {
- return nil, err
- }
- ty, err := trie_helpers.CheckKeyType(nodeElements)
- if err != nil {
- return nil, err
- }
-
- if ty != sdtypes.Leaf {
- return nil, fmt.Errorf("expected leaf node but found %s", ty)
- }
- return nodeElements[1].([]byte), nil
-}
-
-// RetrieveReceiptsByTxHashes returns the cids and rlp bytes for the receipts corresponding to the provided tx hashes
-func (r *IPLDRetriever) RetrieveReceiptsByTxHashes(hashes []common.Hash) ([]string, [][]byte, error) {
- rctResults := make([]rctIpldResult, 0)
- hashStrs := make([]string, len(hashes))
- for i, hash := range hashes {
- hashStrs[i] = hash.Hex()
- }
- if err := r.db.Select(&rctResults, RetrieveReceiptsByTxHashesPgStr, pq.Array(hashStrs)); err != nil {
- return nil, nil, err
- }
- cids := make([]string, len(rctResults))
- rcts := make([][]byte, len(rctResults))
- for i, res := range rctResults {
- cids[i] = res.LeafCID
- nodeVal, err := DecodeLeafNode(res.Data)
- if err != nil {
- return nil, nil, err
- }
- rcts[i] = nodeVal
- }
- return cids, rcts, nil
-}
-
-// RetrieveReceipts returns the cids and rlp bytes for the receipts corresponding to the provided block hash, number.
-// cid returned corresponds to the leaf node data which contains the receipt.
-func (r *IPLDRetriever) RetrieveReceipts(tx *sqlx.Tx, hash common.Hash, number uint64) ([]string, [][]byte, []common.Hash, error) {
- rctResults := make([]rctIpldResult, 0)
- if err := tx.Select(&rctResults, RetrieveReceiptsPgStr, hash.Hex(), number); err != nil {
- return nil, nil, nil, err
- }
- cids := make([]string, len(rctResults))
- rcts := make([][]byte, len(rctResults))
- txs := make([]common.Hash, len(rctResults))
-
- for i, res := range rctResults {
- cids[i] = res.LeafCID
- nodeVal, err := DecodeLeafNode(res.Data)
- if err != nil {
- return nil, nil, nil, err
- }
- rcts[i] = nodeVal
- txs[i] = common.HexToHash(res.TxHash)
- }
-
- return cids, rcts, txs, nil
-}
-
-// RetrieveReceiptsByBlockHash returns the cids and rlp bytes for the receipts corresponding to the provided block hash.
-// cid returned corresponds to the leaf node data which contains the receipt.
-func (r *IPLDRetriever) RetrieveReceiptsByBlockHash(tx *sqlx.Tx, hash common.Hash) ([]string, [][]byte, []common.Hash, error) {
- rctResults := make([]rctIpldResult, 0)
- if err := tx.Select(&rctResults, RetrieveReceiptsByBlockHashPgStr, hash.Hex()); err != nil {
- return nil, nil, nil, err
- }
- cids := make([]string, len(rctResults))
- rcts := make([][]byte, len(rctResults))
- txs := make([]common.Hash, len(rctResults))
-
- for i, res := range rctResults {
- cids[i] = res.LeafCID
- nodeVal, err := DecodeLeafNode(res.Data)
- if err != nil {
- return nil, nil, nil, err
- }
- rcts[i] = nodeVal
- txs[i] = common.HexToHash(res.TxHash)
- }
-
- return cids, rcts, txs, nil
-}
-
-// RetrieveReceiptsByBlockNumber returns the cids and rlp bytes for the receipts corresponding to the provided block hash.
-// cid returned corresponds to the leaf node data which contains the receipt.
-func (r *IPLDRetriever) RetrieveReceiptsByBlockNumber(number uint64) ([]string, [][]byte, error) {
- rctResults := make([]rctIpldResult, 0)
- if err := r.db.Select(&rctResults, RetrieveReceiptsByBlockNumberPgStr, number); err != nil {
- return nil, nil, err
- }
- cids := make([]string, len(rctResults))
- rcts := make([][]byte, len(rctResults))
- for i, res := range rctResults {
- cids[i] = res.LeafCID
- nodeVal, err := DecodeLeafNode(res.Data)
- if err != nil {
- return nil, nil, err
- }
- rcts[i] = nodeVal
- }
- return cids, rcts, nil
-}
-
-// RetrieveReceiptByHash returns the cid and rlp bytes for the receipt corresponding to the provided tx hash.
-// cid returned corresponds to the leaf node data which contains the receipt.
-func (r *IPLDRetriever) RetrieveReceiptByHash(hash common.Hash) (string, []byte, error) {
- rctResult := new(rctIpldResult)
- if err := r.db.Select(&rctResult, RetrieveReceiptByTxHashPgStr, hash.Hex()); err != nil {
- return "", nil, err
- }
-
- nodeVal, err := DecodeLeafNode(rctResult.Data)
- if err != nil {
- return "", nil, err
- }
- return rctResult.LeafCID, nodeVal, nil
-}
-
-type nodeInfo struct {
- CID string `db:"cid"`
- MhKey string `db:"mh_key"`
- BlockNumber string `db:"block_number"`
- Data []byte `db:"data"`
- NodeType int `db:"node_type"`
- StateLeafRemoved bool `db:"state_leaf_removed"`
-}
-
-// RetrieveAccountByAddressAndBlockHash returns the cid and rlp bytes for the account corresponding to the provided address and block hash
-// TODO: ensure this handles deleted accounts appropriately
-func (r *IPLDRetriever) RetrieveAccountByAddressAndBlockHash(address common.Address, hash common.Hash) (string, []byte, error) {
- accountResult := new(nodeInfo)
- leafKey := crypto.Keccak256Hash(address.Bytes())
- if err := r.db.Get(accountResult, RetrieveAccountByLeafKeyAndBlockHashPgStr, leafKey.Hex(), hash.Hex()); err != nil {
- return "", nil, err
- }
-
- if accountResult.NodeType == sdtypes.Removed.Int() {
- return "", EmptyNodeValue, nil
- }
-
- blockNumber, err := strconv.ParseUint(accountResult.BlockNumber, 10, 64)
- if err != nil {
- return "", nil, err
- }
- accountResult.Data, err = shared.FetchIPLD(r.db, accountResult.MhKey, blockNumber)
- if err != nil {
- return "", nil, err
- }
-
- var i []interface{}
- if err := rlp.DecodeBytes(accountResult.Data, &i); err != nil {
- return "", nil, fmt.Errorf("error decoding state leaf node rlp: %s", err.Error())
- }
- if len(i) != 2 {
- return "", nil, fmt.Errorf("eth IPLDRetriever expected state leaf node rlp to decode into two elements")
- }
- return accountResult.CID, i[1].([]byte), nil
-}
-
-// RetrieveAccountByAddressAndBlockNumber returns the cid and rlp bytes for the account corresponding to the provided address and block number
-// This can return a non-canonical account
-func (r *IPLDRetriever) RetrieveAccountByAddressAndBlockNumber(address common.Address, number uint64) (string, []byte, error) {
- accountResult := new(nodeInfo)
- leafKey := crypto.Keccak256Hash(address.Bytes())
- if err := r.db.Get(accountResult, RetrieveAccountByLeafKeyAndBlockNumberPgStr, leafKey.Hex(), number); err != nil {
- return "", nil, err
- }
-
- if accountResult.NodeType == sdtypes.Removed.Int() {
- return "", EmptyNodeValue, nil
- }
-
- var err error
- accountResult.Data, err = shared.FetchIPLD(r.db, accountResult.MhKey, number)
- if err != nil {
- return "", nil, err
- }
-
- var i []interface{}
- if err := rlp.DecodeBytes(accountResult.Data, &i); err != nil {
- return "", nil, fmt.Errorf("error decoding state leaf node rlp: %s", err.Error())
- }
- if len(i) != 2 {
- return "", nil, fmt.Errorf("eth IPLDRetriever expected state leaf node rlp to decode into two elements")
- }
- return accountResult.CID, i[1].([]byte), nil
-}
-
-// RetrieveStorageAtByAddressAndStorageSlotAndBlockHash returns the cid and rlp bytes for the storage value corresponding to the provided address, storage slot, and block hash
-func (r *IPLDRetriever) RetrieveStorageAtByAddressAndStorageSlotAndBlockHash(address common.Address, key, hash common.Hash) (string, []byte, []byte, error) {
- storageResult := new(nodeInfo)
- stateLeafKey := crypto.Keccak256Hash(address.Bytes())
- storageHash := crypto.Keccak256Hash(key.Bytes())
- if err := r.db.Get(storageResult, RetrieveStorageLeafByAddressHashAndLeafKeyAndBlockHashPgStr, stateLeafKey.Hex(), storageHash.Hex(), hash.Hex()); err != nil {
- return "", nil, nil, err
- }
- if storageResult.StateLeafRemoved || storageResult.NodeType == sdtypes.Removed.Int() {
- return "", EmptyNodeValue, EmptyNodeValue, nil
- }
-
- blockNumber, err := strconv.ParseUint(storageResult.BlockNumber, 10, 64)
- if err != nil {
- return "", nil, nil, err
- }
- storageResult.Data, err = shared.FetchIPLD(r.db, storageResult.MhKey, blockNumber)
- if err != nil {
- return "", nil, nil, err
- }
-
- var i []interface{}
- if err := rlp.DecodeBytes(storageResult.Data, &i); err != nil {
- err = fmt.Errorf("error decoding storage leaf node rlp: %s", err.Error())
- return "", nil, nil, err
- }
- if len(i) != 2 {
- return "", nil, nil, fmt.Errorf("eth IPLDRetriever expected storage leaf node rlp to decode into two elements")
- }
- return storageResult.CID, storageResult.Data, i[1].([]byte), nil
-}
-
-// RetrieveStorageAtByAddressAndStorageKeyAndBlockNumber returns the cid and rlp bytes for the storage value corresponding to the provided address, storage key, and block number
-// This can retrun a non-canonical value
-func (r *IPLDRetriever) RetrieveStorageAtByAddressAndStorageKeyAndBlockNumber(address common.Address, storageLeafKey common.Hash, number uint64) (string, []byte, error) {
- storageResult := new(nodeInfo)
- stateLeafKey := crypto.Keccak256Hash(address.Bytes())
- if err := r.db.Get(storageResult, RetrieveStorageLeafByAddressHashAndLeafKeyAndBlockNumberPgStr, stateLeafKey.Hex(), storageLeafKey.Hex(), number); err != nil {
- return "", nil, err
- }
-
- if storageResult.StateLeafRemoved || storageResult.NodeType == sdtypes.Removed.Int() {
- return "", EmptyNodeValue, nil
- }
-
- var err error
- storageResult.Data, err = shared.FetchIPLD(r.db, storageResult.MhKey, number)
- if err != nil {
- return "", nil, err
- }
-
- var i []interface{}
- if err := rlp.DecodeBytes(storageResult.Data, &i); err != nil {
- return "", nil, fmt.Errorf("error decoding storage leaf node rlp: %s", err.Error())
- }
- if len(i) != 2 {
- return "", nil, fmt.Errorf("eth IPLDRetriever expected storage leaf node rlp to decode into two elements")
- }
- return storageResult.CID, i[1].([]byte), nil
-}
diff --git a/pkg/eth/node_types.go b/pkg/eth/node_types.go
new file mode 100644
index 00000000..24cc46f0
--- /dev/null
+++ b/pkg/eth/node_types.go
@@ -0,0 +1,102 @@
+package eth
+
+import (
+ "fmt"
+
+ "github.com/ethereum/go-ethereum/rlp"
+
+ "github.com/cerc-io/ipld-eth-statedb/trie_by_cid/trie"
+)
+
+// NodeType for explicitly setting type of node
+type NodeType string
+
+const (
+ Unknown NodeType = "Unknown"
+ Branch NodeType = "Branch"
+ Extension NodeType = "Extension"
+ Leaf NodeType = "Leaf"
+ Removed NodeType = "Removed" // used to represent paths which have been emptied
+)
+
+func (n NodeType) Int() int {
+ switch n {
+ case Branch:
+ return 0
+ case Extension:
+ return 1
+ case Leaf:
+ return 2
+ case Removed:
+ return 3
+ default:
+ return -1
+ }
+}
+
+// CheckKeyType checks what type of key we have
+func CheckKeyType(elements []interface{}) (NodeType, error) {
+ if len(elements) > 2 {
+ return Branch, nil
+ }
+ if len(elements) < 2 {
+ return Unknown, fmt.Errorf("node cannot be less than two elements in length")
+ }
+ switch elements[0].([]byte)[0] / 16 {
+ case '\x00':
+ return Extension, nil
+ case '\x01':
+ return Extension, nil
+ case '\x02':
+ return Leaf, nil
+ case '\x03':
+ return Leaf, nil
+ default:
+ return Unknown, fmt.Errorf("unknown hex prefix")
+ }
+}
+
+// StateNode holds the data for a single state diff node
+type StateNode struct {
+ NodeType NodeType `json:"nodeType" gencodec:"required"`
+ Path []byte `json:"path" gencodec:"required"`
+ NodeValue []byte `json:"value" gencodec:"required"`
+ StorageNodes []StorageNode `json:"storage"`
+ LeafKey []byte `json:"leafKey"`
+}
+
+// StorageNode holds the data for a single storage diff node
+type StorageNode struct {
+ NodeType NodeType `json:"nodeType" gencodec:"required"`
+ Path []byte `json:"path" gencodec:"required"`
+ NodeValue []byte `json:"value" gencodec:"required"`
+ LeafKey []byte `json:"leafKey"`
+}
+
+func ResolveNode(path []byte, node []byte, trieDB *trie.Database) (StateNode, []interface{}, error) {
+ var nodeElements []interface{}
+ if err := rlp.DecodeBytes(node, &nodeElements); err != nil {
+ return StateNode{}, nil, err
+ }
+ ty, err := CheckKeyType(nodeElements)
+ if err != nil {
+ return StateNode{}, nil, err
+ }
+
+ nodePath := make([]byte, len(path))
+ copy(nodePath, path)
+ return StateNode{
+ NodeType: ty,
+ Path: nodePath,
+ NodeValue: node,
+ }, nodeElements, nil
+}
+
+// ResolveNodeIt return the state diff node pointed by the iterator.
+func ResolveNodeIt(it trie.NodeIterator, trieDB *trie.Database) (StateNode, []interface{}, error) {
+ node, err := it.NodeBlob(), it.Error()
+ if err != nil {
+ return StateNode{}, nil, err
+ }
+ return ResolveNode(it.Path(), node, trieDB)
+}
diff --git a/pkg/eth/retriever.go b/pkg/eth/retriever.go
new file mode 100644
index 00000000..a369574b
--- /dev/null
+++ b/pkg/eth/retriever.go
@@ -0,0 +1,543 @@
+// VulcanizeDB
+// Copyright © 2019 Vulcanize
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+package eth
+
+import (
+ "bytes"
+ "fmt"
+ "math/big"
+ "strconv"
+
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/crypto"
+ "github.com/ethereum/go-ethereum/rlp"
+ "github.com/ethereum/go-ethereum/statediff/indexer/models"
+ "github.com/jmoiron/sqlx"
+ "github.com/lib/pq"
+ "gorm.io/driver/postgres"
+ "gorm.io/gorm"
+
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
+)
+
+// Retriever is used for fetching
+type Retriever struct {
+ db *sqlx.DB
+ gormDB *gorm.DB
+}
+
+type IPLDModelRecord struct {
+ models.IPLDModel
+}
+
+// TableName overrides the table name used by IPLD
+func (IPLDModelRecord) TableName() string {
+ return "ipld.blocks"
+}
+
+type HeaderCIDRecord struct {
+ CID string `gorm:"column:cid"`
+ BlockHash string `gorm:"primaryKey"`
+ BlockNumber string `gorm:"primaryKey"`
+ ParentHash string
+ Timestamp uint64
+ StateRoot string
+ TotalDifficulty string `gorm:"column:td"`
+ TxRoot string
+ RctRoot string `gorm:"column:receipt_root"`
+ UnclesHash string
+ Bloom []byte
+
+ // gorm doesn't check if foreign key exists in database.
+ // It is required to eager load relations using preload.
+ TransactionCIDs []TransactionCIDRecord `gorm:"foreignKey:HeaderID,BlockNumber;references:BlockHash,BlockNumber"`
+ IPLD IPLDModelRecord `gorm:"foreignKey:CID,BlockNumber;references:Key,BlockNumber"`
+}
+
+// TableName overrides the table name used by HeaderCIDRecord
+func (HeaderCIDRecord) TableName() string {
+ return "eth.header_cids"
+}
+
+type TransactionCIDRecord struct {
+ CID string `gorm:"column:cid"`
+ TxHash string `gorm:"primaryKey"`
+ BlockNumber string `gorm:"primaryKey"`
+ HeaderID string `gorm:"column:header_id"`
+ Index int64
+ Src string
+ Dst string
+ IPLD IPLDModelRecord `gorm:"foreignKey:CID,BlockNumber;references:Key,BlockNumber"`
+}
+
+type StateAccountRecord struct {
+ Nonce uint64 `db:"nonce"`
+ Balance string `db:"balance"`
+ Root string `db:"storage_root"`
+ CodeHash []byte `db:"code_hash"`
+ Removed bool `db:"removed"`
+}
+
+// TableName overrides the table name used by TransactionCIDRecord
+func (TransactionCIDRecord) TableName() string {
+ return "eth.transaction_cids"
+}
+
+// NewRetriever returns a pointer to a new Retriever which supports the Retriever interface
+func NewRetriever(db *sqlx.DB) *Retriever {
+ gormDB, err := gorm.Open(postgres.New(postgres.Config{
+ Conn: db,
+ }), &gorm.Config{})
+
+ if err != nil {
+ log.Error(err)
+ return nil
+ }
+
+ return &Retriever{
+ db: db,
+ gormDB: gormDB,
+ }
+}
+
+// RetrieveFirstBlockNumber is used to retrieve the first block number in the db
+func (r *Retriever) RetrieveFirstBlockNumber() (int64, error) {
+ var blockNumber int64
+ err := r.db.Get(&blockNumber, "SELECT block_number FROM ipld.blocks ORDER BY block_number ASC LIMIT 1")
+ return blockNumber, err
+}
+
+// RetrieveLastBlockNumber is used to retrieve the latest block number in the db
+func (r *Retriever) RetrieveLastBlockNumber() (int64, error) {
+ var blockNumber int64
+ err := r.db.Get(&blockNumber, "SELECT block_number FROM ipld.blocks ORDER BY block_number DESC LIMIT 1")
+ return blockNumber, err
+}
+
+func topicFilterCondition(id *int, topics [][]string, args []interface{}, pgStr string, first bool) (string, []interface{}) {
+ for i, topicSet := range topics {
+ if len(topicSet) == 0 {
+ continue
+ }
+
+ if !first {
+ pgStr += " AND"
+ } else {
+ first = false
+ }
+ pgStr += fmt.Sprintf(` eth.log_cids.topic%d = ANY ($%d)`, i, *id)
+ args = append(args, pq.Array(topicSet))
+ *id++
+ }
+ return pgStr, args
+}
+
+func logFilterCondition(id *int, pgStr string, args []interface{}, rctFilter ReceiptFilter) (string, []interface{}) {
+ if len(rctFilter.LogAddresses) > 0 {
+ pgStr += fmt.Sprintf(` AND eth.log_cids.address = ANY ($%d)`, *id)
+ args = append(args, pq.Array(rctFilter.LogAddresses))
+ *id++
+ }
+
+ // Filter on topics if there are any
+ if hasTopics(rctFilter.Topics) {
+ pgStr, args = topicFilterCondition(id, rctFilter.Topics, args, pgStr, false)
+ }
+
+ return pgStr, args
+}
+
+func receiptFilterConditions(id *int, pgStr string, args []interface{}, rctFilter ReceiptFilter, txHashes []string) (string, []interface{}) {
+ rctCond := " AND (receipt_cids.tx_id = ANY ( "
+ logQuery := "SELECT rct_id FROM eth.log_cids WHERE"
+ if len(rctFilter.LogAddresses) > 0 {
+ // Filter on log contract addresses if there are any
+ pgStr += fmt.Sprintf(`%s %s eth.log_cids.address = ANY ($%d)`, rctCond, logQuery, *id)
+ args = append(args, pq.Array(rctFilter.LogAddresses))
+ *id++
+
+ // Filter on topics if there are any
+ if hasTopics(rctFilter.Topics) {
+ pgStr, args = topicFilterCondition(id, rctFilter.Topics, args, pgStr, false)
+ }
+
+ pgStr += ")"
+
+ // Filter on txHashes if there are any, and we are matching txs
+ if rctFilter.MatchTxs && len(txHashes) > 0 {
+ pgStr += fmt.Sprintf(` OR receipt_cids.tx_id = ANY($%d)`, *id)
+ args = append(args, pq.Array(txHashes))
+ }
+ pgStr += ")"
+ } else { // If there are no contract addresses to filter on
+ // Filter on topics if there are any
+ if hasTopics(rctFilter.Topics) {
+ pgStr += rctCond + logQuery
+ pgStr, args = topicFilterCondition(id, rctFilter.Topics, args, pgStr, true)
+ pgStr += ")"
+ // Filter on txHashes if there are any, and we are matching txs
+ if rctFilter.MatchTxs && len(txHashes) > 0 {
+ pgStr += fmt.Sprintf(` OR receipt_cids.tx_id = ANY($%d)`, *id)
+ args = append(args, pq.Array(txHashes))
+ }
+ pgStr += ")"
+ } else if rctFilter.MatchTxs && len(txHashes) > 0 {
+ // If there are no contract addresses or topics to filter on,
+ // Filter on txHashes if there are any, and we are matching txs
+ pgStr += fmt.Sprintf(` AND receipt_cids.tx_id = ANY($%d)`, *id)
+ args = append(args, pq.Array(txHashes))
+ }
+ }
+
+ return pgStr, args
+}
+
+// RetrieveFilteredGQLLogs retrieves and returns all the log CIDs provided blockHash that conform to the provided
+// filter parameters.
+func (r *Retriever) RetrieveFilteredGQLLogs(tx *sqlx.Tx, rctFilter ReceiptFilter, blockHash *common.Hash, blockNumber *big.Int) ([]LogResult, error) {
+ log.Debug("retrieving log cids for receipt ids with block hash", blockHash.String())
+ args := make([]interface{}, 0, 4)
+ id := 1
+ pgStr := RetrieveFilteredGQLLogs
+ args = append(args, blockHash.String())
+ id++
+
+ if blockNumber != nil {
+ pgStr += ` AND receipt_cids.block_number = $2`
+ id++
+ args = append(args, blockNumber.Int64())
+ }
+
+ pgStr, args = logFilterCondition(&id, pgStr, args, rctFilter)
+ pgStr += ` ORDER BY log_cids.index`
+
+ logs := make([]LogResult, 0)
+ err := tx.Select(&logs, pgStr, args...)
+ if err != nil {
+ return nil, err
+ }
+
+ return logs, nil
+}
+
+// RetrieveFilteredLogs retrieves and returns all the log CIDs provided blockHeight or blockHash that conform to the provided
+// filter parameters.
+func (r *Retriever) RetrieveFilteredLogs(tx *sqlx.Tx, rctFilter ReceiptFilter, blockNumber int64, blockHash *common.Hash) ([]LogResult, error) {
+ log.Debug("retrieving log cids for receipt ids")
+ args := make([]interface{}, 0, 4)
+ pgStr := RetrieveFilteredLogs
+ id := 1
+ if blockNumber > 0 {
+ pgStr += fmt.Sprintf(` AND header_cids.block_number = $%d`, id)
+ args = append(args, blockNumber)
+ id++
+ }
+ if blockHash != nil {
+ pgStr += fmt.Sprintf(` AND header_cids.block_hash = $%d`, id)
+ args = append(args, blockHash.String())
+ id++
+ }
+
+ pgStr, args = logFilterCondition(&id, pgStr, args, rctFilter)
+ pgStr += ` ORDER BY log_cids.index`
+
+ logs := make([]LogResult, 0)
+ err := tx.Select(&logs, pgStr, args...)
+ if err != nil {
+ return nil, err
+ }
+ // decode logs and extract original contract Data
+ for i, log := range logs {
+ var buf []interface{}
+ r := bytes.NewReader(log.LogLeafData)
+ if err := rlp.Decode(r, &buf); err != nil {
+ return nil, err
+ }
+ logs[i].Data = buf[2].([]byte)
+ }
+
+ return logs, nil
+}
+
+func hasTopics(topics [][]string) bool {
+ for _, topicSet := range topics {
+ if len(topicSet) > 0 {
+ return true
+ }
+ }
+ return false
+}
+
+// RetrieveBlockNumberByHash returns the block number for the given block hash
+func (r *Retriever) RetrieveBlockNumberByHash(tx *sqlx.Tx, blockHash common.Hash) (uint64, error) {
+ log.Debug("retrieving block number for block hash ", blockHash.String())
+ pgStr := `SELECT CAST(block_number as TEXT) FROM eth.header_cids WHERE block_hash = $1`
+ var blockNumberStr string
+ if err := tx.Get(&blockNumberStr, pgStr, blockHash.String()); err != nil {
+ return 0, err
+ }
+ return strconv.ParseUint(blockNumberStr, 10, 64)
+}
+
+// RetrieveHeaderAndTxCIDsByBlockNumber retrieves header CIDs and their associated tx CIDs by block number
+func (r *Retriever) RetrieveHeaderAndTxCIDsByBlockNumber(blockNumber int64) ([]HeaderCIDRecord, error) {
+ log.Debug("retrieving header cids and tx cids for block number ", blockNumber)
+
+ var headerCIDs []HeaderCIDRecord
+
+ // https://github.com/go-gorm/gorm/issues/4083#issuecomment-778883283
+ // Will use join for TransactionCIDs once preload for 1:N is supported.
+ err := r.gormDB.Preload("TransactionCIDs", func(tx *gorm.DB) *gorm.DB {
+ return tx.Select("cid", "tx_hash", "index", "src", "dst", "header_id", "block_number")
+ }).Joins("IPLD").Find(&headerCIDs, "header_cids.block_number = ?", blockNumber).Error
+
+ if err != nil {
+ log.Error("header cid retrieval error")
+ return nil, err
+ }
+
+ return headerCIDs, nil
+}
+
+// RetrieveHeaderAndTxCIDsByBlockHash retrieves header CID and their associated tx CIDs by block hash (and optionally block number)
+func (r *Retriever) RetrieveHeaderAndTxCIDsByBlockHash(blockHash common.Hash, blockNumber *big.Int) (HeaderCIDRecord, error) {
+ log.Debug("retrieving header cid and tx cids for block hash ", blockHash.String())
+
+ var headerCIDs []HeaderCIDRecord
+
+ conditions := map[string]interface{}{"block_hash": blockHash.String()}
+ if blockNumber != nil {
+ conditions["header_cids.block_number"] = blockNumber.Int64()
+ }
+
+ // https://github.com/go-gorm/gorm/issues/4083#issuecomment-778883283
+ // Will use join for TransactionCIDs once preload for 1:N is supported.
+ err := r.gormDB.Preload("TransactionCIDs", func(tx *gorm.DB) *gorm.DB {
+ return tx.Select("cid", "tx_hash", "index", "src", "dst", "header_id", "block_number")
+ }).Joins("IPLD").Find(&headerCIDs, conditions).Error
+
+ if err != nil {
+ log.Error("header cid retrieval error")
+ return HeaderCIDRecord{}, err
+ }
+
+ if len(headerCIDs) == 0 {
+ return HeaderCIDRecord{}, errHeaderHashNotFound
+ } else if len(headerCIDs) > 1 {
+ return HeaderCIDRecord{}, errMultipleHeadersForHash
+ }
+
+ return headerCIDs[0], nil
+}
+
+// RetrieveTxCIDByHash returns the tx for the given tx hash (and optionally block number)
+func (r *Retriever) RetrieveTxCIDByHash(txHash string, blockNumber *big.Int) (TransactionCIDRecord, error) {
+ log.Debug("retrieving tx cid for tx hash ", txHash)
+
+ var txCIDs []TransactionCIDRecord
+
+ var err error
+ if blockNumber != nil {
+ err = r.gormDB.Joins("IPLD").Find(&txCIDs, "tx_hash = ? AND transaction_cids.header_id = (SELECT canonical_header_hash(transaction_cids.block_number)) AND transaction_cids.block_number = ?", txHash, blockNumber.Int64()).Error
+ } else {
+ err = r.gormDB.Joins("IPLD").Find(&txCIDs, "tx_hash = ? AND transaction_cids.header_id = (SELECT canonical_header_hash(transaction_cids.block_number))", txHash).Error
+ }
+ if err != nil {
+ log.Error("tx retrieval error")
+ return TransactionCIDRecord{}, err
+ }
+
+ if len(txCIDs) == 0 {
+ return TransactionCIDRecord{}, errTxHashNotFound
+ } else if len(txCIDs) > 1 {
+ // a transaction can be part of a only one canonical block
+ return TransactionCIDRecord{}, errTxHashInMultipleBlocks
+ }
+
+ return txCIDs[0], nil
+}
+
+var EmptyNodeValue = make([]byte, common.HashLength)
+
+// RetrieveHeaderByHash returns the cid and rlp bytes for the header corresponding to the provided block hash
+func (r *Retriever) RetrieveHeaderByHash(hash common.Hash) (string, []byte, error) {
+ headerResult := new(ipldResult)
+ return headerResult.CID, headerResult.Data, r.db.Get(headerResult, RetrieveHeaderByHashPgStr, hash.Hex())
+}
+
+// RetrieveHeaderByHash2 returns the cid and rlp bytes for the header corresponding to the provided block hash
+// using a sqlx.Tx
+func (r *Retriever) RetrieveHeaderByHash2(tx *sqlx.Tx, hash common.Hash) (string, []byte, error) {
+ headerResult := new(ipldResult)
+ return headerResult.CID, headerResult.Data, tx.Get(headerResult, RetrieveHeaderByHashPgStr, hash.Hex())
+}
+
+// RetrieveUncles returns the cid and rlp bytes for the uncle list corresponding to the provided block hash, number (of non-omner root block)
+func (r *Retriever) RetrieveUncles(tx *sqlx.Tx, hash common.Hash, number uint64) (string, []byte, error) {
+ uncleResult := new(ipldResult)
+ if err := tx.Get(uncleResult, RetrieveUnclesPgStr, hash.Hex(), number); err != nil {
+ return "", nil, err
+ }
+ return uncleResult.CID, uncleResult.Data, nil
+}
+
+// RetrieveUnclesByBlockHash returns the cid and rlp bytes for the uncle list corresponding to the provided block hash (of non-omner root block)
+func (r *Retriever) RetrieveUnclesByBlockHash(tx *sqlx.Tx, hash common.Hash) (string, []byte, error) {
+ uncleResult := new(ipldResult)
+ if err := tx.Get(uncleResult, RetrieveUnclesByBlockHashPgStr, hash.Hex()); err != nil {
+ return "", nil, err
+ }
+ return uncleResult.CID, uncleResult.Data, nil
+}
+
+// RetrieveTransactions returns the cids and rlp bytes for the transactions corresponding to the provided block hash, number
+func (r *Retriever) RetrieveTransactions(tx *sqlx.Tx, hash common.Hash, number uint64) ([]string, [][]byte, error) {
+ txResults := make([]ipldResult, 0)
+ if err := tx.Select(&txResults, RetrieveTransactionsPgStr, hash.Hex(), number); err != nil {
+ return nil, nil, err
+ }
+ cids := make([]string, len(txResults))
+ txs := make([][]byte, len(txResults))
+ for i, res := range txResults {
+ cids[i] = res.CID
+ txs[i] = res.Data
+ }
+ return cids, txs, nil
+}
+
+// RetrieveTransactionsByBlockHash returns the cids and rlp bytes for the transactions corresponding to the provided block hash
+func (r *Retriever) RetrieveTransactionsByBlockHash(tx *sqlx.Tx, hash common.Hash) ([]string, [][]byte, error) {
+ txResults := make([]ipldResult, 0)
+ if err := tx.Select(&txResults, RetrieveTransactionsByBlockHashPgStr, hash.Hex()); err != nil {
+ return nil, nil, err
+ }
+ cids := make([]string, len(txResults))
+ txs := make([][]byte, len(txResults))
+ for i, res := range txResults {
+ cids[i] = res.CID
+ txs[i] = res.Data
+ }
+ return cids, txs, nil
+}
+
+// DecodeLeafNode decodes the leaf node data
+func DecodeLeafNode(node []byte) ([]byte, error) {
+ var nodeElements []interface{}
+ if err := rlp.DecodeBytes(node, &nodeElements); err != nil {
+ return nil, err
+ }
+ ok, err := IsLeaf(nodeElements)
+ if err != nil {
+ return nil, err
+ }
+ if !ok {
+ return nil, fmt.Errorf("expected leaf node but found %v", nodeElements)
+ }
+ return nodeElements[1].([]byte), nil
+}
+
+// RetrieveReceipts returns the cids and rlp bytes for the receipts corresponding to the provided block hash, number.
+// cid returned corresponds to the leaf node data which contains the receipt.
+func (r *Retriever) RetrieveReceipts(tx *sqlx.Tx, hash common.Hash, number uint64) ([]string, [][]byte, []common.Hash, error) {
+ rctResults := make([]ipldResult, 0)
+ if err := tx.Select(&rctResults, RetrieveReceiptsPgStr, hash.Hex(), number); err != nil {
+ return nil, nil, nil, err
+ }
+ cids := make([]string, len(rctResults))
+ rcts := make([][]byte, len(rctResults))
+ txs := make([]common.Hash, len(rctResults))
+
+ for i, res := range rctResults {
+ cids[i] = res.CID
+ rcts[i] = res.Data
+ txs[i] = common.HexToHash(res.TxHash)
+ }
+
+ return cids, rcts, txs, nil
+}
+
+// RetrieveReceiptsByBlockHash returns the cids and rlp bytes for the receipts corresponding to the provided block hash.
+// cid returned corresponds to the leaf node data which contains the receipt.
+func (r *Retriever) RetrieveReceiptsByBlockHash(tx *sqlx.Tx, hash common.Hash) ([]string, [][]byte, []common.Hash, error) {
+ rctResults := make([]ipldResult, 0)
+ if err := tx.Select(&rctResults, RetrieveReceiptsByBlockHashPgStr, hash.Hex()); err != nil {
+ return nil, nil, nil, err
+ }
+ cids := make([]string, len(rctResults))
+ rcts := make([][]byte, len(rctResults))
+ txs := make([]common.Hash, len(rctResults))
+
+ for i, res := range rctResults {
+ cids[i] = res.CID
+ nodeVal, err := DecodeLeafNode(res.Data)
+ if err != nil {
+ return nil, nil, nil, err
+ }
+ rcts[i] = nodeVal
+ txs[i] = common.HexToHash(res.TxHash)
+ }
+
+ return cids, rcts, txs, nil
+}
+
+// RetrieveAccountByAddressAndBlockHash returns the cid and rlp bytes for the account corresponding to the provided address and block hash
+// TODO: ensure this handles deleted accounts appropriately
+func (r *Retriever) RetrieveAccountByAddressAndBlockHash(address common.Address, hash common.Hash) (StateAccountRecord, error) {
+ var accountResult StateAccountRecord
+ leafKey := crypto.Keccak256Hash(address.Bytes())
+ if err := r.db.Get(&accountResult, RetrieveAccountByLeafKeyAndBlockHashPgStr, leafKey.Hex(), hash.Hex()); err != nil {
+ return StateAccountRecord{}, err
+ }
+
+ if accountResult.Removed {
+ return StateAccountRecord{}, nil
+ }
+ return accountResult, nil
+}
+
+// RetrieveStorageAtByAddressAndStorageSlotAndBlockHash returns the cid and rlp bytes for the storage value corresponding to the provided address, storage slot, and block hash
+func (r *Retriever) RetrieveStorageAtByAddressAndStorageSlotAndBlockHash(address common.Address, key, hash common.Hash) ([]byte, error) {
+ var storageResult nodeInfo
+ stateLeafKey := crypto.Keccak256Hash(address.Bytes())
+ storageHash := crypto.Keccak256Hash(key.Bytes())
+ if err := r.db.Get(&storageResult,
+ RetrieveStorageLeafByAddressHashAndLeafKeyAndBlockHashPgStr,
+ stateLeafKey.Hex(), storageHash.Hex(), hash.Hex()); err != nil {
+ return nil, err
+ }
+ if storageResult.StateLeafRemoved || storageResult.Removed {
+ return EmptyNodeValue, nil
+ }
+ return storageResult.Value, nil
+}
+
+// RetrieveStorageAndRLP returns the cid and rlp bytes for the storage value corresponding to the
+// provided address, storage slot, and block hash
+func (r *Retriever) RetrieveStorageAndRLP(address common.Address, key, hash common.Hash) (string, []byte, error) {
+ var storageResult nodeInfo
+ stateLeafKey := crypto.Keccak256Hash(address.Bytes())
+ storageHash := crypto.Keccak256Hash(key.Bytes())
+ if err := r.db.Get(&storageResult,
+ RetrieveStorageAndRLPByAddressHashAndLeafKeyAndBlockHashPgStr,
+ stateLeafKey.Hex(), storageHash.Hex(), hash.Hex()); err != nil {
+ return "", nil, err
+ }
+ if storageResult.StateLeafRemoved || storageResult.Removed {
+ return "", EmptyNodeValue, nil
+ }
+ return storageResult.CID, storageResult.Data, nil
+}
diff --git a/pkg/eth/retriever_test.go b/pkg/eth/retriever_test.go
new file mode 100644
index 00000000..7a4fcb32
--- /dev/null
+++ b/pkg/eth/retriever_test.go
@@ -0,0 +1,173 @@
+// VulcanizeDB
+// Copyright © 2019 Vulcanize
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+package eth_test
+
+import (
+ "context"
+
+ "github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/params"
+ "github.com/ethereum/go-ethereum/statediff/indexer/interfaces"
+ "github.com/ethereum/go-ethereum/trie"
+ "github.com/jmoiron/sqlx"
+ . "github.com/onsi/ginkgo/v2"
+ . "github.com/onsi/gomega"
+
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth/test_helpers"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/shared"
+)
+
+var _ = Describe("Retriever", func() {
+ var (
+ db *sqlx.DB
+ diffIndexer interfaces.StateDiffIndexer
+ retriever *eth.Retriever
+ ctx = context.Background()
+ )
+ BeforeEach(func() {
+ db = shared.SetupDB()
+ diffIndexer = shared.SetupTestStateDiffIndexer(ctx, params.TestChainConfig, test_helpers.Genesis.Hash())
+
+ retriever = eth.NewRetriever(db)
+ })
+ AfterEach(func() {
+ shared.TearDownDB(db)
+ db.Close()
+ })
+
+ It("Retrieve", func() {
+ tx, err := diffIndexer.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+ for _, node := range test_helpers.MockStateNodes {
+ err = diffIndexer.PushStateNode(tx, node, test_helpers.MockBlock.Hash().String())
+ Expect(err).ToNot(HaveOccurred())
+ }
+
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+ })
+
+ Describe("RetrieveFirstBlockNumber", func() {
+ It("Throws an error if there are no blocks in the database", func() {
+ _, err := retriever.RetrieveFirstBlockNumber()
+ Expect(err).To(HaveOccurred())
+ })
+ It("Gets the number of the first block that has data in the database", func() {
+ tx, err := diffIndexer.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+
+ num, err := retriever.RetrieveFirstBlockNumber()
+ Expect(err).ToNot(HaveOccurred())
+ Expect(num).To(Equal(int64(1)))
+ })
+
+ It("Gets the number of the first block that has data in the database", func() {
+ payload := test_helpers.MockConvertedPayload
+ payload.Block = newMockBlock(1010101)
+ tx, err := diffIndexer.PushBlock(payload.Block, payload.Receipts, payload.Block.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+
+ num, err := retriever.RetrieveFirstBlockNumber()
+ Expect(err).ToNot(HaveOccurred())
+ Expect(num).To(Equal(int64(1010101)))
+ })
+
+ It("Gets the number of the first block that has data in the database", func() {
+ payload1 := test_helpers.MockConvertedPayload
+ payload1.Block = newMockBlock(1010101)
+ payload2 := payload1
+ payload2.Block = newMockBlock(5)
+ tx, err := diffIndexer.PushBlock(payload1.Block, payload1.Receipts, payload1.Block.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+
+ tx, err = diffIndexer.PushBlock(payload2.Block, payload2.Receipts, payload2.Block.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+
+ num, err := retriever.RetrieveFirstBlockNumber()
+ Expect(err).ToNot(HaveOccurred())
+ Expect(num).To(Equal(int64(5)))
+ })
+ })
+
+ Describe("RetrieveLastBlockNumber", func() {
+ It("Throws an error if there are no blocks in the database", func() {
+ _, err := retriever.RetrieveLastBlockNumber()
+ Expect(err).To(HaveOccurred())
+ })
+ It("Gets the number of the latest block that has data in the database", func() {
+ tx, err := diffIndexer.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+
+ num, err := retriever.RetrieveLastBlockNumber()
+ Expect(err).ToNot(HaveOccurred())
+ Expect(num).To(Equal(int64(1)))
+ })
+
+ It("Gets the number of the latest block that has data in the database", func() {
+ payload := test_helpers.MockConvertedPayload
+ payload.Block = newMockBlock(1010101)
+ tx, err := diffIndexer.PushBlock(payload.Block, payload.Receipts, payload.Block.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+
+ num, err := retriever.RetrieveLastBlockNumber()
+ Expect(err).ToNot(HaveOccurred())
+ Expect(num).To(Equal(int64(1010101)))
+ })
+
+ It("Gets the number of the latest block that has data in the database", func() {
+ payload1 := test_helpers.MockConvertedPayload
+ payload1.Block = newMockBlock(1010101)
+ payload2 := payload1
+ payload2.Block = newMockBlock(5)
+ tx, err := diffIndexer.PushBlock(payload1.Block, payload1.Receipts, payload1.Block.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+
+ tx, err = diffIndexer.PushBlock(payload2.Block, payload2.Receipts, payload2.Block.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+
+ num, err := retriever.RetrieveLastBlockNumber()
+ Expect(err).ToNot(HaveOccurred())
+ Expect(num).To(Equal(int64(1010101)))
+ })
+ })
+})
+
+func newMockBlock(blockNumber uint64) *types.Block {
+ header := test_helpers.MockHeader
+ header.Number.SetUint64(blockNumber)
+ return types.NewBlock(&test_helpers.MockHeader, test_helpers.MockTransactions, nil, test_helpers.MockReceipts, trie.NewEmpty(nil))
+}
diff --git a/pkg/eth/sql.go b/pkg/eth/sql.go
new file mode 100644
index 00000000..cac9f833
--- /dev/null
+++ b/pkg/eth/sql.go
@@ -0,0 +1,194 @@
+package eth
+
+const (
+ RetrieveHeaderByHashPgStr = `SELECT cid, data
+ FROM eth.header_cids
+ INNER JOIN ipld.blocks ON (
+ header_cids.cid = blocks.key
+ AND header_cids.block_number = blocks.block_number
+ )
+ WHERE block_hash = $1`
+ RetrieveUnclesPgStr = `SELECT uncle_cids.cid, data
+ FROM eth.uncle_cids
+ INNER JOIN eth.header_cids ON (
+ uncle_cids.header_id = header_cids.block_hash
+ AND uncle_cids.block_number = header_cids.block_number
+ )
+ INNER JOIN ipld.blocks ON (
+ uncle_cids.cid = blocks.key
+ AND uncle_cids.block_number = blocks.block_number
+ )
+ WHERE header_cids.block_hash = $1
+ AND header_cids.block_number = $2
+ ORDER BY uncle_cids.parent_hash
+ LIMIT 1`
+ RetrieveUnclesByBlockHashPgStr = `SELECT uncle_cids.cid, data
+ FROM eth.uncle_cids
+ INNER JOIN eth.header_cids ON (
+ uncle_cids.header_id = header_cids.block_hash
+ AND uncle_cids.block_number = header_cids.block_number
+ )
+ INNER JOIN ipld.blocks ON (
+ uncle_cids.cid = blocks.key
+ AND uncle_cids.block_number = blocks.block_number
+ )
+ WHERE header_cids.block_hash = $1
+ ORDER BY uncle_cids.parent_hash
+ LIMIT 1`
+ RetrieveTransactionsPgStr = `SELECT transaction_cids.cid, data
+ FROM eth.transaction_cids
+ INNER JOIN eth.header_cids ON (
+ transaction_cids.header_id = header_cids.block_hash
+ AND transaction_cids.block_number = header_cids.block_number
+ )
+ INNER JOIN ipld.blocks ON (
+ transaction_cids.cid = blocks.key
+ AND transaction_cids.block_number = blocks.block_number
+ )
+ WHERE block_hash = $1
+ AND header_cids.block_number = $2
+ ORDER BY eth.transaction_cids.index ASC`
+ RetrieveTransactionsByBlockHashPgStr = `SELECT transaction_cids.cid, data
+ FROM eth.transaction_cids
+ INNER JOIN eth.header_cids ON (
+ transaction_cids.header_id = header_cids.block_hash
+ AND transaction_cids.block_number = header_cids.block_number
+ )
+ INNER JOIN ipld.blocks ON (
+ transaction_cids.cid = blocks.key
+ AND transaction_cids.block_number = blocks.block_number
+ )
+ WHERE block_hash = $1
+ ORDER BY eth.transaction_cids.index ASC`
+ RetrieveReceiptsPgStr = `SELECT receipt_cids.cid, data, eth.transaction_cids.tx_hash
+ FROM eth.receipt_cids
+ INNER JOIN eth.transaction_cids ON (
+ receipt_cids.tx_id = transaction_cids.tx_hash
+ AND receipt_cids.header_id = transaction_cids.header_id
+ AND receipt_cids.block_number = transaction_cids.block_number
+ )
+ INNER JOIN eth.header_cids ON (
+ transaction_cids.header_id = header_cids.block_hash
+ AND transaction_cids.block_number = header_cids.block_number
+ )
+ INNER JOIN ipld.blocks ON (
+ receipt_cids.cid = blocks.key
+ AND receipt_cids.block_number = blocks.block_number
+ )
+ WHERE block_hash = $1
+ AND header_cids.block_number = $2
+ ORDER BY eth.transaction_cids.index ASC`
+ RetrieveReceiptsByBlockHashPgStr = `SELECT receipt_cids.cid, data, eth.transaction_cids.tx_hash
+ FROM eth.receipt_cids
+ INNER JOIN eth.transaction_cids ON (
+ receipt_cids.tx_id = transaction_cids.tx_hash
+ AND receipt_cids.header_id = transaction_cids.header_id
+ AND receipt_cids.block_number = transaction_cids.block_number
+ )
+ INNER JOIN eth.header_cids ON (
+ transaction_cids.header_id = header_cids.block_hash
+ AND transaction_cids.block_number = header_cids.block_number
+ )
+ INNER JOIN ipld.blocks ON (
+ receipt_cids.cid = blocks.key
+ AND receipt_cids.block_number = blocks.block_number
+ )
+ WHERE block_hash = $1
+ ORDER BY eth.transaction_cids.index ASC`
+ RetrieveAccountByLeafKeyAndBlockHashPgStr = `SELECT state_cids.nonce, state_cids.balance, state_cids.storage_root, state_cids.code_hash, state_cids.removed
+ FROM eth.state_cids
+ INNER JOIN eth.header_cids ON (
+ state_cids.header_id = header_cids.block_hash
+ AND state_cids.block_number = header_cids.block_number
+ )
+ WHERE state_leaf_key = $1
+ AND header_cids.block_number <= (SELECT block_number
+ FROM eth.header_cids
+ WHERE block_hash = $2)
+ AND header_cids.block_hash = (SELECT canonical_header_hash(header_cids.block_number))
+ ORDER BY header_cids.block_number DESC
+ LIMIT 1`
+ RetrieveFilteredGQLLogs = `SELECT CAST(eth.log_cids.block_number as TEXT), eth.log_cids.header_id as block_hash,
+ eth.log_cids.cid, eth.log_cids.index, eth.log_cids.rct_id, eth.log_cids.address,
+ eth.log_cids.topic0, eth.log_cids.topic1, eth.log_cids.topic2, eth.log_cids.topic3,
+ data, eth.receipt_cids.cid AS rct_cid, eth.receipt_cids.post_status, eth.receipt_cids.tx_id AS tx_hash
+ FROM eth.log_cids, eth.receipt_cids, ipld.blocks
+ WHERE eth.log_cids.rct_id = receipt_cids.tx_id
+ AND eth.log_cids.header_id = receipt_cids.header_id
+ AND eth.log_cids.block_number = receipt_cids.block_number
+ AND log_cids.cid = blocks.key
+ AND log_cids.block_number = blocks.block_number
+ AND receipt_cids.header_id = $1`
+ RetrieveFilteredLogs = `SELECT CAST(eth.log_cids.block_number as TEXT), eth.log_cids.cid, eth.log_cids.index, eth.log_cids.rct_id,
+ eth.log_cids.address, eth.log_cids.topic0, eth.log_cids.topic1, eth.log_cids.topic2, eth.log_cids.topic3,
+ eth.transaction_cids.tx_hash, eth.transaction_cids.index as txn_index,
+ blocks.data, eth.receipt_cids.cid AS rct_cid, eth.receipt_cids.post_status, header_cids.block_hash
+ FROM eth.log_cids, eth.receipt_cids, eth.transaction_cids, eth.header_cids, ipld.blocks
+ WHERE eth.log_cids.rct_id = receipt_cids.tx_id
+ AND eth.log_cids.header_id = eth.receipt_cids.header_id
+ AND eth.log_cids.block_number = eth.receipt_cids.block_number
+ AND log_cids.cid = blocks.key
+ AND log_cids.block_number = blocks.block_number
+ AND receipt_cids.tx_id = transaction_cids.tx_hash
+ AND receipt_cids.header_id = transaction_cids.header_id
+ AND receipt_cids.block_number = transaction_cids.block_number
+ AND transaction_cids.header_id = header_cids.block_hash
+ AND transaction_cids.block_number = header_cids.block_number`
+ RetrieveStorageLeafByAddressHashAndLeafKeyAndBlockHashPgStr = `SELECT cid, val, block_number, removed, state_leaf_removed FROM get_storage_at_by_hash($1, $2, $3)`
+ RetrieveStorageAndRLPByAddressHashAndLeafKeyAndBlockHashPgStr = `
+SELECT cid, val, storage.block_number, removed, state_leaf_removed, data
+ FROM get_storage_at_by_hash($1, $2, $3) AS storage
+ INNER JOIN ipld.blocks ON (
+ storage.cid = blocks.key
+ AND storage.block_number = blocks.block_number
+ )`
+ RetrieveCanonicalBlockHashByNumber = `SELECT block_hash
+ FROM canonical_header_hash($1) AS block_hash
+ WHERE block_hash IS NOT NULL`
+ RetrieveCanonicalHeaderByNumber = `SELECT cid, data FROM eth.header_cids
+ INNER JOIN ipld.blocks ON (
+ header_cids.cid = blocks.key
+ AND header_cids.block_number = blocks.block_number
+ )
+ WHERE block_hash = (SELECT canonical_header_hash($1))`
+ RetrieveCanonicalHeaderAndHashByNumber = `SELECT data, block_hash FROM eth.header_cids
+ INNER JOIN ipld.blocks ON (
+ header_cids.cid = blocks.key
+ AND header_cids.block_number = blocks.block_number
+ )
+ WHERE block_hash = (SELECT canonical_header_hash($1))`
+ RetrieveTD = `SELECT CAST(td as TEXT) FROM eth.header_cids
+ WHERE header_cids.block_hash = $1`
+ RetrieveRPCTransaction = `SELECT blocks.data, header_id, transaction_cids.block_number, index
+ FROM ipld.blocks, eth.transaction_cids
+ WHERE blocks.key = transaction_cids.cid
+ AND blocks.block_number = transaction_cids.block_number
+ AND transaction_cids.tx_hash = $1
+ AND transaction_cids.header_id = (SELECT canonical_header_hash(transaction_cids.block_number))`
+ RetrieveCodeHashByLeafKeyAndBlockHash = `SELECT code_hash FROM eth.state_cids, eth.header_cids
+ WHERE state_cids.header_id = header_cids.block_hash
+ AND state_cids.block_number = header_cids.block_number
+ AND state_leaf_key = $1
+ AND header_cids.block_number <= (SELECT block_number
+ FROM eth.header_cids
+ WHERE block_hash = $2)
+ AND header_cids.block_hash = (SELECT canonical_header_hash(header_cids.block_number))
+ ORDER BY header_cids.block_number DESC
+ LIMIT 1`
+ RetrieveCodeByKey = `SELECT data FROM ipld.blocks WHERE key = $1`
+)
+
+type ipldResult struct {
+ CID string `db:"cid"`
+ Data []byte `db:"data"`
+ TxHash string `db:"tx_hash"`
+}
+
+type nodeInfo struct {
+ CID string `db:"cid"`
+ Value []byte `db:"val"`
+ BlockNumber string `db:"block_number"`
+ Data []byte `db:"data"`
+ Removed bool `db:"removed"`
+ StateLeafRemoved bool `db:"state_leaf_removed"`
+}
diff --git a/pkg/eth/state_test/eth_suite_test.go b/pkg/eth/state_test/eth_suite_test.go
new file mode 100644
index 00000000..8b9f7175
--- /dev/null
+++ b/pkg/eth/state_test/eth_suite_test.go
@@ -0,0 +1,29 @@
+// VulcanizeDB
+// Copyright © 2019 Vulcanize
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+package eth_state_test
+
+import (
+ "testing"
+
+ . "github.com/onsi/ginkgo/v2"
+ . "github.com/onsi/gomega"
+)
+
+func TestETHSuite(t *testing.T) {
+ RegisterFailHandler(Fail)
+ RunSpecs(t, "ipld-eth-server/pkg/eth/state_test")
+}
diff --git a/pkg/eth/state_test/helper_test.go b/pkg/eth/state_test/helper_test.go
new file mode 100644
index 00000000..39e35940
--- /dev/null
+++ b/pkg/eth/state_test/helper_test.go
@@ -0,0 +1,13 @@
+package eth_state_test
+
+import (
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
+ . "github.com/onsi/gomega"
+)
+
+func CheckGetSliceResponse(sliceResponse eth.GetSliceResponse, expectedResponse eth.GetSliceResponse) {
+ Expect(sliceResponse.SliceID).To(Equal(expectedResponse.SliceID))
+ Expect(sliceResponse.TrieNodes).To(Equal(expectedResponse.TrieNodes))
+ Expect(sliceResponse.Leaves).To(Equal(expectedResponse.Leaves))
+ Expect(sliceResponse.MetaData.NodeStats).To(Equal(expectedResponse.MetaData.NodeStats))
+}
diff --git a/pkg/eth/eth_state_test.go b/pkg/eth/state_test/state_test.go
similarity index 82%
rename from pkg/eth/eth_state_test.go
rename to pkg/eth/state_test/state_test.go
index 66a86300..3a0968a3 100644
--- a/pkg/eth/eth_state_test.go
+++ b/pkg/eth/state_test/state_test.go
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
-package eth_test
+package eth_state_test
import (
"bytes"
@@ -22,7 +22,6 @@ import (
"fmt"
"io/ioutil"
"math/big"
- "time"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
@@ -30,21 +29,26 @@ import (
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/vm"
+ "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rpc"
- "github.com/ethereum/go-ethereum/statediff"
- sdtypes "github.com/ethereum/go-ethereum/statediff/types"
"github.com/jmoiron/sqlx"
- . "github.com/onsi/ginkgo"
+ . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth/test_helpers"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
+ "github.com/ethereum/go-ethereum/statediff"
+ // "github.com/ethereum/go-ethereum/statediff/test_helpers"
+
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth/test_helpers"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/shared"
)
var (
- parsedABI abi.ABI
+ parsedABI abi.ABI
+ randomAddress = common.HexToAddress("0x9F4203bd7a11aCB94882050E6f1C3ab14BBaD3D9")
+ randomHash = crypto.Keccak256Hash(randomAddress.Bytes())
+ number = rpc.BlockNumber(test_helpers.BlockNumber.Int64())
block1StateRoot = common.HexToHash("0xa1f614839ebdd58677df2c9d66a3e0acc9462acc49fad6006d0b6e5d2b98ed21")
rootDataHashBlock1 = "a1f614839ebdd58677df2c9d66a3e0acc9462acc49fad6006d0b6e5d2b98ed21"
@@ -83,7 +87,7 @@ var (
func init() {
// load abi
- abiBytes, err := ioutil.ReadFile("./test_helpers/abi.json")
+ abiBytes, err := ioutil.ReadFile("../test_helpers/abi.json")
if err != nil {
panic(err)
}
@@ -93,132 +97,133 @@ func init() {
}
}
-var _ = Describe("eth state reading tests", func() {
- const chainLength = 5
- var (
- blocks []*types.Block
- receipts []types.Receipts
- chain *core.BlockChain
- db *sqlx.DB
- api *eth.PublicEthAPI
- backend *eth.Backend
- chainConfig = params.TestChainConfig
- mockTD = big.NewInt(1337)
- expectedCanonicalHeader map[string]interface{}
- )
- It("test init", func() {
- // db and type initializations
- var err error
- db = shared.SetupDB()
- transformer := shared.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash())
+const chainLength = 5
- backend, err = eth.NewEthBackend(db, ð.Config{
- ChainConfig: chainConfig,
- VMConfig: vm.Config{},
- RPCGasCap: big.NewInt(10000000000), // Max gas capacity for a rpc call.
- GroupCacheConfig: &shared.GroupCacheConfig{
- StateDB: shared.GroupConfig{
- Name: "eth_state_test",
- CacheSizeInMB: 8,
- CacheExpiryInMins: 60,
- LogStatsIntervalInSecs: 0,
- },
+var (
+ blocks []*types.Block
+ receipts []types.Receipts
+ chain *core.BlockChain
+ db *sqlx.DB
+ api *eth.PublicEthAPI
+ backend *eth.Backend
+ chainConfig = &*params.TestChainConfig
+ mockTD = big.NewInt(1337)
+ expectedCanonicalHeader map[string]interface{}
+ ctx = context.Background()
+)
+
+var _ = BeforeSuite(func() {
+ chainConfig.LondonBlock = big.NewInt(100)
+
+ // db and type initializations
+ var err error
+ db = shared.SetupDB()
+
+ backend, err = eth.NewEthBackend(db, ð.Config{
+ ChainConfig: chainConfig,
+ VMConfig: vm.Config{},
+ RPCGasCap: big.NewInt(10000000000), // Max gas capacity for a rpc call.
+ GroupCacheConfig: &shared.GroupCacheConfig{
+ StateDB: shared.GroupConfig{
+ Name: "eth_state_test",
+ CacheSizeInMB: 8,
+ CacheExpiryInMins: 60,
+ LogStatsIntervalInSecs: 0,
},
- })
- Expect(err).ToNot(HaveOccurred())
- api, _ = eth.NewPublicEthAPI(backend, nil, eth.APIConfig{false, false, false, false, shared.DefaultStateDiffTimeout})
+ },
+ })
+ Expect(err).ToNot(HaveOccurred())
+ api, _ = eth.NewPublicEthAPI(backend, nil, eth.APIConfig{StateDiffTimeout: shared.DefaultStateDiffTimeout})
- // make the test blockchain (and state)
- blocks, receipts, chain = test_helpers.MakeChain(chainLength, test_helpers.Genesis, test_helpers.TestChainGen)
- params := statediff.Params{
- IntermediateStateNodes: true,
- IntermediateStorageNodes: true,
- }
- canonicalHeader := blocks[1].Header()
- expectedCanonicalHeader = map[string]interface{}{
- "number": (*hexutil.Big)(canonicalHeader.Number),
- "hash": canonicalHeader.Hash(),
- "parentHash": canonicalHeader.ParentHash,
- "nonce": canonicalHeader.Nonce,
- "mixHash": canonicalHeader.MixDigest,
- "sha3Uncles": canonicalHeader.UncleHash,
- "logsBloom": canonicalHeader.Bloom,
- "stateRoot": canonicalHeader.Root,
- "miner": canonicalHeader.Coinbase,
- "difficulty": (*hexutil.Big)(canonicalHeader.Difficulty),
- "extraData": hexutil.Bytes([]byte{}),
- "size": hexutil.Uint64(canonicalHeader.Size()),
- "gasLimit": hexutil.Uint64(canonicalHeader.GasLimit),
- "gasUsed": hexutil.Uint64(canonicalHeader.GasUsed),
- "timestamp": hexutil.Uint64(canonicalHeader.Time),
- "transactionsRoot": canonicalHeader.TxHash,
- "receiptsRoot": canonicalHeader.ReceiptHash,
- "totalDifficulty": (*hexutil.Big)(mockTD),
- }
- // iterate over the blocks, generating statediff payloads, and transforming the data into Postgres
- builder := statediff.NewBuilder(chain.StateCache())
- for i, block := range blocks {
- var args statediff.Args
- var rcts types.Receipts
- if i == 0 {
- args = statediff.Args{
- OldStateRoot: common.Hash{},
- NewStateRoot: block.Root(),
- BlockNumber: block.Number(),
- BlockHash: block.Hash(),
- }
- } else {
- args = statediff.Args{
- OldStateRoot: blocks[i-1].Root(),
- NewStateRoot: block.Root(),
- BlockNumber: block.Number(),
- BlockHash: block.Hash(),
- }
- rcts = receipts[i-1]
+ // make the test blockchain (and state)
+ blocks, receipts, chain = test_helpers.MakeChain(chainLength, test_helpers.Genesis, test_helpers.TestChainGen, chainConfig)
+
+ transformer := shared.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash())
+ params := statediff.Params{}
+ canonicalHeader := blocks[1].Header()
+ expectedCanonicalHeader = map[string]interface{}{
+ "number": (*hexutil.Big)(canonicalHeader.Number),
+ "hash": canonicalHeader.Hash(),
+ "parentHash": canonicalHeader.ParentHash,
+ "nonce": canonicalHeader.Nonce,
+ "mixHash": canonicalHeader.MixDigest,
+ "sha3Uncles": canonicalHeader.UncleHash,
+ "logsBloom": canonicalHeader.Bloom,
+ "stateRoot": canonicalHeader.Root,
+ "miner": canonicalHeader.Coinbase,
+ "difficulty": (*hexutil.Big)(canonicalHeader.Difficulty),
+ "extraData": hexutil.Bytes([]byte{}),
+ "size": hexutil.Uint64(canonicalHeader.Size()),
+ "gasLimit": hexutil.Uint64(canonicalHeader.GasLimit),
+ "gasUsed": hexutil.Uint64(canonicalHeader.GasUsed),
+ "timestamp": hexutil.Uint64(canonicalHeader.Time),
+ "transactionsRoot": canonicalHeader.TxHash,
+ "receiptsRoot": canonicalHeader.ReceiptHash,
+ "totalDifficulty": (*hexutil.Big)(mockTD),
+ }
+ // iterate over the blocks, generating statediff payloads, and transforming the data into Postgres
+ builder := statediff.NewBuilder(chain.StateCache())
+ for i, block := range blocks {
+ var args statediff.Args
+ var rcts types.Receipts
+ if i == 0 {
+ args = statediff.Args{
+ OldStateRoot: common.Hash{},
+ NewStateRoot: block.Root(),
+ BlockNumber: block.Number(),
+ BlockHash: block.Hash(),
}
- diff, err := builder.BuildStateDiffObject(args, params)
- Expect(err).ToNot(HaveOccurred())
- tx, err := transformer.PushBlock(block, rcts, mockTD)
- Expect(err).ToNot(HaveOccurred())
-
- for _, node := range diff.Nodes {
- err = transformer.PushStateNode(tx, node, block.Hash().String())
- Expect(err).ToNot(HaveOccurred())
+ } else {
+ args = statediff.Args{
+ OldStateRoot: blocks[i-1].Root(),
+ NewStateRoot: block.Root(),
+ BlockNumber: block.Number(),
+ BlockHash: block.Hash(),
}
- err = tx.Submit(err)
+ rcts = receipts[i-1]
+ }
+ diff, err := builder.BuildStateDiffObject(args, params)
+ Expect(err).ToNot(HaveOccurred())
+ tx, err := transformer.PushBlock(block, rcts, mockTD)
+ Expect(err).ToNot(HaveOccurred())
+
+ for _, node := range diff.Nodes {
+ err = transformer.PushStateNode(tx, node, block.Hash().String())
Expect(err).ToNot(HaveOccurred())
}
- // Insert some non-canonical data into the database so that we test our ability to discern canonicity
- indexAndPublisher := shared.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash())
-
- tx, err := indexAndPublisher.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
- Expect(err).ToNot(HaveOccurred())
+ for _, ipld := range diff.IPLDs {
+ err = transformer.PushIPLD(tx, ipld)
+ Expect(err).ToNot(HaveOccurred())
+ }
err = tx.Submit(err)
Expect(err).ToNot(HaveOccurred())
+ }
- // The non-canonical header has a child
- tx, err = indexAndPublisher.PushBlock(test_helpers.MockChild, test_helpers.MockReceipts, test_helpers.MockChild.Difficulty())
- Expect(err).ToNot(HaveOccurred())
+ // Insert some non-canonical data into the database so that we test our ability to discern canonicity
+ indexAndPublisher := shared.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash())
- hash := sdtypes.CodeAndCodeHash{
- Hash: test_helpers.CodeHash,
- Code: test_helpers.ContractCode,
- }
+ tx, err := indexAndPublisher.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
- err = indexAndPublisher.PushCodeAndCodeHash(tx, hash)
- Expect(err).ToNot(HaveOccurred())
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
- // wait for tx batch process to complete.
- time.Sleep(10000 * time.Millisecond)
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
- })
- defer It("test teardown", func() {
- shared.TearDownDB(db)
- chain.Stop()
- })
+ // The non-canonical header has a child
+ tx, err = indexAndPublisher.PushBlock(test_helpers.MockChild, test_helpers.MockReceipts, test_helpers.MockChild.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+})
+
+var _ = AfterSuite(func() {
+ shared.TearDownDB(db)
+ chain.Stop()
+})
+
+var _ = Describe("eth state reading tests", func() {
Describe("eth_call", func() {
It("Applies call args (tx data) on top of state, returning the result (e.g. a Getter method call)", func() {
@@ -229,6 +234,7 @@ var _ = Describe("eth state reading tests", func() {
To: &test_helpers.ContractAddr,
Data: &bdata,
}
+
// Before contract deployment, returns nil
res, err := api.Call(context.Background(), callArgs, rpc.BlockNumberOrHashWithNumber(0), nil)
Expect(err).ToNot(HaveOccurred())
@@ -261,25 +267,25 @@ var _ = Describe("eth state reading tests", func() {
})
})
- var (
- expectedContractBalance = (*hexutil.Big)(common.Big0)
- expectedBankBalanceBlock0 = (*hexutil.Big)(test_helpers.TestBankFunds)
-
- expectedAcct1BalanceBlock1 = (*hexutil.Big)(big.NewInt(10000))
- expectedBankBalanceBlock1 = (*hexutil.Big)(new(big.Int).Sub(test_helpers.TestBankFunds, big.NewInt(10000)))
-
- expectedAcct2BalanceBlock2 = (*hexutil.Big)(big.NewInt(1000))
- expectedBankBalanceBlock2 = (*hexutil.Big)(new(big.Int).Sub(expectedBankBalanceBlock1.ToInt(), big.NewInt(1000)))
-
- expectedAcct2BalanceBlock3 = (*hexutil.Big)(new(big.Int).Add(expectedAcct2BalanceBlock2.ToInt(), test_helpers.MiningReward))
-
- expectedAcct2BalanceBlock4 = (*hexutil.Big)(new(big.Int).Add(expectedAcct2BalanceBlock3.ToInt(), test_helpers.MiningReward))
-
- expectedAcct1BalanceBlock5 = (*hexutil.Big)(new(big.Int).Add(expectedAcct1BalanceBlock1.ToInt(), test_helpers.MiningReward))
- )
-
Describe("eth_getBalance", func() {
- It("Retrieves the eth balance for the provided account address at the block with the provided number", func() {
+ var (
+ expectedContractBalance = (*hexutil.Big)(common.Big0)
+ expectedBankBalanceBlock0 = (*hexutil.Big)(test_helpers.TestBankFunds)
+
+ expectedAcct1BalanceBlock1 = (*hexutil.Big)(big.NewInt(10000))
+ expectedBankBalanceBlock1 = (*hexutil.Big)(new(big.Int).Sub(test_helpers.TestBankFunds, big.NewInt(10000)))
+
+ expectedAcct2BalanceBlock2 = (*hexutil.Big)(big.NewInt(1000))
+ expectedBankBalanceBlock2 = (*hexutil.Big)(new(big.Int).Sub(expectedBankBalanceBlock1.ToInt(), big.NewInt(1000)))
+
+ expectedAcct2BalanceBlock3 = (*hexutil.Big)(new(big.Int).Add(expectedAcct2BalanceBlock2.ToInt(), test_helpers.MiningReward))
+
+ expectedAcct2BalanceBlock4 = (*hexutil.Big)(new(big.Int).Add(expectedAcct2BalanceBlock3.ToInt(), test_helpers.MiningReward))
+
+ expectedAcct1BalanceBlock5 = (*hexutil.Big)(new(big.Int).Add(expectedAcct1BalanceBlock1.ToInt(), test_helpers.MiningReward))
+ )
+
+ It("Retrieves account balance by block number", func() {
bal, err := api.GetBalance(ctx, test_helpers.TestBankAddress, rpc.BlockNumberOrHashWithNumber(0))
Expect(err).ToNot(HaveOccurred())
Expect(bal).To(Equal(expectedBankBalanceBlock0))
@@ -364,7 +370,7 @@ var _ = Describe("eth state reading tests", func() {
Expect(err).ToNot(HaveOccurred())
Expect(bal).To(Equal(expectedBankBalanceBlock2))
})
- It("Retrieves the eth balance for the provided account address at the block with the provided hash", func() {
+ It("Retrieves account balance by block hash", func() {
bal, err := api.GetBalance(ctx, test_helpers.TestBankAddress, rpc.BlockNumberOrHashWithHash(blocks[0].Hash(), true))
Expect(err).ToNot(HaveOccurred())
Expect(bal).To(Equal(expectedBankBalanceBlock0))
@@ -449,7 +455,7 @@ var _ = Describe("eth state reading tests", func() {
Expect(err).ToNot(HaveOccurred())
Expect(bal).To(Equal(expectedBankBalanceBlock2))
})
- It("Returns `0` for an account it cannot find the balance for an account at the provided block number", func() {
+ It("Returns 0 if account balance not found by block number", func() {
bal, err := api.GetBalance(ctx, test_helpers.Account1Addr, rpc.BlockNumberOrHashWithNumber(0))
Expect(err).ToNot(HaveOccurred())
Expect(bal).To(Equal((*hexutil.Big)(common.Big0)))
@@ -462,7 +468,7 @@ var _ = Describe("eth state reading tests", func() {
Expect(err).ToNot(HaveOccurred())
Expect(bal).To(Equal((*hexutil.Big)(common.Big0)))
})
- It("Returns `0` for an error for an account it cannot find the balance for an account at the provided block hash", func() {
+ It("Returns 0 if account balance not found by block hash", func() {
bal, err := api.GetBalance(ctx, test_helpers.Account1Addr, rpc.BlockNumberOrHashWithHash(blocks[0].Hash(), true))
Expect(err).ToNot(HaveOccurred())
Expect(bal).To(Equal((*hexutil.Big)(common.Big0)))
@@ -474,7 +480,6 @@ var _ = Describe("eth state reading tests", func() {
bal, err = api.GetBalance(ctx, test_helpers.ContractAddr, rpc.BlockNumberOrHashWithHash(blocks[0].Hash(), true))
Expect(err).ToNot(HaveOccurred())
Expect(bal).To(Equal((*hexutil.Big)(common.Big0)))
-
})
})
@@ -498,7 +503,7 @@ var _ = Describe("eth state reading tests", func() {
Expect(code).To(Equal((hexutil.Bytes)(test_helpers.ContractCode)))
})
It("Returns `nil` for an account it cannot find the code for", func() {
- code, err := api.GetCode(ctx, randomAddr, rpc.BlockNumberOrHashWithHash(blocks[3].Hash(), true))
+ code, err := api.GetCode(ctx, randomAddress, rpc.BlockNumberOrHashWithHash(blocks[3].Hash(), true))
Expect(err).ToNot(HaveOccurred())
Expect(code).To(BeEmpty())
})
@@ -604,7 +609,7 @@ var _ = Describe("eth state reading tests", func() {
},
}
- eth.CheckGetSliceResponse(*sliceResponse, expectedResponse)
+ CheckGetSliceResponse(*sliceResponse, expectedResponse)
})
It("Retrieves the state slice for root path with 0 depth", func() {
path := "0x"
@@ -633,7 +638,7 @@ var _ = Describe("eth state reading tests", func() {
Leaves: map[string]eth.GetSliceResponseAccount{},
}
- eth.CheckGetSliceResponse(*sliceResponse, expectedResponse)
+ CheckGetSliceResponse(*sliceResponse, expectedResponse)
})
It("Retrieves the state slice for a path to an account", func() {
path := "0x06"
@@ -669,7 +674,7 @@ var _ = Describe("eth state reading tests", func() {
},
}
- eth.CheckGetSliceResponse(*sliceResponse, expectedResponse)
+ CheckGetSliceResponse(*sliceResponse, expectedResponse)
})
It("Retrieves the state slice for a path to a non-existing account", func() {
path := "0x06"
@@ -698,7 +703,7 @@ var _ = Describe("eth state reading tests", func() {
Leaves: map[string]eth.GetSliceResponseAccount{},
}
- eth.CheckGetSliceResponse(*sliceResponse, expectedResponse)
+ CheckGetSliceResponse(*sliceResponse, expectedResponse)
})
It("Retrieves the storage slice for root path", func() {
@@ -731,7 +736,7 @@ var _ = Describe("eth state reading tests", func() {
Leaves: map[string]eth.GetSliceResponseAccount{},
}
- eth.CheckGetSliceResponse(*sliceResponse, expectedResponse)
+ CheckGetSliceResponse(*sliceResponse, expectedResponse)
})
It("Retrieves the storage slice for root path with 0 depth", func() {
path := "0x"
@@ -760,7 +765,7 @@ var _ = Describe("eth state reading tests", func() {
Leaves: map[string]eth.GetSliceResponseAccount{},
}
- eth.CheckGetSliceResponse(*sliceResponse, expectedResponse)
+ CheckGetSliceResponse(*sliceResponse, expectedResponse)
})
It("Retrieves the storage slice for root path with deleted nodes", func() {
path := "0x"
@@ -789,7 +794,7 @@ var _ = Describe("eth state reading tests", func() {
Leaves: map[string]eth.GetSliceResponseAccount{},
}
- eth.CheckGetSliceResponse(*sliceResponse, expectedResponse)
+ CheckGetSliceResponse(*sliceResponse, expectedResponse)
})
It("Retrieves the storage slice for a path to a storage node", func() {
path := "0x0b"
@@ -820,7 +825,7 @@ var _ = Describe("eth state reading tests", func() {
Leaves: map[string]eth.GetSliceResponseAccount{},
}
- eth.CheckGetSliceResponse(*sliceResponse, expectedResponse)
+ CheckGetSliceResponse(*sliceResponse, expectedResponse)
})
})
})
diff --git a/pkg/eth/subscription_config.go b/pkg/eth/subscription_config.go
index d74ad3fd..24b4f48e 100644
--- a/pkg/eth/subscription_config.go
+++ b/pkg/eth/subscription_config.go
@@ -16,38 +16,6 @@
package eth
-import (
- "math/big"
-
- "github.com/spf13/viper"
-)
-
-// SubscriptionSettings config is used by a subscriber to specify what eth data to stream from the watcher
-type SubscriptionSettings struct {
- BackFill bool
- BackFillOnly bool
- Start *big.Int
- End *big.Int // set to 0 or a negative value to have no ending block
- HeaderFilter HeaderFilter
- TxFilter TxFilter
- ReceiptFilter ReceiptFilter
- StateFilter StateFilter
- StorageFilter StorageFilter
-}
-
-// HeaderFilter contains filter settings for headers
-type HeaderFilter struct {
- Off bool
- Uncles bool
-}
-
-// TxFilter contains filter settings for txs
-type TxFilter struct {
- Off bool
- Src []string
- Dst []string
-}
-
// ReceiptFilter contains filter settings for receipts
type ReceiptFilter struct {
Off bool
@@ -56,70 +24,3 @@ type ReceiptFilter struct {
LogAddresses []string // receipt contains logs from the provided addresses
Topics [][]string
}
-
-// StateFilter contains filter settings for state
-type StateFilter struct {
- Off bool
- Addresses []string // is converted to state key by taking its keccak256 hash
- IntermediateNodes bool
-}
-
-// StorageFilter contains filter settings for storage
-type StorageFilter struct {
- Off bool
- Addresses []string
- StorageKeys []string // need to be the hashs key themselves not slot position
- IntermediateNodes bool
-}
-
-// Init is used to initialize a EthSubscription struct with env variables
-func NewEthSubscriptionConfig() (*SubscriptionSettings, error) {
- sc := new(SubscriptionSettings)
- // Below default to false, which means we do not backfill by default
- sc.BackFill = viper.GetBool("watcher.ethSubscription.historicalData")
- sc.BackFillOnly = viper.GetBool("watcher.ethSubscription.historicalDataOnly")
- // Below default to 0
- // 0 start means we start at the beginning and 0 end means we continue indefinitely
- sc.Start = big.NewInt(viper.GetInt64("watcher.ethSubscription.startingBlock"))
- sc.End = big.NewInt(viper.GetInt64("watcher.ethSubscription.endingBlock"))
- // Below default to false, which means we get all headers and no uncles by default
- sc.HeaderFilter = HeaderFilter{
- Off: viper.GetBool("watcher.ethSubscription.headerFilter.off"),
- Uncles: viper.GetBool("watcher.ethSubscription.headerFilter.uncles"),
- }
- // Below defaults to false and two slices of length 0
- // Which means we get all transactions by default
- sc.TxFilter = TxFilter{
- Off: viper.GetBool("watcher.ethSubscription.txFilter.off"),
- Src: viper.GetStringSlice("watcher.ethSubscription.txFilter.src"),
- Dst: viper.GetStringSlice("watcher.ethSubscription.txFilter.dst"),
- }
- // By default all of the topic slices will be empty => match on any/all topics
- topics := make([][]string, 4)
- topics[0] = viper.GetStringSlice("watcher.ethSubscription.receiptFilter.topic0s")
- topics[1] = viper.GetStringSlice("watcher.ethSubscription.receiptFilter.topic1s")
- topics[2] = viper.GetStringSlice("watcher.ethSubscription.receiptFilter.topic2s")
- topics[3] = viper.GetStringSlice("watcher.ethSubscription.receiptFilter.topic3s")
- sc.ReceiptFilter = ReceiptFilter{
- Off: viper.GetBool("watcher.ethSubscription.receiptFilter.off"),
- MatchTxs: viper.GetBool("watcher.ethSubscription.receiptFilter.matchTxs"),
- LogAddresses: viper.GetStringSlice("watcher.ethSubscription.receiptFilter.contracts"),
- Topics: topics,
- }
- // Below defaults to two false, and a slice of length 0
- // Which means we get all state leafs by default, but no intermediate nodes
- sc.StateFilter = StateFilter{
- Off: viper.GetBool("watcher.ethSubscription.stateFilter.off"),
- IntermediateNodes: viper.GetBool("watcher.ethSubscription.stateFilter.intermediateNodes"),
- Addresses: viper.GetStringSlice("watcher.ethSubscription.stateFilter.addresses"),
- }
- // Below defaults to two false, and two slices of length 0
- // Which means we get all storage leafs by default, but no intermediate nodes
- sc.StorageFilter = StorageFilter{
- Off: viper.GetBool("watcher.ethSubscription.storageFilter.off"),
- IntermediateNodes: viper.GetBool("watcher.ethSubscription.storageFilter.intermediateNodes"),
- Addresses: viper.GetStringSlice("watcher.ethSubscription.storageFilter.addresses"),
- StorageKeys: viper.GetStringSlice("watcher.ethSubscription.storageFilter.storageKeys"),
- }
- return sc, nil
-}
diff --git a/pkg/eth/test_helpers.go b/pkg/eth/test_helpers.go
deleted file mode 100644
index f2eb1d76..00000000
--- a/pkg/eth/test_helpers.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// VulcanizeDB
-// Copyright © 2019 Vulcanize
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-package eth
-
-import (
- "github.com/ethereum/go-ethereum/statediff/indexer/models"
- . "github.com/onsi/gomega"
-)
-
-// TxModelsContainsCID used to check if a list of TxModels contains a specific cid string
-func TxModelsContainsCID(txs []models.TxModel, cid string) bool {
- for _, tx := range txs {
- if tx.CID == cid {
- return true
- }
- }
- return false
-}
-
-// ReceiptModelsContainsCID used to check if a list of ReceiptModel contains a specific cid string
-func ReceiptModelsContainsCID(rcts []models.ReceiptModel, cid string) bool {
- for _, rct := range rcts {
- if rct.LeafCID == cid {
- return true
- }
- }
- return false
-}
-
-func CheckGetSliceResponse(sliceResponse GetSliceResponse, expectedResponse GetSliceResponse) {
- Expect(sliceResponse.SliceID).To(Equal(expectedResponse.SliceID))
- Expect(sliceResponse.MetaData.NodeStats).To(Equal(expectedResponse.MetaData.NodeStats))
- Expect(sliceResponse.TrieNodes).To(Equal(expectedResponse.TrieNodes))
- Expect(sliceResponse.Leaves).To(Equal(expectedResponse.Leaves))
-}
diff --git a/pkg/eth/test_helpers/chain_indexer.go b/pkg/eth/test_helpers/chain_indexer.go
new file mode 100644
index 00000000..981ea390
--- /dev/null
+++ b/pkg/eth/test_helpers/chain_indexer.go
@@ -0,0 +1,82 @@
+package test_helpers
+
+import (
+ "context"
+ "math/big"
+
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/core/state"
+ "github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/params"
+ "github.com/ethereum/go-ethereum/statediff"
+
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/shared"
+)
+
+type IndexChainParams struct {
+ Blocks []*types.Block
+ Receipts []types.Receipts
+ StateCache state.Database
+ ChainConfig *params.ChainConfig
+
+ StateDiffParams statediff.Params
+ TotalDifficulty *big.Int
+ // Whether to skip indexing state nodes (state_cids, storage_cids)
+ SkipStateNodes bool
+ // Whether to skip indexing IPLD blocks
+ SkipIPLDs bool
+}
+
+func IndexChain(params IndexChainParams) error {
+ indexer := shared.SetupTestStateDiffIndexer(context.Background(), params.ChainConfig, Genesis.Hash())
+ builder := statediff.NewBuilder(params.StateCache)
+ // iterate over the blocks, generating statediff payloads, and transforming the data into Postgres
+ for i, block := range params.Blocks {
+ var args statediff.Args
+ var rcts types.Receipts
+ if i == 0 {
+ args = statediff.Args{
+ OldStateRoot: common.Hash{},
+ NewStateRoot: block.Root(),
+ BlockNumber: block.Number(),
+ BlockHash: block.Hash(),
+ }
+ } else {
+ args = statediff.Args{
+ OldStateRoot: params.Blocks[i-1].Root(),
+ NewStateRoot: block.Root(),
+ BlockNumber: block.Number(),
+ BlockHash: block.Hash(),
+ }
+ rcts = params.Receipts[i-1]
+ }
+
+ diff, err := builder.BuildStateDiffObject(args, params.StateDiffParams)
+ if err != nil {
+ return err
+ }
+ tx, err := indexer.PushBlock(block, rcts, params.TotalDifficulty)
+ if err != nil {
+ return err
+ }
+
+ if !params.SkipStateNodes {
+ for _, node := range diff.Nodes {
+ if err = indexer.PushStateNode(tx, node, block.Hash().String()); err != nil {
+ return err
+ }
+ }
+ }
+ if !params.SkipIPLDs {
+ for _, ipld := range diff.IPLDs {
+ if err := indexer.PushIPLD(tx, ipld); err != nil {
+ return err
+ }
+ }
+ }
+ if err = tx.Submit(err); err != nil {
+ return err
+ }
+ }
+ return nil
+}
diff --git a/pkg/eth/test_helpers/chain_maker.go b/pkg/eth/test_helpers/chain_maker.go
index 4f24c888..2f68b7be 100644
--- a/pkg/eth/test_helpers/chain_maker.go
+++ b/pkg/eth/test_helpers/chain_maker.go
@@ -36,7 +36,8 @@ var (
TestBankKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
TestBankAddress = crypto.PubkeyToAddress(TestBankKey.PublicKey) //0x71562b71999873DB5b286dF957af199Ec94617F7
TestBankFunds = big.NewInt(100000000)
- Genesis = test_helpers.GenesisBlockForTesting(Testdb, TestBankAddress, TestBankFunds)
+
+ Genesis = test_helpers.GenesisBlockForTesting(Testdb, TestBankAddress, TestBankFunds, big.NewInt(params.InitialBaseFee), params.MaxGasLimit)
Account1Key, _ = crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a")
Account2Key, _ = crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee")
@@ -61,11 +62,12 @@ data function sig: 73d4a13a
// MakeChain creates a chain of n blocks starting at and including parent.
// the returned hash chain is ordered head->parent.
-func MakeChain(n int, parent *types.Block, chainGen func(int, *core.BlockGen)) ([]*types.Block, []types.Receipts, *core.BlockChain) {
- config := params.TestChainConfig
- config.LondonBlock = big.NewInt(100)
+func MakeChain(n int, parent *types.Block, chainGen func(int, *core.BlockGen), config *params.ChainConfig) ([]*types.Block, []types.Receipts, *core.BlockChain) {
blocks, receipts := core.GenerateChain(config, parent, ethash.NewFaker(), Testdb, n, chainGen)
- chain, _ := core.NewBlockChain(Testdb, nil, params.TestChainConfig, ethash.NewFaker(), vm.Config{}, nil, nil)
+ chain, err := core.NewBlockChain(Testdb, nil, nil, nil, ethash.NewFaker(), vm.Config{}, nil, nil)
+ if err != nil {
+ panic(err)
+ }
return append([]*types.Block{parent}, blocks...), receipts, chain
}
diff --git a/pkg/eth/test_helpers/test_data.go b/pkg/eth/test_helpers/test_data.go
index 78e7bac8..542f8530 100644
--- a/pkg/eth/test_helpers/test_data.go
+++ b/pkg/eth/test_helpers/test_data.go
@@ -17,13 +17,11 @@
package test_helpers
import (
- "bytes"
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"math/big"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
@@ -31,14 +29,12 @@ import (
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/statediff/indexer/ipld"
"github.com/ethereum/go-ethereum/statediff/indexer/models"
- "github.com/ethereum/go-ethereum/statediff/indexer/shared"
- testhelpers "github.com/ethereum/go-ethereum/statediff/test_helpers"
sdtypes "github.com/ethereum/go-ethereum/statediff/types"
"github.com/ethereum/go-ethereum/trie"
- blocks "github.com/ipfs/go-block-format"
- "github.com/multiformats/go-multihash"
+ "github.com/ipfs/go-cid"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
)
// Test variables
@@ -64,6 +60,7 @@ var (
ReceiptHash: common.HexToHash("0x1"),
Difficulty: big.NewInt(500001),
Extra: []byte{},
+ ParentHash: Genesis.Hash(),
},
{
Time: 2,
@@ -73,12 +70,11 @@ var (
ReceiptHash: common.HexToHash("0x2"),
Difficulty: big.NewInt(500002),
Extra: []byte{},
+ ParentHash: Genesis.Hash(),
},
}
- ReceiptsRlp, _ = rlp.EncodeToBytes(MockReceipts)
- MockBlock = createNewBlock(&MockHeader, MockTransactions, MockUncles, MockReceipts, new(trie.Trie))
- MockHeaderRlp, _ = rlp.EncodeToBytes(MockBlock.Header())
- MockChildHeader = types.Header{
+ MockBlock = createNewBlock(&MockHeader, MockTransactions, MockUncles, MockReceipts, trie.NewEmpty(nil))
+ MockChildHeader = types.Header{
Time: 0,
Number: new(big.Int).Add(BlockNumber, common.Big1),
Root: common.HexToHash("0x0"),
@@ -88,26 +84,23 @@ var (
Extra: []byte{},
ParentHash: MockBlock.Header().Hash(),
}
- MockChild = types.NewBlock(&MockChildHeader, MockTransactions, MockUncles, MockReceipts, new(trie.Trie))
- MockChildRlp, _ = rlp.EncodeToBytes(MockChild.Header())
- Address = common.HexToAddress("0xaE9BEa628c4Ce503DcFD7E305CaB4e29E7476592")
- AnotherAddress = common.HexToAddress("0xaE9BEa628c4Ce503DcFD7E305CaB4e29E7476593")
- AnotherAddress1 = common.HexToAddress("0xaE9BEa628c4Ce503DcFD7E305CaB4e29E7476594")
- AnotherAddress2 = common.HexToAddress("0xaE9BEa628c4Ce503DcFD7E305CaB4e29E7476596")
- ContractAddress = crypto.CreateAddress(SenderAddr, MockTransactions[2].Nonce())
- ContractHash = crypto.Keccak256Hash(ContractAddress.Bytes()).String()
- MockContractByteCode = []byte{0, 1, 2, 3, 4, 5}
- mockTopic11 = common.HexToHash("0x04")
- mockTopic12 = common.HexToHash("0x06")
- mockTopic21 = common.HexToHash("0x05")
- mockTopic22 = common.HexToHash("0x07")
- mockTopic31 = common.HexToHash("0x08")
- mockTopic41 = common.HexToHash("0x09")
- mockTopic42 = common.HexToHash("0x0a")
- mockTopic43 = common.HexToHash("0x0b")
- mockTopic51 = common.HexToHash("0x0c")
- mockTopic61 = common.HexToHash("0x0d")
- MockLog1 = &types.Log{
+ MockChild = types.NewBlock(&MockChildHeader, MockTransactions, MockUncles, MockReceipts, trie.NewEmpty(nil))
+ Address = common.HexToAddress("0xaE9BEa628c4Ce503DcFD7E305CaB4e29E7476592")
+ AnotherAddress = common.HexToAddress("0xaE9BEa628c4Ce503DcFD7E305CaB4e29E7476593")
+ AnotherAddress1 = common.HexToAddress("0xaE9BEa628c4Ce503DcFD7E305CaB4e29E7476594")
+ AnotherAddress2 = common.HexToAddress("0xaE9BEa628c4Ce503DcFD7E305CaB4e29E7476596")
+ ContractAddress = crypto.CreateAddress(SenderAddr, MockTransactions[2].Nonce())
+ mockTopic11 = common.HexToHash("0x04")
+ mockTopic12 = common.HexToHash("0x06")
+ mockTopic21 = common.HexToHash("0x05")
+ mockTopic22 = common.HexToHash("0x07")
+ mockTopic31 = common.HexToHash("0x08")
+ mockTopic41 = common.HexToHash("0x09")
+ mockTopic42 = common.HexToHash("0x0a")
+ mockTopic43 = common.HexToHash("0x0b")
+ mockTopic51 = common.HexToHash("0x0c")
+ mockTopic61 = common.HexToHash("0x0d")
+ MockLog1 = &types.Log{
Address: Address,
Topics: []common.Hash{mockTopic11, mockTopic12},
Data: []byte{},
@@ -157,179 +150,55 @@ var (
Index: 5,
}
- Tx1 = GetTxnRlp(0, MockTransactions)
- Tx2 = GetTxnRlp(1, MockTransactions)
- Tx3 = GetTxnRlp(2, MockTransactions)
- Tx4 = GetTxnRlp(3, MockTransactions)
-
- rctCIDs, rctIPLDData, _ = eth.GetRctLeafNodeData(MockReceipts)
- HeaderCID, _ = ipld.RawdataToCid(ipld.MEthHeader, MockHeaderRlp, multihash.KECCAK_256)
- HeaderMhKey = shared.MultihashKeyFromCID(HeaderCID)
- Trx1CID, _ = ipld.RawdataToCid(ipld.MEthTx, Tx1, multihash.KECCAK_256)
- Trx1MhKey = shared.MultihashKeyFromCID(Trx1CID)
- Trx2CID, _ = ipld.RawdataToCid(ipld.MEthTx, Tx2, multihash.KECCAK_256)
- Trx2MhKey = shared.MultihashKeyFromCID(Trx2CID)
- Trx3CID, _ = ipld.RawdataToCid(ipld.MEthTx, Tx3, multihash.KECCAK_256)
- Trx3MhKey = shared.MultihashKeyFromCID(Trx3CID)
- Trx4CID, _ = ipld.RawdataToCid(ipld.MEthTx, Tx4, multihash.KECCAK_256)
- Trx4MhKey = shared.MultihashKeyFromCID(Trx4CID)
- Rct1CID = rctCIDs[0]
- Rct1MhKey = shared.MultihashKeyFromCID(Rct1CID)
- Rct2CID = rctCIDs[1]
- Rct2MhKey = shared.MultihashKeyFromCID(Rct2CID)
- Rct3CID = rctCIDs[2]
- Rct3MhKey = shared.MultihashKeyFromCID(Rct3CID)
- Rct4CID = rctCIDs[3]
- Rct4MhKey = shared.MultihashKeyFromCID(Rct4CID)
- State1CID, _ = ipld.RawdataToCid(ipld.MEthStateTrie, ContractLeafNode, multihash.KECCAK_256)
- State1MhKey = shared.MultihashKeyFromCID(State1CID)
- State2CID, _ = ipld.RawdataToCid(ipld.MEthStateTrie, AccountLeafNode, multihash.KECCAK_256)
- State2MhKey = shared.MultihashKeyFromCID(State2CID)
- StorageCID, _ = ipld.RawdataToCid(ipld.MEthStorageTrie, StorageLeafNode, multihash.KECCAK_256)
- StorageMhKey = shared.MultihashKeyFromCID(StorageCID)
- Rct1IPLD = rctIPLDData[0]
- Rct2IPLD = rctIPLDData[1]
- Rct3IPLD = rctIPLDData[2]
- Rct4IPLD = rctIPLDData[3]
- MockTrxMeta = []models.TxModel{
+ rctCIDs, _ = getReceiptCIDs(MockReceipts)
+ Rct1CID = rctCIDs[0]
+ Rct4CID = rctCIDs[3]
+ MockTrxMeta = []models.TxModel{
{
CID: "", // This is empty until we go to publish to ipfs
- MhKey: "",
Src: SenderAddr.Hex(),
Dst: Address.String(),
Index: 0,
TxHash: MockTransactions[0].Hash().String(),
- Data: []byte{},
},
{
CID: "",
- MhKey: "",
Src: SenderAddr.Hex(),
Dst: AnotherAddress.String(),
Index: 1,
TxHash: MockTransactions[1].Hash().String(),
- Data: []byte{},
},
{
CID: "",
- MhKey: "",
Src: SenderAddr.Hex(),
Dst: "",
Index: 2,
TxHash: MockTransactions[2].Hash().String(),
- Data: MockContractByteCode,
},
{
CID: "",
- MhKey: "",
Src: SenderAddr.Hex(),
Dst: "",
Index: 3,
TxHash: MockTransactions[3].Hash().String(),
- Data: []byte{},
- },
- }
- MockTrxMetaPostPublsh = []models.TxModel{
- {
- BlockNumber: "1",
- CID: Trx1CID.String(), // This is empty until we go to publish to ipfs
- MhKey: Trx1MhKey,
- Src: SenderAddr.Hex(),
- Dst: Address.String(),
- Index: 0,
- TxHash: MockTransactions[0].Hash().String(),
- Data: []byte{},
- },
- {
- BlockNumber: "1",
- CID: Trx2CID.String(),
- MhKey: Trx2MhKey,
- Src: SenderAddr.Hex(),
- Dst: AnotherAddress.String(),
- Index: 1,
- TxHash: MockTransactions[1].Hash().String(),
- Data: []byte{},
- },
- {
- BlockNumber: "1",
- CID: Trx3CID.String(),
- MhKey: Trx3MhKey,
- Src: SenderAddr.Hex(),
- Dst: "",
- Index: 2,
- TxHash: MockTransactions[2].Hash().String(),
- Data: MockContractByteCode,
- },
- {
- BlockNumber: "1",
- CID: Trx4CID.String(),
- MhKey: Trx4MhKey,
- Src: SenderAddr.Hex(),
- Dst: AnotherAddress1.String(),
- Index: 3,
- TxHash: MockTransactions[3].Hash().String(),
- Data: []byte{},
},
}
MockRctMeta = []models.ReceiptModel{
{
- LeafCID: "",
- LeafMhKey: "",
- Contract: "",
- ContractHash: "",
+ CID: "",
+ Contract: "",
},
{
- LeafCID: "",
- LeafMhKey: "",
- Contract: "",
- ContractHash: "",
+ CID: "",
+ Contract: "",
},
{
- LeafCID: "",
- LeafMhKey: "",
- Contract: ContractAddress.String(),
- ContractHash: ContractHash,
+ CID: "",
+ Contract: ContractAddress.String(),
},
{
- LeafCID: "",
- LeafMhKey: "",
- Contract: "",
- ContractHash: "",
- },
- }
-
- MockRctMetaPostPublish = []models.ReceiptModel{
- {
- BlockNumber: "1",
- HeaderID: MockBlock.Hash().String(),
- LeafCID: Rct1CID.String(),
- LeafMhKey: Rct1MhKey,
- Contract: "",
- ContractHash: "",
- },
- {
- BlockNumber: "1",
- HeaderID: MockBlock.Hash().String(),
- LeafCID: Rct2CID.String(),
- LeafMhKey: Rct2MhKey,
- Contract: "",
- ContractHash: "",
- },
- {
- BlockNumber: "1",
- HeaderID: MockBlock.Hash().String(),
- LeafCID: Rct3CID.String(),
- LeafMhKey: Rct3MhKey,
- Contract: ContractAddress.String(),
- ContractHash: ContractHash,
- },
- {
- BlockNumber: "1",
- HeaderID: MockBlock.Hash().String(),
- LeafCID: Rct4CID.String(),
- LeafMhKey: Rct4MhKey,
- Contract: "",
- ContractHash: "",
+ CID: "",
+ Contract: "",
},
}
@@ -343,21 +212,20 @@ var (
StorageValue,
})
- nonce1 = uint64(1)
- ContractRoot = "0x821e2556a290c86405f8160a2d662042a431ba456b9db265c79bb837c04be5f0"
- ContractCodeHash = crypto.Keccak256Hash(MockContractByteCode)
- contractPath = common.Bytes2Hex([]byte{'\x06'})
- ContractLeafKey = testhelpers.AddressToLeafKey(ContractAddress)
- ContractAccount, _ = rlp.EncodeToBytes(&types.StateAccount{
- Nonce: nonce1,
+ ContractRoot = "0x821e2556a290c86405f8160a2d662042a431ba456b9db265c79bb837c04be5f0"
+ contractPath = common.Bytes2Hex([]byte{'\x06'})
+ ContractLeafKey = crypto.Keccak256(ContractAddress[:])
+ ContractAccount = types.StateAccount{
+ Nonce: uint64(1),
Balance: big.NewInt(0),
- CodeHash: ContractCodeHash.Bytes(),
+ CodeHash: CodeHash.Bytes(),
Root: common.HexToHash(ContractRoot),
- })
- ContractPartialPath = common.Hex2Bytes("3114658a74d9cc9f7acf2c5cd696c3494d7c344d78bfec3add0d91ec4e8d1c45")
- ContractLeafNode, _ = rlp.EncodeToBytes(&[]interface{}{
+ }
+ ContractAccountRLP, _ = rlp.EncodeToBytes(&ContractAccount)
+ ContractPartialPath = common.Hex2Bytes("3114658a74d9cc9f7acf2c5cd696c3494d7c344d78bfec3add0d91ec4e8d1c45")
+ ContractLeafNode, _ = rlp.EncodeToBytes(&[]interface{}{
ContractPartialPath,
- ContractAccount,
+ ContractAccountRLP,
})
nonce0 = uint64(0)
@@ -365,67 +233,49 @@ var (
AccountRoot = "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
AccountCodeHash = common.HexToHash("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470")
AccountAddresss = common.HexToAddress("0x0D3ab14BBaD3D99F4203bd7a11aCB94882050E7e")
- AccountLeafKey = testhelpers.Account2LeafKey
- Account, _ = rlp.EncodeToBytes(&types.StateAccount{
+ AccountLeafKey = crypto.Keccak256(AccountAddresss[:])
+ Account = types.StateAccount{
Nonce: nonce0,
Balance: AccountBalance,
CodeHash: AccountCodeHash.Bytes(),
Root: common.HexToHash(AccountRoot),
- })
+ }
+ AccountRLP, _ = rlp.EncodeToBytes(&Account)
AccountPartialPath = common.Hex2Bytes("3957f3e2f04a0764c3a0491b175f69926da61efbcc8f61fa1455fd2d2b4cdd45")
AccountLeafNode, _ = rlp.EncodeToBytes(&[]interface{}{
AccountPartialPath,
- Account,
+ AccountRLP,
})
- MockStateNodes = []sdtypes.StateNode{
+ MockStateNodes = []sdtypes.StateLeafNode{
{
- LeafKey: ContractLeafKey,
- Path: []byte{'\x06'},
- NodeValue: ContractLeafNode,
- NodeType: sdtypes.Leaf,
- StorageNodes: []sdtypes.StorageNode{
+ AccountWrapper: sdtypes.AccountWrapper{
+ Account: &ContractAccount,
+ LeafKey: ContractLeafKey,
+ CID: ipld.Keccak256ToCid(ipld.MEthStateTrie, crypto.Keccak256(ContractLeafNode)).String(),
+ },
+ StorageDiff: []sdtypes.StorageLeafNode{
{
- Path: []byte{},
- NodeType: sdtypes.Leaf,
- LeafKey: StorageLeafKey,
- NodeValue: StorageLeafNode,
+ LeafKey: StorageLeafKey,
+ Value: StorageValue,
+ CID: ipld.Keccak256ToCid(ipld.MEthStorageTrie, crypto.Keccak256(StorageLeafNode)).String(),
},
},
},
{
- LeafKey: AccountLeafKey,
- Path: []byte{'\x0c'},
- NodeValue: AccountLeafNode,
- NodeType: sdtypes.Leaf,
- StorageNodes: []sdtypes.StorageNode{},
+ AccountWrapper: sdtypes.AccountWrapper{
+ Account: &Account,
+ LeafKey: AccountLeafKey,
+ CID: ipld.Keccak256ToCid(ipld.MEthStateTrie, crypto.Keccak256(AccountLeafNode)).String(),
+ },
},
}
- MockStateMetaPostPublish = []models.StateNodeModel{
- {
- BlockNumber: "1",
- CID: State1CID.String(),
- MhKey: State1MhKey,
- Path: []byte{'\x06'},
- NodeType: 2,
- StateKey: common.BytesToHash(ContractLeafKey).Hex(),
- },
- {
- BlockNumber: "1",
- CID: State2CID.String(),
- MhKey: State2MhKey,
- Path: []byte{'\x0c'},
- NodeType: 2,
- StateKey: common.BytesToHash(AccountLeafKey).Hex(),
- },
- }
- MockStorageNodes = map[string][]sdtypes.StorageNode{
+ MockStorageNodes = map[string][]sdtypes.StorageLeafNode{
contractPath: {
{
- LeafKey: StorageLeafKey,
- NodeValue: StorageLeafNode,
- NodeType: sdtypes.Leaf,
- Path: []byte{},
+ LeafKey: StorageLeafKey,
+ Value: StorageValue,
+ CID: ipld.Keccak256ToCid(ipld.MEthStorageTrie, crypto.Keccak256(StorageLeafNode)).String(),
},
},
}
@@ -439,149 +289,6 @@ var (
StorageNodes: MockStorageNodes,
StateNodes: MockStateNodes,
}
- MockConvertedPayloadForChild = eth.ConvertedPayload{
- TotalDifficulty: MockChild.Difficulty(),
- Block: MockChild,
- Receipts: MockReceipts,
- TxMetaData: MockTrxMeta,
- ReceiptMetaData: MockRctMeta,
- StorageNodes: MockStorageNodes,
- StateNodes: MockStateNodes,
- }
-
- Reward = shared.CalcEthBlockReward(MockBlock.Header(), MockBlock.Uncles(), MockBlock.Transactions(), MockReceipts)
- MockCIDWrapper = ð.CIDWrapper{
- BlockNumber: new(big.Int).Set(BlockNumber),
- Header: models.HeaderModel{
- BlockNumber: "1",
- BlockHash: MockBlock.Hash().String(),
- ParentHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
- CID: HeaderCID.String(),
- MhKey: HeaderMhKey,
- TotalDifficulty: MockBlock.Difficulty().String(),
- Reward: Reward.String(),
- StateRoot: MockBlock.Root().String(),
- RctRoot: MockBlock.ReceiptHash().String(),
- TxRoot: MockBlock.TxHash().String(),
- UncleRoot: MockBlock.UncleHash().String(),
- Bloom: MockBlock.Bloom().Bytes(),
- Timestamp: MockBlock.Time(),
- TimesValidated: 1,
- Coinbase: "0x0000000000000000000000000000000000000000",
- },
- Transactions: MockTrxMetaPostPublsh,
- Receipts: MockRctMetaPostPublish,
- Uncles: []models.UncleModel{},
- StateNodes: MockStateMetaPostPublish,
- StorageNodes: []models.StorageNodeWithStateKeyModel{
- {
- BlockNumber: "1",
- Path: []byte{},
- CID: StorageCID.String(),
- MhKey: StorageMhKey,
- NodeType: 2,
- StateKey: common.BytesToHash(ContractLeafKey).Hex(),
- StorageKey: common.BytesToHash(StorageLeafKey).Hex(),
- },
- },
- }
-
- HeaderIPLD, _ = blocks.NewBlockWithCid(MockHeaderRlp, HeaderCID)
- Trx1IPLD, _ = blocks.NewBlockWithCid(Tx1, Trx1CID)
- Trx2IPLD, _ = blocks.NewBlockWithCid(Tx2, Trx2CID)
- Trx3IPLD, _ = blocks.NewBlockWithCid(Tx3, Trx3CID)
- Trx4IPLD, _ = blocks.NewBlockWithCid(Tx4, Trx4CID)
- State1IPLD, _ = blocks.NewBlockWithCid(ContractLeafNode, State1CID)
- State2IPLD, _ = blocks.NewBlockWithCid(AccountLeafNode, State2CID)
- StorageIPLD, _ = blocks.NewBlockWithCid(StorageLeafNode, StorageCID)
-
- MockIPLDs = eth.IPLDs{
- BlockNumber: new(big.Int).Set(BlockNumber),
- Header: models.IPLDModel{
- BlockNumber: BlockNumber.String(),
- Data: HeaderIPLD.RawData(),
- Key: HeaderIPLD.Cid().String(),
- },
- Transactions: []models.IPLDModel{
- {
- BlockNumber: BlockNumber.String(),
- Data: Trx1IPLD.RawData(),
- Key: Trx1IPLD.Cid().String(),
- },
- {
- BlockNumber: BlockNumber.String(),
- Data: Trx2IPLD.RawData(),
- Key: Trx2IPLD.Cid().String(),
- },
- {
- BlockNumber: BlockNumber.String(),
- Data: Trx3IPLD.RawData(),
- Key: Trx3IPLD.Cid().String(),
- },
- {
- BlockNumber: BlockNumber.String(),
- Data: Trx4IPLD.RawData(),
- Key: Trx4IPLD.Cid().String(),
- },
- },
- Receipts: []models.IPLDModel{
- {
- BlockNumber: BlockNumber.String(),
- Data: Rct1IPLD,
- Key: Rct1CID.String(),
- },
- {
- BlockNumber: BlockNumber.String(),
- Data: Rct2IPLD,
- Key: Rct2CID.String(),
- },
- {
- BlockNumber: BlockNumber.String(),
- Data: Rct3IPLD,
- Key: Rct3CID.String(),
- },
- {
- BlockNumber: BlockNumber.String(),
- Data: Rct4IPLD,
- Key: Rct4CID.String(),
- },
- },
- StateNodes: []eth.StateNode{
- {
- StateLeafKey: common.BytesToHash(ContractLeafKey),
- Type: sdtypes.Leaf,
- IPLD: models.IPLDModel{
- BlockNumber: BlockNumber.String(),
- Data: State1IPLD.RawData(),
- Key: State1IPLD.Cid().String(),
- },
- Path: []byte{'\x06'},
- },
- {
- StateLeafKey: common.BytesToHash(AccountLeafKey),
- Type: sdtypes.Leaf,
- IPLD: models.IPLDModel{
- BlockNumber: BlockNumber.String(),
- Data: State2IPLD.RawData(),
- Key: State2IPLD.Cid().String(),
- },
- Path: []byte{'\x0c'},
- },
- },
- StorageNodes: []eth.StorageNode{
- {
- StateLeafKey: common.BytesToHash(ContractLeafKey),
- StorageLeafKey: common.BytesToHash(StorageLeafKey),
- Type: sdtypes.Leaf,
- IPLD: models.IPLDModel{
- BlockNumber: BlockNumber.String(),
- Data: StorageIPLD.RawData(),
- Key: StorageIPLD.Cid().String(),
- },
- Path: []byte{},
- },
- },
- }
LondonBlockNum = new(big.Int).Add(BlockNumber, big.NewInt(2))
MockLondonHeader = types.Header{
@@ -616,7 +323,7 @@ var (
Extra: []byte{},
},
}
- MockLondonBlock = createNewBlock(&MockLondonHeader, MockLondonTransactions, MockLondonUncles, MockLondonReceipts, new(trie.Trie))
+ MockLondonBlock = createNewBlock(&MockLondonHeader, MockLondonTransactions, MockLondonUncles, MockLondonReceipts, trie.NewEmpty(nil))
)
func createNewBlock(header *types.Header, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt, hasher types.TrieHasher) *types.Block {
@@ -633,7 +340,7 @@ func createNewBlock(header *types.Header, txs []*types.Transaction, uncles []*ty
// createDynamicTransactionsAndReceipts is a helper function to generate signed mock transactions and mock receipts with mock logs
func createDynamicTransactionsAndReceipts(blockNumber *big.Int) (types.Transactions, types.Receipts, common.Address) {
// make transactions
- config := params.TestChainConfig
+ config := *params.TestChainConfig
config.LondonBlock = blockNumber
trx1 := types.NewTx(&types.DynamicFeeTx{
ChainID: config.ChainID,
@@ -646,7 +353,7 @@ func createDynamicTransactionsAndReceipts(blockNumber *big.Int) (types.Transacti
Data: []byte{},
})
- transactionSigner := types.MakeSigner(config, blockNumber)
+ transactionSigner := types.MakeSigner(&config, blockNumber)
mockCurve := elliptic.P256()
mockPrvKey, err := ecdsa.GenerateKey(mockCurve, rand.Reader)
if err != nil {
@@ -682,7 +389,7 @@ func createLegacyTransactionsAndReceipts() (types.Transactions, types.Receipts,
// make transactions
trx1 := types.NewTransaction(0, Address, big.NewInt(1000), 50, big.NewInt(100), []byte{})
trx2 := types.NewTransaction(1, AnotherAddress, big.NewInt(2000), 100, big.NewInt(200), []byte{})
- trx3 := types.NewContractCreation(2, big.NewInt(1500), 75, big.NewInt(150), MockContractByteCode)
+ trx3 := types.NewContractCreation(2, big.NewInt(1500), 75, big.NewInt(150), ContractCode)
trx4 := types.NewTransaction(3, AnotherAddress1, big.NewInt(2000), 100, big.NewInt(200), []byte{})
transactionSigner := types.MakeSigner(params.MainnetChainConfig, new(big.Int).Set(BlockNumber))
mockCurve := elliptic.P256()
@@ -742,20 +449,14 @@ func createLegacyTransactionsAndReceipts() (types.Transactions, types.Receipts,
return types.Transactions{signedTrx1, signedTrx2, signedTrx3, signedTrx4}, types.Receipts{mockReceipt1, mockReceipt2, mockReceipt3, mockReceipt4}, SenderAddr
}
-func GetTxnRlp(num int, txs types.Transactions) []byte {
- buf := new(bytes.Buffer)
- txs.EncodeIndex(num, buf)
- tx := make([]byte, buf.Len())
- copy(tx, buf.Bytes())
- buf.Reset()
- return tx
-}
-
-func GetRctRlp(num int, rcts types.Receipts) []byte {
- buf := new(bytes.Buffer)
- rcts.EncodeIndex(num, buf)
- rct := make([]byte, buf.Len())
- copy(rct, buf.Bytes())
- buf.Reset()
- return rct
+func getReceiptCIDs(rcts []*types.Receipt) ([]cid.Cid, error) {
+ cids := make([]cid.Cid, len(rcts))
+ for i, rct := range rcts {
+ ethRct, err := ipld.NewReceipt(rct)
+ if err != nil {
+ return nil, err
+ }
+ cids[i] = ethRct.Cid()
+ }
+ return cids, nil
}
diff --git a/pkg/eth/types.go b/pkg/eth/types.go
index 1efa9084..03f35cc4 100644
--- a/pkg/eth/types.go
+++ b/pkg/eth/types.go
@@ -22,10 +22,11 @@ import (
"math/big"
"strconv"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/common/math"
+ "github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/statediff/indexer/models"
sdtypes "github.com/ethereum/go-ethereum/statediff/types"
@@ -125,10 +126,10 @@ func (arg *CallArgs) data() []byte {
// ToMessage converts the transaction arguments to the Message type used by the
// core evm. This method is used in calls and traces that do not require a real
// live transaction.
-func (arg *CallArgs) ToMessage(globalGasCap uint64, baseFee *big.Int) (types.Message, error) {
+func (arg *CallArgs) ToMessage(globalGasCap uint64, baseFee *big.Int) (*core.Message, error) {
// Reject invalid combinations of pre- and post-1559 fee styles
if arg.GasPrice != nil && (arg.MaxFeePerGas != nil || arg.MaxPriorityFeePerGas != nil) {
- return types.Message{}, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified")
+ return nil, errors.New("both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified")
}
// Set sender address or use zero address if none specified.
addr := arg.from()
@@ -189,51 +190,22 @@ func (arg *CallArgs) ToMessage(globalGasCap uint64, baseFee *big.Int) (types.Mes
if arg.AccessList != nil {
accessList = *arg.AccessList
}
- msg := types.NewMessage(addr, arg.To, 0, value, gas, gasPrice, gasFeeCap, gasTipCap, data, accessList, true)
+ msg := &core.Message{
+ Nonce: 0,
+ GasLimit: gas,
+ GasPrice: gasPrice,
+ GasFeeCap: gasFeeCap,
+ GasTipCap: gasTipCap,
+ To: arg.To,
+ Value: value,
+ Data: data,
+ AccessList: accessList,
+ SkipAccountChecks: true,
+ From: addr,
+ }
return msg, nil
}
-// IPLDs is used to package raw IPLD block data fetched from IPFS and returned by the server
-// Returned by IPLDFetcher and ResponseFilterer
-type IPLDs struct {
- BlockNumber *big.Int
- TotalDifficulty *big.Int
- Header models.IPLDModel
- Uncles []models.IPLDModel
- Transactions []models.IPLDModel
- Receipts []models.IPLDModel
- StateNodes []StateNode
- StorageNodes []StorageNode
-}
-
-type StateNode struct {
- Type sdtypes.NodeType
- StateLeafKey common.Hash
- Path []byte
- IPLD models.IPLDModel
-}
-
-type StorageNode struct {
- Type sdtypes.NodeType
- StateLeafKey common.Hash
- StorageLeafKey common.Hash
- Path []byte
- IPLD models.IPLDModel
-}
-
-// CIDWrapper is used to direct fetching of IPLDs from IPFS
-// Returned by CIDRetriever
-// Passed to IPLDFetcher
-type CIDWrapper struct {
- BlockNumber *big.Int
- Header models.HeaderModel
- Uncles []models.UncleModel
- Transactions []models.TxModel
- Receipts []models.ReceiptModel
- StateNodes []models.StateNodeModel
- StorageNodes []models.StorageNodeWithStateKeyModel
-}
-
// ConvertedPayload is a custom type which packages raw ETH data for publishing to IPFS and filtering to subscribers
// Returned by PayloadConverter
// Passed to IPLDPublisher and ResponseFilterer
@@ -243,13 +215,13 @@ type ConvertedPayload struct {
TxMetaData []models.TxModel
Receipts types.Receipts
ReceiptMetaData []models.ReceiptModel
- StateNodes []sdtypes.StateNode
- StorageNodes map[string][]sdtypes.StorageNode
+ StateNodes []sdtypes.StateLeafNode
+ StorageNodes map[string][]sdtypes.StorageLeafNode
}
// LogResult represent a log.
type LogResult struct {
- LeafCID string `db:"leaf_cid"`
+ LeafCID string `db:"cid"`
ReceiptID string `db:"rct_id"`
Address string `db:"address"`
Index int64 `db:"index"`
@@ -259,7 +231,7 @@ type LogResult struct {
Topic2 string `db:"topic2"`
Topic3 string `db:"topic3"`
LogLeafData []byte `db:"data"`
- RctCID string `db:"cid"`
+ RctCID string `db:"rct_cid"`
RctStatus uint64 `db:"post_status"`
BlockNumber string `db:"block_number"`
BlockHash string `db:"block_hash"`
diff --git a/pkg/graphql/client.go b/pkg/graphql/client.go
index f7650e29..4d95b8d8 100644
--- a/pkg/graphql/client.go
+++ b/pkg/graphql/client.go
@@ -43,12 +43,12 @@ type IPFSBlockResponse struct {
}
type EthTransactionCIDResponse struct {
- CID string `json:"cid"`
- TxHash string `json:"txHash"`
- Index int32 `json:"index"`
- Src string `json:"src"`
- Dst string `json:"dst"`
- BlockByMhKey IPFSBlockResponse `json:"blockByMhKey"`
+ CID string `json:"cid"`
+ TxHash string `json:"txHash"`
+ Index int32 `json:"index"`
+ Src string `json:"src"`
+ Dst string `json:"dst"`
+ BlockByCid IPFSBlockResponse `json:"blockByCid"`
}
type EthTransactionCIDByTxHash struct {
@@ -72,7 +72,7 @@ type EthHeaderCIDResponse struct {
UncleRoot string `json:"uncleRoot"`
Bloom string `json:"bloom"`
EthTransactionCIDsByHeaderId EthTransactionCIDsByHeaderIdResponse `json:"ethTransactionCidsByHeaderId"`
- BlockByMhKey IPFSBlockResponse `json:"blockByMhKey"`
+ BlockByCid IPFSBlockResponse `json:"blockByCid"`
}
type AllEthHeaderCIDsResponse struct {
@@ -195,7 +195,7 @@ func (c *Client) AllEthHeaderCIDs(ctx context.Context, condition EthHeaderCIDCon
receiptRoot
uncleRoot
bloom
- blockByMhKey {
+ blockByCid {
key
data
}
@@ -244,7 +244,7 @@ func (c *Client) EthTransactionCIDByTxHash(ctx context.Context, txHash string) (
index
src
dst
- blockByMhKey {
+ blockByCid {
data
}
}
diff --git a/pkg/graphql/graphql.go b/pkg/graphql/graphql.go
index afcbd0f3..9090194b 100644
--- a/pkg/graphql/graphql.go
+++ b/pkg/graphql/graphql.go
@@ -29,14 +29,13 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core/rawdb"
- "github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/eth/filters"
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
+ state "github.com/cerc-io/ipld-eth-statedb/direct_by_leaf"
)
var (
@@ -52,7 +51,7 @@ type Account struct {
// getState fetches the StateDB object for an account.
func (a *Account) getState(ctx context.Context) (*state.StateDB, error) {
- state, _, err := a.backend.StateAndHeaderByNumberOrHash(ctx, a.blockNrOrHash)
+ state, _, err := a.backend.IPLDDirectStateDBAndHeaderByNumberOrHash(ctx, a.blockNrOrHash)
return state, err
}
@@ -1009,30 +1008,27 @@ func (r *Resolver) GetStorageAt(ctx context.Context, args struct {
Contract common.Address
Slot common.Hash
}) (*StorageResult, error) {
- cid, ipldBlock, rlpValue, err := r.backend.IPLDRetriever.RetrieveStorageAtByAddressAndStorageSlotAndBlockHash(args.Contract, args.Slot, args.BlockHash)
-
+ cid, nodeRLP, err := r.backend.Retriever.RetrieveStorageAndRLP(args.Contract, args.Slot, args.BlockHash)
if err != nil {
if err == sql.ErrNoRows {
- ret := StorageResult{value: []byte{}, cid: "", ipldBlock: []byte{}}
-
- return &ret, nil
+ return &StorageResult{value: []byte{}, cid: "", ipldBlock: []byte{}}, nil
}
-
return nil, err
}
-
- if bytes.Equal(rlpValue, eth.EmptyNodeValue) {
- return &StorageResult{value: eth.EmptyNodeValue, cid: cid, ipldBlock: ipldBlock}, nil
+ valueRLP, err := eth.DecodeLeafNode(nodeRLP)
+ if err != nil {
+ return nil, err
+ }
+ if bytes.Equal(valueRLP, eth.EmptyNodeValue) {
+ return &StorageResult{value: eth.EmptyNodeValue, cid: cid, ipldBlock: nodeRLP}, nil
}
-
var value interface{}
- err = rlp.DecodeBytes(rlpValue, &value)
+ err = rlp.DecodeBytes(valueRLP, &value)
if err != nil {
return nil, err
}
- ret := StorageResult{value: value.([]byte), cid: cid, ipldBlock: ipldBlock}
- return &ret, nil
+ return &StorageResult{value: value.([]byte), cid: cid, ipldBlock: nodeRLP}, nil
}
func (r *Resolver) GetLogs(ctx context.Context, args struct {
@@ -1160,7 +1156,7 @@ func (t EthTransactionCID) Dst(ctx context.Context) string {
return t.dst
}
-func (t EthTransactionCID) BlockByMhKey(ctx context.Context) IPFSBlock {
+func (t EthTransactionCID) BlockByCid(ctx context.Context) IPFSBlock {
return t.ipfsBlock
}
@@ -1249,7 +1245,7 @@ func (h EthHeaderCID) EthTransactionCidsByHeaderId(ctx context.Context) EthTrans
return EthTransactionCIDsConnection{nodes: h.transactions}
}
-func (h EthHeaderCID) BlockByMhKey(ctx context.Context) IPFSBlock {
+func (h EthHeaderCID) BlockByCid(ctx context.Context) IPFSBlock {
return h.ipfsBlock
}
@@ -1289,22 +1285,6 @@ func (r *Resolver) AllEthHeaderCids(ctx context.Context, args struct {
return nil, fmt.Errorf("provide block number or block hash")
}
- // Begin tx
- tx, err := r.backend.DB.Beginx()
- if err != nil {
- return nil, err
- }
- defer func() {
- if p := recover(); p != nil {
- shared.Rollback(tx)
- panic(p)
- } else if err != nil {
- shared.Rollback(tx)
- } else {
- err = tx.Commit()
- }
- }()
-
var resultNodes []*EthHeaderCID
for _, headerCID := range headerCIDs {
var blockNumber BigInt
@@ -1326,7 +1306,7 @@ func (r *Resolver) AllEthHeaderCids(ctx context.Context, args struct {
td: td,
txRoot: headerCID.TxRoot,
receiptRoot: headerCID.RctRoot,
- uncleRoot: headerCID.UncleRoot,
+ uncleRoot: headerCID.UnclesHash,
bloom: Bytes(headerCID.Bloom).String(),
ipfsBlock: IPFSBlock{
key: headerCID.IPLD.Key,
diff --git a/pkg/graphql/graphql_suite_test.go b/pkg/graphql/graphql_suite_test.go
index e3e07262..fd5fb65b 100644
--- a/pkg/graphql/graphql_suite_test.go
+++ b/pkg/graphql/graphql_suite_test.go
@@ -17,11 +17,9 @@
package graphql_test
import (
- "io/ioutil"
"testing"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
- . "github.com/onsi/ginkgo"
+ . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
@@ -29,7 +27,3 @@ func TestGraphQL(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "graphql test suite")
}
-
-var _ = BeforeSuite(func() {
- log.SetOutput(ioutil.Discard)
-})
diff --git a/pkg/graphql/graphql_test.go b/pkg/graphql/graphql_test.go
index 7dfc3185..f447d6f7 100644
--- a/pkg/graphql/graphql_test.go
+++ b/pkg/graphql/graphql_test.go
@@ -30,151 +30,113 @@ import (
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rpc"
- "github.com/ethereum/go-ethereum/statediff"
+ "github.com/ethereum/go-ethereum/statediff/indexer/ipld"
sdtypes "github.com/ethereum/go-ethereum/statediff/types"
"github.com/jmoiron/sqlx"
- . "github.com/onsi/ginkgo"
+ . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth/test_helpers"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/graphql"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
- ethServerShared "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth/test_helpers"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/graphql"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/shared"
)
-var _ = Describe("GraphQL", func() {
- const (
- gqlEndPoint = "127.0.0.1:8083"
- )
- var (
- randomAddr = common.HexToAddress("0x1C3ab14BBaD3D99F4203bd7a11aCB94882050E6f")
- randomHash = crypto.Keccak256Hash(randomAddr.Bytes())
- blocks []*types.Block
- receipts []types.Receipts
- chain *core.BlockChain
- db *sqlx.DB
- blockHashes []common.Hash
- backend *eth.Backend
- graphQLServer *graphql.Service
- chainConfig = params.TestChainConfig
- mockTD = big.NewInt(1337)
- client = graphql.NewClient(fmt.Sprintf("http://%s/graphql", gqlEndPoint))
- ctx = context.Background()
- blockHash common.Hash
- contractAddress common.Address
- )
+const (
+ gqlEndPoint = "127.0.0.1:8083"
+)
- It("test init", func() {
- var err error
- db = shared.SetupDB()
- transformer := shared.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash())
+var (
+ randomAddr = common.HexToAddress("0x1C3ab14BBaD3D99F4203bd7a11aCB94882050E6f")
+ randomHash = crypto.Keccak256Hash(randomAddr.Bytes())
+ blocks []*types.Block
+ receipts []types.Receipts
+ chain *core.BlockChain
+ db *sqlx.DB
+ backend *eth.Backend
+ graphQLServer *graphql.Service
+ chainConfig = &*params.TestChainConfig
+ client = graphql.NewClient(fmt.Sprintf("http://%s/graphql", gqlEndPoint))
+ mockTD = big.NewInt(1337)
+ ctx = context.Background()
+ nonCanonBlockHash common.Hash
+ nonCanonContractAddress common.Address
+)
- backend, err = eth.NewEthBackend(db, ð.Config{
- ChainConfig: chainConfig,
- VMConfig: vm.Config{},
- RPCGasCap: big.NewInt(10000000000),
- GroupCacheConfig: ðServerShared.GroupCacheConfig{
- StateDB: ethServerShared.GroupConfig{
- Name: "graphql_test",
- CacheSizeInMB: 8,
- CacheExpiryInMins: 60,
- LogStatsIntervalInSecs: 0,
- },
+var _ = BeforeSuite(func() {
+ var err error
+ db = shared.SetupDB()
+
+ backend, err = eth.NewEthBackend(db, ð.Config{
+ ChainConfig: chainConfig,
+ VMConfig: vm.Config{},
+ RPCGasCap: big.NewInt(10000000000),
+ GroupCacheConfig: &shared.GroupCacheConfig{
+ StateDB: shared.GroupConfig{
+ Name: "graphql_test",
+ CacheSizeInMB: 8,
+ CacheExpiryInMins: 60,
+ LogStatsIntervalInSecs: 0,
},
- })
- Expect(err).ToNot(HaveOccurred())
+ },
+ })
+ Expect(err).ToNot(HaveOccurred())
- // make the test blockchain (and state)
- blocks, receipts, chain = test_helpers.MakeChain(5, test_helpers.Genesis, test_helpers.TestChainGen)
- params := statediff.Params{
- IntermediateStateNodes: true,
- IntermediateStorageNodes: true,
- }
-
- // iterate over the blocks, generating statediff payloads, and transforming the data into Postgres
- builder := statediff.NewBuilder(chain.StateCache())
- for i, block := range blocks {
- blockHashes = append(blockHashes, block.Hash())
- var args statediff.Args
- var rcts types.Receipts
- if i == 0 {
- args = statediff.Args{
- OldStateRoot: common.Hash{},
- NewStateRoot: block.Root(),
- BlockNumber: block.Number(),
- BlockHash: block.Hash(),
- }
- } else {
- args = statediff.Args{
- OldStateRoot: blocks[i-1].Root(),
- NewStateRoot: block.Root(),
- BlockNumber: block.Number(),
- BlockHash: block.Hash(),
- }
- rcts = receipts[i-1]
- }
-
- var diff sdtypes.StateObject
- diff, err = builder.BuildStateDiffObject(args, params)
- Expect(err).ToNot(HaveOccurred())
-
- tx, err := transformer.PushBlock(block, rcts, mockTD)
- Expect(err).ToNot(HaveOccurred())
-
- for _, node := range diff.Nodes {
- err = transformer.PushStateNode(tx, node, block.Hash().String())
- Expect(err).ToNot(HaveOccurred())
- }
-
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
- }
-
- // Insert some non-canonical data into the database so that we test our ability to discern canonicity
- indexAndPublisher := shared.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash())
-
- blockHash = test_helpers.MockBlock.Hash()
- contractAddress = test_helpers.ContractAddr
-
- tx, err := indexAndPublisher.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
- Expect(err).ToNot(HaveOccurred())
-
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
-
- // The non-canonical header has a child
- tx, err = indexAndPublisher.PushBlock(test_helpers.MockChild, test_helpers.MockReceipts, test_helpers.MockChild.Difficulty())
- Expect(err).ToNot(HaveOccurred())
-
- ccHash := sdtypes.CodeAndCodeHash{
- Hash: test_helpers.CodeHash,
- Code: test_helpers.ContractCode,
- }
-
- err = indexAndPublisher.PushCodeAndCodeHash(tx, ccHash)
- Expect(err).ToNot(HaveOccurred())
-
- err = tx.Submit(err)
- Expect(err).ToNot(HaveOccurred())
-
- graphQLServer, err = graphql.New(backend, gqlEndPoint, nil, []string{"*"}, rpc.HTTPTimeouts{})
- Expect(err).ToNot(HaveOccurred())
-
- err = graphQLServer.Start(nil)
- Expect(err).ToNot(HaveOccurred())
+ // make the test blockchain (and state)
+ chainConfig.LondonBlock = big.NewInt(100)
+ blocks, receipts, chain = test_helpers.MakeChain(5, test_helpers.Genesis, test_helpers.TestChainGen, chainConfig)
+ test_helpers.IndexChain(test_helpers.IndexChainParams{
+ StateCache: chain.StateCache(),
+ ChainConfig: chainConfig,
+ Blocks: blocks,
+ Receipts: receipts,
+ TotalDifficulty: mockTD,
})
- defer It("test teardown", func() {
- err := graphQLServer.Stop()
- Expect(err).ToNot(HaveOccurred())
- shared.TearDownDB(db)
- chain.Stop()
- })
+ // Insert some non-canonical data into the database so that we test our ability to discern canonicity
+ indexAndPublisher := shared.SetupTestStateDiffIndexer(ctx, chainConfig, test_helpers.Genesis.Hash())
+ nonCanonBlockHash = test_helpers.MockBlock.Hash()
+ nonCanonContractAddress = test_helpers.ContractAddr
+
+ tx, err := indexAndPublisher.PushBlock(test_helpers.MockBlock, test_helpers.MockReceipts, test_helpers.MockBlock.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+
+ // The non-canonical header has a child
+ tx, err = indexAndPublisher.PushBlock(test_helpers.MockChild, test_helpers.MockReceipts, test_helpers.MockChild.Difficulty())
+ Expect(err).ToNot(HaveOccurred())
+
+ ipld := sdtypes.IPLD{
+ CID: ipld.Keccak256ToCid(ipld.RawBinary, test_helpers.CodeHash.Bytes()).String(),
+ Content: test_helpers.ContractCode,
+ }
+ err = indexAndPublisher.PushIPLD(tx, ipld)
+ Expect(err).ToNot(HaveOccurred())
+
+ err = tx.Submit(err)
+ Expect(err).ToNot(HaveOccurred())
+
+ graphQLServer, err = graphql.New(backend, gqlEndPoint, nil, []string{"*"}, rpc.HTTPTimeouts{})
+ Expect(err).ToNot(HaveOccurred())
+
+ err = graphQLServer.Start(nil)
+ Expect(err).ToNot(HaveOccurred())
+})
+
+var _ = AfterSuite(func() {
+ err := graphQLServer.Stop()
+ Expect(err).ToNot(HaveOccurred())
+ shared.TearDownDB(db)
+ chain.Stop()
+})
+
+var _ = Describe("GraphQL", func() {
Describe("eth_getLogs", func() {
It("Retrieves logs that matches the provided blockHash and contract address", func() {
- logs, err := client.GetLogs(ctx, blockHash, []common.Address{contractAddress})
+ logs, err := client.GetLogs(ctx, nonCanonBlockHash, []common.Address{nonCanonContractAddress})
Expect(err).ToNot(HaveOccurred())
expectedLogs := []graphql.LogResponse{
@@ -191,7 +153,7 @@ var _ = Describe("GraphQL", func() {
})
It("Retrieves logs for the failed receipt status that matches the provided blockHash and another contract address", func() {
- logs, err := client.GetLogs(ctx, blockHash, []common.Address{test_helpers.AnotherAddress2})
+ logs, err := client.GetLogs(ctx, nonCanonBlockHash, []common.Address{test_helpers.AnotherAddress2})
Expect(err).ToNot(HaveOccurred())
expectedLogs := []graphql.LogResponse{
@@ -208,7 +170,7 @@ var _ = Describe("GraphQL", func() {
})
It("Retrieves logs that matches the provided blockHash and multiple contract addresses", func() {
- logs, err := client.GetLogs(ctx, blockHash, []common.Address{contractAddress, test_helpers.AnotherAddress2})
+ logs, err := client.GetLogs(ctx, nonCanonBlockHash, []common.Address{nonCanonContractAddress, test_helpers.AnotherAddress2})
Expect(err).ToNot(HaveOccurred())
expectedLogs := []graphql.LogResponse{
@@ -232,13 +194,13 @@ var _ = Describe("GraphQL", func() {
})
It("Retrieves all the logs for the receipt that matches the provided blockHash and nil contract address", func() {
- logs, err := client.GetLogs(ctx, blockHash, nil)
+ logs, err := client.GetLogs(ctx, nonCanonBlockHash, nil)
Expect(err).ToNot(HaveOccurred())
Expect(len(logs)).To(Equal(6))
})
It("Retrieves logs with random hash", func() {
- logs, err := client.GetLogs(ctx, randomHash, []common.Address{contractAddress})
+ logs, err := client.GetLogs(ctx, randomHash, []common.Address{nonCanonContractAddress})
Expect(err).ToNot(HaveOccurred())
Expect(len(logs)).To(Equal(0))
})
@@ -246,31 +208,31 @@ var _ = Describe("GraphQL", func() {
Describe("eth_getStorageAt", func() {
It("Retrieves the storage value at the provided contract address and storage leaf key at the block with the provided hash", func() {
- storageRes, err := client.GetStorageAt(ctx, blockHashes[2], contractAddress, test_helpers.IndexOne)
+ storageRes, err := client.GetStorageAt(ctx, blocks[2].Hash(), nonCanonContractAddress, test_helpers.IndexOne)
Expect(err).ToNot(HaveOccurred())
Expect(storageRes.Value).To(Equal(common.HexToHash("01")))
- storageRes, err = client.GetStorageAt(ctx, blockHashes[3], contractAddress, test_helpers.IndexOne)
+ storageRes, err = client.GetStorageAt(ctx, blocks[3].Hash(), nonCanonContractAddress, test_helpers.IndexOne)
Expect(err).ToNot(HaveOccurred())
Expect(storageRes.Value).To(Equal(common.HexToHash("03")))
- storageRes, err = client.GetStorageAt(ctx, blockHashes[4], contractAddress, test_helpers.IndexOne)
+ storageRes, err = client.GetStorageAt(ctx, blocks[4].Hash(), nonCanonContractAddress, test_helpers.IndexOne)
Expect(err).ToNot(HaveOccurred())
Expect(storageRes.Value).To(Equal(common.HexToHash("09")))
})
It("Retrieves empty data if it tries to access a contract at a blockHash which does not exist", func() {
- storageRes, err := client.GetStorageAt(ctx, blockHashes[0], contractAddress, test_helpers.IndexOne)
+ storageRes, err := client.GetStorageAt(ctx, blocks[0].Hash(), nonCanonContractAddress, test_helpers.IndexOne)
Expect(err).ToNot(HaveOccurred())
Expect(storageRes.Value).To(Equal(common.Hash{}))
- storageRes, err = client.GetStorageAt(ctx, blockHashes[1], contractAddress, test_helpers.IndexOne)
+ storageRes, err = client.GetStorageAt(ctx, blocks[1].Hash(), nonCanonContractAddress, test_helpers.IndexOne)
Expect(err).ToNot(HaveOccurred())
Expect(storageRes.Value).To(Equal(common.Hash{}))
})
It("Retrieves empty data if it tries to access a contract slot which does not exist", func() {
- storageRes, err := client.GetStorageAt(ctx, blockHashes[3], contractAddress, randomHash.Hex())
+ storageRes, err := client.GetStorageAt(ctx, blocks[3].Hash(), nonCanonContractAddress, randomHash.Hex())
Expect(err).ToNot(HaveOccurred())
Expect(storageRes.Value).To(Equal(common.Hash{}))
})
@@ -316,7 +278,7 @@ var _ = Describe("GraphQL", func() {
compareEthTxCID(*ethTransactionCIDResp, txCID)
- Expect(ethTransactionCIDResp.BlockByMhKey.Data).To(Equal(graphql.Bytes(txCID.IPLD.Data).String()))
+ Expect(ethTransactionCIDResp.BlockByCid.Data).To(Equal(graphql.Bytes(txCID.IPLD.Data).String()))
})
})
})
@@ -337,7 +299,7 @@ func compareEthHeaderCID(ethHeaderCID graphql.EthHeaderCIDResponse, headerCID et
Expect(ethHeaderCID.Td).To(Equal(*new(graphql.BigInt).SetUint64(uint64(td))))
Expect(ethHeaderCID.TxRoot).To(Equal(headerCID.TxRoot))
Expect(ethHeaderCID.ReceiptRoot).To(Equal(headerCID.RctRoot))
- Expect(ethHeaderCID.UncleRoot).To(Equal(headerCID.UncleRoot))
+ Expect(ethHeaderCID.UncleRoot).To(Equal(headerCID.UnclesHash))
Expect(ethHeaderCID.Bloom).To(Equal(graphql.Bytes(headerCID.Bloom).String()))
for tIdx, txCID := range headerCID.TransactionCIDs {
@@ -345,8 +307,8 @@ func compareEthHeaderCID(ethHeaderCID graphql.EthHeaderCIDResponse, headerCID et
compareEthTxCID(ethTxCID, txCID)
}
- Expect(ethHeaderCID.BlockByMhKey.Data).To(Equal(graphql.Bytes(headerCID.IPLD.Data).String()))
- Expect(ethHeaderCID.BlockByMhKey.Key).To(Equal(headerCID.IPLD.Key))
+ Expect(ethHeaderCID.BlockByCid.Data).To(Equal(graphql.Bytes(headerCID.IPLD.Data).String()))
+ Expect(ethHeaderCID.BlockByCid.Key).To(Equal(headerCID.IPLD.Key))
}
func compareEthTxCID(ethTxCID graphql.EthTransactionCIDResponse, txCID eth.TransactionCIDRecord) {
diff --git a/pkg/graphql/schema.go b/pkg/graphql/schema.go
index 14c5eb0e..3c1fe4be 100644
--- a/pkg/graphql/schema.go
+++ b/pkg/graphql/schema.go
@@ -292,7 +292,7 @@ const schema string = `
index: Int!
src: String!
dst: String!
- blockByMhKey: IPFSBlock!
+ blockByCid: IPFSBlock!
}
type EthTransactionCidsConnection {
@@ -317,7 +317,7 @@ const schema string = `
uncleRoot: String!
bloom: String!
ethTransactionCidsByHeaderId: EthTransactionCidsConnection!
- blockByMhKey: IPFSBlock!
+ blockByCid: IPFSBlock!
}
type EthHeaderCidsConnection {
diff --git a/pkg/graphql/service.go b/pkg/graphql/service.go
index 95211d7a..fccb0310 100644
--- a/pkg/graphql/service.go
+++ b/pkg/graphql/service.go
@@ -28,8 +28,8 @@ import (
"github.com/graph-gophers/graphql-go"
"github.com/graph-gophers/graphql-go/relay"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
)
// Service encapsulates a GraphQL service.
@@ -76,12 +76,12 @@ func (s *Service) Start(server *p2p.Server) error {
if err != nil {
utils.Fatalf("Could not start RPC api: %v", err)
}
- extapiURL := fmt.Sprintf("http://%v/", addr)
- log.Infof("graphQL endpoint opened for url %s", extapiURL)
+ extapiURL := fmt.Sprintf("http://%v", addr)
+ log.Infof("GraphQL endpoint opened at %s", extapiURL)
return nil
}
-// newHandler returns a new `http.Handler` that will answer GraphQL queries.
+// NewHandler returns a new `http.Handler` that will answer GraphQL queries.
// It additionally exports an interactive query browser on the / endpoint.
func NewHandler(backend *eth.Backend) (http.Handler, error) {
q := Resolver{backend}
diff --git a/pkg/log/log.go b/pkg/log/log.go
index 5fe91c9d..3d3f0cea 100644
--- a/pkg/log/log.go
+++ b/pkg/log/log.go
@@ -188,8 +188,7 @@ func WithField(field string, value interface{}) *Entry {
func Init() error {
// Set the output.
- viper.BindEnv("logrus.file", "LOGRUS_FILE")
- logFile := viper.GetString("logrus.file")
+ logFile := viper.GetString("log.file")
if logFile != "" {
file, err := os.OpenFile(logFile,
os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0640)
@@ -205,8 +204,7 @@ func Init() error {
}
// Set the level.
- viper.BindEnv("logrus.level", "LOGRUS_LEVEL")
- lvl, err := logrus.ParseLevel(viper.GetString("logrus.level"))
+ lvl, err := logrus.ParseLevel(viper.GetString("log.level"))
if err != nil {
return err
}
@@ -230,7 +228,7 @@ func Init() error {
for next, again := frames.Next(); again; next, again = frames.Next() {
if !strings.Contains(next.File, "sirupsen/logrus.us") &&
!strings.HasPrefix(next.Function, "runtime.") &&
- !strings.Contains(next.File, "ipld-eth-server/pkg/logrus") {
+ !strings.Contains(next.File, "ipld-eth-server/pkg/log") {
return next.Function, fmt.Sprintf("%s:%d", next.File, next.Line)
}
}
diff --git a/pkg/net/api_test.go b/pkg/net/api_test.go
index 99a8a44a..f70c84b5 100644
--- a/pkg/net/api_test.go
+++ b/pkg/net/api_test.go
@@ -17,10 +17,10 @@
package net_test
import (
- . "github.com/onsi/ginkgo"
+ . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/net"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/net"
)
var _ = Describe("API", func() {
diff --git a/pkg/net/net_suite_test.go b/pkg/net/net_suite_test.go
index a6c3f194..92b8f2af 100644
--- a/pkg/net/net_suite_test.go
+++ b/pkg/net/net_suite_test.go
@@ -20,8 +20,8 @@ import (
"io/ioutil"
"testing"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
- . "github.com/onsi/ginkgo"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
+ . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
diff --git a/pkg/prom/middleware.go b/pkg/prom/middleware.go
index 6227884a..da6c7526 100644
--- a/pkg/prom/middleware.go
+++ b/pkg/prom/middleware.go
@@ -25,7 +25,7 @@ import (
"net/http"
"time"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
"github.com/google/uuid"
"github.com/ethereum/go-ethereum/rpc"
diff --git a/pkg/prom/serve.go b/pkg/prom/serve.go
index 7e621bb3..6326d01d 100644
--- a/pkg/prom/serve.go
+++ b/pkg/prom/serve.go
@@ -20,7 +20,7 @@ import (
"errors"
"net/http"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
diff --git a/pkg/rpc/http.go b/pkg/rpc/http.go
index 9c2efa84..0dc9d780 100644
--- a/pkg/rpc/http.go
+++ b/pkg/rpc/http.go
@@ -19,12 +19,12 @@ package rpc
import (
"fmt"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/node"
"github.com/ethereum/go-ethereum/rpc"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/prom"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/prom"
)
// StartHTTPEndpoint starts the HTTP RPC endpoint, configured with cors/vhosts/modules.
@@ -42,8 +42,8 @@ func StartHTTPEndpoint(endpoint string, apis []rpc.API, modules []string, cors [
if err != nil {
utils.Fatalf("Could not start RPC api: %v", err)
}
- extapiURL := fmt.Sprintf("http://%v/", addr)
- log.Infof("HTTP endpoint opened %s", extapiURL)
+ extapiURL := fmt.Sprintf("http://%s", addr)
+ log.Infof("HTTP endpoint opened at %s", extapiURL)
return srv, err
}
diff --git a/pkg/rpc/ipc.go b/pkg/rpc/ipc.go
index 20767ce2..ad6cdf33 100644
--- a/pkg/rpc/ipc.go
+++ b/pkg/rpc/ipc.go
@@ -22,11 +22,11 @@ import (
"os"
"path/filepath"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
"github.com/ethereum/go-ethereum/p2p/netutil"
"github.com/ethereum/go-ethereum/rpc"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/prom"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/prom"
)
var (
diff --git a/pkg/rpc/ws.go b/pkg/rpc/ws.go
index adebac8f..fab5d128 100644
--- a/pkg/rpc/ws.go
+++ b/pkg/rpc/ws.go
@@ -24,7 +24,8 @@ import (
"github.com/ethereum/go-ethereum/node"
"github.com/ethereum/go-ethereum/rpc"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/prom"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/prom"
)
// StartWSEndpoint starts a websocket endpoint.
@@ -49,6 +50,7 @@ func StartWSEndpoint(endpoint string, apis []rpc.API, modules []string, wsOrigin
wsServer := NewWSServer(wsOrigins, handler)
wsServer.Handler = prom.WSMiddleware(wsServer.Handler)
go wsServer.Serve(listener)
+ log.Infof("WS endpoint opened at ws://%s", endpoint)
return listener, handler, err
diff --git a/pkg/serve/api.go b/pkg/serve/api.go
index d8397041..d4f7352e 100644
--- a/pkg/serve/api.go
+++ b/pkg/serve/api.go
@@ -17,13 +17,8 @@
package serve
import (
- "context"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
"github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/statediff/types"
-
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
)
// APIName is the namespace used for the state diffing service API
@@ -46,45 +41,6 @@ func NewPublicServerAPI(w Server, client *rpc.Client) *PublicServerAPI {
}
}
-// Stream is the public method to setup a subscription that fires off IPLD payloads as they are processed
-func (api *PublicServerAPI) Stream(ctx context.Context, params eth.SubscriptionSettings) (*rpc.Subscription, error) {
- // ensure that the RPC connection supports subscriptions
- notifier, supported := rpc.NotifierFromContext(ctx)
- if !supported {
- return nil, rpc.ErrNotificationsUnsupported
- }
-
- // create subscription and start waiting for stream events
- rpcSub := notifier.CreateSubscription()
-
- go func() {
- // subscribe to events from the SyncPublishScreenAndServe service
- payloadChannel := make(chan SubscriptionPayload, PayloadChanBufferSize)
- quitChan := make(chan bool, 1)
- go api.w.Subscribe(rpcSub.ID, payloadChannel, quitChan, params)
-
- // loop and await payloads and relay them to the subscriber using notifier
- for {
- select {
- case packet := <-payloadChannel:
- if err := notifier.Notify(rpcSub.ID, packet); err != nil {
- log.Error("Failed to send watcher data packet", "err", err)
- api.w.Unsubscribe(rpcSub.ID)
- return
- }
- case <-rpcSub.Err():
- api.w.Unsubscribe(rpcSub.ID)
- return
- case <-quitChan:
- // don't need to unsubscribe from the watcher, the service does so before sending the quit signal this way
- return
- }
- }
- }()
-
- return rpcSub, nil
-}
-
// WatchAddress makes a geth WatchAddress API call with the given operation and args
func (api *PublicServerAPI) WatchAddress(operation types.OperationType, args []types.WatchAddressArg) error {
err := api.rpc.Call(nil, "statediff_watchAddress", operation, args)
diff --git a/pkg/serve/config.go b/pkg/serve/config.go
index ab597c58..de0b24a7 100644
--- a/pkg/serve/config.go
+++ b/pkg/serve/config.go
@@ -29,18 +29,20 @@ import (
"github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/statediff"
"github.com/ethereum/go-ethereum/statediff/indexer/database/sql/postgres"
+ "github.com/ethereum/go-ethereum/statediff/indexer/node"
"github.com/jmoiron/sqlx"
"github.com/spf13/viper"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/prom"
- ethServerShared "github.com/cerc-io/ipld-eth-server/v4/pkg/shared"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/prom"
+ ethServerShared "github.com/cerc-io/ipld-eth-server/v5/pkg/shared"
)
// Env variables
const (
- SERVER_WS_PATH = "SERVER_WS_PATH"
- SERVER_IPC_PATH = "SERVER_IPC_PATH"
- SERVER_HTTP_PATH = "SERVER_HTTP_PATH"
+ SERVER_WS_PATH = "SERVER_WS_PATH"
+ SERVER_IPC_PATH = "SERVER_IPC_PATH"
+ SERVER_HTTP_PATH = "SERVER_HTTP_PATH"
+ SERVER_GRAPHQL_PATH = "SERVER_GRAPHQL_PATH"
SERVER_MAX_IDLE_CONNECTIONS = "SERVER_MAX_IDLE_CONNECTIONS"
SERVER_MAX_OPEN_CONNECTIONS = "SERVER_MAX_OPEN_CONNECTIONS"
@@ -57,6 +59,25 @@ const (
VALIDATOR_ENABLED = "VALIDATOR_ENABLED"
VALIDATOR_EVERY_NTH_BLOCK = "VALIDATOR_EVERY_NTH_BLOCK"
+
+ HTTP_TIMEOUT = "HTTP_TIMEOUT"
+
+ ETH_WS_PATH = "ETH_WS_PATH"
+ ETH_HTTP_PATH = "ETH_HTTP_PATH"
+ ETH_NODE_ID = "ETH_NODE_ID"
+ ETH_CLIENT_NAME = "ETH_CLIENT_NAME"
+ ETH_GENESIS_BLOCK = "ETH_GENESIS_BLOCK"
+ ETH_NETWORK_ID = "ETH_NETWORK_ID"
+ ETH_CHAIN_ID = "ETH_CHAIN_ID"
+
+ DATABASE_NAME = "DATABASE_NAME"
+ DATABASE_HOSTNAME = "DATABASE_HOSTNAME"
+ DATABASE_PORT = "DATABASE_PORT"
+ DATABASE_USER = "DATABASE_USER"
+ DATABASE_PASSWORD = "DATABASE_PASSWORD"
+ DATABASE_MAX_IDLE_CONNECTIONS = "DATABASE_MAX_IDLE_CONNECTIONS"
+ DATABASE_MAX_OPEN_CONNECTIONS = "DATABASE_MAX_OPEN_CONNECTIONS"
+ DATABASE_MAX_CONN_LIFETIME = "DATABASE_MAX_CONN_LIFETIME"
)
// Config struct
@@ -76,12 +97,6 @@ type Config struct {
EthGraphqlEnabled bool
EthGraphqlEndpoint string
- IpldGraphqlEnabled bool
- IpldGraphqlEndpoint string
- IpldPostgraphileEndpoint string
- TracingHttpEndpoint string
- TracingPostgraphileEndpoint string
-
ChainConfig *params.ChainConfig
DefaultSender *common.Address
RPCGasCap *big.Int
@@ -106,8 +121,12 @@ type Config struct {
func NewConfig() (*Config, error) {
c := new(Config)
+ viper.BindEnv("server.httpPath", SERVER_HTTP_PATH)
+ viper.BindEnv("server.wsPath", SERVER_WS_PATH)
+ viper.BindEnv("server.ipcPath", SERVER_IPC_PATH)
+ viper.BindEnv("server.graphqlPath", SERVER_GRAPHQL_PATH)
+
viper.BindEnv("ethereum.httpPath", ETH_HTTP_PATH)
- viper.BindEnv("ethereum.defaultSender", ETH_DEFAULT_SENDER_ADDR)
viper.BindEnv("ethereum.rpcGasCap", ETH_RPC_GAS_CAP)
viper.BindEnv("ethereum.chainConfig", ETH_CHAIN_CONFIG)
viper.BindEnv("ethereum.supportsStateDiff", ETH_SUPPORTS_STATEDIFF)
@@ -115,6 +134,8 @@ func NewConfig() (*Config, error) {
viper.BindEnv("ethereum.forwardEthCalls", ETH_FORWARD_ETH_CALLS)
viper.BindEnv("ethereum.forwardGetStorageAt", ETH_FORWARD_GET_STORAGE_AT)
viper.BindEnv("ethereum.proxyOnError", ETH_PROXY_ON_ERROR)
+ viper.BindEnv("log.file", "LOG_FILE")
+ viper.BindEnv("log.level", "LOG_LEVEL")
c.dbInit()
ethHTTP := viper.GetString("ethereum.httpPath")
@@ -132,9 +153,9 @@ func NewConfig() (*Config, error) {
c.EthHttpEndpoint = ethHTTPEndpoint
// websocket server
- wsEnabled := viper.GetBool("eth.server.ws")
+ wsEnabled := viper.GetBool("server.ws")
if wsEnabled {
- wsPath := viper.GetString("eth.server.wsPath")
+ wsPath := viper.GetString("server.wsPath")
if wsPath == "" {
wsPath = "127.0.0.1:8080"
}
@@ -143,9 +164,9 @@ func NewConfig() (*Config, error) {
c.WSEnabled = wsEnabled
// ipc server
- ipcEnabled := viper.GetBool("eth.server.ipc")
+ ipcEnabled := viper.GetBool("server.ipc")
if ipcEnabled {
- ipcPath := viper.GetString("eth.server.ipcPath")
+ ipcPath := viper.GetString("server.ipcPath")
if ipcPath == "" {
home, err := os.UserHomeDir()
if err != nil {
@@ -158,9 +179,9 @@ func NewConfig() (*Config, error) {
c.IPCEnabled = ipcEnabled
// http server
- httpEnabled := viper.GetBool("eth.server.http")
+ httpEnabled := viper.GetBool("server.http")
if httpEnabled {
- httpPath := viper.GetString("eth.server.httpPath")
+ httpPath := viper.GetString("server.httpPath")
if httpPath == "" {
httpPath = "127.0.0.1:8081"
}
@@ -169,9 +190,9 @@ func NewConfig() (*Config, error) {
c.HTTPEnabled = httpEnabled
// eth graphql endpoint
- ethGraphqlEnabled := viper.GetBool("eth.server.graphql")
+ ethGraphqlEnabled := viper.GetBool("server.graphql")
if ethGraphqlEnabled {
- ethGraphqlPath := viper.GetString("eth.server.graphqlPath")
+ ethGraphqlPath := viper.GetString("server.graphqlPath")
if ethGraphqlPath == "" {
ethGraphqlPath = "127.0.0.1:8082"
}
@@ -179,34 +200,6 @@ func NewConfig() (*Config, error) {
}
c.EthGraphqlEnabled = ethGraphqlEnabled
- // ipld graphql endpoint
- ipldGraphqlEnabled := viper.GetBool("ipld.server.graphql")
- if ipldGraphqlEnabled {
- ipldGraphqlPath := viper.GetString("ipld.server.graphqlPath")
- if ipldGraphqlPath == "" {
- ipldGraphqlPath = "127.0.0.1:8083"
- }
- c.IpldGraphqlEndpoint = ipldGraphqlPath
-
- ipldPostgraphilePath := viper.GetString("ipld.postgraphilePath")
- if ipldPostgraphilePath == "" {
- return nil, errors.New("ipld-postgraphile-path parameter is empty")
- }
- c.IpldPostgraphileEndpoint = ipldPostgraphilePath
-
- tracingHttpEndpoint := viper.GetString("tracing.httpPath")
- tracingPostgraphilePath := viper.GetString("tracing.postgraphilePath")
-
- // these two parameters either can be both empty or both set
- if (tracingHttpEndpoint == "" && tracingPostgraphilePath != "") || (tracingHttpEndpoint != "" && tracingPostgraphilePath == "") {
- return nil, errors.New("tracing.httpPath and tracing.postgraphilePath parameters either can be both empty or both set")
- }
-
- c.TracingHttpEndpoint = tracingHttpEndpoint
- c.TracingPostgraphileEndpoint = tracingPostgraphilePath
- }
- c.IpldGraphqlEnabled = ipldGraphqlEnabled
-
overrideDBConnConfig(&c.DBConfig)
serveDB, err := ethServerShared.NewDB(c.DBConfig.DbConnectionString(), c.DBConfig)
if err != nil {
@@ -216,11 +209,6 @@ func NewConfig() (*Config, error) {
prom.RegisterDBCollector(c.DBConfig.DatabaseName, serveDB)
c.DB = serveDB
- defaultSenderStr := viper.GetString("ethereum.defaultSender")
- if defaultSenderStr != "" {
- sender := common.HexToAddress(defaultSenderStr)
- c.DefaultSender = &sender
- }
rpcGasCapStr := viper.GetString("ethereum.rpcGasCap")
if rpcGasCapStr != "" {
if rpcGasCap, ok := new(big.Int).SetString(rpcGasCapStr, 10); ok {
@@ -313,3 +301,24 @@ func (c *Config) loadValidatorConfig() {
c.StateValidationEnabled = viper.GetBool("validator.enabled")
c.StateValidationEveryNthBlock = viper.GetUint64("validator.everyNthBlock")
}
+
+// GetEthNodeAndClient returns eth node info and client from path url
+func getEthNodeAndClient(path string) (node.Info, *rpc.Client, error) {
+ viper.BindEnv("ethereum.nodeID", ETH_NODE_ID)
+ viper.BindEnv("ethereum.clientName", ETH_CLIENT_NAME)
+ viper.BindEnv("ethereum.genesisBlock", ETH_GENESIS_BLOCK)
+ viper.BindEnv("ethereum.networkID", ETH_NETWORK_ID)
+ viper.BindEnv("ethereum.chainID", ETH_CHAIN_ID)
+
+ rpcClient, err := rpc.Dial(path)
+ if err != nil {
+ return node.Info{}, nil, err
+ }
+ return node.Info{
+ ID: viper.GetString("ethereum.nodeID"),
+ ClientName: viper.GetString("ethereum.clientName"),
+ GenesisBlock: viper.GetString("ethereum.genesisBlock"),
+ NetworkID: viper.GetString("ethereum.networkID"),
+ ChainID: viper.GetUint64("ethereum.chainID"),
+ }, rpcClient, nil
+}
diff --git a/pkg/serve/env.go b/pkg/serve/env.go
deleted file mode 100644
index ec9bc4d1..00000000
--- a/pkg/serve/env.go
+++ /dev/null
@@ -1,50 +0,0 @@
-package serve
-
-import (
- "github.com/ethereum/go-ethereum/rpc"
- "github.com/ethereum/go-ethereum/statediff/indexer/node"
- "github.com/spf13/viper"
-)
-
-// Env variables
-const (
- HTTP_TIMEOUT = "HTTP_TIMEOUT"
-
- ETH_WS_PATH = "ETH_WS_PATH"
- ETH_HTTP_PATH = "ETH_HTTP_PATH"
- ETH_NODE_ID = "ETH_NODE_ID"
- ETH_CLIENT_NAME = "ETH_CLIENT_NAME"
- ETH_GENESIS_BLOCK = "ETH_GENESIS_BLOCK"
- ETH_NETWORK_ID = "ETH_NETWORK_ID"
- ETH_CHAIN_ID = "ETH_CHAIN_ID"
-
- DATABASE_NAME = "DATABASE_NAME"
- DATABASE_HOSTNAME = "DATABASE_HOSTNAME"
- DATABASE_PORT = "DATABASE_PORT"
- DATABASE_USER = "DATABASE_USER"
- DATABASE_PASSWORD = "DATABASE_PASSWORD"
- DATABASE_MAX_IDLE_CONNECTIONS = "DATABASE_MAX_IDLE_CONNECTIONS"
- DATABASE_MAX_OPEN_CONNECTIONS = "DATABASE_MAX_OPEN_CONNECTIONS"
- DATABASE_MAX_CONN_LIFETIME = "DATABASE_MAX_CONN_LIFETIME"
-)
-
-// GetEthNodeAndClient returns eth node info and client from path url
-func getEthNodeAndClient(path string) (node.Info, *rpc.Client, error) {
- viper.BindEnv("ethereum.nodeID", ETH_NODE_ID)
- viper.BindEnv("ethereum.clientName", ETH_CLIENT_NAME)
- viper.BindEnv("ethereum.genesisBlock", ETH_GENESIS_BLOCK)
- viper.BindEnv("ethereum.networkID", ETH_NETWORK_ID)
- viper.BindEnv("ethereum.chainID", ETH_CHAIN_ID)
-
- rpcClient, err := rpc.Dial(path)
- if err != nil {
- return node.Info{}, nil, err
- }
- return node.Info{
- ID: viper.GetString("ethereum.nodeID"),
- ClientName: viper.GetString("ethereum.clientName"),
- GenesisBlock: viper.GetString("ethereum.genesisBlock"),
- NetworkID: viper.GetString("ethereum.networkID"),
- ChainID: viper.GetUint64("ethereum.chainID"),
- }, rpcClient, nil
-}
diff --git a/pkg/serve/service.go b/pkg/serve/service.go
index d6c6feae..10418e01 100644
--- a/pkg/serve/service.go
+++ b/pkg/serve/service.go
@@ -17,25 +17,21 @@
package serve
import (
- "fmt"
"strconv"
"sync"
"time"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
- "github.com/ethereum/go-ethereum/common"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
"github.com/ethereum/go-ethereum/core/vm"
- "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/eth/tracers"
ethnode "github.com/ethereum/go-ethereum/node"
"github.com/ethereum/go-ethereum/p2p"
- "github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc"
"github.com/jmoiron/sqlx"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/debug"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/eth"
- "github.com/cerc-io/ipld-eth-server/v4/pkg/net"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/debug"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/eth"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/net"
)
const (
@@ -51,11 +47,7 @@ type Server interface {
APIs() []rpc.API
Protocols() []p2p.Protocol
// Pub-Sub handling event loop
- Serve(wg *sync.WaitGroup, screenAndServePayload <-chan eth.ConvertedPayload)
- // Method to subscribe to the service
- Subscribe(id rpc.ID, sub chan<- SubscriptionPayload, quitChan chan<- bool, params eth.SubscriptionSettings)
- // Method to unsubscribe from the service
- Unsubscribe(id rpc.ID)
+ Serve(wg *sync.WaitGroup)
// Backend exposes the server's backend
Backend() *eth.Backend
}
@@ -64,22 +56,10 @@ type Server interface {
type Service struct {
// Used to sync access to the Subscriptions
sync.Mutex
- // Interface for filtering and serving data according to subscribed clients according to their specification
- Filterer eth.Filterer
- // Interface for fetching IPLD objects from IPFS
- IPLDFetcher eth.Fetcher
- // Interface for searching and retrieving CIDs from Postgres index
- Retriever eth.Retriever
// Used to signal shutdown of the service
QuitChan chan bool
- // A mapping of rpc.IDs to their subscription channels, mapped to their subscription type (hash of the StreamFilters)
- Subscriptions map[common.Hash]map[rpc.ID]Subscription
- // A mapping of subscription params hash to the corresponding subscription params
- SubscriptionTypes map[common.Hash]eth.SubscriptionSettings
- // Underlying db
+ // Underlying db connection pool
db *sqlx.DB
- // wg for syncing serve processes
- serveWg *sync.WaitGroup
// rpc client for forwarding cache misses
client *rpc.Client
// whether the proxied client supports state diffing
@@ -101,13 +81,8 @@ type Service struct {
// NewServer creates a new Server using an underlying Service struct
func NewServer(settings *Config) (Server, error) {
sap := new(Service)
- sap.Retriever = eth.NewCIDRetriever(settings.DB)
- sap.IPLDFetcher = eth.NewIPLDFetcher(settings.DB)
- sap.Filterer = eth.NewResponseFilterer()
sap.db = settings.DB
sap.QuitChan = make(chan bool)
- sap.Subscriptions = make(map[common.Hash]map[rpc.ID]Subscription)
- sap.SubscriptionTypes = make(map[common.Hash]eth.SubscriptionSettings)
sap.client = settings.Client
sap.supportsStateDiffing = settings.SupportStateDiff
sap.stateDiffTimeout = settings.StateDiffTimeout
@@ -119,7 +94,6 @@ func NewServer(settings *Config) (Server, error) {
sap.backend, err = eth.NewEthBackend(sap.db, ð.Config{
ChainConfig: settings.ChainConfig,
VMConfig: vm.Config{NoBaseFee: true},
- DefaultSender: settings.DefaultSender,
RPCGasCap: settings.RPCGasCap,
GroupCacheConfig: settings.GroupCache,
})
@@ -177,191 +151,14 @@ func (sap *Service) APIs() []rpc.API {
// It filters and sends this data to any subscribers to the service
// This process can also be stood up alone, without an screenAndServePayload attached to a Sync process
// and it will hang on the WaitGroup indefinitely, allowing the Service to serve historical data requests only
-func (sap *Service) Serve(wg *sync.WaitGroup, screenAndServePayload <-chan eth.ConvertedPayload) {
- sap.serveWg = wg
+func (sap *Service) Serve(wg *sync.WaitGroup) {
go func() {
wg.Add(1)
defer wg.Done()
- for {
- select {
- case payload := <-screenAndServePayload:
- sap.filterAndServe(payload)
- case <-sap.QuitChan:
- log.Info("quiting eth ipld server process")
- return
- }
- }
+ <-sap.QuitChan
+ log.Info("quiting eth ipld server process")
}()
- log.Info("eth ipld server process successfully spun up")
-}
-
-// filterAndServe filters the payload according to each subscription type and sends to the subscriptions
-func (sap *Service) filterAndServe(payload eth.ConvertedPayload) {
- log.Debug("sending eth ipld payload to subscriptions")
- sap.Lock()
- sap.serveWg.Add(1)
- defer sap.Unlock()
- defer sap.serveWg.Done()
- for ty, subs := range sap.Subscriptions {
- // Retrieve the subscription parameters for this subscription type
- subConfig, ok := sap.SubscriptionTypes[ty]
- if !ok {
- log.Errorf("eth ipld server subscription configuration for subscription type %s not available", ty.Hex())
- sap.closeType(ty)
- continue
- }
- if subConfig.End.Int64() > 0 && subConfig.End.Int64() < payload.Block.Number().Int64() {
- // We are not out of range for this subscription type
- // close it, and continue to the next
- sap.closeType(ty)
- continue
- }
- response, err := sap.Filterer.Filter(subConfig, payload)
- if err != nil {
- log.Errorf("eth ipld server filtering error: %v", err)
- sap.closeType(ty)
- continue
- }
- responseRLP, err := rlp.EncodeToBytes(response)
- if err != nil {
- log.Errorf("eth ipld server rlp encoding error: %v", err)
- continue
- }
- for id, sub := range subs {
- select {
- case sub.PayloadChan <- SubscriptionPayload{Data: responseRLP, Err: "", Flag: EmptyFlag, Height: response.BlockNumber.Int64()}:
- log.Debugf("sending eth ipld server payload to subscription %s", id)
- default:
- log.Infof("unable to send eth ipld payload to subscription %s; channel has no receiver", id)
- }
- }
- }
-}
-
-// Subscribe is used by the API to remotely subscribe to the service loop
-// The params must be rlp serializable and satisfy the SubscriptionSettings() interface
-func (sap *Service) Subscribe(id rpc.ID, sub chan<- SubscriptionPayload, quitChan chan<- bool, params eth.SubscriptionSettings) {
- sap.serveWg.Add(1)
- defer sap.serveWg.Done()
- log.Infof("new eth ipld subscription %s", id)
- subscription := Subscription{
- ID: id,
- PayloadChan: sub,
- QuitChan: quitChan,
- }
- // Subscription type is defined as the hash of the rlp-serialized subscription settings
- by, err := rlp.EncodeToBytes(params)
- if err != nil {
- sendNonBlockingErr(subscription, err)
- sendNonBlockingQuit(subscription)
- return
- }
- subscriptionType := crypto.Keccak256Hash(by)
- if !params.BackFillOnly {
- // Add subscriber
- sap.Lock()
- if sap.Subscriptions[subscriptionType] == nil {
- sap.Subscriptions[subscriptionType] = make(map[rpc.ID]Subscription)
- }
- sap.Subscriptions[subscriptionType][id] = subscription
- sap.SubscriptionTypes[subscriptionType] = params
- sap.Unlock()
- }
- // If the subscription requests a backfill, use the Postgres index to lookup and retrieve historical data
- // Otherwise we only filter new data as it is streamed in from the state diffing geth node
- if params.BackFill || params.BackFillOnly {
- if err := sap.sendHistoricalData(subscription, id, params); err != nil {
- sendNonBlockingErr(subscription, fmt.Errorf("eth ipld server subscription backfill error: %v", err))
- sendNonBlockingQuit(subscription)
- return
- }
- }
-}
-
-// sendHistoricalData sends historical data to the requesting subscription
-func (sap *Service) sendHistoricalData(sub Subscription, id rpc.ID, params eth.SubscriptionSettings) error {
- log.Infof("sending eth ipld historical data to subscription %s", id)
- // Retrieve cached CIDs relevant to this subscriber
- var endingBlock int64
- var startingBlock int64
- var err error
- startingBlock, err = sap.Retriever.RetrieveFirstBlockNumber()
- if err != nil {
- return err
- }
- if startingBlock < params.Start.Int64() {
- startingBlock = params.Start.Int64()
- }
- endingBlock, err = sap.Retriever.RetrieveLastBlockNumber()
- if err != nil {
- return err
- }
- if endingBlock > params.End.Int64() && params.End.Int64() > 0 && params.End.Int64() > startingBlock {
- endingBlock = params.End.Int64()
- }
- log.Debugf("eth ipld historical data starting block: %d", params.Start.Int64())
- log.Debugf("eth ipld historical data ending block: %d", endingBlock)
- go func() {
- sap.serveWg.Add(1)
- defer sap.serveWg.Done()
- for i := startingBlock; i <= endingBlock; i++ {
- select {
- case <-sap.QuitChan:
- log.Infof("ethereum historical data feed to subscription %s closed", id)
- return
- default:
- }
- cidWrappers, empty, err := sap.Retriever.Retrieve(params, i)
- if err != nil {
- sendNonBlockingErr(sub, fmt.Errorf("eth ipld server cid retrieval error at block %d\r%s", i, err.Error()))
- continue
- }
- if empty {
- continue
- }
- for _, cids := range cidWrappers {
- response, err := sap.IPLDFetcher.Fetch(cids)
- if err != nil {
- sendNonBlockingErr(sub, fmt.Errorf("eth ipld server ipld fetching error at block %d\r%s", i, err.Error()))
- continue
- }
- responseRLP, err := rlp.EncodeToBytes(response)
- if err != nil {
- log.Error(err)
- continue
- }
- select {
- case sub.PayloadChan <- SubscriptionPayload{Data: responseRLP, Err: "", Flag: EmptyFlag, Height: response.BlockNumber.Int64()}:
- log.Debugf("eth ipld server sending historical data payload to subscription %s", id)
- default:
- log.Infof("eth ipld server unable to send backFill payload to subscription %s; channel has no receiver", id)
- }
- }
- }
- // when we are done backfilling send an empty payload signifying so in the msg
- select {
- case sub.PayloadChan <- SubscriptionPayload{Data: nil, Err: "", Flag: BackFillCompleteFlag}:
- log.Debugf("eth ipld server sending backFill completion notice to subscription %s", id)
- default:
- log.Infof("eth ipld server unable to send backFill completion notice to subscription %s", id)
- }
- }()
- return nil
-}
-
-// Unsubscribe is used by the API to remotely unsubscribe to the StateDiffingService loop
-func (sap *Service) Unsubscribe(id rpc.ID) {
- log.Infof("unsubscribing %s from the eth ipld server", id)
- sap.Lock()
- for ty := range sap.Subscriptions {
- delete(sap.Subscriptions[ty], id)
- if len(sap.Subscriptions[ty]) == 0 {
- // If we removed the last subscription of this type, remove the subscription type outright
- delete(sap.Subscriptions, ty)
- delete(sap.SubscriptionTypes, ty)
- }
- }
- sap.Unlock()
+ log.Debug("eth ipld server process successfully spun up")
}
// Start is used to begin the service
@@ -369,18 +166,16 @@ func (sap *Service) Unsubscribe(id rpc.ID) {
func (sap *Service) Start() error {
log.Info("starting eth ipld server")
wg := new(sync.WaitGroup)
- payloadChan := make(chan eth.ConvertedPayload, PayloadChanBufferSize)
- sap.Serve(wg, payloadChan)
+ sap.Serve(wg)
return nil
}
// Stop is used to close down the service
// This is mostly just to satisfy the node.Service interface
func (sap *Service) Stop() error {
- log.Infof("stopping eth ipld server")
+ log.Info("stopping eth ipld server")
sap.Lock()
close(sap.QuitChan)
- sap.close()
sap.Unlock()
return nil
}
@@ -389,28 +184,3 @@ func (sap *Service) Stop() error {
func (sap *Service) Backend() *eth.Backend {
return sap.backend
}
-
-// close is used to close all listening subscriptions
-// close needs to be called with subscription access locked
-func (sap *Service) close() {
- log.Infof("closing all eth ipld server subscriptions")
- for subType, subs := range sap.Subscriptions {
- for _, sub := range subs {
- sendNonBlockingQuit(sub)
- }
- delete(sap.Subscriptions, subType)
- delete(sap.SubscriptionTypes, subType)
- }
-}
-
-// closeType is used to close all subscriptions of given type
-// closeType needs to be called with subscription access locked
-func (sap *Service) closeType(subType common.Hash) {
- log.Infof("closing all eth ipld server subscriptions of type %s", subType.String())
- subs := sap.Subscriptions[subType]
- for _, sub := range subs {
- sendNonBlockingQuit(sub)
- }
- delete(sap.Subscriptions, subType)
- delete(sap.SubscriptionTypes, subType)
-}
diff --git a/pkg/serve/subscription.go b/pkg/serve/subscription.go
deleted file mode 100644
index 41383590..00000000
--- a/pkg/serve/subscription.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// VulcanizeDB
-// Copyright © 2019 Vulcanize
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-package serve
-
-import (
- "errors"
-
- "github.com/ethereum/go-ethereum/rpc"
-)
-
-type Flag int32
-
-const (
- EmptyFlag Flag = iota
- BackFillCompleteFlag
-)
-
-// Subscription holds the information for an individual client subscription to the watcher
-type Subscription struct {
- ID rpc.ID
- PayloadChan chan<- SubscriptionPayload
- QuitChan chan<- bool
-}
-
-// SubscriptionPayload is the struct for a watcher data subscription payload
-// It carries data of a type specific to the chain being supported/queried and an error message
-type SubscriptionPayload struct {
- Data []byte `json:"data"` // e.g. for Ethereum rlp serialized eth.StreamPayload
- Height int64 `json:"height"`
- Err string `json:"err"` // field for error
- Flag Flag `json:"flag"` // field for message
-}
-
-func (sp SubscriptionPayload) Error() error {
- if sp.Err == "" {
- return nil
- }
- return errors.New(sp.Err)
-}
-
-func (sp SubscriptionPayload) BackFillComplete() bool {
- if sp.Flag == BackFillCompleteFlag {
- return true
- }
- return false
-}
diff --git a/pkg/shared/functions.go b/pkg/shared/functions.go
index f5eac06c..be9c7598 100644
--- a/pkg/shared/functions.go
+++ b/pkg/shared/functions.go
@@ -17,11 +17,8 @@
package shared
import (
- "github.com/cerc-io/ipld-eth-server/v4/pkg/log"
+ "github.com/cerc-io/ipld-eth-server/v5/pkg/log"
"github.com/ethereum/go-ethereum/common"
- "github.com/ipfs/go-cid"
- blockstore "github.com/ipfs/go-ipfs-blockstore"
- dshelp "github.com/ipfs/go-ipfs-ds-help"
"github.com/jmoiron/sqlx"
)
@@ -47,33 +44,3 @@ func Rollback(tx *sqlx.Tx) {
log.Error(err)
}
}
-
-// FetchIPLDByMhKeyAndBlockNumber is used to retrieve an ipld from Postgres blockstore with the provided tx, mhkey string and blockNumber
-func FetchIPLDByMhKeyAndBlockNumber(tx *sqlx.Tx, mhKey string, blockNumber uint64) ([]byte, error) {
- pgStr := `SELECT data FROM public.blocks WHERE key = $1 AND block_number = $2`
- var block []byte
- return block, tx.Get(&block, pgStr, mhKey, blockNumber)
-}
-
-// FetchIPLD is used to retrieve an IPLD from Postgres mhkey and blockNumber
-func FetchIPLD(db *sqlx.DB, mhKey string, blockNumber uint64) ([]byte, error) {
- pgStr := `SELECT data FROM public.blocks WHERE key = $1 AND block_number = $2`
- var block []byte
- return block, db.Get(&block, pgStr, mhKey, blockNumber)
-}
-
-// MultihashKeyFromCID converts a cid into a blockstore-prefixed multihash db key string
-func MultihashKeyFromCID(c cid.Cid) string {
- dbKey := dshelp.MultihashToDsKey(c.Hash())
- return blockstore.BlockPrefix.String() + dbKey.String()
-}
-
-// MultihashKeyFromCIDString converts a cid string into a blockstore-prefixed multihash db key string
-func MultihashKeyFromCIDString(c string) (string, error) {
- dc, err := cid.Decode(c)
- if err != nil {
- return "", err
- }
- dbKey := dshelp.MultihashToDsKey(dc.Hash())
- return blockstore.BlockPrefix.String() + dbKey.String(), nil
-}
diff --git a/pkg/shared/test_helpers.go b/pkg/shared/test_helpers.go
index f8d32dbf..dc43572d 100644
--- a/pkg/shared/test_helpers.go
+++ b/pkg/shared/test_helpers.go
@@ -19,8 +19,6 @@ package shared
import (
"bytes"
"context"
- "os"
- "strconv"
. "github.com/onsi/gomega"
@@ -46,7 +44,8 @@ func IPLDsContainBytes(iplds []models.IPLDModel, b []byte) bool {
// SetupDB is use to setup a db for watcher tests
func SetupDB() *sqlx.DB {
- config := getTestDBConfig()
+ config, err := postgres.TestConfig.WithEnv()
+ Expect(err).NotTo(HaveOccurred())
db, err := NewDB(config.DbConnectionString(), config)
Expect(err).NotTo(HaveOccurred())
@@ -60,6 +59,8 @@ func TearDownDB(db *sqlx.DB) {
Expect(err).NotTo(HaveOccurred())
_, err = tx.Exec(`DELETE FROM nodes`)
Expect(err).NotTo(HaveOccurred())
+ _, err = tx.Exec(`DELETE FROM ipld.blocks`)
+ Expect(err).NotTo(HaveOccurred())
_, err = tx.Exec(`DELETE FROM eth.header_cids`)
Expect(err).NotTo(HaveOccurred())
_, err = tx.Exec(`DELETE FROM eth.uncle_cids`)
@@ -72,12 +73,6 @@ func TearDownDB(db *sqlx.DB) {
Expect(err).NotTo(HaveOccurred())
_, err = tx.Exec(`DELETE FROM eth.storage_cids`)
Expect(err).NotTo(HaveOccurred())
- _, err = tx.Exec(`DELETE FROM eth.state_accounts`)
- Expect(err).NotTo(HaveOccurred())
- _, err = tx.Exec(`DELETE FROM eth.access_list_elements`)
- Expect(err).NotTo(HaveOccurred())
- _, err = tx.Exec(`DELETE FROM blocks`)
- Expect(err).NotTo(HaveOccurred())
_, err = tx.Exec(`DELETE FROM eth.log_cids`)
Expect(err).NotTo(HaveOccurred())
_, err = tx.Exec(`DELETE FROM eth_meta.watched_addresses`)
@@ -96,20 +91,10 @@ func SetupTestStateDiffIndexer(ctx context.Context, chainConfig *params.ChainCon
ChainID: params.TestChainConfig.ChainID.Uint64(),
}
- _, stateDiffIndexer, err := indexer.NewStateDiffIndexer(ctx, chainConfig, testInfo, getTestDBConfig())
+ dbconfig, err := postgres.TestConfig.WithEnv()
+ Expect(err).NotTo(HaveOccurred())
+ _, stateDiffIndexer, err := indexer.NewStateDiffIndexer(ctx, chainConfig, testInfo, dbconfig)
Expect(err).NotTo(HaveOccurred())
return stateDiffIndexer
}
-
-func getTestDBConfig() postgres.Config {
- port, _ := strconv.Atoi(os.Getenv("DATABASE_PORT"))
- return postgres.Config{
- Hostname: os.Getenv("DATABASE_HOSTNAME"),
- DatabaseName: os.Getenv("DATABASE_NAME"),
- Username: os.Getenv("DATABASE_USER"),
- Password: os.Getenv("DATABASE_PASSWORD"),
- Port: port,
- Driver: postgres.SQLX,
- }
-}
diff --git a/scripts/gomoderator.py b/scripts/gomoderator.py
deleted file mode 100644
index 7cdde61d..00000000
--- a/scripts/gomoderator.py
+++ /dev/null
@@ -1,137 +0,0 @@
-import os
-import sys
-import subprocess
-import errno
-from typing import List, Dict
-
-"""
-Resolves dependency conflicts between a plugin repository's and the core repository's go.mods
-
-Usage: python3 gomoderator.py {path_to_core_repository} {path_to_plugin_repository}
-"""
-
-ERROR_INVALID_NAME = 123
-
-
-def is_pathname_valid(pathname: str) -> bool:
- """
- `True` if the passed pathname is a valid pathname for the current OS;
- `False` otherwise.
- """
- try:
- if not isinstance(pathname, str) or not pathname:
- return False
- _, pathname = os.path.splitdrive(pathname)
- root_dirname = os.environ.get('HOMEDRIVE', 'C:') \
- if sys.platform == 'win32' else os.path.sep
- assert os.path.isdir(root_dirname) # ...Murphy and her ironclad Law
- root_dirname = root_dirname.rstrip(os.path.sep) + os.path.sep
- for pathname_part in pathname.split(os.path.sep):
- try:
- os.lstat(root_dirname + pathname_part)
- except OSError as exc:
- if hasattr(exc, 'winerror'):
- if exc.winerror == ERROR_INVALID_NAME:
- return False
- elif exc.errno in {errno.ENAMETOOLONG, errno.ERANGE}:
- return False
- except TypeError as exc:
- return False
- else:
- return True
-
-
-def map_deps_to_version(deps_arr: List[str]) -> Dict[str, str]:
- mapping = {}
- for d in deps_arr:
- if d.find(' => ') != -1:
- ds = d.split(' => ')
- d = ds[1]
- d = d.replace(" v", "[>v") # might be able to just split on the empty space not _v and skip this :: insertion
- d_and_v = d.split("[>")
- mapping[d_and_v[0]] = d_and_v[1]
- return mapping
-
-
-# argument checks
-assert len(sys.argv) == 3, "need core repository and plugin repository path arguments"
-core_repository_path = sys.argv[1]
-plugin_repository_path = sys.argv[2]
-assert is_pathname_valid(core_repository_path), "core repository path argument is not valid"
-assert is_pathname_valid(plugin_repository_path), "plugin repository path argument is not valid"
-
-# collect `go list -m all` output from both repositories; remain in the plugin repository
-os.chdir(core_repository_path)
-core_deps_b = subprocess.check_output(["go", "list", "-m", "all"])
-os.chdir(plugin_repository_path)
-plugin_deps_b = subprocess.check_output(["go", "list", "-m", "all"])
-core_deps = core_deps_b.decode("utf-8")
-core_deps_arr = core_deps.splitlines()
-del core_deps_arr[0] # first line is the project repo itself
-plugin_deps = plugin_deps_b.decode("utf-8")
-plugin_deps_arr = plugin_deps.splitlines()
-del plugin_deps_arr[0]
-core_deps_mapping = map_deps_to_version(core_deps_arr)
-plugin_deps_mapping = map_deps_to_version(plugin_deps_arr)
-
-# iterate over dependency maps for both repos and find version conflicts
-# attempt to resolve conflicts by adding adding a `require` for the core version to the plugin's go.mod file
-none = True
-for dep, core_version in core_deps_mapping.items():
- if dep in plugin_deps_mapping.keys():
- plugin_version = plugin_deps_mapping[dep]
- if core_version != plugin_version:
- print(f'{dep} has a conflict: core is using version {core_version} '
- f'but the plugin is using version {plugin_version}')
- fixed_dep = f'{dep}@{core_version}'
- print(f'attempting fix by `go mod edit -require={fixed_dep}')
- subprocess.check_call(["go", "mod", "edit", f'-require={fixed_dep}'])
- none = False
-
-if none:
- print("no conflicts to resolve")
- quit()
-
-# the above process does not work for all dep conflicts e.g. golang.org/x/text v0.3.0 will not stick this way
-# so we will try the `go get {dep}` route for any remaining conflicts
-updated_plugin_deps_b = subprocess.check_output(["go", "list", "-m", "all"])
-updated_plugin_deps = updated_plugin_deps_b.decode("utf-8")
-updated_plugin_deps_arr = updated_plugin_deps.splitlines()
-del updated_plugin_deps_arr[0]
-updated_plugin_deps_mapping = map_deps_to_version(updated_plugin_deps_arr)
-none = True
-for dep, core_version in core_deps_mapping.items():
- if dep in updated_plugin_deps_mapping.keys():
- updated_plugin_version = updated_plugin_deps_mapping[dep]
- if core_version != updated_plugin_version:
- print(f'{dep} still has a conflict: core is using version {core_version} '
- f'but the plugin is using version {updated_plugin_version}')
- fixed_dep = f'{dep}@{core_version}'
- print(f'attempting fix by `go get {fixed_dep}')
- subprocess.check_call(["go", "get", fixed_dep])
- none = False
-
-if none:
- print("all conflicts have been resolved")
- quit()
-
-# iterate over plugins `go list -m all` output one more time and inform whether or not the above has worked
-final_plugin_deps_b = subprocess.check_output(["go", "list", "-m", "all"])
-final_plugin_deps = final_plugin_deps_b.decode("utf-8")
-final_plugin_deps_arr = final_plugin_deps.splitlines()
-del final_plugin_deps_arr[0]
-final_plugin_deps_mapping = map_deps_to_version(final_plugin_deps_arr)
-none = True
-for dep, core_version in core_deps_mapping.items():
- if dep in final_plugin_deps_mapping.keys():
- final_plugin_version = final_plugin_deps_mapping[dep]
- if core_version != final_plugin_version:
- print(f'{dep} STILL has a conflict: core is using version {core_version} '
- f'but the plugin is using version {final_plugin_version}')
- none = False
-
-if none:
- print("all conflicts have been resolved")
- quit()
-
-print("failed to resolve all conflicts")
diff --git a/scripts/install-postgres-11.sh b/scripts/install-postgres-11.sh
deleted file mode 100755
index b4db2a69..00000000
--- a/scripts/install-postgres-11.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env bash
-
-set -ex
-
-echo "Installing Postgres 11"
-sudo service postgresql stop
-sudo apt-get remove -q 'postgresql-*'
-sudo apt-get update -q
-sudo apt-get install -q postgresql-11 postgresql-client-11
-sudo cp /etc/postgresql/{9.6,11}/main/pg_hba.conf
-
-echo "Restarting Postgres 11"
-sudo service postgresql restart
-
-sudo psql -c 'CREATE ROLE travis SUPERUSER LOGIN CREATEDB;' -U postgres
\ No newline at end of file
diff --git a/scripts/integration-setup.sh b/scripts/integration-setup.sh
new file mode 100755
index 00000000..6ec2c833
--- /dev/null
+++ b/scripts/integration-setup.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+set -e
+
+export DOCKER_BUILDKIT=1
+# Prevent conflicting tty output
+export BUILDKIT_PROGRESS=plain
+
+CONFIG_DIR=$(readlink -f "${CONFIG_DIR:-$(mktemp -d)}")
+
+# By default assume we are running in the project root
+export CERC_REPO_BASE_DIR="${CERC_REPO_BASE_DIR:-..}"
+# v5 migrations only go up to version 18
+echo CERC_STATEDIFF_DB_GOOSE_MIN_VER=18 >> $CONFIG_DIR/stack.env
+# Pass this in so we can run eth_call forwarding tests, which expect no IPLD DB
+echo CERC_RUN_STATEDIFF=${CERC_RUN_STATEDIFF:-true} >> $CONFIG_DIR/stack.env
+
+laconic_so="${LACONIC_SO:-laconic-so} --stack fixturenet-eth-loaded --quiet"
+
+set -x
+
+# Build and deploy a cluster with only what we need from the stack
+$laconic_so setup-repositories \
+ --exclude github.com/cerc-io/ipld-eth-server,github.com/cerc-io/tx-spammer \
+ --branches-file ./test/stack-refs.txt
+
+$laconic_so build-containers \
+ --exclude cerc/ipld-eth-server,cerc/keycloak,cerc/tx-spammer
+
+$laconic_so deploy \
+ --include fixturenet-eth,ipld-eth-db \
+ --env-file $CONFIG_DIR/stack.env \
+ --cluster test up
+
+set +x
+
+# Get IPv4 endpoint of geth file server
+bootnode_endpoint=$(docker port test-fixturenet-eth-bootnode-geth-1 9898 | head -1)
+
+# Extract the chain config and ID from genesis file
+curl -s $bootnode_endpoint/geth.json | jq '.config' > $CONFIG_DIR/chain.json
+
+# Output vars if we are running on Github
+if [[ -n "$GITHUB_ENV" ]]; then
+ echo ETH_CHAIN_ID="$(jq '.chainId' $CONFIG_DIR/chain.json)" >> "$GITHUB_ENV"
+ echo ETH_CHAIN_CONFIG="$CONFIG_DIR/chain.json" >> "$GITHUB_ENV"
+ echo ETH_HTTP_PATH=$(docker port test-fixturenet-eth-geth-1-1 8545 | head -1) >> "$GITHUB_ENV"
+ # Read a private key so we can send from a funded account
+ echo DEPLOYER_PRIVATE_KEY=$(curl -s $bootnode_endpoint/accounts.csv | head -1 | cut -d',' -f3) >> "$GITHUB_ENV"
+fi
diff --git a/scripts/reset_db b/scripts/reset_db
deleted file mode 100755
index 0a57f8d3..00000000
--- a/scripts/reset_db
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env bash
-# Provide me with a postgres database name, and I will:
-# - Drop the database
-# - Recreate the database
-# - Run the vulcanizedb migration
-
-if [ "$1" = "" ]; then
- echo "Provide a database name to reset"
- exit 1
-fi
-
-db=$1
-dir=$(basename "$(pwd)")
-if [ $dir != "ipld-eth-server" ]
-then
- echo "Run me from the ipld-eth-server root dir"
- exit 1
-fi
-
-user=$(whoami)
-psql -c "DROP DATABASE $db" postgres
-if [ $? -eq 0 ]; then
- psql -c "CREATE DATABASE $db WITH OWNER $user" postgres
- make migrate HOST_NAME=localhost NAME=$db PORT=5432
-else
- echo "Couldnt drop the database. Are you connected? Does it exist?"
-fi
diff --git a/scripts/run_integration_test.sh b/scripts/run_integration_test.sh
deleted file mode 100755
index 9bc055f5..00000000
--- a/scripts/run_integration_test.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-set -e
-set -o xtrace
-
-export ETH_FORWARD_ETH_CALLS=false
-export DB_WRITE=true
-export ETH_PROXY_ON_ERROR=false
-
-export PGPASSWORD=password
-export DATABASE_USER=vdbm
-export DATABASE_PORT=8077
-export DATABASE_PASSWORD=password
-export DATABASE_HOSTNAME=127.0.0.1
-
-# Wait for containers to be up and execute the integration test.
-while [ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8081)" != "200" ]; do echo "waiting for ipld-eth-server..." && sleep 5; done && \
- while [ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8545)" != "200" ]; do echo "waiting for geth-statediff..." && sleep 5; done && \
- make integrationtest
diff --git a/scripts/run_integration_test_forward_eth_calls.sh b/scripts/run_integration_test_forward_eth_calls.sh
deleted file mode 100755
index 0679e48b..00000000
--- a/scripts/run_integration_test_forward_eth_calls.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-set -e
-set -o xtrace
-
-export ETH_FORWARD_ETH_CALLS=true
-export DB_WRITE=false
-export ETH_PROXY_ON_ERROR=false
-
-export PGPASSWORD=password
-export DATABASE_USER=vdbm
-export DATABASE_PORT=8077
-export DATABASE_PASSWORD=password
-export DATABASE_HOSTNAME=127.0.0.1
-
-# Wait for containers to be up and execute the integration test.
-while [ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8081)" != "200" ]; do echo "waiting for ipld-eth-server..." && sleep 5; done && \
- while [ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8545)" != "200" ]; do echo "waiting for geth-statediff..." && sleep 5; done && \
- make integrationtest
diff --git a/scripts/run_unit_test.sh b/scripts/run_unit_test.sh
deleted file mode 100755
index c90add64..00000000
--- a/scripts/run_unit_test.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-# Remove any existing containers / volumes
-docker-compose down --remove-orphans --volumes
-
-# Spin up DB and run migrations
-docker-compose up -d migrations ipld-eth-db
-sleep 30
-
-# Run unit tests
-go clean -testcache
-PGPASSWORD=password DATABASE_USER=vdbm DATABASE_PORT=8077 DATABASE_PASSWORD=password DATABASE_HOSTNAME=127.0.0.1 DATABASE_NAME=vulcanize_testing make test
-
-# Clean up
-docker-compose down --remove-orphans --volumes
-rm -rf out/
diff --git a/test/README.md b/test/README.md
deleted file mode 100644
index 2a4bb99c..00000000
--- a/test/README.md
+++ /dev/null
@@ -1,119 +0,0 @@
-# Test Insructions
-
-## Setup
-
-- Clone [stack-orchestrator](https://github.com/vulcanize/stack-orchestrator), [ipld-eth-db](https://github.com/vulcanize/ipld-eth-db) [go-ethereum](https://github.com/vulcanize/go-ethereum) repositories.
-
-- Checkout [v4 release](https://github.com/vulcanize/ipld-eth-db/releases/tag/v4.2.1-alpha) in ipld-eth-db repo.
- ```bash
- # In ipld-eth-db repo.
- git checkout v4.2.1-alpha
- ```
-
-- Checkout [v4 release](https://github.com/vulcanize/go-ethereum/releases/tag/v1.10.23-statediff-4.2.0-alpha) in go-ethereum repo.
- ```bash
- # In go-ethereum repo.
- git checkout v1.10.23-statediff-4.2.0-alpha
- ```
-
-- Checkout working commit in stack-orchestrator repo.
- ```bash
- # In stack-orchestrator repo.
- git checkout f2fd766f5400fcb9eb47b50675d2e3b1f2753702
- ```
-
-## Run
-
-- Run unit tests:
-
- ```bash
- # In ipld-eth-server root directory.
- ./scripts/run_unit_test.sh
- ```
-
-- Run integration tests:
-
- - In stack-orchestrator repo, create config file:
-
- ```bash
- cd helper-scripts
-
- ./create-config.sh
- ```
-
- A `config.sh` will be created in the root directory.
-
- - Update/Edit the generated config file with:
-
- ```bash
- #!/bin/bash
-
- # Path to ipld-eth-server repo.
- vulcanize_ipld_eth_db=~/ipld-eth-db/
-
- # Path to go-ethereum repo.
- vulcanize_go_ethereum=~/go-ethereum/
-
- # Path to ipld-eth-server repo.
- vulcanize_ipld_eth_server=~/ipld-eth-server/
-
- # Path to test contract.
- vulcanize_test_contract=~/ipld-eth-server/test/contract
-
- genesis_file_path='start-up-files/go-ethereum/genesis.json'
- db_write=true
- eth_forward_eth_calls=false
- eth_proxy_on_error=false
- eth_http_path="go-ethereum:8545"
- ```
-
- - Run stack-orchestrator:
-
- ```bash
- # In stack-orchestrator root directory.
- cd helper-scripts
-
- ./wrapper.sh \
- -e docker \
- -d ../docker/local/docker-compose-db-sharding.yml \
- -d ../docker/local/docker-compose-go-ethereum.yml \
- -d ../docker/local/docker-compose-ipld-eth-server.yml \
- -d ../docker/local/docker-compose-contract.yml \
- -v remove \
- -p ../config.sh
- ```
-
- - Run test:
-
- ```bash
- # In ipld-eth-server root directory.
- ./scripts/run_integration_test.sh
- ```
-
- - Update stack-orchestrator `config.sh` file:
-
- ```bash
- #!/bin/bash
-
- # Path to go-ethereum repo.
- vulcanize_go_ethereum=~/go-ethereum/
-
- # Path to ipld-eth-server repo.
- vulcanize_ipld_eth_server=~/ipld-eth-server/
-
- # Path to test contract.
- vulcanize_test_contract=~/ipld-eth-server/test/contract
-
- genesis_file_path='start-up-files/go-ethereum/genesis.json'
- db_write=false
- eth_forward_eth_calls=true
- eth_proxy_on_error=false
- eth_http_path="go-ethereum:8545"
- ```
-
- - Stop the stack-orchestrator and start again using the same command
-
- - Run integration tests for direct proxy fall-through of eth_calls:
- ```bash
- ./scripts/run_integration_test_forward_eth_calls.sh
- ```
diff --git a/test/compose-db.yml b/test/compose-db.yml
new file mode 100644
index 00000000..360fac41
--- /dev/null
+++ b/test/compose-db.yml
@@ -0,0 +1,26 @@
+# Containers to run a DB instance for tests
+
+services:
+ migrations:
+ restart: on-failure
+ depends_on:
+ - ipld-eth-db
+ image: git.vdb.to/cerc-io/ipld-eth-db/ipld-eth-db:v5.0.2-alpha
+ environment:
+ DATABASE_USER: "vdbm"
+ DATABASE_NAME: "cerc_testing"
+ DATABASE_PASSWORD: "password"
+ DATABASE_HOSTNAME: "ipld-eth-db"
+ DATABASE_PORT: 5432
+
+ ipld-eth-db:
+ container_name: test-ipld-eth-db
+ image: timescale/timescaledb:latest-pg14
+ restart: always
+ command: ["postgres", "-c", "log_statement=all"]
+ environment:
+ POSTGRES_USER: "vdbm"
+ POSTGRES_DB: "cerc_testing"
+ POSTGRES_PASSWORD: "password"
+ ports:
+ - 127.0.0.1:8077:5432
diff --git a/test/compose-server.yml b/test/compose-server.yml
new file mode 100644
index 00000000..6f296d88
--- /dev/null
+++ b/test/compose-server.yml
@@ -0,0 +1,44 @@
+# Runs the IPLD server and contract deployment server
+
+services:
+ ipld-eth-server:
+ restart: unless-stopped
+ image: cerc/ipld-eth-server
+ build: ..
+ networks:
+ - test_default
+ environment:
+ DATABASE_NAME: "cerc_testing"
+ DATABASE_HOSTNAME: "ipld-eth-db"
+ DATABASE_PORT: 5432
+ DATABASE_USER: "vdbm"
+ DATABASE_PASSWORD: "password"
+ ETH_HTTP_PATH: fixturenet-eth-geth-1:8545
+ ETH_CHAIN_CONFIG: "/tmp/chain.json"
+ ETH_PROXY_ON_ERROR: false
+ ETH_FORWARD_ETH_CALLS: $ETH_FORWARD_ETH_CALLS
+ SERVER_HTTP_PATH: 0.0.0.0:8081
+ VDB_COMMAND: serve
+ volumes:
+ - type: bind
+ source: "${ETH_CHAIN_CONFIG:-./test/chain.json}"
+ target: /tmp/chain.json
+ ports:
+ - 127.0.0.1:8081:8081
+
+ contract-deployer:
+ restart: on-failure
+ image: cerc/contract-deployer
+ build: ./contract
+ networks:
+ - test_default
+ environment:
+ ETH_ADDR: "http://fixturenet-eth-geth-1:8545"
+ ETH_CHAIN_ID: $ETH_CHAIN_ID
+ DEPLOYER_PRIVATE_KEY: $DEPLOYER_PRIVATE_KEY
+ ports:
+ - 127.0.0.1:3000:3000
+
+networks:
+ test_default:
+ external: true
diff --git a/test/contract/Dockerfile b/test/contract/Dockerfile
index a56d3be0..09537b59 100644
--- a/test/contract/Dockerfile
+++ b/test/contract/Dockerfile
@@ -1,4 +1,5 @@
-FROM node:14
+# Downgrade from 18.16, see https://github.com/NomicFoundation/hardhat/issues/3877
+FROM node:18.15-slim
ARG ETH_ADDR
ENV ETH_ADDR $ETH_ADDR
@@ -11,4 +12,4 @@ RUN npm run compile && ls -lah
EXPOSE 3000
-ENTRYPOINT ["npm", "start"]
\ No newline at end of file
+ENTRYPOINT ["node", "src/index.js"]
diff --git a/test/contract/contracts/GLDToken.sol b/test/contract/contracts/GLDToken.sol
index 596baad3..035167fe 100644
--- a/test/contract/contracts/GLDToken.sol
+++ b/test/contract/contracts/GLDToken.sol
@@ -1,5 +1,6 @@
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
+
contract GLDToken is ERC20 {
constructor() ERC20("Gold", "GLD") {
_mint(msg.sender, 1000000000000000000000);
diff --git a/test/contract/hardhat.config.js b/test/contract/hardhat.config.js
index 6bd2508a..dfb2e40f 100644
--- a/test/contract/hardhat.config.js
+++ b/test/contract/hardhat.config.js
@@ -16,6 +16,16 @@ task("accounts", "Prints the list of accounts", async () => {
/**
* @type import('hardhat/config').HardhatUserConfig
*/
+
+const localNetwork = {
+ url: process.env.ETH_ADDR || "http://127.0.0.1:8545",
+ chainId: Number(process.env.ETH_CHAIN_ID) || 99,
+};
+
+if (process.env.DEPLOYER_PRIVATE_KEY) {
+ localNetwork["accounts"] = [process.env.DEPLOYER_PRIVATE_KEY];
+}
+
module.exports = {
solidity: {
version: "0.8.0",
@@ -30,14 +40,7 @@ module.exports = {
}
},
networks: {
- local: {
- url: 'http://127.0.0.1:8545',
- chainId: 99
- },
- docker: {
- url: process.env.ETH_ADDR,
- chainId: 99
- }
- }
+ local: localNetwork
+ },
+ defaultNetwork: "local"
};
-
diff --git a/test/contract/package-lock.json b/test/contract/package-lock.json
index d1ac222a..e82894bb 100644
--- a/test/contract/package-lock.json
+++ b/test/contract/package-lock.json
@@ -1,7 +1,7 @@
{
"name": "contract",
"version": "1.0.0",
- "lockfileVersion": 2,
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
@@ -10,22 +10,46 @@
"license": "ISC",
"dependencies": {
"@openzeppelin/contracts": "^4.0.0",
- "fastify": "^3.14.2",
- "hardhat": "^2.2.0",
+ "fastify": "^4.0.0",
+ "hardhat": "^2.14.0",
"solidity-create2-deployer": "^0.4.0"
},
"devDependencies": {
- "@nomiclabs/hardhat-ethers": "^2.0.2",
- "@nomiclabs/hardhat-waffle": "^2.0.1",
+ "@nomiclabs/hardhat-ethers": "^2.2.3",
+ "@nomiclabs/hardhat-waffle": "^2.0.4",
"chai": "^4.3.4",
"ethereum-waffle": "^3.3.0",
"ethers": "^5.1.0"
}
},
+ "node_modules/@chainsafe/as-sha256": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz",
+ "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg=="
+ },
+ "node_modules/@chainsafe/persistent-merkle-tree": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz",
+ "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==",
+ "dependencies": {
+ "@chainsafe/as-sha256": "^0.3.1"
+ }
+ },
+ "node_modules/@chainsafe/ssz": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz",
+ "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==",
+ "dependencies": {
+ "@chainsafe/as-sha256": "^0.3.1",
+ "@chainsafe/persistent-merkle-tree": "^0.4.2",
+ "case": "^1.6.3"
+ }
+ },
"node_modules/@ensdomains/ens": {
"version": "0.4.5",
"resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz",
"integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==",
+ "deprecated": "Please use @ensdomains/ens-contracts",
"dev": true,
"dependencies": {
"bluebird": "^3.5.2",
@@ -38,7 +62,7 @@
"node_modules/@ensdomains/ens/node_modules/ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -47,7 +71,7 @@
"node_modules/@ensdomains/ens/node_modules/camelcase": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -56,7 +80,7 @@
"node_modules/@ensdomains/ens/node_modules/cliui": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
"dev": true,
"dependencies": {
"string-width": "^1.0.1",
@@ -64,10 +88,19 @@
"wrap-ansi": "^2.0.0"
}
},
+ "node_modules/@ensdomains/ens/node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/@ensdomains/ens/node_modules/fs-extra": {
"version": "0.30.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
+ "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.1.2",
@@ -86,7 +119,7 @@
"node_modules/@ensdomains/ens/node_modules/is-fullwidth-code-point": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
"dev": true,
"dependencies": {
"number-is-nan": "^1.0.0"
@@ -98,7 +131,7 @@
"node_modules/@ensdomains/ens/node_modules/jsonfile": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==",
"dev": true,
"optionalDependencies": {
"graceful-fs": "^4.1.6"
@@ -107,18 +140,12 @@
"node_modules/@ensdomains/ens/node_modules/require-from-string": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
- "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
+ "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/@ensdomains/ens/node_modules/require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
- "dev": true
- },
"node_modules/@ensdomains/ens/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@@ -147,7 +174,7 @@
"node_modules/@ensdomains/ens/node_modules/string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
"dev": true,
"dependencies": {
"code-point-at": "^1.0.0",
@@ -161,7 +188,7 @@
"node_modules/@ensdomains/ens/node_modules/strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
"dev": true,
"dependencies": {
"ansi-regex": "^2.0.0"
@@ -170,16 +197,10 @@
"node": ">=0.10.0"
}
},
- "node_modules/@ensdomains/ens/node_modules/which-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
- "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
- "dev": true
- },
"node_modules/@ensdomains/ens/node_modules/wrap-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
"dev": true,
"dependencies": {
"string-width": "^1.0.1",
@@ -198,7 +219,7 @@
"node_modules/@ensdomains/ens/node_modules/yargs": {
"version": "4.8.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz",
- "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=",
+ "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==",
"dev": true,
"dependencies": {
"cliui": "^3.2.0",
@@ -220,7 +241,7 @@
"node_modules/@ensdomains/ens/node_modules/yargs-parser": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz",
- "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=",
+ "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==",
"dev": true,
"dependencies": {
"camelcase": "^3.0.0",
@@ -231,35 +252,36 @@
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz",
"integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==",
+ "deprecated": "Please use @ensdomains/ens-contracts",
"dev": true
},
"node_modules/@ethereum-waffle/chai": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.3.1.tgz",
- "integrity": "sha512-+vepCjttfOzCSnmiVEmd1bR8ctA2wYVrtWa8bDLhnTpj91BIIHotNDTwpeq7fyjrOCIBTN3Ai8ACfjNoatc4OA==",
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz",
+ "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==",
"dev": true,
"dependencies": {
- "@ethereum-waffle/provider": "^3.3.1",
- "ethers": "^5.0.0"
+ "@ethereum-waffle/provider": "^3.4.4",
+ "ethers": "^5.5.2"
},
"engines": {
"node": ">=10.0"
}
},
"node_modules/@ethereum-waffle/compiler": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.3.1.tgz",
- "integrity": "sha512-X/TeQugt94AQwXEdCjIQxcXYGawNulVBYEBE7nloj4wE/RBxNolXwjoVNjcS4kuiMMbKkdO0JkL5sn6ixx8bDg==",
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz",
+ "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==",
"dev": true,
"dependencies": {
"@resolver-engine/imports": "^0.3.3",
"@resolver-engine/imports-fs": "^0.3.3",
"@typechain/ethers-v5": "^2.0.0",
"@types/mkdirp": "^0.5.2",
- "@types/node-fetch": "^2.6.7",
+ "@types/node-fetch": "^2.5.5",
"ethers": "^5.0.1",
"mkdirp": "^0.5.1",
- "node-fetch": "^2.6.7",
+ "node-fetch": "^2.6.1",
"solc": "^0.6.3",
"ts-generator": "^0.1.1",
"typechain": "^3.0.0"
@@ -268,94 +290,41 @@
"node": ">=10.0"
}
},
- "node_modules/@ethereum-waffle/compiler/node_modules/fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "node_modules/@ethereum-waffle/compiler/node_modules/jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "dev": true,
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@ethereum-waffle/compiler/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/@ethereum-waffle/compiler/node_modules/solc": {
- "version": "0.6.12",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz",
- "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==",
- "dev": true,
- "dependencies": {
- "command-exists": "^1.2.8",
- "commander": "3.0.2",
- "fs-extra": "^0.30.0",
- "js-sha3": "0.8.0",
- "memorystream": "^0.3.1",
- "require-from-string": "^2.0.0",
- "semver": "^5.5.0",
- "tmp": "0.0.33"
- },
- "bin": {
- "solcjs": "solcjs"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
"node_modules/@ethereum-waffle/ens": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.2.4.tgz",
- "integrity": "sha512-lkRVPCEkk7KOwH9MqFMB+gL0X8cZNsm+MnKpP9CNbAyhFos2sCDGcY8t6BA12KBK6pdMuuRXPxYL9WfPl9bqSQ==",
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz",
+ "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==",
"dev": true,
"dependencies": {
"@ensdomains/ens": "^0.4.4",
"@ensdomains/resolver": "^0.2.4",
- "ethers": "^5.0.1"
+ "ethers": "^5.5.2"
},
"engines": {
"node": ">=10.0"
}
},
"node_modules/@ethereum-waffle/mock-contract": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.2.2.tgz",
- "integrity": "sha512-H60Cc5C7sYNU4LuPMSKDh8YIaN9/fkwEjznY78CEbOosO+lMlFYdA+5VZjeDGDuYKfsBqsocQdkj1CRyoi1KNw==",
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz",
+ "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==",
"dev": true,
"dependencies": {
- "@ethersproject/abi": "^5.0.1",
- "ethers": "^5.0.1"
+ "@ethersproject/abi": "^5.5.0",
+ "ethers": "^5.5.2"
},
"engines": {
"node": ">=10.0"
}
},
"node_modules/@ethereum-waffle/provider": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.3.2.tgz",
- "integrity": "sha512-ilz6cXK0ylSKCmZktTMpY4gjo0CN6rb86JfN7+RZYk6tKtZA6sXoOe95skWEQkGf1fZk7G817fTzLb0CmFDp1g==",
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz",
+ "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==",
"dev": true,
"dependencies": {
- "@ethereum-waffle/ens": "^3.2.4",
- "ethers": "^5.0.1",
+ "@ethereum-waffle/ens": "^3.4.4",
+ "ethers": "^5.5.2",
"ganache-core": "^2.13.2",
"patch-package": "^6.2.2",
"postinstall-postinstall": "^2.1.0"
@@ -364,112 +333,10 @@
"node": ">=10.0"
}
},
- "node_modules/@ethereumjs/block": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.2.1.tgz",
- "integrity": "sha512-FCxo5KwwULne2A2Yuae4iaGGqSsRjwzXOlDhGalOFiBbLfP3hE04RHaHGw4c8vh1PfOrLauwi0dQNUBkOG3zIA==",
- "dependencies": {
- "@ethereumjs/common": "^2.2.0",
- "@ethereumjs/tx": "^3.1.3",
- "ethereumjs-util": "^7.0.10",
- "merkle-patricia-tree": "^4.1.0"
- }
- },
- "node_modules/@ethereumjs/blockchain": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.2.1.tgz",
- "integrity": "sha512-+hshP2qSOOFsiYvZCbaDQFG7jYTWafE8sfBi+pAsdhAHfP7BN7VLyob7qoQISgwS1s7NTR4c4+2t/woU9ahItw==",
- "dependencies": {
- "@ethereumjs/block": "^3.2.0",
- "@ethereumjs/common": "^2.2.0",
- "@ethereumjs/ethash": "^1.0.0",
- "debug": "^2.2.0",
- "ethereumjs-util": "^7.0.9",
- "level-mem": "^5.0.1",
- "lru-cache": "^5.1.1",
- "rlp": "^2.2.4",
- "semaphore-async-await": "^1.5.1"
- }
- },
- "node_modules/@ethereumjs/blockchain/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/@ethereumjs/blockchain/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/@ethereumjs/common": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.2.0.tgz",
- "integrity": "sha512-PyQiTG00MJtBRkJmv46ChZL8u2XWxNBeAthznAUIUiefxPAXjbkuiCZOuncgJS34/XkMbNc9zMt/PlgKRBElig==",
- "dependencies": {
- "crc-32": "^1.2.0",
- "ethereumjs-util": "^7.0.9"
- }
- },
- "node_modules/@ethereumjs/ethash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.0.0.tgz",
- "integrity": "sha512-iIqnGG6NMKesyOxv2YctB2guOVX18qMAWlj3QlZyrc+GqfzLqoihti+cVNQnyNxr7eYuPdqwLQOFuPe6g/uKjw==",
- "dependencies": {
- "@types/levelup": "^4.3.0",
- "buffer-xor": "^2.0.1",
- "ethereumjs-util": "^7.0.7",
- "miller-rabin": "^4.0.0"
- }
- },
- "node_modules/@ethereumjs/tx": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.1.3.tgz",
- "integrity": "sha512-DJBu6cbwYtiPTFeCUR8DF5p+PF0jxs+0rALJZiEcTz2tiRPIEkM72GEbrkGuqzENLCzBrJHT43O0DxSYTqeo+g==",
- "dependencies": {
- "@ethereumjs/common": "^2.2.0",
- "ethereumjs-util": "^7.0.10"
- }
- },
- "node_modules/@ethereumjs/vm": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.3.2.tgz",
- "integrity": "sha512-QmCUQrW6xbhgEbQh9njue4kAJdM056C+ytBFUTF/kDYa3kNDm4Qxp9HUyTlt1OCSXvDhws0qqlh8+q+pmXpN7g==",
- "dependencies": {
- "@ethereumjs/block": "^3.2.1",
- "@ethereumjs/blockchain": "^5.2.1",
- "@ethereumjs/common": "^2.2.0",
- "@ethereumjs/tx": "^3.1.3",
- "async-eventemitter": "^0.2.4",
- "core-js-pure": "^3.0.1",
- "debug": "^2.2.0",
- "ethereumjs-util": "^7.0.10",
- "functional-red-black-tree": "^1.0.1",
- "mcl-wasm": "^0.7.1",
- "merkle-patricia-tree": "^4.1.0",
- "rustbn.js": "~0.2.0",
- "util.promisify": "^1.0.1"
- }
- },
- "node_modules/@ethereumjs/vm/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/@ethereumjs/vm/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
"node_modules/@ethersproject/abi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.1.0.tgz",
- "integrity": "sha512-N/W9Sbn1/C6Kh2kuHRjf/hX6euMK4+9zdJRBB8sDWmihVntjUAfxbusGZKzDQD8i3szAHhTz8K7XADV5iFNfJw==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz",
+ "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==",
"funding": [
{
"type": "individual",
@@ -481,21 +348,21 @@
}
],
"dependencies": {
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/constants": "^5.1.0",
- "@ethersproject/hash": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/strings": "^5.1.0"
+ "@ethersproject/address": "^5.7.0",
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/constants": "^5.7.0",
+ "@ethersproject/hash": "^5.7.0",
+ "@ethersproject/keccak256": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/strings": "^5.7.0"
}
},
"node_modules/@ethersproject/abstract-provider": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz",
- "integrity": "sha512-8dJUnT8VNvPwWhYIau4dwp7qe1g+KgdRm4XTWvjkI9gAT2zZa90WF5ApdZ3vl1r6NDmnn6vUVvyphClRZRteTQ==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz",
+ "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==",
"funding": [
{
"type": "individual",
@@ -507,19 +374,19 @@
}
],
"dependencies": {
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/networks": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0",
- "@ethersproject/web": "^5.1.0"
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/networks": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/transactions": "^5.7.0",
+ "@ethersproject/web": "^5.7.0"
}
},
"node_modules/@ethersproject/abstract-signer": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz",
- "integrity": "sha512-qQDMkjGZSSJSKl6AnfTgmz9FSnzq3iEoEbHTYwjDlEAv+LNP7zd4ixCcVWlWyk+2siud856M5CRhAmPdupeN9w==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz",
+ "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==",
"funding": [
{
"type": "individual",
@@ -531,17 +398,17 @@
}
],
"dependencies": {
- "@ethersproject/abstract-provider": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0"
+ "@ethersproject/abstract-provider": "^5.7.0",
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0"
}
},
"node_modules/@ethersproject/address": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.1.0.tgz",
- "integrity": "sha512-rfWQR12eHn2cpstCFS4RF7oGjfbkZb0oqep+BfrT+gWEGWG2IowJvIsacPOvzyS1jhNF4MQ4BS59B04Mbovteg==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz",
+ "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==",
"funding": [
{
"type": "individual",
@@ -553,17 +420,17 @@
}
],
"dependencies": {
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/rlp": "^5.1.0"
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/keccak256": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/rlp": "^5.7.0"
}
},
"node_modules/@ethersproject/base64": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.1.0.tgz",
- "integrity": "sha512-npD1bLvK4Bcxz+m4EMkx+F8Rd7CnqS9DYnhNu0/GlQBXhWjvfoAZzk5HJ0f1qeyp8d+A86PTuzLOGOXf4/CN8g==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz",
+ "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==",
"funding": [
{
"type": "individual",
@@ -575,13 +442,13 @@
}
],
"dependencies": {
- "@ethersproject/bytes": "^5.1.0"
+ "@ethersproject/bytes": "^5.7.0"
}
},
"node_modules/@ethersproject/basex": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.1.0.tgz",
- "integrity": "sha512-vBKr39bum7DDbOvkr1Sj19bRMEPA4FnST6Utt6xhDzI7o7L6QNkDn2yrCfP+hnvJGhZFKtLygWwqlTBZoBXYLg==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz",
+ "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==",
"funding": [
{
"type": "individual",
@@ -593,14 +460,14 @@
}
],
"dependencies": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/properties": "^5.1.0"
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0"
}
},
"node_modules/@ethersproject/bignumber": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.1.0.tgz",
- "integrity": "sha512-wUvQlhTjPjFXIdLPOuTrFeQmSa6Wvls1bGXQNQWvB/SEn1NsTCE8PmumIEZxmOPjSHl1eV2uyHP5jBm5Cgj92Q==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz",
+ "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==",
"funding": [
{
"type": "individual",
@@ -612,15 +479,15 @@
}
],
"dependencies": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "bn.js": "^4.4.0"
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "bn.js": "^5.2.1"
}
},
"node_modules/@ethersproject/bytes": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.1.0.tgz",
- "integrity": "sha512-sGTxb+LVjFxJcJeUswAIK6ncgOrh3D8c192iEJd7mLr95V6du119rRfYT/b87WPkZ5I3gRBUYIYXtdgCWACe8g==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz",
+ "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==",
"funding": [
{
"type": "individual",
@@ -632,13 +499,13 @@
}
],
"dependencies": {
- "@ethersproject/logger": "^5.1.0"
+ "@ethersproject/logger": "^5.7.0"
}
},
"node_modules/@ethersproject/constants": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.1.0.tgz",
- "integrity": "sha512-0/SuHrxc8R8k+JiLmJymxHJbojUDWBQqO+b+XFdwaP0jGzqC09YDy/CAlSZB6qHsBifY8X3I89HcK/oMqxRdBw==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz",
+ "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==",
"funding": [
{
"type": "individual",
@@ -650,13 +517,13 @@
}
],
"dependencies": {
- "@ethersproject/bignumber": "^5.1.0"
+ "@ethersproject/bignumber": "^5.7.0"
}
},
"node_modules/@ethersproject/contracts": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.1.0.tgz",
- "integrity": "sha512-dvTMs/4XGSc57cYOW0KjgX1NdTujUu7mNb6PQdJWg08m9ULzPyGZuBkFJnijBcp6vTOCQ59RwjboWgNWw393og==",
+ "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",
@@ -668,22 +535,22 @@
}
],
"dependencies": {
- "@ethersproject/abi": "^5.1.0",
- "@ethersproject/abstract-provider": "^5.1.0",
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/constants": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0"
+ "@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.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.1.0.tgz",
- "integrity": "sha512-fNwry20yLLPpnRRwm3fBL+2ksgO+KMadxM44WJmRIoTKzy4269+rbq9KFoe2LTqq2CXJM2CE70beGaNrpuqflQ==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz",
+ "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==",
"funding": [
{
"type": "individual",
@@ -695,20 +562,21 @@
}
],
"dependencies": {
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/strings": "^5.1.0"
+ "@ethersproject/abstract-signer": "^5.7.0",
+ "@ethersproject/address": "^5.7.0",
+ "@ethersproject/base64": "^5.7.0",
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/keccak256": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/strings": "^5.7.0"
}
},
"node_modules/@ethersproject/hdnode": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.1.0.tgz",
- "integrity": "sha512-obIWdlujloExPHWJGmhJO/sETOOo7SEb6qemV4f8kyFoXg+cJK+Ta9SvBrj7hsUK85n3LZeZJZRjjM7oez3Clg==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz",
+ "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==",
"funding": [
{
"type": "individual",
@@ -720,24 +588,24 @@
}
],
"dependencies": {
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/basex": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/pbkdf2": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/sha2": "^5.1.0",
- "@ethersproject/signing-key": "^5.1.0",
- "@ethersproject/strings": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0",
- "@ethersproject/wordlists": "^5.1.0"
+ "@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.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.1.0.tgz",
- "integrity": "sha512-00n2iBy27w8zrGZSiU762UOVuzCQZxUZxopsZC47++js6xUFuI74DHcJ5K/2pddlF1YBskvmMuboEu1geK8mnA==",
+ "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",
@@ -749,25 +617,25 @@
}
],
"dependencies": {
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/hdnode": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/pbkdf2": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/random": "^5.1.0",
- "@ethersproject/strings": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0",
+ "@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.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.1.0.tgz",
- "integrity": "sha512-vrTB1W6AEYoadww5c9UyVJ2YcSiyIUTNDRccZIgwTmFFoSHwBtcvG1hqy9RzJ1T0bMdATbM9Hfx2mJ6H0i7Hig==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz",
+ "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==",
"funding": [
{
"type": "individual",
@@ -779,19 +647,14 @@
}
],
"dependencies": {
- "@ethersproject/bytes": "^5.1.0",
- "js-sha3": "0.5.7"
+ "@ethersproject/bytes": "^5.7.0",
+ "js-sha3": "0.8.0"
}
},
- "node_modules/@ethersproject/keccak256/node_modules/js-sha3": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
- "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc="
- },
"node_modules/@ethersproject/logger": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.1.0.tgz",
- "integrity": "sha512-wtUaD1lBX10HBXjjKV9VHCBnTdUaKQnQ2XSET1ezglqLdPdllNOIlLfhyCRqXm5xwcjExVI5ETokOYfjPtaAlw==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz",
+ "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==",
"funding": [
{
"type": "individual",
@@ -804,9 +667,9 @@
]
},
"node_modules/@ethersproject/networks": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.1.0.tgz",
- "integrity": "sha512-A/NIrIED/G/IgU1XUukOA3WcFRxn2I4O5GxsYGA5nFlIi+UZWdGojs85I1VXkR1gX9eFnDXzjE6OtbgZHjFhIA==",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz",
+ "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==",
"funding": [
{
"type": "individual",
@@ -818,13 +681,13 @@
}
],
"dependencies": {
- "@ethersproject/logger": "^5.1.0"
+ "@ethersproject/logger": "^5.7.0"
}
},
"node_modules/@ethersproject/pbkdf2": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.1.0.tgz",
- "integrity": "sha512-B8cUbHHTgs8OtgJIafrRcz/YPDobVd5Ru8gTnShOiM9EBuFpYHQpq3+8iQJ6pyczDu6HP/oc/njAsIBhwFZYew==",
+ "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",
@@ -836,14 +699,14 @@
}
],
"dependencies": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/sha2": "^5.1.0"
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/sha2": "^5.7.0"
}
},
"node_modules/@ethersproject/properties": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.1.0.tgz",
- "integrity": "sha512-519KKTwgmH42AQL3+GFV3SX6khYEfHsvI6v8HYejlkigSDuqttdgVygFTDsGlofNFchhDwuclrxQnD5B0YLNMg==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz",
+ "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==",
"funding": [
{
"type": "individual",
@@ -855,13 +718,13 @@
}
],
"dependencies": {
- "@ethersproject/logger": "^5.1.0"
+ "@ethersproject/logger": "^5.7.0"
}
},
"node_modules/@ethersproject/providers": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.1.0.tgz",
- "integrity": "sha512-FjpZL2lSXrYpQDg2fMjugZ0HjQD9a+2fOOoRhhihh+Z+qi/xZ8vIlPoumrEP1DzIG4DBV6liUqLNqnX2C6FIAA==",
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz",
+ "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==",
"funding": [
{
"type": "individual",
@@ -873,51 +736,32 @@
}
],
"dependencies": {
- "@ethersproject/abstract-provider": "^5.1.0",
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/basex": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/constants": "^5.1.0",
- "@ethersproject/hash": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/networks": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/random": "^5.1.0",
- "@ethersproject/rlp": "^5.1.0",
- "@ethersproject/sha2": "^5.1.0",
- "@ethersproject/strings": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0",
- "@ethersproject/web": "^5.1.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/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.2.3"
- }
- },
- "node_modules/@ethersproject/providers/node_modules/ws": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz",
- "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==",
- "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
- }
+ "ws": "7.4.6"
}
},
"node_modules/@ethersproject/random": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.1.0.tgz",
- "integrity": "sha512-+uuczLQZ4+no9cP6TCoCktXx0u2YbNaRT7lRkSt12d8263e702f0u+4JnnRO8Qmv5nylWJebnqCHzyxP+6mLqw==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz",
+ "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==",
"funding": [
{
"type": "individual",
@@ -929,14 +773,14 @@
}
],
"dependencies": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0"
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0"
}
},
"node_modules/@ethersproject/rlp": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.1.0.tgz",
- "integrity": "sha512-vDTyHIwNPrecy55gKGZ47eJZhBm8LLBxihzi5ou+zrSvYTpkSTWRcKUlXFDFQVwfWB+P5PGyERAdiDEI76clxw==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz",
+ "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==",
"funding": [
{
"type": "individual",
@@ -948,14 +792,14 @@
}
],
"dependencies": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0"
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0"
}
},
"node_modules/@ethersproject/sha2": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.1.0.tgz",
- "integrity": "sha512-+fNSeZRstOpdRJpdGUkRONFCaiAqWkc91zXgg76Nlp5ndBQE25Kk5yK8gCPG1aGnCrbariiPr5j9DmrYH78JCA==",
+ "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",
@@ -967,24 +811,15 @@
}
],
"dependencies": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "hash.js": "1.1.3"
- }
- },
- "node_modules/@ethersproject/sha2/node_modules/hash.js": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
- "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.0"
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "hash.js": "1.1.7"
}
},
"node_modules/@ethersproject/signing-key": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.1.0.tgz",
- "integrity": "sha512-tE5LFlbmdObG8bY04NpuwPWSRPgEswfxweAI1sH7TbP0ml1elNfqcq7ii/3AvIN05i5U0Pkm3Tf8bramt8MmLw==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz",
+ "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==",
"funding": [
{
"type": "individual",
@@ -996,17 +831,18 @@
}
],
"dependencies": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "bn.js": "^4.4.0",
- "elliptic": "6.5.4"
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "bn.js": "^5.2.1",
+ "elliptic": "6.5.4",
+ "hash.js": "1.1.7"
}
},
"node_modules/@ethersproject/solidity": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.1.0.tgz",
- "integrity": "sha512-kPodsGyo9zg1g9XSXp1lGhFaezBAUUsAUB1Vf6OkppE5Wksg4Et+x3kG4m7J/uShDMP2upkJtHNsIBK2XkVpKQ==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz",
+ "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==",
"funding": [
{
"type": "individual",
@@ -1018,17 +854,18 @@
}
],
"dependencies": {
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/sha2": "^5.1.0",
- "@ethersproject/strings": "^5.1.0"
+ "@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.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.1.0.tgz",
- "integrity": "sha512-perBZy0RrmmL0ejiFGUOlBVjMsUceqLut3OBP3zP96LhiJWWbS8u1NqQVgN4/Gyrbziuda66DxiQocXhsvx+Sw==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz",
+ "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==",
"funding": [
{
"type": "individual",
@@ -1040,15 +877,15 @@
}
],
"dependencies": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/constants": "^5.1.0",
- "@ethersproject/logger": "^5.1.0"
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/constants": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0"
}
},
"node_modules/@ethersproject/transactions": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.1.0.tgz",
- "integrity": "sha512-s10crRLZEA0Bgv6FGEl/AKkTw9f+RVUrlWDX1rHnD4ZncPFeiV2AJr4nT7QSUhxJdFPvjyKRDb3nEH27dIqcPQ==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz",
+ "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==",
"funding": [
{
"type": "individual",
@@ -1060,21 +897,21 @@
}
],
"dependencies": {
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/constants": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/rlp": "^5.1.0",
- "@ethersproject/signing-key": "^5.1.0"
+ "@ethersproject/address": "^5.7.0",
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/constants": "^5.7.0",
+ "@ethersproject/keccak256": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/rlp": "^5.7.0",
+ "@ethersproject/signing-key": "^5.7.0"
}
},
"node_modules/@ethersproject/units": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.1.0.tgz",
- "integrity": "sha512-isvJrx6qG0nKWfxsGORNjmOq/nh175fStfvRTA2xEKrGqx8JNJY83fswu4GkILowfriEM/eYpretfJnfzi7YhA==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz",
+ "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==",
"funding": [
{
"type": "individual",
@@ -1086,15 +923,15 @@
}
],
"dependencies": {
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/constants": "^5.1.0",
- "@ethersproject/logger": "^5.1.0"
+ "@ethersproject/bignumber": "^5.7.0",
+ "@ethersproject/constants": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0"
}
},
"node_modules/@ethersproject/wallet": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.1.0.tgz",
- "integrity": "sha512-ULmUtiYQLTUS+y3DgkLzRhFEK10zMwmjOthnjiZxee3Q/MVwr3rnmuAnXIUZrPjna6hvUPnyRIdW5XuF0Ld0YQ==",
+ "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",
@@ -1106,27 +943,27 @@
}
],
"dependencies": {
- "@ethersproject/abstract-provider": "^5.1.0",
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/hash": "^5.1.0",
- "@ethersproject/hdnode": "^5.1.0",
- "@ethersproject/json-wallets": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/random": "^5.1.0",
- "@ethersproject/signing-key": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0",
- "@ethersproject/wordlists": "^5.1.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/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.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.1.0.tgz",
- "integrity": "sha512-LTeluWgTq04+RNqAkVhpydPcRZK/kKxD2Vy7PYGrAD27ABO9kTqTBKwiOuzTyAHKUQHfnvZbXmxBXJAGViSDcA==",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz",
+ "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==",
"funding": [
{
"type": "individual",
@@ -1138,17 +975,17 @@
}
],
"dependencies": {
- "@ethersproject/base64": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/strings": "^5.1.0"
+ "@ethersproject/base64": "^5.7.0",
+ "@ethersproject/bytes": "^5.7.0",
+ "@ethersproject/logger": "^5.7.0",
+ "@ethersproject/properties": "^5.7.0",
+ "@ethersproject/strings": "^5.7.0"
}
},
"node_modules/@ethersproject/wordlists": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.1.0.tgz",
- "integrity": "sha512-NsUCi/TpBb+oTFvMSccUkJGtp5o/84eOyqp5q5aBeiNBSLkYyw21znRn9mAmxZgySpxgruVgKbaapnYPgvctPQ==",
+ "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",
@@ -1160,34 +997,725 @@
}
],
"dependencies": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/hash": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/strings": "^5.1.0"
+ "@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/@fastify/forwarded": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@fastify/forwarded/-/forwarded-1.0.0.tgz",
- "integrity": "sha512-VoO+6WD0aRz8bwgJZ8pkkxjq7o/782cQ1j945HWg0obZMgIadYW3Pew0+an+k1QL7IPZHM3db5WF6OP6x4ymMA==",
+ "node_modules/@fastify/ajv-compiler": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz",
+ "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==",
+ "dependencies": {
+ "ajv": "^8.11.0",
+ "ajv-formats": "^2.1.1",
+ "fast-uri": "^2.0.0"
+ }
+ },
+ "node_modules/@fastify/deepmerge": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-1.3.0.tgz",
+ "integrity": "sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A=="
+ },
+ "node_modules/@fastify/error": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.2.0.tgz",
+ "integrity": "sha512-KAfcLa+CnknwVi5fWogrLXgidLic+GXnLjijXdpl8pvkvbXU5BGa37iZO9FGvsh9ZL4y+oFi5cbHBm5UOG+dmQ=="
+ },
+ "node_modules/@fastify/fast-json-stringify-compiler": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz",
+ "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==",
+ "dependencies": {
+ "fast-json-stringify": "^5.7.0"
+ }
+ },
+ "node_modules/@metamask/eth-sig-util": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz",
+ "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==",
+ "dependencies": {
+ "ethereumjs-abi": "^0.6.8",
+ "ethereumjs-util": "^6.2.1",
+ "ethjs-util": "^0.1.6",
+ "tweetnacl": "^1.0.3",
+ "tweetnacl-util": "^0.15.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@noble/hashes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz",
+ "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ]
+ },
+ "node_modules/@noble/secp256k1": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz",
+ "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ]
+ },
+ "node_modules/@nomicfoundation/ethereumjs-block": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz",
+ "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==",
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-common": "4.0.1",
+ "@nomicfoundation/ethereumjs-rlp": "5.0.1",
+ "@nomicfoundation/ethereumjs-trie": "6.0.1",
+ "@nomicfoundation/ethereumjs-tx": "5.0.1",
+ "@nomicfoundation/ethereumjs-util": "9.0.1",
+ "ethereum-cryptography": "0.1.3",
+ "ethers": "^5.7.1"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-block/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-blockchain": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz",
+ "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==",
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-block": "5.0.1",
+ "@nomicfoundation/ethereumjs-common": "4.0.1",
+ "@nomicfoundation/ethereumjs-ethash": "3.0.1",
+ "@nomicfoundation/ethereumjs-rlp": "5.0.1",
+ "@nomicfoundation/ethereumjs-trie": "6.0.1",
+ "@nomicfoundation/ethereumjs-tx": "5.0.1",
+ "@nomicfoundation/ethereumjs-util": "9.0.1",
+ "abstract-level": "^1.0.3",
+ "debug": "^4.3.3",
+ "ethereum-cryptography": "0.1.3",
+ "level": "^8.0.0",
+ "lru-cache": "^5.1.1",
+ "memory-level": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/@nomicfoundation/ethereumjs-common": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz",
+ "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==",
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-util": "9.0.1",
+ "crc-32": "^1.2.0"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-ethash": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz",
+ "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==",
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-block": "5.0.1",
+ "@nomicfoundation/ethereumjs-rlp": "5.0.1",
+ "@nomicfoundation/ethereumjs-util": "9.0.1",
+ "abstract-level": "^1.0.3",
+ "bigint-crypto-utils": "^3.0.23",
+ "ethereum-cryptography": "0.1.3"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-ethash/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-evm": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz",
+ "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==",
+ "dependencies": {
+ "@ethersproject/providers": "^5.7.1",
+ "@nomicfoundation/ethereumjs-common": "4.0.1",
+ "@nomicfoundation/ethereumjs-tx": "5.0.1",
+ "@nomicfoundation/ethereumjs-util": "9.0.1",
+ "debug": "^4.3.3",
+ "ethereum-cryptography": "0.1.3",
+ "mcl-wasm": "^0.7.1",
+ "rustbn.js": "~0.2.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-evm/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-evm/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-evm/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/@nomicfoundation/ethereumjs-rlp": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz",
+ "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==",
+ "bin": {
+ "rlp": "bin/rlp"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-statemanager": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz",
+ "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==",
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-common": "4.0.1",
+ "@nomicfoundation/ethereumjs-rlp": "5.0.1",
+ "debug": "^4.3.3",
+ "ethereum-cryptography": "0.1.3",
+ "ethers": "^5.7.1",
+ "js-sdsl": "^4.1.4"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/@nomicfoundation/ethereumjs-trie": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz",
+ "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==",
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-rlp": "5.0.1",
+ "@nomicfoundation/ethereumjs-util": "9.0.1",
+ "@types/readable-stream": "^2.3.13",
+ "ethereum-cryptography": "0.1.3",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-trie/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-tx": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz",
+ "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==",
+ "dependencies": {
+ "@chainsafe/ssz": "^0.9.2",
+ "@ethersproject/providers": "^5.7.2",
+ "@nomicfoundation/ethereumjs-common": "4.0.1",
+ "@nomicfoundation/ethereumjs-rlp": "5.0.1",
+ "@nomicfoundation/ethereumjs-util": "9.0.1",
+ "ethereum-cryptography": "0.1.3"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-tx/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-util": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz",
+ "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==",
+ "dependencies": {
+ "@chainsafe/ssz": "^0.10.0",
+ "@nomicfoundation/ethereumjs-rlp": "5.0.1",
+ "ethereum-cryptography": "0.1.3"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/persistent-merkle-tree": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz",
+ "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==",
+ "dependencies": {
+ "@chainsafe/as-sha256": "^0.3.1"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/ssz": {
+ "version": "0.10.2",
+ "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz",
+ "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==",
+ "dependencies": {
+ "@chainsafe/as-sha256": "^0.3.1",
+ "@chainsafe/persistent-merkle-tree": "^0.5.0"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-vm": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz",
+ "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==",
+ "dependencies": {
+ "@nomicfoundation/ethereumjs-block": "5.0.1",
+ "@nomicfoundation/ethereumjs-blockchain": "7.0.1",
+ "@nomicfoundation/ethereumjs-common": "4.0.1",
+ "@nomicfoundation/ethereumjs-evm": "2.0.1",
+ "@nomicfoundation/ethereumjs-rlp": "5.0.1",
+ "@nomicfoundation/ethereumjs-statemanager": "2.0.1",
+ "@nomicfoundation/ethereumjs-trie": "6.0.1",
+ "@nomicfoundation/ethereumjs-tx": "5.0.1",
+ "@nomicfoundation/ethereumjs-util": "9.0.1",
+ "debug": "^4.3.3",
+ "ethereum-cryptography": "0.1.3",
+ "mcl-wasm": "^0.7.1",
+ "rustbn.js": "~0.2.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-vm/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-vm/node_modules/ethereum-cryptography": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
+ "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "dependencies": {
+ "@types/pbkdf2": "^3.0.0",
+ "@types/secp256k1": "^4.0.1",
+ "blakejs": "^1.1.0",
+ "browserify-aes": "^1.2.0",
+ "bs58check": "^2.1.2",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "hash.js": "^1.1.7",
+ "keccak": "^3.0.0",
+ "pbkdf2": "^3.0.17",
+ "randombytes": "^2.1.0",
+ "safe-buffer": "^5.1.2",
+ "scrypt-js": "^3.0.0",
+ "secp256k1": "^4.0.1",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/@nomicfoundation/ethereumjs-vm/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz",
+ "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==",
+ "engines": {
+ "node": ">= 12"
+ },
+ "optionalDependencies": {
+ "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1",
+ "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1",
+ "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1",
+ "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1",
+ "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1",
+ "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1",
+ "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1",
+ "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1",
+ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1",
+ "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz",
+ "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
"node": ">= 10"
}
},
- "node_modules/@fastify/proxy-addr": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@fastify/proxy-addr/-/proxy-addr-3.0.0.tgz",
- "integrity": "sha512-ty7wnUd/GeSqKTC2Jozsl5xGbnxUnEFC0On2/zPv/8ixywipQmVZwuWvNGnBoitJ2wixwVqofwXNua8j6Y62lQ==",
- "dependencies": {
- "@fastify/forwarded": "^1.0.0",
- "ipaddr.js": "^2.0.0"
+ "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz",
+ "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz",
+ "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz",
+ "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz",
+ "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz",
+ "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz",
+ "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz",
+ "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz",
+ "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz",
+ "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
}
},
"node_modules/@nomiclabs/hardhat-ethers": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz",
- "integrity": "sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz",
+ "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==",
"dev": true,
"peerDependencies": {
"ethers": "^5.0.0",
@@ -1195,25 +1723,22 @@
}
},
"node_modules/@nomiclabs/hardhat-waffle": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.1.tgz",
- "integrity": "sha512-2YR2V5zTiztSH9n8BYWgtv3Q+EL0N5Ltm1PAr5z20uAY4SkkfylJ98CIqt18XFvxTD5x4K2wKBzddjV9ViDAZQ==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.6.tgz",
+ "integrity": "sha512-+Wz0hwmJGSI17B+BhU/qFRZ1l6/xMW82QGXE/Gi+WTmwgJrQefuBs1lIf7hzQ1hLk6hpkvb/zwcNkpVKRYTQYg==",
"dev": true,
- "dependencies": {
- "@types/sinon-chai": "^3.2.3",
- "@types/web3": "1.0.19"
- },
"peerDependencies": {
"@nomiclabs/hardhat-ethers": "^2.0.0",
- "ethereum-waffle": "^3.2.0",
+ "@types/sinon-chai": "^3.2.3",
+ "ethereum-waffle": "*",
"ethers": "^5.0.0",
"hardhat": "^2.0.0"
}
},
"node_modules/@openzeppelin/contracts": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.0.0.tgz",
- "integrity": "sha512-UcIJl/vUVjTr3H1yYXZi7Sr2PlXzBEHVUJKOUlVyzyy0FI8oQCCy0Wx+BuK/fojdnmLeMvUk4KUvhKUybP+C7Q=="
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.3.tgz",
+ "integrity": "sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg=="
},
"node_modules/@resolver-engine/core": {
"version": "0.3.3",
@@ -1226,15 +1751,6 @@
"request": "^2.85.0"
}
},
- "node_modules/@resolver-engine/core/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
"node_modules/@resolver-engine/fs": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz",
@@ -1245,15 +1761,6 @@
"debug": "^3.1.0"
}
},
- "node_modules/@resolver-engine/fs/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
"node_modules/@resolver-engine/imports": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz",
@@ -1278,22 +1785,46 @@
"debug": "^3.1.0"
}
},
- "node_modules/@resolver-engine/imports-fs/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
+ "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.5",
+ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz",
+ "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
"dependencies": {
- "ms": "^2.1.1"
+ "@noble/hashes": "~1.2.0",
+ "@noble/secp256k1": "~1.7.0",
+ "@scure/base": "~1.1.0"
}
},
- "node_modules/@resolver-engine/imports/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
+ "node_modules/@scure/bip39": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz",
+ "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
"dependencies": {
- "ms": "^2.1.1"
+ "@noble/hashes": "~1.2.0",
+ "@scure/base": "~1.1.0"
}
},
"node_modules/@sentry/core": {
@@ -1391,29 +1922,6 @@
"node": ">=6"
}
},
- "node_modules/@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
- "dev": true,
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/@sinonjs/fake-timers": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.0.5.tgz",
- "integrity": "sha512-fUt6b15bjV/VW93UP5opNXJxdwZSbK1EdiwnhN7XrQrcpaOhMJpZ/CjwFpM3THpxwA+YviBUJKSuEqKlCK5alw==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "node_modules/@solidity-parser/parser": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.11.1.tgz",
- "integrity": "sha512-H8BSBoKE8EubJa0ONqecA2TviT3TnHeC4NpgnAHSUiuhZoQBfPB4L2P9bs8R6AoTW10Endvh3vc+fomVMIDIYQ=="
- },
"node_modules/@typechain/ethers-v5": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz",
@@ -1427,38 +1935,25 @@
"typechain": "^3.0.0"
}
},
- "node_modules/@types/abstract-leveldown": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-5.0.1.tgz",
- "integrity": "sha512-wYxU3kp5zItbxKmeRYCEplS2MW7DzyBnxPGj+GJVHZEUZiK/nn5Ei1sUFgURDh+X051+zsGe28iud3oHjrYWQQ=="
- },
"node_modules/@types/bn.js": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz",
- "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz",
+ "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/chai": {
- "version": "4.2.16",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.16.tgz",
- "integrity": "sha512-vI5iOAsez9+roLS3M3+Xx7w+WRuDtSmF8bQkrbcIJ2sC1PcDgVoA0WGpa+bIrJ+y8zqY2oi//fUctkxtIcXJCw==",
- "dev": true
- },
- "node_modules/@types/levelup": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.1.tgz",
- "integrity": "sha512-n//PeTpbHLjMLTIgW5B/g06W/6iuTBHuvUka2nFL9APMSVMNe2r4enADfu3CIE9IyV9E+uquf9OEQQqrDeg24A==",
- "dependencies": {
- "@types/abstract-leveldown": "*",
- "@types/node": "*"
- }
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz",
+ "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==",
+ "dev": true,
+ "peer": true
},
"node_modules/@types/lru-cache": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz",
- "integrity": "sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w=="
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw=="
},
"node_modules/@types/mkdirp": {
"version": "0.5.2",
@@ -1470,14 +1965,14 @@
}
},
"node_modules/@types/node": {
- "version": "14.14.41",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz",
- "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g=="
+ "version": "20.2.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz",
+ "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw=="
},
"node_modules/@types/node-fetch": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz",
- "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==",
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz",
+ "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -1493,11 +1988,20 @@
}
},
"node_modules/@types/prettier": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz",
- "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==",
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
+ "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==",
"dev": true
},
+ "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/resolve": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz",
@@ -1508,47 +2012,40 @@
}
},
"node_modules/@types/secp256k1": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.2.tgz",
- "integrity": "sha512-QMg+9v0bbNJ2peLuHRWxzmy0HRJIG6gFZNhaRSp7S3ggSbCCxiqQB2/ybvhXyhHOCequpNkrx7OavNhrWOsW0A==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz",
+ "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/sinon": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.0.tgz",
- "integrity": "sha512-jDZ55oCKxqlDmoTBBbBBEx+N8ZraUVhggMZ9T5t+6/Dh8/4NiOjSUfpLrPiEwxQDlAe3wpAkoXhWvE6LibtsMQ==",
+ "version": "10.0.15",
+ "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.15.tgz",
+ "integrity": "sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@sinonjs/fake-timers": "^7.0.4"
+ "@types/sinonjs__fake-timers": "*"
}
},
"node_modules/@types/sinon-chai": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.5.tgz",
- "integrity": "sha512-bKQqIpew7mmIGNRlxW6Zli/QVyc3zikpGzCa797B/tRnD9OtHvZ/ts8sYXV+Ilj9u3QRaUEM8xrjgd1gwm1BpQ==",
+ "version": "3.2.9",
+ "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.9.tgz",
+ "integrity": "sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@types/chai": "*",
"@types/sinon": "*"
}
},
- "node_modules/@types/underscore": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.1.tgz",
- "integrity": "sha512-mW23Xkp9HYgdMV7gnwuzqnPx6aG0J7xg/b7erQszOcyOizWylwCr9cgYM/BVVJHezUDxwyigG6+wCFQwCvyMBw==",
- "dev": true
- },
- "node_modules/@types/web3": {
- "version": "1.0.19",
- "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz",
- "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==",
+ "node_modules/@types/sinonjs__fake-timers": {
+ "version": "8.1.2",
+ "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz",
+ "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==",
"dev": true,
- "dependencies": {
- "@types/bn.js": "*",
- "@types/underscore": "*"
- }
+ "peer": true
},
"node_modules/@yarnpkg/lockfile": {
"version": "1.1.0",
@@ -1567,19 +2064,21 @@
"node": ">=6.5"
}
},
- "node_modules/abstract-leveldown": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz",
- "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==",
+ "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": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
+ "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": ">=6"
+ "node": ">=12"
}
},
"node_modules/abstract-logging": {
@@ -1598,7 +2097,7 @@
"node_modules/aes-js": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
- "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0="
+ "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw=="
},
"node_modules/agent-base": {
"version": "6.0.2",
@@ -1611,14 +2110,47 @@
"node": ">= 6.0.0"
}
},
+ "node_modules/agent-base/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/agent-base/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
"dependencies": {
"fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
},
"funding": {
@@ -1626,10 +2158,26 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
"node_modules/ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
"engines": {
"node": ">=6"
}
@@ -1649,11 +2197,11 @@
}
},
"node_modules/ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/ansi-styles": {
@@ -1668,9 +2216,9 @@
}
},
"node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -1682,15 +2230,12 @@
"node_modules/archy": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
- "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA="
+ "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw=="
},
"node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"node_modules/array-back": {
"version": "2.0.0",
@@ -1705,9 +2250,9 @@
}
},
"node_modules/asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"dev": true,
"dependencies": {
"safer-buffer": "~2.1.0"
@@ -1716,7 +2261,7 @@
"node_modules/assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
"dev": true,
"engines": {
"node": ">=0.8"
@@ -1731,28 +2276,21 @@
"node": "*"
}
},
- "node_modules/async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "dependencies": {
- "lodash": "^4.17.14"
- }
- },
- "node_modules/async-eventemitter": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz",
- "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==",
- "dependencies": {
- "async": "^2.4.0"
- }
- },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"dev": true
},
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
"node_modules/atomic-sleep": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
@@ -1762,29 +2300,49 @@
}
},
"node_modules/avvio": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.1.tgz",
- "integrity": "sha512-b+gox68dqD6c3S3t+bZBKN6rYbVWdwpN12sHQLFTiacDT2rcq7fm07Ww+IKt/AvAkyCIe1f5ArP1bC/vAlx97A==",
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.2.1.tgz",
+ "integrity": "sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==",
"dependencies": {
"archy": "^1.0.0",
"debug": "^4.0.0",
- "fastq": "^1.6.1",
- "queue-microtask": "^1.1.2"
+ "fastq": "^1.6.1"
}
},
+ "node_modules/avvio/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/avvio/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
"node_modules/aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
"dev": true
},
"node_modules/balanced-match": {
@@ -1793,9 +2351,9 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/base-x": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz",
- "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==",
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz",
+ "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==",
"dependencies": {
"safe-buffer": "^5.0.1"
}
@@ -1822,7 +2380,7 @@
"node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
"dev": true,
"dependencies": {
"tweetnacl": "^0.14.3"
@@ -1831,7 +2389,7 @@
"node_modules/bcrypt-pbkdf/node_modules/tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
"dev": true
},
"node_modules/bech32": {
@@ -1839,6 +2397,14 @@
"resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
"integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="
},
+ "node_modules/bigint-crypto-utils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz",
+ "integrity": "sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@@ -1848,9 +2414,9 @@
}
},
"node_modules/blakejs": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz",
- "integrity": "sha1-ad+S75U6qIylGjLfarHFShVfx6U="
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz",
+ "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ=="
},
"node_modules/bluebird": {
"version": "3.7.2",
@@ -1859,9 +2425,9 @@
"dev": true
},
"node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
+ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ=="
},
"node_modules/brace-expansion": {
"version": "1.1.11",
@@ -1886,7 +2452,18 @@
"node_modules/brorand": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="
+ },
+ "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-stdout": {
"version": "1.3.1",
@@ -1906,15 +2483,10 @@
"safe-buffer": "^5.0.1"
}
},
- "node_modules/browserify-aes/node_modules/buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
- },
"node_modules/bs58": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
- "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=",
+ "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==",
"dependencies": {
"base-x": "^3.0.2"
}
@@ -1930,9 +2502,9 @@
}
},
"node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"funding": [
{
"type": "github",
@@ -1949,32 +2521,34 @@
],
"dependencies": {
"base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
+ "ieee754": "^1.2.1"
}
},
"node_modules/buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
- },
- "node_modules/buffer-to-arraybuffer": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz",
- "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=",
- "dev": true
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"node_modules/buffer-xor": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz",
- "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ=="
+ },
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
"dependencies": {
- "safe-buffer": "^5.1.1"
+ "streamsearch": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10.16.0"
}
},
"node_modules/bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"engines": {
"node": ">= 0.8"
}
@@ -1992,29 +2566,49 @@
}
},
"node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"engines": {
- "node": ">=6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/case": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz",
+ "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==",
+ "engines": {
+ "node": ">= 0.8.0"
}
},
"node_modules/caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
"dev": true
},
+ "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/chai": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
- "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
+ "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==",
"dev": true,
"dependencies": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
+ "deep-eql": "^4.1.2",
"get-func-name": "^2.0.0",
+ "loupe": "^2.3.1",
"pathval": "^1.1.1",
"type-detect": "^4.0.5"
},
@@ -2038,30 +2632,36 @@
"node_modules/check-error": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/chokidar": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
- "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
"dependencies": {
- "anymatch": "~3.1.1",
+ "anymatch": "~3.1.2",
"braces": "~3.0.2",
- "glob-parent": "~5.1.0",
+ "glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
- "readdirp": "~3.5.0"
+ "readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
- "fsevents": "~2.3.1"
+ "fsevents": "~2.3.2"
}
},
"node_modules/ci-info": {
@@ -2078,52 +2678,44 @@
"safe-buffer": "^5.0.1"
}
},
+ "node_modules/classic-level": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz",
+ "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "abstract-level": "^1.0.2",
+ "catering": "^2.1.0",
+ "module-error": "^1.0.1",
+ "napi-macros": "^2.2.2",
+ "node-gyp-build": "^4.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dependencies": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "node_modules/cliui/node_modules/ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cliui/node_modules/string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cliui/node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
}
},
"node_modules/code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -2140,7 +2732,7 @@
"node_modules/color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
},
"node_modules/combined-stream": {
"version": "1.0.8",
@@ -2181,40 +2773,26 @@
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"node_modules/cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/core-js-pure": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.10.1.tgz",
- "integrity": "sha512-PeyJH2SE0KuxY5eCGNWA+W+CeDpB6M1PN3S7Am7jSv/Ttuxz2SnWbIiVQOn/TDaGaGtxo8CRWHkXwJscbUHtVw==",
- "hasInstallScript": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
"node_modules/core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
"dev": true
},
"node_modules/crc-32": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
- "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
- "dependencies": {
- "exit-on-epipe": "~1.0.1",
- "printj": "~1.1.0"
- },
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
+ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
"bin": {
"crc32": "bin/crc32.njs"
},
@@ -2275,7 +2853,7 @@
"node_modules/dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
"dev": true,
"dependencies": {
"assert-plus": "^1.0.0"
@@ -2285,143 +2863,66 @@
}
},
"node_modules/debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "ms": "^2.1.1"
}
},
"node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true,
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "dev": true,
- "dependencies": {
- "mimic-response": "^1.0.0"
+ "node": ">=10"
},
- "engines": {
- "node": ">=4"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
+ "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
"dev": true,
"dependencies": {
"type-detect": "^4.0.0"
},
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/deferred-leveldown": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz",
- "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==",
- "dependencies": {
- "abstract-leveldown": "~6.2.1",
- "inherits": "^2.0.3"
- },
"engines": {
"node": ">=6"
}
},
- "node_modules/deferred-leveldown/node_modules/abstract-leveldown": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
- "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
- "dependencies": {
- "buffer": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dependencies": {
- "object-keys": "^1.0.12"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.8"
}
},
"node_modules/diff": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
"engines": {
"node": ">=0.3.1"
}
},
- "node_modules/dom-walk": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
- "dev": true
- },
"node_modules/ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
"dev": true,
"dependencies": {
"jsbn": "~0.1.0",
@@ -2442,24 +2943,15 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
- "node_modules/emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+ "node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
},
- "node_modules/encoding-down": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz",
- "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==",
- "dependencies": {
- "abstract-leveldown": "^6.2.1",
- "inherits": "^2.0.3",
- "level-codec": "^9.0.0",
- "level-errors": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/enquirer": {
"version": "2.3.6",
@@ -2480,17 +2972,6 @@
"node": ">=6"
}
},
- "node_modules/errno": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
- "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
- "dependencies": {
- "prr": "~1.0.1"
- },
- "bin": {
- "errno": "cli.js"
- }
- },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -2500,92 +2981,26 @@
"is-arrayish": "^0.2.1"
}
},
- "node_modules/es-abstract": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz",
- "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "is-callable": "^1.2.3",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.2",
- "is-string": "^1.0.5",
- "object-inspect": "^1.9.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.0"
- },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-abstract/node_modules/object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "dependencies": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=6"
}
},
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"engines": {
"node": ">=0.8.0"
}
},
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/eth-ens-namehash": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz",
- "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=",
+ "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==",
"dev": true,
"dependencies": {
"idna-uts46-hx": "^2.3.1",
@@ -2595,55 +3010,90 @@
"node_modules/eth-ens-namehash/node_modules/js-sha3": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
- "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=",
+ "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==",
"dev": true
},
- "node_modules/eth-lib": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
- "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.11.6",
- "elliptic": "^6.4.0",
- "xhr-request-promise": "^0.1.2"
- }
- },
- "node_modules/eth-sig-util": {
- "version": "2.5.4",
- "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.5.4.tgz",
- "integrity": "sha512-aCMBwp8q/4wrW4QLsF/HYBOSA7TpLKmkVwP3pYQNkEEseW2Rr8Z5Uxc9/h6HX+OG3tuHo+2bINVSihIeBfym6A==",
- "dependencies": {
- "ethereumjs-abi": "0.6.8",
- "ethereumjs-util": "^5.1.1",
- "tweetnacl": "^1.0.3",
- "tweetnacl-util": "^0.15.0"
- }
- },
- "node_modules/eth-sig-util/node_modules/ethereumjs-util": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz",
- "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==",
- "dependencies": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
"node_modules/ethereum-bloom-filters": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz",
- "integrity": "sha512-GiK/RQkAkcVaEdxKVkPcG07PQ5vD7v2MFSHgZmBJSfMzNRHimntdBithsHAT89tAXnIpzVDWt8iaCD1DvkaxGg==",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz",
+ "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==",
"dev": true,
"dependencies": {
"js-sha3": "^0.8.0"
}
},
"node_modules/ethereum-cryptography": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz",
+ "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==",
+ "dependencies": {
+ "@noble/hashes": "1.2.0",
+ "@noble/secp256k1": "1.7.1",
+ "@scure/bip32": "1.1.5",
+ "@scure/bip39": "1.1.1"
+ }
+ },
+ "node_modules/ethereum-waffle": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz",
+ "integrity": "sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==",
+ "dev": true,
+ "dependencies": {
+ "@ethereum-waffle/chai": "^3.4.4",
+ "@ethereum-waffle/compiler": "^3.4.4",
+ "@ethereum-waffle/mock-contract": "^3.4.4",
+ "@ethereum-waffle/provider": "^3.4.4",
+ "ethers": "^5.0.1"
+ },
+ "bin": {
+ "waffle": "bin/waffle"
+ },
+ "engines": {
+ "node": ">=10.0"
+ }
+ },
+ "node_modules/ethereumjs-abi": {
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz",
+ "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==",
+ "dependencies": {
+ "bn.js": "^4.11.8",
+ "ethereumjs-util": "^6.0.0"
+ }
+ },
+ "node_modules/ethereumjs-abi/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
+ },
+ "node_modules/ethereumjs-util": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz",
+ "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==",
+ "dependencies": {
+ "@types/bn.js": "^4.11.3",
+ "bn.js": "^4.11.0",
+ "create-hash": "^1.1.2",
+ "elliptic": "^6.5.2",
+ "ethereum-cryptography": "^0.1.3",
+ "ethjs-util": "0.1.6",
+ "rlp": "^2.2.3"
+ }
+ },
+ "node_modules/ethereumjs-util/node_modules/@types/bn.js": {
+ "version": "4.11.6",
+ "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz",
+ "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/ethereumjs-util/node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
+ },
+ "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
"integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
@@ -2665,81 +3115,10 @@
"setimmediate": "^1.0.5"
}
},
- "node_modules/ethereum-waffle": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.3.0.tgz",
- "integrity": "sha512-4xm3RWAPCu5LlaVxYEg0tG3L7g5ovBw1GY/UebrzZ+OTx22vcPjI+bvelFlGBpkdnO5yOIFXjH2eK59tNAe9IA==",
- "dev": true,
- "dependencies": {
- "@ethereum-waffle/chai": "^3.3.0",
- "@ethereum-waffle/compiler": "^3.3.0",
- "@ethereum-waffle/mock-contract": "^3.2.2",
- "@ethereum-waffle/provider": "^3.3.0",
- "ethers": "^5.0.1"
- },
- "bin": {
- "waffle": "bin/waffle"
- },
- "engines": {
- "node": ">=10.0"
- }
- },
- "node_modules/ethereumjs-abi": {
- "version": "0.6.8",
- "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz",
- "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==",
- "dependencies": {
- "bn.js": "^4.11.8",
- "ethereumjs-util": "^6.0.0"
- }
- },
- "node_modules/ethereumjs-abi/node_modules/@types/bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz",
- "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==",
- "dependencies": {
- "@types/bn.js": "^4.11.3",
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "0.1.6",
- "rlp": "^2.2.3"
- }
- },
- "node_modules/ethereumjs-util": {
- "version": "7.0.10",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.0.10.tgz",
- "integrity": "sha512-c/xThw6A+EAnej5Xk5kOzFzyoSnw0WX0tSlZ6pAsfGVvQj3TItaDg9b1+Fz1RJXA+y2YksKwQnuzgt1eY6LKzw==",
- "dependencies": {
- "@types/bn.js": "^5.1.0",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "0.1.6",
- "rlp": "^2.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/ethereumjs-util/node_modules/bn.js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
- "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
- },
"node_modules/ethers": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.1.0.tgz",
- "integrity": "sha512-2L6Ge6wMBw02FlRoCLg4E0Elt3khMNlW6ULawa10mMeeZToYJ5+uCfiuTuB+XZ6om1Y7wuO9ZzezP8FsU2M/+g==",
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz",
+ "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==",
"funding": [
{
"type": "individual",
@@ -2751,42 +3130,42 @@
}
],
"dependencies": {
- "@ethersproject/abi": "5.1.0",
- "@ethersproject/abstract-provider": "5.1.0",
- "@ethersproject/abstract-signer": "5.1.0",
- "@ethersproject/address": "5.1.0",
- "@ethersproject/base64": "5.1.0",
- "@ethersproject/basex": "5.1.0",
- "@ethersproject/bignumber": "5.1.0",
- "@ethersproject/bytes": "5.1.0",
- "@ethersproject/constants": "5.1.0",
- "@ethersproject/contracts": "5.1.0",
- "@ethersproject/hash": "5.1.0",
- "@ethersproject/hdnode": "5.1.0",
- "@ethersproject/json-wallets": "5.1.0",
- "@ethersproject/keccak256": "5.1.0",
- "@ethersproject/logger": "5.1.0",
- "@ethersproject/networks": "5.1.0",
- "@ethersproject/pbkdf2": "5.1.0",
- "@ethersproject/properties": "5.1.0",
- "@ethersproject/providers": "5.1.0",
- "@ethersproject/random": "5.1.0",
- "@ethersproject/rlp": "5.1.0",
- "@ethersproject/sha2": "5.1.0",
- "@ethersproject/signing-key": "5.1.0",
- "@ethersproject/solidity": "5.1.0",
- "@ethersproject/strings": "5.1.0",
- "@ethersproject/transactions": "5.1.0",
- "@ethersproject/units": "5.1.0",
- "@ethersproject/wallet": "5.1.0",
- "@ethersproject/web": "5.1.0",
- "@ethersproject/wordlists": "5.1.0"
+ "@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",
"resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz",
- "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=",
+ "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==",
"dev": true,
"dependencies": {
"bn.js": "4.11.6",
@@ -2800,7 +3179,7 @@
"node_modules/ethjs-unit/node_modules/bn.js": {
"version": "4.11.6",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=",
+ "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==",
"dev": true
},
"node_modules/ethjs-util": {
@@ -2824,6 +3203,14 @@
"node": ">=6"
}
},
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
"node_modules/evp_bytestokey": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
@@ -2833,14 +3220,6 @@
"safe-buffer": "^5.1.1"
}
},
- "node_modules/exit-on-epipe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
- "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==",
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -2850,12 +3229,17 @@
"node_modules/extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
"dev": true,
"engines": [
"node >=0.6.0"
]
},
+ "node_modules/fast-content-type-parse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.0.0.tgz",
+ "integrity": "sha512-Xbc4XcysUXcsP5aHUU7Nq3OwvHq97C+WnbkeIefpeYLX+ryzFJlU6OStFJhs6Ol0LkUGpcK+wL0JwfM+FCU5IA=="
+ },
"node_modules/fast-decode-uri-component": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz",
@@ -2869,105 +3253,70 @@
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
},
"node_modules/fast-json-stringify": {
- "version": "2.5.4",
- "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.5.4.tgz",
- "integrity": "sha512-fu74X0fRzQqADX6LFJ+5lSal1+j/QmX4oWrDnrfVAXV4qT6PwyymZmhGa/1SWgouOmf0tBJzZrHZPLymO00Lxg==",
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.7.0.tgz",
+ "integrity": "sha512-sBVPTgnAZseLu1Qgj6lUbQ0HfjFhZWXAmpZ5AaSGkyLh5gAXBga/uPJjQPHpDFjC9adWIpdOcCLSDTgrZ7snoQ==",
"dependencies": {
- "ajv": "^6.11.0",
- "deepmerge": "^4.2.2",
- "rfdc": "^1.2.0",
- "string-similarity": "^4.0.1"
- },
- "engines": {
- "node": ">= 10.0.0"
+ "@fastify/deepmerge": "^1.0.0",
+ "ajv": "^8.10.0",
+ "ajv-formats": "^2.1.1",
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^2.1.0",
+ "rfdc": "^1.2.0"
+ }
+ },
+ "node_modules/fast-querystring": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.1.tgz",
+ "integrity": "sha512-qR2r+e3HvhEFmpdHMv//U8FnFlnYjaC6QKDuaXALDkw2kvHO8WDjxH+f/rHGR4Me4pnk8p9JAkRNTjYHAKRn2Q==",
+ "dependencies": {
+ "fast-decode-uri-component": "^1.0.1"
}
},
"node_modules/fast-redact": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.0.tgz",
- "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz",
+ "integrity": "sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==",
"engines": {
"node": ">=6"
}
},
- "node_modules/fast-safe-stringify": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
- "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
+ "node_modules/fast-uri": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.2.0.tgz",
+ "integrity": "sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg=="
},
"node_modules/fastify": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/fastify/-/fastify-3.14.2.tgz",
- "integrity": "sha512-/PY//7gJnGxLQORaRHCEW148vpFKFpBIQNz1Yo/DxbHuk5EQqK2comzyE2ug8FSEldDX8nleapTshl0m78Px2w==",
+ "version": "4.17.0",
+ "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.17.0.tgz",
+ "integrity": "sha512-tzuY1tgWJo2Y6qEKwmLhFvACUmr68Io2pqP/sDKU71KRM6A6R3DrCDqLGqANbeLZcKUfdfY58ut35CGqemcTgg==",
"dependencies": {
- "@fastify/proxy-addr": "^3.0.0",
- "abstract-logging": "^2.0.0",
- "ajv": "^6.12.2",
- "avvio": "^7.1.2",
- "fast-json-stringify": "^2.5.2",
- "fastify-error": "^0.3.0",
- "fastify-warning": "^0.2.0",
- "find-my-way": "^4.0.0",
- "flatstr": "^1.0.12",
- "light-my-request": "^4.2.0",
- "pino": "^6.2.1",
- "readable-stream": "^3.4.0",
- "rfdc": "^1.1.4",
- "secure-json-parse": "^2.0.0",
- "semver": "^7.3.2",
- "tiny-lru": "^7.0.0"
- },
- "engines": {
- "node": ">=10.16.0"
+ "@fastify/ajv-compiler": "^3.5.0",
+ "@fastify/error": "^3.0.0",
+ "@fastify/fast-json-stringify-compiler": "^4.3.0",
+ "abstract-logging": "^2.0.1",
+ "avvio": "^8.2.0",
+ "fast-content-type-parse": "^1.0.0",
+ "fast-json-stringify": "^5.7.0",
+ "find-my-way": "^7.6.0",
+ "light-my-request": "^5.6.1",
+ "pino": "^8.5.0",
+ "process-warning": "^2.0.0",
+ "proxy-addr": "^2.0.7",
+ "rfdc": "^1.3.0",
+ "secure-json-parse": "^2.5.0",
+ "semver": "^7.3.7",
+ "tiny-lru": "^11.0.1"
}
},
- "node_modules/fastify-error": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/fastify-error/-/fastify-error-0.3.0.tgz",
- "integrity": "sha512-Jm2LMTB5rsJqlS1+cmgqqM9tTs0UrlgYR7TvDT3ZgXsUI5ib1NjQlqZHf+tDK5tVPdFGwyq02wAoJtyYIRSiFA=="
- },
- "node_modules/fastify-warning": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz",
- "integrity": "sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw=="
- },
- "node_modules/fastify/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/fastify/node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/fastify/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
"node_modules/fastq": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz",
- "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
"dependencies": {
"reusify": "^1.0.4"
}
@@ -2984,23 +3333,22 @@
}
},
"node_modules/find-my-way": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-4.1.0.tgz",
- "integrity": "sha512-UBD94MdO6cBi6E97XA0fBA9nwqw+xG5x1TYIPHats33gEi/kNqy7BWHAWx8QHCQQRSU5Txc0JiD8nzba39gvMQ==",
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-7.6.2.tgz",
+ "integrity": "sha512-0OjHn1b1nCX3eVbm9ByeEHiscPYiHLfhei1wOUU9qffQkk98wE0Lo8VrVYfSGMgnSnDh86DxedduAnBf4nwUEw==",
"dependencies": {
- "fast-decode-uri-component": "^1.0.1",
"fast-deep-equal": "^3.1.3",
- "safe-regex2": "^2.0.0",
- "semver-store": "^0.3.0"
+ "fast-querystring": "^1.0.0",
+ "safe-regex2": "^2.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14"
}
},
"node_modules/find-replace": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz",
- "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=",
+ "integrity": "sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==",
"dev": true,
"dependencies": {
"array-back": "^1.0.4",
@@ -3013,7 +3361,7 @@
"node_modules/find-replace/node_modules/array-back": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
- "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+ "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==",
"dev": true,
"dependencies": {
"typical": "^2.6.0"
@@ -3025,7 +3373,7 @@
"node_modules/find-up": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
"dependencies": {
"locate-path": "^2.0.0"
},
@@ -3043,25 +3391,17 @@
}
},
"node_modules/flat": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz",
- "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==",
- "dependencies": {
- "is-buffer": "~2.0.3"
- },
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
"bin": {
"flat": "cli.js"
}
},
- "node_modules/flatstr": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz",
- "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw=="
- },
"node_modules/follow-redirects": {
- "version": "1.14.7",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz",
- "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==",
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
"funding": [
{
"type": "individual",
@@ -3077,18 +3417,10 @@
}
}
},
- "node_modules/for-each": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
- "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
- "dependencies": {
- "is-callable": "^1.1.3"
- }
- },
"node_modules/forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
"dev": true,
"engines": {
"node": "*"
@@ -3108,6 +3440,14 @@
"node": ">= 6"
}
},
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/fp-ts": {
"version": "1.19.3",
"resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz",
@@ -3129,7 +3469,7 @@
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"node_modules/fsevents": {
"version": "2.3.2",
@@ -3152,17 +3492,16 @@
"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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g=="
},
"node_modules/ganache-core": {
"version": "2.13.2",
"resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz",
"integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==",
"bundleDependencies": [
- "keccak",
- "node-addon-api",
- "node-gyp-build"
+ "keccak"
],
+ "deprecated": "ganache-core is now ganache; visit https://trfl.io/g7 for details",
"dev": true,
"hasShrinkwrap": true,
"dependencies": {
@@ -12344,20 +12683,21 @@
"node_modules/get-func-name": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
- "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
- "has-symbols": "^1.0.1"
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -12366,16 +12706,16 @@
"node_modules/getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
"dev": true,
"dependencies": {
"assert-plus": "^1.0.0"
}
},
"node_modules/glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -12402,33 +12742,15 @@
"node": ">= 6"
}
},
- "node_modules/global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "dev": true,
- "dependencies": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
"node_modules/graceful-fs": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
- "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
- },
- "node_modules/growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "engines": {
- "node": ">=4.x"
- }
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
},
"node_modules/har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
"dev": true,
"engines": {
"node": ">=4"
@@ -12448,22 +12770,52 @@
"node": ">=6"
}
},
- "node_modules/hardhat": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.2.0.tgz",
- "integrity": "sha512-3g0qFoQTkR4gfcHDZr59vPfbSH2PiAyxzYblkAAHUNTPBadO5W26z5RWzDv6/lRu8SqZZ9/8AdGZX4IZEa8EDg==",
+ "node_modules/har-validator/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
"dependencies": {
- "@ethereumjs/block": "^3.2.1",
- "@ethereumjs/blockchain": "^5.2.1",
- "@ethereumjs/common": "^2.2.0",
- "@ethereumjs/tx": "^3.1.3",
- "@ethereumjs/vm": "^5.3.2",
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/har-validator/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/hardhat": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz",
+ "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==",
+ "dependencies": {
+ "@ethersproject/abi": "^5.1.2",
+ "@metamask/eth-sig-util": "^4.0.0",
+ "@nomicfoundation/ethereumjs-block": "5.0.1",
+ "@nomicfoundation/ethereumjs-blockchain": "7.0.1",
+ "@nomicfoundation/ethereumjs-common": "4.0.1",
+ "@nomicfoundation/ethereumjs-evm": "2.0.1",
+ "@nomicfoundation/ethereumjs-rlp": "5.0.1",
+ "@nomicfoundation/ethereumjs-statemanager": "2.0.1",
+ "@nomicfoundation/ethereumjs-trie": "6.0.1",
+ "@nomicfoundation/ethereumjs-tx": "5.0.1",
+ "@nomicfoundation/ethereumjs-util": "9.0.1",
+ "@nomicfoundation/ethereumjs-vm": "7.0.1",
+ "@nomicfoundation/solidity-analyzer": "^0.1.0",
"@sentry/node": "^5.18.1",
- "@solidity-parser/parser": "^0.11.0",
"@types/bn.js": "^5.1.0",
"@types/lru-cache": "^5.1.0",
"abort-controller": "^3.0.0",
"adm-zip": "^0.4.16",
+ "aggregate-error": "^3.0.0",
"ansi-escapes": "^4.3.0",
"chalk": "^2.4.2",
"chokidar": "^3.4.0",
@@ -12471,39 +12823,127 @@
"debug": "^4.1.1",
"enquirer": "^2.3.0",
"env-paths": "^2.2.0",
- "eth-sig-util": "^2.5.2",
- "ethereum-cryptography": "^0.1.2",
+ "ethereum-cryptography": "^1.0.3",
"ethereumjs-abi": "^0.6.8",
- "ethereumjs-util": "^7.0.10",
"find-up": "^2.1.0",
"fp-ts": "1.19.3",
"fs-extra": "^7.0.1",
- "glob": "^7.1.3",
+ "glob": "7.2.0",
"immutable": "^4.0.0-rc.12",
"io-ts": "1.10.4",
+ "keccak": "^3.0.2",
"lodash": "^4.17.11",
- "merkle-patricia-tree": "^4.1.0",
"mnemonist": "^0.38.0",
- "mocha": "^7.1.2",
- "node-fetch": "^2.6.7",
+ "mocha": "^10.0.0",
+ "p-map": "^4.0.0",
"qs": "^6.7.0",
"raw-body": "^2.4.1",
"resolve": "1.17.0",
"semver": "^6.3.0",
- "slash": "^3.0.0",
"solc": "0.7.3",
"source-map-support": "^0.5.13",
"stacktrace-parser": "^0.1.10",
- "true-case-path": "^2.2.1",
"tsort": "0.0.1",
- "uuid": "^3.3.2",
- "ws": "^7.2.1"
+ "undici": "^5.14.0",
+ "uuid": "^8.3.2",
+ "ws": "^7.4.6"
},
"bin": {
- "hardhat": "internal/cli/cli.js"
+ "hardhat": "internal/cli/bootstrap.js"
},
"engines": {
- "node": ">=8.2.0"
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "ts-node": "*",
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "ts-node": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/hardhat/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/hardhat/node_modules/jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==",
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/hardhat/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/hardhat/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/hardhat/node_modules/solc": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz",
+ "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==",
+ "dependencies": {
+ "command-exists": "^1.2.8",
+ "commander": "3.0.2",
+ "follow-redirects": "^1.12.1",
+ "fs-extra": "^0.30.0",
+ "js-sha3": "0.8.0",
+ "memorystream": "^0.3.1",
+ "require-from-string": "^2.0.0",
+ "semver": "^5.5.0",
+ "tmp": "0.0.33"
+ },
+ "bin": {
+ "solcjs": "solcjs"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/hardhat/node_modules/solc/node_modules/fs-extra": {
+ "version": "0.30.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
+ "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "node_modules/hardhat/node_modules/solc/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "bin": {
+ "semver": "bin/semver"
}
},
"node_modules/has": {
@@ -12517,26 +12957,29 @@
"node": ">= 0.4.0"
}
},
- "node_modules/has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"engines": {
"node": ">=4"
}
},
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"engines": {
"node": ">= 0.4"
},
@@ -12557,6 +13000,25 @@
"node": ">=4"
}
},
+ "node_modules/hash-base/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "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/hash.js": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
@@ -12577,7 +13039,7 @@
"node_modules/hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
"dependencies": {
"hash.js": "^1.0.3",
"minimalistic-assert": "^1.0.0",
@@ -12591,24 +13053,24 @@
"dev": true
},
"node_modules/http-errors": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
- "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"dependencies": {
- "depd": "~1.1.2",
+ "depd": "2.0.0",
"inherits": "2.0.4",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.8"
}
},
"node_modules/http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
"dev": true,
"dependencies": {
"assert-plus": "^1.0.0",
@@ -12621,9 +13083,9 @@
}
},
"node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"dependencies": {
"agent-base": "6",
"debug": "4"
@@ -12632,6 +13094,27 @@
"node": ">= 6"
}
},
+ "node_modules/https-proxy-agent/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -12674,20 +13157,23 @@
}
]
},
- "node_modules/immediate": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz",
- "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q=="
- },
"node_modules/immutable": {
- "version": "4.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0-rc.12.tgz",
- "integrity": "sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A=="
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz",
+ "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg=="
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "engines": {
+ "node": ">=8"
+ }
},
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -12701,7 +13187,7 @@
"node_modules/invert-kv": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -12716,27 +13202,19 @@
}
},
"node_modules/ipaddr.js": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.0.tgz",
- "integrity": "sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w==",
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
"engines": {
- "node": ">= 10"
+ "node": ">= 0.10"
}
},
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"dev": true
},
- "node_modules/is-bigint": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz",
- "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -12748,20 +13226,6 @@
"node": ">=8"
}
},
- "node_modules/is-boolean-object": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz",
- "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==",
- "dependencies": {
- "call-bind": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "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",
@@ -12784,17 +13248,6 @@
"node": ">=4"
}
},
- "node_modules/is-callable": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
- "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/is-ci": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
@@ -12807,17 +13260,6 @@
"is-ci": "bin.js"
}
},
- "node_modules/is-date-object": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
- "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/is-docker": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
@@ -12836,29 +13278,23 @@
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
- "node_modules/is-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
- "dev": true
- },
"node_modules/is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -12869,23 +13305,12 @@
"node_modules/is-hex-prefixed": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
- "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=",
+ "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==",
"engines": {
"node": ">=6.5.0",
"npm": ">=3"
}
},
- "node_modules/is-negative-zero": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -12894,63 +13319,31 @@
"node": ">=0.12.0"
}
},
- "node_modules/is-number-object": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz",
- "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==",
+ "node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-regex": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz",
- "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-symbols": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-string": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
- "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
- "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
- "dependencies": {
- "has-symbols": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=8"
}
},
"node_modules/is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
"dev": true
},
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-url": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
@@ -12960,7 +13353,7 @@
"node_modules/is-utf8": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
"dev": true
},
"node_modules/is-wsl": {
@@ -12978,26 +13371,35 @@
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
},
"node_modules/isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
"dev": true
},
+ "node_modules/js-sdsl": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz",
+ "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/js-sdsl"
+ }
+ },
"node_modules/js-sha3": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
"integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
},
"node_modules/js-yaml": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
@@ -13006,57 +13408,58 @@
"node_modules/jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
"dev": true
},
"node_modules/json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
"dev": true
},
"node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
"node_modules/json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
"dev": true
},
"node_modules/jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
"dev": true,
- "engines": [
- "node >=0.6.0"
- ],
"dependencies": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
- "json-schema": "0.2.3",
+ "json-schema": "0.4.0",
"verror": "1.10.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
}
},
"node_modules/keccak": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz",
- "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz",
+ "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==",
"hasInstallScript": true,
"dependencies": {
"node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
+ "node-gyp-build": "^4.2.0",
+ "readable-stream": "^3.6.0"
},
"engines": {
"node": ">=10.0.0"
@@ -13065,7 +13468,7 @@
"node_modules/klaw": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
- "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+ "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==",
"optionalDependencies": {
"graceful-fs": "^4.1.9"
}
@@ -13082,7 +13485,7 @@
"node_modules/lcid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
"dev": true,
"dependencies": {
"invert-kv": "^1.0.0"
@@ -13091,128 +13494,64 @@
"node": ">=0.10.0"
}
},
- "node_modules/level-codec": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz",
- "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==",
+ "node_modules/level": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz",
+ "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==",
"dependencies": {
- "buffer": "^5.6.0"
+ "browser-level": "^1.0.1",
+ "classic-level": "^1.2.0"
},
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/level-concat-iterator": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz",
- "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/level-errors": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz",
- "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==",
- "dependencies": {
- "errno": "~0.1.1"
+ "node": ">=12"
},
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/level-iterator-stream": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz",
- "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==",
- "dependencies": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0",
- "xtend": "^4.0.2"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/level-mem": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz",
- "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==",
- "dependencies": {
- "level-packager": "^5.0.3",
- "memdown": "^5.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/level-packager": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz",
- "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==",
- "dependencies": {
- "encoding-down": "^6.3.0",
- "levelup": "^4.3.2"
- },
- "engines": {
- "node": ">=6"
+ "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-supports/-/level-supports-1.0.1.tgz",
- "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
+ "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz",
+ "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==",
"dependencies": {
- "xtend": "^4.0.2"
+ "buffer": "^6.0.3",
+ "module-error": "^1.0.1"
},
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/level-ws": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz",
- "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.0",
- "xtend": "^4.0.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/levelup": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz",
- "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==",
- "dependencies": {
- "deferred-leveldown": "~5.3.0",
- "level-errors": "~2.0.0",
- "level-iterator-stream": "~4.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- },
- "engines": {
- "node": ">=6"
+ "node": ">=12"
}
},
"node_modules/light-my-request": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-4.4.1.tgz",
- "integrity": "sha512-FDNRF2mYjthIRWE7O8d/X7AzDx4otQHl4/QXbu3Q/FRwBFcgb+ZoDaUd5HwN53uQXLAiw76osN+Va0NEaOW6rQ==",
+ "version": "5.9.1",
+ "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.9.1.tgz",
+ "integrity": "sha512-UT7pUk8jNCR1wR7w3iWfIjx32DiB2f3hFdQSOwy3/EPQ3n3VocyipUxcyRZR0ahoev+fky69uA+GejPa9KuHKg==",
"dependencies": {
- "ajv": "^6.12.2",
- "cookie": "^0.4.0",
- "fastify-warning": "^0.2.0",
- "readable-stream": "^3.6.0",
+ "cookie": "^0.5.0",
+ "process-warning": "^2.0.0",
"set-cookie-parser": "^2.4.1"
}
},
+ "node_modules/light-my-request/node_modules/cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/load-json-file": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.1.2",
@@ -13228,7 +13567,7 @@
"node_modules/locate-path": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
"dependencies": {
"p-locate": "^2.0.0",
"path-exists": "^3.0.0"
@@ -13245,24 +13584,101 @@
"node_modules/lodash.assign": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
- "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+ "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==",
"dev": true
},
"node_modules/log-symbols": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
- "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"dependencies": {
- "chalk": "^2.4.2"
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/log-symbols/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/log-symbols/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/log-symbols/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/log-symbols/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-symbols/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
+ "node_modules/loupe": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
+ "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==",
+ "dev": true,
+ "dependencies": {
+ "get-func-name": "^2.0.0"
+ }
+ },
"node_modules/lru_map": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
- "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0="
+ "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ=="
},
"node_modules/lru-cache": {
"version": "5.1.1",
@@ -13272,15 +13688,10 @@
"yallist": "^3.0.2"
}
},
- "node_modules/ltgt": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
- "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU="
- },
"node_modules/mcl-wasm": {
- "version": "0.7.6",
- "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.6.tgz",
- "integrity": "sha512-cbRl3sUOkBeRY2hsM4t1EIln2TIdQBkSiTOqNTv/4Hu5KOECnMWCgjIf+a9Ebunyn22VKqkMF3zj6ejRzz7YBw==",
+ "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"
}
@@ -13295,128 +13706,61 @@
"safe-buffer": "^5.1.2"
}
},
- "node_modules/memdown": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz",
- "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==",
+ "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-leveldown": "~6.2.1",
- "functional-red-black-tree": "~1.0.1",
- "immediate": "~3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.2.0"
+ "abstract-level": "^1.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "module-error": "^1.0.1"
},
"engines": {
- "node": ">=6"
+ "node": ">=12"
}
},
- "node_modules/memdown/node_modules/abstract-leveldown": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
- "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
- "dependencies": {
- "buffer": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/memdown/node_modules/immediate": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz",
- "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw="
- },
"node_modules/memorystream": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
+ "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
"engines": {
"node": ">= 0.10.0"
}
},
- "node_modules/merkle-patricia-tree": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.1.0.tgz",
- "integrity": "sha512-vmP1J7FwIpprFMVjjSMM1JAwFce85Q+tp0TYIedYv8qaMh2oLUZ3ETXn9wbgi9S6elySzKzGa+Ai6VNKGEwSlg==",
- "dependencies": {
- "@types/levelup": "^4.3.0",
- "ethereumjs-util": "^7.0.8",
- "level-mem": "^5.0.1",
- "level-ws": "^2.0.0",
- "readable-stream": "^3.6.0",
- "rlp": "^2.2.3",
- "semaphore-async-await": "^1.5.1"
- }
- },
"node_modules/micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
"dev": true,
"dependencies": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
},
"engines": {
"node": ">=8.6"
}
},
- "node_modules/miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dependencies": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- },
- "bin": {
- "miller-rabin": "bin/miller-rabin"
- }
- },
"node_modules/mime-db": {
- "version": "1.47.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
- "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==",
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true,
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
- "version": "2.1.30",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
- "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
"dependencies": {
- "mime-db": "1.47.0"
+ "mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
- "dev": true,
- "dependencies": {
- "dom-walk": "^0.1.0"
- }
- },
"node_modules/minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@@ -13425,12 +13769,12 @@
"node_modules/minimalistic-crypto-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="
},
"node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -13439,65 +13783,67 @@
}
},
"node_modules/minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "dev": true,
"dependencies": {
- "minimist": "^1.2.5"
+ "minimist": "^1.2.6"
},
"bin": {
"mkdirp": "bin/cmd.js"
}
},
"node_modules/mnemonist": {
- "version": "0.38.3",
- "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz",
- "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==",
+ "version": "0.38.5",
+ "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz",
+ "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==",
"dependencies": {
- "obliterator": "^1.6.1"
+ "obliterator": "^2.0.0"
}
},
"node_modules/mocha": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz",
- "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
+ "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
"dependencies": {
- "ansi-colors": "3.2.3",
+ "ansi-colors": "4.1.1",
"browser-stdout": "1.3.1",
- "chokidar": "3.3.0",
- "debug": "3.2.6",
- "diff": "3.5.0",
- "escape-string-regexp": "1.0.5",
- "find-up": "3.0.0",
- "glob": "7.1.3",
- "growl": "1.10.5",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
"he": "1.2.0",
- "js-yaml": "3.13.1",
- "log-symbols": "3.0.0",
- "minimatch": "3.0.4",
- "mkdirp": "0.5.5",
- "ms": "2.1.1",
- "node-environment-flags": "1.0.6",
- "object.assign": "4.1.0",
- "strip-json-comments": "2.0.1",
- "supports-color": "6.0.0",
- "which": "1.3.1",
- "wide-align": "1.1.3",
- "yargs": "13.3.2",
- "yargs-parser": "13.1.2",
- "yargs-unparser": "1.6.0"
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
},
"bin": {
"_mocha": "bin/_mocha",
- "mocha": "bin/mocha"
+ "mocha": "bin/mocha.js"
},
"engines": {
- "node": ">= 8.10.0"
+ "node": ">= 14.0.0"
},
"funding": {
"type": "opencollective",
@@ -13505,159 +13851,179 @@
}
},
"node_modules/mocha/node_modules/ansi-colors": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
- "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
"engines": {
"node": ">=6"
}
},
- "node_modules/mocha/node_modules/chokidar": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz",
- "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==",
+ "node_modules/mocha/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dependencies": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.2.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.1.1"
+ "balanced-match": "^1.0.0"
}
},
"node_modules/mocha/node_modules/debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/mocha/node_modules/debug/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/mocha/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/mocha/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dependencies": {
- "locate-path": "^3.0.0"
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/mocha/node_modules/fsevents": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
- "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
- "deprecated": "\"Please update to latest v2.3 or v2.2\"",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/mocha/node_modules/glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "node": ">=10"
},
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"engines": {
- "node": "*"
+ "node": ">=8"
}
},
"node_modules/mocha/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
+ "p-locate": "^5.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/mocha/node_modules/ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
- },
- "node_modules/mocha/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "node_modules/mocha/node_modules/minimatch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
"dependencies": {
- "p-try": "^2.0.0"
+ "brace-expansion": "^2.0.1"
},
"engines": {
- "node": ">=6"
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/mocha/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dependencies": {
- "p-limit": "^2.0.0"
+ "p-limit": "^3.0.2"
},
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/mocha/node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/mocha/node_modules/readdirp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
- "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
- "dependencies": {
- "picomatch": "^2.0.4"
+ "node": ">=10"
},
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mocha/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"engines": {
- "node": ">= 8"
+ "node": ">=8"
}
},
"node_modules/mocha/node_modules/supports-color": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
- "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dependencies": {
- "has-flag": "^3.0.0"
+ "has-flag": "^4.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "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/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/napi-macros": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz",
+ "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g=="
},
"node_modules/nice-try": {
"version": "1.0.5",
@@ -13670,35 +14036,30 @@
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
"integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA=="
},
- "node_modules/node-environment-flags": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz",
- "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==",
- "dependencies": {
- "object.getownpropertydescriptors": "^2.0.3",
- "semver": "^5.7.0"
- }
- },
- "node_modules/node-environment-flags/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
"node_modules/node-fetch": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
+ "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
+ "dev": true,
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
"engines": {
"node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
}
},
"node_modules/node-gyp-build": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz",
- "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==",
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
+ "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
"bin": {
"node-gyp-build": "bin.js",
"node-gyp-build-optional": "optional.js",
@@ -13737,7 +14098,7 @@
"node_modules/number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -13746,7 +14107,7 @@
"node_modules/number-to-bn": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz",
- "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=",
+ "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==",
"dev": true,
"dependencies": {
"bn.js": "4.11.6",
@@ -13760,7 +14121,7 @@
"node_modules/number-to-bn/node_modules/bn.js": {
"version": "4.11.6",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=",
+ "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==",
"dev": true
},
"node_modules/oauth-sign": {
@@ -13772,70 +14133,28 @@
"node": "*"
}
},
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/object-inspect": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
- "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
- "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
- "dependencies": {
- "define-properties": "^1.1.2",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.0",
- "object-keys": "^1.0.11"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.getownpropertydescriptors": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz",
- "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.2"
- },
- "engines": {
- "node": ">= 0.8"
- },
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/obliterator": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz",
- "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig=="
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz",
+ "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ=="
+ },
+ "node_modules/on-exit-leak-free": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz",
+ "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w=="
},
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dependencies": {
"wrappy": "1"
}
@@ -13859,7 +14178,7 @@
"node_modules/os-locale": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
"dev": true,
"dependencies": {
"lcid": "^1.0.0"
@@ -13871,7 +14190,7 @@
"node_modules/os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
"engines": {
"node": ">=0.10.0"
}
@@ -13890,7 +14209,7 @@
"node_modules/p-locate": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
"dependencies": {
"p-limit": "^1.1.0"
},
@@ -13898,24 +14217,32 @@
"node": ">=4"
}
},
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/p-try": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
"engines": {
"node": ">=4"
}
},
- "node_modules/parse-headers": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz",
- "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==",
- "dev": true
- },
"node_modules/parse-json": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
"dev": true,
"dependencies": {
"error-ex": "^1.2.0"
@@ -13925,32 +14252,119 @@
}
},
"node_modules/patch-package": {
- "version": "6.4.7",
- "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz",
- "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==",
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz",
+ "integrity": "sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==",
"dev": true,
"dependencies": {
"@yarnpkg/lockfile": "^1.1.0",
- "chalk": "^2.4.2",
+ "chalk": "^4.1.2",
"cross-spawn": "^6.0.5",
"find-yarn-workspace-root": "^2.0.0",
- "fs-extra": "^7.0.1",
+ "fs-extra": "^9.0.0",
"is-ci": "^2.0.0",
"klaw-sync": "^6.0.0",
- "minimist": "^1.2.0",
+ "minimist": "^1.2.6",
"open": "^7.4.2",
"rimraf": "^2.6.3",
"semver": "^5.6.0",
"slash": "^2.0.0",
- "tmp": "^0.0.33"
+ "tmp": "^0.0.33",
+ "yaml": "^1.10.2"
},
"bin": {
"patch-package": "index.js"
},
"engines": {
+ "node": ">=10",
"npm": ">5"
}
},
+ "node_modules/patch-package/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/patch-package/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/patch-package/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/patch-package/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/patch-package/node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/patch-package/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/patch-package/node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
"node_modules/patch-package/node_modules/semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@@ -13960,13 +14374,25 @@
"semver": "bin/semver"
}
},
- "node_modules/patch-package/node_modules/slash": {
+ "node_modules/patch-package/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/patch-package/node_modules/universalify": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
"dev": true,
"engines": {
- "node": ">=6"
+ "node": ">= 10.0.0"
}
},
"node_modules/path-browserify": {
@@ -13978,7 +14404,7 @@
"node_modules/path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
"engines": {
"node": ">=4"
}
@@ -13986,7 +14412,7 @@
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"engines": {
"node": ">=0.10.0"
}
@@ -13994,21 +14420,21 @@
"node_modules/path-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/path-type": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.1.2",
@@ -14046,13 +14472,13 @@
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
"dev": true
},
"node_modules/picomatch": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
- "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"engines": {
"node": ">=8.6"
},
@@ -14063,7 +14489,7 @@
"node_modules/pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -14072,7 +14498,7 @@
"node_modules/pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -14081,7 +14507,7 @@
"node_modules/pinkie-promise": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
"dev": true,
"dependencies": {
"pinkie": "^2.0.0"
@@ -14091,25 +14517,53 @@
}
},
"node_modules/pino": {
- "version": "6.11.3",
- "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.3.tgz",
- "integrity": "sha512-drPtqkkSf0ufx2gaea3TryFiBHdNIdXKf5LN0hTM82SXI4xVIve2wLwNg92e1MT6m3jASLu6VO7eGY6+mmGeyw==",
+ "version": "8.14.1",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-8.14.1.tgz",
+ "integrity": "sha512-8LYNv7BKWXSfS+k6oEc6occy5La+q2sPwU3q2ljTX5AZk7v+5kND2o5W794FyRaqha6DJajmkNRsWtPpFyMUdw==",
"dependencies": {
- "fast-redact": "^3.0.0",
- "fast-safe-stringify": "^2.0.7",
- "flatstr": "^1.0.12",
- "pino-std-serializers": "^3.1.0",
+ "atomic-sleep": "^1.0.0",
+ "fast-redact": "^3.1.1",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "v1.0.0",
+ "pino-std-serializers": "^6.0.0",
+ "process-warning": "^2.0.0",
"quick-format-unescaped": "^4.0.3",
- "sonic-boom": "^1.0.2"
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "sonic-boom": "^3.1.0",
+ "thread-stream": "^2.0.0"
},
"bin": {
"pino": "bin.js"
}
},
+ "node_modules/pino-abstract-transport": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz",
+ "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==",
+ "dependencies": {
+ "readable-stream": "^4.0.0",
+ "split2": "^4.0.0"
+ }
+ },
+ "node_modules/pino-abstract-transport/node_modules/readable-stream": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.0.tgz",
+ "integrity": "sha512-kDMOq0qLtxV9f/SQv522h8cxZBqNZXuXNyjyezmfAAuribMyVXziljpQ/uQhfE1XLg2/TLTW2DsnoE4VAi/krg==",
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
"node_modules/pino-std-serializers": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz",
- "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg=="
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.1.tgz",
+ "integrity": "sha512-wHuWB+CvSVb2XqXM0W/WOYUkVSPbiJb9S5fNB7TBhd8s892Xq910bRxwHtC4l71hgztObTjXL6ZheZXFjhDrDQ=="
},
"node_modules/postinstall-postinstall": {
"version": "2.1.0",
@@ -14119,60 +14573,63 @@
"hasInstallScript": true
},
"node_modules/prettier": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
- "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"dev": true,
"bin": {
"prettier": "bin-prettier.js"
},
"engines": {
"node": ">=10.13.0"
- }
- },
- "node_modules/printj": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
- "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==",
- "bin": {
- "printj": "bin/printj.njs"
},
- "engines": {
- "node": ">=0.8"
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true,
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
"engines": {
"node": ">= 0.6.0"
}
},
- "node_modules/prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+ "node_modules/process-warning": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz",
+ "integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg=="
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
},
"node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
"dev": true
},
"node_modules/punycode": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
- "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==",
"engines": {
"node": ">=6"
}
},
"node_modules/qs": {
- "version": "6.10.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
- "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
"dependencies": {
"side-channel": "^1.0.4"
},
@@ -14183,24 +14640,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/query-string": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
- "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
- "dev": true,
- "dependencies": {
- "decode-uri-component": "^0.2.0",
- "object-assign": "^4.1.0",
- "strict-uri-encode": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/querystring": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
+ "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
"dev": true,
"engines": {
"node": ">=0.4.x"
@@ -14226,9 +14670,9 @@
]
},
"node_modules/quick-format-unescaped": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.3.tgz",
- "integrity": "sha512-MaL/oqh02mhEo5m5J2rwsVL23Iw2PEaGVHgT2vFt8AAsr0lfvQA5dpXo9TPu0rz7tSBdUPgkbam0j/fj5ZM8yg=="
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
},
"node_modules/randombytes": {
"version": "2.1.0",
@@ -14239,12 +14683,12 @@
}
},
"node_modules/raw-body": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz",
- "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==",
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
"dependencies": {
- "bytes": "3.1.0",
- "http-errors": "1.7.3",
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
@@ -14255,7 +14699,7 @@
"node_modules/read-pkg": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
"dev": true,
"dependencies": {
"load-json-file": "^1.0.0",
@@ -14269,7 +14713,7 @@
"node_modules/read-pkg-up": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
"dev": true,
"dependencies": {
"find-up": "^1.0.0",
@@ -14282,7 +14726,7 @@
"node_modules/read-pkg-up/node_modules/find-up": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
"dev": true,
"dependencies": {
"path-exists": "^2.0.0",
@@ -14295,7 +14739,7 @@
"node_modules/read-pkg-up/node_modules/path-exists": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
"dev": true,
"dependencies": {
"pinkie-promise": "^2.0.0"
@@ -14305,9 +14749,9 @@
}
},
"node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -14318,9 +14762,9 @@
}
},
"node_modules/readdirp": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
- "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -14328,6 +14772,14 @@
"node": ">=8.10.0"
}
},
+ "node_modules/real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
+ "engines": {
+ "node": ">= 12.13.0"
+ }
+ },
"node_modules/request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -14375,18 +14827,28 @@
}
},
"node_modules/request/node_modules/qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
"dev": true,
"engines": {
"node": ">=0.6"
}
},
+ "node_modules/request/node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "dev": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"engines": {
"node": ">=0.10.0"
}
@@ -14400,9 +14862,10 @@
}
},
"node_modules/require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==",
+ "dev": true
},
"node_modules/resolve": {
"version": "1.17.0",
@@ -14458,25 +14921,20 @@
}
},
"node_modules/rlp": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz",
- "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==",
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz",
+ "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==",
"dependencies": {
- "bn.js": "^4.11.1"
+ "bn.js": "^5.2.0"
},
"bin": {
"rlp": "bin/rlp"
}
},
- "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",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "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",
@@ -14490,7 +14948,20 @@
"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.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"node_modules/safe-regex2": {
"version": "2.0.0",
@@ -14500,6 +14971,14 @@
"ret": "~0.2.0"
}
},
+ "node_modules/safe-stable-stringify": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
+ "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -14511,12 +14990,12 @@
"integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA=="
},
"node_modules/secp256k1": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.2.tgz",
- "integrity": "sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz",
+ "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==",
"hasInstallScript": true,
"dependencies": {
- "elliptic": "^6.5.2",
+ "elliptic": "^6.5.4",
"node-addon-api": "^2.0.0",
"node-gyp-build": "^4.2.0"
},
@@ -14525,50 +15004,68 @@
}
},
"node_modules/secure-json-parse": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz",
- "integrity": "sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg=="
- },
- "node_modules/semaphore-async-await": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz",
- "integrity": "sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo=",
- "engines": {
- "node": ">=4.1"
- }
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz",
+ "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="
},
"node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
+ "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
"semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "node_modules/semver-store": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz",
- "integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg=="
+ "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/semver/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
},
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
+ "dev": true
},
"node_modules/set-cookie-parser": {
- "version": "2.4.8",
- "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz",
- "integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg=="
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz",
+ "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ=="
},
"node_modules/setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
},
"node_modules/setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"node_modules/sha.js": {
"version": "2.4.11",
@@ -14585,7 +15082,7 @@
"node_modules/shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
"dev": true,
"dependencies": {
"shebang-regex": "^1.0.0"
@@ -14597,7 +15094,7 @@
"node_modules/shebang-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -14616,53 +15113,23 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/simple-concat": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
- "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
- "dev": true,
- "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/simple-get": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
- "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
- "dev": true,
- "dependencies": {
- "decompress-response": "^3.3.0",
- "once": "^1.3.1",
- "simple-concat": "^1.0.0"
- }
- },
"node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=6"
}
},
"node_modules/solc": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz",
- "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==",
+ "version": "0.6.12",
+ "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz",
+ "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==",
+ "dev": true,
"dependencies": {
"command-exists": "^1.2.8",
"commander": "3.0.2",
- "follow-redirects": "^1.14.7",
"fs-extra": "^0.30.0",
"js-sha3": "0.8.0",
"memorystream": "^0.3.1",
@@ -14680,7 +15147,8 @@
"node_modules/solc/node_modules/fs-extra": {
"version": "0.30.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
+ "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==",
+ "dev": true,
"dependencies": {
"graceful-fs": "^4.1.2",
"jsonfile": "^2.1.0",
@@ -14692,7 +15160,8 @@
"node_modules/solc/node_modules/jsonfile": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==",
+ "dev": true,
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
@@ -14701,6 +15170,7 @@
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
"bin": {
"semver": "bin/semver"
}
@@ -14717,12 +15187,11 @@
}
},
"node_modules/sonic-boom": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz",
- "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz",
+ "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==",
"dependencies": {
- "atomic-sleep": "^1.0.0",
- "flatstr": "^1.0.12"
+ "atomic-sleep": "^1.0.0"
}
},
"node_modules/source-map": {
@@ -14734,18 +15203,18 @@
}
},
"node_modules/source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"node_modules/spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
"dev": true,
"dependencies": {
"spdx-expression-parse": "^3.0.0",
@@ -14769,20 +15238,23 @@
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
- "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
+ "version": "3.0.13",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
+ "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
"dev": true
},
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ "node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "engines": {
+ "node": ">= 10.x"
+ }
},
"node_modules/sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
"dev": true,
"dependencies": {
"asn1": "~0.2.3",
@@ -14807,7 +15279,7 @@
"node_modules/sshpk/node_modules/tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
"dev": true
},
"node_modules/stacktrace-parser": {
@@ -14830,20 +15302,19 @@
}
},
"node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.8"
}
},
- "node_modules/strict-uri-encode": {
+ "node_modules/streamsearch": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
- "dev": true,
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10.0.0"
}
},
"node_modules/string_decoder": {
@@ -14854,62 +15325,53 @@
"safe-buffer": "~5.2.0"
}
},
- "node_modules/string-similarity": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz",
- "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ=="
+ "node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "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/string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dependencies": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
"engines": {
- "node": ">=4"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=8"
}
},
"node_modules/strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dependencies": {
- "ansi-regex": "^3.0.0"
+ "ansi-regex": "^5.0.1"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/strip-bom": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
"dev": true,
"dependencies": {
"is-utf8": "^0.2.0"
@@ -14921,7 +15383,7 @@
"node_modules/strip-hex-prefix": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
- "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=",
+ "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==",
"dependencies": {
"is-hex-prefixed": "1.0.0"
},
@@ -14931,11 +15393,14 @@
}
},
"node_modules/strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/supports-color": {
@@ -14952,7 +15417,7 @@
"node_modules/test-value": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz",
- "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=",
+ "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==",
"dev": true,
"dependencies": {
"array-back": "^1.0.3",
@@ -14965,7 +15430,7 @@
"node_modules/test-value/node_modules/array-back": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
- "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+ "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==",
"dev": true,
"dependencies": {
"typical": "^2.6.0"
@@ -14981,21 +15446,20 @@
"deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on.",
"dev": true
},
- "node_modules/timed-out": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node_modules/thread-stream": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.3.0.tgz",
+ "integrity": "sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==",
+ "dependencies": {
+ "real-require": "^0.2.0"
}
},
"node_modules/tiny-lru": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz",
- "integrity": "sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow==",
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.0.1.tgz",
+ "integrity": "sha512-iNgFugVuQgBKrqeO/mpiTTgmBsTP0WL6yeuLfLs/Ctf0pI/ixGqIRm8sDCwMcXGe9WWvt2sGXI5mNqZbValmJg==",
"engines": {
- "node": ">=6"
+ "node": ">=12"
}
},
"node_modules/tmp": {
@@ -15021,9 +15485,9 @@
}
},
"node_modules/toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
"engines": {
"node": ">=0.6"
}
@@ -15042,18 +15506,19 @@
}
},
"node_modules/tough-cookie/node_modules/punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
"dev": true,
"engines": {
"node": ">=6"
}
},
- "node_modules/true-case-path": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz",
- "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q=="
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
},
"node_modules/ts-essentials": {
"version": "1.0.4",
@@ -15089,12 +15554,12 @@
"node_modules/tsort": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz",
- "integrity": "sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y="
+ "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw=="
},
"node_modules/tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
"dev": true,
"dependencies": {
"safe-buffer": "^5.0.1"
@@ -15151,6 +15616,29 @@
"typechain": "dist/cli/cli.js"
}
},
+ "node_modules/typechain/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/typechain/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
"node_modules/typechain/node_modules/ts-essentials": {
"version": "6.0.7",
"resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz",
@@ -15161,45 +15649,36 @@
}
},
"node_modules/typescript": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz",
- "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==",
- "dev": true,
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
+ "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
+ "devOptional": true,
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
- "node": ">=4.2.0"
+ "node": ">=12.20"
}
},
"node_modules/typical": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
- "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==",
"dev": true
},
- "node_modules/unbox-primitive": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
- "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
+ "node_modules/undici": {
+ "version": "5.22.1",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz",
+ "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==",
"dependencies": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
- "which-boxed-primitive": "^1.0.2"
+ "busboy": "^1.6.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "engines": {
+ "node": ">=14.0"
}
},
- "node_modules/underscore": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
- "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==",
- "dev": true
- },
"node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@@ -15211,7 +15690,7 @@
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
"engines": {
"node": ">= 0.8"
}
@@ -15227,23 +15706,17 @@
"node_modules/url": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==",
"dev": true,
"dependencies": {
"punycode": "1.3.2",
"querystring": "0.2.0"
}
},
- "node_modules/url-set-query": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz",
- "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=",
- "dev": true
- },
"node_modules/url/node_modules/punycode": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==",
"dev": true
},
"node_modules/utf8": {
@@ -15255,29 +15728,14 @@
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "node_modules/util.promisify": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz",
- "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==",
- "dependencies": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "for-each": "^0.3.3",
- "has-symbols": "^1.0.1",
- "object.getownpropertydescriptors": "^2.1.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
"node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"bin": {
- "uuid": "bin/uuid"
+ "uuid": "dist/bin/uuid"
}
},
"node_modules/validate-npm-package-license": {
@@ -15293,7 +15751,7 @@
"node_modules/verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
"dev": true,
"engines": [
"node >=0.6.0"
@@ -15305,2362 +15763,29 @@
}
},
"node_modules/web3-utils": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.3.5.tgz",
- "integrity": "sha512-5apMRm8ElYjI/92GHqijmaLC+s+d5lgjpjHft+rJSs/dsnX8I8tQreqev0dmU+wzU+2EEe4Sx9a/OwGWHhQv3A==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz",
+ "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==",
"dev": true,
"dependencies": {
- "bn.js": "^4.11.9",
- "eth-lib": "0.2.8",
+ "bn.js": "^5.2.1",
"ethereum-bloom-filters": "^1.0.6",
+ "ethereumjs-util": "^7.1.0",
"ethjs-unit": "0.1.6",
"number-to-bn": "1.7.0",
"randombytes": "^2.1.0",
- "underscore": "1.9.1",
"utf8": "3.0.0"
},
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "dependencies": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "node_modules/wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
- "dependencies": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "node_modules/window-size": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
- "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=",
- "dev": true,
- "bin": {
- "window-size": "cli.js"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dependencies": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/wrap-ansi/node_modules/string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "node_modules/ws": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
- "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
- "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/xhr": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
- "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
- "dev": true,
- "dependencies": {
- "global": "~4.4.0",
- "is-function": "^1.0.1",
- "parse-headers": "^2.0.0",
- "xtend": "^4.0.0"
- }
- },
- "node_modules/xhr-request": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz",
- "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==",
- "dev": true,
- "dependencies": {
- "buffer-to-arraybuffer": "^0.0.5",
- "object-assign": "^4.1.1",
- "query-string": "^5.0.1",
- "simple-get": "^2.7.0",
- "timed-out": "^4.0.1",
- "url-set-query": "^1.0.0",
- "xhr": "^2.0.4"
- }
- },
- "node_modules/xhr-request-promise": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz",
- "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==",
- "dev": true,
- "dependencies": {
- "xhr-request": "^1.1.0"
- }
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
- },
- "node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
- },
- "node_modules/yargs": {
- "version": "13.3.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
- "dependencies": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.2"
- }
- },
- "node_modules/yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- },
- "node_modules/yargs-unparser": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz",
- "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==",
- "dependencies": {
- "flat": "^4.1.0",
- "lodash": "^4.17.15",
- "yargs": "^13.3.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/yargs/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/yargs/node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- }
- },
- "dependencies": {
- "@ensdomains/ens": {
- "version": "0.4.5",
- "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz",
- "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==",
- "dev": true,
- "requires": {
- "bluebird": "^3.5.2",
- "eth-ens-namehash": "^2.0.8",
- "solc": "^0.4.20",
- "testrpc": "0.0.1",
- "web3-utils": "^1.0.0-beta.31"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
- "dev": true
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- }
- },
- "fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "get-caller-file": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "require-from-string": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
- "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "solc": {
- "version": "0.4.26",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz",
- "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==",
- "dev": true,
- "requires": {
- "fs-extra": "^0.30.0",
- "memorystream": "^0.3.1",
- "require-from-string": "^1.1.0",
- "semver": "^5.3.0",
- "yargs": "^4.7.1"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "which-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
- "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- }
- },
- "y18n": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
- "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
- "dev": true
- },
- "yargs": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz",
- "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=",
- "dev": true,
- "requires": {
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "lodash.assign": "^4.0.3",
- "os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^1.0.1",
- "which-module": "^1.0.0",
- "window-size": "^0.2.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^2.4.1"
- }
- },
- "yargs-parser": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz",
- "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0",
- "lodash.assign": "^4.0.6"
- }
- }
- }
- },
- "@ensdomains/resolver": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz",
- "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==",
- "dev": true
- },
- "@ethereum-waffle/chai": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.3.1.tgz",
- "integrity": "sha512-+vepCjttfOzCSnmiVEmd1bR8ctA2wYVrtWa8bDLhnTpj91BIIHotNDTwpeq7fyjrOCIBTN3Ai8ACfjNoatc4OA==",
- "dev": true,
- "requires": {
- "@ethereum-waffle/provider": "^3.3.1",
- "ethers": "^5.0.0"
- }
- },
- "@ethereum-waffle/compiler": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.3.1.tgz",
- "integrity": "sha512-X/TeQugt94AQwXEdCjIQxcXYGawNulVBYEBE7nloj4wE/RBxNolXwjoVNjcS4kuiMMbKkdO0JkL5sn6ixx8bDg==",
- "dev": true,
- "requires": {
- "@resolver-engine/imports": "^0.3.3",
- "@resolver-engine/imports-fs": "^0.3.3",
- "@typechain/ethers-v5": "^2.0.0",
- "@types/mkdirp": "^0.5.2",
- "@types/node-fetch": "^2.6.7",
- "ethers": "^5.0.1",
- "mkdirp": "^0.5.1",
- "node-fetch": "^2.6.7",
- "solc": "^0.6.3",
- "ts-generator": "^0.1.1",
- "typechain": "^3.0.0"
- },
- "dependencies": {
- "fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "solc": {
- "version": "0.6.12",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz",
- "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==",
- "dev": true,
- "requires": {
- "command-exists": "^1.2.8",
- "commander": "3.0.2",
- "fs-extra": "^0.30.0",
- "js-sha3": "0.8.0",
- "memorystream": "^0.3.1",
- "require-from-string": "^2.0.0",
- "semver": "^5.5.0",
- "tmp": "0.0.33"
- }
- }
- }
- },
- "@ethereum-waffle/ens": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.2.4.tgz",
- "integrity": "sha512-lkRVPCEkk7KOwH9MqFMB+gL0X8cZNsm+MnKpP9CNbAyhFos2sCDGcY8t6BA12KBK6pdMuuRXPxYL9WfPl9bqSQ==",
- "dev": true,
- "requires": {
- "@ensdomains/ens": "^0.4.4",
- "@ensdomains/resolver": "^0.2.4",
- "ethers": "^5.0.1"
- }
- },
- "@ethereum-waffle/mock-contract": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.2.2.tgz",
- "integrity": "sha512-H60Cc5C7sYNU4LuPMSKDh8YIaN9/fkwEjznY78CEbOosO+lMlFYdA+5VZjeDGDuYKfsBqsocQdkj1CRyoi1KNw==",
- "dev": true,
- "requires": {
- "@ethersproject/abi": "^5.0.1",
- "ethers": "^5.0.1"
- }
- },
- "@ethereum-waffle/provider": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.3.2.tgz",
- "integrity": "sha512-ilz6cXK0ylSKCmZktTMpY4gjo0CN6rb86JfN7+RZYk6tKtZA6sXoOe95skWEQkGf1fZk7G817fTzLb0CmFDp1g==",
- "dev": true,
- "requires": {
- "@ethereum-waffle/ens": "^3.2.4",
- "ethers": "^5.0.1",
- "ganache-core": "^2.13.2",
- "patch-package": "^6.2.2",
- "postinstall-postinstall": "^2.1.0"
- }
- },
- "@ethereumjs/block": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.2.1.tgz",
- "integrity": "sha512-FCxo5KwwULne2A2Yuae4iaGGqSsRjwzXOlDhGalOFiBbLfP3hE04RHaHGw4c8vh1PfOrLauwi0dQNUBkOG3zIA==",
- "requires": {
- "@ethereumjs/common": "^2.2.0",
- "@ethereumjs/tx": "^3.1.3",
- "ethereumjs-util": "^7.0.10",
- "merkle-patricia-tree": "^4.1.0"
- }
- },
- "@ethereumjs/blockchain": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.2.1.tgz",
- "integrity": "sha512-+hshP2qSOOFsiYvZCbaDQFG7jYTWafE8sfBi+pAsdhAHfP7BN7VLyob7qoQISgwS1s7NTR4c4+2t/woU9ahItw==",
- "requires": {
- "@ethereumjs/block": "^3.2.0",
- "@ethereumjs/common": "^2.2.0",
- "@ethereumjs/ethash": "^1.0.0",
- "debug": "^2.2.0",
- "ethereumjs-util": "^7.0.9",
- "level-mem": "^5.0.1",
- "lru-cache": "^5.1.1",
- "rlp": "^2.2.4",
- "semaphore-async-await": "^1.5.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "@ethereumjs/common": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.2.0.tgz",
- "integrity": "sha512-PyQiTG00MJtBRkJmv46ChZL8u2XWxNBeAthznAUIUiefxPAXjbkuiCZOuncgJS34/XkMbNc9zMt/PlgKRBElig==",
- "requires": {
- "crc-32": "^1.2.0",
- "ethereumjs-util": "^7.0.9"
- }
- },
- "@ethereumjs/ethash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.0.0.tgz",
- "integrity": "sha512-iIqnGG6NMKesyOxv2YctB2guOVX18qMAWlj3QlZyrc+GqfzLqoihti+cVNQnyNxr7eYuPdqwLQOFuPe6g/uKjw==",
- "requires": {
- "@types/levelup": "^4.3.0",
- "buffer-xor": "^2.0.1",
- "ethereumjs-util": "^7.0.7",
- "miller-rabin": "^4.0.0"
- }
- },
- "@ethereumjs/tx": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.1.3.tgz",
- "integrity": "sha512-DJBu6cbwYtiPTFeCUR8DF5p+PF0jxs+0rALJZiEcTz2tiRPIEkM72GEbrkGuqzENLCzBrJHT43O0DxSYTqeo+g==",
- "requires": {
- "@ethereumjs/common": "^2.2.0",
- "ethereumjs-util": "^7.0.10"
- }
- },
- "@ethereumjs/vm": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.3.2.tgz",
- "integrity": "sha512-QmCUQrW6xbhgEbQh9njue4kAJdM056C+ytBFUTF/kDYa3kNDm4Qxp9HUyTlt1OCSXvDhws0qqlh8+q+pmXpN7g==",
- "requires": {
- "@ethereumjs/block": "^3.2.1",
- "@ethereumjs/blockchain": "^5.2.1",
- "@ethereumjs/common": "^2.2.0",
- "@ethereumjs/tx": "^3.1.3",
- "async-eventemitter": "^0.2.4",
- "core-js-pure": "^3.0.1",
- "debug": "^2.2.0",
- "ethereumjs-util": "^7.0.10",
- "functional-red-black-tree": "^1.0.1",
- "mcl-wasm": "^0.7.1",
- "merkle-patricia-tree": "^4.1.0",
- "rustbn.js": "~0.2.0",
- "util.promisify": "^1.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "@ethersproject/abi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.1.0.tgz",
- "integrity": "sha512-N/W9Sbn1/C6Kh2kuHRjf/hX6euMK4+9zdJRBB8sDWmihVntjUAfxbusGZKzDQD8i3szAHhTz8K7XADV5iFNfJw==",
- "requires": {
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/constants": "^5.1.0",
- "@ethersproject/hash": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/strings": "^5.1.0"
- }
- },
- "@ethersproject/abstract-provider": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz",
- "integrity": "sha512-8dJUnT8VNvPwWhYIau4dwp7qe1g+KgdRm4XTWvjkI9gAT2zZa90WF5ApdZ3vl1r6NDmnn6vUVvyphClRZRteTQ==",
- "requires": {
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/networks": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0",
- "@ethersproject/web": "^5.1.0"
- }
- },
- "@ethersproject/abstract-signer": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz",
- "integrity": "sha512-qQDMkjGZSSJSKl6AnfTgmz9FSnzq3iEoEbHTYwjDlEAv+LNP7zd4ixCcVWlWyk+2siud856M5CRhAmPdupeN9w==",
- "requires": {
- "@ethersproject/abstract-provider": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0"
- }
- },
- "@ethersproject/address": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.1.0.tgz",
- "integrity": "sha512-rfWQR12eHn2cpstCFS4RF7oGjfbkZb0oqep+BfrT+gWEGWG2IowJvIsacPOvzyS1jhNF4MQ4BS59B04Mbovteg==",
- "requires": {
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/rlp": "^5.1.0"
- }
- },
- "@ethersproject/base64": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.1.0.tgz",
- "integrity": "sha512-npD1bLvK4Bcxz+m4EMkx+F8Rd7CnqS9DYnhNu0/GlQBXhWjvfoAZzk5HJ0f1qeyp8d+A86PTuzLOGOXf4/CN8g==",
- "requires": {
- "@ethersproject/bytes": "^5.1.0"
- }
- },
- "@ethersproject/basex": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.1.0.tgz",
- "integrity": "sha512-vBKr39bum7DDbOvkr1Sj19bRMEPA4FnST6Utt6xhDzI7o7L6QNkDn2yrCfP+hnvJGhZFKtLygWwqlTBZoBXYLg==",
- "requires": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/properties": "^5.1.0"
- }
- },
- "@ethersproject/bignumber": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.1.0.tgz",
- "integrity": "sha512-wUvQlhTjPjFXIdLPOuTrFeQmSa6Wvls1bGXQNQWvB/SEn1NsTCE8PmumIEZxmOPjSHl1eV2uyHP5jBm5Cgj92Q==",
- "requires": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "bn.js": "^4.4.0"
- }
- },
- "@ethersproject/bytes": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.1.0.tgz",
- "integrity": "sha512-sGTxb+LVjFxJcJeUswAIK6ncgOrh3D8c192iEJd7mLr95V6du119rRfYT/b87WPkZ5I3gRBUYIYXtdgCWACe8g==",
- "requires": {
- "@ethersproject/logger": "^5.1.0"
- }
- },
- "@ethersproject/constants": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.1.0.tgz",
- "integrity": "sha512-0/SuHrxc8R8k+JiLmJymxHJbojUDWBQqO+b+XFdwaP0jGzqC09YDy/CAlSZB6qHsBifY8X3I89HcK/oMqxRdBw==",
- "requires": {
- "@ethersproject/bignumber": "^5.1.0"
- }
- },
- "@ethersproject/contracts": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.1.0.tgz",
- "integrity": "sha512-dvTMs/4XGSc57cYOW0KjgX1NdTujUu7mNb6PQdJWg08m9ULzPyGZuBkFJnijBcp6vTOCQ59RwjboWgNWw393og==",
- "requires": {
- "@ethersproject/abi": "^5.1.0",
- "@ethersproject/abstract-provider": "^5.1.0",
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/constants": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0"
- }
- },
- "@ethersproject/hash": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.1.0.tgz",
- "integrity": "sha512-fNwry20yLLPpnRRwm3fBL+2ksgO+KMadxM44WJmRIoTKzy4269+rbq9KFoe2LTqq2CXJM2CE70beGaNrpuqflQ==",
- "requires": {
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/strings": "^5.1.0"
- }
- },
- "@ethersproject/hdnode": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.1.0.tgz",
- "integrity": "sha512-obIWdlujloExPHWJGmhJO/sETOOo7SEb6qemV4f8kyFoXg+cJK+Ta9SvBrj7hsUK85n3LZeZJZRjjM7oez3Clg==",
- "requires": {
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/basex": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/pbkdf2": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/sha2": "^5.1.0",
- "@ethersproject/signing-key": "^5.1.0",
- "@ethersproject/strings": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0",
- "@ethersproject/wordlists": "^5.1.0"
- }
- },
- "@ethersproject/json-wallets": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.1.0.tgz",
- "integrity": "sha512-00n2iBy27w8zrGZSiU762UOVuzCQZxUZxopsZC47++js6xUFuI74DHcJ5K/2pddlF1YBskvmMuboEu1geK8mnA==",
- "requires": {
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/hdnode": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/pbkdf2": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/random": "^5.1.0",
- "@ethersproject/strings": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0",
- "aes-js": "3.0.0",
- "scrypt-js": "3.0.1"
- }
- },
- "@ethersproject/keccak256": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.1.0.tgz",
- "integrity": "sha512-vrTB1W6AEYoadww5c9UyVJ2YcSiyIUTNDRccZIgwTmFFoSHwBtcvG1hqy9RzJ1T0bMdATbM9Hfx2mJ6H0i7Hig==",
- "requires": {
- "@ethersproject/bytes": "^5.1.0",
- "js-sha3": "0.5.7"
- },
- "dependencies": {
- "js-sha3": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
- "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc="
- }
- }
- },
- "@ethersproject/logger": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.1.0.tgz",
- "integrity": "sha512-wtUaD1lBX10HBXjjKV9VHCBnTdUaKQnQ2XSET1ezglqLdPdllNOIlLfhyCRqXm5xwcjExVI5ETokOYfjPtaAlw=="
- },
- "@ethersproject/networks": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.1.0.tgz",
- "integrity": "sha512-A/NIrIED/G/IgU1XUukOA3WcFRxn2I4O5GxsYGA5nFlIi+UZWdGojs85I1VXkR1gX9eFnDXzjE6OtbgZHjFhIA==",
- "requires": {
- "@ethersproject/logger": "^5.1.0"
- }
- },
- "@ethersproject/pbkdf2": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.1.0.tgz",
- "integrity": "sha512-B8cUbHHTgs8OtgJIafrRcz/YPDobVd5Ru8gTnShOiM9EBuFpYHQpq3+8iQJ6pyczDu6HP/oc/njAsIBhwFZYew==",
- "requires": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/sha2": "^5.1.0"
- }
- },
- "@ethersproject/properties": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.1.0.tgz",
- "integrity": "sha512-519KKTwgmH42AQL3+GFV3SX6khYEfHsvI6v8HYejlkigSDuqttdgVygFTDsGlofNFchhDwuclrxQnD5B0YLNMg==",
- "requires": {
- "@ethersproject/logger": "^5.1.0"
- }
- },
- "@ethersproject/providers": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.1.0.tgz",
- "integrity": "sha512-FjpZL2lSXrYpQDg2fMjugZ0HjQD9a+2fOOoRhhihh+Z+qi/xZ8vIlPoumrEP1DzIG4DBV6liUqLNqnX2C6FIAA==",
- "requires": {
- "@ethersproject/abstract-provider": "^5.1.0",
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/basex": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/constants": "^5.1.0",
- "@ethersproject/hash": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/networks": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/random": "^5.1.0",
- "@ethersproject/rlp": "^5.1.0",
- "@ethersproject/sha2": "^5.1.0",
- "@ethersproject/strings": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0",
- "@ethersproject/web": "^5.1.0",
- "bech32": "1.1.4",
- "ws": "7.2.3"
- },
- "dependencies": {
- "ws": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz",
- "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==",
- "requires": {}
- }
- }
- },
- "@ethersproject/random": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.1.0.tgz",
- "integrity": "sha512-+uuczLQZ4+no9cP6TCoCktXx0u2YbNaRT7lRkSt12d8263e702f0u+4JnnRO8Qmv5nylWJebnqCHzyxP+6mLqw==",
- "requires": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0"
- }
- },
- "@ethersproject/rlp": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.1.0.tgz",
- "integrity": "sha512-vDTyHIwNPrecy55gKGZ47eJZhBm8LLBxihzi5ou+zrSvYTpkSTWRcKUlXFDFQVwfWB+P5PGyERAdiDEI76clxw==",
- "requires": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0"
- }
- },
- "@ethersproject/sha2": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.1.0.tgz",
- "integrity": "sha512-+fNSeZRstOpdRJpdGUkRONFCaiAqWkc91zXgg76Nlp5ndBQE25Kk5yK8gCPG1aGnCrbariiPr5j9DmrYH78JCA==",
- "requires": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "hash.js": "1.1.3"
- },
- "dependencies": {
- "hash.js": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
- "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.0"
- }
- }
- }
- },
- "@ethersproject/signing-key": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.1.0.tgz",
- "integrity": "sha512-tE5LFlbmdObG8bY04NpuwPWSRPgEswfxweAI1sH7TbP0ml1elNfqcq7ii/3AvIN05i5U0Pkm3Tf8bramt8MmLw==",
- "requires": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "bn.js": "^4.4.0",
- "elliptic": "6.5.4"
- }
- },
- "@ethersproject/solidity": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.1.0.tgz",
- "integrity": "sha512-kPodsGyo9zg1g9XSXp1lGhFaezBAUUsAUB1Vf6OkppE5Wksg4Et+x3kG4m7J/uShDMP2upkJtHNsIBK2XkVpKQ==",
- "requires": {
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/sha2": "^5.1.0",
- "@ethersproject/strings": "^5.1.0"
- }
- },
- "@ethersproject/strings": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.1.0.tgz",
- "integrity": "sha512-perBZy0RrmmL0ejiFGUOlBVjMsUceqLut3OBP3zP96LhiJWWbS8u1NqQVgN4/Gyrbziuda66DxiQocXhsvx+Sw==",
- "requires": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/constants": "^5.1.0",
- "@ethersproject/logger": "^5.1.0"
- }
- },
- "@ethersproject/transactions": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.1.0.tgz",
- "integrity": "sha512-s10crRLZEA0Bgv6FGEl/AKkTw9f+RVUrlWDX1rHnD4ZncPFeiV2AJr4nT7QSUhxJdFPvjyKRDb3nEH27dIqcPQ==",
- "requires": {
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/constants": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/rlp": "^5.1.0",
- "@ethersproject/signing-key": "^5.1.0"
- }
- },
- "@ethersproject/units": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.1.0.tgz",
- "integrity": "sha512-isvJrx6qG0nKWfxsGORNjmOq/nh175fStfvRTA2xEKrGqx8JNJY83fswu4GkILowfriEM/eYpretfJnfzi7YhA==",
- "requires": {
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/constants": "^5.1.0",
- "@ethersproject/logger": "^5.1.0"
- }
- },
- "@ethersproject/wallet": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.1.0.tgz",
- "integrity": "sha512-ULmUtiYQLTUS+y3DgkLzRhFEK10zMwmjOthnjiZxee3Q/MVwr3rnmuAnXIUZrPjna6hvUPnyRIdW5XuF0Ld0YQ==",
- "requires": {
- "@ethersproject/abstract-provider": "^5.1.0",
- "@ethersproject/abstract-signer": "^5.1.0",
- "@ethersproject/address": "^5.1.0",
- "@ethersproject/bignumber": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/hash": "^5.1.0",
- "@ethersproject/hdnode": "^5.1.0",
- "@ethersproject/json-wallets": "^5.1.0",
- "@ethersproject/keccak256": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/random": "^5.1.0",
- "@ethersproject/signing-key": "^5.1.0",
- "@ethersproject/transactions": "^5.1.0",
- "@ethersproject/wordlists": "^5.1.0"
- }
- },
- "@ethersproject/web": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.1.0.tgz",
- "integrity": "sha512-LTeluWgTq04+RNqAkVhpydPcRZK/kKxD2Vy7PYGrAD27ABO9kTqTBKwiOuzTyAHKUQHfnvZbXmxBXJAGViSDcA==",
- "requires": {
- "@ethersproject/base64": "^5.1.0",
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/strings": "^5.1.0"
- }
- },
- "@ethersproject/wordlists": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.1.0.tgz",
- "integrity": "sha512-NsUCi/TpBb+oTFvMSccUkJGtp5o/84eOyqp5q5aBeiNBSLkYyw21znRn9mAmxZgySpxgruVgKbaapnYPgvctPQ==",
- "requires": {
- "@ethersproject/bytes": "^5.1.0",
- "@ethersproject/hash": "^5.1.0",
- "@ethersproject/logger": "^5.1.0",
- "@ethersproject/properties": "^5.1.0",
- "@ethersproject/strings": "^5.1.0"
- }
- },
- "@fastify/forwarded": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@fastify/forwarded/-/forwarded-1.0.0.tgz",
- "integrity": "sha512-VoO+6WD0aRz8bwgJZ8pkkxjq7o/782cQ1j945HWg0obZMgIadYW3Pew0+an+k1QL7IPZHM3db5WF6OP6x4ymMA=="
- },
- "@fastify/proxy-addr": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@fastify/proxy-addr/-/proxy-addr-3.0.0.tgz",
- "integrity": "sha512-ty7wnUd/GeSqKTC2Jozsl5xGbnxUnEFC0On2/zPv/8ixywipQmVZwuWvNGnBoitJ2wixwVqofwXNua8j6Y62lQ==",
- "requires": {
- "@fastify/forwarded": "^1.0.0",
- "ipaddr.js": "^2.0.0"
- }
- },
- "@nomiclabs/hardhat-ethers": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz",
- "integrity": "sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg==",
- "dev": true,
- "requires": {}
- },
- "@nomiclabs/hardhat-waffle": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.1.tgz",
- "integrity": "sha512-2YR2V5zTiztSH9n8BYWgtv3Q+EL0N5Ltm1PAr5z20uAY4SkkfylJ98CIqt18XFvxTD5x4K2wKBzddjV9ViDAZQ==",
- "dev": true,
- "requires": {
- "@types/sinon-chai": "^3.2.3",
- "@types/web3": "1.0.19"
- }
- },
- "@openzeppelin/contracts": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.0.0.tgz",
- "integrity": "sha512-UcIJl/vUVjTr3H1yYXZi7Sr2PlXzBEHVUJKOUlVyzyy0FI8oQCCy0Wx+BuK/fojdnmLeMvUk4KUvhKUybP+C7Q=="
- },
- "@resolver-engine/core": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz",
- "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==",
- "dev": true,
- "requires": {
- "debug": "^3.1.0",
- "is-url": "^1.2.4",
- "request": "^2.85.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "@resolver-engine/fs": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz",
- "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==",
- "dev": true,
- "requires": {
- "@resolver-engine/core": "^0.3.3",
- "debug": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "@resolver-engine/imports": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz",
- "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==",
- "dev": true,
- "requires": {
- "@resolver-engine/core": "^0.3.3",
- "debug": "^3.1.0",
- "hosted-git-info": "^2.6.0",
- "path-browserify": "^1.0.0",
- "url": "^0.11.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "@resolver-engine/imports-fs": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz",
- "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==",
- "dev": true,
- "requires": {
- "@resolver-engine/fs": "^0.3.3",
- "@resolver-engine/imports": "^0.3.3",
- "debug": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
- },
- "@sentry/core": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz",
- "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==",
- "requires": {
- "@sentry/hub": "5.30.0",
- "@sentry/minimal": "5.30.0",
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/hub": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz",
- "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==",
- "requires": {
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/minimal": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz",
- "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==",
- "requires": {
- "@sentry/hub": "5.30.0",
- "@sentry/types": "5.30.0",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/node": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz",
- "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==",
- "requires": {
- "@sentry/core": "5.30.0",
- "@sentry/hub": "5.30.0",
- "@sentry/tracing": "5.30.0",
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "cookie": "^0.4.1",
- "https-proxy-agent": "^5.0.0",
- "lru_map": "^0.3.3",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/tracing": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz",
- "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==",
- "requires": {
- "@sentry/hub": "5.30.0",
- "@sentry/minimal": "5.30.0",
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/types": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz",
- "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw=="
- },
- "@sentry/utils": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz",
- "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==",
- "requires": {
- "@sentry/types": "5.30.0",
- "tslib": "^1.9.3"
- }
- },
- "@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.0.5.tgz",
- "integrity": "sha512-fUt6b15bjV/VW93UP5opNXJxdwZSbK1EdiwnhN7XrQrcpaOhMJpZ/CjwFpM3THpxwA+YviBUJKSuEqKlCK5alw==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "@solidity-parser/parser": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.11.1.tgz",
- "integrity": "sha512-H8BSBoKE8EubJa0ONqecA2TviT3TnHeC4NpgnAHSUiuhZoQBfPB4L2P9bs8R6AoTW10Endvh3vc+fomVMIDIYQ=="
- },
- "@typechain/ethers-v5": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz",
- "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==",
- "dev": true,
- "requires": {
- "ethers": "^5.0.2"
- }
- },
- "@types/abstract-leveldown": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-5.0.1.tgz",
- "integrity": "sha512-wYxU3kp5zItbxKmeRYCEplS2MW7DzyBnxPGj+GJVHZEUZiK/nn5Ei1sUFgURDh+X051+zsGe28iud3oHjrYWQQ=="
- },
- "@types/bn.js": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz",
- "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/chai": {
- "version": "4.2.16",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.16.tgz",
- "integrity": "sha512-vI5iOAsez9+roLS3M3+Xx7w+WRuDtSmF8bQkrbcIJ2sC1PcDgVoA0WGpa+bIrJ+y8zqY2oi//fUctkxtIcXJCw==",
- "dev": true
- },
- "@types/levelup": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.1.tgz",
- "integrity": "sha512-n//PeTpbHLjMLTIgW5B/g06W/6iuTBHuvUka2nFL9APMSVMNe2r4enADfu3CIE9IyV9E+uquf9OEQQqrDeg24A==",
- "requires": {
- "@types/abstract-leveldown": "*",
- "@types/node": "*"
- }
- },
- "@types/lru-cache": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz",
- "integrity": "sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w=="
- },
- "@types/mkdirp": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz",
- "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/node": {
- "version": "14.14.41",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz",
- "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g=="
- },
- "@types/node-fetch": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz",
- "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "form-data": "^3.0.0"
- }
- },
- "@types/pbkdf2": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz",
- "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/prettier": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz",
- "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==",
- "dev": true
- },
- "@types/resolve": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz",
- "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/secp256k1": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.2.tgz",
- "integrity": "sha512-QMg+9v0bbNJ2peLuHRWxzmy0HRJIG6gFZNhaRSp7S3ggSbCCxiqQB2/ybvhXyhHOCequpNkrx7OavNhrWOsW0A==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/sinon": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.0.tgz",
- "integrity": "sha512-jDZ55oCKxqlDmoTBBbBBEx+N8ZraUVhggMZ9T5t+6/Dh8/4NiOjSUfpLrPiEwxQDlAe3wpAkoXhWvE6LibtsMQ==",
- "dev": true,
- "requires": {
- "@sinonjs/fake-timers": "^7.0.4"
- }
- },
- "@types/sinon-chai": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.5.tgz",
- "integrity": "sha512-bKQqIpew7mmIGNRlxW6Zli/QVyc3zikpGzCa797B/tRnD9OtHvZ/ts8sYXV+Ilj9u3QRaUEM8xrjgd1gwm1BpQ==",
- "dev": true,
- "requires": {
- "@types/chai": "*",
- "@types/sinon": "*"
- }
- },
- "@types/underscore": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.1.tgz",
- "integrity": "sha512-mW23Xkp9HYgdMV7gnwuzqnPx6aG0J7xg/b7erQszOcyOizWylwCr9cgYM/BVVJHezUDxwyigG6+wCFQwCvyMBw==",
- "dev": true
- },
- "@types/web3": {
- "version": "1.0.19",
- "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.19.tgz",
- "integrity": "sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A==",
- "dev": true,
- "requires": {
- "@types/bn.js": "*",
- "@types/underscore": "*"
- }
- },
- "@yarnpkg/lockfile": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
- "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
- "dev": true
- },
- "abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "requires": {
- "event-target-shim": "^5.0.0"
- }
- },
- "abstract-leveldown": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz",
- "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==",
- "requires": {
- "buffer": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- }
- },
- "abstract-logging": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz",
- "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA=="
- },
- "adm-zip": {
- "version": "0.4.16",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
- "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg=="
- },
- "aes-js": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
- "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0="
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "requires": {
- "debug": "4"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
- },
- "ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "requires": {
- "type-fest": "^0.21.3"
- }
- },
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "archy": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
- "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA="
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "array-back": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
- "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
- "dev": true,
- "requires": {
- "typical": "^2.6.1"
- }
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "async": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
- "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
- "requires": {
- "lodash": "^4.17.14"
- }
- },
- "async-eventemitter": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz",
- "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==",
- "requires": {
- "async": "^2.4.0"
- }
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "atomic-sleep": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
- "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="
- },
- "avvio": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.1.tgz",
- "integrity": "sha512-b+gox68dqD6c3S3t+bZBKN6rYbVWdwpN12sHQLFTiacDT2rcq7fm07Ww+IKt/AvAkyCIe1f5ArP1bC/vAlx97A==",
- "requires": {
- "archy": "^1.0.0",
- "debug": "^4.0.0",
- "fastq": "^1.6.1",
- "queue-microtask": "^1.1.2"
- }
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
- },
- "aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "base-x": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz",
- "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==",
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dev": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- },
- "dependencies": {
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true
- }
- }
- },
- "bech32": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
- "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
- },
- "blakejs": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz",
- "integrity": "sha1-ad+S75U6qIylGjLfarHFShVfx6U="
- },
- "bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
- },
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="
- },
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- },
- "dependencies": {
- "buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
- }
- }
- },
- "bs58": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
- "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=",
- "requires": {
- "base-x": "^3.0.2"
- }
- },
- "bs58check": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz",
- "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==",
- "requires": {
- "bs58": "^4.0.0",
- "create-hash": "^1.1.0",
- "safe-buffer": "^5.1.2"
- }
- },
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
- },
- "buffer-to-arraybuffer": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz",
- "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=",
- "dev": true
- },
- "buffer-xor": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz",
- "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==",
- "requires": {
- "safe-buffer": "^5.1.1"
- }
- },
- "bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
- },
- "call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "dev": true
- },
- "chai": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
- "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true
- },
- "chokidar": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
- "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "fsevents": "~2.3.1",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.5.0"
- }
- },
- "ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
- },
- "cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "command-exists": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
- "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="
- },
- "command-line-args": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz",
- "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==",
- "dev": true,
- "requires": {
- "array-back": "^2.0.0",
- "find-replace": "^1.0.3",
- "typical": "^2.6.1"
- }
- },
- "commander": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
- "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow=="
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
- },
- "core-js-pure": {
- "version": "3.10.1",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.10.1.tgz",
- "integrity": "sha512-PeyJH2SE0KuxY5eCGNWA+W+CeDpB6M1PN3S7Am7jSv/Ttuxz2SnWbIiVQOn/TDaGaGtxo8CRWHkXwJscbUHtVw=="
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "crc-32": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
- "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
- "requires": {
- "exit-on-epipe": "~1.0.1",
- "printj": "~1.1.0"
- }
- },
- "create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
- "decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
- },
- "deferred-leveldown": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz",
- "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==",
- "requires": {
- "abstract-leveldown": "~6.2.1",
- "inherits": "^2.0.3"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
- "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
- "requires": {
- "buffer": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
- },
- "diff": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="
- },
- "dom-walk": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
- "dev": true
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "dev": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
- "requires": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
- },
- "encoding-down": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz",
- "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==",
- "requires": {
- "abstract-leveldown": "^6.2.1",
- "inherits": "^2.0.3",
- "level-codec": "^9.0.0",
- "level-errors": "^2.0.0"
- }
- },
- "enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "requires": {
- "ansi-colors": "^4.1.1"
- }
- },
- "env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="
- },
- "errno": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
- "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es-abstract": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz",
- "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==",
- "requires": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "is-callable": "^1.2.3",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.2",
- "is-string": "^1.0.5",
- "object-inspect": "^1.9.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.0"
- },
- "dependencies": {
- "object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- }
- }
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
- },
- "eth-ens-namehash": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz",
- "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=",
- "dev": true,
- "requires": {
- "idna-uts46-hx": "^2.3.1",
- "js-sha3": "^0.5.7"
- },
- "dependencies": {
- "js-sha3": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
- "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=",
- "dev": true
- }
- }
- },
- "eth-lib": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
- "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.6",
- "elliptic": "^6.4.0",
- "xhr-request-promise": "^0.1.2"
- }
- },
- "eth-sig-util": {
- "version": "2.5.4",
- "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.5.4.tgz",
- "integrity": "sha512-aCMBwp8q/4wrW4QLsF/HYBOSA7TpLKmkVwP3pYQNkEEseW2Rr8Z5Uxc9/h6HX+OG3tuHo+2bINVSihIeBfym6A==",
- "requires": {
- "ethereumjs-abi": "0.6.8",
- "ethereumjs-util": "^5.1.1",
- "tweetnacl": "^1.0.3",
- "tweetnacl-util": "^0.15.0"
- },
- "dependencies": {
- "ethereumjs-util": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz",
- "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==",
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- }
- }
- },
- "ethereum-bloom-filters": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz",
- "integrity": "sha512-GiK/RQkAkcVaEdxKVkPcG07PQ5vD7v2MFSHgZmBJSfMzNRHimntdBithsHAT89tAXnIpzVDWt8iaCD1DvkaxGg==",
- "dev": true,
- "requires": {
- "js-sha3": "^0.8.0"
- }
- },
- "ethereum-cryptography": {
+ "node_modules/web3-utils/node_modules/ethereum-cryptography": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
"integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
- "requires": {
+ "dev": true,
+ "dependencies": {
"@types/pbkdf2": "^3.0.0",
"@types/secp256k1": "^4.0.1",
"blakejs": "^1.1.0",
@@ -17678,9973 +15803,214 @@
"setimmediate": "^1.0.5"
}
},
- "ethereum-waffle": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.3.0.tgz",
- "integrity": "sha512-4xm3RWAPCu5LlaVxYEg0tG3L7g5ovBw1GY/UebrzZ+OTx22vcPjI+bvelFlGBpkdnO5yOIFXjH2eK59tNAe9IA==",
+ "node_modules/web3-utils/node_modules/ethereumjs-util": {
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
+ "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
"dev": true,
- "requires": {
- "@ethereum-waffle/chai": "^3.3.0",
- "@ethereum-waffle/compiler": "^3.3.0",
- "@ethereum-waffle/mock-contract": "^3.2.2",
- "@ethereum-waffle/provider": "^3.3.0",
- "ethers": "^5.0.1"
- }
- },
- "ethereumjs-abi": {
- "version": "0.6.8",
- "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz",
- "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==",
- "requires": {
- "bn.js": "^4.11.8",
- "ethereumjs-util": "^6.0.0"
- },
"dependencies": {
- "@types/bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==",
- "requires": {
- "@types/node": "*"
- }
- },
- "ethereumjs-util": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz",
- "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==",
- "requires": {
- "@types/bn.js": "^4.11.3",
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "0.1.6",
- "rlp": "^2.2.3"
- }
- }
- }
- },
- "ethereumjs-util": {
- "version": "7.0.10",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.0.10.tgz",
- "integrity": "sha512-c/xThw6A+EAnej5Xk5kOzFzyoSnw0WX0tSlZ6pAsfGVvQj3TItaDg9b1+Fz1RJXA+y2YksKwQnuzgt1eY6LKzw==",
- "requires": {
"@types/bn.js": "^5.1.0",
"bn.js": "^5.1.2",
"create-hash": "^1.1.2",
"ethereum-cryptography": "^0.1.3",
- "ethjs-util": "0.1.6",
"rlp": "^2.2.4"
},
- "dependencies": {
- "bn.js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
- "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
- }
+ "engines": {
+ "node": ">=10.0.0"
}
},
- "ethers": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.1.0.tgz",
- "integrity": "sha512-2L6Ge6wMBw02FlRoCLg4E0Elt3khMNlW6ULawa10mMeeZToYJ5+uCfiuTuB+XZ6om1Y7wuO9ZzezP8FsU2M/+g==",
- "requires": {
- "@ethersproject/abi": "5.1.0",
- "@ethersproject/abstract-provider": "5.1.0",
- "@ethersproject/abstract-signer": "5.1.0",
- "@ethersproject/address": "5.1.0",
- "@ethersproject/base64": "5.1.0",
- "@ethersproject/basex": "5.1.0",
- "@ethersproject/bignumber": "5.1.0",
- "@ethersproject/bytes": "5.1.0",
- "@ethersproject/constants": "5.1.0",
- "@ethersproject/contracts": "5.1.0",
- "@ethersproject/hash": "5.1.0",
- "@ethersproject/hdnode": "5.1.0",
- "@ethersproject/json-wallets": "5.1.0",
- "@ethersproject/keccak256": "5.1.0",
- "@ethersproject/logger": "5.1.0",
- "@ethersproject/networks": "5.1.0",
- "@ethersproject/pbkdf2": "5.1.0",
- "@ethersproject/properties": "5.1.0",
- "@ethersproject/providers": "5.1.0",
- "@ethersproject/random": "5.1.0",
- "@ethersproject/rlp": "5.1.0",
- "@ethersproject/sha2": "5.1.0",
- "@ethersproject/signing-key": "5.1.0",
- "@ethersproject/solidity": "5.1.0",
- "@ethersproject/strings": "5.1.0",
- "@ethersproject/transactions": "5.1.0",
- "@ethersproject/units": "5.1.0",
- "@ethersproject/wallet": "5.1.0",
- "@ethersproject/web": "5.1.0",
- "@ethersproject/wordlists": "5.1.0"
- }
- },
- "ethjs-unit": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz",
- "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=",
- "dev": true,
- "requires": {
- "bn.js": "4.11.6",
- "number-to-bn": "1.7.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=",
- "dev": true
- }
- }
- },
- "ethjs-util": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz",
- "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==",
- "requires": {
- "is-hex-prefixed": "1.0.0",
- "strip-hex-prefix": "1.0.0"
- }
- },
- "event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
- },
- "evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "exit-on-epipe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
- "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "dev": true
- },
- "fast-decode-uri-component": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz",
- "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "fast-json-stringify": {
- "version": "2.5.4",
- "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.5.4.tgz",
- "integrity": "sha512-fu74X0fRzQqADX6LFJ+5lSal1+j/QmX4oWrDnrfVAXV4qT6PwyymZmhGa/1SWgouOmf0tBJzZrHZPLymO00Lxg==",
- "requires": {
- "ajv": "^6.11.0",
- "deepmerge": "^4.2.2",
- "rfdc": "^1.2.0",
- "string-similarity": "^4.0.1"
- }
- },
- "fast-redact": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.0.tgz",
- "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w=="
- },
- "fast-safe-stringify": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
- "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
- },
- "fastify": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/fastify/-/fastify-3.14.2.tgz",
- "integrity": "sha512-/PY//7gJnGxLQORaRHCEW148vpFKFpBIQNz1Yo/DxbHuk5EQqK2comzyE2ug8FSEldDX8nleapTshl0m78Px2w==",
- "requires": {
- "@fastify/proxy-addr": "^3.0.0",
- "abstract-logging": "^2.0.0",
- "ajv": "^6.12.2",
- "avvio": "^7.1.2",
- "fast-json-stringify": "^2.5.2",
- "fastify-error": "^0.3.0",
- "fastify-warning": "^0.2.0",
- "find-my-way": "^4.0.0",
- "flatstr": "^1.0.12",
- "light-my-request": "^4.2.0",
- "pino": "^6.2.1",
- "readable-stream": "^3.4.0",
- "rfdc": "^1.1.4",
- "secure-json-parse": "^2.0.0",
- "semver": "^7.3.2",
- "tiny-lru": "^7.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"
- }
- },
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
- }
- },
- "fastify-error": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/fastify-error/-/fastify-error-0.3.0.tgz",
- "integrity": "sha512-Jm2LMTB5rsJqlS1+cmgqqM9tTs0UrlgYR7TvDT3ZgXsUI5ib1NjQlqZHf+tDK5tVPdFGwyq02wAoJtyYIRSiFA=="
- },
- "fastify-warning": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz",
- "integrity": "sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw=="
- },
- "fastq": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz",
- "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==",
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-my-way": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-4.1.0.tgz",
- "integrity": "sha512-UBD94MdO6cBi6E97XA0fBA9nwqw+xG5x1TYIPHats33gEi/kNqy7BWHAWx8QHCQQRSU5Txc0JiD8nzba39gvMQ==",
- "requires": {
- "fast-decode-uri-component": "^1.0.1",
- "fast-deep-equal": "^3.1.3",
- "safe-regex2": "^2.0.0",
- "semver-store": "^0.3.0"
- }
- },
- "find-replace": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz",
- "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=",
- "dev": true,
- "requires": {
- "array-back": "^1.0.4",
- "test-value": "^2.1.0"
- },
- "dependencies": {
- "array-back": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
- "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
- "dev": true,
- "requires": {
- "typical": "^2.6.0"
- }
- }
- }
- },
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "find-yarn-workspace-root": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz",
- "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==",
- "dev": true,
- "requires": {
- "micromatch": "^4.0.2"
- }
- },
- "flat": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz",
- "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==",
- "requires": {
- "is-buffer": "~2.0.3"
- }
- },
- "flatstr": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz",
- "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw=="
- },
- "follow-redirects": {
- "version": "1.14.7",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz",
- "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA=="
- },
- "for-each": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
- "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
- "requires": {
- "is-callable": "^1.1.3"
- }
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true
- },
- "form-data": {
+ "node_modules/webidl-conversions": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
- "fp-ts": {
- "version": "1.19.3",
- "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz",
- "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg=="
- },
- "fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
- },
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "optional": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
- },
- "ganache-core": {
- "version": "2.13.2",
- "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz",
- "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==",
- "dev": true,
- "requires": {
- "abstract-leveldown": "3.0.0",
- "async": "2.6.2",
- "bip39": "2.5.0",
- "cachedown": "1.0.0",
- "clone": "2.1.2",
- "debug": "3.2.6",
- "encoding-down": "5.0.4",
- "eth-sig-util": "3.0.0",
- "ethereumjs-abi": "0.6.8",
- "ethereumjs-account": "3.0.0",
- "ethereumjs-block": "2.2.2",
- "ethereumjs-common": "1.5.0",
- "ethereumjs-tx": "2.1.2",
- "ethereumjs-util": "6.2.1",
- "ethereumjs-vm": "4.2.0",
- "ethereumjs-wallet": "0.6.5",
- "heap": "0.2.6",
- "keccak": "3.0.1",
- "level-sublevel": "6.6.4",
- "levelup": "3.1.1",
- "lodash": "4.17.20",
- "lru-cache": "5.1.1",
- "merkle-patricia-tree": "3.0.0",
- "patch-package": "6.2.2",
- "seedrandom": "3.0.1",
- "source-map-support": "0.5.12",
- "tmp": "0.1.0",
- "web3": "1.2.11",
- "web3-provider-engine": "14.2.1",
- "websocket": "1.0.32"
- },
- "dependencies": {
- "@ethersproject/abi": {
- "version": "5.0.0-beta.153",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/address": ">=5.0.0-beta.128",
- "@ethersproject/bignumber": ">=5.0.0-beta.130",
- "@ethersproject/bytes": ">=5.0.0-beta.129",
- "@ethersproject/constants": ">=5.0.0-beta.128",
- "@ethersproject/hash": ">=5.0.0-beta.128",
- "@ethersproject/keccak256": ">=5.0.0-beta.127",
- "@ethersproject/logger": ">=5.0.0-beta.129",
- "@ethersproject/properties": ">=5.0.0-beta.131",
- "@ethersproject/strings": ">=5.0.0-beta.130"
- }
- },
- "@ethersproject/abstract-provider": {
- "version": "5.0.8",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bignumber": "^5.0.13",
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/networks": "^5.0.7",
- "@ethersproject/properties": "^5.0.7",
- "@ethersproject/transactions": "^5.0.9",
- "@ethersproject/web": "^5.0.12"
- }
- },
- "@ethersproject/abstract-signer": {
- "version": "5.0.10",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/abstract-provider": "^5.0.8",
- "@ethersproject/bignumber": "^5.0.13",
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/properties": "^5.0.7"
- }
- },
- "@ethersproject/address": {
- "version": "5.0.9",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bignumber": "^5.0.13",
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/keccak256": "^5.0.7",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/rlp": "^5.0.7"
- }
- },
- "@ethersproject/base64": {
- "version": "5.0.7",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bytes": "^5.0.9"
- }
- },
- "@ethersproject/bignumber": {
- "version": "5.0.13",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/logger": "^5.0.8",
- "bn.js": "^4.4.0"
- }
- },
- "@ethersproject/bytes": {
- "version": "5.0.9",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/logger": "^5.0.8"
- }
- },
- "@ethersproject/constants": {
- "version": "5.0.8",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bignumber": "^5.0.13"
- }
- },
- "@ethersproject/hash": {
- "version": "5.0.10",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/abstract-signer": "^5.0.10",
- "@ethersproject/address": "^5.0.9",
- "@ethersproject/bignumber": "^5.0.13",
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/keccak256": "^5.0.7",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/properties": "^5.0.7",
- "@ethersproject/strings": "^5.0.8"
- }
- },
- "@ethersproject/keccak256": {
- "version": "5.0.7",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bytes": "^5.0.9",
- "js-sha3": "0.5.7"
- }
- },
- "@ethersproject/logger": {
- "version": "5.0.8",
- "dev": true,
- "optional": true
- },
- "@ethersproject/networks": {
- "version": "5.0.7",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/logger": "^5.0.8"
- }
- },
- "@ethersproject/properties": {
- "version": "5.0.7",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/logger": "^5.0.8"
- }
- },
- "@ethersproject/rlp": {
- "version": "5.0.7",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/logger": "^5.0.8"
- }
- },
- "@ethersproject/signing-key": {
- "version": "5.0.8",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/properties": "^5.0.7",
- "elliptic": "6.5.3"
- }
- },
- "@ethersproject/strings": {
- "version": "5.0.8",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/constants": "^5.0.8",
- "@ethersproject/logger": "^5.0.8"
- }
- },
- "@ethersproject/transactions": {
- "version": "5.0.9",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/address": "^5.0.9",
- "@ethersproject/bignumber": "^5.0.13",
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/constants": "^5.0.8",
- "@ethersproject/keccak256": "^5.0.7",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/properties": "^5.0.7",
- "@ethersproject/rlp": "^5.0.7",
- "@ethersproject/signing-key": "^5.0.8"
- }
- },
- "@ethersproject/web": {
- "version": "5.0.12",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/base64": "^5.0.7",
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/properties": "^5.0.7",
- "@ethersproject/strings": "^5.0.8"
- }
- },
- "@sindresorhus/is": {
- "version": "0.14.0",
- "dev": true,
- "optional": true
- },
- "@szmarczak/http-timer": {
- "version": "1.1.2",
- "dev": true,
- "optional": true,
- "requires": {
- "defer-to-connect": "^1.0.1"
- }
- },
- "@types/bn.js": {
- "version": "4.11.6",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/node": {
- "version": "14.14.20",
- "dev": true
- },
- "@types/pbkdf2": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/secp256k1": {
- "version": "4.0.1",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@yarnpkg/lockfile": {
- "version": "1.1.0",
- "dev": true
- },
- "abstract-leveldown": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- },
- "accepts": {
- "version": "1.3.7",
- "dev": true,
- "optional": true,
- "requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- }
- },
- "aes-js": {
- "version": "3.1.2",
- "dev": true,
- "optional": true
- },
- "ajv": {
- "version": "6.12.6",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-styles": {
- "version": "3.2.1",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "arr-diff": {
- "version": "4.0.0",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "dev": true
- },
- "array-flatten": {
- "version": "1.1.1",
- "dev": true,
- "optional": true
- },
- "array-unique": {
- "version": "0.3.2",
- "dev": true
- },
- "asn1": {
- "version": "0.2.4",
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "asn1.js": {
- "version": "5.4.1",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "dev": true
- },
- "async": {
- "version": "2.6.2",
- "dev": true,
- "requires": {
- "lodash": "^4.17.11"
- }
- },
- "async-eventemitter": {
- "version": "0.2.4",
- "dev": true,
- "requires": {
- "async": "^2.4.0"
- }
- },
- "async-limiter": {
- "version": "1.0.1",
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "dev": true
- },
- "atob": {
- "version": "2.1.2",
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "dev": true
- },
- "aws4": {
- "version": "1.11.0",
- "dev": true
- },
- "babel-code-frame": {
- "version": "6.26.0",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.2"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "dev": true
- },
- "ansi-styles": {
- "version": "2.2.1",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "js-tokens": {
- "version": "3.0.2",
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "dev": true
- }
- }
- },
- "babel-core": {
- "version": "6.26.3",
- "dev": true,
- "requires": {
- "babel-code-frame": "^6.26.0",
- "babel-generator": "^6.26.0",
- "babel-helpers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-register": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "convert-source-map": "^1.5.1",
- "debug": "^2.6.9",
- "json5": "^0.5.1",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.4",
- "path-is-absolute": "^1.0.1",
- "private": "^0.1.8",
- "slash": "^1.0.0",
- "source-map": "^0.5.7"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "json5": {
- "version": "0.5.1",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "dev": true
- },
- "slash": {
- "version": "1.0.0",
- "dev": true
- }
- }
- },
- "babel-generator": {
- "version": "6.26.1",
- "dev": true,
- "requires": {
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "detect-indent": "^4.0.0",
- "jsesc": "^1.3.0",
- "lodash": "^4.17.4",
- "source-map": "^0.5.7",
- "trim-right": "^1.0.1"
- },
- "dependencies": {
- "jsesc": {
- "version": "1.3.0",
- "dev": true
- }
- }
- },
- "babel-helper-builder-binary-assignment-operator-visitor": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-explode-assignable-expression": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-call-delegate": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-hoist-variables": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-define-map": {
- "version": "6.26.0",
- "dev": true,
- "requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-helper-explode-assignable-expression": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-function-name": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-get-function-arity": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-get-function-arity": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-hoist-variables": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-optimise-call-expression": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-regex": {
- "version": "6.26.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-helper-remap-async-to-generator": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-replace-supers": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-optimise-call-expression": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helpers": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-messages": {
- "version": "6.23.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-check-es2015-constants": {
- "version": "6.22.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-syntax-async-functions": {
- "version": "6.13.0",
- "dev": true
- },
- "babel-plugin-syntax-exponentiation-operator": {
- "version": "6.13.0",
- "dev": true
- },
- "babel-plugin-syntax-trailing-function-commas": {
- "version": "6.22.0",
- "dev": true
- },
- "babel-plugin-transform-async-to-generator": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-remap-async-to-generator": "^6.24.1",
- "babel-plugin-syntax-async-functions": "^6.8.0",
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-arrow-functions": {
- "version": "6.22.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-block-scoped-functions": {
- "version": "6.22.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-block-scoping": {
- "version": "6.26.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-plugin-transform-es2015-classes": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-define-map": "^6.24.1",
- "babel-helper-function-name": "^6.24.1",
- "babel-helper-optimise-call-expression": "^6.24.1",
- "babel-helper-replace-supers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-computed-properties": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-destructuring": {
- "version": "6.23.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-duplicate-keys": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-for-of": {
- "version": "6.23.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-function-name": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-literals": {
- "version": "6.22.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-modules-amd": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-modules-commonjs": {
- "version": "6.26.2",
- "dev": true,
- "requires": {
- "babel-plugin-transform-strict-mode": "^6.24.1",
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-types": "^6.26.0"
- }
- },
- "babel-plugin-transform-es2015-modules-systemjs": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-hoist-variables": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-modules-umd": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-object-super": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-replace-supers": "^6.24.1",
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-parameters": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-call-delegate": "^6.24.1",
- "babel-helper-get-function-arity": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-shorthand-properties": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-spread": {
- "version": "6.22.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-sticky-regex": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-regex": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-template-literals": {
- "version": "6.22.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-typeof-symbol": {
- "version": "6.23.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-unicode-regex": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-regex": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "regexpu-core": "^2.0.0"
- }
- },
- "babel-plugin-transform-exponentiation-operator": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
- "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-regenerator": {
- "version": "6.26.0",
- "dev": true,
- "requires": {
- "regenerator-transform": "^0.10.0"
- }
- },
- "babel-plugin-transform-strict-mode": {
- "version": "6.24.1",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-preset-env": {
- "version": "1.7.0",
- "dev": true,
- "requires": {
- "babel-plugin-check-es2015-constants": "^6.22.0",
- "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
- "babel-plugin-transform-async-to-generator": "^6.22.0",
- "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
- "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
- "babel-plugin-transform-es2015-block-scoping": "^6.23.0",
- "babel-plugin-transform-es2015-classes": "^6.23.0",
- "babel-plugin-transform-es2015-computed-properties": "^6.22.0",
- "babel-plugin-transform-es2015-destructuring": "^6.23.0",
- "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0",
- "babel-plugin-transform-es2015-for-of": "^6.23.0",
- "babel-plugin-transform-es2015-function-name": "^6.22.0",
- "babel-plugin-transform-es2015-literals": "^6.22.0",
- "babel-plugin-transform-es2015-modules-amd": "^6.22.0",
- "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",
- "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0",
- "babel-plugin-transform-es2015-modules-umd": "^6.23.0",
- "babel-plugin-transform-es2015-object-super": "^6.22.0",
- "babel-plugin-transform-es2015-parameters": "^6.23.0",
- "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0",
- "babel-plugin-transform-es2015-spread": "^6.22.0",
- "babel-plugin-transform-es2015-sticky-regex": "^6.22.0",
- "babel-plugin-transform-es2015-template-literals": "^6.22.0",
- "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0",
- "babel-plugin-transform-es2015-unicode-regex": "^6.22.0",
- "babel-plugin-transform-exponentiation-operator": "^6.22.0",
- "babel-plugin-transform-regenerator": "^6.22.0",
- "browserslist": "^3.2.6",
- "invariant": "^2.2.2",
- "semver": "^5.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "dev": true
- }
- }
- },
- "babel-register": {
- "version": "6.26.0",
- "dev": true,
- "requires": {
- "babel-core": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.0",
- "home-or-tmp": "^2.0.0",
- "lodash": "^4.17.4",
- "mkdirp": "^0.5.1",
- "source-map-support": "^0.4.15"
- },
- "dependencies": {
- "source-map-support": {
- "version": "0.4.18",
- "dev": true,
- "requires": {
- "source-map": "^0.5.6"
- }
- }
- }
- },
- "babel-runtime": {
- "version": "6.26.0",
- "dev": true,
- "requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
- }
- },
- "babel-template": {
- "version": "6.26.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-traverse": {
- "version": "6.26.0",
- "dev": true,
- "requires": {
- "babel-code-frame": "^6.26.0",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "debug": "^2.6.8",
- "globals": "^9.18.0",
- "invariant": "^2.2.2",
- "lodash": "^4.17.4"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "globals": {
- "version": "9.18.0",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "dev": true
- }
- }
- },
- "babel-types": {
- "version": "6.26.0",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.26.0",
- "esutils": "^2.0.2",
- "lodash": "^4.17.4",
- "to-fast-properties": "^1.0.3"
- },
- "dependencies": {
- "to-fast-properties": {
- "version": "1.0.3",
- "dev": true
- }
- }
- },
- "babelify": {
- "version": "7.3.0",
- "dev": true,
- "requires": {
- "babel-core": "^6.0.14",
- "object-assign": "^4.0.0"
- }
- },
- "babylon": {
- "version": "6.18.0",
- "dev": true
- },
- "backoff": {
- "version": "2.5.0",
- "dev": true,
- "requires": {
- "precond": "0.2"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "dev": true
- },
- "base": {
- "version": "0.11.2",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- }
- }
- },
- "base-x": {
- "version": "3.0.8",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "base64-js": {
- "version": "1.5.1",
- "dev": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "dev": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- },
- "dependencies": {
- "tweetnacl": {
- "version": "0.14.5",
- "dev": true
- }
- }
- },
- "bignumber.js": {
- "version": "9.0.1",
- "dev": true,
- "optional": true
- },
- "bip39": {
- "version": "2.5.0",
- "dev": true,
- "requires": {
- "create-hash": "^1.1.0",
- "pbkdf2": "^3.0.9",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "unorm": "^1.3.3"
- }
- },
- "blakejs": {
- "version": "1.1.0",
- "dev": true
- },
- "bluebird": {
- "version": "3.7.2",
- "dev": true,
- "optional": true
- },
- "bn.js": {
- "version": "4.11.9",
- "dev": true
- },
- "body-parser": {
- "version": "1.19.0",
- "dev": true,
- "optional": true,
- "requires": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "dev": true,
- "optional": true
- },
- "qs": {
- "version": "6.7.0",
- "dev": true,
- "optional": true
- }
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "brorand": {
- "version": "1.1.0",
- "dev": true
- },
- "browserify-aes": {
- "version": "1.2.0",
- "dev": true,
- "requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "browserify-cipher": {
- "version": "1.0.1",
- "dev": true,
- "optional": true,
- "requires": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "browserify-des": {
- "version": "1.0.2",
- "dev": true,
- "optional": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "browserify-rsa": {
- "version": "4.1.0",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "^5.0.0",
- "randombytes": "^2.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "5.1.3",
- "dev": true,
- "optional": true
- }
- }
- },
- "browserify-sign": {
- "version": "4.2.1",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "^5.1.1",
- "browserify-rsa": "^4.0.1",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "elliptic": "^6.5.3",
- "inherits": "^2.0.4",
- "parse-asn1": "^5.1.5",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "5.1.3",
- "dev": true,
- "optional": true
- },
- "readable-stream": {
- "version": "3.6.0",
- "dev": true,
- "optional": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
- "browserslist": {
- "version": "3.2.8",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30000844",
- "electron-to-chromium": "^1.3.47"
- }
- },
- "bs58": {
- "version": "4.0.1",
- "dev": true,
- "requires": {
- "base-x": "^3.0.2"
- }
- },
- "bs58check": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "bs58": "^4.0.0",
- "create-hash": "^1.1.0",
- "safe-buffer": "^5.1.2"
- }
- },
- "buffer": {
- "version": "5.7.1",
- "dev": true,
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "buffer-from": {
- "version": "1.1.1",
- "dev": true
- },
- "buffer-to-arraybuffer": {
- "version": "0.0.5",
- "dev": true,
- "optional": true
- },
- "buffer-xor": {
- "version": "1.0.3",
- "dev": true
- },
- "bufferutil": {
- "version": "4.0.3",
- "dev": true,
- "requires": {
- "node-gyp-build": "^4.2.0"
- }
- },
- "bytes": {
- "version": "3.1.0",
- "dev": true,
- "optional": true
- },
- "bytewise": {
- "version": "1.1.0",
- "dev": true,
- "requires": {
- "bytewise-core": "^1.2.2",
- "typewise": "^1.0.3"
- }
- },
- "bytewise-core": {
- "version": "1.2.3",
- "dev": true,
- "requires": {
- "typewise-core": "^1.2"
- }
- },
- "cache-base": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- }
- },
- "cacheable-request": {
- "version": "6.1.0",
- "dev": true,
- "optional": true,
- "requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^3.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^4.1.0",
- "responselike": "^1.0.2"
- },
- "dependencies": {
- "lowercase-keys": {
- "version": "2.0.0",
- "dev": true,
- "optional": true
- }
- }
- },
- "cachedown": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "abstract-leveldown": "^2.4.1",
- "lru-cache": "^3.2.0"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- },
- "lru-cache": {
- "version": "3.2.0",
- "dev": true,
- "requires": {
- "pseudomap": "^1.0.1"
- }
- }
- }
- },
- "call-bind": {
- "version": "1.0.2",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- }
- },
- "caniuse-lite": {
- "version": "1.0.30001174",
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "dev": true
- },
- "chalk": {
- "version": "2.4.2",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "checkpoint-store": {
- "version": "1.1.0",
- "dev": true,
- "requires": {
- "functional-red-black-tree": "^1.0.1"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "dev": true,
- "optional": true
- },
- "ci-info": {
- "version": "2.0.0",
- "dev": true
- },
- "cids": {
- "version": "0.7.5",
- "dev": true,
- "optional": true,
- "requires": {
- "buffer": "^5.5.0",
- "class-is": "^1.1.0",
- "multibase": "~0.6.0",
- "multicodec": "^1.0.0",
- "multihashes": "~0.4.15"
- },
- "dependencies": {
- "multicodec": {
- "version": "1.0.4",
- "dev": true,
- "optional": true,
- "requires": {
- "buffer": "^5.6.0",
- "varint": "^5.0.0"
- }
- }
- }
- },
- "cipher-base": {
- "version": "1.0.4",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "class-is": {
- "version": "1.1.0",
- "dev": true,
- "optional": true
- },
- "class-utils": {
- "version": "0.3.6",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "dev": true
- }
- }
- },
- "clone": {
- "version": "2.1.2",
- "dev": true
- },
- "clone-response": {
- "version": "1.0.2",
- "dev": true,
- "optional": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "collection-visit": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "component-emitter": {
- "version": "1.3.0",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "dev": true
- },
- "concat-stream": {
- "version": "1.6.2",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "content-disposition": {
- "version": "0.5.3",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "5.1.2"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true,
- "optional": true
- }
- }
- },
- "content-hash": {
- "version": "2.5.2",
- "dev": true,
- "optional": true,
- "requires": {
- "cids": "^0.7.1",
- "multicodec": "^0.5.5",
- "multihashes": "^0.4.15"
- }
- },
- "content-type": {
- "version": "1.0.4",
- "dev": true,
- "optional": true
- },
- "convert-source-map": {
- "version": "1.7.0",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true
- }
- }
- },
- "cookie": {
- "version": "0.4.0",
- "dev": true,
- "optional": true
- },
- "cookie-signature": {
- "version": "1.0.6",
- "dev": true,
- "optional": true
- },
- "cookiejar": {
- "version": "2.1.2",
- "dev": true,
- "optional": true
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "dev": true
- },
- "core-js": {
- "version": "2.6.12",
- "dev": true
- },
- "core-js-pure": {
- "version": "3.8.2",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "dev": true
- },
- "cors": {
- "version": "2.8.5",
- "dev": true,
- "optional": true,
- "requires": {
- "object-assign": "^4",
- "vary": "^1"
- }
- },
- "create-ecdh": {
- "version": "4.0.4",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.5.3"
- }
- },
- "create-hash": {
- "version": "1.2.0",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "create-hmac": {
- "version": "1.1.7",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "cross-fetch": {
- "version": "2.2.3",
- "dev": true,
- "requires": {
- "node-fetch": "2.1.2",
- "whatwg-fetch": "2.0.4"
- }
- },
- "crypto-browserify": {
- "version": "3.12.0",
- "dev": true,
- "optional": true,
- "requires": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- }
- },
- "d": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "es5-ext": "^0.10.50",
- "type": "^1.0.1"
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debug": {
- "version": "3.2.6",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "dev": true
- },
- "decompress-response": {
- "version": "3.3.0",
- "dev": true,
- "optional": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "deep-equal": {
- "version": "1.1.1",
- "dev": true,
- "requires": {
- "is-arguments": "^1.0.4",
- "is-date-object": "^1.0.1",
- "is-regex": "^1.0.4",
- "object-is": "^1.0.1",
- "object-keys": "^1.1.1",
- "regexp.prototype.flags": "^1.2.0"
- }
- },
- "defer-to-connect": {
- "version": "1.1.3",
- "dev": true,
- "optional": true
- },
- "deferred-leveldown": {
- "version": "4.0.2",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~5.0.0",
- "inherits": "^2.0.3"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "define-properties": {
- "version": "1.1.3",
- "dev": true,
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- }
- },
- "defined": {
- "version": "1.0.0",
- "dev": true
- },
- "delayed-stream": {
- "version": "1.0.0",
- "dev": true
- },
- "depd": {
- "version": "1.1.2",
- "dev": true,
- "optional": true
- },
- "des.js": {
- "version": "1.0.1",
- "dev": true,
- "optional": true,
- "requires": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "destroy": {
- "version": "1.0.4",
- "dev": true,
- "optional": true
- },
- "detect-indent": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "repeating": "^2.0.0"
- }
- },
- "diffie-hellman": {
- "version": "5.0.3",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
- }
- },
- "dom-walk": {
- "version": "0.1.2",
- "dev": true
- },
- "dotignore": {
- "version": "0.1.2",
- "dev": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "duplexer3": {
- "version": "0.1.4",
- "dev": true,
- "optional": true
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "dev": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "ee-first": {
- "version": "1.1.1",
- "dev": true,
- "optional": true
- },
- "electron-to-chromium": {
- "version": "1.3.636",
- "dev": true
- },
- "elliptic": {
- "version": "6.5.3",
- "dev": true,
- "requires": {
- "bn.js": "^4.4.0",
- "brorand": "^1.0.1",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.0"
- }
- },
- "encodeurl": {
- "version": "1.0.2",
- "dev": true,
- "optional": true
- },
- "encoding": {
- "version": "0.1.13",
- "dev": true,
- "requires": {
- "iconv-lite": "^0.6.2"
- },
- "dependencies": {
- "iconv-lite": {
- "version": "0.6.2",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
- }
- }
- },
- "encoding-down": {
- "version": "5.0.4",
- "dev": true,
- "requires": {
- "abstract-leveldown": "^5.0.0",
- "inherits": "^2.0.3",
- "level-codec": "^9.0.0",
- "level-errors": "^2.0.0",
- "xtend": "^4.0.1"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "end-of-stream": {
- "version": "1.4.4",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "errno": {
- "version": "0.1.8",
- "dev": true,
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "es-abstract": {
- "version": "1.18.0-next.1",
- "dev": true,
- "requires": {
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1",
- "is-callable": "^1.2.2",
- "is-negative-zero": "^2.0.0",
- "is-regex": "^1.1.1",
- "object-inspect": "^1.8.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.1",
- "string.prototype.trimend": "^1.0.1",
- "string.prototype.trimstart": "^1.0.1"
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "es5-ext": {
- "version": "0.10.53",
- "dev": true,
- "requires": {
- "es6-iterator": "~2.0.3",
- "es6-symbol": "~3.1.3",
- "next-tick": "~1.0.0"
- }
- },
- "es6-iterator": {
- "version": "2.0.3",
- "dev": true,
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.35",
- "es6-symbol": "^3.1.1"
- }
- },
- "es6-symbol": {
- "version": "3.1.3",
- "dev": true,
- "requires": {
- "d": "^1.0.1",
- "ext": "^1.1.2"
- }
- },
- "escape-html": {
- "version": "1.0.3",
- "dev": true,
- "optional": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "dev": true
- },
- "etag": {
- "version": "1.8.1",
- "dev": true,
- "optional": true
- },
- "eth-block-tracker": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "eth-query": "^2.1.0",
- "ethereumjs-tx": "^1.3.3",
- "ethereumjs-util": "^5.1.3",
- "ethjs-util": "^0.1.3",
- "json-rpc-engine": "^3.6.0",
- "pify": "^2.3.0",
- "tape": "^4.6.3"
- },
- "dependencies": {
- "ethereumjs-tx": {
- "version": "1.3.7",
- "dev": true,
- "requires": {
- "ethereum-common": "^0.0.18",
- "ethereumjs-util": "^5.0.0"
- }
- },
- "ethereumjs-util": {
- "version": "5.2.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "pify": {
- "version": "2.3.0",
- "dev": true
- }
- }
- },
- "eth-ens-namehash": {
- "version": "2.0.8",
- "dev": true,
- "optional": true,
- "requires": {
- "idna-uts46-hx": "^2.3.1",
- "js-sha3": "^0.5.7"
- }
- },
- "eth-json-rpc-infura": {
- "version": "3.2.1",
- "dev": true,
- "requires": {
- "cross-fetch": "^2.1.1",
- "eth-json-rpc-middleware": "^1.5.0",
- "json-rpc-engine": "^3.4.0",
- "json-rpc-error": "^2.0.0"
- }
- },
- "eth-json-rpc-middleware": {
- "version": "1.6.0",
- "dev": true,
- "requires": {
- "async": "^2.5.0",
- "eth-query": "^2.1.2",
- "eth-tx-summary": "^3.1.2",
- "ethereumjs-block": "^1.6.0",
- "ethereumjs-tx": "^1.3.3",
- "ethereumjs-util": "^5.1.2",
- "ethereumjs-vm": "^2.1.0",
- "fetch-ponyfill": "^4.0.0",
- "json-rpc-engine": "^3.6.0",
- "json-rpc-error": "^2.0.0",
- "json-stable-stringify": "^1.0.1",
- "promise-to-callback": "^1.0.0",
- "tape": "^4.6.3"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.6.3",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- },
- "deferred-leveldown": {
- "version": "1.2.2",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.6.0"
- }
- },
- "ethereumjs-account": {
- "version": "2.0.5",
- "dev": true,
- "requires": {
- "ethereumjs-util": "^5.0.0",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "ethereumjs-block": {
- "version": "1.7.1",
- "dev": true,
- "requires": {
- "async": "^2.0.1",
- "ethereum-common": "0.2.0",
- "ethereumjs-tx": "^1.2.2",
- "ethereumjs-util": "^5.0.0",
- "merkle-patricia-tree": "^2.1.2"
- },
- "dependencies": {
- "ethereum-common": {
- "version": "0.2.0",
- "dev": true
- }
- }
- },
- "ethereumjs-tx": {
- "version": "1.3.7",
- "dev": true,
- "requires": {
- "ethereum-common": "^0.0.18",
- "ethereumjs-util": "^5.0.0"
- }
- },
- "ethereumjs-util": {
- "version": "5.2.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "ethereumjs-vm": {
- "version": "2.6.0",
- "dev": true,
- "requires": {
- "async": "^2.1.2",
- "async-eventemitter": "^0.2.2",
- "ethereumjs-account": "^2.0.3",
- "ethereumjs-block": "~2.2.0",
- "ethereumjs-common": "^1.1.0",
- "ethereumjs-util": "^6.0.0",
- "fake-merkle-patricia-tree": "^1.0.1",
- "functional-red-black-tree": "^1.0.1",
- "merkle-patricia-tree": "^2.3.2",
- "rustbn.js": "~0.2.0",
- "safe-buffer": "^5.1.1"
- },
- "dependencies": {
- "ethereumjs-block": {
- "version": "2.2.2",
- "dev": true,
- "requires": {
- "async": "^2.0.1",
- "ethereumjs-common": "^1.5.0",
- "ethereumjs-tx": "^2.1.1",
- "ethereumjs-util": "^5.0.0",
- "merkle-patricia-tree": "^2.1.2"
- },
- "dependencies": {
- "ethereumjs-util": {
- "version": "5.2.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- }
- }
- },
- "ethereumjs-tx": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "ethereumjs-common": "^1.5.0",
- "ethereumjs-util": "^6.0.0"
- }
- },
- "ethereumjs-util": {
- "version": "6.2.1",
- "dev": true,
- "requires": {
- "@types/bn.js": "^4.11.3",
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "0.1.6",
- "rlp": "^2.2.3"
- }
- }
- }
- },
- "isarray": {
- "version": "0.0.1",
- "dev": true
- },
- "level-codec": {
- "version": "7.0.1",
- "dev": true
- },
- "level-errors": {
- "version": "1.0.5",
- "dev": true,
- "requires": {
- "errno": "~0.1.1"
- }
- },
- "level-iterator-stream": {
- "version": "1.3.1",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "level-errors": "^1.0.3",
- "readable-stream": "^1.0.33",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.1.14",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- }
- }
- },
- "level-ws": {
- "version": "0.0.0",
- "dev": true,
- "requires": {
- "readable-stream": "~1.0.15",
- "xtend": "~2.1.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.0.34",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "xtend": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "object-keys": "~0.4.0"
- }
- }
- }
- },
- "levelup": {
- "version": "1.3.9",
- "dev": true,
- "requires": {
- "deferred-leveldown": "~1.2.1",
- "level-codec": "~7.0.0",
- "level-errors": "~1.0.3",
- "level-iterator-stream": "~1.3.0",
- "prr": "~1.0.1",
- "semver": "~5.4.1",
- "xtend": "~4.0.0"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "dev": true
- },
- "memdown": {
- "version": "1.4.1",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.1",
- "functional-red-black-tree": "^1.0.1",
- "immediate": "^3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "merkle-patricia-tree": {
- "version": "2.3.2",
- "dev": true,
- "requires": {
- "async": "^1.4.2",
- "ethereumjs-util": "^5.0.0",
- "level-ws": "0.0.0",
- "levelup": "^1.2.1",
- "memdown": "^1.0.0",
- "readable-stream": "^2.0.0",
- "rlp": "^2.0.0",
- "semaphore": ">=1.0.1"
- },
- "dependencies": {
- "async": {
- "version": "1.5.2",
- "dev": true
- }
- }
- },
- "object-keys": {
- "version": "0.4.0",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "dev": true
- },
- "string_decoder": {
- "version": "0.10.31",
- "dev": true
- }
- }
- },
- "eth-lib": {
- "version": "0.1.29",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "^4.11.6",
- "elliptic": "^6.4.0",
- "nano-json-stream-parser": "^0.1.2",
- "servify": "^0.1.12",
- "ws": "^3.0.0",
- "xhr-request-promise": "^0.1.2"
- }
- },
- "eth-query": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "json-rpc-random-id": "^1.0.0",
- "xtend": "^4.0.1"
- }
- },
- "eth-sig-util": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "buffer": "^5.2.1",
- "elliptic": "^6.4.0",
- "ethereumjs-abi": "0.6.5",
- "ethereumjs-util": "^5.1.1",
- "tweetnacl": "^1.0.0",
- "tweetnacl-util": "^0.15.0"
- },
- "dependencies": {
- "ethereumjs-abi": {
- "version": "0.6.5",
- "dev": true,
- "requires": {
- "bn.js": "^4.10.0",
- "ethereumjs-util": "^4.3.0"
- },
- "dependencies": {
- "ethereumjs-util": {
- "version": "4.5.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.8.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "rlp": "^2.0.0"
- }
- }
- }
- },
- "ethereumjs-util": {
- "version": "5.2.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- }
- }
- },
- "eth-tx-summary": {
- "version": "3.2.4",
- "dev": true,
- "requires": {
- "async": "^2.1.2",
- "clone": "^2.0.0",
- "concat-stream": "^1.5.1",
- "end-of-stream": "^1.1.0",
- "eth-query": "^2.0.2",
- "ethereumjs-block": "^1.4.1",
- "ethereumjs-tx": "^1.1.1",
- "ethereumjs-util": "^5.0.1",
- "ethereumjs-vm": "^2.6.0",
- "through2": "^2.0.3"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.6.3",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- },
- "deferred-leveldown": {
- "version": "1.2.2",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.6.0"
- }
- },
- "ethereumjs-account": {
- "version": "2.0.5",
- "dev": true,
- "requires": {
- "ethereumjs-util": "^5.0.0",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "ethereumjs-block": {
- "version": "1.7.1",
- "dev": true,
- "requires": {
- "async": "^2.0.1",
- "ethereum-common": "0.2.0",
- "ethereumjs-tx": "^1.2.2",
- "ethereumjs-util": "^5.0.0",
- "merkle-patricia-tree": "^2.1.2"
- },
- "dependencies": {
- "ethereum-common": {
- "version": "0.2.0",
- "dev": true
- }
- }
- },
- "ethereumjs-tx": {
- "version": "1.3.7",
- "dev": true,
- "requires": {
- "ethereum-common": "^0.0.18",
- "ethereumjs-util": "^5.0.0"
- }
- },
- "ethereumjs-util": {
- "version": "5.2.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "ethereumjs-vm": {
- "version": "2.6.0",
- "dev": true,
- "requires": {
- "async": "^2.1.2",
- "async-eventemitter": "^0.2.2",
- "ethereumjs-account": "^2.0.3",
- "ethereumjs-block": "~2.2.0",
- "ethereumjs-common": "^1.1.0",
- "ethereumjs-util": "^6.0.0",
- "fake-merkle-patricia-tree": "^1.0.1",
- "functional-red-black-tree": "^1.0.1",
- "merkle-patricia-tree": "^2.3.2",
- "rustbn.js": "~0.2.0",
- "safe-buffer": "^5.1.1"
- },
- "dependencies": {
- "ethereumjs-block": {
- "version": "2.2.2",
- "dev": true,
- "requires": {
- "async": "^2.0.1",
- "ethereumjs-common": "^1.5.0",
- "ethereumjs-tx": "^2.1.1",
- "ethereumjs-util": "^5.0.0",
- "merkle-patricia-tree": "^2.1.2"
- },
- "dependencies": {
- "ethereumjs-util": {
- "version": "5.2.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- }
- }
- },
- "ethereumjs-tx": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "ethereumjs-common": "^1.5.0",
- "ethereumjs-util": "^6.0.0"
- }
- },
- "ethereumjs-util": {
- "version": "6.2.1",
- "dev": true,
- "requires": {
- "@types/bn.js": "^4.11.3",
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "0.1.6",
- "rlp": "^2.2.3"
- }
- }
- }
- },
- "isarray": {
- "version": "0.0.1",
- "dev": true
- },
- "level-codec": {
- "version": "7.0.1",
- "dev": true
- },
- "level-errors": {
- "version": "1.0.5",
- "dev": true,
- "requires": {
- "errno": "~0.1.1"
- }
- },
- "level-iterator-stream": {
- "version": "1.3.1",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "level-errors": "^1.0.3",
- "readable-stream": "^1.0.33",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.1.14",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- }
- }
- },
- "level-ws": {
- "version": "0.0.0",
- "dev": true,
- "requires": {
- "readable-stream": "~1.0.15",
- "xtend": "~2.1.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.0.34",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "xtend": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "object-keys": "~0.4.0"
- }
- }
- }
- },
- "levelup": {
- "version": "1.3.9",
- "dev": true,
- "requires": {
- "deferred-leveldown": "~1.2.1",
- "level-codec": "~7.0.0",
- "level-errors": "~1.0.3",
- "level-iterator-stream": "~1.3.0",
- "prr": "~1.0.1",
- "semver": "~5.4.1",
- "xtend": "~4.0.0"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "dev": true
- },
- "memdown": {
- "version": "1.4.1",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.1",
- "functional-red-black-tree": "^1.0.1",
- "immediate": "^3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "merkle-patricia-tree": {
- "version": "2.3.2",
- "dev": true,
- "requires": {
- "async": "^1.4.2",
- "ethereumjs-util": "^5.0.0",
- "level-ws": "0.0.0",
- "levelup": "^1.2.1",
- "memdown": "^1.0.0",
- "readable-stream": "^2.0.0",
- "rlp": "^2.0.0",
- "semaphore": ">=1.0.1"
- },
- "dependencies": {
- "async": {
- "version": "1.5.2",
- "dev": true
- }
- }
- },
- "object-keys": {
- "version": "0.4.0",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "dev": true
- },
- "string_decoder": {
- "version": "0.10.31",
- "dev": true
- }
- }
- },
- "ethashjs": {
- "version": "0.0.8",
- "dev": true,
- "requires": {
- "async": "^2.1.2",
- "buffer-xor": "^2.0.1",
- "ethereumjs-util": "^7.0.2",
- "miller-rabin": "^4.0.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "5.1.3",
- "dev": true
- },
- "buffer-xor": {
- "version": "2.0.2",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.1"
- }
- },
- "ethereumjs-util": {
- "version": "7.0.7",
- "dev": true,
- "requires": {
- "@types/bn.js": "^4.11.3",
- "bn.js": "^5.1.2",
- "create-hash": "^1.1.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "0.1.6",
- "rlp": "^2.2.4"
- }
- }
- }
- },
- "ethereum-bloom-filters": {
- "version": "1.0.7",
- "dev": true,
- "optional": true,
- "requires": {
- "js-sha3": "^0.8.0"
- },
- "dependencies": {
- "js-sha3": {
- "version": "0.8.0",
- "dev": true,
- "optional": true
- }
- }
- },
- "ethereum-common": {
- "version": "0.0.18",
- "dev": true
- },
- "ethereum-cryptography": {
- "version": "0.1.3",
- "dev": true,
- "requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
- }
- },
- "ethereumjs-abi": {
- "version": "0.6.8",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.8",
- "ethereumjs-util": "^6.0.0"
- }
- },
- "ethereumjs-account": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "ethereumjs-util": "^6.0.0",
- "rlp": "^2.2.1",
- "safe-buffer": "^5.1.1"
- }
- },
- "ethereumjs-block": {
- "version": "2.2.2",
- "dev": true,
- "requires": {
- "async": "^2.0.1",
- "ethereumjs-common": "^1.5.0",
- "ethereumjs-tx": "^2.1.1",
- "ethereumjs-util": "^5.0.0",
- "merkle-patricia-tree": "^2.1.2"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.6.3",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- },
- "deferred-leveldown": {
- "version": "1.2.2",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.6.0"
- }
- },
- "ethereumjs-util": {
- "version": "5.2.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "isarray": {
- "version": "0.0.1",
- "dev": true
- },
- "level-codec": {
- "version": "7.0.1",
- "dev": true
- },
- "level-errors": {
- "version": "1.0.5",
- "dev": true,
- "requires": {
- "errno": "~0.1.1"
- }
- },
- "level-iterator-stream": {
- "version": "1.3.1",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "level-errors": "^1.0.3",
- "readable-stream": "^1.0.33",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.1.14",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- }
- }
- },
- "level-ws": {
- "version": "0.0.0",
- "dev": true,
- "requires": {
- "readable-stream": "~1.0.15",
- "xtend": "~2.1.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.0.34",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "xtend": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "object-keys": "~0.4.0"
- }
- }
- }
- },
- "levelup": {
- "version": "1.3.9",
- "dev": true,
- "requires": {
- "deferred-leveldown": "~1.2.1",
- "level-codec": "~7.0.0",
- "level-errors": "~1.0.3",
- "level-iterator-stream": "~1.3.0",
- "prr": "~1.0.1",
- "semver": "~5.4.1",
- "xtend": "~4.0.0"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "dev": true
- },
- "memdown": {
- "version": "1.4.1",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.1",
- "functional-red-black-tree": "^1.0.1",
- "immediate": "^3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "merkle-patricia-tree": {
- "version": "2.3.2",
- "dev": true,
- "requires": {
- "async": "^1.4.2",
- "ethereumjs-util": "^5.0.0",
- "level-ws": "0.0.0",
- "levelup": "^1.2.1",
- "memdown": "^1.0.0",
- "readable-stream": "^2.0.0",
- "rlp": "^2.0.0",
- "semaphore": ">=1.0.1"
- },
- "dependencies": {
- "async": {
- "version": "1.5.2",
- "dev": true
- }
- }
- },
- "object-keys": {
- "version": "0.4.0",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "dev": true
- },
- "string_decoder": {
- "version": "0.10.31",
- "dev": true
- }
- }
- },
- "ethereumjs-blockchain": {
- "version": "4.0.4",
- "dev": true,
- "requires": {
- "async": "^2.6.1",
- "ethashjs": "~0.0.7",
- "ethereumjs-block": "~2.2.2",
- "ethereumjs-common": "^1.5.0",
- "ethereumjs-util": "^6.1.0",
- "flow-stoplight": "^1.0.0",
- "level-mem": "^3.0.1",
- "lru-cache": "^5.1.1",
- "rlp": "^2.2.2",
- "semaphore": "^1.1.0"
- }
- },
- "ethereumjs-common": {
- "version": "1.5.0",
- "dev": true
- },
- "ethereumjs-tx": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "ethereumjs-common": "^1.5.0",
- "ethereumjs-util": "^6.0.0"
- }
- },
- "ethereumjs-util": {
- "version": "6.2.1",
- "dev": true,
- "requires": {
- "@types/bn.js": "^4.11.3",
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "0.1.6",
- "rlp": "^2.2.3"
- }
- },
- "ethereumjs-vm": {
- "version": "4.2.0",
- "dev": true,
- "requires": {
- "async": "^2.1.2",
- "async-eventemitter": "^0.2.2",
- "core-js-pure": "^3.0.1",
- "ethereumjs-account": "^3.0.0",
- "ethereumjs-block": "^2.2.2",
- "ethereumjs-blockchain": "^4.0.3",
- "ethereumjs-common": "^1.5.0",
- "ethereumjs-tx": "^2.1.2",
- "ethereumjs-util": "^6.2.0",
- "fake-merkle-patricia-tree": "^1.0.1",
- "functional-red-black-tree": "^1.0.1",
- "merkle-patricia-tree": "^2.3.2",
- "rustbn.js": "~0.2.0",
- "safe-buffer": "^5.1.1",
- "util.promisify": "^1.0.0"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.6.3",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- },
- "deferred-leveldown": {
- "version": "1.2.2",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.6.0"
- }
- },
- "isarray": {
- "version": "0.0.1",
- "dev": true
- },
- "level-codec": {
- "version": "7.0.1",
- "dev": true
- },
- "level-errors": {
- "version": "1.0.5",
- "dev": true,
- "requires": {
- "errno": "~0.1.1"
- }
- },
- "level-iterator-stream": {
- "version": "1.3.1",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "level-errors": "^1.0.3",
- "readable-stream": "^1.0.33",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.1.14",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- }
- }
- },
- "level-ws": {
- "version": "0.0.0",
- "dev": true,
- "requires": {
- "readable-stream": "~1.0.15",
- "xtend": "~2.1.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.0.34",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "xtend": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "object-keys": "~0.4.0"
- }
- }
- }
- },
- "levelup": {
- "version": "1.3.9",
- "dev": true,
- "requires": {
- "deferred-leveldown": "~1.2.1",
- "level-codec": "~7.0.0",
- "level-errors": "~1.0.3",
- "level-iterator-stream": "~1.3.0",
- "prr": "~1.0.1",
- "semver": "~5.4.1",
- "xtend": "~4.0.0"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "dev": true
- },
- "memdown": {
- "version": "1.4.1",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.1",
- "functional-red-black-tree": "^1.0.1",
- "immediate": "^3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "merkle-patricia-tree": {
- "version": "2.3.2",
- "dev": true,
- "requires": {
- "async": "^1.4.2",
- "ethereumjs-util": "^5.0.0",
- "level-ws": "0.0.0",
- "levelup": "^1.2.1",
- "memdown": "^1.0.0",
- "readable-stream": "^2.0.0",
- "rlp": "^2.0.0",
- "semaphore": ">=1.0.1"
- },
- "dependencies": {
- "async": {
- "version": "1.5.2",
- "dev": true
- },
- "ethereumjs-util": {
- "version": "5.2.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- }
- }
- },
- "object-keys": {
- "version": "0.4.0",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "dev": true
- },
- "string_decoder": {
- "version": "0.10.31",
- "dev": true
- }
- }
- },
- "ethereumjs-wallet": {
- "version": "0.6.5",
- "dev": true,
- "optional": true,
- "requires": {
- "aes-js": "^3.1.1",
- "bs58check": "^2.1.2",
- "ethereum-cryptography": "^0.1.3",
- "ethereumjs-util": "^6.0.0",
- "randombytes": "^2.0.6",
- "safe-buffer": "^5.1.2",
- "scryptsy": "^1.2.1",
- "utf8": "^3.0.0",
- "uuid": "^3.3.2"
- }
- },
- "ethjs-unit": {
- "version": "0.1.6",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "4.11.6",
- "number-to-bn": "1.7.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.11.6",
- "dev": true,
- "optional": true
- }
- }
- },
- "ethjs-util": {
- "version": "0.1.6",
- "dev": true,
- "requires": {
- "is-hex-prefixed": "1.0.0",
- "strip-hex-prefix": "1.0.0"
- }
- },
- "eventemitter3": {
- "version": "4.0.4",
- "dev": true,
- "optional": true
- },
- "events": {
- "version": "3.2.0",
- "dev": true
- },
- "evp_bytestokey": {
- "version": "1.0.3",
- "dev": true,
- "requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "dev": true
- }
- }
- },
- "express": {
- "version": "4.17.1",
- "dev": true,
- "optional": true,
- "requires": {
- "accepts": "~1.3.7",
- "array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
- "content-type": "~1.0.4",
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.1.2",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "dev": true,
- "optional": true
- },
- "qs": {
- "version": "6.7.0",
- "dev": true,
- "optional": true
- },
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true,
- "optional": true
- }
- }
- },
- "ext": {
- "version": "1.4.0",
- "dev": true,
- "requires": {
- "type": "^2.0.0"
- },
- "dependencies": {
- "type": {
- "version": "2.1.0",
- "dev": true
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "dev": true
- },
- "extend-shallow": {
- "version": "3.0.2",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "extglob": {
- "version": "2.0.4",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "dev": true
- }
- }
- },
- "extsprintf": {
- "version": "1.3.0",
- "dev": true
- },
- "fake-merkle-patricia-tree": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "checkpoint-store": "^1.1.0"
- }
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "dev": true
- },
- "fetch-ponyfill": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "node-fetch": "~1.7.1"
- },
- "dependencies": {
- "is-stream": {
- "version": "1.1.0",
- "dev": true
- },
- "node-fetch": {
- "version": "1.7.3",
- "dev": true,
- "requires": {
- "encoding": "^0.1.11",
- "is-stream": "^1.0.1"
- }
- }
- }
- },
- "finalhandler": {
- "version": "1.1.2",
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "dev": true,
- "optional": true
- }
- }
- },
- "find-yarn-workspace-root": {
- "version": "1.2.1",
- "dev": true,
- "requires": {
- "fs-extra": "^4.0.3",
- "micromatch": "^3.1.4"
- },
- "dependencies": {
- "braces": {
- "version": "2.3.2",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fs-extra": {
- "version": "4.0.3",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
- "flow-stoplight": {
- "version": "1.0.0",
- "dev": true
- },
- "for-each": {
- "version": "0.3.3",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.3"
- }
- },
- "for-in": {
- "version": "1.0.2",
- "dev": true
- },
- "forever-agent": {
- "version": "0.6.1",
- "dev": true
- },
- "form-data": {
- "version": "2.3.3",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "forwarded": {
- "version": "0.1.2",
- "dev": true,
- "optional": true
- },
- "fragment-cache": {
- "version": "0.2.1",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "fresh": {
- "version": "0.5.2",
- "dev": true,
- "optional": true
- },
- "fs-extra": {
- "version": "7.0.1",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "dev": true
- },
- "function-bind": {
- "version": "1.1.1",
- "dev": true
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.0.2",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- }
- },
- "get-stream": {
- "version": "5.2.0",
- "dev": true,
- "optional": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "dev": true
- },
- "getpass": {
- "version": "0.1.7",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob": {
- "version": "7.1.3",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "global": {
- "version": "4.4.0",
- "dev": true,
- "requires": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
- "got": {
- "version": "9.6.0",
- "dev": true,
- "optional": true,
- "requires": {
- "@sindresorhus/is": "^0.14.0",
- "@szmarczak/http-timer": "^1.1.2",
- "cacheable-request": "^6.0.0",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^4.1.0",
- "lowercase-keys": "^1.0.1",
- "mimic-response": "^1.0.1",
- "p-cancelable": "^1.0.0",
- "to-readable-stream": "^1.0.0",
- "url-parse-lax": "^3.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "4.1.0",
- "dev": true,
- "optional": true,
- "requires": {
- "pump": "^3.0.0"
- }
- }
- }
- },
- "graceful-fs": {
- "version": "4.2.4",
- "dev": true
- },
- "har-schema": {
- "version": "2.0.0",
- "dev": true
- },
- "har-validator": {
- "version": "5.1.5",
- "dev": true,
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- }
- },
- "has": {
- "version": "1.0.3",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-ansi": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "dev": true
- }
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "dev": true
- },
- "has-symbol-support-x": {
- "version": "1.4.2",
- "dev": true,
- "optional": true
- },
- "has-symbols": {
- "version": "1.0.1",
- "dev": true
- },
- "has-to-string-tag-x": {
- "version": "1.4.1",
- "dev": true,
- "optional": true,
- "requires": {
- "has-symbol-support-x": "^1.4.1"
- }
- },
- "has-value": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "has-values": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "hash-base": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
- "hash.js": {
- "version": "1.1.7",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "heap": {
- "version": "0.2.6",
- "dev": true
- },
- "hmac-drbg": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "home-or-tmp": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.1"
- }
- },
- "http-cache-semantics": {
- "version": "4.1.0",
- "dev": true,
- "optional": true
- },
- "http-errors": {
- "version": "1.7.2",
- "dev": true,
- "optional": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "dev": true,
- "optional": true
- }
- }
- },
- "http-https": {
- "version": "1.0.0",
- "dev": true,
- "optional": true
- },
- "http-signature": {
- "version": "1.2.0",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "idna-uts46-hx": {
- "version": "2.3.1",
- "dev": true,
- "optional": true,
- "requires": {
- "punycode": "2.1.0"
- },
- "dependencies": {
- "punycode": {
- "version": "2.1.0",
- "dev": true,
- "optional": true
- }
- }
- },
- "ieee754": {
- "version": "1.2.1",
- "dev": true
- },
- "immediate": {
- "version": "3.2.3",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "dev": true
- },
- "invariant": {
- "version": "2.2.4",
- "dev": true,
- "requires": {
- "loose-envify": "^1.0.0"
- }
- },
- "ipaddr.js": {
- "version": "1.9.1",
- "dev": true,
- "optional": true
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-arguments": {
- "version": "1.1.0",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0"
- }
- },
- "is-callable": {
- "version": "1.2.2",
- "dev": true
- },
- "is-ci": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "ci-info": "^2.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-date-object": {
- "version": "1.0.2",
- "dev": true
- },
- "is-descriptor": {
- "version": "1.0.2",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "is-extendable": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- },
- "is-finite": {
- "version": "1.1.0",
- "dev": true
- },
- "is-fn": {
- "version": "1.0.0",
- "dev": true
- },
- "is-function": {
- "version": "1.0.2",
- "dev": true
- },
- "is-hex-prefixed": {
- "version": "1.0.0",
- "dev": true
- },
- "is-negative-zero": {
- "version": "2.0.1",
- "dev": true
- },
- "is-object": {
- "version": "1.0.2",
- "dev": true,
- "optional": true
- },
- "is-plain-obj": {
- "version": "1.1.0",
- "dev": true,
- "optional": true
- },
- "is-plain-object": {
- "version": "2.0.4",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "is-regex": {
- "version": "1.1.1",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.1"
- }
- },
- "is-retry-allowed": {
- "version": "1.2.0",
- "dev": true,
- "optional": true
- },
- "is-symbol": {
- "version": "1.0.3",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.1"
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "dev": true
- },
- "is-windows": {
- "version": "1.0.2",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "dev": true
- },
- "isstream": {
- "version": "0.1.2",
- "dev": true
- },
- "isurl": {
- "version": "1.0.0",
- "dev": true,
- "optional": true,
- "requires": {
- "has-to-string-tag-x": "^1.2.0",
- "is-object": "^1.0.1"
- }
- },
- "js-sha3": {
- "version": "0.5.7",
- "dev": true,
- "optional": true
- },
- "js-tokens": {
- "version": "4.0.0",
- "dev": true
- },
- "jsbn": {
- "version": "0.1.1",
- "dev": true
- },
- "json-buffer": {
- "version": "3.0.0",
- "dev": true,
- "optional": true
- },
- "json-rpc-engine": {
- "version": "3.8.0",
- "dev": true,
- "requires": {
- "async": "^2.0.1",
- "babel-preset-env": "^1.7.0",
- "babelify": "^7.3.0",
- "json-rpc-error": "^2.0.0",
- "promise-to-callback": "^1.0.0",
- "safe-event-emitter": "^1.0.1"
- }
- },
- "json-rpc-error": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1"
- }
- },
- "json-rpc-random-id": {
- "version": "1.0.1",
- "dev": true
- },
- "json-schema": {
- "version": "0.2.3",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "dev": true
- },
- "json-stable-stringify": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "jsonify": "~0.0.0"
- }
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "dev": true
- },
- "jsonfile": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jsonify": {
- "version": "0.0.0",
- "dev": true
- },
- "jsprim": {
- "version": "1.4.1",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "keccak": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
- }
- },
- "keyv": {
- "version": "3.1.0",
- "dev": true,
- "optional": true,
- "requires": {
- "json-buffer": "3.0.0"
- }
- },
- "kind-of": {
- "version": "6.0.3",
- "dev": true
- },
- "klaw-sync": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11"
- }
- },
- "level-codec": {
- "version": "9.0.2",
- "dev": true,
- "requires": {
- "buffer": "^5.6.0"
- }
- },
- "level-errors": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "errno": "~0.1.1"
- }
- },
- "level-iterator-stream": {
- "version": "2.0.3",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.5",
- "xtend": "^4.0.0"
- }
- },
- "level-mem": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "level-packager": "~4.0.0",
- "memdown": "~3.0.0"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "dev": true
- },
- "memdown": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~5.0.0",
- "functional-red-black-tree": "~1.0.1",
- "immediate": "~3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true
- }
- }
- },
- "level-packager": {
- "version": "4.0.1",
- "dev": true,
- "requires": {
- "encoding-down": "~5.0.0",
- "levelup": "^3.0.0"
- }
- },
- "level-post": {
- "version": "1.0.7",
- "dev": true,
- "requires": {
- "ltgt": "^2.1.2"
- }
- },
- "level-sublevel": {
- "version": "6.6.4",
- "dev": true,
- "requires": {
- "bytewise": "~1.1.0",
- "level-codec": "^9.0.0",
- "level-errors": "^2.0.0",
- "level-iterator-stream": "^2.0.3",
- "ltgt": "~2.1.1",
- "pull-defer": "^0.2.2",
- "pull-level": "^2.0.3",
- "pull-stream": "^3.6.8",
- "typewiselite": "~1.0.0",
- "xtend": "~4.0.0"
- }
- },
- "level-ws": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.8",
- "xtend": "^4.0.1"
- }
- },
- "levelup": {
- "version": "3.1.1",
- "dev": true,
- "requires": {
- "deferred-leveldown": "~4.0.0",
- "level-errors": "~2.0.0",
- "level-iterator-stream": "~3.0.0",
- "xtend": "~4.0.0"
- },
- "dependencies": {
- "level-iterator-stream": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "xtend": "^4.0.0"
- }
- }
- }
- },
- "lodash": {
- "version": "4.17.20",
- "dev": true
- },
- "looper": {
- "version": "2.0.0",
- "dev": true
- },
- "loose-envify": {
- "version": "1.4.0",
- "dev": true,
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "dev": true,
- "optional": true
- },
- "lru-cache": {
- "version": "5.1.1",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "ltgt": {
- "version": "2.1.3",
- "dev": true
- },
- "map-cache": {
- "version": "0.2.2",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "md5.js": {
- "version": "1.3.5",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "media-typer": {
- "version": "0.3.0",
- "dev": true,
- "optional": true
- },
- "merge-descriptors": {
- "version": "1.0.1",
- "dev": true,
- "optional": true
- },
- "merkle-patricia-tree": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "async": "^2.6.1",
- "ethereumjs-util": "^5.2.0",
- "level-mem": "^3.0.1",
- "level-ws": "^1.0.0",
- "readable-stream": "^3.0.6",
- "rlp": "^2.0.0",
- "semaphore": ">=1.0.1"
- },
- "dependencies": {
- "ethereumjs-util": {
- "version": "5.2.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "readable-stream": {
- "version": "3.6.0",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
- "methods": {
- "version": "1.1.2",
- "dev": true,
- "optional": true
- },
- "miller-rabin": {
- "version": "4.0.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- }
- },
- "mime": {
- "version": "1.6.0",
- "dev": true,
- "optional": true
- },
- "mime-db": {
- "version": "1.45.0",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.28",
- "dev": true,
- "requires": {
- "mime-db": "1.45.0"
- }
- },
- "mimic-response": {
- "version": "1.0.1",
- "dev": true,
- "optional": true
- },
- "min-document": {
- "version": "2.19.0",
- "dev": true,
- "requires": {
- "dom-walk": "^0.1.0"
- }
- },
- "minimalistic-assert": {
- "version": "1.0.1",
- "dev": true
- },
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "dev": true
- },
- "minizlib": {
- "version": "1.3.3",
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.9.0"
- },
- "dependencies": {
- "minipass": {
- "version": "2.9.0",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- }
- }
- },
- "mixin-deep": {
- "version": "1.3.2",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- }
- },
- "mkdirp": {
- "version": "0.5.5",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "mkdirp-promise": {
- "version": "5.0.1",
- "dev": true,
- "optional": true,
- "requires": {
- "mkdirp": "*"
- }
- },
- "mock-fs": {
- "version": "4.13.0",
- "dev": true,
- "optional": true
- },
- "ms": {
- "version": "2.1.3",
- "dev": true
- },
- "multibase": {
- "version": "0.6.1",
- "dev": true,
- "optional": true,
- "requires": {
- "base-x": "^3.0.8",
- "buffer": "^5.5.0"
- }
- },
- "multicodec": {
- "version": "0.5.7",
- "dev": true,
- "optional": true,
- "requires": {
- "varint": "^5.0.0"
- }
- },
- "multihashes": {
- "version": "0.4.21",
- "dev": true,
- "optional": true,
- "requires": {
- "buffer": "^5.5.0",
- "multibase": "^0.7.0",
- "varint": "^5.0.0"
- },
- "dependencies": {
- "multibase": {
- "version": "0.7.0",
- "dev": true,
- "optional": true,
- "requires": {
- "base-x": "^3.0.8",
- "buffer": "^5.5.0"
- }
- }
- }
- },
- "nano-json-stream-parser": {
- "version": "0.1.2",
- "dev": true,
- "optional": true
- },
- "nanomatch": {
- "version": "1.2.13",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- }
- },
- "negotiator": {
- "version": "0.6.2",
- "dev": true,
- "optional": true
- },
- "next-tick": {
- "version": "1.0.0",
- "dev": true
- },
- "nice-try": {
- "version": "1.0.5",
- "dev": true
- },
- "node-addon-api": {
- "version": "2.0.2",
- "bundled": true,
- "dev": true
- },
- "node-fetch": {
- "version": "2.1.2",
- "dev": true
- },
- "node-gyp-build": {
- "version": "4.2.3",
- "bundled": true,
- "dev": true
- },
- "normalize-url": {
- "version": "4.5.0",
- "dev": true,
- "optional": true
- },
- "number-to-bn": {
- "version": "1.7.0",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "4.11.6",
- "strip-hex-prefix": "1.0.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.11.6",
- "dev": true,
- "optional": true
- }
- }
- },
- "oauth-sign": {
- "version": "0.9.0",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "dev": true
- },
- "object-copy": {
- "version": "0.1.0",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "dev": true
- }
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-inspect": {
- "version": "1.9.0",
- "dev": true
- },
- "object-is": {
- "version": "1.1.4",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3"
- }
- },
- "object-keys": {
- "version": "1.1.1",
- "dev": true
- },
- "object-visit": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- }
- },
- "object.assign": {
- "version": "4.1.2",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- }
- },
- "object.getownpropertydescriptors": {
- "version": "2.1.1",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.1"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "oboe": {
- "version": "2.1.4",
- "dev": true,
- "optional": true,
- "requires": {
- "http-https": "^1.0.0"
- }
- },
- "on-finished": {
- "version": "2.3.0",
- "dev": true,
- "optional": true,
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "dev": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "dev": true
- },
- "p-cancelable": {
- "version": "1.1.0",
- "dev": true,
- "optional": true
- },
- "p-timeout": {
- "version": "1.2.1",
- "dev": true,
- "optional": true,
- "requires": {
- "p-finally": "^1.0.0"
- },
- "dependencies": {
- "p-finally": {
- "version": "1.0.0",
- "dev": true,
- "optional": true
- }
- }
- },
- "parse-asn1": {
- "version": "5.1.6",
- "dev": true,
- "optional": true,
- "requires": {
- "asn1.js": "^5.2.0",
- "browserify-aes": "^1.0.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
- }
- },
- "parse-headers": {
- "version": "2.0.3",
- "dev": true
- },
- "parseurl": {
- "version": "1.3.3",
- "dev": true,
- "optional": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "dev": true
- },
- "patch-package": {
- "version": "6.2.2",
- "dev": true,
- "requires": {
- "@yarnpkg/lockfile": "^1.1.0",
- "chalk": "^2.4.2",
- "cross-spawn": "^6.0.5",
- "find-yarn-workspace-root": "^1.2.1",
- "fs-extra": "^7.0.1",
- "is-ci": "^2.0.0",
- "klaw-sync": "^6.0.0",
- "minimist": "^1.2.0",
- "rimraf": "^2.6.3",
- "semver": "^5.6.0",
- "slash": "^2.0.0",
- "tmp": "^0.0.33"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "path-key": {
- "version": "2.0.1",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "dev": true
- },
- "shebang-command": {
- "version": "1.2.0",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "dev": true
- },
- "slash": {
- "version": "2.0.0",
- "dev": true
- },
- "tmp": {
- "version": "0.0.33",
- "dev": true,
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "which": {
- "version": "1.3.1",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "dev": true
- },
- "path-to-regexp": {
- "version": "0.1.7",
- "dev": true,
- "optional": true
- },
- "pbkdf2": {
- "version": "3.1.1",
- "dev": true,
- "requires": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "dev": true
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "dev": true
- },
- "precond": {
- "version": "0.2.3",
- "dev": true
- },
- "prepend-http": {
- "version": "2.0.0",
- "dev": true,
- "optional": true
- },
- "private": {
- "version": "0.1.8",
- "dev": true
- },
- "process": {
- "version": "0.11.10",
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "dev": true
- },
- "promise-to-callback": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "is-fn": "^1.0.0",
- "set-immediate-shim": "^1.0.1"
- }
- },
- "proxy-addr": {
- "version": "2.0.6",
- "dev": true,
- "optional": true,
- "requires": {
- "forwarded": "~0.1.2",
- "ipaddr.js": "1.9.1"
- }
- },
- "prr": {
- "version": "1.0.1",
- "dev": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "dev": true
- },
- "psl": {
- "version": "1.8.0",
- "dev": true
- },
- "public-encrypt": {
- "version": "4.0.3",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "pull-cat": {
- "version": "1.1.11",
- "dev": true
- },
- "pull-defer": {
- "version": "0.2.3",
- "dev": true
- },
- "pull-level": {
- "version": "2.0.4",
- "dev": true,
- "requires": {
- "level-post": "^1.0.7",
- "pull-cat": "^1.1.9",
- "pull-live": "^1.0.1",
- "pull-pushable": "^2.0.0",
- "pull-stream": "^3.4.0",
- "pull-window": "^2.1.4",
- "stream-to-pull-stream": "^1.7.1"
- }
- },
- "pull-live": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "pull-cat": "^1.1.9",
- "pull-stream": "^3.4.0"
- }
- },
- "pull-pushable": {
- "version": "2.2.0",
- "dev": true
- },
- "pull-stream": {
- "version": "3.6.14",
- "dev": true
- },
- "pull-window": {
- "version": "2.1.4",
- "dev": true,
- "requires": {
- "looper": "^2.0.0"
- }
- },
- "pump": {
- "version": "3.0.0",
- "dev": true,
- "optional": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "dev": true
- },
- "qs": {
- "version": "6.5.2",
- "dev": true
- },
- "query-string": {
- "version": "5.1.1",
- "dev": true,
- "optional": true,
- "requires": {
- "decode-uri-component": "^0.2.0",
- "object-assign": "^4.1.0",
- "strict-uri-encode": "^1.0.0"
- }
- },
- "randombytes": {
- "version": "2.1.0",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "randomfill": {
- "version": "1.0.4",
- "dev": true,
- "optional": true,
- "requires": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
- "range-parser": {
- "version": "1.2.1",
- "dev": true,
- "optional": true
- },
- "raw-body": {
- "version": "2.4.0",
- "dev": true,
- "optional": true,
- "requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true
- }
- }
- },
- "regenerate": {
- "version": "1.4.2",
- "dev": true
- },
- "regenerator-runtime": {
- "version": "0.11.1",
- "dev": true
- },
- "regenerator-transform": {
- "version": "0.10.1",
- "dev": true,
- "requires": {
- "babel-runtime": "^6.18.0",
- "babel-types": "^6.19.0",
- "private": "^0.1.6"
- }
- },
- "regex-not": {
- "version": "1.0.2",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "regexp.prototype.flags": {
- "version": "1.3.0",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1"
- },
- "dependencies": {
- "es-abstract": {
- "version": "1.17.7",
- "dev": true,
- "requires": {
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1",
- "is-callable": "^1.2.2",
- "is-regex": "^1.1.1",
- "object-inspect": "^1.8.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.1",
- "string.prototype.trimend": "^1.0.1",
- "string.prototype.trimstart": "^1.0.1"
- }
- }
- }
- },
- "regexpu-core": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "regenerate": "^1.2.1",
- "regjsgen": "^0.2.0",
- "regjsparser": "^0.1.4"
- }
- },
- "regjsgen": {
- "version": "0.2.0",
- "dev": true
- },
- "regjsparser": {
- "version": "0.1.5",
- "dev": true,
- "requires": {
- "jsesc": "~0.5.0"
- },
- "dependencies": {
- "jsesc": {
- "version": "0.5.0",
- "dev": true
- }
- }
- },
- "repeat-element": {
- "version": "1.1.3",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "dev": true
- },
- "repeating": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "is-finite": "^1.0.0"
- }
- },
- "request": {
- "version": "2.88.2",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- }
- },
- "resolve-url": {
- "version": "0.2.1",
- "dev": true
- },
- "responselike": {
- "version": "1.0.2",
- "dev": true,
- "optional": true,
- "requires": {
- "lowercase-keys": "^1.0.0"
- }
- },
- "resumer": {
- "version": "0.0.0",
- "dev": true,
- "requires": {
- "through": "~2.3.4"
- }
- },
- "ret": {
- "version": "0.1.15",
- "dev": true
- },
- "rimraf": {
- "version": "2.6.3",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "ripemd160": {
- "version": "2.0.2",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "rlp": {
- "version": "2.2.6",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.1"
- }
- },
- "rustbn.js": {
- "version": "0.2.0",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.2.1",
- "dev": true
- },
- "safe-event-emitter": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "events": "^3.0.0"
- }
- },
- "safe-regex": {
- "version": "1.1.0",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "dev": true
- },
- "scrypt-js": {
- "version": "3.0.1",
- "dev": true
- },
- "scryptsy": {
- "version": "1.2.1",
- "dev": true,
- "optional": true,
- "requires": {
- "pbkdf2": "^3.0.3"
- }
- },
- "secp256k1": {
- "version": "4.0.2",
- "dev": true,
- "requires": {
- "elliptic": "^6.5.2",
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
- }
- },
- "seedrandom": {
- "version": "3.0.1",
- "dev": true
- },
- "semaphore": {
- "version": "1.1.0",
- "dev": true
- },
- "send": {
- "version": "0.17.1",
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "dev": true,
- "optional": true
- }
- }
- },
- "ms": {
- "version": "2.1.1",
- "dev": true,
- "optional": true
- }
- }
- },
- "serve-static": {
- "version": "1.14.1",
- "dev": true,
- "optional": true,
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- }
- },
- "servify": {
- "version": "0.1.12",
- "dev": true,
- "optional": true,
- "requires": {
- "body-parser": "^1.16.0",
- "cors": "^2.8.1",
- "express": "^4.14.0",
- "request": "^2.79.0",
- "xhr": "^2.3.3"
- }
- },
- "set-immediate-shim": {
- "version": "1.0.1",
- "dev": true
- },
- "set-value": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "dev": true
- }
- }
- },
- "setimmediate": {
- "version": "1.0.5",
- "dev": true
- },
- "setprototypeof": {
- "version": "1.1.1",
- "dev": true,
- "optional": true
- },
- "sha.js": {
- "version": "2.4.11",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "simple-concat": {
- "version": "1.0.1",
- "dev": true,
- "optional": true
- },
- "simple-get": {
- "version": "2.8.1",
- "dev": true,
- "optional": true,
- "requires": {
- "decompress-response": "^3.3.0",
- "once": "^1.3.1",
- "simple-concat": "^1.0.0"
- }
- },
- "snapdragon": {
- "version": "0.8.2",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "dev": true
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "dev": true
- },
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "source-map": {
- "version": "0.5.7",
- "dev": true
- },
- "source-map-resolve": {
- "version": "0.5.3",
- "dev": true,
- "requires": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "source-map-support": {
- "version": "0.5.12",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "dev": true
- }
- }
- },
- "source-map-url": {
- "version": "0.4.0",
- "dev": true
- },
- "split-string": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
- "sshpk": {
- "version": "1.16.1",
- "dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "dependencies": {
- "tweetnacl": {
- "version": "0.14.5",
- "dev": true
- }
- }
- },
- "static-extend": {
- "version": "0.1.2",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "dev": true
- }
- }
- },
- "statuses": {
- "version": "1.5.0",
- "dev": true,
- "optional": true
- },
- "stream-to-pull-stream": {
- "version": "1.7.3",
- "dev": true,
- "requires": {
- "looper": "^3.0.0",
- "pull-stream": "^3.2.3"
- },
- "dependencies": {
- "looper": {
- "version": "3.0.0",
- "dev": true
- }
- }
- },
- "strict-uri-encode": {
- "version": "1.1.0",
- "dev": true,
- "optional": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true
- }
- }
- },
- "string.prototype.trim": {
- "version": "1.2.3",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.1"
- }
- },
- "string.prototype.trimend": {
- "version": "1.0.3",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.3",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3"
- }
- },
- "strip-hex-prefix": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "is-hex-prefixed": "1.0.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "swarm-js": {
- "version": "0.1.40",
- "dev": true,
- "optional": true,
- "requires": {
- "bluebird": "^3.5.0",
- "buffer": "^5.0.5",
- "eth-lib": "^0.1.26",
- "fs-extra": "^4.0.2",
- "got": "^7.1.0",
- "mime-types": "^2.1.16",
- "mkdirp-promise": "^5.0.1",
- "mock-fs": "^4.1.0",
- "setimmediate": "^1.0.5",
- "tar": "^4.0.2",
- "xhr-request": "^1.0.1"
- },
- "dependencies": {
- "fs-extra": {
- "version": "4.0.3",
- "dev": true,
- "optional": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "get-stream": {
- "version": "3.0.0",
- "dev": true,
- "optional": true
- },
- "got": {
- "version": "7.1.0",
- "dev": true,
- "optional": true,
- "requires": {
- "decompress-response": "^3.2.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-plain-obj": "^1.1.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "isurl": "^1.0.0-alpha5",
- "lowercase-keys": "^1.0.0",
- "p-cancelable": "^0.3.0",
- "p-timeout": "^1.1.1",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "url-parse-lax": "^1.0.0",
- "url-to-options": "^1.0.1"
- }
- },
- "is-stream": {
- "version": "1.1.0",
- "dev": true,
- "optional": true
- },
- "p-cancelable": {
- "version": "0.3.0",
- "dev": true,
- "optional": true
- },
- "prepend-http": {
- "version": "1.0.4",
- "dev": true,
- "optional": true
- },
- "url-parse-lax": {
- "version": "1.0.0",
- "dev": true,
- "optional": true,
- "requires": {
- "prepend-http": "^1.0.1"
- }
- }
- }
- },
- "tape": {
- "version": "4.13.3",
- "dev": true,
- "requires": {
- "deep-equal": "~1.1.1",
- "defined": "~1.0.0",
- "dotignore": "~0.1.2",
- "for-each": "~0.3.3",
- "function-bind": "~1.1.1",
- "glob": "~7.1.6",
- "has": "~1.0.3",
- "inherits": "~2.0.4",
- "is-regex": "~1.0.5",
- "minimist": "~1.2.5",
- "object-inspect": "~1.7.0",
- "resolve": "~1.17.0",
- "resumer": "~0.0.0",
- "string.prototype.trim": "~1.2.1",
- "through": "~2.3.8"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.6",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "is-regex": {
- "version": "1.0.5",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "object-inspect": {
- "version": "1.7.0",
- "dev": true
- },
- "resolve": {
- "version": "1.17.0",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- }
- }
- },
- "tar": {
- "version": "4.4.13",
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- },
- "dependencies": {
- "fs-minipass": {
- "version": "1.2.7",
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.6.0"
- }
- },
- "minipass": {
- "version": "2.9.0",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- }
- }
- },
- "through": {
- "version": "2.3.8",
- "dev": true
- },
- "through2": {
- "version": "2.0.5",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- },
- "timed-out": {
- "version": "4.0.1",
- "dev": true,
- "optional": true
- },
- "tmp": {
- "version": "0.1.0",
- "dev": true,
- "requires": {
- "rimraf": "^2.6.3"
- }
- },
- "to-object-path": {
- "version": "0.3.0",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "dev": true
- },
- "kind-of": {
- "version": "3.2.2",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-readable-stream": {
- "version": "1.0.0",
- "dev": true,
- "optional": true
- },
- "to-regex": {
- "version": "3.0.2",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "toidentifier": {
- "version": "1.0.0",
- "dev": true,
- "optional": true
- },
- "tough-cookie": {
- "version": "2.5.0",
- "dev": true,
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "trim-right": {
- "version": "1.0.1",
- "dev": true
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "1.0.3",
- "dev": true
- },
- "tweetnacl-util": {
- "version": "0.15.1",
- "dev": true
- },
- "type": {
- "version": "1.2.0",
- "dev": true
- },
- "type-is": {
- "version": "1.6.18",
- "dev": true,
- "optional": true,
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- }
- },
- "typedarray": {
- "version": "0.0.6",
- "dev": true
- },
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
- "typewise": {
- "version": "1.0.3",
- "dev": true,
- "requires": {
- "typewise-core": "^1.2.0"
- }
- },
- "typewise-core": {
- "version": "1.2.0",
- "dev": true
- },
- "typewiselite": {
- "version": "1.0.0",
- "dev": true
- },
- "ultron": {
- "version": "1.1.1",
- "dev": true,
- "optional": true
- },
- "underscore": {
- "version": "1.9.1",
- "dev": true,
- "optional": true
- },
- "union-value": {
- "version": "1.0.1",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "0.1.1",
- "dev": true
- }
- }
- },
- "universalify": {
- "version": "0.1.2",
- "dev": true
- },
- "unorm": {
- "version": "1.6.0",
- "dev": true
- },
- "unpipe": {
- "version": "1.0.0",
- "dev": true,
- "optional": true
- },
- "unset-value": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "dev": true
- }
- }
- },
- "uri-js": {
- "version": "4.4.1",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "urix": {
- "version": "0.1.0",
- "dev": true
- },
- "url-parse-lax": {
- "version": "3.0.0",
- "dev": true,
- "optional": true,
- "requires": {
- "prepend-http": "^2.0.0"
- }
- },
- "url-set-query": {
- "version": "1.0.0",
- "dev": true,
- "optional": true
- },
- "url-to-options": {
- "version": "1.0.1",
- "dev": true,
- "optional": true
- },
- "use": {
- "version": "3.1.1",
- "dev": true
- },
- "utf-8-validate": {
- "version": "5.0.4",
- "dev": true,
- "requires": {
- "node-gyp-build": "^4.2.0"
- }
- },
- "utf8": {
- "version": "3.0.0",
- "dev": true,
- "optional": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "dev": true
- },
- "util.promisify": {
- "version": "1.1.1",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "for-each": "^0.3.3",
- "has-symbols": "^1.0.1",
- "object.getownpropertydescriptors": "^2.1.1"
- }
- },
- "utils-merge": {
- "version": "1.0.1",
- "dev": true,
- "optional": true
- },
- "uuid": {
- "version": "3.4.0",
- "dev": true
- },
- "varint": {
- "version": "5.0.2",
- "dev": true,
- "optional": true
- },
- "vary": {
- "version": "1.1.2",
- "dev": true,
- "optional": true
- },
- "verror": {
- "version": "1.10.0",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "web3": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "web3-bzz": "1.2.11",
- "web3-core": "1.2.11",
- "web3-eth": "1.2.11",
- "web3-eth-personal": "1.2.11",
- "web3-net": "1.2.11",
- "web3-shh": "1.2.11",
- "web3-utils": "1.2.11"
- }
- },
- "web3-bzz": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "@types/node": "^12.12.6",
- "got": "9.6.0",
- "swarm-js": "^0.1.40",
- "underscore": "1.9.1"
- },
- "dependencies": {
- "@types/node": {
- "version": "12.19.12",
- "dev": true,
- "optional": true
- }
- }
- },
- "web3-core": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "@types/bn.js": "^4.11.5",
- "@types/node": "^12.12.6",
- "bignumber.js": "^9.0.0",
- "web3-core-helpers": "1.2.11",
- "web3-core-method": "1.2.11",
- "web3-core-requestmanager": "1.2.11",
- "web3-utils": "1.2.11"
- },
- "dependencies": {
- "@types/node": {
- "version": "12.19.12",
- "dev": true,
- "optional": true
- }
- }
- },
- "web3-core-helpers": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "underscore": "1.9.1",
- "web3-eth-iban": "1.2.11",
- "web3-utils": "1.2.11"
- }
- },
- "web3-core-method": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/transactions": "^5.0.0-beta.135",
- "underscore": "1.9.1",
- "web3-core-helpers": "1.2.11",
- "web3-core-promievent": "1.2.11",
- "web3-core-subscriptions": "1.2.11",
- "web3-utils": "1.2.11"
- }
- },
- "web3-core-promievent": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "eventemitter3": "4.0.4"
- }
- },
- "web3-core-requestmanager": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "underscore": "1.9.1",
- "web3-core-helpers": "1.2.11",
- "web3-providers-http": "1.2.11",
- "web3-providers-ipc": "1.2.11",
- "web3-providers-ws": "1.2.11"
- }
- },
- "web3-core-subscriptions": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "eventemitter3": "4.0.4",
- "underscore": "1.9.1",
- "web3-core-helpers": "1.2.11"
- }
- },
- "web3-eth": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "underscore": "1.9.1",
- "web3-core": "1.2.11",
- "web3-core-helpers": "1.2.11",
- "web3-core-method": "1.2.11",
- "web3-core-subscriptions": "1.2.11",
- "web3-eth-abi": "1.2.11",
- "web3-eth-accounts": "1.2.11",
- "web3-eth-contract": "1.2.11",
- "web3-eth-ens": "1.2.11",
- "web3-eth-iban": "1.2.11",
- "web3-eth-personal": "1.2.11",
- "web3-net": "1.2.11",
- "web3-utils": "1.2.11"
- }
- },
- "web3-eth-abi": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "@ethersproject/abi": "5.0.0-beta.153",
- "underscore": "1.9.1",
- "web3-utils": "1.2.11"
- }
- },
- "web3-eth-accounts": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "crypto-browserify": "3.12.0",
- "eth-lib": "0.2.8",
- "ethereumjs-common": "^1.3.2",
- "ethereumjs-tx": "^2.1.1",
- "scrypt-js": "^3.0.1",
- "underscore": "1.9.1",
- "uuid": "3.3.2",
- "web3-core": "1.2.11",
- "web3-core-helpers": "1.2.11",
- "web3-core-method": "1.2.11",
- "web3-utils": "1.2.11"
- },
- "dependencies": {
- "eth-lib": {
- "version": "0.2.8",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "^4.11.6",
- "elliptic": "^6.4.0",
- "xhr-request-promise": "^0.1.2"
- }
- },
- "uuid": {
- "version": "3.3.2",
- "dev": true,
- "optional": true
- }
- }
- },
- "web3-eth-contract": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "@types/bn.js": "^4.11.5",
- "underscore": "1.9.1",
- "web3-core": "1.2.11",
- "web3-core-helpers": "1.2.11",
- "web3-core-method": "1.2.11",
- "web3-core-promievent": "1.2.11",
- "web3-core-subscriptions": "1.2.11",
- "web3-eth-abi": "1.2.11",
- "web3-utils": "1.2.11"
- }
- },
- "web3-eth-ens": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "content-hash": "^2.5.2",
- "eth-ens-namehash": "2.0.8",
- "underscore": "1.9.1",
- "web3-core": "1.2.11",
- "web3-core-helpers": "1.2.11",
- "web3-core-promievent": "1.2.11",
- "web3-eth-abi": "1.2.11",
- "web3-eth-contract": "1.2.11",
- "web3-utils": "1.2.11"
- }
- },
- "web3-eth-iban": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.2.11"
- }
- },
- "web3-eth-personal": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "@types/node": "^12.12.6",
- "web3-core": "1.2.11",
- "web3-core-helpers": "1.2.11",
- "web3-core-method": "1.2.11",
- "web3-net": "1.2.11",
- "web3-utils": "1.2.11"
- },
- "dependencies": {
- "@types/node": {
- "version": "12.19.12",
- "dev": true,
- "optional": true
- }
- }
- },
- "web3-net": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "web3-core": "1.2.11",
- "web3-core-method": "1.2.11",
- "web3-utils": "1.2.11"
- }
- },
- "web3-provider-engine": {
- "version": "14.2.1",
- "dev": true,
- "requires": {
- "async": "^2.5.0",
- "backoff": "^2.5.0",
- "clone": "^2.0.0",
- "cross-fetch": "^2.1.0",
- "eth-block-tracker": "^3.0.0",
- "eth-json-rpc-infura": "^3.1.0",
- "eth-sig-util": "3.0.0",
- "ethereumjs-block": "^1.2.2",
- "ethereumjs-tx": "^1.2.0",
- "ethereumjs-util": "^5.1.5",
- "ethereumjs-vm": "^2.3.4",
- "json-rpc-error": "^2.0.0",
- "json-stable-stringify": "^1.0.1",
- "promise-to-callback": "^1.0.0",
- "readable-stream": "^2.2.9",
- "request": "^2.85.0",
- "semaphore": "^1.0.3",
- "ws": "^5.1.1",
- "xhr": "^2.2.0",
- "xtend": "^4.0.1"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.6.3",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- },
- "deferred-leveldown": {
- "version": "1.2.2",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.6.0"
- }
- },
- "eth-sig-util": {
- "version": "1.4.2",
- "dev": true,
- "requires": {
- "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git",
- "ethereumjs-util": "^5.1.1"
- }
- },
- "ethereumjs-account": {
- "version": "2.0.5",
- "dev": true,
- "requires": {
- "ethereumjs-util": "^5.0.0",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "ethereumjs-block": {
- "version": "1.7.1",
- "dev": true,
- "requires": {
- "async": "^2.0.1",
- "ethereum-common": "0.2.0",
- "ethereumjs-tx": "^1.2.2",
- "ethereumjs-util": "^5.0.0",
- "merkle-patricia-tree": "^2.1.2"
- },
- "dependencies": {
- "ethereum-common": {
- "version": "0.2.0",
- "dev": true
- }
- }
- },
- "ethereumjs-tx": {
- "version": "1.3.7",
- "dev": true,
- "requires": {
- "ethereum-common": "^0.0.18",
- "ethereumjs-util": "^5.0.0"
- }
- },
- "ethereumjs-util": {
- "version": "5.2.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "ethereumjs-vm": {
- "version": "2.6.0",
- "dev": true,
- "requires": {
- "async": "^2.1.2",
- "async-eventemitter": "^0.2.2",
- "ethereumjs-account": "^2.0.3",
- "ethereumjs-block": "~2.2.0",
- "ethereumjs-common": "^1.1.0",
- "ethereumjs-util": "^6.0.0",
- "fake-merkle-patricia-tree": "^1.0.1",
- "functional-red-black-tree": "^1.0.1",
- "merkle-patricia-tree": "^2.3.2",
- "rustbn.js": "~0.2.0",
- "safe-buffer": "^5.1.1"
- },
- "dependencies": {
- "ethereumjs-block": {
- "version": "2.2.2",
- "dev": true,
- "requires": {
- "async": "^2.0.1",
- "ethereumjs-common": "^1.5.0",
- "ethereumjs-tx": "^2.1.1",
- "ethereumjs-util": "^5.0.0",
- "merkle-patricia-tree": "^2.1.2"
- },
- "dependencies": {
- "ethereumjs-util": {
- "version": "5.2.1",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "^0.1.3",
- "rlp": "^2.0.0",
- "safe-buffer": "^5.1.1"
- }
- }
- }
- },
- "ethereumjs-tx": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "ethereumjs-common": "^1.5.0",
- "ethereumjs-util": "^6.0.0"
- }
- },
- "ethereumjs-util": {
- "version": "6.2.1",
- "dev": true,
- "requires": {
- "@types/bn.js": "^4.11.3",
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "0.1.6",
- "rlp": "^2.2.3"
- }
- }
- }
- },
- "isarray": {
- "version": "0.0.1",
- "dev": true
- },
- "level-codec": {
- "version": "7.0.1",
- "dev": true
- },
- "level-errors": {
- "version": "1.0.5",
- "dev": true,
- "requires": {
- "errno": "~0.1.1"
- }
- },
- "level-iterator-stream": {
- "version": "1.3.1",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "level-errors": "^1.0.3",
- "readable-stream": "^1.0.33",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.1.14",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- }
- }
- },
- "level-ws": {
- "version": "0.0.0",
- "dev": true,
- "requires": {
- "readable-stream": "~1.0.15",
- "xtend": "~2.1.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.0.34",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "xtend": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "object-keys": "~0.4.0"
- }
- }
- }
- },
- "levelup": {
- "version": "1.3.9",
- "dev": true,
- "requires": {
- "deferred-leveldown": "~1.2.1",
- "level-codec": "~7.0.0",
- "level-errors": "~1.0.3",
- "level-iterator-stream": "~1.3.0",
- "prr": "~1.0.1",
- "semver": "~5.4.1",
- "xtend": "~4.0.0"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "dev": true
- },
- "memdown": {
- "version": "1.4.1",
- "dev": true,
- "requires": {
- "abstract-leveldown": "~2.7.1",
- "functional-red-black-tree": "^1.0.1",
- "immediate": "^3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "abstract-leveldown": {
- "version": "2.7.2",
- "dev": true,
- "requires": {
- "xtend": "~4.0.0"
- }
- }
- }
- },
- "merkle-patricia-tree": {
- "version": "2.3.2",
- "dev": true,
- "requires": {
- "async": "^1.4.2",
- "ethereumjs-util": "^5.0.0",
- "level-ws": "0.0.0",
- "levelup": "^1.2.1",
- "memdown": "^1.0.0",
- "readable-stream": "^2.0.0",
- "rlp": "^2.0.0",
- "semaphore": ">=1.0.1"
- },
- "dependencies": {
- "async": {
- "version": "1.5.2",
- "dev": true
- }
- }
- },
- "object-keys": {
- "version": "0.4.0",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true
- },
- "semver": {
- "version": "5.4.1",
- "dev": true
- },
- "string_decoder": {
- "version": "0.10.31",
- "dev": true
- },
- "ws": {
- "version": "5.2.2",
- "dev": true,
- "requires": {
- "async-limiter": "~1.0.0"
- }
- }
- }
- },
- "web3-providers-http": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "web3-core-helpers": "1.2.11",
- "xhr2-cookies": "1.1.0"
- }
- },
- "web3-providers-ipc": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "oboe": "2.1.4",
- "underscore": "1.9.1",
- "web3-core-helpers": "1.2.11"
- }
- },
- "web3-providers-ws": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "eventemitter3": "4.0.4",
- "underscore": "1.9.1",
- "web3-core-helpers": "1.2.11",
- "websocket": "^1.0.31"
- }
- },
- "web3-shh": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "web3-core": "1.2.11",
- "web3-core-method": "1.2.11",
- "web3-core-subscriptions": "1.2.11",
- "web3-net": "1.2.11"
- }
- },
- "web3-utils": {
- "version": "1.2.11",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "^4.11.9",
- "eth-lib": "0.2.8",
- "ethereum-bloom-filters": "^1.0.6",
- "ethjs-unit": "0.1.6",
- "number-to-bn": "1.7.0",
- "randombytes": "^2.1.0",
- "underscore": "1.9.1",
- "utf8": "3.0.0"
- },
- "dependencies": {
- "eth-lib": {
- "version": "0.2.8",
- "dev": true,
- "optional": true,
- "requires": {
- "bn.js": "^4.11.6",
- "elliptic": "^6.4.0",
- "xhr-request-promise": "^0.1.2"
- }
- }
- }
- },
- "websocket": {
- "version": "1.0.32",
- "dev": true,
- "requires": {
- "bufferutil": "^4.0.1",
- "debug": "^2.2.0",
- "es5-ext": "^0.10.50",
- "typedarray-to-buffer": "^3.1.5",
- "utf-8-validate": "^5.0.2",
- "yaeti": "^0.0.6"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "dev": true
- }
- }
- },
- "whatwg-fetch": {
- "version": "2.0.4",
- "dev": true
- },
- "wrappy": {
- "version": "1.0.2",
- "dev": true
- },
- "ws": {
- "version": "3.3.3",
- "dev": true,
- "optional": true,
- "requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.1.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "dev": true,
- "optional": true
- }
- }
- },
- "xhr": {
- "version": "2.6.0",
- "dev": true,
- "requires": {
- "global": "~4.4.0",
- "is-function": "^1.0.1",
- "parse-headers": "^2.0.0",
- "xtend": "^4.0.0"
- }
- },
- "xhr-request": {
- "version": "1.1.0",
- "dev": true,
- "optional": true,
- "requires": {
- "buffer-to-arraybuffer": "^0.0.5",
- "object-assign": "^4.1.1",
- "query-string": "^5.0.1",
- "simple-get": "^2.7.0",
- "timed-out": "^4.0.1",
- "url-set-query": "^1.0.0",
- "xhr": "^2.0.4"
- }
- },
- "xhr-request-promise": {
- "version": "0.1.3",
- "dev": true,
- "optional": true,
- "requires": {
- "xhr-request": "^1.1.0"
- }
- },
- "xhr2-cookies": {
- "version": "1.1.0",
- "dev": true,
- "optional": true,
- "requires": {
- "cookiejar": "^2.1.1"
- }
- },
- "xtend": {
- "version": "4.0.2",
- "dev": true
- },
- "yaeti": {
- "version": "0.0.6",
- "dev": true
- },
- "yallist": {
- "version": "3.1.1",
- "dev": true
- }
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
- },
- "get-func-name": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
- "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"dev": true
},
- "get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "dev": true,
- "requires": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
- "graceful-fs": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
- "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
- },
- "growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA=="
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "dev": true
- },
- "har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- }
- },
- "hardhat": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.2.0.tgz",
- "integrity": "sha512-3g0qFoQTkR4gfcHDZr59vPfbSH2PiAyxzYblkAAHUNTPBadO5W26z5RWzDv6/lRu8SqZZ9/8AdGZX4IZEa8EDg==",
- "requires": {
- "@ethereumjs/block": "^3.2.1",
- "@ethereumjs/blockchain": "^5.2.1",
- "@ethereumjs/common": "^2.2.0",
- "@ethereumjs/tx": "^3.1.3",
- "@ethereumjs/vm": "^5.3.2",
- "@sentry/node": "^5.18.1",
- "@solidity-parser/parser": "^0.11.0",
- "@types/bn.js": "^5.1.0",
- "@types/lru-cache": "^5.1.0",
- "abort-controller": "^3.0.0",
- "adm-zip": "^0.4.16",
- "ansi-escapes": "^4.3.0",
- "chalk": "^2.4.2",
- "chokidar": "^3.4.0",
- "ci-info": "^2.0.0",
- "debug": "^4.1.1",
- "enquirer": "^2.3.0",
- "env-paths": "^2.2.0",
- "eth-sig-util": "^2.5.2",
- "ethereum-cryptography": "^0.1.2",
- "ethereumjs-abi": "^0.6.8",
- "ethereumjs-util": "^7.0.10",
- "find-up": "^2.1.0",
- "fp-ts": "1.19.3",
- "fs-extra": "^7.0.1",
- "glob": "^7.1.3",
- "immutable": "^4.0.0-rc.12",
- "io-ts": "1.10.4",
- "lodash": "^4.17.11",
- "merkle-patricia-tree": "^4.1.0",
- "mnemonist": "^0.38.0",
- "mocha": "^7.1.2",
- "node-fetch": "^2.6.7",
- "qs": "^6.7.0",
- "raw-body": "^2.4.1",
- "resolve": "1.17.0",
- "semver": "^6.3.0",
- "slash": "^3.0.0",
- "solc": "0.7.3",
- "source-map-support": "^0.5.13",
- "stacktrace-parser": "^0.1.10",
- "true-case-path": "^2.2.1",
- "tsort": "0.0.1",
- "uuid": "^3.3.2",
- "ws": "^7.2.1"
- }
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA=="
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
- "has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
- },
- "hash-base": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
- "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- }
- },
- "hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
- },
- "hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
- },
- "http-errors": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
- "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "https-proxy-agent": {
+ "node_modules/whatwg-url": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "idna-uts46-hx": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz",
- "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"dev": true,
- "requires": {
- "punycode": "2.1.0"
- }
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- },
- "immediate": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz",
- "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q=="
- },
- "immutable": {
- "version": "4.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0-rc.12.tgz",
- "integrity": "sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A=="
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
- "dev": true
- },
- "io-ts": {
- "version": "1.10.4",
- "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz",
- "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==",
- "requires": {
- "fp-ts": "^1.0.0"
- }
- },
- "ipaddr.js": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.0.tgz",
- "integrity": "sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w=="
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-bigint": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz",
- "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg=="
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-boolean-object": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz",
- "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==",
- "requires": {
- "call-bind": "^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.3",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
- "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ=="
- },
- "is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "dev": true,
- "requires": {
- "ci-info": "^2.0.0"
- }
- },
- "is-date-object": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
- "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
- },
- "is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
- },
- "is-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-hex-prefixed": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
- "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ="
- },
- "is-negative-zero": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w=="
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
- },
- "is-number-object": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz",
- "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw=="
- },
- "is-regex": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz",
- "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==",
- "requires": {
- "call-bind": "^1.0.2",
- "has-symbols": "^1.0.1"
- }
- },
- "is-string": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
- "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ=="
- },
- "is-symbol": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
- "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
- "requires": {
- "has-symbols": "^1.0.1"
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "is-url": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
- "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
- "dev": true
- },
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
- "dev": true
- },
- "is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "requires": {
- "is-docker": "^2.0.0"
- }
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
- "js-sha3": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
- "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
- },
- "js-yaml": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
- "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "keccak": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz",
- "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==",
- "requires": {
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
- }
- },
- "klaw": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
- "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
- "requires": {
- "graceful-fs": "^4.1.9"
- }
- },
- "klaw-sync": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
- "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11"
- }
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "dev": true,
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "level-codec": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz",
- "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==",
- "requires": {
- "buffer": "^5.6.0"
- }
- },
- "level-concat-iterator": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz",
- "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw=="
- },
- "level-errors": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz",
- "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==",
- "requires": {
- "errno": "~0.1.1"
- }
- },
- "level-iterator-stream": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz",
- "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==",
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0",
- "xtend": "^4.0.2"
- }
- },
- "level-mem": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz",
- "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==",
- "requires": {
- "level-packager": "^5.0.3",
- "memdown": "^5.0.0"
- }
- },
- "level-packager": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz",
- "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==",
- "requires": {
- "encoding-down": "^6.3.0",
- "levelup": "^4.3.2"
- }
- },
- "level-supports": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz",
- "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==",
- "requires": {
- "xtend": "^4.0.2"
- }
- },
- "level-ws": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz",
- "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==",
- "requires": {
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.0",
- "xtend": "^4.0.1"
- }
- },
- "levelup": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz",
- "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==",
- "requires": {
- "deferred-leveldown": "~5.3.0",
- "level-errors": "~2.0.0",
- "level-iterator-stream": "~4.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- }
- },
- "light-my-request": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-4.4.1.tgz",
- "integrity": "sha512-FDNRF2mYjthIRWE7O8d/X7AzDx4otQHl4/QXbu3Q/FRwBFcgb+ZoDaUd5HwN53uQXLAiw76osN+Va0NEaOW6rQ==",
- "requires": {
- "ajv": "^6.12.2",
- "cookie": "^0.4.0",
- "fastify-warning": "^0.2.0",
- "readable-stream": "^3.6.0",
- "set-cookie-parser": "^2.4.1"
- }
- },
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "lodash.assign": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
- "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
- "dev": true
- },
- "log-symbols": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
- "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
- "requires": {
- "chalk": "^2.4.2"
- }
- },
- "lru_map": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
- "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0="
- },
- "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"
- }
- },
- "ltgt": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
- "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU="
- },
- "mcl-wasm": {
- "version": "0.7.6",
- "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.6.tgz",
- "integrity": "sha512-cbRl3sUOkBeRY2hsM4t1EIln2TIdQBkSiTOqNTv/4Hu5KOECnMWCgjIf+a9Ebunyn22VKqkMF3zj6ejRzz7YBw=="
- },
- "md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "memdown": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz",
- "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==",
- "requires": {
- "abstract-leveldown": "~6.2.1",
- "functional-red-black-tree": "~1.0.1",
- "immediate": "~3.2.3",
- "inherits": "~2.0.1",
- "ltgt": "~2.2.0",
- "safe-buffer": "~5.2.0"
- },
"dependencies": {
- "abstract-leveldown": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz",
- "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==",
- "requires": {
- "buffer": "^5.5.0",
- "immediate": "^3.2.3",
- "level-concat-iterator": "~2.0.0",
- "level-supports": "~1.0.0",
- "xtend": "~4.0.0"
- }
- },
- "immediate": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz",
- "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw="
- }
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
}
},
- "memorystream": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI="
- },
- "merkle-patricia-tree": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.1.0.tgz",
- "integrity": "sha512-vmP1J7FwIpprFMVjjSMM1JAwFce85Q+tp0TYIedYv8qaMh2oLUZ3ETXn9wbgi9S6elySzKzGa+Ai6VNKGEwSlg==",
- "requires": {
- "@types/levelup": "^4.3.0",
- "ethereumjs-util": "^7.0.8",
- "level-mem": "^5.0.1",
- "level-ws": "^2.0.0",
- "readable-stream": "^3.6.0",
- "rlp": "^2.2.3",
- "semaphore-async-await": "^1.5.1"
- }
- },
- "micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- }
- },
- "miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- }
- },
- "mime-db": {
- "version": "1.47.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
- "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.30",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
- "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
- "dev": true,
- "requires": {
- "mime-db": "1.47.0"
- }
- },
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "dev": true
- },
- "min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
- "dev": true,
- "requires": {
- "dom-walk": "^0.1.0"
- }
- },
- "minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
- },
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "mnemonist": {
- "version": "0.38.3",
- "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz",
- "integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==",
- "requires": {
- "obliterator": "^1.6.1"
- }
- },
- "mocha": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz",
- "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==",
- "requires": {
- "ansi-colors": "3.2.3",
- "browser-stdout": "1.3.1",
- "chokidar": "3.3.0",
- "debug": "3.2.6",
- "diff": "3.5.0",
- "escape-string-regexp": "1.0.5",
- "find-up": "3.0.0",
- "glob": "7.1.3",
- "growl": "1.10.5",
- "he": "1.2.0",
- "js-yaml": "3.13.1",
- "log-symbols": "3.0.0",
- "minimatch": "3.0.4",
- "mkdirp": "0.5.5",
- "ms": "2.1.1",
- "node-environment-flags": "1.0.6",
- "object.assign": "4.1.0",
- "strip-json-comments": "2.0.1",
- "supports-color": "6.0.0",
- "which": "1.3.1",
- "wide-align": "1.1.3",
- "yargs": "13.3.2",
- "yargs-parser": "13.1.2",
- "yargs-unparser": "1.6.0"
- },
- "dependencies": {
- "ansi-colors": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
- "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw=="
- },
- "chokidar": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz",
- "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==",
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "fsevents": "~2.1.1",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.2.0"
- }
- },
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "fsevents": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
- "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
- "optional": true
- },
- "glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "readdirp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
- "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
- "requires": {
- "picomatch": "^2.0.4"
- }
- },
- "supports-color": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
- "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
- "node-addon-api": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
- "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA=="
- },
- "node-environment-flags": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz",
- "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==",
- "requires": {
- "object.getownpropertydescriptors": "^2.0.3",
- "semver": "^5.7.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
- }
- },
- "node-fetch": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
- },
- "node-gyp-build": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz",
- "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg=="
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "number-to-bn": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz",
- "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=",
- "dev": true,
- "requires": {
- "bn.js": "4.11.6",
- "strip-hex-prefix": "1.0.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=",
- "dev": true
- }
- }
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "object-inspect": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
- "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw=="
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
- },
- "object.assign": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
- "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
- "requires": {
- "define-properties": "^1.1.2",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.0",
- "object-keys": "^1.0.11"
- }
- },
- "object.getownpropertydescriptors": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz",
- "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==",
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.2"
- }
- },
- "obliterator": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz",
- "integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig=="
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1"
- }
- },
- "open": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
- "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
- "dev": true,
- "requires": {
- "is-docker": "^2.0.0",
- "is-wsl": "^2.1.1"
- }
- },
- "os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "dev": true,
- "requires": {
- "lcid": "^1.0.0"
- }
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
- },
- "parse-headers": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz",
- "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==",
- "dev": true
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "patch-package": {
- "version": "6.4.7",
- "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz",
- "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==",
- "dev": true,
- "requires": {
- "@yarnpkg/lockfile": "^1.1.0",
- "chalk": "^2.4.2",
- "cross-spawn": "^6.0.5",
- "find-yarn-workspace-root": "^2.0.0",
- "fs-extra": "^7.0.1",
- "is-ci": "^2.0.0",
- "klaw-sync": "^6.0.0",
- "minimist": "^1.2.0",
- "open": "^7.4.2",
- "rimraf": "^2.6.3",
- "semver": "^5.6.0",
- "slash": "^2.0.0",
- "tmp": "^0.0.33"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "slash": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
- "dev": true
- }
- }
- },
- "path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
- "dev": true
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true
- },
- "pbkdf2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
- "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
- "requires": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
- "picomatch": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
- "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg=="
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
- "dev": true
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "dev": true,
- "requires": {
- "pinkie": "^2.0.0"
- }
- },
- "pino": {
- "version": "6.11.3",
- "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.3.tgz",
- "integrity": "sha512-drPtqkkSf0ufx2gaea3TryFiBHdNIdXKf5LN0hTM82SXI4xVIve2wLwNg92e1MT6m3jASLu6VO7eGY6+mmGeyw==",
- "requires": {
- "fast-redact": "^3.0.0",
- "fast-safe-stringify": "^2.0.7",
- "flatstr": "^1.0.12",
- "pino-std-serializers": "^3.1.0",
- "quick-format-unescaped": "^4.0.3",
- "sonic-boom": "^1.0.2"
- }
- },
- "pino-std-serializers": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz",
- "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg=="
- },
- "postinstall-postinstall": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz",
- "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==",
- "dev": true
- },
- "prettier": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
- "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
- "dev": true
- },
- "printj": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
- "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- },
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
- },
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
- "punycode": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
- "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0="
- },
- "qs": {
- "version": "6.10.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
- "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
- "requires": {
- "side-channel": "^1.0.4"
- }
- },
- "query-string": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
- "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
- "dev": true,
- "requires": {
- "decode-uri-component": "^0.2.0",
- "object-assign": "^4.1.0",
- "strict-uri-encode": "^1.0.0"
- }
- },
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
- "dev": true
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
- },
- "quick-format-unescaped": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.3.tgz",
- "integrity": "sha512-MaL/oqh02mhEo5m5J2rwsVL23Iw2PEaGVHgT2vFt8AAsr0lfvQA5dpXo9TPu0rz7tSBdUPgkbam0j/fj5ZM8yg=="
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "raw-body": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz",
- "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==",
- "requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.3",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- }
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
- "dev": true,
- "requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- }
- },
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "dev": true,
- "requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- }
- }
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readdirp": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
- "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true
- }
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
- },
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
- },
- "resolve": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
- "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
- "requires": {
- "path-parse": "^1.0.6"
- }
- },
- "ret": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz",
- "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ=="
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
- },
- "rfdc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "rlp": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz",
- "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==",
- "requires": {
- "bn.js": "^4.11.1"
- }
- },
- "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",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- },
- "safe-regex2": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz",
- "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==",
- "requires": {
- "ret": "~0.2.0"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "scrypt-js": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
- "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA=="
- },
- "secp256k1": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.2.tgz",
- "integrity": "sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==",
- "requires": {
- "elliptic": "^6.5.2",
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
- }
- },
- "secure-json-parse": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz",
- "integrity": "sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg=="
- },
- "semaphore-async-await": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz",
- "integrity": "sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo="
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- },
- "semver-store": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz",
- "integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg=="
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
- },
- "set-cookie-parser": {
- "version": "2.4.8",
- "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz",
- "integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg=="
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
- },
- "setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
- },
- "sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "requires": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- }
- },
- "simple-concat": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
- "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
- "dev": true
- },
- "simple-get": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
- "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
- "dev": true,
- "requires": {
- "decompress-response": "^3.3.0",
- "once": "^1.3.1",
- "simple-concat": "^1.0.0"
- }
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
- },
- "solc": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz",
- "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==",
- "requires": {
- "command-exists": "^1.2.8",
- "commander": "3.0.2",
- "follow-redirects": "^1.14.7",
- "fs-extra": "^0.30.0",
- "js-sha3": "0.8.0",
- "memorystream": "^0.3.1",
- "require-from-string": "^2.0.0",
- "semver": "^5.5.0",
- "tmp": "0.0.33"
- },
- "dependencies": {
- "fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
- }
- },
- "solidity-create2-deployer": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/solidity-create2-deployer/-/solidity-create2-deployer-0.4.0.tgz",
- "integrity": "sha512-bB5d8fPt4dWsOoRodrsyfWKcjiv77IFl84+e6EckMMGYlfL2ZFqUoMz6tnqqiUFrM9abF1p6dWFOgJ/3zVc8yQ==",
- "requires": {
- "ethers": "^5.0.14"
- }
- },
- "sonic-boom": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz",
- "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==",
- "requires": {
- "atomic-sleep": "^1.0.0",
- "flatstr": "^1.0.12"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
- "source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
- "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
- "dev": true
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "dependencies": {
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true
- }
- }
- },
- "stacktrace-parser": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz",
- "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==",
- "requires": {
- "type-fest": "^0.7.1"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
- "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg=="
- }
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
- },
- "strict-uri-encode": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
- "dev": true
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "string-similarity": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz",
- "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ=="
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "dev": true,
- "requires": {
- "is-utf8": "^0.2.0"
- }
- },
- "strip-hex-prefix": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
- "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=",
- "requires": {
- "is-hex-prefixed": "1.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "test-value": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz",
- "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=",
- "dev": true,
- "requires": {
- "array-back": "^1.0.3",
- "typical": "^2.6.0"
- },
- "dependencies": {
- "array-back": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
- "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
- "dev": true,
- "requires": {
- "typical": "^2.6.0"
- }
- }
- }
- },
- "testrpc": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz",
- "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==",
- "dev": true
- },
- "timed-out": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
- "dev": true
- },
- "tiny-lru": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz",
- "integrity": "sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow=="
- },
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "requires": {
- "os-tmpdir": "~1.0.2"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
- },
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dev": true,
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "dependencies": {
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- }
- }
- },
- "true-case-path": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz",
- "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q=="
- },
- "ts-essentials": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz",
- "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==",
- "dev": true
- },
- "ts-generator": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz",
- "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==",
- "dev": true,
- "requires": {
- "@types/mkdirp": "^0.5.2",
- "@types/prettier": "^2.1.1",
- "@types/resolve": "^0.0.8",
- "chalk": "^2.4.1",
- "glob": "^7.1.2",
- "mkdirp": "^0.5.1",
- "prettier": "^2.1.2",
- "resolve": "^1.8.1",
- "ts-essentials": "^1.0.0"
- }
- },
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
- "tsort": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz",
- "integrity": "sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y="
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
- "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
- },
- "tweetnacl-util": {
- "version": "0.15.1",
- "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz",
- "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw=="
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
- },
- "type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="
- },
- "typechain": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz",
- "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==",
- "dev": true,
- "requires": {
- "command-line-args": "^4.0.7",
- "debug": "^4.1.1",
- "fs-extra": "^7.0.0",
- "js-sha3": "^0.8.0",
- "lodash": "^4.17.15",
- "ts-essentials": "^6.0.3",
- "ts-generator": "^0.1.1"
- },
- "dependencies": {
- "ts-essentials": {
- "version": "6.0.7",
- "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz",
- "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==",
- "dev": true,
- "requires": {}
- }
- }
- },
- "typescript": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz",
- "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==",
- "dev": true,
- "peer": true
- },
- "typical": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
- "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
- "dev": true
- },
- "unbox-primitive": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
- "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
- "requires": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
- "which-boxed-primitive": "^1.0.2"
- }
- },
- "underscore": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
- "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==",
- "dev": true
- },
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "dev": true,
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- },
- "dependencies": {
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
- "dev": true
- }
- }
- },
- "url-set-query": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz",
- "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=",
- "dev": true
- },
- "utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz",
- "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==",
- "dev": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "util.promisify": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz",
- "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==",
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "for-each": "^0.3.3",
- "has-symbols": "^1.0.1",
- "object.getownpropertydescriptors": "^2.1.1"
- }
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "web3-utils": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.3.5.tgz",
- "integrity": "sha512-5apMRm8ElYjI/92GHqijmaLC+s+d5lgjpjHft+rJSs/dsnX8I8tQreqev0dmU+wzU+2EEe4Sx9a/OwGWHhQv3A==",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.9",
- "eth-lib": "0.2.8",
- "ethereum-bloom-filters": "^1.0.6",
- "ethjs-unit": "0.1.6",
- "number-to-bn": "1.7.0",
- "randombytes": "^2.1.0",
- "underscore": "1.9.1",
- "utf8": "3.0.0"
- }
- },
- "which": {
+ "node_modules/which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "requires": {
+ "dev": true,
+ "dependencies": {
"isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
}
},
- "which-boxed-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "requires": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
- },
- "wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "window-size": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
- "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=",
+ "node_modules/which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==",
"dev": true
},
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
+ "node_modules/window-size": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
+ "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==",
+ "dev": true,
+ "bin": {
+ "window-size": "cli.js"
},
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/workerpool": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw=="
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "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
},
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
+ "utf-8-validate": {
+ "optional": true
}
}
},
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "ws": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
- "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
- "requires": {}
- },
- "xhr": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
- "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
- "dev": true,
- "requires": {
- "global": "~4.4.0",
- "is-function": "^1.0.1",
- "parse-headers": "^2.0.0",
- "xtend": "^4.0.0"
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "engines": {
+ "node": ">=10"
}
},
- "xhr-request": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz",
- "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==",
- "dev": true,
- "requires": {
- "buffer-to-arraybuffer": "^0.0.5",
- "object-assign": "^4.1.1",
- "query-string": "^5.0.1",
- "simple-get": "^2.7.0",
- "timed-out": "^4.0.1",
- "url-set-query": "^1.0.0",
- "xhr": "^2.0.4"
- }
- },
- "xhr-request-promise": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz",
- "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==",
- "dev": true,
- "requires": {
- "xhr-request": "^1.1.0"
- }
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
- },
- "y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
- },
- "yallist": {
+ "node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
},
- "yargs": {
- "version": "13.3.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
- "requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.2"
- },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
+ "node_modules/yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+ "engines": {
+ "node": ">=10"
}
},
- "yargs-unparser": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz",
- "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==",
- "requires": {
- "flat": "^4.1.0",
- "lodash": "^4.17.15",
- "yargs": "^13.3.0"
+ "node_modules/yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "dependencies": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
}
}
diff --git a/test/contract/package.json b/test/contract/package.json
index 096d3b4e..8048fbc2 100644
--- a/test/contract/package.json
+++ b/test/contract/package.json
@@ -4,23 +4,21 @@
"main": "index.js",
"scripts": {
"compile": "npx hardhat compile",
- "start": "HARDHAT_NETWORK=docker node src/index.js",
- "start:local": "ETH_ADDR=http://127.0.0.1:8545 npm run start",
- "test": "echo \"Error: no test specified\" && exit 1"
+ "start": "node src/index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
- "description": "",
+ "description": "Solidity contract deployment server for integration testing",
"dependencies": {
"@openzeppelin/contracts": "^4.0.0",
- "fastify": "^3.14.2",
- "hardhat": "^2.2.0",
+ "fastify": "^4.0.0",
+ "hardhat": "^2.14.0",
"solidity-create2-deployer": "^0.4.0"
},
"devDependencies": {
- "@nomiclabs/hardhat-ethers": "^2.0.2",
- "@nomiclabs/hardhat-waffle": "^2.0.1",
+ "@nomiclabs/hardhat-ethers": "^2.2.3",
+ "@nomiclabs/hardhat-waffle": "^2.0.4",
"chai": "^4.3.4",
"ethereum-waffle": "^3.3.0",
"ethers": "^5.1.0"
diff --git a/test/contract/scripts/deploy.js b/test/contract/scripts/deploy.js
deleted file mode 100644
index b83c0103..00000000
--- a/test/contract/scripts/deploy.js
+++ /dev/null
@@ -1,18 +0,0 @@
-const hre = require("hardhat");
-
-async function main() {
- // await hre.run('compile');
- // We get the contract to deploy
- const GLDToken = await hre.ethers.getContractFactory("GLDToken");
- const token = await GLDToken.deploy();
- await token.deployed();
- console.log("GLDToken deployed to:", token.address, token.deployTransaction.hash);
-}
-// We recommend this pattern to be able to use async/await everywhere
-// and properly handle errors.
-main()
- .then(() => process.exit(0))
- .catch(error => {
- console.error(error);
- process.exit(1);
- });
\ No newline at end of file
diff --git a/test/contract/scripts/sample-script.js b/test/contract/scripts/sample-script.js
deleted file mode 100644
index 5c3fbf0e..00000000
--- a/test/contract/scripts/sample-script.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// We require the Hardhat Runtime Environment explicitly here. This is optional
-// but useful for running the script in a standalone fashion through `node