Commit 08dea724 authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

Merge pull request #2396 from ethereum-optimism/develop

Develop -> Master
parents 0ac233e7 3e5b2092
---
'@eth-optimism/data-transport-layer': patch
---
Patch for Kovan DTL halting issue
---
'@eth-optimism/l2geth': patch
---
Skip TestWSAttachWelcome
---
'@eth-optimism/common-ts': patch
---
Adds hard stop to BaseServiceV2 when multiple exit signals are received
---
'@eth-optimism/l2geth': patch
---
Skip some geth console tests that flake in CI
---
'@eth-optimism/gas-oracle': patch
---
Fixes a bug that would cause the service to crash on startup if the RPC URLs were not immediately available
---
'@eth-optimism/integration-tests': patch
---
Update chainid
---
'@eth-optimism/data-transport-layer': patch
---
Add new metrics to the data-transport-layer
---
'@eth-optimism/integration-tests': patch
'@eth-optimism/common-ts': patch
'@eth-optimism/contracts': patch
'@eth-optimism/core-utils': patch
'@eth-optimism/data-transport-layer': patch
'@eth-optimism/message-relayer': patch
'@eth-optimism/replica-healthcheck': patch
'@eth-optimism/sdk': patch
---
Update Dockerfile to use Alpine
---
'@eth-optimism/common-ts': patch
---
Have BaseServiceV2 throw when options are undefined
---
'@eth-optimism/common-ts': patch
---
Adds the jsonRpcProvider validator as an input validator
---
'@eth-optimism/l2geth': patch
---
Adds a flag for changing the genesis fetch timeout
---
'@eth-optimism/contracts': patch
'@eth-optimism/data-transport-layer': patch
'@eth-optimism/integration-tests': patch
'@eth-optimism/message-relayer': patch
'@eth-optimism/sdk': patch
---
Bump to hardhat@2.9.1
---
'@eth-optimism/hardhat-node': patch
---
Bump to hardhat@2.9.1
...@@ -208,22 +208,22 @@ jobs: ...@@ -208,22 +208,22 @@ jobs:
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
- v1-source-{{ .Branch }}-{{ .Revision }} - v2-cache-source-{{ .Branch }}-{{ .Revision }}
- v1-source-{{ .Branch }} - v2-cache-source-{{ .Branch }}
- checkout - checkout
- save_cache: - save_cache:
key: v1-source-{{ .Branch }}-{{ .Revision }} key: v2-cache-source-{{ .Branch }}-{{ .Revision }}
paths: paths:
- ".git" - ".git"
- restore_cache: - restore_cache:
keys: keys:
- v1-yarn-install-{{ checksum "yarn.lock" }} - v2-cache-yarn-install-{{ checksum "yarn.lock" }}
- v1-yarn-install - v2-cache-yarn-install
- run: - run:
name: Install dependencies name: Install dependencies
command: yarn --frozen-lockfile command: yarn --frozen-lockfile
- save_cache: - save_cache:
key: v1-yarn-install-{{ checksum "yarn.lock" }} key: v2-cache-yarn-install-{{ checksum "yarn.lock" }}
paths: paths:
- node_modules - node_modules
- packages/common-ts/node_modules - packages/common-ts/node_modules
...@@ -238,7 +238,7 @@ jobs: ...@@ -238,7 +238,7 @@ jobs:
name: Build monorepo name: Build monorepo
command: yarn build command: yarn build
- save_cache: - save_cache:
key: v1-yarn-build-{{ .Revision }} key: v2-cache-yarn-build-{{ .Revision }}
paths: paths:
- "." - "."
...@@ -248,7 +248,7 @@ jobs: ...@@ -248,7 +248,7 @@ jobs:
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
- v1-yarn-build-{{ .Revision }} - v2-cache-yarn-build-{{ .Revision }}
- checkout - checkout
- run: - run:
name: Run Slither name: Run Slither
...@@ -262,12 +262,16 @@ jobs: ...@@ -262,12 +262,16 @@ jobs:
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
- v1-yarn-build-{{ .Revision }} - v2-cache-yarn-build-{{ .Revision }}
- checkout - checkout
- run: - run:
name: Lint name: Lint
command: yarn lint:check command: yarn lint:check
working_directory: packages/contracts working_directory: packages/contracts
- run:
name: Check deployment docs
command: yarn autogen:markdown && git diff --exit-code
working_directory: packages/contracts
- run: - run:
name: Slither name: Slither
command: yarn test:slither command: yarn test:slither
...@@ -283,7 +287,7 @@ jobs: ...@@ -283,7 +287,7 @@ jobs:
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
- v1-yarn-build-{{ .Revision }} - v2-cache-yarn-build-{{ .Revision }}
- checkout - checkout
- run: - run:
name: Test name: Test
...@@ -306,7 +310,7 @@ jobs: ...@@ -306,7 +310,7 @@ jobs:
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
- v1-yarn-build-{{ .Revision }} - v2-cache-yarn-build-{{ .Revision }}
- checkout - checkout
# Note: The below needs to be manually configured whenever we # Note: The below needs to be manually configured whenever we
# add a new package to CI. # add a new package to CI.
...@@ -362,7 +366,7 @@ jobs: ...@@ -362,7 +366,7 @@ jobs:
name: Bring up the stack name: Bring up the stack
command: | command: |
docker-compose build --progress=plain docker-compose build --progress=plain
docker-compose up -d --scale replica-healthcheck=1 docker-compose up -d --scale replica_healthcheck=1
working_directory: ops working_directory: ops
- run: - run:
name: Wait for sequencer name: Wait for sequencer
...@@ -385,7 +389,7 @@ jobs: ...@@ -385,7 +389,7 @@ jobs:
steps: steps:
- restore_cache: - restore_cache:
keys: keys:
- v1-yarn-build-{{ .Revision }} - v2-cache-yarn-build-{{ .Revision }}
- checkout - checkout
- run: - run:
name: Lint name: Lint
......
go/bss-core @cfromknecht @tynes
go/batch-submitter @cfromknecht @tynes
go/gas-oracle @tynes
go/l2geth-exporter @optimisticben @mslipper
go/op-exporter @optimisticben @mslipper
go/proxyd @mslipper @inphi
go/teleportr @mslipper @cfromknecht
integration-tests/ @tynes @mslipper
packages/core-utils @smartcontracts @tynes
packages/common-ts/ @smartcontracts
packages/message-relayer/ @smartcontracts
packages/data-transport-layer/ @tynes @smartcontracts
packages/replica-healthcheck @optimisticben @tynes
packages/sdk @smartcontracts @mslipper
packages/contracts @elenadimitrova @maurelian @smartcontracts
l2geth @tynes @cfromknecht @smartcontracts
ops @tynes @optimisticben @mslipper
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
- 'patches/**/*' - 'patches/**/*'
M-ci: M-ci:
- any: ['.github/**/*'] - any: ['.github/**/*', '.circleci/**/*']
M-l2geth: M-l2geth:
- any: ['l2geth/**/*'] - any: ['l2geth/**/*']
...@@ -35,3 +35,9 @@ M-sdk: ...@@ -35,3 +35,9 @@ M-sdk:
M-ops: M-ops:
- any: ['ops/**/*'] - any: ['ops/**/*']
C-Protocol-Critical:
- any:
- 'packages/data-transport-layer/**/*.ts'
- 'packages/contracts/**/*.sol'
- 'l2geth/**/*.go'
\ No newline at end of file
queue_rules:
- name: default
conditions: []
pull_request_rules:
- name: Automatic merge on approval
conditions:
- or:
- and:
- "label!=SR-Risk"
- "label!=C-Protocol-Critical"
- "#approved-reviews-by>=2"
- and:
- "label=SR-Risk"
- "#approved-reviews-by>=2"
- "approved-reviews-by=maurelian"
- and:
- "label=C-Protocol-Critical"
- "#approved-reviews-by>=2"
- or:
- "approved-reviews-by=tynes"
- "approved-reviews-by=smartcontracts"
actions:
queue:
name: default
method: squash
comment:
message: |
This PR has been added to the merge queue, and will be merged soon.
label:
add:
- on-merge-train
- name: Handle security critical PRs
conditions:
- "label=SR-Risk"
actions:
request_reviews:
users:
- "maurelian"
comment:
message: |
Hey there @{{author}}! You flagged this PR as security critical. To make review easier, please add a comment describing
1. The risks present in this PR.
2. The mitigations you have added to try and reduce those risks.
- name: Request reviewers
conditions:
- -closed
actions:
request_reviews:
users:
- cfromknecht
- tynes
- mslipper
- inphi
- tuxcanfly
- smartcontracts
random_count: 2
- name: Request protocol critical reviewers
conditions:
- label=C-Protocol-Critical
actions:
request_reviews:
users:
- tynes
- smartcontracts
random_count: 1
- name: Ask to resolve conflict
conditions:
- conflict
actions:
comment:
message: Hey @{{author}}! This PR has merge conflicts. Please fix them before continuing review.
- name: Notify author when added to merge queue
conditions:
- "check-pending=Queue: Embarked in merge train"
actions:
comment:
message: |
This PR is next in line to be merged, and will be merged as soon as checks pass.
\ No newline at end of file
name: batch-submitter unit tests
on:
push:
paths:
- 'go/batch-submitter/**'
branches:
- 'master'
- 'develop'
- '*rc'
- 'release/*'
pull_request:
branches:
- '*'
workflow_dispatch:
defaults:
run:
working-directory: './go/batch-submitter'
jobs:
tests:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- name: Checkout code
uses: actions/checkout@v2
- name: Install
run: make
- name: Test
run: make test
name: bss-core unit tests
on:
push:
paths:
- 'go/bss-core/**'
branches:
- 'master'
- 'develop'
- '*rc'
- 'release/*'
pull_request:
branches:
- '*'
workflow_dispatch:
defaults:
run:
working-directory: './go/bss-core'
jobs:
tests:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- name: Checkout code
uses: actions/checkout@v2
- name: Test
run: go test -v ./...
name: Exteral Tests (Synthetix) name: Exteral Tests (Synthetix)
on: workflow_dispatch on:
schedule:
# run these tests once per day
- cron: '0 0 * * *'
jobs: jobs:
integration: integration:
...@@ -69,7 +72,6 @@ jobs: ...@@ -69,7 +72,6 @@ jobs:
if: failure() if: failure()
uses: jwalton/gh-docker-logs@v1 uses: jwalton/gh-docker-logs@v1
with: with:
images: 'ethereumoptimism/hardhat,ethereumoptimism/deployer,ethereumoptimism/data-transport-layer,ethereumoptimism/l2geth,ethereumoptimism/message-relayer,ethereumoptimism/batch-submitter,ethereumoptimism/l2geth,ethereumoptimism/integration-tests'
dest: '~/logs' dest: '~/logs'
- name: Tar logs - name: Tar logs
......
name: gas-oracle unit tests
on:
push:
paths:
- 'go/gas-oracle/**'
branches:
- 'master'
- 'develop'
- '*rc'
- 'release/*'
pull_request:
branches:
- '*'
workflow_dispatch:
defaults:
run:
working-directory: ./go/gas-oracle
jobs:
tests:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- name: Checkout code
uses: actions/checkout@v2
- name: Install
run: make
- name: Test
run: make test
name: geth unit tests
on:
push:
paths:
- 'l2geth/**'
branches:
- 'master'
- 'develop'
- '*rc'
- 'release/*'
pull_request:
paths:
- 'l2geth/**'
workflow_dispatch:
defaults:
run:
working-directory: ./l2geth
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.15.x
- name: Checkout code
uses: actions/checkout@v2
- name: Lint
run: make lint
tests:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.15.x
- name: Checkout code
uses: actions/checkout@v2
- name: Install
run: make
- name: Test
run: make test
name: golangci-lint
on:
push:
paths:
- 'go/gas-oracle/**'
- 'go/batch-submitter/**'
- 'go/bss-core/**'
- 'go/teleportr/**'
branches:
- 'master'
- 'develop'
- '*rc'
- 'release/*'
pull_request:
branches:
- '*'
jobs:
golangci:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: golangci-lint gas-oracle
uses: golangci/golangci-lint-action@v2
with:
version: v1.29
working-directory: go/gas-oracle
- name: golangci-lint batch-submitter
uses: golangci/golangci-lint-action@v2
with:
version: v1.29
working-directory: go/batch-submitter
- name: golangci-lint bss-core
uses: golangci/golangci-lint-action@v2
with:
version: v1.29
working-directory: go/bss-core
- name: golangci-lint teleportr
uses: golangci/golangci-lint-action@v2
with:
version: v1.29
working-directory: go/teleportr
name: indexer unit tests
on:
push:
paths:
- 'go/indexer/**'
branches:
- 'master'
- 'develop'
- '*rc'
- 'release/*'
pull_request:
branches:
- '*'
workflow_dispatch:
defaults:
run:
working-directory: './go/indexer'
jobs:
tests:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- name: Checkout code
uses: actions/checkout@v2
- name: Install
run: make
- name: Test
run: make test
name: integration
on:
push:
branches:
- 'master'
- 'develop'
- '*rc'
- 'release/*'
pull_request:
workflow_dispatch:
jobs:
integration:
runs-on: ubuntu-latest
services:
registry:
image: registry:2
ports:
- 5000:5000
strategy:
matrix:
batch-type:
- zlib
- legacy
env:
DOCKER_BUILDKIT: 1
COMPOSE_DOCKER_CLI_BUILD: 1
steps:
# Monorepo tests
- uses: actions/checkout@v2
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Set conditional env vars
run: |
echo "BATCH_SUBMITTER_SEQUENCER_BATCH_TYPE=${{ matrix.batch-type }}" >> $GITHUB_ENV
- name: Bring the stack up
working-directory: ./ops
run: |
./scripts/stats.sh &
docker-compose -f docker-compose.yml up -d --scale replica-healthcheck=1
- name: Wait for the Sequencer node
working-directory: ./ops
run: ./scripts/wait-for-sequencer.sh
- name: Run the integration tests
working-directory: ./ops
run: docker-compose run integration_tests
- name: Collect docker logs on failure
if: failure()
uses: jwalton/gh-docker-logs@v1
with:
dest: '/home/runner/logs'
- name: Tar logs
if: failure()
run: tar cvzf ./logs.tgz ~/logs
- name: Upload logs to GitHub
if: failure()
uses: actions/upload-artifact@master
with:
name: logs.tgz
path: ./logs.tgz
name: proxyd unit tests
on:
push:
branches:
- 'master'
- 'develop'
pull_request:
branches:
- '*'
workflow_dispatch:
defaults:
run:
working-directory: ./go/proxyd
jobs:
tests:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.15.x
- name: Checkout code
uses: actions/checkout@v2
- name: Build
run: make proxyd
- name: Lint
run: make lint
- name: Test
run: make test
name: Static analysis
on:
push:
branches:
- master
- develop
pull_request:
workflow_dispatch:
env:
PYTEST_ADDOPTS: "--color=yes"
jobs:
slither:
name: Slither run
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Fetch history
run: git fetch
- name: Setup node
uses: actions/setup-node@v1
with:
node-version: '16.x'
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install Dependencies
# only install dependencies if there was a change in the deps
# if: steps.yarn-cache.outputs.cache-hit != 'true'
run: yarn install
- name: Build
run: yarn build
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: '3.8'
- name: Install Slither
run: pip3 install slither-analyzer
- name: Run analysis
working-directory: ./packages/contracts
shell: bash
run: yarn test:slither
continue-on-error: false
name: teleportr unit tests
on:
push:
paths:
- 'go/teleportr/**'
branches:
- 'master'
- 'develop'
- '*rc'
- 'release/*'
pull_request:
branches:
- '*'
workflow_dispatch:
defaults:
run:
working-directory: './go/teleportr'
jobs:
tests:
runs-on: ubuntu-latest
services:
postgres:
image: postgres
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
ports:
- 5432:5432
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- name: Checkout code
uses: actions/checkout@v2
- name: Test
run: go test -v ./...
name: typescript / contracts
on:
push:
branches:
- 'master'
- 'develop'
- '*rc'
- 'release/*'
pull_request:
workflow_dispatch:
jobs:
test:
name: Run unit tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Fetch history
run: git fetch
- name: Setup node
uses: actions/setup-node@v1
with:
node-version: '16.x'
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install Dependencies
# only install dependencies if there was a change in the deps
# if: steps.yarn-cache.outputs.cache-hit != 'true'
run: yarn install
- name: Check yarn.lock for changes
run: git diff --exit-code
- name: Build
run: yarn build
- name: Test
run: yarn test
env:
FORCE_COLOR: 1
ENABLE_GAS_REPORT: 1
- name: Print gas report
run: cat packages/contracts/gas-report.txt
- name: Run codechecks
working-directory: ./packages/contracts
run: yarn codechecks
env:
CC_SECRET: ${{ secrets.CC_SECRET }}
test-coverage:
name: Generate test coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Fetch history
run: git fetch
- name: Setup node
uses: actions/setup-node@v1
with:
node-version: '16.x'
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install Dependencies
# only install dependencies if there was a change in the deps
# if: steps.yarn-cache.outputs.cache-hit != 'true'
run: yarn install
- name: Build
run: yarn build
- name: Test Coverage
run: yarn test:coverage
- uses: codecov/codecov-action@v1
with:
files: ./packages/contracts/coverage.json
fail_ci_if_error: true
verbose: true
flags: contracts
- uses: codecov/codecov-action@v1
with:
files: ./packages/core-utils/coverage.json
fail_ci_if_error: false
verbose: true
flags: core-utils
- uses: codecov/codecov-action@v1
with:
files: ./packages/data-transport-layer/coverage.json
fail_ci_if_error: false
verbose: true
flags: data-transport-layer
- uses: codecov/codecov-action@v1
with:
files: ./packages/message-relayer/coverage.json
fail_ci_if_error: false
verbose: true
flags: message-relayer
- uses: codecov/codecov-action@v1
with:
files: ./packages/sdk/coverage.json
fail_ci_if_error: false
verbose: true
flags: sdk
depcheck:
name: Check for unused dependencies
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Fetch history
run: git fetch
- name: Setup node
uses: actions/setup-node@v1
with:
node-version: '16.x'
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install Dependencies
# only install dependencies if there was a change in the deps
# if: steps.yarn-cache.outputs.cache-hit != 'true'
run: yarn install
- name: Check packages/contracts
working-directory: ./packages/contracts
run: npx depcheck
- name: Check packages/core-utils
working-directory: ./packages/core-utils
run: npx depcheck
- name: Check packages/data-transport-layer
working-directory: ./packages/data-transport-layer
run: npx depcheck
- name: Check packages/message-relayer
working-directory: ./packages/message-relayer
run: npx depcheck
- name: Check packages/sdk
working-directory: ./packages/sdk
run: npx depcheck
- name: Check integration-tests
working-directory: ./integration-tests
run: npx depcheck
lint:
name: Linting
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Fetch history
run: git fetch
- uses: actions/setup-node@v1
with:
node-version: '16.x'
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install Dependencies
# only install dependencies if there was a change in the deps
# if: steps.yarn-cache.outputs.cache-hit != 'true'
run: yarn install
- name: Lint
run: yarn lint:check
...@@ -187,11 +187,15 @@ func NewGasPriceOracle(cfg *Config) (*GasPriceOracle, error) { ...@@ -187,11 +187,15 @@ func NewGasPriceOracle(cfg *Config) (*GasPriceOracle, error) {
} }
// Ensure that we can actually connect to both backends // Ensure that we can actually connect to both backends
log.Info("Connecting to layer two")
if err := ensureConnection(l2Client); err != nil { if err := ensureConnection(l2Client); err != nil {
log.Error("Unable to connect to layer two", "addr", cfg.layerTwoHttpUrl) log.Error("Unable to connect to layer two")
return nil, err
} }
log.Info("Connecting to layer one")
if err := ensureConnection(l1Client); err != nil { if err := ensureConnection(l1Client); err != nil {
log.Error("Unable to connect to layer one", "addr", cfg.ethereumHttpUrl) log.Error("Unable to connect to layer one")
return nil, err
} }
address := cfg.gasPriceOracleAddress address := cfg.gasPriceOracleAddress
...@@ -315,15 +319,19 @@ func NewGasPriceOracle(cfg *Config) (*GasPriceOracle, error) { ...@@ -315,15 +319,19 @@ func NewGasPriceOracle(cfg *Config) (*GasPriceOracle, error) {
// Ensure that we can actually connect // Ensure that we can actually connect
func ensureConnection(client *ethclient.Client) error { func ensureConnection(client *ethclient.Client) error {
t := time.NewTicker(5 * time.Second) t := time.NewTicker(1 * time.Second)
retries := 0
defer t.Stop() defer t.Stop()
for ; true; <-t.C { for ; true; <-t.C {
_, err := client.ChainID(context.Background()) _, err := client.ChainID(context.Background())
if err == nil { if err == nil {
break break
} else { } else {
retries += 1
if retries > 90 {
return err return err
} }
} }
}
return nil return nil
} }
...@@ -34,7 +34,8 @@ services: ...@@ -34,7 +34,8 @@ services:
- ../scripts/:/scripts/ - ../scripts/:/scripts/
<<: *logging <<: *logging
replica-healthcheck: replica-healthcheck:
image: ethereumoptimism/replica-healthcheck:${HC_IMAGE_TAG:-latest} # TODO: Update this to latest when we fix the environment variables
image: ethereumoptimism/replica-healthcheck:${HC_IMAGE_TAG:-0.3.11}
restart: ${RESTART} restart: ${RESTART}
env_file: env_file:
- ${SHARED_ENV_PATH}/replica-healthcheck.env - ${SHARED_ENV_PATH}/replica-healthcheck.env
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
"eslint-plugin-unicorn": "^32.0.1", "eslint-plugin-unicorn": "^32.0.1",
"ethereum-waffle": "^3.3.0", "ethereum-waffle": "^3.3.0",
"ethers": "^5.5.4", "ethers": "^5.5.4",
"hardhat": "^2.3.0", "hardhat": "^2.9.2",
"hardhat-gas-reporter": "^1.0.4", "hardhat-gas-reporter": "^1.0.4",
"lint-staged": "11.0.0", "lint-staged": "11.0.0",
"mocha": "^8.4.0", "mocha": "^8.4.0",
......
...@@ -38,7 +38,7 @@ const procEnv = cleanEnv(process.env, { ...@@ -38,7 +38,7 @@ const procEnv = cleanEnv(process.env, {
L1_URL: str({ default: 'http://localhost:9545' }), L1_URL: str({ default: 'http://localhost:9545' }),
L1_POLLING_INTERVAL: num({ default: 10 }), L1_POLLING_INTERVAL: num({ default: 10 }),
L2_CHAINID: num({ default: 987 }), L2_CHAINID: num({ default: 17 }),
L2_GAS_PRICE: gasPriceValidator({ L2_GAS_PRICE: gasPriceValidator({
default: 'onchain', default: 'onchain',
}), }),
......
...@@ -56,6 +56,7 @@ var ( ...@@ -56,6 +56,7 @@ var (
ArgsUsage: "<genesisPathOrUrl> (<genesisHash>)", ArgsUsage: "<genesisPathOrUrl> (<genesisHash>)",
Flags: []cli.Flag{ Flags: []cli.Flag{
utils.DataDirFlag, utils.DataDirFlag,
utils.RollupGenesisTimeoutSecondsFlag,
}, },
Category: "BLOCKCHAIN COMMANDS", Category: "BLOCKCHAIN COMMANDS",
Description: ` Description: `
...@@ -236,7 +237,7 @@ func initGenesis(ctx *cli.Context) error { ...@@ -236,7 +237,7 @@ func initGenesis(ctx *cli.Context) error {
log.Info("Fetching genesis file", "url", genesisPathOrURL) log.Info("Fetching genesis file", "url", genesisPathOrURL)
genesisData, err := fetchGenesis(genesisPathOrURL) genesisData, err := fetchGenesis(genesisPathOrURL, time.Duration(ctx.GlobalInt(utils.RollupGenesisTimeoutSecondsFlag.Name)))
if err != nil { if err != nil {
utils.Fatalf("Failed to fetch genesis file: %v", err) utils.Fatalf("Failed to fetch genesis file: %v", err)
} }
...@@ -640,9 +641,9 @@ func hashish(x string) bool { ...@@ -640,9 +641,9 @@ func hashish(x string) bool {
return err != nil return err != nil
} }
func fetchGenesis(url string) ([]byte, error) { func fetchGenesis(url string, timeout time.Duration) ([]byte, error) {
client := &http.Client{ client := &http.Client{
Timeout: 60 * time.Second, Timeout: timeout,
} }
resp, err := client.Get(url) resp, err := client.Get(url)
if err != nil { if err != nil {
......
...@@ -71,6 +71,7 @@ at block: 0 ({{niltime}}) ...@@ -71,6 +71,7 @@ at block: 0 ({{niltime}})
// Tests that a console can be attached to a running node via various means. // Tests that a console can be attached to a running node via various means.
func TestIPCAttachWelcome(t *testing.T) { func TestIPCAttachWelcome(t *testing.T) {
t.Skip()
// Configure the instance for IPC attachement // Configure the instance for IPC attachement
coinbase := "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182" coinbase := "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182"
var ipc string var ipc string
...@@ -98,6 +99,7 @@ func TestIPCAttachWelcome(t *testing.T) { ...@@ -98,6 +99,7 @@ func TestIPCAttachWelcome(t *testing.T) {
} }
func TestHTTPAttachWelcome(t *testing.T) { func TestHTTPAttachWelcome(t *testing.T) {
t.Skip()
coinbase := "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182" coinbase := "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182"
port := strconv.Itoa(trulyRandInt(1024, 65536)) // Yeah, sometimes this will fail, sorry :P port := strconv.Itoa(trulyRandInt(1024, 65536)) // Yeah, sometimes this will fail, sorry :P
geth := runGeth(t, geth := runGeth(t,
...@@ -114,6 +116,7 @@ func TestHTTPAttachWelcome(t *testing.T) { ...@@ -114,6 +116,7 @@ func TestHTTPAttachWelcome(t *testing.T) {
} }
func TestWSAttachWelcome(t *testing.T) { func TestWSAttachWelcome(t *testing.T) {
t.Skip()
coinbase := "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182" coinbase := "0x8605cdbbdb6d264aa742e77020dcbc58fcdce182"
port := strconv.Itoa(trulyRandInt(1024, 65536)) // Yeah, sometimes this will fail, sorry :P port := strconv.Itoa(trulyRandInt(1024, 65536)) // Yeah, sometimes this will fail, sorry :P
......
...@@ -163,6 +163,7 @@ var ( ...@@ -163,6 +163,7 @@ var (
utils.RollupEnforceFeesFlag, utils.RollupEnforceFeesFlag,
utils.RollupFeeThresholdDownFlag, utils.RollupFeeThresholdDownFlag,
utils.RollupFeeThresholdUpFlag, utils.RollupFeeThresholdUpFlag,
utils.RollupGenesisTimeoutSecondsFlag,
utils.SequencerClientHttpFlag, utils.SequencerClientHttpFlag,
utils.TxPublisherEnableFlag, utils.TxPublisherEnableFlag,
utils.TxPublisherProjectIDFlag, utils.TxPublisherProjectIDFlag,
......
...@@ -77,6 +77,7 @@ var AppHelpFlagGroups = []flagGroup{ ...@@ -77,6 +77,7 @@ var AppHelpFlagGroups = []flagGroup{
utils.RollupEnforceFeesFlag, utils.RollupEnforceFeesFlag,
utils.RollupFeeThresholdDownFlag, utils.RollupFeeThresholdDownFlag,
utils.RollupFeeThresholdUpFlag, utils.RollupFeeThresholdUpFlag,
utils.RollupGenesisTimeoutSecondsFlag,
utils.SequencerClientHttpFlag, utils.SequencerClientHttpFlag,
utils.TxPublisherEnableFlag, utils.TxPublisherEnableFlag,
utils.TxPublisherProjectIDFlag, utils.TxPublisherProjectIDFlag,
......
...@@ -862,6 +862,12 @@ var ( ...@@ -862,6 +862,12 @@ var (
Usage: "Allow txs with fees above the current fee up to this amount, must be > 1", Usage: "Allow txs with fees above the current fee up to this amount, must be > 1",
EnvVar: "ROLLUP_FEE_THRESHOLD_UP", EnvVar: "ROLLUP_FEE_THRESHOLD_UP",
} }
RollupGenesisTimeoutSecondsFlag = cli.DurationFlag{
Name: "rollup.genesistimeoutseconds",
Usage: "Timeout for the genesis file to be fetched",
Value: time.Second * 60,
EnvVar: "ROLLUP_GENESIS_TIMEOUT_SECONDS",
}
SequencerClientHttpFlag = cli.StringFlag{ SequencerClientHttpFlag = cli.StringFlag{
Name: "sequencer.clienthttp", Name: "sequencer.clienthttp",
Usage: "HTTP endpoint for the sequencer client", Usage: "HTTP endpoint for the sequencer client",
......
...@@ -3,12 +3,11 @@ version: '3.4' ...@@ -3,12 +3,11 @@ version: '3.4'
x-system-addr-env: &system-addr-env x-system-addr-env: &system-addr-env
# private key: a6aecc98b63bafb0de3b29ae9964b14acb4086057808be29f90150214ebd4a0f # private key: a6aecc98b63bafb0de3b29ae9964b14acb4086057808be29f90150214ebd4a0f
# OK to publish this since it will only ever be used in itests # OK to publish this since it will only ever be used in itests
SYSTEM_ADDRESS_0_DEPLOYER: "0xa961b0d6dce82db098cf70a42a14add3ee3db2d5" SYSTEM_ADDRESS_0_DEPLOYER: '0xa961b0d6dce82db098cf70a42a14add3ee3db2d5'
# private key: 3b8d2345102cce2443acb240db6e87c8edd4bb3f821b17fab8ea2c9da08ea132 # private key: 3b8d2345102cce2443acb240db6e87c8edd4bb3f821b17fab8ea2c9da08ea132
# OK to publish this since it will only ever be used in itests # OK to publish this since it will only ever be used in itests
SYSTEM_ADDRESS_1_DEPLOYER: "0xdfc82d475833a50de90c642770f34a9db7deb725" SYSTEM_ADDRESS_1_DEPLOYER: '0xdfc82d475833a50de90c642770f34a9db7deb725'
services: services:
# this is a helper service used because there's no official hardhat image # this is a helper service used because there's no official hardhat image
...@@ -64,7 +63,7 @@ services: ...@@ -64,7 +63,7 @@ services:
DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT: http://l1_chain:8545 DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT: http://l1_chain:8545
DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT: http://l2geth:8545 DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT: http://l2geth:8545
DATA_TRANSPORT_LAYER__SYNC_FROM_L2: 'true' DATA_TRANSPORT_LAYER__SYNC_FROM_L2: 'true'
DATA_TRANSPORT_LAYER__L2_CHAIN_ID: 987 DATA_TRANSPORT_LAYER__L2_CHAIN_ID: 17
ports: ports:
- ${DTL_PORT:-7878}:7878 - ${DTL_PORT:-7878}:7878
...@@ -174,7 +173,7 @@ services: ...@@ -174,7 +173,7 @@ services:
- ${REPLICA_HTTP_PORT:-8549}:8545 - ${REPLICA_HTTP_PORT:-8549}:8545
- ${REPLICA_WS_PORT:-8550}:8546 - ${REPLICA_WS_PORT:-8550}:8546
replica-healthcheck: replica_healthcheck:
depends_on: depends_on:
- l2geth - l2geth
- replica - replica
...@@ -203,7 +202,7 @@ services: ...@@ -203,7 +202,7 @@ services:
environment: environment:
L1_URL: http://l1_chain:8545 L1_URL: http://l1_chain:8545
L2_URL: http://l2geth:8545 L2_URL: http://l2geth:8545
HEALTHCHECK_URL: http://replica-healthcheck:7300/metrics HEALTHCHECK_URL: http://replica_healthcheck:7300/metrics
REPLICA_URL: http://replica:8545 REPLICA_URL: http://replica:8545
VERIFIER_URL: http://verifier:8545 VERIFIER_URL: http://verifier:8545
URL: http://deployer:8081/addresses.json URL: http://deployer:8081/addresses.json
...@@ -211,11 +210,11 @@ services: ...@@ -211,11 +210,11 @@ services:
NO_NETWORK: 1 NO_NETWORK: 1
BATCH_SUBMITTER_SEQUENCER_BATCH_TYPE: ${BATCH_SUBMITTER_SEQUENCER_BATCH_TYPE:-zlib} BATCH_SUBMITTER_SEQUENCER_BATCH_TYPE: ${BATCH_SUBMITTER_SEQUENCER_BATCH_TYPE:-zlib}
RUN_SYSTEM_ADDRESS_TESTS: "true" RUN_SYSTEM_ADDRESS_TESTS: 'true'
# must match l2geth environment, see above for why it's safe to publish these # must match l2geth environment, see above for why it's safe to publish these
SYSTEM_ADDRESS_0_DEPLOYER_KEY: "a6aecc98b63bafb0de3b29ae9964b14acb4086057808be29f90150214ebd4a0f" SYSTEM_ADDRESS_0_DEPLOYER_KEY: 'a6aecc98b63bafb0de3b29ae9964b14acb4086057808be29f90150214ebd4a0f'
SYSTEM_ADDRESS_1_DEPLOYER_KEY: "3b8d2345102cce2443acb240db6e87c8edd4bb3f821b17fab8ea2c9da08ea132" SYSTEM_ADDRESS_1_DEPLOYER_KEY: '3b8d2345102cce2443acb240db6e87c8edd4bb3f821b17fab8ea2c9da08ea132'
gas_oracle: gas_oracle:
deploy: deploy:
...@@ -224,9 +223,9 @@ services: ...@@ -224,9 +223,9 @@ services:
context: .. context: ..
dockerfile: ./ops/docker/Dockerfile.gas-oracle dockerfile: ./ops/docker/Dockerfile.gas-oracle
image: ethereumoptimism/gas-oracle:${DOCKER_TAG_GAS_ORACLE:-latest} image: ethereumoptimism/gas-oracle:${DOCKER_TAG_GAS_ORACLE:-latest}
entrypoint: ./gas-oracle.sh
environment: environment:
GAS_PRICE_ORACLE_ETHEREUM_HTTP_URL: http://l2geth:8545 GAS_PRICE_ORACLE_ETHEREUM_HTTP_URL: http://l1_chain:8545
GAS_PRICE_ORACLE_LAYER_TWO_HTTP_URL: http://l2geth:8545
# Default hardhat account 5 # Default hardhat account 5
GAS_PRICE_ORACLE_PRIVATE_KEY: '0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba' GAS_PRICE_ORACLE_PRIVATE_KEY: '0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba'
......
...@@ -11,5 +11,4 @@ RUN apk add --no-cache ca-certificates jq curl ...@@ -11,5 +11,4 @@ RUN apk add --no-cache ca-certificates jq curl
COPY --from=builder /gas-oracle/gas-oracle /usr/local/bin/ COPY --from=builder /gas-oracle/gas-oracle /usr/local/bin/
WORKDIR /usr/local/bin/ WORKDIR /usr/local/bin/
COPY ./ops/scripts/gas-oracle.sh .
ENTRYPOINT ["gas-oracle"] ENTRYPOINT ["gas-oracle"]
...@@ -2,16 +2,9 @@ ...@@ -2,16 +2,9 @@
# be used to build any of the follow-on services # be used to build any of the follow-on services
# #
# ### BASE: Install deps # ### BASE: Install deps
# We do not use Alpine because there's a regression causing it to be very slow FROM node:16-alpine3.14 as base
# when used with typescript/hardhat: https://github.com/nomiclabs/hardhat/issues/1219
FROM node:16.13-buster-slim as base
RUN apt-get update -y && apt-get install -y --no-install-recommends git \ RUN apk --no-cache add curl jq python3 ca-certificates git make gcc musl-dev linux-headers bash
curl \
jq \
python3 \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# copy over the needed configs to run the dep installation # copy over the needed configs to run the dep installation
# note: this approach can be a bit unhandy to maintain, but it allows # note: this approach can be a bit unhandy to maintain, but it allows
......
const isForkModeEnabled = !!process.env.FORK_URL const isForkModeEnabled = !!process.env.FORK_URL
const forkUrl = process.env.FORK_URL const forkUrl = process.env.FORK_URL
const forkStartingBlock = parseInt(process.env.FORK_STARTING_BLOCK) || undefined const forkStartingBlock =
const gasPrice = parseInt(process.env.GAS_PRICE) || 0 parseInt(process.env.FORK_STARTING_BLOCK, 10) || undefined
const gasPrice = parseInt(process.env.GAS_PRICE, 10) || 0
const config = { const config = {
networks: { networks: {
hardhat: { hardhat: {
gasPrice, gasPrice,
initialBaseFeePerGas: 0 initialBaseFeePerGas: 0,
}, },
}, },
analytics: { enabled: false }, analytics: { enabled: false },
......
...@@ -6,6 +6,6 @@ ...@@ -6,6 +6,6 @@
}, },
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"hardhat": "^2.7.0" "hardhat": "^2.9.2"
} }
} }
...@@ -20,12 +20,12 @@ WS_PORT=8546 ...@@ -20,12 +20,12 @@ WS_PORT=8546
WS_API=eth,net,rollup,web3 WS_API=eth,net,rollup,web3
WS_ORIGINS=* WS_ORIGINS=*
CHAIN_ID=987 CHAIN_ID=17
DATADIR=/root/.ethereum DATADIR=/root/.ethereum
GASPRICE=0 GASPRICE=0
GCMODE=archive GCMODE=archive
IPC_DISABLE=true IPC_DISABLE=true
NETWORK_ID=987 NETWORK_ID=17
NO_USB=true NO_USB=true
NO_DISCOVER=true NO_DISCOVER=true
TARGET_GAS_LIMIT=15000000 TARGET_GAS_LIMIT=15000000
......
#!/bin/sh
RETRIES=${RETRIES:-40}
if [[ -z $GAS_PRICE_ORACLE_ETHEREUM_HTTP_URL ]]; then
echo "Must set env GAS_PRICE_ORACLE_ETHEREUM_HTTP_URL"
exit 1
fi
# waits for l2geth to be up
curl --fail \
--show-error \
--silent \
--retry-connrefused \
--retry $RETRIES \
--retry-delay 1 \
--output /dev/null \
$GAS_PRICE_ORACLE_ETHEREUM_HTTP_URL
exec gas-oracle "$@"
...@@ -8,7 +8,7 @@ do ...@@ -8,7 +8,7 @@ do
sleep 1 sleep 1
if [ $i -eq $RETRIES ]; then if [ $i -eq $RETRIES ]; then
echo 'Timed out waiting for sequencer' echo 'Timed out waiting for sequencer'
break exit 1
fi fi
echo 'Waiting for sequencer...' echo 'Waiting for sequencer...'
((i=i+1)) ((i=i+1))
......
...@@ -218,6 +218,16 @@ export abstract class BaseServiceV2< ...@@ -218,6 +218,16 @@ export abstract class BaseServiceV2<
return acc return acc
}, {}) as TOptions }, {}) as TOptions
// Make sure all options are defined.
for (const [optionName, optionSpec] of Object.entries(params.optionsSpec)) {
if (
optionSpec.default === undefined &&
this.options[optionName] === undefined
) {
throw new Error(`missing required option: ${optionName}`)
}
}
// Create the metrics objects. // Create the metrics objects.
this.metrics = Object.keys(params.metricsSpec || {}).reduce((acc, key) => { this.metrics = Object.keys(params.metricsSpec || {}).reduce((acc, key) => {
const spec = params.metricsSpec[key] const spec = params.metricsSpec[key]
...@@ -237,11 +247,26 @@ export abstract class BaseServiceV2< ...@@ -237,11 +247,26 @@ export abstract class BaseServiceV2<
this.logger = new Logger({ name: params.name }) this.logger = new Logger({ name: params.name })
// Gracefully handle stop signals. // Gracefully handle stop signals.
const maxSignalCount = 3
let currSignalCount = 0
const stop = async (signal: string) => { const stop = async (signal: string) => {
// Allow exiting fast if more signals are received.
currSignalCount++
if (currSignalCount === 1) {
this.logger.info(`stopping service with signal`, { signal }) this.logger.info(`stopping service with signal`, { signal })
await this.stop() await this.stop()
process.exit(0) process.exit(0)
} else if (currSignalCount >= maxSignalCount) {
this.logger.info(`performing hard stop`)
process.exit(0)
} else {
this.logger.info(
`send ${maxSignalCount - currSignalCount} more signal(s) to hard stop`
)
} }
}
// Handle stop signals.
process.on('SIGTERM', stop) process.on('SIGTERM', stop)
process.on('SIGINT', stop) process.on('SIGINT', stop)
} }
......
...@@ -18,6 +18,19 @@ const provider = makeValidator<Provider>((input) => { ...@@ -18,6 +18,19 @@ const provider = makeValidator<Provider>((input) => {
return new ethers.providers.JsonRpcProvider(parsed) return new ethers.providers.JsonRpcProvider(parsed)
}) })
const jsonRpcProvider = makeValidator<ethers.providers.JsonRpcProvider>(
(input) => {
const parsed = url()._parse(input)
return new ethers.providers.JsonRpcProvider(parsed)
}
)
const staticJsonRpcProvider =
makeValidator<ethers.providers.StaticJsonRpcProvider>((input) => {
const parsed = url()._parse(input)
return new ethers.providers.StaticJsonRpcProvider(parsed)
})
const wallet = makeValidator<Signer>((input) => { const wallet = makeValidator<Signer>((input) => {
if (!ethers.utils.isHexString(input)) { if (!ethers.utils.isHexString(input)) {
throw new Error(`expected wallet to be a hex string`) throw new Error(`expected wallet to be a hex string`)
...@@ -37,4 +50,6 @@ export const validators = { ...@@ -37,4 +50,6 @@ export const validators = {
json, json,
wallet, wallet,
provider, provider,
jsonRpcProvider,
staticJsonRpcProvider,
} }
...@@ -4,7 +4,7 @@ const config: DeployConfig = { ...@@ -4,7 +4,7 @@ const config: DeployConfig = {
network: 'local', network: 'local',
l1BlockTimeSeconds: 15, l1BlockTimeSeconds: 15,
l2BlockGasLimit: 15_000_000, l2BlockGasLimit: 15_000_000,
l2ChainId: 987, l2ChainId: 17,
ctcL2GasDiscountDivisor: 32, ctcL2GasDiscountDivisor: 32,
ctcEnqueueGasCost: 60_000, ctcEnqueueGasCost: 60_000,
sccFaultProofWindowSeconds: 0, sccFaultProofWindowSeconds: 0,
......
...@@ -95,6 +95,16 @@ StateCommitmentChain ...@@ -95,6 +95,16 @@ StateCommitmentChain
</a> </a>
</td> </td>
</tr> </tr>
<tr>
<td>
TeleportrDeposit
</td>
<td align="center">
<a href="https://kovan.etherscan.io/address/0x4821975ca220601c153d02353300d6ad34adc362">
<code>0x4821975ca220601c153d02353300d6ad34adc362</code>
</a>
</td>
</tr>
</table> </table>
## Layer 2 Contracts ## Layer 2 Contracts
......
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
"ethereum-waffle": "^3.3.0", "ethereum-waffle": "^3.3.0",
"ethers": "^5.5.4", "ethers": "^5.5.4",
"glob": "^7.1.6", "glob": "^7.1.6",
"hardhat": "^2.3.0", "hardhat": "^2.9.2",
"hardhat-deploy": "^0.9.3", "hardhat-deploy": "^0.9.3",
"hardhat-gas-reporter": "^1.0.4", "hardhat-gas-reporter": "^1.0.4",
"hardhat-output-validator": "^0.1.18", "hardhat-output-validator": "^0.1.18",
......
...@@ -26,9 +26,9 @@ describe('OVM_GasPriceOracle', () => { ...@@ -26,9 +26,9 @@ describe('OVM_GasPriceOracle', () => {
await signer1.getAddress() await signer1.getAddress()
) )
OVM_GasPriceOracle.setOverhead(2750) await OVM_GasPriceOracle.setOverhead(2750)
OVM_GasPriceOracle.setScalar(1500000) await OVM_GasPriceOracle.setScalar(1500000)
OVM_GasPriceOracle.setDecimals(6) await OVM_GasPriceOracle.setDecimals(6)
}) })
describe('owner', () => { describe('owner', () => {
......
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
"eslint-plugin-prettier": "^3.4.0", "eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-react": "^7.24.0", "eslint-plugin-react": "^7.24.0",
"eslint-plugin-unicorn": "^32.0.1", "eslint-plugin-unicorn": "^32.0.1",
"hardhat": "^2.3.0", "hardhat": "^2.9.2",
"lint-staged": "11.0.0", "lint-staged": "11.0.0",
"mocha": "^8.4.0", "mocha": "^8.4.0",
"pino-pretty": "^4.7.1", "pino-pretty": "^4.7.1",
......
...@@ -27,6 +27,7 @@ const TRANSPORT_DB_KEYS = { ...@@ -27,6 +27,7 @@ const TRANSPORT_DB_KEYS = {
STARTING_L1_BLOCK: `l1:starting`, STARTING_L1_BLOCK: `l1:starting`,
HIGHEST_L2_BLOCK: `l2:highest`, HIGHEST_L2_BLOCK: `l2:highest`,
HIGHEST_SYNCED_BLOCK: `synced:highest`, HIGHEST_SYNCED_BLOCK: `synced:highest`,
CONSISTENCY_CHECK: `consistency:checked`,
} }
interface Indexed { interface Indexed {
...@@ -202,6 +203,20 @@ export class TransportDB { ...@@ -202,6 +203,20 @@ export class TransportDB {
return this.db.get<number>(TRANSPORT_DB_KEYS.HIGHEST_L2_BLOCK, 0) return this.db.get<number>(TRANSPORT_DB_KEYS.HIGHEST_L2_BLOCK, 0)
} }
public async getConsistencyCheckFlag(): Promise<boolean> {
return this.db.get<boolean>(TRANSPORT_DB_KEYS.CONSISTENCY_CHECK, 0)
}
public async putConsistencyCheckFlag(flag: boolean): Promise<void> {
return this.db.put<boolean>([
{
key: TRANSPORT_DB_KEYS.CONSISTENCY_CHECK,
index: 0,
value: flag,
},
])
}
public async putHighestL2BlockNumber( public async putHighestL2BlockNumber(
block: number | BigNumber block: number | BigNumber
): Promise<void> { ): Promise<void> {
......
export type EventName = 'SequencerTransaction'
export class MissingElementError extends Error {
constructor(public name: EventName) {
super(`missing event: ${name}`)
}
}
...@@ -11,6 +11,7 @@ import { ...@@ -11,6 +11,7 @@ import {
TransactionEntry, TransactionEntry,
} from '../../../types' } from '../../../types'
import { parseSignatureVParam } from '../../../utils' import { parseSignatureVParam } from '../../../utils'
import { MissingElementError } from './errors'
export const handleSequencerBlock = { export const handleSequencerBlock = {
parseBlock: async ( parseBlock: async (
...@@ -22,9 +23,12 @@ export const handleSequencerBlock = { ...@@ -22,9 +23,12 @@ export const handleSequencerBlock = {
}> => { }> => {
const transaction = block.transactions[0] const transaction = block.transactions[0]
const transactionIndex = const transactionIndex =
transaction.index === null || transaction.index === undefined BigNumber.from(transaction.blockNumber).toNumber() - 1
? BigNumber.from(transaction.blockNumber).toNumber() - 1
: BigNumber.from(transaction.index).toNumber() // We make the assumption that you don't need to sync the genesis block
if (transactionIndex < 0) {
throw new Error('should not happen, attempted to sync genesis block')
}
let transactionEntry: Partial<TransactionEntry> = { let transactionEntry: Partial<TransactionEntry> = {
// Legacy support. // Legacy support.
...@@ -111,6 +115,17 @@ export const handleSequencerBlock = { ...@@ -111,6 +115,17 @@ export const handleSequencerBlock = {
}, },
db: TransportDB db: TransportDB
): Promise<void> => { ): Promise<void> => {
if (entry.transactionEntry.index > 0) {
const prevTransactionEntry = await db.getUnconfirmedTransactionByIndex(
entry.transactionEntry.index - 1
)
// We should *always* have a previous transaction here.
if (prevTransactionEntry === null) {
throw new MissingElementError('SequencerTransaction')
}
}
// Having separate indices for confirmed/unconfirmed means we never have to worry about // Having separate indices for confirmed/unconfirmed means we never have to worry about
// accidentally overwriting a confirmed transaction with an unconfirmed one. Unconfirmed // accidentally overwriting a confirmed transaction with an unconfirmed one. Unconfirmed
// transactions are purely extra information. // transactions are purely extra information.
......
...@@ -6,7 +6,7 @@ import { BigNumber } from 'ethers' ...@@ -6,7 +6,7 @@ import { BigNumber } from 'ethers'
import { LevelUp } from 'levelup' import { LevelUp } from 'levelup'
import axios from 'axios' import axios from 'axios'
import bfj from 'bfj' import bfj from 'bfj'
import { Gauge } from 'prom-client' import { Gauge, Histogram } from 'prom-client'
/* Imports: Internal */ /* Imports: Internal */
import { handleSequencerBlock } from './handlers/transaction' import { handleSequencerBlock } from './handlers/transaction'
...@@ -16,6 +16,7 @@ import { L1DataTransportServiceOptions } from '../main/service' ...@@ -16,6 +16,7 @@ import { L1DataTransportServiceOptions } from '../main/service'
interface L2IngestionMetrics { interface L2IngestionMetrics {
highestSyncedL2Block: Gauge<string> highestSyncedL2Block: Gauge<string>
fetchBlocksRequestTime: Histogram<string>
} }
const registerMetrics = ({ const registerMetrics = ({
...@@ -27,6 +28,12 @@ const registerMetrics = ({ ...@@ -27,6 +28,12 @@ const registerMetrics = ({
help: 'Highest Synced L2 Block Number', help: 'Highest Synced L2 Block Number',
registers: [registry], registers: [registry],
}), }),
fetchBlocksRequestTime: new client.Histogram({
name: 'data_transport_layer_fetch_blocks_time',
help: 'Amount of time fetching remote L2 blocks takes',
buckets: [0.1, 5, 15, 50, 100, 500],
registers: [registry],
}),
}) })
export interface L2IngestionServiceOptions export interface L2IngestionServiceOptions
...@@ -100,7 +107,58 @@ export class L2IngestionService extends BaseService<L2IngestionServiceOptions> { ...@@ -100,7 +107,58 @@ export class L2IngestionService extends BaseService<L2IngestionServiceOptions> {
: this.options.l2RpcProvider : this.options.l2RpcProvider
} }
protected async ensure(): Promise<void> {
let retries = 0
while (true) {
try {
await this.state.l2RpcProvider.getNetwork()
break
} catch (e) {
retries++
this.logger.info(`Cannot connect to L2, retrying ${retries}/20`)
if (retries >= 20) {
this.logger.info('Cannot connect to L2, shutting down')
await this.stop()
process.exit()
}
await sleep(1000 * retries)
}
}
}
protected async checkConsistency(): Promise<void> {
const network = await this.state.l2RpcProvider.getNetwork()
const shouldDoCheck = !(await this.state.db.getConsistencyCheckFlag())
if (shouldDoCheck && network.chainId === 69) {
this.logger.info('performing consistency check')
const highestBlock =
await this.state.db.getHighestSyncedUnconfirmedBlock()
for (let i = 0; i < highestBlock; i++) {
const block = await this.state.db.getUnconfirmedTransactionByIndex(i)
if (block === null) {
this.logger.info('resetting to null block', {
index: i,
})
await this.state.db.setHighestSyncedUnconfirmedBlock(i)
break
}
// Log some progress so people know what's goin on.
if (i % 10000 === 0) {
this.logger.info(`consistency check progress`, {
index: i,
})
}
}
this.logger.info('consistency check complete')
await this.state.db.putConsistencyCheckFlag(true)
}
}
protected async _start(): Promise<void> { protected async _start(): Promise<void> {
await this.ensure()
await this.checkConsistency()
while (this.running) { while (this.running) {
try { try {
const highestSyncedL2BlockNumber = const highestSyncedL2BlockNumber =
...@@ -240,6 +298,8 @@ export class L2IngestionService extends BaseService<L2IngestionServiceOptions> { ...@@ -240,6 +298,8 @@ export class L2IngestionService extends BaseService<L2IngestionServiceOptions> {
) )
} }
const end = this.l2IngestionMetrics.fetchBlocksRequestTime.startTimer()
const resp = await axios.post( const resp = await axios.post(
this.state.l2RpcProvider.connection.url, this.state.l2RpcProvider.connection.url,
req, req,
...@@ -249,6 +309,8 @@ export class L2IngestionService extends BaseService<L2IngestionServiceOptions> { ...@@ -249,6 +309,8 @@ export class L2IngestionService extends BaseService<L2IngestionServiceOptions> {
yieldRate: 4096, // this yields abit more often than the default of 16384 yieldRate: 4096, // this yields abit more often than the default of 16384
}) })
end()
result = respJson.result result = respJson.result
if (result === null) { if (result === null) {
retry++ retry++
......
...@@ -89,6 +89,10 @@ export class L1DataTransportService extends BaseService<L1DataTransportServiceOp ...@@ -89,6 +89,10 @@ export class L1DataTransportService extends BaseService<L1DataTransportServiceOp
} }
}) })
this.state.metrics.client.collectDefaultMetrics({
prefix: 'data_transport_layer_'
})
this.state.failureCounter = new this.state.metrics.client.Counter({ this.state.failureCounter = new this.state.metrics.client.Counter({
name: 'data_transport_layer_main_service_failures', name: 'data_transport_layer_main_service_failures',
help: 'Counts the number of times that the main service fails', help: 'Counts the number of times that the main service fails',
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
"eslint-plugin-react": "^7.24.0", "eslint-plugin-react": "^7.24.0",
"eslint-plugin-unicorn": "^32.0.1", "eslint-plugin-unicorn": "^32.0.1",
"ethereum-waffle": "^3.3.0", "ethereum-waffle": "^3.3.0",
"hardhat": "^2.3.0", "hardhat": "^2.9.2",
"lint-staged": "11.0.0", "lint-staged": "11.0.0",
"prettier": "^2.3.1", "prettier": "^2.3.1",
"ts-node": "^10.0.0", "ts-node": "^10.0.0",
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
"eslint-plugin-unicorn": "^32.0.1", "eslint-plugin-unicorn": "^32.0.1",
"ethereum-waffle": "^3.4.0", "ethereum-waffle": "^3.4.0",
"ethers": "^5.5.4", "ethers": "^5.5.4",
"hardhat": "^2.3.0", "hardhat": "^2.9.2",
"lint-staged": "11.0.0", "lint-staged": "11.0.0",
"mocha": "^8.4.0", "mocha": "^8.4.0",
"nyc": "^15.1.0", "nyc": "^15.1.0",
......
...@@ -550,29 +550,28 @@ ...@@ -550,29 +550,28 @@
patch-package "^6.2.2" patch-package "^6.2.2"
postinstall-postinstall "^2.1.0" postinstall-postinstall "^2.1.0"
"@ethereumjs/block@^3.4.0": "@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.0", "@ethereumjs/block@^3.6.1":
version "3.4.0" version "3.6.1"
resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.4.0.tgz#4747b0c06220ee10cbdfe1cbde8cbb0677b1b074" resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.1.tgz#50574d3e993ae247dcfe2abbdb91d2a4a22accb9"
integrity sha512-umKAoTX32yXzErpIksPHodFc/5y8bmZMnOl6hWy5Vd8xId4+HKFUOyEiN16Y97zMwFRysRpcrR6wBejfqc6Bmg== integrity sha512-o5d/zpGl4SdVfdTfrsq9ZgYMXddc0ucKMiFW5OphBCX+ep4xzYnSjboFcZXT2V/tcSBr84VrKWWp21CGVb3DGw==
dependencies: dependencies:
"@ethereumjs/common" "^2.4.0" "@ethereumjs/common" "^2.6.1"
"@ethereumjs/tx" "^3.3.0" "@ethereumjs/tx" "^3.5.0"
ethereumjs-util "^7.1.0" ethereumjs-util "^7.1.4"
merkle-patricia-tree "^4.2.0" merkle-patricia-tree "^4.2.3"
"@ethereumjs/blockchain@^5.4.0": "@ethereumjs/blockchain@^5.5.0", "@ethereumjs/blockchain@^5.5.1":
version "5.4.0" version "5.5.1"
resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.4.0.tgz#28d712627d3442b2bb1f50dd5acba7cde1021993" resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.1.tgz#60f1f50592c06cc47e1704800b88b7d32f609742"
integrity sha512-wAuKLaew6PL52kH8YPXO7PbjjKV12jivRSyHQehkESw4slSLLfYA6Jv7n5YxyT2ajD7KNMPVh7oyF/MU6HcOvg== integrity sha512-JS2jeKxl3tlaa5oXrZ8mGoVBCz6YqsGG350XVNtHAtNZXKk7pU3rH4xzF2ru42fksMMqzFLzKh9l4EQzmNWDqA==
dependencies: dependencies:
"@ethereumjs/block" "^3.4.0" "@ethereumjs/block" "^3.6.0"
"@ethereumjs/common" "^2.4.0" "@ethereumjs/common" "^2.6.0"
"@ethereumjs/ethash" "^1.0.0" "@ethereumjs/ethash" "^1.1.0"
debug "^2.2.0" debug "^2.2.0"
ethereumjs-util "^7.1.0" ethereumjs-util "^7.1.3"
level-mem "^5.0.1" level-mem "^5.0.1"
lru-cache "^5.1.1" lru-cache "^5.1.1"
rlp "^2.2.4"
semaphore-async-await "^1.5.1" semaphore-async-await "^1.5.1"
"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0": "@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0":
...@@ -583,17 +582,26 @@ ...@@ -583,17 +582,26 @@
crc-32 "^1.2.0" crc-32 "^1.2.0"
ethereumjs-util "^7.1.0" ethereumjs-util "^7.1.0"
"@ethereumjs/ethash@^1.0.0": "@ethereumjs/common@^2.6.0", "@ethereumjs/common@^2.6.1", "@ethereumjs/common@^2.6.2":
version "1.0.0" version "2.6.2"
resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.0.0.tgz#4e77f85b37be1ade5393e8719bdabac3e796ddaa" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.2.tgz#eb006c9329c75c80f634f340dc1719a5258244df"
integrity sha512-iIqnGG6NMKesyOxv2YctB2guOVX18qMAWlj3QlZyrc+GqfzLqoihti+cVNQnyNxr7eYuPdqwLQOFuPe6g/uKjw== integrity sha512-vDwye5v0SVeuDky4MtKsu+ogkH2oFUV8pBKzH/eNBzT8oI91pKa8WyzDuYuxOQsgNgv5R34LfFDh2aaw3H4HbQ==
dependencies: dependencies:
crc-32 "^1.2.0"
ethereumjs-util "^7.1.4"
"@ethereumjs/ethash@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb"
integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==
dependencies:
"@ethereumjs/block" "^3.5.0"
"@types/levelup" "^4.3.0" "@types/levelup" "^4.3.0"
buffer-xor "^2.0.1" buffer-xor "^2.0.1"
ethereumjs-util "^7.0.7" ethereumjs-util "^7.1.1"
miller-rabin "^4.0.0" miller-rabin "^4.0.0"
"@ethereumjs/tx@^3.2.1", "@ethereumjs/tx@^3.3.0": "@ethereumjs/tx@^3.2.1":
version "3.3.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.0.tgz#14ed1b7fa0f28e1cd61e3ecbdab824205f6a4378" resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.0.tgz#14ed1b7fa0f28e1cd61e3ecbdab824205f6a4378"
integrity sha512-yTwEj2lVzSMgE6Hjw9Oa1DZks/nKTWM8Wn4ykDNapBPua2f4nXO3qKnni86O6lgDj5fVNRqbDsD0yy7/XNGDEA== integrity sha512-yTwEj2lVzSMgE6Hjw9Oa1DZks/nKTWM8Wn4ykDNapBPua2f4nXO3qKnni86O6lgDj5fVNRqbDsD0yy7/XNGDEA==
...@@ -601,24 +609,31 @@ ...@@ -601,24 +609,31 @@
"@ethereumjs/common" "^2.4.0" "@ethereumjs/common" "^2.4.0"
ethereumjs-util "^7.1.0" ethereumjs-util "^7.1.0"
"@ethereumjs/vm@^5.5.2": "@ethereumjs/tx@^3.4.0", "@ethereumjs/tx@^3.5.0":
version "5.5.2" version "3.5.0"
resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.5.2.tgz#918a2c1000aaa9fdbe6007a4fdc2c62833122adf" resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.0.tgz#783b0aeb08518b9991b23f5155763bbaf930a037"
integrity sha512-AydZ4wfvZAsBuFzs3xVSA2iU0hxhL8anXco3UW3oh9maVC34kTEytOfjHf06LTEfN0MF9LDQ4ciLa7If6ZN/sg== integrity sha512-/+ZNbnJhQhXC83Xuvy6I9k4jT5sXiV0tMR9C+AzSSpcCV64+NB8dTE1m3x98RYMqb8+TLYWA+HML4F5lfXTlJw==
dependencies: dependencies:
"@ethereumjs/block" "^3.4.0" "@ethereumjs/common" "^2.6.1"
"@ethereumjs/blockchain" "^5.4.0" ethereumjs-util "^7.1.4"
"@ethereumjs/common" "^2.4.0"
"@ethereumjs/tx" "^3.3.0" "@ethereumjs/vm@^5.6.0":
version "5.7.1"
resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.7.1.tgz#3bf757fbad0081838ccb4f22003cd73319ab3616"
integrity sha512-NiFm5FMaeDGZ9ojBL+Y9Y/xhW6S4Fgez+zPBM402T5kLsfeAR9mrRVckYhvkGVJ6FMwsY820CLjYP5OVwMjLTg==
dependencies:
"@ethereumjs/block" "^3.6.1"
"@ethereumjs/blockchain" "^5.5.1"
"@ethereumjs/common" "^2.6.2"
"@ethereumjs/tx" "^3.5.0"
async-eventemitter "^0.2.4" async-eventemitter "^0.2.4"
core-js-pure "^3.0.1" core-js-pure "^3.0.1"
debug "^2.2.0" debug "^4.3.3"
ethereumjs-util "^7.1.0" ethereumjs-util "^7.1.4"
functional-red-black-tree "^1.0.1" functional-red-black-tree "^1.0.1"
mcl-wasm "^0.7.1" mcl-wasm "^0.7.1"
merkle-patricia-tree "^4.2.0" merkle-patricia-tree "^4.2.3"
rustbn.js "~0.2.0" rustbn.js "~0.2.0"
util.promisify "^1.0.1"
"@ethersproject/abi@5.0.0-beta.153": "@ethersproject/abi@5.0.0-beta.153":
version "5.0.0-beta.153" version "5.0.0-beta.153"
...@@ -2447,6 +2462,17 @@ ...@@ -2447,6 +2462,17 @@
globby "^11.0.0" globby "^11.0.0"
read-yaml-file "^1.1.0" read-yaml-file "^1.1.0"
"@metamask/eth-sig-util@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.0.tgz#11553ba06de0d1352332c1bde28c8edd00e0dcf6"
integrity sha512-LczOjjxY4A7XYloxzyxJIHONELmUxVZncpOLoClpEcTiebiVdM46KRPYXGuULro9oNNR2xdVx3yoKiQjdfWmoA==
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"
"@nodelib/fs.scandir@2.1.5": "@nodelib/fs.scandir@2.1.5":
version "2.1.5" version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
...@@ -2907,11 +2933,6 @@ ...@@ -2907,11 +2933,6 @@
dependencies: dependencies:
"@sinonjs/commons" "^1.7.0" "@sinonjs/commons" "^1.7.0"
"@solidity-parser/parser@^0.11.0":
version "0.11.1"
resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.11.1.tgz#fa840af64840c930f24a9c82c08d4a092a068add"
integrity sha512-H8BSBoKE8EubJa0ONqecA2TviT3TnHeC4NpgnAHSUiuhZoQBfPB4L2P9bs8R6AoTW10Endvh3vc+fomVMIDIYQ==
"@solidity-parser/parser@^0.12.0": "@solidity-parser/parser@^0.12.0":
version "0.12.2" version "0.12.2"
resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.12.2.tgz#1afad367cb29a2ed8cdd4a3a62701c2821fb578f" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.12.2.tgz#1afad367cb29a2ed8cdd4a3a62701c2821fb578f"
...@@ -2924,10 +2945,10 @@ ...@@ -2924,10 +2945,10 @@
dependencies: dependencies:
antlr4ts "^0.5.0-alpha.4" antlr4ts "^0.5.0-alpha.4"
"@solidity-parser/parser@^0.14.0": "@solidity-parser/parser@^0.14.1":
version "0.14.0" version "0.14.1"
resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.0.tgz#d51f074efb0acce0e953ec48133561ed710cebc0" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.1.tgz#179afb29f4e295a77cc141151f26b3848abc3c46"
integrity sha512-cX0JJRcmPtNUJpzD2K7FdA7qQsTOk1UZnFx2k7qAg9ZRvuaH5NBe5IEdBMXGlmf2+FmjhqbygJ26H8l2SV7aKQ== integrity sha512-eLjj2L6AuQjBB6s/ibwCAc0DwrR5Ge+ys+wgWo+bviU7fV2nTMQhU63CGaDKXg9iTmMxwhkyoggdIR7ZGRfMgw==
dependencies: dependencies:
antlr4ts "^0.5.0-alpha.4" antlr4ts "^0.5.0-alpha.4"
...@@ -5271,6 +5292,21 @@ chokidar@3.5.1: ...@@ -5271,6 +5292,21 @@ chokidar@3.5.1:
optionalDependencies: optionalDependencies:
fsevents "~2.3.1" fsevents "~2.3.1"
chokidar@3.5.3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
chokidar@^3.4.0, chokidar@^3.4.3, chokidar@^3.5.2: chokidar@^3.4.0, chokidar@^3.4.3, chokidar@^3.5.2:
version "3.5.2" version "3.5.2"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
...@@ -6046,6 +6082,13 @@ debug@4.3.1: ...@@ -6046,6 +6082,13 @@ debug@4.3.1:
dependencies: dependencies:
ms "2.1.2" ms "2.1.2"
debug@4.3.3, debug@^4.3.3:
version "4.3.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
dependencies:
ms "2.1.2"
debug@^3.1.0, debug@^3.2.7: debug@^3.1.0, debug@^3.2.7:
version "3.2.7" version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
...@@ -7071,16 +7114,6 @@ eth-sig-util@^1.4.2: ...@@ -7071,16 +7114,6 @@ eth-sig-util@^1.4.2:
ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git"
ethereumjs-util "^5.1.1" ethereumjs-util "^5.1.1"
eth-sig-util@^2.5.2:
version "2.5.4"
resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.5.4.tgz#577b01fe491b6bf59b0464be09633e20c1677bc5"
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"
eth-tx-summary@^3.1.2: eth-tx-summary@^3.1.2:
version "3.2.4" version "3.2.4"
resolved "https://registry.yarnpkg.com/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz#e10eb95eb57cdfe549bf29f97f1e4f1db679035c" resolved "https://registry.yarnpkg.com/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz#e10eb95eb57cdfe549bf29f97f1e4f1db679035c"
...@@ -7274,7 +7307,7 @@ ethereumjs-util@6.2.0: ...@@ -7274,7 +7307,7 @@ ethereumjs-util@6.2.0:
rlp "^2.2.3" rlp "^2.2.3"
secp256k1 "^3.0.1" secp256k1 "^3.0.1"
ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0: ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0, ethereumjs-util@^6.2.1:
version "6.2.1" version "6.2.1"
resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69"
integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==
...@@ -7311,7 +7344,7 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum ...@@ -7311,7 +7344,7 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum
rlp "^2.0.0" rlp "^2.0.0"
safe-buffer "^5.1.1" safe-buffer "^5.1.1"
ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.7, ethereumjs-util@^7.1.0: ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.0:
version "7.1.0" version "7.1.0"
resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.0.tgz#e2b43a30bfcdbcb432a4eb42bd5f2393209b3fd5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.0.tgz#e2b43a30bfcdbcb432a4eb42bd5f2393209b3fd5"
integrity sha512-kR+vhu++mUDARrsMMhsjjzPduRVAeundLGXucGRHF3B4oEltOUspfgCVco4kckucj3FMlLaZHUl9n7/kdmr6Tw== integrity sha512-kR+vhu++mUDARrsMMhsjjzPduRVAeundLGXucGRHF3B4oEltOUspfgCVco4kckucj3FMlLaZHUl9n7/kdmr6Tw==
...@@ -7323,6 +7356,17 @@ ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.7, ethereu ...@@ -7323,6 +7356,17 @@ ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.7, ethereu
ethjs-util "0.1.6" ethjs-util "0.1.6"
rlp "^2.2.4" rlp "^2.2.4"
ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.3, ethereumjs-util@^7.1.4:
version "7.1.4"
resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz#a6885bcdd92045b06f596c7626c3e89ab3312458"
integrity sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==
dependencies:
"@types/bn.js" "^5.1.0"
bn.js "^5.1.2"
create-hash "^1.1.2"
ethereum-cryptography "^0.1.3"
rlp "^2.2.4"
ethereumjs-vm@4.2.0: ethereumjs-vm@4.2.0:
version "4.2.0" version "4.2.0"
resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-4.2.0.tgz#e885e861424e373dbc556278f7259ff3fca5edab" resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-4.2.0.tgz#e885e861424e373dbc556278f7259ff3fca5edab"
...@@ -7471,7 +7515,7 @@ ethjs-unit@0.1.6: ...@@ -7471,7 +7515,7 @@ ethjs-unit@0.1.6:
bn.js "4.11.6" bn.js "4.11.6"
number-to-bn "1.7.0" number-to-bn "1.7.0"
ethjs-util@0.1.6, ethjs-util@^0.1.3: ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6:
version "0.1.6" version "0.1.6"
resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536"
integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==
...@@ -8411,6 +8455,18 @@ glob@7.1.6: ...@@ -8411,6 +8455,18 @@ glob@7.1.6:
once "^1.3.0" once "^1.3.0"
path-is-absolute "^1.0.0" path-is-absolute "^1.0.0"
glob@7.2.0, glob@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
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"
glob@^5.0.15: glob@^5.0.15:
version "5.0.15" version "5.0.15"
resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
...@@ -8434,18 +8490,6 @@ glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl ...@@ -8434,18 +8490,6 @@ glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl
once "^1.3.0" once "^1.3.0"
path-is-absolute "^1.0.0" path-is-absolute "^1.0.0"
glob@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
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"
global-modules@^2.0.0: global-modules@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
...@@ -8644,76 +8688,25 @@ hardhat-watcher@^2.1.1: ...@@ -8644,76 +8688,25 @@ hardhat-watcher@^2.1.1:
dependencies: dependencies:
chokidar "^3.4.3" chokidar "^3.4.3"
hardhat@^2.3.0: hardhat@^2.9.2:
version "2.6.1" version "2.9.2"
resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.6.1.tgz#4553ca555c1ba8ed7c3c5a5a93e6082a2869b3ae" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.9.2.tgz#123f3fed6810ef8637b127b73ca44bb9c9efc249"
integrity sha512-0LozdYbPsiTc6ZXsfDQUTV3L0p4CMO5TRbd5qmeWiCYGmhd+7Mvdg4N+nA8w0g3gZ2OKFUmHIYlAbExI488ceQ== integrity sha512-elTcUK1EdFverWinybQ+DoJzsM6sgiHUYs0ZYNNXMfESty6ESHiFSwkfJsC88/q09vmIz6YVaMh73BYnYd+feQ==
dependencies:
"@ethereumjs/block" "^3.4.0"
"@ethereumjs/blockchain" "^5.4.0"
"@ethereumjs/common" "^2.4.0"
"@ethereumjs/tx" "^3.3.0"
"@ethereumjs/vm" "^5.5.2"
"@ethersproject/abi" "^5.1.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.1.0"
find-up "^2.1.0"
fp-ts "1.19.3"
fs-extra "^7.0.1"
glob "^7.1.3"
https-proxy-agent "^5.0.0"
immutable "^4.0.0-rc.12"
io-ts "1.10.4"
lodash "^4.17.11"
merkle-patricia-tree "^4.2.0"
mnemonist "^0.38.0"
mocha "^7.1.2"
node-fetch "^2.6.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.4.6"
hardhat@^2.7.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.7.0.tgz#d8f01bc07bdd88ccaa00719ddb18618bc59a73b5"
integrity sha512-DqweY3KH5gwExoZ8EtsAfioj0Hk0NBXWXT3fMXWkiQNfyYBoZLrqdPNkbJ/E2LD4mZ+BKF7v/1chYR9ZCn2Z+g==
dependencies: dependencies:
"@ethereumjs/block" "^3.4.0" "@ethereumjs/block" "^3.6.0"
"@ethereumjs/blockchain" "^5.4.0" "@ethereumjs/blockchain" "^5.5.0"
"@ethereumjs/common" "^2.4.0" "@ethereumjs/common" "^2.6.0"
"@ethereumjs/tx" "^3.3.0" "@ethereumjs/tx" "^3.4.0"
"@ethereumjs/vm" "^5.5.2" "@ethereumjs/vm" "^5.6.0"
"@ethersproject/abi" "^5.1.2" "@ethersproject/abi" "^5.1.2"
"@metamask/eth-sig-util" "^4.0.0"
"@sentry/node" "^5.18.1" "@sentry/node" "^5.18.1"
"@solidity-parser/parser" "^0.14.0" "@solidity-parser/parser" "^0.14.1"
"@types/bn.js" "^5.1.0" "@types/bn.js" "^5.1.0"
"@types/lru-cache" "^5.1.0" "@types/lru-cache" "^5.1.0"
abort-controller "^3.0.0" abort-controller "^3.0.0"
adm-zip "^0.4.16" adm-zip "^0.4.16"
aggregate-error "^3.0.0"
ansi-escapes "^4.3.0" ansi-escapes "^4.3.0"
chalk "^2.4.2" chalk "^2.4.2"
chokidar "^3.4.0" chokidar "^3.4.0"
...@@ -8721,22 +8714,20 @@ hardhat@^2.7.0: ...@@ -8721,22 +8714,20 @@ hardhat@^2.7.0:
debug "^4.1.1" debug "^4.1.1"
enquirer "^2.3.0" enquirer "^2.3.0"
env-paths "^2.2.0" env-paths "^2.2.0"
eth-sig-util "^2.5.2"
ethereum-cryptography "^0.1.2" ethereum-cryptography "^0.1.2"
ethereumjs-abi "^0.6.8" ethereumjs-abi "^0.6.8"
ethereumjs-util "^7.1.0" ethereumjs-util "^7.1.3"
find-up "^2.1.0" find-up "^2.1.0"
fp-ts "1.19.3" fp-ts "1.19.3"
fs-extra "^7.0.1" fs-extra "^7.0.1"
glob "^7.1.3" glob "^7.1.3"
https-proxy-agent "^5.0.0"
immutable "^4.0.0-rc.12" immutable "^4.0.0-rc.12"
io-ts "1.10.4" io-ts "1.10.4"
lodash "^4.17.11" lodash "^4.17.11"
merkle-patricia-tree "^4.2.0" merkle-patricia-tree "^4.2.2"
mnemonist "^0.38.0" mnemonist "^0.38.0"
mocha "^7.1.2" mocha "^9.2.0"
node-fetch "^2.6.0" p-map "^4.0.0"
qs "^6.7.0" qs "^6.7.0"
raw-body "^2.4.1" raw-body "^2.4.1"
resolve "1.17.0" resolve "1.17.0"
...@@ -8747,6 +8738,7 @@ hardhat@^2.7.0: ...@@ -8747,6 +8738,7 @@ hardhat@^2.7.0:
stacktrace-parser "^0.1.10" stacktrace-parser "^0.1.10"
"true-case-path" "^2.2.1" "true-case-path" "^2.2.1"
tsort "0.0.1" tsort "0.0.1"
undici "^4.14.1"
uuid "^8.3.2" uuid "^8.3.2"
ws "^7.4.6" ws "^7.4.6"
...@@ -9806,6 +9798,13 @@ js-yaml@4.0.0: ...@@ -9806,6 +9798,13 @@ js-yaml@4.0.0:
dependencies: dependencies:
argparse "^2.0.1" argparse "^2.0.1"
js-yaml@4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
dependencies:
argparse "^2.0.1"
jsbi@^3.1.4: jsbi@^3.1.4:
version "3.2.5" version "3.2.5"
resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-3.2.5.tgz#b37bb90e0e5c2814c1c2a1bcd8c729888a2e37d6" resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-3.2.5.tgz#b37bb90e0e5c2814c1c2a1bcd8c729888a2e37d6"
...@@ -10561,7 +10560,7 @@ log-symbols@4.0.0: ...@@ -10561,7 +10560,7 @@ log-symbols@4.0.0:
dependencies: dependencies:
chalk "^4.0.0" chalk "^4.0.0"
log-symbols@^4.1.0: log-symbols@4.1.0, log-symbols@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
...@@ -10943,7 +10942,7 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: ...@@ -10943,7 +10942,7 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2:
rlp "^2.0.0" rlp "^2.0.0"
semaphore ">=1.0.1" semaphore ">=1.0.1"
merkle-patricia-tree@^4.0.0, merkle-patricia-tree@^4.2.0: merkle-patricia-tree@^4.0.0:
version "4.2.1" version "4.2.1"
resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.1.tgz#fc43e7b162e597a0720ccdd702bf1d49765691d2" resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.1.tgz#fc43e7b162e597a0720ccdd702bf1d49765691d2"
integrity sha512-25reMgrT8PhJy0Ba0U7fMZD2oobS1FPWB9vQa0uBpJYIQYYuFXEHoqEkTqA/UzX+s9br3pmUVVY/TOsFt/x0oQ== integrity sha512-25reMgrT8PhJy0Ba0U7fMZD2oobS1FPWB9vQa0uBpJYIQYYuFXEHoqEkTqA/UzX+s9br3pmUVVY/TOsFt/x0oQ==
...@@ -10956,6 +10955,18 @@ merkle-patricia-tree@^4.0.0, merkle-patricia-tree@^4.2.0: ...@@ -10956,6 +10955,18 @@ merkle-patricia-tree@^4.0.0, merkle-patricia-tree@^4.2.0:
rlp "^2.2.4" rlp "^2.2.4"
semaphore-async-await "^1.5.1" semaphore-async-await "^1.5.1"
merkle-patricia-tree@^4.2.2, merkle-patricia-tree@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.3.tgz#b4e5d485d231f02b255ed79a7852f9d12ee0c09f"
integrity sha512-S4xevdXl5KvdBGgUxhQcxoep0onqXiIhzfwZp4M78kIuJH3Pu9o9IUgqhzSFOR2ykLO6t265026Xb6PY0q2UFQ==
dependencies:
"@types/levelup" "^4.3.0"
ethereumjs-util "^7.1.4"
level-mem "^5.0.1"
level-ws "^2.0.0"
readable-stream "^3.6.0"
semaphore-async-await "^1.5.1"
merkletreejs@^0.2.18: merkletreejs@^0.2.18:
version "0.2.24" version "0.2.24"
resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.2.24.tgz#6dc52b3e0946846c25816216f1b60094a18a5e7a" resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.2.24.tgz#6dc52b3e0946846c25816216f1b60094a18a5e7a"
...@@ -11240,7 +11251,7 @@ mnemonist@^0.38.0: ...@@ -11240,7 +11251,7 @@ mnemonist@^0.38.0:
dependencies: dependencies:
obliterator "^1.6.1" obliterator "^1.6.1"
mocha@^7.1.1, mocha@^7.1.2: mocha@^7.1.1:
version "7.2.0" version "7.2.0"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604"
integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==
...@@ -11301,6 +11312,36 @@ mocha@^8.4.0: ...@@ -11301,6 +11312,36 @@ mocha@^8.4.0:
yargs-parser "20.2.4" yargs-parser "20.2.4"
yargs-unparser "2.0.0" yargs-unparser "2.0.0"
mocha@^9.2.0:
version "9.2.1"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.1.tgz#a1abb675aa9a8490798503af57e8782a78f1338e"
integrity sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==
dependencies:
"@ungap/promise-all-settled" "1.1.2"
ansi-colors "4.1.1"
browser-stdout "1.3.1"
chokidar "3.5.3"
debug "4.3.3"
diff "5.0.0"
escape-string-regexp "4.0.0"
find-up "5.0.0"
glob "7.2.0"
growl "1.10.5"
he "1.2.0"
js-yaml "4.1.0"
log-symbols "4.1.0"
minimatch "3.0.4"
ms "2.1.3"
nanoid "3.2.0"
serialize-javascript "6.0.0"
strip-json-comments "3.1.1"
supports-color "8.1.1"
which "2.0.2"
workerpool "6.2.0"
yargs "16.2.0"
yargs-parser "20.2.4"
yargs-unparser "2.0.0"
mock-fs@^4.1.0: mock-fs@^4.1.0:
version "4.14.0" version "4.14.0"
resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18"
...@@ -11426,6 +11467,11 @@ nanoid@3.1.20: ...@@ -11426,6 +11467,11 @@ nanoid@3.1.20:
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788"
integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==
nanoid@3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c"
integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==
nanomatch@^1.2.9: nanomatch@^1.2.9:
version "1.2.13" version "1.2.13"
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
...@@ -13818,6 +13864,13 @@ serialize-javascript@5.0.1: ...@@ -13818,6 +13864,13 @@ serialize-javascript@5.0.1:
dependencies: dependencies:
randombytes "^2.1.0" randombytes "^2.1.0"
serialize-javascript@6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
dependencies:
randombytes "^2.1.0"
serve-static@1.14.1: serve-static@1.14.1:
version "1.14.1" version "1.14.1"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
...@@ -15244,7 +15297,7 @@ tunnel-agent@^0.6.0: ...@@ -15244,7 +15297,7 @@ tunnel-agent@^0.6.0:
dependencies: dependencies:
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
tweetnacl-util@^0.15.0: tweetnacl-util@^0.15.0, tweetnacl-util@^0.15.1:
version "0.15.1" version "0.15.1"
resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b"
integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==
...@@ -15455,6 +15508,11 @@ underscore@1.9.1: ...@@ -15455,6 +15508,11 @@ underscore@1.9.1:
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
undici@^4.14.1:
version "4.15.0"
resolved "https://registry.yarnpkg.com/undici/-/undici-4.15.0.tgz#507ec94bce46bec5c76e934938c50b825eda8258"
integrity sha512-kHppwh/y49FLEXl/zYCCbGB0D3nrcWNBczNYCsDdNYzWPs80aQgfKic1PVkJEIc2YlR7m0Lf5i559zbr0AA7FQ==
union-value@^1.0.0: union-value@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
...@@ -15623,7 +15681,7 @@ util-promisify@^2.1.0: ...@@ -15623,7 +15681,7 @@ util-promisify@^2.1.0:
dependencies: dependencies:
object.getownpropertydescriptors "^2.0.3" object.getownpropertydescriptors "^2.0.3"
util.promisify@^1.0.0, util.promisify@^1.0.1: util.promisify@^1.0.0:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b"
integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==
...@@ -16371,6 +16429,11 @@ workerpool@6.1.0: ...@@ -16371,6 +16429,11 @@ workerpool@6.1.0:
resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b"
integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==
workerpool@6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b"
integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==
wrap-ansi@^2.0.0: wrap-ansi@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment