From a9ebfdc5d1b17443b2c7f54d27764b95842ffe2b Mon Sep 17 00:00:00 2001 From: cby3149 Date: Mon, 7 Aug 2023 12:13:40 -0700 Subject: [PATCH 01/34] Add Github Action to push images from boba-develop --- .github/workflows/boba-publish-develop.yml | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/boba-publish-develop.yml diff --git a/.github/workflows/boba-publish-develop.yml b/.github/workflows/boba-publish-develop.yml new file mode 100644 index 0000000000000..1c4b21275587f --- /dev/null +++ b/.github/workflows/boba-publish-develop.yml @@ -0,0 +1,51 @@ +name: Publish Packages (boba-develop) + +on: + push: + branches: + - 'boba-develop' + +jobs: + publish-develop: + name: Publish Packages + runs-on: ubuntu-latest + # These permissions are needed to interact with GitHub's OIDC Token endpoint. + permissions: + id-token: write + contents: read + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_USERNAME }} + password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} + + - name: Build the services + working-directory: ./ops-bedrock + run: | + docker-compose -f docker-copose.yml build + + - name: Print images + working-directory: ./ + run: docker images + + - name: Rename and retag images + working-directory: ./ops-bedrock + run: | + for i in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep bobanetwork); do + docker image tag "$i" bobanetwork/$(echo $i | awk -F'/' '{print $2}' | awk -F':' '{print $1}'):latest + done + docker images + + - name: Push images + working-directory: ./ops + run: | + for i in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep bobanetwork); do + echo "$1" + docker push "$i" + done From c31adf3be36cdbbc3df4d1447c03d8eede8e7134 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Mon, 7 Aug 2023 12:28:52 -0700 Subject: [PATCH 02/34] debug action --- .github/workflows/boba-publish-develop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/boba-publish-develop.yml b/.github/workflows/boba-publish-develop.yml index 1c4b21275587f..624a4f6dd29d5 100644 --- a/.github/workflows/boba-publish-develop.yml +++ b/.github/workflows/boba-publish-develop.yml @@ -3,7 +3,7 @@ name: Publish Packages (boba-develop) on: push: branches: - - 'boba-develop' + - 'add-github-action' jobs: publish-develop: From 354de16b80b0bbe65f34fdab9095ea5d0257261c Mon Sep 17 00:00:00 2001 From: cby3149 Date: Mon, 7 Aug 2023 12:29:52 -0700 Subject: [PATCH 03/34] Fix file name --- .github/workflows/boba-publish-develop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/boba-publish-develop.yml b/.github/workflows/boba-publish-develop.yml index 624a4f6dd29d5..43d250c9a1d23 100644 --- a/.github/workflows/boba-publish-develop.yml +++ b/.github/workflows/boba-publish-develop.yml @@ -28,7 +28,7 @@ jobs: - name: Build the services working-directory: ./ops-bedrock run: | - docker-compose -f docker-copose.yml build + docker-compose -f docker-compose.yml build - name: Print images working-directory: ./ From b1eb82daa245756e90e0971882565a3a22b2448f Mon Sep 17 00:00:00 2001 From: cby3149 Date: Mon, 7 Aug 2023 12:44:43 -0700 Subject: [PATCH 04/34] Remove duplicate test and add image name --- boba-chain-ops/ether/migrate_test.go | 15 --------------- ops-bedrock/docker-compose.yml | 5 +++++ 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/boba-chain-ops/ether/migrate_test.go b/boba-chain-ops/ether/migrate_test.go index c78b8e5631c04..d316e706cd747 100644 --- a/boba-chain-ops/ether/migrate_test.go +++ b/boba-chain-ops/ether/migrate_test.go @@ -356,21 +356,6 @@ func TestMigrateBalancesRandomMissing(t *testing.T) { err := doMigration(g, addresses, allowances, big.NewInt(0), false) require.ErrorContains(t, err, "unknown storage slot") } - - for i := 0; i < 100; i++ { - g, addresses, allowances, _ := setupRandTest(t) - - if len(addresses) == 0 { - continue - } - - // Remove a random allowance from the list of witnesses - idx := rand.Intn(len(allowances)) - allowances = append(allowances[:idx], allowances[idx+1:]...) - - err := doMigration(g, addresses, allowances, big.NewInt(0), false) - require.ErrorContains(t, err, "unknown storage slot") - } } func randAddr(t *testing.T) common.Address { diff --git a/ops-bedrock/docker-compose.yml b/ops-bedrock/docker-compose.yml index f155ae5d5921a..541efb01a514d 100644 --- a/ops-bedrock/docker-compose.yml +++ b/ops-bedrock/docker-compose.yml @@ -12,6 +12,7 @@ volumes: services: l1: + image: bobanetwork/geth:latest build: context: . dockerfile: Dockerfile.l1 @@ -39,6 +40,7 @@ services: # - "/entrypoint.sh" # - "--authrpc.jwtsecret=/config/test-jwt-secret.txt" l2: + image: bobanetwork/erigon:latest build: context: .. dockerfile: ops-bedrock/Dockerfile.l2-erigon @@ -57,6 +59,7 @@ services: depends_on: - l1 # - l2 + image: bobanetwork/op-node:latest build: context: ../ dockerfile: ./op-node/Dockerfile @@ -100,6 +103,7 @@ services: - l1 - l2 - op-node + image: bobanetwork/op-proposer:latest build: context: ../ dockerfile: ./op-proposer/Dockerfile @@ -123,6 +127,7 @@ services: - l1 - l2 - op-node + image: bobanetwork/op-batcher:latest build: context: ../ dockerfile: ./op-batcher/Dockerfile From 4328c39220a3d988bca8dfaaf14f25e5463ff26c Mon Sep 17 00:00:00 2001 From: cby3149 Date: Mon, 7 Aug 2023 13:06:08 -0700 Subject: [PATCH 05/34] Add release tag --- .github/workflows/boba-publish-develop.yml | 2 +- .github/workflows/boba-publish-master.yml | 58 ++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/boba-publish-master.yml diff --git a/.github/workflows/boba-publish-develop.yml b/.github/workflows/boba-publish-develop.yml index 43d250c9a1d23..6264ff48231e5 100644 --- a/.github/workflows/boba-publish-develop.yml +++ b/.github/workflows/boba-publish-develop.yml @@ -3,7 +3,7 @@ name: Publish Packages (boba-develop) on: push: branches: - - 'add-github-action' + - 'boba-develop' jobs: publish-develop: diff --git a/.github/workflows/boba-publish-master.yml b/.github/workflows/boba-publish-master.yml new file mode 100644 index 0000000000000..263fb96217b67 --- /dev/null +++ b/.github/workflows/boba-publish-master.yml @@ -0,0 +1,58 @@ +name: Publish Packages (boba-master) + +on: + push: + tags: + - '*' + +jobs: + publish-develop: + name: Publish Packages + runs-on: ubuntu-latest + # These permissions are needed to interact with GitHub's OIDC Token endpoint. + permissions: + id-token: write + contents: read + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_USERNAME }} + password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} + + - name: Get the version + id: tag + run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//} + + - name: Print current tag + run: echo ${{ steps.tag.outputs.VERSION }} + + - name: Build the services + working-directory: ./ops-bedrock + run: | + docker-compose -f docker-compose.yml build + + - name: Print images + working-directory: ./ + run: docker images + + - name: Rename and retag images + working-directory: ./ops-bedrock + run: | + for i in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep bobanetwork); do + docker image tag "$i" bobanetwork/$(echo $i | awk -F'/' '{print $2}' | awk -F':' '{print $1}'):${{ steps.tag.outputs.VERSION }} + done + docker images + + - name: Push images + working-directory: ./ops + run: | + for i in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep bobanetwork); do + echo "$1" + docker push "$i" + done From f1e779b3df5060fbe7f5a1de6e9c74f6a4b463b7 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Tue, 8 Aug 2023 14:39:59 -0700 Subject: [PATCH 06/34] Use docker to build images --- .github/workflows/boba-publish-develop.yml | 10 +++++++--- .github/workflows/boba-publish-master.yml | 16 ++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/boba-publish-develop.yml b/.github/workflows/boba-publish-develop.yml index 6264ff48231e5..5ccbbd043eaee 100644 --- a/.github/workflows/boba-publish-develop.yml +++ b/.github/workflows/boba-publish-develop.yml @@ -3,7 +3,7 @@ name: Publish Packages (boba-develop) on: push: branches: - - 'boba-develop' + - 'add-github-action' jobs: publish-develop: @@ -26,9 +26,13 @@ jobs: password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - name: Build the services - working-directory: ./ops-bedrock + working-directory: . run: | - docker-compose -f docker-compose.yml build + docker build . -f ./ops-bedrock/Dockerfile.l1 -t bobanetwork/geth:latest & + docker build . -f ./ops-bedrock/Dockerfile.l2-erigon -t bobanetwork/erigon:latest & + docker build . -f ./op-node/Dockerfile -t bobanetwork/op-node:latest & + docker build . -f ./op-proposer/Dockerfile -t bobanetwork/op-proposer:latest & + docker build . -f ./op-batcher/Dockerfile -t bobanetwork/op-batcher:latest - name: Print images working-directory: ./ diff --git a/.github/workflows/boba-publish-master.yml b/.github/workflows/boba-publish-master.yml index 263fb96217b67..a16a217714e0d 100644 --- a/.github/workflows/boba-publish-master.yml +++ b/.github/workflows/boba-publish-master.yml @@ -33,22 +33,18 @@ jobs: run: echo ${{ steps.tag.outputs.VERSION }} - name: Build the services - working-directory: ./ops-bedrock + working-directory: . run: | - docker-compose -f docker-compose.yml build + docker build . -f ./ops-bedrock/Dockerfile.l1 -t bobanetwork/geth:${{ steps.tag.outputs.VERSION }} & + docker build . -f ./ops-bedrock/Dockerfile.l2-erigon -t bobanetwork/erigon:${{ steps.tag.outputs.VERSION }} & + docker build . -f ./op-node/Dockerfile -t bobanetwork/op-node:${{ steps.tag.outputs.VERSION }} & + docker build . -f ./op-proposer/Dockerfile -t bobanetwork/op-proposer:${{ steps.tag.outputs.VERSION }} & + docker build . -f ./op-batcher/Dockerfile -t bobanetwork/op-batcher:${{ steps.tag.outputs.VERSION }} - name: Print images working-directory: ./ run: docker images - - name: Rename and retag images - working-directory: ./ops-bedrock - run: | - for i in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep bobanetwork); do - docker image tag "$i" bobanetwork/$(echo $i | awk -F'/' '{print $2}' | awk -F':' '{print $1}'):${{ steps.tag.outputs.VERSION }} - done - docker images - - name: Push images working-directory: ./ops run: | From fd4e54b7e6d9e1df43f8fe36822150697dfd1bbe Mon Sep 17 00:00:00 2001 From: cby3149 Date: Tue, 8 Aug 2023 14:52:09 -0700 Subject: [PATCH 07/34] Fix bug --- .github/workflows/boba-publish-develop.yml | 20 ++++++++++++-------- .github/workflows/boba-publish-master.yml | 12 ++++++++---- ops-bedrock/docker-compose.yml | 5 ----- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/.github/workflows/boba-publish-develop.yml b/.github/workflows/boba-publish-develop.yml index 5ccbbd043eaee..30cbf8ce020fe 100644 --- a/.github/workflows/boba-publish-develop.yml +++ b/.github/workflows/boba-publish-develop.yml @@ -25,21 +25,25 @@ jobs: username: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_USERNAME }} password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN_SECRET }} - - name: Build the services + - name: Build l1 component + working-directory: ./ops-bedrock + run: | + docker build . -f ./Dockerfile.l1 -t bobanetwork/geth:latest + + - name: Build l2 components working-directory: . run: | - docker build . -f ./ops-bedrock/Dockerfile.l1 -t bobanetwork/geth:latest & - docker build . -f ./ops-bedrock/Dockerfile.l2-erigon -t bobanetwork/erigon:latest & - docker build . -f ./op-node/Dockerfile -t bobanetwork/op-node:latest & - docker build . -f ./op-proposer/Dockerfile -t bobanetwork/op-proposer:latest & + docker build . -f ./ops-bedrock/Dockerfile.l2-erigon -t bobanetwork/erigon:latest && + docker build . -f ./op-node/Dockerfile -t bobanetwork/op-node:latest && + docker build . -f ./op-proposer/Dockerfile -t bobanetwork/op-proposer:latest && docker build . -f ./op-batcher/Dockerfile -t bobanetwork/op-batcher:latest - name: Print images - working-directory: ./ + working-directory: . run: docker images - name: Rename and retag images - working-directory: ./ops-bedrock + working-directory: . run: | for i in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep bobanetwork); do docker image tag "$i" bobanetwork/$(echo $i | awk -F'/' '{print $2}' | awk -F':' '{print $1}'):latest @@ -47,7 +51,7 @@ jobs: docker images - name: Push images - working-directory: ./ops + working-directory: . run: | for i in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep bobanetwork); do echo "$1" diff --git a/.github/workflows/boba-publish-master.yml b/.github/workflows/boba-publish-master.yml index a16a217714e0d..59637f2ef02fc 100644 --- a/.github/workflows/boba-publish-master.yml +++ b/.github/workflows/boba-publish-master.yml @@ -32,21 +32,25 @@ jobs: - name: Print current tag run: echo ${{ steps.tag.outputs.VERSION }} - - name: Build the services + - name: Build l1 component + working-directory: ./ops-bedrock + run: | + docker build . -f ./Dockerfile.l1 -t bobanetwork/geth:${{ steps.tag.outputs.VERSION }} + + - name: Build l2 components working-directory: . run: | - docker build . -f ./ops-bedrock/Dockerfile.l1 -t bobanetwork/geth:${{ steps.tag.outputs.VERSION }} & docker build . -f ./ops-bedrock/Dockerfile.l2-erigon -t bobanetwork/erigon:${{ steps.tag.outputs.VERSION }} & docker build . -f ./op-node/Dockerfile -t bobanetwork/op-node:${{ steps.tag.outputs.VERSION }} & docker build . -f ./op-proposer/Dockerfile -t bobanetwork/op-proposer:${{ steps.tag.outputs.VERSION }} & docker build . -f ./op-batcher/Dockerfile -t bobanetwork/op-batcher:${{ steps.tag.outputs.VERSION }} - name: Print images - working-directory: ./ + working-directory: . run: docker images - name: Push images - working-directory: ./ops + working-directory: . run: | for i in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep bobanetwork); do echo "$1" diff --git a/ops-bedrock/docker-compose.yml b/ops-bedrock/docker-compose.yml index 541efb01a514d..f155ae5d5921a 100644 --- a/ops-bedrock/docker-compose.yml +++ b/ops-bedrock/docker-compose.yml @@ -12,7 +12,6 @@ volumes: services: l1: - image: bobanetwork/geth:latest build: context: . dockerfile: Dockerfile.l1 @@ -40,7 +39,6 @@ services: # - "/entrypoint.sh" # - "--authrpc.jwtsecret=/config/test-jwt-secret.txt" l2: - image: bobanetwork/erigon:latest build: context: .. dockerfile: ops-bedrock/Dockerfile.l2-erigon @@ -59,7 +57,6 @@ services: depends_on: - l1 # - l2 - image: bobanetwork/op-node:latest build: context: ../ dockerfile: ./op-node/Dockerfile @@ -103,7 +100,6 @@ services: - l1 - l2 - op-node - image: bobanetwork/op-proposer:latest build: context: ../ dockerfile: ./op-proposer/Dockerfile @@ -127,7 +123,6 @@ services: - l1 - l2 - op-node - image: bobanetwork/op-batcher:latest build: context: ../ dockerfile: ./op-batcher/Dockerfile From 5d31c643d256accdcbd3dd5a4087dc782969ed95 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Tue, 8 Aug 2023 15:06:19 -0700 Subject: [PATCH 08/34] Remove & --- .github/workflows/boba-publish-develop.yml | 6 +++--- .github/workflows/boba-publish-master.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/boba-publish-develop.yml b/.github/workflows/boba-publish-develop.yml index 30cbf8ce020fe..d8049dd242ad2 100644 --- a/.github/workflows/boba-publish-develop.yml +++ b/.github/workflows/boba-publish-develop.yml @@ -33,9 +33,9 @@ jobs: - name: Build l2 components working-directory: . run: | - docker build . -f ./ops-bedrock/Dockerfile.l2-erigon -t bobanetwork/erigon:latest && - docker build . -f ./op-node/Dockerfile -t bobanetwork/op-node:latest && - docker build . -f ./op-proposer/Dockerfile -t bobanetwork/op-proposer:latest && + docker build . -f ./ops-bedrock/Dockerfile.l2-erigon -t bobanetwork/erigon:latest + docker build . -f ./op-node/Dockerfile -t bobanetwork/op-node:latest + docker build . -f ./op-proposer/Dockerfile -t bobanetwork/op-proposer:latest docker build . -f ./op-batcher/Dockerfile -t bobanetwork/op-batcher:latest - name: Print images diff --git a/.github/workflows/boba-publish-master.yml b/.github/workflows/boba-publish-master.yml index 59637f2ef02fc..02519e007a0d0 100644 --- a/.github/workflows/boba-publish-master.yml +++ b/.github/workflows/boba-publish-master.yml @@ -40,9 +40,9 @@ jobs: - name: Build l2 components working-directory: . run: | - docker build . -f ./ops-bedrock/Dockerfile.l2-erigon -t bobanetwork/erigon:${{ steps.tag.outputs.VERSION }} & - docker build . -f ./op-node/Dockerfile -t bobanetwork/op-node:${{ steps.tag.outputs.VERSION }} & - docker build . -f ./op-proposer/Dockerfile -t bobanetwork/op-proposer:${{ steps.tag.outputs.VERSION }} & + docker build . -f ./ops-bedrock/Dockerfile.l2-erigon -t bobanetwork/erigon:${{ steps.tag.outputs.VERSION }} + docker build . -f ./op-node/Dockerfile -t bobanetwork/op-node:${{ steps.tag.outputs.VERSION }} + docker build . -f ./op-proposer/Dockerfile -t bobanetwork/op-proposer:${{ steps.tag.outputs.VERSION }} docker build . -f ./op-batcher/Dockerfile -t bobanetwork/op-batcher:${{ steps.tag.outputs.VERSION }} - name: Print images From 6d9241a7b20cb7a8842d0461bcb425b01f948c33 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Thu, 10 Aug 2023 11:40:16 -0700 Subject: [PATCH 09/34] Improve erigon build and add docker-compose for op replica --- boba-community/README.md | 76 ++++++++++++++++++++ boba-community/docker-compose-op-goerli.yml | 32 +++++++++ boba-community/docker-compose-op-mainnet.yml | 32 +++++++++ boba-community/jwt-secret.txt | 1 + op-proposer/proposer/l2_output_submitter.go | 6 +- ops-bedrock/Dockerfile.l2-erigon | 2 +- ops-bedrock/docker-compose.yml | 4 ++ ops-bedrock/l2-erigon.sh | 64 +++++++++-------- 8 files changed, 182 insertions(+), 35 deletions(-) create mode 100644 boba-community/README.md create mode 100644 boba-community/docker-compose-op-goerli.yml create mode 100644 boba-community/docker-compose-op-mainnet.yml create mode 100644 boba-community/jwt-secret.txt diff --git a/boba-community/README.md b/boba-community/README.md new file mode 100644 index 0000000000000..9789b808780e8 --- /dev/null +++ b/boba-community/README.md @@ -0,0 +1,76 @@ +# Running a replica node + +## Docker configuration + +Here are instructions if you want to run boba erigon version as the replica node for OP Mainnet or Testnet. + +### Get the data dir + +The first step is to download the initial data for `op-erigon`. Thanks for the contribution from [Test in Prod](https://www.testinprod.io). + +1. Download the correct data directory snapshot. + +* [OP Mainnet](https://op-erigon-backup.mainnet.testinprod.io) +* [OP Goerli](https://op-erigon-backup.goerli.testinprod.io) + +2. Create the data directory in `op-erigon` and fill it. + + ```bash + mkdir op-erigon + cd ./op-erigon + mkdir erigon + cd ./erigon + tar xvf ~/[DIR]/op-erigon-goerli.tar + ``` + +3. Create a shared secret (JWT token) + + ```bash + cd op-erigon + openssl rand -hex 32 > jwt.txt + ``` + +> This step is optional, but we highly recommand you to create your own JWT token. + +### Create a .env file + +Create a `.env` file in `boba-community`. + +``` +VERSION= +ETH1_HTTP= +``` + +> This step is optional, but we recommand you to use a latest release image for `VERSION`. Otherwise, it pulls the latest image. + +### Modify volume location + +The volumes of l2 should be modified to your file locations. + +``` +volumes: + - ./jwt-secret.txt:/config/jwt-secret.txt + - DATA_DIR:/db +``` + +### Start your replica node + +``` +docker-compose -f docker-compose-op-goerli.yml up -d +``` + +### The initial synchornization + +During the initial synchonization, you get log messages from `op-node`, and nothing else appears to happen. + +```bash +INFO [08-04|16:36:07.150] Advancing bq origin origin=df76ff..48987e:8301316 originBehind=false +``` + +After a few minutes, `op-node` finds the right batch and then it starts synchronizing. During this synchonization process, you get log messags from `op-node`. + +```bash +INFO [08-04|16:36:01.204] Found next batch epoch=44e203..fef9a5:8301309 batch_epoch=8301309 batch_timestamp=1,673,567,518 +INFO [08-04|16:36:01.205] generated attributes in payload queue txs=2 timestamp=1,673,567,518 +INFO [08-04|16:36:01.265] inserted block hash=ee61ee..256300 number=4,069,725 state_root=a582ae..33a7c5 timestamp=1,673,567,518 parent=5b102e..13196c prev_randao=4758ca..11ff3a fee_recipient=0x4200000000000000000000000000000000000011 txs=2 update_safe=true +``` diff --git a/boba-community/docker-compose-op-goerli.yml b/boba-community/docker-compose-op-goerli.yml new file mode 100644 index 0000000000000..0b5c5fcc06d9b --- /dev/null +++ b/boba-community/docker-compose-op-goerli.yml @@ -0,0 +1,32 @@ +version: '3.4' + +services: + l2: + image: bobanetwork/erigon:${VERSION:-latest} + environment: + - CHAIN_NAME=optimism-goerli + ports: + - "9545:8545" + - "8551:8551" + volumes: + - ./jwt-secret.txt:/config/jwt-secret.txt + - DATA_DIR:/db + op-node: + depends_on: + - l2 + image: bobanetwork/op-node:${VERSION:-latest} + command: > + op-node + --l1=${ETH1_HTTP:-https://ethereum-goerli.publicnode.com} + --l2=http://l2:8551 + --l2.jwt-secret=/config/jwt-secret.txt + --network=goerli + --rpc.addr=0.0.0.0 + --rpc.port=8547 + --l1.trustrpc=true + --p2p.disable=true + ports: + - "8547:8547" + volumes: + - ./jwt-secret.txt:/config/jwt-secret.txt + restart: always diff --git a/boba-community/docker-compose-op-mainnet.yml b/boba-community/docker-compose-op-mainnet.yml new file mode 100644 index 0000000000000..7bfa541b2c482 --- /dev/null +++ b/boba-community/docker-compose-op-mainnet.yml @@ -0,0 +1,32 @@ +version: '3.4' + +services: + l2: + image: bobanetwork/erigon:${VERSION:-latest} + environment: + - CHAIN_NAME=optimism-mainnet + ports: + - "9545:8545" + - "8551:8551" + volumes: + - ./jwt-secret.txt:/config/jwt-secret.txt + - DATA_DIR:/db + op-node: + depends_on: + - l2 + image: bobanetwork/op-node:${VERSION:-latest} + command: > + op-node + --l1=${ETH1_HTTP:-https://ethereum.publicnode.com} + --l2=http://l2:8551 + --l2.jwt-secret=/config/jwt-secret.txt + --network=mainnet + --rpc.addr=0.0.0.0 + --rpc.port=8547 + --l1.trustrpc=true + --p2p.disable=true + ports: + - "8547:8547" + volumes: + - ./jwt-secret.txt:/config/jwt-secret.txt + restart: always diff --git a/boba-community/jwt-secret.txt b/boba-community/jwt-secret.txt new file mode 100644 index 0000000000000..6e72091cdd521 --- /dev/null +++ b/boba-community/jwt-secret.txt @@ -0,0 +1 @@ +688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a diff --git a/op-proposer/proposer/l2_output_submitter.go b/op-proposer/proposer/l2_output_submitter.go index f41e2858e788d..79dc6e311e226 100644 --- a/op-proposer/proposer/l2_output_submitter.go +++ b/op-proposer/proposer/l2_output_submitter.go @@ -281,15 +281,15 @@ func (l *L2OutputSubmitter) fetchOutput(ctx context.Context, block *big.Int) (*e defer cancel() output, err := l.rollupClient.OutputAtBlock(ctx, block.Uint64()) if err != nil { - l.log.Error("failed to fetch output at block %d: %w", block, err) + l.log.Error("failed to fetch output at block", "block", block, "err", err) return nil, false, err } if output.Version != supportedL2OutputVersion { - l.log.Error("unsupported l2 output version: %s", output.Version) + l.log.Error("unsupported l2 output version", "version", output.Version) return nil, false, errors.New("unsupported l2 output version") } if output.BlockRef.Number != block.Uint64() { // sanity check, e.g. in case of bad RPC caching - l.log.Error("invalid blockNumber: next blockNumber is %v, blockNumber of block is %v", block, output.BlockRef.Number) + l.log.Error("invalid blockNumber", "next block", block, "block number", output.BlockRef.Number) return nil, false, errors.New("invalid blockNumber") } diff --git a/ops-bedrock/Dockerfile.l2-erigon b/ops-bedrock/Dockerfile.l2-erigon index 9305ea8548712..7ad8802dadb75 100644 --- a/ops-bedrock/Dockerfile.l2-erigon +++ b/ops-bedrock/Dockerfile.l2-erigon @@ -57,4 +57,4 @@ COPY ./ops-bedrock/l2-erigon.sh /home/boba/ RUN mkdir -p /db -ENTRYPOINT ["/home/boba/l2-erigon.sh"] +ENTRYPOINT ["/bin/sh", "/home/boba/l2-erigon.sh"] diff --git a/ops-bedrock/docker-compose.yml b/ops-bedrock/docker-compose.yml index f155ae5d5921a..204d4e295af74 100644 --- a/ops-bedrock/docker-compose.yml +++ b/ops-bedrock/docker-compose.yml @@ -42,6 +42,10 @@ services: build: context: .. dockerfile: ops-bedrock/Dockerfile.l2-erigon + environment: + - CHAIN_NAME=dev + - CHAIN_ID=901 + - VERBOSITY=6 ports: - "9545:8545" - "8060:6060" diff --git a/ops-bedrock/l2-erigon.sh b/ops-bedrock/l2-erigon.sh index 1711b50c5bcd4..c50861155bb35 100755 --- a/ops-bedrock/l2-erigon.sh +++ b/ops-bedrock/l2-erigon.sh @@ -2,24 +2,29 @@ set -e DATADIR=/db +VERBOSITY=${VERBOSITY:-3} +CHAIN_NAME=${CHAIN_NAME} +CHAIN_ID=${CHAIN_ID} +BLOCK_SIGNER_PRIVATE_KEY="2e0834786285daccd064ca17f1654f67b4aef298acbb82cef9ec422fb4975622" +BLOCK_SIGNER_ADDRESS="0x123463a4B065722E99115D6c222f267d9cABb524" COMMON_FLAGS=" \ - --chain dev \ + --chain ${CHAIN_NAME} \ --datadir ${DATADIR} \ - --log.console.verbosity dbug \ + --log.console.verbosity ${VERBOSITY} \ " ERIGON_FLAGS=" \ ${COMMON_FLAGS} \ --ws \ --mine \ - --miner.etherbase=0x123463a4B065722E99115D6c222f267d9cABb524 \ - --miner.sigfile ${DATADIR}/nodekey \ - --http.port 8545 \ - --http.addr 0.0.0.0 \ - --http.vhosts l2,localhost \ - --http.corsdomain '*' \ - --http.api eth,debug,net,engine,erigon,web3 \ + --miner.etherbase=${BLOCK_SIGNER_ADDRESS} \ + --miner.sigfile=${DATADIR}/nodekey \ + --http.port=8545 \ + --http.addr=0.0.0.0 \ + --http.vhosts=* \ + --http.corsdomain=* \ + --http.api=eth,debug,net,engine,erigon,web3 \ --private.api.addr=0.0.0.0:9090 \ --allow-insecure-unlock \ --metrics \ @@ -31,41 +36,38 @@ ERIGON_FLAGS=" \ --authrpc.addr=0.0.0.0 \ --authrpc.port=8551 \ --authrpc.vhosts=* \ - --authrpc.jwtsecret /config/test-jwt-secret.txt \ - --networkid 901 \ + --authrpc.jwtsecret /config/jwt-secret.txt \ " -RPC_FLAGS=" \ - ${COMMON_FLAGS} \ - --http.port 8545 \ - --http.addr 0.0.0.0 \ - --http.vhosts l2,localhost \ - --http.corsdomain '*' \ - --http.api eth,debug,net,erigon,web3 \ -" +if [ -z "$CHAIN_NAME" ]; then + echo "CHAIN_NAME must be set to init chaindata" + exit 1 +fi + +if [ ! -z "$CHAIN_ID" ]; then + ERIGON_FLAGS += " --chainid ${CHAIN_ID} " +fi + +if [ "$CHAIN_NAME" == "dev" ] && [ -z "$CHAIN_ID" ]; then + echo "CHAIN_ID must be set for dev chain" + exit 1 +fi -if [ ! -f ${DATADIR}/init_done ] ; then - echo "Chain init" +if [ ! -d ${DATADIR}/chaindata ] ; then + echo "${DATADIR}/chaindata missing, running init" erigon ${COMMON_FLAGS} init /config/genesis-l2.json echo "Creating keyfile" - echo "2e0834786285daccd064ca17f1654f67b4aef298acbb82cef9ec422fb4975622" > ${DATADIR}/nodekey - touch ${DATADIR}/init_done + echo ${BLOCK_SIGNER_PRIVATE_KEY} > ${DATADIR}/nodekey echo "Init completed" echo +else + echo "${DATADIR}/chaindata found, skipping init" fi echo "---------------" echo ${ERIGON_FLAGS} echo "--------------" -#while true ; do erigon ${ERIGON_FLAGS} echo echo ***** EXITED WITH STATUS $? ***** echo -#done -#sleep 5 -#rpcdaemon ${RPC_FLAGS} - - - - From 67af2ce9371bc2ad0606d323c59495f847f44216 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Thu, 10 Aug 2023 13:44:47 -0700 Subject: [PATCH 10/34] Fix README --- boba-community/README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/boba-community/README.md b/boba-community/README.md index 9789b808780e8..1f4c0f7ab6597 100644 --- a/boba-community/README.md +++ b/boba-community/README.md @@ -47,15 +47,19 @@ ETH1_HTTP= The volumes of l2 should be modified to your file locations. -``` -volumes: - - ./jwt-secret.txt:/config/jwt-secret.txt - - DATA_DIR:/db +```yaml +l2: + volumes: + - ./jwt-secret.txt:/config/jwt-secret.txt + - DATA_DIR:/db +op-node: + volumes: + - ./jwt-secret.txt:/config/jwt-secret.txt ``` ### Start your replica node -``` +```bash docker-compose -f docker-compose-op-goerli.yml up -d ``` From 6e6a71b1c630141e1d148b1ff701fa40f056c84a Mon Sep 17 00:00:00 2001 From: cby3149 Date: Thu, 10 Aug 2023 13:45:53 -0700 Subject: [PATCH 11/34] Fix target branch --- .github/workflows/boba-publish-develop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/boba-publish-develop.yml b/.github/workflows/boba-publish-develop.yml index d8049dd242ad2..8ae555c3ffa42 100644 --- a/.github/workflows/boba-publish-develop.yml +++ b/.github/workflows/boba-publish-develop.yml @@ -3,7 +3,7 @@ name: Publish Packages (boba-develop) on: push: branches: - - 'add-github-action' + - 'boba-develop' jobs: publish-develop: From cb198e195ae0c51dc92916ea3c04144f72b21cf2 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Fri, 11 Aug 2023 10:16:20 -0700 Subject: [PATCH 12/34] Fix script --- ops-bedrock/l2-erigon.sh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/ops-bedrock/l2-erigon.sh b/ops-bedrock/l2-erigon.sh index c50861155bb35..62f801010105d 100755 --- a/ops-bedrock/l2-erigon.sh +++ b/ops-bedrock/l2-erigon.sh @@ -45,7 +45,7 @@ if [ -z "$CHAIN_NAME" ]; then fi if [ ! -z "$CHAIN_ID" ]; then - ERIGON_FLAGS += " --chainid ${CHAIN_ID} " + ERIGON_FLAGS="${ERIGON_FLAGS} --networkid ${CHAIN_ID}" fi if [ "$CHAIN_NAME" == "dev" ] && [ -z "$CHAIN_ID" ]; then @@ -53,7 +53,7 @@ if [ "$CHAIN_NAME" == "dev" ] && [ -z "$CHAIN_ID" ]; then exit 1 fi -if [ ! -d ${DATADIR}/chaindata ] ; then +if [ ! -d "${DATADIR}/chaindata" ] ; then echo "${DATADIR}/chaindata missing, running init" erigon ${COMMON_FLAGS} init /config/genesis-l2.json echo "Creating keyfile" @@ -65,9 +65,10 @@ else fi echo "---------------" -echo ${ERIGON_FLAGS} +echo ${ERIGON_FLAGS} "$@" echo "--------------" - erigon ${ERIGON_FLAGS} - echo - echo ***** EXITED WITH STATUS $? ***** - echo + +exec erigon ${ERIGON_FLAGS} "$@" +echo +echo ***** EXITED WITH STATUS $? ***** +echo From 546c1dd8cea8f114047fd6749f167d5ec5af91ed Mon Sep 17 00:00:00 2001 From: cby3149 Date: Fri, 11 Aug 2023 12:29:02 -0700 Subject: [PATCH 13/34] Update README --- boba-community/README.md | 19 ++++++++----------- boba-community/jwt-secret.txt | 1 - 2 files changed, 8 insertions(+), 12 deletions(-) delete mode 100644 boba-community/jwt-secret.txt diff --git a/boba-community/README.md b/boba-community/README.md index 1f4c0f7ab6597..c0335564f0176 100644 --- a/boba-community/README.md +++ b/boba-community/README.md @@ -13,25 +13,22 @@ The first step is to download the initial data for `op-erigon`. Thanks for the c * [OP Mainnet](https://op-erigon-backup.mainnet.testinprod.io) * [OP Goerli](https://op-erigon-backup.goerli.testinprod.io) -2. Create the data directory in `op-erigon` and fill it. +2. Create the data directory and fill it. ```bash - mkdir op-erigon - cd ./op-erigon - mkdir erigon - cd ./erigon + cd op-anchorage/boba-community + mkdir op-db + cd ./op-db tar xvf ~/[DIR]/op-erigon-goerli.tar ``` 3. Create a shared secret (JWT token) ```bash - cd op-erigon - openssl rand -hex 32 > jwt.txt + cd op-anchorage/boba-community + openssl rand -hex 32 > jwt-secrete.txt ``` -> This step is optional, but we highly recommand you to create your own JWT token. - ### Create a .env file Create a `.env` file in `boba-community`. @@ -41,11 +38,11 @@ VERSION= ETH1_HTTP= ``` -> This step is optional, but we recommand you to use a latest release image for `VERSION`. Otherwise, it pulls the latest image. +> This step is optional, but we recommand you to use a latest release image for `VERSION`. Otherwise, it pulls the image with the `latest` tag. ### Modify volume location -The volumes of l2 should be modified to your file locations. +The volumes of l2 and op-node should be modified to your file locations. ```yaml l2: diff --git a/boba-community/jwt-secret.txt b/boba-community/jwt-secret.txt deleted file mode 100644 index 6e72091cdd521..0000000000000 --- a/boba-community/jwt-secret.txt +++ /dev/null @@ -1 +0,0 @@ -688f5d737bad920bdfb2fc2f488d6b6209eebda1dae949a8de91398d932c517a From 71607362db403a7cfd2f1b161d3211f54ac78c54 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Fri, 11 Aug 2023 13:07:05 -0700 Subject: [PATCH 14/34] Fix typo --- boba-community/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boba-community/README.md b/boba-community/README.md index c0335564f0176..97ad6e6e80330 100644 --- a/boba-community/README.md +++ b/boba-community/README.md @@ -26,12 +26,12 @@ The first step is to download the initial data for `op-erigon`. Thanks for the c ```bash cd op-anchorage/boba-community - openssl rand -hex 32 > jwt-secrete.txt + openssl rand -hex 32 > jwt-secret.txt ``` ### Create a .env file -Create a `.env` file in `boba-community`. +Create a `.env` file in `boba-community`. ``` VERSION= From 87b3ee97463edb4be6059d2bdf85312f99ba1af7 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Fri, 11 Aug 2023 15:43:42 -0700 Subject: [PATCH 15/34] Add KMS manager in op-service --- go.mod | 3 ++ go.sum | 25 +++++++++++++++ op-batcher/batcher/config.go | 3 ++ op-batcher/batcher/driver.go | 5 +++ op-batcher/flags/flags.go | 2 ++ op-service/kms/cli.go | 61 ++++++++++++++++++++++++++++++++++++ op-service/kms/manager.go | 28 +++++++++++++++++ 7 files changed, 127 insertions(+) create mode 100644 op-service/kms/cli.go create mode 100644 op-service/kms/manager.go diff --git a/go.mod b/go.mod index 27685c9528f46..725ce835bb6c5 100644 --- a/go.mod +++ b/go.mod @@ -51,10 +51,13 @@ require ( gorm.io/gorm v1.25.2 ) +require github.com/jmespath/go-jmespath v0.4.0 // indirect + require ( github.com/DataDog/zstd v1.5.2 // indirect github.com/VictoriaMetrics/fastcache v1.10.0 // indirect github.com/allegro/bigcache v1.2.1 // indirect + github.com/aws/aws-sdk-go v1.44.322 github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect diff --git a/go.sum b/go.sum index 39583186482ce..b909d9dfbfd3c 100644 --- a/go.sum +++ b/go.sum @@ -23,11 +23,15 @@ github.com/VictoriaMetrics/fastcache v1.10.0 h1:5hDJnLsKLpnUEToub7ETuRu8RCkb40wo github.com/VictoriaMetrics/fastcache v1.10.0/go.mod h1:tjiYeEfYXCqacuvYw/7UoDIeJaNxq6132xHICNP77w8= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/aws/aws-sdk-go v1.44.322 h1:7JfwifGRGQMHd99PvfXqxBaZsjuRaOF6e3X9zRx2uYo= +github.com/aws/aws-sdk-go v1.44.322/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= 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= @@ -83,6 +87,7 @@ github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 h1:ytcWPaNPhNoG 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/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= 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.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= @@ -201,6 +206,7 @@ github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= 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= @@ -429,13 +435,19 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +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/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.2 h1:M6QQBNxF+CQ8OFvxrT90BA0qBOXymndZnk5q235mFc4= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= @@ -579,6 +591,7 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ 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 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +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.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= @@ -607,6 +620,7 @@ github.com/multiformats/go-multistream v0.4.1/go.mod h1:Mz5eykRVAjJWckE2U78c6xqd github.com/multiformats/go-varint v0.0.1/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-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= @@ -814,6 +828,7 @@ github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZ github.com/yuin/goldmark v1.1.27/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= @@ -885,6 +900,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB 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.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +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= @@ -919,6 +935,8 @@ golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qx 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-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.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -934,6 +952,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/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-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= @@ -988,13 +1007,16 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/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.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= golang.org/x/sys v0.7.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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1005,6 +1027,7 @@ 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/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1041,6 +1064,7 @@ 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.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= @@ -1088,6 +1112,7 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 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= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/op-batcher/batcher/config.go b/op-batcher/batcher/config.go index 3ac53bcf5d7b2..13e483893be44 100644 --- a/op-batcher/batcher/config.go +++ b/op-batcher/batcher/config.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum-optimism/optimism/op-batcher/rpc" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/sources" + opkms "github.com/ethereum-optimism/optimism/op-service/kms" oplog "github.com/ethereum-optimism/optimism/op-service/log" opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" oppprof "github.com/ethereum-optimism/optimism/op-service/pprof" @@ -93,6 +94,7 @@ type CLIConfig struct { MetricsConfig opmetrics.CLIConfig PprofConfig oppprof.CLIConfig CompressorConfig compressor.CLIConfig + KmsConfig opkms.CLIConfig } func (c CLIConfig) Check() error { @@ -135,5 +137,6 @@ func NewConfig(ctx *cli.Context) CLIConfig { MetricsConfig: opmetrics.ReadCLIConfig(ctx), PprofConfig: oppprof.ReadCLIConfig(ctx), CompressorConfig: compressor.ReadCLIConfig(ctx), + KmsConfig: opkms.ReadCLIConfig(ctx), } } diff --git a/op-batcher/batcher/driver.go b/op-batcher/batcher/driver.go index 312c761163dfa..6eca56a51986a 100644 --- a/op-batcher/batcher/driver.go +++ b/op-batcher/batcher/driver.go @@ -70,6 +70,11 @@ func NewBatchSubmitterFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Metri return nil, fmt.Errorf("querying rollup config: %w", err) } + // var kmsManager *opkms.KmsManager + // if cfg.KmsConfig.KmsKeyID != "" { + // kmsManager, err = opkms.NewKmsManager(cfg.KmsConfig.KmsKeyID, cfg.KmsConfig.KmsEndpoint, cfg.KmsConfig.KmsRegion) + // } + txManager, err := txmgr.NewSimpleTxManager("batcher", l, m, cfg.TxMgrConfig) if err != nil { return nil, err diff --git a/op-batcher/flags/flags.go b/op-batcher/flags/flags.go index 6beb8d01ab9ef..999c357094220 100644 --- a/op-batcher/flags/flags.go +++ b/op-batcher/flags/flags.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum-optimism/optimism/op-batcher/compressor" "github.com/ethereum-optimism/optimism/op-batcher/rpc" opservice "github.com/ethereum-optimism/optimism/op-service" + opkms "github.com/ethereum-optimism/optimism/op-service/kms" oplog "github.com/ethereum-optimism/optimism/op-service/log" opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" oppprof "github.com/ethereum-optimism/optimism/op-service/pprof" @@ -105,6 +106,7 @@ func init() { optionalFlags = append(optionalFlags, rpc.CLIFlags(EnvVarPrefix)...) optionalFlags = append(optionalFlags, txmgr.CLIFlags(EnvVarPrefix)...) optionalFlags = append(optionalFlags, compressor.CLIFlags(EnvVarPrefix)...) + optionalFlags = append(optionalFlags, opkms.CLIFlags(EnvVarPrefix)...) Flags = append(requiredFlags, optionalFlags...) } diff --git a/op-service/kms/cli.go b/op-service/kms/cli.go new file mode 100644 index 0000000000000..8ff9bc658b1bd --- /dev/null +++ b/op-service/kms/cli.go @@ -0,0 +1,61 @@ +package kms + +import ( + "errors" + + opservice "github.com/ethereum-optimism/optimism/op-service" + "github.com/urfave/cli/v2" +) + +const ( + KmsKeyIDName = "kms.keyid" + KmsEndpointName = "kms.endpoint" + KmsRegionName = "kms.region" +) + +func CLIFlags(envPrefix string) []cli.Flag { + return []cli.Flag{ + &cli.StringFlag{ + Name: KmsKeyIDName, + Usage: "KMS Key ID", + EnvVars: opservice.PrefixEnvVar(envPrefix, "KMS_KEY_ID"), + }, + &cli.StringFlag{ + Name: KmsEndpointName, + Usage: "KMS Endpoint", + EnvVars: opservice.PrefixEnvVar(envPrefix, "KMS_ENDPOINT"), + }, + &cli.StringFlag{ + Name: KmsRegionName, + Usage: "KMS Region", + EnvVars: opservice.PrefixEnvVar(envPrefix, "KMS_REGION"), + }, + } +} + +type CLIConfig struct { + KmsKeyID string + KmsEndpoint string + KmsRegion string +} + +func (c CLIConfig) Check() error { + if c.KmsKeyID != "" { + if c.KmsEndpoint == "" { + return errors.New("KMS Endpoint must be provided") + } + if c.KmsRegion == "" { + return errors.New("KMS Region must be provided") + } + } + + return nil +} + +func ReadCLIConfig(ctx *cli.Context) CLIConfig { + return CLIConfig{ + KmsKeyID: ctx.String(KmsKeyIDName), + KmsEndpoint: ctx.String(KmsEndpointName), + KmsRegion: ctx.String(KmsRegionName), + } +} diff --git a/op-service/kms/manager.go b/op-service/kms/manager.go new file mode 100644 index 0000000000000..9733728fb5069 --- /dev/null +++ b/op-service/kms/manager.go @@ -0,0 +1,28 @@ +package kms + +import ( + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/kms" +) + +type KmsManager struct { + keyId string + kmsSession *kms.KMS +} + +func NewKmsManager(keyId, endpoint, region string) (*KmsManager, error) { + session, err := session.NewSession(&aws.Config{ + Credentials: credentials.NewEnvCredentials(), + Region: aws.String(endpoint), + Endpoint: aws.String(region), + }) + if err != nil { + return nil, err + } + return &KmsManager{ + keyId: keyId, + kmsSession: kms.New(session), + }, nil +} From 0d041e9eb88c94f38a5d22d7c5a566bc962041db Mon Sep 17 00:00:00 2001 From: cby3149 Date: Fri, 11 Aug 2023 15:54:22 -0700 Subject: [PATCH 16/34] Add KMS to TxManager --- go.sum | 11 +---------- op-batcher/batcher/driver.go | 3 ++- op-challenger/fault/service.go | 3 ++- op-proposer/proposer/l2_output_submitter.go | 3 ++- op-service/kms/manager.go | 12 +++++++---- op-service/txmgr/txmgr.go | 22 ++++++++++++++------- op-service/txmgr/txmgr_test.go | 3 ++- 7 files changed, 32 insertions(+), 25 deletions(-) diff --git a/go.sum b/go.sum index b909d9dfbfd3c..190bfb3245dae 100644 --- a/go.sum +++ b/go.sum @@ -23,8 +23,6 @@ github.com/VictoriaMetrics/fastcache v1.10.0 h1:5hDJnLsKLpnUEToub7ETuRu8RCkb40wo github.com/VictoriaMetrics/fastcache v1.10.0/go.mod h1:tjiYeEfYXCqacuvYw/7UoDIeJaNxq6132xHICNP77w8= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= @@ -87,7 +85,6 @@ github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 h1:ytcWPaNPhNoG 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/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ= 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.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= @@ -206,7 +203,6 @@ github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= 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= @@ -437,17 +433,15 @@ github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -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/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.2 h1:M6QQBNxF+CQ8OFvxrT90BA0qBOXymndZnk5q235mFc4= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= @@ -591,7 +585,6 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ 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 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -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.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= @@ -620,7 +613,6 @@ github.com/multiformats/go-multistream v0.4.1/go.mod h1:Mz5eykRVAjJWckE2U78c6xqd github.com/multiformats/go-varint v0.0.1/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-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= @@ -1112,7 +1104,6 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 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= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/op-batcher/batcher/driver.go b/op-batcher/batcher/driver.go index 6eca56a51986a..5f38a8844aefd 100644 --- a/op-batcher/batcher/driver.go +++ b/op-batcher/batcher/driver.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/eth" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" opclient "github.com/ethereum-optimism/optimism/op-service/client" + "github.com/ethereum-optimism/optimism/op-service/kms" "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" @@ -75,7 +76,7 @@ func NewBatchSubmitterFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Metri // kmsManager, err = opkms.NewKmsManager(cfg.KmsConfig.KmsKeyID, cfg.KmsConfig.KmsEndpoint, cfg.KmsConfig.KmsRegion) // } - txManager, err := txmgr.NewSimpleTxManager("batcher", l, m, cfg.TxMgrConfig) + txManager, err := txmgr.NewSimpleTxManager("batcher", l, m, cfg.TxMgrConfig, kms.CLIConfig{}) if err != nil { return nil, err } diff --git a/op-challenger/fault/service.go b/op-challenger/fault/service.go index b76ed33eb33f9..70c4ebc44e990 100644 --- a/op-challenger/fault/service.go +++ b/op-challenger/fault/service.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum-optimism/optimism/op-challenger/fault/alphabet" "github.com/ethereum-optimism/optimism/op-challenger/fault/cannon" "github.com/ethereum-optimism/optimism/op-challenger/fault/types" + "github.com/ethereum-optimism/optimism/op-service/kms" "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" "github.com/ethereum/go-ethereum/ethclient" @@ -36,7 +37,7 @@ func NewService(ctx context.Context, logger log.Logger, cfg *config.Config) (*se return nil, fmt.Errorf("failed to dial L1: %w", err) } - txMgr, err := txmgr.NewSimpleTxManager("challenger", logger, &metrics.NoopTxMetrics{}, cfg.TxMgrConfig) + txMgr, err := txmgr.NewSimpleTxManager("challenger", logger, &metrics.NoopTxMetrics{}, cfg.TxMgrConfig, kms.CLIConfig{}) if err != nil { return nil, fmt.Errorf("failed to create the transaction manager: %w", err) } diff --git a/op-proposer/proposer/l2_output_submitter.go b/op-proposer/proposer/l2_output_submitter.go index f41e2858e788d..435949ba34880 100644 --- a/op-proposer/proposer/l2_output_submitter.go +++ b/op-proposer/proposer/l2_output_submitter.go @@ -23,6 +23,7 @@ import ( "github.com/ethereum-optimism/optimism/op-proposer/metrics" opservice "github.com/ethereum-optimism/optimism/op-service" opclient "github.com/ethereum-optimism/optimism/op-service/client" + opkms "github.com/ethereum-optimism/optimism/op-service/kms" oplog "github.com/ethereum-optimism/optimism/op-service/log" "github.com/ethereum-optimism/optimism/op-service/opio" oppprof "github.com/ethereum-optimism/optimism/op-service/pprof" @@ -151,7 +152,7 @@ func NewL2OutputSubmitterConfigFromCLIConfig(cfg CLIConfig, l log.Logger, m metr return nil, err } - txManager, err := txmgr.NewSimpleTxManager("proposer", l, m, cfg.TxMgrConfig) + txManager, err := txmgr.NewSimpleTxManager("proposer", l, m, cfg.TxMgrConfig, opkms.CLIConfig{}) if err != nil { return nil, err } diff --git a/op-service/kms/manager.go b/op-service/kms/manager.go index 9733728fb5069..83e31b5d6e6e7 100644 --- a/op-service/kms/manager.go +++ b/op-service/kms/manager.go @@ -12,17 +12,21 @@ type KmsManager struct { kmsSession *kms.KMS } -func NewKmsManager(keyId, endpoint, region string) (*KmsManager, error) { +func NewKmsManager(cfg CLIConfig) (*KmsManager, error) { + if cfg.KmsKeyID == "" || cfg.KmsEndpoint == "" || cfg.KmsRegion == "" { + return nil, nil + } + session, err := session.NewSession(&aws.Config{ Credentials: credentials.NewEnvCredentials(), - Region: aws.String(endpoint), - Endpoint: aws.String(region), + Region: aws.String(cfg.KmsRegion), + Endpoint: aws.String(cfg.KmsEndpoint), }) if err != nil { return nil, err } return &KmsManager{ - keyId: keyId, + keyId: cfg.KmsKeyID, kmsSession: kms.New(session), }, nil } diff --git a/op-service/txmgr/txmgr.go b/op-service/txmgr/txmgr.go index 261711c214a70..fbb4bcc4c8c82 100644 --- a/op-service/txmgr/txmgr.go +++ b/op-service/txmgr/txmgr.go @@ -17,6 +17,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum-optimism/optimism/op-service/kms" "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" ) @@ -103,22 +104,29 @@ type SimpleTxManager struct { nonceLock sync.RWMutex pending atomic.Int64 + + kmsManager *kms.KmsManager } // NewSimpleTxManager initializes a new SimpleTxManager with the passed Config. -func NewSimpleTxManager(name string, l log.Logger, m metrics.TxMetricer, cfg CLIConfig) (*SimpleTxManager, error) { +func NewSimpleTxManager(name string, l log.Logger, m metrics.TxMetricer, cfg CLIConfig, kmsCfg kms.CLIConfig) (*SimpleTxManager, error) { conf, err := NewConfig(cfg, l) if err != nil { return nil, err } + kmsManager, err := kms.NewKmsManager(kmsCfg) + if err != nil { + return nil, err + } return &SimpleTxManager{ - chainID: conf.ChainID, - name: name, - cfg: conf, - backend: conf.Backend, - l: l.New("service", name), - metr: m, + chainID: conf.ChainID, + name: name, + cfg: conf, + backend: conf.Backend, + l: l.New("service", name), + metr: m, + kmsManager: kmsManager, }, nil } diff --git a/op-service/txmgr/txmgr_test.go b/op-service/txmgr/txmgr_test.go index 4e300ab20e44b..fab18f7b181fa 100644 --- a/op-service/txmgr/txmgr_test.go +++ b/op-service/txmgr/txmgr_test.go @@ -12,6 +12,7 @@ import ( "github.com/stretchr/testify/require" "github.com/ethereum-optimism/optimism/op-node/testlog" + "github.com/ethereum-optimism/optimism/op-service/kms" "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" "github.com/ethereum/go-ethereum" @@ -608,7 +609,7 @@ func TestWaitMinedMultipleConfs(t *testing.T) { func TestManagerErrsOnZeroConfs(t *testing.T) { t.Parallel() - _, err := NewSimpleTxManager("TEST", testlog.Logger(t, log.LvlCrit), &metrics.NoopTxMetrics{}, CLIConfig{}) + _, err := NewSimpleTxManager("TEST", testlog.Logger(t, log.LvlCrit), &metrics.NoopTxMetrics{}, CLIConfig{}, kms.CLIConfig{}) require.Error(t, err) } From 4a15b1af7786d2df25920a7880ea7a0593d5049f Mon Sep 17 00:00:00 2001 From: cby3149 Date: Fri, 11 Aug 2023 16:24:35 -0700 Subject: [PATCH 17/34] Read from address from KMS --- go.mod | 7 +- go.sum | 289 +++++++++++++++++++- op-batcher/batcher/batch_submitter.go | 6 +- op-batcher/batcher/driver.go | 8 +- op-proposer/proposer/l2_output_submitter.go | 14 +- op-service/kms/manager.go | 25 ++ op-service/txmgr/txmgr.go | 33 ++- 7 files changed, 362 insertions(+), 20 deletions(-) diff --git a/go.mod b/go.mod index 725ce835bb6c5..2073331d50215 100644 --- a/go.mod +++ b/go.mod @@ -51,7 +51,10 @@ require ( gorm.io/gorm v1.25.2 ) -require github.com/jmespath/go-jmespath v0.4.0 // indirect +require ( + github.com/edsrzf/mmap-go v1.0.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect +) require ( github.com/DataDog/zstd v1.5.2 // indirect @@ -81,7 +84,6 @@ require ( github.com/docker/docker v20.10.24+incompatible // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dop251/goja v0.0.0-20230122112309-96b1610dd4f7 // indirect - github.com/edsrzf/mmap-go v1.1.0 // indirect github.com/elastic/gosigar v0.14.2 // indirect github.com/fatih/color v1.7.0 // indirect github.com/felixge/fgprof v0.9.3 // indirect @@ -186,6 +188,7 @@ require ( github.com/tklauser/go-sysconf v0.3.10 // indirect github.com/tklauser/numcpus v0.5.0 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect + github.com/welthee/go-ethereum-aws-kms-tx-signer v0.0.0-20211013075913-ca566ae7abeb github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect go.uber.org/atomic v1.10.0 // indirect diff --git a/go.sum b/go.sum index 190bfb3245dae..347869f9c34c5 100644 --- a/go.sum +++ b/go.sum @@ -2,41 +2,95 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +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/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= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= +github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= +github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= +github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +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/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/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/VictoriaMetrics/fastcache v1.10.0 h1:5hDJnLsKLpnUEToub7ETuRu8RCkb40woBZAUiKonXzY= github.com/VictoriaMetrics/fastcache v1.10.0/go.mod h1:tjiYeEfYXCqacuvYw/7UoDIeJaNxq6132xHICNP77w8= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= 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/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/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/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/aws/aws-sdk-go v1.38.51/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.44.322 h1:7JfwifGRGQMHd99PvfXqxBaZsjuRaOF6e3X9zRx2uYo= github.com/aws/aws-sdk-go v1.44.322/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= +github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= +github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= 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= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= @@ -61,9 +115,13 @@ github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= 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/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -72,6 +130,7 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P 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/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= @@ -86,6 +145,8 @@ github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811/go.mod h1:Nb5lg github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= +github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= @@ -108,12 +169,14 @@ github.com/crate-crypto/go-ipa v0.0.0-20220523130400-f11357ae11c7/go.mod h1:gFnF github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= +github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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 v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= 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= @@ -129,15 +192,20 @@ github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6ps github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= github.com/dgraph-io/ristretto v0.0.2 h1:a5WaUrDa0qm0YrAAS1tUykT5El3kt62KNZZeMxQn3po= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +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-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/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo= github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE= github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= 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/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja v0.0.0-20230122112309-96b1610dd4f7 h1:kgvzE5wLsLa7XKfV85VZl40QXaMCaeFtHpPwJ8fhotY= github.com/dop251/goja v0.0.0-20230122112309-96b1610dd4f7/go.mod h1:yRkwfj0CBpOGre+TwBsqPV0IH0Pk73e4PXJOeNDboGs= @@ -145,8 +213,9 @@ github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= -github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= +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= @@ -160,17 +229,20 @@ github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 h1:RWHKLhCrQThMfch+QJ1Z github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0KqyLdNJYD7O5cpDlaFMNZzlxYNcWsJUxs= github.com/ethereum-optimism/op-geth v1.101106.0-rc.2 h1:F3SGS0XIvRQ0MjL3Rzbx3A688hNsqv/DtdlBnZimFTw= github.com/ethereum-optimism/op-geth v1.101106.0-rc.2/go.mod h1:X9t7oeerFMU9/zMIjZKT/jbIca+O05QqtBTLjL+XVeA= +github.com/ethereum/go-ethereum v1.10.3/go.mod h1:99onQmSd1GRGOziyGldI41YQb7EESX3Q4H41IfJgIQQ= github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= 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/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fjl/memsize v0.0.1 h1:+zhkb+dhUgx0/e+M8sF0QqiouvMQUiKR+QYvdxIOKcQ= github.com/fjl/memsize v0.0.1/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= 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= github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -179,6 +251,7 @@ github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmV 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/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gballet/go-verkle v0.0.0-20220902153445-097bd83b7732 h1:AB7YjNrzlVHsYz06zCULVV2zYCEft82P86dSmtwxKL0= @@ -196,15 +269,23 @@ github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/ github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= 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 h1:DBPx88FjZJH3FsICfDAfIfnb7XxKIYVGG6lOPlhENAg= 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-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +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-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= 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= @@ -216,8 +297,10 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+ github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= @@ -236,6 +319,7 @@ 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.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= 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.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= @@ -248,10 +332,15 @@ github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -266,28 +355,36 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= 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/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-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/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= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/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.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= +github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.1-0.20220503160820-4a35382e8fc8 h1:Ep/joEub9YwcjRY6ND3+Y/w0ncE540RtGatVhtZL0/Q= github.com/google/gofuzz v1.2.1-0.20220503160820-4a35382e8fc8/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= @@ -295,6 +392,8 @@ github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= github.com/google/pprof v0.0.0-20230207041349-798e818bf904 h1:4/hN5RUoecvl+RmJRE2YxKWtnnQls6rQjjW5oV7qg2U= @@ -302,16 +401,21 @@ github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8q github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= 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 v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/graph-gophers/graphql-go v0.0.0-20201113091052-beb923fada29/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= 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/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= @@ -324,6 +428,8 @@ github.com/hashicorp/go-bexpr v0.1.11/go.mod h1:f03lAo0duBlDIUMGCuad8oLcgejw4m7U 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-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru/v2 v2.0.1 h1:5pv5N1lT1fjLg2VQ5KWc7kmucp2x/kvFOnxuVTqZ6x4= @@ -331,25 +437,36 @@ github.com/hashicorp/golang-lru/v2 v2.0.1/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyf github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/holiman/uint256 v1.2.2-0.20230321075855-87b91420868c h1:DZfsyhDK1hnSS5lH8l+JggqzEleHteTYfutAiVlSUM8= github.com/holiman/uint256 v1.2.2-0.20230321075855-87b91420868c/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= +github.com/huin/goupnp v1.0.1-0.20210310174557-0ca763054c88/go.mod h1:nNs7wvRfN1eKaMknBydLNQU6146XQim8t4h+q90biWo= github.com/huin/goupnp v1.1.0 h1:gEe0Dp/lZmPZiDFzJJaOfUpOvv2MKUkoBX8lDrn9vKU= github.com/huin/goupnp v1.1.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= 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/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= +github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c h1:qSHzRbhzK8RdXOsAdfDgO49TtqC1oZ+acxPrkfTxcCs= github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= +github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= +github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= +github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= +github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= 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-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= @@ -415,6 +532,7 @@ github.com/jackc/pgx/v5 v5.3.1/go.mod h1:t3JDKnCBlYIc0ewLF0Q7B8MXmoIaBOZj/ic7iHo 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.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= @@ -440,9 +558,15 @@ github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCV github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= 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= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= +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/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.2 h1:M6QQBNxF+CQ8OFvxrT90BA0qBOXymndZnk5q235mFc4= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= @@ -454,21 +578,26 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL 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.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= 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.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= github.com/klauspost/cpuid/v2 v2.2.3/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= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= 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/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= @@ -482,6 +611,7 @@ 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/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= 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= @@ -531,6 +661,8 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN 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/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.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -539,6 +671,10 @@ github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope 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-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= +github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -552,6 +688,8 @@ github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= 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= @@ -589,6 +727,7 @@ github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOA github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= 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.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.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= @@ -613,6 +752,7 @@ github.com/multiformats/go-multistream v0.4.1/go.mod h1:Mz5eykRVAjJWckE2U78c6xqd github.com/multiformats/go-varint v0.0.1/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/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= @@ -626,6 +766,7 @@ github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= 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= @@ -649,40 +790,57 @@ github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= 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= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= +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= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +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= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo= +github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= 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-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.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.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +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.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.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= 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/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= github.com/quic-go/qtls-go1-18 v0.2.0 h1:5ViXqBZ90wpUcZS0ge79rf029yx0dYB0McyPJwqqj7U= @@ -697,14 +855,17 @@ github.com/quic-go/webtransport-go v0.5.1 h1:1eVb7WDWCRoaeTtFHpFBJ6WDN1bSrPrRoW6 github.com/quic-go/webtransport-go v0.5.1/go.mod h1:OhmmgJIzTTqXK5xvtuX0oBpLV2GkLWNDA+UeTGJXErU= 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/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= 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/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= @@ -717,7 +878,10 @@ github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= 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/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= @@ -745,6 +909,7 @@ github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go. github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -752,14 +917,17 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -768,6 +936,7 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH 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= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -779,14 +948,19 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= +github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tklauser/numcpus v0.5.0 h1:ooe7gN0fg6myJ0EKoTAf5hebTZrH52px3New/D9iJ+A= github.com/tklauser/numcpus v0.5.0/go.mod h1:OGzpTxpcIMNGYQdit2BYL1pvk/dSOaJWjKoflh+RQjo= +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= @@ -797,6 +971,7 @@ github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLY github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= @@ -807,9 +982,13 @@ github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+ 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/welthee/go-ethereum-aws-kms-tx-signer v0.0.0-20211013075913-ca566ae7abeb h1:NU+hNdq1qZVAsKgjH0/QjYBQkPRZ3b4xSHQvfIaafrQ= +github.com/welthee/go-ethereum-aws-kms-tx-signer v0.0.0-20211013075913-ca566ae7abeb/go.mod h1:F52IEJmUamOjAJYwxHskxz5RIOQAJ9gfxCutP5F2qWE= +github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= 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/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= @@ -825,6 +1004,9 @@ github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPR 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= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 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= @@ -854,12 +1036,14 @@ go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 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-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -877,17 +1061,36 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +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-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= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb h1:PaBZQdo+iSDyHT053FjUCgZQ/9uqVwPOcl7KSWhKn6w= golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb/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= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/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/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.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -902,6 +1105,7 @@ golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -909,8 +1113,12 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn 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= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/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-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -919,7 +1127,9 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/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-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= @@ -935,6 +1145,9 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG 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= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 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= @@ -942,6 +1155,7 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/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-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -952,16 +1166,24 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +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-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -969,6 +1191,8 @@ 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-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -980,10 +1204,13 @@ golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/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-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/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-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/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-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1024,34 +1251,52 @@ golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.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/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-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 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-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= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +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-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +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-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/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= @@ -1066,20 +1311,48 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T 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/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= +gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/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= google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200108215221-bd8f9a0ef82f/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -1087,8 +1360,11 @@ google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmE 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= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -1104,6 +1380,7 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 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= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1121,10 +1398,13 @@ gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXL gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= 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/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 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= @@ -1139,15 +1419,20 @@ gorm.io/driver/postgres v1.5.2 h1:ytTDxxEv+MplXOfFe3Lzm7SjG09fcdb3Z/c056DTBx0= gorm.io/driver/postgres v1.5.2/go.mod h1:fmpX0m2I1PKuR7mKZiEluwrP3hbs+ps7JIGMUBpCgl8= gorm.io/gorm v1.25.2 h1:gs1o6Vsa+oVKG/a9ElL3XgyGfghFfkKA2SInQaCyMho= gorm.io/gorm v1.25.2/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/op-batcher/batcher/batch_submitter.go b/op-batcher/batcher/batch_submitter.go index 5193c4f2ac38d..e6577a2386fec 100644 --- a/op-batcher/batcher/batch_submitter.go +++ b/op-batcher/batcher/batch_submitter.go @@ -71,7 +71,11 @@ func Main(version string, cliCtx *cli.Context) error { l.Error("error starting metrics server", err) } }() - m.StartBalanceMetrics(ctx, l, batchSubmitter.L1Client, batchSubmitter.TxManager.From()) + from, err := batchSubmitter.TxManager.From() + if err != nil { + return fmt.Errorf("error getting from address: %w", err) + } + m.StartBalanceMetrics(ctx, l, batchSubmitter.L1Client, from) } rpcCfg := cfg.RPCConfig diff --git a/op-batcher/batcher/driver.go b/op-batcher/batcher/driver.go index 5f38a8844aefd..29cfeef2a2639 100644 --- a/op-batcher/batcher/driver.go +++ b/op-batcher/batcher/driver.go @@ -111,13 +111,17 @@ func NewBatchSubmitterFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Metri // NewBatchSubmitter initializes the BatchSubmitter, gathering any resources // that will be needed during operation. func NewBatchSubmitter(ctx context.Context, cfg Config, l log.Logger, m metrics.Metricer) (*BatchSubmitter, error) { - balance, err := cfg.L1Client.BalanceAt(ctx, cfg.TxManager.From(), nil) + from, err := cfg.TxManager.From() + if err != nil { + return nil, fmt.Errorf("failed to get from address: %w", err) + } + balance, err := cfg.L1Client.BalanceAt(ctx, from, nil) if err != nil { return nil, err } cfg.log = l - cfg.log.Info("creating batch submitter", "submitter_addr", cfg.TxManager.From(), "submitter_bal", balance) + cfg.log.Info("creating batch submitter", "submitter_addr", from, "submitter_bal", balance) cfg.metr = m diff --git a/op-proposer/proposer/l2_output_submitter.go b/op-proposer/proposer/l2_output_submitter.go index 435949ba34880..db7dc4b370478 100644 --- a/op-proposer/proposer/l2_output_submitter.go +++ b/op-proposer/proposer/l2_output_submitter.go @@ -89,7 +89,11 @@ func Main(version string, cliCtx *cli.Context) error { l.Error("error starting metrics server", err) } }() - m.StartBalanceMetrics(ctx, l, proposerConfig.L1Client, proposerConfig.TxManager.From()) + from, err := proposerConfig.TxManager.From() + if err != nil { + return fmt.Errorf("error getting from address: %w", err) + } + m.StartBalanceMetrics(ctx, l, proposerConfig.L1Client, from) } rpcCfg := cfg.RPCConfig @@ -243,8 +247,14 @@ func (l *L2OutputSubmitter) Stop() { func (l *L2OutputSubmitter) FetchNextOutputInfo(ctx context.Context) (*eth.OutputResponse, bool, error) { cCtx, cancel := context.WithTimeout(ctx, l.networkTimeout) defer cancel() + // TODO: we should not call KMS every time we want to fetch info + from, err := l.txMgr.From() + if err != nil { + l.log.Error("proposer unable to get from address", "err", err) + return nil, false, err + } callOpts := &bind.CallOpts{ - From: l.txMgr.From(), + From: from, Context: cCtx, } nextCheckpointBlock, err := l.l2ooContract.NextBlockNumber(callOpts) diff --git a/op-service/kms/manager.go b/op-service/kms/manager.go index 83e31b5d6e6e7..bdafe8d65dd09 100644 --- a/op-service/kms/manager.go +++ b/op-service/kms/manager.go @@ -5,6 +5,10 @@ import ( "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/kms" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + ethawskmssigner "github.com/welthee/go-ethereum-aws-kms-tx-signer" ) type KmsManager struct { @@ -30,3 +34,24 @@ func NewKmsManager(cfg CLIConfig) (*KmsManager, error) { kmsSession: kms.New(session), }, nil } + +func (k *KmsManager) GetAddr() (common.Address, error) { + pubkey, err := ethawskmssigner.GetPubKey(k.kmsSession, k.keyId) + if err != nil { + return common.Address{}, err + } + addr := crypto.PubkeyToAddress(*pubkey) + return addr, nil +} + +func (k *KmsManager) Sign(rawTx *types.DynamicFeeTx) (*types.Transaction, error) { + transactOpts, err := ethawskmssigner.NewAwsKmsTransactorWithChainID(k.kmsSession, k.keyId, rawTx.ChainID) + if err != nil { + return nil, err + } + signedTx, err := transactOpts.Signer(transactOpts.From, types.NewTx(rawTx)) + if err != nil { + return nil, err + } + return signedTx, nil +} diff --git a/op-service/txmgr/txmgr.go b/op-service/txmgr/txmgr.go index fbb4bcc4c8c82..2e2e5a5e43859 100644 --- a/op-service/txmgr/txmgr.go +++ b/op-service/txmgr/txmgr.go @@ -52,7 +52,7 @@ type TxManager interface { // From returns the sending address associated with the instance of the transaction manager. // It is static for a single instance of a TxManager. - From() common.Address + From() (common.Address, error) // BlockNumber returns the most recent block number from the underlying network. BlockNumber(ctx context.Context) (uint64, error) @@ -105,7 +105,7 @@ type SimpleTxManager struct { pending atomic.Int64 - kmsManager *kms.KmsManager + kms *kms.KmsManager } // NewSimpleTxManager initializes a new SimpleTxManager with the passed Config. @@ -120,18 +120,29 @@ func NewSimpleTxManager(name string, l log.Logger, m metrics.TxMetricer, cfg CLI } return &SimpleTxManager{ - chainID: conf.ChainID, - name: name, - cfg: conf, - backend: conf.Backend, - l: l.New("service", name), - metr: m, - kmsManager: kmsManager, + chainID: conf.ChainID, + name: name, + cfg: conf, + backend: conf.Backend, + l: l.New("service", name), + metr: m, + kms: kmsManager, }, nil } -func (m *SimpleTxManager) From() common.Address { - return m.cfg.From +func (m *SimpleTxManager) UseKms() bool { + return m.kms != nil +} + +func (m *SimpleTxManager) From() (common.Address, error) { + if m.UseKms() { + addr, err := m.kms.GetAddr() + if err != nil { + return common.Address{}, err + } + return addr, nil + } + return m.cfg.From, nil } func (m *SimpleTxManager) BlockNumber(ctx context.Context) (uint64, error) { From 80c5838db6a90ca15371ee3d8c2d8cb4cb667389 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Fri, 11 Aug 2023 16:41:14 -0700 Subject: [PATCH 18/34] Fix mock --- op-challenger/fault/responder_test.go | 4 ++-- op-e2e/actions/l2_proposer.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/op-challenger/fault/responder_test.go b/op-challenger/fault/responder_test.go index bd452e9ec0c8b..45e899d8b9e62 100644 --- a/op-challenger/fault/responder_test.go +++ b/op-challenger/fault/responder_test.go @@ -55,8 +55,8 @@ func (m *mockTxManager) BlockNumber(ctx context.Context) (uint64, error) { panic("not implemented") } -func (m *mockTxManager) From() common.Address { - return m.from +func (m *mockTxManager) From() (common.Address, error) { + return m.from, nil } func newTestFaultResponder(t *testing.T, sendFails bool) (*faultResponder, *mockTxManager) { diff --git a/op-e2e/actions/l2_proposer.go b/op-e2e/actions/l2_proposer.go index ff66bd3028489..93a88ad60152d 100644 --- a/op-e2e/actions/l2_proposer.go +++ b/op-e2e/actions/l2_proposer.go @@ -44,8 +44,8 @@ type fakeTxMgr struct { from common.Address } -func (f fakeTxMgr) From() common.Address { - return f.from +func (f fakeTxMgr) From() (common.Address, error) { + return f.from, nil } func (f fakeTxMgr) Call(_ context.Context, _ ethereum.CallMsg, _ *big.Int) ([]byte, error) { panic("unimplemented") From c610c10072753fc9dc3ffbd51fed775039d0e51e Mon Sep 17 00:00:00 2001 From: cby3149 Date: Fri, 11 Aug 2023 16:57:13 -0700 Subject: [PATCH 19/34] Fix lint and re-generate mock file --- op-proposer/proposer/l2_output_submitter.go | 4 +++- op-service/txmgr/mocks/TxManager.go | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/op-proposer/proposer/l2_output_submitter.go b/op-proposer/proposer/l2_output_submitter.go index db7dc4b370478..a43b78b649fff 100644 --- a/op-proposer/proposer/l2_output_submitter.go +++ b/op-proposer/proposer/l2_output_submitter.go @@ -91,7 +91,9 @@ func Main(version string, cliCtx *cli.Context) error { }() from, err := proposerConfig.TxManager.From() if err != nil { - return fmt.Errorf("error getting from address: %w", err) + cancel() + l.Error("error getting from address", "err", err) + return err } m.StartBalanceMetrics(ctx, l, proposerConfig.L1Client, from) } diff --git a/op-service/txmgr/mocks/TxManager.go b/op-service/txmgr/mocks/TxManager.go index 75058e3dabc50..7071efe6b3267 100644 --- a/op-service/txmgr/mocks/TxManager.go +++ b/op-service/txmgr/mocks/TxManager.go @@ -73,10 +73,14 @@ func (_m *TxManager) Call(ctx context.Context, msg ethereum.CallMsg, blockNumber } // From provides a mock function with given fields: -func (_m *TxManager) From() common.Address { +func (_m *TxManager) From() (common.Address, error) { ret := _m.Called() var r0 common.Address + var r1 error + if rf, ok := ret.Get(0).(func() (common.Address, error)); ok { + return rf() + } if rf, ok := ret.Get(0).(func() common.Address); ok { r0 = rf() } else { @@ -85,7 +89,13 @@ func (_m *TxManager) From() common.Address { } } - return r0 + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 } // Send provides a mock function with given fields: ctx, candidate From a3264d6baa11565c8c77df412b7476a794f20d22 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Mon, 14 Aug 2023 12:57:02 -0700 Subject: [PATCH 20/34] Use KMS to sign tx --- op-batcher/batcher/driver.go | 8 +- op-challenger/config/config.go | 3 + op-challenger/fault/service.go | 3 +- op-challenger/flags/flags.go | 5 ++ op-proposer/flags/flags.go | 2 + op-proposer/proposer/config.go | 7 ++ op-proposer/proposer/l2_output_submitter.go | 3 +- op-service/kms/manager.go | 16 ++-- op-service/kms/mocks/KmsManager.go | 83 +++++++++++++++++++++ op-service/txmgr/txmgr.go | 15 +++- 10 files changed, 125 insertions(+), 20 deletions(-) create mode 100644 op-service/kms/mocks/KmsManager.go diff --git a/op-batcher/batcher/driver.go b/op-batcher/batcher/driver.go index 29cfeef2a2639..0809a3fae0d54 100644 --- a/op-batcher/batcher/driver.go +++ b/op-batcher/batcher/driver.go @@ -14,7 +14,6 @@ import ( "github.com/ethereum-optimism/optimism/op-node/eth" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" opclient "github.com/ethereum-optimism/optimism/op-service/client" - "github.com/ethereum-optimism/optimism/op-service/kms" "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" @@ -71,12 +70,7 @@ func NewBatchSubmitterFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Metri return nil, fmt.Errorf("querying rollup config: %w", err) } - // var kmsManager *opkms.KmsManager - // if cfg.KmsConfig.KmsKeyID != "" { - // kmsManager, err = opkms.NewKmsManager(cfg.KmsConfig.KmsKeyID, cfg.KmsConfig.KmsEndpoint, cfg.KmsConfig.KmsRegion) - // } - - txManager, err := txmgr.NewSimpleTxManager("batcher", l, m, cfg.TxMgrConfig, kms.CLIConfig{}) + txManager, err := txmgr.NewSimpleTxManager("batcher", l, m, cfg.TxMgrConfig, cfg.KmsConfig) if err != nil { return nil, err } diff --git a/op-challenger/config/config.go b/op-challenger/config/config.go index 72d54706f7d6d..d52ce0416d992 100644 --- a/op-challenger/config/config.go +++ b/op-challenger/config/config.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" + "github.com/ethereum-optimism/optimism/op-service/kms" "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum/go-ethereum/common" ) @@ -71,6 +72,7 @@ type Config struct { CannonL2 string // L2 RPC Url TxMgrConfig txmgr.CLIConfig + KmsConfig kms.CLIConfig } func NewConfig( @@ -90,6 +92,7 @@ func NewConfig( TraceType: traceType, TxMgrConfig: txmgr.NewCLIConfig(l1EthRpc), + KmsConfig: kms.CLIConfig{}, } } diff --git a/op-challenger/fault/service.go b/op-challenger/fault/service.go index 70c4ebc44e990..3b3e9bcc9457e 100644 --- a/op-challenger/fault/service.go +++ b/op-challenger/fault/service.go @@ -9,7 +9,6 @@ import ( "github.com/ethereum-optimism/optimism/op-challenger/fault/alphabet" "github.com/ethereum-optimism/optimism/op-challenger/fault/cannon" "github.com/ethereum-optimism/optimism/op-challenger/fault/types" - "github.com/ethereum-optimism/optimism/op-service/kms" "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" "github.com/ethereum/go-ethereum/ethclient" @@ -37,7 +36,7 @@ func NewService(ctx context.Context, logger log.Logger, cfg *config.Config) (*se return nil, fmt.Errorf("failed to dial L1: %w", err) } - txMgr, err := txmgr.NewSimpleTxManager("challenger", logger, &metrics.NoopTxMetrics{}, cfg.TxMgrConfig, kms.CLIConfig{}) + txMgr, err := txmgr.NewSimpleTxManager("challenger", logger, &metrics.NoopTxMetrics{}, cfg.TxMgrConfig, cfg.KmsConfig) if err != nil { return nil, fmt.Errorf("failed to create the transaction manager: %w", err) } diff --git a/op-challenger/flags/flags.go b/op-challenger/flags/flags.go index 963f2a64baf6a..1a1ee7d559f8d 100644 --- a/op-challenger/flags/flags.go +++ b/op-challenger/flags/flags.go @@ -9,6 +9,7 @@ import ( "github.com/urfave/cli/v2" opservice "github.com/ethereum-optimism/optimism/op-service" + opkms "github.com/ethereum-optimism/optimism/op-service/kms" oplog "github.com/ethereum-optimism/optimism/op-service/log" txmgr "github.com/ethereum-optimism/optimism/op-service/txmgr" ) @@ -101,6 +102,7 @@ var optionalFlags = []cli.Flag{ func init() { optionalFlags = append(optionalFlags, oplog.CLIFlags(envVarPrefix)...) optionalFlags = append(optionalFlags, txmgr.CLIFlags(envVarPrefix)...) + optionalFlags = append(optionalFlags, opkms.CLIFlags(envVarPrefix)...) Flags = append(requiredFlags, optionalFlags...) } @@ -153,6 +155,8 @@ func NewConfigFromCLI(ctx *cli.Context) (*config.Config, error) { traceTypeFlag := config.TraceType(strings.ToLower(ctx.String(TraceTypeFlag.Name))) + kmsConfig := opkms.ReadCLIConfig(ctx) + return &config.Config{ // Required Flags L1EthRpc: ctx.String(L1EthRpcFlag.Name), @@ -166,5 +170,6 @@ func NewConfigFromCLI(ctx *cli.Context) (*config.Config, error) { AgreeWithProposedOutput: ctx.Bool(AgreeWithProposedOutputFlag.Name), GameDepth: ctx.Int(GameDepthFlag.Name), TxMgrConfig: txMgrConfig, + KmsConfig: kmsConfig, }, nil } diff --git a/op-proposer/flags/flags.go b/op-proposer/flags/flags.go index d9acde95dcd43..952b1ccdae5f0 100644 --- a/op-proposer/flags/flags.go +++ b/op-proposer/flags/flags.go @@ -7,6 +7,7 @@ import ( "github.com/urfave/cli/v2" opservice "github.com/ethereum-optimism/optimism/op-service" + opkms "github.com/ethereum-optimism/optimism/op-service/kms" oplog "github.com/ethereum-optimism/optimism/op-service/log" opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" oppprof "github.com/ethereum-optimism/optimism/op-service/pprof" @@ -72,6 +73,7 @@ func init() { optionalFlags = append(optionalFlags, opmetrics.CLIFlags(EnvVarPrefix)...) optionalFlags = append(optionalFlags, oppprof.CLIFlags(EnvVarPrefix)...) optionalFlags = append(optionalFlags, txmgr.CLIFlags(EnvVarPrefix)...) + optionalFlags = append(optionalFlags, opkms.CLIFlags(EnvVarPrefix)...) Flags = append(requiredFlags, optionalFlags...) } diff --git a/op-proposer/proposer/config.go b/op-proposer/proposer/config.go index 76546935d2432..27e0320068190 100644 --- a/op-proposer/proposer/config.go +++ b/op-proposer/proposer/config.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/sources" "github.com/ethereum-optimism/optimism/op-proposer/flags" + opkms "github.com/ethereum-optimism/optimism/op-service/kms" oplog "github.com/ethereum-optimism/optimism/op-service/log" opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" oppprof "github.com/ethereum-optimism/optimism/op-service/pprof" @@ -61,6 +62,8 @@ type CLIConfig struct { MetricsConfig opmetrics.CLIConfig PprofConfig oppprof.CLIConfig + + KmsConfig opkms.CLIConfig } func (c CLIConfig) Check() error { @@ -79,6 +82,9 @@ func (c CLIConfig) Check() error { if err := c.TxMgrConfig.Check(); err != nil { return err } + if err := c.KmsConfig.Check(); err != nil { + return err + } return nil } @@ -97,5 +103,6 @@ func NewConfig(ctx *cli.Context) CLIConfig { LogConfig: oplog.ReadCLIConfig(ctx), MetricsConfig: opmetrics.ReadCLIConfig(ctx), PprofConfig: oppprof.ReadCLIConfig(ctx), + KmsConfig: opkms.ReadCLIConfig(ctx), } } diff --git a/op-proposer/proposer/l2_output_submitter.go b/op-proposer/proposer/l2_output_submitter.go index a43b78b649fff..e40db35294ba6 100644 --- a/op-proposer/proposer/l2_output_submitter.go +++ b/op-proposer/proposer/l2_output_submitter.go @@ -23,7 +23,6 @@ import ( "github.com/ethereum-optimism/optimism/op-proposer/metrics" opservice "github.com/ethereum-optimism/optimism/op-service" opclient "github.com/ethereum-optimism/optimism/op-service/client" - opkms "github.com/ethereum-optimism/optimism/op-service/kms" oplog "github.com/ethereum-optimism/optimism/op-service/log" "github.com/ethereum-optimism/optimism/op-service/opio" oppprof "github.com/ethereum-optimism/optimism/op-service/pprof" @@ -158,7 +157,7 @@ func NewL2OutputSubmitterConfigFromCLIConfig(cfg CLIConfig, l log.Logger, m metr return nil, err } - txManager, err := txmgr.NewSimpleTxManager("proposer", l, m, cfg.TxMgrConfig, opkms.CLIConfig{}) + txManager, err := txmgr.NewSimpleTxManager("proposer", l, m, cfg.TxMgrConfig, cfg.KmsConfig) if err != nil { return nil, err } diff --git a/op-service/kms/manager.go b/op-service/kms/manager.go index bdafe8d65dd09..7e2ee77d3e0ce 100644 --- a/op-service/kms/manager.go +++ b/op-service/kms/manager.go @@ -11,12 +11,18 @@ import ( ethawskmssigner "github.com/welthee/go-ethereum-aws-kms-tx-signer" ) -type KmsManager struct { +//go:generate mockery --name KmsManager --output ./mocks +type KmsManager interface { + GetAddr() (common.Address, error) + Sign(rawTx *types.DynamicFeeTx) (*types.Transaction, error) +} + +type KmsConfig struct { keyId string kmsSession *kms.KMS } -func NewKmsManager(cfg CLIConfig) (*KmsManager, error) { +func NewKmsConfig(cfg CLIConfig) (*KmsConfig, error) { if cfg.KmsKeyID == "" || cfg.KmsEndpoint == "" || cfg.KmsRegion == "" { return nil, nil } @@ -29,13 +35,13 @@ func NewKmsManager(cfg CLIConfig) (*KmsManager, error) { if err != nil { return nil, err } - return &KmsManager{ + return &KmsConfig{ keyId: cfg.KmsKeyID, kmsSession: kms.New(session), }, nil } -func (k *KmsManager) GetAddr() (common.Address, error) { +func (k *KmsConfig) GetAddr() (common.Address, error) { pubkey, err := ethawskmssigner.GetPubKey(k.kmsSession, k.keyId) if err != nil { return common.Address{}, err @@ -44,7 +50,7 @@ func (k *KmsManager) GetAddr() (common.Address, error) { return addr, nil } -func (k *KmsManager) Sign(rawTx *types.DynamicFeeTx) (*types.Transaction, error) { +func (k *KmsConfig) Sign(rawTx *types.DynamicFeeTx) (*types.Transaction, error) { transactOpts, err := ethawskmssigner.NewAwsKmsTransactorWithChainID(k.kmsSession, k.keyId, rawTx.ChainID) if err != nil { return nil, err diff --git a/op-service/kms/mocks/KmsManager.go b/op-service/kms/mocks/KmsManager.go new file mode 100644 index 0000000000000..7519648fc89d5 --- /dev/null +++ b/op-service/kms/mocks/KmsManager.go @@ -0,0 +1,83 @@ +// Code generated by mockery v2.28.1. DO NOT EDIT. + +package mocks + +import ( + common "github.com/ethereum/go-ethereum/common" + + mock "github.com/stretchr/testify/mock" + + types "github.com/ethereum/go-ethereum/core/types" +) + +// KmsManager is an autogenerated mock type for the KmsManager type +type KmsManager struct { + mock.Mock +} + +// GetAddr provides a mock function with given fields: +func (_m *KmsManager) GetAddr() (common.Address, error) { + ret := _m.Called() + + var r0 common.Address + var r1 error + if rf, ok := ret.Get(0).(func() (common.Address, error)); ok { + return rf() + } + if rf, ok := ret.Get(0).(func() common.Address); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(common.Address) + } + } + + if rf, ok := ret.Get(1).(func() error); ok { + r1 = rf() + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Sign provides a mock function with given fields: rawTx +func (_m *KmsManager) Sign(rawTx *types.DynamicFeeTx) (*types.Transaction, error) { + ret := _m.Called(rawTx) + + var r0 *types.Transaction + var r1 error + if rf, ok := ret.Get(0).(func(*types.DynamicFeeTx) (*types.Transaction, error)); ok { + return rf(rawTx) + } + if rf, ok := ret.Get(0).(func(*types.DynamicFeeTx) *types.Transaction); ok { + r0 = rf(rawTx) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*types.Transaction) + } + } + + if rf, ok := ret.Get(1).(func(*types.DynamicFeeTx) error); ok { + r1 = rf(rawTx) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +type mockConstructorTestingTNewKmsManager interface { + mock.TestingT + Cleanup(func()) +} + +// NewKmsManager creates a new instance of KmsManager. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewKmsManager(t mockConstructorTestingTNewKmsManager) *KmsManager { + mock := &KmsManager{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/op-service/txmgr/txmgr.go b/op-service/txmgr/txmgr.go index 2e2e5a5e43859..f4b12d7e304bb 100644 --- a/op-service/txmgr/txmgr.go +++ b/op-service/txmgr/txmgr.go @@ -105,7 +105,7 @@ type SimpleTxManager struct { pending atomic.Int64 - kms *kms.KmsManager + kms kms.KmsManager } // NewSimpleTxManager initializes a new SimpleTxManager with the passed Config. @@ -114,7 +114,7 @@ func NewSimpleTxManager(name string, l log.Logger, m metrics.TxMetricer, cfg CLI if err != nil { return nil, err } - kmsManager, err := kms.NewKmsManager(kmsCfg) + kmsManager, err := kms.NewKmsConfig(kmsCfg) if err != nil { return nil, err } @@ -149,6 +149,13 @@ func (m *SimpleTxManager) BlockNumber(ctx context.Context) (uint64, error) { return m.backend.BlockNumber(ctx) } +func (m *SimpleTxManager) Sign(ctx context.Context, from common.Address, rawTx *types.DynamicFeeTx) (*types.Transaction, error) { + if m.UseKms() { + return m.kms.Sign(rawTx) + } + return m.cfg.Signer(ctx, m.cfg.From, types.NewTx(rawTx)) +} + // TxCandidate is a transaction candidate that can be submitted to ask the // [TxManager] to construct a transaction with gas price bounds. type TxCandidate struct { @@ -250,7 +257,7 @@ func (m *SimpleTxManager) craftTx(ctx context.Context, candidate TxCandidate) (* ctx, cancel := context.WithTimeout(ctx, m.cfg.NetworkTimeout) defer cancel() - return m.cfg.Signer(ctx, m.cfg.From, types.NewTx(rawTx)) + return m.Sign(ctx, m.cfg.From, rawTx) } // nextNonce returns a nonce to use for the next transaction. It uses @@ -529,7 +536,7 @@ func (m *SimpleTxManager) increaseGasPrice(ctx context.Context, tx *types.Transa ctx, cancel := context.WithTimeout(ctx, m.cfg.NetworkTimeout) defer cancel() - newTx, err := m.cfg.Signer(ctx, m.cfg.From, types.NewTx(rawTx)) + newTx, err := m.Sign(ctx, m.cfg.From, rawTx) if err != nil { m.l.Warn("failed to sign new transaction", "err", err) return tx, nil From aac1f89554ecfbf5a863039171b330348010ddd3 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Mon, 14 Aug 2023 13:33:54 -0700 Subject: [PATCH 21/34] Fix pointer --- op-batcher/batcher/config.go | 3 ++ op-challenger/config/config.go | 3 ++ op-service/kms/cli_test.go | 51 ++++++++++++++++++++++++++++++++++ op-service/txmgr/txmgr.go | 11 +++++--- 4 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 op-service/kms/cli_test.go diff --git a/op-batcher/batcher/config.go b/op-batcher/batcher/config.go index 13e483893be44..a1efb423a2110 100644 --- a/op-batcher/batcher/config.go +++ b/op-batcher/batcher/config.go @@ -113,6 +113,9 @@ func (c CLIConfig) Check() error { if err := c.TxMgrConfig.Check(); err != nil { return err } + if err := c.KmsConfig.Check(); err != nil { + return err + } return nil } diff --git a/op-challenger/config/config.go b/op-challenger/config/config.go index d52ce0416d992..7609a9546e93d 100644 --- a/op-challenger/config/config.go +++ b/op-challenger/config/config.go @@ -126,5 +126,8 @@ func (c Config) Check() error { if err := c.TxMgrConfig.Check(); err != nil { return err } + if err := c.KmsConfig.Check(); err != nil { + return err + } return nil } diff --git a/op-service/kms/cli_test.go b/op-service/kms/cli_test.go new file mode 100644 index 0000000000000..fc339e7820721 --- /dev/null +++ b/op-service/kms/cli_test.go @@ -0,0 +1,51 @@ +package kms + +import ( + "testing" + + "github.com/stretchr/testify/require" + "github.com/urfave/cli/v2" +) + +func TestInvalidConfig(t *testing.T) { + tests := []struct { + name string + configChange func(config *CLIConfig) + err string + }{ + {"MissingKmsEndpoint", func(config *CLIConfig) { + config.KmsKeyID = "test" + config.KmsEndpoint = "" + }, + "KMS Endpoint must be provided", + }, + {"MissingKmsRegion", func(config *CLIConfig) { + config.KmsKeyID = "test" + config.KmsEndpoint = "test" + config.KmsRegion = "" + }, + "KMS Region must be provided", + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + cfg := configForArgs() + test.configChange(&cfg) + err := cfg.Check() + require.ErrorContains(t, err, test.err) + }) + } +} + +func configForArgs(args ...string) CLIConfig { + app := cli.NewApp() + app.Flags = CLIFlags("TEST_") + app.Name = "test" + var config CLIConfig + app.Action = func(ctx *cli.Context) error { + config = ReadCLIConfig(ctx) + return nil + } + _ = app.Run(args) + return config +} diff --git a/op-service/txmgr/txmgr.go b/op-service/txmgr/txmgr.go index f4b12d7e304bb..d4458fdc4fae6 100644 --- a/op-service/txmgr/txmgr.go +++ b/op-service/txmgr/txmgr.go @@ -114,11 +114,14 @@ func NewSimpleTxManager(name string, l log.Logger, m metrics.TxMetricer, cfg CLI if err != nil { return nil, err } - kmsManager, err := kms.NewKmsConfig(kmsCfg) - if err != nil { - return nil, err - } + var kmsManager kms.KmsManager + if kmsCfg.KmsKeyID != "" { + kmsManager, err = kms.NewKmsConfig(kmsCfg) + if err != nil { + return nil, err + } + } return &SimpleTxManager{ chainID: conf.ChainID, name: name, From 28e50308edf566c5fb76d04896d8caf3b3cb7d5d Mon Sep 17 00:00:00 2001 From: cby3149 Date: Mon, 14 Aug 2023 14:07:13 -0700 Subject: [PATCH 22/34] Add test --- op-service/txmgr/txmgr_test.go | 38 ++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/op-service/txmgr/txmgr_test.go b/op-service/txmgr/txmgr_test.go index fab18f7b181fa..b5a25a14b3a69 100644 --- a/op-service/txmgr/txmgr_test.go +++ b/op-service/txmgr/txmgr_test.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum-optimism/optimism/op-node/testlog" "github.com/ethereum-optimism/optimism/op-service/kms" + kmsmocks "github.com/ethereum-optimism/optimism/op-service/kms/mocks" "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" "github.com/ethereum/go-ethereum" @@ -613,6 +614,43 @@ func TestManagerErrsOnZeroConfs(t *testing.T) { require.Error(t, err) } +// TestManagerKMS ensures that SimpleTxManager will use the KMS if configured. +func TestManagerKMS(t *testing.T) { + txManager := SimpleTxManager{} + txManager.cfg = Config{ + From: common.Address{1}, + } + addr, err := txManager.From() + require.NoError(t, err) + require.Equal(t, addr, common.Address{1}) + + mock := kmsmocks.NewKmsManager(t) + txManager.kms = mock + require.Equal(t, txManager.UseKms(), true) + + mock.On("GetAddr").Return(common.Address{}, fmt.Errorf("error")).Once() + _, err = txManager.From() + require.ErrorContains(t, err, "error") + mock.On("GetAddr").Return(common.Address{2}, nil).Once() + addr, err = txManager.From() + require.NoError(t, err) + require.Equal(t, addr, common.Address{2}) + + dynamicTx := &types.DynamicFeeTx{ + GasTipCap: big.NewInt(1), + GasFeeCap: big.NewInt(2), + } + mock.On("Sign", dynamicTx).Return(nil, fmt.Errorf("error")).Once() + _, err = txManager.Sign(context.Background(), common.Address{1}, dynamicTx) + require.ErrorContains(t, err, "error") + + tx := types.NewTransaction(1, common.Address{1}, big.NewInt(1), 1, big.NewInt(1), []byte{}) + mock.On("Sign", dynamicTx).Return(tx, nil).Once() + signedTx, err := txManager.Sign(context.Background(), common.Address{1}, dynamicTx) + require.NoError(t, err) + require.Equal(t, signedTx, tx) +} + // failingBackend implements ReceiptSource, returning a failure on the // first call but a success on the second call. This allows us to test that the // inner loop of WaitMined properly handles this case. From d2b2956ae2beea6ba4a02c946b7a7e3b4f94c850 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Mon, 14 Aug 2023 16:50:01 -0700 Subject: [PATCH 23/34] Move KMS to txmgr --- op-batcher/batcher/batch_submitter.go | 6 +- op-batcher/batcher/config.go | 6 -- op-batcher/batcher/driver.go | 10 +-- op-batcher/flags/flags.go | 2 - op-challenger/config/config.go | 6 -- op-challenger/fault/responder_test.go | 4 +- op-challenger/fault/service.go | 2 +- op-challenger/flags/flags.go | 5 -- op-e2e/actions/l2_proposer.go | 4 +- op-proposer/flags/flags.go | 2 - op-proposer/proposer/config.go | 7 -- op-proposer/proposer/l2_output_submitter.go | 18 +---- op-service/kms/cli.go | 61 ----------------- op-service/kms/cli_test.go | 51 -------------- op-service/txmgr/cli.go | 66 ++++++++++++++++++- op-service/{kms/manager.go => txmgr/kms.go} | 12 ++-- op-service/{kms => txmgr}/mocks/KmsManager.go | 21 +++--- op-service/txmgr/txmgr.go | 33 ++-------- op-service/txmgr/txmgr_test.go | 41 +----------- 19 files changed, 98 insertions(+), 259 deletions(-) delete mode 100644 op-service/kms/cli.go delete mode 100644 op-service/kms/cli_test.go rename op-service/{kms/manager.go => txmgr/kms.go} (82%) rename op-service/{kms => txmgr}/mocks/KmsManager.go (72%) diff --git a/op-batcher/batcher/batch_submitter.go b/op-batcher/batcher/batch_submitter.go index e6577a2386fec..5193c4f2ac38d 100644 --- a/op-batcher/batcher/batch_submitter.go +++ b/op-batcher/batcher/batch_submitter.go @@ -71,11 +71,7 @@ func Main(version string, cliCtx *cli.Context) error { l.Error("error starting metrics server", err) } }() - from, err := batchSubmitter.TxManager.From() - if err != nil { - return fmt.Errorf("error getting from address: %w", err) - } - m.StartBalanceMetrics(ctx, l, batchSubmitter.L1Client, from) + m.StartBalanceMetrics(ctx, l, batchSubmitter.L1Client, batchSubmitter.TxManager.From()) } rpcCfg := cfg.RPCConfig diff --git a/op-batcher/batcher/config.go b/op-batcher/batcher/config.go index a1efb423a2110..3ac53bcf5d7b2 100644 --- a/op-batcher/batcher/config.go +++ b/op-batcher/batcher/config.go @@ -13,7 +13,6 @@ import ( "github.com/ethereum-optimism/optimism/op-batcher/rpc" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/sources" - opkms "github.com/ethereum-optimism/optimism/op-service/kms" oplog "github.com/ethereum-optimism/optimism/op-service/log" opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" oppprof "github.com/ethereum-optimism/optimism/op-service/pprof" @@ -94,7 +93,6 @@ type CLIConfig struct { MetricsConfig opmetrics.CLIConfig PprofConfig oppprof.CLIConfig CompressorConfig compressor.CLIConfig - KmsConfig opkms.CLIConfig } func (c CLIConfig) Check() error { @@ -113,9 +111,6 @@ func (c CLIConfig) Check() error { if err := c.TxMgrConfig.Check(); err != nil { return err } - if err := c.KmsConfig.Check(); err != nil { - return err - } return nil } @@ -140,6 +135,5 @@ func NewConfig(ctx *cli.Context) CLIConfig { MetricsConfig: opmetrics.ReadCLIConfig(ctx), PprofConfig: oppprof.ReadCLIConfig(ctx), CompressorConfig: compressor.ReadCLIConfig(ctx), - KmsConfig: opkms.ReadCLIConfig(ctx), } } diff --git a/op-batcher/batcher/driver.go b/op-batcher/batcher/driver.go index 0809a3fae0d54..312c761163dfa 100644 --- a/op-batcher/batcher/driver.go +++ b/op-batcher/batcher/driver.go @@ -70,7 +70,7 @@ func NewBatchSubmitterFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Metri return nil, fmt.Errorf("querying rollup config: %w", err) } - txManager, err := txmgr.NewSimpleTxManager("batcher", l, m, cfg.TxMgrConfig, cfg.KmsConfig) + txManager, err := txmgr.NewSimpleTxManager("batcher", l, m, cfg.TxMgrConfig) if err != nil { return nil, err } @@ -105,17 +105,13 @@ func NewBatchSubmitterFromCLIConfig(cfg CLIConfig, l log.Logger, m metrics.Metri // NewBatchSubmitter initializes the BatchSubmitter, gathering any resources // that will be needed during operation. func NewBatchSubmitter(ctx context.Context, cfg Config, l log.Logger, m metrics.Metricer) (*BatchSubmitter, error) { - from, err := cfg.TxManager.From() - if err != nil { - return nil, fmt.Errorf("failed to get from address: %w", err) - } - balance, err := cfg.L1Client.BalanceAt(ctx, from, nil) + balance, err := cfg.L1Client.BalanceAt(ctx, cfg.TxManager.From(), nil) if err != nil { return nil, err } cfg.log = l - cfg.log.Info("creating batch submitter", "submitter_addr", from, "submitter_bal", balance) + cfg.log.Info("creating batch submitter", "submitter_addr", cfg.TxManager.From(), "submitter_bal", balance) cfg.metr = m diff --git a/op-batcher/flags/flags.go b/op-batcher/flags/flags.go index 999c357094220..6beb8d01ab9ef 100644 --- a/op-batcher/flags/flags.go +++ b/op-batcher/flags/flags.go @@ -9,7 +9,6 @@ import ( "github.com/ethereum-optimism/optimism/op-batcher/compressor" "github.com/ethereum-optimism/optimism/op-batcher/rpc" opservice "github.com/ethereum-optimism/optimism/op-service" - opkms "github.com/ethereum-optimism/optimism/op-service/kms" oplog "github.com/ethereum-optimism/optimism/op-service/log" opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" oppprof "github.com/ethereum-optimism/optimism/op-service/pprof" @@ -106,7 +105,6 @@ func init() { optionalFlags = append(optionalFlags, rpc.CLIFlags(EnvVarPrefix)...) optionalFlags = append(optionalFlags, txmgr.CLIFlags(EnvVarPrefix)...) optionalFlags = append(optionalFlags, compressor.CLIFlags(EnvVarPrefix)...) - optionalFlags = append(optionalFlags, opkms.CLIFlags(EnvVarPrefix)...) Flags = append(requiredFlags, optionalFlags...) } diff --git a/op-challenger/config/config.go b/op-challenger/config/config.go index 7609a9546e93d..72d54706f7d6d 100644 --- a/op-challenger/config/config.go +++ b/op-challenger/config/config.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" - "github.com/ethereum-optimism/optimism/op-service/kms" "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum/go-ethereum/common" ) @@ -72,7 +71,6 @@ type Config struct { CannonL2 string // L2 RPC Url TxMgrConfig txmgr.CLIConfig - KmsConfig kms.CLIConfig } func NewConfig( @@ -92,7 +90,6 @@ func NewConfig( TraceType: traceType, TxMgrConfig: txmgr.NewCLIConfig(l1EthRpc), - KmsConfig: kms.CLIConfig{}, } } @@ -126,8 +123,5 @@ func (c Config) Check() error { if err := c.TxMgrConfig.Check(); err != nil { return err } - if err := c.KmsConfig.Check(); err != nil { - return err - } return nil } diff --git a/op-challenger/fault/responder_test.go b/op-challenger/fault/responder_test.go index 45e899d8b9e62..bd452e9ec0c8b 100644 --- a/op-challenger/fault/responder_test.go +++ b/op-challenger/fault/responder_test.go @@ -55,8 +55,8 @@ func (m *mockTxManager) BlockNumber(ctx context.Context) (uint64, error) { panic("not implemented") } -func (m *mockTxManager) From() (common.Address, error) { - return m.from, nil +func (m *mockTxManager) From() common.Address { + return m.from } func newTestFaultResponder(t *testing.T, sendFails bool) (*faultResponder, *mockTxManager) { diff --git a/op-challenger/fault/service.go b/op-challenger/fault/service.go index 3b3e9bcc9457e..b76ed33eb33f9 100644 --- a/op-challenger/fault/service.go +++ b/op-challenger/fault/service.go @@ -36,7 +36,7 @@ func NewService(ctx context.Context, logger log.Logger, cfg *config.Config) (*se return nil, fmt.Errorf("failed to dial L1: %w", err) } - txMgr, err := txmgr.NewSimpleTxManager("challenger", logger, &metrics.NoopTxMetrics{}, cfg.TxMgrConfig, cfg.KmsConfig) + txMgr, err := txmgr.NewSimpleTxManager("challenger", logger, &metrics.NoopTxMetrics{}, cfg.TxMgrConfig) if err != nil { return nil, fmt.Errorf("failed to create the transaction manager: %w", err) } diff --git a/op-challenger/flags/flags.go b/op-challenger/flags/flags.go index 1a1ee7d559f8d..963f2a64baf6a 100644 --- a/op-challenger/flags/flags.go +++ b/op-challenger/flags/flags.go @@ -9,7 +9,6 @@ import ( "github.com/urfave/cli/v2" opservice "github.com/ethereum-optimism/optimism/op-service" - opkms "github.com/ethereum-optimism/optimism/op-service/kms" oplog "github.com/ethereum-optimism/optimism/op-service/log" txmgr "github.com/ethereum-optimism/optimism/op-service/txmgr" ) @@ -102,7 +101,6 @@ var optionalFlags = []cli.Flag{ func init() { optionalFlags = append(optionalFlags, oplog.CLIFlags(envVarPrefix)...) optionalFlags = append(optionalFlags, txmgr.CLIFlags(envVarPrefix)...) - optionalFlags = append(optionalFlags, opkms.CLIFlags(envVarPrefix)...) Flags = append(requiredFlags, optionalFlags...) } @@ -155,8 +153,6 @@ func NewConfigFromCLI(ctx *cli.Context) (*config.Config, error) { traceTypeFlag := config.TraceType(strings.ToLower(ctx.String(TraceTypeFlag.Name))) - kmsConfig := opkms.ReadCLIConfig(ctx) - return &config.Config{ // Required Flags L1EthRpc: ctx.String(L1EthRpcFlag.Name), @@ -170,6 +166,5 @@ func NewConfigFromCLI(ctx *cli.Context) (*config.Config, error) { AgreeWithProposedOutput: ctx.Bool(AgreeWithProposedOutputFlag.Name), GameDepth: ctx.Int(GameDepthFlag.Name), TxMgrConfig: txMgrConfig, - KmsConfig: kmsConfig, }, nil } diff --git a/op-e2e/actions/l2_proposer.go b/op-e2e/actions/l2_proposer.go index 93a88ad60152d..ff66bd3028489 100644 --- a/op-e2e/actions/l2_proposer.go +++ b/op-e2e/actions/l2_proposer.go @@ -44,8 +44,8 @@ type fakeTxMgr struct { from common.Address } -func (f fakeTxMgr) From() (common.Address, error) { - return f.from, nil +func (f fakeTxMgr) From() common.Address { + return f.from } func (f fakeTxMgr) Call(_ context.Context, _ ethereum.CallMsg, _ *big.Int) ([]byte, error) { panic("unimplemented") diff --git a/op-proposer/flags/flags.go b/op-proposer/flags/flags.go index 952b1ccdae5f0..d9acde95dcd43 100644 --- a/op-proposer/flags/flags.go +++ b/op-proposer/flags/flags.go @@ -7,7 +7,6 @@ import ( "github.com/urfave/cli/v2" opservice "github.com/ethereum-optimism/optimism/op-service" - opkms "github.com/ethereum-optimism/optimism/op-service/kms" oplog "github.com/ethereum-optimism/optimism/op-service/log" opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" oppprof "github.com/ethereum-optimism/optimism/op-service/pprof" @@ -73,7 +72,6 @@ func init() { optionalFlags = append(optionalFlags, opmetrics.CLIFlags(EnvVarPrefix)...) optionalFlags = append(optionalFlags, oppprof.CLIFlags(EnvVarPrefix)...) optionalFlags = append(optionalFlags, txmgr.CLIFlags(EnvVarPrefix)...) - optionalFlags = append(optionalFlags, opkms.CLIFlags(EnvVarPrefix)...) Flags = append(requiredFlags, optionalFlags...) } diff --git a/op-proposer/proposer/config.go b/op-proposer/proposer/config.go index 27e0320068190..76546935d2432 100644 --- a/op-proposer/proposer/config.go +++ b/op-proposer/proposer/config.go @@ -10,7 +10,6 @@ import ( "github.com/ethereum-optimism/optimism/op-node/sources" "github.com/ethereum-optimism/optimism/op-proposer/flags" - opkms "github.com/ethereum-optimism/optimism/op-service/kms" oplog "github.com/ethereum-optimism/optimism/op-service/log" opmetrics "github.com/ethereum-optimism/optimism/op-service/metrics" oppprof "github.com/ethereum-optimism/optimism/op-service/pprof" @@ -62,8 +61,6 @@ type CLIConfig struct { MetricsConfig opmetrics.CLIConfig PprofConfig oppprof.CLIConfig - - KmsConfig opkms.CLIConfig } func (c CLIConfig) Check() error { @@ -82,9 +79,6 @@ func (c CLIConfig) Check() error { if err := c.TxMgrConfig.Check(); err != nil { return err } - if err := c.KmsConfig.Check(); err != nil { - return err - } return nil } @@ -103,6 +97,5 @@ func NewConfig(ctx *cli.Context) CLIConfig { LogConfig: oplog.ReadCLIConfig(ctx), MetricsConfig: opmetrics.ReadCLIConfig(ctx), PprofConfig: oppprof.ReadCLIConfig(ctx), - KmsConfig: opkms.ReadCLIConfig(ctx), } } diff --git a/op-proposer/proposer/l2_output_submitter.go b/op-proposer/proposer/l2_output_submitter.go index e40db35294ba6..f41e2858e788d 100644 --- a/op-proposer/proposer/l2_output_submitter.go +++ b/op-proposer/proposer/l2_output_submitter.go @@ -88,13 +88,7 @@ func Main(version string, cliCtx *cli.Context) error { l.Error("error starting metrics server", err) } }() - from, err := proposerConfig.TxManager.From() - if err != nil { - cancel() - l.Error("error getting from address", "err", err) - return err - } - m.StartBalanceMetrics(ctx, l, proposerConfig.L1Client, from) + m.StartBalanceMetrics(ctx, l, proposerConfig.L1Client, proposerConfig.TxManager.From()) } rpcCfg := cfg.RPCConfig @@ -157,7 +151,7 @@ func NewL2OutputSubmitterConfigFromCLIConfig(cfg CLIConfig, l log.Logger, m metr return nil, err } - txManager, err := txmgr.NewSimpleTxManager("proposer", l, m, cfg.TxMgrConfig, cfg.KmsConfig) + txManager, err := txmgr.NewSimpleTxManager("proposer", l, m, cfg.TxMgrConfig) if err != nil { return nil, err } @@ -248,14 +242,8 @@ func (l *L2OutputSubmitter) Stop() { func (l *L2OutputSubmitter) FetchNextOutputInfo(ctx context.Context) (*eth.OutputResponse, bool, error) { cCtx, cancel := context.WithTimeout(ctx, l.networkTimeout) defer cancel() - // TODO: we should not call KMS every time we want to fetch info - from, err := l.txMgr.From() - if err != nil { - l.log.Error("proposer unable to get from address", "err", err) - return nil, false, err - } callOpts := &bind.CallOpts{ - From: from, + From: l.txMgr.From(), Context: cCtx, } nextCheckpointBlock, err := l.l2ooContract.NextBlockNumber(callOpts) diff --git a/op-service/kms/cli.go b/op-service/kms/cli.go deleted file mode 100644 index 8ff9bc658b1bd..0000000000000 --- a/op-service/kms/cli.go +++ /dev/null @@ -1,61 +0,0 @@ -package kms - -import ( - "errors" - - opservice "github.com/ethereum-optimism/optimism/op-service" - "github.com/urfave/cli/v2" -) - -const ( - KmsKeyIDName = "kms.keyid" - KmsEndpointName = "kms.endpoint" - KmsRegionName = "kms.region" -) - -func CLIFlags(envPrefix string) []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: KmsKeyIDName, - Usage: "KMS Key ID", - EnvVars: opservice.PrefixEnvVar(envPrefix, "KMS_KEY_ID"), - }, - &cli.StringFlag{ - Name: KmsEndpointName, - Usage: "KMS Endpoint", - EnvVars: opservice.PrefixEnvVar(envPrefix, "KMS_ENDPOINT"), - }, - &cli.StringFlag{ - Name: KmsRegionName, - Usage: "KMS Region", - EnvVars: opservice.PrefixEnvVar(envPrefix, "KMS_REGION"), - }, - } -} - -type CLIConfig struct { - KmsKeyID string - KmsEndpoint string - KmsRegion string -} - -func (c CLIConfig) Check() error { - if c.KmsKeyID != "" { - if c.KmsEndpoint == "" { - return errors.New("KMS Endpoint must be provided") - } - if c.KmsRegion == "" { - return errors.New("KMS Region must be provided") - } - } - - return nil -} - -func ReadCLIConfig(ctx *cli.Context) CLIConfig { - return CLIConfig{ - KmsKeyID: ctx.String(KmsKeyIDName), - KmsEndpoint: ctx.String(KmsEndpointName), - KmsRegion: ctx.String(KmsRegionName), - } -} diff --git a/op-service/kms/cli_test.go b/op-service/kms/cli_test.go deleted file mode 100644 index fc339e7820721..0000000000000 --- a/op-service/kms/cli_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package kms - -import ( - "testing" - - "github.com/stretchr/testify/require" - "github.com/urfave/cli/v2" -) - -func TestInvalidConfig(t *testing.T) { - tests := []struct { - name string - configChange func(config *CLIConfig) - err string - }{ - {"MissingKmsEndpoint", func(config *CLIConfig) { - config.KmsKeyID = "test" - config.KmsEndpoint = "" - }, - "KMS Endpoint must be provided", - }, - {"MissingKmsRegion", func(config *CLIConfig) { - config.KmsKeyID = "test" - config.KmsEndpoint = "test" - config.KmsRegion = "" - }, - "KMS Region must be provided", - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - cfg := configForArgs() - test.configChange(&cfg) - err := cfg.Check() - require.ErrorContains(t, err, test.err) - }) - } -} - -func configForArgs(args ...string) CLIConfig { - app := cli.NewApp() - app.Flags = CLIFlags("TEST_") - app.Name = "test" - var config CLIConfig - app.Action = func(ctx *cli.Context) error { - config = ReadCLIConfig(ctx) - return nil - } - _ = app.Run(args) - return config -} diff --git a/op-service/txmgr/cli.go b/op-service/txmgr/cli.go index a483e44906603..b3e6f9865ce3f 100644 --- a/op-service/txmgr/cli.go +++ b/op-service/txmgr/cli.go @@ -11,6 +11,7 @@ import ( opcrypto "github.com/ethereum-optimism/optimism/op-service/crypto" "github.com/ethereum-optimism/optimism/op-signer/client" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/log" "github.com/urfave/cli/v2" @@ -31,6 +32,10 @@ const ( TxSendTimeoutFlagName = "txmgr.send-timeout" TxNotInMempoolTimeoutFlagName = "txmgr.not-in-mempool-timeout" ReceiptQueryIntervalFlagName = "txmgr.receipt-query-interval" + // Kms + KmsKeyIDName = "kms.keyid" + KmsEndpointName = "kms.endpoint" + KmsRegionName = "kms.region" ) var ( @@ -120,6 +125,21 @@ func CLIFlags(envPrefix string) []cli.Flag { Value: defaultReceiptQueryInterval, EnvVars: prefixEnvVars("TXMGR_RECEIPT_QUERY_INTERVAL"), }, + &cli.StringFlag{ + Name: KmsKeyIDName, + Usage: "KMS Key ID.", + EnvVars: opservice.PrefixEnvVar(envPrefix, "KMS_KEY_ID"), + }, + &cli.StringFlag{ + Name: KmsEndpointName, + Usage: "KMS Endpoint.", + EnvVars: opservice.PrefixEnvVar(envPrefix, "KMS_ENDPOINT"), + }, + &cli.StringFlag{ + Name: KmsRegionName, + Usage: "KMS Region", + EnvVars: opservice.PrefixEnvVar(envPrefix, "KMS_REGION"), + }, }, client.CLIFlags(envPrefix)...) } @@ -138,6 +158,9 @@ type CLIConfig struct { NetworkTimeout time.Duration TxSendTimeout time.Duration TxNotInMempoolTimeout time.Duration + KmsKeyID string + KmsEndpoint string + KmsRegion string } func NewCLIConfig(l1RPCURL string) CLIConfig { @@ -179,6 +202,14 @@ func (m CLIConfig) Check() error { if err := m.SignerCLIConfig.Check(); err != nil { return err } + if m.KmsKeyID != "" { + if m.KmsEndpoint == "" { + return errors.New("KMS Endpoint must be provided") + } + if m.KmsRegion == "" { + return errors.New("KMS Region must be provided") + } + } return nil } @@ -198,6 +229,9 @@ func ReadCLIConfig(ctx *cli.Context) CLIConfig { NetworkTimeout: ctx.Duration(NetworkTimeoutFlagName), TxSendTimeout: ctx.Duration(TxSendTimeoutFlagName), TxNotInMempoolTimeout: ctx.Duration(TxNotInMempoolTimeoutFlagName), + KmsKeyID: ctx.String(KmsKeyIDName), + KmsEndpoint: ctx.String(KmsEndpointName), + KmsRegion: ctx.String(KmsRegionName), } } @@ -228,9 +262,31 @@ func NewConfig(cfg CLIConfig, l log.Logger) (Config, error) { hdPath = cfg.L2OutputHDPath } - signerFactory, from, err := opcrypto.SignerFactoryFromConfig(l, cfg.PrivateKey, cfg.Mnemonic, hdPath, cfg.SignerCLIConfig) - if err != nil { - return Config{}, fmt.Errorf("could not init signer: %w", err) + var ( + from common.Address + signerFactory opcrypto.SignerFactory + kmsManager KmsManager + ) + + if cfg.KmsKeyID != "" { + kmsManager, err = NewKmsConfig(cfg) + if err != nil { + return Config{}, fmt.Errorf("could not init kms: %w", err) + } + from, err = kmsManager.GetAddr() + if err != nil { + return Config{}, fmt.Errorf("could not get address from kms: %w", err) + } + signerFactory = func(chainID *big.Int) opcrypto.SignerFn { + return func(ctx context.Context, address common.Address, tx *types.Transaction) (*types.Transaction, error) { + return kmsManager.Sign(chainID, tx) + } + } + } else { + signerFactory, from, err = opcrypto.SignerFactoryFromConfig(l, cfg.PrivateKey, cfg.Mnemonic, hdPath, cfg.SignerCLIConfig) + if err != nil { + return Config{}, fmt.Errorf("could not init signer: %w", err) + } } return Config{ @@ -245,6 +301,7 @@ func NewConfig(cfg CLIConfig, l log.Logger) (Config, error) { SafeAbortNonceTooLowCount: cfg.SafeAbortNonceTooLowCount, Signer: signerFactory(chainID), From: from, + KmsManager: kmsManager, }, nil } @@ -289,4 +346,7 @@ type Config struct { // Signer is used to sign transactions when the gas price is increased. Signer opcrypto.SignerFn From common.Address + + // Kms structure for signing transactions + KmsManager KmsManager } diff --git a/op-service/kms/manager.go b/op-service/txmgr/kms.go similarity index 82% rename from op-service/kms/manager.go rename to op-service/txmgr/kms.go index 7e2ee77d3e0ce..34cf61fc6a138 100644 --- a/op-service/kms/manager.go +++ b/op-service/txmgr/kms.go @@ -1,6 +1,8 @@ -package kms +package txmgr import ( + "math/big" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/session" @@ -14,7 +16,7 @@ import ( //go:generate mockery --name KmsManager --output ./mocks type KmsManager interface { GetAddr() (common.Address, error) - Sign(rawTx *types.DynamicFeeTx) (*types.Transaction, error) + Sign(chainID *big.Int, tx *types.Transaction) (*types.Transaction, error) } type KmsConfig struct { @@ -50,12 +52,12 @@ func (k *KmsConfig) GetAddr() (common.Address, error) { return addr, nil } -func (k *KmsConfig) Sign(rawTx *types.DynamicFeeTx) (*types.Transaction, error) { - transactOpts, err := ethawskmssigner.NewAwsKmsTransactorWithChainID(k.kmsSession, k.keyId, rawTx.ChainID) +func (k *KmsConfig) Sign(chainID *big.Int, tx *types.Transaction) (*types.Transaction, error) { + transactOpts, err := ethawskmssigner.NewAwsKmsTransactorWithChainID(k.kmsSession, k.keyId, chainID) if err != nil { return nil, err } - signedTx, err := transactOpts.Signer(transactOpts.From, types.NewTx(rawTx)) + signedTx, err := transactOpts.Signer(transactOpts.From, tx) if err != nil { return nil, err } diff --git a/op-service/kms/mocks/KmsManager.go b/op-service/txmgr/mocks/KmsManager.go similarity index 72% rename from op-service/kms/mocks/KmsManager.go rename to op-service/txmgr/mocks/KmsManager.go index 7519648fc89d5..160ec2596eb3c 100644 --- a/op-service/kms/mocks/KmsManager.go +++ b/op-service/txmgr/mocks/KmsManager.go @@ -3,8 +3,9 @@ package mocks import ( - common "github.com/ethereum/go-ethereum/common" + big "math/big" + common "github.com/ethereum/go-ethereum/common" mock "github.com/stretchr/testify/mock" types "github.com/ethereum/go-ethereum/core/types" @@ -41,25 +42,25 @@ func (_m *KmsManager) GetAddr() (common.Address, error) { return r0, r1 } -// Sign provides a mock function with given fields: rawTx -func (_m *KmsManager) Sign(rawTx *types.DynamicFeeTx) (*types.Transaction, error) { - ret := _m.Called(rawTx) +// Sign provides a mock function with given fields: chainID, tx +func (_m *KmsManager) Sign(chainID *big.Int, tx *types.Transaction) (*types.Transaction, error) { + ret := _m.Called(chainID, tx) var r0 *types.Transaction var r1 error - if rf, ok := ret.Get(0).(func(*types.DynamicFeeTx) (*types.Transaction, error)); ok { - return rf(rawTx) + if rf, ok := ret.Get(0).(func(*big.Int, *types.Transaction) (*types.Transaction, error)); ok { + return rf(chainID, tx) } - if rf, ok := ret.Get(0).(func(*types.DynamicFeeTx) *types.Transaction); ok { - r0 = rf(rawTx) + if rf, ok := ret.Get(0).(func(*big.Int, *types.Transaction) *types.Transaction); ok { + r0 = rf(chainID, tx) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*types.Transaction) } } - if rf, ok := ret.Get(1).(func(*types.DynamicFeeTx) error); ok { - r1 = rf(rawTx) + if rf, ok := ret.Get(1).(func(*big.Int, *types.Transaction) error); ok { + r1 = rf(chainID, tx) } else { r1 = ret.Error(1) } diff --git a/op-service/txmgr/txmgr.go b/op-service/txmgr/txmgr.go index d4458fdc4fae6..706efbb5adf48 100644 --- a/op-service/txmgr/txmgr.go +++ b/op-service/txmgr/txmgr.go @@ -17,7 +17,6 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum-optimism/optimism/op-service/kms" "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" ) @@ -52,7 +51,7 @@ type TxManager interface { // From returns the sending address associated with the instance of the transaction manager. // It is static for a single instance of a TxManager. - From() (common.Address, error) + From() common.Address // BlockNumber returns the most recent block number from the underlying network. BlockNumber(ctx context.Context) (uint64, error) @@ -104,24 +103,15 @@ type SimpleTxManager struct { nonceLock sync.RWMutex pending atomic.Int64 - - kms kms.KmsManager } // NewSimpleTxManager initializes a new SimpleTxManager with the passed Config. -func NewSimpleTxManager(name string, l log.Logger, m metrics.TxMetricer, cfg CLIConfig, kmsCfg kms.CLIConfig) (*SimpleTxManager, error) { +func NewSimpleTxManager(name string, l log.Logger, m metrics.TxMetricer, cfg CLIConfig) (*SimpleTxManager, error) { conf, err := NewConfig(cfg, l) if err != nil { return nil, err } - var kmsManager kms.KmsManager - if kmsCfg.KmsKeyID != "" { - kmsManager, err = kms.NewKmsConfig(kmsCfg) - if err != nil { - return nil, err - } - } return &SimpleTxManager{ chainID: conf.ChainID, name: name, @@ -129,23 +119,11 @@ func NewSimpleTxManager(name string, l log.Logger, m metrics.TxMetricer, cfg CLI backend: conf.Backend, l: l.New("service", name), metr: m, - kms: kmsManager, }, nil } -func (m *SimpleTxManager) UseKms() bool { - return m.kms != nil -} - -func (m *SimpleTxManager) From() (common.Address, error) { - if m.UseKms() { - addr, err := m.kms.GetAddr() - if err != nil { - return common.Address{}, err - } - return addr, nil - } - return m.cfg.From, nil +func (m *SimpleTxManager) From() common.Address { + return m.cfg.From } func (m *SimpleTxManager) BlockNumber(ctx context.Context) (uint64, error) { @@ -153,9 +131,6 @@ func (m *SimpleTxManager) BlockNumber(ctx context.Context) (uint64, error) { } func (m *SimpleTxManager) Sign(ctx context.Context, from common.Address, rawTx *types.DynamicFeeTx) (*types.Transaction, error) { - if m.UseKms() { - return m.kms.Sign(rawTx) - } return m.cfg.Signer(ctx, m.cfg.From, types.NewTx(rawTx)) } diff --git a/op-service/txmgr/txmgr_test.go b/op-service/txmgr/txmgr_test.go index b5a25a14b3a69..4e300ab20e44b 100644 --- a/op-service/txmgr/txmgr_test.go +++ b/op-service/txmgr/txmgr_test.go @@ -12,8 +12,6 @@ import ( "github.com/stretchr/testify/require" "github.com/ethereum-optimism/optimism/op-node/testlog" - "github.com/ethereum-optimism/optimism/op-service/kms" - kmsmocks "github.com/ethereum-optimism/optimism/op-service/kms/mocks" "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" "github.com/ethereum/go-ethereum" @@ -610,47 +608,10 @@ func TestWaitMinedMultipleConfs(t *testing.T) { func TestManagerErrsOnZeroConfs(t *testing.T) { t.Parallel() - _, err := NewSimpleTxManager("TEST", testlog.Logger(t, log.LvlCrit), &metrics.NoopTxMetrics{}, CLIConfig{}, kms.CLIConfig{}) + _, err := NewSimpleTxManager("TEST", testlog.Logger(t, log.LvlCrit), &metrics.NoopTxMetrics{}, CLIConfig{}) require.Error(t, err) } -// TestManagerKMS ensures that SimpleTxManager will use the KMS if configured. -func TestManagerKMS(t *testing.T) { - txManager := SimpleTxManager{} - txManager.cfg = Config{ - From: common.Address{1}, - } - addr, err := txManager.From() - require.NoError(t, err) - require.Equal(t, addr, common.Address{1}) - - mock := kmsmocks.NewKmsManager(t) - txManager.kms = mock - require.Equal(t, txManager.UseKms(), true) - - mock.On("GetAddr").Return(common.Address{}, fmt.Errorf("error")).Once() - _, err = txManager.From() - require.ErrorContains(t, err, "error") - mock.On("GetAddr").Return(common.Address{2}, nil).Once() - addr, err = txManager.From() - require.NoError(t, err) - require.Equal(t, addr, common.Address{2}) - - dynamicTx := &types.DynamicFeeTx{ - GasTipCap: big.NewInt(1), - GasFeeCap: big.NewInt(2), - } - mock.On("Sign", dynamicTx).Return(nil, fmt.Errorf("error")).Once() - _, err = txManager.Sign(context.Background(), common.Address{1}, dynamicTx) - require.ErrorContains(t, err, "error") - - tx := types.NewTransaction(1, common.Address{1}, big.NewInt(1), 1, big.NewInt(1), []byte{}) - mock.On("Sign", dynamicTx).Return(tx, nil).Once() - signedTx, err := txManager.Sign(context.Background(), common.Address{1}, dynamicTx) - require.NoError(t, err) - require.Equal(t, signedTx, tx) -} - // failingBackend implements ReceiptSource, returning a failure on the // first call but a success on the second call. This allows us to test that the // inner loop of WaitMined properly handles this case. From 6001c17494dec38792c1436a930392cadff0f6ce Mon Sep 17 00:00:00 2001 From: cby3149 Date: Mon, 14 Aug 2023 17:16:58 -0700 Subject: [PATCH 24/34] Add test --- op-service/txmgr/cli_test.go | 39 +++++++++++++++++++++++++++++ op-service/txmgr/mocks/TxManager.go | 14 ++--------- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/op-service/txmgr/cli_test.go b/op-service/txmgr/cli_test.go index 85a6efa37c9a2..703d908de81a9 100644 --- a/op-service/txmgr/cli_test.go +++ b/op-service/txmgr/cli_test.go @@ -1,8 +1,12 @@ package txmgr import ( + "fmt" + "net/http" + "net/http/httptest" "testing" + "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" "github.com/urfave/cli/v2" ) @@ -39,3 +43,38 @@ func configForArgs(args ...string) CLIConfig { _ = app.Run(args) return config } + +type MockServer struct { + Server *httptest.Server + Payload string +} + +func (m *MockServer) Start() { + m.Server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Println("Receive Request") + w.WriteHeader(http.StatusOK) + w.Write([]byte(m.Payload)) + })) +} + +func (m *MockServer) Stop() { + m.Server.Close() +} + +func TestNewConfigKMS(t *testing.T) { + m := MockServer{ + Payload: "{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":\"0x1\"}", + } + m.Start() + defer m.Stop() + + cliCfg := NewCLIConfig(m.Server.URL) + _, err := NewConfig(cliCfg, log.New()) + require.ErrorContains(t, err, "mnemonic is required") + + cliCfg.KmsKeyID = "test" + cliCfg.KmsEndpoint = "test" + cliCfg.KmsRegion = "test" + _, err = NewConfig(cliCfg, log.New()) + require.ErrorContains(t, err, "AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment") +} diff --git a/op-service/txmgr/mocks/TxManager.go b/op-service/txmgr/mocks/TxManager.go index 7071efe6b3267..75058e3dabc50 100644 --- a/op-service/txmgr/mocks/TxManager.go +++ b/op-service/txmgr/mocks/TxManager.go @@ -73,14 +73,10 @@ func (_m *TxManager) Call(ctx context.Context, msg ethereum.CallMsg, blockNumber } // From provides a mock function with given fields: -func (_m *TxManager) From() (common.Address, error) { +func (_m *TxManager) From() common.Address { ret := _m.Called() var r0 common.Address - var r1 error - if rf, ok := ret.Get(0).(func() (common.Address, error)); ok { - return rf() - } if rf, ok := ret.Get(0).(func() common.Address); ok { r0 = rf() } else { @@ -89,13 +85,7 @@ func (_m *TxManager) From() (common.Address, error) { } } - if rf, ok := ret.Get(1).(func() error); ok { - r1 = rf() - } else { - r1 = ret.Error(1) - } - - return r0, r1 + return r0 } // Send provides a mock function with given fields: ctx, candidate From fb083a857b3d43b18a43d5dd27fe2ddcd7c16f6f Mon Sep 17 00:00:00 2001 From: cby3149 Date: Tue, 15 Aug 2023 11:05:05 -0700 Subject: [PATCH 25/34] Add KMS to docker-compose --- bedrock-devnet/devnet/__init__.py | 4 +- go.mod | 2 +- go.sum | 15 +---- op-service/txmgr/cli_test.go | 18 +++--- op-service/txmgr/kms.go | 5 +- op-service/txmgr/mocks/KmsManager.go | 84 ---------------------------- ops-bedrock/docker-compose.yml | 35 ++++++++++-- ops-bedrock/seed.yaml | 21 +++++++ 8 files changed, 70 insertions(+), 114 deletions(-) delete mode 100644 op-service/txmgr/mocks/KmsManager.go create mode 100644 ops-bedrock/seed.yaml diff --git a/bedrock-devnet/devnet/__init__.py b/bedrock-devnet/devnet/__init__.py index 39d7abedb0108..a4d4ff1674d17 100644 --- a/bedrock-devnet/devnet/__init__.py +++ b/bedrock-devnet/devnet/__init__.py @@ -113,7 +113,7 @@ def devnet_prestate(paths): wait_for_rpc_server('127.0.0.1:9545') log.info('Bringing up the services.') - run_command(['docker-compose', 'up', '-d', 'op-proposer', 'op-batcher'], cwd=paths.ops_bedrock_dir, env={ + run_command(['docker-compose', 'up', '-d', 'op-proposer', 'op-batcher', 'kms'], cwd=paths.ops_bedrock_dir, env={ 'PWD': paths.ops_bedrock_dir, 'L2OO_ADDRESS': '0x6900000000000000000000000000000000000000' }) @@ -209,7 +209,7 @@ def devnet_deploy(paths): wait_for_rpc_server('127.0.0.1:9545') log.info('Bringing up everything else.') - run_command(['docker-compose', 'up', '-d', 'op-node', 'op-proposer', 'op-batcher'], cwd=paths.ops_bedrock_dir, env={ + run_command(['docker-compose', 'up', '-d', 'op-node', 'op-proposer', 'op-batcher', 'kms'], cwd=paths.ops_bedrock_dir, env={ 'PWD': paths.ops_bedrock_dir, 'L2OO_ADDRESS': addresses['L2OutputOracleProxy'], 'SEQUENCER_BATCH_INBOX_ADDRESS': rollup_config['batch_inbox_address'] diff --git a/go.mod b/go.mod index 2073331d50215..fdee05cf6c45c 100644 --- a/go.mod +++ b/go.mod @@ -60,7 +60,7 @@ require ( github.com/DataDog/zstd v1.5.2 // indirect github.com/VictoriaMetrics/fastcache v1.10.0 // indirect github.com/allegro/bigcache v1.2.1 // indirect - github.com/aws/aws-sdk-go v1.44.322 + github.com/aws/aws-sdk-go v1.42.6 github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect diff --git a/go.sum b/go.sum index 347869f9c34c5..3cc9f2055589a 100644 --- a/go.sum +++ b/go.sum @@ -70,8 +70,8 @@ github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYU github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/aws/aws-sdk-go v1.38.51/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.44.322 h1:7JfwifGRGQMHd99PvfXqxBaZsjuRaOF6e3X9zRx2uYo= -github.com/aws/aws-sdk-go v1.44.322/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.42.6 h1:CiJmv8Fdc7wLZhfWy1ZA9TNoOQrFtUC0mhpgyJTaKOs= +github.com/aws/aws-sdk-go v1.42.6/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= @@ -999,7 +999,6 @@ github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZ github.com/yuin/goldmark v1.1.27/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= @@ -1095,7 +1094,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB 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.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -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= @@ -1133,12 +1131,11 @@ golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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-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.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1158,7 +1155,6 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/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-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= @@ -1226,16 +1222,13 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/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.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= golang.org/x/sys v0.7.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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1246,7 +1239,6 @@ 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/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1301,7 +1293,6 @@ 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.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= diff --git a/op-service/txmgr/cli_test.go b/op-service/txmgr/cli_test.go index 703d908de81a9..72873fef8d9de 100644 --- a/op-service/txmgr/cli_test.go +++ b/op-service/txmgr/cli_test.go @@ -51,9 +51,11 @@ type MockServer struct { func (m *MockServer) Start() { m.Server = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Println("Receive Request") w.WriteHeader(http.StatusOK) - w.Write([]byte(m.Payload)) + _, err := w.Write([]byte(m.Payload)) + if err != nil { + fmt.Printf("failed to write response: %v", err) + } })) } @@ -68,13 +70,13 @@ func TestNewConfigKMS(t *testing.T) { m.Start() defer m.Stop() - cliCfg := NewCLIConfig(m.Server.URL) - _, err := NewConfig(cliCfg, log.New()) + cli := NewCLIConfig(m.Server.URL) + _, err := NewConfig(cli, log.New()) require.ErrorContains(t, err, "mnemonic is required") - cliCfg.KmsKeyID = "test" - cliCfg.KmsEndpoint = "test" - cliCfg.KmsRegion = "test" - _, err = NewConfig(cliCfg, log.New()) + cli.KmsKeyID = "test" + cli.KmsEndpoint = "test" + cli.KmsRegion = "test" + _, err = NewConfig(cli, log.New()) require.ErrorContains(t, err, "AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment") } diff --git a/op-service/txmgr/kms.go b/op-service/txmgr/kms.go index 34cf61fc6a138..fdecb7f3e9f97 100644 --- a/op-service/txmgr/kms.go +++ b/op-service/txmgr/kms.go @@ -1,6 +1,7 @@ package txmgr import ( + "fmt" "math/big" "github.com/aws/aws-sdk-go/aws" @@ -13,7 +14,6 @@ import ( ethawskmssigner "github.com/welthee/go-ethereum-aws-kms-tx-signer" ) -//go:generate mockery --name KmsManager --output ./mocks type KmsManager interface { GetAddr() (common.Address, error) Sign(chainID *big.Int, tx *types.Transaction) (*types.Transaction, error) @@ -26,9 +26,8 @@ type KmsConfig struct { func NewKmsConfig(cfg CLIConfig) (*KmsConfig, error) { if cfg.KmsKeyID == "" || cfg.KmsEndpoint == "" || cfg.KmsRegion == "" { - return nil, nil + return nil, fmt.Errorf("KMS config is not set") } - session, err := session.NewSession(&aws.Config{ Credentials: credentials.NewEnvCredentials(), Region: aws.String(cfg.KmsRegion), diff --git a/op-service/txmgr/mocks/KmsManager.go b/op-service/txmgr/mocks/KmsManager.go deleted file mode 100644 index 160ec2596eb3c..0000000000000 --- a/op-service/txmgr/mocks/KmsManager.go +++ /dev/null @@ -1,84 +0,0 @@ -// Code generated by mockery v2.28.1. DO NOT EDIT. - -package mocks - -import ( - big "math/big" - - common "github.com/ethereum/go-ethereum/common" - mock "github.com/stretchr/testify/mock" - - types "github.com/ethereum/go-ethereum/core/types" -) - -// KmsManager is an autogenerated mock type for the KmsManager type -type KmsManager struct { - mock.Mock -} - -// GetAddr provides a mock function with given fields: -func (_m *KmsManager) GetAddr() (common.Address, error) { - ret := _m.Called() - - var r0 common.Address - var r1 error - if rf, ok := ret.Get(0).(func() (common.Address, error)); ok { - return rf() - } - if rf, ok := ret.Get(0).(func() common.Address); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(common.Address) - } - } - - if rf, ok := ret.Get(1).(func() error); ok { - r1 = rf() - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// Sign provides a mock function with given fields: chainID, tx -func (_m *KmsManager) Sign(chainID *big.Int, tx *types.Transaction) (*types.Transaction, error) { - ret := _m.Called(chainID, tx) - - var r0 *types.Transaction - var r1 error - if rf, ok := ret.Get(0).(func(*big.Int, *types.Transaction) (*types.Transaction, error)); ok { - return rf(chainID, tx) - } - if rf, ok := ret.Get(0).(func(*big.Int, *types.Transaction) *types.Transaction); ok { - r0 = rf(chainID, tx) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*types.Transaction) - } - } - - if rf, ok := ret.Get(1).(func(*big.Int, *types.Transaction) error); ok { - r1 = rf(chainID, tx) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -type mockConstructorTestingTNewKmsManager interface { - mock.TestingT - Cleanup(func()) -} - -// NewKmsManager creates a new instance of KmsManager. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -func NewKmsManager(t mockConstructorTestingTNewKmsManager) *KmsManager { - mock := &KmsManager{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/ops-bedrock/docker-compose.yml b/ops-bedrock/docker-compose.yml index f155ae5d5921a..0639c538cd365 100644 --- a/ops-bedrock/docker-compose.yml +++ b/ops-bedrock/docker-compose.yml @@ -100,6 +100,7 @@ services: - l1 - l2 - op-node + - kms build: context: ../ dockerfile: ./op-proposer/Dockerfile @@ -111,18 +112,25 @@ services: OP_PROPOSER_ROLLUP_RPC: http://op-node:8545 OP_PROPOSER_POLL_INTERVAL: 1s OP_PROPOSER_NUM_CONFIRMATIONS: 1 - OP_PROPOSER_MNEMONIC: test test test test test test test test test test test junk - OP_PROPOSER_L2_OUTPUT_HD_PATH: "m/44'/60'/0'/0/1" + # OP_PROPOSER_MNEMONIC: test test test test test test test test test test test junk + # OP_PROPOSER_L2_OUTPUT_HD_PATH: "m/44'/60'/0'/0/1" OP_PROPOSER_L2OO_ADDRESS: "${L2OO_ADDRESS}" OP_PROPOSER_PPROF_ENABLED: "true" OP_PROPOSER_METRICS_ENABLED: "true" OP_PROPOSER_ALLOW_NON_FINALIZED: "true" + OP_PROPOSER_KMS_ENDPOINT: "http://kms:8888" + OP_PROPOSER_KMS_REGION: "us-east-1" + OP_PROPOSER_KMS_KEY_ID: "0x70997970c51812dc3a010c7d01b50e0d17dc79c8" + # testing purposes only + AWS_ACCESS_KEY_ID: "1" + AWS_SECRET_ACCESS_KEY: "1" op-batcher: depends_on: - l1 - l2 - op-node + - kms build: context: ../ dockerfile: ./op-batcher/Dockerfile @@ -138,11 +146,17 @@ services: OP_BATCHER_SUB_SAFETY_MARGIN: 4 # SWS is 15, ChannelTimeout is 40 OP_BATCHER_POLL_INTERVAL: 1s OP_BATCHER_NUM_CONFIRMATIONS: 1 - OP_BATCHER_MNEMONIC: test test test test test test test test test test test junk - OP_BATCHER_SEQUENCER_HD_PATH: "m/44'/60'/0'/0/2" + # OP_BATCHER_MNEMONIC: test test test test test test test test test test test junk + # OP_BATCHER_SEQUENCER_HD_PATH: "m/44'/60'/0'/0/2" OP_BATCHER_PPROF_ENABLED: "true" OP_BATCHER_METRICS_ENABLED: "true" OP_BATCHER_RPC_ENABLE_ADMIN: "true" + OP_BATCHER_KMS_ENDPOINT: "http://kms:8888" + OP_BATCHER_KMS_REGION: "us-east-1" + OP_BATCHER_KMS_KEY_ID: "0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc" + # testing purposes only + AWS_ACCESS_KEY_ID: "1" + AWS_SECRET_ACCESS_KEY: "1" # stateviz: # build: @@ -157,3 +171,16 @@ services: # - "9090:8080" # volumes: # - op_log:/op_log:ro + + #in no way should this be running in production + kms: + image: bobanetwork/local-kms:latest + environment: + PORT: "8888" + KMS_REGION: "us-east-1" + volumes: + - type: bind + source: ./seed.yaml + target: /init/seed.yaml + ports: + - 8888:8888 diff --git a/ops-bedrock/seed.yaml b/ops-bedrock/seed.yaml new file mode 100644 index 0000000000000..533f2082b02e8 --- /dev/null +++ b/ops-bedrock/seed.yaml @@ -0,0 +1,21 @@ +Keys: + Asymmetric: + Ecc: + - Metadata: + KeyId: 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 + KeyUsage: SIGN_VERIFY + Description: ECC key for SEQUENCER with curve secp256k1 + PrivateKeyHex: 59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d + - Metadata: + KeyId: 0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc + KeyUsage: SIGN_VERIFY + Description: ECC key for PROPOSER with curve secp256k1 + PrivateKeyHex: 5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a + +Aliases: + - AliasName: alias/0x70997970c51812dc3a010c7d01b50e0d17dc79c8 + TargetKeyId: 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 + + - AliasName: alias/0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc + TargetKeyId: 0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc + From a56dcd42928c0be39d0dbfcf5590b5e17d5b3b9c Mon Sep 17 00:00:00 2001 From: cby3149 Date: Tue, 15 Aug 2023 13:32:25 -0700 Subject: [PATCH 26/34] Add unit test --- op-service/txmgr/txmgr_test.go | 51 ++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/op-service/txmgr/txmgr_test.go b/op-service/txmgr/txmgr_test.go index 4e300ab20e44b..0ca297fd6167c 100644 --- a/op-service/txmgr/txmgr_test.go +++ b/op-service/txmgr/txmgr_test.go @@ -12,6 +12,7 @@ import ( "github.com/stretchr/testify/require" "github.com/ethereum-optimism/optimism/op-node/testlog" + opcrypto "github.com/ethereum-optimism/optimism/op-service/crypto" "github.com/ethereum-optimism/optimism/op-service/txmgr/metrics" "github.com/ethereum/go-ethereum" @@ -922,3 +923,53 @@ func TestNonceReset(t *testing.T) { // internal nonce tracking should be reset every 3rd tx require.Equal(t, []uint64{0, 0, 1, 2, 0, 1, 2, 0}, nonces) } + +type mockKms struct { + addr common.Address + getAddrErr error + + tx *types.Transaction + signErr error +} + +func (kms *mockKms) GetAddr() (common.Address, error) { + return kms.addr, kms.getAddrErr +} + +func (kms *mockKms) SetGetAddr(addr common.Address, err error) { + kms.addr = addr + kms.getAddrErr = err +} + +func (kms *mockKms) Sign(chainID *big.Int, tx *types.Transaction) (*types.Transaction, error) { + return kms.tx, kms.signErr +} + +func (kms *mockKms) SetSign(tx *types.Transaction, err error) { + kms.tx = tx + kms.signErr = err +} + +func TestSign(t *testing.T) { + txManager := SimpleTxManager{} + kms := mockKms{} + signerFactory := func(chainID *big.Int) opcrypto.SignerFn { + return func(ctx context.Context, address common.Address, tx *types.Transaction) (*types.Transaction, error) { + return kms.Sign(chainID, tx) + } + } + txManager.cfg.Signer = signerFactory(big.NewInt(1)) + tx := types.NewTransaction(1, common.Address{1}, big.NewInt(1), 1, big.NewInt(1), []byte{}) + dynamicTx := &types.DynamicFeeTx{ + GasTipCap: big.NewInt(1), + GasFeeCap: big.NewInt(2), + } + kms.SetSign(nil, fmt.Errorf("error")) + _, err := txManager.Sign(context.Background(), common.Address{1}, dynamicTx) + require.ErrorContains(t, err, "error") + + kms.SetSign(tx, nil) + signedTx, err := txManager.Sign(context.Background(), common.Address{1}, dynamicTx) + require.NoError(t, err) + require.Equal(t, tx, signedTx) +} From a066bd0a4daf01a5ebaeaabff5544f8dec48d182 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Wed, 16 Aug 2023 09:43:47 -0700 Subject: [PATCH 27/34] Simplify unit test code --- op-service/txmgr/txmgr.go | 8 ++------ op-service/txmgr/txmgr_test.go | 21 ++++++--------------- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/op-service/txmgr/txmgr.go b/op-service/txmgr/txmgr.go index 706efbb5adf48..261711c214a70 100644 --- a/op-service/txmgr/txmgr.go +++ b/op-service/txmgr/txmgr.go @@ -130,10 +130,6 @@ func (m *SimpleTxManager) BlockNumber(ctx context.Context) (uint64, error) { return m.backend.BlockNumber(ctx) } -func (m *SimpleTxManager) Sign(ctx context.Context, from common.Address, rawTx *types.DynamicFeeTx) (*types.Transaction, error) { - return m.cfg.Signer(ctx, m.cfg.From, types.NewTx(rawTx)) -} - // TxCandidate is a transaction candidate that can be submitted to ask the // [TxManager] to construct a transaction with gas price bounds. type TxCandidate struct { @@ -235,7 +231,7 @@ func (m *SimpleTxManager) craftTx(ctx context.Context, candidate TxCandidate) (* ctx, cancel := context.WithTimeout(ctx, m.cfg.NetworkTimeout) defer cancel() - return m.Sign(ctx, m.cfg.From, rawTx) + return m.cfg.Signer(ctx, m.cfg.From, types.NewTx(rawTx)) } // nextNonce returns a nonce to use for the next transaction. It uses @@ -514,7 +510,7 @@ func (m *SimpleTxManager) increaseGasPrice(ctx context.Context, tx *types.Transa ctx, cancel := context.WithTimeout(ctx, m.cfg.NetworkTimeout) defer cancel() - newTx, err := m.Sign(ctx, m.cfg.From, rawTx) + newTx, err := m.cfg.Signer(ctx, m.cfg.From, types.NewTx(rawTx)) if err != nil { m.l.Warn("failed to sign new transaction", "err", err) return tx, nil diff --git a/op-service/txmgr/txmgr_test.go b/op-service/txmgr/txmgr_test.go index 0ca297fd6167c..240d72ca65187 100644 --- a/op-service/txmgr/txmgr_test.go +++ b/op-service/txmgr/txmgr_test.go @@ -936,20 +936,10 @@ func (kms *mockKms) GetAddr() (common.Address, error) { return kms.addr, kms.getAddrErr } -func (kms *mockKms) SetGetAddr(addr common.Address, err error) { - kms.addr = addr - kms.getAddrErr = err -} - func (kms *mockKms) Sign(chainID *big.Int, tx *types.Transaction) (*types.Transaction, error) { return kms.tx, kms.signErr } -func (kms *mockKms) SetSign(tx *types.Transaction, err error) { - kms.tx = tx - kms.signErr = err -} - func TestSign(t *testing.T) { txManager := SimpleTxManager{} kms := mockKms{} @@ -964,12 +954,13 @@ func TestSign(t *testing.T) { GasTipCap: big.NewInt(1), GasFeeCap: big.NewInt(2), } - kms.SetSign(nil, fmt.Errorf("error")) - _, err := txManager.Sign(context.Background(), common.Address{1}, dynamicTx) - require.ErrorContains(t, err, "error") + kms.tx = tx + kms.signErr = errors.New("fake-kms-error") + _, err := txManager.cfg.Signer(context.Background(), common.Address{1}, types.NewTx(dynamicTx)) + require.ErrorContains(t, err, "fake-kms-error") - kms.SetSign(tx, nil) - signedTx, err := txManager.Sign(context.Background(), common.Address{1}, dynamicTx) + kms.signErr = nil + signedTx, err := txManager.cfg.Signer(context.Background(), common.Address{1}, types.NewTx(dynamicTx)) require.NoError(t, err) require.Equal(t, tx, signedTx) } From d4cff7201039f358d216f8c2c8e11ec115206405 Mon Sep 17 00:00:00 2001 From: cby3149 Date: Wed, 16 Aug 2023 14:35:19 -0700 Subject: [PATCH 28/34] Add comment --- ops-bedrock/docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ops-bedrock/docker-compose.yml b/ops-bedrock/docker-compose.yml index 0639c538cd365..4f8110a7fc7a4 100644 --- a/ops-bedrock/docker-compose.yml +++ b/ops-bedrock/docker-compose.yml @@ -120,6 +120,7 @@ services: OP_PROPOSER_ALLOW_NON_FINALIZED: "true" OP_PROPOSER_KMS_ENDPOINT: "http://kms:8888" OP_PROPOSER_KMS_REGION: "us-east-1" + # The private key is derived from the mnemonic above OP_PROPOSER_KMS_KEY_ID: "0x70997970c51812dc3a010c7d01b50e0d17dc79c8" # testing purposes only AWS_ACCESS_KEY_ID: "1" @@ -153,6 +154,7 @@ services: OP_BATCHER_RPC_ENABLE_ADMIN: "true" OP_BATCHER_KMS_ENDPOINT: "http://kms:8888" OP_BATCHER_KMS_REGION: "us-east-1" + # The private key is derived from the mnemonic above OP_BATCHER_KMS_KEY_ID: "0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc" # testing purposes only AWS_ACCESS_KEY_ID: "1" From 20dfbc893efa9c62a329423a0cf4955a7a5926f2 Mon Sep 17 00:00:00 2001 From: Michael Montour Date: Fri, 28 Jul 2023 13:51:37 -0700 Subject: [PATCH 29/34] Debug message cleanup Changes to be committed: modified: op-chain-ops/genesis/layer_one.go modified: op-chain-ops/state/state.go --- op-chain-ops/genesis/layer_one.go | 8 ++++---- op-chain-ops/state/state.go | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/op-chain-ops/genesis/layer_one.go b/op-chain-ops/genesis/layer_one.go index affbd876ab02e..8fc8b467e7efb 100644 --- a/op-chain-ops/genesis/layer_one.go +++ b/op-chain-ops/genesis/layer_one.go @@ -224,13 +224,13 @@ func BuildL1DeveloperGenesis(config *DeployConfig) (*core.Genesis, error) { for _, account := range DevAccounts { _, err := nb.Transfer(opts, account, hexutil.MustDecodeBig("0x1000000000000000000")) if err != nil { - log.Error("MMDBG Transfer error", "err", err) + log.Error("DevAccount transfer failed", "err", err) return nil, err } } _, err = nb.Transfer(opts, bobaDev, bobaFund) if err != nil { - log.Error("MMDBG bobaDev Transfer error", "err", err) + log.Error("bobaDev Transfer failed", "err", err) return nil, err } @@ -451,7 +451,7 @@ func l1Deployer(backend *backends.SimulatedBackend, opts *bind.TransactOpts, dep backend, predeploys.DevL1CrossDomainMessengerAddr, ) - log.Info("MMDBG L1StandardBridge", "addr", addr) + log.Info("L1StandardBridge deployed to", "addr", addr) case "OptimismMintableERC20Factory": _, tx, _, err = bindings.DeployOptimismMintableERC20Factory( opts, @@ -474,7 +474,7 @@ func l1Deployer(backend *backends.SimulatedBackend, opts *bind.TransactOpts, dep opts, backend, ) - log.Info("MMDBG BobaL1", "addr", addr) + log.Info("BobaL1 token deployed to", "addr", addr) bobaAddr = addr case "WETH9": _, tx, _, err = bindings.DeployWETH9( diff --git a/op-chain-ops/state/state.go b/op-chain-ops/state/state.go index c60579d987515..9a1c24624f8c9 100644 --- a/op-chain-ops/state/state.go +++ b/op-chain-ops/state/state.go @@ -49,7 +49,6 @@ func EncodeStorage(entry solc.StorageLayoutEntry, value any, storageType solc.St // SetStorage will set the storage values in a db given a contract name, // address and the storage values func SetStorage(name string, address common.Address, values StorageValues, db vm.StateDB) error { - log.Warn("MMDBG SetStorage", "name", name, "address", address) if name == "BobaL2" { name = "OptimismMintableERC20" } From f8a0089281489ce07ea45e4e6e0b2824e966f1ea Mon Sep 17 00:00:00 2001 From: Michael Montour Date: Fri, 28 Jul 2023 14:00:40 -0700 Subject: [PATCH 30/34] Debug log cleanup Changes to be committed: modified: op-node/eth/account_proof.go modified: op-node/rollup/derive/attributes_queue.go modified: op-node/rollup/derive/batch_queue.go modified: op-node/rollup/derive/l1_traversal.go modified: op-node/sources/eth_client.go --- op-node/eth/account_proof.go | 3 +-- op-node/rollup/derive/attributes_queue.go | 1 - op-node/rollup/derive/batch_queue.go | 1 - op-node/rollup/derive/l1_traversal.go | 1 - op-node/sources/eth_client.go | 2 +- 5 files changed, 2 insertions(+), 6 deletions(-) diff --git a/op-node/eth/account_proof.go b/op-node/eth/account_proof.go index 29689e8f65a1c..2d1b2ac08350b 100644 --- a/op-node/eth/account_proof.go +++ b/op-node/eth/account_proof.go @@ -66,7 +66,6 @@ func (res *AccountResult) Verify(stateRoot common.Hash) error { if err != nil { return fmt.Errorf("failed to encode account from retrieved values: %w", err) } - log.Info("MMDBG account_proof Verify", "claimedValue", hexutil.Bytes(accountClaimedValue)) // create a db with all account trie nodes db := memorydb.New() @@ -81,7 +80,7 @@ func (res *AccountResult) Verify(stateRoot common.Hash) error { } path := crypto.Keccak256(res.Address[:]) accountProofValue, err := trie.VerifyProof(stateRoot, path, db) - log.Info("MMDBG account_proof Verify", "stateRoot", hexutil.Bytes(stateRoot.Bytes()), "err", err, "accountProofValue", accountProofValue) + log.Debug("account_proof Verify", "err", err, "stateRoot", hexutil.Bytes(stateRoot.Bytes()), "accountProofValue", accountProofValue, "claimedValue", hexutil.Bytes(accountClaimedValue)) if err != nil { return fmt.Errorf("failed to verify account value with key %s (path %x) in account trie %s: %w", res.Address, path, stateRoot, err) } diff --git a/op-node/rollup/derive/attributes_queue.go b/op-node/rollup/derive/attributes_queue.go index 8515d9f8e7a43..cf11b1a8d825c 100644 --- a/op-node/rollup/derive/attributes_queue.go +++ b/op-node/rollup/derive/attributes_queue.go @@ -49,7 +49,6 @@ func (aq *AttributesQueue) Origin() eth.L1BlockRef { } func (aq *AttributesQueue) NextAttributes(ctx context.Context, l2SafeHead eth.L2BlockRef) (*eth.PayloadAttributes, error) { - log.Debug("MMDBG attributes_queue NextAttributes") // Get a batch if we need it if aq.batch == nil { batch, err := aq.prev.NextBatch(ctx, l2SafeHead) diff --git a/op-node/rollup/derive/batch_queue.go b/op-node/rollup/derive/batch_queue.go index 0fe86a66f2c83..c5994b86a82ef 100644 --- a/op-node/rollup/derive/batch_queue.go +++ b/op-node/rollup/derive/batch_queue.go @@ -60,7 +60,6 @@ func (bq *BatchQueue) Origin() eth.L1BlockRef { } func (bq *BatchQueue) NextBatch(ctx context.Context, safeL2Head eth.L2BlockRef) (*BatchData, error) { - log.Debug("MMDBG batch_queue NextBatch") // Note: We use the origin that we will have to determine if it's behind. This is important // because it's the future origin that gets saved into the l1Blocks array. // We always update the origin of this stage if it is not the same so after the update code diff --git a/op-node/rollup/derive/l1_traversal.go b/op-node/rollup/derive/l1_traversal.go index 571f7f915fdf4..e7055fea12fcc 100644 --- a/op-node/rollup/derive/l1_traversal.go +++ b/op-node/rollup/derive/l1_traversal.go @@ -48,7 +48,6 @@ func (l1t *L1Traversal) Origin() eth.L1BlockRef { // NextL1Block returns the next block. It does not advance, but it can only be // called once before returning io.EOF func (l1t *L1Traversal) NextL1Block(_ context.Context) (eth.L1BlockRef, error) { - log.Debug("MMDBG l1_traversal Step") if !l1t.done { l1t.done = true return l1t.block, nil diff --git a/op-node/sources/eth_client.go b/op-node/sources/eth_client.go index 3016efca14e11..aef07fd20eea4 100644 --- a/op-node/sources/eth_client.go +++ b/op-node/sources/eth_client.go @@ -374,7 +374,7 @@ func (s *EthClient) FetchReceipts(ctx context.Context, blockHash common.Hash) (e func (s *EthClient) GetProof(ctx context.Context, address common.Address, storage []common.Hash, blockTag string) (*eth.AccountResult, error) { var getProofResponse *eth.AccountResult err := s.client.CallContext(ctx, &getProofResponse, "eth_getProof", address, storage, blockTag) - s.log.Info("MMDBG eth_client GetProof", "err", err, "address", address, "blockTag", blockTag, "Response", getProofResponse) + s.log.Debug("eth_client GetProof", "err", err, "address", address, "blockTag", blockTag, "Response", getProofResponse) if err != nil { return nil, err } From 7b112c4fee782634edbfdfd229de1993c12b195e Mon Sep 17 00:00:00 2001 From: Michael Montour Date: Fri, 28 Jul 2023 14:09:21 -0700 Subject: [PATCH 31/34] Remove debug msg, sync with upstream file version Changes to be committed: modified: op-node/rollup/derive/pipeline.go modified: op-node/rollup/driver/state.go --- op-node/rollup/derive/pipeline.go | 3 --- op-node/rollup/driver/state.go | 7 +------ 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/op-node/rollup/derive/pipeline.go b/op-node/rollup/derive/pipeline.go index 9915d27330b85..779552477f14a 100644 --- a/op-node/rollup/derive/pipeline.go +++ b/op-node/rollup/derive/pipeline.go @@ -183,9 +183,6 @@ func (dp *DerivationPipeline) Step(ctx context.Context) error { defer dp.metrics.RecordL1Ref("l1_derived", dp.Origin()) // if any stages need to be reset, do that first. - //log.Debug("MMDBG pipeline.go Step", "dp.resetting", dp.resetting, "stages", dp.stages) - log.Debug("MMDBG pipeline.go Step", "dp", dp) - if dp.resetting < len(dp.stages) { if err := dp.stages[dp.resetting].Reset(ctx, dp.eng.Origin(), dp.eng.SystemConfig()); err == io.EOF { dp.log.Debug("reset of stage completed", "stage", dp.resetting, "origin", dp.eng.Origin()) diff --git a/op-node/rollup/driver/state.go b/op-node/rollup/driver/state.go index 02a743a670555..89883e5a746ae 100644 --- a/op-node/rollup/driver/state.go +++ b/op-node/rollup/driver/state.go @@ -118,11 +118,7 @@ func (s *Driver) Start() error { } func (s *Driver) Close() error { - select { - case <-s.done: - default: - close(s.done) - } + s.done <- struct{}{} s.wg.Wait() return nil } @@ -316,7 +312,6 @@ func (s *Driver) eventLoop() { s.metrics.SetDerivationIdle(false) s.log.Debug("Derivation process step", "onto_origin", s.derivation.Origin(), "attempts", stepAttempts) err := s.derivation.Step(context.Background()) - s.log.Debug("MMDBG derivation.Step", "err", err) stepAttempts += 1 // count as attempt by default. We reset to 0 if we are making healthy progress. if err == io.EOF { s.log.Debug("Derivation process went idle", "progress", s.derivation.Origin()) From d1d1c1edfd3b08dd6a3ab913c440e8b8c7598136 Mon Sep 17 00:00:00 2001 From: Michael Montour Date: Fri, 28 Jul 2023 14:12:57 -0700 Subject: [PATCH 32/34] Log cleanup Changes to be committed: modified: op-node/node/api.go --- op-node/node/api.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/op-node/node/api.go b/op-node/node/api.go index 5400ce38ca837..b2663ac7fa514 100644 --- a/op-node/node/api.go +++ b/op-node/node/api.go @@ -108,7 +108,7 @@ func (n *nodeAPI) OutputAtBlock(ctx context.Context, number hexutil.Uint64) (*et } proof, err := n.client.GetProof(ctx, predeploys.L2ToL1MessagePasserAddr, []common.Hash{}, ref.Hash.String()) - n.log.Info("MMDBG GetProof for", "block", number, "err", err, "proof", proof) + n.log.Debug("GetProof for", "block", number, "err", err, "proof", proof) if err != nil { return nil, fmt.Errorf("failed to get contract proof at block %s: %w", ref, err) } @@ -128,7 +128,7 @@ func (n *nodeAPI) OutputAtBlock(ctx context.Context, number hexutil.Uint64) (*et return nil, err } - log.Info("MMDBG ComputeL2OutputRoot", "root", l2OutputRoot.String(), "ver", l2OutputRootVersion, "hash", head.Hash(), "root", head.Root(), "sh", proof.StorageHash) + log.Debug("Computed L2OutputRoot", "l2OutputRoot", l2OutputRoot.String(), "ver", l2OutputRootVersion, "head.Hash", head.Hash(), "head.Root", head.Root(), "storageHash", proof.StorageHash) return ð.OutputResponse{ Version: l2OutputRootVersion, OutputRoot: l2OutputRoot, From ae174af7abbfb6a20f164afe4264e4e3bc0d6c38 Mon Sep 17 00:00:00 2001 From: Michael Montour Date: Wed, 9 Aug 2023 15:04:18 -0700 Subject: [PATCH 33/34] Log cleanup. Changes to be committed: modified: boba-chain-ops/immutables/immutables.go --- boba-chain-ops/immutables/immutables.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/boba-chain-ops/immutables/immutables.go b/boba-chain-ops/immutables/immutables.go index 50c10a251b1b4..fa42d2a5b339b 100644 --- a/boba-chain-ops/immutables/immutables.go +++ b/boba-chain-ops/immutables/immutables.go @@ -260,7 +260,7 @@ func l2Deployer(backend *backends.SimulatedBackend, opts *bind.TransactOpts, dep _, tx, _, err = bindings.DeployLegacyERC20ETH(opts, backend) case "BobaTuringCredit": addr, tx, _, err = bindings.DeployBobaTuringCredit(opts, backend, big.NewInt(10)) - log.Info("MMDBG BobaTuringCredit", "addr", addr) + log.Info("BobaTuringCredit Deployment", "err", err, "addr", addr) case "BobaL2": l2Bridge, ok := deployment.Args[0].(common.Address) if !ok { @@ -291,10 +291,10 @@ func l2Deployer(backend *backends.SimulatedBackend, opts *bind.TransactOpts, dep _symbol, uint8(_decimals), ) - log.Info("MMDBG BobaL2 Deployment", "err", err, "addr", addr) + log.Info("BobaL2 Deployment", "err", err, "addr", addr) case "BobaGasPriceOracle": addr, tx, _, err = bindings.DeployBobaGasPriceOracle(opts, backend) - log.Info("MMDBG BobaGasPriceOracle", "addr", addr) + log.Info("BobaGasPriceOracle Deployment", "err", err, "addr", addr) default: return tx, fmt.Errorf("unknown contract: %s", deployment.Name) } From 6e93d74e0c7bcc31b645ba28d000bbe49341bd98 Mon Sep 17 00:00:00 2001 From: Michael Montour Date: Thu, 17 Aug 2023 13:59:16 -0700 Subject: [PATCH 34/34] Revert a change which isn't related to log messages. Changes to be committed: modified: op-node/rollup/driver/state.go --- op-node/rollup/driver/state.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/op-node/rollup/driver/state.go b/op-node/rollup/driver/state.go index 89883e5a746ae..ae4ee3bfd65e1 100644 --- a/op-node/rollup/driver/state.go +++ b/op-node/rollup/driver/state.go @@ -118,7 +118,11 @@ func (s *Driver) Start() error { } func (s *Driver) Close() error { - s.done <- struct{}{} + select { + case <-s.done: + default: + close(s.done) + } s.wg.Wait() return nil }