diff --git a/.dockerignore b/.dockerignore index b4795279..f0947608 100644 --- a/.dockerignore +++ b/.dockerignore @@ -8,11 +8,16 @@ **/docs **/*.md +monitor/**/*.env* +oracle/**/*.env* +!**/.env.example + contracts/test contracts/build oracle/test monitor/test monitor/responses +monitor/cache/* commons/test oracle/**/*.png oracle/**/*.jpg diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8927c620..79671ef5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -19,9 +19,11 @@ jobs: - uses: actions/checkout@v2 with: submodules: true - - run: git submodule status > submodule.status - - id: get_cache_key - run: echo "::set-output name=cache_key::cache-repo-${{ hashFiles('yarn.lock', 'package.json', 'submodule.status') }}" + - name: Set cache key + id: get_cache_key + run: | + git submodule status > submodule.status + echo "::set-output name=cache_key::cache-repo-${{ hashFiles('yarn.lock', 'package.json', 'submodule.status') }}" - uses: actions/cache@v2 id: cache-repo with: @@ -29,7 +31,8 @@ jobs: **/node_modules contracts/build key: ${{ steps.get_cache_key.outputs.cache_key }} - - if: ${{ !steps.cache-repo.outputs.cache-hit }} + - name: Install dependencies and compile contracts + if: ${{ !steps.cache-repo.outputs.cache-hit }} run: | yarn install --frozen-lockfile yarn run install:deploy @@ -56,7 +59,8 @@ jobs: **/node_modules contracts/build key: ${{ needs.initialize.outputs.cache_key }} - - run: ${{ steps.cache-repo.outputs.cache-hit }} && yarn run ${{ matrix.task }} + - name: yarn run ${{ matrix.task }} + run: ${{ steps.cache-repo.outputs.cache-hit }} && yarn run ${{ matrix.task }} ui-coverage: runs-on: ubuntu-latest needs: @@ -76,7 +80,8 @@ jobs: **/node_modules contracts/build key: ${{ needs.initialize.outputs.cache_key }} - - run: ${{ steps.cache-repo.outputs.cache-hit }} && yarn workspace ui run coverage + - name: yarn workspace ui run coverage + run: ${{ steps.cache-repo.outputs.cache-hit }} && yarn workspace ui run coverage - uses: coverallsapp/github-action@master with: github-token: ${{ github.token }} @@ -87,14 +92,16 @@ jobs: - uses: actions/checkout@v2 with: submodules: true - - run: | + - name: Evaluate e2e docker images tags + run: | git submodule status > submodule.status - echo "::set-env name=E2E_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'Dockerfile.e2e', 'commons', 'oracle-e2e', 'monitor-e2e') }}" - echo "::set-env name=ORACLE_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'oracle') }}" - echo "::set-env name=MONITOR_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'monitor') }}" - echo "::set-env name=UI_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'ui') }}" - echo "::set-env name=ALM_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'alm') }}" - - run: | + echo "E2E_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'Dockerfile.e2e', 'commons', 'oracle-e2e', 'monitor-e2e') }}" >> $GITHUB_ENV + echo "ORACLE_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'oracle') }}" >> $GITHUB_ENV + echo "MONITOR_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'monitor') }}" >> $GITHUB_ENV + echo "UI_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'ui') }}" >> $GITHUB_ENV + echo "ALM_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'alm') }}" >> $GITHUB_ENV + - name: Rebuild and push updated images + run: | function check_if_image_exists() { curl -fsSlL -H 'Authorization: bearer ${{ github.token }}' "https://${DOCKER_REGISTRY}/v2/${DOCKER_REPO}/tokenbridge-e2e-$1/manifests/$2" > /dev/null } @@ -119,8 +126,10 @@ jobs: - uses: actions/checkout@v2 with: submodules: true - - run: echo "::set-env name=MOLECULE_RUNNER_TAG::${{ hashFiles('./deployment-e2e/Dockerfile') }}" - - run: | + - name: Evaluate e2e molecule runner tag + run: echo "MOLECULE_RUNNER_TAG=${{ hashFiles('./deployment-e2e/Dockerfile') }}" >> $GITHUB_ENV + - name: Rebuild and push molecule runner e2e image + run: | function check_if_image_exists() { curl -fsSlL -H 'Authorization: bearer ${{ github.token }}' "https://${DOCKER_REGISTRY}/v2/${DOCKER_REPO}/tokenbridge-e2e-$1/manifests/$2" > /dev/null } @@ -150,14 +159,15 @@ jobs: - uses: actions/checkout@v2 with: submodules: true - - run: | + - name: Evaluate e2e docker images tags + run: | git submodule status > submodule.status - echo "::set-env name=E2E_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'Dockerfile.e2e', 'commons', 'oracle-e2e', 'monitor-e2e') }}" - echo "::set-env name=ORACLE_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'oracle') }}" - echo "::set-env name=MONITOR_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'monitor') }}" - echo "::set-env name=UI_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'ui') }}" - echo "::set-env name=ALM_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'alm') }}" - - if: ${{ matrix.use-cache }} + echo "E2E_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'Dockerfile.e2e', 'commons', 'oracle-e2e', 'monitor-e2e') }}" >> $GITHUB_ENV + echo "ORACLE_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'oracle') }}" >> $GITHUB_ENV + echo "MONITOR_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'monitor') }}" >> $GITHUB_ENV + echo "UI_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'ui') }}" >> $GITHUB_ENV + echo "ALM_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'alm') }}" >> $GITHUB_ENV + - if: ${{ matrix.use-cache }} uses: actions/cache@v2 id: cache-repo with: @@ -165,8 +175,10 @@ jobs: **/node_modules contracts/build key: ${{ needs.initialize.outputs.cache_key }} - - run: docker login ${DOCKER_REGISTRY} -u ${{ github.actor }} -p ${{ github.token }} - - run: ${{ !matrix.use-cache || steps.cache-repo.outputs.cache-hit }} && yarn run ${{ matrix.task }} + - name: Login to docker registry + run: docker login ${DOCKER_REGISTRY} -u ${{ github.actor }} -p ${{ github.token }} + - name: yarn run ${{ matrix.task }} + run: ${{ !matrix.use-cache || steps.cache-repo.outputs.cache-hit }} && yarn run ${{ matrix.task }} deployment: runs-on: ubuntu-latest needs: @@ -179,8 +191,10 @@ jobs: - uses: actions/checkout@v2 with: submodules: true - - run: echo "::set-env name=MOLECULE_RUNNER_TAG::${{ hashFiles('./deployment-e2e/Dockerfile') }}" - - run: docker login ${DOCKER_REGISTRY} -u ${{ github.actor }} -p ${{ github.token }} + - name: Evaluate e2e molecule runner tag + run: echo "MOLECULE_RUNNER_TAG=${{ hashFiles('./deployment-e2e/Dockerfile') }}" >> $GITHUB_ENV + - name: Login to docker registry + run: docker login ${DOCKER_REGISTRY} -u ${{ github.actor }} -p ${{ github.token }} - run: deployment-e2e/molecule.sh ${{ matrix.task }} ultimate: runs-on: ubuntu-latest @@ -205,14 +219,15 @@ jobs: - uses: actions/checkout@v2 with: submodules: true - - run: | + - name: Evaluate e2e docker images tags + run: | git submodule status > submodule.status - echo "::set-env name=E2E_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'Dockerfile.e2e', 'commons', 'oracle-e2e', 'monitor-e2e') }}" - echo "::set-env name=ORACLE_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'oracle') }}" - echo "::set-env name=MONITOR_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'monitor') }}" - echo "::set-env name=UI_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'ui') }}" - echo "::set-env name=ALM_TAG::${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'alm') }}" - echo "::set-env name=MOLECULE_RUNNER_TAG::${{ hashFiles('./deployment-e2e/Dockerfile') }}" + echo "E2E_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'Dockerfile.e2e', 'commons', 'oracle-e2e', 'monitor-e2e') }}" >> $GITHUB_ENV + echo "ORACLE_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'oracle') }}" >> $GITHUB_ENV + echo "MONITOR_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'monitor') }}" >> $GITHUB_ENV + echo "UI_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'ui') }}" >> $GITHUB_ENV + echo "ALM_TAG=${{ hashFiles('yarn.lock', 'package.json', 'submodule.status', 'commons', 'alm') }}" >> $GITHUB_ENV + echo "MOLECULE_RUNNER_TAG=${{ hashFiles('./deployment-e2e/Dockerfile') }}" >> $GITHUB_ENV - uses: actions/cache@v2 id: cache-repo with: @@ -220,12 +235,19 @@ jobs: **/node_modules contracts/build key: ${{ needs.initialize.outputs.cache_key }} - - run: docker login ${DOCKER_REGISTRY} -u ${{ github.actor }} -p ${{ github.token }} - - run: ${{ steps.cache-repo.outputs.cache-hit }} && e2e-commons/up.sh deploy blocks - - run: docker-compose -f ./e2e-commons/docker-compose.yml pull oracle - - run: deployment-e2e/molecule.sh ultimate-${{ matrix.task }} - - run: sudo chown -R $USER:docker /var/run/docker.sock - - if: ${{ matrix.ui-e2e-grep }} + - name: Login to docker registry + run: docker login ${DOCKER_REGISTRY} -u ${{ github.actor }} -p ${{ github.token }} + - name: Deploy contracts + run: ${{ steps.cache-repo.outputs.cache-hit }} && e2e-commons/up.sh deploy blocks + - name: Pull e2e oracle image + run: docker-compose -f ./e2e-commons/docker-compose.yml pull oracle + - name: Deploy oracle and ui + run: deployment-e2e/molecule.sh ultimate-${{ matrix.task }} + - name: Reset docker socket permissions + run: sudo chown -R $USER:docker /var/run/docker.sock + - name: Run ui e2e tests + if: ${{ matrix.ui-e2e-grep }} run: cd ui-e2e && xvfb-run yarn mocha -g "${{ matrix.ui-e2e-grep }}" -b ./test.js - - if: ${{ !matrix.ui-e2e-grep }} + - name: Run oracle e2e tests + if: ${{ !matrix.ui-e2e-grep }} run: docker-compose -f ./e2e-commons/docker-compose.yml run e2e yarn workspace oracle-e2e run ${{ matrix.task }} diff --git a/.gitignore b/.gitignore index 94b2a7df..7cea0539 100644 --- a/.gitignore +++ b/.gitignore @@ -10,11 +10,8 @@ dist # misc .DS_Store -.env -.env.local -.env.development.local -.env.test.local -.env.production.local +*.env* +!.env.example .idea .nyc_output logs/ @@ -49,5 +46,6 @@ __pycache__ #monitor monitor/responses/* -monitor/configs/*.env +monitor/cache/* +!monitor/cache/.gitkeep !monitor/.gitkeep diff --git a/CONFIGURATION.md b/CONFIGURATION.md index 87e48915..b93db0d1 100644 --- a/CONFIGURATION.md +++ b/CONFIGURATION.md @@ -41,6 +41,7 @@ ORACLE_HOME_TO_FOREIGN_ALLOWANCE_LIST | Filename with a list of addresses, separ ORACLE_HOME_TO_FOREIGN_BLOCK_LIST | Filename with a list of addresses, separated by newlines. If set, determines the blocked set of accounts whose requests will not be automatically processed by the CollectedSignatures watcher. Has a lower priority than the `ORACLE_HOME_TO_FOREIGN_ALLOWANCE_LIST` | string ORACLE_HOME_TO_FOREIGN_CHECK_SENDER | If set to `true`, instructs the oracle to do an extra check for transaction origin in the block/allowance list. `false` by default. | `true` / `false` ORACLE_ALWAYS_RELAY_SIGNATURES | If set to `true`, the oracle will always relay signatures even if it was not the last who finilized the signatures collecting process. The default is `false`. | `true` / `false` +ORACLE_RPC_REQUEST_TIMEOUT | Timeout in milliseconds for a single RPC request. Default value is `ORACLE_*_RPC_POLLING_INTERVAL * 2`. | integer ## UI configuration @@ -78,3 +79,6 @@ MONITOR_TX_NUMBER_THRESHOLD | If estimated number of transaction is equal to or MONITOR_PORT | The port for the Monitor. | integer MONITOR_BRIDGE_NAME | The name to be used in the url path for the bridge | string MONITOR_CACHE_EVENTS | If set to true, monitor will cache obtained events for other workers runs | `true` / `false` +MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST | File with a list of addresses, separated by newlines. If set, determines the privileged set of accounts whose requests should be automatically processed by the CollectedSignatures watcher. | string +MONITOR_HOME_TO_FOREIGN_BLOCK_LIST | File with a list of addresses, separated by newlines. If set, determines the set of accounts whose requests should be marked as unclaimed. Has a lower priority than the `MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST`. | string +MONITOR_HOME_TO_FOREIGN_CHECK_SENDER | If set to `true`, instructs the oracle to do an extra check for transaction origin in the block/allowance list. `false` by default. | `true` / `false` diff --git a/audit/quantstamp/POA-Network-TokenBridge-contracts-5.4.1-security-assessment-report.pdf b/audit/quantstamp/POA-Network-TokenBridge-contracts-5.4.1-security-assessment-report.pdf new file mode 100644 index 00000000..e31121f5 Binary files /dev/null and b/audit/quantstamp/POA-Network-TokenBridge-contracts-5.4.1-security-assessment-report.pdf differ diff --git a/commons/.eslintrc b/commons/.eslintrc index 0194f8e8..78c69fae 100644 --- a/commons/.eslintrc +++ b/commons/.eslintrc @@ -5,7 +5,8 @@ ], "rules": { "no-unused-expressions": "off", - "import/no-extraneous-dependencies": "off" + "import/no-extraneous-dependencies": "off", + "no-bitwise": "off" }, "env": { "mocha": true diff --git a/commons/message.js b/commons/message.js index efa5de30..1afb4117 100644 --- a/commons/message.js +++ b/commons/message.js @@ -6,17 +6,30 @@ function addTxHashToData({ encodedData, transactionHash }) { return encodedData.slice(0, 2) + strip0x(transactionHash) + encodedData.slice(2) } +/** + * Decodes the datatype byte from the AMB message. + * First (the most significant bit) denotes if the message should be forwarded to the manual lane. + * @param dataType: number datatype of the received AMB message. + * @return {{manualLane: boolean}} + */ +const decodeAMBDataType = dataType => ({ + manualLane: (dataType & 128) === 128 +}) + function parseAMBMessage(message) { message = strip0x(message) const messageId = `0x${message.slice(0, 64)}` const sender = `0x${message.slice(64, 104)}` const executor = `0x${message.slice(104, 144)}` + const dataType = parseInt(message.slice(156, 158), 16) return { sender, executor, - messageId + messageId, + dataType, + decodedDataType: decodeAMBDataType(dataType) } } diff --git a/commons/utils.js b/commons/utils.js index 06c61bc5..494975ae 100644 --- a/commons/utils.js +++ b/commons/utils.js @@ -164,7 +164,7 @@ const getPastEvents = async ( } catch (e) { if (e.message.includes('query returned more than') && toBlock !== 'latest') { const middle = toBN(fromBlock) - .add(toBlock) + .add(toBN(toBlock)) .divRound(toBN(2)) const middlePlusOne = middle.add(toBN(1)) diff --git a/contracts b/contracts index dd461352..835742df 160000 --- a/contracts +++ b/contracts @@ -1 +1 @@ -Subproject commit dd46135248dbb4684752735aab3cf64db170a405 +Subproject commit 835742dfd8f1c869d4e7b61582155d250d6cf094 diff --git a/e2e-commons/access-lists/block_list.txt b/e2e-commons/access-lists/block_list.txt index f130606c..8edcbf93 100644 --- a/e2e-commons/access-lists/block_list.txt +++ b/e2e-commons/access-lists/block_list.txt @@ -1 +1,2 @@ -0xc9e38bfdB9c635F0796ad83CC8705dc379F41c04 \ No newline at end of file +0xc9e38bfdB9c635F0796ad83CC8705dc379F41c04 +0x612E8bd50A7b1F009F43f2b8679E9B8eD91eb5CE diff --git a/e2e-commons/components-envs/oracle-amb.env b/e2e-commons/components-envs/oracle-amb.env index 4dba7b41..5c529691 100644 --- a/e2e-commons/components-envs/oracle-amb.env +++ b/e2e-commons/components-envs/oracle-amb.env @@ -23,3 +23,4 @@ ORACLE_FOREIGN_RPC_POLLING_INTERVAL=500 ORACLE_ALLOW_HTTP_FOR_RPC=yes ORACLE_HOME_START_BLOCK=1 ORACLE_FOREIGN_START_BLOCK=1 +ORACLE_HOME_TO_FOREIGN_BLOCK_LIST=/mono/oracle/access-lists/block_list.txt diff --git a/e2e-commons/constants.json b/e2e-commons/constants.json index 9aa0609b..b19d81fd 100644 --- a/e2e-commons/constants.json +++ b/e2e-commons/constants.json @@ -63,6 +63,7 @@ "foreign": "0x0AEe1FCD12dDFab6265F7f8956e6E012A9Fe4Aa0", "homeBox": "0x6C4EaAb8756d53Bf599FFe2347FAFF1123D6C8A1", "foreignBox": "0x6C4EaAb8756d53Bf599FFe2347FAFF1123D6C8A1", + "blockedHomeBox": "0x612E8bd50A7b1F009F43f2b8679E9B8eD91eb5CE", "monitor": "http://monitor-amb:3013/bridge" }, "ambStakeErcToErc": { diff --git a/e2e-commons/docker-compose.yml b/e2e-commons/docker-compose.yml index 4fbd84c9..d6863e2a 100644 --- a/e2e-commons/docker-compose.yml +++ b/e2e-commons/docker-compose.yml @@ -61,6 +61,9 @@ services: environment: - NODE_ENV=production command: "true" + volumes: + - '../e2e-commons/access-lists/block_list.txt:/mono/oracle/access-lists/block_list.txt' + - '../e2e-commons/access-lists/allowance_list.txt:/mono/oracle/access-lists/allowance_list.txt' networks: - ultimate ui: diff --git a/e2e-commons/scripts/deploy.sh b/e2e-commons/scripts/deploy.sh index 12466562..109861d6 100755 --- a/e2e-commons/scripts/deploy.sh +++ b/e2e-commons/scripts/deploy.sh @@ -53,3 +53,8 @@ node deploy.js cd - > /dev/null node setupStakeTokens.js cd - > /dev/null + +echo -e "\n\n############ Deploying one more test contract for amb ############\n" +cd "$DEPLOY_PATH" +node src/utils/deployTestBox.js +cd - > /dev/null diff --git a/e2e-commons/up.sh b/e2e-commons/up.sh index f0a367c0..0bdf21a2 100755 --- a/e2e-commons/up.sh +++ b/e2e-commons/up.sh @@ -17,21 +17,29 @@ docker-compose up -d parity1 parity2 e2e startValidator () { docker-compose $1 run -d --name $4 redis docker-compose $1 run -d --name $5 rabbit - docker-compose $1 run $2 $3 -d oracle yarn watcher:signature-request - docker-compose $1 run $2 $3 -d oracle yarn watcher:collected-signatures - docker-compose $1 run $2 $3 -d oracle yarn watcher:affirmation-request - docker-compose $1 run $2 $3 -d oracle-erc20 yarn watcher:signature-request - docker-compose $1 run $2 $3 -d oracle-erc20 yarn watcher:collected-signatures - docker-compose $1 run $2 $3 -d oracle-erc20 yarn watcher:affirmation-request - docker-compose $1 run $2 $3 -d oracle-erc20 yarn watcher:transfer - docker-compose $1 run $2 $3 -d oracle-erc20-native yarn watcher:signature-request - docker-compose $1 run $2 $3 -d oracle-erc20-native yarn watcher:collected-signatures - docker-compose $1 run $2 $3 -d oracle-erc20-native yarn watcher:affirmation-request - docker-compose $1 run $2 $3 -d oracle-erc20-native yarn watcher:transfer - docker-compose $1 run $2 $3 -d oracle-erc20-native yarn worker:convert-to-chai - docker-compose $1 run $2 $3 -d oracle-amb yarn watcher:signature-request - docker-compose $1 run $2 $3 -d oracle-amb yarn watcher:collected-signatures - docker-compose $1 run $2 $3 -d oracle-amb yarn watcher:affirmation-request + if [[ -z "$MODE" || "$MODE" == native-to-erc ]]; then + docker-compose $1 run $2 $3 -d oracle yarn watcher:signature-request + docker-compose $1 run $2 $3 -d oracle yarn watcher:collected-signatures + docker-compose $1 run $2 $3 -d oracle yarn watcher:affirmation-request + fi + if [[ -z "$MODE" || "$MODE" == erc-to-erc ]]; then + docker-compose $1 run $2 $3 -d oracle-erc20 yarn watcher:signature-request + docker-compose $1 run $2 $3 -d oracle-erc20 yarn watcher:collected-signatures + docker-compose $1 run $2 $3 -d oracle-erc20 yarn watcher:affirmation-request + docker-compose $1 run $2 $3 -d oracle-erc20 yarn watcher:transfer + fi + if [[ -z "$MODE" || "$MODE" == erc-to-native ]]; then + docker-compose $1 run $2 $3 -d oracle-erc20-native yarn watcher:signature-request + docker-compose $1 run $2 $3 -d oracle-erc20-native yarn watcher:collected-signatures + docker-compose $1 run $2 $3 -d oracle-erc20-native yarn watcher:affirmation-request + docker-compose $1 run $2 $3 -d oracle-erc20-native yarn watcher:transfer + docker-compose $1 run $2 $3 -d oracle-erc20-native yarn worker:convert-to-chai + fi + if [[ -z "$MODE" || "$MODE" == amb ]]; then + docker-compose $1 run $2 $3 -d oracle-amb yarn watcher:signature-request + docker-compose $1 run $2 $3 -d oracle-amb yarn watcher:collected-signatures + docker-compose $1 run $2 $3 -d oracle-amb yarn watcher:affirmation-request + fi docker-compose $1 run $2 $3 -d oracle-erc20-native yarn sender:home docker-compose $1 run $2 $3 -d oracle-erc20-native yarn sender:foreign } @@ -48,25 +56,7 @@ startAMBValidator () { while [ "$1" != "" ]; do if [ "$1" == "oracle" ]; then - docker-compose up -d redis rabbit - - docker-compose run -d oracle yarn watcher:signature-request - docker-compose run -d oracle yarn watcher:collected-signatures - docker-compose run -d oracle yarn watcher:affirmation-request - docker-compose run -d oracle-erc20 yarn watcher:signature-request - docker-compose run -d oracle-erc20 yarn watcher:collected-signatures - docker-compose run -d oracle-erc20 yarn watcher:affirmation-request - docker-compose run -d oracle-erc20 yarn watcher:transfer - docker-compose run -d oracle-erc20-native yarn watcher:signature-request - docker-compose run -d oracle-erc20-native yarn watcher:collected-signatures - docker-compose run -d oracle-erc20-native yarn watcher:affirmation-request - docker-compose run -d oracle-erc20-native yarn watcher:transfer - docker-compose run -d oracle-erc20-native yarn worker:convert-to-chai - docker-compose run -d oracle-amb yarn watcher:signature-request - docker-compose run -d oracle-amb yarn watcher:collected-signatures - docker-compose run -d oracle-amb yarn watcher:affirmation-request - docker-compose run -d oracle yarn sender:home - docker-compose run -d oracle yarn sender:foreign + startValidator "" "" "" "redis" "rabbit" fi if [ "$1" == "oracle-validator-2" ]; then @@ -110,7 +100,23 @@ while [ "$1" != "" ]; do fi if [ "$1" == "monitor" ]; then - docker-compose up -d monitor monitor-erc20 monitor-erc20-native monitor-amb + case "$MODE" in + amb) + docker-compose up -d monitor-amb + ;; + native-to-erc) + docker-compose up -d monitor + ;; + erc-to-erc) + docker-compose up -d monitor-erc20 + ;; + erc-to-native) + docker-compose up -d monitor-erc20-native + ;; + *) + docker-compose up -d monitor monitor-erc20 monitor-erc20-native monitor-amb + ;; + esac fi if [ "$1" == "alm-e2e" ]; then diff --git a/monitor-e2e/periodically-check-all.sh b/monitor-e2e/periodically-check-all.sh index dd5e0c98..1b01de9a 100755 --- a/monitor-e2e/periodically-check-all.sh +++ b/monitor-e2e/periodically-check-all.sh @@ -1,7 +1,15 @@ while true; do - sleep 5 - docker-compose -f ../e2e-commons/docker-compose.yml exec -d monitor yarn check-all - docker-compose -f ../e2e-commons/docker-compose.yml exec -d monitor-erc20 yarn check-all - docker-compose -f ../e2e-commons/docker-compose.yml exec -d monitor-erc20-native yarn check-all - docker-compose -f ../e2e-commons/docker-compose.yml exec -d monitor-amb yarn check-all + docker-compose -f ../e2e-commons/docker-compose.yml exec -T monitor yarn check-all + pid1=$! + docker-compose -f ../e2e-commons/docker-compose.yml exec -T monitor-erc20 yarn check-all + pid2=$! + docker-compose -f ../e2e-commons/docker-compose.yml exec -T monitor-erc20-native yarn check-all + pid3=$! + docker-compose -f ../e2e-commons/docker-compose.yml exec -T monitor-amb yarn check-all + pid4=$! + + wait $pid1 + wait $pid2 + wait $pid3 + wait $pid4 done diff --git a/monitor-e2e/run-tests.sh b/monitor-e2e/run-tests.sh index d54a504f..136a4c2b 100755 --- a/monitor-e2e/run-tests.sh +++ b/monitor-e2e/run-tests.sh @@ -1,12 +1,28 @@ cd $(dirname $0) -../e2e-commons/up.sh deploy blocks monitor +mode="$1" +case "$mode" in + amb) + script=./test/amb.js + ;; + native-to-erc) + script=./test/nativeToErc.js + ;; + erc-to-erc) + script=./test/ercToErc.js + ;; + erc-to-native) + script=./test/ercToNative.js + ;; +esac -./wait-for-monitor.sh +MODE="$mode" ../e2e-commons/up.sh deploy blocks monitor + +MODE="$mode" ./wait-for-monitor.sh nohup ./periodically-check-all.sh < /dev/null > /dev/null 2>&1 & checkPID=$! -docker-compose -f ../e2e-commons/docker-compose.yml run e2e yarn workspace monitor-e2e run start +docker-compose -f ../e2e-commons/docker-compose.yml run e2e yarn workspace monitor-e2e run start $script rc=$? ../e2e-commons/down.sh diff --git a/monitor-e2e/test/amb.js b/monitor-e2e/test/amb.js index 59b22fe5..5ed13641 100644 --- a/monitor-e2e/test/amb.js +++ b/monitor-e2e/test/amb.js @@ -25,6 +25,7 @@ describe('AMB', () => { describe('general', async () => { it('should contain fromHomeToForeignDiff', () => assert(data.fromHomeToForeignDiff === 0)) + it('should contain fromHomeToForeignPBUDiff', () => assert(data.fromHomeToForeignPBUDiff === 0)) it('should contain fromForeignToHomeDiff', () => assert(data.fromForeignToHomeDiff === 0)) it('should contain lastChecked', () => assert(data.lastChecked >= 0)) it('should contain timeDiff', () => assert(data.timeDiff >= 0)) @@ -114,7 +115,16 @@ describe('AMB', () => { await waitUntil(async () => { ;({ data } = await axios.get(`${baseUrl}`)) - return data.fromHomeToForeignDiff !== 0 + return data.fromHomeToForeignDiff === 1 && data.fromHomeToForeignPBUDiff === 0 + }) + }) + it('should change fromHomeToForeignPBUDiff', async () => { + // send message + await sendAMBMessage(homeRPC.URL, user, amb.homeBox, amb.home, amb.foreignBox, true) + + await waitUntil(async () => { + ;({ data } = await axios.get(`${baseUrl}`)) + return data.fromHomeToForeignDiff === 1 && data.fromHomeToForeignPBUDiff === 1 }) }) it('should change validatorsMatch', async () => { diff --git a/monitor-e2e/test/ercToNative.js b/monitor-e2e/test/ercToNative.js index 7810ed39..f8770453 100644 --- a/monitor-e2e/test/ercToNative.js +++ b/monitor-e2e/test/ercToNative.js @@ -54,16 +54,16 @@ describe('ERC TO NATIVE with changing state of contracts', () => { }) it('should consider chai token balance', async function() { - this.timeout(60000) + this.timeout(120000) await initializeChaiToken(foreignRPC.URL, ercToNativeBridge.foreign) await sendTokens(foreignRPC.URL, user, ercToNativeBridge.foreignToken, ercToNativeBridge.foreign) await waitUntil(async () => { ;({ data } = await axios.get(`${baseUrl}`)) - const { erc20Balance, investedErc20Balance, accumulatedInterest } = data.foreign if (!data.foreign) { return false } + const { erc20Balance, investedErc20Balance, accumulatedInterest } = data.foreign return ( data.balanceDiff === 0.02 && erc20Balance === '0.02' && @@ -77,10 +77,10 @@ describe('ERC TO NATIVE with changing state of contracts', () => { await waitUntil(async () => { ;({ data } = await axios.get(`${baseUrl}`)) - const { erc20Balance, investedErc20Balance, accumulatedInterest } = data.foreign if (!data.foreign) { return false } + const { erc20Balance, investedErc20Balance, accumulatedInterest } = data.foreign return ( data.balanceDiff === 0.02 && erc20Balance === '0.01' && @@ -94,10 +94,10 @@ describe('ERC TO NATIVE with changing state of contracts', () => { await waitUntil(async () => { ;({ data } = await axios.get(`${baseUrl}`)) - const { erc20Balance, investedErc20Balance, accumulatedInterest } = data.foreign if (!data.foreign) { return false } + const { erc20Balance, investedErc20Balance, accumulatedInterest } = data.foreign return ( data.balanceDiff === 0.02 && erc20Balance === '0.005' && diff --git a/monitor-e2e/utils.js b/monitor-e2e/utils.js index c7a9428a..52efbb53 100644 --- a/monitor-e2e/utils.js +++ b/monitor-e2e/utils.js @@ -44,12 +44,16 @@ const sendTokens = async (rpcUrl, account, tokenAddress, recipientAddress) => { }) } -const sendAMBMessage = async (rpcUrl, account, boxAddress, bridgeAddress, boxOtherSideAddress) => { +const sendAMBMessage = async (rpcUrl, account, boxAddress, bridgeAddress, boxOtherSideAddress, manualLane = false) => { const web3 = new Web3(new Web3.providers.HttpProvider(rpcUrl)) web3.eth.accounts.wallet.add(account.privateKey) const homeBox = new web3.eth.Contract(BOX_ABI, boxAddress) - await homeBox.methods.setValueOnOtherNetwork(3, bridgeAddress, boxOtherSideAddress).send({ + await homeBox.methods[manualLane ? 'setValueOnOtherNetworkUsingManualLane' : 'setValueOnOtherNetwork']( + 3, + bridgeAddress, + boxOtherSideAddress + ).send({ from: account.address, gas: '400000' }) diff --git a/monitor-e2e/wait-for-monitor.sh b/monitor-e2e/wait-for-monitor.sh index 2b33b215..b68e54de 100755 --- a/monitor-e2e/wait-for-monitor.sh +++ b/monitor-e2e/wait-for-monitor.sh @@ -6,10 +6,18 @@ check_files_exist() { rc=0 for f in "${FILES[@]}"; do command="test -f responses/bridge/$f" - (docker-compose -f ../e2e-commons/docker-compose.yml exec -T monitor /bin/bash -c "$command") || rc=1 - (docker-compose -f ../e2e-commons/docker-compose.yml exec -T monitor-erc20 /bin/bash -c "$command") || rc=1 - (docker-compose -f ../e2e-commons/docker-compose.yml exec -T monitor-erc20-native /bin/bash -c "$command") || rc=1 - (docker-compose -f ../e2e-commons/docker-compose.yml exec -T monitor-amb /bin/bash -c "$command") || rc=1 + if [[ -z "$MODE" || "$MODE" == native-to-erc ]]; then + (docker-compose -f ../e2e-commons/docker-compose.yml exec -T monitor /bin/bash -c "$command") || rc=1 + fi + if [[ -z "$MODE" || "$MODE" == erc-to-erc ]]; then + (docker-compose -f ../e2e-commons/docker-compose.yml exec -T monitor-erc20 /bin/bash -c "$command") || rc=1 + fi + if [[ -z "$MODE" || "$MODE" == erc-to-native ]]; then + (docker-compose -f ../e2e-commons/docker-compose.yml exec -T monitor-erc20-native /bin/bash -c "$command") || rc=1 + fi + if [[ -z "$MODE" || "$MODE" == amb ]]; then + (docker-compose -f ../e2e-commons/docker-compose.yml exec -T monitor-amb /bin/bash -c "$command") || rc=1 + fi done return $rc } diff --git a/monitor/.env.example b/monitor/.env.example index 66d96f77..31647b03 100644 --- a/monitor/.env.example +++ b/monitor/.env.example @@ -22,3 +22,6 @@ COMMON_FOREIGN_GAS_PRICE_FACTOR=1 MONITOR_TX_NUMBER_THRESHOLD=100 MONITOR_PORT=3003 MONITOR_CACHE_EVENTS=true + +MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST= +MONITOR_HOME_TO_FOREIGN_BLOCK_LIST= diff --git a/monitor/alerts.js b/monitor/alerts.js index b5215dfa..597e0cff 100644 --- a/monitor/alerts.js +++ b/monitor/alerts.js @@ -1,18 +1,9 @@ require('dotenv').config() -const Web3 = require('web3') const logger = require('./logger')('alerts') const eventsInfo = require('./utils/events') -const { getBlockNumber } = require('./utils/contract') const { processedMsgNotDelivered, eventWithoutReference } = require('./utils/message') const { BRIDGE_MODES } = require('../commons') - -const { COMMON_HOME_RPC_URL, COMMON_FOREIGN_RPC_URL } = process.env - -const homeProvider = new Web3.providers.HttpProvider(COMMON_HOME_RPC_URL) -const web3Home = new Web3(homeProvider) - -const foreignProvider = new Web3.providers.HttpProvider(COMMON_FOREIGN_RPC_URL) -const web3Foreign = new Web3(foreignProvider) +const { web3Home, web3Foreign, getHomeBlockNumber, getForeignBlockNumber } = require('./utils/web3') async function main() { const { @@ -33,7 +24,8 @@ async function main() { xAffirmations = foreignToHomeConfirmations.filter(eventWithoutReference(foreignToHomeRequests)) } logger.debug('building misbehavior blocks') - const [homeBlockNumber, foreignBlockNumber] = await getBlockNumber(web3Home, web3Foreign) + const homeBlockNumber = await getHomeBlockNumber() + const foreignBlockNumber = await getForeignBlockNumber() const baseRange = [false, false, false, false, false] const xSignaturesMisbehavior = buildRangesObject( @@ -73,21 +65,21 @@ async function main() { /** * Finds the location for the blockNumber in a specific range starting from currentBlockNumber - * @param {BN} currentBlockNumber + * @param {Number} currentBlockNumber * @returns {function({blockNumber?: *}): boolean[]} */ const findMisbehaviorRange = currentBlockNumber => ({ blockNumber }) => { - const minus60 = currentBlockNumber.sub(Web3.utils.toBN(60)) - const minus180 = currentBlockNumber.sub(Web3.utils.toBN(180)) - const minus720 = currentBlockNumber.sub(Web3.utils.toBN(720)) - const minus17280 = currentBlockNumber.sub(Web3.utils.toBN(17280)) + const minus60 = currentBlockNumber - 60 + const minus180 = currentBlockNumber - 180 + const minus720 = currentBlockNumber - 720 + const minus17280 = currentBlockNumber - 17280 return [ - minus60.lte(blockNumber), - minus180.lte(blockNumber) && minus60.gt(blockNumber), - minus720.lte(blockNumber) && minus180.gt(blockNumber), - minus17280.lte(blockNumber) && minus720.gt(blockNumber), - minus17280.gt(blockNumber) + minus60 <= blockNumber, + minus180 <= blockNumber && minus60 > blockNumber, + minus720 <= blockNumber && minus180 > blockNumber, + minus17280 <= blockNumber && minus720 > blockNumber, + minus17280 > blockNumber ] } diff --git a/monitor/cache/.gitkeep b/monitor/cache/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/monitor/checkWorker.js b/monitor/checkWorker.js index 649accd8..a2384025 100644 --- a/monitor/checkWorker.js +++ b/monitor/checkWorker.js @@ -1,21 +1,21 @@ require('dotenv').config() -const Web3 = require('web3') +const BN = require('bignumber.js') const logger = require('./logger')('checkWorker') const { getBridgeMode } = require('../commons') const getBalances = require('./getBalances') const getShortEventStats = require('./getShortEventStats') const validators = require('./validators') +const getEventsInfo = require('./utils/events') const { writeFile, createDir } = require('./utils/file') +const { saveCache } = require('./utils/web3Cache') +const { web3Home } = require('./utils/web3') -const { COMMON_HOME_BRIDGE_ADDRESS, COMMON_HOME_RPC_URL, MONITOR_BRIDGE_NAME } = process.env +const { COMMON_HOME_BRIDGE_ADDRESS, MONITOR_BRIDGE_NAME } = process.env const MONITOR_VALIDATOR_HOME_TX_LIMIT = Number(process.env.MONITOR_VALIDATOR_HOME_TX_LIMIT) || 0 const MONITOR_VALIDATOR_FOREIGN_TX_LIMIT = Number(process.env.MONITOR_VALIDATOR_FOREIGN_TX_LIMIT) || 0 const MONITOR_TX_NUMBER_THRESHOLD = Number(process.env.MONITOR_TX_NUMBER_THRESHOLD) || 100 -const homeProvider = new Web3.providers.HttpProvider(COMMON_HOME_RPC_URL) -const web3Home = new Web3(homeProvider) - const { HOME_ERC_TO_ERC_ABI } = require('../commons') async function checkWorker() { @@ -24,16 +24,22 @@ async function checkWorker() { const homeBridge = new web3Home.eth.Contract(HOME_ERC_TO_ERC_ABI, COMMON_HOME_BRIDGE_ADDRESS) const bridgeMode = await getBridgeMode(homeBridge) logger.debug('Bridge mode:', bridgeMode) + logger.debug('calling getEventsInfo()') + const eventsInfo = await getEventsInfo(bridgeMode) logger.debug('calling getBalances()') - const balances = await getBalances(bridgeMode) + const balances = await getBalances(bridgeMode, eventsInfo) logger.debug('calling getShortEventStats()') - const events = await getShortEventStats(bridgeMode) + const events = await getShortEventStats(bridgeMode, eventsInfo) const home = Object.assign({}, balances.home, events.home) const foreign = Object.assign({}, balances.foreign, events.foreign) const status = Object.assign({}, balances, events, { home }, { foreign }) + if (status.balanceDiff && status.unclaimedBalance) { + status.balanceDiff = new BN(status.balanceDiff).minus(status.unclaimedBalance).toFixed() + } if (!status) throw new Error('status is empty: ' + JSON.stringify(status)) status.health = true writeFile(`/responses/${MONITOR_BRIDGE_NAME}/getBalances.json`, status) + saveCache() logger.debug('calling validators()') const vBalances = await validators(bridgeMode) diff --git a/monitor/checkWorker2.js b/monitor/checkWorker2.js index 0cb09aa4..06778c55 100644 --- a/monitor/checkWorker2.js +++ b/monitor/checkWorker2.js @@ -3,6 +3,7 @@ const logger = require('./logger')('checkWorker2') const eventsStats = require('./eventsStats') const alerts = require('./alerts') const { writeFile, createDir } = require('./utils/file') +const { saveCache } = require('./utils/web3Cache') const { MONITOR_BRIDGE_NAME } = process.env @@ -26,6 +27,7 @@ async function checkWorker2() { _alerts.ok = !_alerts.executeAffirmations.mostRecentTxHash && !_alerts.executeSignatures.mostRecentTxHash _alerts.health = true writeFile(`/responses/${MONITOR_BRIDGE_NAME}/alerts.json`, _alerts) + saveCache() logger.debug('Done x2') } catch (e) { logger.error(e) diff --git a/monitor/checkWorker3.js b/monitor/checkWorker3.js index 565a20e8..fdab50cb 100644 --- a/monitor/checkWorker3.js +++ b/monitor/checkWorker3.js @@ -1,15 +1,12 @@ require('dotenv').config() -const Web3 = require('web3') const logger = require('./logger')('checkWorker3') const stuckTransfers = require('./stuckTransfers') const { writeFile, createDir } = require('./utils/file') +const { web3Home } = require('./utils/web3') -const { MONITOR_BRIDGE_NAME, COMMON_HOME_BRIDGE_ADDRESS, COMMON_HOME_RPC_URL } = process.env +const { MONITOR_BRIDGE_NAME, COMMON_HOME_BRIDGE_ADDRESS } = process.env const { getBridgeMode, HOME_NATIVE_TO_ERC_ABI, BRIDGE_MODES } = require('../commons') -const homeProvider = new Web3.providers.HttpProvider(COMMON_HOME_RPC_URL) -const web3Home = new Web3(homeProvider) - async function checkWorker3() { try { const homeBridge = new web3Home.eth.Contract(HOME_NATIVE_TO_ERC_ABI, COMMON_HOME_BRIDGE_ADDRESS) diff --git a/monitor/docker-compose.yml b/monitor/docker-compose.yml index 8d0661e9..9164d9ef 100644 --- a/monitor/docker-compose.yml +++ b/monitor/docker-compose.yml @@ -4,11 +4,12 @@ services: monitor: image: poanetwork/tokenbridge-monitor:latest ports: - - "${MONITOR_PORT}:${MONITOR_PORT}" + - "${MONITOR_PORT}:${MONITOR_PORT}" env_file: ./.env - environment: + environment: - NODE_ENV=production volumes: - ./responses:/mono/monitor/responses + - ./cache:/mono/monitor/cache restart: unless-stopped entrypoint: "yarn start" diff --git a/monitor/eventsStats.js b/monitor/eventsStats.js index c0e49f30..2d5ac542 100644 --- a/monitor/eventsStats.js +++ b/monitor/eventsStats.js @@ -1,8 +1,20 @@ require('dotenv').config() const eventsInfo = require('./utils/events') -const { processedMsgNotDelivered, deliveredMsgNotProcessed, eventWithoutReference } = require('./utils/message') +const { + processedMsgNotDelivered, + deliveredMsgNotProcessed, + eventWithoutReference, + unclaimedHomeToForeignRequests +} = require('./utils/message') +const { getHomeTxSender } = require('./utils/web3Cache') const { BRIDGE_MODES } = require('../commons') +const { + MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST, + MONITOR_HOME_TO_FOREIGN_BLOCK_LIST, + MONITOR_HOME_TO_FOREIGN_CHECK_SENDER +} = process.env + async function main() { const { homeToForeignRequests, @@ -33,17 +45,30 @@ async function main() { lastChecked: Math.floor(Date.now() / 1000) } } else { - const onlyInHomeDeposits = homeToForeignRequests.filter(eventWithoutReference(homeToForeignConfirmations)) + let onlyInHomeDeposits = homeToForeignRequests.filter(eventWithoutReference(homeToForeignConfirmations)) const onlyInForeignDeposits = homeToForeignConfirmations.filter(eventWithoutReference(homeToForeignRequests)) const onlyInHomeWithdrawals = foreignToHomeConfirmations.filter(eventWithoutReference(foreignToHomeRequests)) const onlyInForeignWithdrawals = foreignToHomeRequests.filter(eventWithoutReference(foreignToHomeConfirmations)) + const unclaimedStats = {} + if (MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST || MONITOR_HOME_TO_FOREIGN_BLOCK_LIST) { + const unclaimedFilter = unclaimedHomeToForeignRequests() + if (MONITOR_HOME_TO_FOREIGN_CHECK_SENDER === 'true') { + for (let i = 0; i < onlyInHomeDeposits.length; i++) { + onlyInHomeDeposits[i].sender = await getHomeTxSender(onlyInHomeDeposits[i].transactionHash) + } + } + unclaimedStats.unclaimedHomeDeposits = onlyInHomeDeposits.filter(unclaimedFilter) + onlyInHomeDeposits = onlyInHomeDeposits.filter(e => !unclaimedFilter(e)) + } + return { onlyInHomeDeposits, onlyInForeignDeposits, onlyInHomeWithdrawals, onlyInForeignWithdrawals, + ...unclaimedStats, lastChecked: Math.floor(Date.now() / 1000) } } diff --git a/monitor/getBalances.js b/monitor/getBalances.js index d60a7b90..806cd045 100644 --- a/monitor/getBalances.js +++ b/monitor/getBalances.js @@ -1,23 +1,11 @@ require('dotenv').config() const BN = require('bignumber.js') -const Web3 = require('web3') +const Web3Utils = require('web3').utils const logger = require('./logger')('getBalances') const { BRIDGE_MODES } = require('../commons') +const { web3Home, web3Foreign, getHomeBlockNumber } = require('./utils/web3') -const Web3Utils = Web3.utils - -const { - COMMON_HOME_RPC_URL, - COMMON_FOREIGN_RPC_URL, - COMMON_HOME_BRIDGE_ADDRESS, - COMMON_FOREIGN_BRIDGE_ADDRESS -} = process.env - -const homeProvider = new Web3.providers.HttpProvider(COMMON_HOME_RPC_URL) -const web3Home = new Web3(homeProvider) - -const foreignProvider = new Web3.providers.HttpProvider(COMMON_FOREIGN_RPC_URL) -const web3Foreign = new Web3(foreignProvider) +const { COMMON_HOME_BRIDGE_ADDRESS, COMMON_FOREIGN_BRIDGE_ADDRESS } = process.env const { ERC20_ABI, @@ -30,21 +18,50 @@ const { FOREIGN_NATIVE_TO_ERC_ABI } = require('../commons') -async function main(bridgeMode) { +async function main(bridgeMode, eventsInfo) { + const { + homeToForeignConfirmations, + foreignToHomeConfirmations, + homeDelayedBlockNumber, + foreignDelayedBlockNumber + } = eventsInfo + + // Events in the ./utils/events.js are fetched for different block ranges, + // In order to be consistent with the balance values, the following values might be needed + + // Foreign balance should represent all UserRequestForAffirmation events up to block `N - requiredBlockConfirmation()` + // and all RelayedMessage events up to block `N`. + // This constant tells the difference between bridge balance at block `N - requiredBlockConfirmation() + 1` + // and the actual value monitor is interested in. + const lateForeignConfirmationsTotalValue = BN.sum( + 0, + ...homeToForeignConfirmations.filter(e => e.blockNumber > foreignDelayedBlockNumber).map(e => e.value) + ) + // Home balance should represent all UserRequestForSignature events up to block `M - requiredBlockConfirmation()` + // and all AffirmationCompleted events up to block `M`. + // This constant tells the difference between bridge balance at block `M - requiredBlockConfirmation() + 1` + // and the actual value monitor is interested in. + const lateHomeConfirmationsTotalValue = BN.sum( + 0, + ...foreignToHomeConfirmations.filter(e => e.blockNumber > homeDelayedBlockNumber).map(e => e.value) + ) + if (bridgeMode === BRIDGE_MODES.ERC_TO_ERC) { const foreignBridge = new web3Foreign.eth.Contract(FOREIGN_ERC_TO_ERC_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) const erc20Address = await foreignBridge.methods.erc20token().call() const erc20Contract = new web3Foreign.eth.Contract(ERC20_ABI, erc20Address) logger.debug('calling erc20Contract.methods.balanceOf') - const foreignErc20Balance = await erc20Contract.methods.balanceOf(COMMON_FOREIGN_BRIDGE_ADDRESS).call() + const foreignErc20Balance = await erc20Contract.methods + .balanceOf(COMMON_FOREIGN_BRIDGE_ADDRESS) + .call({}, foreignDelayedBlockNumber) const homeBridge = new web3Home.eth.Contract(HOME_ERC_TO_ERC_ABI, COMMON_HOME_BRIDGE_ADDRESS) logger.debug('calling homeBridge.methods.erc677token') const tokenAddress = await homeBridge.methods.erc677token().call() const tokenContract = new web3Home.eth.Contract(ERC677_ABI, tokenAddress) logger.debug('calling tokenContract.methods.totalSupply()') - const totalSupply = await tokenContract.methods.totalSupply().call() - const foreignBalanceBN = new BN(foreignErc20Balance) - const foreignTotalSupplyBN = new BN(totalSupply) + const totalSupply = await tokenContract.methods.totalSupply().call({}, homeDelayedBlockNumber) + const foreignBalanceBN = new BN(foreignErc20Balance).plus(lateForeignConfirmationsTotalValue) + const foreignTotalSupplyBN = new BN(totalSupply).plus(lateHomeConfirmationsTotalValue) const diff = foreignBalanceBN.minus(foreignTotalSupplyBN).toString(10) logger.debug('Done') return { @@ -61,12 +78,12 @@ async function main(bridgeMode) { logger.debug('calling web3Home.eth.getBalance') const foreignBridge = new web3Foreign.eth.Contract(FOREIGN_NATIVE_TO_ERC_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) const erc20Address = await foreignBridge.methods.erc677token().call() - const homeBalance = await web3Home.eth.getBalance(COMMON_HOME_BRIDGE_ADDRESS) + const homeBalance = await web3Home.eth.getBalance(COMMON_HOME_BRIDGE_ADDRESS, homeDelayedBlockNumber) const tokenContract = new web3Foreign.eth.Contract(ERC20_ABI, erc20Address) logger.debug('calling tokenContract.methods.totalSupply()') - const totalSupply = await tokenContract.methods.totalSupply().call() - const homeBalanceBN = new BN(homeBalance) - const foreignTotalSupplyBN = new BN(totalSupply) + const totalSupply = await tokenContract.methods.totalSupply().call({}, foreignDelayedBlockNumber) + const homeBalanceBN = new BN(homeBalance).plus(lateHomeConfirmationsTotalValue) + const foreignTotalSupplyBN = new BN(totalSupply).plus(lateForeignConfirmationsTotalValue) const diff = homeBalanceBN.minus(foreignTotalSupplyBN).toString(10) logger.debug('Done') return { @@ -103,21 +120,25 @@ async function main(bridgeMode) { } logger.debug('calling erc20Contract.methods.balanceOf') - const foreignErc20Balance = await erc20Contract.methods.balanceOf(COMMON_FOREIGN_BRIDGE_ADDRESS).call() + const foreignErc20Balance = await erc20Contract.methods + .balanceOf(COMMON_FOREIGN_BRIDGE_ADDRESS) + .call({}, foreignDelayedBlockNumber) const homeBridge = new web3Home.eth.Contract(HOME_ERC_TO_NATIVE_ABI, COMMON_HOME_BRIDGE_ADDRESS) logger.debug('calling homeBridge.methods.blockRewardContract') const blockRewardAddress = await homeBridge.methods.blockRewardContract().call() const blockRewardContract = new web3Home.eth.Contract(BLOCK_REWARD_ABI, blockRewardAddress) + const homeBlockNumber = await getHomeBlockNumber() logger.debug('calling blockReward.methods.mintedTotally') - const mintedCoins = await blockRewardContract.methods.mintedTotallyByBridge(COMMON_HOME_BRIDGE_ADDRESS).call() + const mintedCoins = await blockRewardContract.methods + .mintedTotallyByBridge(COMMON_HOME_BRIDGE_ADDRESS) + .call({}, homeBlockNumber) logger.debug('calling homeBridge.methods.totalBurntCoins') - const burntCoins = await homeBridge.methods.totalBurntCoins().call() - + const burntCoins = await homeBridge.methods.totalBurntCoins().call({}, homeDelayedBlockNumber) const mintedCoinsBN = new BN(mintedCoins) const burntCoinsBN = new BN(burntCoins) const totalSupplyBN = mintedCoinsBN.minus(burntCoinsBN) - const foreignErc20BalanceBN = new BN(foreignErc20Balance) + const foreignErc20BalanceBN = new BN(foreignErc20Balance).plus(lateForeignConfirmationsTotalValue) const investedAmountInDaiBN = new BN(investedAmountInDai) const bridgeDsrBalanceBN = new BN(bridgeDsrBalance) diff --git a/monitor/getShortEventStats.js b/monitor/getShortEventStats.js index f314abd0..1b6607ce 100644 --- a/monitor/getShortEventStats.js +++ b/monitor/getShortEventStats.js @@ -1,18 +1,36 @@ require('dotenv').config() -const eventsInfo = require('./utils/events') +const BN = require('bignumber.js') +const Web3Utils = require('web3').utils +const { + eventWithoutReference, + deliveredMsgNotProcessed, + unclaimedHomeToForeignRequests, + manuallyProcessedAMBHomeToForeignRequests +} = require('./utils/message') const { BRIDGE_MODES } = require('../commons') +const { getHomeTxSender } = require('./utils/web3Cache') -async function main(bridgeMode) { +const { + MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST, + MONITOR_HOME_TO_FOREIGN_BLOCK_LIST, + MONITOR_HOME_TO_FOREIGN_CHECK_SENDER +} = process.env + +async function main(bridgeMode, eventsInfo) { const { homeToForeignConfirmations, homeToForeignRequests, foreignToHomeConfirmations, foreignToHomeRequests - } = await eventsInfo(bridgeMode) + } = eventsInfo if (bridgeMode === BRIDGE_MODES.ARBITRARY_MESSAGE) { + const onlyInHomeRequests = homeToForeignRequests.filter(deliveredMsgNotProcessed(homeToForeignConfirmations)) + const manuallyProcessedRequests = onlyInHomeRequests.filter(manuallyProcessedAMBHomeToForeignRequests()) return { - fromHomeToForeignDiff: homeToForeignRequests.length - homeToForeignConfirmations.length, + fromHomeToForeignDiff: + homeToForeignRequests.length - homeToForeignConfirmations.length - manuallyProcessedRequests.length, + fromHomeToForeignPBUDiff: manuallyProcessedRequests.length, fromForeignToHomeDiff: foreignToHomeConfirmations.length - foreignToHomeRequests.length, home: { toForeign: homeToForeignRequests.length, @@ -24,9 +42,26 @@ async function main(bridgeMode) { } } } else { - return { + const stats = { depositsDiff: homeToForeignRequests.length - homeToForeignConfirmations.length, - withdrawalDiff: foreignToHomeConfirmations.length - foreignToHomeRequests.length, + withdrawalDiff: foreignToHomeConfirmations.length - foreignToHomeRequests.length + } + if (MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST || MONITOR_HOME_TO_FOREIGN_BLOCK_LIST) { + const onlyInHomeDeposits = homeToForeignRequests.filter(eventWithoutReference(homeToForeignConfirmations)) + if (MONITOR_HOME_TO_FOREIGN_CHECK_SENDER === 'true') { + for (let i = 0; i < onlyInHomeDeposits.length; i++) { + onlyInHomeDeposits[i].sender = await getHomeTxSender(onlyInHomeDeposits[i].transactionHash) + } + } + + const unclaimedPool = onlyInHomeDeposits.filter(unclaimedHomeToForeignRequests()) + + stats.depositsDiff -= unclaimedPool.length + stats.unclaimedDiff = unclaimedPool.length + stats.unclaimedBalance = Web3Utils.fromWei(BN.sum(0, ...unclaimedPool.map(e => e.value)).toFixed()) + } + return { + ...stats, home: { deposits: homeToForeignRequests.length, withdrawals: foreignToHomeConfirmations.length diff --git a/monitor/package.json b/monitor/package.json index c91d7297..55583cf3 100644 --- a/monitor/package.json +++ b/monitor/package.json @@ -14,12 +14,12 @@ "author": "", "license": "ISC", "dependencies": { - "bignumber.js": "^6.0.0", + "bignumber.js": "^9.0.1", "cors": "^2.8.5", "dotenv": "^5.0.1", "express": "^4.16.3", "node-fetch": "^2.1.2", - "web3": "1.0.0-beta.34" + "web3": "^1.3.0" }, "engines": { "node": ">= 10.18" diff --git a/monitor/scripts/getBridgeStats.sh b/monitor/scripts/getBridgeStats.sh index ccf80dbe..d847ed28 100755 --- a/monitor/scripts/getBridgeStats.sh +++ b/monitor/scripts/getBridgeStats.sh @@ -2,17 +2,21 @@ CONFIGDIR="configs" RESPONSESDIR="responses" +ACLDIR="access-lists" +ALLOWANCEFILE="allowance_list.txt" +BLOCKFILE="block_list.txt" +CACHEDIR="cache" IMAGETAG="latest" cd $(dirname $0)/.. if /usr/local/bin/docker-compose ps | grep -q -i 'monitor'; then tstart=`date +"%s"` - + for file in ${CONFIGDIR}/*.env do echo "${file} handling..." - + bridgename=`source ${file} && echo ${MONITOR_BRIDGE_NAME}` reportdir=${RESPONSESDIR}"/"${bridgename} if [ ! -d ${reportdir} ]; then @@ -26,10 +30,18 @@ if /usr/local/bin/docker-compose ps | grep -q -i 'monitor'; then fi done + alist=`source ${file} && echo ${MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST}` + blist=`source ${file} && echo ${MONITOR_HOME_TO_FOREIGN_BLOCK_LIST}` + al_param="$(pwd)/${ACLDIR}/${bridgename}/${ALLOWANCEFILE}:/mono/monitor/access-lists/allowance_list.txt" + bl_param="$(pwd)/${ACLDIR}/${bridgename}/${BLOCKFILE}:/mono/monitor/access-lists/block_list.txt" + containername=${bridgename}"-checker" docker container stats --no-stream ${containername} 2>/dev/null 1>&2 if [ ! "$?" == "0" ]; then + mkdir -p "$(pwd)/$CACHEDIR/$bridgename" docker run --rm --env-file $file -v $(pwd)/${RESPONSESDIR}:/mono/monitor/responses \ + ${alist:+"-v"} ${alist:+"$al_param"} ${blist:+"-v"} ${blist:+"$bl_param"} \ + -v $(pwd)/${CACHEDIR}/${bridgename}:/mono/monitor/cache/${bridgename} \ --name ${containername} poanetwork/tokenbridge-monitor:${IMAGETAG} \ /bin/bash -c 'yarn check-all' shasum -a 256 -s -c ${checksumfile} @@ -46,15 +58,15 @@ if /usr/local/bin/docker-compose ps | grep -q -i 'monitor'; then else echo "${containername} have not finished yet" >&2 fi - + rm ${checksumfile} echo "========================================" done - + tend=`date +"%s"` tdiff=`expr ${tend} - ${tstart}` echo "Total time to run: ${tdiff}" else echo "Monitor is not running, skipping checks." -fi \ No newline at end of file +fi diff --git a/monitor/stuckTransfers.js b/monitor/stuckTransfers.js index 3fdbe32a..b5b75062 100644 --- a/monitor/stuckTransfers.js +++ b/monitor/stuckTransfers.js @@ -1,14 +1,12 @@ require('dotenv').config() -const Web3 = require('web3') const logger = require('./logger')('stuckTransfers.js') const { FOREIGN_V1_ABI } = require('../commons/abis') +const { web3Foreign, getForeignBlockNumber } = require('./utils/web3') +const { getPastEvents } = require('./utils/web3Cache') -const { COMMON_FOREIGN_RPC_URL, COMMON_FOREIGN_BRIDGE_ADDRESS } = process.env +const { COMMON_FOREIGN_BRIDGE_ADDRESS } = process.env const MONITOR_FOREIGN_START_BLOCK = Number(process.env.MONITOR_FOREIGN_START_BLOCK) || 0 -const foreignProvider = new Web3.providers.HttpProvider(COMMON_FOREIGN_RPC_URL) -const web3Foreign = new Web3(foreignProvider) - const ABITransferWithoutData = [ { anonymous: false, @@ -64,38 +62,39 @@ const ABIWithData = [ } ] -function compareTransfers(transfersNormal) { - return withData => { - return ( - transfersNormal.filter(normal => { - return normal.transactionHash === withData.transactionHash - }).length === 0 - ) - } +function transferWithoutCallback(transfersNormal) { + const txHashes = new Set() + transfersNormal.forEach(transfer => txHashes.add(transfer.transactionHash)) + return withData => !txHashes.has(withData.transactionHash) } async function main() { const foreignBridge = new web3Foreign.eth.Contract(FOREIGN_V1_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) + logger.debug('calling foreignBridge.methods.erc677token') const erc20Address = await foreignBridge.methods.erc677token().call() const tokenContract = new web3Foreign.eth.Contract(ABITransferWithoutData, erc20Address) const tokenContractWithData = new web3Foreign.eth.Contract(ABIWithData, erc20Address) + logger.debug('getting last block number') + const foreignBlockNumber = await getForeignBlockNumber() + const foreignConfirmations = await foreignBridge.methods.requiredBlockConfirmations().call() + const foreignDelayedBlockNumber = foreignBlockNumber - foreignConfirmations logger.debug('calling tokenContract.getPastEvents Transfer') - const transfersNormal = await tokenContract.getPastEvents('Transfer', { - filter: { - to: COMMON_FOREIGN_BRIDGE_ADDRESS + const options = { + event: 'Transfer', + options: { + filter: { + to: COMMON_FOREIGN_BRIDGE_ADDRESS + } }, fromBlock: MONITOR_FOREIGN_START_BLOCK, - toBlock: 'latest' - }) + toBlock: foreignBlockNumber, + chain: 'foreign', + safeToBlock: foreignDelayedBlockNumber + } + const transfersNormal = await getPastEvents(tokenContract, options) logger.debug('calling tokenContractWithData.getPastEvents Transfer') - const transfersWithData = await tokenContractWithData.getPastEvents('Transfer', { - filter: { - to: COMMON_FOREIGN_BRIDGE_ADDRESS - }, - fromBlock: MONITOR_FOREIGN_START_BLOCK, - toBlock: 'latest' - }) - const stuckTransfers = transfersNormal.filter(compareTransfers(transfersWithData)) + const transfersWithData = await getPastEvents(tokenContractWithData, options) + const stuckTransfers = transfersNormal.filter(transferWithoutCallback(transfersWithData)) logger.debug('Done') return { stuckTransfers, diff --git a/monitor/utils/contract.js b/monitor/utils/contract.js deleted file mode 100644 index 1bbeb44f..00000000 --- a/monitor/utils/contract.js +++ /dev/null @@ -1,11 +0,0 @@ -const { toBN } = require('web3').utils - -const getBlockNumberCall = web3 => web3.eth.getBlockNumber() - -async function getBlockNumber(web3Home, web3Foreign) { - return (await Promise.all([web3Home, web3Foreign].map(getBlockNumberCall))).map(toBN) -} - -module.exports = { - getBlockNumber -} diff --git a/monitor/utils/events.js b/monitor/utils/events.js index 054cca15..5d03ec5e 100644 --- a/monitor/utils/events.js +++ b/monitor/utils/events.js @@ -1,6 +1,4 @@ require('dotenv').config() -const Web3 = require('web3') -const { toBN } = require('web3').utils const logger = require('../logger')('eventsUtils') const { BRIDGE_MODES, @@ -11,7 +9,6 @@ const { ERC20_ABI, ERC677_BRIDGE_TOKEN_ABI, getTokenType, - getPastEvents, ZERO_ADDRESS, OLD_AMB_USER_REQUEST_FOR_SIGNATURE_ABI, OLD_AMB_USER_REQUEST_FOR_AFFIRMATION_ABI @@ -19,24 +16,12 @@ const { const { normalizeEventInformation } = require('./message') const { filterTransferBeforeES } = require('./tokenUtils') const { writeFile, readCacheFile } = require('./file') +const { web3Home, web3Foreign, getHomeBlockNumber, getForeignBlockNumber } = require('./web3') +const { getPastEvents } = require('./web3Cache') -const { - COMMON_HOME_RPC_URL, - COMMON_FOREIGN_RPC_URL, - COMMON_HOME_BRIDGE_ADDRESS, - COMMON_FOREIGN_BRIDGE_ADDRESS, - MONITOR_CACHE_EVENTS -} = process.env -const MONITOR_HOME_START_BLOCK = toBN(Number(process.env.MONITOR_HOME_START_BLOCK) || 0) -const MONITOR_FOREIGN_START_BLOCK = toBN(Number(process.env.MONITOR_FOREIGN_START_BLOCK) || 0) - -const homeProvider = new Web3.providers.HttpProvider(COMMON_HOME_RPC_URL) -const web3Home = new Web3(homeProvider) - -const foreignProvider = new Web3.providers.HttpProvider(COMMON_FOREIGN_RPC_URL) -const web3Foreign = new Web3(foreignProvider) - -const { getBlockNumber } = require('./contract') +const { COMMON_HOME_BRIDGE_ADDRESS, COMMON_FOREIGN_BRIDGE_ADDRESS, MONITOR_CACHE_EVENTS } = process.env +const MONITOR_HOME_START_BLOCK = Number(process.env.MONITOR_HOME_START_BLOCK) || 0 +const MONITOR_FOREIGN_START_BLOCK = Number(process.env.MONITOR_FOREIGN_START_BLOCK) || 0 const cacheFilePath = '/tmp/cachedEvents.json' async function main(mode) { @@ -73,11 +58,12 @@ async function main(mode) { } logger.debug('getting last block numbers') - const [homeBlockNumber, foreignBlockNumber] = await getBlockNumber(web3Home, web3Foreign) - const homeConfirmations = toBN(await homeBridge.methods.requiredBlockConfirmations().call()) - const foreignConfirmations = toBN(await foreignBridge.methods.requiredBlockConfirmations().call()) - const homeDelayedBlockNumber = homeBlockNumber.sub(homeConfirmations) - const foreignDelayedBlockNumber = foreignBlockNumber.sub(foreignConfirmations) + const homeBlockNumber = await getHomeBlockNumber() + const foreignBlockNumber = await getForeignBlockNumber() + const homeConfirmations = await homeBridge.methods.requiredBlockConfirmations().call() + const foreignConfirmations = await foreignBridge.methods.requiredBlockConfirmations().call() + const homeDelayedBlockNumber = homeBlockNumber - homeConfirmations + const foreignDelayedBlockNumber = foreignBlockNumber - foreignConfirmations let homeToForeignRequests = [] let foreignToHomeRequests = [] @@ -95,22 +81,24 @@ async function main(mode) { homeToForeignRequests = (await getPastEvents(oldHomeBridge, { event: 'UserRequestForSignature', fromBlock: MONITOR_HOME_START_BLOCK, - toBlock: homeDelayedBlockNumber + toBlock: homeDelayedBlockNumber, + chain: 'home' })).map(normalizeEvent) logger.debug(`found ${homeToForeignRequests.length} events`) if (homeToForeignRequests.length > 0) { - homeMigrationBlock = toBN(Math.max(...homeToForeignRequests.map(x => x.blockNumber))) + homeMigrationBlock = Math.max(...homeToForeignRequests.map(x => x.blockNumber)) } logger.debug("calling oldForeignBridge.getPastEvents('UserRequestForAffirmation(bytes)')") foreignToHomeRequests = (await getPastEvents(oldForeignBridge, { event: 'UserRequestForAffirmation', fromBlock: MONITOR_FOREIGN_START_BLOCK, - toBlock: foreignDelayedBlockNumber + toBlock: foreignDelayedBlockNumber, + chain: 'foreign' })).map(normalizeEvent) logger.debug(`found ${foreignToHomeRequests.length} events`) if (foreignToHomeRequests.length > 0) { - foreignMigrationBlock = toBN(Math.max(...foreignToHomeRequests.map(x => x.blockNumber))) + foreignMigrationBlock = Math.max(...foreignToHomeRequests.map(x => x.blockNumber)) } } @@ -118,7 +106,8 @@ async function main(mode) { const homeToForeignRequestsNew = (await getPastEvents(homeBridge, { event: v1Bridge ? 'Deposit' : 'UserRequestForSignature', fromBlock: homeMigrationBlock, - toBlock: homeDelayedBlockNumber + toBlock: homeDelayedBlockNumber, + chain: 'home' })).map(normalizeEvent) homeToForeignRequests = [...homeToForeignRequests, ...homeToForeignRequestsNew] @@ -126,21 +115,26 @@ async function main(mode) { const homeToForeignConfirmations = (await getPastEvents(foreignBridge, { event: v1Bridge ? 'Deposit' : 'RelayedMessage', fromBlock: MONITOR_FOREIGN_START_BLOCK, - toBlock: foreignBlockNumber + toBlock: foreignBlockNumber, + chain: 'foreign', + safeToBlock: foreignDelayedBlockNumber })).map(normalizeEvent) logger.debug("calling homeBridge.getPastEvents('AffirmationCompleted')") const foreignToHomeConfirmations = (await getPastEvents(homeBridge, { event: v1Bridge ? 'Withdraw' : 'AffirmationCompleted', fromBlock: MONITOR_HOME_START_BLOCK, - toBlock: homeBlockNumber + toBlock: homeBlockNumber, + chain: 'home', + safeToBlock: homeDelayedBlockNumber })).map(normalizeEvent) logger.debug("calling foreignBridge.getPastEvents('UserRequestForAffirmation')") const foreignToHomeRequestsNew = (await getPastEvents(foreignBridge, { event: v1Bridge ? 'Withdraw' : 'UserRequestForAffirmation', fromBlock: foreignMigrationBlock, - toBlock: foreignDelayedBlockNumber + toBlock: foreignDelayedBlockNumber, + chain: 'foreign' })).map(normalizeEvent) foreignToHomeRequests = [...foreignToHomeRequests, ...foreignToHomeRequestsNew] @@ -152,7 +146,8 @@ async function main(mode) { toBlock: foreignDelayedBlockNumber, options: { filter: { to: COMMON_FOREIGN_BRIDGE_ADDRESS } - } + }, + chain: 'foreign' })).map(normalizeEvent) let directTransfers = transferEvents @@ -163,7 +158,9 @@ async function main(mode) { const tokensSwappedEvents = await getPastEvents(foreignBridge, { event: 'TokensSwapped', fromBlock: MONITOR_FOREIGN_START_BLOCK, - toBlock: foreignBlockNumber + toBlock: foreignBlockNumber, + chain: 'foreign', + safeToBlock: foreignDelayedBlockNumber }) // Get token swap events emitted by foreign bridge @@ -202,7 +199,8 @@ async function main(mode) { toBlock: foreignDelayedBlockNumber, options: { filter: { to: COMMON_FOREIGN_BRIDGE_ADDRESS } - } + }, + chain: 'foreign' })).map(normalizeEvent) // Remove events after the ES @@ -237,7 +235,9 @@ async function main(mode) { foreignToHomeConfirmations, foreignToHomeRequests, isExternalErc20, - bridgeMode + bridgeMode, + homeDelayedBlockNumber, + foreignDelayedBlockNumber } if (MONITOR_CACHE_EVENTS === 'true') { diff --git a/monitor/utils/file.js b/monitor/utils/file.js index 2484e0a1..ad9f25f6 100644 --- a/monitor/utils/file.js +++ b/monitor/utils/file.js @@ -38,9 +38,25 @@ function readCacheFile(filePath) { } } +function writeCacheFile(filePath, object) { + fs.mkdirSync(path.dirname(filePath), { recursive: true }) + fs.writeFileSync(filePath, JSON.stringify(object)) +} + +function readAccessListFile(filePath) { + const data = fs.readFileSync(filePath) + return data + .toString() + .split('\n') + .map(addr => addr.trim().toLowerCase()) + .filter(addr => addr.length === 42) +} + module.exports = { readFile, writeFile, createDir, - readCacheFile + readCacheFile, + writeCacheFile, + readAccessListFile } diff --git a/monitor/utils/getValidatorsList.js b/monitor/utils/getValidatorsList.js new file mode 100644 index 00000000..57a609bc --- /dev/null +++ b/monitor/utils/getValidatorsList.js @@ -0,0 +1,93 @@ +const { REWARDABLE_VALIDATORS_ABI, processValidatorsEvents } = require('../../commons') +const { getPastEvents } = require('./web3Cache') + +const VALIDATORS_INDEXED_EVENTS_ABI = [ + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'validator', + type: 'address' + } + ], + name: 'ValidatorRemoved', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'validator', + type: 'address' + } + ], + name: 'ValidatorAdded', + type: 'event' + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + name: 'validator', + type: 'address' + }, + { + indexed: true, + name: 'reward', + type: 'address' + } + ], + name: 'ValidatorAdded', + type: 'event' + } +] + +const tryCall = async (method, fallbackValue) => { + try { + return await method.call() + } catch (e) { + return fallbackValue + } +} + +const getValidatorList = async (address, eth, options) => { + const { logger } = options + logger.debug('getting validatorList') + + const validatorsContract = new eth.Contract(REWARDABLE_VALIDATORS_ABI, address) // in monitor, BRIDGE_VALIDATORS_ABI was used + const validators = await tryCall(validatorsContract.methods.validatorList(), []) + + if (validators.length) { + return validators + } + + logger.debug('getting validatorsEvents') + + options.fromBlock = Number(await tryCall(validatorsContract.methods.deployedAtBlock(), 0)) + + const contract = new eth.Contract(VALIDATORS_INDEXED_EVENTS_ABI, address) + + const validatorsEvents = [ + ...(await getPastEvents(contract, { + event: 'ValidatorAdded(address)', + ...options + })), + ...(await getPastEvents(contract, { + event: 'ValidatorAdded(address,address)', + ...options + })), + ...(await getPastEvents(contract, { + event: 'ValidatorRemoved(address)', + ...options + })) + ].sort((a, b) => a.blockNumber - b.blockNumber || a.transactionIndex - b.transactionIndex) + + return processValidatorsEvents(validatorsEvents) +} + +module.exports = { + getValidatorList +} diff --git a/monitor/utils/message.js b/monitor/utils/message.js index ea4a9941..fe840628 100644 --- a/monitor/utils/message.js +++ b/monitor/utils/message.js @@ -1,44 +1,30 @@ -const web3Utils = require('web3').utils const { parseAMBMessage } = require('../../commons') +const { readAccessListFile } = require('./file') + +const { MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST, MONITOR_HOME_TO_FOREIGN_BLOCK_LIST } = process.env + +const keyAMB = e => [e.messageId, e.sender, e.executor].join(',').toLowerCase() + +const normalizeAMBMessage = e => { + let msgData = e.returnValues.encodedData + if (!e.returnValues.messageId) { + // append tx hash to an old message, where message id was not used + // for old messages, e.messageId is a corresponding transactionHash + msgData = e.transactionHash + msgData.slice(2) + } + return parseAMBMessage(msgData) +} function deliveredMsgNotProcessed(processedList) { - return deliveredMsg => { - let msgData = deliveredMsg.returnValues.encodedData - if (!deliveredMsg.returnValues.messageId) { - // append tx hash to an old message, where message id was not used - msgData = deliveredMsg.transactionHash + msgData.slice(2) - } - const msg = parseAMBMessage(msgData) - return ( - processedList.filter(processedMsg => { - return messageEqualsEvent(msg, processedMsg.returnValues) - }).length === 0 - ) - } + const keys = new Set() + processedList.forEach(processedMsg => keys.add(keyAMB(processedMsg.returnValues))) + return deliveredMsg => !keys.has(keyAMB(normalizeAMBMessage(deliveredMsg))) } function processedMsgNotDelivered(deliveredList) { - return processedMsg => { - return ( - deliveredList.filter(deliveredMsg => { - let msgData = deliveredMsg.returnValues.encodedData - if (!deliveredMsg.returnValues.messageId) { - // append tx hash to an old message, where message id was not used - msgData = deliveredMsg.transactionHash + msgData.slice(2) - } - const msg = parseAMBMessage(msgData) - return messageEqualsEvent(msg, processedMsg.returnValues) - }).length === 0 - ) - } -} - -function messageEqualsEvent(parsedMsg, event) { - return ( - web3Utils.toChecksumAddress(parsedMsg.sender) === event.sender && - web3Utils.toChecksumAddress(parsedMsg.executor) === event.executor && - parsedMsg.messageId === event.messageId // for an old messages, event.messageId is actually a transactionHash - ) + const keys = new Set() + deliveredList.forEach(deliveredMsg => keys.add(keyAMB(normalizeAMBMessage(deliveredMsg)))) + return processedMsg => !keys.has(keyAMB(processedMsg.returnValues)) } /** @@ -60,13 +46,49 @@ const normalizeEventInformation = event => ({ value: event.returnValues.value }) -const eventWithoutReference = otherSideEvents => e => - otherSideEvents.filter(a => a.referenceTx === e.referenceTx && a.recipient === e.recipient && a.value === e.value) - .length === 0 +const key = e => [e.referenceTx, e.recipient, e.value].join(',').toLowerCase() + +const eventWithoutReference = otherSideEvents => { + const keys = new Set() + otherSideEvents.forEach(e => keys.add(key(e))) + return e => !keys.has(key(e)) +} + +const unclaimedHomeToForeignRequests = () => { + if (MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST) { + const allowanceList = readAccessListFile(MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST) + return e => !allowanceList.includes(e.recipient.toLowerCase()) && !(e.sender && allowanceList.includes(e.sender)) + } else if (MONITOR_HOME_TO_FOREIGN_BLOCK_LIST) { + const blockList = readAccessListFile(MONITOR_HOME_TO_FOREIGN_BLOCK_LIST) + return e => blockList.includes(e.recipient.toLowerCase()) || (e.sender && blockList.includes(e.sender)) + } else { + return () => false + } +} + +const manuallyProcessedAMBHomeToForeignRequests = () => { + if (MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST) { + const allowanceList = readAccessListFile(MONITOR_HOME_TO_FOREIGN_ALLOWANCE_LIST) + return e => { + const { sender, executor, decodedDataType } = normalizeAMBMessage(e) + return (!allowanceList.includes(sender) && !allowanceList.includes(executor)) || decodedDataType.manualLane + } + } else if (MONITOR_HOME_TO_FOREIGN_BLOCK_LIST) { + const blockList = readAccessListFile(MONITOR_HOME_TO_FOREIGN_BLOCK_LIST) + return e => { + const { sender, executor, decodedDataType } = normalizeAMBMessage(e) + return blockList.includes(sender) || blockList.includes(executor) || decodedDataType.manualLane + } + } else { + return e => normalizeAMBMessage(e).decodedDataType.manualLane + } +} module.exports = { deliveredMsgNotProcessed, processedMsgNotDelivered, normalizeEventInformation, - eventWithoutReference + eventWithoutReference, + unclaimedHomeToForeignRequests, + manuallyProcessedAMBHomeToForeignRequests } diff --git a/monitor/utils/web3.js b/monitor/utils/web3.js new file mode 100644 index 00000000..23cff4a8 --- /dev/null +++ b/monitor/utils/web3.js @@ -0,0 +1,27 @@ +require('dotenv').config() +const Web3 = require('web3') + +const { COMMON_HOME_RPC_URL, COMMON_FOREIGN_RPC_URL } = process.env + +const homeProvider = new Web3.providers.HttpProvider(COMMON_HOME_RPC_URL) +const web3Home = new Web3(homeProvider) + +const foreignProvider = new Web3.providers.HttpProvider(COMMON_FOREIGN_RPC_URL) +const web3Foreign = new Web3(foreignProvider) + +function blockNumberWrapper(web3) { + let blockNumber = null + return async () => { + if (!blockNumber) { + blockNumber = await web3.eth.getBlockNumber() + } + return blockNumber + } +} + +module.exports = { + web3Home, + web3Foreign, + getHomeBlockNumber: blockNumberWrapper(web3Home), + getForeignBlockNumber: blockNumberWrapper(web3Foreign) +} diff --git a/monitor/utils/web3Cache.js b/monitor/utils/web3Cache.js new file mode 100644 index 00000000..17fab65a --- /dev/null +++ b/monitor/utils/web3Cache.js @@ -0,0 +1,133 @@ +const logger = require('../logger')('web3Cache') +const { readCacheFile, writeCacheFile } = require('./file') +const { web3Home } = require('./web3') +const { getPastEvents: commonGetPastEvents } = require('../../commons') + +const { MONITOR_BRIDGE_NAME, MONITOR_CACHE_EVENTS } = process.env + +let isDirty = false + +const homeTxSendersCacheFile = `./cache/${MONITOR_BRIDGE_NAME}/home/txSenders.json` +const cachedHomeTxSenders = readCacheFile(homeTxSendersCacheFile) || {} + +async function getHomeTxSender(txHash) { + if (!cachedHomeTxSenders[txHash]) { + logger.debug(`Fetching sender for tx ${txHash}`) + cachedHomeTxSenders[txHash] = (await web3Home.eth.getTransaction(txHash)).from.toLowerCase() + isDirty = true + } + return cachedHomeTxSenders[txHash] +} + +async function getPastEvents(contract, options) { + if (MONITOR_CACHE_EVENTS !== 'true') { + return commonGetPastEvents(contract, options) + } + + const contractAddr = contract.options.address + + let eventSignature + if (options.event.includes('(')) { + eventSignature = options.event + options.event = web3Home.utils.sha3(eventSignature) + const eventABI = contract.options.jsonInterface.find(e => e.type === 'event' && e.signature === options.event) + if (!eventABI) { + throw new Error(`Event ${eventSignature} not found`) + } + } else { + const eventABI = contract.options.jsonInterface.find( + e => e.type === 'event' && (e.name === options.event || e.signature === options.event) + ) + if (!eventABI) { + throw new Error(`Event ${options.event} not found`) + } + eventSignature = `${eventABI.name}(${eventABI.inputs.map(i => i.type).join(',')})` + } + + const cacheFile = `./cache/${MONITOR_BRIDGE_NAME}/${options.chain}/${contractAddr}/${eventSignature}.json` + + const { fromBlock, toBlock } = options + const { fromBlock: cachedFromBlock, toBlock: cachedToBlock, events: cachedEvents } = readCacheFile(cacheFile) || { + fromBlock: 0, + toBlock: 0, + events: [] + } + + let result + if (cachedFromBlock > toBlock || fromBlock > cachedToBlock) { + // requested: A...B + // cached: C...D + // OR + // requested: A...B + // cached: C...D + logger.debug(`Fetching events for blocks ${fromBlock}...${toBlock}`) + result = await commonGetPastEvents(contract, options) + } else if (fromBlock < cachedFromBlock && toBlock <= cachedToBlock) { + // requested: A...B + // cached: C...D + logger.debug(`Cache hit for blocks ${cachedFromBlock}...${toBlock}`) + logger.debug(`Fetching events for blocks ${fromBlock}...${cachedFromBlock - 1}`) + result = [ + ...(await commonGetPastEvents(contract, { ...options, toBlock: cachedFromBlock - 1 })), + ...cachedEvents.filter(e => e.blockNumber <= toBlock) + ] + } else if (fromBlock < cachedFromBlock && cachedToBlock < toBlock) { + // requested: A.....B + // cached: C.D + logger.debug(`Cache hit for blocks ${cachedFromBlock}...${cachedToBlock}`) + logger.debug(`Fetching events for blocks ${fromBlock}...${cachedFromBlock - 1}`) + logger.debug(`Fetching events for blocks ${cachedToBlock + 1}...${toBlock}`) + result = [ + ...(await commonGetPastEvents(contract, { ...options, toBlock: cachedFromBlock - 1 })), + ...cachedEvents, + ...(await commonGetPastEvents(contract, { ...options, fromBlock: cachedToBlock + 1 })) + ] + } else if (cachedFromBlock <= fromBlock && toBlock <= cachedToBlock) { + // requested: A.B + // cached: C.....D + logger.debug(`Cache hit for blocks ${fromBlock}...${toBlock}`) + result = cachedEvents.filter(e => fromBlock <= e.blockNumber && e.blockNumber <= toBlock) + } else if (fromBlock >= cachedFromBlock && toBlock > cachedToBlock) { + // requested: A...B + // cached: C...D + logger.debug(`Cache hit for blocks ${fromBlock}...${cachedToBlock}`) + logger.debug(`Fetching events for blocks ${cachedToBlock + 1}...${toBlock}`) + result = [ + ...cachedEvents.filter(e => e.blockNumber >= fromBlock), + ...(await commonGetPastEvents(contract, { ...options, fromBlock: cachedToBlock + 1 })) + ] + } else { + throw new Error( + `Something is broken with cache resolution for getPastEvents, + requested blocks ${fromBlock}...${toBlock}, + cached blocks ${cachedFromBlock}...${cachedToBlock}` + ) + } + + // it is not safe to cache events with too low block confirmations + // so, only events from finalized blocks are included into the cache + const safeToBlock = options.safeToBlock || toBlock + const cacheToSave = result.filter(e => e.blockNumber <= safeToBlock) + logger.debug( + `Saving events cache for ${MONITOR_BRIDGE_NAME}/${options.chain}/${contractAddr}/${eventSignature} on disk` + ) + writeCacheFile(cacheFile, { + fromBlock, + toBlock: safeToBlock, + events: cacheToSave + }) + return result +} + +function saveCache() { + if (isDirty) { + logger.debug('Saving cache on disk') + writeCacheFile(homeTxSendersCacheFile, cachedHomeTxSenders) + } +} + +module.exports = { + getHomeTxSender, + getPastEvents, + saveCache +} diff --git a/monitor/validators.js b/monitor/validators.js index e8f71dfc..ae32bad1 100644 --- a/monitor/validators.js +++ b/monitor/validators.js @@ -1,13 +1,12 @@ require('dotenv').config() -const Web3 = require('web3') +const Web3Utils = require('web3').utils const fetch = require('node-fetch') const logger = require('./logger')('validators') -const { getBridgeABIs, BRIDGE_VALIDATORS_ABI, getValidatorList, gasPriceFromSupplier } = require('../commons') -const { getBlockNumber } = require('./utils/contract') +const { getBridgeABIs, BRIDGE_VALIDATORS_ABI, gasPriceFromSupplier } = require('../commons') +const { web3Home, web3Foreign, getHomeBlockNumber, getForeignBlockNumber } = require('./utils/web3') +const { getValidatorList } = require('./utils/getValidatorsList') const { - COMMON_HOME_RPC_URL, - COMMON_FOREIGN_RPC_URL, COMMON_HOME_BRIDGE_ADDRESS, COMMON_FOREIGN_BRIDGE_ADDRESS, COMMON_HOME_GAS_PRICE_SUPPLIER_URL, @@ -19,19 +18,9 @@ const { COMMON_FOREIGN_GAS_PRICE_FALLBACK, COMMON_FOREIGN_GAS_PRICE_FACTOR } = process.env -const MONITOR_HOME_START_BLOCK = Number(process.env.MONITOR_HOME_START_BLOCK) || 0 -const MONITOR_FOREIGN_START_BLOCK = Number(process.env.MONITOR_FOREIGN_START_BLOCK) || 0 const MONITOR_VALIDATOR_HOME_TX_LIMIT = Number(process.env.MONITOR_VALIDATOR_HOME_TX_LIMIT) || 0 const MONITOR_VALIDATOR_FOREIGN_TX_LIMIT = Number(process.env.MONITOR_VALIDATOR_FOREIGN_TX_LIMIT) || 0 -const Web3Utils = Web3.utils - -const homeProvider = new Web3.providers.HttpProvider(COMMON_HOME_RPC_URL) -const web3Home = new Web3(homeProvider) - -const foreignProvider = new Web3.providers.HttpProvider(COMMON_FOREIGN_RPC_URL) -const web3Foreign = new Web3(foreignProvider) - const homeGasPriceSupplierOpts = { speedType: COMMON_HOME_GAS_PRICE_SPEED_TYPE, factor: COMMON_HOME_GAS_PRICE_FACTOR, @@ -58,7 +47,12 @@ async function main(bridgeMode) { const homeBridgeValidators = new web3Home.eth.Contract(BRIDGE_VALIDATORS_ABI, homeValidatorsAddress) logger.debug('getting last block numbers') - const [homeBlockNumber, foreignBlockNumber] = await getBlockNumber(web3Home, web3Foreign) + const homeBlockNumber = await getHomeBlockNumber() + const foreignBlockNumber = await getForeignBlockNumber() + const homeConfirmations = await homeBridge.methods.requiredBlockConfirmations().call() + const foreignConfirmations = await foreignBridge.methods.requiredBlockConfirmations().call() + const homeDelayedBlockNumber = homeBlockNumber - homeConfirmations + const foreignDelayedBlockNumber = foreignBlockNumber - foreignConfirmations logger.debug('calling foreignBridge.methods.validatorContract().call()') const foreignValidatorsAddress = await foreignBridge.methods.validatorContract().call() @@ -66,16 +60,18 @@ async function main(bridgeMode) { logger.debug('calling foreignBridgeValidators getValidatorList()') const foreignValidators = (await getValidatorList(foreignValidatorsAddress, web3Foreign.eth, { - from: MONITOR_FOREIGN_START_BLOCK, - to: foreignBlockNumber, - logger + toBlock: foreignBlockNumber, + logger, + chain: 'foreign', + safeToBlock: foreignDelayedBlockNumber })).map(web3Foreign.utils.toChecksumAddress) logger.debug('calling homeBridgeValidators getValidatorList()') const homeValidators = (await getValidatorList(homeValidatorsAddress, web3Home.eth, { - from: MONITOR_HOME_START_BLOCK, - to: homeBlockNumber, - logger + toBlock: homeBlockNumber, + logger, + chain: 'home', + safeToBlock: homeDelayedBlockNumber })).map(web3Home.utils.toChecksumAddress) const foreignVBalances = {} diff --git a/oracle-e2e/run-tests.sh b/oracle-e2e/run-tests.sh index 455f3fd2..2e05bcc0 100755 --- a/oracle-e2e/run-tests.sh +++ b/oracle-e2e/run-tests.sh @@ -1,8 +1,24 @@ cd $(dirname $0) -../e2e-commons/up.sh deploy blocks oracle oracle-validator-2 oracle-validator-3 +mode="$1" +case "$mode" in + amb) + script=./test/amb.js + ;; + native-to-erc) + script=./test/nativeToErc.js + ;; + erc-to-erc) + script=./test/ercToErc.js + ;; + erc-to-native) + script=./test/ercToNative.js + ;; +esac -docker-compose -f ../e2e-commons/docker-compose.yml run e2e yarn workspace oracle-e2e run start +MODE="$mode" ../e2e-commons/up.sh deploy blocks oracle oracle-validator-2 oracle-validator-3 + +docker-compose -f ../e2e-commons/docker-compose.yml run e2e yarn workspace oracle-e2e run start $script rc=$? ../e2e-commons/down.sh diff --git a/oracle-e2e/test/amb.js b/oracle-e2e/test/amb.js index 57c6c972..66c73c80 100644 --- a/oracle-e2e/test/amb.js +++ b/oracle-e2e/test/amb.js @@ -3,7 +3,7 @@ const assert = require('assert') const { user, homeRPC, foreignRPC, amb, validator } = require('../../e2e-commons/constants.json') const { uniformRetry } = require('../../e2e-commons/utils') const { BOX_ABI, HOME_AMB_ABI, FOREIGN_AMB_ABI } = require('../../commons') -const { setRequiredSignatures } = require('./utils') +const { delay, setRequiredSignatures } = require('./utils') const { toBN } = Web3.utils @@ -19,14 +19,17 @@ foreignWeb3.eth.accounts.wallet.add(user.privateKey) foreignWeb3.eth.accounts.wallet.add(validator.privateKey) const homeBox = new homeWeb3.eth.Contract(BOX_ABI, amb.homeBox) +const blockHomeBox = new homeWeb3.eth.Contract(BOX_ABI, amb.blockedHomeBox) const foreignBox = new foreignWeb3.eth.Contract(BOX_ABI, amb.foreignBox) const homeBridge = new homeWeb3.eth.Contract(HOME_AMB_ABI, COMMON_HOME_BRIDGE_ADDRESS) const foreignBridge = new foreignWeb3.eth.Contract(FOREIGN_AMB_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) describe('arbitrary message bridging', () => { + let requiredSignatures = 1 before(async () => { // Only 1 validator is used in ultimate tests if (process.env.ULTIMATE !== 'true') { + requiredSignatures = 2 // Set 2 required signatures for home bridge await setRequiredSignatures({ bridgeContract: homeBridge, @@ -76,6 +79,85 @@ describe('arbitrary message bridging', () => { } }) }) + + // allowance/block lists files are not mounted to the host during the ultimate test + if (process.env.ULTIMATE !== 'true') { + it('should confirm but not relay message from blocked contract', async () => { + const newValue = 4 + + const initialValue = await foreignBox.methods.value().call() + assert(!toBN(initialValue).eq(toBN(newValue)), 'initial value should be different from new value') + + const signatures = await homeBridge.getPastEvents('SignedForUserRequest', { + fromBlock: 0, + toBlock: 'latest' + }) + + await blockHomeBox.methods + .setValueOnOtherNetwork(newValue, amb.home, amb.foreignBox) + .send({ + from: user.address, + gas: '400000' + }) + .catch(e => { + console.error(e) + }) + + await delay(5000) + + const newSignatures = await homeBridge.getPastEvents('SignedForUserRequest', { + fromBlock: 0, + toBlock: 'latest' + }) + + assert( + newSignatures.length === signatures.length + requiredSignatures, + `Incorrect amount of signatures submitted, got ${newSignatures.length}, expected ${signatures.length + + requiredSignatures}` + ) + + const value = await foreignBox.methods.value().call() + assert(!toBN(value).eq(toBN(newValue)), 'Message should not be relayed by oracle automatically') + }) + } + + it('should confirm but not relay message from manual lane', async () => { + const newValue = 5 + + const initialValue = await foreignBox.methods.value().call() + assert(!toBN(initialValue).eq(toBN(newValue)), 'initial value should be different from new value') + + const signatures = await homeBridge.getPastEvents('SignedForUserRequest', { + fromBlock: 0, + toBlock: 'latest' + }) + + await homeBox.methods + .setValueOnOtherNetworkUsingManualLane(newValue, amb.home, amb.foreignBox) + .send({ + from: user.address, + gas: '400000' + }) + .catch(e => { + console.error(e) + }) + + await delay(5000) + + const newSignatures = await homeBridge.getPastEvents('SignedForUserRequest', { + fromBlock: 0, + toBlock: 'latest' + }) + + assert( + newSignatures.length === signatures.length + requiredSignatures, + `Incorrect amount of signatures submitted, got ${newSignatures.length}, expected ${signatures.length + + requiredSignatures}` + ) + + const value = await foreignBox.methods.value().call() + assert(!toBN(value).eq(toBN(newValue)), 'Message should not be relayed by oracle automatically') + }) }) }) describe('Foreign to Home', () => { diff --git a/oracle-e2e/test/utils.js b/oracle-e2e/test/utils.js index f1b85de0..48ab703e 100644 --- a/oracle-e2e/test/utils.js +++ b/oracle-e2e/test/utils.js @@ -1,5 +1,9 @@ const { BRIDGE_VALIDATORS_ABI } = require('../../commons') +async function delay(ms) { + return new Promise(res => setTimeout(res, ms)) +} + const setRequiredSignatures = async ({ bridgeContract, web3, requiredSignatures, options }) => { const validatorAddress = await bridgeContract.methods.validatorContract().call() const validatorContract = new web3.eth.Contract(BRIDGE_VALIDATORS_ABI, validatorAddress) @@ -8,5 +12,6 @@ const setRequiredSignatures = async ({ bridgeContract, web3, requiredSignatures, } module.exports = { + delay, setRequiredSignatures } diff --git a/oracle/.env.example b/oracle/.env.example index 0d5b45f2..d3301b5e 100644 --- a/oracle/.env.example +++ b/oracle/.env.example @@ -29,6 +29,7 @@ ORACLE_FOREIGN_START_BLOCK= ORACLE_LOG_LEVEL=debug ORACLE_MAX_PROCESSING_TIME=20000 +ORACLE_RPC_REQUEST_TIMEOUT=5000 ORACLE_HOME_TO_FOREIGN_ALLOWANCE_LIST=access-lists/allowance_list.txt ORACLE_HOME_TO_FOREIGN_BLOCK_LIST=access-lists/block_list.txt diff --git a/oracle/config/foreign-sender.config.js b/oracle/config/foreign-sender.config.js index 774f77ed..4234ee06 100644 --- a/oracle/config/foreign-sender.config.js +++ b/oracle/config/foreign-sender.config.js @@ -1,6 +1,6 @@ const baseConfig = require('./base.config') -const { web3Foreign } = require('../src/services/web3') +const { web3Foreign, web3ForeignRedundant } = require('../src/services/web3') module.exports = { ...baseConfig.bridgeConfig, @@ -8,5 +8,6 @@ module.exports = { oldQueue: 'foreign', id: 'foreign', name: 'sender-foreign', - web3: web3Foreign + web3: web3Foreign, + web3Redundant: web3ForeignRedundant } diff --git a/oracle/config/home-sender.config.js b/oracle/config/home-sender.config.js index aed9fc9d..51d9084e 100644 --- a/oracle/config/home-sender.config.js +++ b/oracle/config/home-sender.config.js @@ -1,6 +1,6 @@ const baseConfig = require('./base.config') -const { web3Home } = require('../src/services/web3') +const { web3Home, web3HomeRedundant } = require('../src/services/web3') module.exports = { ...baseConfig.bridgeConfig, @@ -8,5 +8,6 @@ module.exports = { oldQueue: 'home', id: 'home', name: 'sender-home', - web3: web3Home + web3: web3Home, + web3Redundant: web3HomeRedundant } diff --git a/oracle/package.json b/oracle/package.json index 1329b44e..77c2a600 100644 --- a/oracle/package.json +++ b/oracle/package.json @@ -26,15 +26,13 @@ "amqplib": "^0.5.2", "bignumber.js": "^7.2.1", "dotenv": "^5.0.1", - "http-list-provider": "0.0.5", "ioredis": "^3.2.2", "node-fetch": "^2.1.2", "pino": "^4.17.3", "pino-pretty": "^2.0.1", "promise-limit": "^2.7.0", "promise-retry": "^1.1.1", - "web3": "1.0.0-beta.34", - "web3-utils": "1.0.0-beta.34" + "web3": "^1.3.0" }, "devDependencies": { "bn-chai": "^1.0.1", diff --git a/oracle/scripts/erc20_to_erc20/sendForeign.js b/oracle/scripts/erc20_to_erc20/sendForeign.js index 390406dc..4928ac49 100644 --- a/oracle/scripts/erc20_to_erc20/sendForeign.js +++ b/oracle/scripts/erc20_to_erc20/sendForeign.js @@ -1,8 +1,7 @@ require('../../env') -const Web3 = require('web3') -const Web3Utils = require('web3-utils') -const rpcUrlsManager = require('../../src/services/getRpcUrlsManager') -const { sendTx, sendRawTx } = require('../../src/tx/sendTx') +const { toWei } = require('web3').utils +const { web3Foreign } = require('../../src/services/web3') +const { sendTx } = require('../../src/tx/sendTx') const { ERC20_ABI } = require('../../../commons') const { @@ -17,37 +16,23 @@ const NUMBER_OF_DEPOSITS_TO_SEND = process.argv[2] || process.env.NUMBER_OF_DEPO const { FOREIGN_ERC_TO_ERC_ABI } = require('../../../commons') -const foreignRpcUrl = rpcUrlsManager.foreignUrls[0] -const foreignProvider = new Web3.providers.HttpProvider(foreignRpcUrl) -const web3Foreign = new Web3(foreignProvider) - async function main() { const bridge = new web3Foreign.eth.Contract(FOREIGN_ERC_TO_ERC_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) const bridgeableTokenAddress = await bridge.methods.erc20token().call() const poa20 = new web3Foreign.eth.Contract(ERC20_ABI, bridgeableTokenAddress) try { - const foreignChainId = await sendRawTx({ - chain: 'foreign', - params: [], - method: 'net_version' - }) - let nonce = await sendRawTx({ - chain: 'foreign', - method: 'eth_getTransactionCount', - params: [USER_ADDRESS, 'latest'] - }) - nonce = Web3Utils.hexToNumber(nonce) + const foreignChainId = await web3Foreign.eth.getChainId() + let nonce = await web3Foreign.eth.getTransactionCount(USER_ADDRESS) let actualSent = 0 for (let i = 0; i < Number(NUMBER_OF_DEPOSITS_TO_SEND); i++) { const gasLimit = await poa20.methods - .transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, Web3Utils.toWei(FOREIGN_MIN_AMOUNT_PER_TX)) + .transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, toWei(FOREIGN_MIN_AMOUNT_PER_TX)) .estimateGas({ from: USER_ADDRESS }) const data = await poa20.methods - .transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, Web3Utils.toWei(FOREIGN_MIN_AMOUNT_PER_TX)) + .transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, toWei(FOREIGN_MIN_AMOUNT_PER_TX)) .encodeABI({ from: USER_ADDRESS }) const txHash = await sendTx({ - chain: 'foreign', privateKey: USER_ADDRESS_PRIVATE_KEY, data, nonce, diff --git a/oracle/scripts/erc20_to_erc20/sendHome.js b/oracle/scripts/erc20_to_erc20/sendHome.js index 816b9a19..f31c8454 100644 --- a/oracle/scripts/erc20_to_erc20/sendHome.js +++ b/oracle/scripts/erc20_to_erc20/sendHome.js @@ -1,8 +1,7 @@ require('../../env') -const Web3 = require('web3') -const Web3Utils = require('web3-utils') -const rpcUrlsManager = require('../../src/services/getRpcUrlsManager') -const { sendTx, sendRawTx } = require('../../src/tx/sendTx') +const { toWei } = require('web3').utils +const { web3Home } = require('../../src/services/web3') +const { sendTx } = require('../../src/tx/sendTx') const { isValidAmount } = require('../utils/utils') const { HOME_ERC_TO_ERC_ABI } = require('../../../commons') @@ -46,10 +45,6 @@ const BRIDGEABLE_TOKEN_ABI = [ } ] -const homeRpcUrl = rpcUrlsManager.homeUrls[0] -const homeProvider = new Web3.providers.HttpProvider(homeRpcUrl) -const web3Home = new Web3(homeProvider) - async function main() { const bridge = new web3Home.eth.Contract(HOME_ERC_TO_ERC_ABI, COMMON_HOME_BRIDGE_ADDRESS) const BRIDGEABLE_TOKEN_ADDRESS = await bridge.methods.erc677token().call() @@ -58,27 +53,17 @@ async function main() { try { await isValidAmount(HOME_MIN_AMOUNT_PER_TX, bridge) - const homeChainId = await sendRawTx({ - chain: 'home', - params: [], - method: 'net_version' - }) - let nonce = await sendRawTx({ - chain: 'home', - method: 'eth_getTransactionCount', - params: [USER_ADDRESS, 'latest'] - }) - nonce = Web3Utils.hexToNumber(nonce) + const homeChainId = await web3Home.eth.getChainId() + let nonce = await web3Home.eth.getTransactionCount(USER_ADDRESS) let actualSent = 0 for (let i = 0; i < Number(NUMBER_OF_WITHDRAWALS_TO_SEND); i++) { const gasLimit = await erc677.methods - .transferAndCall(COMMON_HOME_BRIDGE_ADDRESS, Web3Utils.toWei(HOME_MIN_AMOUNT_PER_TX), '0x') + .transferAndCall(COMMON_HOME_BRIDGE_ADDRESS, toWei(HOME_MIN_AMOUNT_PER_TX), '0x') .estimateGas({ from: USER_ADDRESS }) const data = await erc677.methods - .transferAndCall(COMMON_HOME_BRIDGE_ADDRESS, Web3Utils.toWei(HOME_MIN_AMOUNT_PER_TX), '0x') + .transferAndCall(COMMON_HOME_BRIDGE_ADDRESS, toWei(HOME_MIN_AMOUNT_PER_TX), '0x') .encodeABI({ from: USER_ADDRESS }) const txHash = await sendTx({ - chain: 'home', privateKey: USER_ADDRESS_PRIVATE_KEY, data, nonce, diff --git a/oracle/scripts/erc20_to_native/sendForeign.js b/oracle/scripts/erc20_to_native/sendForeign.js index 3b502da5..d6922908 100644 --- a/oracle/scripts/erc20_to_native/sendForeign.js +++ b/oracle/scripts/erc20_to_native/sendForeign.js @@ -1,8 +1,7 @@ require('../../env') -const Web3 = require('web3') -const Web3Utils = require('web3-utils') -const rpcUrlsManager = require('../../src/services/getRpcUrlsManager') -const { sendTx, sendRawTx } = require('../../src/tx/sendTx') +const { toWei } = require('web3').utils +const { web3Foreign } = require('../../src/services/web3') +const { sendTx } = require('../../src/tx/sendTx') const { USER_ADDRESS, @@ -16,37 +15,23 @@ const NUMBER_OF_DEPOSITS_TO_SEND = process.argv[2] || process.env.NUMBER_OF_DEPO const { ERC20_ABI, FOREIGN_ERC_TO_NATIVE_ABI } = require('../../../commons') -const foreignRpcUrl = rpcUrlsManager.foreignUrls[0] -const foreignProvider = new Web3.providers.HttpProvider(foreignRpcUrl) -const web3Foreign = new Web3(foreignProvider) - async function main() { const bridge = new web3Foreign.eth.Contract(FOREIGN_ERC_TO_NATIVE_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) const bridgeableTokenAddress = await bridge.methods.erc20token().call() const poa20 = new web3Foreign.eth.Contract(ERC20_ABI, bridgeableTokenAddress) try { - const foreignChainId = await sendRawTx({ - chain: 'foreign', - params: [], - method: 'net_version' - }) - let nonce = await sendRawTx({ - chain: 'foreign', - method: 'eth_getTransactionCount', - params: [USER_ADDRESS, 'latest'] - }) - nonce = Web3Utils.hexToNumber(nonce) + const foreignChainId = await web3Foreign.eth.getChainId() + let nonce = await web3Foreign.eth.getTransactionCount(USER_ADDRESS) let actualSent = 0 for (let i = 0; i < Number(NUMBER_OF_DEPOSITS_TO_SEND); i++) { const gasLimit = await poa20.methods - .transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, Web3Utils.toWei(FOREIGN_MIN_AMOUNT_PER_TX)) + .transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, toWei(FOREIGN_MIN_AMOUNT_PER_TX)) .estimateGas({ from: USER_ADDRESS }) const data = await poa20.methods - .transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, Web3Utils.toWei(FOREIGN_MIN_AMOUNT_PER_TX)) + .transfer(COMMON_FOREIGN_BRIDGE_ADDRESS, toWei(FOREIGN_MIN_AMOUNT_PER_TX)) .encodeABI({ from: USER_ADDRESS }) const txHash = await sendTx({ - chain: 'foreign', privateKey: USER_ADDRESS_PRIVATE_KEY, data, nonce, diff --git a/oracle/scripts/erc20_to_native/sendHome.js b/oracle/scripts/erc20_to_native/sendHome.js index 49ba234e..327c695f 100644 --- a/oracle/scripts/erc20_to_native/sendHome.js +++ b/oracle/scripts/erc20_to_native/sendHome.js @@ -1,7 +1,6 @@ require('../../env') -const Web3Utils = require('web3-utils') const { web3Home } = require('../../src/services/web3') -const { sendTx, sendRawTx } = require('../../src/tx/sendTx') +const { sendTx } = require('../../src/tx/sendTx') const { isValidAmount } = require('../utils/utils') const { HOME_ERC_TO_NATIVE_ABI } = require('../../../commons') @@ -21,21 +20,11 @@ async function main() { try { await isValidAmount(HOME_MIN_AMOUNT_PER_TX, bridge) - const homeChainId = await sendRawTx({ - chain: 'home', - params: [], - method: 'net_version' - }) - let nonce = await sendRawTx({ - chain: 'home', - method: 'eth_getTransactionCount', - params: [USER_ADDRESS, 'latest'] - }) - nonce = Web3Utils.hexToNumber(nonce) + const homeChainId = await web3Home.eth.getChainId() + let nonce = await web3Home.eth.getTransactionCount(USER_ADDRESS) let actualSent = 0 for (let i = 0; i < Number(NUMBER_OF_DEPOSITS_TO_SEND); i++) { const txHash = await sendTx({ - chain: 'home', privateKey: USER_ADDRESS_PRIVATE_KEY, data: '0x', nonce, diff --git a/oracle/scripts/getValidatorStartBlocks.js b/oracle/scripts/getValidatorStartBlocks.js index c61a4bad..4276e524 100644 --- a/oracle/scripts/getValidatorStartBlocks.js +++ b/oracle/scripts/getValidatorStartBlocks.js @@ -1,23 +1,20 @@ require('../env') -const Web3 = require('web3') const { BRIDGE_VALIDATORS_ABI } = require('../../commons') -const rpcUrlsManager = require('../src/services/getRpcUrlsManager') +const { web3Home, web3Foreign } = require('../src/services/web3') const { bridgeConfig } = require('../config/base.config') const homeABI = bridgeConfig.homeBridgeAbi const foreignABI = bridgeConfig.foreignBridgeAbi -async function getStartBlock(rpcUrl, bridgeAddress, bridgeAbi) { +async function getStartBlock(web3, bridgeAddress, bridgeAbi) { try { - const web3Provider = new Web3.providers.HttpProvider(rpcUrl) - const web3Instance = new Web3(web3Provider) - const bridgeContract = new web3Instance.eth.Contract(bridgeAbi, bridgeAddress) + const bridgeContract = new web3.eth.Contract(bridgeAbi, bridgeAddress) const deployedAtBlock = await bridgeContract.methods.deployedAtBlock().call() const validatorContractAddress = await bridgeContract.methods.validatorContract().call() - const validatorContract = new web3Instance.eth.Contract(BRIDGE_VALIDATORS_ABI, validatorContractAddress) + const validatorContract = new web3.eth.Contract(BRIDGE_VALIDATORS_ABI, validatorContractAddress) const validatorDeployedAtBlock = await validatorContract.methods.deployedAtBlock().call() @@ -35,10 +32,8 @@ async function getStartBlock(rpcUrl, bridgeAddress, bridgeAbi) { async function main() { const { COMMON_HOME_BRIDGE_ADDRESS, COMMON_FOREIGN_BRIDGE_ADDRESS } = process.env - const homeRpcUrl = rpcUrlsManager.homeUrls[0] - const foreignRpcUrl = rpcUrlsManager.foreignUrls[0] - const homeStartBlock = await getStartBlock(homeRpcUrl, COMMON_HOME_BRIDGE_ADDRESS, homeABI) - const foreignStartBlock = await getStartBlock(foreignRpcUrl, COMMON_FOREIGN_BRIDGE_ADDRESS, foreignABI) + const homeStartBlock = await getStartBlock(web3Home, COMMON_HOME_BRIDGE_ADDRESS, homeABI) + const foreignStartBlock = await getStartBlock(web3Foreign, COMMON_FOREIGN_BRIDGE_ADDRESS, foreignABI) const result = { homeStartBlock, foreignStartBlock diff --git a/oracle/scripts/initialChecks.js b/oracle/scripts/initialChecks.js index 45b9bded..57fa3305 100644 --- a/oracle/scripts/initialChecks.js +++ b/oracle/scripts/initialChecks.js @@ -1,5 +1,4 @@ require('../env') -const Web3 = require('web3') const { getTokensState } = require('../src/utils/tokenState') const { ERC677_BRIDGE_TOKEN_ABI, @@ -7,6 +6,7 @@ const { FOREIGN_ERC_TO_NATIVE_ABI, getTokenType } = require('../../commons') +const { web3Foreign } = require('../src/services/web3') const emptyLogger = { debug: () => {}, @@ -14,26 +14,25 @@ const emptyLogger = { } async function initialChecks() { - const { ORACLE_BRIDGE_MODE, COMMON_FOREIGN_RPC_URL, COMMON_FOREIGN_BRIDGE_ADDRESS } = process.env + const { ORACLE_BRIDGE_MODE, COMMON_FOREIGN_BRIDGE_ADDRESS } = process.env let result = {} - const foreignWeb3 = new Web3(new Web3.providers.HttpProvider(COMMON_FOREIGN_RPC_URL)) if (ORACLE_BRIDGE_MODE === 'ERC_TO_ERC') { - const bridge = new foreignWeb3.eth.Contract(FOREIGN_ERC_TO_ERC_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) + const bridge = new web3Foreign.eth.Contract(FOREIGN_ERC_TO_ERC_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) result.bridgeableTokenAddress = await bridge.methods.erc20token().call() } else if (ORACLE_BRIDGE_MODE === 'ERC_TO_NATIVE') { - const bridge = new foreignWeb3.eth.Contract(FOREIGN_ERC_TO_NATIVE_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) + const bridge = new web3Foreign.eth.Contract(FOREIGN_ERC_TO_NATIVE_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS) result = await getTokensState(bridge, emptyLogger) } if (ORACLE_BRIDGE_MODE === 'ERC_TO_ERC') { - const bridgeTokenContract = new foreignWeb3.eth.Contract(ERC677_BRIDGE_TOKEN_ABI, result.bridgeableTokenAddress) + const bridgeTokenContract = new web3Foreign.eth.Contract(ERC677_BRIDGE_TOKEN_ABI, result.bridgeableTokenAddress) result.foreignERC = await getTokenType(bridgeTokenContract, COMMON_FOREIGN_BRIDGE_ADDRESS) } console.log(JSON.stringify(result)) return result } -initialChecks() +const result = initialChecks() -module.exports = initialChecks +module.exports = result diff --git a/oracle/scripts/native_to_erc20/sendForeign.js b/oracle/scripts/native_to_erc20/sendForeign.js index a7f97583..6500fb78 100644 --- a/oracle/scripts/native_to_erc20/sendForeign.js +++ b/oracle/scripts/native_to_erc20/sendForeign.js @@ -1,7 +1,7 @@ require('../../env') -const Web3Utils = require('web3-utils') +const { toWei } = require('web3').utils const { web3Foreign } = require('../../src/services/web3') -const { sendTx, sendRawTx } = require('../../src/tx/sendTx') +const { sendTx } = require('../../src/tx/sendTx') const { isValidAmount } = require('../utils/utils') const { FOREIGN_NATIVE_TO_ERC_ABI } = require('../../../commons') @@ -53,27 +53,17 @@ async function main() { try { await isValidAmount(FOREIGN_MIN_AMOUNT_PER_TX, bridge) - const foreignChainId = await sendRawTx({ - chain: 'foreign', - params: [], - method: 'net_version' - }) - let nonce = await sendRawTx({ - chain: 'foreign', - method: 'eth_getTransactionCount', - params: [USER_ADDRESS, 'latest'] - }) - nonce = Web3Utils.hexToNumber(nonce) + const foreignChainId = await web3Foreign.eth.getChainId() + let nonce = await web3Foreign.eth.getTransactionCount(USER_ADDRESS) let actualSent = 0 for (let i = 0; i < Number(NUMBER_OF_WITHDRAWALS_TO_SEND); i++) { const gasLimit = await poa20.methods - .transferAndCall(COMMON_FOREIGN_BRIDGE_ADDRESS, Web3Utils.toWei(FOREIGN_MIN_AMOUNT_PER_TX), '0x') + .transferAndCall(COMMON_FOREIGN_BRIDGE_ADDRESS, toWei(FOREIGN_MIN_AMOUNT_PER_TX), '0x') .estimateGas({ from: USER_ADDRESS }) const data = await poa20.methods - .transferAndCall(COMMON_FOREIGN_BRIDGE_ADDRESS, Web3Utils.toWei(FOREIGN_MIN_AMOUNT_PER_TX), '0x') + .transferAndCall(COMMON_FOREIGN_BRIDGE_ADDRESS, toWei(FOREIGN_MIN_AMOUNT_PER_TX), '0x') .encodeABI({ from: USER_ADDRESS }) const txHash = await sendTx({ - chain: 'foreign', privateKey: USER_ADDRESS_PRIVATE_KEY, data, nonce, diff --git a/oracle/scripts/native_to_erc20/sendHome.js b/oracle/scripts/native_to_erc20/sendHome.js index 5f3e6ce6..85a32814 100644 --- a/oracle/scripts/native_to_erc20/sendHome.js +++ b/oracle/scripts/native_to_erc20/sendHome.js @@ -1,7 +1,6 @@ require('../../env') -const Web3Utils = require('web3-utils') const { web3Home } = require('../../src/services/web3') -const { sendTx, sendRawTx } = require('../../src/tx/sendTx') +const { sendTx } = require('../../src/tx/sendTx') const { isValidAmount } = require('../utils/utils') const { HOME_NATIVE_TO_ERC_ABI } = require('../../../commons') @@ -21,21 +20,11 @@ async function main() { try { await isValidAmount(HOME_MIN_AMOUNT_PER_TX, bridge) - const homeChainId = await sendRawTx({ - chain: 'home', - params: [], - method: 'net_version' - }) - let nonce = await sendRawTx({ - chain: 'home', - method: 'eth_getTransactionCount', - params: [USER_ADDRESS, 'latest'] - }) - nonce = Web3Utils.hexToNumber(nonce) + const homeChainId = await web3Home.eth.getChainId() + let nonce = await web3Home.eth.getTransactionCount(USER_ADDRESS) let actualSent = 0 for (let i = 0; i < Number(NUMBER_OF_DEPOSITS_TO_SEND); i++) { const txHash = await sendTx({ - chain: 'home', privateKey: USER_ADDRESS_PRIVATE_KEY, data: '0x', nonce, diff --git a/oracle/scripts/utils/utils.js b/oracle/scripts/utils/utils.js index 458746da..f995447e 100644 --- a/oracle/scripts/utils/utils.js +++ b/oracle/scripts/utils/utils.js @@ -1,8 +1,8 @@ -const Web3Utils = require('web3-utils') +const { fromWei } = require('web3').utils async function getMinPerTxLimit(bridge) { const minPerTx = await bridge.methods.minPerTx().call() - return Web3Utils.fromWei(minPerTx) + return fromWei(minPerTx) } async function isValidAmount(amount, bridge) { diff --git a/oracle/src/confirmRelay.js b/oracle/src/confirmRelay.js index 15eeb70e..f4ca59f6 100644 --- a/oracle/src/confirmRelay.js +++ b/oracle/src/confirmRelay.js @@ -3,7 +3,6 @@ const path = require('path') const { isAttached, connectWatcherToQueue, connection } = require('./services/amqpClient') const logger = require('./services/logger') const GasPrice = require('./services/gasPrice') -const rpcUrlsManager = require('./services/getRpcUrlsManager') const { getNonce, getChainId, getEventsFromTx } = require('./tx/web3') const { sendTx } = require('./tx/sendTx') const { checkHTTPS, watchdog, syncForEach, addExtraGas } = require('./utils/utils') @@ -37,8 +36,7 @@ async function initialize() { try { const checkHttps = checkHTTPS(ORACLE_ALLOW_HTTP_FOR_RPC, logger) - rpcUrlsManager.homeUrls.forEach(checkHttps('home')) - rpcUrlsManager.foreignUrls.forEach(checkHttps('foreign')) + web3Instance.currentProvider.urls.forEach(checkHttps(config.chain)) attached = await isAttached() if (attached) { @@ -139,7 +137,7 @@ async function main({ sendJob, txHash }) { async function sendJobTx(jobs) { const gasPrice = await GasPrice.start(config.chain, true) - const chainId = await getChainId(config.chain) + const chainId = await getChainId(web3Instance) let nonce = await getNonce(web3Instance, ORACLE_VALIDATOR_ADDRESS) await syncForEach(jobs, async job => { @@ -153,7 +151,6 @@ async function sendJobTx(jobs) { try { logger.info(`Sending transaction with nonce ${nonce}`) const txHash = await sendTx({ - chain: config.chain, data: job.data, nonce, gasPrice: gasPrice.toString(10), diff --git a/oracle/src/events/processAMBAffirmationRequests/estimateGas.js b/oracle/src/events/processAMBAffirmationRequests/estimateGas.js index c8ea4470..40332d4f 100644 --- a/oracle/src/events/processAMBAffirmationRequests/estimateGas.js +++ b/oracle/src/events/processAMBAffirmationRequests/estimateGas.js @@ -1,4 +1,4 @@ -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../../services/HttpListProvider') const { AlreadyProcessedError, AlreadySignedError, InvalidValidatorError } = require('../../utils/errors') const logger = require('../../services/logger').child({ module: 'processAffirmationRequests:estimateGas' diff --git a/oracle/src/events/processAMBAffirmationRequests/index.js b/oracle/src/events/processAMBAffirmationRequests/index.js index cf0b61a6..94c91c25 100644 --- a/oracle/src/events/processAMBAffirmationRequests/index.js +++ b/oracle/src/events/processAMBAffirmationRequests/index.js @@ -1,6 +1,6 @@ require('dotenv').config() -const { HttpListProviderError } = require('http-list-provider') const promiseLimit = require('promise-limit') +const { HttpListProviderError } = require('../../services/HttpListProvider') const rootLogger = require('../../services/logger') const { web3Home } = require('../../services/web3') const bridgeValidatorsABI = require('../../../../contracts/build/contracts/BridgeValidators').abi diff --git a/oracle/src/events/processAMBCollectedSignatures/estimateGas.js b/oracle/src/events/processAMBCollectedSignatures/estimateGas.js index f14134d6..89732676 100644 --- a/oracle/src/events/processAMBCollectedSignatures/estimateGas.js +++ b/oracle/src/events/processAMBCollectedSignatures/estimateGas.js @@ -1,5 +1,5 @@ const Web3 = require('web3') -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../../services/HttpListProvider') const { AlreadyProcessedError, IncompatibleContractError, InvalidValidatorError } = require('../../utils/errors') const logger = require('../../services/logger').child({ module: 'processCollectedSignatures:estimateGas' diff --git a/oracle/src/events/processAMBCollectedSignatures/index.js b/oracle/src/events/processAMBCollectedSignatures/index.js index 05af5397..bc719f25 100644 --- a/oracle/src/events/processAMBCollectedSignatures/index.js +++ b/oracle/src/events/processAMBCollectedSignatures/index.js @@ -1,10 +1,11 @@ require('dotenv').config() const promiseLimit = require('promise-limit') -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../../services/HttpListProvider') const bridgeValidatorsABI = require('../../../../contracts/build/contracts/BridgeValidators').abi const rootLogger = require('../../services/logger') const { web3Home, web3Foreign } = require('../../services/web3') const { signatureToVRS, packSignatures } = require('../../utils/message') +const { readAccessListFile } = require('../../utils/utils') const { parseAMBMessage } = require('../../../../commons') const estimateGas = require('./estimateGas') const { AlreadyProcessedError, IncompatibleContractError, InvalidValidatorError } = require('../../utils/errors') @@ -12,7 +13,11 @@ const { MAX_CONCURRENT_EVENTS, EXTRA_GAS_ABSOLUTE } = require('../../utils/const const limit = promiseLimit(MAX_CONCURRENT_EVENTS) -const { ORACLE_ALWAYS_RELAY_SIGNATURES } = process.env +const { + ORACLE_HOME_TO_FOREIGN_ALLOWANCE_LIST, + ORACLE_HOME_TO_FOREIGN_BLOCK_LIST, + ORACLE_ALWAYS_RELAY_SIGNATURES +} = process.env let validatorContract = null @@ -50,6 +55,41 @@ function processCollectedSignaturesBuilder(config) { logger.info(`Processing CollectedSignatures ${colSignature.transactionHash}`) const message = await homeBridge.methods.message(messageHash).call() + const parsedMessage = parseAMBMessage(message) + + if (ORACLE_HOME_TO_FOREIGN_ALLOWANCE_LIST || ORACLE_HOME_TO_FOREIGN_BLOCK_LIST) { + const sender = parsedMessage.sender.toLowerCase() + const executor = parsedMessage.executor.toLowerCase() + + if (ORACLE_HOME_TO_FOREIGN_ALLOWANCE_LIST) { + const allowanceList = await readAccessListFile(ORACLE_HOME_TO_FOREIGN_ALLOWANCE_LIST, logger) + if (!allowanceList.includes(executor) && !allowanceList.includes(sender)) { + logger.info( + { sender, executor }, + 'Validator skips a message. Neither sender nor executor addresses are in the allowance list.' + ) + return + } + } else if (ORACLE_HOME_TO_FOREIGN_BLOCK_LIST) { + const blockList = await readAccessListFile(ORACLE_HOME_TO_FOREIGN_BLOCK_LIST, logger) + if (blockList.includes(executor)) { + logger.info({ executor }, 'Validator skips a message. Executor address is in the block list.') + return + } + if (blockList.includes(sender)) { + logger.info({ sender }, 'Validator skips a message. Sender address is in the block list.') + return + } + } + } + + if (parsedMessage.decodedDataType.manualLane) { + logger.info( + { dataType: parsedMessage.dataType }, + 'Validator skips a message. Message was forwarded to the manual lane by the extension' + ) + return + } logger.debug({ NumberOfCollectedSignatures }, 'Number of signatures to get') diff --git a/oracle/src/events/processAMBSignatureRequests/index.js b/oracle/src/events/processAMBSignatureRequests/index.js index 0efc3c03..0840768d 100644 --- a/oracle/src/events/processAMBSignatureRequests/index.js +++ b/oracle/src/events/processAMBSignatureRequests/index.js @@ -1,6 +1,6 @@ require('dotenv').config() const promiseLimit = require('promise-limit') -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../../services/HttpListProvider') const bridgeValidatorsABI = require('../../../../contracts/build/contracts/BridgeValidators').abi const rootLogger = require('../../services/logger') const { web3Home } = require('../../services/web3') diff --git a/oracle/src/events/processAffirmationRequests/estimateGas.js b/oracle/src/events/processAffirmationRequests/estimateGas.js index 82cbf792..f49ae4e5 100644 --- a/oracle/src/events/processAffirmationRequests/estimateGas.js +++ b/oracle/src/events/processAffirmationRequests/estimateGas.js @@ -1,4 +1,4 @@ -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../../services/HttpListProvider') const { AlreadyProcessedError, AlreadySignedError, InvalidValidatorError } = require('../../utils/errors') const logger = require('../../services/logger').child({ module: 'processAffirmationRequests:estimateGas' diff --git a/oracle/src/events/processAffirmationRequests/index.js b/oracle/src/events/processAffirmationRequests/index.js index d7f198ba..5f89d631 100644 --- a/oracle/src/events/processAffirmationRequests/index.js +++ b/oracle/src/events/processAffirmationRequests/index.js @@ -1,6 +1,6 @@ require('../../../env') const promiseLimit = require('promise-limit') -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../../services/HttpListProvider') const rootLogger = require('../../services/logger') const { web3Home } = require('../../services/web3') diff --git a/oracle/src/events/processCollectedSignatures/estimateGas.js b/oracle/src/events/processCollectedSignatures/estimateGas.js index cad273d6..dae22325 100644 --- a/oracle/src/events/processCollectedSignatures/estimateGas.js +++ b/oracle/src/events/processCollectedSignatures/estimateGas.js @@ -1,5 +1,5 @@ const Web3 = require('web3') -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../../services/HttpListProvider') const { AlreadyProcessedError, IncompatibleContractError, InvalidValidatorError } = require('../../utils/errors') const { parseMessage } = require('../../utils/message') const logger = require('../../services/logger').child({ diff --git a/oracle/src/events/processCollectedSignatures/index.js b/oracle/src/events/processCollectedSignatures/index.js index 91e21ba4..75ecc9de 100644 --- a/oracle/src/events/processCollectedSignatures/index.js +++ b/oracle/src/events/processCollectedSignatures/index.js @@ -1,6 +1,6 @@ require('../../../env') const promiseLimit = require('promise-limit') -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../../services/HttpListProvider') const { BRIDGE_VALIDATORS_ABI } = require('../../../../commons') const rootLogger = require('../../services/logger') const { web3Home, web3Foreign } = require('../../services/web3') diff --git a/oracle/src/events/processSignatureRequests/estimateGas.js b/oracle/src/events/processSignatureRequests/estimateGas.js index 79a3523d..374e0817 100644 --- a/oracle/src/events/processSignatureRequests/estimateGas.js +++ b/oracle/src/events/processSignatureRequests/estimateGas.js @@ -1,4 +1,4 @@ -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../../services/HttpListProvider') const { AlreadyProcessedError, AlreadySignedError, InvalidValidatorError } = require('../../utils/errors') const logger = require('../../services/logger').child({ module: 'processSignatureRequests:estimateGas' diff --git a/oracle/src/events/processSignatureRequests/index.js b/oracle/src/events/processSignatureRequests/index.js index 9a465044..81e955e7 100644 --- a/oracle/src/events/processSignatureRequests/index.js +++ b/oracle/src/events/processSignatureRequests/index.js @@ -1,6 +1,6 @@ require('../../../env') const promiseLimit = require('promise-limit') -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../../services/HttpListProvider') const { BRIDGE_VALIDATORS_ABI } = require('../../../../commons') const rootLogger = require('../../services/logger') const { web3Home } = require('../../services/web3') diff --git a/oracle/src/events/processTransfers/index.js b/oracle/src/events/processTransfers/index.js index 0b8d8c93..074827c4 100644 --- a/oracle/src/events/processTransfers/index.js +++ b/oracle/src/events/processTransfers/index.js @@ -1,6 +1,6 @@ require('../../../env') const promiseLimit = require('promise-limit') -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../../services/HttpListProvider') const { BRIDGE_VALIDATORS_ABI, ZERO_ADDRESS } = require('../../../../commons') const rootLogger = require('../../services/logger') const { web3Home, web3Foreign } = require('../../services/web3') diff --git a/oracle/src/sender.js b/oracle/src/sender.js index 8ccc1af1..5eb51af6 100644 --- a/oracle/src/sender.js +++ b/oracle/src/sender.js @@ -4,7 +4,6 @@ const { connectSenderToQueue } = require('./services/amqpClient') const { redis } = require('./services/redisClient') const GasPrice = require('./services/gasPrice') const logger = require('./services/logger') -const rpcUrlsManager = require('./services/getRpcUrlsManager') const { sendTx } = require('./tx/sendTx') const { getNonce, getChainId } = require('./tx/web3') const { @@ -18,7 +17,7 @@ const { } = require('./utils/utils') const { EXIT_CODES, EXTRA_GAS_PERCENTAGE, MAX_GAS_LIMIT } = require('./utils/constants') -const { ORACLE_VALIDATOR_ADDRESS_PRIVATE_KEY } = process.env +const { ORACLE_VALIDATOR_ADDRESS_PRIVATE_KEY, ORACLE_TX_REDUNDANCY } = process.env const ORACLE_VALIDATOR_ADDRESS = privateKeyToAddress(ORACLE_VALIDATOR_ADDRESS_PRIVATE_KEY) @@ -30,6 +29,7 @@ if (process.argv.length < 3) { const config = require(path.join('../config/', process.argv[2])) const web3Instance = config.web3 +const web3Redundant = ORACLE_TX_REDUNDANCY === 'true' ? config.web3Redundant : config.web3 const nonceKey = `${config.id}:nonce` let chainId = 0 @@ -37,12 +37,11 @@ async function initialize() { try { const checkHttps = checkHTTPS(process.env.ORACLE_ALLOW_HTTP_FOR_RPC, logger) - rpcUrlsManager.homeUrls.forEach(checkHttps('home')) - rpcUrlsManager.foreignUrls.forEach(checkHttps('foreign')) + web3Instance.currentProvider.urls.forEach(checkHttps(config.chain)) GasPrice.start(config.id) - chainId = await getChainId(config.id) + chainId = await getChainId(web3Instance) connectSenderToQueue({ queueName: config.queue, oldQueueName: config.oldQueue, @@ -144,7 +143,6 @@ async function main({ msg, ackMsg, nackMsg, channel, scheduleForRetry, scheduleT } logger.info(`Sending transaction with nonce ${nonce}`) const txHash = await sendTx({ - chain: config.id, data: job.data, nonce, gasPrice, @@ -153,7 +151,7 @@ async function main({ msg, ackMsg, nackMsg, channel, scheduleForRetry, scheduleT privateKey: ORACLE_VALIDATOR_ADDRESS_PRIVATE_KEY, to: job.to, chainId, - web3: web3Instance + web3: web3Redundant }) const resendJob = { ...job, diff --git a/oracle/src/services/HttpListProvider.js b/oracle/src/services/HttpListProvider.js new file mode 100644 index 00000000..4ff6a1e0 --- /dev/null +++ b/oracle/src/services/HttpListProvider.js @@ -0,0 +1,89 @@ +const fetch = require('node-fetch') +const promiseRetry = require('promise-retry') + +const defaultOptions = { + requestTimeout: 0, + retry: { + retries: 0 + } +} + +class HttpListProviderError extends Error { + constructor(message, errors) { + super(message) + this.errors = errors + } +} + +function HttpListProvider(urls, options = {}) { + if (!(this instanceof HttpListProvider)) { + return new HttpListProvider(urls) + } + + if (!urls || !urls.length) { + throw new TypeError(`Invalid URLs: '${urls}'`) + } + + this.urls = urls + this.options = { ...defaultOptions, ...options } + this.currentIndex = 0 +} + +HttpListProvider.prototype.send = async function send(payload, callback) { + // save the currentIndex to avoid race condition + const { currentIndex } = this + + try { + const [result, index] = await promiseRetry(retry => { + return trySend(payload, this.urls, currentIndex, this.options).catch(retry) + }, this.options.retry) + this.currentIndex = index + callback(null, result) + } catch (e) { + callback(e) + } +} + +function send(url, payload, options) { + return fetch(url, { + headers: { + 'Content-type': 'application/json' + }, + method: 'POST', + body: JSON.stringify(payload), + timeout: options.requestTimeout + }) + .then(response => { + if (response.ok) { + return response + } else { + throw new Error(response.statusText) + } + }) + .then(response => response.json()) +} + +async function trySend(payload, urls, initialIndex, options) { + const errors = [] + + let index = initialIndex + for (let count = 0; count < urls.length; count++) { + const url = urls[index] + try { + const result = await send(url, payload, options) + return [result, index] + } catch (e) { + errors.push(e) + } + index = (index + 1) % urls.length + } + + throw new HttpListProviderError('Request failed for all urls', errors) +} + +module.exports = { + HttpListProvider, + HttpListProviderError, + defaultOptions, + send +} diff --git a/oracle/src/services/RedundantHttpListProvider.js b/oracle/src/services/RedundantHttpListProvider.js new file mode 100644 index 00000000..89fe8ffa --- /dev/null +++ b/oracle/src/services/RedundantHttpListProvider.js @@ -0,0 +1,40 @@ +const promiseRetry = require('promise-retry') +const { promiseAny } = require('../utils/utils') +const { defaultOptions, HttpListProviderError, send } = require('./HttpListProvider') + +function RedundantHttpListProvider(urls, options = {}) { + if (!(this instanceof RedundantHttpListProvider)) { + return new RedundantHttpListProvider(urls) + } + + if (!urls || !urls.length) { + throw new TypeError(`Invalid URLs: '${urls}'`) + } + + this.urls = urls + this.options = { ...defaultOptions, ...options } + this.currentIndex = 0 +} + +RedundantHttpListProvider.prototype.send = async function send(payload, callback) { + try { + const result = await promiseRetry(retry => { + return trySend(payload, this.urls, this.options).catch(retry) + }, this.options.retry) + callback(null, result) + } catch (e) { + callback(e) + } +} + +async function trySend(payload, urls, options) { + try { + return await promiseAny(urls.map(url => send(url, payload, options))) + } catch (errors) { + throw new HttpListProviderError('Request failed for all urls', errors) + } +} + +module.exports = { + RedundantHttpListProvider +} diff --git a/oracle/src/services/RpcUrlsManager.js b/oracle/src/services/RpcUrlsManager.js deleted file mode 100644 index dba8d7cc..00000000 --- a/oracle/src/services/RpcUrlsManager.js +++ /dev/null @@ -1,50 +0,0 @@ -const promiseRetry = require('promise-retry') -const tryEach = require('../utils/tryEach') -const { RETRY_CONFIG } = require('../utils/constants') -const { promiseAny } = require('../utils/utils') - -function RpcUrlsManager(homeUrls, foreignUrls) { - if (!homeUrls) { - throw new Error(`Invalid homeUrls: '${homeUrls}'`) - } - if (!foreignUrls) { - throw new Error(`Invalid foreignUrls: '${foreignUrls}'`) - } - - this.homeUrls = homeUrls.split(' ') - this.foreignUrls = foreignUrls.split(' ') -} - -RpcUrlsManager.prototype.tryEach = async function(chain, f, redundant = false) { - if (chain !== 'home' && chain !== 'foreign') { - throw new Error(`Invalid argument chain: '${chain}'`) - } - - // save urls to avoid race condition - const urls = chain === 'home' ? [...this.homeUrls] : [...this.foreignUrls] - - if (redundant) { - // result from first responded node will be returned immediately - // remaining nodes will continue to retry queries in separate promises - // promiseAny will throw only if all urls reached max retry number - return promiseAny(urls.map(url => promiseRetry(retry => f(url).catch(retry), RETRY_CONFIG))) - } - - const [result, index] = await promiseRetry(retry => tryEach(urls, f).catch(retry), RETRY_CONFIG) - - if (index > 0) { - // rotate urls - const failed = urls.splice(0, index) - urls.push(...failed) - } - - if (chain === 'home') { - this.homeUrls = urls - } else { - this.foreignUrls = urls - } - - return result -} - -module.exports = RpcUrlsManager diff --git a/oracle/src/services/getRpcUrlsManager.js b/oracle/src/services/getRpcUrlsManager.js deleted file mode 100644 index 6270c9d4..00000000 --- a/oracle/src/services/getRpcUrlsManager.js +++ /dev/null @@ -1,3 +0,0 @@ -const RpcUrlsManager = require('./RpcUrlsManager') - -module.exports = new RpcUrlsManager(process.env.COMMON_HOME_RPC_URL, process.env.COMMON_FOREIGN_RPC_URL) diff --git a/oracle/src/services/web3.js b/oracle/src/services/web3.js index 6745827a..d669cbfd 100644 --- a/oracle/src/services/web3.js +++ b/oracle/src/services/web3.js @@ -1,19 +1,55 @@ -const HttpListProvider = require('http-list-provider') const Web3 = require('web3') -const rpcUrlsManager = require('./getRpcUrlsManager') +const { HttpListProvider } = require('./HttpListProvider') +const { RedundantHttpListProvider } = require('./RedundantHttpListProvider') const { RETRY_CONFIG } = require('../utils/constants') -const homeProvider = new HttpListProvider(rpcUrlsManager.homeUrls, { +const { + COMMON_HOME_RPC_URL, + COMMON_FOREIGN_RPC_URL, + ORACLE_RPC_REQUEST_TIMEOUT, + ORACLE_HOME_RPC_POLLING_INTERVAL, + ORACLE_FOREIGN_RPC_POLLING_INTERVAL +} = process.env + +if (!COMMON_HOME_RPC_URL) { + throw new Error(`Invalid homeUrls: '${COMMON_HOME_RPC_URL}'`) +} +if (!COMMON_FOREIGN_RPC_URL) { + throw new Error(`Invalid foreignUrls: '${COMMON_FOREIGN_RPC_URL}'`) +} + +const homeUrls = COMMON_HOME_RPC_URL.split(' ').filter(url => url.length > 0) +const foreignUrls = COMMON_FOREIGN_RPC_URL.split(' ').filter(url => url.length > 0) + +const homeDefaultTimeout = parseInt(ORACLE_HOME_RPC_POLLING_INTERVAL, 10) * 2 +const foreignDefaultTimeout = parseInt(ORACLE_FOREIGN_RPC_POLLING_INTERVAL, 10) * 2 +const configuredTimeout = parseInt(ORACLE_RPC_REQUEST_TIMEOUT, 10) + +const homeOptions = { + requestTimeout: configuredTimeout || homeDefaultTimeout, retry: RETRY_CONFIG -}) +} + +const foreignOptions = { + requestTimeout: configuredTimeout || foreignDefaultTimeout, + retry: RETRY_CONFIG +} + +const homeProvider = new HttpListProvider(homeUrls, homeOptions) const web3Home = new Web3(homeProvider) -const foreignProvider = new HttpListProvider(rpcUrlsManager.foreignUrls, { - retry: RETRY_CONFIG -}) +const foreignProvider = new HttpListProvider(foreignUrls, foreignOptions) const web3Foreign = new Web3(foreignProvider) +const redundantHomeProvider = new RedundantHttpListProvider(homeUrls, homeOptions) +const web3HomeRedundant = new Web3(redundantHomeProvider) + +const redundantForeignProvider = new RedundantHttpListProvider(foreignUrls, foreignOptions) +const web3ForeignRedundant = new Web3(redundantForeignProvider) + module.exports = { web3Home, - web3Foreign + web3Foreign, + web3HomeRedundant, + web3ForeignRedundant } diff --git a/oracle/src/tx/sendTx.js b/oracle/src/tx/sendTx.js index 55da4a4e..ac2e4407 100644 --- a/oracle/src/tx/sendTx.js +++ b/oracle/src/tx/sendTx.js @@ -1,67 +1,27 @@ -const Web3Utils = require('web3-utils') -const fetch = require('node-fetch') -const rpcUrlsManager = require('../services/getRpcUrlsManager') +const { toWei } = require('web3').utils -const { ORACLE_TX_REDUNDANCY } = process.env - -// eslint-disable-next-line consistent-return -async function sendTx({ chain, privateKey, data, nonce, gasPrice, amount, gasLimit, to, chainId, web3 }) { +async function sendTx({ privateKey, data, nonce, gasPrice, amount, gasLimit, to, chainId, web3 }) { const serializedTx = await web3.eth.accounts.signTransaction( { nonce: Number(nonce), chainId, to, data, - value: Web3Utils.toWei(amount), + value: toWei(amount), gasPrice, gas: gasLimit }, `0x${privateKey}` ) - return sendRawTx({ - chain, - method: 'eth_sendRawTransaction', - params: [serializedTx.rawTransaction] - }) -} - -// eslint-disable-next-line consistent-return -async function sendRawTx({ chain, params, method }) { - const result = await rpcUrlsManager.tryEach( - chain, - async url => { - // curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}' - const response = await fetch(url, { - headers: { - 'Content-type': 'application/json' - }, - method: 'POST', - body: JSON.stringify({ - jsonrpc: '2.0', - method, - params, - id: Math.floor(Math.random() * 100) + 1 - }) - }) - - if (!response.ok) { - throw new Error(response.statusText) - } - - return response - }, - ORACLE_TX_REDUNDANCY === 'true' && method === 'eth_sendRawTransaction' + return new Promise((res, rej) => + web3.eth + .sendSignedTransaction(serializedTx.rawTransaction) + .once('transactionHash', res) + .once('error', rej) ) - - const json = await result.json() - if (json.error) { - throw json.error - } - return json.result } module.exports = { - sendTx, - sendRawTx + sendTx } diff --git a/oracle/src/tx/web3.js b/oracle/src/tx/web3.js index d3e4b0ad..ce18930e 100644 --- a/oracle/src/tx/web3.js +++ b/oracle/src/tx/web3.js @@ -1,8 +1,6 @@ -const { hexToNumber } = require('web3-utils') const logger = require('../services/logger').child({ module: 'web3' }) -const { sendRawTx } = require('./sendTx') async function getNonce(web3, address) { try { @@ -26,15 +24,10 @@ async function getBlockNumber(web3) { } } -async function getChainId(chain) { +async function getChainId(web3) { try { logger.debug('Getting chain id') - const chainIdHex = await sendRawTx({ - chain, - method: 'eth_chainId', - params: [] - }) - const chainId = hexToNumber(chainIdHex) + const chainId = await web3.eth.getChainId() logger.debug({ chainId }, 'Chain id obtained') return chainId } catch (e) { diff --git a/oracle/src/utils/message.js b/oracle/src/utils/message.js index 5be3ae3b..fa5c2657 100644 --- a/oracle/src/utils/message.js +++ b/oracle/src/utils/message.js @@ -1,13 +1,13 @@ const assert = require('assert') -const Web3Utils = require('web3-utils') +const { toHex, numberToHex, padLeft } = require('web3').utils const { strip0x } = require('../../../commons') function createMessage({ recipient, value, transactionHash, bridgeAddress, expectedMessageLength }) { recipient = strip0x(recipient) assert.strictEqual(recipient.length, 20 * 2) - value = Web3Utils.numberToHex(value) - value = Web3Utils.padLeft(value, 32 * 2) + value = numberToHex(value) + value = padLeft(value, 32 * 2) value = strip0x(value) assert.strictEqual(value.length, 64) @@ -60,7 +60,7 @@ function signatureToVRS(rawSignature) { } function packSignatures(array) { - const length = strip0x(Web3Utils.toHex(array.length)) + const length = strip0x(toHex(array.length)) const msgLength = length.length === 1 ? `0${length}` : length let v = '' let r = '' diff --git a/oracle/src/utils/utils.js b/oracle/src/utils/utils.js index 7ce89b2a..a7052d46 100644 --- a/oracle/src/utils/utils.js +++ b/oracle/src/utils/utils.js @@ -118,7 +118,10 @@ async function readAccessListFile(fileName, logger) { .split('\n') .map(addr => addr.trim().toLowerCase()) .filter(addr => addr.length === 42) - logger.info({ fileName }, `Access list was read successfully, ${data.length} addresses found`) + logger.info( + { fileName }, + `Access list was read successfully, ${readAccessLists[fileName].length} addresses found` + ) logger.debug({ addresses: readAccessLists[fileName] }, `Read addresses from the file`) } catch (e) { readAccessLists[fileName] = [] diff --git a/oracle/src/watcher.js b/oracle/src/watcher.js index cc99f9b1..76cae4b8 100644 --- a/oracle/src/watcher.js +++ b/oracle/src/watcher.js @@ -5,7 +5,6 @@ const { connectWatcherToQueue, connection } = require('./services/amqpClient') const { getBlockNumber } = require('./tx/web3') const { redis } = require('./services/redisClient') const logger = require('./services/logger') -const rpcUrlsManager = require('./services/getRpcUrlsManager') const { getRequiredBlockConfirmations, getEvents } = require('./tx/web3') const { checkHTTPS, watchdog } = require('./utils/utils') const { EXIT_CODES } = require('./utils/constants') @@ -42,8 +41,7 @@ async function initialize() { try { const checkHttps = checkHTTPS(process.env.ORACLE_ALLOW_HTTP_FOR_RPC, logger) - rpcUrlsManager.homeUrls.forEach(checkHttps('home')) - rpcUrlsManager.foreignUrls.forEach(checkHttps('foreign')) + web3Instance.currentProvider.urls.forEach(checkHttps(config.chain)) await getLastProcessedBlock() connectWatcherToQueue({ diff --git a/oracle/src/worker.js b/oracle/src/worker.js index 0836c8fa..6fcff505 100644 --- a/oracle/src/worker.js +++ b/oracle/src/worker.js @@ -1,6 +1,5 @@ const path = require('path') const logger = require('./services/logger') -const rpcUrlsManager = require('./services/getRpcUrlsManager') const { checkHTTPS, watchdog } = require('./utils/utils') const { EXIT_CODES } = require('./utils/constants') const { connectWorkerToQueue } = require('./services/amqpClient') @@ -9,12 +8,13 @@ const config = require(path.join('../config/', process.argv[2])) const convertToChai = require('./workers/convertToChai')(config) +const web3Instance = config.web3 + async function initialize() { try { const checkHttps = checkHTTPS(process.env.ORACLE_ALLOW_HTTP_FOR_RPC, logger) - rpcUrlsManager.homeUrls.forEach(checkHttps('home')) - rpcUrlsManager.foreignUrls.forEach(checkHttps('foreign')) + web3Instance.currentProvider.urls.forEach(checkHttps(config.chain)) connectWorkerToQueue({ queueName: config.workerQueue, diff --git a/oracle/src/workers/convertToChai.js b/oracle/src/workers/convertToChai.js index 8b8900bf..71c48638 100644 --- a/oracle/src/workers/convertToChai.js +++ b/oracle/src/workers/convertToChai.js @@ -1,5 +1,5 @@ require('../../env') -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../services/HttpListProvider') const rootLogger = require('../services/logger') const { web3Foreign } = require('../services/web3') diff --git a/oracle/test/processAffirmationRequests.test.js b/oracle/test/processAffirmationRequests.test.js index deb66810..d735afee 100644 --- a/oracle/test/processAffirmationRequests.test.js +++ b/oracle/test/processAffirmationRequests.test.js @@ -2,7 +2,7 @@ const chai = require('chai') const chaiAsPromised = require('chai-as-promised') const sinon = require('sinon') const Web3 = require('web3') -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../src/services/HttpListProvider') const estimateGas = require('../src/events/processAffirmationRequests/estimateGas') const errors = require('../src/utils/errors') diff --git a/oracle/test/processCollectedSignatures.test.js b/oracle/test/processCollectedSignatures.test.js index b40ea359..c89464fd 100644 --- a/oracle/test/processCollectedSignatures.test.js +++ b/oracle/test/processCollectedSignatures.test.js @@ -1,7 +1,7 @@ const { expect } = require('chai').use(require('chai-as-promised')) const sinon = require('sinon') const Web3 = require('web3') -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../src/services/HttpListProvider') const { createMessage, signatureToVRS } = require('../src/utils/message') const estimateGas = require('../src/events/processCollectedSignatures/estimateGas') const errors = require('../src/utils/errors') diff --git a/oracle/test/processSignatureRequests.test.js b/oracle/test/processSignatureRequests.test.js index 63933960..009451b4 100644 --- a/oracle/test/processSignatureRequests.test.js +++ b/oracle/test/processSignatureRequests.test.js @@ -2,7 +2,7 @@ const chai = require('chai') const chaiAsPromised = require('chai-as-promised') const sinon = require('sinon') const Web3 = require('web3') -const { HttpListProviderError } = require('http-list-provider') +const { HttpListProviderError } = require('../src/services/HttpListProvider') const estimateGas = require('../src/events/processSignatureRequests/estimateGas') const errors = require('../src/utils/errors') diff --git a/package.json b/package.json index af29d73d..b77f2e88 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "build:ui": "yarn workspace ui run build", "build:alm": "yarn workspace alm run build", "build:plugin": "yarn workspace burner-wallet-plugin run build", - "lint": "yarn wsrun --exclude token-bridge-contracts lint", + "lint": "yarn wsrun --exclude tokenbridge-contracts lint", "test": "yarn wsrun --exclude oracle-e2e --exclude ui-e2e --exclude monitor-e2e --exclude alm-e2e test", "oracle-e2e": "./oracle-e2e/run-tests.sh", "ui-e2e": "./ui-e2e/run-tests.sh", @@ -47,7 +47,7 @@ "monitor-e2e": "./monitor-e2e/run-tests.sh", "alm-e2e": "./alm-e2e/run-tests.sh", "clean": "rm -rf ./node_modules ./**/node_modules ./**/**/node_modules ./**/build ./**/**/dist", - "compile:contracts": "yarn workspace token-bridge-contracts run compile", + "compile:contracts": "yarn workspace tokenbridge-contracts run compile", "install:deploy": "cd contracts/deploy && npm install --unsafe-perm --silent", "postinstall": "test -n \"$NOYARNPOSTINSTALL\" || ln -sf $(pwd)/node_modules/openzeppelin-solidity/ contracts/node_modules/openzeppelin-solidity" } diff --git a/yarn.lock b/yarn.lock index 5e614f28..d44dc750 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1304,6 +1304,21 @@ "@ethersproject/properties" ">=5.0.0-beta.131" "@ethersproject/strings" ">=5.0.0-beta.130" +"@ethersproject/abi@5.0.0-beta.153": + version "5.0.0-beta.153" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz#43a37172b33794e4562999f6e2d555b7599a8eee" + integrity sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg== + dependencies: + "@ethersproject/address" ">=5.0.0-beta.128" + "@ethersproject/bignumber" ">=5.0.0-beta.130" + "@ethersproject/bytes" ">=5.0.0-beta.129" + "@ethersproject/constants" ">=5.0.0-beta.128" + "@ethersproject/hash" ">=5.0.0-beta.128" + "@ethersproject/keccak256" ">=5.0.0-beta.127" + "@ethersproject/logger" ">=5.0.0-beta.129" + "@ethersproject/properties" ">=5.0.0-beta.131" + "@ethersproject/strings" ">=5.0.0-beta.130" + "@ethersproject/address@>=5.0.0-beta.128": version "5.0.0-beta.134" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.0-beta.134.tgz#9c1790c87b763dc547ac12e2dbc9fa78d0799a71" @@ -1316,22 +1331,33 @@ "@ethersproject/rlp" ">=5.0.0-beta.126" bn.js "^4.4.0" -"@ethersproject/bignumber@>=5.0.0-beta.130": - version "5.0.0-beta.136" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.0-beta.136.tgz#5fd90ee708f3778733b02caf58453756524c758f" - integrity sha512-G5fYkkMUpmQd7Qcxa7YdwavBkiSb44wI7GsZls/7eGFMYl2ySgmwOBMw3kj1lhheXbF73jfBfOBHvKYrN/p7pQ== +"@ethersproject/address@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.5.tgz#2caa65f6b7125015395b1b54c985ee0b27059cc7" + integrity sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA== dependencies: - "@ethersproject/bytes" ">=5.0.0-beta.129" - "@ethersproject/logger" ">=5.0.0-beta.129" - "@ethersproject/properties" ">=5.0.0-beta.131" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/rlp" "^5.0.3" bn.js "^4.4.0" -"@ethersproject/bytes@>=5.0.0-beta.129": - version "5.0.0-beta.137" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.0-beta.137.tgz#a9a35e2b358886289225d28212f4071ae391c161" - integrity sha512-uBwchZzGP912Wcani6vM7RLtsnN69Uc9WTLvewsniKrpHpSx0/k33WUcQVosmkwPgUtqflKyGjcIqaea1Z9WHw== +"@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7": + version "5.0.8" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.8.tgz#cee33bd8eb0266176def0d371b45274b1d2c4ec0" + integrity sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA== dependencies: - "@ethersproject/logger" ">=5.0.0-beta.129" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + bn.js "^4.4.0" + +"@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.5.tgz#688b70000e550de0c97a151a21f15b87d7f97d7c" + integrity sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ== + dependencies: + "@ethersproject/logger" "^5.0.5" "@ethersproject/constants@>=5.0.0-beta.128": version "5.0.0-beta.133" @@ -1340,6 +1366,13 @@ dependencies: "@ethersproject/bignumber" ">=5.0.0-beta.130" +"@ethersproject/constants@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.5.tgz#0ed19b002e8404bdf6d135234dc86a7d9bcf9b71" + integrity sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/hash@>=5.0.0-beta.128": version "5.0.0-beta.133" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.0-beta.133.tgz#bda0c74454a82359642033f27c5157963495fcdf" @@ -1358,17 +1391,25 @@ "@ethersproject/bytes" ">=5.0.0-beta.129" js-sha3 "0.5.7" -"@ethersproject/logger@>=5.0.0-beta.129": - version "5.0.0-beta.136" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.0-beta.136.tgz#a140cea77e1d820a97384fb02bfad63c130f31c1" - integrity sha512-baWK/4ccsVcyUU20nhp7k+hoRYsiaOfURYlyvQCoUUFKD3mpSRQCH42wxCosZZSCWz4rTHgASLQDdKkBtNVz1w== - -"@ethersproject/properties@>=5.0.0-beta.131": - version "5.0.0-beta.138" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.0-beta.138.tgz#e634d25b8c9f9448ef8d739bf4bd2db831dbe79d" - integrity sha512-vLVftNTxonJ0SkkcMcpXHN9pABD84clh+Cz3TV79qvh+lc0MFX3dnYL1JinBdFnqLPXU9vw2LbTrBhwQY8bzCQ== +"@ethersproject/keccak256@^5.0.3": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.4.tgz#36ca0a7d1ae2a272da5654cb886776d0c680ef3a" + integrity sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ== dependencies: - "@ethersproject/logger" ">=5.0.0-beta.129" + "@ethersproject/bytes" "^5.0.4" + js-sha3 "0.5.7" + +"@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.6.tgz#faa484203e86e08be9e07fef826afeef7183fe88" + integrity sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ== + +"@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.4.tgz#a67a1f5a52c30850b5062c861631e73d131f666e" + integrity sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A== + dependencies: + "@ethersproject/logger" "^5.0.5" "@ethersproject/rlp@>=5.0.0-beta.126": version "5.0.0-beta.132" @@ -1378,6 +1419,24 @@ "@ethersproject/bytes" ">=5.0.0-beta.129" "@ethersproject/logger" ">=5.0.0-beta.129" +"@ethersproject/rlp@^5.0.3": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.4.tgz#0090a0271e84ea803016a112a79f5cfd80271a77" + integrity sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + +"@ethersproject/signing-key@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.5.tgz#acfd06fc05a14180df7e027688bbd23fc4baf782" + integrity sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + elliptic "6.5.3" + "@ethersproject/strings@>=5.0.0-beta.130": version "5.0.0-beta.136" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.0-beta.136.tgz#053cbf4f9f96a7537cbc50300597f2d707907f51" @@ -1387,6 +1446,21 @@ "@ethersproject/constants" ">=5.0.0-beta.128" "@ethersproject/logger" ">=5.0.0-beta.129" +"@ethersproject/transactions@^5.0.0-beta.135": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.6.tgz#b8b27938be6e9ed671dbdd35fe98af8b14d0df7c" + integrity sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/rlp" "^5.0.3" + "@ethersproject/signing-key" "^5.0.4" + "@evocateur/libnpmaccess@^3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" @@ -2840,14 +2914,7 @@ dependencies: "@babel/types" "^7.3.0" -"@types/bignumber.js@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969" - integrity sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA== - dependencies: - bignumber.js "*" - -"@types/bn.js@^4.11.0", "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4": +"@types/bn.js@^4.11.0", "@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4", "@types/bn.js@^4.11.5": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== @@ -2990,6 +3057,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.43.tgz#b60ce047822e526e7a9252e50844eee79d5386ff" integrity sha512-KUyZdkGCnVPuXfsKmDUu2XLui65LZIJ2s0M57noy5e+ixUT2oK33ep7zlvgzI8LElcWqbf8AR+o/3GqAPac2zA== +"@types/node@^12.12.6": + version "12.12.69" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.69.tgz#7cb6a3aa0d16664bf2dcd1450ccb8477464fbd79" + integrity sha512-2F2VQRSFmzqgUEXw75L51MgnnZqc6bKWVSUPfrDPzp6mzGGibeVwyQcpvZvBr5RnsoMRHmC8EcBQiobSeqeJxg== + "@types/node@^12.6.1": version "12.12.34" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.34.tgz#0a5d6ae5d22612f0cf5f10320e1fc5d2a745dcb8" @@ -3000,6 +3072,13 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.59.tgz#9e34261f30183f9777017a13d185dfac6b899e04" integrity sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ== +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + "@types/promise-retry@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@types/promise-retry/-/promise-retry-1.1.3.tgz#baab427419da9088a1d2f21bf56249c21b3dd43c" @@ -3074,6 +3153,13 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== +"@types/secp256k1@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.1.tgz#fb3aa61a1848ad97d7425ff9dcba784549fca5a4" + integrity sha512-+ZjSA8ELlOp8SlKi0YLB2tz9d5iPNEmOBd+8Rz21wTMdaXQIa9b6TEnD6l5qKOCypE7FSyPyck12qZJxSDNoog== + dependencies: + "@types/node" "*" + "@types/solidity-parser-antlr@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@types/solidity-parser-antlr/-/solidity-parser-antlr-0.2.3.tgz#bb2d9c6511bf483afe4fc3e2714da8a924e59e3f" @@ -3450,6 +3536,11 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + "@zkochan/cmd-shim@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" @@ -3688,13 +3779,6 @@ ansi-align@^2.0.0: dependencies: string-width "^2.0.0" -ansi-colors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" - integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== - dependencies: - ansi-wrap "^0.1.0" - ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -3712,13 +3796,6 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.11.0" -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= - dependencies: - ansi-wrap "0.1.0" - ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -3764,11 +3841,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" -ansi-wrap@0.1.0, ansi-wrap@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= - ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" @@ -3805,13 +3877,6 @@ app-module-path@^2.2.0: resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" integrity sha1-ZBqlXft9am8KgUHEucCqULbCTdU= -append-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" - integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= - dependencies: - buffer-equal "^1.0.0" - append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" @@ -3892,25 +3957,11 @@ arr-diff@^4.0.0: resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -arr-filter@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" - integrity sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4= - dependencies: - make-iterator "^1.0.0" - arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== -arr-map@^2.0.0, arr-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" - integrity sha1-Onc0X/wc814qkYJWAfnljy4kysQ= - dependencies: - make-iterator "^1.0.0" - arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" @@ -3921,11 +3972,6 @@ array-differ@^2.0.3: resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" integrity sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w== -array-each@^1.0.0, array-each@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" - integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= - array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" @@ -3978,21 +4024,6 @@ array-includes@^3.1.1: es-abstract "^1.17.0" is-string "^1.0.5" -array-initial@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" - integrity sha1-L6dLJnOTccOUe9enrcc74zSz15U= - dependencies: - array-slice "^1.0.0" - is-number "^4.0.0" - -array-last@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336" - integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== - dependencies: - is-number "^4.0.0" - array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" @@ -4003,20 +4034,6 @@ array-reduce@~0.0.0: resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= -array-slice@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" - integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== - -array-sort@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" - integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== - dependencies: - default-compare "^1.0.0" - get-value "^2.0.6" - kind-of "^5.0.2" - array-union@^1.0.1, array-union@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -4106,16 +4123,6 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -async-done@^1.2.0, async-done@^1.2.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2" - integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.2" - process-nextick-args "^2.0.0" - stream-exhaust "^1.0.1" - async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -4138,13 +4145,6 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== -async-settle@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" - integrity sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs= - dependencies: - async-done "^1.2.2" - async@1.x, async@^1.4.2, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -4900,21 +4900,6 @@ babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== -bach@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" - integrity sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA= - dependencies: - arr-filter "^1.1.1" - arr-flatten "^1.0.1" - arr-map "^2.0.0" - array-each "^1.0.0" - array-initial "^1.0.0" - array-last "^1.1.1" - async-done "^1.2.2" - async-settle "^1.0.0" - now-and-later "^2.0.0" - backoff@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" @@ -4932,7 +4917,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base-x@^3.0.2: +base-x@^3.0.2, base-x@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== @@ -4979,11 +4964,6 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bignumber.js@*, bignumber.js@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" - integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== - bignumber.js@7.2.1, bignumber.js@^7.2.1: version "7.2.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" @@ -4994,6 +4974,16 @@ bignumber.js@^6.0.0: resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-6.0.0.tgz#bbfa047644609a5af093e9cbd83b0461fa3f6002" integrity sha512-x247jIuy60/+FtMRvscqfxtVHQf8AGx2hm9c6btkgC0x/hp9yt+teISNhvF8WlwRkCc5yF2fDECH8SIMe8j+GA== +bignumber.js@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" + integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== + +bignumber.js@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" + integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + bignumber.js@~8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-8.0.2.tgz#d8c4e1874359573b1ef03011a2d861214aeef137" @@ -5071,6 +5061,11 @@ bl@^4.0.1: inherits "^2.0.4" readable-stream "^3.4.0" +blakejs@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" + integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -5108,11 +5103,16 @@ bn.js@4.11.6: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= -bn.js@4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.4.0, bn.js@^4.8.0: +bn.js@4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.8.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +bn.js@^4.11.9, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + body-parser@1.19.0, body-parser@^1.16.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -5221,7 +5221,7 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6: +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -5365,11 +5365,6 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= -buffer-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" - integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= - buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -5417,7 +5412,7 @@ buffer@^5.0.5: base64-js "^1.0.2" ieee754 "^1.1.4" -buffer@^5.2.1: +buffer@^5.2.1, buffer@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== @@ -5433,6 +5428,13 @@ buffer@^5.5.0: base64-js "^1.0.2" ieee754 "^1.1.4" +bufferutil@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.1.tgz#3a177e8e5819a1243fe16b63a199951a7ad8d4a7" + integrity sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA== + dependencies: + node-gyp-build "~3.7.0" + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -5857,6 +5859,17 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -5865,6 +5878,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -5950,11 +5968,6 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= - clone-deep@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" @@ -5983,12 +5996,7 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= - -clone@2.1.2, clone@^2.0.0, clone@^2.1.1: +clone@2.1.2, clone@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= @@ -5998,15 +6006,6 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - cluster-key-slot@^1.0.6: version "1.0.12" resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.0.12.tgz#d5deff2a520717bc98313979b687309b2d368e29" @@ -6039,15 +6038,6 @@ coinstring@^2.0.0: bs58 "^2.0.1" create-hash "^1.1.1" -collection-map@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" - integrity sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw= - dependencies: - arr-map "^2.0.2" - for-own "^1.0.0" - make-iterator "^1.0.0" - collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -6088,11 +6078,6 @@ color-string@^1.5.2: color-name "^1.0.0" simple-swizzle "^0.2.2" -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - color@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/color/-/color-3.1.1.tgz#7abf5c0d38e89378284e873c207ae2172dcc8a61" @@ -6330,6 +6315,15 @@ content-disposition@0.5.3: dependencies: safe-buffer "5.1.2" +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" @@ -6425,13 +6419,6 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1: dependencies: safe-buffer "~5.1.1" -convert-source-map@^1.5.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -6464,14 +6451,6 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-props@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.4.tgz#93bb1cadfafd31da5bb8a9d4b41f471ec3a72dfe" - integrity sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A== - dependencies: - each-props "^1.3.0" - is-plain-object "^2.0.1" - copy-to-clipboard@^3: version "3.2.0" resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.2.0.tgz#d2724a3ccbfed89706fac8a894872c979ac74467" @@ -6547,15 +6526,15 @@ cosmiconfig@^5.0.0, cosmiconfig@^5.0.7, cosmiconfig@^5.1.0, cosmiconfig@^5.2.0: parse-json "^4.0.0" coveralls@^3.0.6: - version "3.0.11" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.11.tgz#e141da0922b632fcc66620f334460c3f0026a4ce" - integrity sha512-LZPWPR2NyGKyaABnc49dR0fpeP6UqhvGq4B5nUrTQ1UBy55z96+ga7r+/ChMdMJUwBgyJDXBi88UBgz2rs9IiQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b" + integrity sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ== dependencies: js-yaml "^3.13.1" lcov-parse "^1.0.0" log-driver "^1.2.7" minimist "^1.2.5" - request "^2.88.0" + request "^2.88.2" create-ecdh@^4.0.0: version "4.0.3" @@ -6583,7 +6562,7 @@ create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -7174,18 +7153,6 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" - integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== - -default-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" - integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== - dependencies: - kind-of "^5.0.2" - default-gateway@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" @@ -7201,11 +7168,6 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" -default-resolution@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" - integrity sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= - defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -7317,11 +7279,6 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -7623,14 +7580,6 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -each-props@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" - integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== - dependencies: - is-plain-object "^2.0.1" - object.defaults "^1.1.0" - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -7677,6 +7626,19 @@ elliptic@6.5.2, elliptic@^6.5.2: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +elliptic@6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + elliptic@^6.0.0, elliptic@^6.4.0: version "6.4.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" @@ -7832,7 +7794,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: +es5-ext@^0.10.35, es5-ext@^0.10.50: version "0.10.53" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== @@ -7841,7 +7803,7 @@ es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: es6-symbol "~3.1.3" next-tick "~1.0.0" -es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.3: +es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= @@ -7875,16 +7837,6 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" -es6-weak-map@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -8492,7 +8444,7 @@ eth-lib@0.2.7: elliptic "^6.4.0" xhr-request-promise "^0.1.2" -eth-lib@^0.2.8: +eth-lib@0.2.8, eth-lib@^0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== @@ -8509,18 +8461,6 @@ eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: json-rpc-random-id "^1.0.0" xtend "^4.0.1" -eth-sig-util@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.3.0.tgz#c54a6ac8e8796f7e25f59cf436982a930e645231" - integrity sha512-ugD1AvaggvKaZDgnS19W5qOfepjGc7qHrt7TrAaL54gJw9SHvgIXJ3r2xOMW30RWJZNP+1GlTOy5oye7yXA4xA== - dependencies: - buffer "^5.2.1" - elliptic "^6.4.0" - ethereumjs-abi "0.6.5" - ethereumjs-util "^5.1.1" - tweetnacl "^1.0.0" - tweetnacl-util "^0.15.0" - eth-sig-util@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210" @@ -8529,6 +8469,18 @@ eth-sig-util@^1.4.2: ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" ethereumjs-util "^5.1.1" +eth-sig-util@^2.0.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.5.3.tgz#6938308b38226e0b3085435474900b03036abcbe" + integrity sha512-KpXbCKmmBUNUTGh9MRKmNkIPietfhzBqqYqysDavLseIiMUGl95k6UcPEkALAZlj41e9E6yioYXc1PC333RKqw== + dependencies: + buffer "^5.2.1" + elliptic "^6.4.0" + ethereumjs-abi "0.6.5" + ethereumjs-util "^5.1.1" + tweetnacl "^1.0.0" + tweetnacl-util "^0.15.0" + eth-tx-summary@^3.1.2: version "3.2.4" resolved "https://registry.yarnpkg.com/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz#e10eb95eb57cdfe549bf29f97f1e4f1db679035c" @@ -8572,6 +8524,27 @@ ethereum-common@^0.0.18: resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + ethereum-types@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/ethereum-types/-/ethereum-types-2.1.6.tgz#57d9d515fad86ab987c0f6962c4203be37da8579" @@ -8588,14 +8561,6 @@ ethereumjs-abi@0.6.5: bn.js "^4.10.0" ethereumjs-util "^4.3.0" -ethereumjs-abi@0.6.7: - version "0.6.7" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.7.tgz#d1d1c5cdb8d910a7d97645ba9e93be5d153bba2e" - integrity sha512-EMLOA8ICO5yAaXDhjVEfYjsJIXYutY8ufTE93eEKwsVtp2usQreKwsDTJ9zvam3omYqNuffr8IONIqb2uUslGQ== - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - ethereumjs-abi@0.6.8, "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": version "0.6.8" resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#1cfbb13862f90f0b391d8a699544d5fe4dfb8c7b" @@ -8719,6 +8684,19 @@ ethereumjs-util@6.2.0, ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.0: rlp "^2.2.3" secp256k1 "^3.0.1" +ethereumjs-util@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz#3e9428b317eebda3d7260d854fddda954b1f1bc6" @@ -8730,10 +8708,23 @@ ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0: rlp "^2.0.0" secp256k1 "^3.0.1" -ethereumjs-vm@4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-4.1.3.tgz#dc8eb45f47d775da9f0b2437d5e20896fdf66f37" - integrity sha512-RTrD0y7My4O6Qr1P2ZIsMfD6RzL6kU/RhBZ0a5XrPzAeR61crBS7or66ohDrvxDI/rDBxMi+6SnsELih6fzalw== +ethereumjs-util@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" + integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== + dependencies: + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "^0.1.3" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-vm@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-4.2.0.tgz#e885e861424e373dbc556278f7259ff3fca5edab" + integrity sha512-X6qqZbsY33p5FTuZqCnQ4+lo957iUJMM6Mpa6bL4UW0dxM6WmDSHuI4j/zOp1E2TDKImBGCJA9QPfc08PaNubA== dependencies: async "^2.1.2" async-eventemitter "^0.2.2" @@ -8768,18 +8759,18 @@ ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0: rustbn.js "~0.2.0" safe-buffer "^5.1.1" -ethereumjs-wallet@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.3.tgz#b0eae6f327637c2aeb9ccb9047b982ac542e6ab1" - integrity sha512-qiXPiZOsStem+Dj/CQHbn5qex+FVkuPmGH7SvSnA9F3tdRDt8dLMyvIj3+U05QzVZNPYh4HXEdnzoYI4dZkr9w== +ethereumjs-wallet@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.5.tgz#685e9091645cee230ad125c007658833991ed474" + integrity sha512-MDwjwB9VQVnpp/Dc1XzA6J1a3wgHQ4hSvA1uWNatdpOrtCbPVuQSKSyRnjLvS0a+KKMw2pvQ9Ybqpb3+eW8oNA== dependencies: aes-js "^3.1.1" bs58check "^2.1.2" + ethereum-cryptography "^0.1.3" ethereumjs-util "^6.0.0" - hdkey "^1.1.0" randombytes "^2.0.6" safe-buffer "^5.1.2" - scrypt.js "^0.3.0" + scryptsy "^1.2.1" utf8 "^3.0.0" uuid "^3.3.2" @@ -8840,7 +8831,7 @@ eventemitter3@3.1.2, eventemitter3@^3.0.0, eventemitter3@^3.1.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== -eventemitter3@^4.0.0: +eventemitter3@4.0.4, eventemitter3@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== @@ -8940,13 +8931,6 @@ expand-tilde@^1.2.2: dependencies: os-homedir "^1.0.1" -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - expect-puppeteer@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/expect-puppeteer/-/expect-puppeteer-4.4.0.tgz#1c948af08acdd6c8cbdb7f90e617f44d86888886" @@ -9093,16 +9077,6 @@ fake-merkle-patricia-tree@^1.0.1: dependencies: checkpoint-store "^1.1.0" -fancy-log@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" - integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - parse-node-version "^1.0.0" - time-stamp "^1.0.0" - fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" @@ -9385,41 +9359,13 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" -findup-sync@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" - integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= +find-yarn-workspace-root@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" + integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q== dependencies: - detect-file "^1.0.0" - is-glob "^3.1.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -fined@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" - integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== - dependencies: - expand-tilde "^2.0.2" - is-plain-object "^2.0.3" - object.defaults "^1.1.0" - object.pick "^1.2.0" - parse-filepath "^1.0.1" - -flagged-respawn@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" - integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== + fs-extra "^4.0.3" + micromatch "^3.1.4" flat-cache@^2.0.1: version "2.0.1" @@ -9455,7 +9401,7 @@ flow-stoplight@^1.0.0: resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= -flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: +flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== @@ -9588,7 +9534,7 @@ fs-exists-sync@^0.1.0: resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0= -fs-extra@7.0.1, fs-extra@^7.0.0: +fs-extra@7.0.1, fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -9616,7 +9562,7 @@ fs-extra@^2.0.0, fs-extra@^2.1.2: graceful-fs "^4.1.2" jsonfile "^2.1.0" -fs-extra@^4.0.2: +fs-extra@^4.0.2, fs-extra@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== @@ -9650,14 +9596,6 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.2.1" -fs-mkdirp-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" - integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= - dependencies: - graceful-fs "^4.1.11" - through2 "^2.0.3" - fs-promise@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/fs-promise/-/fs-promise-2.0.3.tgz#f64e4f854bcf689aa8bddcba268916db3db46854" @@ -9736,9 +9674,9 @@ ganache-cli@^6.6.0: yargs "13.2.4" ganache-core@^2.6.0: - version "2.10.2" - resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.10.2.tgz#17c171c6c0195b6734a0dd741a9d2afd4f74e292" - integrity sha512-4XEO0VsqQ1+OW7Za5fQs9/Kk7o8M0T1sRfFSF8h9NeJ2ABaqMO5waqxf567ZMcSkRKaTjUucBSz83xNfZv1HDg== + version "2.13.1" + resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.13.1.tgz#bf60399a2dd084e1090db91cbbc7ed3885dc01e4" + integrity sha512-Ewg+kNcDqXtOohe7jCcP+ZUv9EMzOx2MoqOYYP3BCfxrDh3KjBXXaKK+Let7li0TghAs9lxmBgevZku35j5YzA== dependencies: abstract-leveldown "3.0.0" async "2.6.2" @@ -9747,27 +9685,30 @@ ganache-core@^2.6.0: clone "2.1.2" debug "3.2.6" encoding-down "5.0.4" - eth-sig-util "2.3.0" - ethereumjs-abi "0.6.7" + eth-sig-util "^2.0.0" + ethereumjs-abi "0.6.8" ethereumjs-account "3.0.0" ethereumjs-block "2.2.2" ethereumjs-common "1.5.0" ethereumjs-tx "2.1.2" - ethereumjs-util "6.2.0" - ethereumjs-vm "4.1.3" + ethereumjs-util "6.2.1" + ethereumjs-vm "4.2.0" heap "0.2.6" + keccak "3.0.1" level-sublevel "6.6.4" levelup "3.1.1" - lodash "4.17.14" - merkle-patricia-tree "2.3.2" + lodash "4.17.20" + lru-cache "5.1.1" + merkle-patricia-tree "3.0.0" + patch-package "6.2.2" seedrandom "3.0.1" source-map-support "0.5.12" tmp "0.1.0" web3-provider-engine "14.2.1" - websocket "1.0.29" + websocket "1.0.32" optionalDependencies: - ethereumjs-wallet "0.6.3" - web3 "1.2.4" + ethereumjs-wallet "0.6.5" + web3 "1.2.11" gas-price-oracle@^0.1.5: version "0.1.5" @@ -9977,39 +9918,11 @@ glob-parent@^5.0.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob-stream@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" - integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= - dependencies: - extend "^3.0.0" - glob "^7.1.1" - glob-parent "^3.1.0" - is-negated-glob "^1.0.0" - ordered-read-streams "^1.0.0" - pumpify "^1.3.5" - readable-stream "^2.1.5" - remove-trailing-separator "^1.0.1" - to-absolute-glob "^2.0.0" - unique-stream "^2.0.2" - glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= -glob-watcher@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-5.0.3.tgz#88a8abf1c4d131eb93928994bc4a593c2e5dd626" - integrity sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg== - dependencies: - anymatch "^2.0.0" - async-done "^1.2.0" - chokidar "^2.0.0" - is-negated-glob "^1.0.0" - just-debounce "^1.0.0" - object.defaults "^1.1.0" - glob@7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" @@ -10079,15 +9992,6 @@ global-modules@^0.2.3: global-prefix "^0.1.4" is-windows "^0.2.0" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - global-prefix@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" @@ -10098,17 +10002,6 @@ global-prefix@^0.1.4: is-windows "^0.2.0" which "^1.2.12" -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - global-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" @@ -10190,13 +10083,6 @@ globule@^1.0.0: lodash "~4.17.12" minimatch "~3.0.2" -glogg@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" - integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== - dependencies: - sparkles "^1.0.0" - got@7.1.0, got@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" @@ -10251,11 +10137,6 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.0.0, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - graceful-fs@^4.1.10, graceful-fs@^4.1.2: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" @@ -10266,6 +10147,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.6: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== +graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -10281,47 +10167,6 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -gulp-cli@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.2.0.tgz#5533126eeb7fe415a7e3e84a297d334d5cf70ebc" - integrity sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA== - dependencies: - ansi-colors "^1.0.1" - archy "^1.0.0" - array-sort "^1.0.0" - color-support "^1.1.3" - concat-stream "^1.6.0" - copy-props "^2.0.1" - fancy-log "^1.3.2" - gulplog "^1.0.0" - interpret "^1.1.0" - isobject "^3.0.1" - liftoff "^3.1.0" - matchdep "^2.0.0" - mute-stdout "^1.0.0" - pretty-hrtime "^1.0.0" - replace-homedir "^1.0.0" - semver-greatest-satisfied-range "^1.1.0" - v8flags "^3.0.1" - yargs "^7.1.0" - -gulp@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" - integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== - dependencies: - glob-watcher "^5.0.3" - gulp-cli "^2.2.0" - undertaker "^1.2.1" - vinyl-fs "^3.0.0" - -gulplog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" - integrity sha1-4oxNRdBey77YGDY86PnFkmIp/+U= - dependencies: - glogg "^1.0.0" - gzip-size@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" @@ -10484,7 +10329,7 @@ hash.js@1.1.3: inherits "^2.0.3" minimalistic-assert "^1.0.0" -hash.js@^1.0.0, hash.js@^1.0.3: +hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== @@ -10526,15 +10371,6 @@ hdkey@^0.7.1: coinstring "^2.0.0" secp256k1 "^3.0.1" -hdkey@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-1.1.1.tgz#c2b3bfd5883ff9529b72f2f08b28be0972a9f64a" - integrity sha512-DvHZ5OuavsfWs5yfVJZestsnc3wzPvLWNk6c2nRUfo6X+OtxypGt20vDDf7Ba+MJzjL3KS1og2nw2eBbLCOUTA== - dependencies: - coinstring "^2.0.0" - safe-buffer "^5.1.1" - secp256k1 "^3.0.1" - he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" @@ -10615,7 +10451,7 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" -homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: +homedir-polyfill@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== @@ -10752,15 +10588,6 @@ http-https@^1.0.0: resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= -http-list-provider@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/http-list-provider/-/http-list-provider-0.0.5.tgz#bb901c8bd7bbcce48a697512cb920aaf9aeeb0be" - integrity sha512-s6hMhJLQmCtF3EbM5xDZW97Urk8jG2wfXDVOCANcF0DO/tXPq1iACZ7eFb9+obYVd7459w1mvCgiDUskIschmg== - dependencies: - deepmerge "^2.1.1" - node-fetch "^2.2.0" - promise-retry "^1.1.1" - http-parser-js@>=0.4.0: version "0.5.0" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" @@ -11142,7 +10969,7 @@ internal-slot@^1.0.2: has "^1.0.3" side-channel "^1.0.2" -interpret@^1.0.0, interpret@^1.1.0: +interpret@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== @@ -11213,14 +11040,6 @@ is-absolute-url@^2.0.0: resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -11462,11 +11281,6 @@ is-natural-number@^4.0.1: resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= -is-negated-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" - integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= - is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -11583,13 +11397,6 @@ is-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" @@ -11648,29 +11455,17 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - -is-utf8@^0.2.0, is-utf8@^0.2.1: +is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-valid-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" - integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= - is-windows@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" integrity sha1-3hqm1j6indJIc3tp8f+LgALSEIw= -is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.0, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -12586,16 +12381,19 @@ jszip@^3.1.3: readable-stream "~2.3.6" set-immediate-shim "~1.0.1" -just-debounce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" - integrity sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= - just-extend@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.0.2.tgz#f3f47f7dfca0f989c55410a7ebc8854b07108afc" integrity sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw== +keccak@3.0.1, keccak@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" + integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + keccak@^1.0.2: version "1.4.0" resolved "https://registry.yarnpkg.com/keccak/-/keccak-1.4.0.tgz#572f8a6dbee8e7b3aa421550f9e6408ca2186f80" @@ -12657,7 +12455,7 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" -kind-of@^5.0.0, kind-of@^5.0.2: +kind-of@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== @@ -12667,6 +12465,13 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -12687,14 +12492,6 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" -last-run@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" - integrity sha1-RblpQsF7HHnHchmCWbqUO+v4yls= - dependencies: - default-resolution "^2.0.0" - es6-weak-map "^2.0.1" - latest-version@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" @@ -12712,13 +12509,6 @@ lazy-cache@^1.0.3: resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -12738,13 +12528,6 @@ lcov-parse@^1.0.0: resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= -lead@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" - integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= - dependencies: - flush-write-stream "^1.0.2" - left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" @@ -12879,6 +12662,15 @@ level-ws@0.0.0: readable-stream "~1.0.15" xtend "~2.1.1" +level-ws@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-1.0.0.tgz#19a22d2d4ac57b18cc7c6ecc4bd23d899d8f603b" + integrity sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q== + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.8" + xtend "^4.0.1" + levelup@3.1.1, levelup@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.1.1.tgz#c2c0b3be2b4dc316647c53b42e2f559e232d2189" @@ -12922,20 +12714,6 @@ lie@~3.3.0: dependencies: immediate "~3.0.5" -liftoff@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" - integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== - dependencies: - extend "^3.0.0" - findup-sync "^3.0.0" - fined "^1.0.1" - flagged-respawn "^1.0.0" - is-plain-object "^2.0.4" - object.map "^1.0.0" - rechoir "^0.6.2" - resolve "^1.1.7" - load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -13181,10 +12959,10 @@ lodash.values@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" integrity sha1-o6bCsOvsxcLLocF+bmIP6BtT00c= -lodash@4.17.14: - version "4.17.14" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== +lodash@4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== "lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.5.1, lodash@~4.17.12: version "4.17.15" @@ -13251,6 +13029,13 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@5.1.1, lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" @@ -13266,13 +13051,6 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - ltgt@^2.1.2, ltgt@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" @@ -13325,13 +13103,6 @@ make-fetch-happen@^5.0.0: socks-proxy-agent "^4.0.0" ssri "^6.0.0" -make-iterator@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" - integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== - dependencies: - kind-of "^6.0.2" - makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -13351,7 +13122,7 @@ map-age-cleaner@^0.1.1: dependencies: p-defer "^1.0.0" -map-cache@^0.2.0, map-cache@^0.2.2: +map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= @@ -13395,16 +13166,6 @@ marked@^0.7.0: resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== -matchdep@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" - integrity sha1-xvNINKDY28OzfCfui7yyfHd1WC4= - dependencies: - findup-sync "^2.0.0" - micromatch "^3.0.4" - resolve "^1.4.0" - stack-trace "0.0.10" - math-random@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" @@ -13573,7 +13334,20 @@ merge2@^1.2.3: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== -merkle-patricia-tree@2.3.2, merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: +merkle-patricia-tree@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz#448d85415565df72febc33ca362b8b614f5a58f8" + integrity sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ== + dependencies: + async "^2.6.1" + ethereumjs-util "^5.2.0" + level-mem "^3.0.1" + level-ws "^1.0.0" + readable-stream "^3.0.6" + rlp "^2.0.0" + semaphore ">=1.0.1" + +merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== @@ -13616,7 +13390,7 @@ micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -13936,6 +13710,22 @@ ms@^2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -13949,6 +13739,30 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + multimatch@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" @@ -13959,11 +13773,6 @@ multimatch@^3.0.0: arrify "^1.0.1" minimatch "^3.0.4" -mute-stdout@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" - integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== - mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -14094,6 +13903,11 @@ node-abi@^2.7.0: dependencies: semver "^5.4.1" +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + node-emoji@^1.4.1: version "1.10.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" @@ -14123,7 +13937,7 @@ node-fetch@^1.0.1, node-fetch@~1.7.1: encoding "^0.1.11" is-stream "^1.0.1" -node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.5.0: +node-fetch@^2.1.2, node-fetch@^2.3.0, node-fetch@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== @@ -14133,6 +13947,16 @@ node-forge@0.7.5: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== +node-gyp-build@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" + integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== + +node-gyp-build@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.7.0.tgz#daa77a4f547b9aed3e2aac779eaf151afd60ec8d" + integrity sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w== + node-gyp@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" @@ -14383,13 +14207,6 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== -now-and-later@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" - integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== - dependencies: - once "^1.3.2" - npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" @@ -14586,7 +14403,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.0.4, object.assign@^4.1.0: +object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== @@ -14596,16 +14413,6 @@ object.assign@^4.0.4, object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.defaults@^1.0.0, object.defaults@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" - integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= - dependencies: - array-each "^1.0.1" - array-slice "^1.0.0" - for-own "^1.0.0" - isobject "^3.0.0" - object.entries@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" @@ -14654,14 +14461,6 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.2" es-abstract "^1.5.1" -object.map@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" - integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -14670,21 +14469,13 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -object.pick@^1.2.0, object.pick@^1.3.0: +object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" -object.reduce@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" - integrity sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60= - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - object.values@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" @@ -14719,6 +14510,13 @@ oboe@2.1.4: dependencies: http-https "^1.0.0" +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80= + dependencies: + http-https "^1.0.0" + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -14741,7 +14539,7 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -14821,13 +14619,6 @@ optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" -ordered-read-streams@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" - integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= - dependencies: - readable-stream "^2.0.1" - original-require@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/original-require/-/original-require-1.0.1.tgz#0f130471584cd33511c5ec38c8d59213f9ac5e20" @@ -15088,15 +14879,6 @@ parse-code-context@^1.0.0: resolved "https://registry.yarnpkg.com/parse-code-context/-/parse-code-context-1.0.0.tgz#718c295c593d0d19a37f898473268cc75e98de1e" integrity sha512-OZQaqKaQnR21iqhlnPfVisFjBWjhnMl5J9MgbP8xC+EwoVqbXrq78lp+9Zb3ahmLzrIX5Us/qbvBnaS3hkH6OA== -parse-filepath@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - parse-github-repo-url@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" @@ -15135,11 +14917,6 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-node-version@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== - parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -15183,6 +14960,24 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +patch-package@6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.2.2.tgz#71d170d650c65c26556f0d0fbbb48d92b6cc5f39" + integrity sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^1.2.1" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" @@ -15230,18 +15025,6 @@ path-parse@^1.0.5, path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= - dependencies: - path-root-regex "^0.1.0" - path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -15282,6 +15065,17 @@ pathval@^1.1.0: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= +pbkdf2@^3.0.17: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + pbkdf2@^3.0.3, pbkdf2@^3.0.9: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -16223,17 +16017,12 @@ pretty-format@^25.1.0: ansi-styles "^4.0.0" react-is "^16.12.0" -pretty-hrtime@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= - private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: +process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== @@ -16495,7 +16284,7 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3, pumpify@^1.3.5: +pumpify@^1.3.3: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== @@ -17030,7 +16819,7 @@ read@1, read@~1.0.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^2.0.1, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.5: +readable-stream@^2.0.1, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.5: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -17305,24 +17094,7 @@ relateurl@0.2.x: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= -remove-bom-buffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" - integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== - dependencies: - is-buffer "^1.1.5" - is-utf8 "^0.2.1" - -remove-bom-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" - integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= - dependencies: - remove-bom-buffer "^3.0.0" - safe-buffer "^5.1.0" - through2 "^2.0.3" - -remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: +remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= @@ -17355,20 +17127,11 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -replace-ext@1.0.0, replace-ext@^1.0.0: +replace-ext@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= -replace-homedir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" - integrity sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw= - dependencies: - homedir-polyfill "^1.0.1" - is-absolute "^1.0.0" - remove-trailing-separator "^1.1.0" - req-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" @@ -17416,7 +17179,7 @@ request-promise@^4.2.2: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.67.0, request@^2.85.0, request@^2.87.0, request@^2.88.0: +request@^2.67.0, request@^2.85.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -17513,14 +17276,6 @@ resolve-dir@^0.1.0: expand-tilde "^1.2.2" global-modules "^0.2.3" -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" @@ -17536,13 +17291,6 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" - integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= - dependencies: - value-or-function "^3.0.0" - resolve-pathname@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" @@ -17577,13 +17325,6 @@ resolve@^1.1.6, resolve@^1.10.1, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1, dependencies: path-parse "^1.0.6" -resolve@^1.1.7, resolve@^1.12.0, resolve@^1.15.1, resolve@^1.4.0, resolve@~1.15.1: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== - dependencies: - path-parse "^1.0.6" - resolve@^1.10.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" @@ -17591,6 +17332,13 @@ resolve@^1.10.0: dependencies: path-parse "^1.0.6" +resolve@^1.12.0, resolve@^1.15.1, resolve@~1.15.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + dependencies: + path-parse "^1.0.6" + resolve@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" @@ -17859,6 +17607,11 @@ scrypt-js@2.0.4: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== +scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + scrypt.js@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.2.0.tgz#af8d1465b71e9990110bedfc593b9479e03a8ada" @@ -17867,15 +17620,6 @@ scrypt.js@0.2.0: scrypt "^6.0.2" scryptsy "^1.2.1" -scrypt.js@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.3.0.tgz#6c62d61728ad533c8c376a2e5e3e86d41a95c4c0" - integrity sha512-42LTc1nyFsyv/o0gcHtDztrn+aqpkaCNt5Qh7ATBZfhEZU7IC/0oT/qbBH+uRNoAPvs2fwiOId68FDEoSRA8/A== - dependencies: - scryptsy "^1.2.1" - optionalDependencies: - scrypt "^6.0.2" - scrypt@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/scrypt/-/scrypt-6.0.3.tgz#04e014a5682b53fa50c2d5cce167d719c06d870d" @@ -17917,6 +17661,15 @@ secp256k1@^3.0.1: nan "^2.14.0" safe-buffer "^5.1.2" +secp256k1@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" + integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== + dependencies: + elliptic "^6.5.2" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + seedrandom@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083" @@ -17968,13 +17721,6 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -semver-greatest-satisfied-range@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" - integrity sha1-E+jCZYq5aRywzXEJMkAoDTb3els= - dependencies: - sver-compat "^1.5.0" - "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -18510,11 +18256,6 @@ space-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz#27910835ae00d0adfcdbd0ad7e611fb9544351fa" integrity sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA== -sparkles@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" - integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== - spawn-command@^0.0.2-1: version "0.0.2-1" resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" @@ -18651,11 +18392,6 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== -stack-trace@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= - stack-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" @@ -18702,11 +18438,6 @@ stream-each@^1.1.0: end-of-stream "^1.1.0" stream-shift "^1.0.0" -stream-exhaust@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" - integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== - stream-http@^2.7.2: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" @@ -19057,14 +18788,6 @@ supports-hyperlinks@^1.0.1: has-flag "^2.0.0" supports-color "^5.0.0" -sver-compat@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" - integrity sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= - dependencies: - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - svgo@^1.0.0, svgo@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.2.2.tgz#0253d34eccf2aed4ad4f283e11ee75198f9d7316" @@ -19104,24 +18827,6 @@ swarm-js@0.1.37: tar.gz "^1.0.5" xhr-request-promise "^0.1.2" -swarm-js@0.1.39: - version "0.1.39" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.39.tgz#79becb07f291d4b2a178c50fee7aa6e10342c0e8" - integrity sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg== - dependencies: - bluebird "^3.5.0" - buffer "^5.0.5" - decompress "^4.0.0" - eth-lib "^0.1.26" - fs-extra "^4.0.2" - got "^7.1.0" - mime-types "^2.1.16" - mkdirp-promise "^5.0.1" - mock-fs "^4.1.0" - setimmediate "^1.0.5" - tar "^4.0.2" - xhr-request-promise "^0.1.2" - swarm-js@^0.1.40: version "0.1.40" resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" @@ -19423,15 +19128,7 @@ throat@^4.0.0, throat@^4.1.0: resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= -through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== - dependencies: - through2 "~2.0.0" - xtend "~4.0.0" - -through2@^2.0.0, through2@^2.0.2, through2@^2.0.3, through2@~2.0.0: +through2@^2.0.0, through2@^2.0.2, through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -19456,11 +19153,6 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow== -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= - timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -19519,14 +19211,6 @@ tmpl@1.0.x: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= -to-absolute-glob@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" - integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= - dependencies: - is-absolute "^1.0.0" - is-negated-glob "^1.0.0" - to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -19584,13 +19268,6 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -to-through@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" - integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= - dependencies: - through2 "^2.0.3" - toggle-selection@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" @@ -19896,11 +19573,6 @@ unbzip2-stream@^1.3.3: buffer "^5.2.1" through "^2.3.8" -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= - undefsafe@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" @@ -19918,26 +19590,6 @@ underscore@1.9.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== -undertaker-registry@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" - integrity sha1-XkvaMI5KiirlhPm5pDWaSZglzFA= - -undertaker@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.2.1.tgz#701662ff8ce358715324dfd492a4f036055dfe4b" - integrity sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA== - dependencies: - arr-flatten "^1.0.1" - arr-map "^2.0.0" - bach "^1.0.0" - collection-map "^1.0.0" - es6-weak-map "^2.0.1" - last-run "^1.1.0" - object.defaults "^1.0.0" - object.reduce "^1.0.0" - undertaker-registry "^1.0.0" - unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -20009,14 +19661,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-stream@^2.0.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" - integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== - dependencies: - json-stable-stringify-without-jsonify "^1.0.1" - through2-filter "^3.0.0" - unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" @@ -20189,6 +19833,13 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +utf-8-validate@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.2.tgz#63cfbccd85dc1f2b66cf7a1d0eebc08ed056bfb3" + integrity sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw== + dependencies: + node-gyp-build "~3.7.0" + utf8@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.1.tgz#2e01db02f7d8d0944f77104f1609eb0c304cf768" @@ -20263,13 +19914,6 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== -v8flags@^3.0.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8" - integrity sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w== - dependencies: - homedir-polyfill "^1.0.1" - valid-url@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" @@ -20300,10 +19944,10 @@ value-equal@^1.0.1: resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== -value-or-function@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" - integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== vary@^1, vary@~1.1.2: version "1.1.2" @@ -20360,54 +20004,6 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" -vinyl-fs@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" - integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== - dependencies: - fs-mkdirp-stream "^1.0.0" - glob-stream "^6.1.0" - graceful-fs "^4.0.0" - is-valid-glob "^1.0.0" - lazystream "^1.0.0" - lead "^1.0.0" - object.assign "^4.0.4" - pumpify "^1.3.5" - readable-stream "^2.3.3" - remove-bom-buffer "^3.0.0" - remove-bom-stream "^1.2.0" - resolve-options "^1.1.0" - through2 "^2.0.0" - to-through "^2.0.0" - value-or-function "^3.0.0" - vinyl "^2.0.0" - vinyl-sourcemap "^1.1.0" - -vinyl-sourcemap@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" - integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= - dependencies: - append-buffer "^1.0.2" - convert-source-map "^1.5.0" - graceful-fs "^4.1.6" - normalize-path "^2.1.1" - now-and-later "^2.0.0" - remove-bom-buffer "^3.0.0" - vinyl "^2.0.0" - -vinyl@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" - integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" @@ -20521,14 +20117,14 @@ web3-bzz@1.0.0-beta.34: swarm-js "0.1.37" underscore "1.8.3" -web3-bzz@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.4.tgz#a4adb7a8cba3d260de649bdb1f14ed359bfb3821" - integrity sha512-MqhAo/+0iQSMBtt3/QI1rU83uvF08sYq8r25+OUZ+4VtihnYsmkkca+rdU0QbRyrXY2/yGIpI46PFdh0khD53A== +web3-bzz@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.11.tgz#41bc19a77444bd5365744596d778b811880f707f" + integrity sha512-XGpWUEElGypBjeFyUhTkiPXFbDVD6Nr/S5jznE3t8cWUA0FxRf1n3n/NuIZeb0H9RkN2Ctd/jNma/k8XGa3YKg== dependencies: - "@types/node" "^10.12.18" + "@types/node" "^12.12.6" got "9.6.0" - swarm-js "0.1.39" + swarm-js "^0.1.40" underscore "1.9.1" web3-bzz@1.2.7: @@ -20541,6 +20137,16 @@ web3-bzz@1.2.7: swarm-js "^0.1.40" underscore "1.9.1" +web3-bzz@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.0.tgz#83dfd77fa8a64bbb660462dffd0fee2a02ef1051" + integrity sha512-ibYAnKab+sgTo/UdfbrvYfWblXjjgSMgyy9/FHa6WXS14n/HVB+HfWqGz2EM3fok8Wy5XoKGMvdqvERQ/mzq1w== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + underscore "1.9.1" + web3-core-helpers@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.30.tgz#a000cee3f0a09eea13d74b5730335d4635fe1f2f" @@ -20559,14 +20165,14 @@ web3-core-helpers@1.0.0-beta.34: web3-eth-iban "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3-core-helpers@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.4.tgz#ffd425861f4d66b3f38df032afdb39ea0971fc0f" - integrity sha512-U7wbsK8IbZvF3B7S+QMSNP0tni/6VipnJkB0tZVEpHEIV2WWeBHYmZDnULWcsS/x/jn9yKhJlXIxWGsEAMkjiw== +web3-core-helpers@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz#84c681ed0b942c0203f3b324a245a127e8c67a99" + integrity sha512-PEPoAoZd5ME7UfbnCZBdzIerpe74GEvlwT4AjOmHeCVZoIFk7EqvOZDejJHt+feJA6kMVTdd0xzRNN295UhC1A== dependencies: underscore "1.9.1" - web3-eth-iban "1.2.4" - web3-utils "1.2.4" + web3-eth-iban "1.2.11" + web3-utils "1.2.11" web3-core-helpers@1.2.7: version "1.2.7" @@ -20577,6 +20183,15 @@ web3-core-helpers@1.2.7: web3-eth-iban "1.2.7" web3-utils "1.2.7" +web3-core-helpers@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.0.tgz#697cc3246a7eaaaac64ea506828d861c981c3f31" + integrity sha512-+MFb1kZCrRctf7UYE7NCG4rGhSXaQJ/KF07di9GVK1pxy1K0+rFi61ZobuV1ky9uQp+uhhSPts4Zp55kRDB5sw== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.3.0" + web3-utils "1.3.0" + web3-core-method@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.0.0-beta.30.tgz#8dd6ff789e8d1563b8786d13a78c7facefae471c" @@ -20599,16 +20214,17 @@ web3-core-method@1.0.0-beta.34: web3-core-subscriptions "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3-core-method@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.4.tgz#a0fbc50b8ff5fd214021435cc2c6d1e115807aed" - integrity sha512-8p9kpL7di2qOVPWgcM08kb+yKom0rxRCMv6m/K+H+yLSxev9TgMbCgMSbPWAHlyiF3SJHw7APFKahK5Z+8XT5A== +web3-core-method@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.11.tgz#f880137d1507a0124912bf052534f168b8d8fbb6" + integrity sha512-ff0q76Cde94HAxLDZ6DbdmKniYCQVtvuaYh+rtOUMB6kssa5FX0q3vPmixi7NPooFnbKmmZCM6NvXg4IreTPIw== dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" underscore "1.9.1" - web3-core-helpers "1.2.4" - web3-core-promievent "1.2.4" - web3-core-subscriptions "1.2.4" - web3-utils "1.2.4" + web3-core-helpers "1.2.11" + web3-core-promievent "1.2.11" + web3-core-subscriptions "1.2.11" + web3-utils "1.2.11" web3-core-method@1.2.7: version "1.2.7" @@ -20621,6 +20237,18 @@ web3-core-method@1.2.7: web3-core-subscriptions "1.2.7" web3-utils "1.2.7" +web3-core-method@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.0.tgz#a71387af842aec7dbad5dbbd1130c14cc6c8beb3" + integrity sha512-h0yFDrYVzy5WkLxC/C3q+hiMnzxdWm9p1T1rslnuHgOp6nYfqzu/6mUIXrsS4h/OWiGJt+BZ0xVZmtC31HDWtg== + dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" + underscore "1.9.1" + web3-core-helpers "1.3.0" + web3-core-promievent "1.3.0" + web3-core-subscriptions "1.3.0" + web3-utils "1.3.0" + web3-core-promievent@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.30.tgz#6205192bfb097441132226a5939ec5aed3a8a291" @@ -20637,13 +20265,12 @@ web3-core-promievent@1.0.0-beta.34: any-promise "1.3.0" eventemitter3 "1.1.1" -web3-core-promievent@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.4.tgz#75e5c0f2940028722cdd21ba503ebd65272df6cb" - integrity sha512-gEUlm27DewUsfUgC3T8AxkKi8Ecx+e+ZCaunB7X4Qk3i9F4C+5PSMGguolrShZ7Zb6717k79Y86f3A00O0VAZw== +web3-core-promievent@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz#51fe97ca0ddec2f99bf8c3306a7a8e4b094ea3cf" + integrity sha512-il4McoDa/Ox9Agh4kyfQ8Ak/9ABYpnF8poBLL33R/EnxLsJOGQG2nZhkJa3I067hocrPSjEdlPt/0bHXsln4qA== dependencies: - any-promise "1.3.0" - eventemitter3 "3.1.2" + eventemitter3 "4.0.4" web3-core-promievent@1.2.7: version "1.2.7" @@ -20652,6 +20279,13 @@ web3-core-promievent@1.2.7: dependencies: eventemitter3 "3.1.2" +web3-core-promievent@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.0.tgz#e0442dd0a8989b6bdce09293976cee6d9237a484" + integrity sha512-blv69wrXw447TP3iPvYJpllkhW6B18nfuEbrfcr3n2Y0v1Jx8VJacNZFDFsFIcgXcgUIVCtOpimU7w9v4+rtaw== + dependencies: + eventemitter3 "4.0.4" + web3-core-requestmanager@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.30.tgz#6ee56fb8a6cb85fd01b3080854f50d64e52240c6" @@ -20674,16 +20308,16 @@ web3-core-requestmanager@1.0.0-beta.34: web3-providers-ipc "1.0.0-beta.34" web3-providers-ws "1.0.0-beta.34" -web3-core-requestmanager@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.4.tgz#0a7020a23fb91c6913c611dfd3d8c398d1e4b4a8" - integrity sha512-eZJDjyNTDtmSmzd3S488nR/SMJtNnn/GuwxnMh3AzYCqG3ZMfOylqTad2eYJPvc2PM5/Gj1wAMQcRpwOjjLuPg== +web3-core-requestmanager@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz#fe6eb603fbaee18530293a91f8cf26d8ae28c45a" + integrity sha512-oFhBtLfOiIbmfl6T6gYjjj9igOvtyxJ+fjS+byRxiwFJyJ5BQOz4/9/17gWR1Cq74paTlI7vDGxYfuvfE/mKvA== dependencies: underscore "1.9.1" - web3-core-helpers "1.2.4" - web3-providers-http "1.2.4" - web3-providers-ipc "1.2.4" - web3-providers-ws "1.2.4" + web3-core-helpers "1.2.11" + web3-providers-http "1.2.11" + web3-providers-ipc "1.2.11" + web3-providers-ws "1.2.11" web3-core-requestmanager@1.2.7: version "1.2.7" @@ -20696,6 +20330,17 @@ web3-core-requestmanager@1.2.7: web3-providers-ipc "1.2.7" web3-providers-ws "1.2.7" +web3-core-requestmanager@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.0.tgz#c5b9a0304504c0e6cce6c90bc1a3bff82732aa1f" + integrity sha512-3yMbuGcomtzlmvTVqNRydxsx7oPlw3ioRL6ReF9PeNYDkUsZaUib+6Dp5eBt7UXh5X+SIn/xa1smhDHz5/HpAw== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.3.0" + web3-providers-http "1.3.0" + web3-providers-ipc "1.3.0" + web3-providers-ws "1.3.0" + web3-core-subscriptions@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.30.tgz#31652c75356c3f67e5a19cd14b8d314bad4e2127" @@ -20714,14 +20359,14 @@ web3-core-subscriptions@1.0.0-beta.34: underscore "1.8.3" web3-core-helpers "1.0.0-beta.34" -web3-core-subscriptions@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.4.tgz#0dc095b5cfd82baa527a39796e3515a846b21b99" - integrity sha512-3D607J2M8ymY9V+/WZq4MLlBulwCkwEjjC2U+cXqgVO1rCyVqbxZNCmHyNYHjDDCxSEbks9Ju5xqJxDSxnyXEw== +web3-core-subscriptions@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz#beca908fbfcb050c16f45f3f0f4c205e8505accd" + integrity sha512-qEF/OVqkCvQ7MPs1JylIZCZkin0aKK9lDxpAtQ1F8niEDGFqn7DT8E/vzbIa0GsOjL2fZjDhWJsaW+BSoAW1gg== dependencies: - eventemitter3 "3.1.2" + eventemitter3 "4.0.4" underscore "1.9.1" - web3-core-helpers "1.2.4" + web3-core-helpers "1.2.11" web3-core-subscriptions@1.2.7: version "1.2.7" @@ -20732,6 +20377,15 @@ web3-core-subscriptions@1.2.7: underscore "1.9.1" web3-core-helpers "1.2.7" +web3-core-subscriptions@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.0.tgz#c2622ccd2b84f4687475398ff966b579dba0847e" + integrity sha512-MUUQUAhJDb+Nz3S97ExVWveH4utoUnsbPWP+q1HJH437hEGb4vunIb9KvN3hFHLB+aHJfPeStM/4yYTz5PeuyQ== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.3.0" + web3-core@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.0.0-beta.30.tgz#f75f4d3b85be74c7674637921c3e013bc5d27679" @@ -20752,18 +20406,18 @@ web3-core@1.0.0-beta.34: web3-core-requestmanager "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3-core@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.4.tgz#2df13b978dcfc59c2abaa887d27f88f21ad9a9d6" - integrity sha512-CHc27sMuET2cs1IKrkz7xzmTdMfZpYswe7f0HcuyneTwS1yTlTnHyqjAaTy0ZygAb/x4iaVox+Gvr4oSAqSI+A== +web3-core@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.11.tgz#1043cacc1becb80638453cc5b2a14be9050288a7" + integrity sha512-CN7MEYOY5ryo5iVleIWRE3a3cZqVaLlIbIzDPsvQRUfzYnvzZQRZBm9Mq+ttDi2STOOzc1MKylspz/o3yq/LjQ== dependencies: - "@types/bignumber.js" "^5.0.0" - "@types/bn.js" "^4.11.4" - "@types/node" "^12.6.1" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-core-requestmanager "1.2.4" - web3-utils "1.2.4" + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-requestmanager "1.2.11" + web3-utils "1.2.11" web3-core@1.2.7: version "1.2.7" @@ -20778,6 +20432,19 @@ web3-core@1.2.7: web3-core-requestmanager "1.2.7" web3-utils "1.2.7" +web3-core@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.0.tgz#b818903738461c1cca0163339e1d6d3fa51242cf" + integrity sha512-BwWvAaKJf4KFG9QsKRi3MNoNgzjI6szyUlgme1qNPxUdCkaS3Rdpa0VKYNHP7M/YTk82/59kNE66mH5vmoaXjA== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.3.0" + web3-core-method "1.3.0" + web3-core-requestmanager "1.3.0" + web3-utils "1.3.0" + web3-eth-abi@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.30.tgz#6ea52c999a8505b47c2f88ba61d2a680a1066409" @@ -20798,14 +20465,14 @@ web3-eth-abi@1.0.0-beta.34: web3-core-helpers "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3-eth-abi@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.4.tgz#5b73e5ef70b03999227066d5d1310b168845e2b8" - integrity sha512-8eLIY4xZKoU3DSVu1pORluAw9Ru0/v4CGdw5so31nn+7fR8zgHMgwbFe0aOqWQ5VU42PzMMXeIJwt4AEi2buFg== +web3-eth-abi@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz#a887494e5d447c2926d557a3834edd66e17af9b0" + integrity sha512-PkRYc0+MjuLSgg03QVWqWlQivJqRwKItKtEpRUaxUAeLE7i/uU39gmzm2keHGcQXo3POXAbOnMqkDvOep89Crg== dependencies: - ethers "4.0.0-beta.3" + "@ethersproject/abi" "5.0.0-beta.153" underscore "1.9.1" - web3-utils "1.2.4" + web3-utils "1.2.11" web3-eth-abi@1.2.7: version "1.2.7" @@ -20816,6 +20483,15 @@ web3-eth-abi@1.2.7: underscore "1.9.1" web3-utils "1.2.7" +web3-eth-abi@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.0.tgz#387b7ea9b38be69ad8856bc7b4e9a6a69bb4d22b" + integrity sha512-1OrZ9+KGrBeBRd3lO8upkpNua9+7cBsQAgor9wbA25UrcUYSyL8teV66JNRu9gFxaTbkpdrGqM7J/LXpraXWrg== + dependencies: + "@ethersproject/abi" "5.0.0-beta.153" + underscore "1.9.1" + web3-utils "1.3.0" + web3-eth-abi@^1.0.0-beta.24: version "1.2.6" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.6.tgz#b495383cc5c0d8e2857b26e7fe25606685983b25" @@ -20857,23 +20533,22 @@ web3-eth-accounts@1.0.0-beta.34: web3-core-method "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3-eth-accounts@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.4.tgz#ada6edc49542354328a85cafab067acd7f88c288" - integrity sha512-04LzT/UtWmRFmi4hHRewP5Zz43fWhuHiK5XimP86sUQodk/ByOkXQ3RoXyGXFMNoRxdcAeRNxSfA2DpIBc9xUw== +web3-eth-accounts@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz#a9e3044da442d31903a7ce035a86d8fa33f90520" + integrity sha512-6FwPqEpCfKIh3nSSGeo3uBm2iFSnFJDfwL3oS9pyegRBXNsGRVpgiW63yhNzL0796StsvjHWwQnQHsZNxWAkGw== dependencies: - "@web3-js/scrypt-shim" "^0.1.0" - any-promise "1.3.0" crypto-browserify "3.12.0" - eth-lib "0.2.7" + eth-lib "0.2.8" ethereumjs-common "^1.3.2" ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" underscore "1.9.1" uuid "3.3.2" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-utils "1.2.4" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-utils "1.2.11" web3-eth-accounts@1.2.7: version "1.2.7" @@ -20892,6 +20567,23 @@ web3-eth-accounts@1.2.7: web3-core-method "1.2.7" web3-utils "1.2.7" +web3-eth-accounts@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.0.tgz#010acf389b2bee6d5e1aecb2fe78bfa5c8f26c7a" + integrity sha512-/Q7EVW4L2wWUbNRtOTwAIrYvJid/5UnKMw67x/JpvRMwYC+e+744P536Ja6SG4X3MnzFvd3E/jruV4qa6k+zIw== + dependencies: + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.3.0" + web3-core-helpers "1.3.0" + web3-core-method "1.3.0" + web3-utils "1.3.0" + web3-eth-contract@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.30.tgz#d7eba2385084dff3c75aac48235af2c8d2d6a258" @@ -20920,20 +20612,20 @@ web3-eth-contract@1.0.0-beta.34: web3-eth-abi "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3-eth-contract@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.4.tgz#68ef7cc633232779b0a2c506a810fbe903575886" - integrity sha512-b/9zC0qjVetEYnzRA1oZ8gF1OSSUkwSYi5LGr4GeckLkzXP7osEnp9lkO/AQcE4GpG+l+STnKPnASXJGZPgBRQ== +web3-eth-contract@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.11.tgz#917065902bc27ce89da9a1da26e62ef663663b90" + integrity sha512-MzYuI/Rq2o6gn7vCGcnQgco63isPNK5lMAan2E51AJLknjSLnOxwNY3gM8BcKoy4Z+v5Dv00a03Xuk78JowFow== dependencies: - "@types/bn.js" "^4.11.4" + "@types/bn.js" "^4.11.5" underscore "1.9.1" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-core-promievent "1.2.4" - web3-core-subscriptions "1.2.4" - web3-eth-abi "1.2.4" - web3-utils "1.2.4" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-promievent "1.2.11" + web3-core-subscriptions "1.2.11" + web3-eth-abi "1.2.11" + web3-utils "1.2.11" web3-eth-contract@1.2.7: version "1.2.7" @@ -20950,19 +20642,35 @@ web3-eth-contract@1.2.7: web3-eth-abi "1.2.7" web3-utils "1.2.7" -web3-eth-ens@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.4.tgz#b95b3aa99fb1e35c802b9e02a44c3046a3fa065e" - integrity sha512-g8+JxnZlhdsCzCS38Zm6R/ngXhXzvc3h7bXlxgKU4coTzLLoMpgOAEz71GxyIJinWTFbLXk/WjNY0dazi9NwVw== +web3-eth-contract@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.0.tgz#c758340ac800788e29fa29edc8b0c0ac957b741c" + integrity sha512-3SCge4SRNCnzLxf0R+sXk6vyTOl05g80Z5+9/B5pERwtPpPWaQGw8w01vqYqsYBKC7zH+dxhMaUgVzU2Dgf7bQ== dependencies: + "@types/bn.js" "^4.11.5" + underscore "1.9.1" + web3-core "1.3.0" + web3-core-helpers "1.3.0" + web3-core-method "1.3.0" + web3-core-promievent "1.3.0" + web3-core-subscriptions "1.3.0" + web3-eth-abi "1.3.0" + web3-utils "1.3.0" + +web3-eth-ens@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.11.tgz#26d4d7f16d6cbcfff918e39832b939edc3162532" + integrity sha512-dbW7dXP6HqT1EAPvnniZVnmw6TmQEKF6/1KgAxbo8iBBYrVTMDGFQUUnZ+C4VETGrwwaqtX4L9d/FrQhZ6SUiA== + dependencies: + content-hash "^2.5.2" eth-ens-namehash "2.0.8" underscore "1.9.1" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-promievent "1.2.4" - web3-eth-abi "1.2.4" - web3-eth-contract "1.2.4" - web3-utils "1.2.4" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-promievent "1.2.11" + web3-eth-abi "1.2.11" + web3-eth-contract "1.2.11" + web3-utils "1.2.11" web3-eth-ens@1.2.7: version "1.2.7" @@ -20978,6 +20686,21 @@ web3-eth-ens@1.2.7: web3-eth-contract "1.2.7" web3-utils "1.2.7" +web3-eth-ens@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.0.tgz#0887ba38473c104cf5fb8a715828b3b354fa02a2" + integrity sha512-WnOru+EcuM5dteiVYJcHXo/I7Wq+ei8RrlS2nir49M0QpYvUPGbCGgTbifcjJQTWamgORtWdljSA1s2Asdb74w== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.3.0" + web3-core-helpers "1.3.0" + web3-core-promievent "1.3.0" + web3-eth-abi "1.3.0" + web3-eth-contract "1.3.0" + web3-utils "1.3.0" + web3-eth-iban@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.30.tgz#3b080a5c4da1fa37477b17e4c900781b92150645" @@ -20994,13 +20717,13 @@ web3-eth-iban@1.0.0-beta.34: bn.js "4.11.6" web3-utils "1.0.0-beta.34" -web3-eth-iban@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.4.tgz#8e0550fd3fd8e47a39357d87fe27dee9483ee476" - integrity sha512-D9HIyctru/FLRpXakRwmwdjb5bWU2O6UE/3AXvRm6DCOf2e+7Ve11qQrPtaubHfpdW3KWjDKvlxV9iaFv/oTMQ== +web3-eth-iban@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.11.tgz#f5f73298305bc7392e2f188bf38a7362b42144ef" + integrity sha512-ozuVlZ5jwFC2hJY4+fH9pIcuH1xP0HEFhtWsR69u9uDIANHLPQQtWYmdj7xQ3p2YT4bQLq/axKhZi7EZVetmxQ== dependencies: - bn.js "4.11.8" - web3-utils "1.2.4" + bn.js "^4.11.9" + web3-utils "1.2.11" web3-eth-iban@1.2.7: version "1.2.7" @@ -21010,6 +20733,14 @@ web3-eth-iban@1.2.7: bn.js "4.11.8" web3-utils "1.2.7" +web3-eth-iban@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.0.tgz#15b782dfaf273ebc4e3f389f1367f4e88ddce4a5" + integrity sha512-v9mZWhR4fPF17/KhHLiWir4YHWLe09O3B/NTdhWqw3fdAMJNztzMHGzgHxA/4fU+rhrs/FhDzc4yt32zMEXBZw== + dependencies: + bn.js "^4.11.9" + web3-utils "1.3.0" + web3-eth-personal@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.30.tgz#8bd4ef40b3b5f841dd3a8b97873d9dc791caf748" @@ -21032,17 +20763,17 @@ web3-eth-personal@1.0.0-beta.34: web3-net "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3-eth-personal@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.4.tgz#3224cca6851c96347d9799b12c1b67b2a6eb232b" - integrity sha512-5Russ7ZECwHaZXcN3DLuLS7390Vzgrzepl4D87SD6Sn1DHsCZtvfdPIYwoTmKNp69LG3mORl7U23Ga5YxqkICw== +web3-eth-personal@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz#a38b3942a1d87a62070ce0622a941553c3d5aa70" + integrity sha512-42IzUtKq9iHZ8K9VN0vAI50iSU9tOA1V7XU2BhF/tb7We2iKBVdkley2fg26TxlOcKNEHm7o6HRtiiFsVK4Ifw== dependencies: - "@types/node" "^12.6.1" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-net "1.2.4" - web3-utils "1.2.4" + "@types/node" "^12.12.6" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-net "1.2.11" + web3-utils "1.2.11" web3-eth-personal@1.2.7: version "1.2.7" @@ -21056,6 +20787,18 @@ web3-eth-personal@1.2.7: web3-net "1.2.7" web3-utils "1.2.7" +web3-eth-personal@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.0.tgz#d376e03dc737d961ff1f8d1aca866efad8477135" + integrity sha512-2czUhElsJdLpuNfun9GeLiClo5O6Xw+bLSjl3f4bNG5X2V4wcIjX2ygep/nfstLLtkz8jSkgl/bV7esANJyeRA== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.3.0" + web3-core-helpers "1.3.0" + web3-core-method "1.3.0" + web3-net "1.3.0" + web3-utils "1.3.0" + web3-eth@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.0.0-beta.30.tgz#029b15e14cb608b9cfe02603b504d651870f0501" @@ -21092,24 +20835,24 @@ web3-eth@1.0.0-beta.34: web3-net "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3-eth@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.4.tgz#24c3b1f1ac79351bbfb808b2ab5c585fa57cdd00" - integrity sha512-+j+kbfmZsbc3+KJpvHM16j1xRFHe2jBAniMo1BHKc3lho6A8Sn9Buyut6odubguX2AxoRArCdIDCkT9hjUERpA== +web3-eth@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.11.tgz#4c81fcb6285b8caf544058fba3ae802968fdc793" + integrity sha512-REvxW1wJ58AgHPcXPJOL49d1K/dPmuw4LjPLBPStOVkQjzDTVmJEIsiLwn2YeuNDd4pfakBwT8L3bz1G1/wVsQ== dependencies: underscore "1.9.1" - web3-core "1.2.4" - web3-core-helpers "1.2.4" - web3-core-method "1.2.4" - web3-core-subscriptions "1.2.4" - web3-eth-abi "1.2.4" - web3-eth-accounts "1.2.4" - web3-eth-contract "1.2.4" - web3-eth-ens "1.2.4" - web3-eth-iban "1.2.4" - web3-eth-personal "1.2.4" - web3-net "1.2.4" - web3-utils "1.2.4" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-subscriptions "1.2.11" + web3-eth-abi "1.2.11" + web3-eth-accounts "1.2.11" + web3-eth-contract "1.2.11" + web3-eth-ens "1.2.11" + web3-eth-iban "1.2.11" + web3-eth-personal "1.2.11" + web3-net "1.2.11" + web3-utils "1.2.11" web3-eth@1.2.7: version "1.2.7" @@ -21130,6 +20873,25 @@ web3-eth@1.2.7: web3-net "1.2.7" web3-utils "1.2.7" +web3-eth@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.0.tgz#898e5f5a8827f9bc6844e267a52eb388916a6771" + integrity sha512-/bzJcxXPM9EM18JM5kO2JjZ3nEqVo3HxqU93aWAEgJNqaP/Lltmufl2GpvIB2Hvj+FXAjAXquxUdQ2/xP7BzHQ== + dependencies: + underscore "1.9.1" + web3-core "1.3.0" + web3-core-helpers "1.3.0" + web3-core-method "1.3.0" + web3-core-subscriptions "1.3.0" + web3-eth-abi "1.3.0" + web3-eth-accounts "1.3.0" + web3-eth-contract "1.3.0" + web3-eth-ens "1.3.0" + web3-eth-iban "1.3.0" + web3-eth-personal "1.3.0" + web3-net "1.3.0" + web3-utils "1.3.0" + web3-net@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.0.0-beta.30.tgz#0a352ede296e6d4b7f88b67aa474e49703de73bf" @@ -21148,14 +20910,14 @@ web3-net@1.0.0-beta.34: web3-core-method "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3-net@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.4.tgz#1d246406d3aaffbf39c030e4e98bce0ca5f25458" - integrity sha512-wKOsqhyXWPSYTGbp7ofVvni17yfRptpqoUdp3SC8RAhDmGkX6irsiT9pON79m6b3HUHfLoBilFQyt/fTUZOf7A== +web3-net@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.11.tgz#eda68ef25e5cdb64c96c39085cdb74669aabbe1b" + integrity sha512-sjrSDj0pTfZouR5BSTItCuZ5K/oZPVdVciPQ6981PPPIwJJkCMeVjD7I4zO3qDPCnBjBSbWvVnLdwqUBPtHxyg== dependencies: - web3-core "1.2.4" - web3-core-method "1.2.4" - web3-utils "1.2.4" + web3-core "1.2.11" + web3-core-method "1.2.11" + web3-utils "1.2.11" web3-net@1.2.7: version "1.2.7" @@ -21166,6 +20928,15 @@ web3-net@1.2.7: web3-core-method "1.2.7" web3-utils "1.2.7" +web3-net@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.0.tgz#b69068cccffab58911c2f08ca4abfbefb0f948c6" + integrity sha512-Xz02KylOyrB2YZzCkysEDrY7RbKxb7LADzx3Zlovfvuby7HBwtXVexXKtoGqksa+ns1lvjQLLQGb+OeLi7Sr7w== + dependencies: + web3-core "1.3.0" + web3-core-method "1.3.0" + web3-utils "1.3.0" + web3-provider-engine@14.0.6: version "14.0.6" resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.0.6.tgz#cbdd66fe20c0136a3a495cbe40d18b6c4160d5f0" @@ -21235,12 +21006,12 @@ web3-providers-http@1.0.0-beta.34: web3-core-helpers "1.0.0-beta.34" xhr2 "0.1.4" -web3-providers-http@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.4.tgz#514fcad71ae77832c2c15574296282fbbc5f4a67" - integrity sha512-dzVCkRrR/cqlIrcrWNiPt9gyt0AZTE0J+MfAu9rR6CyIgtnm1wFUVVGaxYRxuTGQRO4Dlo49gtoGwaGcyxqiTw== +web3-providers-http@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.11.tgz#1cd03442c61670572d40e4dcdf1faff8bd91e7c6" + integrity sha512-psh4hYGb1+ijWywfwpB2cvvOIMISlR44F/rJtYkRmQ5jMvG4FOCPlQJPiHQZo+2cc3HbktvvSJzIhkWQJdmvrA== dependencies: - web3-core-helpers "1.2.4" + web3-core-helpers "1.2.11" xhr2-cookies "1.1.0" web3-providers-http@1.2.7: @@ -21251,6 +21022,14 @@ web3-providers-http@1.2.7: web3-core-helpers "1.2.7" xhr2-cookies "1.1.0" +web3-providers-http@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.0.tgz#88227f64c88b32abed4359383c2663616e0dc531" + integrity sha512-cMKhUI6PqlY/EC+ZDacAxajySBu8AzW8jOjt1Pe/mbRQgS0rcZyvLePGTTuoyaA8C21F8UW+EE5jj7YsNgOuqA== + dependencies: + web3-core-helpers "1.3.0" + xhr2-cookies "1.1.0" + web3-providers-ipc@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.30.tgz#ee2d8d18a3f120b777044a56e67e0aee20854587" @@ -21269,14 +21048,14 @@ web3-providers-ipc@1.0.0-beta.34: underscore "1.8.3" web3-core-helpers "1.0.0-beta.34" -web3-providers-ipc@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.4.tgz#9d6659f8d44943fb369b739f48df09092be459bd" - integrity sha512-8J3Dguffin51gckTaNrO3oMBo7g+j0UNk6hXmdmQMMNEtrYqw4ctT6t06YOf9GgtOMjSAc1YEh3LPrvgIsR7og== +web3-providers-ipc@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz#d16d6c9be1be6e0b4f4536c4acc16b0f4f27ef21" + integrity sha512-yhc7Y/k8hBV/KlELxynWjJDzmgDEDjIjBzXK+e0rHBsYEhdCNdIH5Psa456c+l0qTEU2YzycF8VAjYpWfPnBpQ== dependencies: oboe "2.1.4" underscore "1.9.1" - web3-core-helpers "1.2.4" + web3-core-helpers "1.2.11" web3-providers-ipc@1.2.7: version "1.2.7" @@ -21287,6 +21066,15 @@ web3-providers-ipc@1.2.7: underscore "1.9.1" web3-core-helpers "1.2.7" +web3-providers-ipc@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.0.tgz#d7c2b203733b46f7b4e7b15633d891648cf9a293" + integrity sha512-0CrLuRofR+1J38nEj4WsId/oolwQEM6Yl1sOt41S/6bNI7htdkwgVhSloFIMJMDFHtRw229QIJ6wIaKQz0X1Og== + dependencies: + oboe "2.1.5" + underscore "1.9.1" + web3-core-helpers "1.3.0" + web3-providers-ws@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.30.tgz#9ae69a9ead8a8761f86379fa347b6db5ae44b12d" @@ -21305,14 +21093,15 @@ web3-providers-ws@1.0.0-beta.34: web3-core-helpers "1.0.0-beta.34" websocket "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible" -web3-providers-ws@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.4.tgz#099ee271ee03f6ea4f5df9cfe969e83f4ce0e36f" - integrity sha512-F/vQpDzeK+++oeeNROl1IVTufFCwCR2hpWe5yRXN0ApLwHqXrMI7UwQNdJ9iyibcWjJf/ECbauEEQ8CHgE+MYQ== +web3-providers-ws@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz#a1dfd6d9778d840561d9ec13dd453046451a96bb" + integrity sha512-ZxnjIY1Er8Ty+cE4migzr43zA/+72AF1myzsLaU5eVgdsfV7Jqx7Dix1hbevNZDKFlSoEyq/3j/jYalh3So1Zg== dependencies: - "@web3-js/websocket" "^1.0.29" + eventemitter3 "4.0.4" underscore "1.9.1" - web3-core-helpers "1.2.4" + web3-core-helpers "1.2.11" + websocket "^1.0.31" web3-providers-ws@1.2.7: version "1.2.7" @@ -21324,6 +21113,16 @@ web3-providers-ws@1.2.7: underscore "1.9.1" web3-core-helpers "1.2.7" +web3-providers-ws@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.0.tgz#84adeff65acd4624d7f5bb43c5b2b22d8f0f63a4" + integrity sha512-Im5MthhJnJst8nSoq0TgbyOdaiFQFa5r6sHPOVllhgIgViDqzbnlAFW9sNzQ0Q8VXPNfPIQKi9cOrHlSRNPjRw== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.3.0" + websocket "^1.0.32" + web3-shh@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.0.0-beta.30.tgz#2bfe3220d958ff4ca592017790852bc57b7b0ca7" @@ -21344,15 +21143,15 @@ web3-shh@1.0.0-beta.34: web3-core-subscriptions "1.0.0-beta.34" web3-net "1.0.0-beta.34" -web3-shh@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.4.tgz#5c8ff5ab624a3b14f08af0d24d2b16c10e9f70dd" - integrity sha512-z+9SCw0dE+69Z/Hv8809XDbLj7lTfEv9Sgu8eKEIdGntZf4v7ewj5rzN5bZZSz8aCvfK7Y6ovz1PBAu4QzS4IQ== +web3-shh@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" + integrity sha512-B3OrO3oG1L+bv3E1sTwCx66injW1A8hhwpknDUbV+sw3fehFazA06z9SGXUefuFI1kVs4q2vRi0n4oCcI4dZDg== dependencies: - web3-core "1.2.4" - web3-core-method "1.2.4" - web3-core-subscriptions "1.2.4" - web3-net "1.2.4" + web3-core "1.2.11" + web3-core-method "1.2.11" + web3-core-subscriptions "1.2.11" + web3-net "1.2.11" web3-shh@1.2.7: version "1.2.7" @@ -21364,6 +21163,16 @@ web3-shh@1.2.7: web3-core-subscriptions "1.2.7" web3-net "1.2.7" +web3-shh@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.0.tgz#62d15297da8fb5f733dd1b98f9ade300590f4d49" + integrity sha512-IZTojA4VCwVq+7eEIHuL1tJXtU+LJDhO8Y2QmuwetEWW1iBgWCGPHZasipWP+7kDpSm/5lo5GRxL72FF/Os/tA== + dependencies: + web3-core "1.3.0" + web3-core-method "1.3.0" + web3-core-subscriptions "1.3.0" + web3-net "1.3.0" + web3-utils@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.30.tgz#eae408cc8d6d6fecc8d5097cfead51773f231ff9" @@ -21390,13 +21199,13 @@ web3-utils@1.0.0-beta.34: underscore "1.8.3" utf8 "2.1.1" -web3-utils@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.4.tgz#96832a39a66b05bf8862a5b0bdad2799d709d951" - integrity sha512-+S86Ip+jqfIPQWvw2N/xBQq5JNqCO0dyvukGdJm8fEWHZbckT4WxSpHbx+9KLEWY4H4x9pUwnoRkK87pYyHfgQ== +web3-utils@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" + integrity sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ== dependencies: - bn.js "4.11.8" - eth-lib "0.2.7" + bn.js "^4.11.9" + eth-lib "0.2.8" ethereum-bloom-filters "^1.0.6" ethjs-unit "0.1.6" number-to-bn "1.7.0" @@ -21432,6 +21241,20 @@ web3-utils@1.2.7: underscore "1.9.1" utf8 "3.0.0" +web3-utils@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.0.tgz#5bac16e5e0ec9fe7bdcfadb621655e8aa3cf14e1" + integrity sha512-2mS5axFCbkhicmoDRuJeuo0TVGQDgC2sPi/5dblfVC+PMtX0efrb8Xlttv/eGkq7X4E83Pds34FH98TP2WOUZA== + dependencies: + bn.js "^4.11.9" + eth-lib "0.2.8" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + underscore "1.9.1" + utf8 "3.0.0" + web3@1.0.0-beta.30: version "1.0.0-beta.30" resolved "https://registry.yarnpkg.com/web3/-/web3-1.0.0-beta.30.tgz#ad3e761845aeb2f40a7760cde75793773a431ecd" @@ -21458,19 +21281,18 @@ web3@1.0.0-beta.34: web3-shh "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.4.tgz#6e7ab799eefc9b4648c2dab63003f704a1d5e7d9" - integrity sha512-xPXGe+w0x0t88Wj+s/dmAdASr3O9wmA9mpZRtixGZxmBexAF0MjfqYM+MS4tVl5s11hMTN3AZb8cDD4VLfC57A== +web3@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.11.tgz#50f458b2e8b11aa37302071c170ed61cff332975" + integrity sha512-mjQ8HeU41G6hgOYm1pmeH0mRAeNKJGnJEUzDMoerkpw7QUQT4exVREgF1MYPvL/z6vAshOXei25LE/t/Bxl8yQ== dependencies: - "@types/node" "^12.6.1" - web3-bzz "1.2.4" - web3-core "1.2.4" - web3-eth "1.2.4" - web3-eth-personal "1.2.4" - web3-net "1.2.4" - web3-shh "1.2.4" - web3-utils "1.2.4" + web3-bzz "1.2.11" + web3-core "1.2.11" + web3-eth "1.2.11" + web3-eth-personal "1.2.11" + web3-net "1.2.11" + web3-shh "1.2.11" + web3-utils "1.2.11" web3@1.2.7: version "1.2.7" @@ -21485,6 +21307,19 @@ web3@1.2.7: web3-shh "1.2.7" web3-utils "1.2.7" +web3@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.0.tgz#8fe4cd6e2a21c91904f343ba75717ee4c76bb349" + integrity sha512-4q9dna0RecnrlgD/bD1C5S+81Untbd6Z/TBD7rb+D5Bvvc0Wxjr4OP70x+LlnwuRDjDtzBwJbNUblh2grlVArw== + dependencies: + web3-bzz "1.3.0" + web3-core "1.3.0" + web3-eth "1.3.0" + web3-eth-personal "1.3.0" + web3-net "1.3.0" + web3-shh "1.3.0" + web3-utils "1.3.0" + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -21604,15 +21439,16 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== -websocket@1.0.29: - version "1.0.29" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.29.tgz#3f83e49d3279657c58b02a22d90749c806101b98" - integrity sha512-WhU8jKXC8sTh6ocLSqpZRlOKMNYGwUvjA5+XcIgIk/G3JCaDfkZUr0zA19sVSxJ0TEvm0i5IBzr54RZC4vzW7g== +websocket@1.0.32, websocket@^1.0.31, websocket@^1.0.32: + version "1.0.32" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" + integrity sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q== dependencies: + bufferutil "^4.0.1" debug "^2.2.0" - gulp "^4.0.2" - nan "^2.11.0" + es5-ext "^0.10.50" typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" yaeti "^0.0.6" websocket@^1.0.28: @@ -21689,7 +21525,7 @@ which-pm-runs@^1.0.0: resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= -which@1, which@^1.1.1, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@1, which@^1.1.1, which@^1.2.12, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -22308,7 +22144,7 @@ yargs@^13.3.2: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^7.0.0, yargs@^7.1.0: +yargs@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=