From aea9661ed3e6bdaf7929fa707b474ebe934aff1d Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Tue, 1 Jun 2021 14:55:19 -0700 Subject: [PATCH 01/30] Merge omgx_contracts into /optimism monorepo; integrate message-relayer-fast; and connect up message-relayer-fast with the Dockers/ops --- ops/docker-compose.yml | 21 +++++++ ops/docker/Dockerfile.message-relayer-fast | 34 +++++++++++ ops/docker/Dockerfile.monorepo | 1 + ops/scripts/relayer-fast.sh | 26 ++++++++ .../OVM_L1CustomCrossDomainMessenger.sol | 2 +- ...OVM_L1CustomCrossDomainMessenger.deploy.ts | 61 +++++++++++++++++++ .../{018-finalize.ts => 019-finalize.ts} | 0 packages/contracts/hardhat.config.ts | 8 +++ .../src/contract-deployment/config.ts | 17 ++++++ .../contracts/src/state-dump/make-dump.ts | 1 + .../omgx/message-relayer-fast/.env.example | 21 ------- .../Dockerfile.message-relayer-fast | 24 -------- packages/omgx/message-relayer-fast/README.md | 6 +- .../omgx/message-relayer-fast/src/exec/run.ts | 5 +- 14 files changed, 174 insertions(+), 53 deletions(-) create mode 100644 ops/docker/Dockerfile.message-relayer-fast create mode 100755 ops/scripts/relayer-fast.sh create mode 100644 packages/contracts/deploy/018-Proxy__OVM_L1CustomCrossDomainMessenger.deploy.ts rename packages/contracts/deploy/{018-finalize.ts => 019-finalize.ts} (100%) delete mode 100644 packages/omgx/message-relayer-fast/.env.example delete mode 100644 packages/omgx/message-relayer-fast/Dockerfile.message-relayer-fast diff --git a/ops/docker-compose.yml b/ops/docker-compose.yml index 2470c5e9dc8a..cc9c5b371763 100644 --- a/ops/docker-compose.yml +++ b/ops/docker-compose.yml @@ -111,6 +111,27 @@ services: POLLING_INTERVAL: 500 GET_LOGS_INTERVAL: 500 + relayer-fast: + depends_on: + - l1_chain + - deployer + - l2geth + image: ethereumoptimism/message-relayer-fast + build: + context: .. + dockerfile: ./ops/docker/Dockerfile.message-relayer-fast + entrypoint: ./relayer-fast.sh + environment: + L1_NODE_WEB3_URL: http://l1_chain:8545 + L2_NODE_WEB3_URL: http://l2geth:8545 + URL: http://deployer:8081/addresses.json + # a funded hardhat account + L1_WALLET_KEY: "0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97" + RETRIES: 60 + POLLING_INTERVAL: 500 + GET_LOGS_INTERVAL: 500 + L1_TARGET: "0x0" + batch_submitter: depends_on: - l1_chain diff --git a/ops/docker/Dockerfile.message-relayer-fast b/ops/docker/Dockerfile.message-relayer-fast new file mode 100644 index 000000000000..42d86478a737 --- /dev/null +++ b/ops/docker/Dockerfile.message-relayer-fast @@ -0,0 +1,34 @@ +FROM ethereumoptimism/builder AS builder + +FROM node:14-alpine + +RUN apk add --no-cache curl bash jq + +WORKDIR /opt/optimism + +# copy top level files +COPY --from=builder /optimism/*.json ./ +COPY --from=builder /optimism/yarn.lock . +COPY --from=builder /optimism/node_modules ./node_modules + +# copy deps (would have been nice if docker followed the symlinks required) +COPY --from=builder /optimism/packages/core-utils/package.json ./packages/core-utils/package.json +COPY --from=builder /optimism/packages/core-utils/dist ./packages/core-utils/dist +COPY --from=builder /optimism/packages/common-ts/package.json ./packages/common-ts/package.json +COPY --from=builder /optimism/packages/common-ts/dist ./packages/common-ts/dist + +COPY --from=builder /optimism/packages/contracts/package.json ./packages/contracts/package.json +COPY --from=builder /optimism/packages/contracts/dist ./packages/contracts/dist +COPY --from=builder /optimism/packages/contracts/artifacts ./packages/contracts/artifacts +COPY --from=builder /optimism/packages/contracts/artifacts-ovm ./packages/contracts/artifacts-ovm + +# copy the service +WORKDIR /opt/optimism/packages/omgx/message-relayer-fast +COPY --from=builder /optimism/packages/omgx/message-relayer-fast/dist ./dist +COPY --from=builder /optimism/packages/omgx/message-relayer-fast/package.json . +COPY --from=builder /optimism/packages/omgx/message-relayer-fast/exec ./exec +COPY --from=builder /optimism/packages/omgx/message-relayer-fast/node_modules ./node_modules + +# copy this over in case you want to run alongside other services +COPY ./ops/scripts/relayer-fast.sh . +ENTRYPOINT ["npm", "run", "start"] diff --git a/ops/docker/Dockerfile.monorepo b/ops/docker/Dockerfile.monorepo index abbac5072efc..57237849a6c2 100644 --- a/ops/docker/Dockerfile.monorepo +++ b/ops/docker/Dockerfile.monorepo @@ -32,6 +32,7 @@ COPY packages/contracts/package.json ./packages/contracts/package.json COPY packages/data-transport-layer/package.json ./packages/data-transport-layer/package.json COPY packages/batch-submitter/package.json ./packages/batch-submitter/package.json COPY packages/message-relayer/package.json ./packages/message-relayer/package.json +COPY packages/omgx/message-relayer-fast/package.json ./packages/omgx/message-relayer-fast/package.json COPY integration-tests/package.json ./integration-tests/package.json RUN yarn install --frozen-lockfile diff --git a/ops/scripts/relayer-fast.sh b/ops/scripts/relayer-fast.sh new file mode 100755 index 000000000000..9580b4406fb1 --- /dev/null +++ b/ops/scripts/relayer-fast.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +set -e + +RETRIES=${RETRIES:-60} + +if [[ ! -z "$URL" ]]; then + # get the addrs from the URL provided + ADDRESSES=$(curl --fail --show-error --silent --retry-connrefused --retry $RETRIES --retry-delay 5 $URL) + # set the env + export ADDRESS_MANAGER_ADDRESS=$(echo $ADDRESSES | jq -r '.AddressManager') +fi + +# waits for l2geth to be up +curl \ + --fail \ + --show-error \ + --silent \ + --output /dev/null \ + --retry-connrefused \ + --retry $RETRIES \ + --retry-delay 1 \ + $L2_NODE_WEB3_URL + +# go +exec node ./exec/run-message-relayer-fast.js diff --git a/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CustomCrossDomainMessenger.sol b/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CustomCrossDomainMessenger.sol index 89b76d2f9d23..075a81af81a4 100644 --- a/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CustomCrossDomainMessenger.sol +++ b/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CustomCrossDomainMessenger.sol @@ -17,7 +17,7 @@ import { iOVM_StateCommitmentChain } from "../../../iOVM/chain/iOVM_StateCommitm import { Abs_BaseCrossDomainMessenger } from "./Abs_BaseCrossDomainMessenger.sol"; /** - * @title OVM_L1CrossDomainMessenger + * @title OVM_L1CustomCrossDomainMessenger * @dev The L1 Cross Domain Messenger contract sends messages from L1 to L2, and relays messages from L2 onto L1. * In the event that a message sent from L1 to L2 is rejected for exceeding the L2 epoch gas limit, it can be resubmitted * via this contract's replay function. diff --git a/packages/contracts/deploy/018-Proxy__OVM_L1CustomCrossDomainMessenger.deploy.ts b/packages/contracts/deploy/018-Proxy__OVM_L1CustomCrossDomainMessenger.deploy.ts new file mode 100644 index 000000000000..30595dabb72e --- /dev/null +++ b/packages/contracts/deploy/018-Proxy__OVM_L1CustomCrossDomainMessenger.deploy.ts @@ -0,0 +1,61 @@ +/* Imports: External */ +import { DeployFunction } from 'hardhat-deploy/dist/types' + +/* Imports: Internal */ +import { getDeployedContract } from '../src/hardhat-deploy-ethers' + +const deployFn: DeployFunction = async (hre) => { + const { deploy } = hre.deployments + const { deployer } = await hre.getNamedAccounts() + + const Lib_AddressManager = await getDeployedContract( + hre, + 'Lib_AddressManager', + { + signerOrProvider: deployer, + } + ) + + const result = await deploy('Proxy__OVM_L1CustomCrossDomainMessenger', { + contract: 'Lib_ResolvedDelegateProxy', + from: deployer, + args: [Lib_AddressManager.address, 'OVM_L1CustomCrossDomainMessenger'], + log: true, + }) + + if (!result.newlyDeployed) { + return + } + + const Proxy__OVM_L1CustomCrossDomainMessenger = await getDeployedContract( + hre, + 'Proxy__OVM_L1CustomCrossDomainMessenger', + { + signerOrProvider: deployer, + iface: 'OVM_L1CustomCrossDomainMessenger', + } + ) + + await Proxy__OVM_L1CustomCrossDomainMessenger.initialize(Lib_AddressManager.address) + + const libAddressManager = await Proxy__OVM_L1CustomCrossDomainMessenger.libAddressManager() + if (libAddressManager !== Lib_AddressManager.address) { + throw new Error( + `\n**FATAL ERROR. THIS SHOULD NEVER HAPPEN. CHECK YOUR DEPLOYMENT.**:\n` + + `Proxy__OVM_L1CustomCrossDomainMessenger could not be succesfully initialized.\n` + + `Attempted to set Lib_AddressManager to: ${Lib_AddressManager.address}\n` + + `Actual address after initialization: ${libAddressManager}\n` + + `This could indicate a compromised deployment.` + ) + } + + await Lib_AddressManager.setAddress( + 'Proxy__OVM_L1CustomCrossDomainMessenger', + result.address + ) +} + +deployFn.dependencies = ['Lib_AddressManager', 'OVM_L1CustomCrossDomainMessenger'] +deployFn.tags = ['Proxy__OVM_L1CustomCrossDomainMessenger'] + +export default deployFn diff --git a/packages/contracts/deploy/018-finalize.ts b/packages/contracts/deploy/019-finalize.ts similarity index 100% rename from packages/contracts/deploy/018-finalize.ts rename to packages/contracts/deploy/019-finalize.ts diff --git a/packages/contracts/hardhat.config.ts b/packages/contracts/hardhat.config.ts index 1708509fde72..681216d7a5d8 100644 --- a/packages/contracts/hardhat.config.ts +++ b/packages/contracts/hardhat.config.ts @@ -76,6 +76,14 @@ const config: HardhatUserConfig = { }, } +/* +old: DEPLOYER_PRIVATE_KEY +new: CONTRACTS_DEPLOYER_KEY + +old: L1_NODE_WEB3_URL +new: CONTRACTS_RPC_URL +*/ + if ( process.env.CONTRACTS_TARGET_NETWORK && process.env.CONTRACTS_DEPLOYER_KEY && diff --git a/packages/contracts/src/contract-deployment/config.ts b/packages/contracts/src/contract-deployment/config.ts index 4f1ad42a9b79..13b7eb1271de 100644 --- a/packages/contracts/src/contract-deployment/config.ts +++ b/packages/contracts/src/contract-deployment/config.ts @@ -30,6 +30,9 @@ export interface RollupDeployConfig { l1CrossDomainMessengerConfig: { relayerAddress?: string | Signer } + l1CustomCrossDomainMessengerConfig: { + //Add any specially needed setting here + } whitelistConfig: { owner: string | Signer allowArbitraryContractDeployment: boolean @@ -107,6 +110,20 @@ export const makeContractDeployConfig = async ( ) }, }, + //does not currently need afterDeploys + //but that could change so stubbing in + OVM_L1CustomCrossDomainMessenger: { + factory: getContractFactory('OVM_L1CustomCrossDomainMessenger'), + params: [] + //afterDeploy: [] This is where to add afterDeploys, if needed + }, + //does not currently need afterDeploys + //but that could change so stubbing in + Proxy__OVM_L1CustomCrossDomainMessenger: { + factory: getContractFactory('Lib_ResolvedDelegateProxy'), + params: [AddressManager.address, 'OVM_L1CustomCrossDomainMessenger'] + //afterDeploy: [] This is where to add afterDeploys, if needed + }, OVM_L1ETHGateway: { factory: getContractFactory('OVM_L1ETHGateway'), params: [], diff --git a/packages/contracts/src/state-dump/make-dump.ts b/packages/contracts/src/state-dump/make-dump.ts index 42179e516bc2..30a509098e7f 100644 --- a/packages/contracts/src/state-dump/make-dump.ts +++ b/packages/contracts/src/state-dump/make-dump.ts @@ -122,6 +122,7 @@ export const makeStateDump = async (cfg: RollupDeployConfig): Promise => { allowArbitraryContractDeployment: true, }, l1CrossDomainMessengerConfig: {}, + l1CustomCrossDomainMessengerConfig: {}, dependencies: [ 'ERC1820Registry', 'Lib_AddressManager', diff --git a/packages/omgx/message-relayer-fast/.env.example b/packages/omgx/message-relayer-fast/.env.example deleted file mode 100644 index 1e28a005a557..000000000000 --- a/packages/omgx/message-relayer-fast/.env.example +++ /dev/null @@ -1,21 +0,0 @@ -# Rinkeby -NODE_ENV=local -L1_NODE_WEB3_URL=https://rinkeby.infura.io/v3/YOUR_INFURA_KEY_HERE -L2_NODE_WEB3_URL=http://3.85.224.26:8545 -DEPLOYER_HTTP= -ADDRESS_MANAGER_ADDRESS= -L1_WALLET_KEY= -L1_TARGET=0x0 -L1_BLOCK_OFFSET=0 -RETRIES=100 - -# Local -NODE_ENV=local -L1_NODE_WEB3_URL=http://localhost:9545 -L2_NODE_WEB3_URL=http://localhost:8545 -DEPLOYER_HTTP=http://deployer:8080 -ADDRESS_MANAGER_ADDRESS=0x3e4CFaa8730092552d9425575E49bB542e329981 -L1_WALLET_KEY=0x5b1c2653250e5c580dcb4e51c2944455e144c57ebd6a0645bd359d2e69ca0f0c -L1_TARGET=0x0 -L1_BLOCK_OFFSET=0 -RETRIES=100 diff --git a/packages/omgx/message-relayer-fast/Dockerfile.message-relayer-fast b/packages/omgx/message-relayer-fast/Dockerfile.message-relayer-fast deleted file mode 100644 index b4541feb418b..000000000000 --- a/packages/omgx/message-relayer-fast/Dockerfile.message-relayer-fast +++ /dev/null @@ -1,24 +0,0 @@ -FROM node:14-buster as base - -RUN apt-get update && apt-get install -y bash curl jq - -FROM base as build - -RUN apt-get update && apt-get install -y bash git python build-essential - -ADD . /opt/optimism-message-relayer-fast -RUN cd /opt/optimism-message-relayer-fast && yarn install && yarn build - -FROM base - -RUN apt-get update && apt-get install -y bash curl jq - -COPY --from=build /opt/optimism-message-relayer-fast /opt/optimism-message-relayer-fast - -COPY wait-for-l1-and-l2.sh /opt/ -RUN chmod +x /opt/wait-for-l1-and-l2.sh - -RUN ln -s /opt/optimism-message-relayer-fast/exec/run-message-relayer-fast.js /usr/local/bin/ -RUN chmod +x /usr/local/bin/run-message-relayer-fast.js - -ENTRYPOINT ["/opt/wait-for-l1-and-l2.sh", "run-message-relayer-fast.js"] \ No newline at end of file diff --git a/packages/omgx/message-relayer-fast/README.md b/packages/omgx/message-relayer-fast/README.md index 0a62840242e2..28f1e49754ac 100644 --- a/packages/omgx/message-relayer-fast/README.md +++ b/packages/omgx/message-relayer-fast/README.md @@ -1,4 +1,4 @@ -# OMGX_Alt_Messenger +# OMGX_CustomCrossDomainMessenger Customized L1 Cross Domain Messenger without dispute period time restrictions and associated message relayer service. @@ -6,7 +6,7 @@ The custom `OVM_L1CrossDomainMessenger` works with the default `OVM_L2CrossDomai ## Using the custom messenger -- Deploy `contracts/OVM_L1_CrossDomainMessenger.sol` on L1, this will be the contract used by your contracts for L2->L1 message passing +- Deploy `contracts/OVM_L1_CustomCrossDomainMessenger.sol` on L1, this will be the contract used by your contracts for L2->L1 message passing - Your bridge/gateway contract must implement `contracts/libraries/OVM_CrossDomainEnabled.sol` instead. This uses the default L1 Messenger to send messages and the custom L1 Messenger to relay. @@ -14,7 +14,7 @@ The custom `OVM_L1CrossDomainMessenger` works with the default `OVM_L2CrossDomai Env Settings - -**THESE MAY BE OUTDATED!!!** The examples in the .env are definitive +**THESE ARE OUTDATED!!!** ``` diff --git a/packages/omgx/message-relayer-fast/src/exec/run.ts b/packages/omgx/message-relayer-fast/src/exec/run.ts index b177cc58d35c..4121c2bcbcad 100644 --- a/packages/omgx/message-relayer-fast/src/exec/run.ts +++ b/packages/omgx/message-relayer-fast/src/exec/run.ts @@ -21,10 +21,7 @@ const main = async () => { 'address-manager-address', env.ADDRESS_MANAGER_ADDRESS ) - const L1_TARGET = config.str( - 'l1-target', - env.L1_TARGET - ) + const L1_TARGET = config.str('l1-target', env.L1_TARGET || "0x0") const L1_WALLET_KEY = config.str('l1-wallet-key', env.L1_WALLET_KEY) const MNEMONIC = config.str('mnemonic', env.MNEMONIC) const HD_PATH = config.str('hd-path', env.HD_PATH) From bf35bbbb431211d79c7192c0fd1b91ac934973e9 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Tue, 1 Jun 2021 16:23:54 -0700 Subject: [PATCH 02/30] further cleanup --- packages/omgx/message-relayer-fast/README.md | 3 +- .../omgx/message-relayer-fast/package.json | 4 +- .../wait-for-l1-and-l2.sh | 61 ------------------- 3 files changed, 4 insertions(+), 64 deletions(-) delete mode 100755 packages/omgx/message-relayer-fast/wait-for-l1-and-l2.sh diff --git a/packages/omgx/message-relayer-fast/README.md b/packages/omgx/message-relayer-fast/README.md index 28f1e49754ac..f5353930264a 100644 --- a/packages/omgx/message-relayer-fast/README.md +++ b/packages/omgx/message-relayer-fast/README.md @@ -10,7 +10,8 @@ The custom `OVM_L1CrossDomainMessenger` works with the default `OVM_L2CrossDomai - Your bridge/gateway contract must implement `contracts/libraries/OVM_CrossDomainEnabled.sol` instead. This uses the default L1 Messenger to send messages and the custom L1 Messenger to relay. -## Running the Alt_Relayer + +## Running the message-relayer-fast Env Settings - diff --git a/packages/omgx/message-relayer-fast/package.json b/packages/omgx/message-relayer-fast/package.json index c77adb18687a..f7c73e6703c3 100644 --- a/packages/omgx/message-relayer-fast/package.json +++ b/packages/omgx/message-relayer-fast/package.json @@ -23,16 +23,16 @@ ], "homepage": "https://github.com/ethereum-optimism/optimism-monorepo/tree/master/packages/batch-submitter#readme", "license": "MIT", - "author": "Optimism", + "author": "Optimism PBC", "repository": { "type": "git", "url": "https://github.com/ethereum-optimism/optimism.git" }, "dependencies": { "@eth-optimism/common-ts": "^0.1.0", + "bcfg": "^0.1.6", "@eth-optimism/contracts": "^0.3.4", "@eth-optimism/core-utils": "^0.4.2", - "bcfg": "^0.1.6", "dotenv": "^8.2.0", "ethers": "^5.1.0", "ganache-core": "^2.13.2", diff --git a/packages/omgx/message-relayer-fast/wait-for-l1-and-l2.sh b/packages/omgx/message-relayer-fast/wait-for-l1-and-l2.sh deleted file mode 100755 index f8be30bf2b47..000000000000 --- a/packages/omgx/message-relayer-fast/wait-for-l1-and-l2.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash - -# Copyright Optimism PBC 2020 -# MIT License -# github.com/ethereum-optimism - -cmd="$@" -JSON='{"jsonrpc":"2.0","id":0,"method":"net_version","params":[]}' - -RETRIES=${RETRIES:-20} -until $(curl --silent --fail \ - --output /dev/null \ - -H "Content-Type: application/json" \ - --data "$JSON" "$L1_NODE_WEB3_URL"); do - sleep 1 - echo "Will wait $((RETRIES--)) more times for $L1_NODE_WEB3_URL to be up..." - - if [ "$RETRIES" -lt 0 ]; then - echo "Timeout waiting for layer one node at $L1_NODE_WEB3_URL" - exit 1 - fi -done -echo "Connected to L1 Node at $L1_NODE_WEB3_URL" - -RETRIES=${RETRIES:-30} -until $(curl --silent --fail \ - --output /dev/null \ - -H "Content-Type: application/json" \ - --data "$JSON" "$L2_NODE_WEB3_URL"); do - sleep 1 - echo "Will wait $((RETRIES--)) more times for $L2_NODE_WEB3_URL to be up..." - - if [ "$RETRIES" -lt 0 ]; then - echo "Timeout waiting for layer two node at $L2_NODE_WEB3_URL" - exit 1 - fi -done -echo "Connected to L2 Node at $L2_NODE_WEB3_URL" - -if [ ! -z "$DEPLOYER_HTTP" ]; then - RETRIES=${RETRIES:-20} - until $(curl --silent --fail \ - --output /dev/null \ - "$DEPLOYER_HTTP/addresses.json"); do - sleep 1 - echo "Will wait $((RETRIES--)) more times for $DEPLOYER_HTTP to be up..." - - if [ "$RETRIES" -lt 0 ]; then - echo "Timeout waiting for contract deployment" - exit 1 - fi - done - echo "Contracts are deployed" - ADDRESS_MANAGER_ADDRESS=$(curl --silent $DEPLOYER_HTTP/addresses.json | jq -r .AddressManager) - exec env \ - ADDRESS_MANAGER_ADDRESS=$ADDRESS_MANAGER_ADDRESS \ - L1_BLOCK_OFFSET=$L1_BLOCK_OFFSET \ - $cmd -else - exec $cmd -fi From c9892f9342807902c7fa538f70a9ed41be389bfe Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Tue, 1 Jun 2021 17:30:05 -0700 Subject: [PATCH 03/30] get address from addressManager; add tests for the message-relayer-fast --- .../OVM_L1CustomCrossDomainMessenger.sol | 2 +- .../omgx/message-relayer-fast/src/exec/run.ts | 9 ++ .../omgx/message-relayer-fast/src/service.ts | 30 +++---- .../wallet/contracts/LP/L1LiquidityPool.sol | 4 +- .../wallet/contracts/LP/L2LiquidityPool.sol | 2 +- .../wallet/contracts/Message/L1Message.sol | 74 ++++++++++++++++ .../wallet/contracts/Message/L2Message.sol | 69 +++++++++++++++ packages/omgx/wallet/test/a_message.spec.ts | 86 +++++++++++++++++++ .../test/{a_setup.spec.ts => b_setup.spec.ts} | 2 +- .../test/{b_lp.spec.ts => c_lp.spec.ts} | 0 .../test/{c_nft.spec.ts => d_nft.spec.ts} | 0 .../omgx/wallet/test/shared/watcher-utils.ts | 5 +- .../wallet/src/containers/login/Login.js | 22 ----- .../modals/exit/steps/DoExitStep.js | 2 +- .../wallet/src/services/networkService.js | 4 +- 15 files changed, 264 insertions(+), 47 deletions(-) create mode 100644 packages/omgx/wallet/contracts/Message/L1Message.sol create mode 100644 packages/omgx/wallet/contracts/Message/L2Message.sol create mode 100644 packages/omgx/wallet/test/a_message.spec.ts rename packages/omgx/wallet/test/{a_setup.spec.ts => b_setup.spec.ts} (99%) rename packages/omgx/wallet/test/{b_lp.spec.ts => c_lp.spec.ts} (100%) rename packages/omgx/wallet/test/{c_nft.spec.ts => d_nft.spec.ts} (100%) diff --git a/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CustomCrossDomainMessenger.sol b/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CustomCrossDomainMessenger.sol index 075a81af81a4..f78bebeb07b7 100644 --- a/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CustomCrossDomainMessenger.sol +++ b/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CustomCrossDomainMessenger.sol @@ -46,7 +46,7 @@ contract OVM_L1CustomCrossDomainMessenger is iOVM_L1CrossDomainMessenger, Abs_Ba ) public { - require(address(libAddressManager) == address(0), "L1CrossDomainMessenger already intialized."); + require(address(libAddressManager) == address(0), "L1CustomCrossDomainMessenger already intialized."); libAddressManager = Lib_AddressManager(_libAddressManager); xDomainMsgSender = DEFAULT_XDOMAIN_SENDER; } diff --git a/packages/omgx/message-relayer-fast/src/exec/run.ts b/packages/omgx/message-relayer-fast/src/exec/run.ts index 4121c2bcbcad..adbc94c81874 100644 --- a/packages/omgx/message-relayer-fast/src/exec/run.ts +++ b/packages/omgx/message-relayer-fast/src/exec/run.ts @@ -21,6 +21,11 @@ const main = async () => { 'address-manager-address', env.ADDRESS_MANAGER_ADDRESS ) + //this is now loaded from the deployer + // const L1_MESSENGER_ADDRESS = config.str( + // 'l1-messenger-address', + // env.L1_MESSENGER_ADDRESS + // ) const L1_TARGET = config.str('l1-target', env.L1_TARGET || "0x0") const L1_WALLET_KEY = config.str('l1-wallet-key', env.L1_WALLET_KEY) const MNEMONIC = config.str('mnemonic', env.MNEMONIC) @@ -65,6 +70,9 @@ const main = async () => { if (!ADDRESS_MANAGER_ADDRESS) { throw new Error('Must pass ADDRESS_MANAGER_ADDRESS') } + // if (!L1_MESSENGER_ADDRESS) { + // throw new Error('Must pass L1_MESSENGER_ADDRESS') + // } if (!L1_TARGET) { throw new Error('Must pass L1_TARGET') } @@ -108,6 +116,7 @@ const main = async () => { l1RpcProvider: l1Provider, l2RpcProvider: l2Provider, addressManagerAddress: ADDRESS_MANAGER_ADDRESS, + //l1MessengerAddress: L1_MESSENGER_ADDRESS, l1Target: L1_TARGET, l1Wallet: wallet, relayGasLimit: RELAY_GAS_LIMIT, diff --git a/packages/omgx/message-relayer-fast/src/service.ts b/packages/omgx/message-relayer-fast/src/service.ts index 091f92af5da4..ad1a147a29b4 100644 --- a/packages/omgx/message-relayer-fast/src/service.ts +++ b/packages/omgx/message-relayer-fast/src/service.ts @@ -20,6 +20,8 @@ interface MessageRelayerOptions { // within this service. addressManagerAddress: string + //l1MessengerAddress: string + l1Target: string // Wallet instance, used to sign and send the L1 relay transactions. @@ -74,7 +76,7 @@ export class MessageRelayerService extends BaseService { eventCache: ethers.Event[] Lib_AddressManager: Contract OVM_StateCommitmentChain: Contract - OVM_L1CrossDomainMessenger: Contract + OVM_L1CustomCrossDomainMessenger: Contract OVM_L2CrossDomainMessenger: Contract OVM_L2ToL1MessagePasser: Contract } @@ -110,17 +112,15 @@ export class MessageRelayerService extends BaseService { address: this.state.OVM_StateCommitmentChain.address, }) - this.logger.info('Connecting to OVM_L1CrossDomainMessenger...') - const l1MessengerAddress = await this.state.Lib_AddressManager.getAddress( - 'OVM_L1CustomCrossDomainMessenger' - ) - this.state.OVM_L1CrossDomainMessenger = loadContract( - 'OVM_L1CrossDomainMessenger', - l1MessengerAddress, - this.options.l1RpcProvider, - ) - this.logger.info('Connected to OVM_L1CrossDomainMessenger', { - address: this.state.OVM_L1CrossDomainMessenger.address, + this.logger.info('Connecting to OVM_L1CustomCrossDomainMessenger...') + this.state.OVM_L1CustomCrossDomainMessenger = await loadContractFromManager({ + name: 'OVM_L1CustomCrossDomainMessenger', + proxy: 'Proxy__OVM_L1CustomCrossDomainMessenger', + Lib_AddressManager: this.state.Lib_AddressManager, + provider: this.options.l1RpcProvider, + }) + this.logger.info('Connected to OVM_L1CustomCrossDomainMessenger', { + address: this.state.OVM_L1CustomCrossDomainMessenger.address, }) this.logger.info('Connecting to OVM_L2CrossDomainMessenger...') @@ -381,7 +381,7 @@ export class MessageRelayerService extends BaseService { } private async _wasMessageRelayed(message: SentMessage): Promise { - return this.state.OVM_L1CrossDomainMessenger.successfulMessages( + return this.state.OVM_L1CustomCrossDomainMessenger.successfulMessages( message.encodedMessageHash ) } @@ -491,7 +491,7 @@ export class MessageRelayerService extends BaseService { 'Dry-run, checking to make sure proof would succeed...' ) - await this.state.OVM_L1CrossDomainMessenger.connect( + await this.state.OVM_L1CustomCrossDomainMessenger.connect( this.options.l1Wallet ).callStatic.relayMessage( message.target, @@ -516,7 +516,7 @@ export class MessageRelayerService extends BaseService { return } - const result = await this.state.OVM_L1CrossDomainMessenger.connect( + const result = await this.state.OVM_L1CustomCrossDomainMessenger.connect( this.options.l1Wallet ).relayMessage( message.target, diff --git a/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol b/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol index 111709c36e7c..6390fa6b18dc 100644 --- a/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol +++ b/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol @@ -3,8 +3,8 @@ pragma solidity >0.5.0; pragma experimental ABIEncoderV2; -import "./interfaces/iL2LiquidityPool.sol"; -import "./libraries/OVM_CrossDomainEnabled.sol"; +import "../interfaces/iL2LiquidityPool.sol"; +import "../libraries/OVM_CrossDomainEnabled.sol"; /* External Imports */ import '@openzeppelin/contracts/math/SafeMath.sol'; diff --git a/packages/omgx/wallet/contracts/LP/L2LiquidityPool.sol b/packages/omgx/wallet/contracts/LP/L2LiquidityPool.sol index 87fc0f0efc15..e1326cee2c88 100644 --- a/packages/omgx/wallet/contracts/LP/L2LiquidityPool.sol +++ b/packages/omgx/wallet/contracts/LP/L2LiquidityPool.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.5.0; -import "./interfaces/iL1LiquidityPool.sol"; +import "../interfaces/iL1LiquidityPool.sol"; /* Library Imports */ import "@eth-optimism/contracts/contracts/optimistic-ethereum/libraries/bridge/OVM_CrossDomainEnabled.sol"; diff --git a/packages/omgx/wallet/contracts/Message/L1Message.sol b/packages/omgx/wallet/contracts/Message/L1Message.sol new file mode 100644 index 000000000000..5a2c23f4e68b --- /dev/null +++ b/packages/omgx/wallet/contracts/Message/L1Message.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +pragma solidity >0.5.0; + +/* Library Imports */ +import "@eth-optimism/contracts/libraries/bridge/OVM_CrossDomainEnabled.sol"; +// import "../libraries/OVM_CrossDomainEnabled.sol"; + +import { L2Message } from "./L2Message.sol"; + +contract L1Message is OVM_CrossDomainEnabled { + + address L2MessageAddress; + string crossDomainMessage; + + event ReceiveL2Message ( + string _message + ); + + /******************** + * Constructor * + ********************/ + // constructor ( + // address _l1CrossDomainMessenger, + // address _l1CustomCrossDomainMessenger + // ) + // OVM_CrossDomainEnabled(_l1CrossDomainMessenger, _l1CustomCrossDomainMessenger) + // {} + + constructor ( + address _l1CrossDomainMessenger + ) + OVM_CrossDomainEnabled(_l1CrossDomainMessenger) + {} + + function init ( + address _L2MessageAddress + ) + public + { + L2MessageAddress = _L2MessageAddress; + } + + function sendMessageL1ToL2 () public { + bytes memory data = abi.encodeWithSelector( + L2Message.receiveL1Message.selector, + "messageFromL1" + ); + + // Send calldata into L1 + sendCrossDomainMessage( + address(L2MessageAddress), + data, + 1200000 + ); + } + + /************************* + * Cross-chain Functions * + *************************/ + + /** + * Receive message from L2 + * @param _message message + */ + function receiveL2Message( + string memory _message + ) + external + onlyFromCrossDomainAccount(address(L2MessageAddress)) + { + crossDomainMessage = _message; + emit ReceiveL2Message(_message); + } +} \ No newline at end of file diff --git a/packages/omgx/wallet/contracts/Message/L2Message.sol b/packages/omgx/wallet/contracts/Message/L2Message.sol new file mode 100644 index 000000000000..6f5a0aad5605 --- /dev/null +++ b/packages/omgx/wallet/contracts/Message/L2Message.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: MIT +pragma solidity >0.5.0; + +/* Library Imports */ +import "@eth-optimism/contracts/libraries/bridge/OVM_CrossDomainEnabled.sol"; + +import { L1Message } from "./L1Message.sol"; + +contract L2Message is OVM_CrossDomainEnabled { + + address L1MessageAddress; + string crossDomainMessage; + + event ReceiveL1Message ( + string _message + ); + + /******************** + * Constructor * + ********************/ + /** + * @param _l2CrossDomainMessenger L2 Messenger address being used for sending the cross-chain message. + */ + constructor ( + address _l2CrossDomainMessenger + ) + OVM_CrossDomainEnabled(_l2CrossDomainMessenger) + {} + + function init ( + address _L1MessageAddress + ) + public + { + L1MessageAddress = _L1MessageAddress; + } + + function sendMessageL2ToL1 () public { + bytes memory data = abi.encodeWithSelector( + L1Message.receiveL2Message.selector, + "messageFromL2" + ); + + // Send calldata into L1 + sendCrossDomainMessage( + address(L1MessageAddress), + data, + 100000 + ); + } + + /************************* + * Cross-chain Functions * + *************************/ + + /** + * Receive message from L1 + * @param _message message + */ + function receiveL1Message( + string memory _message + ) + external + onlyFromCrossDomainAccount(address(L1MessageAddress)) + { + crossDomainMessage = _message; + emit ReceiveL1Message(_message); + } +} \ No newline at end of file diff --git a/packages/omgx/wallet/test/a_message.spec.ts b/packages/omgx/wallet/test/a_message.spec.ts new file mode 100644 index 000000000000..be3f6a9d64ba --- /dev/null +++ b/packages/omgx/wallet/test/a_message.spec.ts @@ -0,0 +1,86 @@ +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +chai.use(chaiAsPromised); +import { Contract, ContractFactory, utils } from 'ethers' +import chalk from 'chalk'; + +import { Direction, Relayer } from './shared/watcher-utils' + +import L1MessageJson from '../artifacts/contracts/Message/L1Message.sol/L1Message.json' +import L2MessageJson from '../artifacts-ovm/contracts/Message/L2Message.sol/L2Message.json' + +import { OptimismEnv } from './shared/env' + +describe('Messenge Relayer Test', async () => { + + let Factory__L1Message: ContractFactory + let Factory__L2Message: ContractFactory + + let L1Message: Contract + let L2Message: Contract + + let env: OptimismEnv + + before(async () => { + + env = await OptimismEnv.new() + + Factory__L1Message = new ContractFactory( + L1MessageJson.abi, + L1MessageJson.bytecode, + env.bobl1Wallet + ) + + Factory__L2Message = new ContractFactory( + L2MessageJson.abi, + L2MessageJson.bytecode, + env.bobl2Wallet + ) + }) + + it('should deploy contracts', async () => { + // Deploy L2 liquidity pool + L2Message = await Factory__L2Message.deploy( + env.watcher.l2.messengerAddress, + ) + await L2Message.deployTransaction.wait() + console.log(`🌕 ${chalk.red('L2Message deployed to:')} ${chalk.green(L2Message.address)}`) + + // Deploy L1 liquidity pool + L1Message = await Factory__L1Message.deploy( + env.watcher.l1.messengerAddress, + // env.customWatcher.l1.messengerAddress, + ) + await L1Message.deployTransaction.wait() + console.log(`🌕 ${chalk.red('L1Message deployed to:')} ${chalk.green(L1Message.address)}`) + + // Initialize L1 message + const L1MessageTX = await L1Message.init( + L2Message.address + ) + await L1MessageTX.wait() + console.log(`⭐️ ${chalk.blue('L1 Message initialized:')} ${chalk.green(L1MessageTX.hash)}`) + + // Initialize L2 message + const L2MessageTX = await L2Message.init( + L1Message.address + ) + await L2MessageTX.wait() + console.log(`⭐️ ${chalk.blue('L2 Message initialized:')} ${chalk.green(L2MessageTX.hash)}`) + }) + + it('should send message from L2 to L1', async () => { + await env.waitForXDomainTransaction( + L2Message.sendMessageL2ToL1(), + Direction.L2ToL1, + // Relayer.custom + ) + }) + + it('should send message from L1 to L2', async () => { + await env.waitForXDomainTransaction( + L1Message.sendMessageL1ToL2(), + Direction.L1ToL2 + ) + }) +}) \ No newline at end of file diff --git a/packages/omgx/wallet/test/a_setup.spec.ts b/packages/omgx/wallet/test/b_setup.spec.ts similarity index 99% rename from packages/omgx/wallet/test/a_setup.spec.ts rename to packages/omgx/wallet/test/b_setup.spec.ts index bf4a9d6dfb16..eeda21610af1 100644 --- a/packages/omgx/wallet/test/a_setup.spec.ts +++ b/packages/omgx/wallet/test/b_setup.spec.ts @@ -19,7 +19,7 @@ import { OptimismEnv } from './shared/env' import { promises as fs } from 'fs' -describe('System setup\n', async () => { +describe('LP System setup\n', async () => { let Factory__L1LiquidityPool: ContractFactory let Factory__L2LiquidityPool: ContractFactory diff --git a/packages/omgx/wallet/test/b_lp.spec.ts b/packages/omgx/wallet/test/c_lp.spec.ts similarity index 100% rename from packages/omgx/wallet/test/b_lp.spec.ts rename to packages/omgx/wallet/test/c_lp.spec.ts diff --git a/packages/omgx/wallet/test/c_nft.spec.ts b/packages/omgx/wallet/test/d_nft.spec.ts similarity index 100% rename from packages/omgx/wallet/test/c_nft.spec.ts rename to packages/omgx/wallet/test/d_nft.spec.ts diff --git a/packages/omgx/wallet/test/shared/watcher-utils.ts b/packages/omgx/wallet/test/shared/watcher-utils.ts index 08b8b6a3b3b7..b46a0c05fd6e 100644 --- a/packages/omgx/wallet/test/shared/watcher-utils.ts +++ b/packages/omgx/wallet/test/shared/watcher-utils.ts @@ -13,7 +13,8 @@ export const initWatcher = async ( ) => { const l1MessengerAddress = await AddressManager.getAddress('Proxy__OVM_L1CrossDomainMessenger') - + const SCC = await AddressManager.getAddress('OVM_StateCommitmentChain') + console.log(SCC) return new Watcher({ l1: { provider: l1Provider, @@ -32,7 +33,7 @@ export const initCustomWatcher = async ( AddressManager: Contract ) => { - const l1CustomMessengerAddress = await AddressManager.getAddress('OVM_L1CustomCrossDomainMessenger') + const l1CustomMessengerAddress = await AddressManager.getAddress('Proxy__OVM_L1CustomCrossDomainMessenger') return new Watcher({ l1: { diff --git a/packages/omgx/wallet/wallet/src/containers/login/Login.js b/packages/omgx/wallet/wallet/src/containers/login/Login.js index d81358a5e1a2..aab221b3a19a 100644 --- a/packages/omgx/wallet/wallet/src/containers/login/Login.js +++ b/packages/omgx/wallet/wallet/src/containers/login/Login.js @@ -35,11 +35,6 @@ import { isBidOpenOrClosed, } from 'actions/buyAction'; -import { - openAlert, - openError -} from 'actions/uiAction'; - import networkService from 'services/networkService'; import * as styles from './Login.module.scss'; @@ -185,23 +180,6 @@ class Login extends React.Component { // this.props.dispatch(verifyInvitationCode( invitationCode )); } - async handleGetToken() { - // Check the network - const networkStatus = networkService.confirmLayer("L2"); - if (!networkStatus) { - this.props.dispatch(openError('Please switch to L2 network')); - } - // We are on L2 netowrk - this.setState({ buttonLoading: true }); - const res = await networkService.getTestToken(); - if (res) { - this.props.dispatch(openAlert('5 test tokens were sent to your wallet')); - } else { - this.props.dispatch(openError('Failed to send tokens')); - } - this.setState({ buttonLoading: false }); - } - render() { const { diff --git a/packages/omgx/wallet/wallet/src/containers/modals/exit/steps/DoExitStep.js b/packages/omgx/wallet/wallet/src/containers/modals/exit/steps/DoExitStep.js index c639bb0f03c8..79a00d821d74 100644 --- a/packages/omgx/wallet/wallet/src/containers/modals/exit/steps/DoExitStep.js +++ b/packages/omgx/wallet/wallet/src/containers/modals/exit/steps/DoExitStep.js @@ -111,7 +111,7 @@ function DoExitStep ({ function setExitAmount(value) { const transferingBalanceObject = balances.find(i => i.currency === currency); const maxTransferValue = Number(logAmount(transferingBalanceObject.amount, transferingBalanceObject.decimals)); - if (value > 0 && (fast ? value < LPBalance : true) && value < maxTransferValue) { + if (Number(value) > 0 && (fast ? Number(value) < Number(LPBalance) : true) && Number(value) < Number(maxTransferValue)) { setDisabledSubmit(false); } else { setDisabledSubmit(true); diff --git a/packages/omgx/wallet/wallet/src/services/networkService.js b/packages/omgx/wallet/wallet/src/services/networkService.js index 1fa31c88e855..af62376b6db6 100644 --- a/packages/omgx/wallet/wallet/src/services/networkService.js +++ b/packages/omgx/wallet/wallet/src/services/networkService.js @@ -962,7 +962,7 @@ class NetworkService { if (currency === this.l2ETHGatewayAddress || currency === this.l1ETHAddress) { balance = await this.l1Provider.getBalance(this.L1LPAddress); } else if (currency === this.L2DepositedERC20Address || currency === this.l1ERC20Address) { - balance = await this.ERC20L1Contract.methods.balances(this.L1LPAddress).call({from: this.account}); + balance = await this.ERC20L1Contract.methods.balanceOf(this.L1LPAddress).call({from: this.account}); } const decimals = 18; return logAmount(balance.toString(), decimals); @@ -1033,7 +1033,7 @@ class NetworkService { try { const getTokenTX = await this.L2TokenPoolContract.requestToken(); await getTokenTX.wait(); - console.log(getTokenTX) + //console.log(getTokenTX) return true; }catch { return false; From 7f6fc0d77d509ed66bcc82b962454a2f3ac11a88 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Tue, 1 Jun 2021 20:59:35 -0700 Subject: [PATCH 04/30] testing contract deployments to the new stack --- .../hardhat/deployments/optimism/.chainId | 1 + .../hardhat/deployments/optimism/ERC20.json | 446 + .../a4e2764a77fec30ccb674d800c46e436.json | 35 + examples/hardhat/yarn.lock | 8064 +++++++++++++++++ integration-tests/.env.example | 11 + integration-tests/hardhat.config.ts | 2 +- ops/README.md | 10 +- ops/docker-compose.yml | 2 +- ops/envs/geth.env | 4 +- packages/omgx/wallet/.env.example | 113 +- .../wallet/contracts/LP/L1LiquidityPool.sol | 4 +- .../wallet/contracts/LP/L2LiquidityPool.sol | 2 +- .../wallet/contracts/Message/L1Message.sol | 2 +- .../wallet/contracts/Message/L2Message.sol | 2 +- packages/omgx/wallet/tsconfig.json | 3 +- yarn.lock | 431 +- 16 files changed, 9096 insertions(+), 36 deletions(-) create mode 100644 examples/hardhat/deployments/optimism/.chainId create mode 100644 examples/hardhat/deployments/optimism/ERC20.json create mode 100644 examples/hardhat/deployments/optimism/solcInputs/a4e2764a77fec30ccb674d800c46e436.json create mode 100644 examples/hardhat/yarn.lock create mode 100644 integration-tests/.env.example diff --git a/examples/hardhat/deployments/optimism/.chainId b/examples/hardhat/deployments/optimism/.chainId new file mode 100644 index 000000000000..368f89ceef17 --- /dev/null +++ b/examples/hardhat/deployments/optimism/.chainId @@ -0,0 +1 @@ +28 \ No newline at end of file diff --git a/examples/hardhat/deployments/optimism/ERC20.json b/examples/hardhat/deployments/optimism/ERC20.json new file mode 100644 index 000000000000..83957d098339 --- /dev/null +++ b/examples/hardhat/deployments/optimism/ERC20.json @@ -0,0 +1,446 @@ +{ + "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_initialSupply", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "allowances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "balances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x765a414cd26e30a4fff343acbf41f1079f9701e6a9101122719891ed5b4ce05e", + "receipt": { + "to": null, + "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "contractAddress": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "transactionIndex": 0, + "gasUsed": "2441643", + "logsBloom": "0x00000000000000000000000000000000000000000000000000040000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000008000000000000000010000000000000000000000400000000000000000000000100008000000000000000000000000010000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000200000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa190804f212464a8da4f8919f1525707f46abcc0f4e6e560c42c4aca62c50ff3", + "transactionHash": "0x765a414cd26e30a4fff343acbf41f1079f9701e6a9101122719891ed5b4ce05e", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 1, + "transactionHash": "0x765a414cd26e30a4fff343acbf41f1079f9701e6a9101122719891ed5b4ce05e", + "address": "0x4200000000000000000000000000000000000006", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000004200000000000000000000000000000000000005" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 0, + "blockHash": "0xa190804f212464a8da4f8919f1525707f46abcc0f4e6e560c42c4aca62c50ff3" + } + ], + "blockNumber": 1, + "cumulativeGasUsed": "2441643", + "status": 1, + "byzantium": true + }, + "args": [ + 1000000, + "My Optimistic Token" + ], + "solcInputHash": "a4e2764a77fec30ccb674d800c46e436", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+ovm+commit.aff196a1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initialSupply\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A super simple ERC20 implementation!\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"params\":{\"_owner\":\"Address of the account to check an allowance from.\",\"_spender\":\"Address of the account trying to spend from the owner.\"},\"returns\":{\"_0\":\"Allowance for the spender from the owner.\"}},\"approve(address,uint256)\":{\"params\":{\"_amount\":\"Amount to allow the account to spend from your account.\",\"_spender\":\"Account to approve a balance for.\"},\"returns\":{\"_0\":\"true if the allowance was successful.\"}},\"balanceOf(address)\":{\"params\":{\"_owner\":\"Address to check a balance for.\"},\"returns\":{\"_0\":\"Balance of the address.\"}},\"constructor\":{\"params\":{\"_initialSupply\":\"Initial maximum token supply.\",\"_name\":\"A name for our ERC20 (technically optional, but it's fun ok jeez).\"}},\"transfer(address,uint256)\":{\"params\":{\"_amount\":\"Amount to transfer to the other account.\",\"_to\":\"Address to transfer a balance to.\"},\"returns\":{\"_0\":\"true if the transfer was successful.\"}},\"transferFrom(address,address,uint256)\":{\"params\":{\"_amount\":\"Amount to transfer to the other account.\",\"_from\":\"Account to transfer a balance from.\",\"_to\":\"Account to transfer a balance to.\"},\"returns\":{\"_0\":\"true if the transfer was successful.\"}}},\"title\":\"ERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address)\":{\"notice\":\"Checks how much a given account is allowed to spend from another given account.\"},\"approve(address,uint256)\":{\"notice\":\"Approves an account to spend some amount from your account.\"},\"balanceOf(address)\":{\"notice\":\"Checks the balance of an address.\"},\"transfer(address,uint256)\":{\"notice\":\"Transfers a balance from your account to someone else's account!\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Transfers a balance from someone else's account to another account. You need an allowance from the sending account for this to work!\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC20\\n * @dev A super simple ERC20 implementation!\\n */\\ncontract ERC20 {\\n\\n /**********\\n * Events *\\n **********/\\n\\n event Transfer(\\n address indexed _from,\\n address indexed _to,\\n uint256 _value\\n );\\n\\n event Approval(\\n address indexed _owner,\\n address indexed _spender,\\n uint256 _value\\n );\\n\\n\\n /*************\\n * Variables *\\n *************/\\n\\n mapping (address => uint256) public balances;\\n mapping (address => mapping (address => uint256)) public allowances;\\n\\n // Some optional extra goodies.\\n uint256 public totalSupply;\\n string public name;\\n\\n\\n /***************\\n * Constructor *\\n ***************/\\n\\n /**\\n * @param _initialSupply Initial maximum token supply.\\n * @param _name A name for our ERC20 (technically optional, but it's fun ok jeez).\\n */\\n constructor(\\n uint256 _initialSupply,\\n string memory _name\\n )\\n public\\n {\\n balances[msg.sender] = _initialSupply;\\n totalSupply = _initialSupply;\\n name = _name;\\n }\\n\\n\\n /********************\\n * Public Functions *\\n ********************/\\n\\n /**\\n * Checks the balance of an address.\\n * @param _owner Address to check a balance for.\\n * @return Balance of the address.\\n */\\n function balanceOf(\\n address _owner\\n )\\n external\\n view\\n returns (\\n uint256\\n )\\n {\\n return balances[_owner];\\n }\\n\\n /**\\n * Transfers a balance from your account to someone else's account!\\n * @param _to Address to transfer a balance to.\\n * @param _amount Amount to transfer to the other account.\\n * @return true if the transfer was successful.\\n */\\n function transfer(\\n address _to,\\n uint256 _amount\\n )\\n external\\n returns (\\n bool\\n )\\n {\\n require(\\n balances[msg.sender] >= _amount,\\n \\\"You don't have enough balance to make this transfer!\\\"\\n );\\n\\n balances[msg.sender] -= _amount;\\n balances[_to] += _amount;\\n\\n emit Transfer(\\n msg.sender,\\n _to,\\n _amount\\n );\\n\\n return true;\\n }\\n\\n /**\\n * Transfers a balance from someone else's account to another account. You need an allowance\\n * from the sending account for this to work!\\n * @param _from Account to transfer a balance from.\\n * @param _to Account to transfer a balance to.\\n * @param _amount Amount to transfer to the other account.\\n * @return true if the transfer was successful.\\n */\\n function transferFrom(\\n address _from,\\n address _to,\\n uint256 _amount\\n )\\n external\\n returns (\\n bool\\n )\\n {\\n require(\\n balances[_from] >= _amount,\\n \\\"Can't transfer from the desired account because it doesn't have enough balance.\\\"\\n );\\n\\n require(\\n allowances[_from][msg.sender] >= _amount,\\n \\\"Can't transfer from the desired account because you don't have enough of an allowance.\\\"\\n );\\n\\n balances[_to] += _amount;\\n balances[_from] -= _amount;\\n\\n emit Transfer(\\n _from,\\n _to,\\n _amount\\n );\\n\\n return true;\\n }\\n\\n /**\\n * Approves an account to spend some amount from your account.\\n * @param _spender Account to approve a balance for.\\n * @param _amount Amount to allow the account to spend from your account.\\n * @return true if the allowance was successful.\\n */\\n function approve(\\n address _spender,\\n uint256 _amount\\n )\\n external\\n returns (\\n bool\\n )\\n {\\n allowances[msg.sender][_spender] = _amount;\\n\\n emit Approval(\\n msg.sender,\\n _spender,\\n _amount\\n );\\n\\n return true;\\n }\\n\\n /**\\n * Checks how much a given account is allowed to spend from another given account.\\n * @param _owner Address of the account to check an allowance from.\\n * @param _spender Address of the account trying to spend from the owner.\\n * @return Allowance for the spender from the owner.\\n */\\n function allowance(\\n address _owner,\\n address _spender\\n )\\n external\\n view\\n returns (\\n uint256\\n )\\n {\\n return allowances[_owner][_spender];\\n }\\n}\\n\",\"keccak256\":\"0x5c76dbdcd208a53d57d8f7afa0061e54cd83157cf7d0e57be8ed914d0018283c\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60806040523480156200001c5760008062000019620001c4565b50505b50604051620012e8380380620012e8833981810160405260408110156200004d576000806200004a620001c4565b50505b810190808051906020019092919080516040519392919084640100000000821115620000835760008062000080620001c4565b50505b83820191506020820185811115620000a557600080620000a2620001c4565b50505b8251866001820283011164010000000082111715620000ce57600080620000cb620001c4565b50505b8083526020830192505050908051906020019080838360005b8381101562000104578082015181840152602081019050620000e7565b50505050905090810190601f168015620001325780820380516001836020036101000a031916815260200191505b50604052505050816000805a6200014862000234565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081906200018e62000293565b5050508160028190620001a062000293565b5050508060039080519060200190620001bb929190620002fa565b50505062000455565b632a2a7adb598160e01b8152600481016020815285602082015260005b8681101562000201578086015181604084010152602081019050620001e1565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b60408110156200028e5760008183015260208101905062000272565b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b6040811015620002f557600081830152602081019050620002d9565b505050565b828062000306620003c6565b600181600116156101000203166002900490600052602060002090601f01602090048101928262000346576000856200033e62000293565b5050620003b3565b82601f106200036c57805160ff191683800117856200036462000293565b5050620003b3565b828001600101856200037d62000293565b50508215620003b3579182015b82811115620003b257825182620003a062000293565b5050916020019190600101906200038a565b5b509050620003c291906200042b565b5090565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b604081101562000426576000818301526020810190506200040a565b505050565b5b8082111562000451576000816000906200044562000293565b5050506001016200042c565b5090565b610e8380620004656000396000f3fe608060405234801561001957600080610016610c16565b50505b506004361061009c5760003560e01c806327e235e31161006f57806327e235e31461024557806355b6ed5c146102a657806370a0823114610327578063a9059cbb14610388578063dd62ed3e146103f55761009c565b806306fdde03146100aa578063095ea7b31461012d57806318160ddd1461019a57806323b872dd146101b8575b6000806100a7610c16565b50505b6100b2610476565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100f25780820151818401526020810190506100d7565b50505050905090810190601f16801561011f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101826004803603604081101561014c57600080610149610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610530565b60405180821515815260200191505060405180910390f35b6101a261063b565b6040518082815260200191505060405180910390f35b61022d600480360360608110156101d7576000806101d4610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610648565b60405180821515815260200191505060405180910390f35b6102906004803603602081101561026457600080610261610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610906565b6040518082815260200191505060405180910390f35b610311600480360360408110156102c5576000806102c2610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610925565b6040518082815260200191505060405180910390f35b6103726004803603602081101561034657600080610343610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610951565b6040518082815260200191505060405180910390f35b6103dd600480360360408110156103a7576000806103a4610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109a0565b60405180821515815260200191505060405180910390f35b6104606004803603604081101561041457600080610411610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b88565b6040518082815260200191505060405180910390f35b600380610481610c84565b600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182806104bc610c84565b600181600116156101000203166002900480156105285780601f106104f65761010080836104e8610c84565b040283529160200191610528565b820191906000526020600020905b8161050d610c84565b8152906001019060200180831161050457829003601f168201915b505050505081565b600081600160005a610540610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081906105c1610d44565b5050508273ffffffffffffffffffffffffffffffffffffffff165a6105e4610ce7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6002610645610c84565b81565b6000816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610691610c84565b10156106f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604f815260200180610e00604f9139606001915050604051809103906106ee610c16565b50505b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005a61073c610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061077e610c84565b10156107de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526056815260200180610daa60569139606001915050604051809103906107db610c16565b50505b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610829610c84565b019250508190610837610d44565b505050816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610885610c84565b039250508190610893610d44565b5050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000602052806000526040600020600091509050610922610c84565b81565b60016020528160005260406000206020528060005260406000206000915091505061094e610c84565b81565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610999610c84565b9050919050565b6000816000805a6109af610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206109f1610c84565b1015610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180610e4f6034913960400191505060405180910390610a4e610c16565b50505b816000805a610a5e610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610aa4610c84565b039250508190610ab2610d44565b505050816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610b00610c84565b019250508190610b0e610d44565b5050508273ffffffffffffffffffffffffffffffffffffffff165a610b31610ce7565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610c0e610c84565b905092915050565b632a2a7adb598160e01b8152600481016020815285602082015260005b86811015610c51578086015181604084010152602081019050610c33565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b6040811015610ce257600081830152602081019050610cc8565b505050565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b6040811015610d3f57600081830152602081019050610d25565b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b6040811015610da457600081830152602081019050610d8a565b50505056fe43616e2774207472616e736665722066726f6d207468652064657369726564206163636f756e74206265636175736520796f7520646f6e2774206861766520656e6f756768206f6620616e20616c6c6f77616e63652e43616e2774207472616e736665722066726f6d207468652064657369726564206163636f756e74206265636175736520697420646f65736e2774206861766520656e6f7567682062616c616e63652e596f7520646f6e2774206861766520656e6f7567682062616c616e636520746f206d616b652074686973207472616e7366657221", + "deployedBytecode": "0x608060405234801561001957600080610016610c16565b50505b506004361061009c5760003560e01c806327e235e31161006f57806327e235e31461024557806355b6ed5c146102a657806370a0823114610327578063a9059cbb14610388578063dd62ed3e146103f55761009c565b806306fdde03146100aa578063095ea7b31461012d57806318160ddd1461019a57806323b872dd146101b8575b6000806100a7610c16565b50505b6100b2610476565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100f25780820151818401526020810190506100d7565b50505050905090810190601f16801561011f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101826004803603604081101561014c57600080610149610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610530565b60405180821515815260200191505060405180910390f35b6101a261063b565b6040518082815260200191505060405180910390f35b61022d600480360360608110156101d7576000806101d4610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610648565b60405180821515815260200191505060405180910390f35b6102906004803603602081101561026457600080610261610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610906565b6040518082815260200191505060405180910390f35b610311600480360360408110156102c5576000806102c2610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610925565b6040518082815260200191505060405180910390f35b6103726004803603602081101561034657600080610343610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610951565b6040518082815260200191505060405180910390f35b6103dd600480360360408110156103a7576000806103a4610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109a0565b60405180821515815260200191505060405180910390f35b6104606004803603604081101561041457600080610411610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b88565b6040518082815260200191505060405180910390f35b600380610481610c84565b600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182806104bc610c84565b600181600116156101000203166002900480156105285780601f106104f65761010080836104e8610c84565b040283529160200191610528565b820191906000526020600020905b8161050d610c84565b8152906001019060200180831161050457829003601f168201915b505050505081565b600081600160005a610540610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081906105c1610d44565b5050508273ffffffffffffffffffffffffffffffffffffffff165a6105e4610ce7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6002610645610c84565b81565b6000816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610691610c84565b10156106f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604f815260200180610e00604f9139606001915050604051809103906106ee610c16565b50505b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005a61073c610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061077e610c84565b10156107de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526056815260200180610daa60569139606001915050604051809103906107db610c16565b50505b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610829610c84565b019250508190610837610d44565b505050816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610885610c84565b039250508190610893610d44565b5050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000602052806000526040600020600091509050610922610c84565b81565b60016020528160005260406000206020528060005260406000206000915091505061094e610c84565b81565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610999610c84565b9050919050565b6000816000805a6109af610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206109f1610c84565b1015610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180610e4f6034913960400191505060405180910390610a4e610c16565b50505b816000805a610a5e610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610aa4610c84565b039250508190610ab2610d44565b505050816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610b00610c84565b019250508190610b0e610d44565b5050508273ffffffffffffffffffffffffffffffffffffffff165a610b31610ce7565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610c0e610c84565b905092915050565b632a2a7adb598160e01b8152600481016020815285602082015260005b86811015610c51578086015181604084010152602081019050610c33565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b6040811015610ce257600081830152602081019050610cc8565b505050565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b6040811015610d3f57600081830152602081019050610d25565b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b6040811015610da457600081830152602081019050610d8a565b50505056fe43616e2774207472616e736665722066726f6d207468652064657369726564206163636f756e74206265636175736520796f7520646f6e2774206861766520656e6f756768206f6620616e20616c6c6f77616e63652e43616e2774207472616e736665722066726f6d207468652064657369726564206163636f756e74206265636175736520697420646f65736e2774206861766520656e6f7567682062616c616e63652e596f7520646f6e2774206861766520656e6f7567682062616c616e636520746f206d616b652074686973207472616e7366657221", + "devdoc": { + "details": "A super simple ERC20 implementation!", + "kind": "dev", + "methods": { + "allowance(address,address)": { + "params": { + "_owner": "Address of the account to check an allowance from.", + "_spender": "Address of the account trying to spend from the owner." + }, + "returns": { + "_0": "Allowance for the spender from the owner." + } + }, + "approve(address,uint256)": { + "params": { + "_amount": "Amount to allow the account to spend from your account.", + "_spender": "Account to approve a balance for." + }, + "returns": { + "_0": "true if the allowance was successful." + } + }, + "balanceOf(address)": { + "params": { + "_owner": "Address to check a balance for." + }, + "returns": { + "_0": "Balance of the address." + } + }, + "constructor": { + "params": { + "_initialSupply": "Initial maximum token supply.", + "_name": "A name for our ERC20 (technically optional, but it's fun ok jeez)." + } + }, + "transfer(address,uint256)": { + "params": { + "_amount": "Amount to transfer to the other account.", + "_to": "Address to transfer a balance to." + }, + "returns": { + "_0": "true if the transfer was successful." + } + }, + "transferFrom(address,address,uint256)": { + "params": { + "_amount": "Amount to transfer to the other account.", + "_from": "Account to transfer a balance from.", + "_to": "Account to transfer a balance to." + }, + "returns": { + "_0": "true if the transfer was successful." + } + } + }, + "title": "ERC20", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "allowance(address,address)": { + "notice": "Checks how much a given account is allowed to spend from another given account." + }, + "approve(address,uint256)": { + "notice": "Approves an account to spend some amount from your account." + }, + "balanceOf(address)": { + "notice": "Checks the balance of an address." + }, + "transfer(address,uint256)": { + "notice": "Transfers a balance from your account to someone else's account!" + }, + "transferFrom(address,address,uint256)": { + "notice": "Transfers a balance from someone else's account to another account. You need an allowance from the sending account for this to work!" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 22, + "contract": "contracts/ERC20.sol:ERC20", + "label": "balances", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 28, + "contract": "contracts/ERC20.sol:ERC20", + "label": "allowances", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 30, + "contract": "contracts/ERC20.sol:ERC20", + "label": "totalSupply", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 32, + "contract": "contracts/ERC20.sol:ERC20", + "label": "name", + "offset": 0, + "slot": "3", + "type": "t_string_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/examples/hardhat/deployments/optimism/solcInputs/a4e2764a77fec30ccb674d800c46e436.json b/examples/hardhat/deployments/optimism/solcInputs/a4e2764a77fec30ccb674d800c46e436.json new file mode 100644 index 000000000000..9172859cb7af --- /dev/null +++ b/examples/hardhat/deployments/optimism/solcInputs/a4e2764a77fec30ccb674d800c46e436.json @@ -0,0 +1,35 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >0.6.0 <0.8.0;\n\n/**\n * @title ERC20\n * @dev A super simple ERC20 implementation!\n */\ncontract ERC20 {\n\n /**********\n * Events *\n **********/\n\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _value\n );\n\n event Approval(\n address indexed _owner,\n address indexed _spender,\n uint256 _value\n );\n\n\n /*************\n * Variables *\n *************/\n\n mapping (address => uint256) public balances;\n mapping (address => mapping (address => uint256)) public allowances;\n\n // Some optional extra goodies.\n uint256 public totalSupply;\n string public name;\n\n\n /***************\n * Constructor *\n ***************/\n\n /**\n * @param _initialSupply Initial maximum token supply.\n * @param _name A name for our ERC20 (technically optional, but it's fun ok jeez).\n */\n constructor(\n uint256 _initialSupply,\n string memory _name\n )\n public\n {\n balances[msg.sender] = _initialSupply;\n totalSupply = _initialSupply;\n name = _name;\n }\n\n\n /********************\n * Public Functions *\n ********************/\n\n /**\n * Checks the balance of an address.\n * @param _owner Address to check a balance for.\n * @return Balance of the address.\n */\n function balanceOf(\n address _owner\n )\n external\n view\n returns (\n uint256\n )\n {\n return balances[_owner];\n }\n\n /**\n * Transfers a balance from your account to someone else's account!\n * @param _to Address to transfer a balance to.\n * @param _amount Amount to transfer to the other account.\n * @return true if the transfer was successful.\n */\n function transfer(\n address _to,\n uint256 _amount\n )\n external\n returns (\n bool\n )\n {\n require(\n balances[msg.sender] >= _amount,\n \"You don't have enough balance to make this transfer!\"\n );\n\n balances[msg.sender] -= _amount;\n balances[_to] += _amount;\n\n emit Transfer(\n msg.sender,\n _to,\n _amount\n );\n\n return true;\n }\n\n /**\n * Transfers a balance from someone else's account to another account. You need an allowance\n * from the sending account for this to work!\n * @param _from Account to transfer a balance from.\n * @param _to Account to transfer a balance to.\n * @param _amount Amount to transfer to the other account.\n * @return true if the transfer was successful.\n */\n function transferFrom(\n address _from,\n address _to,\n uint256 _amount\n )\n external\n returns (\n bool\n )\n {\n require(\n balances[_from] >= _amount,\n \"Can't transfer from the desired account because it doesn't have enough balance.\"\n );\n\n require(\n allowances[_from][msg.sender] >= _amount,\n \"Can't transfer from the desired account because you don't have enough of an allowance.\"\n );\n\n balances[_to] += _amount;\n balances[_from] -= _amount;\n\n emit Transfer(\n _from,\n _to,\n _amount\n );\n\n return true;\n }\n\n /**\n * Approves an account to spend some amount from your account.\n * @param _spender Account to approve a balance for.\n * @param _amount Amount to allow the account to spend from your account.\n * @return true if the allowance was successful.\n */\n function approve(\n address _spender,\n uint256 _amount\n )\n external\n returns (\n bool\n )\n {\n allowances[msg.sender][_spender] = _amount;\n\n emit Approval(\n msg.sender,\n _spender,\n _amount\n );\n\n return true;\n }\n\n /**\n * Checks how much a given account is allowed to spend from another given account.\n * @param _owner Address of the account to check an allowance from.\n * @param _spender Address of the account trying to spend from the owner.\n * @return Allowance for the spender from the owner.\n */\n function allowance(\n address _owner,\n address _spender\n )\n external\n view\n returns (\n uint256\n )\n {\n return allowances[_owner][_spender];\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": false, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/examples/hardhat/yarn.lock b/examples/hardhat/yarn.lock new file mode 100644 index 000000000000..ddb257af4093 --- /dev/null +++ b/examples/hardhat/yarn.lock @@ -0,0 +1,8064 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ensdomains/ens@^0.4.4": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.5.tgz#e0aebc005afdc066447c6e22feb4eda89a5edbfc" + integrity sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw== + dependencies: + bluebird "^3.5.2" + eth-ens-namehash "^2.0.8" + solc "^0.4.20" + testrpc "0.0.1" + web3-utils "^1.0.0-beta.31" + +"@ensdomains/resolver@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" + integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== + +"@eth-optimism/hardhat-ovm@^0.2.0": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@eth-optimism/hardhat-ovm/-/hardhat-ovm-0.2.2.tgz#55fafaa6b8277447abaf132602c1c6d14a2a18a2" + integrity sha512-QLzqawYCzC/m6K/Oaj/tCZQlu6kZTgnleg1cJad8kVYA5E+JWZQ6ZJrcStoJoJrco9RIroPUjAFEhFM8YiCc7Q== + dependencies: + node-fetch "^2.6.1" + +"@ethereum-waffle/chai@^3.3.0": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.3.1.tgz#3f20b810d0fa516f19af93c50c3be1091333fa8e" + integrity sha512-+vepCjttfOzCSnmiVEmd1bR8ctA2wYVrtWa8bDLhnTpj91BIIHotNDTwpeq7fyjrOCIBTN3Ai8ACfjNoatc4OA== + dependencies: + "@ethereum-waffle/provider" "^3.3.1" + ethers "^5.0.0" + +"@ethereum-waffle/compiler@^3.3.0": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.3.1.tgz#946128fd565aa4347075fd716dbd0f3f38189280" + integrity sha512-X/TeQugt94AQwXEdCjIQxcXYGawNulVBYEBE7nloj4wE/RBxNolXwjoVNjcS4kuiMMbKkdO0JkL5sn6ixx8bDg== + dependencies: + "@resolver-engine/imports" "^0.3.3" + "@resolver-engine/imports-fs" "^0.3.3" + "@typechain/ethers-v5" "^2.0.0" + "@types/mkdirp" "^0.5.2" + "@types/node-fetch" "^2.5.5" + ethers "^5.0.1" + mkdirp "^0.5.1" + node-fetch "^2.6.0" + solc "^0.6.3" + ts-generator "^0.1.1" + typechain "^3.0.0" + +"@ethereum-waffle/ens@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.2.4.tgz#c486be4879ea7107e1ff01b24851a5e44f5946ce" + integrity sha512-lkRVPCEkk7KOwH9MqFMB+gL0X8cZNsm+MnKpP9CNbAyhFos2sCDGcY8t6BA12KBK6pdMuuRXPxYL9WfPl9bqSQ== + dependencies: + "@ensdomains/ens" "^0.4.4" + "@ensdomains/resolver" "^0.2.4" + ethers "^5.0.1" + +"@ethereum-waffle/mock-contract@^3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.2.2.tgz#5749b03cbb4850150f81cf66151c4523eb7436f0" + integrity sha512-H60Cc5C7sYNU4LuPMSKDh8YIaN9/fkwEjznY78CEbOosO+lMlFYdA+5VZjeDGDuYKfsBqsocQdkj1CRyoi1KNw== + dependencies: + "@ethersproject/abi" "^5.0.1" + ethers "^5.0.1" + +"@ethereum-waffle/provider@^3.3.0", "@ethereum-waffle/provider@^3.3.1": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.3.2.tgz#33677baf6af5cbb087c3072d84f38c152968ebb1" + integrity sha512-ilz6cXK0ylSKCmZktTMpY4gjo0CN6rb86JfN7+RZYk6tKtZA6sXoOe95skWEQkGf1fZk7G817fTzLb0CmFDp1g== + dependencies: + "@ethereum-waffle/ens" "^3.2.4" + ethers "^5.0.1" + ganache-core "^2.13.2" + patch-package "^6.2.2" + postinstall-postinstall "^2.1.0" + +"@ethereumjs/block@^3.2.1", "@ethereumjs/block@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.3.0.tgz#a1b3baec831c71c0d9e7f6145f25e919cff4939c" + integrity sha512-WoefY9Rs4W8vZTxG9qwntAlV61xsSv0NPoXmHO7x3SH16dwJQtU15YvahPCz4HEEXbu7GgGgNgu0pv8JY7VauA== + dependencies: + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/tx" "^3.2.0" + ethereumjs-util "^7.0.10" + merkle-patricia-tree "^4.2.0" + +"@ethereumjs/blockchain@^5.2.1", "@ethereumjs/blockchain@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.3.0.tgz#206936e30a4320d87a26e58d157eadef21ef6ff1" + integrity sha512-B0Y5QDZcRDQISPilv3m8nzk97QmC98DnSE9WxzGpCxfef22Mw7xhwGipci5Iy0dVC2Np2Cr5d3F6bHAR7+yVmQ== + dependencies: + "@ethereumjs/block" "^3.3.0" + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/ethash" "^1.0.0" + debug "^2.2.0" + ethereumjs-util "^7.0.10" + level-mem "^5.0.1" + lru-cache "^5.1.1" + rlp "^2.2.4" + semaphore-async-await "^1.5.1" + +"@ethereumjs/common@^2.2.0", "@ethereumjs/common@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.3.0.tgz#b1174fab8653565b4835a455d972dc2e89411896" + integrity sha512-Fmi15MdVptsC85n6NcUXIFiiXCXWEfZNgPWP+OGAQOC6ZtdzoNawtxH/cYpIgEgSuIzfOeX3VKQP/qVI1wISHg== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.0.10" + +"@ethereumjs/ethash@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.0.0.tgz#4e77f85b37be1ade5393e8719bdabac3e796ddaa" + integrity sha512-iIqnGG6NMKesyOxv2YctB2guOVX18qMAWlj3QlZyrc+GqfzLqoihti+cVNQnyNxr7eYuPdqwLQOFuPe6g/uKjw== + dependencies: + "@types/levelup" "^4.3.0" + buffer-xor "^2.0.1" + ethereumjs-util "^7.0.7" + miller-rabin "^4.0.0" + +"@ethereumjs/tx@^3.1.3", "@ethereumjs/tx@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.2.0.tgz#2a816d5db67eb36059c8dc13f022f64e9b8d7ab9" + integrity sha512-D3X/XtZ3ldUg34hr99Jvj7NxW3NxVKdUKrwQnEWlAp4CmCQpvYoyn7NF4lk34rHEt7ScS+Agu01pcDHoOcd19A== + dependencies: + "@ethereumjs/common" "^2.3.0" + ethereumjs-util "^7.0.10" + +"@ethereumjs/vm@^5.3.2": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.4.0.tgz#092d530388e855310406160f144d6f492800c0ea" + integrity sha512-0Mv51inp5S/mh+fKP0H90byT/5DdFirChUFUMhEjDlIBnHK55o/liKZ+0iNSLm6ZxX8iPs7urp11/UCoxPJfLA== + dependencies: + "@ethereumjs/block" "^3.3.0" + "@ethereumjs/blockchain" "^5.3.0" + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/tx" "^3.2.0" + async-eventemitter "^0.2.4" + core-js-pure "^3.0.1" + debug "^2.2.0" + ethereumjs-util "^7.0.10" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + merkle-patricia-tree "^4.2.0" + rustbn.js "~0.2.0" + util.promisify "^1.0.1" + +"@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/abi@5.3.0", "@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.3.0.tgz#00f0647d906edcd32c50b16ab9c98f83e208dcf1" + integrity sha512-NaT4UacjOwca8qCG/gv8k+DgTcWu49xlrvdhr/p8PTFnoS8e3aMWqjI3znFME5Txa/QWXDrg2/heufIUue9rtw== + dependencies: + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + +"@ethersproject/abstract-provider@5.3.0", "@ethersproject/abstract-provider@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.3.0.tgz#f4c0ae4a4cef9f204d7781de805fd44b72756c81" + integrity sha512-1+MLhGP1GwxBDBNwMWVmhCsvKwh4gK7oIfOrmlmePNeskg1NhIrYssraJBieaFNHUYfKEd/1DjiVZMw8Qu5Cxw== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/networks" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/web" "^5.3.0" + +"@ethersproject/abstract-signer@5.3.0", "@ethersproject/abstract-signer@^5.0.0", "@ethersproject/abstract-signer@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.3.0.tgz#05172b653e15b535ed5854ef5f6a72f4b441052d" + integrity sha512-w8IFwOYqiPrtvosPuArZ3+QPR2nmdVTRrVY8uJYL3NNfMmQfTy3V3l2wbzX47UUlNbPJY+gKvzJAyvK1onZxJg== + dependencies: + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + +"@ethersproject/address@5.3.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.0", "@ethersproject/address@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.3.0.tgz#e53b69eacebf332e8175de814c5e6507d6932518" + integrity sha512-29TgjzEBK+gUEUAOfWCG7s9IxLNLCqvr+oDSk6L9TXD0VLvZJKhJV479tKQqheVA81OeGxfpdxYtUVH8hqlCvA== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/rlp" "^5.3.0" + +"@ethersproject/base64@5.3.0", "@ethersproject/base64@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.3.0.tgz#b831fb35418b42ad24d943c557259062b8640824" + integrity sha512-JIqgtOmgKcbc2sjGWTXyXktqUhvFUDte8fPVsAaOrcPiJf6YotNF+nsrOYGC9pbHBEGSuSBp3QR0varkO8JHEw== + dependencies: + "@ethersproject/bytes" "^5.3.0" + +"@ethersproject/basex@5.3.0", "@ethersproject/basex@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.3.0.tgz#02dea3ab8559ae625c6d548bc11773432255c916" + integrity sha512-8J4nS6t/SOnoCgr3DF5WCSRLC5YwTKYpZWJqeyYQLX+86TwPhtzvHXacODzcDII9tWKhVg6g0Bka8JCBWXsCiQ== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + +"@ethersproject/bignumber@5.3.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.0", "@ethersproject/bignumber@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.3.0.tgz#74ab2ec9c3bda4e344920565720a6ee9c794e9db" + integrity sha512-5xguJ+Q1/zRMgHgDCaqAexx/8DwDVLRemw2i6uR8KyGjwGdXI8f32QZZ1cKGucBN6ekJvpUpHy6XAuQnTv0mPA== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + bn.js "^4.11.9" + +"@ethersproject/bytes@5.3.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.3.0.tgz#473e0da7f831d535b2002be05e6f4ca3729a1bc9" + integrity sha512-rqLJjdVqCcn7glPer7Fxh87PRqlnRScVAoxcIP3PmOUNApMWJ6yRdOFfo2KvPAdO7Le3yEI1o0YW+Yvr7XCYvw== + dependencies: + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/constants@5.3.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.3.0.tgz#a5d6d86c0eec2c64c3024479609493b9afb3fc77" + integrity sha512-4y1feNOwEpgjAfiCFWOHznvv6qUF/H6uI0UKp8xdhftb+H+FbKflXg1pOgH5qs4Sr7EYBL+zPyPb+YD5g1aEyw== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + +"@ethersproject/contracts@5.3.0", "@ethersproject/contracts@^5.0.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.3.0.tgz#ad699a3abaae30bfb6422cf31813a663b2d4099c" + integrity sha512-eDyQ8ltykvyQqnGZxb/c1e0OnEtzqXhNNC4BX8nhYBCaoBrYYuK/1fLmyEvc5+XUMoxNhwpYkoSSwvPLci7/Zg== + dependencies: + "@ethersproject/abi" "^5.3.0" + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + +"@ethersproject/hash@5.3.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.3.0.tgz#f65e3bf3db3282df4da676db6cfa049535dd3643" + integrity sha512-gAFZSjUPQ32CIfoKSMtMEQ+IO0kQxqhwz9fCIFt2DtAq2u4pWt8mL9Z5P0r6KkLcQU8LE9FmuPPyd+JvBzmr1w== + dependencies: + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + +"@ethersproject/hdnode@5.3.0", "@ethersproject/hdnode@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.3.0.tgz#26fed65ffd5c25463fddff13f5fb4e5617553c94" + integrity sha512-zLmmtLNoDMGoYRdjOab01Zqkvp+TmZyCGDAMQF1Bs3yZyBs/kzTNi1qJjR1jVUcPP5CWGtjFwY8iNG8oNV9J8g== + dependencies: + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/basex" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/pbkdf2" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/signing-key" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/wordlists" "^5.3.0" + +"@ethersproject/json-wallets@5.3.0", "@ethersproject/json-wallets@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.3.0.tgz#7b1a5ff500c12aa8597ae82c8939837b0449376e" + integrity sha512-/xwbqaIb5grUIGNmeEaz8GdcpmDr++X8WT4Jqcclnxow8PXCUHFeDxjf3O+nSuoqOYG/Ds0+BI5xuQKbva6Xkw== + dependencies: + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/hdnode" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/pbkdf2" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/random" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.3.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.3.0.tgz#fb5cd36bdfd6fa02e2ea84964078a9fc6bd731be" + integrity sha512-Gv2YqgIUmRbYVNIibafT0qGaeGYLIA/EdWHJ7JcVxVSs2vyxafGxOJ5VpSBHWeOIsE6OOaCelYowhuuTicgdFQ== + dependencies: + "@ethersproject/bytes" "^5.3.0" + js-sha3 "0.5.7" + +"@ethersproject/logger@5.3.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.3.0.tgz#7a69fa1d4ca0d4b7138da1627eb152f763d84dd0" + integrity sha512-8bwJ2gxJGkZZnpQSq5uSiZSJjyVTWmlGft4oH8vxHdvO1Asy4TwVepAhPgxIQIMxXZFUNMych1YjIV4oQ4I7dA== + +"@ethersproject/networks@5.3.0", "@ethersproject/networks@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.3.0.tgz#d8ad06eb107c69fb8651f4c81ddd0e88944fdfea" + integrity sha512-XGbD9MMgqrR7SYz8o6xVgdG+25v7YT5vQG8ZdlcLj2I7elOBM7VNeQrnxfSN7rWQNcqu2z80OM29gGbQz+4Low== + dependencies: + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/pbkdf2@5.3.0", "@ethersproject/pbkdf2@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.3.0.tgz#8adbb41489c3c9f319cc44bc7d3e6095fd468dc8" + integrity sha512-Q9ChVU6gBFiex0FSdtzo4b0SAKz3ZYcYVFLrEWHL0FnHvNk3J3WgAtRNtBQGQYn/T5wkoTdZttMbfBkFlaiWcA== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + +"@ethersproject/properties@5.3.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.3.0.tgz#feef4c4babeb7c10a6b3449575016f4ad2c092b2" + integrity sha512-PaHxJyM5/bfusk6vr3yP//JMnm4UEojpzuWGTmtL5X4uNhNnFNvlYilZLyDr4I9cTkIbipCMsAuIcXWsmdRnEw== + dependencies: + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/providers@5.3.0", "@ethersproject/providers@^5.0.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.3.0.tgz#bccb49f1073a7d56e24f49abb14bb281c9b08636" + integrity sha512-HtL+DEbzPcRyfrkrMay7Rk/4he+NbUpzI/wHXP4Cqtra82nQOnqqCgTQc4HbdDrl75WVxG/JRMFhyneIPIMZaA== + dependencies: + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/basex" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/networks" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/random" "^5.3.0" + "@ethersproject/rlp" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/web" "^5.3.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.3.0", "@ethersproject/random@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.3.0.tgz#7c46bf36e50cb0d0550bc8c666af8e1d4496dc1a" + integrity sha512-A5SL/4inutSwt3Fh2OD0x2gz+x6GHmuUnIPkR7zAiTidMD2N8F6tZdMF1hlQKWVCcVMWhEQg8mWijhEzm6BBYw== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/rlp@5.3.0", "@ethersproject/rlp@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.3.0.tgz#7cb93a7b5dfa69163894153c9d4b0d936f333188" + integrity sha512-oI0joYpsRanl9guDubaW+1NbcpK0vJ3F/6Wpcanzcnqq+oaW9O5E98liwkEDPcb16BUTLIJ+ZF8GPIHYxJ/5Pw== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/sha2@5.3.0", "@ethersproject/sha2@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.3.0.tgz#209f9a1649f7d2452dcd5e5b94af43b7f3f42366" + integrity sha512-r5ftlwKcocYEuFz2JbeKOT5SAsCV4m1RJDsTOEfQ5L67ZC7NFDK5i7maPdn1bx4nPhylF9VAwxSrQ1esmwzylg== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.3.0", "@ethersproject/signing-key@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.3.0.tgz#a96c88f8173e1abedfa35de32d3e5db7c48e5259" + integrity sha512-+DX/GwHAd0ok1bgedV1cKO0zfK7P/9aEyNoaYiRsGHpCecN7mhLqcdoUiUzE7Uz86LBsxm5ssK0qA1kBB47fbQ== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.3.0", "@ethersproject/solidity@^5.0.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.3.0.tgz#2a0b00b4aaaef99a080ddea13acab1fa35cd4a93" + integrity sha512-uLRBaNUiISHbut94XKewJgQh6UmydWTBp71I7I21pkjVXfZO2dJ5EOo3jCnumJc01M4LOm79dlNNmF3oGIvweQ== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + +"@ethersproject/strings@5.3.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.3.0.tgz#a6b640aab56a18e0909f657da798eef890968ff0" + integrity sha512-j/AzIGZ503cvhuF2ldRSjB0BrKzpsBMtCieDtn4TYMMZMQ9zScJn9wLzTQl/bRNvJbBE6TOspK0r8/Ngae/f2Q== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/transactions@5.3.0", "@ethersproject/transactions@^5.0.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.3.0.tgz#49b86f2bafa4d0bdf8e596578fc795ee47c50458" + integrity sha512-cdfK8VVyW2oEBCXhURG0WQ6AICL/r6Gmjh0e4Bvbv6MCn/GBd8FeBH3rtl7ho+AW50csMKeGv3m3K1HSHB2jMQ== + dependencies: + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/rlp" "^5.3.0" + "@ethersproject/signing-key" "^5.3.0" + +"@ethersproject/units@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.3.0.tgz#c4d1493532ad3d4ddf6e2bc4f8c94a2db933a8f5" + integrity sha512-BkfccZGwfJ6Ob+AelpIrgAzuNhrN2VLp3AILnkqTOv+yBdsc83V4AYf25XC/u0rHnWl6f4POaietPwlMqP2vUg== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + +"@ethersproject/wallet@5.3.0", "@ethersproject/wallet@^5.0.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.3.0.tgz#91946b470bd279e39ade58866f21f92749d062af" + integrity sha512-boYBLydG6671p9QoG6EinNnNzbm7DNOjVT20eV8J6HQEq4aUaGiA2CytF2vK+2rOEWbzhZqoNDt6AlkE1LlsTg== + dependencies: + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/hdnode" "^5.3.0" + "@ethersproject/json-wallets" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/random" "^5.3.0" + "@ethersproject/signing-key" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/wordlists" "^5.3.0" + +"@ethersproject/web@5.3.0", "@ethersproject/web@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.3.0.tgz#7959c403f6476c61515008d8f92da51c553a8ee1" + integrity sha512-Ni6/DHnY6k/TD41LEkv0RQDx4jqWz5e/RZvrSecsxGYycF+MFy2z++T/yGc2peRunLOTIFwEksgEGGlbwfYmhQ== + dependencies: + "@ethersproject/base64" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + +"@ethersproject/wordlists@5.3.0", "@ethersproject/wordlists@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.3.0.tgz#45a0205f5178c1de33d316cb2ab7ed5eac3c06c5" + integrity sha512-JcwumCZcsUxgWpiFU/BRy6b4KlTRdOmYvOKZcAw/3sdF93/pZyPW5Od2hFkHS8oWp4xS06YQ+qHqQhdcxdHafQ== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + +"@nomiclabs/hardhat-ethers@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" + integrity sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg== + +"@nomiclabs/hardhat-waffle@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.1.tgz#5d43654fba780720c5033dea240fe14f70ef4bd2" + integrity sha512-2YR2V5zTiztSH9n8BYWgtv3Q+EL0N5Ltm1PAr5z20uAY4SkkfylJ98CIqt18XFvxTD5x4K2wKBzddjV9ViDAZQ== + dependencies: + "@types/sinon-chai" "^3.2.3" + "@types/web3" "1.0.19" + +"@resolver-engine/core@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.3.3.tgz#590f77d85d45bc7ecc4e06c654f41345db6ca967" + integrity sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ== + dependencies: + debug "^3.1.0" + is-url "^1.2.4" + request "^2.85.0" + +"@resolver-engine/fs@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@resolver-engine/fs/-/fs-0.3.3.tgz#fbf83fa0c4f60154a82c817d2fe3f3b0c049a973" + integrity sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ== + dependencies: + "@resolver-engine/core" "^0.3.3" + debug "^3.1.0" + +"@resolver-engine/imports-fs@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz#4085db4b8d3c03feb7a425fbfcf5325c0d1e6c1b" + integrity sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA== + dependencies: + "@resolver-engine/fs" "^0.3.3" + "@resolver-engine/imports" "^0.3.3" + debug "^3.1.0" + +"@resolver-engine/imports@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@resolver-engine/imports/-/imports-0.3.3.tgz#badfb513bb3ff3c1ee9fd56073e3144245588bcc" + integrity sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q== + dependencies: + "@resolver-engine/core" "^0.3.3" + debug "^3.1.0" + hosted-git-info "^2.6.0" + path-browserify "^1.0.0" + url "^0.11.0" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^7.1.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5" + integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@solidity-parser/parser@^0.11.0": + version "0.11.1" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.11.1.tgz#fa840af64840c930f24a9c82c08d4a092a068add" + integrity sha512-H8BSBoKE8EubJa0ONqecA2TviT3TnHeC4NpgnAHSUiuhZoQBfPB4L2P9bs8R6AoTW10Endvh3vc+fomVMIDIYQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@typechain/ethers-v5@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz#cd3ca1590240d587ca301f4c029b67bfccd08810" + integrity sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw== + dependencies: + ethers "^5.0.2" + +"@types/abstract-leveldown@*": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-5.0.1.tgz#3c7750d0186b954c7f2d2f6acc8c3c7ba0c3412e" + integrity sha512-wYxU3kp5zItbxKmeRYCEplS2MW7DzyBnxPGj+GJVHZEUZiK/nn5Ei1sUFgURDh+X051+zsGe28iud3oHjrYWQQ== + +"@types/bn.js@*", "@types/bn.js@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" + integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + dependencies: + "@types/node" "*" + +"@types/bn.js@^4.11.3", "@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== + dependencies: + "@types/node" "*" + +"@types/chai@*": + version "4.2.18" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.18.tgz#0c8e298dbff8205e2266606c1ea5fbdba29b46e4" + integrity sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ== + +"@types/chai@4.2.17": + version "4.2.17" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.17.tgz#85f9f0610f514b22a94125d441f73eef65bde5cc" + integrity sha512-LaiwWNnYuL8xJlQcE91QB2JoswWZckq9A4b+nMPq8dt8AP96727Nb3X4e74u+E3tm4NLTILNI9MYFsyVc30wSA== + +"@types/levelup@^4.3.0": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.1.tgz#7a53b9fd510716e11b2065332790fdf5f9b950b9" + integrity sha512-n//PeTpbHLjMLTIgW5B/g06W/6iuTBHuvUka2nFL9APMSVMNe2r4enADfu3CIE9IyV9E+uquf9OEQQqrDeg24A== + dependencies: + "@types/abstract-leveldown" "*" + "@types/node" "*" + +"@types/lru-cache@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03" + integrity sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w== + +"@types/mkdirp@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" + integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== + dependencies: + "@types/node" "*" + +"@types/mocha@^8.2.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.2.tgz#91daa226eb8c2ff261e6a8cbf8c7304641e095e0" + integrity sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw== + +"@types/node-fetch@^2.5.5": + version "2.5.10" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.10.tgz#9b4d4a0425562f9fcea70b12cb3fcdd946ca8132" + integrity sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*": + version "15.6.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.1.tgz#32d43390d5c62c5b6ec486a9bc9c59544de39a08" + integrity sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA== + +"@types/node@^12.12.6": + version "12.20.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.13.tgz#e743bae112bd779ac9650f907197dd2caa7f0364" + integrity sha512-1x8W5OpxPq+T85OUsHRP6BqXeosKmeXRtjoF39STcdf/UWLqUsoehstZKOi0CunhVqHG17AyZgpj20eRVooK6A== + +"@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/prettier@^2.1.1": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" + integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== + +"@types/qs@^6.9.4": + version "6.9.6" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" + integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA== + +"@types/resolve@^0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +"@types/secp256k1@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.2.tgz#20c29a87149d980f64464e56539bf4810fdb5d1d" + integrity sha512-QMg+9v0bbNJ2peLuHRWxzmy0HRJIG6gFZNhaRSp7S3ggSbCCxiqQB2/ybvhXyhHOCequpNkrx7OavNhrWOsW0A== + dependencies: + "@types/node" "*" + +"@types/sinon-chai@^3.2.3": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.5.tgz#df21ae57b10757da0b26f512145c065f2ad45c48" + integrity sha512-bKQqIpew7mmIGNRlxW6Zli/QVyc3zikpGzCa797B/tRnD9OtHvZ/ts8sYXV+Ilj9u3QRaUEM8xrjgd1gwm1BpQ== + dependencies: + "@types/chai" "*" + "@types/sinon" "*" + +"@types/sinon@*": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.1.tgz#97ccb0482b750f5140ffdc661240ebbbe6e28d75" + integrity sha512-tZulsvuJwif5ddTBtscflI7gJcd+RpENcNZ7QCp0jKEl0bZY3Pu6PbJs4GR3SfQkGgsUa+FrlKsKQ0XyGNvDuA== + dependencies: + "@sinonjs/fake-timers" "^7.1.0" + +"@types/underscore@*": + version "1.11.2" + resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.2.tgz#9441e0f6402bbcb72dbee771582fa57c5a1dedd3" + integrity sha512-Ls2ylbo7++ITrWk2Yc3G/jijwSq5V3GT0tlgVXEl2kKYXY3ImrtmTCoE2uyTWFRI5owMBriloZFWbE1SXOsE7w== + +"@types/web3@1.0.19": + version "1.0.19" + resolved "https://registry.yarnpkg.com/@types/web3/-/web3-1.0.19.tgz#46b85d91d398ded9ab7c85a5dd57cb33ac558924" + integrity sha512-fhZ9DyvDYDwHZUp5/STa9XW2re0E8GxoioYJ4pEUZ13YHpApSagixj7IAdoYH5uAK+UalGq6Ml8LYzmgRA/q+A== + dependencies: + "@types/bn.js" "*" + "@types/underscore" "*" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +"@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== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abstract-leveldown@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz#5cb89f958a44f526779d740d1440e743e0c30a57" + integrity sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@^2.4.1, abstract-leveldown@~2.7.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" + integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz#f7128e1f86ccabf7d2893077ce5d06d798e386c6" + integrity sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +abstract-leveldown@~2.6.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" + integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@~6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= + +aes-js@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" + integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + +ansi-colors@4.1.1, ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +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-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-back@^1.0.3, array-back@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b" + integrity sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs= + dependencies: + typical "^2.6.0" + +array-back@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-2.0.0.tgz#6877471d51ecc9c9bfa6136fb6c7d5fe69748022" + integrity sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw== + dependencies: + typical "^2.6.1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-eventemitter@^0.2.2, async-eventemitter@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" + integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== + dependencies: + lodash "^4.17.11" + +async@^1.4.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.1: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.14, babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-env@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^3.2.6" + invariant "^2.2.2" + semver "^5.3.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babelify@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5" + integrity sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU= + dependencies: + babel-core "^6.0.14" + object-assign "^4.0.0" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +backoff@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" + integrity sha1-9hbtqdPktmuMp/ynn2lXIsX44m8= + dependencies: + precond "0.2" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +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== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +bignumber.js@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" + integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bip39@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235" + integrity sha512-xwIx/8JKoT2+IPJpFEfXoWdYwP7UVAoUxxLNfGCfVowaJE7yg1Y5B1BVPqlUNsBq5/nGwmFkwRJ8xDW4sX8OdA== + dependencies: + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + randombytes "^2.0.1" + safe-buffer "^5.0.1" + unorm "^1.3.3" + +blakejs@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" + integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= + +bluebird@^3.5.0, bluebird@^3.5.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= + +bn.js@^4.0.0, bn.js@^4.1.0, 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.11.9, bn.js@^4.8.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +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" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-stdout@1.3.1: + version "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.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== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer-xor@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-2.0.2.tgz#34f7c64f04c777a1f8aac5e661273bb9dd320289" + integrity sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ== + dependencies: + safe-buffer "^5.1.1" + +buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bufferutil@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b" + integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw== + dependencies: + node-gyp-build "^4.2.0" + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +bytewise-core@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" + integrity sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI= + dependencies: + typewise-core "^1.2" + +bytewise@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e" + integrity sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4= + dependencies: + bytewise-core "^1.2.2" + typewise "^1.0.3" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +cachedown@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cachedown/-/cachedown-1.0.0.tgz#d43f036e4510696b31246d7db31ebf0f7ac32d15" + integrity sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU= + dependencies: + abstract-leveldown "^2.4.1" + lru-cache "^3.2.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-lite@^1.0.30000844: + version "1.0.30001232" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001232.tgz#2ebc8b6a77656fd772ab44a82a332a26a17e9527" + integrity sha512-e4Gyp7P8vqC2qV2iHA+cJNf/yqUKOShXQOJHQt81OHxlIZl/j/j3soEA0adAQi8CPUQgvOdDENyQ5kd6a6mNSg== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chai@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" + integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + +checkpoint-store@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06" + integrity sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY= + dependencies: + functional-red-black-tree "^1.0.1" + +chokidar@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" + integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.2.0" + optionalDependencies: + fsevents "~2.1.1" + +chokidar@3.5.1, chokidar@^3.4.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +ci-info@^2.0.0: + version "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" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + 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" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +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= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +command-line-args@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-4.0.7.tgz#f8d1916ecb90e9e121eda6428e41300bfb64cc46" + integrity sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA== + dependencies: + array-back "^2.0.0" + find-replace "^1.0.3" + typical "^2.6.1" + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + 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" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.5.1: + 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" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookie@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + +cookiejar@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-pure@^3.0.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.13.1.tgz#5d139d346780f015f67225f45ee2362a6bed6ba1" + integrity sha512-wVlh0IAi2t1iOEh16y4u1TRk6ubd4KvLE8dlMi+3QUI6SfKphQUh7tAwihGGSQ8affxEXpVIPpOdf9kjR4v4Pw== + +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cors@^2.8.1: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +crc-32@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, 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== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-fetch@^2.1.0, cross-fetch@^2.1.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.3.tgz#e8a0b3c54598136e037f8650f8e823ccdfac198e" + integrity sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw== + dependencies: + node-fetch "2.1.2" + whatwg-fetch "2.0.4" + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@4, debug@4.3.1, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-equal@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +deferred-leveldown@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" + integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== + dependencies: + abstract-leveldown "~2.6.0" + +deferred-leveldown@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz#0b0570087827bf480a23494b398f04c128c19a20" + integrity sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww== + dependencies: + abstract-leveldown "~5.0.0" + inherits "^2.0.3" + +deferred-leveldown@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" + integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== + dependencies: + abstract-leveldown "~6.2.1" + inherits "^2.0.3" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + +diff@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +dotignore@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" + integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== + dependencies: + minimatch "^3.0.4" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.47: + version "1.3.743" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.743.tgz#fcec24d6d647cb84fd796b42caa1b4039a180894" + integrity sha512-K2wXfo9iZQzNJNx67+Pld0DRF+9bYinj62gXCdgPhcu1vidwVuLPHQPPFnCdO55njWigXXpfBiT90jGUPbw8Zg== + +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encode-utf8@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding-down@5.0.4, encoding-down@~5.0.0: + version "5.0.4" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-5.0.4.tgz#1e477da8e9e9d0f7c8293d320044f8b2cd8e9614" + integrity sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw== + dependencies: + abstract-leveldown "^5.0.0" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + xtend "^4.0.1" + +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== + dependencies: + abstract-leveldown "^6.2.1" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.0: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +errno@~0.1.1: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.18.0-next.2: + version "1.18.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" + integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.10.3" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +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== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +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= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eth-block-tracker@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-3.0.1.tgz#95cd5e763c7293e0b1b2790a2a39ac2ac188a5e1" + integrity sha512-WUVxWLuhMmsfenfZvFO5sbl1qFY2IqUlw/FPVmjjdElpqLsZtSG+wPe9Dz7W/sB6e80HgFKknOmKk2eNlznHug== + dependencies: + eth-query "^2.1.0" + ethereumjs-tx "^1.3.3" + ethereumjs-util "^5.1.3" + ethjs-util "^0.1.3" + json-rpc-engine "^3.6.0" + pify "^2.3.0" + tape "^4.6.3" + +eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-json-rpc-infura@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/eth-json-rpc-infura/-/eth-json-rpc-infura-3.2.1.tgz#26702a821067862b72d979c016fd611502c6057f" + integrity sha512-W7zR4DZvyTn23Bxc0EWsq4XGDdD63+XPUCEhV2zQvQGavDVC4ZpFDK4k99qN7bd7/fjj37+rxmuBOBeIqCA5Mw== + dependencies: + cross-fetch "^2.1.1" + eth-json-rpc-middleware "^1.5.0" + json-rpc-engine "^3.4.0" + json-rpc-error "^2.0.0" + +eth-json-rpc-middleware@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz#5c9d4c28f745ccb01630f0300ba945f4bef9593f" + integrity sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q== + dependencies: + async "^2.5.0" + eth-query "^2.1.2" + eth-tx-summary "^3.1.2" + ethereumjs-block "^1.6.0" + ethereumjs-tx "^1.3.3" + ethereumjs-util "^5.1.2" + ethereumjs-vm "^2.1.0" + fetch-ponyfill "^4.0.0" + json-rpc-engine "^3.6.0" + json-rpc-error "^2.0.0" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + tape "^4.6.3" + +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== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" + integrity sha1-1nQdkAAQa1FRDHLbktY2VFam2l4= + dependencies: + json-rpc-random-id "^1.0.0" + xtend "^4.0.1" + +eth-sig-util@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.0.tgz#75133b3d7c20a5731af0690c385e184ab942b97e" + integrity sha512-4eFkMOhpGbTxBQ3AMzVf0haUX2uTur7DpWiHzWyTURa28BVJJtOkcb9Ok5TV0YvEPG61DODPW7ZUATbJTslioQ== + 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" + integrity sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA= + dependencies: + ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" + ethereumjs-util "^5.1.1" + +eth-sig-util@^2.5.2: + version "2.5.4" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.5.4.tgz#577b01fe491b6bf59b0464be09633e20c1677bc5" + integrity sha512-aCMBwp8q/4wrW4QLsF/HYBOSA7TpLKmkVwP3pYQNkEEseW2Rr8Z5Uxc9/h6HX+OG3tuHo+2bINVSihIeBfym6A== + dependencies: + ethereumjs-abi "0.6.8" + ethereumjs-util "^5.1.1" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.0" + +eth-tx-summary@^3.1.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz#e10eb95eb57cdfe549bf29f97f1e4f1db679035c" + integrity sha512-NtlDnaVZah146Rm8HMRUNMgIwG/ED4jiqk0TME9zFheMl1jOp6jL1m0NKGjJwehXQ6ZKCPr16MTr+qspKpEXNg== + dependencies: + async "^2.1.2" + clone "^2.0.0" + concat-stream "^1.5.1" + end-of-stream "^1.1.0" + eth-query "^2.0.2" + ethereumjs-block "^1.4.1" + ethereumjs-tx "^1.1.1" + ethereumjs-util "^5.0.1" + ethereumjs-vm "^2.6.0" + through2 "^2.0.3" + +ethashjs@~0.0.7: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ethashjs/-/ethashjs-0.0.8.tgz#227442f1bdee409a548fb04136e24c874f3aa6f9" + integrity sha512-/MSbf/r2/Ld8o0l15AymjOTlPqpN8Cr4ByUEA9GtR4x0yAh3TdtDzEg29zMjXCNPI7u6E5fOQdj/Cf9Tc7oVNw== + dependencies: + async "^2.1.2" + buffer-xor "^2.0.1" + ethereumjs-util "^7.0.2" + miller-rabin "^4.0.0" + +ethereum-bloom-filters@^1.0.6: + version "1.0.9" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz#4a59dead803af0c9e33834170bd7695df67061ec" + integrity sha512-GiK/RQkAkcVaEdxKVkPcG07PQ5vD7v2MFSHgZmBJSfMzNRHimntdBithsHAT89tAXnIpzVDWt8iaCD1DvkaxGg== + dependencies: + js-sha3 "^0.8.0" + +ethereum-common@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca" + integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== + +ethereum-common@^0.0.18: + version "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.2, 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-waffle@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.3.0.tgz#166a0cc1d3b2925f117b20ef0951b3fe72e38e79" + integrity sha512-4xm3RWAPCu5LlaVxYEg0tG3L7g5ovBw1GY/UebrzZ+OTx22vcPjI+bvelFlGBpkdnO5yOIFXjH2eK59tNAe9IA== + dependencies: + "@ethereum-waffle/chai" "^3.3.0" + "@ethereum-waffle/compiler" "^3.3.0" + "@ethereum-waffle/mock-contract" "^3.2.2" + "@ethereum-waffle/provider" "^3.3.0" + ethers "^5.0.1" + +ethereumjs-abi@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241" + integrity sha1-WmN+8Wq0NHP6cqKa2QhxQFs/UkE= + dependencies: + bn.js "^4.10.0" + ethereumjs-util "^4.3.0" + +ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": + version "0.6.8" + resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0" + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-account@3.0.0, ethereumjs-account@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-3.0.0.tgz#728f060c8e0c6e87f1e987f751d3da25422570a9" + integrity sha512-WP6BdscjiiPkQfF9PVfMcwx/rDvfZTjFKY0Uwc09zSQr9JfIVH87dYIJu0gNhBhpmovV4yq295fdllS925fnBA== + dependencies: + ethereumjs-util "^6.0.0" + rlp "^2.2.1" + safe-buffer "^5.1.1" + +ethereumjs-account@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz#eeafc62de544cb07b0ee44b10f572c9c49e00a84" + integrity sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA== + dependencies: + ethereumjs-util "^5.0.0" + rlp "^2.0.0" + safe-buffer "^5.1.1" + +ethereumjs-block@2.2.2, ethereumjs-block@^2.2.2, ethereumjs-block@~2.2.0, ethereumjs-block@~2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" + integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== + dependencies: + async "^2.0.1" + ethereumjs-common "^1.5.0" + ethereumjs-tx "^2.1.1" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-block@^1.2.2, ethereumjs-block@^1.4.1, ethereumjs-block@^1.6.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz#78b88e6cc56de29a6b4884ee75379b6860333c3f" + integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg== + dependencies: + async "^2.0.1" + ethereum-common "0.2.0" + ethereumjs-tx "^1.2.2" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-blockchain@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/ethereumjs-blockchain/-/ethereumjs-blockchain-4.0.4.tgz#30f2228dc35f6dcf94423692a6902604ae34960f" + integrity sha512-zCxaRMUOzzjvX78DTGiKjA+4h2/sF0OYL1QuPux0DHpyq8XiNoF5GYHtb++GUxVlMsMfZV7AVyzbtgcRdIcEPQ== + dependencies: + async "^2.6.1" + ethashjs "~0.0.7" + ethereumjs-block "~2.2.2" + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.1.0" + flow-stoplight "^1.0.0" + level-mem "^3.0.1" + lru-cache "^5.1.1" + rlp "^2.2.2" + semaphore "^1.1.0" + +ethereumjs-common@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz#d3e82fc7c47c0cef95047f431a99485abc9bb1cd" + integrity sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ== + +ethereumjs-common@^1.1.0, ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" + integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== + +ethereumjs-tx@2.1.2, ethereumjs-tx@^2.1.1, ethereumjs-tx@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" + integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== + dependencies: + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.0.0" + +ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" + integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== + dependencies: + ethereum-common "^0.0.18" + ethereumjs-util "^5.0.0" + +ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0: + 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.3.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.1.tgz#f4bf9b3b515a484e3cc8781d61d9d980f7c83bd0" + integrity sha512-WrckOZ7uBnei4+AKimpuF1B3Fv25OmoRgmYCpGsP7u8PFxXAmAgiJSYT2kRWnt6fVIlKaQlZvuwXp7PIrmn3/w== + dependencies: + bn.js "^4.8.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + rlp "^2.0.0" + +ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.3, ethereumjs-util@^5.1.5, 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-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.7: + version "7.0.10" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.10.tgz#5fb7b69fa1fda0acc59634cf39d6b0291180fc1f" + integrity sha512-c/xThw6A+EAnej5Xk5kOzFzyoSnw0WX0tSlZ6pAsfGVvQj3TItaDg9b1+Fz1RJXA+y2YksKwQnuzgt1eY6LKzw== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.4" + +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" + core-js-pure "^3.0.1" + ethereumjs-account "^3.0.0" + ethereumjs-block "^2.2.2" + ethereumjs-blockchain "^4.0.3" + ethereumjs-common "^1.5.0" + ethereumjs-tx "^2.1.2" + ethereumjs-util "^6.2.0" + fake-merkle-patricia-tree "^1.0.1" + functional-red-black-tree "^1.0.1" + merkle-patricia-tree "^2.3.2" + rustbn.js "~0.2.0" + safe-buffer "^5.1.1" + util.promisify "^1.0.0" + +ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz#76243ed8de031b408793ac33907fb3407fe400c6" + integrity sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw== + dependencies: + async "^2.1.2" + async-eventemitter "^0.2.2" + ethereumjs-account "^2.0.3" + ethereumjs-block "~2.2.0" + ethereumjs-common "^1.1.0" + ethereumjs-util "^6.0.0" + fake-merkle-patricia-tree "^1.0.1" + functional-red-black-tree "^1.0.1" + merkle-patricia-tree "^2.3.2" + rustbn.js "~0.2.0" + safe-buffer "^5.1.1" + +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" + randombytes "^2.0.6" + safe-buffer "^5.1.2" + scryptsy "^1.2.1" + utf8 "^3.0.0" + uuid "^3.3.2" + +ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.1.4: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.3.0.tgz#1ec14d09c461e8f2554b00cd080e94a3094e7e9d" + integrity sha512-myN+338S4sFQZvQ9trii7xit8Hu/LnUtjA0ROFOHpUreQc3fgLZEMNVqF3vM1u2D78DIIeG1TbuozVCVlXQWvQ== + dependencies: + "@ethersproject/abi" "5.3.0" + "@ethersproject/abstract-provider" "5.3.0" + "@ethersproject/abstract-signer" "5.3.0" + "@ethersproject/address" "5.3.0" + "@ethersproject/base64" "5.3.0" + "@ethersproject/basex" "5.3.0" + "@ethersproject/bignumber" "5.3.0" + "@ethersproject/bytes" "5.3.0" + "@ethersproject/constants" "5.3.0" + "@ethersproject/contracts" "5.3.0" + "@ethersproject/hash" "5.3.0" + "@ethersproject/hdnode" "5.3.0" + "@ethersproject/json-wallets" "5.3.0" + "@ethersproject/keccak256" "5.3.0" + "@ethersproject/logger" "5.3.0" + "@ethersproject/networks" "5.3.0" + "@ethersproject/pbkdf2" "5.3.0" + "@ethersproject/properties" "5.3.0" + "@ethersproject/providers" "5.3.0" + "@ethersproject/random" "5.3.0" + "@ethersproject/rlp" "5.3.0" + "@ethersproject/sha2" "5.3.0" + "@ethersproject/signing-key" "5.3.0" + "@ethersproject/solidity" "5.3.0" + "@ethersproject/strings" "5.3.0" + "@ethersproject/transactions" "5.3.0" + "@ethersproject/units" "5.3.0" + "@ethersproject/wallet" "5.3.0" + "@ethersproject/web" "5.3.0" + "@ethersproject/wordlists" "5.3.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.3: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +events@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express@^4.14.0: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fake-merkle-patricia-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3" + integrity sha1-S4w6z7Ugr635hgsfFM2M40As3dM= + dependencies: + checkpoint-store "^1.1.0" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fetch-ponyfill@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" + integrity sha1-rjzl9zLGReq4fkroeTQUcJsjmJM= + dependencies: + node-fetch "~1.7.1" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-replace@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-1.0.3.tgz#b88e7364d2d9c959559f388c66670d6130441fa0" + integrity sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A= + dependencies: + array-back "^1.0.4" + test-value "^2.1.0" + +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +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: + fs-extra "^4.0.3" + micromatch "^3.1.4" + +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + +flat@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" + integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== + dependencies: + is-buffer "~2.0.3" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flow-stoplight@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" + integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= + +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha1-x7vxJN7ELJ0ZHPuUfQqXeN2YbAw= + dependencies: + imul "^1.0.0" + +follow-redirects@^1.10.0, follow-redirects@^1.12.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" + integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== + +for-each@^0.3.3, for-each@~0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +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== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +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== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1, function-bind@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +ganache-core@^2.13.2: + version "2.13.2" + resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.13.2.tgz#27e6fc5417c10e6e76e2e646671869d7665814a3" + integrity sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw== + dependencies: + abstract-leveldown "3.0.0" + async "2.6.2" + bip39 "2.5.0" + cachedown "1.0.0" + clone "2.1.2" + debug "3.2.6" + encoding-down "5.0.4" + eth-sig-util "3.0.0" + ethereumjs-abi "0.6.8" + ethereumjs-account "3.0.0" + ethereumjs-block "2.2.2" + ethereumjs-common "1.5.0" + ethereumjs-tx "2.1.2" + ethereumjs-util "6.2.1" + ethereumjs-vm "4.2.0" + heap "0.2.6" + keccak "3.0.1" + level-sublevel "6.6.4" + levelup "3.1.1" + lodash "4.17.20" + lru-cache "5.1.1" + merkle-patricia-tree "3.0.0" + patch-package "6.2.2" + seedrandom "3.0.1" + source-map-support "0.5.12" + tmp "0.1.0" + web3-provider-engine "14.2.1" + websocket "1.0.32" + optionalDependencies: + ethereumjs-wallet "0.6.5" + web3 "1.2.11" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.2, glob@^7.1.3, glob@~7.1.6: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +got@9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +got@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hardhat-deploy@^0.7.5: + version "0.7.10" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.7.10.tgz#2bc94bf36db5f39aa488c6c6569f07d5ca4b410a" + integrity sha512-+0oiEWy/FgKOEzRNhSWPqSjofVCwtkK3E5x916kbZ5SgFGOjWTFCrWbWUYjzc2GyZgNXuSuRn8mBowHSLF4sVg== + dependencies: + "@ethersproject/abi" "^5.0.0" + "@ethersproject/abstract-signer" "^5.0.0" + "@ethersproject/address" "^5.0.0" + "@ethersproject/bignumber" "^5.0.0" + "@ethersproject/bytes" "^5.0.0" + "@ethersproject/contracts" "^5.0.0" + "@ethersproject/providers" "^5.0.0" + "@ethersproject/solidity" "^5.0.0" + "@ethersproject/transactions" "^5.0.0" + "@ethersproject/wallet" "^5.0.0" + "@types/qs" "^6.9.4" + axios "^0.21.1" + chalk "^4.1.0" + chokidar "^3.4.0" + debug "^4.1.1" + form-data "^3.0.0" + fs-extra "^9.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + +hardhat@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.3.0.tgz#5c29f8b4d08155c3dc8c908af9713fd5079522d5" + integrity sha512-nc4ro2bM4wPaA6/0Y22o5F5QrifQk2KCyPUUKLPUeFFZoGNGYB8vmeW/k9gV9DdMukdWTzfYlKc2Jn4bfb6tDQ== + dependencies: + "@ethereumjs/block" "^3.2.1" + "@ethereumjs/blockchain" "^5.2.1" + "@ethereumjs/common" "^2.2.0" + "@ethereumjs/tx" "^3.1.3" + "@ethereumjs/vm" "^5.3.2" + "@sentry/node" "^5.18.1" + "@solidity-parser/parser" "^0.11.0" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + abort-controller "^3.0.0" + adm-zip "^0.4.16" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + eth-sig-util "^2.5.2" + ethereum-cryptography "^0.1.2" + ethereumjs-abi "^0.6.8" + ethereumjs-util "^7.0.10" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "^7.1.3" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + lodash "^4.17.11" + merkle-patricia-tree "^4.1.0" + mnemonist "^0.38.0" + mocha "^7.1.2" + node-fetch "^2.6.0" + qs "^6.7.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + slash "^3.0.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + "true-case-path" "^2.2.1" + tsort "0.0.1" + uuid "^3.3.2" + ws "^7.2.1" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3, has@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, 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== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +heap@0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" + integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@1.7.3, http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +immediate@~3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" + integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= + +immutable@^4.0.0-rc.12: + version "4.0.0-rc.12" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.12.tgz#ca59a7e4c19ae8d9bf74a97bdf0f6e2f2a5d0217" + integrity sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A== + +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha1-nVhnFh6LPelsLDjV3HyxAvNeKsk= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +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" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-bigint@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" + integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" + integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + dependencies: + call-bind "^1.0.2" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.2.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" + integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" + integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" + integrity sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" + integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.2" + +is-regex@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-string@^1.0.5, is-string@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + +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-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== + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +js-sha3@0.5.7, js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-3.8.0.tgz#9d4ff447241792e1d0a232f6ef927302bb0c62a9" + integrity sha512-6QNcvm2gFuuK4TKU1uwfH0Qd/cOSb9c1lls0gbnIhciktIUQJwz6NQNAW4B1KiGPenv7IKu97V222Yo1bNhGuA== + dependencies: + async "^2.0.1" + babel-preset-env "^1.7.0" + babelify "^7.3.0" + json-rpc-error "^2.0.0" + promise-to-callback "^1.0.0" + safe-event-emitter "^1.0.1" + +json-rpc-error@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/json-rpc-error/-/json-rpc-error-2.0.0.tgz#a7af9c202838b5e905c7250e547f1aff77258a02" + integrity sha1-p6+cICg4tekFxyUOVH8a/3cligI= + dependencies: + inherits "^2.0.1" + +json-rpc-random-id@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" + integrity sha1-uknZat7RRE27jaPSA3SKy7zeyMg= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +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" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +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== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + 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" + integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= + optionalDependencies: + graceful-fs "^4.1.9" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +level-codec@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" + integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== + dependencies: + buffer "^5.6.0" + +level-codec@~7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" + integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== + +level-concat-iterator@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" + integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== + +level-errors@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" + integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w== + dependencies: + errno "~0.1.1" + +level-errors@^2.0.0, level-errors@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" + integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== + dependencies: + errno "~0.1.1" + +level-errors@~1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859" + integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== + dependencies: + errno "~0.1.1" + +level-iterator-stream@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz#ccfff7c046dcf47955ae9a86f46dfa06a31688b4" + integrity sha512-I6Heg70nfF+e5Y3/qfthJFexhRw/Gi3bIymCoXAlijZdAcLaPuWSJs3KXyTYf23ID6g0o2QF62Yh+grOXY3Rig== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.5" + xtend "^4.0.0" + +level-iterator-stream@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" + integrity sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0= + dependencies: + inherits "^2.0.1" + level-errors "^1.0.3" + readable-stream "^1.0.33" + xtend "^4.0.0" + +level-iterator-stream@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz#2c98a4f8820d87cdacab3132506815419077c730" + integrity sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g== + dependencies: + inherits "^2.0.1" + readable-stream "^2.3.6" + xtend "^4.0.0" + +level-iterator-stream@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" + integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== + dependencies: + inherits "^2.0.4" + readable-stream "^3.4.0" + xtend "^4.0.2" + +level-mem@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-3.0.1.tgz#7ce8cf256eac40f716eb6489654726247f5a89e5" + integrity sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg== + dependencies: + level-packager "~4.0.0" + memdown "~3.0.0" + +level-mem@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" + integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== + dependencies: + level-packager "^5.0.3" + memdown "^5.0.0" + +level-packager@^5.0.3: + version "5.1.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" + integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== + dependencies: + encoding-down "^6.3.0" + levelup "^4.3.2" + +level-packager@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6" + integrity sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q== + dependencies: + encoding-down "~5.0.0" + levelup "^3.0.0" + +level-post@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/level-post/-/level-post-1.0.7.tgz#19ccca9441a7cc527879a0635000f06d5e8f27d0" + integrity sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew== + dependencies: + ltgt "^2.1.2" + +level-sublevel@6.6.4: + version "6.6.4" + resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-6.6.4.tgz#f7844ae893919cd9d69ae19d7159499afd5352ba" + integrity sha512-pcCrTUOiO48+Kp6F1+UAzF/OtWqLcQVTVF39HLdZ3RO8XBoXt+XVPKZO1vVr1aUoxHZA9OtD2e1v7G+3S5KFDA== + dependencies: + bytewise "~1.1.0" + level-codec "^9.0.0" + level-errors "^2.0.0" + level-iterator-stream "^2.0.3" + ltgt "~2.1.1" + pull-defer "^0.2.2" + pull-level "^2.0.3" + pull-stream "^3.6.8" + typewiselite "~1.0.0" + xtend "~4.0.0" + +level-supports@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + dependencies: + xtend "^4.0.2" + +level-ws@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" + integrity sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos= + dependencies: + 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" + +level-ws@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" + integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== + dependencies: + inherits "^2.0.3" + readable-stream "^3.1.0" + 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" + integrity sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg== + dependencies: + deferred-leveldown "~4.0.0" + level-errors "~2.0.0" + level-iterator-stream "~3.0.0" + xtend "~4.0.0" + +levelup@^1.2.1: + version "1.3.9" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" + integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== + dependencies: + deferred-leveldown "~1.2.1" + level-codec "~7.0.0" + level-errors "~1.0.3" + level-iterator-stream "~1.3.0" + prr "~1.0.1" + semver "~5.4.1" + xtend "~4.0.0" + +levelup@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== + dependencies: + deferred-leveldown "~5.3.0" + level-errors "~2.0.0" + level-iterator-stream "~4.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +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" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.assign@^4.0.3, lodash.assign@^4.0.6: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= + +lodash@4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +log-symbols@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + +looper@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" + integrity sha1-Zs0Md0rz1P7axTeU90LbVtqPCew= + +looper@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/looper/-/looper-3.0.0.tgz#2efa54c3b1cbaba9b94aee2e5914b0be57fbb749" + integrity sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k= + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "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" + integrity sha1-cXibO39Tmb7IVl3aOKow0qCX7+4= + dependencies: + pseudomap "^1.0.1" + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= + +ltgt@^2.1.2, ltgt@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= + +ltgt@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34" + integrity sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ= + +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= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +match-all@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" + integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== + +mcl-wasm@^0.7.1: + version "0.7.7" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.7.tgz#fd463dd1641a37f9f55b6ca8e5a38e95be2bc58f" + integrity sha512-jDGiCQA++5hX37gdH6RDZ3ZsA0raet7xyY/R5itj5cbcdf4Gvw+YyxWX/ZZ0Z2UPxJiw1ktRsCJZzpnqlQILdw== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memdown@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" + integrity sha1-tOThkhdGZP+65BNhqlAPMRnv4hU= + dependencies: + abstract-leveldown "~2.7.1" + functional-red-black-tree "^1.0.1" + immediate "^3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.1.1" + +memdown@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" + integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== + dependencies: + abstract-leveldown "~6.2.1" + functional-red-black-tree "~1.0.1" + immediate "~3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.2.0" + +memdown@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-3.0.0.tgz#93aca055d743b20efc37492e9e399784f2958309" + integrity sha512-tbV02LfZMWLcHcq4tw++NuqMO+FZX8tNJEiD2aNRm48ZZusVg5N8NART+dmBkepJVye986oixErf7jfXboMGMA== + dependencies: + abstract-leveldown "~5.0.0" + functional-red-black-tree "~1.0.1" + immediate "~3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.1.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +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== + dependencies: + async "^1.4.2" + ethereumjs-util "^5.0.0" + level-ws "0.0.0" + levelup "^1.2.1" + memdown "^1.0.0" + readable-stream "^2.0.0" + rlp "^2.0.0" + semaphore ">=1.0.1" + +merkle-patricia-tree@^4.1.0, merkle-patricia-tree@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.0.tgz#a204b9041be5c25e8d14f0ff47021de090e811a1" + integrity sha512-0sBVXs7z1Q1/kxzWZ3nPnxSPiaHKF/f497UQzt9O7isRcS10tel9jM/4TivF6Jv7V1yFq4bWyoATxbDUOen5vQ== + dependencies: + "@types/levelup" "^4.3.0" + ethereumjs-util "^7.0.10" + level-mem "^5.0.1" + level-ws "^2.0.0" + readable-stream "^3.6.0" + rlp "^2.2.4" + semaphore-async-await "^1.5.1" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.48.0: + version "1.48.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" + integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.31" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" + integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== + dependencies: + mime-db "1.48.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + dependencies: + mkdirp "*" + +mkdirp@*: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@0.5.5, mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mnemonist@^0.38.0: + version "0.38.3" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.3.tgz#35ec79c1c1f4357cfda2fe264659c2775ccd7d9d" + integrity sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw== + dependencies: + obliterator "^1.6.1" + +mocha@^7.1.2: + version "7.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" + integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== + dependencies: + ansi-colors "3.2.3" + browser-stdout "1.3.1" + chokidar "3.3.0" + debug "3.2.6" + diff "3.5.0" + escape-string-regexp "1.0.5" + find-up "3.0.0" + glob "7.1.3" + growl "1.10.5" + he "1.2.0" + js-yaml "3.13.1" + log-symbols "3.0.0" + minimatch "3.0.4" + mkdirp "0.5.5" + ms "2.1.1" + node-environment-flags "1.0.6" + object.assign "4.1.0" + strip-json-comments "2.0.1" + supports-color "6.0.0" + which "1.3.1" + wide-align "1.1.3" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "1.6.0" + +mocha@^8.2.1: + version "8.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.4.0.tgz#677be88bf15980a3cae03a73e10a0fc3997f0cff" + integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.6" + growl "1.10.5" + he "1.2.0" + js-yaml "4.0.0" + log-symbols "4.0.0" + minimatch "3.0.4" + ms "2.1.3" + nanoid "3.1.20" + serialize-javascript "5.0.1" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + wide-align "1.1.3" + workerpool "6.1.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +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" + +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" + +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= + +nanoid@3.1.20: + version "3.1.20" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +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-environment-flags@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" + integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + +node-fetch@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" + integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= + +node-fetch@^2.6.0, node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-fetch@~1.7.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +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== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.0.0, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.10.3, object-inspect@^1.9.0: + version "1.10.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" + integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== + +object-inspect@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.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== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" + integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +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" + +obliterator@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-1.6.1.tgz#dea03e8ab821f6c4d96a299e17aef6a3af994ef3" + integrity sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig== + +oboe@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" + integrity sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY= + dependencies: + http-https "^1.0.0" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +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= + dependencies: + wrappy "1" + +open@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-headers@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" + integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "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" + +patch-package@^6.2.2: + version "6.4.7" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148" + integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^2.0.0" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + open "^7.4.2" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + +path-browserify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +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" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + 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" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postinstall-postinstall@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" + integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== + +precond@0.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" + integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +prettier@^2.1.2: + version "2.3.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.0.tgz#b6a5bf1284026ae640f17f7ff5658a7567fc0d18" + integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w== + +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== + +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: + 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== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-to-callback@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" + integrity sha1-XSp0kBC/tn2WNZj805YHRqaP7vc= + dependencies: + is-fn "^1.0.0" + set-immediate-shim "^1.0.1" + +proxy-addr@~2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pull-cat@^1.1.9: + version "1.1.11" + resolved "https://registry.yarnpkg.com/pull-cat/-/pull-cat-1.1.11.tgz#b642dd1255da376a706b6db4fa962f5fdb74c31b" + integrity sha1-tkLdElXaN2pwa220+pYvX9t0wxs= + +pull-defer@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/pull-defer/-/pull-defer-0.2.3.tgz#4ee09c6d9e227bede9938db80391c3dac489d113" + integrity sha512-/An3KE7mVjZCqNhZsr22k1Tx8MACnUnHZZNPSJ0S62td8JtYr/AiRG42Vz7Syu31SoTLUzVIe61jtT/pNdjVYA== + +pull-level@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pull-level/-/pull-level-2.0.4.tgz#4822e61757c10bdcc7cf4a03af04c92734c9afac" + integrity sha512-fW6pljDeUThpq5KXwKbRG3X7Ogk3vc75d5OQU/TvXXui65ykm+Bn+fiktg+MOx2jJ85cd+sheufPL+rw9QSVZg== + dependencies: + level-post "^1.0.7" + pull-cat "^1.1.9" + pull-live "^1.0.1" + pull-pushable "^2.0.0" + pull-stream "^3.4.0" + pull-window "^2.1.4" + stream-to-pull-stream "^1.7.1" + +pull-live@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pull-live/-/pull-live-1.0.1.tgz#a4ecee01e330155e9124bbbcf4761f21b38f51f5" + integrity sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU= + dependencies: + pull-cat "^1.1.9" + pull-stream "^3.4.0" + +pull-pushable@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pull-pushable/-/pull-pushable-2.2.0.tgz#5f2f3aed47ad86919f01b12a2e99d6f1bd776581" + integrity sha1-Xy867UethpGfAbEqLpnW8b13ZYE= + +pull-stream@^3.2.3, pull-stream@^3.4.0, pull-stream@^3.6.8: + version "3.6.14" + resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.6.14.tgz#529dbd5b86131f4a5ed636fdf7f6af00781357ee" + integrity sha512-KIqdvpqHHaTUA2mCYcLG1ibEbu/LCKoJZsBWyv9lSYtPkJPBq8m3Hxa103xHi6D2thj5YXa0TqK3L3GUkwgnew== + +pull-window@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/pull-window/-/pull-window-2.1.4.tgz#fc3b86feebd1920c7ae297691e23f705f88552f0" + integrity sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA= + dependencies: + looper "^2.0.0" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@^6.7.0, qs@^6.9.4: + version "6.10.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-body@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== + dependencies: + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@^1.0.33: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.6, readable-stream@~2.3.6: + 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== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.0.15: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdirp@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" + integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== + dependencies: + picomatch "^2.0.4" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +regenerate@^1.2.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +request@^2.79.0, request@^2.85.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= + +require-from-string@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.17.0, resolve@~1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.8.1: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +resumer@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= + dependencies: + through "~2.3.4" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@^2.2.8, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3, rlp@^2.2.4: + version "2.2.6" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" + integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== + dependencies: + bn.js "^4.11.1" + +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-event-emitter@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz#5b692ef22329ed8f69fdce607e50ca734f6f20af" + integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg== + dependencies: + events "^3.0.0" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@3.0.1, 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== + +scryptsy@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-1.2.1.tgz#a3225fa4b2524f802700761e2855bdf3b2d92163" + integrity sha1-oyJfpLJST4AnAHYeKFW987LZIWM= + dependencies: + pbkdf2 "^3.0.3" + +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" + integrity sha512-1/02Y/rUeU1CJBAGLebiC5Lbo5FnB22gQbIFFYTLkwvp1xdABZJH1sn4ZT1MzXmPpzv+Rf/Lu2NcsLJiK4rcDg== + +semaphore-async-await@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" + integrity sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo= + +semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" + integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@~5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" + integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +solc@^0.4.20: + version "0.4.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.26.tgz#5390a62a99f40806b86258c737c1cf653cc35cb5" + integrity sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA== + dependencies: + fs-extra "^0.30.0" + memorystream "^0.3.1" + require-from-string "^1.1.0" + semver "^5.3.0" + yargs "^4.7.1" + +solc@^0.6.3: + version "0.6.12" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.6.12.tgz#48ac854e0c729361b22a7483645077f58cba080e" + integrity sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@0.5.12: + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.13: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" + integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-to-pull-stream@^1.7.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz#4161aa2d2eb9964de60bfa1af7feaf917e874ece" + integrity sha512-6sNyqJpr5dIOQdgNy/xcDWwDuzAsAwVzhzrWlAPAQ7Lkjx/rv0wgvxEyKwTq6FmNd5rjTrELt/CLmaSw7crMGg== + dependencies: + looper "^3.0.0" + pull-stream "^3.2.3" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trim@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz#6014689baf5efaf106ad031a5fa45157666ed1bd" + integrity sha512-hWCk/iqf7lp0/AgTF7/ddO1IWtSNPASjlzCicV5irAVdE1grjsneK26YG6xACMBEdCvO8fUST0UzDMh/2Qy+9Q== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= + dependencies: + is-hex-prefixed "1.0.0" + +strip-json-comments@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" + integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== + dependencies: + has-flag "^3.0.0" + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +swarm-js@^0.1.40: + version "0.1.40" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" + integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^7.1.0" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + +tape@^4.6.3: + version "4.13.3" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.3.tgz#51b3d91c83668c7a45b1a594b607dee0a0b46278" + integrity sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw== + dependencies: + deep-equal "~1.1.1" + defined "~1.0.0" + dotignore "~0.1.2" + for-each "~0.3.3" + function-bind "~1.1.1" + glob "~7.1.6" + has "~1.0.3" + inherits "~2.0.4" + is-regex "~1.0.5" + minimist "~1.2.5" + object-inspect "~1.7.0" + resolve "~1.17.0" + resumer "~0.0.0" + string.prototype.trim "~1.2.1" + through "~2.3.8" + +tar@^4.0.2: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +test-value@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" + integrity sha1-Edpv9nDzRxpztiXKTz/c97t0gpE= + dependencies: + array-back "^1.0.3" + typical "^2.6.0" + +testrpc@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" + integrity sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA== + +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== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@~2.3.4, through@~2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +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" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +tmp@0.0.33, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +"true-case-path@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" + integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== + +ts-essentials@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-1.0.4.tgz#ce3b5dade5f5d97cf69889c11bf7d2da8555b15a" + integrity sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ== + +ts-essentials@^6.0.3: + version "6.0.7" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-6.0.7.tgz#5f4880911b7581a873783740ce8b94da163d18a6" + integrity sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw== + +ts-generator@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ts-generator/-/ts-generator-0.1.1.tgz#af46f2fb88a6db1f9785977e9590e7bcd79220ab" + integrity sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ== + dependencies: + "@types/mkdirp" "^0.5.2" + "@types/prettier" "^2.1.1" + "@types/resolve" "^0.0.8" + chalk "^2.4.1" + glob "^7.1.2" + mkdirp "^0.5.1" + prettier "^2.1.2" + resolve "^1.8.1" + ts-essentials "^1.0.0" + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl-util@^0.15.0: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +tweetnacl@^1.0.0, tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + +typechain@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-3.0.0.tgz#d5a47700831f238e43f7429b987b4bb54849b92e" + integrity sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg== + dependencies: + command-line-args "^4.0.7" + debug "^4.1.1" + fs-extra "^7.0.0" + js-sha3 "^0.8.0" + lodash "^4.17.15" + ts-essentials "^6.0.3" + ts-generator "^0.1.1" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typewise-core@^1.2, typewise-core@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" + integrity sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU= + +typewise@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651" + integrity sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE= + dependencies: + typewise-core "^1.2.0" + +typewiselite@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typewiselite/-/typewiselite-1.0.0.tgz#c8882fa1bb1092c06005a97f34ef5c8508e3664e" + integrity sha1-yIgvobsQksBgBal/NO9chQjjZk4= + +typical@^2.6.0, typical@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" + integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +underscore@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" + integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== + +underscore@1.9.1: + version "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== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unorm@^1.3.3: + version "1.6.0" + resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" + integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + 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.5" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.5.tgz#dd32c2e82c72002dc9f02eb67ba6761f43456ca1" + integrity sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ== + dependencies: + node-gyp-build "^4.2.0" + +utf8@3.0.0, utf8@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@^1.0.0, util.promisify@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" + integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + for-each "^0.3.3" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.1" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +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" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +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" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + underscore "1.9.1" + +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.11" + web3-utils "1.2.11" + +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.11" + web3-core-promievent "1.2.11" + web3-core-subscriptions "1.2.11" + web3-utils "1.2.11" + +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: + eventemitter3 "4.0.4" + +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.11" + web3-providers-http "1.2.11" + web3-providers-ipc "1.2.11" + web3-providers-ws "1.2.11" + +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 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.2.11" + +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/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-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: + "@ethersproject/abi" "5.0.0-beta.153" + underscore "1.9.1" + web3-utils "1.2.11" + +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: + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-utils "1.2.11" + +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.5" + underscore "1.9.1" + web3-core "1.2.11" + web3-core-helpers "1.2.11" + web3-core-method "1.2.11" + web3-core-promievent "1.2.11" + web3-core-subscriptions "1.2.11" + web3-eth-abi "1.2.11" + web3-utils "1.2.11" + +web3-eth-ens@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.11" + web3-core-helpers "1.2.11" + web3-core-promievent "1.2.11" + web3-eth-abi "1.2.11" + web3-eth-contract "1.2.11" + web3-utils "1.2.11" + +web3-eth-iban@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.9" + web3-utils "1.2.11" + +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.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@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.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-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.11" + web3-core-method "1.2.11" + web3-utils "1.2.11" + +web3-provider-engine@14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.2.1.tgz#ef351578797bf170e08d529cb5b02f8751329b95" + integrity sha512-iSv31h2qXkr9vrL6UZDm4leZMc32SjWJFGOp/D92JXfcEboCqraZyuExDkpxKw8ziTufXieNM7LSXNHzszYdJw== + dependencies: + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^3.0.0" + eth-json-rpc-infura "^3.1.0" + eth-sig-util "^1.4.2" + ethereumjs-block "^1.2.2" + ethereumjs-tx "^1.2.0" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-rpc-error "^2.0.0" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" + +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.11" + xhr2-cookies "1.1.0" + +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.11" + +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: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.2.11" + websocket "^1.0.31" + +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.11" + web3-core-method "1.2.11" + web3-core-subscriptions "1.2.11" + web3-net "1.2.11" + +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.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-utils@^1.0.0-beta.31: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.6.tgz#390bc9fa3a7179746963cfaca55bb80ac4d8dc10" + integrity sha512-hHatFaQpkQgjGVER17gNx8u1qMyaXFZtM0y0XLGH1bzsjMPlkMPLRcYOrZ00rOPfTEuYFOdrpGOqZXVmGrMZRg== + 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.12.1" + utf8 "3.0.0" + +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: + 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" + +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" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +websocket@^1.0.31: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-fetch@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@1.3.1, which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +window-size@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= + +workerpool@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" + integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@7.4.6, ws@^7.2.1: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^5.1.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr2-cookies@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" + integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= + dependencies: + cookiejar "^2.1.1" + +xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= + dependencies: + object-keys "~0.4.0" + +y18n@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@13.1.2, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" + integrity sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ= + dependencies: + camelcase "^3.0.0" + lodash.assign "^4.0.6" + +yargs-parser@^20.2.2: + version "20.2.7" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== + +yargs-unparser@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" + integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== + dependencies: + flat "^4.1.0" + lodash "^4.17.15" + yargs "^13.3.0" + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@13.3.2, yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^4.7.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" + integrity sha1-wMQpJMpKqmsObaFznfshZDn53cA= + dependencies: + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + lodash.assign "^4.0.3" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.1" + which-module "^1.0.0" + window-size "^0.2.0" + y18n "^3.2.1" + yargs-parser "^2.4.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/integration-tests/.env.example b/integration-tests/.env.example new file mode 100644 index 000000000000..50987c4f9530 --- /dev/null +++ b/integration-tests/.env.example @@ -0,0 +1,11 @@ +L1_URL=http://localhost:9545 +L2_URL=http://localhost:8545 +VERIFIER_URL=http://localhost:8547 +URL=http://localhost:8080/addresses.json +ENABLE_GAS_REPORT=1 +NO_NETWORK=1 +L1_POLLING_INTERVAL=10 +L2_POLLING_INTERVAL=10 +VERIFIER_POLLING_INTERVAL=10 +PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 +ADDRESS_MANAGER=0x809d550fca64d94Bd9F66E60752A544199cfAC3D \ No newline at end of file diff --git a/integration-tests/hardhat.config.ts b/integration-tests/hardhat.config.ts index 0fcc9b23325f..21024099998b 100644 --- a/integration-tests/hardhat.config.ts +++ b/integration-tests/hardhat.config.ts @@ -30,4 +30,4 @@ const config: HardhatUserConfig = { }, } -export default config +export default config \ No newline at end of file diff --git a/ops/README.md b/ops/README.md index 488e3a6f2a62..eae66ac6e05f 100644 --- a/ops/README.md +++ b/ops/README.md @@ -16,8 +16,9 @@ Supplementing the base configuration is an additional metric enabling file, `doc The base stack can be started and stopped with a command like this (there is no need to specify the default docker-compose.yml) ``` -docker-compose \ - up --build --detach + +docker-compose up --build --detach + ``` To start the stack with monitoring enabled, just add the metric composition file. @@ -30,8 +31,9 @@ docker-compose \ Optionally, run a verifier along the rest of the stack. ``` -docker-compose up --scale verifier=1 \ - --build --detach + +docker-compose up --scale verifier=1 --build --detach + ``` A Makefile has been provided for convience. The following targets are available. diff --git a/ops/docker-compose.yml b/ops/docker-compose.yml index cc9c5b371763..ab1cc9accaeb 100644 --- a/ops/docker-compose.yml +++ b/ops/docker-compose.yml @@ -62,7 +62,7 @@ services: # connect to the 2 layers DATA_TRANSPORT_LAYER__L1_RPC_ENDPOINT: http://l1_chain:8545 DATA_TRANSPORT_LAYER__L2_RPC_ENDPOINT: http://l2geth:8545 - DATA_TRANSPORT_LAYER__L2_CHAIN_ID: 420 + DATA_TRANSPORT_LAYER__L2_CHAIN_ID: 28 ports: - ${DTL_PORT:-7878}:7878 diff --git a/ops/envs/geth.env b/ops/envs/geth.env index bf73226cf815..89527ad038c3 100644 --- a/ops/envs/geth.env +++ b/ops/envs/geth.env @@ -22,13 +22,13 @@ WS_PORT=8546 WS_API=eth,net,rollup,web3 WS_ORIGINS=* -CHAIN_ID=420 +CHAIN_ID=28 DATADIR=/root/.ethereum DEV=true GASPRICE=0 GCMODE=archive IPC_DISABLE=true -NETWORK_ID=420 +NETWORK_ID=28 NO_USB=true NO_DISCOVER=true TARGET_GAS_LIMIT=9000000 diff --git a/packages/omgx/wallet/.env.example b/packages/omgx/wallet/.env.example index 6572e75e5c3d..672854a8aa90 100644 --- a/packages/omgx/wallet/.env.example +++ b/packages/omgx/wallet/.env.example @@ -2,7 +2,7 @@ NODE_ENV=local L1_NODE_WEB3_URL=https://rinkeby.infura.io/v3/YOUR_INFURA_KEY_HERE L2_NODE_WEB3_URL=http://3.85.224.26:8545 -ETH1_ADDRESS_RESOLVER_ADDRESS=0xa32cf2433ba24595d3aCE5cc9A7079d3f1CC5E0c +ETH1_ADDRESS_RESOLVER_ADDRESS=0x927b167526bAbB9be047421db732C663a0b77B11 TEST_PRIVATE_KEY_1=0xPRIVATE_KEY_OF_THE_FIRST_TEST_WALLET TEST_PRIVATE_KEY_2=0xPRIVATE_KEY_OF_THE_SECOND_TEST_WALLET TEST_PRIVATE_KEY_3=0xPRIVATE_KEY_OF_THE_THIRD_TEST_WALLET @@ -14,10 +14,111 @@ L1_ALT_MESSENGER=0x0 NODE_ENV=local L1_NODE_WEB3_URL=http://localhost:9545 L2_NODE_WEB3_URL=http://localhost:8545 -ETH1_ADDRESS_RESOLVER_ADDRESS=0x3e4CFaa8730092552d9425575E49bB542e329981 -TEST_PRIVATE_KEY_1=0x754fde3f5e60ef2c7649061e06957c29017fe21032a8017132c0078e37f6193a -TEST_PRIVATE_KEY_2=0x23d9aeeaa08ab710a57972eb56fc711d9ab13afdecc92c89586e0150bfa380a6 -TEST_PRIVATE_KEY_3=0x5b1c2653250e5c580dcb4e51c2944455e144c57ebd6a0645bd359d2e69ca0f0c +ETH1_ADDRESS_RESOLVER_ADDRESS=0x927b167526bAbB9be047421db732C663a0b77B11 +TEST_PRIVATE_KEY_1=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 +TEST_PRIVATE_KEY_2=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d +TEST_PRIVATE_KEY_3=0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a TARGET_GAS_LIMIT=9000000000 CHAIN_ID=28 -L1_ALT_MESSENGER=0x0 \ No newline at end of file +L1_ALT_MESSENGER=0x0 + + + +Account #0: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 (10000 ETH) + +Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 + + +Account #1: 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 (10000 ETH) + +Private Key: 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d + + +Account #2: 0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc (10000 ETH) + +Private Key: 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a + + +Account #3: 0x90f79bf6eb2c4f870365e785982e1f101e93b906 (10000 ETH) + +Private Key: 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6 + + +Account #4: 0x15d34aaf54267db7d7c367839aaf71a00a2c6a65 (10000 ETH) + +Private Key: 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a + + +Account #5: 0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc (10000 ETH) + +Private Key: 0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba + + +Account #6: 0x976ea74026e726554db657fa54763abd0c3a0aa9 (10000 ETH) + +Private Key: 0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e + + +Account #7: 0x14dc79964da2c08b23698b3d3cc7ca32193d9955 (10000 ETH) + +Private Key: 0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356 + + +Account #8: 0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f (10000 ETH) + +Private Key: 0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97 + + +Account #9: 0xa0ee7a142d267c1f36714e4a8f75612f20a79720 (10000 ETH) + +Private Key: 0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6 + + +Account #10: 0xbcd4042de499d14e55001ccbb24a551f3b954096 (10000 ETH) + +Private Key: 0xf214f2b2cd398c806f84e317254e0f0b801d0643303237d97a22a48e01628897 + + +Account #11: 0x71be63f3384f5fb98995898a86b02fb2426c5788 (10000 ETH) + +Private Key: 0x701b615bbdfb9de65240bc28bd21bbc0d996645a3dd57e7b12bc2bdf6f192c82 + + +Account #12: 0xfabb0ac9d68b0b445fb7357272ff202c5651694a (10000 ETH) + +Private Key: 0xa267530f49f8280200edf313ee7af6b827f2a8bce2897751d06a843f644967b1 + + +Account #13: 0x1cbd3b2770909d4e10f157cabc84c7264073c9ec (10000 ETH) + +Private Key: 0x47c99abed3324a2707c28affff1267e45918ec8c3f20b8aa892e8b065d2942dd + + +Account #14: 0xdf3e18d64bc6a983f673ab319ccae4f1a57c7097 (10000 ETH) + +Private Key: 0xc526ee95bf44d8fc405a158bb884d9d1238d99f0612e9f33d006bb0789009aaa + + +Account #15: 0xcd3b766ccdd6ae721141f452c550ca635964ce71 (10000 ETH) + +Private Key: 0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61 + + +Account #16: 0x2546bcd3c84621e976d8185a91a922ae77ecec30 (10000 ETH) + +Private Key: 0xea6c44ac03bff858b476bba40716402b03e41b8e97e276d1baec7c37d42484a0 + + +Account #17: 0xbda5747bfd65f08deb54cb465eb87d40e51b197e (10000 ETH) + +Private Key: 0x689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd + + +Account #18: 0xdd2fd4581271e230360230f9337d5c0430bf44c0 (10000 ETH) + +Private Key: 0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0 + + +Account #19: 0x8626f6940e2eb28930efb4cef49b2d1f2c9c1199 (10000 ETH) + +Private Key: 0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e \ No newline at end of file diff --git a/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol b/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol index 6390fa6b18dc..111709c36e7c 100644 --- a/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol +++ b/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol @@ -3,8 +3,8 @@ pragma solidity >0.5.0; pragma experimental ABIEncoderV2; -import "../interfaces/iL2LiquidityPool.sol"; -import "../libraries/OVM_CrossDomainEnabled.sol"; +import "./interfaces/iL2LiquidityPool.sol"; +import "./libraries/OVM_CrossDomainEnabled.sol"; /* External Imports */ import '@openzeppelin/contracts/math/SafeMath.sol'; diff --git a/packages/omgx/wallet/contracts/LP/L2LiquidityPool.sol b/packages/omgx/wallet/contracts/LP/L2LiquidityPool.sol index e1326cee2c88..87fc0f0efc15 100644 --- a/packages/omgx/wallet/contracts/LP/L2LiquidityPool.sol +++ b/packages/omgx/wallet/contracts/LP/L2LiquidityPool.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.5.0; -import "../interfaces/iL1LiquidityPool.sol"; +import "./interfaces/iL1LiquidityPool.sol"; /* Library Imports */ import "@eth-optimism/contracts/contracts/optimistic-ethereum/libraries/bridge/OVM_CrossDomainEnabled.sol"; diff --git a/packages/omgx/wallet/contracts/Message/L1Message.sol b/packages/omgx/wallet/contracts/Message/L1Message.sol index 5a2c23f4e68b..8792614d195c 100644 --- a/packages/omgx/wallet/contracts/Message/L1Message.sol +++ b/packages/omgx/wallet/contracts/Message/L1Message.sol @@ -2,7 +2,7 @@ pragma solidity >0.5.0; /* Library Imports */ -import "@eth-optimism/contracts/libraries/bridge/OVM_CrossDomainEnabled.sol"; +import "@eth-optimism/contracts/contracts/optimistic-ethereum/libraries/bridge/OVM_CrossDomainEnabled.sol"; // import "../libraries/OVM_CrossDomainEnabled.sol"; import { L2Message } from "./L2Message.sol"; diff --git a/packages/omgx/wallet/contracts/Message/L2Message.sol b/packages/omgx/wallet/contracts/Message/L2Message.sol index 6f5a0aad5605..475aff20d005 100644 --- a/packages/omgx/wallet/contracts/Message/L2Message.sol +++ b/packages/omgx/wallet/contracts/Message/L2Message.sol @@ -2,7 +2,7 @@ pragma solidity >0.5.0; /* Library Imports */ -import "@eth-optimism/contracts/libraries/bridge/OVM_CrossDomainEnabled.sol"; +import "@eth-optimism/contracts/contracts/optimistic-ethereum/libraries/bridge/OVM_CrossDomainEnabled.sol"; import { L1Message } from "./L1Message.sol"; diff --git a/packages/omgx/wallet/tsconfig.json b/packages/omgx/wallet/tsconfig.json index ff6838b53b6f..5c82c7386fa4 100644 --- a/packages/omgx/wallet/tsconfig.json +++ b/packages/omgx/wallet/tsconfig.json @@ -1,7 +1,8 @@ { "extends": "../../../tsconfig.json", "compilerOptions": { - "outDir": "./dist" + "outDir": "./dist", + "resolveJsonModule": true }, "include": ["./test"], "files": ["./hardhat.config.ts"] diff --git a/yarn.lock b/yarn.lock index d6edae250e96..b58ad8d27695 100644 --- a/yarn.lock +++ b/yarn.lock @@ -256,13 +256,6 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== -"@eth-optimism/hardhat-ovm@^0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@eth-optimism/hardhat-ovm/-/hardhat-ovm-0.0.2.tgz#3317fece96db0b79cc9a1e70ceb933a8b437da6d" - integrity sha512-olo7Bsx2GeII2b9a1JZI7bvItvflVkAwowtjtdxMmAzl3+GX3uK+mltG9+v59DJZ8GAkcaFlaL0vXQ4rMT/XrQ== - dependencies: - node-fetch "^2.6.1" - "@eth-optimism/solc@^0.6.12-alpha.1": version "0.6.12-alpha.1" resolved "https://registry.yarnpkg.com/@eth-optimism/solc/-/solc-0.6.12-alpha.1.tgz#041876f83b34c6afe2f19dfe9626568df6ed8590" @@ -453,6 +446,21 @@ "@ethersproject/properties" "^5.2.0" "@ethersproject/strings" "^5.2.0" +"@ethersproject/abi@5.3.0", "@ethersproject/abi@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.3.0.tgz#00f0647d906edcd32c50b16ab9c98f83e208dcf1" + integrity sha512-NaT4UacjOwca8qCG/gv8k+DgTcWu49xlrvdhr/p8PTFnoS8e3aMWqjI3znFME5Txa/QWXDrg2/heufIUue9rtw== + dependencies: + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/abstract-provider@5.2.0", "@ethersproject/abstract-provider@^5.0.0", "@ethersproject/abstract-provider@^5.0.5", "@ethersproject/abstract-provider@^5.0.8", "@ethersproject/abstract-provider@^5.0.9", "@ethersproject/abstract-provider@^5.1.0", "@ethersproject/abstract-provider@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.2.0.tgz#b5c24b162f119b5d241738ded9555186013aa77d" @@ -466,6 +474,19 @@ "@ethersproject/transactions" "^5.2.0" "@ethersproject/web" "^5.2.0" +"@ethersproject/abstract-provider@5.3.0", "@ethersproject/abstract-provider@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.3.0.tgz#f4c0ae4a4cef9f204d7781de805fd44b72756c81" + integrity sha512-1+MLhGP1GwxBDBNwMWVmhCsvKwh4gK7oIfOrmlmePNeskg1NhIrYssraJBieaFNHUYfKEd/1DjiVZMw8Qu5Cxw== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/networks" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/web" "^5.3.0" + "@ethersproject/abstract-signer@5.2.0", "@ethersproject/abstract-signer@^5.0.0", "@ethersproject/abstract-signer@^5.1.0", "@ethersproject/abstract-signer@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.2.0.tgz#8e291fb6558b4190fb3e2fe440a9ffd092a2f459" @@ -477,6 +498,17 @@ "@ethersproject/logger" "^5.2.0" "@ethersproject/properties" "^5.2.0" +"@ethersproject/abstract-signer@5.3.0", "@ethersproject/abstract-signer@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.3.0.tgz#05172b653e15b535ed5854ef5f6a72f4b441052d" + integrity sha512-w8IFwOYqiPrtvosPuArZ3+QPR2nmdVTRrVY8uJYL3NNfMmQfTy3V3l2wbzX47UUlNbPJY+gKvzJAyvK1onZxJg== + dependencies: + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/address@5.2.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.0", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.2.0.tgz#afcfa92db84582f54a60a9da361cea4aae450a69" @@ -488,6 +520,17 @@ "@ethersproject/logger" "^5.2.0" "@ethersproject/rlp" "^5.2.0" +"@ethersproject/address@5.3.0", "@ethersproject/address@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.3.0.tgz#e53b69eacebf332e8175de814c5e6507d6932518" + integrity sha512-29TgjzEBK+gUEUAOfWCG7s9IxLNLCqvr+oDSk6L9TXD0VLvZJKhJV479tKQqheVA81OeGxfpdxYtUVH8hqlCvA== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/rlp" "^5.3.0" + "@ethersproject/base64@5.2.0", "@ethersproject/base64@^5.0.0", "@ethersproject/base64@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.2.0.tgz#e01066d25e5b4e8a051545163bee5def47bd9534" @@ -495,6 +538,13 @@ dependencies: "@ethersproject/bytes" "^5.2.0" +"@ethersproject/base64@5.3.0", "@ethersproject/base64@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.3.0.tgz#b831fb35418b42ad24d943c557259062b8640824" + integrity sha512-JIqgtOmgKcbc2sjGWTXyXktqUhvFUDte8fPVsAaOrcPiJf6YotNF+nsrOYGC9pbHBEGSuSBp3QR0varkO8JHEw== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/basex@5.2.0", "@ethersproject/basex@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.2.0.tgz#f921039e3bdfdab8c5a7ba8b21e81c83fc1ab98b" @@ -503,6 +553,14 @@ "@ethersproject/bytes" "^5.2.0" "@ethersproject/properties" "^5.2.0" +"@ethersproject/basex@5.3.0", "@ethersproject/basex@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.3.0.tgz#02dea3ab8559ae625c6d548bc11773432255c916" + integrity sha512-8J4nS6t/SOnoCgr3DF5WCSRLC5YwTKYpZWJqeyYQLX+86TwPhtzvHXacODzcDII9tWKhVg6g0Bka8JCBWXsCiQ== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/bignumber@5.2.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.0", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.2.0.tgz#03f91ea740c5adb6f8c6a2e91bb4ee5ffaff5503" @@ -512,6 +570,15 @@ "@ethersproject/logger" "^5.2.0" bn.js "^4.4.0" +"@ethersproject/bignumber@5.3.0", "@ethersproject/bignumber@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.3.0.tgz#74ab2ec9c3bda4e344920565720a6ee9c794e9db" + integrity sha512-5xguJ+Q1/zRMgHgDCaqAexx/8DwDVLRemw2i6uR8KyGjwGdXI8f32QZZ1cKGucBN6ekJvpUpHy6XAuQnTv0mPA== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + bn.js "^4.11.9" + "@ethersproject/bytes@5.2.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.2.0.tgz#327917d5a1600f92fd2a9da4052fa6d974583132" @@ -519,6 +586,13 @@ dependencies: "@ethersproject/logger" "^5.2.0" +"@ethersproject/bytes@5.3.0", "@ethersproject/bytes@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.3.0.tgz#473e0da7f831d535b2002be05e6f4ca3729a1bc9" + integrity sha512-rqLJjdVqCcn7glPer7Fxh87PRqlnRScVAoxcIP3PmOUNApMWJ6yRdOFfo2KvPAdO7Le3yEI1o0YW+Yvr7XCYvw== + dependencies: + "@ethersproject/logger" "^5.3.0" + "@ethersproject/constants@5.2.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.0", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.2.0.tgz#ccea78ce325f78abfe7358397c03eec570518d92" @@ -526,6 +600,13 @@ dependencies: "@ethersproject/bignumber" "^5.2.0" +"@ethersproject/constants@5.3.0", "@ethersproject/constants@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.3.0.tgz#a5d6d86c0eec2c64c3024479609493b9afb3fc77" + integrity sha512-4y1feNOwEpgjAfiCFWOHznvv6qUF/H6uI0UKp8xdhftb+H+FbKflXg1pOgH5qs4Sr7EYBL+zPyPb+YD5g1aEyw== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/contracts@5.2.0", "@ethersproject/contracts@^5.0.0", "@ethersproject/contracts@^5.0.5": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.2.0.tgz#f54e12ec4a323f2bf93c338034839cc6dfc1e347" @@ -542,6 +623,22 @@ "@ethersproject/properties" "^5.2.0" "@ethersproject/transactions" "^5.2.0" +"@ethersproject/contracts@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.3.0.tgz#ad699a3abaae30bfb6422cf31813a663b2d4099c" + integrity sha512-eDyQ8ltykvyQqnGZxb/c1e0OnEtzqXhNNC4BX8nhYBCaoBrYYuK/1fLmyEvc5+XUMoxNhwpYkoSSwvPLci7/Zg== + dependencies: + "@ethersproject/abi" "^5.3.0" + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/hardware-wallets@^5.0.8": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/hardware-wallets/-/hardware-wallets-5.2.0.tgz#995449aedad4346a4e728e1d6dfd35b35b690b22" @@ -568,6 +665,20 @@ "@ethersproject/properties" "^5.2.0" "@ethersproject/strings" "^5.2.0" +"@ethersproject/hash@5.3.0", "@ethersproject/hash@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.3.0.tgz#f65e3bf3db3282df4da676db6cfa049535dd3643" + integrity sha512-gAFZSjUPQ32CIfoKSMtMEQ+IO0kQxqhwz9fCIFt2DtAq2u4pWt8mL9Z5P0r6KkLcQU8LE9FmuPPyd+JvBzmr1w== + dependencies: + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/hdnode@5.2.0", "@ethersproject/hdnode@^5.0.0", "@ethersproject/hdnode@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.2.0.tgz#efea9b2f713e55aa5ba23cc62b4aac6d08dcfa53" @@ -586,6 +697,24 @@ "@ethersproject/transactions" "^5.2.0" "@ethersproject/wordlists" "^5.2.0" +"@ethersproject/hdnode@5.3.0", "@ethersproject/hdnode@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.3.0.tgz#26fed65ffd5c25463fddff13f5fb4e5617553c94" + integrity sha512-zLmmtLNoDMGoYRdjOab01Zqkvp+TmZyCGDAMQF1Bs3yZyBs/kzTNi1qJjR1jVUcPP5CWGtjFwY8iNG8oNV9J8g== + dependencies: + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/basex" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/pbkdf2" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/signing-key" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/wordlists" "^5.3.0" + "@ethersproject/json-wallets@5.2.0", "@ethersproject/json-wallets@^5.0.0", "@ethersproject/json-wallets@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.2.0.tgz#d41c7c39e4d236b586e26e2145b09ac49dc56608" @@ -605,6 +734,25 @@ aes-js "3.0.0" scrypt-js "3.0.1" +"@ethersproject/json-wallets@5.3.0", "@ethersproject/json-wallets@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.3.0.tgz#7b1a5ff500c12aa8597ae82c8939837b0449376e" + integrity sha512-/xwbqaIb5grUIGNmeEaz8GdcpmDr++X8WT4Jqcclnxow8PXCUHFeDxjf3O+nSuoqOYG/Ds0+BI5xuQKbva6Xkw== + dependencies: + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/hdnode" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/pbkdf2" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/random" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + "@ethersproject/keccak256@5.2.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.0", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.2.0.tgz#15257862807c23f24a3209d1016d322dca85a464" @@ -613,11 +761,24 @@ "@ethersproject/bytes" "^5.2.0" js-sha3 "0.5.7" +"@ethersproject/keccak256@5.3.0", "@ethersproject/keccak256@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.3.0.tgz#fb5cd36bdfd6fa02e2ea84964078a9fc6bd731be" + integrity sha512-Gv2YqgIUmRbYVNIibafT0qGaeGYLIA/EdWHJ7JcVxVSs2vyxafGxOJ5VpSBHWeOIsE6OOaCelYowhuuTicgdFQ== + dependencies: + "@ethersproject/bytes" "^5.3.0" + js-sha3 "0.5.7" + "@ethersproject/logger@5.2.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.2.0.tgz#accf5348251f78b6c8891af67f42490a4ea4e5ae" integrity sha512-dPZ6/E3YiArgG8dI/spGkaRDry7YZpCntf4gm/c6SI8Mbqiihd7q3nuLN5VvDap/0K3xm3RE1AIUOcUwwh2ezQ== +"@ethersproject/logger@5.3.0", "@ethersproject/logger@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.3.0.tgz#7a69fa1d4ca0d4b7138da1627eb152f763d84dd0" + integrity sha512-8bwJ2gxJGkZZnpQSq5uSiZSJjyVTWmlGft4oH8vxHdvO1Asy4TwVepAhPgxIQIMxXZFUNMych1YjIV4oQ4I7dA== + "@ethersproject/networks@5.2.0", "@ethersproject/networks@^5.0.0", "@ethersproject/networks@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.2.0.tgz#66c23c6ac477dd703645b2c971ac842d8b8aa524" @@ -625,6 +786,13 @@ dependencies: "@ethersproject/logger" "^5.2.0" +"@ethersproject/networks@5.3.0", "@ethersproject/networks@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.3.0.tgz#d8ad06eb107c69fb8651f4c81ddd0e88944fdfea" + integrity sha512-XGbD9MMgqrR7SYz8o6xVgdG+25v7YT5vQG8ZdlcLj2I7elOBM7VNeQrnxfSN7rWQNcqu2z80OM29gGbQz+4Low== + dependencies: + "@ethersproject/logger" "^5.3.0" + "@ethersproject/pbkdf2@5.2.0", "@ethersproject/pbkdf2@^5.0.0", "@ethersproject/pbkdf2@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.2.0.tgz#8166a7a7238a5fd1d9bb6eb2000fea0f19fdde06" @@ -633,6 +801,14 @@ "@ethersproject/bytes" "^5.2.0" "@ethersproject/sha2" "^5.2.0" +"@ethersproject/pbkdf2@5.3.0", "@ethersproject/pbkdf2@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.3.0.tgz#8adbb41489c3c9f319cc44bc7d3e6095fd468dc8" + integrity sha512-Q9ChVU6gBFiex0FSdtzo4b0SAKz3ZYcYVFLrEWHL0FnHvNk3J3WgAtRNtBQGQYn/T5wkoTdZttMbfBkFlaiWcA== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/properties@5.2.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.2.0.tgz#8fadf367f7ac7357019d0224aa579b234c545ac1" @@ -640,6 +816,13 @@ dependencies: "@ethersproject/logger" "^5.2.0" +"@ethersproject/properties@5.3.0", "@ethersproject/properties@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.3.0.tgz#feef4c4babeb7c10a6b3449575016f4ad2c092b2" + integrity sha512-PaHxJyM5/bfusk6vr3yP//JMnm4UEojpzuWGTmtL5X4uNhNnFNvlYilZLyDr4I9cTkIbipCMsAuIcXWsmdRnEw== + dependencies: + "@ethersproject/logger" "^5.3.0" + "@ethersproject/providers@5.2.0", "@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.0.14", "@ethersproject/providers@^5.0.21", "@ethersproject/providers@^5.0.24": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.2.0.tgz#b2f3e3b2ca4567c8372543ceb6f3c6e3a2370783" @@ -665,6 +848,31 @@ bech32 "1.1.4" ws "7.2.3" +"@ethersproject/providers@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.3.0.tgz#bccb49f1073a7d56e24f49abb14bb281c9b08636" + integrity sha512-HtL+DEbzPcRyfrkrMay7Rk/4he+NbUpzI/wHXP4Cqtra82nQOnqqCgTQc4HbdDrl75WVxG/JRMFhyneIPIMZaA== + dependencies: + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/basex" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/networks" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/random" "^5.3.0" + "@ethersproject/rlp" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/web" "^5.3.0" + bech32 "1.1.4" + ws "7.4.6" + "@ethersproject/random@5.2.0", "@ethersproject/random@^5.0.0", "@ethersproject/random@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.2.0.tgz#1d7e19f17d88eda56228a263063826829e49eebe" @@ -673,6 +881,14 @@ "@ethersproject/bytes" "^5.2.0" "@ethersproject/logger" "^5.2.0" +"@ethersproject/random@5.3.0", "@ethersproject/random@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.3.0.tgz#7c46bf36e50cb0d0550bc8c666af8e1d4496dc1a" + integrity sha512-A5SL/4inutSwt3Fh2OD0x2gz+x6GHmuUnIPkR7zAiTidMD2N8F6tZdMF1hlQKWVCcVMWhEQg8mWijhEzm6BBYw== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/rlp@5.2.0", "@ethersproject/rlp@^5.0.0", "@ethersproject/rlp@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.2.0.tgz#bbf605183818a9d96bdc40323d734c79e26cfaca" @@ -681,6 +897,14 @@ "@ethersproject/bytes" "^5.2.0" "@ethersproject/logger" "^5.2.0" +"@ethersproject/rlp@5.3.0", "@ethersproject/rlp@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.3.0.tgz#7cb93a7b5dfa69163894153c9d4b0d936f333188" + integrity sha512-oI0joYpsRanl9guDubaW+1NbcpK0vJ3F/6Wpcanzcnqq+oaW9O5E98liwkEDPcb16BUTLIJ+ZF8GPIHYxJ/5Pw== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/sha2@5.2.0", "@ethersproject/sha2@^5.0.0", "@ethersproject/sha2@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.2.0.tgz#ae18fa6c09c6d99fa2b564dac7276bcd513c1579" @@ -690,6 +914,15 @@ "@ethersproject/logger" "^5.2.0" hash.js "1.1.3" +"@ethersproject/sha2@5.3.0", "@ethersproject/sha2@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.3.0.tgz#209f9a1649f7d2452dcd5e5b94af43b7f3f42366" + integrity sha512-r5ftlwKcocYEuFz2JbeKOT5SAsCV4m1RJDsTOEfQ5L67ZC7NFDK5i7maPdn1bx4nPhylF9VAwxSrQ1esmwzylg== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + hash.js "1.1.7" + "@ethersproject/signing-key@5.2.0", "@ethersproject/signing-key@^5.0.0", "@ethersproject/signing-key@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.2.0.tgz#e8eb10d3c0f4a575479db8d70c62aaf93cd384d1" @@ -701,6 +934,18 @@ bn.js "^4.4.0" elliptic "6.5.4" +"@ethersproject/signing-key@5.3.0", "@ethersproject/signing-key@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.3.0.tgz#a96c88f8173e1abedfa35de32d3e5db7c48e5259" + integrity sha512-+DX/GwHAd0ok1bgedV1cKO0zfK7P/9aEyNoaYiRsGHpCecN7mhLqcdoUiUzE7Uz86LBsxm5ssK0qA1kBB47fbQ== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/solidity@5.2.0", "@ethersproject/solidity@^5.0.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.2.0.tgz#ac902d8f8b11bf58fd37ccf77392178cbbd0b08f" @@ -712,6 +957,17 @@ "@ethersproject/sha2" "^5.2.0" "@ethersproject/strings" "^5.2.0" +"@ethersproject/solidity@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.3.0.tgz#2a0b00b4aaaef99a080ddea13acab1fa35cd4a93" + integrity sha512-uLRBaNUiISHbut94XKewJgQh6UmydWTBp71I7I21pkjVXfZO2dJ5EOo3jCnumJc01M4LOm79dlNNmF3oGIvweQ== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/strings@5.2.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.0", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.2.0.tgz#e93d989859587191c3f64bda124d9dedbc3f5a97" @@ -721,6 +977,15 @@ "@ethersproject/constants" "^5.2.0" "@ethersproject/logger" "^5.2.0" +"@ethersproject/strings@5.3.0", "@ethersproject/strings@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.3.0.tgz#a6b640aab56a18e0909f657da798eef890968ff0" + integrity sha512-j/AzIGZ503cvhuF2ldRSjB0BrKzpsBMtCieDtn4TYMMZMQ9zScJn9wLzTQl/bRNvJbBE6TOspK0r8/Ngae/f2Q== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/transactions@5.2.0", "@ethersproject/transactions@^5.0.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.21", "@ethersproject/transactions@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.2.0.tgz#052e2ef8f8adf7037ebe4cc47aad2a61950e6491" @@ -736,6 +1001,21 @@ "@ethersproject/rlp" "^5.2.0" "@ethersproject/signing-key" "^5.2.0" +"@ethersproject/transactions@5.3.0", "@ethersproject/transactions@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.3.0.tgz#49b86f2bafa4d0bdf8e596578fc795ee47c50458" + integrity sha512-cdfK8VVyW2oEBCXhURG0WQ6AICL/r6Gmjh0e4Bvbv6MCn/GBd8FeBH3rtl7ho+AW50csMKeGv3m3K1HSHB2jMQ== + dependencies: + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/rlp" "^5.3.0" + "@ethersproject/signing-key" "^5.3.0" + "@ethersproject/units@5.2.0", "@ethersproject/units@^5.0.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.2.0.tgz#08643e5d4583ecc1a32b103c1157f7ae80803392" @@ -745,6 +1025,15 @@ "@ethersproject/constants" "^5.2.0" "@ethersproject/logger" "^5.2.0" +"@ethersproject/units@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.3.0.tgz#c4d1493532ad3d4ddf6e2bc4f8c94a2db933a8f5" + integrity sha512-BkfccZGwfJ6Ob+AelpIrgAzuNhrN2VLp3AILnkqTOv+yBdsc83V4AYf25XC/u0rHnWl6f4POaietPwlMqP2vUg== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/wallet@5.2.0", "@ethersproject/wallet@^5.0.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.2.0.tgz#b5a8406676067e34f633536a4cb53c2ff98c0b5c" @@ -766,6 +1055,27 @@ "@ethersproject/transactions" "^5.2.0" "@ethersproject/wordlists" "^5.2.0" +"@ethersproject/wallet@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.3.0.tgz#91946b470bd279e39ade58866f21f92749d062af" + integrity sha512-boYBLydG6671p9QoG6EinNnNzbm7DNOjVT20eV8J6HQEq4aUaGiA2CytF2vK+2rOEWbzhZqoNDt6AlkE1LlsTg== + dependencies: + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/hdnode" "^5.3.0" + "@ethersproject/json-wallets" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/random" "^5.3.0" + "@ethersproject/signing-key" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/wordlists" "^5.3.0" + "@ethersproject/web@5.2.0", "@ethersproject/web@^5.0.0", "@ethersproject/web@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.2.0.tgz#47d8e152e7fcc07ba0aff4f99fde268fde79dd7a" @@ -777,6 +1087,17 @@ "@ethersproject/properties" "^5.2.0" "@ethersproject/strings" "^5.2.0" +"@ethersproject/web@5.3.0", "@ethersproject/web@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.3.0.tgz#7959c403f6476c61515008d8f92da51c553a8ee1" + integrity sha512-Ni6/DHnY6k/TD41LEkv0RQDx4jqWz5e/RZvrSecsxGYycF+MFy2z++T/yGc2peRunLOTIFwEksgEGGlbwfYmhQ== + dependencies: + "@ethersproject/base64" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/wordlists@5.2.0", "@ethersproject/wordlists@^5.0.0", "@ethersproject/wordlists@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.2.0.tgz#afcce0229e9ef64af1bf8a1e96571fa441e9f444" @@ -788,6 +1109,17 @@ "@ethersproject/properties" "^5.2.0" "@ethersproject/strings" "^5.2.0" +"@ethersproject/wordlists@5.3.0", "@ethersproject/wordlists@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.3.0.tgz#45a0205f5178c1de33d316cb2ab7ed5eac3c06c5" + integrity sha512-JcwumCZcsUxgWpiFU/BRy6b4KlTRdOmYvOKZcAw/3sdF93/pZyPW5Od2hFkHS8oWp4xS06YQ+qHqQhdcxdHafQ== + dependencies: + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@hapi/bourne@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-2.0.0.tgz#5bb2193eb685c0007540ca61d166d4e1edaf918d" @@ -2149,6 +2481,11 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.18.tgz#0c8e298dbff8205e2266606c1ea5fbdba29b46e4" integrity sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ== +"@types/chai@4.2.17": + version "4.2.17" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.17.tgz#85f9f0610f514b22a94125d441f73eef65bde5cc" + integrity sha512-LaiwWNnYuL8xJlQcE91QB2JoswWZckq9A4b+nMPq8dt8AP96727Nb3X4e74u+E3tm4NLTILNI9MYFsyVc30wSA== + "@types/concat-stream@^1.6.0": version "1.6.0" resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.0.tgz#394dbe0bb5fee46b38d896735e8b68ef2390d00d" @@ -4030,7 +4367,7 @@ chai-as-promised@^7.1.1: dependencies: check-error "^1.0.2" -chai@^4.2.0, chai@^4.3.0, chai@^4.3.1, chai@^4.3.3, chai@^4.3.4: +chai@4.3.4, chai@^4.2.0, chai@^4.3.0, chai@^4.3.1, chai@^4.3.3, chai@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== @@ -5927,6 +6264,42 @@ ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.0.26, ethers@^5.0.31, eth "@ethersproject/web" "5.2.0" "@ethersproject/wordlists" "5.2.0" +ethers@^5.1.4: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.3.0.tgz#1ec14d09c461e8f2554b00cd080e94a3094e7e9d" + integrity sha512-myN+338S4sFQZvQ9trii7xit8Hu/LnUtjA0ROFOHpUreQc3fgLZEMNVqF3vM1u2D78DIIeG1TbuozVCVlXQWvQ== + dependencies: + "@ethersproject/abi" "5.3.0" + "@ethersproject/abstract-provider" "5.3.0" + "@ethersproject/abstract-signer" "5.3.0" + "@ethersproject/address" "5.3.0" + "@ethersproject/base64" "5.3.0" + "@ethersproject/basex" "5.3.0" + "@ethersproject/bignumber" "5.3.0" + "@ethersproject/bytes" "5.3.0" + "@ethersproject/constants" "5.3.0" + "@ethersproject/contracts" "5.3.0" + "@ethersproject/hash" "5.3.0" + "@ethersproject/hdnode" "5.3.0" + "@ethersproject/json-wallets" "5.3.0" + "@ethersproject/keccak256" "5.3.0" + "@ethersproject/logger" "5.3.0" + "@ethersproject/networks" "5.3.0" + "@ethersproject/pbkdf2" "5.3.0" + "@ethersproject/properties" "5.3.0" + "@ethersproject/providers" "5.3.0" + "@ethersproject/random" "5.3.0" + "@ethersproject/rlp" "5.3.0" + "@ethersproject/sha2" "5.3.0" + "@ethersproject/signing-key" "5.3.0" + "@ethersproject/solidity" "5.3.0" + "@ethersproject/strings" "5.3.0" + "@ethersproject/transactions" "5.3.0" + "@ethersproject/units" "5.3.0" + "@ethersproject/wallet" "5.3.0" + "@ethersproject/web" "5.3.0" + "@ethersproject/wordlists" "5.3.0" + ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -7024,6 +7397,32 @@ hardhat-deploy@^0.7.4: murmur-128 "^0.2.1" qs "^6.9.4" +hardhat-deploy@^0.7.5: + version "0.7.10" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.7.10.tgz#2bc94bf36db5f39aa488c6c6569f07d5ca4b410a" + integrity sha512-+0oiEWy/FgKOEzRNhSWPqSjofVCwtkK3E5x916kbZ5SgFGOjWTFCrWbWUYjzc2GyZgNXuSuRn8mBowHSLF4sVg== + dependencies: + "@ethersproject/abi" "^5.0.0" + "@ethersproject/abstract-signer" "^5.0.0" + "@ethersproject/address" "^5.0.0" + "@ethersproject/bignumber" "^5.0.0" + "@ethersproject/bytes" "^5.0.0" + "@ethersproject/contracts" "^5.0.0" + "@ethersproject/providers" "^5.0.0" + "@ethersproject/solidity" "^5.0.0" + "@ethersproject/transactions" "^5.0.0" + "@ethersproject/wallet" "^5.0.0" + "@types/qs" "^6.9.4" + axios "^0.21.1" + chalk "^4.1.0" + chokidar "^3.4.0" + debug "^4.1.1" + form-data "^3.0.0" + fs-extra "^9.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + hardhat-gas-reporter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.4.tgz#59e3137e38e0dfeac2e4f90d5c74160b50ad4829" @@ -7032,7 +7431,7 @@ hardhat-gas-reporter@^1.0.4: eth-gas-reporter "^0.2.20" sha1 "^1.1.1" -hardhat@^2.1.2, hardhat@^2.2.1: +hardhat@^2.2.0, hardhat@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.3.0.tgz#5c29f8b4d08155c3dc8c908af9713fd5079522d5" integrity sha512-nc4ro2bM4wPaA6/0Y22o5F5QrifQk2KCyPUUKLPUeFFZoGNGYB8vmeW/k9gV9DdMukdWTzfYlKc2Jn4bfb6tDQ== @@ -7192,7 +7591,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.1.7: +hash.js@1.1.7, 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== @@ -9338,7 +9737,7 @@ mocha@^7.1.1, mocha@^7.1.2: yargs-parser "13.1.2" yargs-unparser "1.6.0" -mocha@^8.3.0, mocha@^8.3.1, mocha@^8.3.2, mocha@^8.4.0: +mocha@^8.2.1, mocha@^8.3.0, mocha@^8.3.1, mocha@^8.3.2, mocha@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.4.0.tgz#677be88bf15980a3cae03a73e10a0fc3997f0cff" integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ== @@ -14087,6 +14486,11 @@ ws@7.2.3: resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== +ws@7.4.6, ws@^7.2.1: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + ws@^3.0.0: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" @@ -14103,11 +14507,6 @@ ws@^5.1.1: dependencies: async-limiter "~1.0.0" -ws@^7.2.1: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - xhr-request-promise@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" From 19ae3ac32ea180b63a16e5c2f31080cd606af83d Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Wed, 2 Jun 2021 13:29:46 -0700 Subject: [PATCH 05/30] Deployment working.... --- packages/omgx/wallet/hardhat.config.ts | 9 ++++-- packages/omgx/wallet/test/a_message.spec.ts | 30 ++++++++++++++---- packages/omgx/wallet/test/b_setup.spec.ts | 34 +++++++++++++++------ packages/omgx/wallet/test/c_lp.spec.ts | 3 +- packages/omgx/wallet/test/shared/env.ts | 3 ++ 5 files changed, 59 insertions(+), 20 deletions(-) diff --git a/packages/omgx/wallet/hardhat.config.ts b/packages/omgx/wallet/hardhat.config.ts index 8cef1d8f10a8..a46c5cc52418 100644 --- a/packages/omgx/wallet/hardhat.config.ts +++ b/packages/omgx/wallet/hardhat.config.ts @@ -1,7 +1,6 @@ import { HardhatUserConfig } from 'hardhat/types' - -// Hardhat plugins import '@nomiclabs/hardhat-ethers' +import '@nomiclabs/hardhat-waffle' import '@eth-optimism/hardhat-ovm' const config: HardhatUserConfig = { @@ -10,7 +9,11 @@ const config: HardhatUserConfig = { }, networks: { omgx: { - url: 'http://localhost:8545', //never is actually used - set by the .env + url: 'http://localhost:8545', + // This sets the gas price to 0 for all transactions on L2. We do this + // because account balances are not automatically initiated with an ETH + // balance. + gasPrice: 0, ovm: true, }, }, diff --git a/packages/omgx/wallet/test/a_message.spec.ts b/packages/omgx/wallet/test/a_message.spec.ts index be3f6a9d64ba..c152f5525744 100644 --- a/packages/omgx/wallet/test/a_message.spec.ts +++ b/packages/omgx/wallet/test/a_message.spec.ts @@ -36,12 +36,19 @@ describe('Messenge Relayer Test', async () => { L2MessageJson.bytecode, env.bobl2Wallet ) + + const accountNonceBob1 = await env.l1Provider.getTransactionCount(env.bobl1Wallet.address) + console.log(`accountNonceBob1:`,accountNonceBob1) + + const accountNonceBob2 = await env.l2Provider.getTransactionCount(env.bobl2Wallet.address) + console.log(`accountNonceBob2:`,accountNonceBob2) + }) it('should deploy contracts', async () => { - // Deploy L2 liquidity pool L2Message = await Factory__L2Message.deploy( env.watcher.l2.messengerAddress, + {gasLimit: 999999, gasPrice: 0} ) await L2Message.deployTransaction.wait() console.log(`🌕 ${chalk.red('L2Message deployed to:')} ${chalk.green(L2Message.address)}`) @@ -49,6 +56,7 @@ describe('Messenge Relayer Test', async () => { // Deploy L1 liquidity pool L1Message = await Factory__L1Message.deploy( env.watcher.l1.messengerAddress, + {gasLimit: 999999, gasPrice: 0} // env.customWatcher.l1.messengerAddress, ) await L1Message.deployTransaction.wait() @@ -56,14 +64,16 @@ describe('Messenge Relayer Test', async () => { // Initialize L1 message const L1MessageTX = await L1Message.init( - L2Message.address + L2Message.address, + {gasLimit: 999999, gasPrice: 0} ) await L1MessageTX.wait() console.log(`⭐️ ${chalk.blue('L1 Message initialized:')} ${chalk.green(L1MessageTX.hash)}`) // Initialize L2 message const L2MessageTX = await L2Message.init( - L1Message.address + L1Message.address, + {gasLimit: 999999, gasPrice: 0} ) await L2MessageTX.wait() console.log(`⭐️ ${chalk.blue('L2 Message initialized:')} ${chalk.green(L2MessageTX.hash)}`) @@ -71,15 +81,23 @@ describe('Messenge Relayer Test', async () => { it('should send message from L2 to L1', async () => { await env.waitForXDomainTransaction( - L2Message.sendMessageL2ToL1(), - Direction.L2ToL1, + L2Message.sendMessageL2ToL1({ + gasLimit: 999999, + gasPrice: 0, + //nonce: 221 + }), + Direction.L2ToL1 // Relayer.custom ) }) it('should send message from L1 to L2', async () => { await env.waitForXDomainTransaction( - L1Message.sendMessageL1ToL2(), + L1Message.sendMessageL1ToL2({ + gasLimit: 999999, + gasPrice: 0, + //nonce: 28 + }), Direction.L1ToL2 ) }) diff --git a/packages/omgx/wallet/test/b_setup.spec.ts b/packages/omgx/wallet/test/b_setup.spec.ts index eeda21610af1..76a66bc5c7f9 100644 --- a/packages/omgx/wallet/test/b_setup.spec.ts +++ b/packages/omgx/wallet/test/b_setup.spec.ts @@ -19,7 +19,7 @@ import { OptimismEnv } from './shared/env' import { promises as fs } from 'fs' -describe('LP System setup\n', async () => { +describe('LP System setup', async () => { let Factory__L1LiquidityPool: ContractFactory let Factory__L2LiquidityPool: ContractFactory @@ -93,9 +93,11 @@ describe('LP System setup\n', async () => { }) it('should deploy contracts', async () => { + // Deploy L2 liquidity pool L2LiquidityPool = await Factory__L2LiquidityPool.deploy( env.watcher.l2.messengerAddress, + {gasLimit: 999999, gasPrice: 0} ) await L2LiquidityPool.deployTransaction.wait() console.log(`🌕 ${chalk.red('L2LiquidityPool deployed to:')} ${chalk.green(L2LiquidityPool.address)}`) @@ -103,7 +105,8 @@ describe('LP System setup\n', async () => { // Deploy L1 liquidity pool L1LiquidityPool = await Factory__L1LiquidityPool.deploy( env.watcher.l1.messengerAddress, - env.customWatcher.l1.messengerAddress, + env.customWatcher.l1.messengerAddress//, + //{gasLimit: 999999, gasPrice: 0} ) await L1LiquidityPool.deployTransaction.wait() console.log(`🌕 ${chalk.red('L1LiquidityPool deployed to:')} ${chalk.green(L1LiquidityPool.address)}`) @@ -112,7 +115,8 @@ describe('LP System setup\n', async () => { const L1LiquidityPoolTX = await L1LiquidityPool.init( /* userRewardFeeRate 3.5% */ 35, /* ownerRewardFeeRate 1.5% */ 15, - L2LiquidityPool.address + L2LiquidityPool.address, + {gasLimit: 999999, gasPrice: 0} ) await L1LiquidityPoolTX.wait() console.log(`⭐️ ${chalk.blue('L1 LP initialized:')} ${chalk.green(L1LiquidityPoolTX.hash)}`) @@ -121,7 +125,8 @@ describe('LP System setup\n', async () => { const L2LiquidityPoolTX = await L2LiquidityPool.init( /* userRewardFeeRate 3.5% */ 35, /* ownerRewardFeeRate 1.5% */ 15, - L1LiquidityPool.address + L1LiquidityPool.address, + {gasLimit: 999999, gasPrice: 0} ) await L2LiquidityPoolTX.wait() console.log(`⭐️ ${chalk.blue('L2 LP initialized:')} ${chalk.green(L2LiquidityPoolTX.hash)}`) @@ -132,7 +137,8 @@ describe('LP System setup\n', async () => { L1ERC20 = await Factory__L1ERC20.deploy( initialSupply, tokenName, - tokenSymbol + tokenSymbol, + //{gasLimit: 999999, gasPrice: 0} ) await L1ERC20.deployTransaction.wait() console.log(`🌕 ${chalk.red('L1ERC20 deployed to:')} ${chalk.green(L1ERC20.address)}`) @@ -142,7 +148,8 @@ describe('LP System setup\n', async () => { L2DepositedERC20 = await Factory__L2DepositedERC20.deploy( env.watcher.l2.messengerAddress, tokenName, - tokenSymbol + tokenSymbol, + {gasLimit: 999999, gasPrice: 0} ) await L2DepositedERC20.deployTransaction.wait() console.log(`🌕 ${chalk.red('L2DepositedERC20 deployed to:')} ${chalk.green(L2DepositedERC20.address)}`) @@ -153,27 +160,34 @@ describe('LP System setup\n', async () => { L1ERC20.address, L2DepositedERC20.address, env.watcher.l1.messengerAddress, + //{gasLimit: 999999, gasPrice: 0} ) await L1ERC20Gateway.deployTransaction.wait() console.log(`🌕 ${chalk.red('L1ERC20Gateway deployed to:')} ${chalk.green(L1ERC20Gateway.address)}`) //Initialize the ERC20 for the new token - const initL2ERC20TX = await L2DepositedERC20.init(L1ERC20Gateway.address); + const initL2ERC20TX = await L2DepositedERC20.init( + L1ERC20Gateway.address, + {gasLimit: 999999, gasPrice: 0} + ); await initL2ERC20TX.wait(); console.log(`⭐️ ${chalk.blue('L2DepositedERC20 initialized:')} ${chalk.green(initL2ERC20TX.hash)}`) //Deploy L2 token pool for the new token - L2TokenPool = await Factory__L2TokenPool.deploy() + L2TokenPool = await Factory__L2TokenPool.deploy({gasLimit: 999999, gasPrice: 0}) await L2TokenPool.deployTransaction.wait() console.log(`🌕 ${chalk.red('L2TokenPool deployed to:')} ${chalk.green(L2TokenPool.address)}`) //Register ERC20 token address in L2 token pool - const registerL2TokenPoolTX = await L2TokenPool.registerTokenAddress(L2DepositedERC20.address); + const registerL2TokenPoolTX = await L2TokenPool.registerTokenAddress( + L2DepositedERC20.address, + {gasLimit: 999999, gasPrice: 0} + ); await registerL2TokenPoolTX.wait() console.log(`⭐️ ${chalk.blue('L2TokenPool registered:')} ${chalk.green(registerL2TokenPoolTX.hash)}`) // Deploy atomic swap - AtomicSwap = await Factory__AtomicSwap.deploy() + AtomicSwap = await Factory__AtomicSwap.deploy({gasLimit: 999999, gasPrice: 0}) await AtomicSwap.deployTransaction.wait() console.log(`🌕 ${chalk.red('AtomicSwap deployed to:')} ${chalk.green(AtomicSwap.address)}`) }) diff --git a/packages/omgx/wallet/test/c_lp.spec.ts b/packages/omgx/wallet/test/c_lp.spec.ts index 22f7f9b2289c..2a333c8f7be0 100644 --- a/packages/omgx/wallet/test/c_lp.spec.ts +++ b/packages/omgx/wallet/test/c_lp.spec.ts @@ -83,11 +83,12 @@ describe('Liquidity Pool Test', async () => { const approveL1ERC20TX = await L1ERC20.approve( L1ERC20Gateway.address, depositL2ERC20Amount, + {gasLimit: 999999, gasPrice: 0} ) await approveL1ERC20TX.wait() await env.waitForXDomainTransaction( - L1ERC20Gateway.deposit(depositL2ERC20Amount), + L1ERC20Gateway.deposit(depositL2ERC20Amount, {gasLimit: 999999, gasPrice: 0}), Direction.L1ToL2 ) diff --git a/packages/omgx/wallet/test/shared/env.ts b/packages/omgx/wallet/test/shared/env.ts index 93de4557bd5e..7717c954bc2b 100644 --- a/packages/omgx/wallet/test/shared/env.ts +++ b/packages/omgx/wallet/test/shared/env.ts @@ -41,6 +41,7 @@ export class OptimismEnv { l1MessengerAddress: String ctc: Contract + l1Provider l2Provider // L2 Contracts @@ -76,6 +77,7 @@ export class OptimismEnv { this.alicel2Wallet = args.alicel2Wallet this.katel1Wallet = args.katel1Wallet this.katel2Wallet = args.katel2Wallet + this.l1Provider = args.l1Provider this.l2Provider = args.l2Provider this.ctc = args.ctc } @@ -125,6 +127,7 @@ export class OptimismEnv { katel1Wallet, katel2Wallet, + l1Provider, l2Provider }) } From 8843ca9a3e2d46dd00c2ad30e3c9fabee701b140 Mon Sep 17 00:00:00 2001 From: cby3149 <46272347+cby3149@users.noreply.github.com> Date: Wed, 2 Jun 2021 15:50:00 -0700 Subject: [PATCH 06/30] Add fast and slow message contracts (#38) --- .../contracts/Message/L1FastMessage.sol | 67 +++++++++++ .../wallet/contracts/Message/L1Message.sol | 10 +- .../omgx/wallet/test/a_message_fast.spec.ts | 104 ++++++++++++++++++ 3 files changed, 172 insertions(+), 9 deletions(-) create mode 100644 packages/omgx/wallet/contracts/Message/L1FastMessage.sol create mode 100644 packages/omgx/wallet/test/a_message_fast.spec.ts diff --git a/packages/omgx/wallet/contracts/Message/L1FastMessage.sol b/packages/omgx/wallet/contracts/Message/L1FastMessage.sol new file mode 100644 index 000000000000..64cd2e77ae28 --- /dev/null +++ b/packages/omgx/wallet/contracts/Message/L1FastMessage.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +pragma solidity >0.5.0; + +/* Library Imports */ +import "../libraries/OVM_CrossDomainEnabled.sol"; + +import { L2Message } from "./L2Message.sol"; + +contract L1FastMessage is OVM_CrossDomainEnabled { + + address L2MessageAddress; + string crossDomainMessage; + + event ReceiveL2Message ( + string _message + ); + + /******************** + * Constructor * + ********************/ + constructor ( + address _l1CrossDomainMessenger, + address _l1CustomCrossDomainMessenger + ) + OVM_CrossDomainEnabled(_l1CrossDomainMessenger, _l1CustomCrossDomainMessenger) + {} + + function init ( + address _L2MessageAddress + ) + public + { + L2MessageAddress = _L2MessageAddress; + } + + function sendMessageL1ToL2 () public { + bytes memory data = abi.encodeWithSelector( + L2Message.receiveL1Message.selector, + "messageFromL1" + ); + + // Send calldata into L1 + sendCrossDomainMessage( + address(L2MessageAddress), + data, + 1200000 + ); + } + + /************************* + * Cross-chain Functions * + *************************/ + + /** + * Receive message from L2 + * @param _message message + */ + function receiveL2Message( + string memory _message + ) + external + onlyFromCrossDomainAccount(address(L2MessageAddress)) + { + crossDomainMessage = _message; + emit ReceiveL2Message(_message); + } +} \ No newline at end of file diff --git a/packages/omgx/wallet/contracts/Message/L1Message.sol b/packages/omgx/wallet/contracts/Message/L1Message.sol index 8792614d195c..aaaa2e63c88c 100644 --- a/packages/omgx/wallet/contracts/Message/L1Message.sol +++ b/packages/omgx/wallet/contracts/Message/L1Message.sol @@ -3,7 +3,6 @@ pragma solidity >0.5.0; /* Library Imports */ import "@eth-optimism/contracts/contracts/optimistic-ethereum/libraries/bridge/OVM_CrossDomainEnabled.sol"; -// import "../libraries/OVM_CrossDomainEnabled.sol"; import { L2Message } from "./L2Message.sol"; @@ -18,14 +17,7 @@ contract L1Message is OVM_CrossDomainEnabled { /******************** * Constructor * - ********************/ - // constructor ( - // address _l1CrossDomainMessenger, - // address _l1CustomCrossDomainMessenger - // ) - // OVM_CrossDomainEnabled(_l1CrossDomainMessenger, _l1CustomCrossDomainMessenger) - // {} - + ********************/ constructor ( address _l1CrossDomainMessenger ) diff --git a/packages/omgx/wallet/test/a_message_fast.spec.ts b/packages/omgx/wallet/test/a_message_fast.spec.ts new file mode 100644 index 000000000000..d3c1ff275964 --- /dev/null +++ b/packages/omgx/wallet/test/a_message_fast.spec.ts @@ -0,0 +1,104 @@ +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +chai.use(chaiAsPromised); +import { Contract, ContractFactory, utils } from 'ethers' +import chalk from 'chalk'; + +import { Direction, Relayer } from './shared/watcher-utils' + +import L1FastMessageJson from '../artifacts/contracts/Message/L1FastMessage.sol/L1FastMessage.json' +import L2MessageJson from '../artifacts-ovm/contracts/Message/L2Message.sol/L2Message.json' + +import { OptimismEnv } from './shared/env' + +describe('Messenge Relayer Test', async () => { + + let Factory__L1FastMessage: ContractFactory + let Factory__L2Message: ContractFactory + + let L1FastMessage: Contract + let L2Message: Contract + + let env: OptimismEnv + + before(async () => { + + env = await OptimismEnv.new() + + Factory__L1FastMessage = new ContractFactory( + L1FastMessageJson.abi, + L1FastMessageJson.bytecode, + env.bobl1Wallet + ) + + Factory__L2Message = new ContractFactory( + L2MessageJson.abi, + L2MessageJson.bytecode, + env.bobl2Wallet + ) + + const accountNonceBob1 = await env.l1Provider.getTransactionCount(env.bobl1Wallet.address) + console.log(`accountNonceBob1:`,accountNonceBob1) + + const accountNonceBob2 = await env.l2Provider.getTransactionCount(env.bobl2Wallet.address) + console.log(`accountNonceBob2:`,accountNonceBob2) + + }) + + it('should deploy contracts', async () => { + L2Message = await Factory__L2Message.deploy( + env.watcher.l2.messengerAddress, + {gasLimit: 999999, gasPrice: 0} + ) + await L2Message.deployTransaction.wait() + console.log(`🌕 ${chalk.red('L2Message deployed to:')} ${chalk.green(L2Message.address)}`) + + // Deploy L1 liquidity pool + L1FastMessage = await Factory__L1FastMessage.deploy( + env.watcher.l1.messengerAddress, + env.customWatcher.l1.messengerAddress, + {gasLimit: 999999, gasPrice: 0} + ) + await L1FastMessage.deployTransaction.wait() + console.log(`🌕 ${chalk.red('L1FastMessage deployed to:')} ${chalk.green(L1FastMessage.address)}`) + + // Initialize L1 message + const L1FastMessageTX = await L1FastMessage.init( + L2Message.address, + {gasLimit: 999999, gasPrice: 0} + ) + await L1FastMessageTX.wait() + console.log(`⭐️ ${chalk.blue('L1 Message initialized:')} ${chalk.green(L1FastMessageTX.hash)}`) + + // Initialize L2 message + const L2MessageTX = await L2Message.init( + L1FastMessage.address, + {gasLimit: 999999, gasPrice: 0} + ) + await L2MessageTX.wait() + console.log(`⭐️ ${chalk.blue('L2 Message initialized:')} ${chalk.green(L2MessageTX.hash)}`) + }) + + it('should send message from L2 to L1', async () => { + await env.waitForXDomainTransaction( + L2Message.sendMessageL2ToL1({ + gasLimit: 999999, + gasPrice: 0, + //nonce: 221 + }), + Direction.L2ToL1, + Relayer.custom + ) + }) + + it('should send message from L1 to L2', async () => { + await env.waitForXDomainTransaction( + L1FastMessage.sendMessageL1ToL2({ + gasLimit: 999999, + gasPrice: 0, + //nonce: 28 + }), + Direction.L1ToL2 + ) + }) +}) \ No newline at end of file From a3147ce3466731dad9635c4b5e8458974e019f9f Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Wed, 2 Jun 2021 19:02:00 -0700 Subject: [PATCH 07/30] wip - simplify system - remove message-relayer-fast --- ops/docker-compose.yml | 21 - ops/docker/Dockerfile.message-relayer-fast | 34 -- ops/docker/Dockerfile.monorepo | 1 - ops/scripts/relayer-fast.sh | 26 - .../OVM_L1CustomCrossDomainMessenger.sol | 287 --------- ...OVM_L1CustomCrossDomainMessenger.deploy.ts | 62 -- .../{019-finalize.ts => 017-finalize.ts} | 0 ...OVM_L1CustomCrossDomainMessenger.deploy.ts | 61 -- .../src/contract-deployment/config.ts | 17 - .../contracts/src/state-dump/make-dump.ts | 1 - packages/message-relayer/src/service.ts | 10 +- packages/omgx/message-relayer-fast/README.md | 50 -- .../contracts/OVM_L1CrossDomainMessenger.sol | 287 --------- .../libraries/OVM_CrossDomainEnabled.sol | 98 --- .../exec/run-message-relayer-fast.js | 10 - .../omgx/message-relayer-fast/package.json | 51 -- .../omgx/message-relayer-fast/src/exec/run.ts | 134 ----- .../omgx/message-relayer-fast/src/service.ts | 557 ------------------ .../message-relayer-fast/src/spreadsheet.ts | 25 - .../omgx/message-relayer-fast/src/types.ts | 33 -- .../message-relayer-fast/tsconfig.build.json | 12 - .../omgx/message-relayer-fast/tsconfig.json | 7 - .../omgx/message-relayer-fast/tslint.json | 3 - packages/omgx/wallet/.env.example | 105 +--- .../omgx/wallet/contracts/L1ERC20Gateway.sol | 1 - .../wallet/contracts/LP/L1LiquidityPool.sol | 6 +- .../wallet/contracts/LP/L2LiquidityPool.sol | 12 +- .../LP/interfaces/iL1LiquidityPool.sol | 2 +- .../LP/interfaces/iL2LiquidityPool.sol | 4 +- .../LP/libraries/OVM_CrossDomainEnabled.sol | 98 --- .../contracts/Message/L1FastMessage.sol | 67 --- .../wallet/contracts/Message/L1Message.sol | 1 - .../wallet/contracts/Message/L2Message.sol | 1 - .../wallet/{test => disabled}/b_setup.spec.ts | 0 .../wallet/{test => disabled}/c_lp.spec.ts | 0 .../wallet/{test => disabled}/d_nft.spec.ts | 0 packages/omgx/wallet/hardhat.config.ts | 2 +- packages/omgx/wallet/test/a_message.spec.ts | 5 +- .../omgx/wallet/test/a_message_fast.spec.ts | 104 ---- packages/omgx/wallet/test/shared/env.ts | 12 +- .../omgx/wallet/test/shared/watcher-utils.ts | 33 +- packages/omgx/wallet/test/shared/watcher.ts | 7 +- 42 files changed, 41 insertions(+), 2206 deletions(-) delete mode 100644 ops/docker/Dockerfile.message-relayer-fast delete mode 100755 ops/scripts/relayer-fast.sh delete mode 100644 packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CustomCrossDomainMessenger.sol delete mode 100644 packages/contracts/deploy/017-OVM_L1CustomCrossDomainMessenger.deploy.ts rename packages/contracts/deploy/{019-finalize.ts => 017-finalize.ts} (100%) delete mode 100644 packages/contracts/deploy/018-Proxy__OVM_L1CustomCrossDomainMessenger.deploy.ts delete mode 100644 packages/omgx/message-relayer-fast/README.md delete mode 100644 packages/omgx/message-relayer-fast/contracts/OVM_L1CrossDomainMessenger.sol delete mode 100644 packages/omgx/message-relayer-fast/contracts/libraries/OVM_CrossDomainEnabled.sol delete mode 100644 packages/omgx/message-relayer-fast/exec/run-message-relayer-fast.js delete mode 100644 packages/omgx/message-relayer-fast/package.json delete mode 100644 packages/omgx/message-relayer-fast/src/exec/run.ts delete mode 100644 packages/omgx/message-relayer-fast/src/service.ts delete mode 100644 packages/omgx/message-relayer-fast/src/spreadsheet.ts delete mode 100644 packages/omgx/message-relayer-fast/src/types.ts delete mode 100644 packages/omgx/message-relayer-fast/tsconfig.build.json delete mode 100644 packages/omgx/message-relayer-fast/tsconfig.json delete mode 100644 packages/omgx/message-relayer-fast/tslint.json delete mode 100644 packages/omgx/wallet/contracts/LP/libraries/OVM_CrossDomainEnabled.sol delete mode 100644 packages/omgx/wallet/contracts/Message/L1FastMessage.sol rename packages/omgx/wallet/{test => disabled}/b_setup.spec.ts (100%) rename packages/omgx/wallet/{test => disabled}/c_lp.spec.ts (100%) rename packages/omgx/wallet/{test => disabled}/d_nft.spec.ts (100%) delete mode 100644 packages/omgx/wallet/test/a_message_fast.spec.ts diff --git a/ops/docker-compose.yml b/ops/docker-compose.yml index ab1cc9accaeb..25d056f3e0e1 100644 --- a/ops/docker-compose.yml +++ b/ops/docker-compose.yml @@ -111,27 +111,6 @@ services: POLLING_INTERVAL: 500 GET_LOGS_INTERVAL: 500 - relayer-fast: - depends_on: - - l1_chain - - deployer - - l2geth - image: ethereumoptimism/message-relayer-fast - build: - context: .. - dockerfile: ./ops/docker/Dockerfile.message-relayer-fast - entrypoint: ./relayer-fast.sh - environment: - L1_NODE_WEB3_URL: http://l1_chain:8545 - L2_NODE_WEB3_URL: http://l2geth:8545 - URL: http://deployer:8081/addresses.json - # a funded hardhat account - L1_WALLET_KEY: "0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97" - RETRIES: 60 - POLLING_INTERVAL: 500 - GET_LOGS_INTERVAL: 500 - L1_TARGET: "0x0" - batch_submitter: depends_on: - l1_chain diff --git a/ops/docker/Dockerfile.message-relayer-fast b/ops/docker/Dockerfile.message-relayer-fast deleted file mode 100644 index 42d86478a737..000000000000 --- a/ops/docker/Dockerfile.message-relayer-fast +++ /dev/null @@ -1,34 +0,0 @@ -FROM ethereumoptimism/builder AS builder - -FROM node:14-alpine - -RUN apk add --no-cache curl bash jq - -WORKDIR /opt/optimism - -# copy top level files -COPY --from=builder /optimism/*.json ./ -COPY --from=builder /optimism/yarn.lock . -COPY --from=builder /optimism/node_modules ./node_modules - -# copy deps (would have been nice if docker followed the symlinks required) -COPY --from=builder /optimism/packages/core-utils/package.json ./packages/core-utils/package.json -COPY --from=builder /optimism/packages/core-utils/dist ./packages/core-utils/dist -COPY --from=builder /optimism/packages/common-ts/package.json ./packages/common-ts/package.json -COPY --from=builder /optimism/packages/common-ts/dist ./packages/common-ts/dist - -COPY --from=builder /optimism/packages/contracts/package.json ./packages/contracts/package.json -COPY --from=builder /optimism/packages/contracts/dist ./packages/contracts/dist -COPY --from=builder /optimism/packages/contracts/artifacts ./packages/contracts/artifacts -COPY --from=builder /optimism/packages/contracts/artifacts-ovm ./packages/contracts/artifacts-ovm - -# copy the service -WORKDIR /opt/optimism/packages/omgx/message-relayer-fast -COPY --from=builder /optimism/packages/omgx/message-relayer-fast/dist ./dist -COPY --from=builder /optimism/packages/omgx/message-relayer-fast/package.json . -COPY --from=builder /optimism/packages/omgx/message-relayer-fast/exec ./exec -COPY --from=builder /optimism/packages/omgx/message-relayer-fast/node_modules ./node_modules - -# copy this over in case you want to run alongside other services -COPY ./ops/scripts/relayer-fast.sh . -ENTRYPOINT ["npm", "run", "start"] diff --git a/ops/docker/Dockerfile.monorepo b/ops/docker/Dockerfile.monorepo index 57237849a6c2..abbac5072efc 100644 --- a/ops/docker/Dockerfile.monorepo +++ b/ops/docker/Dockerfile.monorepo @@ -32,7 +32,6 @@ COPY packages/contracts/package.json ./packages/contracts/package.json COPY packages/data-transport-layer/package.json ./packages/data-transport-layer/package.json COPY packages/batch-submitter/package.json ./packages/batch-submitter/package.json COPY packages/message-relayer/package.json ./packages/message-relayer/package.json -COPY packages/omgx/message-relayer-fast/package.json ./packages/omgx/message-relayer-fast/package.json COPY integration-tests/package.json ./integration-tests/package.json RUN yarn install --frozen-lockfile diff --git a/ops/scripts/relayer-fast.sh b/ops/scripts/relayer-fast.sh deleted file mode 100755 index 9580b4406fb1..000000000000 --- a/ops/scripts/relayer-fast.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -set -e - -RETRIES=${RETRIES:-60} - -if [[ ! -z "$URL" ]]; then - # get the addrs from the URL provided - ADDRESSES=$(curl --fail --show-error --silent --retry-connrefused --retry $RETRIES --retry-delay 5 $URL) - # set the env - export ADDRESS_MANAGER_ADDRESS=$(echo $ADDRESSES | jq -r '.AddressManager') -fi - -# waits for l2geth to be up -curl \ - --fail \ - --show-error \ - --silent \ - --output /dev/null \ - --retry-connrefused \ - --retry $RETRIES \ - --retry-delay 1 \ - $L2_NODE_WEB3_URL - -# go -exec node ./exec/run-message-relayer-fast.js diff --git a/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CustomCrossDomainMessenger.sol b/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CustomCrossDomainMessenger.sol deleted file mode 100644 index f78bebeb07b7..000000000000 --- a/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CustomCrossDomainMessenger.sol +++ /dev/null @@ -1,287 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >0.5.0 <0.8.0; -pragma experimental ABIEncoderV2; - -/* Library Imports */ -import { Lib_OVMCodec } from "../../../libraries/codec/Lib_OVMCodec.sol"; -import { Lib_AddressResolver } from "../../../libraries/resolver/Lib_AddressResolver.sol"; -import { Lib_AddressManager } from "../../../libraries/resolver/Lib_AddressManager.sol"; -import { Lib_SecureMerkleTrie } from "../../../libraries/trie/Lib_SecureMerkleTrie.sol"; - -/* Interface Imports */ -import { iOVM_L1CrossDomainMessenger } from "../../../iOVM/bridge/messaging/iOVM_L1CrossDomainMessenger.sol"; -import { iOVM_CanonicalTransactionChain } from "../../../iOVM/chain/iOVM_CanonicalTransactionChain.sol"; -import { iOVM_StateCommitmentChain } from "../../../iOVM/chain/iOVM_StateCommitmentChain.sol"; - -/* Contract Imports */ -import { Abs_BaseCrossDomainMessenger } from "./Abs_BaseCrossDomainMessenger.sol"; - -/** - * @title OVM_L1CustomCrossDomainMessenger - * @dev The L1 Cross Domain Messenger contract sends messages from L1 to L2, and relays messages from L2 onto L1. - * In the event that a message sent from L1 to L2 is rejected for exceeding the L2 epoch gas limit, it can be resubmitted - * via this contract's replay function. - * - * Compiler used: solc - * Runtime target: EVM - */ -contract OVM_L1CustomCrossDomainMessenger is iOVM_L1CrossDomainMessenger, Abs_BaseCrossDomainMessenger, Lib_AddressResolver { - - /*************** - * Constructor * - ***************/ - - /** - * Pass a default zero address to the address resolver. This will be updated when initialized. - */ - constructor() - Lib_AddressResolver(address(0)) - {} - - /** - * @param _libAddressManager Address of the Address Manager. - */ - function initialize( - address _libAddressManager - ) - public - { - require(address(libAddressManager) == address(0), "L1CustomCrossDomainMessenger already intialized."); - libAddressManager = Lib_AddressManager(_libAddressManager); - xDomainMsgSender = DEFAULT_XDOMAIN_SENDER; - } - - - /********************** - * Function Modifiers * - **********************/ - - /** - * Modifier to enforce that, if configured, only the OVM_L2MessageRelayer contract may successfully call a method. - */ - modifier onlyRelayer() { - address relayer = resolve("OVM_L2MessageRelayer"); - if (relayer != address(0)) { - require( - msg.sender == relayer, - "Only OVM_L2MessageRelayer can relay L2-to-L1 messages." - ); - } - _; - } - - - /******************** - * Public Functions * - ********************/ - - /** - * Relays a cross domain message to a contract. - * @inheritdoc iOVM_L1CrossDomainMessenger - */ - function relayMessage( - address _target, - address _sender, - bytes memory _message, - uint256 _messageNonce, - L2MessageInclusionProof memory _proof - ) - override - public - onlyRelayer() - { - bytes memory xDomainCalldata = _getXDomainCalldata( - _target, - _sender, - _message, - _messageNonce - ); - - require( - _verifyXDomainMessage( - xDomainCalldata, - _proof - ) == true, - "Provided message could not be verified." - ); - - bytes32 xDomainCalldataHash = keccak256(xDomainCalldata); - - require( - successfulMessages[xDomainCalldataHash] == false, - "Provided message has already been received." - ); - - xDomainMsgSender = _sender; - (bool success, ) = _target.call(_message); - xDomainMsgSender = DEFAULT_XDOMAIN_SENDER; - - // Mark the message as received if the call was successful. Ensures that a message can be - // relayed multiple times in the case that the call reverted. - if (success == true) { - successfulMessages[xDomainCalldataHash] = true; - emit RelayedMessage(xDomainCalldataHash); - } - - // Store an identifier that can be used to prove that the given message was relayed by some - // user. Gives us an easy way to pay relayers for their work. - bytes32 relayId = keccak256( - abi.encodePacked( - xDomainCalldata, - msg.sender, - block.number - ) - ); - relayedMessages[relayId] = true; - } - - /** - * Replays a cross domain message to the target messenger. - * @inheritdoc iOVM_L1CrossDomainMessenger - */ - function replayMessage( - address _target, - address _sender, - bytes memory _message, - uint256 _messageNonce, - uint32 _gasLimit - ) - override - public - { - bytes memory xDomainCalldata = _getXDomainCalldata( - _target, - _sender, - _message, - _messageNonce - ); - - require( - sentMessages[keccak256(xDomainCalldata)] == true, - "Provided message has not already been sent." - ); - - _sendXDomainMessage(xDomainCalldata, _gasLimit); - } - - - /********************** - * Internal Functions * - **********************/ - - /** - * Verifies that the given message is valid. - * @param _xDomainCalldata Calldata to verify. - * @param _proof Inclusion proof for the message. - * @return Whether or not the provided message is valid. - */ - function _verifyXDomainMessage( - bytes memory _xDomainCalldata, - L2MessageInclusionProof memory _proof - ) - internal - view - returns ( - bool - ) - { - return ( - _verifyStateRootProof(_proof) - && _verifyStorageProof(_xDomainCalldata, _proof) - ); - } - - /** - * Verifies that the state root within an inclusion proof is valid. - * @param _proof Message inclusion proof. - * @return Whether or not the provided proof is valid. - */ - function _verifyStateRootProof( - L2MessageInclusionProof memory _proof - ) - internal - view - returns ( - bool - ) - { - iOVM_StateCommitmentChain ovmStateCommitmentChain = iOVM_StateCommitmentChain(resolve("OVM_StateCommitmentChain")); - - return ( - ovmStateCommitmentChain.verifyStateCommitment( - _proof.stateRoot, - _proof.stateRootBatchHeader, - _proof.stateRootProof - ) - ); - } - - /** - * Verifies that the storage proof within an inclusion proof is valid. - * @param _xDomainCalldata Encoded message calldata. - * @param _proof Message inclusion proof. - * @return Whether or not the provided proof is valid. - */ - function _verifyStorageProof( - bytes memory _xDomainCalldata, - L2MessageInclusionProof memory _proof - ) - internal - view - returns ( - bool - ) - { - bytes32 storageKey = keccak256( - abi.encodePacked( - keccak256( - abi.encodePacked( - _xDomainCalldata, - resolve("OVM_L2CrossDomainMessenger") - ) - ), - uint256(0) - ) - ); - - ( - bool exists, - bytes memory encodedMessagePassingAccount - ) = Lib_SecureMerkleTrie.get( - abi.encodePacked(0x4200000000000000000000000000000000000000), - _proof.stateTrieWitness, - _proof.stateRoot - ); - - require( - exists == true, - "Message passing predeploy has not been initialized or invalid proof provided." - ); - - Lib_OVMCodec.EVMAccount memory account = Lib_OVMCodec.decodeEVMAccount( - encodedMessagePassingAccount - ); - - return Lib_SecureMerkleTrie.verifyInclusionProof( - abi.encodePacked(storageKey), - abi.encodePacked(uint8(1)), - _proof.storageTrieWitness, - account.storageRoot - ); - } - - /** - * Sends a cross domain message. - * @param _message Message to send. - * @param _gasLimit OVM gas limit for the message. - */ - function _sendXDomainMessage( - bytes memory _message, - uint256 _gasLimit - ) - override - internal - { - revert("Sending via this messenger is disabled"); - } -} diff --git a/packages/contracts/deploy/017-OVM_L1CustomCrossDomainMessenger.deploy.ts b/packages/contracts/deploy/017-OVM_L1CustomCrossDomainMessenger.deploy.ts deleted file mode 100644 index a06e230b432c..000000000000 --- a/packages/contracts/deploy/017-OVM_L1CustomCrossDomainMessenger.deploy.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* Imports: External */ -import { DeployFunction } from 'hardhat-deploy/dist/types' - -/* Imports: Internal */ -import { getDeployedContract } from '../src/hardhat-deploy-ethers' - -const deployFn: DeployFunction = async (hre) => { - const { deploy } = hre.deployments - const { deployer } = await hre.getNamedAccounts() - - const Lib_AddressManager = await getDeployedContract( - hre, - 'Lib_AddressManager', - { - signerOrProvider: deployer, - } - ) - - const result = await deploy('OVM_L1CustomCrossDomainMessenger', { - from: deployer, - args: [], - log: true, - }) - - if (!result.newlyDeployed) { - return - } - - const OVM_L1CustomCrossDomainMessenger = await getDeployedContract( - hre, - 'OVM_L1CustomCrossDomainMessenger', - { - signerOrProvider: deployer, - } - ) - - // NOTE: this initialization is *not* technically required (we only need to initialize the proxy) - // but it feels safer to initialize this anyway. Otherwise someone else could come along and - // initialize this. - await OVM_L1CustomCrossDomainMessenger.initialize(Lib_AddressManager.address) - - const libAddressManager = await OVM_L1CustomCrossDomainMessenger.libAddressManager() - if (libAddressManager !== Lib_AddressManager.address) { - throw new Error( - `\n**FATAL ERROR. THIS SHOULD NEVER HAPPEN. CHECK YOUR DEPLOYMENT.**:\n` + - `OVM_L1CustomCrossDomainMessenger could not be succesfully initialized.\n` + - `Attempted to set Lib_AddressManager to: ${Lib_AddressManager.address}\n` + - `Actual address after initialization: ${libAddressManager}\n` + - `This could indicate a compromised deployment.` - ) - } - - await Lib_AddressManager.setAddress( - 'OVM_L1CustomCrossDomainMessenger', - result.address - ) -} - -deployFn.dependencies = ['Lib_AddressManager'] -deployFn.tags = ['OVM_L1CustomCrossDomainMessenger'] - -export default deployFn diff --git a/packages/contracts/deploy/019-finalize.ts b/packages/contracts/deploy/017-finalize.ts similarity index 100% rename from packages/contracts/deploy/019-finalize.ts rename to packages/contracts/deploy/017-finalize.ts diff --git a/packages/contracts/deploy/018-Proxy__OVM_L1CustomCrossDomainMessenger.deploy.ts b/packages/contracts/deploy/018-Proxy__OVM_L1CustomCrossDomainMessenger.deploy.ts deleted file mode 100644 index 30595dabb72e..000000000000 --- a/packages/contracts/deploy/018-Proxy__OVM_L1CustomCrossDomainMessenger.deploy.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* Imports: External */ -import { DeployFunction } from 'hardhat-deploy/dist/types' - -/* Imports: Internal */ -import { getDeployedContract } from '../src/hardhat-deploy-ethers' - -const deployFn: DeployFunction = async (hre) => { - const { deploy } = hre.deployments - const { deployer } = await hre.getNamedAccounts() - - const Lib_AddressManager = await getDeployedContract( - hre, - 'Lib_AddressManager', - { - signerOrProvider: deployer, - } - ) - - const result = await deploy('Proxy__OVM_L1CustomCrossDomainMessenger', { - contract: 'Lib_ResolvedDelegateProxy', - from: deployer, - args: [Lib_AddressManager.address, 'OVM_L1CustomCrossDomainMessenger'], - log: true, - }) - - if (!result.newlyDeployed) { - return - } - - const Proxy__OVM_L1CustomCrossDomainMessenger = await getDeployedContract( - hre, - 'Proxy__OVM_L1CustomCrossDomainMessenger', - { - signerOrProvider: deployer, - iface: 'OVM_L1CustomCrossDomainMessenger', - } - ) - - await Proxy__OVM_L1CustomCrossDomainMessenger.initialize(Lib_AddressManager.address) - - const libAddressManager = await Proxy__OVM_L1CustomCrossDomainMessenger.libAddressManager() - if (libAddressManager !== Lib_AddressManager.address) { - throw new Error( - `\n**FATAL ERROR. THIS SHOULD NEVER HAPPEN. CHECK YOUR DEPLOYMENT.**:\n` + - `Proxy__OVM_L1CustomCrossDomainMessenger could not be succesfully initialized.\n` + - `Attempted to set Lib_AddressManager to: ${Lib_AddressManager.address}\n` + - `Actual address after initialization: ${libAddressManager}\n` + - `This could indicate a compromised deployment.` - ) - } - - await Lib_AddressManager.setAddress( - 'Proxy__OVM_L1CustomCrossDomainMessenger', - result.address - ) -} - -deployFn.dependencies = ['Lib_AddressManager', 'OVM_L1CustomCrossDomainMessenger'] -deployFn.tags = ['Proxy__OVM_L1CustomCrossDomainMessenger'] - -export default deployFn diff --git a/packages/contracts/src/contract-deployment/config.ts b/packages/contracts/src/contract-deployment/config.ts index 13b7eb1271de..4f1ad42a9b79 100644 --- a/packages/contracts/src/contract-deployment/config.ts +++ b/packages/contracts/src/contract-deployment/config.ts @@ -30,9 +30,6 @@ export interface RollupDeployConfig { l1CrossDomainMessengerConfig: { relayerAddress?: string | Signer } - l1CustomCrossDomainMessengerConfig: { - //Add any specially needed setting here - } whitelistConfig: { owner: string | Signer allowArbitraryContractDeployment: boolean @@ -110,20 +107,6 @@ export const makeContractDeployConfig = async ( ) }, }, - //does not currently need afterDeploys - //but that could change so stubbing in - OVM_L1CustomCrossDomainMessenger: { - factory: getContractFactory('OVM_L1CustomCrossDomainMessenger'), - params: [] - //afterDeploy: [] This is where to add afterDeploys, if needed - }, - //does not currently need afterDeploys - //but that could change so stubbing in - Proxy__OVM_L1CustomCrossDomainMessenger: { - factory: getContractFactory('Lib_ResolvedDelegateProxy'), - params: [AddressManager.address, 'OVM_L1CustomCrossDomainMessenger'] - //afterDeploy: [] This is where to add afterDeploys, if needed - }, OVM_L1ETHGateway: { factory: getContractFactory('OVM_L1ETHGateway'), params: [], diff --git a/packages/contracts/src/state-dump/make-dump.ts b/packages/contracts/src/state-dump/make-dump.ts index 30a509098e7f..42179e516bc2 100644 --- a/packages/contracts/src/state-dump/make-dump.ts +++ b/packages/contracts/src/state-dump/make-dump.ts @@ -122,7 +122,6 @@ export const makeStateDump = async (cfg: RollupDeployConfig): Promise => { allowArbitraryContractDeployment: true, }, l1CrossDomainMessengerConfig: {}, - l1CustomCrossDomainMessengerConfig: {}, dependencies: [ 'ERC1820Registry', 'Lib_AddressManager', diff --git a/packages/message-relayer/src/service.ts b/packages/message-relayer/src/service.ts index 9568f3e1ea23..884f1c03ab00 100644 --- a/packages/message-relayer/src/service.ts +++ b/packages/message-relayer/src/service.ts @@ -357,7 +357,9 @@ export class MessageRelayerService extends BaseService { } private async _isTransactionFinalized(height: number): Promise { + this.logger.info('Checking if tx is finalized', { height }) + const header = await this._getStateBatchHeader(height) if (header === undefined) { @@ -367,9 +369,11 @@ export class MessageRelayerService extends BaseService { this.logger.info('Got state batch header', { header }) } - return !(await this.state.OVM_StateCommitmentChain.insideFraudProofWindow( - header.batch - )) + return true + + // return !(await this.state.OVM_StateCommitmentChain.insideFraudProofWindow( + // header.batch + // )) } /** diff --git a/packages/omgx/message-relayer-fast/README.md b/packages/omgx/message-relayer-fast/README.md deleted file mode 100644 index f5353930264a..000000000000 --- a/packages/omgx/message-relayer-fast/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# OMGX_CustomCrossDomainMessenger - -Customized L1 Cross Domain Messenger without dispute period time restrictions and associated message relayer service. - -The custom `OVM_L1CrossDomainMessenger` works with the default `OVM_L2CrossDomainMessenger`. The messages from the L2_Messenger can be relayed by the custom messenger instead to skip the dispute period and to do that, the bridge/token contract should specify the custom messenger to be the messenger for relays. The custom messenger cannot be used to send cross domain messages. For sending messages the bridge contracts use the default L1_Messenger. - -## Using the custom messenger - -- Deploy `contracts/OVM_L1_CustomCrossDomainMessenger.sol` on L1, this will be the contract used by your contracts for L2->L1 message passing - -- Your bridge/gateway contract must implement `contracts/libraries/OVM_CrossDomainEnabled.sol` instead. This uses the default L1 Messenger to send messages and the custom L1 Messenger to relay. - - -## Running the message-relayer-fast - -Env Settings - - -**THESE ARE OUTDATED!!!** - -``` - -ADDRESS_MANAGER_ADDRESS=
-L1_NODE_WEB3_URL= -L2_NODE_WEB3_URL= -L1_WALLET_KEY= -L1_MESSENGER_ADDRESS= -L1_TARGET= - -``` - -Running the message relayer -``` - -cd relayer_service -yarn install -yarn build -yarn start - -``` - -## Build a DockerHub Message Relayer Alt - -To build the Message Relayer Alt docker image: - -```bash - -docker build . --file Dockerfile.message-relayer-fast --tag omgx/custom-message-relayer:latest -docker push omgx/custom-message-relayer:latest - -``` \ No newline at end of file diff --git a/packages/omgx/message-relayer-fast/contracts/OVM_L1CrossDomainMessenger.sol b/packages/omgx/message-relayer-fast/contracts/OVM_L1CrossDomainMessenger.sol deleted file mode 100644 index 6d3b2eb6237a..000000000000 --- a/packages/omgx/message-relayer-fast/contracts/OVM_L1CrossDomainMessenger.sol +++ /dev/null @@ -1,287 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >0.5.0 <0.8.0; -pragma experimental ABIEncoderV2; - -/* Library Imports */ -import { Lib_OVMCodec } from "@eth-optimism/contracts/libraries/codec/Lib_OVMCodec.sol"; -import { Lib_AddressResolver } from "@eth-optimism/contracts/libraries/resolver/Lib_AddressResolver.sol"; -import { Lib_AddressManager } from "@eth-optimism/contracts/libraries/resolver/Lib_AddressManager.sol"; -import { Lib_SecureMerkleTrie } from "@eth-optimism/contracts/libraries/trie/Lib_SecureMerkleTrie.sol"; - -/* Interface Imports */ -import { iOVM_L1CrossDomainMessenger } from "@eth-optimism/contracts/iOVM/bridge/messaging/iOVM_L1CrossDomainMessenger.sol"; -import { iOVM_CanonicalTransactionChain } from "@eth-optimism/contracts/iOVM/chain/iOVM_CanonicalTransactionChain.sol"; -import { iOVM_StateCommitmentChain } from "@eth-optimism/contracts/iOVM/chain/iOVM_StateCommitmentChain.sol"; - -/* Contract Imports */ -import { Abs_BaseCrossDomainMessenger } from "@eth-optimism/contracts/OVM/bridge/messaging/Abs_BaseCrossDomainMessenger.sol"; - -/** - * @title OVM_L1CrossDomainMessenger - * @dev The L1 Cross Domain Messenger contract sends messages from L1 to L2, and relays messages from L2 onto L1. - * In the event that a message sent from L1 to L2 is rejected for exceeding the L2 epoch gas limit, it can be resubmitted - * via this contract's replay function. - * - * Compiler used: solc - * Runtime target: EVM - */ -contract OVM_L1CrossDomainMessenger is iOVM_L1CrossDomainMessenger, Abs_BaseCrossDomainMessenger, Lib_AddressResolver { - - /*************** - * Constructor * - ***************/ - - /** - * Pass a default zero address to the address resolver. This will be updated when initialized. - */ - constructor() - Lib_AddressResolver(address(0)) - {} - - /** - * @param _libAddressManager Address of the Address Manager. - */ - function initialize( - address _libAddressManager - ) - public - { - require(address(libAddressManager) == address(0), "L1CrossDomainMessenger already intialized."); - libAddressManager = Lib_AddressManager(_libAddressManager); - xDomainMsgSender = DEFAULT_XDOMAIN_SENDER; - } - - - /********************** - * Function Modifiers * - **********************/ - - /** - * Modifier to enforce that, if configured, only the OVM_L2MessageRelayer contract may successfully call a method. - */ - modifier onlyRelayer() { - address relayer = resolve("OVM_L2MessageRelayer"); - if (relayer != address(0)) { - require( - msg.sender == relayer, - "Only OVM_L2MessageRelayer can relay L2-to-L1 messages." - ); - } - _; - } - - - /******************** - * Public Functions * - ********************/ - - /** - * Relays a cross domain message to a contract. - * @inheritdoc iOVM_L1CrossDomainMessenger - */ - function relayMessage( - address _target, - address _sender, - bytes memory _message, - uint256 _messageNonce, - L2MessageInclusionProof memory _proof - ) - override - public - onlyRelayer() - { - bytes memory xDomainCalldata = _getXDomainCalldata( - _target, - _sender, - _message, - _messageNonce - ); - - require( - _verifyXDomainMessage( - xDomainCalldata, - _proof - ) == true, - "Provided message could not be verified." - ); - - bytes32 xDomainCalldataHash = keccak256(xDomainCalldata); - - require( - successfulMessages[xDomainCalldataHash] == false, - "Provided message has already been received." - ); - - xDomainMsgSender = _sender; - (bool success, ) = _target.call(_message); - xDomainMsgSender = DEFAULT_XDOMAIN_SENDER; - - // Mark the message as received if the call was successful. Ensures that a message can be - // relayed multiple times in the case that the call reverted. - if (success == true) { - successfulMessages[xDomainCalldataHash] = true; - emit RelayedMessage(xDomainCalldataHash); - } - - // Store an identifier that can be used to prove that the given message was relayed by some - // user. Gives us an easy way to pay relayers for their work. - bytes32 relayId = keccak256( - abi.encodePacked( - xDomainCalldata, - msg.sender, - block.number - ) - ); - relayedMessages[relayId] = true; - } - - /** - * Replays a cross domain message to the target messenger. - * @inheritdoc iOVM_L1CrossDomainMessenger - */ - function replayMessage( - address _target, - address _sender, - bytes memory _message, - uint256 _messageNonce, - uint32 _gasLimit - ) - override - public - { - bytes memory xDomainCalldata = _getXDomainCalldata( - _target, - _sender, - _message, - _messageNonce - ); - - require( - sentMessages[keccak256(xDomainCalldata)] == true, - "Provided message has not already been sent." - ); - - _sendXDomainMessage(xDomainCalldata, _gasLimit); - } - - - /********************** - * Internal Functions * - **********************/ - - /** - * Verifies that the given message is valid. - * @param _xDomainCalldata Calldata to verify. - * @param _proof Inclusion proof for the message. - * @return Whether or not the provided message is valid. - */ - function _verifyXDomainMessage( - bytes memory _xDomainCalldata, - L2MessageInclusionProof memory _proof - ) - internal - view - returns ( - bool - ) - { - return ( - _verifyStateRootProof(_proof) - && _verifyStorageProof(_xDomainCalldata, _proof) - ); - } - - /** - * Verifies that the state root within an inclusion proof is valid. - * @param _proof Message inclusion proof. - * @return Whether or not the provided proof is valid. - */ - function _verifyStateRootProof( - L2MessageInclusionProof memory _proof - ) - internal - view - returns ( - bool - ) - { - iOVM_StateCommitmentChain ovmStateCommitmentChain = iOVM_StateCommitmentChain(resolve("OVM_StateCommitmentChain")); - - return ( - ovmStateCommitmentChain.verifyStateCommitment( - _proof.stateRoot, - _proof.stateRootBatchHeader, - _proof.stateRootProof - ) - ); - } - - /** - * Verifies that the storage proof within an inclusion proof is valid. - * @param _xDomainCalldata Encoded message calldata. - * @param _proof Message inclusion proof. - * @return Whether or not the provided proof is valid. - */ - function _verifyStorageProof( - bytes memory _xDomainCalldata, - L2MessageInclusionProof memory _proof - ) - internal - view - returns ( - bool - ) - { - bytes32 storageKey = keccak256( - abi.encodePacked( - keccak256( - abi.encodePacked( - _xDomainCalldata, - resolve("OVM_L2CrossDomainMessenger") - ) - ), - uint256(0) - ) - ); - - ( - bool exists, - bytes memory encodedMessagePassingAccount - ) = Lib_SecureMerkleTrie.get( - abi.encodePacked(0x4200000000000000000000000000000000000000), - _proof.stateTrieWitness, - _proof.stateRoot - ); - - require( - exists == true, - "Message passing predeploy has not been initialized or invalid proof provided." - ); - - Lib_OVMCodec.EVMAccount memory account = Lib_OVMCodec.decodeEVMAccount( - encodedMessagePassingAccount - ); - - return Lib_SecureMerkleTrie.verifyInclusionProof( - abi.encodePacked(storageKey), - abi.encodePacked(uint8(1)), - _proof.storageTrieWitness, - account.storageRoot - ); - } - - /** - * Sends a cross domain message. - * @param _message Message to send. - * @param _gasLimit OVM gas limit for the message. - */ - function _sendXDomainMessage( - bytes memory _message, - uint256 _gasLimit - ) - override - internal - { - revert("Sending via this messenger is disabled"); - } -} diff --git a/packages/omgx/message-relayer-fast/contracts/libraries/OVM_CrossDomainEnabled.sol b/packages/omgx/message-relayer-fast/contracts/libraries/OVM_CrossDomainEnabled.sol deleted file mode 100644 index cf0e19595550..000000000000 --- a/packages/omgx/message-relayer-fast/contracts/libraries/OVM_CrossDomainEnabled.sol +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >0.5.0 <0.8.0; -/* Interface Imports */ -import { iAbs_BaseCrossDomainMessenger } from "@eth-optimism/contracts/iOVM/bridge/messaging/iAbs_BaseCrossDomainMessenger.sol"; - -/** - * @title OVM_CrossDomainEnabled - * @dev Helper contract for contracts performing cross-domain communications - * - * Compiler used: defined by inheriting contract - * Runtime target: defined by inheriting contract - */ -contract OVM_CrossDomainEnabled { - // Messenger contract used to send and recieve messages from the other domain. - address public senderMessenger; - address public relayerMessenger; - - /*************** - * Constructor * - ***************/ - constructor( - address _senderMessenger, - address _relayerMessenger - ) { - senderMessenger = _senderMessenger; - relayerMessenger = _relayerMessenger; - } - - /********************** - * Function Modifiers * - **********************/ - - /** - * @notice Enforces that the modified function is only callable by a specific cross-domain account. - * @param _sourceDomainAccount The only account on the originating domain which is authenticated to call this function. - */ - modifier onlyFromCrossDomainAccount( - address _sourceDomainAccount - ) { - require( - msg.sender == address(getCrossDomainRelayerMessenger()), - "OVM_XCHAIN: messenger contract unauthenticated" - ); - - require( - getCrossDomainRelayerMessenger().xDomainMessageSender() == _sourceDomainAccount, - "OVM_XCHAIN: wrong sender of cross-domain message" - ); - - _; - } - - /********************** - * Internal Functions * - **********************/ - - /** - * @notice Gets the messenger, usually from storage. This function is exposed in case a child contract needs to override. - * @return The address of the cross-domain messenger contract which should be used. - */ - function getCrossDomainSenderMessenger() - internal - virtual - returns( - iAbs_BaseCrossDomainMessenger - ) - { - return iAbs_BaseCrossDomainMessenger(senderMessenger); - } - - /** - * @notice Gets the messenger, usually from storage. This function is exposed in case a child contract needs to override. - * @return The address of the cross-domain messenger contract which should be used. - */ - function getCrossDomainRelayerMessenger() - internal - virtual - returns( - iAbs_BaseCrossDomainMessenger - ) - { - return iAbs_BaseCrossDomainMessenger(relayerMessenger); - } - - /** - * @notice Sends a message to an account on another domain - * @param _crossDomainTarget The intended recipient on the destination domain - * @param _data The data to send to the target (usually calldata to a function with `onlyFromCrossDomainAccount()`) - * @param _gasLimit The gasLimit for the receipt of the message on the target domain. - */ - function sendCrossDomainMessage( - address _crossDomainTarget, - bytes memory _data, - uint32 _gasLimit - ) internal { - getCrossDomainSenderMessenger().sendMessage(_crossDomainTarget, _data, _gasLimit); - } -} diff --git a/packages/omgx/message-relayer-fast/exec/run-message-relayer-fast.js b/packages/omgx/message-relayer-fast/exec/run-message-relayer-fast.js deleted file mode 100644 index 734b4a1499b1..000000000000 --- a/packages/omgx/message-relayer-fast/exec/run-message-relayer-fast.js +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env node - -const main = require("../dist/exec/run").default - -;(async () => { - await main() -})().catch((err) => { - console.log(err) - process.exit(1) -}) diff --git a/packages/omgx/message-relayer-fast/package.json b/packages/omgx/message-relayer-fast/package.json deleted file mode 100644 index f7c73e6703c3..000000000000 --- a/packages/omgx/message-relayer-fast/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "@omgx/message-relayer-fast", - "version": "0.1.1", - "private": true, - "description": "Fast Cross Domain Message Relayer service", - "main": "dist/index", - "types": "dist/index", - "files": [ - "dist/index" - ], - "scripts": { - "start": "node ./exec/run-message-relayer-fast.js", - "build": "tsc -p ./tsconfig.build.json", - "clean": "rimraf dist/ ./tsconfig.build.tsbuildinfo", - "lint": "yarn lint:fix && yarn lint:check", - "lint:fix": "prettier --config .prettierrc.json --write \"{src,exec,test}/**/*.ts\"", - "lint:check": "tslint --format stylish --project ." - }, - "keywords": [ - "optimism", - "ethereum", - "relayer" - ], - "homepage": "https://github.com/ethereum-optimism/optimism-monorepo/tree/master/packages/batch-submitter#readme", - "license": "MIT", - "author": "Optimism PBC", - "repository": { - "type": "git", - "url": "https://github.com/ethereum-optimism/optimism.git" - }, - "dependencies": { - "@eth-optimism/common-ts": "^0.1.0", - "bcfg": "^0.1.6", - "@eth-optimism/contracts": "^0.3.4", - "@eth-optimism/core-utils": "^0.4.2", - "dotenv": "^8.2.0", - "ethers": "^5.1.0", - "ganache-core": "^2.13.2", - "google-spreadsheet": "^3.1.15", - "merkletreejs": "^0.2.18", - "rlp": "^2.2.6" - }, - "devDependencies": { - "prettier": "^2.2.1", - "tslint": "^6.1.3", - "tslint-config-prettier": "^1.18.0", - "tslint-no-focused-test": "^0.5.0", - "tslint-plugin-prettier": "^2.3.0", - "typescript": "^4.2.4" - } -} diff --git a/packages/omgx/message-relayer-fast/src/exec/run.ts b/packages/omgx/message-relayer-fast/src/exec/run.ts deleted file mode 100644 index adbc94c81874..000000000000 --- a/packages/omgx/message-relayer-fast/src/exec/run.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { Wallet, providers } from 'ethers' -import { MessageRelayerService } from '../service' -import { Bcfg } from '@eth-optimism/core-utils' -import SpreadSheet from '../spreadsheet' -import * as dotenv from 'dotenv' -import Config from 'bcfg' - -dotenv.config() - -const main = async () => { - const config: Bcfg = new Config('message-relayer') - config.load({ - env: true, - argv: true, - }) - - const env = process.env - const L2_NODE_WEB3_URL = config.str('l2-node-web3-url', env.L2_NODE_WEB3_URL) - const L1_NODE_WEB3_URL = config.str('l1-node-web3-url', env.L1_NODE_WEB3_URL) - const ADDRESS_MANAGER_ADDRESS = config.str( - 'address-manager-address', - env.ADDRESS_MANAGER_ADDRESS - ) - //this is now loaded from the deployer - // const L1_MESSENGER_ADDRESS = config.str( - // 'l1-messenger-address', - // env.L1_MESSENGER_ADDRESS - // ) - const L1_TARGET = config.str('l1-target', env.L1_TARGET || "0x0") - const L1_WALLET_KEY = config.str('l1-wallet-key', env.L1_WALLET_KEY) - const MNEMONIC = config.str('mnemonic', env.MNEMONIC) - const HD_PATH = config.str('hd-path', env.HD_PATH) - const RELAY_GAS_LIMIT = config.uint( - 'relay-gas-limit', - parseInt(env.RELAY_GAS_LIMIT, 10) || 4000000 - ) - const POLLING_INTERVAL = config.uint( - 'polling-interval', - parseInt(env.POLLING_INTERVAL, 10) || 5000 - ) - const GET_LOGS_INTERVAL = config.uint( - 'get-logs-interval', - parseInt(env.GET_LOGS_INTERVAL, 10) || 2000 - ) - const L2_BLOCK_OFFSET = config.uint( - 'l2-start-offset', - parseInt(env.L2_BLOCK_OFFSET, 10) || 1 - ) - const L1_START_OFFSET = config.uint( - 'l1-start-offset', - parseInt(env.L1_BLOCK_OFFSET, 10) || 1 - ) - const FROM_L2_TRANSACTION_INDEX = config.uint( - 'from-l2-transaction-index', - parseInt(env.FROM_L2_TRANSACTION_INDEX, 10) || 0 - ) - - // Spreadsheet configuration - const SPREADSHEET_MODE = config.bool( - 'spreadsheet-mode', - !!env.SPREADSHEET_MODE || false - ) - const SHEET_ID = config.str('sheet-id', env.SHEET_ID) - const CLIENT_EMAIL = config.str('client-email', env.CLIENT_EMAIL) - const CLIENT_PRIVATE_KEY = config.str( - 'client-private-key', - env.CLIENT_PRIVATE_KEY - ) - - if (!ADDRESS_MANAGER_ADDRESS) { - throw new Error('Must pass ADDRESS_MANAGER_ADDRESS') - } - // if (!L1_MESSENGER_ADDRESS) { - // throw new Error('Must pass L1_MESSENGER_ADDRESS') - // } - if (!L1_TARGET) { - throw new Error('Must pass L1_TARGET') - } - if (!L1_NODE_WEB3_URL) { - throw new Error('Must pass L1_NODE_WEB3_URL') - } - if (!L2_NODE_WEB3_URL) { - throw new Error('Must pass L2_NODE_WEB3_URL') - } - - const l2Provider = new providers.JsonRpcProvider(L2_NODE_WEB3_URL) - const l1Provider = new providers.JsonRpcProvider(L1_NODE_WEB3_URL) - - let wallet: Wallet - if (L1_WALLET_KEY) { - wallet = new Wallet(L1_WALLET_KEY, l1Provider) - } else if (MNEMONIC) { - wallet = Wallet.fromMnemonic(MNEMONIC, HD_PATH) - wallet = wallet.connect(l1Provider) - } else { - throw new Error('Must pass one of L1_WALLET_KEY or MNEMONIC') - } - - let spreadsheet = null - if (SPREADSHEET_MODE) { - if (!SHEET_ID) { - throw new Error('Must pass SHEET_ID') - } - if (!CLIENT_EMAIL) { - throw new Error('Must pass CLIENT_EMAIL') - } - if (!CLIENT_PRIVATE_KEY) { - throw new Error('Must pass CLIENT_PRIVATE_KEY') - } - const privateKey = CLIENT_PRIVATE_KEY.replace(/\\n/g, '\n') - spreadsheet = new SpreadSheet(SHEET_ID) - await spreadsheet.init(CLIENT_EMAIL, privateKey) - } - - const service = new MessageRelayerService({ - l1RpcProvider: l1Provider, - l2RpcProvider: l2Provider, - addressManagerAddress: ADDRESS_MANAGER_ADDRESS, - //l1MessengerAddress: L1_MESSENGER_ADDRESS, - l1Target: L1_TARGET, - l1Wallet: wallet, - relayGasLimit: RELAY_GAS_LIMIT, - fromL2TransactionIndex: FROM_L2_TRANSACTION_INDEX, - pollingInterval: POLLING_INTERVAL, - l2BlockOffset: L2_BLOCK_OFFSET, - l1StartOffset: L1_START_OFFSET, - getLogsInterval: GET_LOGS_INTERVAL, - spreadsheetMode: !!SPREADSHEET_MODE, - spreadsheet, - }) - - await service.start() -} -export default main diff --git a/packages/omgx/message-relayer-fast/src/service.ts b/packages/omgx/message-relayer-fast/src/service.ts deleted file mode 100644 index ad1a147a29b4..000000000000 --- a/packages/omgx/message-relayer-fast/src/service.ts +++ /dev/null @@ -1,557 +0,0 @@ -/* Imports: External */ -import { Contract, ethers, Wallet, BigNumber, providers } from 'ethers' -import * as rlp from 'rlp' -import { MerkleTree } from 'merkletreejs' - -/* Imports: Internal */ -import { fromHexString, sleep } from '@eth-optimism/core-utils' -import { BaseService } from '@eth-optimism/common-ts' -import SpreadSheet from './spreadsheet' - -import { loadContract, loadContractFromManager } from '@eth-optimism/contracts' -import { StateRootBatchHeader, SentMessage, SentMessageProof } from './types' - -interface MessageRelayerOptions { - // Providers for interacting with L1 and L2. - l1RpcProvider: providers.JsonRpcProvider - l2RpcProvider: providers.JsonRpcProvider - - // Address of the AddressManager contract, used to resolve the various addresses we'll need - // within this service. - addressManagerAddress: string - - //l1MessengerAddress: string - - l1Target: string - - // Wallet instance, used to sign and send the L1 relay transactions. - l1Wallet: Wallet - - // Max gas to relay messages with. - relayGasLimit: number - - // Height of the L2 transaction to start searching for L2->L1 messages. - fromL2TransactionIndex?: number - - // Interval in seconds to wait between loops. - pollingInterval?: number - - // Number of blocks that L2 is "ahead" of transaction indices. Can happen if blocks are created - // on L2 after the genesis but before the first state commitment is published. - l2BlockOffset?: number - - // L1 block to start querying events from. Recommended to set to the StateCommitmentChain deploy height - l1StartOffset?: number - - // Number of blocks within each getLogs query - max is 2000 - getLogsInterval?: number - - // Append txs to a spreadsheet instead of submitting transactions - spreadsheetMode?: boolean - spreadsheet?: SpreadSheet -} - -const optionSettings = { - relayGasLimit: { default: 4_000_000 }, - fromL2TransactionIndex: { default: 0 }, - pollingInterval: { default: 5000 }, - l2BlockOffset: { default: 1 }, - l1StartOffset: { default: 0 }, - getLogsInterval: { default: 2000 }, - spreadsheetMode: { default: false }, -} - -export class MessageRelayerService extends BaseService { - constructor(options: MessageRelayerOptions) { - super('Message_Relayer', options, optionSettings) - } - - protected spreadsheetMode: boolean - protected spreadsheet: SpreadSheet - - private state: { - lastFinalizedTxHeight: number - nextUnfinalizedTxHeight: number - lastQueriedL1Block: number - eventCache: ethers.Event[] - Lib_AddressManager: Contract - OVM_StateCommitmentChain: Contract - OVM_L1CustomCrossDomainMessenger: Contract - OVM_L2CrossDomainMessenger: Contract - OVM_L2ToL1MessagePasser: Contract - } - - protected async _init(): Promise { - this.logger.info('Initializing message relayer', { - relayGasLimit: this.options.relayGasLimit, - fromL2TransactionIndex: this.options.fromL2TransactionIndex, - pollingInterval: this.options.pollingInterval, - l2BlockOffset: this.options.l2BlockOffset, - getLogsInterval: this.options.getLogsInterval, - spreadSheetMode: this.options.spreadsheetMode, - }) - // Need to improve this, sorry. - this.state = {} as any - - const address = await this.options.l1Wallet.getAddress() - this.logger.info('Using L1 EOA', { address }) - - this.state.Lib_AddressManager = loadContract( - 'Lib_AddressManager', - this.options.addressManagerAddress, - this.options.l1RpcProvider - ) - - this.logger.info('Connecting to OVM_StateCommitmentChain...') - this.state.OVM_StateCommitmentChain = await loadContractFromManager({ - name: 'OVM_StateCommitmentChain', - Lib_AddressManager: this.state.Lib_AddressManager, - provider: this.options.l1RpcProvider, - }) - this.logger.info('Connected to OVM_StateCommitmentChain', { - address: this.state.OVM_StateCommitmentChain.address, - }) - - this.logger.info('Connecting to OVM_L1CustomCrossDomainMessenger...') - this.state.OVM_L1CustomCrossDomainMessenger = await loadContractFromManager({ - name: 'OVM_L1CustomCrossDomainMessenger', - proxy: 'Proxy__OVM_L1CustomCrossDomainMessenger', - Lib_AddressManager: this.state.Lib_AddressManager, - provider: this.options.l1RpcProvider, - }) - this.logger.info('Connected to OVM_L1CustomCrossDomainMessenger', { - address: this.state.OVM_L1CustomCrossDomainMessenger.address, - }) - - this.logger.info('Connecting to OVM_L2CrossDomainMessenger...') - this.state.OVM_L2CrossDomainMessenger = await loadContractFromManager({ - name: 'OVM_L2CrossDomainMessenger', - Lib_AddressManager: this.state.Lib_AddressManager, - provider: this.options.l2RpcProvider, - }) - this.logger.info('Connected to OVM_L2CrossDomainMessenger', { - address: this.state.OVM_L2CrossDomainMessenger.address, - }) - - this.logger.info('Connecting to OVM_L2ToL1MessagePasser...') - this.state.OVM_L2ToL1MessagePasser = loadContract( - 'OVM_L2ToL1MessagePasser', - '0x4200000000000000000000000000000000000000', - this.options.l2RpcProvider - ) - this.logger.info('Connected to OVM_L2ToL1MessagePasser', { - address: this.state.OVM_L2ToL1MessagePasser.address, - }) - - this.logger.info('Connected to all contracts.') - - if (this.options.spreadsheetMode) { - this.logger.info('Running in spreadsheet mode') - } - - this.state.lastQueriedL1Block = this.options.l1StartOffset - this.state.eventCache = [] - - this.state.lastFinalizedTxHeight = this.options.fromL2TransactionIndex || 0 - this.state.nextUnfinalizedTxHeight = - this.options.fromL2TransactionIndex || 0 - } - - protected async _start(): Promise { - while (this.running) { - await sleep(this.options.pollingInterval) - - try { - // Check that the correct address is set in the address manager - const relayer = await this.state.Lib_AddressManager.getAddress( - 'OVM_L2MessageRelayer' - ) - // If it is address(0), then message relaying is not authenticated - if (relayer !== ethers.constants.AddressZero) { - const address = await this.options.l1Wallet.getAddress() - if (relayer !== address) { - throw new Error( - `OVM_L2MessageRelayer (${relayer}) is not set to message-passer EOA ${address}` - ) - } - } - - this.logger.info('Checking for newly finalized transactions...') - if ( - !(await this._isTransactionFinalized( - this.state.nextUnfinalizedTxHeight - )) - ) { - this.logger.info('Did not find any newly finalized transactions', { - retryAgainInS: Math.floor(this.options.pollingInterval / 1000), - }) - - continue - } - - this.state.lastFinalizedTxHeight = this.state.nextUnfinalizedTxHeight - while ( - await this._isTransactionFinalized(this.state.nextUnfinalizedTxHeight) - ) { - const size = ( - await this._getStateBatchHeader(this.state.nextUnfinalizedTxHeight) - ).batch.batchSize.toNumber() - this.logger.info( - 'Found a batch of finalized transaction(s), checking for more...', - { batchSize: size } - ) - this.state.nextUnfinalizedTxHeight += size - } - - this.logger.info('Found finalized transactions', { - totalNumber: - this.state.nextUnfinalizedTxHeight - - this.state.lastFinalizedTxHeight, - }) - - const messages = await this._getSentMessages( - this.state.lastFinalizedTxHeight, - this.state.nextUnfinalizedTxHeight - ) - - if (messages.length === 0) { - this.logger.info('Did not find any L2->L1 messages', { - retryAgainInS: Math.floor(this.options.pollingInterval / 1000), - }) - } - - for (const message of messages) { - this.logger.info('Found a message sent during transaction', { - index: message.parentTransactionIndex, - }) - if (await this._wasMessageRelayed(message)) { - this.logger.info('Message has already been relayed, skipping.') - continue - } - - if (this.options.l1Target !== message.target) { - if (this.options.l1Target !== '0x0') { - this.logger.info('Message not intended for target, skipping.') - continue - } - } - - this.logger.info( - 'Message not yet relayed. Attempting to generate a proof...' - ) - const proof = await this._getMessageProof(message) - this.logger.info( - 'Successfully generated a proof. Attempting to relay to Layer 1...' - ) - - await this._relayMessageToL1(message, proof) - } - - this.logger.info( - 'Finished searching through newly finalized transactions', - { - retryAgainInS: Math.floor(this.options.pollingInterval / 1000), - } - ) - } catch (err) { - this.logger.error('Caught an unhandled error', { - message: err.toString(), - stack: err.stack, - code: err.code, - }) - } - } - } - - private async _getStateBatchHeader( - height: number - ): Promise< - | { - batch: StateRootBatchHeader - stateRoots: string[] - } - | undefined - > { - const filter = this.state.OVM_StateCommitmentChain.filters.StateBatchAppended() - - let startingBlock = this.state.lastQueriedL1Block - while ( - startingBlock < (await this.options.l1RpcProvider.getBlockNumber()) - ) { - this.state.lastQueriedL1Block = startingBlock - this.logger.info('Querying events', { - startingBlock, - endBlock: startingBlock + this.options.getLogsInterval, - }) - - const events: ethers.Event[] = await this.state.OVM_StateCommitmentChain.queryFilter( - filter, - startingBlock, - startingBlock + this.options.getLogsInterval - ) - - this.state.eventCache = this.state.eventCache.concat(events) - startingBlock += this.options.getLogsInterval - } - - // tslint:disable-next-line - const event = this.state.eventCache.find((event) => { - return ( - event.args._prevTotalElements.toNumber() <= height && - event.args._prevTotalElements.toNumber() + - event.args._batchSize.toNumber() > - height - ) - }) - - if (event) { - const transaction = await this.options.l1RpcProvider.getTransaction( - event.transactionHash - ) - const [ - stateRoots, - ] = this.state.OVM_StateCommitmentChain.interface.decodeFunctionData( - 'appendStateBatch', - transaction.data - ) - - return { - batch: { - batchIndex: event.args._batchIndex, - batchRoot: event.args._batchRoot, - batchSize: event.args._batchSize, - prevTotalElements: event.args._prevTotalElements, - extraData: event.args._extraData, - }, - stateRoots, - } - } - - return - } - - private async _isTransactionFinalized(height: number): Promise { - this.logger.info('Checking if tx is finalized', { height }) - const header = await this._getStateBatchHeader(height) - - if (header === undefined) { - this.logger.info('No state batch header found.') - return false - } else { - this.logger.info('Got state batch header', { header }) - } - - // decode to get timestamp and check for time elapsed for non-zero dispute period messenger - - // return !(await this.state.OVM_StateCommitmentChain.insideFraudProofWindow( - // header.batch - // )) - return true - } - - private async _getSentMessages( - startHeight: number, - endHeight: number - ): Promise { - const filter = this.state.OVM_L2CrossDomainMessenger.filters.SentMessage() - const events = await this.state.OVM_L2CrossDomainMessenger.queryFilter( - filter, - startHeight + this.options.l2BlockOffset, - endHeight + this.options.l2BlockOffset - 1 - ) - - return events.map((event) => { - const message = event.args.message - const decoded = this.state.OVM_L2CrossDomainMessenger.interface.decodeFunctionData( - 'relayMessage', - message - ) - - return { - target: decoded._target, - sender: decoded._sender, - message: decoded._message, - messageNonce: decoded._messageNonce, - encodedMessage: message, - encodedMessageHash: ethers.utils.keccak256(message), - parentTransactionIndex: event.blockNumber - this.options.l2BlockOffset, - parentTransactionHash: event.transactionHash, - } - }) - } - - private async _wasMessageRelayed(message: SentMessage): Promise { - return this.state.OVM_L1CustomCrossDomainMessenger.successfulMessages( - message.encodedMessageHash - ) - } - - private async _getMessageProof( - message: SentMessage - ): Promise { - const messageSlot = ethers.utils.keccak256( - ethers.utils.keccak256( - message.encodedMessage + - this.state.OVM_L2CrossDomainMessenger.address.slice(2) - ) + '00'.repeat(32) - ) - - // TODO: Complain if the proof doesn't exist. - const proof = await this.options.l2RpcProvider.send('eth_getProof', [ - this.state.OVM_L2ToL1MessagePasser.address, - [messageSlot], - '0x' + - BigNumber.from( - message.parentTransactionIndex + this.options.l2BlockOffset - ) - .toHexString() - .slice(2) - .replace(/^0+/, ''), - ]) - - // TODO: Complain if the batch doesn't exist. - const header = await this._getStateBatchHeader( - message.parentTransactionIndex - ) - - const elements = [] - for ( - let i = 0; - i < Math.pow(2, Math.ceil(Math.log2(header.stateRoots.length))); - i++ - ) { - if (i < header.stateRoots.length) { - elements.push(header.stateRoots[i]) - } else { - elements.push(ethers.utils.keccak256('0x' + '00'.repeat(32))) - } - } - - const hash = (el: Buffer | string): Buffer => { - return Buffer.from(ethers.utils.keccak256(el).slice(2), 'hex') - } - - const leaves = elements.map((element) => { - return fromHexString(element) - }) - - const tree = new MerkleTree(leaves, hash) - const index = - message.parentTransactionIndex - header.batch.prevTotalElements.toNumber() - const treeProof = tree.getProof(leaves[index], index).map((element) => { - return element.data - }) - - return { - stateRoot: header.stateRoots[index], - stateRootBatchHeader: header.batch, - stateRootProof: { - index, - siblings: treeProof, - }, - stateTrieWitness: rlp.encode(proof.accountProof), - storageTrieWitness: rlp.encode(proof.storageProof[0].proof), - } - } - - private async _relayMessageToL1( - message: SentMessage, - proof: SentMessageProof - ): Promise { - if (this.options.spreadsheetMode) { - try { - await this.options.spreadsheet.addRow({ - target: message.target, - sender: message.sender, - message: message.message, - messageNonce: message.messageNonce.toString(), - encodedMessage: message.encodedMessage, - encodedMessageHash: message.encodedMessageHash, - parentTransactionIndex: message.parentTransactionIndex, - parentTransactionHash: message.parentTransactionIndex, - stateRoot: proof.stateRoot, - batchIndex: proof.stateRootBatchHeader.batchIndex.toString(), - batchRoot: proof.stateRootBatchHeader.batchRoot, - batchSize: proof.stateRootBatchHeader.batchSize.toString(), - prevTotalElements: proof.stateRootBatchHeader.prevTotalElements.toString(), - extraData: proof.stateRootBatchHeader.extraData, - index: proof.stateRootProof.index, - siblings: proof.stateRootProof.siblings.join(','), - stateTrieWitness: proof.stateTrieWitness.toString('hex'), - storageTrieWitness: proof.storageTrieWitness.toString('hex'), - }) - this.logger.info('Submitted relay message to spreadsheet') - } catch (e) { - this.logger.error('Cannot submit message to spreadsheet') - this.logger.error(e.message) - } - } else { - try { - this.logger.info( - 'Dry-run, checking to make sure proof would succeed...' - ) - - await this.state.OVM_L1CustomCrossDomainMessenger.connect( - this.options.l1Wallet - ).callStatic.relayMessage( - message.target, - message.sender, - message.message, - message.messageNonce, - proof, - { - gasLimit: this.options.relayGasLimit, - } - ) - - this.logger.info( - 'Proof should succeed. Submitting for real this time...' - ) - } catch (err) { - this.logger.error('Proof would fail, skipping', { - message: err.toString(), - stack: err.stack, - code: err.code, - }) - return - } - - const result = await this.state.OVM_L1CustomCrossDomainMessenger.connect( - this.options.l1Wallet - ).relayMessage( - message.target, - message.sender, - message.message, - message.messageNonce, - proof, - { - gasLimit: this.options.relayGasLimit, - } - ) - - this.logger.info('Relay message transaction sent', { - transactionHash: result, - }) - - try { - const receipt = await result.wait() - - this.logger.info('Relay message included in block', { - transactionHash: receipt.transactionHash, - blockNumber: receipt.blockNumber, - gasUsed: receipt.gasUsed.toString(), - confirmations: receipt.confirmations, - status: receipt.status, - }) - } catch (err) { - this.logger.error('Real relay attempt failed, skipping.', { - message: err.toString(), - stack: err.stack, - code: err.code, - }) - return - } - this.logger.info('Message successfully relayed to Layer 1!') - } - } -} diff --git a/packages/omgx/message-relayer-fast/src/spreadsheet.ts b/packages/omgx/message-relayer-fast/src/spreadsheet.ts deleted file mode 100644 index bf1260c88746..000000000000 --- a/packages/omgx/message-relayer-fast/src/spreadsheet.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { GoogleSpreadsheet } from 'google-spreadsheet' - -export default class SpreadSheet { - public doc - public sheet - - constructor(id) { - this.doc = new GoogleSpreadsheet(id) - this.sheet = null - } - - async init(email, privateKey) { - await this.doc.useServiceAccountAuth({ - client_email: email, - private_key: privateKey, - }) - - await this.doc.loadInfo() - this.sheet = this.doc.sheetsByIndex[0] - } - - async addRow(row) { - return this.sheet.addRow(row) - } -} diff --git a/packages/omgx/message-relayer-fast/src/types.ts b/packages/omgx/message-relayer-fast/src/types.ts deleted file mode 100644 index a89b0d7ffb24..000000000000 --- a/packages/omgx/message-relayer-fast/src/types.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { BigNumber } from 'ethers' - -export interface StateRootBatchHeader { - batchIndex: BigNumber - batchRoot: string - batchSize: BigNumber - prevTotalElements: BigNumber - extraData: string -} - -export interface SentMessage { - target: string - sender: string - message: string - messageNonce: number - encodedMessage: string - encodedMessageHash: string - parentTransactionIndex: number - parentTransactionHash: string -} - -export interface SentMessageProof { - stateRoot: string - stateRootBatchHeader: StateRootBatchHeader - stateRootProof: StateRootProof - stateTrieWitness: string | Buffer - storageTrieWitness: string | Buffer -} - -export interface StateRootProof { - index: number - siblings: string[] -} diff --git a/packages/omgx/message-relayer-fast/tsconfig.build.json b/packages/omgx/message-relayer-fast/tsconfig.build.json deleted file mode 100644 index ef8dfe2515a1..000000000000 --- a/packages/omgx/message-relayer-fast/tsconfig.build.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../../tsconfig.build.json", - - "compilerOptions": { - "rootDir": "./src", - "outDir": "./dist" - }, - - "include": [ - "src/**/*" - ] -} diff --git a/packages/omgx/message-relayer-fast/tsconfig.json b/packages/omgx/message-relayer-fast/tsconfig.json deleted file mode 100644 index 859dc1c9c478..000000000000 --- a/packages/omgx/message-relayer-fast/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../../tsconfig.json", - - "compilerOptions": { - "resolveJsonModule": true - } -} \ No newline at end of file diff --git a/packages/omgx/message-relayer-fast/tslint.json b/packages/omgx/message-relayer-fast/tslint.json deleted file mode 100644 index f7e116b75aa6..000000000000 --- a/packages/omgx/message-relayer-fast/tslint.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../../tslint.base.json" -} \ No newline at end of file diff --git a/packages/omgx/wallet/.env.example b/packages/omgx/wallet/.env.example index 672854a8aa90..397d4aedc040 100644 --- a/packages/omgx/wallet/.env.example +++ b/packages/omgx/wallet/.env.example @@ -8,7 +8,6 @@ TEST_PRIVATE_KEY_2=0xPRIVATE_KEY_OF_THE_SECOND_TEST_WALLET TEST_PRIVATE_KEY_3=0xPRIVATE_KEY_OF_THE_THIRD_TEST_WALLET TARGET_GAS_LIMIT=9000000000 CHAIN_ID=28 -L1_ALT_MESSENGER=0x0 # Local NODE_ENV=local @@ -19,106 +18,4 @@ TEST_PRIVATE_KEY_1=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f TEST_PRIVATE_KEY_2=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d TEST_PRIVATE_KEY_3=0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a TARGET_GAS_LIMIT=9000000000 -CHAIN_ID=28 -L1_ALT_MESSENGER=0x0 - - - -Account #0: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 (10000 ETH) - -Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 - - -Account #1: 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 (10000 ETH) - -Private Key: 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d - - -Account #2: 0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc (10000 ETH) - -Private Key: 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a - - -Account #3: 0x90f79bf6eb2c4f870365e785982e1f101e93b906 (10000 ETH) - -Private Key: 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6 - - -Account #4: 0x15d34aaf54267db7d7c367839aaf71a00a2c6a65 (10000 ETH) - -Private Key: 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a - - -Account #5: 0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc (10000 ETH) - -Private Key: 0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba - - -Account #6: 0x976ea74026e726554db657fa54763abd0c3a0aa9 (10000 ETH) - -Private Key: 0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e - - -Account #7: 0x14dc79964da2c08b23698b3d3cc7ca32193d9955 (10000 ETH) - -Private Key: 0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356 - - -Account #8: 0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f (10000 ETH) - -Private Key: 0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97 - - -Account #9: 0xa0ee7a142d267c1f36714e4a8f75612f20a79720 (10000 ETH) - -Private Key: 0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6 - - -Account #10: 0xbcd4042de499d14e55001ccbb24a551f3b954096 (10000 ETH) - -Private Key: 0xf214f2b2cd398c806f84e317254e0f0b801d0643303237d97a22a48e01628897 - - -Account #11: 0x71be63f3384f5fb98995898a86b02fb2426c5788 (10000 ETH) - -Private Key: 0x701b615bbdfb9de65240bc28bd21bbc0d996645a3dd57e7b12bc2bdf6f192c82 - - -Account #12: 0xfabb0ac9d68b0b445fb7357272ff202c5651694a (10000 ETH) - -Private Key: 0xa267530f49f8280200edf313ee7af6b827f2a8bce2897751d06a843f644967b1 - - -Account #13: 0x1cbd3b2770909d4e10f157cabc84c7264073c9ec (10000 ETH) - -Private Key: 0x47c99abed3324a2707c28affff1267e45918ec8c3f20b8aa892e8b065d2942dd - - -Account #14: 0xdf3e18d64bc6a983f673ab319ccae4f1a57c7097 (10000 ETH) - -Private Key: 0xc526ee95bf44d8fc405a158bb884d9d1238d99f0612e9f33d006bb0789009aaa - - -Account #15: 0xcd3b766ccdd6ae721141f452c550ca635964ce71 (10000 ETH) - -Private Key: 0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61 - - -Account #16: 0x2546bcd3c84621e976d8185a91a922ae77ecec30 (10000 ETH) - -Private Key: 0xea6c44ac03bff858b476bba40716402b03e41b8e97e276d1baec7c37d42484a0 - - -Account #17: 0xbda5747bfd65f08deb54cb465eb87d40e51b197e (10000 ETH) - -Private Key: 0x689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd - - -Account #18: 0xdd2fd4581271e230360230f9337d5c0430bf44c0 (10000 ETH) - -Private Key: 0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0 - - -Account #19: 0x8626f6940e2eb28930efb4cef49b2d1f2c9c1199 (10000 ETH) - -Private Key: 0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e \ No newline at end of file +CHAIN_ID=28 \ No newline at end of file diff --git a/packages/omgx/wallet/contracts/L1ERC20Gateway.sol b/packages/omgx/wallet/contracts/L1ERC20Gateway.sol index 76465fef4026..e974d046c380 100644 --- a/packages/omgx/wallet/contracts/L1ERC20Gateway.sol +++ b/packages/omgx/wallet/contracts/L1ERC20Gateway.sol @@ -23,7 +23,6 @@ import { iOVM_ERC20 } from '@eth-optimism/contracts/contracts/optimistic-ethereu */ contract L1ERC20Gateway is OVM_L1ERC20Gateway { - constructor( iOVM_ERC20 _l1ERC20, address _l2DepositedERC20, diff --git a/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol b/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol index 111709c36e7c..4e0c9460debd 100644 --- a/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol +++ b/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol @@ -4,7 +4,7 @@ pragma solidity >0.5.0; pragma experimental ABIEncoderV2; import "./interfaces/iL2LiquidityPool.sol"; -import "./libraries/OVM_CrossDomainEnabled.sol"; +import "@eth-optimism/contracts/contracts/optimistic-ethereum/libraries/bridge/OVM_CrossDomainEnabled.sol"; /* External Imports */ import '@openzeppelin/contracts/math/SafeMath.sol'; @@ -117,7 +117,7 @@ contract L1LiquidityPool is OVM_CrossDomainEnabled, Ownable { address tokenAddress ); - event WithdrawLiqudiity( + event WithdrawLiquidity( address sender, address receiver, uint256 amount, @@ -405,7 +405,7 @@ contract L1LiquidityPool is OVM_CrossDomainEnabled, Ownable { require(sent, "Failed to send Ether"); } - emit WithdrawLiqudiity( + emit WithdrawLiquidity( msg.sender, _to, _amount, diff --git a/packages/omgx/wallet/contracts/LP/L2LiquidityPool.sol b/packages/omgx/wallet/contracts/LP/L2LiquidityPool.sol index 87fc0f0efc15..a2108ae32b94 100644 --- a/packages/omgx/wallet/contracts/LP/L2LiquidityPool.sol +++ b/packages/omgx/wallet/contracts/LP/L2LiquidityPool.sol @@ -117,7 +117,7 @@ contract L2LiquidityPool is OVM_CrossDomainEnabled, Ownable { address tokenAddress ); - event WithdrawLiqudiity( + event WithdrawLiquidity( address sender, address receiver, uint256 amount, @@ -261,7 +261,7 @@ contract L2LiquidityPool is OVM_CrossDomainEnabled, Ownable { PoolInfo storage pool = poolInfo[_tokenAddress]; UserInfo storage user = userInfo[_tokenAddress][msg.sender]; - require(pool.l2TokenAddress != address(0), "Token Address Not Register"); + require(pool.l2TokenAddress != address(0), "Token Address Not Registered"); // Update accUserRewardPerShare updateUserRewardPerShare(_tokenAddress); @@ -304,7 +304,7 @@ contract L2LiquidityPool is OVM_CrossDomainEnabled, Ownable { { PoolInfo storage pool = poolInfo[_tokenAddress]; - require(pool.l2TokenAddress != address(0), "Token Address Not Register"); + require(pool.l2TokenAddress != address(0), "Token Address Not Registered"); //Augment the pool size for this ERC20 uint256 userRewardFee = (_amount.mul(userRewardFeeRate)).div(1000); @@ -359,7 +359,7 @@ contract L2LiquidityPool is OVM_CrossDomainEnabled, Ownable { PoolInfo storage pool = poolInfo[_tokenAddress]; UserInfo storage user = userInfo[_tokenAddress][msg.sender]; - require(pool.l2TokenAddress != address(0), "Token Address Not Register"); + require(pool.l2TokenAddress != address(0), "Token Address Not Registered"); require(user.amount >= _amount, "Withdraw Error"); // Update accUserRewardPerShare @@ -378,7 +378,7 @@ contract L2LiquidityPool is OVM_CrossDomainEnabled, Ownable { IERC20(_tokenAddress).safeTransfer(_to, _amount); - emit WithdrawLiqudiity( + emit WithdrawLiquidity( msg.sender, _to, _amount, @@ -434,7 +434,7 @@ contract L2LiquidityPool is OVM_CrossDomainEnabled, Ownable { PoolInfo storage pool = poolInfo[_tokenAddress]; UserInfo storage user = userInfo[_tokenAddress][msg.sender]; - require(pool.l2TokenAddress != address(0), "Token Address Not Register"); + require(pool.l2TokenAddress != address(0), "Token Address Not Registered"); uint256 pendingReward = user.pendingReward.add( user.amount.mul(pool.accUserRewardPerShare).div(1e12).sub(user.rewardDebt) diff --git a/packages/omgx/wallet/contracts/LP/interfaces/iL1LiquidityPool.sol b/packages/omgx/wallet/contracts/LP/interfaces/iL1LiquidityPool.sol index daa2e206f00c..3049b75339a8 100644 --- a/packages/omgx/wallet/contracts/LP/interfaces/iL1LiquidityPool.sol +++ b/packages/omgx/wallet/contracts/LP/interfaces/iL1LiquidityPool.sol @@ -39,7 +39,7 @@ interface iL1LiquidityPool { address tokenAddress ); - event WithdrawLiqudiity( + event WithdrawLiquidity( address sender, address receiver, uint256 amount, diff --git a/packages/omgx/wallet/contracts/LP/interfaces/iL2LiquidityPool.sol b/packages/omgx/wallet/contracts/LP/interfaces/iL2LiquidityPool.sol index a190fcbea7b7..7dcee188b0fc 100644 --- a/packages/omgx/wallet/contracts/LP/interfaces/iL2LiquidityPool.sol +++ b/packages/omgx/wallet/contracts/LP/interfaces/iL2LiquidityPool.sol @@ -8,7 +8,7 @@ pragma experimental ABIEncoderV2; interface iL2LiquidityPool { /******************** - * Event * + * Events * ********************/ event AddLiquidity( @@ -39,7 +39,7 @@ interface iL2LiquidityPool { address tokenAddress ); - event WithdrawLiqudiity( + event WithdrawLiquidity( address sender, address receiver, uint256 amount, diff --git a/packages/omgx/wallet/contracts/LP/libraries/OVM_CrossDomainEnabled.sol b/packages/omgx/wallet/contracts/LP/libraries/OVM_CrossDomainEnabled.sol deleted file mode 100644 index 13b51148160c..000000000000 --- a/packages/omgx/wallet/contracts/LP/libraries/OVM_CrossDomainEnabled.sol +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >0.5.0 <0.8.0; -/* Interface Imports */ -import { iAbs_BaseCrossDomainMessenger } from '@eth-optimism/contracts/contracts/optimistic-ethereum/iOVM/bridge/messaging/iAbs_BaseCrossDomainMessenger.sol'; - -/** - * @title OVM_CrossDomainEnabled - * @dev Helper contract for contracts performing cross-domain communications - * - * Compiler used: defined by inheriting contract - * Runtime target: defined by inheriting contract - */ -contract OVM_CrossDomainEnabled { - // Messenger contract used to send and recieve messages from the other domain. - address public senderMessenger; - address public relayerMessenger; - - /*************** - * Constructor * - ***************/ - constructor( - address _senderMessenger, - address _relayerMessenger - ) { - senderMessenger = _senderMessenger; - relayerMessenger = _relayerMessenger; - } - - /********************** - * Function Modifiers * - **********************/ - - /** - * @notice Enforces that the modified function is only callable by a specific cross-domain account. - * @param _sourceDomainAccount The only account on the originating domain which is authenticated to call this function. - */ - modifier onlyFromCrossDomainAccount( - address _sourceDomainAccount - ) { - require( - msg.sender == address(getCrossDomainRelayerMessenger()), - "OVM_XCHAIN: messenger contract unauthenticated" - ); - - require( - getCrossDomainRelayerMessenger().xDomainMessageSender() == _sourceDomainAccount, - "OVM_XCHAIN: wrong sender of cross-domain message" - ); - - _; - } - - /********************** - * Internal Functions * - **********************/ - - /** - * @notice Gets the messenger, usually from storage. This function is exposed in case a child contract needs to override. - * @return The address of the cross-domain messenger contract which should be used. - */ - function getCrossDomainSenderMessenger() - internal - virtual - returns( - iAbs_BaseCrossDomainMessenger - ) - { - return iAbs_BaseCrossDomainMessenger(senderMessenger); - } - - /** - * @notice Gets the messenger, usually from storage. This function is exposed in case a child contract needs to override. - * @return The address of the cross-domain messenger contract which should be used. - */ - function getCrossDomainRelayerMessenger() - internal - virtual - returns( - iAbs_BaseCrossDomainMessenger - ) - { - return iAbs_BaseCrossDomainMessenger(relayerMessenger); - } - - /** - * @notice Sends a message to an account on another domain - * @param _crossDomainTarget The intended recipient on the destination domain - * @param _data The data to send to the target (usually calldata to a function with `onlyFromCrossDomainAccount()`) - * @param _gasLimit The gasLimit for the receipt of the message on the target domain. - */ - function sendCrossDomainMessage( - address _crossDomainTarget, - bytes memory _data, - uint32 _gasLimit - ) internal { - getCrossDomainSenderMessenger().sendMessage(_crossDomainTarget, _data, _gasLimit); - } -} diff --git a/packages/omgx/wallet/contracts/Message/L1FastMessage.sol b/packages/omgx/wallet/contracts/Message/L1FastMessage.sol deleted file mode 100644 index 64cd2e77ae28..000000000000 --- a/packages/omgx/wallet/contracts/Message/L1FastMessage.sol +++ /dev/null @@ -1,67 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >0.5.0; - -/* Library Imports */ -import "../libraries/OVM_CrossDomainEnabled.sol"; - -import { L2Message } from "./L2Message.sol"; - -contract L1FastMessage is OVM_CrossDomainEnabled { - - address L2MessageAddress; - string crossDomainMessage; - - event ReceiveL2Message ( - string _message - ); - - /******************** - * Constructor * - ********************/ - constructor ( - address _l1CrossDomainMessenger, - address _l1CustomCrossDomainMessenger - ) - OVM_CrossDomainEnabled(_l1CrossDomainMessenger, _l1CustomCrossDomainMessenger) - {} - - function init ( - address _L2MessageAddress - ) - public - { - L2MessageAddress = _L2MessageAddress; - } - - function sendMessageL1ToL2 () public { - bytes memory data = abi.encodeWithSelector( - L2Message.receiveL1Message.selector, - "messageFromL1" - ); - - // Send calldata into L1 - sendCrossDomainMessage( - address(L2MessageAddress), - data, - 1200000 - ); - } - - /************************* - * Cross-chain Functions * - *************************/ - - /** - * Receive message from L2 - * @param _message message - */ - function receiveL2Message( - string memory _message - ) - external - onlyFromCrossDomainAccount(address(L2MessageAddress)) - { - crossDomainMessage = _message; - emit ReceiveL2Message(_message); - } -} \ No newline at end of file diff --git a/packages/omgx/wallet/contracts/Message/L1Message.sol b/packages/omgx/wallet/contracts/Message/L1Message.sol index aaaa2e63c88c..b9787f8515d5 100644 --- a/packages/omgx/wallet/contracts/Message/L1Message.sol +++ b/packages/omgx/wallet/contracts/Message/L1Message.sol @@ -3,7 +3,6 @@ pragma solidity >0.5.0; /* Library Imports */ import "@eth-optimism/contracts/contracts/optimistic-ethereum/libraries/bridge/OVM_CrossDomainEnabled.sol"; - import { L2Message } from "./L2Message.sol"; contract L1Message is OVM_CrossDomainEnabled { diff --git a/packages/omgx/wallet/contracts/Message/L2Message.sol b/packages/omgx/wallet/contracts/Message/L2Message.sol index 475aff20d005..6cde21a222d3 100644 --- a/packages/omgx/wallet/contracts/Message/L2Message.sol +++ b/packages/omgx/wallet/contracts/Message/L2Message.sol @@ -3,7 +3,6 @@ pragma solidity >0.5.0; /* Library Imports */ import "@eth-optimism/contracts/contracts/optimistic-ethereum/libraries/bridge/OVM_CrossDomainEnabled.sol"; - import { L1Message } from "./L1Message.sol"; contract L2Message is OVM_CrossDomainEnabled { diff --git a/packages/omgx/wallet/test/b_setup.spec.ts b/packages/omgx/wallet/disabled/b_setup.spec.ts similarity index 100% rename from packages/omgx/wallet/test/b_setup.spec.ts rename to packages/omgx/wallet/disabled/b_setup.spec.ts diff --git a/packages/omgx/wallet/test/c_lp.spec.ts b/packages/omgx/wallet/disabled/c_lp.spec.ts similarity index 100% rename from packages/omgx/wallet/test/c_lp.spec.ts rename to packages/omgx/wallet/disabled/c_lp.spec.ts diff --git a/packages/omgx/wallet/test/d_nft.spec.ts b/packages/omgx/wallet/disabled/d_nft.spec.ts similarity index 100% rename from packages/omgx/wallet/test/d_nft.spec.ts rename to packages/omgx/wallet/disabled/d_nft.spec.ts diff --git a/packages/omgx/wallet/hardhat.config.ts b/packages/omgx/wallet/hardhat.config.ts index a46c5cc52418..1d650223c45d 100644 --- a/packages/omgx/wallet/hardhat.config.ts +++ b/packages/omgx/wallet/hardhat.config.ts @@ -5,7 +5,7 @@ import '@eth-optimism/hardhat-ovm' const config: HardhatUserConfig = { mocha: { - timeout: 300000, + timeout: 60000, }, networks: { omgx: { diff --git a/packages/omgx/wallet/test/a_message.spec.ts b/packages/omgx/wallet/test/a_message.spec.ts index c152f5525744..7149d031bf52 100644 --- a/packages/omgx/wallet/test/a_message.spec.ts +++ b/packages/omgx/wallet/test/a_message.spec.ts @@ -51,7 +51,7 @@ describe('Messenge Relayer Test', async () => { {gasLimit: 999999, gasPrice: 0} ) await L2Message.deployTransaction.wait() - console.log(`🌕 ${chalk.red('L2Message deployed to:')} ${chalk.green(L2Message.address)}`) + console.log(`🌕 ${chalk.red('L2 Message deployed to:')} ${chalk.green(L2Message.address)}`) // Deploy L1 liquidity pool L1Message = await Factory__L1Message.deploy( @@ -60,7 +60,7 @@ describe('Messenge Relayer Test', async () => { // env.customWatcher.l1.messengerAddress, ) await L1Message.deployTransaction.wait() - console.log(`🌕 ${chalk.red('L1Message deployed to:')} ${chalk.green(L1Message.address)}`) + console.log(`🌕 ${chalk.red('L1 Message deployed to:')} ${chalk.green(L1Message.address)}`) // Initialize L1 message const L1MessageTX = await L1Message.init( @@ -87,7 +87,6 @@ describe('Messenge Relayer Test', async () => { //nonce: 221 }), Direction.L2ToL1 - // Relayer.custom ) }) diff --git a/packages/omgx/wallet/test/a_message_fast.spec.ts b/packages/omgx/wallet/test/a_message_fast.spec.ts deleted file mode 100644 index d3c1ff275964..000000000000 --- a/packages/omgx/wallet/test/a_message_fast.spec.ts +++ /dev/null @@ -1,104 +0,0 @@ -import chai from 'chai'; -import chaiAsPromised from 'chai-as-promised'; -chai.use(chaiAsPromised); -import { Contract, ContractFactory, utils } from 'ethers' -import chalk from 'chalk'; - -import { Direction, Relayer } from './shared/watcher-utils' - -import L1FastMessageJson from '../artifacts/contracts/Message/L1FastMessage.sol/L1FastMessage.json' -import L2MessageJson from '../artifacts-ovm/contracts/Message/L2Message.sol/L2Message.json' - -import { OptimismEnv } from './shared/env' - -describe('Messenge Relayer Test', async () => { - - let Factory__L1FastMessage: ContractFactory - let Factory__L2Message: ContractFactory - - let L1FastMessage: Contract - let L2Message: Contract - - let env: OptimismEnv - - before(async () => { - - env = await OptimismEnv.new() - - Factory__L1FastMessage = new ContractFactory( - L1FastMessageJson.abi, - L1FastMessageJson.bytecode, - env.bobl1Wallet - ) - - Factory__L2Message = new ContractFactory( - L2MessageJson.abi, - L2MessageJson.bytecode, - env.bobl2Wallet - ) - - const accountNonceBob1 = await env.l1Provider.getTransactionCount(env.bobl1Wallet.address) - console.log(`accountNonceBob1:`,accountNonceBob1) - - const accountNonceBob2 = await env.l2Provider.getTransactionCount(env.bobl2Wallet.address) - console.log(`accountNonceBob2:`,accountNonceBob2) - - }) - - it('should deploy contracts', async () => { - L2Message = await Factory__L2Message.deploy( - env.watcher.l2.messengerAddress, - {gasLimit: 999999, gasPrice: 0} - ) - await L2Message.deployTransaction.wait() - console.log(`🌕 ${chalk.red('L2Message deployed to:')} ${chalk.green(L2Message.address)}`) - - // Deploy L1 liquidity pool - L1FastMessage = await Factory__L1FastMessage.deploy( - env.watcher.l1.messengerAddress, - env.customWatcher.l1.messengerAddress, - {gasLimit: 999999, gasPrice: 0} - ) - await L1FastMessage.deployTransaction.wait() - console.log(`🌕 ${chalk.red('L1FastMessage deployed to:')} ${chalk.green(L1FastMessage.address)}`) - - // Initialize L1 message - const L1FastMessageTX = await L1FastMessage.init( - L2Message.address, - {gasLimit: 999999, gasPrice: 0} - ) - await L1FastMessageTX.wait() - console.log(`⭐️ ${chalk.blue('L1 Message initialized:')} ${chalk.green(L1FastMessageTX.hash)}`) - - // Initialize L2 message - const L2MessageTX = await L2Message.init( - L1FastMessage.address, - {gasLimit: 999999, gasPrice: 0} - ) - await L2MessageTX.wait() - console.log(`⭐️ ${chalk.blue('L2 Message initialized:')} ${chalk.green(L2MessageTX.hash)}`) - }) - - it('should send message from L2 to L1', async () => { - await env.waitForXDomainTransaction( - L2Message.sendMessageL2ToL1({ - gasLimit: 999999, - gasPrice: 0, - //nonce: 221 - }), - Direction.L2ToL1, - Relayer.custom - ) - }) - - it('should send message from L1 to L2', async () => { - await env.waitForXDomainTransaction( - L1FastMessage.sendMessageL1ToL2({ - gasLimit: 999999, - gasPrice: 0, - //nonce: 28 - }), - Direction.L1ToL2 - ) - }) -}) \ No newline at end of file diff --git a/packages/omgx/wallet/test/shared/env.ts b/packages/omgx/wallet/test/shared/env.ts index 7717c954bc2b..f5d00e4de719 100644 --- a/packages/omgx/wallet/test/shared/env.ts +++ b/packages/omgx/wallet/test/shared/env.ts @@ -10,8 +10,10 @@ import { bobl1Wallet, bobl2Wallet, + alicel1Wallet, alicel2Wallet, + katel1Wallet, katel2Wallet, @@ -21,7 +23,6 @@ import { import { initWatcher, - initCustomWatcher, CrossDomainMessagePair, Direction, Relayer, @@ -50,7 +51,6 @@ export class OptimismEnv { // The L1 <> L2 State watcher watcher: Watcher - customWatcher: Watcher // The wallets bobl1Wallet: Wallet @@ -70,7 +70,6 @@ export class OptimismEnv { this.L2ETHGateway = args.L2ETHGateway this.l2Messenger = args.l2Messenger this.watcher = args.watcher - this.customWatcher = args.customWatcher this.bobl1Wallet = args.bobl1Wallet this.bobl2Wallet = args.bobl2Wallet this.alicel1Wallet = args.alicel1Wallet @@ -86,7 +85,6 @@ export class OptimismEnv { const addressManager = getAddressManager(bobl1Wallet) const watcher = await initWatcher(l1Provider, l2Provider, addressManager) - const customWatcher = await initCustomWatcher(l1Provider, l2Provider, addressManager) const L1ETHGateway = await getL1ETHGateway(bobl1Wallet, addressManager) const L2ETHGateway = getL2ETHGateway(bobl2Wallet) @@ -118,12 +116,13 @@ export class OptimismEnv { l2Messenger, watcher, - customWatcher, bobl1Wallet, bobl2Wallet, + alicel1Wallet, alicel2Wallet, + katel1Wallet, katel2Wallet, @@ -135,8 +134,7 @@ export class OptimismEnv { async waitForXDomainTransaction( tx: Promise | TransactionResponse, direction: Direction, - relayer: Relayer = Relayer.origin, ): Promise { - return waitForXDomainTransaction(relayer === Relayer.origin ? this.watcher : this.customWatcher, tx, direction) + return waitForXDomainTransaction(this.watcher, tx, direction) } } diff --git a/packages/omgx/wallet/test/shared/watcher-utils.ts b/packages/omgx/wallet/test/shared/watcher-utils.ts index b46a0c05fd6e..960bb0c03929 100644 --- a/packages/omgx/wallet/test/shared/watcher-utils.ts +++ b/packages/omgx/wallet/test/shared/watcher-utils.ts @@ -27,26 +27,6 @@ export const initWatcher = async ( }) } -export const initCustomWatcher = async ( - l1Provider: JsonRpcProvider, - l2Provider: JsonRpcProvider, - AddressManager: Contract -) => { - - const l1CustomMessengerAddress = await AddressManager.getAddress('Proxy__OVM_L1CustomCrossDomainMessenger') - - return new Watcher({ - l1: { - provider: l1Provider, - messengerAddress: l1CustomMessengerAddress, - }, - l2: { - provider: l2Provider, - messengerAddress: "0x4200000000000000000000000000000000000007", - }, - }) -} - export interface CrossDomainMessagePair { tx: Transaction receipt: TransactionReceipt @@ -76,18 +56,23 @@ export const waitForXDomainTransaction = async ( const receipt = await tx.wait() let remoteReceipt: TransactionReceipt + + console.log(' Preparing to wait for Message Hashes') + if (direction === Direction.L1ToL2) { // DEPOSIT + console.log(' Looking for L1 to L2') const [xDomainMsgHash] = await watcher.getMessageHashesFromL1Tx(tx.hash) - // console.log(' Got L1->L2 message hash', xDomainMsgHash) + console.log(' Got L1->L2 message hash', xDomainMsgHash) remoteReceipt = await watcher.getL2TransactionReceipt(xDomainMsgHash) - // console.log(' Completed Deposit! L2 tx hash:', remoteReceipt.transactionHash) + console.log(' Completed Deposit - L2 tx hash:', remoteReceipt.transactionHash) } else { // WITHDRAWAL + console.log(' Looking for L2 to L1') const [xDomainMsgHash] = await watcher.getMessageHashesFromL2Tx(tx.hash) - // console.log(' Got L2->L1 message hash', xDomainMsgHash) + console.log(' Got L2->L1 message hash', xDomainMsgHash) remoteReceipt = await watcher.getL1TransactionReceipt(xDomainMsgHash) - // console.log(' Completed Withdrawal! L1 tx hash:', remoteReceipt.transactionHash) + console.log(' Completed Withdrawal - L1 tx hash:', remoteReceipt.transactionHash) } return { diff --git a/packages/omgx/wallet/test/shared/watcher.ts b/packages/omgx/wallet/test/shared/watcher.ts index 3af52bf32e69..7547c78953c8 100644 --- a/packages/omgx/wallet/test/shared/watcher.ts +++ b/packages/omgx/wallet/test/shared/watcher.ts @@ -41,6 +41,7 @@ export class Watcher { l1ToL2MsgHash: string, pollForPending: boolean = true ): Promise { + console.log("calling getL2TransactionReceipt") return this.getTransactionReceipt(this.l2, l1ToL2MsgHash, pollForPending) } @@ -78,7 +79,7 @@ export class Watcher { pollForPending: boolean = true ): Promise { - // console.log(" Watcher::getTransactionReceipt") + console.log(" Watcher::getTransactionReceipt") const blockNumber = await layer.provider.getBlockNumber() const startingBlock = Math.max(blockNumber - this.NUM_BLOCKS_TO_FETCH, 0) @@ -109,10 +110,10 @@ export class Watcher { // Message has yet to be relayed, poll until it is found return new Promise(async (resolve, reject) => { - // console.log(" Watcher polling::layer.provider.getTransactionReceipt pre filter") + console.log(" Watcher polling::layer.provider.getTransactionReceipt pre filter") //listener that triggers on filter event layer.provider.on(filter, async (log: any) => { - // console.log(" Watcher polling::layer.provider.getTransactionReceipt post filter") + console.log(" Watcher polling::layer.provider.getTransactionReceipt post filter") if (log.data === msgHash) { try { const txReceipt = await layer.provider.getTransactionReceipt(log.transactionHash) From 978efd488f337230e08a2ba2baad65f63d6bb375 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Wed, 2 Jun 2021 19:04:36 -0700 Subject: [PATCH 08/30] Update L1LiquidityPool.sol --- packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol b/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol index 4e0c9460debd..22a5ec63b653 100644 --- a/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol +++ b/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol @@ -136,13 +136,11 @@ contract L1LiquidityPool is OVM_CrossDomainEnabled, Ownable { ********************/ /** * @param _l1CrossDomainMessenger L1 Messenger address being used for sending the cross-chain message. - * @param _l1CustomCrossDomainMessenger L1 Messenger address being used for receiving the cross-chain message. */ constructor ( - address _l1CrossDomainMessenger, - address _l1CustomCrossDomainMessenger + address _l1CrossDomainMessenger ) - OVM_CrossDomainEnabled(_l1CrossDomainMessenger, _l1CustomCrossDomainMessenger) + OVM_CrossDomainEnabled(_l1CrossDomainMessenger) {} /********************** @@ -199,7 +197,7 @@ contract L1LiquidityPool is OVM_CrossDomainEnabled, Ownable { // use with caution, can register only once PoolInfo storage pool = poolInfo[_l2TokenAddress]; // l2 token address equal to zero, then pair is not registered. - require(pool.l2TokenAddress == address(0), "Token Address Already Registerd"); + require(pool.l2TokenAddress == address(0), "Token Address Already Registered"); poolInfo[_l1TokenAddress] = PoolInfo({ l1TokenAddress: _l1TokenAddress, From a2820c809e28ea1168be22fb947c2ae38ac1b046 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Wed, 2 Jun 2021 20:40:59 -0700 Subject: [PATCH 09/30] message relay working --- packages/omgx/wallet/.env.example | 2 +- packages/omgx/wallet/hardhat.config.ts | 2 +- packages/omgx/wallet/test/a_message.spec.ts | 14 ++++++------- .../wallet/{disabled => test}/b_setup.spec.ts | 0 .../wallet/{disabled => test}/c_lp.spec.ts | 0 .../wallet/{disabled => test}/d_nft.spec.ts | 0 .../omgx/wallet/test/shared/watcher-utils.ts | 7 +++++-- packages/omgx/wallet/test/shared/watcher.ts | 21 +++++++++++++++---- .../src/deployment/local/addresses.json | 16 +++++++------- 9 files changed, 39 insertions(+), 23 deletions(-) rename packages/omgx/wallet/{disabled => test}/b_setup.spec.ts (100%) rename packages/omgx/wallet/{disabled => test}/c_lp.spec.ts (100%) rename packages/omgx/wallet/{disabled => test}/d_nft.spec.ts (100%) diff --git a/packages/omgx/wallet/.env.example b/packages/omgx/wallet/.env.example index 397d4aedc040..ee68cb9b0ef7 100644 --- a/packages/omgx/wallet/.env.example +++ b/packages/omgx/wallet/.env.example @@ -13,7 +13,7 @@ CHAIN_ID=28 NODE_ENV=local L1_NODE_WEB3_URL=http://localhost:9545 L2_NODE_WEB3_URL=http://localhost:8545 -ETH1_ADDRESS_RESOLVER_ADDRESS=0x927b167526bAbB9be047421db732C663a0b77B11 +ETH1_ADDRESS_RESOLVER_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3 TEST_PRIVATE_KEY_1=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 TEST_PRIVATE_KEY_2=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d TEST_PRIVATE_KEY_3=0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a diff --git a/packages/omgx/wallet/hardhat.config.ts b/packages/omgx/wallet/hardhat.config.ts index 1d650223c45d..228d804ba828 100644 --- a/packages/omgx/wallet/hardhat.config.ts +++ b/packages/omgx/wallet/hardhat.config.ts @@ -5,7 +5,7 @@ import '@eth-optimism/hardhat-ovm' const config: HardhatUserConfig = { mocha: { - timeout: 60000, + timeout: 200000, }, networks: { omgx: { diff --git a/packages/omgx/wallet/test/a_message.spec.ts b/packages/omgx/wallet/test/a_message.spec.ts index 7149d031bf52..f1fa52ea7654 100644 --- a/packages/omgx/wallet/test/a_message.spec.ts +++ b/packages/omgx/wallet/test/a_message.spec.ts @@ -46,14 +46,7 @@ describe('Messenge Relayer Test', async () => { }) it('should deploy contracts', async () => { - L2Message = await Factory__L2Message.deploy( - env.watcher.l2.messengerAddress, - {gasLimit: 999999, gasPrice: 0} - ) - await L2Message.deployTransaction.wait() - console.log(`🌕 ${chalk.red('L2 Message deployed to:')} ${chalk.green(L2Message.address)}`) - // Deploy L1 liquidity pool L1Message = await Factory__L1Message.deploy( env.watcher.l1.messengerAddress, {gasLimit: 999999, gasPrice: 0} @@ -62,6 +55,13 @@ describe('Messenge Relayer Test', async () => { await L1Message.deployTransaction.wait() console.log(`🌕 ${chalk.red('L1 Message deployed to:')} ${chalk.green(L1Message.address)}`) + L2Message = await Factory__L2Message.deploy( + env.watcher.l2.messengerAddress, + {gasLimit: 999999, gasPrice: 0} + ) + await L2Message.deployTransaction.wait() + console.log(`🌕 ${chalk.red('L2 Message deployed to:')} ${chalk.green(L2Message.address)}`) + // Initialize L1 message const L1MessageTX = await L1Message.init( L2Message.address, diff --git a/packages/omgx/wallet/disabled/b_setup.spec.ts b/packages/omgx/wallet/test/b_setup.spec.ts similarity index 100% rename from packages/omgx/wallet/disabled/b_setup.spec.ts rename to packages/omgx/wallet/test/b_setup.spec.ts diff --git a/packages/omgx/wallet/disabled/c_lp.spec.ts b/packages/omgx/wallet/test/c_lp.spec.ts similarity index 100% rename from packages/omgx/wallet/disabled/c_lp.spec.ts rename to packages/omgx/wallet/test/c_lp.spec.ts diff --git a/packages/omgx/wallet/disabled/d_nft.spec.ts b/packages/omgx/wallet/test/d_nft.spec.ts similarity index 100% rename from packages/omgx/wallet/disabled/d_nft.spec.ts rename to packages/omgx/wallet/test/d_nft.spec.ts diff --git a/packages/omgx/wallet/test/shared/watcher-utils.ts b/packages/omgx/wallet/test/shared/watcher-utils.ts index 960bb0c03929..4a3ed227e953 100644 --- a/packages/omgx/wallet/test/shared/watcher-utils.ts +++ b/packages/omgx/wallet/test/shared/watcher-utils.ts @@ -13,16 +13,19 @@ export const initWatcher = async ( ) => { const l1MessengerAddress = await AddressManager.getAddress('Proxy__OVM_L1CrossDomainMessenger') + console.log("l1MessengerAddress:",l1MessengerAddress) + const SCC = await AddressManager.getAddress('OVM_StateCommitmentChain') console.log(SCC) + return new Watcher({ l1: { provider: l1Provider, - messengerAddress: l1MessengerAddress, + messengerAddress: l1MessengerAddress }, l2: { provider: l2Provider, - messengerAddress: "0x4200000000000000000000000000000000000007", + messengerAddress: "0x4200000000000000000000000000000000000007" }, }) } diff --git a/packages/omgx/wallet/test/shared/watcher.ts b/packages/omgx/wallet/test/shared/watcher.ts index 7547c78953c8..ec55a07949b1 100644 --- a/packages/omgx/wallet/test/shared/watcher.ts +++ b/packages/omgx/wallet/test/shared/watcher.ts @@ -15,6 +15,7 @@ export interface WatcherOptions { export class Watcher { public NUM_BLOCKS_TO_FETCH: number = 10000 + public l1: Layer public l2: Layer @@ -26,6 +27,7 @@ export class Watcher { public async getMessageHashesFromL1Tx(l1TxHash: string): Promise { return this.getMessageHashesFromTx(this.l1, l1TxHash) } + public async getMessageHashesFromL2Tx(l2TxHash: string): Promise { return this.getMessageHashesFromTx(this.l2, l2TxHash) } @@ -34,6 +36,7 @@ export class Watcher { l2ToL1MsgHash: string, pollForPending: boolean = true ): Promise { + //console.log(' Calling getL1TransactionReceipt') return this.getTransactionReceipt(this.l1, l2ToL1MsgHash, pollForPending) } @@ -41,7 +44,7 @@ export class Watcher { l1ToL2MsgHash: string, pollForPending: boolean = true ): Promise { - console.log("calling getL2TransactionReceipt") + //console.log(' Calling getL2TransactionReceipt') return this.getTransactionReceipt(this.l2, l1ToL2MsgHash, pollForPending) } @@ -79,11 +82,18 @@ export class Watcher { pollForPending: boolean = true ): Promise { - console.log(" Watcher::getTransactionReceipt") + //console.log(" Watcher::getTransactionReceipt") const blockNumber = await layer.provider.getBlockNumber() const startingBlock = Math.max(blockNumber - this.NUM_BLOCKS_TO_FETCH, 0) + + //console.log("Layer:", layer) + + //console.log("Address:", layer.messengerAddress) + //console.log("topic:", ethers.utils.id(`RelayedMessage(bytes32)`)) + //console.log("fromBlock:", startingBlock) + const filter = { address: layer.messengerAddress, topics: [ethers.utils.id(`RelayedMessage(bytes32)`)], @@ -91,6 +101,8 @@ export class Watcher { } const logs = await layer.provider.getLogs(filter) + //console.log("Looking for:", msgHash) + //console.log("Current logs:", logs) const matches = logs.filter((log: any) => log.data === msgHash) @@ -110,10 +122,11 @@ export class Watcher { // Message has yet to be relayed, poll until it is found return new Promise(async (resolve, reject) => { - console.log(" Watcher polling::layer.provider.getTransactionReceipt pre filter") + //console.log(" Watcher polling::layer.provider.getTransactionReceipt pre filter") //listener that triggers on filter event layer.provider.on(filter, async (log: any) => { - console.log(" Watcher polling::layer.provider.getTransactionReceipt post filter") + //console.log(" Watcher polling::layer.provider.getTransactionReceipt post filter") + //console.log(log) if (log.data === msgHash) { try { const txReceipt = await layer.provider.getTransactionReceipt(log.transactionHash) diff --git a/packages/omgx/wallet/wallet/src/deployment/local/addresses.json b/packages/omgx/wallet/wallet/src/deployment/local/addresses.json index 34f81c9869df..542efabb077d 100644 --- a/packages/omgx/wallet/wallet/src/deployment/local/addresses.json +++ b/packages/omgx/wallet/wallet/src/deployment/local/addresses.json @@ -1,12 +1,12 @@ { - "L1LiquidityPool": "0x196A1b2750D9d39ECcC7667455DdF1b8d5D65696", - "L2LiquidityPool": "0x3e4CFaa8730092552d9425575E49bB542e329981", - "L1ERC20": "0xf952b82ED61797Cd0b93F02e42aC6B85EB4dF127", - "L2DepositedERC20": "0x65F72DF8a668BC6272B059BB7F53ADc91066540C", - "L1ERC20Gateway": "0x6353d6c697cc36446EC727Ae032B518b7FbEc82d", + "L1LiquidityPool": "0x247ADeE8E350cBEB05aB73DE88Be07CFbD736b2E", + "L2LiquidityPool": "0x88A7bA27B123e344f544EA19a50CA0c730FA87a2", + "L1ERC20": "0x22247e1bC94a8E640f179b2b1e8B50bF54C4e0F3", + "L2DepositedERC20": "0xFf413B7aeBcEfD231A2ce6592ABDD9aed820ec5a", + "L1ERC20Gateway": "0xa10542f51041645d61a49121383FD80b0D18D986", "l1ETHGatewayAddress": "0x4F53A01556Dc6f120db9a1b4caE786D5f0b5792C", "l1MessengerAddress": "0xA6404B184Ad3f6F41b6472f02ba45f25C6A66d49", - "L2TokenPool": "0x8d00515443437fB466f89CA0B155A889b10EBa68", - "AtomicSwap": "0x3C38fd8D4e647b230D006d98793Fa3A0ec60bC41", - "L2ERC721": "0xcdB44B1EC9F2aDd7740EeAc4701c928B80727469" + "L2TokenPool": "0xa94ec9484BfC9aB8d3fD80eB2735f132d257a135", + "AtomicSwap": "0xD4B82BDB1Abb1c1506173722c7d51FFCA659124f", + "L2ERC721": "0xEFA3B6C1203ED5fF8f4E1f6F7A09dCe529Fb9EbF" } \ No newline at end of file From 8117c5f5e1fcd41b62a5a4655c18101250c80c04 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Wed, 2 Jun 2021 20:49:00 -0700 Subject: [PATCH 10/30] almost there --- .../wallet/deployment/local/addresses.json | 19 +++++++++---------- packages/omgx/wallet/test/b_setup.spec.ts | 3 +-- packages/omgx/wallet/test/c_lp.spec.ts | 3 +-- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/packages/omgx/wallet/deployment/local/addresses.json b/packages/omgx/wallet/deployment/local/addresses.json index 542efabb077d..ffdce6e37fde 100644 --- a/packages/omgx/wallet/deployment/local/addresses.json +++ b/packages/omgx/wallet/deployment/local/addresses.json @@ -1,12 +1,11 @@ { - "L1LiquidityPool": "0x247ADeE8E350cBEB05aB73DE88Be07CFbD736b2E", - "L2LiquidityPool": "0x88A7bA27B123e344f544EA19a50CA0c730FA87a2", - "L1ERC20": "0x22247e1bC94a8E640f179b2b1e8B50bF54C4e0F3", - "L2DepositedERC20": "0xFf413B7aeBcEfD231A2ce6592ABDD9aed820ec5a", - "L1ERC20Gateway": "0xa10542f51041645d61a49121383FD80b0D18D986", - "l1ETHGatewayAddress": "0x4F53A01556Dc6f120db9a1b4caE786D5f0b5792C", - "l1MessengerAddress": "0xA6404B184Ad3f6F41b6472f02ba45f25C6A66d49", - "L2TokenPool": "0xa94ec9484BfC9aB8d3fD80eB2735f132d257a135", - "AtomicSwap": "0xD4B82BDB1Abb1c1506173722c7d51FFCA659124f", - "L2ERC721": "0xEFA3B6C1203ED5fF8f4E1f6F7A09dCe529Fb9EbF" + "L1LiquidityPool": "0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07", + "L2LiquidityPool": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", + "L1ERC20": "0x922D6956C99E12DFeB3224DEA977D0939758A1Fe", + "L2DepositedERC20": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed", + "L1ERC20Gateway": "0x5081a39b8A5f0E35a8D959395a630b68B74Dd30f", + "l1ETHGatewayAddress": "0x998abeb3E57409262aE5b751f60747921B33613E", + "l1MessengerAddress": "0x59b670e9fA9D0A427751Af201D676719a970857b", + "L2TokenPool": "0x1fA02b2d6A771842690194Cf62D91bdd92BfE28d", + "AtomicSwap": "0x04C89607413713Ec9775E14b954286519d836FEf" } \ No newline at end of file diff --git a/packages/omgx/wallet/test/b_setup.spec.ts b/packages/omgx/wallet/test/b_setup.spec.ts index 76a66bc5c7f9..1f0ebf3cf6bb 100644 --- a/packages/omgx/wallet/test/b_setup.spec.ts +++ b/packages/omgx/wallet/test/b_setup.spec.ts @@ -105,7 +105,6 @@ describe('LP System setup', async () => { // Deploy L1 liquidity pool L1LiquidityPool = await Factory__L1LiquidityPool.deploy( env.watcher.l1.messengerAddress, - env.customWatcher.l1.messengerAddress//, //{gasLimit: 999999, gasPrice: 0} ) await L1LiquidityPool.deployTransaction.wait() @@ -187,7 +186,7 @@ describe('LP System setup', async () => { console.log(`⭐️ ${chalk.blue('L2TokenPool registered:')} ${chalk.green(registerL2TokenPoolTX.hash)}`) // Deploy atomic swap - AtomicSwap = await Factory__AtomicSwap.deploy({gasLimit: 999999, gasPrice: 0}) + AtomicSwap = await Factory__AtomicSwap.deploy({gasLimit: 1500000, gasPrice: 0}) await AtomicSwap.deployTransaction.wait() console.log(`🌕 ${chalk.red('AtomicSwap deployed to:')} ${chalk.green(AtomicSwap.address)}`) }) diff --git a/packages/omgx/wallet/test/c_lp.spec.ts b/packages/omgx/wallet/test/c_lp.spec.ts index 2a333c8f7be0..050a71f5e231 100644 --- a/packages/omgx/wallet/test/c_lp.spec.ts +++ b/packages/omgx/wallet/test/c_lp.spec.ts @@ -312,8 +312,7 @@ describe('Liquidity Pool Test', async () => { fastExitAmount, L2DepositedERC20.address ), - Direction.L2ToL1, - Relayer.custom, + Direction.L2ToL1 ) const poolInfo = await L2LiquidityPool.poolInfo(L2DepositedERC20.address) From e2d84ea1849a6e872e56c9dec5940dd63a19a8a4 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Thu, 3 Jun 2021 10:30:52 -0700 Subject: [PATCH 11/30] major wallet functions confirmed working - ready --- .../wallet/deployment/local/addresses.json | 15 ++-- packages/omgx/wallet/test/c_lp.spec.ts | 84 +++++++++++++++---- packages/omgx/wallet/test/d_nft.spec.ts | 24 ++++-- packages/omgx/wallet/wallet/public/env.js | 2 +- .../src/deployment/local/addresses.json | 20 ++--- 5 files changed, 103 insertions(+), 42 deletions(-) diff --git a/packages/omgx/wallet/deployment/local/addresses.json b/packages/omgx/wallet/deployment/local/addresses.json index ffdce6e37fde..4a78d0d57f00 100644 --- a/packages/omgx/wallet/deployment/local/addresses.json +++ b/packages/omgx/wallet/deployment/local/addresses.json @@ -1,11 +1,12 @@ { - "L1LiquidityPool": "0xB0D4afd8879eD9F52b28595d31B441D079B2Ca07", - "L2LiquidityPool": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", - "L1ERC20": "0x922D6956C99E12DFeB3224DEA977D0939758A1Fe", - "L2DepositedERC20": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed", - "L1ERC20Gateway": "0x5081a39b8A5f0E35a8D959395a630b68B74Dd30f", + "L1LiquidityPool": "0x162A433068F51e18b7d13932F27e66a3f99E6890", + "L2LiquidityPool": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", + "L1ERC20": "0x5081a39b8A5f0E35a8D959395a630b68B74Dd30f", + "L2DepositedERC20": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", + "L1ERC20Gateway": "0x1fA02b2d6A771842690194Cf62D91bdd92BfE28d", "l1ETHGatewayAddress": "0x998abeb3E57409262aE5b751f60747921B33613E", "l1MessengerAddress": "0x59b670e9fA9D0A427751Af201D676719a970857b", - "L2TokenPool": "0x1fA02b2d6A771842690194Cf62D91bdd92BfE28d", - "AtomicSwap": "0x04C89607413713Ec9775E14b954286519d836FEf" + "L2TokenPool": "0xdbC43Ba45381e02825b14322cDdd15eC4B3164E6", + "AtomicSwap": "0x4C4a2f8c81640e47606d3fd77B353E87Ba015584", + "L2ERC721": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf" } \ No newline at end of file diff --git a/packages/omgx/wallet/test/c_lp.spec.ts b/packages/omgx/wallet/test/c_lp.spec.ts index 050a71f5e231..cf9d3a42f006 100644 --- a/packages/omgx/wallet/test/c_lp.spec.ts +++ b/packages/omgx/wallet/test/c_lp.spec.ts @@ -75,6 +75,7 @@ describe('Liquidity Pool Test', async () => { }) it('should deposit ERC20 token to L2', async () => { + const depositL2ERC20Amount = utils.parseEther("10000"); const preL1ERC20Balance = await L1ERC20.balanceOf(env.bobl1Wallet.address) @@ -105,16 +106,25 @@ describe('Liquidity Pool Test', async () => { }) it('should transfer ERC20 token to Alice and Kate', async () => { + const transferL2ERC20Amount = utils.parseEther("150") const preBobL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) const preAliceL2ERC20Balance = await L2DepositedERC20.balanceOf(env.alicel2Wallet.address) const preKateL2ERC20Balance = await L2DepositedERC20.balanceOf(env.katel2Wallet.address) - const tranferToAliceTX = await L2DepositedERC20.transfer(env.alicel2Wallet.address, transferL2ERC20Amount) + const tranferToAliceTX = await L2DepositedERC20.transfer( + env.alicel2Wallet.address, + transferL2ERC20Amount, + {gasLimit: 999999, gasPrice: 0} + ) await tranferToAliceTX.wait() - const tranferToKateTX = await L2DepositedERC20.transfer(env.katel2Wallet.address, transferL2ERC20Amount) + const tranferToKateTX = await L2DepositedERC20.transfer( + env.katel2Wallet.address, + transferL2ERC20Amount, + {gasLimit: 999999, gasPrice: 0} + ) await tranferToKateTX.wait() const postBobL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) @@ -135,17 +145,20 @@ describe('Liquidity Pool Test', async () => { }) it('should add ERC20 token to token pool', async () => { + const addL2TPAmount = utils.parseEther("1000") const approveL2TPTX = await L2DepositedERC20.approve( L2TokenPool.address, addL2TPAmount, + {gasLimit: 999999, gasPrice: 0} ) await approveL2TPTX.wait() const transferL2TPTX = await L2DepositedERC20.transfer( L2TokenPool.address, addL2TPAmount, + {gasLimit: 999999, gasPrice: 0} ); await transferL2TPTX.wait() @@ -183,7 +196,8 @@ describe('Liquidity Pool Test', async () => { const registerPoolERC20TX = await L2LiquidityPool.registerPool( L1ERC20.address, - L2DepositedERC20.address, + L2DepositedERC20.address, + {gasLimit: 999999, gasPrice: 0} ) await registerPoolERC20TX.wait() @@ -194,7 +208,8 @@ describe('Liquidity Pool Test', async () => { const registerPoolETHTX = await L2LiquidityPool.registerPool( "0x0000000000000000000000000000000000000000", - env.L2ETHGateway.address, + env.L2ETHGateway.address, + {gasLimit: 999999, gasPrice: 0} ) await registerPoolETHTX.wait() @@ -207,7 +222,8 @@ describe('Liquidity Pool Test', async () => { it('shouldn\'t update the pool', async () => { const registerPoolTX = await L2LiquidityPool.registerPool( L1ERC20.address, - L2DepositedERC20.address, + L2DepositedERC20.address, + {gasLimit: 999999, gasPrice: 0} ) await expect(registerPoolTX.wait()).to.be.eventually.rejected; }) @@ -243,6 +259,7 @@ describe('Liquidity Pool Test', async () => { }) it('should add L2 liquidity', async () => { + const addLiquidityAmount = utils.parseEther("100") const preBobL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) @@ -251,24 +268,28 @@ describe('Liquidity Pool Test', async () => { const approveBobL2TX = await L2DepositedERC20.approve( L2LiquidityPool.address, addLiquidityAmount, + {gasLimit: 999999, gasPrice: 0} ) await approveBobL2TX.wait() const BobAddLiquidity = await L2LiquidityPool.addLiquidity( - addLiquidityAmount, - L2DepositedERC20.address + addLiquidityAmount, + L2DepositedERC20.address, + {gasLimit: 999999, gasPrice: 0} ) await BobAddLiquidity.wait() const approveAliceL2TX = await L2DepositedERC20.connect(env.alicel2Wallet).approve( L2LiquidityPool.address, addLiquidityAmount, + {gasLimit: 999999, gasPrice: 0} ) await approveAliceL2TX.wait() const AliceAddLiquidity = await L2LiquidityPool.connect(env.alicel2Wallet).addLiquidity( - addLiquidityAmount, - L2DepositedERC20.address + addLiquidityAmount, + L2DepositedERC20.address, + {gasLimit: 999999, gasPrice: 0} ) await AliceAddLiquidity.wait() @@ -297,6 +318,7 @@ describe('Liquidity Pool Test', async () => { }) it("should fast exit L2", async () => { + const fastExitAmount = utils.parseEther("10") const preKateL1ERC20Balance = await L1ERC20.balanceOf(env.katel1Wallet.address) @@ -304,13 +326,15 @@ describe('Liquidity Pool Test', async () => { const approveKateL2TX = await L2DepositedERC20.connect(env.katel2Wallet).approve( L2LiquidityPool.address, fastExitAmount, + {gasLimit: 999999, gasPrice: 0} ) await approveKateL2TX.wait() await env.waitForXDomainTransaction( L2LiquidityPool.connect(env.katel2Wallet).clientDepositL2( fastExitAmount, - L2DepositedERC20.address + L2DepositedERC20.address, + {gasLimit: 999999, gasPrice: 0} ), Direction.L2ToL1 ) @@ -326,21 +350,32 @@ describe('Liquidity Pool Test', async () => { expect(postKateL1ERC20Balance).to.deep.eq(preKateL1ERC20Balance.add(fastExitAmount.mul(95).div(100))) // Update the user reward per share - const updateRewardPerShareTX = await L2LiquidityPool.updateUserRewardPerShare(L2DepositedERC20.address) + const updateRewardPerShareTX = await L2LiquidityPool.updateUserRewardPerShare( + L2DepositedERC20.address, + {gasLimit: 999999, gasPrice: 0} + ) await updateRewardPerShareTX.wait() // The uese reward per share should be (10 * 0.035 / 200) * 10^12 - const updateRewardPerShare = await L2LiquidityPool.updateUserRewardPerShare(L2DepositedERC20.address) + const updateRewardPerShare = await L2LiquidityPool.updateUserRewardPerShare( + L2DepositedERC20.address, + {gasLimit: 999999, gasPrice: 0} + ) await updateRewardPerShare.wait() - const updatedPoolInfo = await L2LiquidityPool.poolInfo(L2DepositedERC20.address) + const updatedPoolInfo = await L2LiquidityPool.poolInfo( + L2DepositedERC20.address, + {gasLimit: 999999, gasPrice: 0} + ) expect(updatedPoolInfo.lastAccUserReward).to.deep.eq(updatedPoolInfo.accUserReward) + expect(updatedPoolInfo.accUserRewardPerShare).to.deep.eq( (fastExitAmount.mul(35).div(1000)).mul(BigNumber.from(10).pow(12)).div(poolInfo.userDepositAmount) ) }) it("should withdraw liquidity", async () => { + const withdrawAmount = utils.parseEther("10") const preBobL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) @@ -349,7 +384,8 @@ describe('Liquidity Pool Test', async () => { const withdrawTX = await L2LiquidityPool.withdrawLiqudity( withdrawAmount, L2DepositedERC20.address, - env.bobl2Wallet.address + env.bobl2Wallet.address, + {gasLimit: 999999, gasPrice: 0} ) await withdrawTX.wait() @@ -361,9 +397,11 @@ describe('Liquidity Pool Test', async () => { const poolInfo = await L2LiquidityPool.poolInfo(L2DepositedERC20.address) expect(preBobUserInfo.amount).to.deep.eq(postBobUserInfo.amount.add(withdrawAmount)) + expect(postBobUserInfo.rewardDebt).to.deep.eq( poolInfo.accUserRewardPerShare.mul(postBobUserInfo.amount).div(BigNumber.from(10).pow(12)) ) + expect(postBobUserInfo.pendingReward).to.deep.eq( preBobUserInfo.amount.mul(poolInfo.accUserRewardPerShare).div(BigNumber.from(10).pow(12)) ) @@ -375,7 +413,8 @@ describe('Liquidity Pool Test', async () => { const withdrawTX = await L2LiquidityPool.withdrawLiqudity( withdrawAmount, L2DepositedERC20.address, - env.bobl2Wallet.address + env.bobl2Wallet.address, + {gasLimit: 999999, gasPrice: 0} ) await expect(withdrawTX.wait()).to.be.eventually.rejected; }) @@ -388,11 +427,16 @@ describe('Liquidity Pool Test', async () => { const withdrawRewardTX = await L2LiquidityPool.withdrawReward( pendingReward, L2DepositedERC20.address, - env.bobl2Wallet.address + env.bobl2Wallet.address, + {gasLimit: 999999, gasPrice: 0} ) await withdrawRewardTX.wait() - const postBobUserInfo = await L2LiquidityPool.userInfo(L2DepositedERC20.address, env.bobl2Wallet.address) + const postBobUserInfo = await L2LiquidityPool.userInfo( + L2DepositedERC20.address, + env.bobl2Wallet.address, + {gasLimit: 999999, gasPrice: 0} + ) const postL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) expect(postBobUserInfo.pendingReward).to.deep.eq(preBobUserInfo.pendingReward.sub(pendingReward)) @@ -405,7 +449,8 @@ describe('Liquidity Pool Test', async () => { const withdrawRewardTX = await L2LiquidityPool.withdrawReward( withdrawRewardAmount, L2DepositedERC20.address, - env.bobl2Wallet.address + env.bobl2Wallet.address, + {gasLimit: 999999, gasPrice: 0} ) await expect(withdrawRewardTX.wait()).to.be.eventually.rejected; }) @@ -436,10 +481,13 @@ describe('Liquidity Pool Test', async () => { const postPoolInfo = await L1LiquidityPool.poolInfo(L1ERC20.address) expect(postL2ERC20Balance).to.deep.eq(preL2ERC20Balance.add(depositAmount.mul(95).div(100))) + expect(postL1ERC20Balance).to.deep.eq(preL1ERC20Balance.sub(depositAmount)) + expect(prePoolInfo.accUserReward).to.deep.eq( postPoolInfo.accUserReward.sub(depositAmount.mul(35).div(1000)) ) + expect(prePoolInfo.accOwnerReward).to.deep.eq( postPoolInfo.accOwnerReward.sub(depositAmount.mul(15).div(1000)) ) diff --git a/packages/omgx/wallet/test/d_nft.spec.ts b/packages/omgx/wallet/test/d_nft.spec.ts index ae5913660d10..4ead21c41d01 100644 --- a/packages/omgx/wallet/test/d_nft.spec.ts +++ b/packages/omgx/wallet/test/d_nft.spec.ts @@ -42,7 +42,8 @@ describe('NFT Test\n', async () => { nftSymbol, nftName, BigNumber.from(String(0)), //starting index for the tokenIDs - "" //the base URI is empty in this case + "", //the base URI is empty in this case + {gasLimit: 999999, gasPrice: 0} ) await L2ERC721.deployTransaction.wait() console.log(` 🌕 ${chalk.red('NFT L2ERC721 deployed to:')} ${chalk.green(L2ERC721.address)}`) @@ -86,7 +87,11 @@ describe('NFT Test\n', async () => { console.log(` ⚽️ ${chalk.red(`meta:`)} ${chalk.green(`${meta}`)}`) //mint one NFT - let nft = await L2ERC721.mintNFT(recipient,meta) + let nft = await L2ERC721.mintNFT( + recipient, + meta, + {gasLimit: 999999, gasPrice: 0} + ) await nft.wait() // console.log("ERC721:",nft) @@ -97,20 +102,27 @@ describe('NFT Test\n', async () => { console.log(` ⚽️ ${chalk.red(`balanceRecipient:`)} ${chalk.green(`${balanceRecipient.toString()}`)}`) //Get the URL - let nftURL = await L2ERC721.getTokenURI(BigNumber.from(String(0))) + let nftURL = await L2ERC721.getTokenURI( + BigNumber.from(String(0)), + {gasLimit: 999999, gasPrice: 0} + ) console.log(` ⚽️ ${chalk.red(`nftURL:`)} ${chalk.green(`${nftURL}`)}`) //Should be 1 - let TID = await L2ERC721.getLastTID() + let TID = await L2ERC721.getLastTID({gasLimit: 999999, gasPrice: 0}) console.log(` ⚽️ ${chalk.red(`TID:`)} ${chalk.green(`${TID.toString()}`)}`) //mint a second NFT meta = ownerName + '#' + Date.now().toString() + '#' + 'https://www.atcc.org/products/all/CCL-185.aspx'; - nft = await L2ERC721.mintNFT(recipient,meta) + nft = await L2ERC721.mintNFT( + recipient, + meta, + {gasLimit: 999999, gasPrice: 0} + ) await nft.wait() //Should be 2 - TID = await L2ERC721.getLastTID() + TID = await L2ERC721.getLastTID({gasLimit: 999999, gasPrice: 0}) console.log(` ⚽️ ${chalk.red(`TID:`)} ${chalk.green(`${TID.toString()}`)}`) //it('returns the amount of tokens owned by the given address', async function () { diff --git a/packages/omgx/wallet/wallet/public/env.js b/packages/omgx/wallet/wallet/public/env.js index 25cabcb758c3..b1723f28d68c 100644 --- a/packages/omgx/wallet/wallet/public/env.js +++ b/packages/omgx/wallet/wallet/public/env.js @@ -1 +1 @@ -window._env = {"NODE_ENV":"development","REACT_APP_INFURA_ID":"fd76d0a0b9e940058d6d42d5e261f517","REACT_APP_ETHERSCAN_API":"N4GKIV4TT1BP7UHC3VEJVJW2U6U6RWJ1ST","REACT_APP_POLL_INTERVAL":"20000"}; \ No newline at end of file +window._env = {"NODE_ENV":"development"}; \ No newline at end of file diff --git a/packages/omgx/wallet/wallet/src/deployment/local/addresses.json b/packages/omgx/wallet/wallet/src/deployment/local/addresses.json index 542efabb077d..4a78d0d57f00 100644 --- a/packages/omgx/wallet/wallet/src/deployment/local/addresses.json +++ b/packages/omgx/wallet/wallet/src/deployment/local/addresses.json @@ -1,12 +1,12 @@ { - "L1LiquidityPool": "0x247ADeE8E350cBEB05aB73DE88Be07CFbD736b2E", - "L2LiquidityPool": "0x88A7bA27B123e344f544EA19a50CA0c730FA87a2", - "L1ERC20": "0x22247e1bC94a8E640f179b2b1e8B50bF54C4e0F3", - "L2DepositedERC20": "0xFf413B7aeBcEfD231A2ce6592ABDD9aed820ec5a", - "L1ERC20Gateway": "0xa10542f51041645d61a49121383FD80b0D18D986", - "l1ETHGatewayAddress": "0x4F53A01556Dc6f120db9a1b4caE786D5f0b5792C", - "l1MessengerAddress": "0xA6404B184Ad3f6F41b6472f02ba45f25C6A66d49", - "L2TokenPool": "0xa94ec9484BfC9aB8d3fD80eB2735f132d257a135", - "AtomicSwap": "0xD4B82BDB1Abb1c1506173722c7d51FFCA659124f", - "L2ERC721": "0xEFA3B6C1203ED5fF8f4E1f6F7A09dCe529Fb9EbF" + "L1LiquidityPool": "0x162A433068F51e18b7d13932F27e66a3f99E6890", + "L2LiquidityPool": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", + "L1ERC20": "0x5081a39b8A5f0E35a8D959395a630b68B74Dd30f", + "L2DepositedERC20": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", + "L1ERC20Gateway": "0x1fA02b2d6A771842690194Cf62D91bdd92BfE28d", + "l1ETHGatewayAddress": "0x998abeb3E57409262aE5b751f60747921B33613E", + "l1MessengerAddress": "0x59b670e9fA9D0A427751Af201D676719a970857b", + "L2TokenPool": "0xdbC43Ba45381e02825b14322cDdd15eC4B3164E6", + "AtomicSwap": "0x4C4a2f8c81640e47606d3fd77B353E87Ba015584", + "L2ERC721": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf" } \ No newline at end of file From 887fd9a4b27fdb41a030ead9bf59e730230a19f6 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Thu, 3 Jun 2021 10:57:40 -0700 Subject: [PATCH 12/30] fix integration tests --- integration-tests/test/rpc.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration-tests/test/rpc.spec.ts b/integration-tests/test/rpc.spec.ts index 9866ba906f5d..fd321864e13b 100644 --- a/integration-tests/test/rpc.spec.ts +++ b/integration-tests/test/rpc.spec.ts @@ -321,7 +321,7 @@ describe('Basic RPC tests', () => { describe('eth_chainId', () => { it('should get the correct chainid', async () => { const { chainId } = await provider.getNetwork() - expect(chainId).to.be.eq(420) + expect(chainId).to.be.eq(28) }) }) From 1cf7ee7dff5bb923cb25f972c2481ffb7ead6b73 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Thu, 3 Jun 2021 11:27:29 -0700 Subject: [PATCH 13/30] minor tweaks to get everything to run on rebased develop branch --- .../wallet/deployment/local/addresses.json | 16 +- packages/omgx/wallet/test/a_message.spec.ts | 30 +- packages/omgx/wallet/test/b_setup.spec.ts | 23 +- packages/omgx/wallet/test/c_lp.spec.ts | 46 +- packages/omgx/wallet/test/d_nft.spec.ts | 12 +- packages/omgx/wallet/test/shared/utils.ts | 2 - .../src/deployment/local/addresses.json | 16 +- yarn.lock | 491 +----------------- 8 files changed, 83 insertions(+), 553 deletions(-) diff --git a/packages/omgx/wallet/deployment/local/addresses.json b/packages/omgx/wallet/deployment/local/addresses.json index 4a78d0d57f00..91c60a85e58e 100644 --- a/packages/omgx/wallet/deployment/local/addresses.json +++ b/packages/omgx/wallet/deployment/local/addresses.json @@ -1,12 +1,12 @@ { - "L1LiquidityPool": "0x162A433068F51e18b7d13932F27e66a3f99E6890", - "L2LiquidityPool": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", - "L1ERC20": "0x5081a39b8A5f0E35a8D959395a630b68B74Dd30f", - "L2DepositedERC20": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", - "L1ERC20Gateway": "0x1fA02b2d6A771842690194Cf62D91bdd92BfE28d", + "L1LiquidityPool": "0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", + "L2LiquidityPool": "0x998abeb3E57409262aE5b751f60747921B33613E", + "L1ERC20": "0x202CCe504e04bEd6fC0521238dDf04Bc9E8E15aB", + "L2DepositedERC20": "0x4826533B4897376654Bb4d4AD88B7faFD0C98528", + "L1ERC20Gateway": "0xf4B146FbA71F41E0592668ffbF264F1D186b2Ca8", "l1ETHGatewayAddress": "0x998abeb3E57409262aE5b751f60747921B33613E", "l1MessengerAddress": "0x59b670e9fA9D0A427751Af201D676719a970857b", - "L2TokenPool": "0xdbC43Ba45381e02825b14322cDdd15eC4B3164E6", - "AtomicSwap": "0x4C4a2f8c81640e47606d3fd77B353E87Ba015584", - "L2ERC721": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf" + "L2TokenPool": "0x172076E0166D1F9Cc711C77Adf8488051744980C", + "AtomicSwap": "0xBEc49fA140aCaA83533fB00A2BB19bDdd0290f25", + "L2ERC721": "0xc351628EB244ec633d5f21fBD6621e1a683B1181" } \ No newline at end of file diff --git a/packages/omgx/wallet/test/a_message.spec.ts b/packages/omgx/wallet/test/a_message.spec.ts index f1fa52ea7654..0c27b87f9c76 100644 --- a/packages/omgx/wallet/test/a_message.spec.ts +++ b/packages/omgx/wallet/test/a_message.spec.ts @@ -48,43 +48,39 @@ describe('Messenge Relayer Test', async () => { it('should deploy contracts', async () => { L1Message = await Factory__L1Message.deploy( - env.watcher.l1.messengerAddress, - {gasLimit: 999999, gasPrice: 0} - // env.customWatcher.l1.messengerAddress, + env.watcher.l1.messengerAddress ) await L1Message.deployTransaction.wait() - console.log(`🌕 ${chalk.red('L1 Message deployed to:')} ${chalk.green(L1Message.address)}`) + console.log(`🌕 ${chalk.green('L1 Message deployed to:')} ${chalk.white(L1Message.address)}`) L2Message = await Factory__L2Message.deploy( env.watcher.l2.messengerAddress, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await L2Message.deployTransaction.wait() - console.log(`🌕 ${chalk.red('L2 Message deployed to:')} ${chalk.green(L2Message.address)}`) + console.log(`🌕 ${chalk.green('L2 Message deployed to:')} ${chalk.white(L2Message.address)}`) // Initialize L1 message const L1MessageTX = await L1Message.init( - L2Message.address, - {gasLimit: 999999, gasPrice: 0} + L2Message.address ) await L1MessageTX.wait() - console.log(`⭐️ ${chalk.blue('L1 Message initialized:')} ${chalk.green(L1MessageTX.hash)}`) + console.log(`⭐️ ${chalk.green('L1 Message initialized:')} ${chalk.white(L1MessageTX.hash)}`) // Initialize L2 message const L2MessageTX = await L2Message.init( L1Message.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await L2MessageTX.wait() - console.log(`⭐️ ${chalk.blue('L2 Message initialized:')} ${chalk.green(L2MessageTX.hash)}`) + console.log(`⭐️ ${chalk.green('L2 Message initialized:')} ${chalk.white(L2MessageTX.hash)}`) }) it('should send message from L2 to L1', async () => { await env.waitForXDomainTransaction( L2Message.sendMessageL2ToL1({ - gasLimit: 999999, - gasPrice: 0, - //nonce: 221 + gasLimit: 800000, + gasPrice: 0 }), Direction.L2ToL1 ) @@ -92,11 +88,7 @@ describe('Messenge Relayer Test', async () => { it('should send message from L1 to L2', async () => { await env.waitForXDomainTransaction( - L1Message.sendMessageL1ToL2({ - gasLimit: 999999, - gasPrice: 0, - //nonce: 28 - }), + L1Message.sendMessageL1ToL2(), Direction.L1ToL2 ) }) diff --git a/packages/omgx/wallet/test/b_setup.spec.ts b/packages/omgx/wallet/test/b_setup.spec.ts index 1f0ebf3cf6bb..d7a7e3257e90 100644 --- a/packages/omgx/wallet/test/b_setup.spec.ts +++ b/packages/omgx/wallet/test/b_setup.spec.ts @@ -97,15 +97,14 @@ describe('LP System setup', async () => { // Deploy L2 liquidity pool L2LiquidityPool = await Factory__L2LiquidityPool.deploy( env.watcher.l2.messengerAddress, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await L2LiquidityPool.deployTransaction.wait() console.log(`🌕 ${chalk.red('L2LiquidityPool deployed to:')} ${chalk.green(L2LiquidityPool.address)}`) // Deploy L1 liquidity pool L1LiquidityPool = await Factory__L1LiquidityPool.deploy( - env.watcher.l1.messengerAddress, - //{gasLimit: 999999, gasPrice: 0} + env.watcher.l1.messengerAddress ) await L1LiquidityPool.deployTransaction.wait() console.log(`🌕 ${chalk.red('L1LiquidityPool deployed to:')} ${chalk.green(L1LiquidityPool.address)}`) @@ -115,7 +114,7 @@ describe('LP System setup', async () => { /* userRewardFeeRate 3.5% */ 35, /* ownerRewardFeeRate 1.5% */ 15, L2LiquidityPool.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await L1LiquidityPoolTX.wait() console.log(`⭐️ ${chalk.blue('L1 LP initialized:')} ${chalk.green(L1LiquidityPoolTX.hash)}`) @@ -125,7 +124,7 @@ describe('LP System setup', async () => { /* userRewardFeeRate 3.5% */ 35, /* ownerRewardFeeRate 1.5% */ 15, L1LiquidityPool.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await L2LiquidityPoolTX.wait() console.log(`⭐️ ${chalk.blue('L2 LP initialized:')} ${chalk.green(L2LiquidityPoolTX.hash)}`) @@ -136,8 +135,7 @@ describe('LP System setup', async () => { L1ERC20 = await Factory__L1ERC20.deploy( initialSupply, tokenName, - tokenSymbol, - //{gasLimit: 999999, gasPrice: 0} + tokenSymbol ) await L1ERC20.deployTransaction.wait() console.log(`🌕 ${chalk.red('L1ERC20 deployed to:')} ${chalk.green(L1ERC20.address)}`) @@ -148,7 +146,7 @@ describe('LP System setup', async () => { env.watcher.l2.messengerAddress, tokenName, tokenSymbol, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await L2DepositedERC20.deployTransaction.wait() console.log(`🌕 ${chalk.red('L2DepositedERC20 deployed to:')} ${chalk.green(L2DepositedERC20.address)}`) @@ -158,8 +156,7 @@ describe('LP System setup', async () => { L1ERC20Gateway = await Factory__L1ERC20Gateway.deploy( L1ERC20.address, L2DepositedERC20.address, - env.watcher.l1.messengerAddress, - //{gasLimit: 999999, gasPrice: 0} + env.watcher.l1.messengerAddress ) await L1ERC20Gateway.deployTransaction.wait() console.log(`🌕 ${chalk.red('L1ERC20Gateway deployed to:')} ${chalk.green(L1ERC20Gateway.address)}`) @@ -167,20 +164,20 @@ describe('LP System setup', async () => { //Initialize the ERC20 for the new token const initL2ERC20TX = await L2DepositedERC20.init( L1ERC20Gateway.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ); await initL2ERC20TX.wait(); console.log(`⭐️ ${chalk.blue('L2DepositedERC20 initialized:')} ${chalk.green(initL2ERC20TX.hash)}`) //Deploy L2 token pool for the new token - L2TokenPool = await Factory__L2TokenPool.deploy({gasLimit: 999999, gasPrice: 0}) + L2TokenPool = await Factory__L2TokenPool.deploy({gasLimit: 1000000, gasPrice: 0}) await L2TokenPool.deployTransaction.wait() console.log(`🌕 ${chalk.red('L2TokenPool deployed to:')} ${chalk.green(L2TokenPool.address)}`) //Register ERC20 token address in L2 token pool const registerL2TokenPoolTX = await L2TokenPool.registerTokenAddress( L2DepositedERC20.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ); await registerL2TokenPoolTX.wait() console.log(`⭐️ ${chalk.blue('L2TokenPool registered:')} ${chalk.green(registerL2TokenPoolTX.hash)}`) diff --git a/packages/omgx/wallet/test/c_lp.spec.ts b/packages/omgx/wallet/test/c_lp.spec.ts index cf9d3a42f006..cbac67c526c1 100644 --- a/packages/omgx/wallet/test/c_lp.spec.ts +++ b/packages/omgx/wallet/test/c_lp.spec.ts @@ -84,12 +84,12 @@ describe('Liquidity Pool Test', async () => { const approveL1ERC20TX = await L1ERC20.approve( L1ERC20Gateway.address, depositL2ERC20Amount, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await approveL1ERC20TX.wait() await env.waitForXDomainTransaction( - L1ERC20Gateway.deposit(depositL2ERC20Amount, {gasLimit: 999999, gasPrice: 0}), + L1ERC20Gateway.deposit(depositL2ERC20Amount, {gasLimit: 800000, gasPrice: 0}), Direction.L1ToL2 ) @@ -116,14 +116,14 @@ describe('Liquidity Pool Test', async () => { const tranferToAliceTX = await L2DepositedERC20.transfer( env.alicel2Wallet.address, transferL2ERC20Amount, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await tranferToAliceTX.wait() const tranferToKateTX = await L2DepositedERC20.transfer( env.katel2Wallet.address, transferL2ERC20Amount, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await tranferToKateTX.wait() @@ -151,14 +151,14 @@ describe('Liquidity Pool Test', async () => { const approveL2TPTX = await L2DepositedERC20.approve( L2TokenPool.address, addL2TPAmount, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await approveL2TPTX.wait() const transferL2TPTX = await L2DepositedERC20.transfer( L2TokenPool.address, addL2TPAmount, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ); await transferL2TPTX.wait() @@ -197,7 +197,7 @@ describe('Liquidity Pool Test', async () => { const registerPoolERC20TX = await L2LiquidityPool.registerPool( L1ERC20.address, L2DepositedERC20.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await registerPoolERC20TX.wait() @@ -209,7 +209,7 @@ describe('Liquidity Pool Test', async () => { const registerPoolETHTX = await L2LiquidityPool.registerPool( "0x0000000000000000000000000000000000000000", env.L2ETHGateway.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await registerPoolETHTX.wait() @@ -223,7 +223,7 @@ describe('Liquidity Pool Test', async () => { const registerPoolTX = await L2LiquidityPool.registerPool( L1ERC20.address, L2DepositedERC20.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await expect(registerPoolTX.wait()).to.be.eventually.rejected; }) @@ -268,28 +268,28 @@ describe('Liquidity Pool Test', async () => { const approveBobL2TX = await L2DepositedERC20.approve( L2LiquidityPool.address, addLiquidityAmount, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await approveBobL2TX.wait() const BobAddLiquidity = await L2LiquidityPool.addLiquidity( addLiquidityAmount, L2DepositedERC20.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await BobAddLiquidity.wait() const approveAliceL2TX = await L2DepositedERC20.connect(env.alicel2Wallet).approve( L2LiquidityPool.address, addLiquidityAmount, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await approveAliceL2TX.wait() const AliceAddLiquidity = await L2LiquidityPool.connect(env.alicel2Wallet).addLiquidity( addLiquidityAmount, L2DepositedERC20.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await AliceAddLiquidity.wait() @@ -326,7 +326,7 @@ describe('Liquidity Pool Test', async () => { const approveKateL2TX = await L2DepositedERC20.connect(env.katel2Wallet).approve( L2LiquidityPool.address, fastExitAmount, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await approveKateL2TX.wait() @@ -334,7 +334,7 @@ describe('Liquidity Pool Test', async () => { L2LiquidityPool.connect(env.katel2Wallet).clientDepositL2( fastExitAmount, L2DepositedERC20.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ), Direction.L2ToL1 ) @@ -352,19 +352,19 @@ describe('Liquidity Pool Test', async () => { // Update the user reward per share const updateRewardPerShareTX = await L2LiquidityPool.updateUserRewardPerShare( L2DepositedERC20.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await updateRewardPerShareTX.wait() // The uese reward per share should be (10 * 0.035 / 200) * 10^12 const updateRewardPerShare = await L2LiquidityPool.updateUserRewardPerShare( L2DepositedERC20.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await updateRewardPerShare.wait() const updatedPoolInfo = await L2LiquidityPool.poolInfo( L2DepositedERC20.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) expect(updatedPoolInfo.lastAccUserReward).to.deep.eq(updatedPoolInfo.accUserReward) @@ -385,7 +385,7 @@ describe('Liquidity Pool Test', async () => { withdrawAmount, L2DepositedERC20.address, env.bobl2Wallet.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await withdrawTX.wait() @@ -414,7 +414,7 @@ describe('Liquidity Pool Test', async () => { withdrawAmount, L2DepositedERC20.address, env.bobl2Wallet.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await expect(withdrawTX.wait()).to.be.eventually.rejected; }) @@ -428,14 +428,14 @@ describe('Liquidity Pool Test', async () => { pendingReward, L2DepositedERC20.address, env.bobl2Wallet.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await withdrawRewardTX.wait() const postBobUserInfo = await L2LiquidityPool.userInfo( L2DepositedERC20.address, env.bobl2Wallet.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) const postL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) @@ -450,7 +450,7 @@ describe('Liquidity Pool Test', async () => { withdrawRewardAmount, L2DepositedERC20.address, env.bobl2Wallet.address, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await expect(withdrawRewardTX.wait()).to.be.eventually.rejected; }) diff --git a/packages/omgx/wallet/test/d_nft.spec.ts b/packages/omgx/wallet/test/d_nft.spec.ts index 4ead21c41d01..1b89a0a0a1b3 100644 --- a/packages/omgx/wallet/test/d_nft.spec.ts +++ b/packages/omgx/wallet/test/d_nft.spec.ts @@ -43,7 +43,7 @@ describe('NFT Test\n', async () => { nftName, BigNumber.from(String(0)), //starting index for the tokenIDs "", //the base URI is empty in this case - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await L2ERC721.deployTransaction.wait() console.log(` 🌕 ${chalk.red('NFT L2ERC721 deployed to:')} ${chalk.green(L2ERC721.address)}`) @@ -90,7 +90,7 @@ describe('NFT Test\n', async () => { let nft = await L2ERC721.mintNFT( recipient, meta, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await nft.wait() // console.log("ERC721:",nft) @@ -104,12 +104,12 @@ describe('NFT Test\n', async () => { //Get the URL let nftURL = await L2ERC721.getTokenURI( BigNumber.from(String(0)), - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) console.log(` ⚽️ ${chalk.red(`nftURL:`)} ${chalk.green(`${nftURL}`)}`) //Should be 1 - let TID = await L2ERC721.getLastTID({gasLimit: 999999, gasPrice: 0}) + let TID = await L2ERC721.getLastTID({gasLimit: 800000, gasPrice: 0}) console.log(` ⚽️ ${chalk.red(`TID:`)} ${chalk.green(`${TID.toString()}`)}`) //mint a second NFT @@ -117,12 +117,12 @@ describe('NFT Test\n', async () => { nft = await L2ERC721.mintNFT( recipient, meta, - {gasLimit: 999999, gasPrice: 0} + {gasLimit: 800000, gasPrice: 0} ) await nft.wait() //Should be 2 - TID = await L2ERC721.getLastTID({gasLimit: 999999, gasPrice: 0}) + TID = await L2ERC721.getLastTID({gasLimit: 800000, gasPrice: 0}) console.log(` ⚽️ ${chalk.red(`TID:`)} ${chalk.green(`${TID.toString()}`)}`) //it('returns the amount of tokens owned by the given address', async function () { diff --git a/packages/omgx/wallet/test/shared/utils.ts b/packages/omgx/wallet/test/shared/utils.ts index 709011593af9..6e89d1f7b189 100644 --- a/packages/omgx/wallet/test/shared/utils.ts +++ b/packages/omgx/wallet/test/shared/utils.ts @@ -12,10 +12,8 @@ require('dotenv').config() export const GWEI = BigNumber.from(0) // The hardhat instance -//const l1HttpPort = 9545 export const l1Provider = new providers.JsonRpcProvider(process.env.L1_NODE_WEB3_URL) export const l2Provider = new providers.JsonRpcProvider(process.env.L2_NODE_WEB3_URL) -// export const l2Provider = injectL2Context(l2P) // An account for testing which is funded on L1 export const bobl1Wallet = new Wallet(process.env.TEST_PRIVATE_KEY_1,l1Provider) diff --git a/packages/omgx/wallet/wallet/src/deployment/local/addresses.json b/packages/omgx/wallet/wallet/src/deployment/local/addresses.json index 4a78d0d57f00..91c60a85e58e 100644 --- a/packages/omgx/wallet/wallet/src/deployment/local/addresses.json +++ b/packages/omgx/wallet/wallet/src/deployment/local/addresses.json @@ -1,12 +1,12 @@ { - "L1LiquidityPool": "0x162A433068F51e18b7d13932F27e66a3f99E6890", - "L2LiquidityPool": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", - "L1ERC20": "0x5081a39b8A5f0E35a8D959395a630b68B74Dd30f", - "L2DepositedERC20": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", - "L1ERC20Gateway": "0x1fA02b2d6A771842690194Cf62D91bdd92BfE28d", + "L1LiquidityPool": "0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", + "L2LiquidityPool": "0x998abeb3E57409262aE5b751f60747921B33613E", + "L1ERC20": "0x202CCe504e04bEd6fC0521238dDf04Bc9E8E15aB", + "L2DepositedERC20": "0x4826533B4897376654Bb4d4AD88B7faFD0C98528", + "L1ERC20Gateway": "0xf4B146FbA71F41E0592668ffbF264F1D186b2Ca8", "l1ETHGatewayAddress": "0x998abeb3E57409262aE5b751f60747921B33613E", "l1MessengerAddress": "0x59b670e9fA9D0A427751Af201D676719a970857b", - "L2TokenPool": "0xdbC43Ba45381e02825b14322cDdd15eC4B3164E6", - "AtomicSwap": "0x4C4a2f8c81640e47606d3fd77B353E87Ba015584", - "L2ERC721": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf" + "L2TokenPool": "0x172076E0166D1F9Cc711C77Adf8488051744980C", + "AtomicSwap": "0xBEc49fA140aCaA83533fB00A2BB19bDdd0290f25", + "L2ERC721": "0xc351628EB244ec633d5f21fBD6621e1a683B1181" } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 2d6092d22443..848251a70699 100644 --- a/yarn.lock +++ b/yarn.lock @@ -256,6 +256,13 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== +"@eth-optimism/hardhat-ovm@^0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@eth-optimism/hardhat-ovm/-/hardhat-ovm-0.0.2.tgz#3317fece96db0b79cc9a1e70ceb933a8b437da6d" + integrity sha512-olo7Bsx2GeII2b9a1JZI7bvItvflVkAwowtjtdxMmAzl3+GX3uK+mltG9+v59DJZ8GAkcaFlaL0vXQ4rMT/XrQ== + dependencies: + node-fetch "^2.6.1" + "@eth-optimism/solc@^0.6.12-alpha.1": version "0.6.12-alpha.1" resolved "https://registry.yarnpkg.com/@eth-optimism/solc/-/solc-0.6.12-alpha.1.tgz#041876f83b34c6afe2f19dfe9626568df6ed8590" @@ -446,21 +453,6 @@ "@ethersproject/properties" "^5.2.0" "@ethersproject/strings" "^5.2.0" -"@ethersproject/abi@5.3.0", "@ethersproject/abi@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.3.0.tgz#00f0647d906edcd32c50b16ab9c98f83e208dcf1" - integrity sha512-NaT4UacjOwca8qCG/gv8k+DgTcWu49xlrvdhr/p8PTFnoS8e3aMWqjI3znFME5Txa/QWXDrg2/heufIUue9rtw== - dependencies: - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/hash" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/abstract-provider@5.2.0", "@ethersproject/abstract-provider@^5.0.0", "@ethersproject/abstract-provider@^5.0.5", "@ethersproject/abstract-provider@^5.0.8", "@ethersproject/abstract-provider@^5.0.9", "@ethersproject/abstract-provider@^5.1.0", "@ethersproject/abstract-provider@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.2.0.tgz#b5c24b162f119b5d241738ded9555186013aa77d" @@ -474,19 +466,6 @@ "@ethersproject/transactions" "^5.2.0" "@ethersproject/web" "^5.2.0" -"@ethersproject/abstract-provider@5.3.0", "@ethersproject/abstract-provider@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.3.0.tgz#f4c0ae4a4cef9f204d7781de805fd44b72756c81" - integrity sha512-1+MLhGP1GwxBDBNwMWVmhCsvKwh4gK7oIfOrmlmePNeskg1NhIrYssraJBieaFNHUYfKEd/1DjiVZMw8Qu5Cxw== - dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/networks" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/web" "^5.3.0" - "@ethersproject/abstract-signer@5.2.0", "@ethersproject/abstract-signer@^5.0.0", "@ethersproject/abstract-signer@^5.1.0", "@ethersproject/abstract-signer@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.2.0.tgz#8e291fb6558b4190fb3e2fe440a9ffd092a2f459" @@ -498,17 +477,6 @@ "@ethersproject/logger" "^5.2.0" "@ethersproject/properties" "^5.2.0" -"@ethersproject/abstract-signer@5.3.0", "@ethersproject/abstract-signer@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.3.0.tgz#05172b653e15b535ed5854ef5f6a72f4b441052d" - integrity sha512-w8IFwOYqiPrtvosPuArZ3+QPR2nmdVTRrVY8uJYL3NNfMmQfTy3V3l2wbzX47UUlNbPJY+gKvzJAyvK1onZxJg== - dependencies: - "@ethersproject/abstract-provider" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/address@5.2.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.0", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.2.0.tgz#afcfa92db84582f54a60a9da361cea4aae450a69" @@ -520,17 +488,6 @@ "@ethersproject/logger" "^5.2.0" "@ethersproject/rlp" "^5.2.0" -"@ethersproject/address@5.3.0", "@ethersproject/address@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.3.0.tgz#e53b69eacebf332e8175de814c5e6507d6932518" - integrity sha512-29TgjzEBK+gUEUAOfWCG7s9IxLNLCqvr+oDSk6L9TXD0VLvZJKhJV479tKQqheVA81OeGxfpdxYtUVH8hqlCvA== - dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/rlp" "^5.3.0" - "@ethersproject/base64@5.2.0", "@ethersproject/base64@^5.0.0", "@ethersproject/base64@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.2.0.tgz#e01066d25e5b4e8a051545163bee5def47bd9534" @@ -538,13 +495,6 @@ dependencies: "@ethersproject/bytes" "^5.2.0" -"@ethersproject/base64@5.3.0", "@ethersproject/base64@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.3.0.tgz#b831fb35418b42ad24d943c557259062b8640824" - integrity sha512-JIqgtOmgKcbc2sjGWTXyXktqUhvFUDte8fPVsAaOrcPiJf6YotNF+nsrOYGC9pbHBEGSuSBp3QR0varkO8JHEw== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/basex@5.2.0", "@ethersproject/basex@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.2.0.tgz#f921039e3bdfdab8c5a7ba8b21e81c83fc1ab98b" @@ -553,14 +503,6 @@ "@ethersproject/bytes" "^5.2.0" "@ethersproject/properties" "^5.2.0" -"@ethersproject/basex@5.3.0", "@ethersproject/basex@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.3.0.tgz#02dea3ab8559ae625c6d548bc11773432255c916" - integrity sha512-8J4nS6t/SOnoCgr3DF5WCSRLC5YwTKYpZWJqeyYQLX+86TwPhtzvHXacODzcDII9tWKhVg6g0Bka8JCBWXsCiQ== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/bignumber@5.2.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.0", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.2.0.tgz#03f91ea740c5adb6f8c6a2e91bb4ee5ffaff5503" @@ -570,15 +512,6 @@ "@ethersproject/logger" "^5.2.0" bn.js "^4.4.0" -"@ethersproject/bignumber@5.3.0", "@ethersproject/bignumber@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.3.0.tgz#74ab2ec9c3bda4e344920565720a6ee9c794e9db" - integrity sha512-5xguJ+Q1/zRMgHgDCaqAexx/8DwDVLRemw2i6uR8KyGjwGdXI8f32QZZ1cKGucBN6ekJvpUpHy6XAuQnTv0mPA== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - bn.js "^4.11.9" - "@ethersproject/bytes@5.2.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.2.0.tgz#327917d5a1600f92fd2a9da4052fa6d974583132" @@ -586,13 +519,6 @@ dependencies: "@ethersproject/logger" "^5.2.0" -"@ethersproject/bytes@5.3.0", "@ethersproject/bytes@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.3.0.tgz#473e0da7f831d535b2002be05e6f4ca3729a1bc9" - integrity sha512-rqLJjdVqCcn7glPer7Fxh87PRqlnRScVAoxcIP3PmOUNApMWJ6yRdOFfo2KvPAdO7Le3yEI1o0YW+Yvr7XCYvw== - dependencies: - "@ethersproject/logger" "^5.3.0" - "@ethersproject/constants@5.2.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.0", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.2.0.tgz#ccea78ce325f78abfe7358397c03eec570518d92" @@ -600,13 +526,6 @@ dependencies: "@ethersproject/bignumber" "^5.2.0" -"@ethersproject/constants@5.3.0", "@ethersproject/constants@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.3.0.tgz#a5d6d86c0eec2c64c3024479609493b9afb3fc77" - integrity sha512-4y1feNOwEpgjAfiCFWOHznvv6qUF/H6uI0UKp8xdhftb+H+FbKflXg1pOgH5qs4Sr7EYBL+zPyPb+YD5g1aEyw== - dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/contracts@5.2.0", "@ethersproject/contracts@^5.0.0", "@ethersproject/contracts@^5.0.5": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.2.0.tgz#f54e12ec4a323f2bf93c338034839cc6dfc1e347" @@ -623,22 +542,6 @@ "@ethersproject/properties" "^5.2.0" "@ethersproject/transactions" "^5.2.0" -"@ethersproject/contracts@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.3.0.tgz#ad699a3abaae30bfb6422cf31813a663b2d4099c" - integrity sha512-eDyQ8ltykvyQqnGZxb/c1e0OnEtzqXhNNC4BX8nhYBCaoBrYYuK/1fLmyEvc5+XUMoxNhwpYkoSSwvPLci7/Zg== - dependencies: - "@ethersproject/abi" "^5.3.0" - "@ethersproject/abstract-provider" "^5.3.0" - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/hardware-wallets@^5.0.8": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/hardware-wallets/-/hardware-wallets-5.2.0.tgz#995449aedad4346a4e728e1d6dfd35b35b690b22" @@ -665,20 +568,6 @@ "@ethersproject/properties" "^5.2.0" "@ethersproject/strings" "^5.2.0" -"@ethersproject/hash@5.3.0", "@ethersproject/hash@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.3.0.tgz#f65e3bf3db3282df4da676db6cfa049535dd3643" - integrity sha512-gAFZSjUPQ32CIfoKSMtMEQ+IO0kQxqhwz9fCIFt2DtAq2u4pWt8mL9Z5P0r6KkLcQU8LE9FmuPPyd+JvBzmr1w== - dependencies: - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/hdnode@5.2.0", "@ethersproject/hdnode@^5.0.0", "@ethersproject/hdnode@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.2.0.tgz#efea9b2f713e55aa5ba23cc62b4aac6d08dcfa53" @@ -697,24 +586,6 @@ "@ethersproject/transactions" "^5.2.0" "@ethersproject/wordlists" "^5.2.0" -"@ethersproject/hdnode@5.3.0", "@ethersproject/hdnode@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.3.0.tgz#26fed65ffd5c25463fddff13f5fb4e5617553c94" - integrity sha512-zLmmtLNoDMGoYRdjOab01Zqkvp+TmZyCGDAMQF1Bs3yZyBs/kzTNi1qJjR1jVUcPP5CWGtjFwY8iNG8oNV9J8g== - dependencies: - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/basex" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/pbkdf2" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/sha2" "^5.3.0" - "@ethersproject/signing-key" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/wordlists" "^5.3.0" - "@ethersproject/json-wallets@5.2.0", "@ethersproject/json-wallets@^5.0.0", "@ethersproject/json-wallets@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.2.0.tgz#d41c7c39e4d236b586e26e2145b09ac49dc56608" @@ -734,25 +605,6 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/json-wallets@5.3.0", "@ethersproject/json-wallets@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.3.0.tgz#7b1a5ff500c12aa8597ae82c8939837b0449376e" - integrity sha512-/xwbqaIb5grUIGNmeEaz8GdcpmDr++X8WT4Jqcclnxow8PXCUHFeDxjf3O+nSuoqOYG/Ds0+BI5xuQKbva6Xkw== - dependencies: - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/hdnode" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/pbkdf2" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/random" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - "@ethersproject/keccak256@5.2.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.0", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.2.0.tgz#15257862807c23f24a3209d1016d322dca85a464" @@ -761,24 +613,11 @@ "@ethersproject/bytes" "^5.2.0" js-sha3 "0.5.7" -"@ethersproject/keccak256@5.3.0", "@ethersproject/keccak256@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.3.0.tgz#fb5cd36bdfd6fa02e2ea84964078a9fc6bd731be" - integrity sha512-Gv2YqgIUmRbYVNIibafT0qGaeGYLIA/EdWHJ7JcVxVSs2vyxafGxOJ5VpSBHWeOIsE6OOaCelYowhuuTicgdFQ== - dependencies: - "@ethersproject/bytes" "^5.3.0" - js-sha3 "0.5.7" - "@ethersproject/logger@5.2.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.2.0.tgz#accf5348251f78b6c8891af67f42490a4ea4e5ae" integrity sha512-dPZ6/E3YiArgG8dI/spGkaRDry7YZpCntf4gm/c6SI8Mbqiihd7q3nuLN5VvDap/0K3xm3RE1AIUOcUwwh2ezQ== -"@ethersproject/logger@5.3.0", "@ethersproject/logger@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.3.0.tgz#7a69fa1d4ca0d4b7138da1627eb152f763d84dd0" - integrity sha512-8bwJ2gxJGkZZnpQSq5uSiZSJjyVTWmlGft4oH8vxHdvO1Asy4TwVepAhPgxIQIMxXZFUNMych1YjIV4oQ4I7dA== - "@ethersproject/networks@5.2.0", "@ethersproject/networks@^5.0.0", "@ethersproject/networks@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.2.0.tgz#66c23c6ac477dd703645b2c971ac842d8b8aa524" @@ -786,13 +625,6 @@ dependencies: "@ethersproject/logger" "^5.2.0" -"@ethersproject/networks@5.3.0", "@ethersproject/networks@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.3.0.tgz#d8ad06eb107c69fb8651f4c81ddd0e88944fdfea" - integrity sha512-XGbD9MMgqrR7SYz8o6xVgdG+25v7YT5vQG8ZdlcLj2I7elOBM7VNeQrnxfSN7rWQNcqu2z80OM29gGbQz+4Low== - dependencies: - "@ethersproject/logger" "^5.3.0" - "@ethersproject/pbkdf2@5.2.0", "@ethersproject/pbkdf2@^5.0.0", "@ethersproject/pbkdf2@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.2.0.tgz#8166a7a7238a5fd1d9bb6eb2000fea0f19fdde06" @@ -801,14 +633,6 @@ "@ethersproject/bytes" "^5.2.0" "@ethersproject/sha2" "^5.2.0" -"@ethersproject/pbkdf2@5.3.0", "@ethersproject/pbkdf2@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.3.0.tgz#8adbb41489c3c9f319cc44bc7d3e6095fd468dc8" - integrity sha512-Q9ChVU6gBFiex0FSdtzo4b0SAKz3ZYcYVFLrEWHL0FnHvNk3J3WgAtRNtBQGQYn/T5wkoTdZttMbfBkFlaiWcA== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/sha2" "^5.3.0" - "@ethersproject/properties@5.2.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.2.0.tgz#8fadf367f7ac7357019d0224aa579b234c545ac1" @@ -816,13 +640,6 @@ dependencies: "@ethersproject/logger" "^5.2.0" -"@ethersproject/properties@5.3.0", "@ethersproject/properties@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.3.0.tgz#feef4c4babeb7c10a6b3449575016f4ad2c092b2" - integrity sha512-PaHxJyM5/bfusk6vr3yP//JMnm4UEojpzuWGTmtL5X4uNhNnFNvlYilZLyDr4I9cTkIbipCMsAuIcXWsmdRnEw== - dependencies: - "@ethersproject/logger" "^5.3.0" - "@ethersproject/providers@5.2.0", "@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.0.14", "@ethersproject/providers@^5.0.21", "@ethersproject/providers@^5.0.24": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.2.0.tgz#b2f3e3b2ca4567c8372543ceb6f3c6e3a2370783" @@ -848,31 +665,6 @@ bech32 "1.1.4" ws "7.2.3" -"@ethersproject/providers@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.3.0.tgz#bccb49f1073a7d56e24f49abb14bb281c9b08636" - integrity sha512-HtL+DEbzPcRyfrkrMay7Rk/4he+NbUpzI/wHXP4Cqtra82nQOnqqCgTQc4HbdDrl75WVxG/JRMFhyneIPIMZaA== - dependencies: - "@ethersproject/abstract-provider" "^5.3.0" - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/basex" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/hash" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/networks" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/random" "^5.3.0" - "@ethersproject/rlp" "^5.3.0" - "@ethersproject/sha2" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/web" "^5.3.0" - bech32 "1.1.4" - ws "7.4.6" - "@ethersproject/random@5.2.0", "@ethersproject/random@^5.0.0", "@ethersproject/random@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.2.0.tgz#1d7e19f17d88eda56228a263063826829e49eebe" @@ -881,14 +673,6 @@ "@ethersproject/bytes" "^5.2.0" "@ethersproject/logger" "^5.2.0" -"@ethersproject/random@5.3.0", "@ethersproject/random@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.3.0.tgz#7c46bf36e50cb0d0550bc8c666af8e1d4496dc1a" - integrity sha512-A5SL/4inutSwt3Fh2OD0x2gz+x6GHmuUnIPkR7zAiTidMD2N8F6tZdMF1hlQKWVCcVMWhEQg8mWijhEzm6BBYw== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/rlp@5.2.0", "@ethersproject/rlp@^5.0.0", "@ethersproject/rlp@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.2.0.tgz#bbf605183818a9d96bdc40323d734c79e26cfaca" @@ -897,14 +681,6 @@ "@ethersproject/bytes" "^5.2.0" "@ethersproject/logger" "^5.2.0" -"@ethersproject/rlp@5.3.0", "@ethersproject/rlp@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.3.0.tgz#7cb93a7b5dfa69163894153c9d4b0d936f333188" - integrity sha512-oI0joYpsRanl9guDubaW+1NbcpK0vJ3F/6Wpcanzcnqq+oaW9O5E98liwkEDPcb16BUTLIJ+ZF8GPIHYxJ/5Pw== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/sha2@5.2.0", "@ethersproject/sha2@^5.0.0", "@ethersproject/sha2@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.2.0.tgz#ae18fa6c09c6d99fa2b564dac7276bcd513c1579" @@ -914,15 +690,6 @@ "@ethersproject/logger" "^5.2.0" hash.js "1.1.3" -"@ethersproject/sha2@5.3.0", "@ethersproject/sha2@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.3.0.tgz#209f9a1649f7d2452dcd5e5b94af43b7f3f42366" - integrity sha512-r5ftlwKcocYEuFz2JbeKOT5SAsCV4m1RJDsTOEfQ5L67ZC7NFDK5i7maPdn1bx4nPhylF9VAwxSrQ1esmwzylg== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - hash.js "1.1.7" - "@ethersproject/signing-key@5.2.0", "@ethersproject/signing-key@^5.0.0", "@ethersproject/signing-key@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.2.0.tgz#e8eb10d3c0f4a575479db8d70c62aaf93cd384d1" @@ -934,18 +701,6 @@ bn.js "^4.4.0" elliptic "6.5.4" -"@ethersproject/signing-key@5.3.0", "@ethersproject/signing-key@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.3.0.tgz#a96c88f8173e1abedfa35de32d3e5db7c48e5259" - integrity sha512-+DX/GwHAd0ok1bgedV1cKO0zfK7P/9aEyNoaYiRsGHpCecN7mhLqcdoUiUzE7Uz86LBsxm5ssK0qA1kBB47fbQ== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.7" - "@ethersproject/solidity@5.2.0", "@ethersproject/solidity@^5.0.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.2.0.tgz#ac902d8f8b11bf58fd37ccf77392178cbbd0b08f" @@ -957,17 +712,6 @@ "@ethersproject/sha2" "^5.2.0" "@ethersproject/strings" "^5.2.0" -"@ethersproject/solidity@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.3.0.tgz#2a0b00b4aaaef99a080ddea13acab1fa35cd4a93" - integrity sha512-uLRBaNUiISHbut94XKewJgQh6UmydWTBp71I7I21pkjVXfZO2dJ5EOo3jCnumJc01M4LOm79dlNNmF3oGIvweQ== - dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/sha2" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/strings@5.2.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.0", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.2.0.tgz#e93d989859587191c3f64bda124d9dedbc3f5a97" @@ -977,15 +721,6 @@ "@ethersproject/constants" "^5.2.0" "@ethersproject/logger" "^5.2.0" -"@ethersproject/strings@5.3.0", "@ethersproject/strings@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.3.0.tgz#a6b640aab56a18e0909f657da798eef890968ff0" - integrity sha512-j/AzIGZ503cvhuF2ldRSjB0BrKzpsBMtCieDtn4TYMMZMQ9zScJn9wLzTQl/bRNvJbBE6TOspK0r8/Ngae/f2Q== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/transactions@5.2.0", "@ethersproject/transactions@^5.0.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.21", "@ethersproject/transactions@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.2.0.tgz#052e2ef8f8adf7037ebe4cc47aad2a61950e6491" @@ -1001,21 +736,6 @@ "@ethersproject/rlp" "^5.2.0" "@ethersproject/signing-key" "^5.2.0" -"@ethersproject/transactions@5.3.0", "@ethersproject/transactions@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.3.0.tgz#49b86f2bafa4d0bdf8e596578fc795ee47c50458" - integrity sha512-cdfK8VVyW2oEBCXhURG0WQ6AICL/r6Gmjh0e4Bvbv6MCn/GBd8FeBH3rtl7ho+AW50csMKeGv3m3K1HSHB2jMQ== - dependencies: - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/rlp" "^5.3.0" - "@ethersproject/signing-key" "^5.3.0" - "@ethersproject/units@5.2.0", "@ethersproject/units@^5.0.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.2.0.tgz#08643e5d4583ecc1a32b103c1157f7ae80803392" @@ -1025,15 +745,6 @@ "@ethersproject/constants" "^5.2.0" "@ethersproject/logger" "^5.2.0" -"@ethersproject/units@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.3.0.tgz#c4d1493532ad3d4ddf6e2bc4f8c94a2db933a8f5" - integrity sha512-BkfccZGwfJ6Ob+AelpIrgAzuNhrN2VLp3AILnkqTOv+yBdsc83V4AYf25XC/u0rHnWl6f4POaietPwlMqP2vUg== - dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/wallet@5.2.0", "@ethersproject/wallet@^5.0.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.2.0.tgz#b5a8406676067e34f633536a4cb53c2ff98c0b5c" @@ -1055,27 +766,6 @@ "@ethersproject/transactions" "^5.2.0" "@ethersproject/wordlists" "^5.2.0" -"@ethersproject/wallet@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.3.0.tgz#91946b470bd279e39ade58866f21f92749d062af" - integrity sha512-boYBLydG6671p9QoG6EinNnNzbm7DNOjVT20eV8J6HQEq4aUaGiA2CytF2vK+2rOEWbzhZqoNDt6AlkE1LlsTg== - dependencies: - "@ethersproject/abstract-provider" "^5.3.0" - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/hash" "^5.3.0" - "@ethersproject/hdnode" "^5.3.0" - "@ethersproject/json-wallets" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/random" "^5.3.0" - "@ethersproject/signing-key" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/wordlists" "^5.3.0" - "@ethersproject/web@5.2.0", "@ethersproject/web@^5.0.0", "@ethersproject/web@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.2.0.tgz#47d8e152e7fcc07ba0aff4f99fde268fde79dd7a" @@ -1087,17 +777,6 @@ "@ethersproject/properties" "^5.2.0" "@ethersproject/strings" "^5.2.0" -"@ethersproject/web@5.3.0", "@ethersproject/web@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.3.0.tgz#7959c403f6476c61515008d8f92da51c553a8ee1" - integrity sha512-Ni6/DHnY6k/TD41LEkv0RQDx4jqWz5e/RZvrSecsxGYycF+MFy2z++T/yGc2peRunLOTIFwEksgEGGlbwfYmhQ== - dependencies: - "@ethersproject/base64" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/wordlists@5.2.0", "@ethersproject/wordlists@^5.0.0", "@ethersproject/wordlists@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.2.0.tgz#afcce0229e9ef64af1bf8a1e96571fa441e9f444" @@ -1109,17 +788,6 @@ "@ethersproject/properties" "^5.2.0" "@ethersproject/strings" "^5.2.0" -"@ethersproject/wordlists@5.3.0", "@ethersproject/wordlists@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.3.0.tgz#45a0205f5178c1de33d316cb2ab7ed5eac3c06c5" - integrity sha512-JcwumCZcsUxgWpiFU/BRy6b4KlTRdOmYvOKZcAw/3sdF93/pZyPW5Od2hFkHS8oWp4xS06YQ+qHqQhdcxdHafQ== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/hash" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@hapi/bourne@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-2.0.0.tgz#5bb2193eb685c0007540ca61d166d4e1edaf918d" @@ -2469,14 +2137,7 @@ dependencies: "@types/node" "*" -"@types/chai-as-promised@^7.1.3": - version "7.1.4" - resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz#caf64e76fb056b8c8ced4b761ed499272b737601" - integrity sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA== - dependencies: - "@types/chai" "*" - -"@types/chai-as-promised@^7.1.4": +"@types/chai-as-promised@^7.1.3", "@types/chai-as-promised@^7.1.4": version "7.1.4" resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz#caf64e76fb056b8c8ced4b761ed499272b737601" integrity sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA== @@ -2498,11 +2159,6 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.18.tgz#0c8e298dbff8205e2266606c1ea5fbdba29b46e4" integrity sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ== -"@types/chai@4.2.17": - version "4.2.17" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.17.tgz#85f9f0610f514b22a94125d441f73eef65bde5cc" - integrity sha512-LaiwWNnYuL8xJlQcE91QB2JoswWZckq9A4b+nMPq8dt8AP96727Nb3X4e74u+E3tm4NLTILNI9MYFsyVc30wSA== - "@types/concat-stream@^1.6.0": version "1.6.0" resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.0.tgz#394dbe0bb5fee46b38d896735e8b68ef2390d00d" @@ -4379,7 +4035,7 @@ chai-as-promised@^7.1.1: dependencies: check-error "^1.0.2" -chai@4.3.4, chai@^4.2.0, chai@^4.3.0, chai@^4.3.1, chai@^4.3.3, chai@^4.3.4: +chai@^4.2.0, chai@^4.3.0, chai@^4.3.1, chai@^4.3.3, chai@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== @@ -6269,42 +5925,6 @@ ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.0.26, ethers@^5.0.31, eth "@ethersproject/web" "5.2.0" "@ethersproject/wordlists" "5.2.0" -ethers@^5.1.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.3.0.tgz#1ec14d09c461e8f2554b00cd080e94a3094e7e9d" - integrity sha512-myN+338S4sFQZvQ9trii7xit8Hu/LnUtjA0ROFOHpUreQc3fgLZEMNVqF3vM1u2D78DIIeG1TbuozVCVlXQWvQ== - dependencies: - "@ethersproject/abi" "5.3.0" - "@ethersproject/abstract-provider" "5.3.0" - "@ethersproject/abstract-signer" "5.3.0" - "@ethersproject/address" "5.3.0" - "@ethersproject/base64" "5.3.0" - "@ethersproject/basex" "5.3.0" - "@ethersproject/bignumber" "5.3.0" - "@ethersproject/bytes" "5.3.0" - "@ethersproject/constants" "5.3.0" - "@ethersproject/contracts" "5.3.0" - "@ethersproject/hash" "5.3.0" - "@ethersproject/hdnode" "5.3.0" - "@ethersproject/json-wallets" "5.3.0" - "@ethersproject/keccak256" "5.3.0" - "@ethersproject/logger" "5.3.0" - "@ethersproject/networks" "5.3.0" - "@ethersproject/pbkdf2" "5.3.0" - "@ethersproject/properties" "5.3.0" - "@ethersproject/providers" "5.3.0" - "@ethersproject/random" "5.3.0" - "@ethersproject/rlp" "5.3.0" - "@ethersproject/sha2" "5.3.0" - "@ethersproject/signing-key" "5.3.0" - "@ethersproject/solidity" "5.3.0" - "@ethersproject/strings" "5.3.0" - "@ethersproject/transactions" "5.3.0" - "@ethersproject/units" "5.3.0" - "@ethersproject/wallet" "5.3.0" - "@ethersproject/web" "5.3.0" - "@ethersproject/wordlists" "5.3.0" - ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -7338,32 +6958,6 @@ hardhat-deploy@^0.7.4: murmur-128 "^0.2.1" qs "^6.9.4" -hardhat-deploy@^0.7.5: - version "0.7.10" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.7.10.tgz#2bc94bf36db5f39aa488c6c6569f07d5ca4b410a" - integrity sha512-+0oiEWy/FgKOEzRNhSWPqSjofVCwtkK3E5x916kbZ5SgFGOjWTFCrWbWUYjzc2GyZgNXuSuRn8mBowHSLF4sVg== - dependencies: - "@ethersproject/abi" "^5.0.0" - "@ethersproject/abstract-signer" "^5.0.0" - "@ethersproject/address" "^5.0.0" - "@ethersproject/bignumber" "^5.0.0" - "@ethersproject/bytes" "^5.0.0" - "@ethersproject/contracts" "^5.0.0" - "@ethersproject/providers" "^5.0.0" - "@ethersproject/solidity" "^5.0.0" - "@ethersproject/transactions" "^5.0.0" - "@ethersproject/wallet" "^5.0.0" - "@types/qs" "^6.9.4" - axios "^0.21.1" - chalk "^4.1.0" - chokidar "^3.4.0" - debug "^4.1.1" - form-data "^3.0.0" - fs-extra "^9.0.0" - match-all "^1.2.6" - murmur-128 "^0.2.1" - qs "^6.9.4" - hardhat-gas-reporter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.4.tgz#59e3137e38e0dfeac2e4f90d5c74160b50ad4829" @@ -7372,58 +6966,7 @@ hardhat-gas-reporter@^1.0.4: eth-gas-reporter "^0.2.20" sha1 "^1.1.1" -hardhat@^2.2.0, hardhat@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.3.0.tgz#5c29f8b4d08155c3dc8c908af9713fd5079522d5" - integrity sha512-nc4ro2bM4wPaA6/0Y22o5F5QrifQk2KCyPUUKLPUeFFZoGNGYB8vmeW/k9gV9DdMukdWTzfYlKc2Jn4bfb6tDQ== - dependencies: - "@ethereumjs/block" "^3.2.1" - "@ethereumjs/blockchain" "^5.2.1" - "@ethereumjs/common" "^2.2.0" - "@ethereumjs/tx" "^3.1.3" - "@ethereumjs/vm" "^5.3.2" - "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.11.0" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" - adm-zip "^0.4.16" - ansi-escapes "^4.3.0" - chalk "^2.4.2" - chokidar "^3.4.0" - ci-info "^2.0.0" - debug "^4.1.1" - enquirer "^2.3.0" - env-paths "^2.2.0" - eth-sig-util "^2.5.2" - ethereum-cryptography "^0.1.2" - ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.0.10" - find-up "^2.1.0" - fp-ts "1.19.3" - fs-extra "^7.0.1" - glob "^7.1.3" - immutable "^4.0.0-rc.12" - io-ts "1.10.4" - lodash "^4.17.11" - merkle-patricia-tree "^4.1.0" - mnemonist "^0.38.0" - mocha "^7.1.2" - node-fetch "^2.6.0" - qs "^6.7.0" - raw-body "^2.4.1" - resolve "1.17.0" - semver "^6.3.0" - slash "^3.0.0" - solc "0.7.3" - source-map-support "^0.5.13" - stacktrace-parser "^0.1.10" - "true-case-path" "^2.2.1" - tsort "0.0.1" - uuid "^3.3.2" - ws "^7.2.1" - -hardhat@^2.3.0: +hardhat@^2.1.2, hardhat@^2.2.1, hardhat@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.3.0.tgz#5c29f8b4d08155c3dc8c908af9713fd5079522d5" integrity sha512-nc4ro2bM4wPaA6/0Y22o5F5QrifQk2KCyPUUKLPUeFFZoGNGYB8vmeW/k9gV9DdMukdWTzfYlKc2Jn4bfb6tDQ== @@ -7583,7 +7126,7 @@ hash.js@1.1.3: inherits "^2.0.3" minimalistic-assert "^1.0.0" -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: +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== @@ -9705,7 +9248,7 @@ mocha@^7.1.1, mocha@^7.1.2: yargs-parser "13.1.2" yargs-unparser "1.6.0" -mocha@^8.2.1, mocha@^8.3.0, mocha@^8.3.1, mocha@^8.3.2, mocha@^8.4.0: +mocha@^8.3.0, mocha@^8.3.1, mocha@^8.3.2, mocha@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.4.0.tgz#677be88bf15980a3cae03a73e10a0fc3997f0cff" integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ== @@ -14449,11 +13992,6 @@ ws@7.2.3: resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== -ws@7.4.6, ws@^7.2.1: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - ws@^3.0.0: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" @@ -14470,6 +14008,11 @@ ws@^5.1.1: dependencies: async-limiter "~1.0.0" +ws@^7.2.1: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + xhr-request-promise@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" From 2c9bf823f4e190dd45977a296baa7f0f4b0bdc73 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Thu, 3 Jun 2021 11:47:49 -0700 Subject: [PATCH 14/30] Integrate https://github.com/omgnetwork/optimism/pull/37, confirm compilation and function --- .../wallet/contracts/LP/L1LiquidityPool.sol | 58 ++++++++++++++----- .../wallet/deployment/local/addresses.json | 16 ++--- packages/omgx/wallet/test/c_lp.spec.ts | 32 ++++++++++ packages/omgx/wallet/test/shared/env.ts | 9 +++ .../src/deployment/local/addresses.json | 16 ++--- 5 files changed, 102 insertions(+), 29 deletions(-) diff --git a/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol b/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol index 22a5ec63b653..e8aca7e5dd45 100644 --- a/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol +++ b/packages/omgx/wallet/contracts/LP/L1LiquidityPool.sol @@ -508,20 +508,52 @@ contract L1LiquidityPool is OVM_CrossDomainEnabled, Ownable { external onlyFromCrossDomainAccount(address(L2LiquidityPoolAddress)) { + bool replyNeeded = false; + if (_tokenAddress != address(0)) { - IERC20(_tokenAddress).safeTransfer(_to, _amount); + //IERC20(_tokenAddress).safeTransfer(_to, _amount); + if (_amount > IERC20(_tokenAddress).balanceOf(address(this))) { + replyNeeded = true; + } else { + IERC20(_tokenAddress).safeTransfer(_to, _amount); + } } else { - //this is ETH - // balances[address(0)] = balances[address(0)].sub(_amount); - //_to.transfer(_amount); UNSAFE - (bool sent,) = _to.call{gas: SAFE_GAS_STIPEND, value: _amount}(""); - require(sent, "Failed to send Ether"); - } - - emit ClientPayL1( - _to, - _amount, - _tokenAddress - ); + // //this is ETH + // // balances[address(0)] = balances[address(0)].sub(_amount); + // //_to.transfer(_amount); UNSAFE + // (bool sent,) = _to.call{gas: SAFE_GAS_STIPEND, value: _amount}(""); + // require(sent, "Failed to send Ether"); + if (_amount > address(this).balance) { + replyNeeded = true; + } else { + //this is ETH + // balances[address(0)] = balances[address(0)].sub(_amount); + //_to.transfer(_amount); UNSAFE + (bool sent,) = _to.call{gas: SAFE_GAS_STIPEND, value: _amount}(""); + require(sent, "Failed to send Ether"); + } + } + + if (replyNeeded) { + // send cross domain message + bytes memory data = abi.encodeWithSelector( + iL2LiquidityPool.clientPayL2.selector, + _to, + _amount, + poolInfo[_tokenAddress].l2TokenAddress + ); + + sendCrossDomainMessage( + address(L2LiquidityPoolAddress), + data, + getFinalizeDepositL2Gas() + ); + } else { + emit ClientPayL1( + _to, + _amount, + _tokenAddress + ); + } } } diff --git a/packages/omgx/wallet/deployment/local/addresses.json b/packages/omgx/wallet/deployment/local/addresses.json index 91c60a85e58e..6959d6c2e4e4 100644 --- a/packages/omgx/wallet/deployment/local/addresses.json +++ b/packages/omgx/wallet/deployment/local/addresses.json @@ -1,12 +1,12 @@ { - "L1LiquidityPool": "0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", - "L2LiquidityPool": "0x998abeb3E57409262aE5b751f60747921B33613E", - "L1ERC20": "0x202CCe504e04bEd6fC0521238dDf04Bc9E8E15aB", - "L2DepositedERC20": "0x4826533B4897376654Bb4d4AD88B7faFD0C98528", - "L1ERC20Gateway": "0xf4B146FbA71F41E0592668ffbF264F1D186b2Ca8", + "L1LiquidityPool": "0x86A2EE8FAf9A840F7a2c64CA3d51209F9A02081D", + "L2LiquidityPool": "0x922D6956C99E12DFeB3224DEA977D0939758A1Fe", + "L1ERC20": "0xf953b3A269d80e3eB0F2947630Da976B896A8C5b", + "L2DepositedERC20": "0x1fA02b2d6A771842690194Cf62D91bdd92BfE28d", + "L1ERC20Gateway": "0xAA292E8611aDF267e563f334Ee42320aC96D0463", "l1ETHGatewayAddress": "0x998abeb3E57409262aE5b751f60747921B33613E", "l1MessengerAddress": "0x59b670e9fA9D0A427751Af201D676719a970857b", - "L2TokenPool": "0x172076E0166D1F9Cc711C77Adf8488051744980C", - "AtomicSwap": "0xBEc49fA140aCaA83533fB00A2BB19bDdd0290f25", - "L2ERC721": "0xc351628EB244ec633d5f21fBD6621e1a683B1181" + "L2TokenPool": "0x5c74c94173F05dA1720953407cbb920F3DF9f887", + "AtomicSwap": "0xe8D2A1E88c91DCd5433208d4152Cc4F399a7e91d", + "L2ERC721": "0xfbC22278A96299D91d41C453234d97b4F5Eb9B2d" } \ No newline at end of file diff --git a/packages/omgx/wallet/test/c_lp.spec.ts b/packages/omgx/wallet/test/c_lp.spec.ts index cbac67c526c1..d6af4dc3634a 100644 --- a/packages/omgx/wallet/test/c_lp.spec.ts +++ b/packages/omgx/wallet/test/c_lp.spec.ts @@ -492,4 +492,36 @@ describe('Liquidity Pool Test', async () => { postPoolInfo.accOwnerReward.sub(depositAmount.mul(15).div(1000)) ) }) + + it("should revert unfulfillable swaps", async () => { + + const preBobL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) + const preBobL1ERC20Balance = await L1ERC20.balanceOf(env.bobl1Wallet.address) + const requestedLiquidity = (await L1ERC20.balanceOf(L1LiquidityPool.address)).add(1) + const fastExitAmount = requestedLiquidity.mul(1000).div(950) + + const approveBobL2TX = await L2DepositedERC20.connect(env.bobl2Wallet).approve( + L2LiquidityPool.address, + fastExitAmount, + {gasLimit: 800000, gasPrice: 0} + ) + await approveBobL2TX.wait() + + await env.waitForRevertXDomainTransaction( + L2LiquidityPool.connect(env.bobl2Wallet).clientDepositL2( + fastExitAmount, + L2DepositedERC20.address, + {gasLimit: 800000, gasPrice: 0} + ), + Direction.L2ToL1 + ) + + const postBobL1ERC20Balance = await L1ERC20.balanceOf(env.bobl1Wallet.address) + const postBobL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) + + expect(preBobL1ERC20Balance).to.deep.eq(postBobL1ERC20Balance) + + const exitFees = fastExitAmount.mul(50).div(1000) + expect(postBobL2ERC20Balance).to.deep.eq(preBobL2ERC20Balance.sub(exitFees)) + }) }) \ No newline at end of file diff --git a/packages/omgx/wallet/test/shared/env.ts b/packages/omgx/wallet/test/shared/env.ts index f5d00e4de719..83288c5f568f 100644 --- a/packages/omgx/wallet/test/shared/env.ts +++ b/packages/omgx/wallet/test/shared/env.ts @@ -137,4 +137,13 @@ export class OptimismEnv { ): Promise { return waitForXDomainTransaction(this.watcher, tx, direction) } + + async waitForRevertXDomainTransaction( + tx: Promise | TransactionResponse, + direction: Direction + ) { + const {remoteReceipt} = await waitForXDomainTransaction(this.watcher, tx, direction) + const [xDomainMsgHash] = await this.watcher.getMessageHashesFromL1Tx(remoteReceipt.transactionHash) + await this.watcher.getL2TransactionReceipt(xDomainMsgHash) + } } diff --git a/packages/omgx/wallet/wallet/src/deployment/local/addresses.json b/packages/omgx/wallet/wallet/src/deployment/local/addresses.json index 91c60a85e58e..6959d6c2e4e4 100644 --- a/packages/omgx/wallet/wallet/src/deployment/local/addresses.json +++ b/packages/omgx/wallet/wallet/src/deployment/local/addresses.json @@ -1,12 +1,12 @@ { - "L1LiquidityPool": "0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", - "L2LiquidityPool": "0x998abeb3E57409262aE5b751f60747921B33613E", - "L1ERC20": "0x202CCe504e04bEd6fC0521238dDf04Bc9E8E15aB", - "L2DepositedERC20": "0x4826533B4897376654Bb4d4AD88B7faFD0C98528", - "L1ERC20Gateway": "0xf4B146FbA71F41E0592668ffbF264F1D186b2Ca8", + "L1LiquidityPool": "0x86A2EE8FAf9A840F7a2c64CA3d51209F9A02081D", + "L2LiquidityPool": "0x922D6956C99E12DFeB3224DEA977D0939758A1Fe", + "L1ERC20": "0xf953b3A269d80e3eB0F2947630Da976B896A8C5b", + "L2DepositedERC20": "0x1fA02b2d6A771842690194Cf62D91bdd92BfE28d", + "L1ERC20Gateway": "0xAA292E8611aDF267e563f334Ee42320aC96D0463", "l1ETHGatewayAddress": "0x998abeb3E57409262aE5b751f60747921B33613E", "l1MessengerAddress": "0x59b670e9fA9D0A427751Af201D676719a970857b", - "L2TokenPool": "0x172076E0166D1F9Cc711C77Adf8488051744980C", - "AtomicSwap": "0xBEc49fA140aCaA83533fB00A2BB19bDdd0290f25", - "L2ERC721": "0xc351628EB244ec633d5f21fBD6621e1a683B1181" + "L2TokenPool": "0x5c74c94173F05dA1720953407cbb920F3DF9f887", + "AtomicSwap": "0xe8D2A1E88c91DCd5433208d4152Cc4F399a7e91d", + "L2ERC721": "0xfbC22278A96299D91d41C453234d97b4F5Eb9B2d" } \ No newline at end of file From 8eea151fd2afed055598a0a2cd92114dd7e49b31 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Thu, 3 Jun 2021 17:21:06 -0700 Subject: [PATCH 15/30] update .env.example for stable rinkeby endpoint --- packages/omgx/wallet/.env.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/omgx/wallet/.env.example b/packages/omgx/wallet/.env.example index ee68cb9b0ef7..b92cce92b290 100644 --- a/packages/omgx/wallet/.env.example +++ b/packages/omgx/wallet/.env.example @@ -1,7 +1,7 @@ # Rinkeby NODE_ENV=local L1_NODE_WEB3_URL=https://rinkeby.infura.io/v3/YOUR_INFURA_KEY_HERE -L2_NODE_WEB3_URL=http://3.85.224.26:8545 +L2_NODE_WEB3_URL=https://rinkeby.omgx.network ETH1_ADDRESS_RESOLVER_ADDRESS=0x927b167526bAbB9be047421db732C663a0b77B11 TEST_PRIVATE_KEY_1=0xPRIVATE_KEY_OF_THE_FIRST_TEST_WALLET TEST_PRIVATE_KEY_2=0xPRIVATE_KEY_OF_THE_SECOND_TEST_WALLET From 9a3efd5746cbc831fbc2827beaae1421a99d74a1 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Thu, 3 Jun 2021 20:33:21 -0700 Subject: [PATCH 16/30] adds the message-relayer-fast - goal is to end up with self contained folder for this service and associated tests --- .../omgx/message-relayer-fast/.env.example | 21 + .../message-relayer-fast/.prettierrc.json | 1 + .../Dockerfile.message-relayer-fast | 24 + packages/omgx/message-relayer-fast/README.md | 49 ++ .../contracts/OVM_L1CrossDomainMessenger.sol | 287 +++++++++ .../libraries/OVM_CrossDomainEnabled.sol | 98 +++ .../exec/run-message-relayer-fast.js | 10 + .../omgx/message-relayer-fast/package.json | 51 ++ .../omgx/message-relayer-fast/src/exec/run.ts | 128 ++++ .../omgx/message-relayer-fast/src/service.ts | 557 ++++++++++++++++++ .../message-relayer-fast/src/spreadsheet.ts | 25 + .../omgx/message-relayer-fast/src/types.ts | 33 ++ .../message-relayer-fast/tsconfig.build.json | 12 + .../omgx/message-relayer-fast/tsconfig.json | 7 + .../omgx/message-relayer-fast/tslint.json | 3 + .../wait-for-l1-and-l2.sh | 61 ++ 16 files changed, 1367 insertions(+) create mode 100644 packages/omgx/message-relayer-fast/.env.example create mode 120000 packages/omgx/message-relayer-fast/.prettierrc.json create mode 100644 packages/omgx/message-relayer-fast/Dockerfile.message-relayer-fast create mode 100644 packages/omgx/message-relayer-fast/README.md create mode 100644 packages/omgx/message-relayer-fast/contracts/OVM_L1CrossDomainMessenger.sol create mode 100644 packages/omgx/message-relayer-fast/contracts/libraries/OVM_CrossDomainEnabled.sol create mode 100644 packages/omgx/message-relayer-fast/exec/run-message-relayer-fast.js create mode 100644 packages/omgx/message-relayer-fast/package.json create mode 100644 packages/omgx/message-relayer-fast/src/exec/run.ts create mode 100644 packages/omgx/message-relayer-fast/src/service.ts create mode 100644 packages/omgx/message-relayer-fast/src/spreadsheet.ts create mode 100644 packages/omgx/message-relayer-fast/src/types.ts create mode 100644 packages/omgx/message-relayer-fast/tsconfig.build.json create mode 100644 packages/omgx/message-relayer-fast/tsconfig.json create mode 100644 packages/omgx/message-relayer-fast/tslint.json create mode 100755 packages/omgx/message-relayer-fast/wait-for-l1-and-l2.sh diff --git a/packages/omgx/message-relayer-fast/.env.example b/packages/omgx/message-relayer-fast/.env.example new file mode 100644 index 000000000000..1e28a005a557 --- /dev/null +++ b/packages/omgx/message-relayer-fast/.env.example @@ -0,0 +1,21 @@ +# Rinkeby +NODE_ENV=local +L1_NODE_WEB3_URL=https://rinkeby.infura.io/v3/YOUR_INFURA_KEY_HERE +L2_NODE_WEB3_URL=http://3.85.224.26:8545 +DEPLOYER_HTTP= +ADDRESS_MANAGER_ADDRESS= +L1_WALLET_KEY= +L1_TARGET=0x0 +L1_BLOCK_OFFSET=0 +RETRIES=100 + +# Local +NODE_ENV=local +L1_NODE_WEB3_URL=http://localhost:9545 +L2_NODE_WEB3_URL=http://localhost:8545 +DEPLOYER_HTTP=http://deployer:8080 +ADDRESS_MANAGER_ADDRESS=0x3e4CFaa8730092552d9425575E49bB542e329981 +L1_WALLET_KEY=0x5b1c2653250e5c580dcb4e51c2944455e144c57ebd6a0645bd359d2e69ca0f0c +L1_TARGET=0x0 +L1_BLOCK_OFFSET=0 +RETRIES=100 diff --git a/packages/omgx/message-relayer-fast/.prettierrc.json b/packages/omgx/message-relayer-fast/.prettierrc.json new file mode 120000 index 000000000000..4114873433ed --- /dev/null +++ b/packages/omgx/message-relayer-fast/.prettierrc.json @@ -0,0 +1 @@ +../../../.prettierrc.json \ No newline at end of file diff --git a/packages/omgx/message-relayer-fast/Dockerfile.message-relayer-fast b/packages/omgx/message-relayer-fast/Dockerfile.message-relayer-fast new file mode 100644 index 000000000000..b4541feb418b --- /dev/null +++ b/packages/omgx/message-relayer-fast/Dockerfile.message-relayer-fast @@ -0,0 +1,24 @@ +FROM node:14-buster as base + +RUN apt-get update && apt-get install -y bash curl jq + +FROM base as build + +RUN apt-get update && apt-get install -y bash git python build-essential + +ADD . /opt/optimism-message-relayer-fast +RUN cd /opt/optimism-message-relayer-fast && yarn install && yarn build + +FROM base + +RUN apt-get update && apt-get install -y bash curl jq + +COPY --from=build /opt/optimism-message-relayer-fast /opt/optimism-message-relayer-fast + +COPY wait-for-l1-and-l2.sh /opt/ +RUN chmod +x /opt/wait-for-l1-and-l2.sh + +RUN ln -s /opt/optimism-message-relayer-fast/exec/run-message-relayer-fast.js /usr/local/bin/ +RUN chmod +x /usr/local/bin/run-message-relayer-fast.js + +ENTRYPOINT ["/opt/wait-for-l1-and-l2.sh", "run-message-relayer-fast.js"] \ No newline at end of file diff --git a/packages/omgx/message-relayer-fast/README.md b/packages/omgx/message-relayer-fast/README.md new file mode 100644 index 000000000000..0a62840242e2 --- /dev/null +++ b/packages/omgx/message-relayer-fast/README.md @@ -0,0 +1,49 @@ +# OMGX_Alt_Messenger + +Customized L1 Cross Domain Messenger without dispute period time restrictions and associated message relayer service. + +The custom `OVM_L1CrossDomainMessenger` works with the default `OVM_L2CrossDomainMessenger`. The messages from the L2_Messenger can be relayed by the custom messenger instead to skip the dispute period and to do that, the bridge/token contract should specify the custom messenger to be the messenger for relays. The custom messenger cannot be used to send cross domain messages. For sending messages the bridge contracts use the default L1_Messenger. + +## Using the custom messenger + +- Deploy `contracts/OVM_L1_CrossDomainMessenger.sol` on L1, this will be the contract used by your contracts for L2->L1 message passing + +- Your bridge/gateway contract must implement `contracts/libraries/OVM_CrossDomainEnabled.sol` instead. This uses the default L1 Messenger to send messages and the custom L1 Messenger to relay. + +## Running the Alt_Relayer + +Env Settings - + +**THESE MAY BE OUTDATED!!!** The examples in the .env are definitive + +``` + +ADDRESS_MANAGER_ADDRESS=
+L1_NODE_WEB3_URL= +L2_NODE_WEB3_URL= +L1_WALLET_KEY= +L1_MESSENGER_ADDRESS= +L1_TARGET= + +``` + +Running the message relayer +``` + +cd relayer_service +yarn install +yarn build +yarn start + +``` + +## Build a DockerHub Message Relayer Alt + +To build the Message Relayer Alt docker image: + +```bash + +docker build . --file Dockerfile.message-relayer-fast --tag omgx/custom-message-relayer:latest +docker push omgx/custom-message-relayer:latest + +``` \ No newline at end of file diff --git a/packages/omgx/message-relayer-fast/contracts/OVM_L1CrossDomainMessenger.sol b/packages/omgx/message-relayer-fast/contracts/OVM_L1CrossDomainMessenger.sol new file mode 100644 index 000000000000..6d3b2eb6237a --- /dev/null +++ b/packages/omgx/message-relayer-fast/contracts/OVM_L1CrossDomainMessenger.sol @@ -0,0 +1,287 @@ +// SPDX-License-Identifier: MIT +pragma solidity >0.5.0 <0.8.0; +pragma experimental ABIEncoderV2; + +/* Library Imports */ +import { Lib_OVMCodec } from "@eth-optimism/contracts/libraries/codec/Lib_OVMCodec.sol"; +import { Lib_AddressResolver } from "@eth-optimism/contracts/libraries/resolver/Lib_AddressResolver.sol"; +import { Lib_AddressManager } from "@eth-optimism/contracts/libraries/resolver/Lib_AddressManager.sol"; +import { Lib_SecureMerkleTrie } from "@eth-optimism/contracts/libraries/trie/Lib_SecureMerkleTrie.sol"; + +/* Interface Imports */ +import { iOVM_L1CrossDomainMessenger } from "@eth-optimism/contracts/iOVM/bridge/messaging/iOVM_L1CrossDomainMessenger.sol"; +import { iOVM_CanonicalTransactionChain } from "@eth-optimism/contracts/iOVM/chain/iOVM_CanonicalTransactionChain.sol"; +import { iOVM_StateCommitmentChain } from "@eth-optimism/contracts/iOVM/chain/iOVM_StateCommitmentChain.sol"; + +/* Contract Imports */ +import { Abs_BaseCrossDomainMessenger } from "@eth-optimism/contracts/OVM/bridge/messaging/Abs_BaseCrossDomainMessenger.sol"; + +/** + * @title OVM_L1CrossDomainMessenger + * @dev The L1 Cross Domain Messenger contract sends messages from L1 to L2, and relays messages from L2 onto L1. + * In the event that a message sent from L1 to L2 is rejected for exceeding the L2 epoch gas limit, it can be resubmitted + * via this contract's replay function. + * + * Compiler used: solc + * Runtime target: EVM + */ +contract OVM_L1CrossDomainMessenger is iOVM_L1CrossDomainMessenger, Abs_BaseCrossDomainMessenger, Lib_AddressResolver { + + /*************** + * Constructor * + ***************/ + + /** + * Pass a default zero address to the address resolver. This will be updated when initialized. + */ + constructor() + Lib_AddressResolver(address(0)) + {} + + /** + * @param _libAddressManager Address of the Address Manager. + */ + function initialize( + address _libAddressManager + ) + public + { + require(address(libAddressManager) == address(0), "L1CrossDomainMessenger already intialized."); + libAddressManager = Lib_AddressManager(_libAddressManager); + xDomainMsgSender = DEFAULT_XDOMAIN_SENDER; + } + + + /********************** + * Function Modifiers * + **********************/ + + /** + * Modifier to enforce that, if configured, only the OVM_L2MessageRelayer contract may successfully call a method. + */ + modifier onlyRelayer() { + address relayer = resolve("OVM_L2MessageRelayer"); + if (relayer != address(0)) { + require( + msg.sender == relayer, + "Only OVM_L2MessageRelayer can relay L2-to-L1 messages." + ); + } + _; + } + + + /******************** + * Public Functions * + ********************/ + + /** + * Relays a cross domain message to a contract. + * @inheritdoc iOVM_L1CrossDomainMessenger + */ + function relayMessage( + address _target, + address _sender, + bytes memory _message, + uint256 _messageNonce, + L2MessageInclusionProof memory _proof + ) + override + public + onlyRelayer() + { + bytes memory xDomainCalldata = _getXDomainCalldata( + _target, + _sender, + _message, + _messageNonce + ); + + require( + _verifyXDomainMessage( + xDomainCalldata, + _proof + ) == true, + "Provided message could not be verified." + ); + + bytes32 xDomainCalldataHash = keccak256(xDomainCalldata); + + require( + successfulMessages[xDomainCalldataHash] == false, + "Provided message has already been received." + ); + + xDomainMsgSender = _sender; + (bool success, ) = _target.call(_message); + xDomainMsgSender = DEFAULT_XDOMAIN_SENDER; + + // Mark the message as received if the call was successful. Ensures that a message can be + // relayed multiple times in the case that the call reverted. + if (success == true) { + successfulMessages[xDomainCalldataHash] = true; + emit RelayedMessage(xDomainCalldataHash); + } + + // Store an identifier that can be used to prove that the given message was relayed by some + // user. Gives us an easy way to pay relayers for their work. + bytes32 relayId = keccak256( + abi.encodePacked( + xDomainCalldata, + msg.sender, + block.number + ) + ); + relayedMessages[relayId] = true; + } + + /** + * Replays a cross domain message to the target messenger. + * @inheritdoc iOVM_L1CrossDomainMessenger + */ + function replayMessage( + address _target, + address _sender, + bytes memory _message, + uint256 _messageNonce, + uint32 _gasLimit + ) + override + public + { + bytes memory xDomainCalldata = _getXDomainCalldata( + _target, + _sender, + _message, + _messageNonce + ); + + require( + sentMessages[keccak256(xDomainCalldata)] == true, + "Provided message has not already been sent." + ); + + _sendXDomainMessage(xDomainCalldata, _gasLimit); + } + + + /********************** + * Internal Functions * + **********************/ + + /** + * Verifies that the given message is valid. + * @param _xDomainCalldata Calldata to verify. + * @param _proof Inclusion proof for the message. + * @return Whether or not the provided message is valid. + */ + function _verifyXDomainMessage( + bytes memory _xDomainCalldata, + L2MessageInclusionProof memory _proof + ) + internal + view + returns ( + bool + ) + { + return ( + _verifyStateRootProof(_proof) + && _verifyStorageProof(_xDomainCalldata, _proof) + ); + } + + /** + * Verifies that the state root within an inclusion proof is valid. + * @param _proof Message inclusion proof. + * @return Whether or not the provided proof is valid. + */ + function _verifyStateRootProof( + L2MessageInclusionProof memory _proof + ) + internal + view + returns ( + bool + ) + { + iOVM_StateCommitmentChain ovmStateCommitmentChain = iOVM_StateCommitmentChain(resolve("OVM_StateCommitmentChain")); + + return ( + ovmStateCommitmentChain.verifyStateCommitment( + _proof.stateRoot, + _proof.stateRootBatchHeader, + _proof.stateRootProof + ) + ); + } + + /** + * Verifies that the storage proof within an inclusion proof is valid. + * @param _xDomainCalldata Encoded message calldata. + * @param _proof Message inclusion proof. + * @return Whether or not the provided proof is valid. + */ + function _verifyStorageProof( + bytes memory _xDomainCalldata, + L2MessageInclusionProof memory _proof + ) + internal + view + returns ( + bool + ) + { + bytes32 storageKey = keccak256( + abi.encodePacked( + keccak256( + abi.encodePacked( + _xDomainCalldata, + resolve("OVM_L2CrossDomainMessenger") + ) + ), + uint256(0) + ) + ); + + ( + bool exists, + bytes memory encodedMessagePassingAccount + ) = Lib_SecureMerkleTrie.get( + abi.encodePacked(0x4200000000000000000000000000000000000000), + _proof.stateTrieWitness, + _proof.stateRoot + ); + + require( + exists == true, + "Message passing predeploy has not been initialized or invalid proof provided." + ); + + Lib_OVMCodec.EVMAccount memory account = Lib_OVMCodec.decodeEVMAccount( + encodedMessagePassingAccount + ); + + return Lib_SecureMerkleTrie.verifyInclusionProof( + abi.encodePacked(storageKey), + abi.encodePacked(uint8(1)), + _proof.storageTrieWitness, + account.storageRoot + ); + } + + /** + * Sends a cross domain message. + * @param _message Message to send. + * @param _gasLimit OVM gas limit for the message. + */ + function _sendXDomainMessage( + bytes memory _message, + uint256 _gasLimit + ) + override + internal + { + revert("Sending via this messenger is disabled"); + } +} diff --git a/packages/omgx/message-relayer-fast/contracts/libraries/OVM_CrossDomainEnabled.sol b/packages/omgx/message-relayer-fast/contracts/libraries/OVM_CrossDomainEnabled.sol new file mode 100644 index 000000000000..cf0e19595550 --- /dev/null +++ b/packages/omgx/message-relayer-fast/contracts/libraries/OVM_CrossDomainEnabled.sol @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: MIT +pragma solidity >0.5.0 <0.8.0; +/* Interface Imports */ +import { iAbs_BaseCrossDomainMessenger } from "@eth-optimism/contracts/iOVM/bridge/messaging/iAbs_BaseCrossDomainMessenger.sol"; + +/** + * @title OVM_CrossDomainEnabled + * @dev Helper contract for contracts performing cross-domain communications + * + * Compiler used: defined by inheriting contract + * Runtime target: defined by inheriting contract + */ +contract OVM_CrossDomainEnabled { + // Messenger contract used to send and recieve messages from the other domain. + address public senderMessenger; + address public relayerMessenger; + + /*************** + * Constructor * + ***************/ + constructor( + address _senderMessenger, + address _relayerMessenger + ) { + senderMessenger = _senderMessenger; + relayerMessenger = _relayerMessenger; + } + + /********************** + * Function Modifiers * + **********************/ + + /** + * @notice Enforces that the modified function is only callable by a specific cross-domain account. + * @param _sourceDomainAccount The only account on the originating domain which is authenticated to call this function. + */ + modifier onlyFromCrossDomainAccount( + address _sourceDomainAccount + ) { + require( + msg.sender == address(getCrossDomainRelayerMessenger()), + "OVM_XCHAIN: messenger contract unauthenticated" + ); + + require( + getCrossDomainRelayerMessenger().xDomainMessageSender() == _sourceDomainAccount, + "OVM_XCHAIN: wrong sender of cross-domain message" + ); + + _; + } + + /********************** + * Internal Functions * + **********************/ + + /** + * @notice Gets the messenger, usually from storage. This function is exposed in case a child contract needs to override. + * @return The address of the cross-domain messenger contract which should be used. + */ + function getCrossDomainSenderMessenger() + internal + virtual + returns( + iAbs_BaseCrossDomainMessenger + ) + { + return iAbs_BaseCrossDomainMessenger(senderMessenger); + } + + /** + * @notice Gets the messenger, usually from storage. This function is exposed in case a child contract needs to override. + * @return The address of the cross-domain messenger contract which should be used. + */ + function getCrossDomainRelayerMessenger() + internal + virtual + returns( + iAbs_BaseCrossDomainMessenger + ) + { + return iAbs_BaseCrossDomainMessenger(relayerMessenger); + } + + /** + * @notice Sends a message to an account on another domain + * @param _crossDomainTarget The intended recipient on the destination domain + * @param _data The data to send to the target (usually calldata to a function with `onlyFromCrossDomainAccount()`) + * @param _gasLimit The gasLimit for the receipt of the message on the target domain. + */ + function sendCrossDomainMessage( + address _crossDomainTarget, + bytes memory _data, + uint32 _gasLimit + ) internal { + getCrossDomainSenderMessenger().sendMessage(_crossDomainTarget, _data, _gasLimit); + } +} diff --git a/packages/omgx/message-relayer-fast/exec/run-message-relayer-fast.js b/packages/omgx/message-relayer-fast/exec/run-message-relayer-fast.js new file mode 100644 index 000000000000..734b4a1499b1 --- /dev/null +++ b/packages/omgx/message-relayer-fast/exec/run-message-relayer-fast.js @@ -0,0 +1,10 @@ +#!/usr/bin/env node + +const main = require("../dist/exec/run").default + +;(async () => { + await main() +})().catch((err) => { + console.log(err) + process.exit(1) +}) diff --git a/packages/omgx/message-relayer-fast/package.json b/packages/omgx/message-relayer-fast/package.json new file mode 100644 index 000000000000..c77adb18687a --- /dev/null +++ b/packages/omgx/message-relayer-fast/package.json @@ -0,0 +1,51 @@ +{ + "name": "@omgx/message-relayer-fast", + "version": "0.1.1", + "private": true, + "description": "Fast Cross Domain Message Relayer service", + "main": "dist/index", + "types": "dist/index", + "files": [ + "dist/index" + ], + "scripts": { + "start": "node ./exec/run-message-relayer-fast.js", + "build": "tsc -p ./tsconfig.build.json", + "clean": "rimraf dist/ ./tsconfig.build.tsbuildinfo", + "lint": "yarn lint:fix && yarn lint:check", + "lint:fix": "prettier --config .prettierrc.json --write \"{src,exec,test}/**/*.ts\"", + "lint:check": "tslint --format stylish --project ." + }, + "keywords": [ + "optimism", + "ethereum", + "relayer" + ], + "homepage": "https://github.com/ethereum-optimism/optimism-monorepo/tree/master/packages/batch-submitter#readme", + "license": "MIT", + "author": "Optimism", + "repository": { + "type": "git", + "url": "https://github.com/ethereum-optimism/optimism.git" + }, + "dependencies": { + "@eth-optimism/common-ts": "^0.1.0", + "@eth-optimism/contracts": "^0.3.4", + "@eth-optimism/core-utils": "^0.4.2", + "bcfg": "^0.1.6", + "dotenv": "^8.2.0", + "ethers": "^5.1.0", + "ganache-core": "^2.13.2", + "google-spreadsheet": "^3.1.15", + "merkletreejs": "^0.2.18", + "rlp": "^2.2.6" + }, + "devDependencies": { + "prettier": "^2.2.1", + "tslint": "^6.1.3", + "tslint-config-prettier": "^1.18.0", + "tslint-no-focused-test": "^0.5.0", + "tslint-plugin-prettier": "^2.3.0", + "typescript": "^4.2.4" + } +} diff --git a/packages/omgx/message-relayer-fast/src/exec/run.ts b/packages/omgx/message-relayer-fast/src/exec/run.ts new file mode 100644 index 000000000000..b177cc58d35c --- /dev/null +++ b/packages/omgx/message-relayer-fast/src/exec/run.ts @@ -0,0 +1,128 @@ +import { Wallet, providers } from 'ethers' +import { MessageRelayerService } from '../service' +import { Bcfg } from '@eth-optimism/core-utils' +import SpreadSheet from '../spreadsheet' +import * as dotenv from 'dotenv' +import Config from 'bcfg' + +dotenv.config() + +const main = async () => { + const config: Bcfg = new Config('message-relayer') + config.load({ + env: true, + argv: true, + }) + + const env = process.env + const L2_NODE_WEB3_URL = config.str('l2-node-web3-url', env.L2_NODE_WEB3_URL) + const L1_NODE_WEB3_URL = config.str('l1-node-web3-url', env.L1_NODE_WEB3_URL) + const ADDRESS_MANAGER_ADDRESS = config.str( + 'address-manager-address', + env.ADDRESS_MANAGER_ADDRESS + ) + const L1_TARGET = config.str( + 'l1-target', + env.L1_TARGET + ) + const L1_WALLET_KEY = config.str('l1-wallet-key', env.L1_WALLET_KEY) + const MNEMONIC = config.str('mnemonic', env.MNEMONIC) + const HD_PATH = config.str('hd-path', env.HD_PATH) + const RELAY_GAS_LIMIT = config.uint( + 'relay-gas-limit', + parseInt(env.RELAY_GAS_LIMIT, 10) || 4000000 + ) + const POLLING_INTERVAL = config.uint( + 'polling-interval', + parseInt(env.POLLING_INTERVAL, 10) || 5000 + ) + const GET_LOGS_INTERVAL = config.uint( + 'get-logs-interval', + parseInt(env.GET_LOGS_INTERVAL, 10) || 2000 + ) + const L2_BLOCK_OFFSET = config.uint( + 'l2-start-offset', + parseInt(env.L2_BLOCK_OFFSET, 10) || 1 + ) + const L1_START_OFFSET = config.uint( + 'l1-start-offset', + parseInt(env.L1_BLOCK_OFFSET, 10) || 1 + ) + const FROM_L2_TRANSACTION_INDEX = config.uint( + 'from-l2-transaction-index', + parseInt(env.FROM_L2_TRANSACTION_INDEX, 10) || 0 + ) + + // Spreadsheet configuration + const SPREADSHEET_MODE = config.bool( + 'spreadsheet-mode', + !!env.SPREADSHEET_MODE || false + ) + const SHEET_ID = config.str('sheet-id', env.SHEET_ID) + const CLIENT_EMAIL = config.str('client-email', env.CLIENT_EMAIL) + const CLIENT_PRIVATE_KEY = config.str( + 'client-private-key', + env.CLIENT_PRIVATE_KEY + ) + + if (!ADDRESS_MANAGER_ADDRESS) { + throw new Error('Must pass ADDRESS_MANAGER_ADDRESS') + } + if (!L1_TARGET) { + throw new Error('Must pass L1_TARGET') + } + if (!L1_NODE_WEB3_URL) { + throw new Error('Must pass L1_NODE_WEB3_URL') + } + if (!L2_NODE_WEB3_URL) { + throw new Error('Must pass L2_NODE_WEB3_URL') + } + + const l2Provider = new providers.JsonRpcProvider(L2_NODE_WEB3_URL) + const l1Provider = new providers.JsonRpcProvider(L1_NODE_WEB3_URL) + + let wallet: Wallet + if (L1_WALLET_KEY) { + wallet = new Wallet(L1_WALLET_KEY, l1Provider) + } else if (MNEMONIC) { + wallet = Wallet.fromMnemonic(MNEMONIC, HD_PATH) + wallet = wallet.connect(l1Provider) + } else { + throw new Error('Must pass one of L1_WALLET_KEY or MNEMONIC') + } + + let spreadsheet = null + if (SPREADSHEET_MODE) { + if (!SHEET_ID) { + throw new Error('Must pass SHEET_ID') + } + if (!CLIENT_EMAIL) { + throw new Error('Must pass CLIENT_EMAIL') + } + if (!CLIENT_PRIVATE_KEY) { + throw new Error('Must pass CLIENT_PRIVATE_KEY') + } + const privateKey = CLIENT_PRIVATE_KEY.replace(/\\n/g, '\n') + spreadsheet = new SpreadSheet(SHEET_ID) + await spreadsheet.init(CLIENT_EMAIL, privateKey) + } + + const service = new MessageRelayerService({ + l1RpcProvider: l1Provider, + l2RpcProvider: l2Provider, + addressManagerAddress: ADDRESS_MANAGER_ADDRESS, + l1Target: L1_TARGET, + l1Wallet: wallet, + relayGasLimit: RELAY_GAS_LIMIT, + fromL2TransactionIndex: FROM_L2_TRANSACTION_INDEX, + pollingInterval: POLLING_INTERVAL, + l2BlockOffset: L2_BLOCK_OFFSET, + l1StartOffset: L1_START_OFFSET, + getLogsInterval: GET_LOGS_INTERVAL, + spreadsheetMode: !!SPREADSHEET_MODE, + spreadsheet, + }) + + await service.start() +} +export default main diff --git a/packages/omgx/message-relayer-fast/src/service.ts b/packages/omgx/message-relayer-fast/src/service.ts new file mode 100644 index 000000000000..091f92af5da4 --- /dev/null +++ b/packages/omgx/message-relayer-fast/src/service.ts @@ -0,0 +1,557 @@ +/* Imports: External */ +import { Contract, ethers, Wallet, BigNumber, providers } from 'ethers' +import * as rlp from 'rlp' +import { MerkleTree } from 'merkletreejs' + +/* Imports: Internal */ +import { fromHexString, sleep } from '@eth-optimism/core-utils' +import { BaseService } from '@eth-optimism/common-ts' +import SpreadSheet from './spreadsheet' + +import { loadContract, loadContractFromManager } from '@eth-optimism/contracts' +import { StateRootBatchHeader, SentMessage, SentMessageProof } from './types' + +interface MessageRelayerOptions { + // Providers for interacting with L1 and L2. + l1RpcProvider: providers.JsonRpcProvider + l2RpcProvider: providers.JsonRpcProvider + + // Address of the AddressManager contract, used to resolve the various addresses we'll need + // within this service. + addressManagerAddress: string + + l1Target: string + + // Wallet instance, used to sign and send the L1 relay transactions. + l1Wallet: Wallet + + // Max gas to relay messages with. + relayGasLimit: number + + // Height of the L2 transaction to start searching for L2->L1 messages. + fromL2TransactionIndex?: number + + // Interval in seconds to wait between loops. + pollingInterval?: number + + // Number of blocks that L2 is "ahead" of transaction indices. Can happen if blocks are created + // on L2 after the genesis but before the first state commitment is published. + l2BlockOffset?: number + + // L1 block to start querying events from. Recommended to set to the StateCommitmentChain deploy height + l1StartOffset?: number + + // Number of blocks within each getLogs query - max is 2000 + getLogsInterval?: number + + // Append txs to a spreadsheet instead of submitting transactions + spreadsheetMode?: boolean + spreadsheet?: SpreadSheet +} + +const optionSettings = { + relayGasLimit: { default: 4_000_000 }, + fromL2TransactionIndex: { default: 0 }, + pollingInterval: { default: 5000 }, + l2BlockOffset: { default: 1 }, + l1StartOffset: { default: 0 }, + getLogsInterval: { default: 2000 }, + spreadsheetMode: { default: false }, +} + +export class MessageRelayerService extends BaseService { + constructor(options: MessageRelayerOptions) { + super('Message_Relayer', options, optionSettings) + } + + protected spreadsheetMode: boolean + protected spreadsheet: SpreadSheet + + private state: { + lastFinalizedTxHeight: number + nextUnfinalizedTxHeight: number + lastQueriedL1Block: number + eventCache: ethers.Event[] + Lib_AddressManager: Contract + OVM_StateCommitmentChain: Contract + OVM_L1CrossDomainMessenger: Contract + OVM_L2CrossDomainMessenger: Contract + OVM_L2ToL1MessagePasser: Contract + } + + protected async _init(): Promise { + this.logger.info('Initializing message relayer', { + relayGasLimit: this.options.relayGasLimit, + fromL2TransactionIndex: this.options.fromL2TransactionIndex, + pollingInterval: this.options.pollingInterval, + l2BlockOffset: this.options.l2BlockOffset, + getLogsInterval: this.options.getLogsInterval, + spreadSheetMode: this.options.spreadsheetMode, + }) + // Need to improve this, sorry. + this.state = {} as any + + const address = await this.options.l1Wallet.getAddress() + this.logger.info('Using L1 EOA', { address }) + + this.state.Lib_AddressManager = loadContract( + 'Lib_AddressManager', + this.options.addressManagerAddress, + this.options.l1RpcProvider + ) + + this.logger.info('Connecting to OVM_StateCommitmentChain...') + this.state.OVM_StateCommitmentChain = await loadContractFromManager({ + name: 'OVM_StateCommitmentChain', + Lib_AddressManager: this.state.Lib_AddressManager, + provider: this.options.l1RpcProvider, + }) + this.logger.info('Connected to OVM_StateCommitmentChain', { + address: this.state.OVM_StateCommitmentChain.address, + }) + + this.logger.info('Connecting to OVM_L1CrossDomainMessenger...') + const l1MessengerAddress = await this.state.Lib_AddressManager.getAddress( + 'OVM_L1CustomCrossDomainMessenger' + ) + this.state.OVM_L1CrossDomainMessenger = loadContract( + 'OVM_L1CrossDomainMessenger', + l1MessengerAddress, + this.options.l1RpcProvider, + ) + this.logger.info('Connected to OVM_L1CrossDomainMessenger', { + address: this.state.OVM_L1CrossDomainMessenger.address, + }) + + this.logger.info('Connecting to OVM_L2CrossDomainMessenger...') + this.state.OVM_L2CrossDomainMessenger = await loadContractFromManager({ + name: 'OVM_L2CrossDomainMessenger', + Lib_AddressManager: this.state.Lib_AddressManager, + provider: this.options.l2RpcProvider, + }) + this.logger.info('Connected to OVM_L2CrossDomainMessenger', { + address: this.state.OVM_L2CrossDomainMessenger.address, + }) + + this.logger.info('Connecting to OVM_L2ToL1MessagePasser...') + this.state.OVM_L2ToL1MessagePasser = loadContract( + 'OVM_L2ToL1MessagePasser', + '0x4200000000000000000000000000000000000000', + this.options.l2RpcProvider + ) + this.logger.info('Connected to OVM_L2ToL1MessagePasser', { + address: this.state.OVM_L2ToL1MessagePasser.address, + }) + + this.logger.info('Connected to all contracts.') + + if (this.options.spreadsheetMode) { + this.logger.info('Running in spreadsheet mode') + } + + this.state.lastQueriedL1Block = this.options.l1StartOffset + this.state.eventCache = [] + + this.state.lastFinalizedTxHeight = this.options.fromL2TransactionIndex || 0 + this.state.nextUnfinalizedTxHeight = + this.options.fromL2TransactionIndex || 0 + } + + protected async _start(): Promise { + while (this.running) { + await sleep(this.options.pollingInterval) + + try { + // Check that the correct address is set in the address manager + const relayer = await this.state.Lib_AddressManager.getAddress( + 'OVM_L2MessageRelayer' + ) + // If it is address(0), then message relaying is not authenticated + if (relayer !== ethers.constants.AddressZero) { + const address = await this.options.l1Wallet.getAddress() + if (relayer !== address) { + throw new Error( + `OVM_L2MessageRelayer (${relayer}) is not set to message-passer EOA ${address}` + ) + } + } + + this.logger.info('Checking for newly finalized transactions...') + if ( + !(await this._isTransactionFinalized( + this.state.nextUnfinalizedTxHeight + )) + ) { + this.logger.info('Did not find any newly finalized transactions', { + retryAgainInS: Math.floor(this.options.pollingInterval / 1000), + }) + + continue + } + + this.state.lastFinalizedTxHeight = this.state.nextUnfinalizedTxHeight + while ( + await this._isTransactionFinalized(this.state.nextUnfinalizedTxHeight) + ) { + const size = ( + await this._getStateBatchHeader(this.state.nextUnfinalizedTxHeight) + ).batch.batchSize.toNumber() + this.logger.info( + 'Found a batch of finalized transaction(s), checking for more...', + { batchSize: size } + ) + this.state.nextUnfinalizedTxHeight += size + } + + this.logger.info('Found finalized transactions', { + totalNumber: + this.state.nextUnfinalizedTxHeight - + this.state.lastFinalizedTxHeight, + }) + + const messages = await this._getSentMessages( + this.state.lastFinalizedTxHeight, + this.state.nextUnfinalizedTxHeight + ) + + if (messages.length === 0) { + this.logger.info('Did not find any L2->L1 messages', { + retryAgainInS: Math.floor(this.options.pollingInterval / 1000), + }) + } + + for (const message of messages) { + this.logger.info('Found a message sent during transaction', { + index: message.parentTransactionIndex, + }) + if (await this._wasMessageRelayed(message)) { + this.logger.info('Message has already been relayed, skipping.') + continue + } + + if (this.options.l1Target !== message.target) { + if (this.options.l1Target !== '0x0') { + this.logger.info('Message not intended for target, skipping.') + continue + } + } + + this.logger.info( + 'Message not yet relayed. Attempting to generate a proof...' + ) + const proof = await this._getMessageProof(message) + this.logger.info( + 'Successfully generated a proof. Attempting to relay to Layer 1...' + ) + + await this._relayMessageToL1(message, proof) + } + + this.logger.info( + 'Finished searching through newly finalized transactions', + { + retryAgainInS: Math.floor(this.options.pollingInterval / 1000), + } + ) + } catch (err) { + this.logger.error('Caught an unhandled error', { + message: err.toString(), + stack: err.stack, + code: err.code, + }) + } + } + } + + private async _getStateBatchHeader( + height: number + ): Promise< + | { + batch: StateRootBatchHeader + stateRoots: string[] + } + | undefined + > { + const filter = this.state.OVM_StateCommitmentChain.filters.StateBatchAppended() + + let startingBlock = this.state.lastQueriedL1Block + while ( + startingBlock < (await this.options.l1RpcProvider.getBlockNumber()) + ) { + this.state.lastQueriedL1Block = startingBlock + this.logger.info('Querying events', { + startingBlock, + endBlock: startingBlock + this.options.getLogsInterval, + }) + + const events: ethers.Event[] = await this.state.OVM_StateCommitmentChain.queryFilter( + filter, + startingBlock, + startingBlock + this.options.getLogsInterval + ) + + this.state.eventCache = this.state.eventCache.concat(events) + startingBlock += this.options.getLogsInterval + } + + // tslint:disable-next-line + const event = this.state.eventCache.find((event) => { + return ( + event.args._prevTotalElements.toNumber() <= height && + event.args._prevTotalElements.toNumber() + + event.args._batchSize.toNumber() > + height + ) + }) + + if (event) { + const transaction = await this.options.l1RpcProvider.getTransaction( + event.transactionHash + ) + const [ + stateRoots, + ] = this.state.OVM_StateCommitmentChain.interface.decodeFunctionData( + 'appendStateBatch', + transaction.data + ) + + return { + batch: { + batchIndex: event.args._batchIndex, + batchRoot: event.args._batchRoot, + batchSize: event.args._batchSize, + prevTotalElements: event.args._prevTotalElements, + extraData: event.args._extraData, + }, + stateRoots, + } + } + + return + } + + private async _isTransactionFinalized(height: number): Promise { + this.logger.info('Checking if tx is finalized', { height }) + const header = await this._getStateBatchHeader(height) + + if (header === undefined) { + this.logger.info('No state batch header found.') + return false + } else { + this.logger.info('Got state batch header', { header }) + } + + // decode to get timestamp and check for time elapsed for non-zero dispute period messenger + + // return !(await this.state.OVM_StateCommitmentChain.insideFraudProofWindow( + // header.batch + // )) + return true + } + + private async _getSentMessages( + startHeight: number, + endHeight: number + ): Promise { + const filter = this.state.OVM_L2CrossDomainMessenger.filters.SentMessage() + const events = await this.state.OVM_L2CrossDomainMessenger.queryFilter( + filter, + startHeight + this.options.l2BlockOffset, + endHeight + this.options.l2BlockOffset - 1 + ) + + return events.map((event) => { + const message = event.args.message + const decoded = this.state.OVM_L2CrossDomainMessenger.interface.decodeFunctionData( + 'relayMessage', + message + ) + + return { + target: decoded._target, + sender: decoded._sender, + message: decoded._message, + messageNonce: decoded._messageNonce, + encodedMessage: message, + encodedMessageHash: ethers.utils.keccak256(message), + parentTransactionIndex: event.blockNumber - this.options.l2BlockOffset, + parentTransactionHash: event.transactionHash, + } + }) + } + + private async _wasMessageRelayed(message: SentMessage): Promise { + return this.state.OVM_L1CrossDomainMessenger.successfulMessages( + message.encodedMessageHash + ) + } + + private async _getMessageProof( + message: SentMessage + ): Promise { + const messageSlot = ethers.utils.keccak256( + ethers.utils.keccak256( + message.encodedMessage + + this.state.OVM_L2CrossDomainMessenger.address.slice(2) + ) + '00'.repeat(32) + ) + + // TODO: Complain if the proof doesn't exist. + const proof = await this.options.l2RpcProvider.send('eth_getProof', [ + this.state.OVM_L2ToL1MessagePasser.address, + [messageSlot], + '0x' + + BigNumber.from( + message.parentTransactionIndex + this.options.l2BlockOffset + ) + .toHexString() + .slice(2) + .replace(/^0+/, ''), + ]) + + // TODO: Complain if the batch doesn't exist. + const header = await this._getStateBatchHeader( + message.parentTransactionIndex + ) + + const elements = [] + for ( + let i = 0; + i < Math.pow(2, Math.ceil(Math.log2(header.stateRoots.length))); + i++ + ) { + if (i < header.stateRoots.length) { + elements.push(header.stateRoots[i]) + } else { + elements.push(ethers.utils.keccak256('0x' + '00'.repeat(32))) + } + } + + const hash = (el: Buffer | string): Buffer => { + return Buffer.from(ethers.utils.keccak256(el).slice(2), 'hex') + } + + const leaves = elements.map((element) => { + return fromHexString(element) + }) + + const tree = new MerkleTree(leaves, hash) + const index = + message.parentTransactionIndex - header.batch.prevTotalElements.toNumber() + const treeProof = tree.getProof(leaves[index], index).map((element) => { + return element.data + }) + + return { + stateRoot: header.stateRoots[index], + stateRootBatchHeader: header.batch, + stateRootProof: { + index, + siblings: treeProof, + }, + stateTrieWitness: rlp.encode(proof.accountProof), + storageTrieWitness: rlp.encode(proof.storageProof[0].proof), + } + } + + private async _relayMessageToL1( + message: SentMessage, + proof: SentMessageProof + ): Promise { + if (this.options.spreadsheetMode) { + try { + await this.options.spreadsheet.addRow({ + target: message.target, + sender: message.sender, + message: message.message, + messageNonce: message.messageNonce.toString(), + encodedMessage: message.encodedMessage, + encodedMessageHash: message.encodedMessageHash, + parentTransactionIndex: message.parentTransactionIndex, + parentTransactionHash: message.parentTransactionIndex, + stateRoot: proof.stateRoot, + batchIndex: proof.stateRootBatchHeader.batchIndex.toString(), + batchRoot: proof.stateRootBatchHeader.batchRoot, + batchSize: proof.stateRootBatchHeader.batchSize.toString(), + prevTotalElements: proof.stateRootBatchHeader.prevTotalElements.toString(), + extraData: proof.stateRootBatchHeader.extraData, + index: proof.stateRootProof.index, + siblings: proof.stateRootProof.siblings.join(','), + stateTrieWitness: proof.stateTrieWitness.toString('hex'), + storageTrieWitness: proof.storageTrieWitness.toString('hex'), + }) + this.logger.info('Submitted relay message to spreadsheet') + } catch (e) { + this.logger.error('Cannot submit message to spreadsheet') + this.logger.error(e.message) + } + } else { + try { + this.logger.info( + 'Dry-run, checking to make sure proof would succeed...' + ) + + await this.state.OVM_L1CrossDomainMessenger.connect( + this.options.l1Wallet + ).callStatic.relayMessage( + message.target, + message.sender, + message.message, + message.messageNonce, + proof, + { + gasLimit: this.options.relayGasLimit, + } + ) + + this.logger.info( + 'Proof should succeed. Submitting for real this time...' + ) + } catch (err) { + this.logger.error('Proof would fail, skipping', { + message: err.toString(), + stack: err.stack, + code: err.code, + }) + return + } + + const result = await this.state.OVM_L1CrossDomainMessenger.connect( + this.options.l1Wallet + ).relayMessage( + message.target, + message.sender, + message.message, + message.messageNonce, + proof, + { + gasLimit: this.options.relayGasLimit, + } + ) + + this.logger.info('Relay message transaction sent', { + transactionHash: result, + }) + + try { + const receipt = await result.wait() + + this.logger.info('Relay message included in block', { + transactionHash: receipt.transactionHash, + blockNumber: receipt.blockNumber, + gasUsed: receipt.gasUsed.toString(), + confirmations: receipt.confirmations, + status: receipt.status, + }) + } catch (err) { + this.logger.error('Real relay attempt failed, skipping.', { + message: err.toString(), + stack: err.stack, + code: err.code, + }) + return + } + this.logger.info('Message successfully relayed to Layer 1!') + } + } +} diff --git a/packages/omgx/message-relayer-fast/src/spreadsheet.ts b/packages/omgx/message-relayer-fast/src/spreadsheet.ts new file mode 100644 index 000000000000..bf1260c88746 --- /dev/null +++ b/packages/omgx/message-relayer-fast/src/spreadsheet.ts @@ -0,0 +1,25 @@ +import { GoogleSpreadsheet } from 'google-spreadsheet' + +export default class SpreadSheet { + public doc + public sheet + + constructor(id) { + this.doc = new GoogleSpreadsheet(id) + this.sheet = null + } + + async init(email, privateKey) { + await this.doc.useServiceAccountAuth({ + client_email: email, + private_key: privateKey, + }) + + await this.doc.loadInfo() + this.sheet = this.doc.sheetsByIndex[0] + } + + async addRow(row) { + return this.sheet.addRow(row) + } +} diff --git a/packages/omgx/message-relayer-fast/src/types.ts b/packages/omgx/message-relayer-fast/src/types.ts new file mode 100644 index 000000000000..a89b0d7ffb24 --- /dev/null +++ b/packages/omgx/message-relayer-fast/src/types.ts @@ -0,0 +1,33 @@ +import { BigNumber } from 'ethers' + +export interface StateRootBatchHeader { + batchIndex: BigNumber + batchRoot: string + batchSize: BigNumber + prevTotalElements: BigNumber + extraData: string +} + +export interface SentMessage { + target: string + sender: string + message: string + messageNonce: number + encodedMessage: string + encodedMessageHash: string + parentTransactionIndex: number + parentTransactionHash: string +} + +export interface SentMessageProof { + stateRoot: string + stateRootBatchHeader: StateRootBatchHeader + stateRootProof: StateRootProof + stateTrieWitness: string | Buffer + storageTrieWitness: string | Buffer +} + +export interface StateRootProof { + index: number + siblings: string[] +} diff --git a/packages/omgx/message-relayer-fast/tsconfig.build.json b/packages/omgx/message-relayer-fast/tsconfig.build.json new file mode 100644 index 000000000000..ef8dfe2515a1 --- /dev/null +++ b/packages/omgx/message-relayer-fast/tsconfig.build.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../tsconfig.build.json", + + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + + "include": [ + "src/**/*" + ] +} diff --git a/packages/omgx/message-relayer-fast/tsconfig.json b/packages/omgx/message-relayer-fast/tsconfig.json new file mode 100644 index 000000000000..859dc1c9c478 --- /dev/null +++ b/packages/omgx/message-relayer-fast/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.json", + + "compilerOptions": { + "resolveJsonModule": true + } +} \ No newline at end of file diff --git a/packages/omgx/message-relayer-fast/tslint.json b/packages/omgx/message-relayer-fast/tslint.json new file mode 100644 index 000000000000..f7e116b75aa6 --- /dev/null +++ b/packages/omgx/message-relayer-fast/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "../../../tslint.base.json" +} \ No newline at end of file diff --git a/packages/omgx/message-relayer-fast/wait-for-l1-and-l2.sh b/packages/omgx/message-relayer-fast/wait-for-l1-and-l2.sh new file mode 100755 index 000000000000..f8be30bf2b47 --- /dev/null +++ b/packages/omgx/message-relayer-fast/wait-for-l1-and-l2.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# Copyright Optimism PBC 2020 +# MIT License +# github.com/ethereum-optimism + +cmd="$@" +JSON='{"jsonrpc":"2.0","id":0,"method":"net_version","params":[]}' + +RETRIES=${RETRIES:-20} +until $(curl --silent --fail \ + --output /dev/null \ + -H "Content-Type: application/json" \ + --data "$JSON" "$L1_NODE_WEB3_URL"); do + sleep 1 + echo "Will wait $((RETRIES--)) more times for $L1_NODE_WEB3_URL to be up..." + + if [ "$RETRIES" -lt 0 ]; then + echo "Timeout waiting for layer one node at $L1_NODE_WEB3_URL" + exit 1 + fi +done +echo "Connected to L1 Node at $L1_NODE_WEB3_URL" + +RETRIES=${RETRIES:-30} +until $(curl --silent --fail \ + --output /dev/null \ + -H "Content-Type: application/json" \ + --data "$JSON" "$L2_NODE_WEB3_URL"); do + sleep 1 + echo "Will wait $((RETRIES--)) more times for $L2_NODE_WEB3_URL to be up..." + + if [ "$RETRIES" -lt 0 ]; then + echo "Timeout waiting for layer two node at $L2_NODE_WEB3_URL" + exit 1 + fi +done +echo "Connected to L2 Node at $L2_NODE_WEB3_URL" + +if [ ! -z "$DEPLOYER_HTTP" ]; then + RETRIES=${RETRIES:-20} + until $(curl --silent --fail \ + --output /dev/null \ + "$DEPLOYER_HTTP/addresses.json"); do + sleep 1 + echo "Will wait $((RETRIES--)) more times for $DEPLOYER_HTTP to be up..." + + if [ "$RETRIES" -lt 0 ]; then + echo "Timeout waiting for contract deployment" + exit 1 + fi + done + echo "Contracts are deployed" + ADDRESS_MANAGER_ADDRESS=$(curl --silent $DEPLOYER_HTTP/addresses.json | jq -r .AddressManager) + exec env \ + ADDRESS_MANAGER_ADDRESS=$ADDRESS_MANAGER_ADDRESS \ + L1_BLOCK_OFFSET=$L1_BLOCK_OFFSET \ + $cmd +else + exec $cmd +fi From 06a23d0f1db52fee9ed51d3d29d4b3028eb28745 Mon Sep 17 00:00:00 2001 From: cby3149 <46272347+cby3149@users.noreply.github.com> Date: Thu, 3 Jun 2021 20:59:59 -0700 Subject: [PATCH 17/30] Added whitelist (#44) --- .gitignore | 5 +- ops/docker-compose.yml | 8 +- packages/contracts/README.md | 1 + packages/contracts/bin/deploy.ts | 3 +- .../messaging/OVM_L1CrossDomainMessenger.sol | 23 ++++++ .../007-OVM_L1CrossDomainMessenger.deploy.ts | 4 + ...roxy__OVM_L1CrossDomainMessenger.deploy.ts | 4 + .../message-relayer/lambda/env.yml.example | 4 + .../message-relayer/lambda/serverless.yml | 29 +++++++ packages/message-relayer/lambda/whitelist.py | 21 +++++ packages/message-relayer/package.json | 1 + packages/message-relayer/src/exec/run.ts | 10 +++ packages/message-relayer/src/service.ts | 76 ++++++++++++++++++- .../wallet/deployment/local/addresses.json | 22 +++--- .../test/{b_setup.spec.ts => a_setup.spec.ts} | 52 ++++++++++++- .../{a_message.spec.ts => b_message.spec.ts} | 49 +++--------- .../omgx/wallet/test/shared/watcher-utils.ts | 1 + .../src/deployment/local/addresses.json | 22 +++--- 18 files changed, 266 insertions(+), 69 deletions(-) create mode 100644 packages/message-relayer/lambda/env.yml.example create mode 100644 packages/message-relayer/lambda/serverless.yml create mode 100644 packages/message-relayer/lambda/whitelist.py rename packages/omgx/wallet/test/{b_setup.spec.ts => a_setup.spec.ts} (81%) rename packages/omgx/wallet/test/{a_message.spec.ts => b_message.spec.ts} (52%) diff --git a/.gitignore b/.gitignore index 8fd99dc7be0d..8f5a350c98c5 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,7 @@ packages/data-transport-layer/db *.swp .env -env.js \ No newline at end of file +env.js +env.yml + +.serverless \ No newline at end of file diff --git a/ops/docker-compose.yml b/ops/docker-compose.yml index 8e7014c4d274..e4de0ced4f5c 100644 --- a/ops/docker-compose.yml +++ b/ops/docker-compose.yml @@ -31,9 +31,10 @@ services: environment: FRAUD_PROOF_WINDOW_SECONDS: 0 L1_NODE_WEB3_URL: http://l1_chain:8545 - # these keys are hardhat's first 2 accounts, DO NOT use in production + # these keys are hardhat's first 3 accounts, DO NOT use in production DEPLOYER_PRIVATE_KEY: "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" SEQUENCER_PRIVATE_KEY: "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d" + RELAYER_PRIVATE_KEY: "0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a" # skip compilation when run in docker-compose, since the contracts # were already compiled in the builder step NO_COMPILE: 1 @@ -106,10 +107,11 @@ services: L1_NODE_WEB3_URL: http://l1_chain:8545 L2_NODE_WEB3_URL: http://l2geth:8545 URL: http://deployer:8081/addresses.json + WHITELIST_ENDPOINT: https://api-message-relayer.rinkeby.omgx.network/get.whitelist # a funded hardhat account - L1_WALLET_KEY: "0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97" + L1_WALLET_KEY: "0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a" RETRIES: 60 - POLLING_INTERVAL: 500 + POLLING_INTERVAL: 1500 GET_LOGS_INTERVAL: 500 batch_submitter: diff --git a/packages/contracts/README.md b/packages/contracts/README.md index 9c7ed7b7b1cc..a9f57412b512 100644 --- a/packages/contracts/README.md +++ b/packages/contracts/README.md @@ -104,6 +104,7 @@ npx hardhat deploy \ --ovm-proposer-address ... \ --ovm-relayer-address ... \ --ovm-sequencer-address ... \ + --ovm-relayer-address ... \ --scc-fraud-proof-window ... \ --scc-sequencer-publish-window ... ``` diff --git a/packages/contracts/bin/deploy.ts b/packages/contracts/bin/deploy.ts index 7ac14d6615e1..77ecb56a3096 100755 --- a/packages/contracts/bin/deploy.ts +++ b/packages/contracts/bin/deploy.ts @@ -17,6 +17,7 @@ import hre from 'hardhat' const sequencer = new Wallet(process.env.SEQUENCER_PRIVATE_KEY) const deployer = new Wallet(process.env.DEPLOYER_PRIVATE_KEY) +const relayer = new Wallet(process.env.RELAYER_PRIVATE_KEY) const main = async () => { @@ -35,7 +36,7 @@ const main = async () => { sccSequencerPublishWindow: config.sccFraudProofWindow, ovmSequencerAddress: sequencer.address, ovmProposerAddress: sequencer.address, - ovmRelayerAddress: sequencer.address, + ovmRelayerAddress: relayer.address, ovmAddressManagerOwner: deployer.address, noCompile: process.env.NO_COMPILE ? true : false, }) diff --git a/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CrossDomainMessenger.sol b/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CrossDomainMessenger.sol index 445afd808509..4dbaed5b7f8a 100644 --- a/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CrossDomainMessenger.sol +++ b/packages/contracts/contracts/optimistic-ethereum/OVM/bridge/messaging/OVM_L1CrossDomainMessenger.sol @@ -56,6 +56,7 @@ contract OVM_L1CrossDomainMessenger is **********************/ mapping (bytes32 => bool) public blockedMessages; + address public customRelayer; /*************** * Constructor * @@ -117,6 +118,18 @@ contract OVM_L1CrossDomainMessenger is __ReentrancyGuard_init_unchained(); } + /** + * @param _customRelayer Address of the Address Manager. + */ + function initializeCustomRelayer( + address _customRelayer + ) + public + onlyOwner() + { + customRelayer = _customRelayer; + } + /** * Pause relaying. */ @@ -298,6 +311,16 @@ contract OVM_L1CrossDomainMessenger is resolve("OVM_StateCommitmentChain") ); + if (msg.sender == customRelayer) { + return ( + ovmStateCommitmentChain.verifyStateCommitment( + _proof.stateRoot, + _proof.stateRootBatchHeader, + _proof.stateRootProof + ) + ); + } + return ( ovmStateCommitmentChain.insideFraudProofWindow(_proof.stateRootBatchHeader) == false && ovmStateCommitmentChain.verifyStateCommitment( diff --git a/packages/contracts/deploy/007-OVM_L1CrossDomainMessenger.deploy.ts b/packages/contracts/deploy/007-OVM_L1CrossDomainMessenger.deploy.ts index 5ab6678dc22b..ac84c437b17b 100644 --- a/packages/contracts/deploy/007-OVM_L1CrossDomainMessenger.deploy.ts +++ b/packages/contracts/deploy/007-OVM_L1CrossDomainMessenger.deploy.ts @@ -39,6 +39,10 @@ const deployFn: DeployFunction = async (hre) => { // initialize this. await OVM_L1CrossDomainMessenger.initialize(Lib_AddressManager.address) + // only allow the relayer to relay message + const initializeCustomRelayer = await OVM_L1CrossDomainMessenger.initializeCustomRelayer((hre as any).deployConfig.ovmRelayerAddress) + await initializeCustomRelayer.wait() + const libAddressManager = await OVM_L1CrossDomainMessenger.libAddressManager() if (libAddressManager !== Lib_AddressManager.address) { throw new Error( diff --git a/packages/contracts/deploy/008-Proxy__OVM_L1CrossDomainMessenger.deploy.ts b/packages/contracts/deploy/008-Proxy__OVM_L1CrossDomainMessenger.deploy.ts index 51a02a75e326..d091671920b2 100644 --- a/packages/contracts/deploy/008-Proxy__OVM_L1CrossDomainMessenger.deploy.ts +++ b/packages/contracts/deploy/008-Proxy__OVM_L1CrossDomainMessenger.deploy.ts @@ -38,6 +38,10 @@ const deployFn: DeployFunction = async (hre) => { await Proxy__OVM_L1CrossDomainMessenger.initialize(Lib_AddressManager.address) + // only allow the relayer to relay message + const initializeCustomRelayer = await Proxy__OVM_L1CrossDomainMessenger.initializeCustomRelayer((hre as any).deployConfig.ovmRelayerAddress) + await initializeCustomRelayer.wait() + const libAddressManager = await Proxy__OVM_L1CrossDomainMessenger.libAddressManager() if (libAddressManager !== Lib_AddressManager.address) { throw new Error( diff --git a/packages/message-relayer/lambda/env.yml.example b/packages/message-relayer/lambda/env.yml.example new file mode 100644 index 000000000000..23daea65f25c --- /dev/null +++ b/packages/message-relayer/lambda/env.yml.example @@ -0,0 +1,4 @@ +ROLE: +SECURITYGROUP: +SUBNET1: +SUBNET2: \ No newline at end of file diff --git a/packages/message-relayer/lambda/serverless.yml b/packages/message-relayer/lambda/serverless.yml new file mode 100644 index 000000000000..0f24efab831d --- /dev/null +++ b/packages/message-relayer/lambda/serverless.yml @@ -0,0 +1,29 @@ +service: sls-omgx-rinkeby-message-relayer # NOTE: update this with your service name + +provider: + name: aws + runtime: python3.7 + stackName: sls-omgx-rinkeby-message-relayer + stage: prod + region: us-east-1 + role: ${file(env.yml):ROLE} + +package: + exclude: + - .gitignore + individually: true + +functions: + get_whitelist: + handler: whitelist.get_whitelist + vpc: + securityGroupIds: + - ${file(env.yml):SECURITYGROUP} + subnetIds: + - ${file(env.yml):SUBNET1} + - ${file(env.yml):SUBNET2} + events: + - http: + path: get.whitelist + method: get + cors: true \ No newline at end of file diff --git a/packages/message-relayer/lambda/whitelist.py b/packages/message-relayer/lambda/whitelist.py new file mode 100644 index 000000000000..12017b95d3f3 --- /dev/null +++ b/packages/message-relayer/lambda/whitelist.py @@ -0,0 +1,21 @@ +import json + +def get_whitelist(event, context): + whitelist = [ + "0x455c31AF3Bb2e3f4300F517bd246E39b4A7f49c5", + ] + response = { + "statusCode": 201, + "headers": { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Credentials": True, + "Strict-Transport-Security": "max-age=63072000; includeSubdomains; preload", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "DENY", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "same-origin", + "Permissions-Policy": "*", + }, + "body": json.dumps(whitelist), + } + return response \ No newline at end of file diff --git a/packages/message-relayer/package.json b/packages/message-relayer/package.json index 7cd1a0444edf..c21c32d65ccd 100644 --- a/packages/message-relayer/package.json +++ b/packages/message-relayer/package.json @@ -36,6 +36,7 @@ "dotenv": "^8.2.0", "ethers": "^5.1.0", "merkletreejs": "^0.2.18", + "node-fetch": "^2.6.1", "rlp": "^2.2.6" }, "devDependencies": { diff --git a/packages/message-relayer/src/exec/run.ts b/packages/message-relayer/src/exec/run.ts index 0ee3a0abeefc..99dbfe0fde2b 100644 --- a/packages/message-relayer/src/exec/run.ts +++ b/packages/message-relayer/src/exec/run.ts @@ -23,6 +23,14 @@ const main = async () => { const L1_WALLET_KEY = config.str('l1-wallet-key', env.L1_WALLET_KEY) const MNEMONIC = config.str('mnemonic', env.MNEMONIC) const HD_PATH = config.str('hd-path', env.HD_PATH) + const WHITELIST_ENDPOINT = config.str( + 'whitlist-endpoint', + env.WHITELIST_ENDPOINT + ) || '' + const WHITELIST_POLLING_INTERVAL = config.uint( + 'whitlist-polling-interval', + parseInt(env.WHITELIST_POLLING_INTERVAL, 10) || 60000 + ) const RELAY_GAS_LIMIT = config.uint( 'relay-gas-limit', parseInt(env.RELAY_GAS_LIMIT, 10) || 4000000 @@ -82,6 +90,8 @@ const main = async () => { l2BlockOffset: L2_BLOCK_OFFSET, l1StartOffset: L1_START_OFFSET, getLogsInterval: GET_LOGS_INTERVAL, + whitelistEndpoint: WHITELIST_ENDPOINT, + whitelistPollingInterval: WHITELIST_POLLING_INTERVAL, }) await service.start() diff --git a/packages/message-relayer/src/service.ts b/packages/message-relayer/src/service.ts index f2d678db7c91..0c0df7b00396 100644 --- a/packages/message-relayer/src/service.ts +++ b/packages/message-relayer/src/service.ts @@ -2,6 +2,7 @@ import { Contract, ethers, Wallet, BigNumber, providers } from 'ethers' import * as rlp from 'rlp' import { MerkleTree } from 'merkletreejs' +import fetch from 'node-fetch'; /* Imports: Internal */ import { fromHexString, sleep } from '@eth-optimism/core-utils' @@ -40,6 +41,10 @@ interface MessageRelayerOptions { // Number of blocks within each getLogs query - max is 2000 getLogsInterval?: number + + // whitlist + whitelistEndpoint?: string + whitelistPollingInterval?: number } const optionSettings = { @@ -49,6 +54,7 @@ const optionSettings = { l2BlockOffset: { default: 1 }, l1StartOffset: { default: 0 }, getLogsInterval: { default: 2000 }, + whitelistPollingInterval: { default: 60000 }, } export class MessageRelayerService extends BaseService { @@ -66,6 +72,8 @@ export class MessageRelayerService extends BaseService { OVM_L1CrossDomainMessenger: Contract OVM_L2CrossDomainMessenger: Contract OVM_L2ToL1MessagePasser: Contract + whitelist: Array + lastWhitelistPollingTimestamp: number } protected async _init(): Promise { @@ -75,6 +83,7 @@ export class MessageRelayerService extends BaseService { pollingInterval: this.options.pollingInterval, l2BlockOffset: this.options.l2BlockOffset, getLogsInterval: this.options.getLogsInterval, + whitelistPollingInterval: this.options.whitelistPollingInterval, }) // Need to improve this, sorry. this.state = {} as any @@ -137,12 +146,15 @@ export class MessageRelayerService extends BaseService { this.state.lastFinalizedTxHeight = this.options.fromL2TransactionIndex || 0 this.state.nextUnfinalizedTxHeight = this.options.fromL2TransactionIndex || 0 + this.state.lastWhitelistPollingTimestamp = 0 } protected async _start(): Promise { while (this.running) { await sleep(this.options.pollingInterval) + await this._getWhitelist(); + try { // Check that the correct address is set in the address manager const relayer = await this.state.Lib_AddressManager.getAddress( @@ -355,11 +367,42 @@ export class MessageRelayerService extends BaseService { this.logger.info('Got state batch header', { header }) } - return true + const size = (await this._getStateBatchHeader(height)).batch.batchSize.toNumber() + const filter = this.state.OVM_L2CrossDomainMessenger.filters.SentMessage() + const events = await this.state.OVM_L2CrossDomainMessenger.queryFilter( + filter, + height + this.options.l2BlockOffset, + height + size + this.options.l2BlockOffset - 1 + ) - // return !(await this.state.OVM_StateCommitmentChain.insideFraudProofWindow( - // header.batch - // )) + const messages = events.map((event) => { + const message = event.args.message + const decoded = this.state.OVM_L2CrossDomainMessenger.interface.decodeFunctionData( + 'relayMessage', + message + ) + + return { + target: decoded._target, + sender: decoded._sender, + } + }) + + const insideWhitelist = messages.every(message => this.state.whitelist.includes(message.target)) + + if (insideWhitelist) { + this.logger.info('Found the batch header in whitelist') + return true + } else { + const insideFPW = await this.state.OVM_StateCommitmentChain.insideFraudProofWindow(header.batch); + if (insideFPW === true) { + this.logger.info('INSIDE FRAUD PRROF WINDOW - BLOCKING TRANSACTION.'); + return false; + } else { + this.logger.info('Fraud proof window elapsed.'); + return true + } + } } /** @@ -547,4 +590,29 @@ export class MessageRelayerService extends BaseService { } this.logger.info('Message successfully relayed to Layer 1!') } + + private async _getWhitelist(): Promise> { + try { + if (this.options.whitelistEndpoint) { + if (this.state.lastWhitelistPollingTimestamp === 0 || + new Date().getTime() > this.state.lastWhitelistPollingTimestamp + this.options.whitelistPollingInterval + ) { + const response = await fetch(this.options.whitelistEndpoint); + const whitelist = await response.json(); + this.state.lastWhitelistPollingTimestamp = new Date().getTime(); + this.state.whitelist = whitelist; + this.logger.info('Found the whitelist', { whitelist: whitelist }) + } else { + this.logger.info('Loading the whitelist', { whitelist: this.state.whitelist }) + return this.state.whitelist; + } + } else { + this.logger.info('The whitelist endpoint was not provided') + this.state.whitelist = []; + } + } catch { + this.logger.info('Failed to fetch the whitelist') + this.state.whitelist = []; + } + } } diff --git a/packages/omgx/wallet/deployment/local/addresses.json b/packages/omgx/wallet/deployment/local/addresses.json index 6959d6c2e4e4..27da29d5f35f 100644 --- a/packages/omgx/wallet/deployment/local/addresses.json +++ b/packages/omgx/wallet/deployment/local/addresses.json @@ -1,12 +1,14 @@ { - "L1LiquidityPool": "0x86A2EE8FAf9A840F7a2c64CA3d51209F9A02081D", - "L2LiquidityPool": "0x922D6956C99E12DFeB3224DEA977D0939758A1Fe", - "L1ERC20": "0xf953b3A269d80e3eB0F2947630Da976B896A8C5b", - "L2DepositedERC20": "0x1fA02b2d6A771842690194Cf62D91bdd92BfE28d", - "L1ERC20Gateway": "0xAA292E8611aDF267e563f334Ee42320aC96D0463", - "l1ETHGatewayAddress": "0x998abeb3E57409262aE5b751f60747921B33613E", - "l1MessengerAddress": "0x59b670e9fA9D0A427751Af201D676719a970857b", - "L2TokenPool": "0x5c74c94173F05dA1720953407cbb920F3DF9f887", - "AtomicSwap": "0xe8D2A1E88c91DCd5433208d4152Cc4F399a7e91d", - "L2ERC721": "0xfbC22278A96299D91d41C453234d97b4F5Eb9B2d" + "L1LiquidityPool": "0xbdEd0D2bf404bdcBa897a74E6657f1f12e5C6fb6", + "L2LiquidityPool": "0xbdEd0D2bf404bdcBa897a74E6657f1f12e5C6fb6", + "L1ERC20": "0xA7918D253764E42d60C3ce2010a34d5a1e7C1398", + "L2DepositedERC20": "0xA7918D253764E42d60C3ce2010a34d5a1e7C1398", + "L1ERC20Gateway": "0x93C7a6D00849c44Ef3E92E95DCEFfccd447909Ae", + "l1ETHGatewayAddress": "0x4826533B4897376654Bb4d4AD88B7faFD0C98528", + "l1MessengerAddress": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", + "L2TokenPool": "0x71a9d115E322467147391c4a71D85F8e1cA623EF", + "AtomicSwap": "0xB737dD8FC9B304A3520B3bb609CC7532F1425Ad0", + "L1Message": "0xDBD6c48913473F648f64d8E9fdDeead1F1734E22", + "L2Message": "0x71a9d115E322467147391c4a71D85F8e1cA623EF", + "L2ERC721": "0xeC406dA90079339a828DE424C9BF5ab58F851eE9" } \ No newline at end of file diff --git a/packages/omgx/wallet/test/b_setup.spec.ts b/packages/omgx/wallet/test/a_setup.spec.ts similarity index 81% rename from packages/omgx/wallet/test/b_setup.spec.ts rename to packages/omgx/wallet/test/a_setup.spec.ts index d7a7e3257e90..63810644f167 100644 --- a/packages/omgx/wallet/test/b_setup.spec.ts +++ b/packages/omgx/wallet/test/a_setup.spec.ts @@ -15,11 +15,15 @@ import L2TokenPoolJson from '../artifacts-ovm/contracts/TokenPool.sol/TokenPool. import AtomicSwapJson from '../artifacts-ovm/contracts/AtomicSwap.sol/AtomicSwap.json'; +import L1MessageJson from '../artifacts/contracts/Message/L1Message.sol/L1Message.json' +import L2MessageJson from '../artifacts-ovm/contracts/Message/L2Message.sol/L2Message.json' + + import { OptimismEnv } from './shared/env' import { promises as fs } from 'fs' -describe('LP System setup', async () => { +describe('System setup', async () => { let Factory__L1LiquidityPool: ContractFactory let Factory__L2LiquidityPool: ContractFactory @@ -28,6 +32,8 @@ describe('LP System setup', async () => { let Factory__L1ERC20Gateway: ContractFactory let Factory__L2TokenPool: ContractFactory let Factory__AtomicSwap: ContractFactory + let Factory__L1Message: ContractFactory + let Factory__L2Message: ContractFactory let L1LiquidityPool: Contract let L2LiquidityPool: Contract @@ -36,6 +42,8 @@ describe('LP System setup', async () => { let L1ERC20Gateway: Contract let L2TokenPool: Contract let AtomicSwap: Contract + let L1Message: Contract + let L2Message: Contract let env: OptimismEnv @@ -90,6 +98,18 @@ describe('LP System setup', async () => { AtomicSwapJson.bytecode, env.bobl1Wallet ) + + Factory__L1Message = new ContractFactory( + L1MessageJson.abi, + L1MessageJson.bytecode, + env.bobl1Wallet + ) + + Factory__L2Message = new ContractFactory( + L2MessageJson.abi, + L2MessageJson.bytecode, + env.bobl2Wallet + ) }) it('should deploy contracts', async () => { @@ -186,6 +206,34 @@ describe('LP System setup', async () => { AtomicSwap = await Factory__AtomicSwap.deploy({gasLimit: 1500000, gasPrice: 0}) await AtomicSwap.deployTransaction.wait() console.log(`🌕 ${chalk.red('AtomicSwap deployed to:')} ${chalk.green(AtomicSwap.address)}`) + + L1Message = await Factory__L1Message.deploy( + env.watcher.l1.messengerAddress + ) + await L1Message.deployTransaction.wait() + console.log(`🌕 ${chalk.red('L1 Message deployed to:')} ${chalk.green(L1Message.address)}`) + + L2Message = await Factory__L2Message.deploy( + env.watcher.l2.messengerAddress, + {gasLimit: 800000, gasPrice: 0} + ) + await L2Message.deployTransaction.wait() + console.log(`🌕 ${chalk.red('L2 Message deployed to:')} ${chalk.green(L2Message.address)}`) + + // Initialize L1 message + const L1MessageTX = await L1Message.init( + L2Message.address + ) + await L1MessageTX.wait() + console.log(`⭐️ ${chalk.blue('L1 Message initialized:')} ${chalk.green(L1MessageTX.hash)}`) + + // Initialize L2 message + const L2MessageTX = await L2Message.init( + L1Message.address, + {gasLimit: 800000, gasPrice: 0} + ) + await L2MessageTX.wait() + console.log(`⭐️ ${chalk.blue('L2 Message initialized:')} ${chalk.green(L2MessageTX.hash)}`) }) it('should write addresses to file', async () => { @@ -202,6 +250,8 @@ describe('LP System setup', async () => { l1MessengerAddress: env.l1MessengerAddress, L2TokenPool: L2TokenPool.address, AtomicSwap: AtomicSwap.address, + L1Message: L1Message.address, + L2Message: L2Message.address } console.log(chalk.green(JSON.stringify(addresses, null, 2))) diff --git a/packages/omgx/wallet/test/a_message.spec.ts b/packages/omgx/wallet/test/b_message.spec.ts similarity index 52% rename from packages/omgx/wallet/test/a_message.spec.ts rename to packages/omgx/wallet/test/b_message.spec.ts index 0c27b87f9c76..59fe0d100df3 100644 --- a/packages/omgx/wallet/test/a_message.spec.ts +++ b/packages/omgx/wallet/test/b_message.spec.ts @@ -11,10 +11,9 @@ import L2MessageJson from '../artifacts-ovm/contracts/Message/L2Message.sol/L2Me import { OptimismEnv } from './shared/env' -describe('Messenge Relayer Test', async () => { +import * as fs from 'fs' - let Factory__L1Message: ContractFactory - let Factory__L2Message: ContractFactory +describe('Messenge Relayer Test', async () => { let L1Message: Contract let L2Message: Contract @@ -23,17 +22,20 @@ describe('Messenge Relayer Test', async () => { before(async () => { + const addressData = fs.readFileSync('./deployment/local/addresses.json', 'utf8') + const addressArray = JSON.parse(addressData) + env = await OptimismEnv.new() - Factory__L1Message = new ContractFactory( + L1Message = new Contract( + addressArray.L1Message, L1MessageJson.abi, - L1MessageJson.bytecode, env.bobl1Wallet ) - Factory__L2Message = new ContractFactory( + L2Message = new Contract( + addressArray.L2Message, L2MessageJson.abi, - L2MessageJson.bytecode, env.bobl2Wallet ) @@ -44,38 +46,7 @@ describe('Messenge Relayer Test', async () => { console.log(`accountNonceBob2:`,accountNonceBob2) }) - - it('should deploy contracts', async () => { - - L1Message = await Factory__L1Message.deploy( - env.watcher.l1.messengerAddress - ) - await L1Message.deployTransaction.wait() - console.log(`🌕 ${chalk.green('L1 Message deployed to:')} ${chalk.white(L1Message.address)}`) - - L2Message = await Factory__L2Message.deploy( - env.watcher.l2.messengerAddress, - {gasLimit: 800000, gasPrice: 0} - ) - await L2Message.deployTransaction.wait() - console.log(`🌕 ${chalk.green('L2 Message deployed to:')} ${chalk.white(L2Message.address)}`) - - // Initialize L1 message - const L1MessageTX = await L1Message.init( - L2Message.address - ) - await L1MessageTX.wait() - console.log(`⭐️ ${chalk.green('L1 Message initialized:')} ${chalk.white(L1MessageTX.hash)}`) - - // Initialize L2 message - const L2MessageTX = await L2Message.init( - L1Message.address, - {gasLimit: 800000, gasPrice: 0} - ) - await L2MessageTX.wait() - console.log(`⭐️ ${chalk.green('L2 Message initialized:')} ${chalk.white(L2MessageTX.hash)}`) - }) - + it('should send message from L2 to L1', async () => { await env.waitForXDomainTransaction( L2Message.sendMessageL2ToL1({ diff --git a/packages/omgx/wallet/test/shared/watcher-utils.ts b/packages/omgx/wallet/test/shared/watcher-utils.ts index 4a3ed227e953..8a3626be57f0 100644 --- a/packages/omgx/wallet/test/shared/watcher-utils.ts +++ b/packages/omgx/wallet/test/shared/watcher-utils.ts @@ -5,6 +5,7 @@ import { } from '@ethersproject/providers' import { Watcher } from './watcher' import { Contract, Transaction } from 'ethers' +import { loadContract, loadContractFromManager } from '@eth-optimism/contracts' export const initWatcher = async ( l1Provider: JsonRpcProvider, diff --git a/packages/omgx/wallet/wallet/src/deployment/local/addresses.json b/packages/omgx/wallet/wallet/src/deployment/local/addresses.json index 6959d6c2e4e4..27da29d5f35f 100644 --- a/packages/omgx/wallet/wallet/src/deployment/local/addresses.json +++ b/packages/omgx/wallet/wallet/src/deployment/local/addresses.json @@ -1,12 +1,14 @@ { - "L1LiquidityPool": "0x86A2EE8FAf9A840F7a2c64CA3d51209F9A02081D", - "L2LiquidityPool": "0x922D6956C99E12DFeB3224DEA977D0939758A1Fe", - "L1ERC20": "0xf953b3A269d80e3eB0F2947630Da976B896A8C5b", - "L2DepositedERC20": "0x1fA02b2d6A771842690194Cf62D91bdd92BfE28d", - "L1ERC20Gateway": "0xAA292E8611aDF267e563f334Ee42320aC96D0463", - "l1ETHGatewayAddress": "0x998abeb3E57409262aE5b751f60747921B33613E", - "l1MessengerAddress": "0x59b670e9fA9D0A427751Af201D676719a970857b", - "L2TokenPool": "0x5c74c94173F05dA1720953407cbb920F3DF9f887", - "AtomicSwap": "0xe8D2A1E88c91DCd5433208d4152Cc4F399a7e91d", - "L2ERC721": "0xfbC22278A96299D91d41C453234d97b4F5Eb9B2d" + "L1LiquidityPool": "0xbdEd0D2bf404bdcBa897a74E6657f1f12e5C6fb6", + "L2LiquidityPool": "0xbdEd0D2bf404bdcBa897a74E6657f1f12e5C6fb6", + "L1ERC20": "0xA7918D253764E42d60C3ce2010a34d5a1e7C1398", + "L2DepositedERC20": "0xA7918D253764E42d60C3ce2010a34d5a1e7C1398", + "L1ERC20Gateway": "0x93C7a6D00849c44Ef3E92E95DCEFfccd447909Ae", + "l1ETHGatewayAddress": "0x4826533B4897376654Bb4d4AD88B7faFD0C98528", + "l1MessengerAddress": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", + "L2TokenPool": "0x71a9d115E322467147391c4a71D85F8e1cA623EF", + "AtomicSwap": "0xB737dD8FC9B304A3520B3bb609CC7532F1425Ad0", + "L1Message": "0xDBD6c48913473F648f64d8E9fdDeead1F1734E22", + "L2Message": "0x71a9d115E322467147391c4a71D85F8e1cA623EF", + "L2ERC721": "0xeC406dA90079339a828DE424C9BF5ab58F851eE9" } \ No newline at end of file From 8aabcc2fa9fa25a45765b9e9b5789f392f45ee2f Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Fri, 4 Jun 2021 09:27:28 -0700 Subject: [PATCH 18/30] wip - disable npm publish until that's set up --- .github/workflows/publish-develop.yml | 19 +-- .gitignore | 4 +- ops/README.md | 11 ++ .../wallet/deployment/local/addresses.json | 14 --- .../src/deployment/local/addresses.json | 14 --- yarn.lock | 113 +++++++++++++++++- 6 files changed, 133 insertions(+), 42 deletions(-) delete mode 100644 packages/omgx/wallet/deployment/local/addresses.json delete mode 100644 packages/omgx/wallet/wallet/src/deployment/local/addresses.json diff --git a/.github/workflows/publish-develop.yml b/.github/workflows/publish-develop.yml index 8a8e6d9773ae..836def087dcd 100644 --- a/.github/workflows/publish-develop.yml +++ b/.github/workflows/publish-develop.yml @@ -48,15 +48,16 @@ jobs: - name: Setup Canary Snapshot run: yarn changeset version --snapshot - - - name: Publish To NPM - uses: changesets/action@master - id: changesets - with: - publish: yarn changeset publish --tag canary - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + # Turn off until we have npm set up + # - name: Publish To NPM + # uses: changesets/action@master + # id: changesets + # with: + # publish: yarn changeset publish --tag canary + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # NPM_TOKEN: ${{ secrets.NPM_TOKEN }} # Conditional on the release being executed, we unbundle the publishedPackages to specific # job outputs diff --git a/.gitignore b/.gitignore index 8f5a350c98c5..6b49063deddf 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,6 @@ packages/data-transport-layer/db env.js env.yml -.serverless \ No newline at end of file +.serverless +packages/omgx/wallet/deployment/local/addresses.json +packages/omgx/wallet/wallet/src/deployment/local/addresses.json diff --git a/ops/README.md b/ops/README.md index 0c1ae1c18053..b4c9639930c1 100644 --- a/ops/README.md +++ b/ops/README.md @@ -44,6 +44,17 @@ A Makefile has been provided for convience. The following targets are available. - make up-metrics - make down-metrics +Running the integration tests + +``` + +docker-compose run integration_tests + +``` + +``` + + ## Authentication Influxdb has authentication disabled. diff --git a/packages/omgx/wallet/deployment/local/addresses.json b/packages/omgx/wallet/deployment/local/addresses.json deleted file mode 100644 index 27da29d5f35f..000000000000 --- a/packages/omgx/wallet/deployment/local/addresses.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "L1LiquidityPool": "0xbdEd0D2bf404bdcBa897a74E6657f1f12e5C6fb6", - "L2LiquidityPool": "0xbdEd0D2bf404bdcBa897a74E6657f1f12e5C6fb6", - "L1ERC20": "0xA7918D253764E42d60C3ce2010a34d5a1e7C1398", - "L2DepositedERC20": "0xA7918D253764E42d60C3ce2010a34d5a1e7C1398", - "L1ERC20Gateway": "0x93C7a6D00849c44Ef3E92E95DCEFfccd447909Ae", - "l1ETHGatewayAddress": "0x4826533B4897376654Bb4d4AD88B7faFD0C98528", - "l1MessengerAddress": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", - "L2TokenPool": "0x71a9d115E322467147391c4a71D85F8e1cA623EF", - "AtomicSwap": "0xB737dD8FC9B304A3520B3bb609CC7532F1425Ad0", - "L1Message": "0xDBD6c48913473F648f64d8E9fdDeead1F1734E22", - "L2Message": "0x71a9d115E322467147391c4a71D85F8e1cA623EF", - "L2ERC721": "0xeC406dA90079339a828DE424C9BF5ab58F851eE9" -} \ No newline at end of file diff --git a/packages/omgx/wallet/wallet/src/deployment/local/addresses.json b/packages/omgx/wallet/wallet/src/deployment/local/addresses.json deleted file mode 100644 index 27da29d5f35f..000000000000 --- a/packages/omgx/wallet/wallet/src/deployment/local/addresses.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "L1LiquidityPool": "0xbdEd0D2bf404bdcBa897a74E6657f1f12e5C6fb6", - "L2LiquidityPool": "0xbdEd0D2bf404bdcBa897a74E6657f1f12e5C6fb6", - "L1ERC20": "0xA7918D253764E42d60C3ce2010a34d5a1e7C1398", - "L2DepositedERC20": "0xA7918D253764E42d60C3ce2010a34d5a1e7C1398", - "L1ERC20Gateway": "0x93C7a6D00849c44Ef3E92E95DCEFfccd447909Ae", - "l1ETHGatewayAddress": "0x4826533B4897376654Bb4d4AD88B7faFD0C98528", - "l1MessengerAddress": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", - "L2TokenPool": "0x71a9d115E322467147391c4a71D85F8e1cA623EF", - "AtomicSwap": "0xB737dD8FC9B304A3520B3bb609CC7532F1425Ad0", - "L1Message": "0xDBD6c48913473F648f64d8E9fdDeead1F1734E22", - "L2Message": "0x71a9d115E322467147391c4a71D85F8e1cA623EF", - "L2ERC721": "0xeC406dA90079339a828DE424C9BF5ab58F851eE9" -} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 848251a70699..09b8e0aa17ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2868,7 +2868,7 @@ arrify@^1.0.0, arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -arrify@^2.0.1: +arrify@^2.0.0, arrify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== @@ -3521,7 +3521,7 @@ base-x@^3.0.2, base-x@^3.0.8: dependencies: safe-buffer "^5.0.1" -base64-js@^1.3.1: +base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -3809,6 +3809,11 @@ bsert@~0.0.10: resolved "https://registry.yarnpkg.com/bsert/-/bsert-0.0.10.tgz#231ac82873a1418c6ade301ab5cd9ae385895597" integrity sha512-NHNwlac+WPy4t2LoNh8pXk8uaIGH3NSaIUbTTRXGpE2WEbq0te/tDykYHkFK57YKLPjv/aGHmbqvnGeVWDz57Q== +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + buffer-from@^1.0.0, buffer-from@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -5149,6 +5154,13 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -6099,7 +6111,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.2: +extend@^3.0.2, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -6191,6 +6203,11 @@ fast-safe-stringify@^2.0.7: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== +fast-text-encoding@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53" + integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig== + fastq@^1.6.0: version "1.11.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" @@ -6593,6 +6610,25 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +gaxios@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.3.0.tgz#ad4814d89061f85b97ef52aed888c5dbec32f774" + integrity sha512-pHplNbslpwCLMyII/lHPWFQbJWOX0B3R1hwBEOvzYi1GmdKZruuEHK4N9V6f7tf1EaPYyF80mui1+344p6SmLg== + dependencies: + abort-controller "^3.0.0" + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.3.0" + +gcp-metadata@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.2.1.tgz#31849fbcf9025ef34c2297c32a89a1e7e9f2cd62" + integrity sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw== + dependencies: + gaxios "^4.0.0" + json-bigint "^1.0.0" + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -6850,6 +6886,37 @@ globby@^11.0.0, globby@^11.0.2: merge2 "^1.3.0" slash "^3.0.0" +google-auth-library@^6.1.3: + version "6.1.6" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-6.1.6.tgz#deacdcdb883d9ed6bac78bb5d79a078877fdf572" + integrity sha512-Q+ZjUEvLQj/lrVHF/IQwRo6p3s8Nc44Zk/DALsN+ac3T4HY/g/3rrufkgtl+nZ1TW7DNAw5cTChdVp4apUXVgQ== + dependencies: + arrify "^2.0.0" + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + fast-text-encoding "^1.0.0" + gaxios "^4.0.0" + gcp-metadata "^4.2.0" + gtoken "^5.0.4" + jws "^4.0.0" + lru-cache "^6.0.0" + +google-p12-pem@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.0.3.tgz#673ac3a75d3903a87f05878f3c75e06fc151669e" + integrity sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA== + dependencies: + node-forge "^0.10.0" + +google-spreadsheet@^3.1.15: + version "3.1.15" + resolved "https://registry.yarnpkg.com/google-spreadsheet/-/google-spreadsheet-3.1.15.tgz#e7a86f750d8166faaa3e16929561baceb807bf5a" + integrity sha512-S5477f3Gf3Mz6AXgCw7dbaYnzu5aHou1AX4sDqrGboQWnAytkxqJGKQiXN+zzRTTcYzSTJCe0g7KqCPZO9xiOw== + dependencies: + axios "^0.21.1" + google-auth-library "^6.1.3" + lodash "^4.17.20" + got@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -6902,6 +6969,15 @@ growl@1.10.5: resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== +gtoken@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.2.1.tgz#4dae1fea17270f457954b4a45234bba5fc796d16" + integrity sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw== + dependencies: + gaxios "^4.0.0" + google-p12-pem "^3.0.3" + jws "^4.0.0" + handlebars@^4.0.1, handlebars@^4.7.6: version "4.7.7" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" @@ -7926,6 +8002,13 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" @@ -8059,6 +8142,23 @@ just-extend@^4.0.2: resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" + integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" + integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" + keccak@3.0.1, keccak@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" @@ -9502,7 +9602,7 @@ node-fetch@2.1.2: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= -node-fetch@^2.6.0, node-fetch@^2.6.1: +node-fetch@^2.3.0, node-fetch@^2.6.0, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== @@ -9515,6 +9615,11 @@ node-fetch@~1.7.1: encoding "^0.1.11" is-stream "^1.0.1" +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + 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" From b0ddc916f5e84a4fc3fb2df18ef7793b0ed42354 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Fri, 4 Jun 2021 12:53:45 -0700 Subject: [PATCH 19/30] Update publish-develop.yml --- .github/workflows/publish-develop.yml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/publish-develop.yml b/.github/workflows/publish-develop.yml index 836def087dcd..4c5c098e4d7d 100644 --- a/.github/workflows/publish-develop.yml +++ b/.github/workflows/publish-develop.yml @@ -49,7 +49,7 @@ jobs: - name: Setup Canary Snapshot run: yarn changeset version --snapshot - # Turn off until we have npm set up + # #Turn off until we have npm set up # - name: Publish To NPM # uses: changesets/action@master # id: changesets @@ -58,14 +58,13 @@ jobs: # env: # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - # Conditional on the release being executed, we unbundle the publishedPackages to specific - # job outputs - - name: Get version tags from each published version - id: packages - run: | - node ops/scripts/ci-versions.js ${{ toJSON(steps.changesets.outputs.publishedPackages) }} - + # + # #Conditional on the release being executed, we unbundle the publishedPackages to specific + # #job outputs + # - name: Get version tags from each published version + # id: packages + # run: | + # node ops/scripts/ci-versions.js ${{ toJSON(steps.changesets.outputs.publishedPackages) }} # The below code is duplicated, would be ideal if we could use a matrix with a # key/value being dynamically generated from the `publishedPackages` output From 7bdb98fa696b3b35db604085a1ff94351f950ea9 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Fri, 4 Jun 2021 12:59:53 -0700 Subject: [PATCH 20/30] fix formatting via yarn run lint:fix --- .../contracts/src/state-dump/make-dump.ts | 6 ++-- .../bridge/assets/OVM_L1ERC20Gateway.spec.ts | 3 +- .../assets/OVM_L2DepositedERC20.spec.ts | 3 +- .../base/OVM_L1CrossDomainMessenger.spec.ts | 8 ++--- .../base/OVM_L2CrossDomainMessenger.spec.ts | 18 +++++----- .../OVM_CanonicalTransactionChain.gas.spec.ts | 18 +++++----- .../OVM_CanonicalTransactionChain.spec.ts | 35 ++++++++++--------- .../chain/OVM_StateCommitmentChain.spec.ts | 3 +- .../OVM_ExecutionManager.gas-spec.ts | 6 ++-- .../OVM_ExecutionManager/nuisance-gas.spec.ts | 12 +++---- .../OVM_ExecutionManager/ovmCALL.spec.ts | 6 ++-- .../OVM_ExecutionManager/ovmCREATE.spec.ts | 26 +++++++------- .../OVM_ExecutionManager/ovmCREATEEOA.spec.ts | 6 ++-- .../ovmDELEGATECALL.spec.ts | 15 +++----- .../ovmSTATICCALL.spec.ts | 9 ++--- .../OVM/verification/OVM_BondManager.spec.ts | 7 ++-- .../OVM_StateTransitionerFactory.spec.ts | 5 ++- .../libraries/rlp/Lib_RLPWriter.spec.ts | 7 ++-- .../libraries/utils/Lib_MerkleTree.spec.ts | 15 +------- .../contracts/test/helpers/codec/bridge.ts | 7 ++-- packages/contracts/test/helpers/gas/gas.ts | 9 ++--- .../test/helpers/test-runner/test-runner.ts | 17 ++++----- 22 files changed, 112 insertions(+), 129 deletions(-) diff --git a/packages/contracts/src/state-dump/make-dump.ts b/packages/contracts/src/state-dump/make-dump.ts index 42179e516bc2..d37361a698d5 100644 --- a/packages/contracts/src/state-dump/make-dump.ts +++ b/packages/contracts/src/state-dump/make-dump.ts @@ -176,8 +176,10 @@ export const makeStateDump = async (cfg: RollupDeployConfig): Promise => { const contract = deploymentResult.contracts[name] let code if (ovmCompiled.includes(name)) { - const ovmDeployedBytecode = getContractDefinition(name, true) - .deployedBytecode + const ovmDeployedBytecode = getContractDefinition( + name, + true + ).deployedBytecode // TODO remove: deployedBytecode is missing the find and replace in solidity code = ovmDeployedBytecode .split( diff --git a/packages/contracts/test/contracts/OVM/bridge/assets/OVM_L1ERC20Gateway.spec.ts b/packages/contracts/test/contracts/OVM/bridge/assets/OVM_L1ERC20Gateway.spec.ts index a3a305862774..7de77ab4d2f8 100644 --- a/packages/contracts/test/contracts/OVM/bridge/assets/OVM_L1ERC20Gateway.spec.ts +++ b/packages/contracts/test/contracts/OVM/bridge/assets/OVM_L1ERC20Gateway.spec.ts @@ -125,7 +125,8 @@ describe('OVM_L1ERC20Gateway', () => { const OVM_L2DepositedERC20 = await ( await ethers.getContractFactory('OVM_L2DepositedERC20') ).deploy(constants.AddressZero, '', '') - const defaultFinalizeWithdrawalGas = await OVM_L2DepositedERC20.getFinalizeWithdrawalL1Gas() + const defaultFinalizeWithdrawalGas = + await OVM_L2DepositedERC20.getFinalizeWithdrawalL1Gas() await expect(gasUsed.gt((defaultFinalizeWithdrawalGas * 11) / 10)) }) diff --git a/packages/contracts/test/contracts/OVM/bridge/assets/OVM_L2DepositedERC20.spec.ts b/packages/contracts/test/contracts/OVM/bridge/assets/OVM_L2DepositedERC20.spec.ts index 94e22562931e..2d30b1456a19 100644 --- a/packages/contracts/test/contracts/OVM/bridge/assets/OVM_L2DepositedERC20.spec.ts +++ b/packages/contracts/test/contracts/OVM/bridge/assets/OVM_L2DepositedERC20.spec.ts @@ -53,7 +53,8 @@ describe('OVM_L2DepositedERC20', () => { // initialize the L2 Gateway with the L1G ateway addrss await OVM_L2DepositedERC20.init(MOCK_L1GATEWAY_ADDRESS) - finalizeWithdrawalGasLimit = await OVM_L2DepositedERC20.getFinalizeWithdrawalL1Gas() + finalizeWithdrawalGasLimit = + await OVM_L2DepositedERC20.getFinalizeWithdrawalL1Gas() }) // test the transfer flow of moving a token from L2 to L1 diff --git a/packages/contracts/test/contracts/OVM/bridge/base/OVM_L1CrossDomainMessenger.spec.ts b/packages/contracts/test/contracts/OVM/bridge/base/OVM_L1CrossDomainMessenger.spec.ts index 7ed33d551d4e..f69ea4713f95 100644 --- a/packages/contracts/test/contracts/OVM/bridge/base/OVM_L1CrossDomainMessenger.spec.ts +++ b/packages/contracts/test/contracts/OVM/bridge/base/OVM_L1CrossDomainMessenger.spec.ts @@ -90,7 +90,8 @@ describe('OVM_L1CrossDomainMessenger', () => { let OVM_L1CrossDomainMessenger: Contract beforeEach(async () => { - const xDomainMessengerImpl = await Factory__OVM_L1CrossDomainMessenger.deploy() + const xDomainMessengerImpl = + await Factory__OVM_L1CrossDomainMessenger.deploy() // We use an upgradable proxy for the XDomainMessenger--deploy & set up the proxy. OVM_L1CrossDomainMessenger = await deployProxyXDomainMessenger( AddressManager, @@ -390,9 +391,8 @@ describe('OVM_L1CrossDomainMessenger', () => { describe('blockMessage and allowMessage', () => { it('should revert if called by an account other than the owner', async () => { - const OVM_L1CrossDomainMessenger2 = OVM_L1CrossDomainMessenger.connect( - signer2 - ) + const OVM_L1CrossDomainMessenger2 = + OVM_L1CrossDomainMessenger.connect(signer2) await expect( OVM_L1CrossDomainMessenger2.blockMessage(keccak256(calldata)) ).to.be.revertedWith('Ownable: caller is not the owner') diff --git a/packages/contracts/test/contracts/OVM/bridge/base/OVM_L2CrossDomainMessenger.spec.ts b/packages/contracts/test/contracts/OVM/bridge/base/OVM_L2CrossDomainMessenger.spec.ts index fa0baf0248d6..50314b3d7aaa 100644 --- a/packages/contracts/test/contracts/OVM/bridge/base/OVM_L2CrossDomainMessenger.spec.ts +++ b/packages/contracts/test/contracts/OVM/bridge/base/OVM_L2CrossDomainMessenger.spec.ts @@ -71,9 +71,8 @@ describe('OVM_L2CrossDomainMessenger', () => { let OVM_L2CrossDomainMessenger: Contract beforeEach(async () => { - OVM_L2CrossDomainMessenger = await Factory__OVM_L2CrossDomainMessenger.deploy( - AddressManager.address - ) + OVM_L2CrossDomainMessenger = + await Factory__OVM_L2CrossDomainMessenger.deploy(AddressManager.address) }) describe('sendMessage', () => { @@ -183,7 +182,9 @@ describe('OVM_L2CrossDomainMessenger', () => { // There should be no 'relayedMessage' event logged in the receipt. const logs = ( await Mock__OVM_L2ToL1MessagePasser.provider.getTransactionReceipt( - (await resProm).hash + ( + await resProm + ).hash ) ).logs expect(logs).to.deep.equal([]) @@ -204,10 +205,11 @@ describe('OVM_L2CrossDomainMessenger', () => { Mock__OVM_L1CrossDomainMessenger.address ) - const reentrantMessage = OVM_L2CrossDomainMessenger.interface.encodeFunctionData( - 'relayMessage', - [target, sender, message, 1] - ) + const reentrantMessage = + OVM_L2CrossDomainMessenger.interface.encodeFunctionData( + 'relayMessage', + [target, sender, message, 1] + ) // Calculate xDomainCallData used for indexing // (within the first call to the L2 Messenger). diff --git a/packages/contracts/test/contracts/OVM/chain/OVM_CanonicalTransactionChain.gas.spec.ts b/packages/contracts/test/contracts/OVM/chain/OVM_CanonicalTransactionChain.gas.spec.ts index fa70bc310808..352f572bad73 100644 --- a/packages/contracts/test/contracts/OVM/chain/OVM_CanonicalTransactionChain.gas.spec.ts +++ b/packages/contracts/test/contracts/OVM/chain/OVM_CanonicalTransactionChain.gas.spec.ts @@ -97,12 +97,13 @@ describe('[GAS BENCHMARK] OVM_CanonicalTransactionChain', () => { let OVM_CanonicalTransactionChain: Contract beforeEach(async () => { - OVM_CanonicalTransactionChain = await Factory__OVM_CanonicalTransactionChain.deploy( - AddressManager.address, - FORCE_INCLUSION_PERIOD_SECONDS, - FORCE_INCLUSION_PERIOD_BLOCKS, - MAX_GAS_LIMIT - ) + OVM_CanonicalTransactionChain = + await Factory__OVM_CanonicalTransactionChain.deploy( + AddressManager.address, + FORCE_INCLUSION_PERIOD_SECONDS, + FORCE_INCLUSION_PERIOD_BLOCKS, + MAX_GAS_LIMIT + ) const batches = await Factory__OVM_ChainStorageContainer.deploy( AddressManager.address, @@ -131,9 +132,8 @@ describe('[GAS BENCHMARK] OVM_CanonicalTransactionChain', () => { describe('appendSequencerBatch [ @skip-on-coverage ]', () => { beforeEach(() => { - OVM_CanonicalTransactionChain = OVM_CanonicalTransactionChain.connect( - sequencer - ) + OVM_CanonicalTransactionChain = + OVM_CanonicalTransactionChain.connect(sequencer) }) it('200 transactions in a single context', async () => { diff --git a/packages/contracts/test/contracts/OVM/chain/OVM_CanonicalTransactionChain.spec.ts b/packages/contracts/test/contracts/OVM/chain/OVM_CanonicalTransactionChain.spec.ts index 207cb8f7038e..b6235e8ccaf7 100644 --- a/packages/contracts/test/contracts/OVM/chain/OVM_CanonicalTransactionChain.spec.ts +++ b/packages/contracts/test/contracts/OVM/chain/OVM_CanonicalTransactionChain.spec.ts @@ -147,12 +147,13 @@ describe('OVM_CanonicalTransactionChain', () => { let OVM_CanonicalTransactionChain: Contract beforeEach(async () => { - OVM_CanonicalTransactionChain = await Factory__OVM_CanonicalTransactionChain.deploy( - AddressManager.address, - FORCE_INCLUSION_PERIOD_SECONDS, - FORCE_INCLUSION_PERIOD_BLOCKS, - MAX_GAS_LIMIT - ) + OVM_CanonicalTransactionChain = + await Factory__OVM_CanonicalTransactionChain.deploy( + AddressManager.address, + FORCE_INCLUSION_PERIOD_SECONDS, + FORCE_INCLUSION_PERIOD_BLOCKS, + MAX_GAS_LIMIT + ) const batches = await Factory__OVM_ChainStorageContainer.deploy( AddressManager.address, @@ -184,7 +185,8 @@ describe('OVM_CanonicalTransactionChain', () => { const gasLimit = 500_000 it('should revert when trying to input more data than the max data size', async () => { - const MAX_ROLLUP_TX_SIZE = await OVM_CanonicalTransactionChain.MAX_ROLLUP_TX_SIZE() + const MAX_ROLLUP_TX_SIZE = + await OVM_CanonicalTransactionChain.MAX_ROLLUP_TX_SIZE() const data = '0x' + '12'.repeat(MAX_ROLLUP_TX_SIZE + 1) await expect( @@ -207,7 +209,8 @@ describe('OVM_CanonicalTransactionChain', () => { }) it('should revert if gas limit parameter is not at least MIN_ROLLUP_TX_GAS', async () => { - const MIN_ROLLUP_TX_GAS = await OVM_CanonicalTransactionChain.MIN_ROLLUP_TX_GAS() + const MIN_ROLLUP_TX_GAS = + await OVM_CanonicalTransactionChain.MIN_ROLLUP_TX_GAS() const customGasLimit = MIN_ROLLUP_TX_GAS / 2 const data = '0x' + '12'.repeat(1234) @@ -217,7 +220,8 @@ describe('OVM_CanonicalTransactionChain', () => { }) it('should revert if transaction gas limit does not cover rollup burn', async () => { - const L2_GAS_DISCOUNT_DIVISOR = await OVM_CanonicalTransactionChain.L2_GAS_DISCOUNT_DIVISOR() + const L2_GAS_DISCOUNT_DIVISOR = + await OVM_CanonicalTransactionChain.L2_GAS_DISCOUNT_DIVISOR() const data = '0x' + '12'.repeat(1234) await expect( @@ -663,9 +667,8 @@ describe('OVM_CanonicalTransactionChain', () => { describe('appendSequencerBatch', () => { beforeEach(() => { - OVM_CanonicalTransactionChain = OVM_CanonicalTransactionChain.connect( - sequencer - ) + OVM_CanonicalTransactionChain = + OVM_CanonicalTransactionChain.connect(sequencer) }) it('should revert if expected start does not match current total batches', async () => { @@ -757,7 +760,8 @@ describe('OVM_CanonicalTransactionChain', () => { }) it('should revert when trying to input more data than the max data size', async () => { - const MAX_ROLLUP_TX_SIZE = await OVM_CanonicalTransactionChain.MAX_ROLLUP_TX_SIZE() + const MAX_ROLLUP_TX_SIZE = + await OVM_CanonicalTransactionChain.MAX_ROLLUP_TX_SIZE() const data = '0x' + '12'.repeat(MAX_ROLLUP_TX_SIZE + 1) const timestamp = await getEthTime(ethers.provider) @@ -965,9 +969,8 @@ describe('OVM_CanonicalTransactionChain', () => { gasLimit, data ) - queueElements[ - i - ] = await OVM_CanonicalTransactionChain.getQueueElement(i) + queueElements[i] = + await OVM_CanonicalTransactionChain.getQueueElement(i) // this is a valid context for this TX validContexts[i] = { numSequencedTransactions: 1, diff --git a/packages/contracts/test/contracts/OVM/chain/OVM_StateCommitmentChain.spec.ts b/packages/contracts/test/contracts/OVM/chain/OVM_StateCommitmentChain.spec.ts index 9f83711210c1..66eaf38d7236 100644 --- a/packages/contracts/test/contracts/OVM/chain/OVM_StateCommitmentChain.spec.ts +++ b/packages/contracts/test/contracts/OVM/chain/OVM_StateCommitmentChain.spec.ts @@ -170,7 +170,8 @@ describe('OVM_StateCommitmentChain', () => { describe('when outside sequencer publish window', () => { beforeEach(async () => { - const SEQUENCER_PUBLISH_WINDOW = await OVM_StateCommitmentChain.SEQUENCER_PUBLISH_WINDOW() + const SEQUENCER_PUBLISH_WINDOW = + await OVM_StateCommitmentChain.SEQUENCER_PUBLISH_WINDOW() await increaseEthTime( ethers.provider, SEQUENCER_PUBLISH_WINDOW.toNumber() + 1 diff --git a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager.gas-spec.ts b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager.gas-spec.ts index c6fdaa0577b2..7cb73e72ef5c 100644 --- a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager.gas-spec.ts +++ b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager.gas-spec.ts @@ -68,9 +68,9 @@ describe('OVM_ExecutionManager gas consumption', () => { // deploy the state manager and mock it for the state transitioner MOCK__STATE_MANAGER = await smockit( - await (await ethers.getContractFactory('OVM_StateManager')).deploy( - NON_ZERO_ADDRESS - ) + await ( + await ethers.getContractFactory('OVM_StateManager') + ).deploy(NON_ZERO_ADDRESS) ) // Setup the SM to satisfy all the checks executed during EM.run() diff --git a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/nuisance-gas.spec.ts b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/nuisance-gas.spec.ts index 334ea818ac10..aade5361f820 100644 --- a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/nuisance-gas.spec.ts +++ b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/nuisance-gas.spec.ts @@ -51,8 +51,7 @@ const test_nuisanceGas: TestDefinition = { }, subTests: [ { - name: - 'ovmCALL consumes nuisance gas of CODESIZE * NUISANCE_GAS_PER_CONTRACT_BYTE', + name: 'ovmCALL consumes nuisance gas of CODESIZE * NUISANCE_GAS_PER_CONTRACT_BYTE', postState: { ExecutionManager: { messageRecord: { @@ -88,8 +87,7 @@ const test_nuisanceGas: TestDefinition = { ], }, { - name: - 'ovmCALL consumes nuisance gas of CODESIZE * NUISANCE_GAS_PER_CONTRACT_BYTE twice for two unique ovmCALLS', + name: 'ovmCALL consumes nuisance gas of CODESIZE * NUISANCE_GAS_PER_CONTRACT_BYTE twice for two unique ovmCALLS', postState: { ExecutionManager: { messageRecord: { @@ -140,8 +138,7 @@ const test_nuisanceGas: TestDefinition = { ], }, { - name: - 'ovmCALL consumes all allotted nuisance gas if code contract throws unknown exception', + name: 'ovmCALL consumes all allotted nuisance gas if code contract throws unknown exception', postState: { ExecutionManager: { messageRecord: { @@ -178,8 +175,7 @@ const test_nuisanceGas: TestDefinition = { ], }, { - name: - 'ovmCREATE consumes all allotted nuisance gas if creation code throws data-less exception', + name: 'ovmCREATE consumes all allotted nuisance gas if creation code throws data-less exception', parameters: [ { name: 'give 1/2 gas to ovmCALL => ovmCREATE, evmINVALID', diff --git a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmCALL.spec.ts b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmCALL.spec.ts index 6ff25e8148ab..24b2ed796d7b 100644 --- a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmCALL.spec.ts +++ b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmCALL.spec.ts @@ -90,8 +90,7 @@ const test_ovmCALL: TestDefinition = { ], }, { - name: - 'ovmCALL(ADDRESS_1) => ovmSSTORE + ovmSLOAD, ovmCALL(ADDRESS_1) => ovmSLOAD', + name: 'ovmCALL(ADDRESS_1) => ovmSSTORE + ovmSLOAD, ovmCALL(ADDRESS_1) => ovmSLOAD', steps: [ { functionName: 'ovmCALL', @@ -140,8 +139,7 @@ const test_ovmCALL: TestDefinition = { ], }, { - name: - 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmADDRESS + ovmCALLER', + name: 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmADDRESS + ovmCALLER', steps: [ { functionName: 'ovmCALL', diff --git a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmCREATE.spec.ts b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmCREATE.spec.ts index 8281cd5516af..cd305ea90423 100644 --- a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmCREATE.spec.ts +++ b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmCREATE.spec.ts @@ -400,8 +400,7 @@ const test_ovmCREATE: TestDefinition = { ], }, { - name: - 'ovmCREATE => ovmSSTORE, ovmCALL(CREATED) => ovmSLOAD(EXIST) + ovmSLOAD(NONEXIST)', + name: 'ovmCREATE => ovmSSTORE, ovmCALL(CREATED) => ovmSLOAD(EXIST) + ovmSLOAD(NONEXIST)', steps: [ { functionName: 'ovmCREATE', @@ -449,8 +448,7 @@ const test_ovmCREATE: TestDefinition = { ], }, { - name: - 'ovmCREATE => ovmCALL(ADDRESS_1) => ovmSSTORE, ovmCALL(ADDRESS_1) => ovmSLOAD', + name: 'ovmCREATE => ovmCALL(ADDRESS_1) => ovmSSTORE, ovmCALL(ADDRESS_1) => ovmSLOAD', steps: [ { functionName: 'ovmCREATE', @@ -502,8 +500,7 @@ const test_ovmCREATE: TestDefinition = { { // TODO: appears to be failing due to a smoddit issue skip: true, - name: - 'ovmCREATE => (ovmCALL(ADDRESS_2) => ovmSSTORE) + ovmREVERT, ovmCALL(ADDRESS_2) => ovmSLOAD', + name: 'ovmCREATE => (ovmCALL(ADDRESS_2) => ovmSSTORE) + ovmREVERT, ovmCALL(ADDRESS_2) => ovmSLOAD', steps: [ { functionName: 'ovmCREATE', @@ -774,9 +771,10 @@ const test_ovmCREATE: TestDefinition = { contractStorage: { ['0x4200000000000000000000000000000000000002']: { // initialized? true, allowArbitraryDeployment? false - '0x0000000000000000000000000000000000000000000000000000000000000000': getStorageXOR( - '0x0000000000000000000000000000000000000000000000000000000000000001' - ), + '0x0000000000000000000000000000000000000000000000000000000000000000': + getStorageXOR( + '0x0000000000000000000000000000000000000000000000000000000000000001' + ), // non-whitelisted deployer is whitelisted? false [NON_WHITELISTED_DEPLOYER_KEY]: getStorageXOR( ethers.constants.HashZero @@ -904,9 +902,10 @@ const test_ovmCREATE: TestDefinition = { contractStorage: { ['0x4200000000000000000000000000000000000002']: { // initialized? true, allowArbitraryDeployment? true - '0x0000000000000000000000000000000000000000000000000000000000000000': getStorageXOR( - '0x0000000000000000000000000000000000000000000000000000000000000101' - ), + '0x0000000000000000000000000000000000000000000000000000000000000000': + getStorageXOR( + '0x0000000000000000000000000000000000000000000000000000000000000101' + ), // non-whitelisted deployer is whitelisted? false [NON_WHITELISTED_DEPLOYER_KEY]: getStorageXOR( ethers.constants.HashZero @@ -945,7 +944,8 @@ const test_ovmCREATE: TestDefinition = { subSteps: [], }, expectedReturnStatus: true, - expectedReturnValue: CREATED_BY_NON_WHITELISTED_DEPLOYER, + expectedReturnValue: + CREATED_BY_NON_WHITELISTED_DEPLOYER, }, ], }, diff --git a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmCREATEEOA.spec.ts b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmCREATEEOA.spec.ts index fac05477a071..6170472d8a4f 100644 --- a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmCREATEEOA.spec.ts +++ b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmCREATEEOA.spec.ts @@ -54,10 +54,8 @@ const test_ovmCREATEEOA: TestDefinition = { _messageHash: '0x92d658d25f963af824e9d4bd533c165773d4a694a67d88135d119d5bca97c001', _v: 1, - _r: - '0x73757c671fae2c3fb6825766c724b7715720bda4b309d3612f2c623364556967', - _s: - '0x2fc9b7222783390b9f10e22e92a52871beaff2613193d6e2dbf18d0e2d2eb8ff', + _r: '0x73757c671fae2c3fb6825766c724b7715720bda4b309d3612f2c623364556967', + _s: '0x2fc9b7222783390b9f10e22e92a52871beaff2613193d6e2dbf18d0e2d2eb8ff', }, expectedReturnStatus: true, expectedReturnValue: undefined, diff --git a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmDELEGATECALL.spec.ts b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmDELEGATECALL.spec.ts index a6d114c75373..69871037efc1 100644 --- a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmDELEGATECALL.spec.ts +++ b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmDELEGATECALL.spec.ts @@ -87,8 +87,7 @@ const test_ovmDELEGATECALL: TestDefinition = { ], }, { - name: - 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmCALLER', + name: 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmCALLER', steps: [ { functionName: 'ovmCALL', @@ -127,8 +126,7 @@ const test_ovmDELEGATECALL: TestDefinition = { ], }, { - name: - 'ovmCALL(ADDRESS_1) => (ovmDELEGATECALL(ADDRESS_2) => ovmSSTORE) + ovmSLOAD', + name: 'ovmCALL(ADDRESS_1) => (ovmDELEGATECALL(ADDRESS_2) => ovmSSTORE) + ovmSLOAD', steps: [ { functionName: 'ovmCALL', @@ -202,8 +200,7 @@ const test_ovmDELEGATECALL: TestDefinition = { ], }, { - name: - 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmDELEGATECALL(ADDRESS_4) => ovmCALLER', + name: 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmDELEGATECALL(ADDRESS_4) => ovmCALLER', steps: [ { functionName: 'ovmCALL', @@ -252,8 +249,7 @@ const test_ovmDELEGATECALL: TestDefinition = { ], }, { - name: - 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmDELEGATECALL(ADDRESS_4) => ovmADDRESS', + name: 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmDELEGATECALL(ADDRESS_4) => ovmADDRESS', steps: [ { functionName: 'ovmCALL', @@ -302,8 +298,7 @@ const test_ovmDELEGATECALL: TestDefinition = { ], }, { - name: - 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmDELEGATECALL(ADDRESS_4) => ovmCREATE', + name: 'ovmCALL(ADDRESS_1) => ovmCALL(ADDRESS_2) => ovmDELEGATECALL(ADDRESS_3) => ovmDELEGATECALL(ADDRESS_4) => ovmCREATE', steps: [ { functionName: 'ovmCALL', diff --git a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmSTATICCALL.spec.ts b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmSTATICCALL.spec.ts index 95ecff87efbf..a2c03789d7be 100644 --- a/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmSTATICCALL.spec.ts +++ b/packages/contracts/test/contracts/OVM/execution/OVM_ExecutionManager/ovmSTATICCALL.spec.ts @@ -192,8 +192,7 @@ const test_ovmSTATICCALL: TestDefinition = { ], }, { - name: - 'ovmCALL(ADDRESS_1) => ovmSTATICCALL(ADDRESS_2) => ovmCALL(ADDRESS_3) => ovmSSTORE', + name: 'ovmCALL(ADDRESS_1) => ovmSTATICCALL(ADDRESS_2) => ovmCALL(ADDRESS_3) => ovmSSTORE', steps: [ { functionName: 'ovmCALL', @@ -240,8 +239,7 @@ const test_ovmSTATICCALL: TestDefinition = { ], }, { - name: - 'ovmCALL(ADDRESS_1) => ovmSTATICCALL(ADDRESS_2) => ovmCALL(ADDRESS_3) => ovmSLOAD', + name: 'ovmCALL(ADDRESS_1) => ovmSTATICCALL(ADDRESS_2) => ovmCALL(ADDRESS_3) => ovmSLOAD', steps: [ { functionName: 'ovmCALL', @@ -284,8 +282,7 @@ const test_ovmSTATICCALL: TestDefinition = { ], }, { - name: - 'ovmCALL(ADDRESS_1) => ovmSTATICCALL(ADDRESS_2) => ovmCALL(ADDRESS_3) => ovmCREATE', + name: 'ovmCALL(ADDRESS_1) => ovmSTATICCALL(ADDRESS_2) => ovmCALL(ADDRESS_3) => ovmCREATE', steps: [ { functionName: 'ovmCALL', diff --git a/packages/contracts/test/contracts/OVM/verification/OVM_BondManager.spec.ts b/packages/contracts/test/contracts/OVM/verification/OVM_BondManager.spec.ts index 4fd4bacb3573..78989e40b6c7 100644 --- a/packages/contracts/test/contracts/OVM/verification/OVM_BondManager.spec.ts +++ b/packages/contracts/test/contracts/OVM/verification/OVM_BondManager.spec.ts @@ -67,10 +67,9 @@ describe('OVM_BondManager', () => { token = await (await deployer.getContractFactory('TestERC20')).deploy() await token.mint(sender, ethers.utils.parseEther('100')) - bondManager = await (await smoddit('OVM_BondManager')).deploy( - token.address, - manager.address - ) + bondManager = await ( + await smoddit('OVM_BondManager') + ).deploy(token.address, manager.address) await manager.setAddress('OVM_BondManager', bondManager.address) await fraudVerifier.setBondManager(bondManager.address) }) diff --git a/packages/contracts/test/contracts/OVM/verification/OVM_StateTransitionerFactory.spec.ts b/packages/contracts/test/contracts/OVM/verification/OVM_StateTransitionerFactory.spec.ts index 20e1eaff3170..636d3f20c3d8 100644 --- a/packages/contracts/test/contracts/OVM/verification/OVM_StateTransitionerFactory.spec.ts +++ b/packages/contracts/test/contracts/OVM/verification/OVM_StateTransitionerFactory.spec.ts @@ -35,9 +35,8 @@ describe('OVM_StateTransitionerFactory', () => { let OVM_StateTransitionerFactory: Contract let Mock__OVM_StateManagerFactory: MockContract beforeEach(async () => { - OVM_StateTransitionerFactory = await Factory__OVM_StateTransitionerFactory.deploy( - AddressManager.address - ) + OVM_StateTransitionerFactory = + await Factory__OVM_StateTransitionerFactory.deploy(AddressManager.address) Mock__OVM_StateManagerFactory = await smockit('OVM_StateManagerFactory') Mock__OVM_StateManagerFactory.smocked.create.will.return.with( diff --git a/packages/contracts/test/contracts/libraries/rlp/Lib_RLPWriter.spec.ts b/packages/contracts/test/contracts/libraries/rlp/Lib_RLPWriter.spec.ts index 70fab544901b..ad439c79138b 100644 --- a/packages/contracts/test/contracts/libraries/rlp/Lib_RLPWriter.spec.ts +++ b/packages/contracts/test/contracts/libraries/rlp/Lib_RLPWriter.spec.ts @@ -45,9 +45,10 @@ describe('Lib_RLPWriter', () => { const randomAddress = '0x1234123412341234123412341234123412341234' const rlpEncodedRandomAddress = '0x941234123412341234123412341234123412341234' - const encoded = await Lib_RLPWriter.callStatic.writeAddressWithTaintedMemory( - randomAddress - ) + const encoded = + await Lib_RLPWriter.callStatic.writeAddressWithTaintedMemory( + randomAddress + ) expect(encoded).to.eq(rlpEncodedRandomAddress) }) }) diff --git a/packages/contracts/test/contracts/libraries/utils/Lib_MerkleTree.spec.ts b/packages/contracts/test/contracts/libraries/utils/Lib_MerkleTree.spec.ts index 6d6ab278fec8..29ef22a15049 100644 --- a/packages/contracts/test/contracts/libraries/utils/Lib_MerkleTree.spec.ts +++ b/packages/contracts/test/contracts/libraries/utils/Lib_MerkleTree.spec.ts @@ -10,20 +10,7 @@ import { fromHexString, toHexString } from '@eth-optimism/core-utils' import { NON_NULL_BYTES32 } from '../../../helpers' const NODE_COUNTS = [ - 2, - 3, - 7, - 9, - 13, - 63, - 64, - 123, - 128, - 129, - 255, - 1021, - 1023, - 1024, + 2, 3, 7, 9, 13, 63, 64, 123, 128, 129, 255, 1021, 1023, 1024, ] const hash = (el: Buffer | string): Buffer => { diff --git a/packages/contracts/test/helpers/codec/bridge.ts b/packages/contracts/test/helpers/codec/bridge.ts index bf36d24ec924..700b741efa7c 100644 --- a/packages/contracts/test/helpers/codec/bridge.ts +++ b/packages/contracts/test/helpers/codec/bridge.ts @@ -6,7 +6,8 @@ export const getXDomainCalldata = ( message: string, messageNonce: number ): string => { - return getContractInterface( - 'OVM_L2CrossDomainMessenger' - ).encodeFunctionData('relayMessage', [target, sender, message, messageNonce]) + return getContractInterface('OVM_L2CrossDomainMessenger').encodeFunctionData( + 'relayMessage', + [target, sender, message, messageNonce] + ) } diff --git a/packages/contracts/test/helpers/gas/gas.ts b/packages/contracts/test/helpers/gas/gas.ts index 9e2be331179f..157ad8adb2de 100644 --- a/packages/contracts/test/helpers/gas/gas.ts +++ b/packages/contracts/test/helpers/gas/gas.ts @@ -15,10 +15,11 @@ export class GasMeasurement { methodName: string, methodArgs: Array = [] ): Promise { - const gasCost: number = await this.GasMeasurementContract.callStatic.measureCallGas( - targetContract.address, - targetContract.interface.encodeFunctionData(methodName, methodArgs) - ) + const gasCost: number = + await this.GasMeasurementContract.callStatic.measureCallGas( + targetContract.address, + targetContract.interface.encodeFunctionData(methodName, methodArgs) + ) return gasCost } diff --git a/packages/contracts/test/helpers/test-runner/test-runner.ts b/packages/contracts/test/helpers/test-runner/test-runner.ts index 0e80f525d9ca..580d117c4610 100644 --- a/packages/contracts/test/helpers/test-runner/test-runner.ts +++ b/packages/contracts/test/helpers/test-runner/test-runner.ts @@ -75,15 +75,17 @@ export class ExecutionManagerTestRunner { }, contractStorage: { [predeploys.OVM_DeployerWhitelist]: { - '0x0000000000000000000000000000000000000000000000000000000000000000': { - getStorageXOR: true, - value: ethers.constants.HashZero, - }, + '0x0000000000000000000000000000000000000000000000000000000000000000': + { + getStorageXOR: true, + value: ethers.constants.HashZero, + }, }, }, verifiedContractStorage: { [predeploys.OVM_DeployerWhitelist]: { - '0x0000000000000000000000000000000000000000000000000000000000000000': true, + '0x0000000000000000000000000000000000000000000000000000000000000000': + true, }, }, }, @@ -259,9 +261,8 @@ export class ExecutionManagerTestRunner { await ethers.getContractFactory('Helper_TestRunner') ).deploy() - this.contracts.Factory__Helper_TestRunner_CREATE = await ethers.getContractFactory( - 'Helper_TestRunner_CREATE' - ) + this.contracts.Factory__Helper_TestRunner_CREATE = + await ethers.getContractFactory('Helper_TestRunner_CREATE') this.snapshot = await ethers.provider.send('evm_snapshot', []) } From 86e211d86e517405022f4bc5c0d2ad8913a2401d Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Fri, 4 Jun 2021 13:13:24 -0700 Subject: [PATCH 21/30] more lint cleanup --- integration-tests/hardhat.config.ts | 2 +- integration-tests/sync-tests/sync-verifier.spec.ts | 3 ++- integration-tests/test/basic-l1-l2-communication.spec.ts | 7 ++++--- integration-tests/test/fee-payment.spec.ts | 6 ++++-- integration-tests/test/ovmcontext.spec.ts | 5 ++--- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/integration-tests/hardhat.config.ts b/integration-tests/hardhat.config.ts index 21024099998b..0fcc9b23325f 100644 --- a/integration-tests/hardhat.config.ts +++ b/integration-tests/hardhat.config.ts @@ -30,4 +30,4 @@ const config: HardhatUserConfig = { }, } -export default config \ No newline at end of file +export default config diff --git a/integration-tests/sync-tests/sync-verifier.spec.ts b/integration-tests/sync-tests/sync-verifier.spec.ts index c1fe1e7e40f1..203a9727b21d 100644 --- a/integration-tests/sync-tests/sync-verifier.spec.ts +++ b/integration-tests/sync-tests/sync-verifier.spec.ts @@ -66,7 +66,8 @@ describe('Syncing a verifier', () => { }) it('should sync dummy transaction', async () => { - const totalElementsBefore = (await env.ctc.getTotalElements()) as BigNumber + const totalElementsBefore = + (await env.ctc.getTotalElements()) as BigNumber const tx = { to: '0x' + '1234'.repeat(10), diff --git a/integration-tests/test/basic-l1-l2-communication.spec.ts b/integration-tests/test/basic-l1-l2-communication.spec.ts index 7f253ea3e37e..96c400995e94 100644 --- a/integration-tests/test/basic-l1-l2-communication.spec.ts +++ b/integration-tests/test/basic-l1-l2-communication.spec.ts @@ -133,9 +133,10 @@ describe('Basic L1<>L2 Communication', async () => { // This call is fine but will give a status of 0. const transaction = await env.l1Messenger.sendMessage( predeploys.Lib_AddressManager, - getContractInterface( - 'Lib_AddressManager' - ).encodeFunctionData('getAddress', ['whatever']), + getContractInterface('Lib_AddressManager').encodeFunctionData( + 'getAddress', + ['whatever'] + ), 5000000 ) diff --git a/integration-tests/test/fee-payment.spec.ts b/integration-tests/test/fee-payment.spec.ts index f7de4d3611a2..6c345285d72c 100644 --- a/integration-tests/test/fee-payment.spec.ts +++ b/integration-tests/test/fee-payment.spec.ts @@ -27,8 +27,10 @@ describe('Fee Payment Integration Tests', async () => { other, utils.parseEther('0.5') ) - const executionGas = await (env.ovmEth - .provider as any).send('eth_estimateExecutionGas', [tx, true]) + const executionGas = await (env.ovmEth.provider as any).send( + 'eth_estimateExecutionGas', + [tx, true] + ) const decoded = TxGasLimit.decode(gas) expect(BigNumber.from(executionGas)).deep.eq(decoded) }) diff --git a/integration-tests/test/ovmcontext.spec.ts b/integration-tests/test/ovmcontext.spec.ts index 16640b974b1f..f664dcc4ae63 100644 --- a/integration-tests/test/ovmcontext.spec.ts +++ b/integration-tests/test/ovmcontext.spec.ts @@ -49,9 +49,8 @@ describe('OVM Context: Layer 2 EVM Context', () => { 'OVM_CanonicalTransactionChain' ) - CanonicalTransactionChain = CanonicalTransactionChainFactory.connect( - l1Wallet - ).attach(ctcAddress) + CanonicalTransactionChain = + CanonicalTransactionChainFactory.connect(l1Wallet).attach(ctcAddress) const OVMMulticallFactory = await ethers.getContractFactory( 'OVMMulticall', From 3a2c25398e5a76f2a0da741c69e26c450045ae51 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Fri, 4 Jun 2021 13:39:42 -0700 Subject: [PATCH 22/30] assorted and sundry linting issues --- .../src/batch-submitter/tx-batch-submitter.ts | 55 ++- .../batch-submitter/batch-submitter.spec.ts | 20 +- .../handlers/sequencer-batch-appended.ts | 5 +- .../src/services/l1-ingestion/service.ts | 15 +- .../src/services/server/service.ts | 25 +- .../test/unit-tests/examples/l2-data.ts | 369 ++++++------------ .../handlers/state-batch-appended.spec.ts | 6 +- packages/message-relayer/src/exec/run.ts | 6 +- packages/message-relayer/src/relay-tx.ts | 40 +- packages/message-relayer/src/service.ts | 101 ++--- packages/omgx/fraud-prover/.prettierrc.json | 2 +- packages/omgx/fraud-prover/hardhat.config.ts | 2 +- packages/omgx/fraud-prover/package.json | 12 +- packages/omgx/fraud-prover/src/exec/run.ts | 7 +- packages/omgx/fraud-prover/src/service.ts | 143 ++++--- .../src/utils/l1-provider-wrapper.ts | 139 +++---- .../src/utils/l2-provider-wrapper.ts | 24 +- .../omgx/fraud-prover/src/utils/ovm-utils.ts | 3 +- .../omgx/fraud-prover/test/a_setup.spec.ts | 166 ++++---- packages/omgx/fraud-prover/test/shared/env.ts | 14 +- .../omgx/fraud-prover/test/shared/utils.ts | 62 ++- .../fraud-prover/test/shared/watcher-utils.ts | 10 +- .../omgx/fraud-prover/test/shared/watcher.ts | 19 +- packages/omgx/fraud-prover/yarn-error.log | 86 ++++ .../omgx/message-relayer-fast/src/exec/run.ts | 5 +- .../omgx/message-relayer-fast/src/service.ts | 43 +- tslint.base.json | 3 +- 27 files changed, 697 insertions(+), 685 deletions(-) create mode 100644 packages/omgx/fraud-prover/yarn-error.log diff --git a/packages/batch-submitter/src/batch-submitter/tx-batch-submitter.ts b/packages/batch-submitter/src/batch-submitter/tx-batch-submitter.ts index b52be781aa52..63a07f44cb78 100644 --- a/packages/batch-submitter/src/batch-submitter/tx-batch-submitter.ts +++ b/packages/batch-submitter/src/batch-submitter/tx-batch-submitter.ts @@ -127,7 +127,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter { } public async _onSync(): Promise { - const pendingQueueElements = await this.chainContract.getNumPendingQueueElements() + const pendingQueueElements = + await this.chainContract.getNumPendingQueueElements() this.logger.debug('Got number of pending queue elements', { pendingQueueElements, }) @@ -225,10 +226,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter { return } - const [ - batchParams, - wasBatchTruncated, - ] = await this._generateSequencerBatchParams(startBlock, endBlock) + const [batchParams, wasBatchTruncated] = + await this._generateSequencerBatchParams(startBlock, endBlock) const batchSizeInBytes = encodeAppendSequencerBatch(batchParams).length / 2 this.logger.debug('Sequencer batch generated', { batchSizeInBytes, @@ -380,11 +379,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter { } let isEqual = true - const [ - queueEleHash, - timestamp, - blockNumber, - ] = await this.chainContract.getQueueElement(queueIndex) + const [queueEleHash, timestamp, blockNumber] = + await this.chainContract.getQueueElement(queueIndex) // TODO: Verify queue element hash equality. The queue element hash can be computed with: // keccak256( abi.encode( msg.sender, _target, _gasLimit, _data)) @@ -448,19 +444,18 @@ export class TransactionBatchSubmitter extends BatchSubmitter { for (const ele of b) { // Look for skipped deposits while (true) { - const pendingQueueElements = await this.chainContract.getNumPendingQueueElements() - const nextRemoteQueueElements = await this.chainContract.getNextQueueIndex() + const pendingQueueElements = + await this.chainContract.getNumPendingQueueElements() + const nextRemoteQueueElements = + await this.chainContract.getNextQueueIndex() const totalQueueElements = pendingQueueElements + nextRemoteQueueElements // No more queue elements so we clearly haven't skipped anything if (nextQueueIndex >= totalQueueElements) { break } - const [ - queueEleHash, - timestamp, - blockNumber, - ] = await this.chainContract.getQueueElement(nextQueueIndex) + const [queueEleHash, timestamp, blockNumber] = + await this.chainContract.getQueueElement(nextQueueIndex) if (timestamp < ele.timestamp || blockNumber < ele.blockNumber) { this.logger.error('Fixing skipped deposit', { @@ -496,10 +491,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter { const fixMonotonicity = async (b: Batch): Promise => { this.logger.debug('Fixing monotonicity...') // The earliest allowed timestamp/blockNumber is the last timestamp submitted on chain. - const { - lastTimestamp, - lastBlockNumber, - } = await this._getLastTimestampAndBlockNumber() + const { lastTimestamp, lastBlockNumber } = + await this._getLastTimestampAndBlockNumber() let earliestTimestamp = lastTimestamp let earliestBlockNumber = lastBlockNumber this.logger.debug('Determined earliest timestamp and blockNumber', { @@ -515,16 +508,15 @@ export class TransactionBatchSubmitter extends BatchSubmitter { // updateLatestTimestampAndBlockNumber is a helper which updates // the latest timestamp and block number based on the pending queue elements. const updateLatestTimestampAndBlockNumber = async () => { - const pendingQueueElements = await this.chainContract.getNumPendingQueueElements() - const nextRemoteQueueElements = await this.chainContract.getNextQueueIndex() + const pendingQueueElements = + await this.chainContract.getNumPendingQueueElements() + const nextRemoteQueueElements = + await this.chainContract.getNextQueueIndex() const totalQueueElements = pendingQueueElements + nextRemoteQueueElements if (nextQueueIndex < totalQueueElements) { - const [ - queueEleHash, - queueTimestamp, - queueBlockNumber, - ] = await this.chainContract.getQueueElement(nextQueueIndex) + const [queueEleHash, queueTimestamp, queueBlockNumber] = + await this.chainContract.getQueueElement(nextQueueIndex) latestTimestamp = queueTimestamp latestBlockNumber = queueBlockNumber } else { @@ -649,11 +641,8 @@ export class TransactionBatchSubmitter extends BatchSubmitter { queueIndex: number, queueElement: BatchElement ): Promise { - const [ - queueEleHash, - timestamp, - blockNumber, - ] = await this.chainContract.getQueueElement(queueIndex) + const [queueEleHash, timestamp, blockNumber] = + await this.chainContract.getQueueElement(queueIndex) if ( timestamp > queueElement.timestamp && diff --git a/packages/batch-submitter/test/batch-submitter/batch-submitter.spec.ts b/packages/batch-submitter/test/batch-submitter/batch-submitter.spec.ts index dffbdc33867c..58327a6a17b2 100644 --- a/packages/batch-submitter/test/batch-submitter/batch-submitter.spec.ts +++ b/packages/batch-submitter/test/batch-submitter/batch-submitter.spec.ts @@ -153,10 +153,11 @@ describe('BatchSubmitter', () => { let OVM_StateCommitmentChain: Contract let l2Provider: MockchainProvider beforeEach(async () => { - const unwrapped_OVM_CanonicalTransactionChain = await Factory__OVM_CanonicalTransactionChain.deploy( - AddressManager.address, - FORCE_INCLUSION_PERIOD_SECONDS - ) + const unwrapped_OVM_CanonicalTransactionChain = + await Factory__OVM_CanonicalTransactionChain.deploy( + AddressManager.address, + FORCE_INCLUSION_PERIOD_SECONDS + ) await unwrapped_OVM_CanonicalTransactionChain.init() await AddressManager.setAddress( @@ -170,11 +171,12 @@ describe('BatchSubmitter', () => { sequencer ) - const unwrapped_OVM_StateCommitmentChain = await Factory__OVM_StateCommitmentChain.deploy( - AddressManager.address, - 0, // fraudProofWindowSeconds - 0 // sequencerPublishWindowSeconds - ) + const unwrapped_OVM_StateCommitmentChain = + await Factory__OVM_StateCommitmentChain.deploy( + AddressManager.address, + 0, // fraudProofWindowSeconds + 0 // sequencerPublishWindowSeconds + ) await unwrapped_OVM_StateCommitmentChain.init() diff --git a/packages/data-transport-layer/src/services/l1-ingestion/handlers/sequencer-batch-appended.ts b/packages/data-transport-layer/src/services/l1-ingestion/handlers/sequencer-batch-appended.ts index 0c90fa286277..155a0ef704b8 100644 --- a/packages/data-transport-layer/src/services/l1-ingestion/handlers/sequencer-batch-appended.ts +++ b/packages/data-transport-layer/src/services/l1-ingestion/handlers/sequencer-batch-appended.ts @@ -102,9 +102,8 @@ export const handleEventsSequencerBatchAppended: EventHandlerSet< nextTxPointer ) - const decoded = maybeDecodeSequencerBatchTransaction( - sequencerTransaction - ) + const decoded = + maybeDecodeSequencerBatchTransaction(sequencerTransaction) transactionEntries.push({ index: extraData.prevTotalElements diff --git a/packages/data-transport-layer/src/services/l1-ingestion/service.ts b/packages/data-transport-layer/src/services/l1-ingestion/service.ts index 3bc862cf4feb..236ea29d4364 100644 --- a/packages/data-transport-layer/src/services/l1-ingestion/service.ts +++ b/packages/data-transport-layer/src/services/l1-ingestion/service.ts @@ -131,7 +131,8 @@ export class L1IngestionService extends BaseService { // Store the total number of submitted transactions so the server can tell clients if we're // done syncing or not - const totalElements = await this.state.contracts.OVM_CanonicalTransactionChain.getTotalElements() + const totalElements = + await this.state.contracts.OVM_CanonicalTransactionChain.getTotalElements() if (totalElements > 0) { await this.state.db.putHighestL2BlockNumber(totalElements - 1) } @@ -236,11 +237,13 @@ export class L1IngestionService extends BaseService { // We need to figure out how to make this work without Infura. Mark and I think that infura is // doing some indexing of events beyond Geth's native capabilities, meaning some event logic // will only work on Infura and not on a local geth instance. Not great. - const addressSetEvents = ((await this.state.contracts.Lib_AddressManager.queryFilter( - this.state.contracts.Lib_AddressManager.filters.AddressSet(), - fromL1Block, - toL1Block - )) as TypedEthersEvent[]).filter((event) => { + const addressSetEvents = ( + (await this.state.contracts.Lib_AddressManager.queryFilter( + this.state.contracts.Lib_AddressManager.filters.AddressSet(), + fromL1Block, + toL1Block + )) as TypedEthersEvent[] + ).filter((event) => { return event.args._name === contractName }) diff --git a/packages/data-transport-layer/src/services/server/service.ts b/packages/data-transport-layer/src/services/server/service.ts index 4e781114d92d..8ebfcf7f125f 100644 --- a/packages/data-transport-layer/src/services/server/service.ts +++ b/packages/data-transport-layer/src/services/server/service.ts @@ -226,7 +226,8 @@ export class L1TransportServer extends BaseService { highestL2BlockNumber = await this.state.db.getHighestL2BlockNumber() break case 'l2': - currentL2Block = await this.state.db.getLatestUnconfirmedTransaction() + currentL2Block = + await this.state.db.getLatestUnconfirmedTransaction() highestL2BlockNumber = (await this.state.db.getHighestSyncedUnconfirmedBlock()) - 1 break @@ -469,11 +470,12 @@ export class L1TransportServer extends BaseService { } } - const transactions = await this.state.db.getFullTransactionsByIndexRange( - BigNumber.from(batch.prevTotalElements).toNumber(), - BigNumber.from(batch.prevTotalElements).toNumber() + - BigNumber.from(batch.size).toNumber() - ) + const transactions = + await this.state.db.getFullTransactionsByIndexRange( + BigNumber.from(batch.prevTotalElements).toNumber(), + BigNumber.from(batch.prevTotalElements).toNumber() + + BigNumber.from(batch.size).toNumber() + ) return { batch, @@ -497,11 +499,12 @@ export class L1TransportServer extends BaseService { } } - const transactions = await this.state.db.getFullTransactionsByIndexRange( - BigNumber.from(batch.prevTotalElements).toNumber(), - BigNumber.from(batch.prevTotalElements).toNumber() + - BigNumber.from(batch.size).toNumber() - ) + const transactions = + await this.state.db.getFullTransactionsByIndexRange( + BigNumber.from(batch.prevTotalElements).toNumber(), + BigNumber.from(batch.prevTotalElements).toNumber() + + BigNumber.from(batch.size).toNumber() + ) return { batch, diff --git a/packages/data-transport-layer/test/unit-tests/examples/l2-data.ts b/packages/data-transport-layer/test/unit-tests/examples/l2-data.ts index f4fad2e1fea3..bd4b8b1adc9d 100644 --- a/packages/data-transport-layer/test/unit-tests/examples/l2-data.ts +++ b/packages/data-transport-layer/test/unit-tests/examples/l2-data.ts @@ -30,8 +30,7 @@ export const l2Block = { from: '0x5c7c6d069ba232718f37c27a9549b547c359e31c', gas: '0x89543f', gasPrice: '0x0', - hash: - '0x36f562ff7cfab052de0bae8b244d07a6587068b2070921fec10b228e014a893a', + hash: '0x36f562ff7cfab052de0bae8b244d07a6587068b2070921fec10b228e014a893a', input: '0xaf086c7e', nonce: '0x14', to: '0x8700daec35af8ff88c16bdf0418774cb3d7599b4', @@ -73,8 +72,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000088b4b479761b16775f7f694153a94c9627baf1343d62e5990493cee6dd420a08784c42319c815d6d48da67158bf663aa14dc0e0297677a62f8665f57e55c7fc601', transactions: [ { - hash: - '0x49fc6f3f0c9290202f477cf13a7249ec5a663b16cba331baf3d124e50627ec7a', + hash: '0x49fc6f3f0c9290202f477cf13a7249ec5a663b16cba331baf3d124e50627ec7a', blockHash: '0x68023303de0238e86409a0f22b4bac8b61a21048dc07c0b4248b1458fe9dd983', blockNumber: 73678, @@ -110,8 +108,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000007a37d1a9cb72cde3de0a047472cfef3d217cd85bb313129c88f441744a8123f535d319ae095fa5976af44f83bb32e2d4e910fe17b2066b78bac394b4cef24a500', transactions: [ { - hash: - '0x9ffc4108faec8b44781e68c64c59546d3862d5ab0ee2337868fc0808acfb018e', + hash: '0x9ffc4108faec8b44781e68c64c59546d3862d5ab0ee2337868fc0808acfb018e', blockHash: '0x91b7407da8e2dcba6b093771efe842becddc2c728689429d0f399621eb9e3431', blockNumber: 73679, @@ -123,8 +120,7 @@ export const blocksOnL2 = [ to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64', value: { type: 'BigNumber', hex: '0x00' }, nonce: 24258, - data: - '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e49750000000000000000000000000000000000000000000000000000000000000001534e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000013ee5cec085b38000', + data: '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e49750000000000000000000000000000000000000000000000000000000000000001534e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000013ee5cec085b38000', r: '0xeabe2f5db7a62275de799b9aee03f55f01743563bbee17e722cd2efb0b1fbc1a', s: '0x246ba5723b499d41bd46f7c20c5eab5216e7b5adac96043c2d671de2b4758820', v: 55, @@ -148,8 +144,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000cef0ac2dc68816a76c28704b97abd4b4b04ad6b3facc55e276d449c997005dd40fac04ef358a61f89bcf19e1213d22329bb034e599581c3cb40381329505f28700', transactions: [ { - hash: - '0x9f6228cae03e5c83014f9f711b554f7dea4de0079c7d75c18f04c2bb0e24c897', + hash: '0x9f6228cae03e5c83014f9f711b554f7dea4de0079c7d75c18f04c2bb0e24c897', blockHash: '0xace843bfc78bc930a5c4955c9ac6336b60b020e497368520c4b1ec3e6102fdc4', blockNumber: 73680, @@ -185,8 +180,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000398bf370d00d4fa2454c54b437c280063d1e9ecff2d1c82ddcf8ce5c164cbdce06905ab23dc9084f1af4555bc7e47b09e7d15ed18d9429efa20d6a7fea0b7c4e01', transactions: [ { - hash: - '0xf9d0a11892260e21652690362f2bc29a2839f7627e34e15d3400709c94eef796', + hash: '0xf9d0a11892260e21652690362f2bc29a2839f7627e34e15d3400709c94eef796', blockHash: '0x001afa52f3333732a71311a964ba6487954489df7c6bffab6fde77b67d5a453d', blockNumber: 73681, @@ -222,8 +216,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000051fe45f8fcde6a23a4eacee467c0106bceedb33bdb6878ad87ddea51bc81945131fe36361070e4d5fb40fc8f26215cb8aa71e24de8f373f06f2688132b3bdcc401', transactions: [ { - hash: - '0xef6e9e9d95d5b77dda3f26b453e321ed16692188447768b9f035717e11a3dd17', + hash: '0xef6e9e9d95d5b77dda3f26b453e321ed16692188447768b9f035717e11a3dd17', blockHash: '0xe0afa2a810396e4d10464760db8e16deba432b134993538ccc9891f4270427b7', blockNumber: 73682, @@ -235,8 +228,7 @@ export const blocksOnL2 = [ to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64', value: { type: 'BigNumber', hex: '0x00' }, nonce: 24259, - data: - '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e49d40000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000141371c5e03310000', + data: '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e49d40000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000141371c5e03310000', r: '0x8d4e5a4defd67ce253e0232e10a592857b6d04b0be36abe1fe4cefa24987df12', s: '0x4b96b5840e08d70c536c1a49e28d767289c388b6cfade572989e74a4f28b3666', v: 55, @@ -260,8 +252,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000d44d1f8d8e10795813aa29eecc9fdd6510b1bfe41dfbdedc282de846a204d89259e85cb7125b99ce4eb7a4c4d27e955be4bba0f3b7bf74f62cad78f9904f58db00', transactions: [ { - hash: - '0x6e15c6b6305f5c275af6199d9361b3366dbe4c35163ffa2daf9f7efe0d9c135f', + hash: '0x6e15c6b6305f5c275af6199d9361b3366dbe4c35163ffa2daf9f7efe0d9c135f', blockHash: '0xaffdf748d0430b898ea75dd17326a1f68025b3689b173a9bf56bee30f537a1e4', blockNumber: 73683, @@ -297,8 +288,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000cf5b6fbc249bddbc22c690d02a0070f385196b2c1e884a06dd501d9f4f563a1537ed70a69b7bc59d386f26b2649c11d670c39a087fc5fdcb1f7615287b953cef00', transactions: [ { - hash: - '0x8af76247f7a24ca13fd3256ccb591b2d3a1fceb0d4a4f190ab618460847c9cd7', + hash: '0x8af76247f7a24ca13fd3256ccb591b2d3a1fceb0d4a4f190ab618460847c9cd7', blockHash: '0xdfb87044d5d122e1405c6cdfa664f3e8e7cf6251b60d5b3e111c1410eb60a5b8', blockNumber: 73684, @@ -334,8 +324,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000063ac1e35567c4b2092f0d8d26b7e71c3762a7eda2b48b489df55b1ade1eceadf6ceee276534f205ad9073e15c89c0808877c1421e4766e9d363b3c895fe2967001', transactions: [ { - hash: - '0x4319bb56f1745d2493c3b9355be051c4f1fe6eb2dec7700d1120f45681dfcc49', + hash: '0x4319bb56f1745d2493c3b9355be051c4f1fe6eb2dec7700d1120f45681dfcc49', blockHash: '0x4326c91d83f895f17c7b0eb2733ed1066d22b980cbb701c17f4ae6865622bd30', blockNumber: 73685, @@ -371,8 +360,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000063d3e259d0ca893fbf84d1d410f3a0e0519f07e92ac678ebef13b647312ac50460688b2978c8361bd7ed10971da377b14bfce15689e02e08a90f9893118373df01', transactions: [ { - hash: - '0xe11361ef73f50942cc8d2d72ed48dd0d9f835e665becfa4a23de248c5b45dcec', + hash: '0xe11361ef73f50942cc8d2d72ed48dd0d9f835e665becfa4a23de248c5b45dcec', blockHash: '0x5740335e1987214985902828cb0e9b5f3cae7ce72605a3ce3f94bbf8dbb4a47a', blockNumber: 73686, @@ -408,8 +396,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000003bd14f97e370f17aac8580961f7a268b620f79adcd93097071e4e6ff3bfe74fe5a1efa86d485916fcdcc9f21abcf8d1ebf9d5d5e7f478450dae95ce916891e2a00', transactions: [ { - hash: - '0xfc82b93bf7b2ce20d6098cf6323a87302239f409aefde426367f34f3cb902394', + hash: '0xfc82b93bf7b2ce20d6098cf6323a87302239f409aefde426367f34f3cb902394', blockHash: '0xe7b33fec42b73de9decf8ecda717720860740f3f78999f75394dee2d833a06a0', blockNumber: 73687, @@ -445,8 +432,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000063e3f1cefd147957d83e02c6b531e64527b378c6edbcedd83311a11f4f4c6a925ab7307fbb98e3688d5517a0e599a88603e5a0ef2daec7b0a2ff22365e23ac0a01', transactions: [ { - hash: - '0x1576160357144d0ce49923bb4c7dad181a80bcd5fd4a621c0dc3a48c2112a8e9', + hash: '0x1576160357144d0ce49923bb4c7dad181a80bcd5fd4a621c0dc3a48c2112a8e9', blockHash: '0x3832d0ec3cd8002d88c48d25cf023ab74df70e8a24f98082730f3de0a173c8df', blockNumber: 73688, @@ -458,8 +444,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 42, - data: - '0x8a2900140000000000000000000000000000000000000000000000006f05b59d3b200000', + data: '0x8a2900140000000000000000000000000000000000000000000000006f05b59d3b200000', r: '0x9cedf37f33c099a4b81e0dc68c4b8d23a1150624d5cca9b938d4aa3c21aaef8c', s: '0x17ff865e8605486a0ecec67b685f1ae38f3c0158e19ed23a986363ccd2ccdb0f', v: 56, @@ -483,8 +468,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000080079f5a26817ec5721e18a82f396c07b035eeeb1f2fed3eb52c90fbc423910514107ec03e1e27898d676a056d8bb0651af1ded4957d12614d013681294e780701', transactions: [ { - hash: - '0x3b92a86eadcd1d882af5d01ce3e5804f091dc6d6804a359c46579700c6776442', + hash: '0x3b92a86eadcd1d882af5d01ce3e5804f091dc6d6804a359c46579700c6776442', blockHash: '0x64a68fe275f33786a5265645b86f5c497af641d6e5c9d5a5d2266e90cb71f2f8', blockNumber: 73689, @@ -520,8 +504,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000021f7762a74a309de30f9e1ac373d6bd3ff6bf79ba6cdc9dc0284f79fb3aaad54154e9900ad6f551110b1b3920d8df09eb881a79b22b175b4eb1bd12258dec5fd01', transactions: [ { - hash: - '0xe8fef05c2bd5660805bd1bfcd2b70ef08cddf3a562855ef30de01f6bd5cd21e1', + hash: '0xe8fef05c2bd5660805bd1bfcd2b70ef08cddf3a562855ef30de01f6bd5cd21e1', blockHash: '0x28c92ce3bd687ef83df8f7b8c525a314ce1a2c20c93b37a3c4c447a645f42df7', blockNumber: 73690, @@ -557,8 +540,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004fbc83a058cf53437a24d6a0dbf06025c75cbf4053ec14b13cefe267c654da4a1dc65ab0f76d6b6c37208c5f096953f2736c76ccf6115412a8cf18325bb6f81501', transactions: [ { - hash: - '0x7d0733bbbb72b71c608a293f40e51899ba2791ad9325e98ae10b4f061dfa359d', + hash: '0x7d0733bbbb72b71c608a293f40e51899ba2791ad9325e98ae10b4f061dfa359d', blockHash: '0xad99822f1b2f28c1054138e14f54ddcd11dc71f7866b5a3c77f03c2c3a90e232', blockNumber: 73691, @@ -594,8 +576,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000009441bdc2075f112b61f35734b2d186570563f0acd43158d88a8d65b80f3691dd259646b7824c15a0dbd834b3ef24a0ec1890b3571c6771efa0a744826effbee800', transactions: [ { - hash: - '0x14618ba9bebc80c3364f9baa82ba54861002f3ccf667b3f0d4c96e0f940e435a', + hash: '0x14618ba9bebc80c3364f9baa82ba54861002f3ccf667b3f0d4c96e0f940e435a', blockHash: '0x533dc590019babb21b92ea82cee2d0377ec7e425e0bb6587fa7691526506bf08', blockNumber: 73692, @@ -607,8 +588,7 @@ export const blocksOnL2 = [ to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64', value: { type: 'BigNumber', hex: '0x00' }, nonce: 24260, - data: - '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e4ae20000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000143687087b5b40000', + data: '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e4ae20000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000143687087b5b40000', r: '0x9d2d26177c80858fdba6683fa5d095dacb9634e9deb842286ec79c17d85f0d7b', s: '0x70c617d7878dded6bf0a7ca7fc1371e8bced146f6e7d0da215f67e9e0f92940c', v: 56, @@ -632,8 +612,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000076e54a64d58f463397917778db3817de2603cfd22657baf39126366132a9e83623af7fc78252949fac2600ed40aa575aecd3622a56643fcda2fc1b1ab15e147c00', transactions: [ { - hash: - '0x62c03ecdb471b8e66a9d7213dd42040fb830c969a4bb3e78967b705db5d41680', + hash: '0x62c03ecdb471b8e66a9d7213dd42040fb830c969a4bb3e78967b705db5d41680', blockHash: '0xdc97d3bf5576c082469a8bc4b195302984d3852fe6730db499f176ebeb5f214c', blockNumber: 73693, @@ -645,8 +624,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 26, - data: - '0x8a2900140000000000000000000000000000000000000000000000008ac7230489e80000', + data: '0x8a2900140000000000000000000000000000000000000000000000008ac7230489e80000', r: '0x8e22501ff1c962656f4bfbdab7479cc4ed8c91486c4b19150d03782d7f374467', s: '0x036d7cd2cdba105a4d916dfea70fb8cc2c60121f3baca85c6f2a48909c34d378', v: 56, @@ -670,8 +648,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000164245eb8a513b195ceb0a3317f2d38fdc02a934eda73c2e556dbc53da1839031077bebd5328202b114930f4688787189e76916a645dda569c38824b7d0c892000', transactions: [ { - hash: - '0x04244086fb7aa251c2a0bdee26f8af06d8459909b8e0b317c563f07035edec03', + hash: '0x04244086fb7aa251c2a0bdee26f8af06d8459909b8e0b317c563f07035edec03', blockHash: '0xaac44b1deb159d989af39e2547c6480445b29eb3fb074427655977dc30a97605', blockNumber: 73694, @@ -707,8 +684,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000c0f0d02041da809fb25373942fbf7f6b49c94898ff22b9aeafea7bbb5b3541404f4dcc4ca346dde61f8bdba9af17abd55e5b810f8ad444218a44aa92aa98e64501', transactions: [ { - hash: - '0x826efd6567d7d0f8ad770cf2110d49e57a931f74e65c70367e63eef0dfe13382', + hash: '0x826efd6567d7d0f8ad770cf2110d49e57a931f74e65c70367e63eef0dfe13382', blockHash: '0x847cf035bfdb8a22c697e36e89c511a1c952652645b2d9b951d8a0a0edd88f01', blockNumber: 73695, @@ -744,8 +720,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000606d27114231ac08f4d77e45974280aff0fd1849759e047fa6ae40efc3a2645450929487149bc68d6dbe7534a69990c6fc0b47cbf22e02d448939dda474912af01', transactions: [ { - hash: - '0xfd77a6809d2449ded3aaafd3a6332cfc2ad1d877a9f7018700697baf6ccf241d', + hash: '0xfd77a6809d2449ded3aaafd3a6332cfc2ad1d877a9f7018700697baf6ccf241d', blockHash: '0x3844b185c3e684a136b40485875368f31b73a0cd2e09d808ee6ef7da92f22fa1', blockNumber: 73696, @@ -781,8 +756,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000003b911aa043174f6b6cf65700cef2837757c9325261f0d78d54eb3858b3164a400e20d3ebd878476de395767e99fb4e53055fcdc4f50d71a1a7667c1fbf90b4ee00', transactions: [ { - hash: - '0x6eb47e10dd56825ce55d85289180f908736acf1a76508a7bbec88172dcc77cfe', + hash: '0x6eb47e10dd56825ce55d85289180f908736acf1a76508a7bbec88172dcc77cfe', blockHash: '0x07a357f6aa5c57541ae909a7e536dd07c363978ff31b54465a4235261a378dac', blockNumber: 73697, @@ -818,8 +792,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000076e8b487fee0d47a75707eb048141afd9de6c2cf6d8f35e828e0db1d620d3ded2827e7a75c83cc624a0a36b4762821790de1a32f04ffc57a152a04215d1706b200', transactions: [ { - hash: - '0x86f9318f8152d56fa799b0537021ec6f535eb1d5be44852a41cad3c634ff6c31', + hash: '0x86f9318f8152d56fa799b0537021ec6f535eb1d5be44852a41cad3c634ff6c31', blockHash: '0x9d2a07baad39fd575722d50250f14257716d41e3d5a904ffb610bcf496d3adb3', blockNumber: 73698, @@ -831,8 +804,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 20, - data: - '0x8a2900140000000000000000000000000000000000000000000000013f306a2409fc0000', + data: '0x8a2900140000000000000000000000000000000000000000000000013f306a2409fc0000', r: '0x9d241891335c51ad2cc632ed85dd94ab8eee00da71cd812ea1c40fbcb9c441f5', s: '0x6e2f5a7f83e9aa02ae614ee89a4abd10c4332be95a1335be44d5cff6356a903a', v: 55, @@ -856,8 +828,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000002b8c5d4b8bb3f40f6e416fb3c6f1789b5224ca3d029999932b566e844aa653573a62bffcb4d851fb40e9ad41aca65ed328519ef65e0d0bf0981921f225c8d87c00', transactions: [ { - hash: - '0x91d9a14f3f0011a3fd850265c4b9a0c878b7ebe51f12836546a1b99213811b7f', + hash: '0x91d9a14f3f0011a3fd850265c4b9a0c878b7ebe51f12836546a1b99213811b7f', blockHash: '0x5157b12f3f7883e428110b8de7b6b4369fef962a555e4730413692199b2c60eb', blockNumber: 73699, @@ -893,8 +864,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001eb7cd4e3778d0acadabe5119c6cd35ec9390c63ce33c440e48436189efd63a60b4670e87ddf19e3804f4c2b9e409eae85d81720353274ce7091026edfb4bfa300', transactions: [ { - hash: - '0x656d4248aca93cf11f843ea6ad9b3eec6b76d4874c84598314de51f550e702c9', + hash: '0x656d4248aca93cf11f843ea6ad9b3eec6b76d4874c84598314de51f550e702c9', blockHash: '0xc8056ddf6447e133802173b9be9a55131bae7bb157426b941403b7583b02787e', blockNumber: 73700, @@ -906,8 +876,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 8, - data: - '0x8a2900140000000000000000000000000000000000000000000000068155a43676e00000', + data: '0x8a2900140000000000000000000000000000000000000000000000068155a43676e00000', r: '0x48b78f666b6d633554897e96f80bb797908467619895cd83eaef7f10b84415d3', s: '0x060967fb0afd49eec5d6759aa9f92c4a5a356369b518210b95c93a0a89ca81e6', v: 56, @@ -931,8 +900,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000007847a2cf889d494d5ce2ddd8898bef1978253122e190e9435e11fd4c4b768b1f67c10b3d638ab867b286dcca6a326b6bd83970851d474dc409bdb26b9c8ebb5100', transactions: [ { - hash: - '0x7833b5e121a7a6b779750d32aca30d296dac63ec57d3467e38b856bfdc48763f', + hash: '0x7833b5e121a7a6b779750d32aca30d296dac63ec57d3467e38b856bfdc48763f', blockHash: '0xdab363f0d122e60543b146b19740ca5d44ac8e4a4eb6a788dda266158c383ad0', blockNumber: 73701, @@ -968,8 +936,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001e6fd2685e49aa7095a10944e84cf52262f07666c712a8b19c0f0869c50839352c33a4100b4858ab5aa437df6c7a83a3abb7b204fa7af2e1f54b8a803d43fb4300', transactions: [ { - hash: - '0xf806a1ca7ceef819e4c8e3fa9b48092cda7135604b28cd7fd0845dfcb56d08e0', + hash: '0xf806a1ca7ceef819e4c8e3fa9b48092cda7135604b28cd7fd0845dfcb56d08e0', blockHash: '0xc8f0c8e4a9596d82b3afb5f8bad983573bd29d886c6c5188d21cecfa83d89326', blockNumber: 73702, @@ -981,8 +948,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 37, - data: - '0x8a2900140000000000000000000000000000000000000000000000c40eb7864285bedec0', + data: '0x8a2900140000000000000000000000000000000000000000000000c40eb7864285bedec0', r: '0x6f747cffb6ad3bfaec6d17404d49502ec4bbace678deceb0a6d288dfe353e22b', s: '0x794bb94612e7016f8abf6d15186a3d737536d84f7b43be2ce552a4316280154a', v: 55, @@ -1006,8 +972,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000593c6f64497c94719156a3921b7a753024750cc9fbf2e1138f16371d4f63c7d5285b18ae39636ae559935703f568a5a8d3199d15fa5a0c66444769c45495f12f01', transactions: [ { - hash: - '0xce8f18aa3b9ba5a8714b472754ad62ca9c924336cb30e4e1917dc26e3dcee102', + hash: '0xce8f18aa3b9ba5a8714b472754ad62ca9c924336cb30e4e1917dc26e3dcee102', blockHash: '0xefe3db346275833a5d83864ca30143caf4382b9d9a44b167cd29561c130e85eb', blockNumber: 73703, @@ -1043,8 +1008,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000a6b073d621070dde582e5da19402c2101ac41b721dd6d64f1589105bf6cbb3a810bc7bed1947b940aed10477ce7594e27eb955520b93975e0f5951cbbb5bd54701', transactions: [ { - hash: - '0x9294c8b490b16da1aabd266a18906cc7178935b3a0cec4d778b67e607b701026', + hash: '0x9294c8b490b16da1aabd266a18906cc7178935b3a0cec4d778b67e607b701026', blockHash: '0xf7f93c2728a8bfd9838ede5761e2aefa009f3d3257dbc91bded584353271272b', blockNumber: 73704, @@ -1080,8 +1044,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000007d488ec26cacf0da7b5b705777d5eecfb16fefa8acfa85778b29c59fbebd07521a8d83084f58e1ff8eb7d4d009fb760e7fc8392316b1abc5372f11ccca8d390301', transactions: [ { - hash: - '0x16a73d0faa95ee905ac0fdb64b17d9d1f1a13033e4bb466b066b069fa5a87ccc', + hash: '0x16a73d0faa95ee905ac0fdb64b17d9d1f1a13033e4bb466b066b069fa5a87ccc', blockHash: '0xa293fcb473fc1a0197c2bdc95a8732735a8e8311af4eadb3d70cd2c6a7d1d9d0', blockNumber: 73705, @@ -1117,8 +1080,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000008bb4032ef809f921b5fa2fbbabe2d4aaf81c29a17de44b283f963f14cc218d0b1bed75b7847982ed864efcc74c2d77105ceff9982236acb64d1fca89bc330a8f00', transactions: [ { - hash: - '0xe56eb906b132d663a598d98c331cb54b7475a2d2c1e9bf65ccd47477f584d6c7', + hash: '0xe56eb906b132d663a598d98c331cb54b7475a2d2c1e9bf65ccd47477f584d6c7', blockHash: '0xdd80d1b7c7dc2c1b02f72aeca1e6c447eab43c15371ac5834f35ecd8b02737e0', blockNumber: 73706, @@ -1154,8 +1116,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f6a74cdc2ea822f94687df1b48b6708814474dad96cac3718755ba86a55e2edf3e8665fdf7d4e456b7ff5e5c5a5325f3cbddd0cc8320c7b80e037ba608ae35fb01', transactions: [ { - hash: - '0xbd958ebffb0b36ff0462e80692bab99c507950354abb2e88e183149d0fb1c662', + hash: '0xbd958ebffb0b36ff0462e80692bab99c507950354abb2e88e183149d0fb1c662', blockHash: '0x1cc058791f2dcaa807d105af127b9999c3045220dd05294fa86ce51410a33b0b', blockNumber: 73707, @@ -1167,8 +1128,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 18, - data: - '0x8a29001400000000000000000000000000000000000000000000001043561a8829300000', + data: '0x8a29001400000000000000000000000000000000000000000000001043561a8829300000', r: '0xfbc6c4f4c92ca11aa750c91cd1ee111d69eee808eae4283931a27860599be533', s: '0x44f9763d439d3054e0dbf90667cb801320e802e74ac409610e25c1516caec4ae', v: 55, @@ -1192,8 +1152,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000aa8cfa710e6fb7c9cc02b6dd3b5e211c3c7068145c758e89f051fd2453350d110fda02e0296549d4143dc6f929fa32c0d6ff3a08a684d18fc8c4a78f7aeea45200', transactions: [ { - hash: - '0xec733f26be7ee61db5515e4eb40b3d347e0792121ecc2360b3e8ae0a63d265b1', + hash: '0xec733f26be7ee61db5515e4eb40b3d347e0792121ecc2360b3e8ae0a63d265b1', blockHash: '0xa33e4daea9ac25064ac3e2742194f0a659920984043678735f7f65dd8021e3c1', blockNumber: 73708, @@ -1229,8 +1188,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000003db8fe23391b83cb86c6230cff2181fdd98cfbc20114312aba7dd7681698b50542a32b274cdb4855d60de022e16e5ccad112eaf7c49e8d56653e68eacc31685101', transactions: [ { - hash: - '0xe9a0f6c1b5c444cbd007bdd6e7cc99ab58c8137dcdce2ef4d234d5673fac2ef5', + hash: '0xe9a0f6c1b5c444cbd007bdd6e7cc99ab58c8137dcdce2ef4d234d5673fac2ef5', blockHash: '0xa94f47b38812e0cf22ee224cc99ae1503003c926adece46a98d7db085960098c', blockNumber: 73709, @@ -1266,8 +1224,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000af5ae41f4fa0eff600135bca503da7b7a0cc12c8441ca473a8adfe63f9e747347a79ed49921395df4b850c4d028730687434349caed3c3a35950e4b5cf190a5900', transactions: [ { - hash: - '0x4d3e1eafe51348ca350879e7cfba1d5416695ace17ed8640698e79c8a7996b5d', + hash: '0x4d3e1eafe51348ca350879e7cfba1d5416695ace17ed8640698e79c8a7996b5d', blockHash: '0xcccce136772347d2749da92a4586fc4ebb620b586b6718f66344abdb6f8c817f', blockNumber: 73710, @@ -1303,8 +1260,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000ef88b3d5d4f3c66594c82acb899f449a45fbf957ee2277482c5aebfecac405bb3c79378e61222954b80b4f641d082d82a91068ebba530b402ea7449ab40258b201', transactions: [ { - hash: - '0x20f494e4230d9986168d4dbd912f7785195926356d8badf07cfedaf45e821fdf', + hash: '0x20f494e4230d9986168d4dbd912f7785195926356d8badf07cfedaf45e821fdf', blockHash: '0xc4adfabe5dfa18d6e4bba9a748ab70f0c1900e048f746522ebf920aebdd06526', blockNumber: 73711, @@ -1316,8 +1272,7 @@ export const blocksOnL2 = [ to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64', value: { type: 'BigNumber', hex: '0x00' }, nonce: 24261, - data: - '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e4cfa0000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000143bdb46728500000', + data: '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e4cfa0000000000000000000000000000000000000000000000000000000000000001534e580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000143bdb46728500000', r: '0xbb50bf8b5c9c56a8b515110b42c4013f4e99cf9fcf6874c32e881554562265fa', s: '0x13a1539b789d0364d1e82e7587aad4adb894f4f3320d3517bd90bb08394d4264', v: 55, @@ -1341,8 +1296,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000065201d67a3d734dcba88134f442460120acf1aea730e35eb847d6cc837326b7e0016d98c7feca2b063d5757971dfef3cbb6c8467dfe0f94a26c810dc89fb292b00', transactions: [ { - hash: - '0x6e179db35f6e08ffc493d08d7364dbba784a609a81276aacfbdd629761d0fb43', + hash: '0x6e179db35f6e08ffc493d08d7364dbba784a609a81276aacfbdd629761d0fb43', blockHash: '0x58c3b2dfb23a1d998479e33ed3e8401e64c74a9f505dcdaa7316424185d6c6e0', blockNumber: 73712, @@ -1378,8 +1332,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000640d42655e8f1bc7096ce91157cffa5bbe4fee6fca2a3d18c82861c18e88145072632b5f1ab7e2b2f9294bea835988150830c6835d030896bea737289c23bf4200', transactions: [ { - hash: - '0x43bed1b2a695256d9dcf104fed0d03146a621ebe6f6919f62ef81868d06eff43', + hash: '0x43bed1b2a695256d9dcf104fed0d03146a621ebe6f6919f62ef81868d06eff43', blockHash: '0x2a3943363fd6e829527f8132cbb13a7db0bac0344da7332725739d0e307ec49d', blockNumber: 73713, @@ -1415,8 +1368,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000fde45f5b2b5b26284d22d4139de76a0d466023dffbd35185ff30d7f2b29571e6459d0e93ebdff329464f506cc4f1870739e589535a46656b26eda76feec1d34f01', transactions: [ { - hash: - '0x7f0fa947dd28a11a92dcf7f94d3e801251b716b0a12583cab5a1707dcf6723bf', + hash: '0x7f0fa947dd28a11a92dcf7f94d3e801251b716b0a12583cab5a1707dcf6723bf', blockHash: '0x34fa58996545a34b46d3cc37e6214a7d1205ec82dfec1fa503078fcad9e7576d', blockNumber: 73714, @@ -1452,8 +1404,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004ba907caed45041546074a0b77b520901eade631b71ba6bb97248fbf2123e50d47345f731519eaaa694bd7c47b64803c35b48c9f78841f06fa1d44f2d1079e3201', transactions: [ { - hash: - '0xb9c76dc22b2d60d9e91203c62d865f12272f616b3a00ea2a8019f68988bfb6d6', + hash: '0xb9c76dc22b2d60d9e91203c62d865f12272f616b3a00ea2a8019f68988bfb6d6', blockHash: '0xa2b1bbdbb5226c8e138e74a053ba9f4b78b116570fa114e4c1f1d6d41bb2a8ee', blockNumber: 73715, @@ -1465,8 +1416,7 @@ export const blocksOnL2 = [ to: '0x4200000000000000000000000000000000000007', value: { type: 'BigNumber', hex: '0x00' }, nonce: 3442, - data: - '0xcbd4ece90000000000000000000000004d7186818dabfe88bd80421656bbd07dffc979cc000000000000000000000000045e507925d2e05d114534d0810a1abd94aca8d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000d720000000000000000000000000000000000000000000000000000000000000044130a75fe0000000000000000000000001bad6fd2f9ea190bed0b593902cd111b67adfe94000000000000000000000000000000000000000000000004db7325476300000000000000000000000000000000000000000000000000000000000000', + data: '0xcbd4ece90000000000000000000000004d7186818dabfe88bd80421656bbd07dffc979cc000000000000000000000000045e507925d2e05d114534d0810a1abd94aca8d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000d720000000000000000000000000000000000000000000000000000000000000044130a75fe0000000000000000000000001bad6fd2f9ea190bed0b593902cd111b67adfe94000000000000000000000000000000000000000000000004db7325476300000000000000000000000000000000000000000000000000000000000000', r: '0x0000000000000000000000000000000000000000000000000000000000000000', s: '0x0000000000000000000000000000000000000000000000000000000000000000', v: 0, @@ -1490,8 +1440,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000d5f2b584166e5a111acd322545afe7bb346ae24fa1a957f880500db9a2f2123d2104bbb9550f807b27b8462822dd276876c1bdd429f77b339dd913cd843aecdf01', transactions: [ { - hash: - '0x6db447ac520a6b1e8305edc678b353df11743a74653f7349bb6cf1134e262f1a', + hash: '0x6db447ac520a6b1e8305edc678b353df11743a74653f7349bb6cf1134e262f1a', blockHash: '0xebe6c3ec09213f56ea1b1e0b150479345c86ad46084309ff7ee6f3671e29bded', blockNumber: 73716, @@ -1503,8 +1452,7 @@ export const blocksOnL2 = [ to: '0x4200000000000000000000000000000000000007', value: { type: 'BigNumber', hex: '0x00' }, nonce: 3443, - data: - '0xcbd4ece90000000000000000000000004d7186818dabfe88bd80421656bbd07dffc979cc000000000000000000000000045e507925d2e05d114534d0810a1abd94aca8d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000d730000000000000000000000000000000000000000000000000000000000000044130a75fe0000000000000000000000003f47a66ada01491c3d364599e5bcbf80a1a67092000000000000000000000000000000000000000000000003a34f4a1f69328ac800000000000000000000000000000000000000000000000000000000', + data: '0xcbd4ece90000000000000000000000004d7186818dabfe88bd80421656bbd07dffc979cc000000000000000000000000045e507925d2e05d114534d0810a1abd94aca8d600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000d730000000000000000000000000000000000000000000000000000000000000044130a75fe0000000000000000000000003f47a66ada01491c3d364599e5bcbf80a1a67092000000000000000000000000000000000000000000000003a34f4a1f69328ac800000000000000000000000000000000000000000000000000000000', r: '0x0000000000000000000000000000000000000000000000000000000000000000', s: '0x0000000000000000000000000000000000000000000000000000000000000000', v: 0, @@ -1528,8 +1476,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b7c7e7a53c0d47925d1cd30830d01096bfea5a333b911fd95ea31c973bfd36721577705e458fbe4b009500d9e66474238fda30d0d363b415229c562a18368baa01', transactions: [ { - hash: - '0xd4bb5ab5c03c455d217c959cfbbf4b7495a6e2a15567fd0e92650dd361311ba0', + hash: '0xd4bb5ab5c03c455d217c959cfbbf4b7495a6e2a15567fd0e92650dd361311ba0', blockHash: '0xb18e22e51fda7c18216817500cc7a1a777784ba87bf7df90e118a77690ddcc5b', blockNumber: 73717, @@ -1565,8 +1512,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000005b0c3546d0451b3d485dea178d9e5a62cc34493b0dc742700c4cb0baaf68cf2d41b09378085c49aa20e67d0cf2c34620220c508019e1f68167c7c6893ee3bafb01', transactions: [ { - hash: - '0xf4f068c4f26c93d0f6d73d54ec90c11c55a9af2de84ed72ede502019077a3c1d', + hash: '0xf4f068c4f26c93d0f6d73d54ec90c11c55a9af2de84ed72ede502019077a3c1d', blockHash: '0x377cbb36e77016cb86d962a22fb4f7ea4aafe385ae49ea565fd723fd1e41a9a9', blockNumber: 73718, @@ -1602,8 +1548,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000c7985b56c45c50981750dae0cb1b2784089a863fd58e96069e1b7bc48e53dcea2e3a2ef15bfcb1b0552b90826871133dd81ac9b63e4f1e257ff84935c1f8ff5101', transactions: [ { - hash: - '0xc536bbb92f4a187072ccd06a0af2fa6bb9a4b8a65be0aa98c1260ff2dc866c7d', + hash: '0xc536bbb92f4a187072ccd06a0af2fa6bb9a4b8a65be0aa98c1260ff2dc866c7d', blockHash: '0x79daae6ce632ffb5b5c60520c3de8d7e6ae289b15040e3559ebba6a1dd604528', blockNumber: 73719, @@ -1639,8 +1584,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004d5418918a3e2930407e0c414dd3c75539e69001a57da0526e41138a9dbd128f65097210b10067b3b282bd2a21a9a0c6db356473ee3164099c67b0efe5a4c94800', transactions: [ { - hash: - '0x607feeb32b8d06037991a716ebf04bcac9d27e828c33824f65051a64b73334ab', + hash: '0x607feeb32b8d06037991a716ebf04bcac9d27e828c33824f65051a64b73334ab', blockHash: '0x3150947423724386e3f52d41a8615498d32bdb43c0dc7a636feeed5bd3831b06', blockNumber: 73720, @@ -1676,8 +1620,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000602fcbbc248c27ba5ed063a4355084f2d0e619a496a951c3082b84e5799347f80514c129ee253b18c07ebecad5f920dfa785e215f4c561dd57e02d0d187d41e501', transactions: [ { - hash: - '0xbd166f55622a72b064394581db2eed56d44068e3416ecd98d24d3c6062429934', + hash: '0xbd166f55622a72b064394581db2eed56d44068e3416ecd98d24d3c6062429934', blockHash: '0xce04648c39c258037b1352b07970b705c0b3b8a2937d4174fa2fb9c28867fcdd', blockNumber: 73721, @@ -1713,8 +1656,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b0cd726b8d6c7b79a0d7876711641d7e92fbaef81f55712c3bca5d90ca2866a9077d22c3fd1bb32efaf6395b493a1be12076e0642dac6aae58844b4283adb47400', transactions: [ { - hash: - '0xe79feea93c29985f96a75bde3d9d7872bf4b6d2cff5fa6d8e03c899cff23c266', + hash: '0xe79feea93c29985f96a75bde3d9d7872bf4b6d2cff5fa6d8e03c899cff23c266', blockHash: '0x1d301f1409c2475c7fa9b4dcecbba7b57258005afb713dc55dc8a18f61513a72', blockNumber: 73722, @@ -1726,8 +1668,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 9, - data: - '0x8a29001400000000000000000000000000000000000000000000001043561a8829300000', + data: '0x8a29001400000000000000000000000000000000000000000000001043561a8829300000', r: '0xd22b7b46b935bbe378ac97d58bbe84f8b57d9b240f56e9335ed8134214a480c0', s: '0x32b15645d64f624cd707628971ece2c06366fd2bbff50cbb40891fe1cf0de225', v: 56, @@ -1751,8 +1692,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f04256430bda72cd13416c6b59a36f0739424aada0dc2af95865bccf0cf6101a4e530383e4c82c26bc7104d8418c93e7d58e8d2aea324238959a1517145a5b7a00', transactions: [ { - hash: - '0xee8ecbea3f0cbcde091d2444c3a7f2be3a4953166db28bdabbcbc214e6a4c6fc', + hash: '0xee8ecbea3f0cbcde091d2444c3a7f2be3a4953166db28bdabbcbc214e6a4c6fc', blockHash: '0x91e6734b93aa9200086b392da19180e8f703281c3077c47759755dac1c594111', blockNumber: 73723, @@ -1764,8 +1704,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 1, - data: - '0x295da87d0000000000000000000000000000000000000000000000008ac7230489e80000', + data: '0x295da87d0000000000000000000000000000000000000000000000008ac7230489e80000', r: '0xf3ecf58a1113fb3387131db1ea3feeb9e2f46e3e48ee1755a1171d3ebcde8ce1', s: '0x2d35af50f607a050a62b614074a70d3101211de5f0e40bccdbb49a7206d049ad', v: 55, @@ -1789,8 +1728,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000a15538621c229986912ac936d4db82331566662b6d442cc44adfbcb50acc748e65d7c476cace25e57056dcdaa87888582cd66aa0181c2bfef2578ca5aaa044f500', transactions: [ { - hash: - '0x1702aae10ed280b72e528651aac9731ec376842a611b7bb1055f9486c49e35ea', + hash: '0x1702aae10ed280b72e528651aac9731ec376842a611b7bb1055f9486c49e35ea', blockHash: '0x5ddc55bba6c9b6e0b58f4324cf983d8a70ba5c91491476b105c174c7ead947d6', blockNumber: 73724, @@ -1826,8 +1764,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f98305a7da25a39554451bf279609145dc06d8c49cffe72d09d15414f6d3d6ce663dad7eafa38370004ecf7acceaf1d302490c031d5ebcdf19360bb8f13e983800', transactions: [ { - hash: - '0xc526d8dfeb91d9efdf669f2091dd77a6e5148dea92eb85594e0897504ecca0ae', + hash: '0xc526d8dfeb91d9efdf669f2091dd77a6e5148dea92eb85594e0897504ecca0ae', blockHash: '0x7bbfa1ea119ce04e145c4446f7e57a746c411b144dc8cc994ad35c45de2f153e', blockNumber: 73725, @@ -1863,8 +1800,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000fa81e102f397e2e4815054a268335d04ea3f0d643005b747f00da70a2533f2365396415b1c8488f5442766202e2ed6792051b1acae88d0b9f7dfc6bc529e56c501', transactions: [ { - hash: - '0xc178ee56c0e60c6e2d24f3b68e38bf690beb1f6a66ea311c1cb940373d326ead', + hash: '0xc178ee56c0e60c6e2d24f3b68e38bf690beb1f6a66ea311c1cb940373d326ead', blockHash: '0x13b38d822e5593b0e9d79e8d23b092da14be6ad9a818eb0a361c7a924d307eb4', blockNumber: 73726, @@ -1900,8 +1836,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f2f538fde149d325c55e14153b3ce41eb615b334600e4d19d8bca7887de7c1af0749a6b166d68c4e2216581b6f8211e3e0211ebfaa45ee300e5cbb256b5c68ff01', transactions: [ { - hash: - '0x8772362b78063f5640c9e11b4236aa62bc5c80bfbae0acc0efa47c25cf12ca5e', + hash: '0x8772362b78063f5640c9e11b4236aa62bc5c80bfbae0acc0efa47c25cf12ca5e', blockHash: '0xdb3389a2eff49149d217563f1c9370aab62dbacc457bd00820e854ff7ff091a3', blockNumber: 73727, @@ -1937,8 +1872,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000805426b5c8d4d7556127d83eef0b8afede69fcc1ce70df6ad901170168e91a6a2d1e637306c876936ea46683a7a19f4734f43ae1c5bf95932252132ed6e72af500', transactions: [ { - hash: - '0x89ca4ce5add5c77e21ac589e9c0d1e482d170b403a78f1caa7158dfb15d800ee', + hash: '0x89ca4ce5add5c77e21ac589e9c0d1e482d170b403a78f1caa7158dfb15d800ee', blockHash: '0xb88086c8f43a500978a69090a1853dd060e1c801125355f6f120ac0b70aba454', blockNumber: 73728, @@ -1950,8 +1884,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 16, - data: - '0x8a29001400000000000000000000000000000000000000000000000340aad21b3b700000', + data: '0x8a29001400000000000000000000000000000000000000000000000340aad21b3b700000', r: '0x244318f4f681328908180b145ca3467846f5cdc40fe6e9ada54f2e7dba843ee4', s: '0x14b22618c62cd57adbbc86c5ac079bc69f7e45e87108c53f22ff619501a773be', v: 55, @@ -1975,8 +1908,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b5b1e27232d59e4e3a993743431ed9d75f5c62957b2071cb99a7c67e0beb4ac07c07ee88291b370b172b6895b6ca2be245dda5b4843103fc0c91ff68abc9965a01', transactions: [ { - hash: - '0x0d137bc312d52fb1fbde5c3c63bad9910cef9f8b213be54f34be5bc37a03e038', + hash: '0x0d137bc312d52fb1fbde5c3c63bad9910cef9f8b213be54f34be5bc37a03e038', blockHash: '0x44ebe9f26e3f73d461587e22ce6c25806e60d65e8d6329c467a7b6f40dce9fdf', blockNumber: 73729, @@ -2012,8 +1944,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004d58f105bf00ed60606aec17121a7fbede5fd4895e8b37596527962f146e8ecf0cee7689cf369231d4cdfa8cad0a4bb08f98fad617b3b1c4c8c040323d163e9600', transactions: [ { - hash: - '0xb4de489d1853b74e57c8bd20fd9045ffeee8d203515322103e54e083e145d2d5', + hash: '0xb4de489d1853b74e57c8bd20fd9045ffeee8d203515322103e54e083e145d2d5', blockHash: '0xcee89db6fcf01f3a45f49c6019ad4b9a92241ff6c09c7b17c84f06fe3b46aee4', blockNumber: 73730, @@ -2049,8 +1980,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000002c3035fe439d0e867578fe699b50f7bdf0564da9b21ccdbee6250aa647f56c37d954184caad10a317dc08454f7c0277451bb4310ca2a294caf4df3f47c0d94300', transactions: [ { - hash: - '0x614e75cb10c7377074426b963c433462c90277337a7fe5c603cd26f18c61c78c', + hash: '0x614e75cb10c7377074426b963c433462c90277337a7fe5c603cd26f18c61c78c', blockHash: '0x62b02811b13bd57822df19a491d6511691b4acfbcc58a1ddc5790b017fae3650', blockNumber: 73731, @@ -2086,8 +2016,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004bb8acb632e99e77831797fc13fd1d1159d242825e0725eed501c9a7e6d9eae917695d14c5f2f454d2b4caa16fc7dd0e812666b66184a9ed1164bd86d79448ea01', transactions: [ { - hash: - '0x78f5ec8b7dfe3e57571bc3dbf668d1ad271014e625a04f6b17228b1aad6e66ae', + hash: '0x78f5ec8b7dfe3e57571bc3dbf668d1ad271014e625a04f6b17228b1aad6e66ae', blockHash: '0x6824eb9bfea1b397dca6572dca9cb9580d72ae4620cb54b4f3bba81c15239903', blockNumber: 73732, @@ -2123,8 +2052,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000aff2aec730ceb8f668a9327778a5f499f23a82258e4ba92d56b3b7b372186c924ad7f4085ddaf4c7ae7b745e5e40e4f1fdb1962ad04a70fddb6a80a2292c55b100', transactions: [ { - hash: - '0x8c7ea643f208439df533d76b2393a8c686da4bd450d94a15887bbb0e37f50fce', + hash: '0x8c7ea643f208439df533d76b2393a8c686da4bd450d94a15887bbb0e37f50fce', blockHash: '0x825aa97c2f8ef147b2377cbfa5d6ac225e14ce8f0f848ff23450ffdaa42be35e', blockNumber: 73733, @@ -2160,8 +2088,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000d4f700553051408f99d4cb0d0ab6a4401179252be594a8edaa49fef8e50b42957996054339f452435ce0193b7f30f4fc99562c1161582b6ee96e822a86cee89f01', transactions: [ { - hash: - '0x5f2fea4c6955f3b29e76f11904c796b9091052a57335b08d8424b6849d1da93e', + hash: '0x5f2fea4c6955f3b29e76f11904c796b9091052a57335b08d8424b6849d1da93e', blockHash: '0xd15583e3fe28d4abdb1160cd31a76197a32465a69841e8cd862382929fd8e48f', blockNumber: 73734, @@ -2197,8 +2124,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f18d2a179919935aa90fa5d00623ba6fdf93d30b62dd177423dd5585c29cd9e77e5045696c292f49175533f6d268d5bb75cafa3032eaf66238ede53934b9578b01', transactions: [ { - hash: - '0xdf3d1d9aceaa4099061f0ab4f01d16c77992308b00880f7185f072962e2dbd71', + hash: '0xdf3d1d9aceaa4099061f0ab4f01d16c77992308b00880f7185f072962e2dbd71', blockHash: '0x54338dba2c8d1e9788c4217ed3bee8fd56a4f5d121a04ad70bbd03de72808d6f', blockNumber: 73735, @@ -2234,8 +2160,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000cbadd9aec19116028d4c0a71c77fdabe9990fd5f8e89692baadfc56e96fe694630bfc624dcd9883999860b67a4d5d6ebf17d2f0803aec1805a7a5d603be5120000', transactions: [ { - hash: - '0xf55cb32c70dc137f72c50665d743530714ae93af7ea19d38bc76a13795c538a6', + hash: '0xf55cb32c70dc137f72c50665d743530714ae93af7ea19d38bc76a13795c538a6', blockHash: '0x76eb332116e8c76f2e97d24b1e131fba5ae347d67d4a3d26dd87bee387e628e6', blockNumber: 73736, @@ -2247,8 +2172,7 @@ export const blocksOnL2 = [ to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64', value: { type: 'BigNumber', hex: '0x00' }, nonce: 24262, - data: - '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e4e9c0000000000000000000000000000000000000000000000000000000000000001534e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000013f1070b03f018000', + data: '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e4e9c0000000000000000000000000000000000000000000000000000000000000001534e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000013f1070b03f018000', r: '0xff75b419c212ab48019e879247e2aad3a917dc6000e4c0a788af865637b2d8ac', s: '0x422cd67f43ce27c0d0d46c32cdc80409a74029d00c41ab9579adf760671cfd37', v: 55, @@ -2272,8 +2196,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004c70e7772fe07cc6cc5f2790d3460ffd344f0cd508fe8b8a04ccc5b0a39315660011f30f82ba5e4e041ee07d6d0d7d9e705b1e1e12146295d852b196445350f700', transactions: [ { - hash: - '0x685258be6eaba9abe04b6389604ffc457806d6ef070e7ba0ef5ce3dc9449b5a2', + hash: '0x685258be6eaba9abe04b6389604ffc457806d6ef070e7ba0ef5ce3dc9449b5a2', blockHash: '0x726971ea88f6a1aec60945d348d55f72b11df6032886cb3c40332abf98eda77a', blockNumber: 73737, @@ -2309,8 +2232,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000feb88749013619474c7a36fc19b9b3a784e8c23574a7d04d80987bca904d8e8c1fdb9c4a0751770e3ead12c962450cf9a31b4d36ea5e119aec3f7e00221bc71601', transactions: [ { - hash: - '0xda0f9d8dd64967d1d4927317f202c2f0bc47071e301d3bfb7e9f312ea6ac094d', + hash: '0xda0f9d8dd64967d1d4927317f202c2f0bc47071e301d3bfb7e9f312ea6ac094d', blockHash: '0x9cf50053dde104e0b38f22a41c687961f55d2085bcd7fe4df86255b4883f833c', blockNumber: 73738, @@ -2346,8 +2268,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004d4a4e2828626ef6ed2c4f7a712117ada5e8015b64570b33c42e9812917014b84016f7c2b7f917c692373ff933f0c613d5d8d1dbdbd95d22d8f8a1072a1a88b601', transactions: [ { - hash: - '0x6149f5162096eb45e009877a26235ec4e7c2dfc3b2d12c94802761605f70246b', + hash: '0x6149f5162096eb45e009877a26235ec4e7c2dfc3b2d12c94802761605f70246b', blockHash: '0x97b300d997878f4ae361840f7ac1c4b18d979a6640390b9e531f3afc4fe4a658', blockNumber: 73739, @@ -2383,8 +2304,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000004eb603b61fe64b9b99a187cd9d2e94c14169cc44e308dbabd2f21b7c9bb29f6e3d553fbd047ff96df2d7e817eaebd0a4f5fcfb9bc3f96ed3c66c5623e5fa664c00', transactions: [ { - hash: - '0x6729da933f4e27a4238094c866ec5aa7d9b1408e18dd9c31fd213b543a0b3394', + hash: '0x6729da933f4e27a4238094c866ec5aa7d9b1408e18dd9c31fd213b543a0b3394', blockHash: '0x800d515ef6a11d981f6e5ce34fd579ecbac6070b1fdb0b264f4d01314804aab3', blockNumber: 73740, @@ -2396,8 +2316,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 21, - data: - '0x8a2900140000000000000000000000000000000000000000000000001bc16d674ec80000', + data: '0x8a2900140000000000000000000000000000000000000000000000001bc16d674ec80000', r: '0xff3ecc7ecf5a169c2b1c4360c63dcf9a8d786d804f400f1bd4bb0fcb9401644f', s: '0x618ca9780aae23bab8a688cf6bf40258e0c44b8089e6bf0989d5aafe9236d3fa', v: 55, @@ -2421,8 +2340,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000c67f33fdf8f59ac161eaec76d5395110270588c1b1f559dfe5dab5cdef7ea86631abde0105a05aafabb71e369f9c9b23bbe169378eeb6e307b8001e8e6ad643600', transactions: [ { - hash: - '0xce2138589a9a584b9a091d87c02a1df761facb0d228c3efca59bcec0c727cbe2', + hash: '0xce2138589a9a584b9a091d87c02a1df761facb0d228c3efca59bcec0c727cbe2', blockHash: '0xb0316aa744becc1da9b8611aeeca30e21d3edbb894979a101830498b92d02979', blockNumber: 73741, @@ -2458,8 +2376,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000006c793440d797debc46842efd1f8cb018805f670246c127a37aaffbb62f4d9e3446e165df34685f680013fd9b7fdf55adae4957512d0b463c418816600694699b00', transactions: [ { - hash: - '0xd5862a1c5e9f5ff20717a9b09f32651121570a3b18b42575d4169a846df7d02a', + hash: '0xd5862a1c5e9f5ff20717a9b09f32651121570a3b18b42575d4169a846df7d02a', blockHash: '0x760673ecd216aa1dc9d56d963bdda9e5c99f09a0fdc00466f860baed3ad4aa65', blockNumber: 73742, @@ -2495,8 +2412,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000008b8d9e0e499a1ef986610cfd24584eed7a0cdf18e66f299eef9dfd93f5b5048a56add2486efabadc856bd4e761d1d4d905614ba30d4f5f7665b7872e4bc3446d00', transactions: [ { - hash: - '0x72362aa62a6db1ab6c5c50c8129f924b55618a0acc22a60a769599d3066a2804', + hash: '0x72362aa62a6db1ab6c5c50c8129f924b55618a0acc22a60a769599d3066a2804', blockHash: '0xed201c08d3aa84855cebf44e6c6c0e259089d8a61d47af10e4ed492c33473f6c', blockNumber: 73743, @@ -2532,8 +2448,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000007d278a52ea558f46021e498c2d2e8c52cc3f9392c138682182afe9e76f49034c211bc154b2388a3b93227a29169378baf230c04b11878adfcc04909e3bf5187000', transactions: [ { - hash: - '0x23f8cc33935882afc5c3ed8f0696113f1d98a2db8021b4221a872d1bdc7473bb', + hash: '0x23f8cc33935882afc5c3ed8f0696113f1d98a2db8021b4221a872d1bdc7473bb', blockHash: '0xd1e91f548008901737e67cd1ed4e550a6a8437dcae5ebe76d43f197d3ae915b6', blockNumber: 73744, @@ -2545,8 +2460,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 4, - data: - '0x8a290014000000000000000000000000000000000000000000000001158e460913d00000', + data: '0x8a290014000000000000000000000000000000000000000000000001158e460913d00000', r: '0xf4cc4215e75d412821ef74ff9c20918c421227217f7c135f9b56a5bab8411f70', s: '0x61a8b99a11ea37c5346f62e70521f60ed7e664fb4b0f82e4c6a1d3e62c33607c', v: 55, @@ -2570,8 +2484,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000000c1d5aa1ba8783070a9ad070e566570e8c285e20ce31b74f2f7ddd0a8a8ddda807f451c7a09b4228d47bf1ac20d62d99b4fa84cad6c0243c99687bd7da88659800', transactions: [ { - hash: - '0xb1c8be35624e885828d73d92aaf4225ae70cd3edf331f3abefbfaed823997dfe', + hash: '0xb1c8be35624e885828d73d92aaf4225ae70cd3edf331f3abefbfaed823997dfe', blockHash: '0x81b471293ba3dc62adc4fbca8de9eb3e059a4d59fe4c56170b21355b21a5063c', blockNumber: 73745, @@ -2607,8 +2520,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000168540e1953bf45d618573c73774a3060b5b97e155de02c8a54da7a40c59c70c1eef1cac26b7d5fc7ae50767f9fcafbbd0664245fae39d98add26d8b12cc893b00', transactions: [ { - hash: - '0xa9c363ded7714b2872399c22a072d4e442f91c3b9e1b6776e053b23291c833a9', + hash: '0xa9c363ded7714b2872399c22a072d4e442f91c3b9e1b6776e053b23291c833a9', blockHash: '0x4f775841084711ede72417c0ff52946bcaefa867e23b144247f3cddca2105f07', blockNumber: 73746, @@ -2644,8 +2556,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b18f65cf7082c14ce64886138e24ad1a9641fb370abb0e63531cf3c87b12fb763748a1ec96111b3963cd779eb0ce55aa1de0a5511fafc3d734d99436c942360100', transactions: [ { - hash: - '0x3e6498d7c77ce2f26d4fa4f0e921cc6ba1f9ce648b14598ca9abaff31974347a', + hash: '0x3e6498d7c77ce2f26d4fa4f0e921cc6ba1f9ce648b14598ca9abaff31974347a', blockHash: '0xf3e57f1f508438f3734e5acce3b6bad105f4528e47eebd2731d812089cb9f4be', blockNumber: 73747, @@ -2681,8 +2592,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000e77503f2a6506b9b96236570165d4ce6ee79227d09a3aa101349818ffd2839086f91d514a9dd271225092e3ab6d1a40c89a8e50cafcd78255bec047e049610ad01', transactions: [ { - hash: - '0x62e1f877a02dffb567152392ce9cc7c559106b5c63672d39d1e919a428e9ae09', + hash: '0x62e1f877a02dffb567152392ce9cc7c559106b5c63672d39d1e919a428e9ae09', blockHash: '0x9b61c65c8c1b83cee519edce1c2a768c46348a7267117a31cf7db288a074e0d6', blockNumber: 73748, @@ -2718,8 +2628,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000969ed1a7bcbe8d518e9412972e71336b096061dde90664742603062bb660e3833540deafb5f6821436de52357db723ca49d6cf46b36b0fa4ca0f839a2388621d01', transactions: [ { - hash: - '0x84f54a77602b26dcf9482f233218ce87cbe9cc8bc751d2b40562033d88d46744', + hash: '0x84f54a77602b26dcf9482f233218ce87cbe9cc8bc751d2b40562033d88d46744', blockHash: '0x83cb46b63cbdb7eed4f4c076b5bbdaa290810cad09f6952ce35fb13c3f822497', blockNumber: 73749, @@ -2755,8 +2664,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000644556575ab3edb43ca79c7217a54721316207c71b47cfe1d5ccd7607db4cbf63ca535f5c418a466b4b6bd6cac614450a5938810256da7db25d8cd9b69bf1e4201', transactions: [ { - hash: - '0xd78e9c80ba15f21721f6698fcc2720c239c5109698435b3e70a534a196c6a730', + hash: '0xd78e9c80ba15f21721f6698fcc2720c239c5109698435b3e70a534a196c6a730', blockHash: '0x7f0379fc95028b254e4f583087f9ebcb97bd0e1819a3bef536e848819d8070a8', blockNumber: 73750, @@ -2792,8 +2700,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000788f7a2575066bf6ce6c58ba98aee074bf3debedd362dc38f269bc966b608ffc72bc832f4c009615a718682f487e23cfe9adaaeb86528e0dddcfe00d23c4b6d900', transactions: [ { - hash: - '0x0e5d27c8bde5e1f198a962a816161bff440f493839dd4bc8b88eac8c41e9db7d', + hash: '0x0e5d27c8bde5e1f198a962a816161bff440f493839dd4bc8b88eac8c41e9db7d', blockHash: '0x5b7beae947c77edf28ba5da443ee1b4406a11071d7f4d17e4f12cfd44e34545e', blockNumber: 73751, @@ -2829,8 +2736,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000000abc3b479b8ef6034747e3e9c080dd7e7017633298e3cb63e312db9a01164394058188a4ba70ff4985a96ea29ef3ca83816f8d2453793ba01d3b73af0f49f3ab01', transactions: [ { - hash: - '0x3327e4b8e5f8683aa9c4ed3193b52ec05f3e995f35fab89875692a50d55d012e', + hash: '0x3327e4b8e5f8683aa9c4ed3193b52ec05f3e995f35fab89875692a50d55d012e', blockHash: '0x18a02230f1221684dde943ce28a505abef796d282aad5d97511511bcfb5a2f0b', blockNumber: 73752, @@ -2866,8 +2772,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000678512863eadff1d5c9e1e0f37987d819932f1a8937f9b1ed8c85bc8214be2cf299b7a5f2164d74a73402032e1f06d47ba183c93e01e48c4911e27e1438815b300', transactions: [ { - hash: - '0xe3f17f5e4a7a6b7e8d0610967b0c7ab101ca504c6d499730d8036d5318478ee4', + hash: '0xe3f17f5e4a7a6b7e8d0610967b0c7ab101ca504c6d499730d8036d5318478ee4', blockHash: '0x7df6dc469a4f727c6ee199981d3c4678d1dbff6415e613a8aa0f79db440ff15d', blockNumber: 73753, @@ -2903,8 +2808,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000cdea0b26c1d783649c40ca645a2b656a2b8f21c593f06a5f7a5f3cb482d0305e1abc88cbe593dcedb2e5a6daa95482cb0976b65f8040dafb31e93d80f0b4b32500', transactions: [ { - hash: - '0x2c9599252456882c97aad3ec78d16c3695b00de2d1f8605a7d3cee63fbdbd116', + hash: '0x2c9599252456882c97aad3ec78d16c3695b00de2d1f8605a7d3cee63fbdbd116', blockHash: '0x42adb46d26b5b3c8fc3c87e851df3d8694ab987957d3ce7c3d215bedb988eb09', blockNumber: 73754, @@ -2940,8 +2844,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000059627ac3e767798e395b1921ee97f95890e40771868a4df8896d8eae4d0afefe3848ea1c91ea942d019a28077144842cbe8609cfa7fa38d8fe421f65af3ad36200', transactions: [ { - hash: - '0x3f20c0ea4ebc02cfb8b842228e39a15365a03834b27765f7ec45852daf4edaa4', + hash: '0x3f20c0ea4ebc02cfb8b842228e39a15365a03834b27765f7ec45852daf4edaa4', blockHash: '0x9517b996555af87a10a2bacc424613de7bbf39c408233adf3f2d93383d63b299', blockNumber: 73755, @@ -2977,8 +2880,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000d355d96c253fdf234b06688e6ed068f36a596319ca10bf3b2d92b42bebb8c97b02418eb6bf4e14ef7540fc7170aa71531f773675952c140c60fb92d5d8116f4300', transactions: [ { - hash: - '0x116c88fa7caf55eae4b5af2d590830d0f7f317cfa8450b2babc96be9a9e7c4ac', + hash: '0x116c88fa7caf55eae4b5af2d590830d0f7f317cfa8450b2babc96be9a9e7c4ac', blockHash: '0x3282de9f8b23ab38059c076c3cd83080474186a81d738b9bed8464a3b4d64a0e', blockNumber: 73756, @@ -3014,8 +2916,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000002e6dc07438bb2f77e503a14fe549ff8cc0d94bf89b6701cdf876eacb1470c25542ba4eb828f3264ff056079aea99f7cadf7853436cca22f8ec643edd013e7e1b00', transactions: [ { - hash: - '0x9526c50f66224b829682644c0f8a59478191c65e798fbb62a9ecebf5d939ca35', + hash: '0x9526c50f66224b829682644c0f8a59478191c65e798fbb62a9ecebf5d939ca35', blockHash: '0x8bc4671779b6b858d940865a6e777d8c0d9978ef1816aee3c351702ed2ff528b', blockNumber: 73757, @@ -3027,8 +2928,7 @@ export const blocksOnL2 = [ to: '0x631E93A0fb06B5eC6d52c0A2D89a3f9672d6Ba64', value: { type: 'BigNumber', hex: '0x00' }, nonce: 24263, - data: - '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e508c0000000000000000000000000000000000000000000000000000000000000001534e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000013cf0dfffc45f0000', + data: '0xbfa005ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000603e508c0000000000000000000000000000000000000000000000000000000000000001534e58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000013cf0dfffc45f0000', r: '0x51884bdaf68fe6c64943a5f3160b5fcd7ef9140463937fc8d1ecdb3c916d7096', s: '0x354237eb3c63430116601c5b887dc44a4d4bce5639be1fa36b91243bb76e2b35', v: 56, @@ -3052,8 +2952,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000081c45a13d3b73f7a60e41c5cd680d37d71befd6a88cb65a4789520748e2afb473bf24ac640d5cea3d683bb665630442f2818bc987843dea8b956384fe386dac701', transactions: [ { - hash: - '0x5bed4ece9a4fc43ebe0c6e641e800edf5657f3dcbf7b55e56f04ca67c38731cb', + hash: '0x5bed4ece9a4fc43ebe0c6e641e800edf5657f3dcbf7b55e56f04ca67c38731cb', blockHash: '0xe725ac1c3086b18cca9768dd997f61a4bf816118f11880e05060453fbd1d4a81', blockNumber: 73758, @@ -3089,8 +2988,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b805dc8eff8cb70d147bef8e9739a5951721b836008168b356c1ea7a4793d3101cc0c9aa99b07fede0681bb62295a8ac58bbde662a71d2360773813e080bf08000', transactions: [ { - hash: - '0x86395b81abae2233743b14fb907be12d45cdc6734402a8ded1a2a9b02318c325', + hash: '0x86395b81abae2233743b14fb907be12d45cdc6734402a8ded1a2a9b02318c325', blockHash: '0x5b239a385610753bec0d0f584fe712933810e1a834f606bf0384e45294a5569d', blockNumber: 73759, @@ -3126,8 +3024,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000ccff72b0b5d12d02ff8f9d38d1505ca150f03b93047cc8175166a9515684382a43d0375924aff8ee44816617de81be12e4fce2f067f3ec8a44c1c0d290117f8301', transactions: [ { - hash: - '0xa90eeddb2ee67d4702deaa0153630b602d0d758475b2cca43c63dcce5cc3310d', + hash: '0xa90eeddb2ee67d4702deaa0153630b602d0d758475b2cca43c63dcce5cc3310d', blockHash: '0xb7a443e1fb073fd0683b4eb129eefca0d881a632d8bbc3dcc60dfbcf9e1b7879', blockNumber: 73760, @@ -3163,8 +3060,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000283e47495d8866cce4ed7d45570ac856810b345af078e83cff4c3dc990f380076d44ee8bfd5ad054dd06840dab9b215be0d500eda7f370abd70f58636acb602400', transactions: [ { - hash: - '0x5d8931d0e12537db4d1923d56287f3129edb466f5685047baed6e2672bb81a3e', + hash: '0x5d8931d0e12537db4d1923d56287f3129edb466f5685047baed6e2672bb81a3e', blockHash: '0x24a0bfe2f6005e6b9b22f12bb8ff40c012f38498195c45c9ff1aeeb24a27972f', blockNumber: 73761, @@ -3200,8 +3096,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001729895c541fbb3216038267509d2870e747e003cb26c521fe3fc1014a2cd1c8611a659d537cf09b30895204e253dab24647e1fcf985f6b2a3a6385f66b378c201', transactions: [ { - hash: - '0x38a8e192c627493051a4a49979ae90b6dff0f44b794cbac875d483ddec253ff6', + hash: '0x38a8e192c627493051a4a49979ae90b6dff0f44b794cbac875d483ddec253ff6', blockHash: '0x3f7ed8e9f6a6321a1b18832b6eeb05fad80a71a5143b4df99b9826fa668d3793', blockNumber: 73762, @@ -3237,8 +3132,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000000c9da3a36278b55d06ae9f4c115c437d1ee5454e4957afb847b9b740da965181c63132504040a289e6c21114d397c83d49e3daf48f1fbf4ee4fa883fb1850c301', transactions: [ { - hash: - '0x8cd969fe38f6a66a265a87b5e546a1086db988aaa25407abec78b914fe0c45cb', + hash: '0x8cd969fe38f6a66a265a87b5e546a1086db988aaa25407abec78b914fe0c45cb', blockHash: '0xd58ca39be70dbb51e39ab0fdb09a88d14392ab10c384ebabd9457c1aa11ba8a6', blockNumber: 73763, @@ -3274,8 +3168,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000008d33905c7832b582de0021f67f375311f66e14c809595e1eab92b397879d484d4c020d3ea5c6fba1bee2ddb69d703c89e6213426c3b7d251c216af8e2fdfa76200', transactions: [ { - hash: - '0xf01f3d1fcc412409a8287fecd0063bcda183eddf725f0b201a6e0e93af8113fd', + hash: '0xf01f3d1fcc412409a8287fecd0063bcda183eddf725f0b201a6e0e93af8113fd', blockHash: '0xba6a9bbd71af4fff42cd02c5c475dcb1871e93568dea6d089585139b303cbd08', blockNumber: 73764, @@ -3311,8 +3204,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000671cbc1a81f52b32065c8fb6c2c4fd7f0755b2c38f592c95374a7b0e7d492d4f0773ae7a53a20bd3991c93ff30666c1221c89916c53059a0b1edd2298572b11701', transactions: [ { - hash: - '0x30298b5e28e0c8cdca88e2fe2a8c726c32e3776b15c45d1bf8e26a2e6f265d43', + hash: '0x30298b5e28e0c8cdca88e2fe2a8c726c32e3776b15c45d1bf8e26a2e6f265d43', blockHash: '0x46c75511a2eabaf360c14aed9a6dc648a5ebdedcf1c9e107259da966a14eeddd', blockNumber: 73765, @@ -3324,8 +3216,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 0, - data: - '0x8a29001400000000000000000000000000000000000000000000000b38b3bb4459dc0000', + data: '0x8a29001400000000000000000000000000000000000000000000000b38b3bb4459dc0000', r: '0x9cbadc64fb19e3e912ffc2492bf42130d21fb67e4654c11551f3c3dd28e4ded9', s: '0x51eae21b5b7f98a7f1e27fdf30fce409363823c97ba03643cbd7e65b964432a9', v: 55, @@ -3349,8 +3240,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001097b0413e26b69194da4152b3e1fcd7548e54c2f00fb37b23c1799191590ff5682b74ffb4a69ee838b437a5d5d197a4724949ea6b74af02b72c9aa29cd8677300', transactions: [ { - hash: - '0x1e36c58c83c69f38627b3309bf8e823a44acf8195bf69e313ebde2fd7282aefd', + hash: '0x1e36c58c83c69f38627b3309bf8e823a44acf8195bf69e313ebde2fd7282aefd', blockHash: '0xa8a933181a120599ac9ba3a79aac3566aee9e17a606ad5af5a07d26286d5134c', blockNumber: 73766, @@ -3386,8 +3276,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000e8b64352e223744caf7dfb80b1f40d58e676522a3187dc8fab5504d586f8b99f1c40e71eb4e9f4d8e9b4495f9ed369a1f5fcb14aa64d8715bf75e3d2435e525f01', transactions: [ { - hash: - '0x2e5deedc7e720df0c283d0ff8677ac17f71824870560fe9405f7ba08d2440c15', + hash: '0x2e5deedc7e720df0c283d0ff8677ac17f71824870560fe9405f7ba08d2440c15', blockHash: '0xe620fc1dd39513f201e8471532923b7cd32cb0049eb27ae771c368b362d21339', blockNumber: 73767, @@ -3423,8 +3312,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000003677866845e00a8d58cc62e615dc84aeae3e1682f8222a92b3be38a42b58af14409d737e300dee3431ffec576b6ff2bb78ba73624577f1b15332a5465b78270801', transactions: [ { - hash: - '0x46dfbaf4d0721d835fdb1e0772eee86bcb2cf1901688f5754d689280ba1c5b10', + hash: '0x46dfbaf4d0721d835fdb1e0772eee86bcb2cf1901688f5754d689280ba1c5b10', blockHash: '0x084af47c0b84526f42928dd5910a3069689c377831f49485c1c280324902c93f', blockNumber: 73768, @@ -3460,8 +3348,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000041927354682f1de89835a863655d9f773781aca3c9f5ae0c7acb76773f46222c4a44ce9b8fb5bb2d75ad4574300b9f47e73c88e8f8a07d05b6e1aece91d1fdc300', transactions: [ { - hash: - '0x458b58fc749a70060d7e808817d17f0252679957490000b19d69d79074b52610', + hash: '0x458b58fc749a70060d7e808817d17f0252679957490000b19d69d79074b52610', blockHash: '0xeab267096d8a41fe046eaa1d058c5601e8bf12a04dbebdd0435dc0cda8a02615', blockNumber: 73769, @@ -3497,8 +3384,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000008e4e83156b59659e5dd5166b509f68c7abdd007205fffadf04c17fa80a1166086afa1ca9621eeb6f1f8007463d507b0b558c64b2ae3c625c671ae51a830ed26300', transactions: [ { - hash: - '0x37d5b6f1206cac1155b0c731a9d2e07b9f6fb7bc295a5364be5384dc8b37de38', + hash: '0x37d5b6f1206cac1155b0c731a9d2e07b9f6fb7bc295a5364be5384dc8b37de38', blockHash: '0x8946962864755bacd3e83823a6b0aecc3bf06df40b2d1205c380bc0145ecd6c3', blockNumber: 73770, @@ -3534,8 +3420,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e757800000000000086796d2d1dede8d58f1b4e98951a83f9867a855a8e2393cfc3e1ab6f952a73f14b25a0f2491a49f238f17dd3c6ed08b8fa6bc58715fbce6a5c7948a6ad48d6ea01', transactions: [ { - hash: - '0xf1dfe85b127eee244fd9c87a77d6c302393ba41ec61fcd3d9c6d70d2a85d77ac', + hash: '0xf1dfe85b127eee244fd9c87a77d6c302393ba41ec61fcd3d9c6d70d2a85d77ac', blockHash: '0x79c259fdb2c190a71a74f76aeb8f1ba5a046a1fbd2e925e86332742fdb77c82d', blockNumber: 73771, @@ -3571,8 +3456,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000f1506588486984a6ff3334256e7c5fc7c69bb3c8941e07b1e7c8edac3fa6e0ed1eddd36a8da0648e24d27f686fc500e2ee58778faf1611ab5a3071e85499903501', transactions: [ { - hash: - '0xad21d4af2a42ca95b411b75f47b18dd38e38e3afcb72155ee0626aef80736ae9', + hash: '0xad21d4af2a42ca95b411b75f47b18dd38e38e3afcb72155ee0626aef80736ae9', blockHash: '0xd2324712504767c222bdc0c483ae5d6ab461501718a4ca35632184c839348b68', blockNumber: 73772, @@ -3608,8 +3492,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000b1eb7a9b57301fb787ebd4a07ca59f1d527208d92198e1fb8f123ae07212fde04ce44a1a648d9c6e24645e02ffb1ee593fad2a0e2b01cacaae84faa1bf39b46400', transactions: [ { - hash: - '0x5777de974c85d618befc4e9ced97365ac294de6699bebc347e5375a56c327bd6', + hash: '0x5777de974c85d618befc4e9ced97365ac294de6699bebc347e5375a56c327bd6', blockHash: '0xbcaf3c1040772c8db587de0c15d22b862cc6df7ee10cbc91135a354e688ebbcc', blockNumber: 73773, @@ -3645,8 +3528,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000001856d9837655319a9867af6cf723396bcb601cc9112a60cb2c5d6af882d1864e155352bae738887318ce40760a2978935d109f41fb116b917db898095a2b5e6000', transactions: [ { - hash: - '0x08f0e89763c96db7641af1216ed9b8877e909a0699417bc121fd8ff8be775a72', + hash: '0x08f0e89763c96db7641af1216ed9b8877e909a0699417bc121fd8ff8be775a72', blockHash: '0x3fe4815aa5b8018b9b2701683e2619dc4478284701b20e47b2eaf793b7c4c74a', blockNumber: 73774, @@ -3682,8 +3564,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000fac309a75fa7a6c40b7f57243986226562ecfe4e7515bc9431702979e3f85002200f1410096d631c5d228796893141e3d2d8f7ecee2cc6be7de3edb64952349e01', transactions: [ { - hash: - '0x2411fe3975d55b88976b145a84bb3808a084e3a61e88ee5ac5c111930381c138', + hash: '0x2411fe3975d55b88976b145a84bb3808a084e3a61e88ee5ac5c111930381c138', blockHash: '0x84bc2867eb4844148f78b234bb199d3ee490be924229764e1e9126f98dc715a3', blockNumber: 73775, @@ -3719,8 +3600,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000efac8b54c7e977fd8f93e670bc605c781e4f47c02e7976c3928262f4182c5d06784f4f2d82896258ab51261ee202b908bffee9084471a9aa99db131eb3e28a0400', transactions: [ { - hash: - '0x5e5604d81949390736786bd3e1a404aa1b75536ced41684fc45820d1286a2109', + hash: '0x5e5604d81949390736786bd3e1a404aa1b75536ced41684fc45820d1286a2109', blockHash: '0xf8d766970b7699a5d904ef577f01b0f81c0028429c9dfccf3ac8fbde3d1ec67f', blockNumber: 73776, @@ -3732,8 +3612,7 @@ export const blocksOnL2 = [ to: '0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4', value: { type: 'BigNumber', hex: '0x00' }, nonce: 31, - data: - '0x8a2900140000000000000000000000000000000000000000000000056bc75e2d63100000', + data: '0x8a2900140000000000000000000000000000000000000000000000056bc75e2d63100000', r: '0x2aa213c2eaa5a3f0887ba7ab48498bd289bc54a9e59fbff3a8a2a13e13eb9598', s: '0x399c58f16b07789e8c36268985d107091b01fe0afa3faa6fd71baaeef68afb34', v: 55, @@ -3757,8 +3636,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e75780000000000006b28db5ae022e92f3a0fd1b1a1a1e4c0d89709d7c7925092432c6c6ad3062ca00cdf2e31f97a508d4676557acfbecafa29f91e1a68986610898fc0d8390b4e0b00', transactions: [ { - hash: - '0xe85202151f7de0c8db2a65e4ebc1aaea0a0d00342535057fd054013e5f7fe730', + hash: '0xe85202151f7de0c8db2a65e4ebc1aaea0a0d00342535057fd054013e5f7fe730', blockHash: '0xe5167c9bbab0ae2a594f7cb1c7e1765e61b464d90b9b0c5d03f2535e3f6dbcc7', blockNumber: 73777, @@ -3794,8 +3672,7 @@ export const blocksOnL2 = [ '0xd98301090a846765746889676f312e31342e3135856c696e7578000000000000bd614c2f9f43bfadde6a218183049dfc80fedb1b0740195e6d74d066b824959a12583489d3806202426b2e71335e03a8fdafadd7d6bf074205898fa225df64f501', transactions: [ { - hash: - '0x6ed15b527c6a93439fd00e8cb5a047533e27034ba121e3025d4992b23cc3e93b', + hash: '0x6ed15b527c6a93439fd00e8cb5a047533e27034ba121e3025d4992b23cc3e93b', blockHash: '0xbb4745444882a37f23a145d4d53a22a6789f1967e4fc3227d27f44246f87d660', blockNumber: 73778, diff --git a/packages/data-transport-layer/test/unit-tests/services/l1-ingestion/handlers/state-batch-appended.spec.ts b/packages/data-transport-layer/test/unit-tests/services/l1-ingestion/handlers/state-batch-appended.spec.ts index fb16de430cbe..f3a60577b705 100644 --- a/packages/data-transport-layer/test/unit-tests/services/l1-ingestion/handlers/state-batch-appended.spec.ts +++ b/packages/data-transport-layer/test/unit-tests/services/l1-ingestion/handlers/state-batch-appended.spec.ts @@ -11,8 +11,7 @@ describe('Event Handlers: OVM_CanonicalTransactionChain.StateBatchAppended', () it('should return event block and transaction', async () => { // Source: https://etherscan.io/tx/0x4ca72484e93cdb50fe1089984db152258c2bbffc2534dcafbfe032b596bd5b49 const l1Transaction = { - hash: - '0x4ca72484e93cdb50fe1089984db152258c2bbffc2534dcafbfe032b596bd5b49', + hash: '0x4ca72484e93cdb50fe1089984db152258c2bbffc2534dcafbfe032b596bd5b49', from: '0xfd7d4de366850c08ee2cba32d851385a3071ec8d', data: l1StateBatchData, } @@ -20,8 +19,7 @@ describe('Event Handlers: OVM_CanonicalTransactionChain.StateBatchAppended', () const eventBlock: Block = { timestamp: 1616680530, number: 12106615, - hash: - '0x9c40310e19e943ad38e170329465c4489f6aba5895e9cacdac236be181aea31f', + hash: '0x9c40310e19e943ad38e170329465c4489f6aba5895e9cacdac236be181aea31f', parentHash: '0xc7707a04c287a22ff4e43e5d9316e45ab342dcd405e7e0284eb51ce71a3a29ac', miner: '0xea674fdde714fd979de3edf0f56aa9716b898ec8', diff --git a/packages/message-relayer/src/exec/run.ts b/packages/message-relayer/src/exec/run.ts index 99dbfe0fde2b..b6aea6befea6 100644 --- a/packages/message-relayer/src/exec/run.ts +++ b/packages/message-relayer/src/exec/run.ts @@ -23,10 +23,8 @@ const main = async () => { const L1_WALLET_KEY = config.str('l1-wallet-key', env.L1_WALLET_KEY) const MNEMONIC = config.str('mnemonic', env.MNEMONIC) const HD_PATH = config.str('hd-path', env.HD_PATH) - const WHITELIST_ENDPOINT = config.str( - 'whitlist-endpoint', - env.WHITELIST_ENDPOINT - ) || '' + const WHITELIST_ENDPOINT = + config.str('whitlist-endpoint', env.WHITELIST_ENDPOINT) || '' const WHITELIST_POLLING_INTERVAL = config.uint( 'whitlist-polling-interval', parseInt(env.WHITELIST_POLLING_INTERVAL, 10) || 60000 diff --git a/packages/message-relayer/src/relay-tx.ts b/packages/message-relayer/src/relay-tx.ts index 92c83e189add..2dc706066ddd 100644 --- a/packages/message-relayer/src/relay-tx.ts +++ b/packages/message-relayer/src/relay-tx.ts @@ -114,14 +114,10 @@ export const getMessagesByTransactionHash = async ( * @returns Encoded message. */ const encodeCrossDomainMessage = (message: CrossDomainMessage): string => { - return getContractInterface( - 'OVM_L2CrossDomainMessenger' - ).encodeFunctionData('relayMessage', [ - message.target, - message.sender, - message.message, - message.messageNonce, - ]) + return getContractInterface('OVM_L2CrossDomainMessenger').encodeFunctionData( + 'relayMessage', + [message.target, message.sender, message.message, message.messageNonce] + ) } /** @@ -166,16 +162,16 @@ export const getStateBatchAppendedEventByTransactionIndex = async ( return index >= prevTotalElements + batchSize } - const totalBatches: ethers.BigNumber = await l1StateCommitmentChain.getTotalBatches() + const totalBatches: ethers.BigNumber = + await l1StateCommitmentChain.getTotalBatches() if (totalBatches.eq(0)) { return null } let lowerBound = 0 let upperBound = totalBatches.toNumber() - 1 - let batchEvent: ethers.Event | null = await getStateBatchAppendedEventByBatchIndex( - upperBound - ) + let batchEvent: ethers.Event | null = + await getStateBatchAppendedEventByBatchIndex(upperBound) if (isEventLo(batchEvent, l2TransactionIndex)) { // Upper bound is too low, means this transaction doesn't have a corresponding state batch yet. @@ -223,11 +219,12 @@ export const getStateRootBatchByTransactionIndex = async ( l1RpcProvider ) - const stateBatchAppendedEvent = await getStateBatchAppendedEventByTransactionIndex( - l1RpcProvider, - l1StateCommitmentChainAddress, - l2TransactionIndex - ) + const stateBatchAppendedEvent = + await getStateBatchAppendedEventByTransactionIndex( + l1RpcProvider, + l1StateCommitmentChainAddress, + l2TransactionIndex + ) if (stateBatchAppendedEvent === null) { return null } @@ -272,12 +269,9 @@ const getMerkleTreeProof = (leaves: string[], index: number): string[] => { // merkletreejs prefers things to be Buffers. const bufLeaves = parsedLeaves.map(fromHexString) - const tree = new MerkleTree( - bufLeaves, - (el: Buffer | string): Buffer => { - return fromHexString(ethers.utils.keccak256(el)) - } - ) + const tree = new MerkleTree(bufLeaves, (el: Buffer | string): Buffer => { + return fromHexString(ethers.utils.keccak256(el)) + }) const proof = tree.getProof(bufLeaves[index], index).map((element: any) => { return toHexString(element.data) diff --git a/packages/message-relayer/src/service.ts b/packages/message-relayer/src/service.ts index 0c0df7b00396..5526a653e476 100644 --- a/packages/message-relayer/src/service.ts +++ b/packages/message-relayer/src/service.ts @@ -2,7 +2,7 @@ import { Contract, ethers, Wallet, BigNumber, providers } from 'ethers' import * as rlp from 'rlp' import { MerkleTree } from 'merkletreejs' -import fetch from 'node-fetch'; +import fetch from 'node-fetch' /* Imports: Internal */ import { fromHexString, sleep } from '@eth-optimism/core-utils' @@ -153,7 +153,7 @@ export class MessageRelayerService extends BaseService { while (this.running) { await sleep(this.options.pollingInterval) - await this._getWhitelist(); + await this._getWhitelist() try { // Check that the correct address is set in the address manager @@ -276,9 +276,7 @@ export class MessageRelayerService extends BaseService { } } - private async _getStateBatchHeader( - height: number - ): Promise< + private async _getStateBatchHeader(height: number): Promise< | { batch: StateRootBatchHeader stateRoots: string[] @@ -310,11 +308,12 @@ export class MessageRelayerService extends BaseService { endBlock: startingBlock + this.options.getLogsInterval, }) - const events: ethers.Event[] = await this.state.OVM_StateCommitmentChain.queryFilter( - this.state.OVM_StateCommitmentChain.filters.StateBatchAppended(), - startingBlock, - startingBlock + this.options.getLogsInterval - ) + const events: ethers.Event[] = + await this.state.OVM_StateCommitmentChain.queryFilter( + this.state.OVM_StateCommitmentChain.filters.StateBatchAppended(), + startingBlock, + startingBlock + this.options.getLogsInterval + ) this.state.eventCache = this.state.eventCache.concat(events) startingBlock += this.options.getLogsInterval @@ -335,12 +334,11 @@ export class MessageRelayerService extends BaseService { event.transactionHash ) - const [ - stateRoots, - ] = this.state.OVM_StateCommitmentChain.interface.decodeFunctionData( - 'appendStateBatch', - transaction.data - ) + const [stateRoots] = + this.state.OVM_StateCommitmentChain.interface.decodeFunctionData( + 'appendStateBatch', + transaction.data + ) return { batch: { @@ -355,9 +353,8 @@ export class MessageRelayerService extends BaseService { } private async _isTransactionFinalized(height: number): Promise { - this.logger.info('Checking if tx is finalized', { height }) - + const header = await this._getStateBatchHeader(height) if (header === undefined) { @@ -367,7 +364,9 @@ export class MessageRelayerService extends BaseService { this.logger.info('Got state batch header', { header }) } - const size = (await this._getStateBatchHeader(height)).batch.batchSize.toNumber() + const size = ( + await this._getStateBatchHeader(height) + ).batch.batchSize.toNumber() const filter = this.state.OVM_L2CrossDomainMessenger.filters.SentMessage() const events = await this.state.OVM_L2CrossDomainMessenger.queryFilter( filter, @@ -377,10 +376,11 @@ export class MessageRelayerService extends BaseService { const messages = events.map((event) => { const message = event.args.message - const decoded = this.state.OVM_L2CrossDomainMessenger.interface.decodeFunctionData( - 'relayMessage', - message - ) + const decoded = + this.state.OVM_L2CrossDomainMessenger.interface.decodeFunctionData( + 'relayMessage', + message + ) return { target: decoded._target, @@ -388,18 +388,23 @@ export class MessageRelayerService extends BaseService { } }) - const insideWhitelist = messages.every(message => this.state.whitelist.includes(message.target)) - + const insideWhitelist = messages.every((message) => + this.state.whitelist.includes(message.target) + ) + if (insideWhitelist) { this.logger.info('Found the batch header in whitelist') - return true + return true } else { - const insideFPW = await this.state.OVM_StateCommitmentChain.insideFraudProofWindow(header.batch); + const insideFPW = + await this.state.OVM_StateCommitmentChain.insideFraudProofWindow( + header.batch + ) if (insideFPW === true) { - this.logger.info('INSIDE FRAUD PRROF WINDOW - BLOCKING TRANSACTION.'); - return false; + this.logger.info('INSIDE FRAUD PRROF WINDOW - BLOCKING TRANSACTION.') + return false } else { - this.logger.info('Fraud proof window elapsed.'); + this.logger.info('Fraud proof window elapsed.') return true } } @@ -426,10 +431,11 @@ export class MessageRelayerService extends BaseService { const messages = events.map((event) => { const message = event.args.message - const decoded = this.state.OVM_L2CrossDomainMessenger.interface.decodeFunctionData( - 'relayMessage', - message - ) + const decoded = + this.state.OVM_L2CrossDomainMessenger.interface.decodeFunctionData( + 'relayMessage', + message + ) return { target: decoded._target, @@ -594,25 +600,30 @@ export class MessageRelayerService extends BaseService { private async _getWhitelist(): Promise> { try { if (this.options.whitelistEndpoint) { - if (this.state.lastWhitelistPollingTimestamp === 0 || - new Date().getTime() > this.state.lastWhitelistPollingTimestamp + this.options.whitelistPollingInterval + if ( + this.state.lastWhitelistPollingTimestamp === 0 || + new Date().getTime() > + this.state.lastWhitelistPollingTimestamp + + this.options.whitelistPollingInterval ) { - const response = await fetch(this.options.whitelistEndpoint); - const whitelist = await response.json(); - this.state.lastWhitelistPollingTimestamp = new Date().getTime(); - this.state.whitelist = whitelist; - this.logger.info('Found the whitelist', { whitelist: whitelist }) + const response = await fetch(this.options.whitelistEndpoint) + const whitelist = await response.json() + this.state.lastWhitelistPollingTimestamp = new Date().getTime() + this.state.whitelist = whitelist + this.logger.info('Found the whitelist', { whitelist }) } else { - this.logger.info('Loading the whitelist', { whitelist: this.state.whitelist }) - return this.state.whitelist; + this.logger.info('Loading the whitelist', { + whitelist: this.state.whitelist, + }) + return this.state.whitelist } } else { this.logger.info('The whitelist endpoint was not provided') - this.state.whitelist = []; + this.state.whitelist = [] } } catch { this.logger.info('Failed to fetch the whitelist') - this.state.whitelist = []; + this.state.whitelist = [] } } } diff --git a/packages/omgx/fraud-prover/.prettierrc.json b/packages/omgx/fraud-prover/.prettierrc.json index e69c69c2f4ce..4114873433ed 120000 --- a/packages/omgx/fraud-prover/.prettierrc.json +++ b/packages/omgx/fraud-prover/.prettierrc.json @@ -1 +1 @@ -../../.prettierrc.json \ No newline at end of file +../../../.prettierrc.json \ No newline at end of file diff --git a/packages/omgx/fraud-prover/hardhat.config.ts b/packages/omgx/fraud-prover/hardhat.config.ts index b78d427c5089..8cef1d8f10a8 100644 --- a/packages/omgx/fraud-prover/hardhat.config.ts +++ b/packages/omgx/fraud-prover/hardhat.config.ts @@ -17,7 +17,7 @@ const config: HardhatUserConfig = { solidity: '0.7.6', ovm: { solcVersion: '0.7.6', - } + }, } export default config diff --git a/packages/omgx/fraud-prover/package.json b/packages/omgx/fraud-prover/package.json index 27c16d2d3490..0767c18a8ca8 100644 --- a/packages/omgx/fraud-prover/package.json +++ b/packages/omgx/fraud-prover/package.json @@ -37,16 +37,24 @@ "@eth-optimism/contracts": "^0.3.4", "@eth-optimism/core-utils": "^0.4.4", "@eth-optimism/hardhat-ovm": "^0.2.2", + "@ethersproject/providers": "^5.0.21", + "@ethersproject/abstract-provider": "^5.0.8", "bcfg": "^0.1.6", "dotenv": "^8.2.0", "merkletreejs": "^0.2.18", - "rlp": "^2.2.6" + "rlp": "^2.2.6", + "ethers": "^5.1.4", + "hardhat": "^2.2.1" }, "devDependencies": { "prettier": "^2.2.1", "tslint": "^6.1.3", "tslint-config-prettier": "^1.18.0", "tslint-no-focused-test": "^0.5.0", - "tslint-plugin-prettier": "^2.3.0" + "tslint-plugin-prettier": "^2.3.0", + "merkle-patricia-tree": "^4.0.0", + "@nomiclabs/hardhat-ethers": "^2.0.2", + "ethereumjs-util": "^7.0.5", + "chai": "^4.2.0" } } diff --git a/packages/omgx/fraud-prover/src/exec/run.ts b/packages/omgx/fraud-prover/src/exec/run.ts index 21e28df3015e..4b4b5c6cd7c7 100644 --- a/packages/omgx/fraud-prover/src/exec/run.ts +++ b/packages/omgx/fraud-prover/src/exec/run.ts @@ -15,7 +15,10 @@ const main = async () => { const env = process.env const L1_NODE_WEB3_URL = config.str('l1-node-web3-url', env.L1_NODE_WEB3_URL) - const L2_NODE_WEB3_URL = config.str('verifier-web3-url', env.VERIFIER_WEB3_URL) + const L2_NODE_WEB3_URL = config.str( + 'verifier-web3-url', + env.VERIFIER_WEB3_URL + ) const ADDRESS_MANAGER_ADDRESS = config.str( 'address-manager-address', @@ -67,7 +70,7 @@ const main = async () => { throw new Error('Must pass L2_NODE_WEB3_URL') } - console.log("The L2 block offset is:",L2_BLOCK_OFFSET) + console.log('The L2 block offset is:', L2_BLOCK_OFFSET) const l2Provider = new providers.JsonRpcProvider(L2_NODE_WEB3_URL) const l1Provider = new providers.JsonRpcProvider(L1_NODE_WEB3_URL) diff --git a/packages/omgx/fraud-prover/src/service.ts b/packages/omgx/fraud-prover/src/service.ts index dbb225be87b9..9325dfcc4f81 100644 --- a/packages/omgx/fraud-prover/src/service.ts +++ b/packages/omgx/fraud-prover/src/service.ts @@ -6,10 +6,7 @@ import { MerkleTree } from 'merkletreejs' import { BaseTrie } from 'merkle-patricia-tree' import { BaseService } from '@eth-optimism/common-ts' -import { - loadContract, - loadContractFromManager -} from '@eth-optimism/contracts' +import { loadContract, loadContractFromManager } from '@eth-optimism/contracts' /* Imports: Internal */ import { @@ -24,7 +21,7 @@ import { toBytes32, toHexString, fromHexString, - sleep + sleep, } from './utils' import { @@ -86,7 +83,6 @@ const optionSettings = { } export class FraudProverService extends BaseService { - constructor(options: FraudProverOptions) { super('Fraud_Prover', options, optionSettings) } @@ -110,9 +106,8 @@ export class FraudProverService extends BaseService { } protected async _init(): Promise { - this.logger.info('Initializing fraud prover', { options: this.options }) - + // Need to improve this, sorry. // haha - cry this.state = {} as any @@ -223,9 +218,7 @@ export class FraudProverService extends BaseService { this.options.l1BlockFinality ) - this.state.l2Provider = new L2ProviderWrapper( - this.options.l2RpcProvider - ) + this.state.l2Provider = new L2ProviderWrapper(this.options.l2RpcProvider) this.logger.info( 'Caching events for relevant contracts, this might take a while...' @@ -251,13 +244,14 @@ export class FraudProverService extends BaseService { this.state.lastQueriedL1Block = this.options.l1StartOffset this.state.eventCache = [] - this.state.lastFinalizedTxHeight = this.options.fromL2TransactionIndex || 0 - this.state.nextUnfinalizedTxHeight = this.options.fromL2TransactionIndex || 0 - this.state.nextUnverifiedStateRoot = this.options.fromL2TransactionIndex || 0 - + this.state.lastFinalizedTxHeight = this.options.fromL2TransactionIndex || 0 + this.state.nextUnfinalizedTxHeight = + this.options.fromL2TransactionIndex || 0 + this.state.nextUnverifiedStateRoot = + this.options.fromL2TransactionIndex || 0 } -/* + /* {"level":30,"time":1621896406019,"proof":{"header":{"number":6,"hash":"0xdf2e2dc16c24dcd3385d8965de1ac205e883199af730313915a3b971dc018f68","stateRoot":"0xf121b2f028e2f1810f16e9138712b14532ff6cf5ca101e8b93a2300aa87c2c61","timestamp":1621896367},"accountStateProofs":null},"msg":"_makeStateTrie"} {"level":50,"time":1621896406019,"err":{"type":"TypeError","message":" @@ -269,17 +263,15 @@ FraudProverService._start (/opt/fraud-prover/src/service.ts:283:23)\n at FraudPr (/opt/fraud-prover/node_modules/@eth-optimism/core-utils/src/base-service.ts:57:5)\n at main (/opt/fraud-prover/src/exec/run.ts:63:3)\n at /opt/fraud-prover/exec/run.js:6:3"},"msg":"Caught an unhandled error"} */ - protected async _start(): Promise { - while (this.running) { - await sleep(this.options.pollingInterval) try { this.logger.info('Looking for mismatched state roots...') - - const fraudulentStateRootIndex = await this._findNextFraudulentStateRoot() + + const fraudulentStateRootIndex = + await this._findNextFraudulentStateRoot() if (fraudulentStateRootIndex === undefined) { this.logger.info('Did not find any mismatched state roots', { @@ -297,8 +289,11 @@ FraudProverService._start (/opt/fraud-prover/src/service.ts:283:23)\n at FraudPr const proof = await this._getFraudProofData(fraudulentStateRootIndex) this.logger.info('Initializing the fraud verification process...') - this.logger.info('The proof:',{pre: proof.preStateRootProof, tra: proof.transactionProof}) - + this.logger.info('The proof:', { + pre: proof.preStateRootProof, + tra: proof.transactionProof, + }) + try { await this._initializeFraudVerification( proof.preStateRootProof, @@ -315,16 +310,14 @@ FraudProverService._start (/opt/fraud-prover/src/service.ts:283:23)\n at FraudPr } this.logger.info('Loading fraud proof contracts...') - - const { - OVM_StateTransitioner, - OVM_StateManager, - } = await this._getFraudProofContracts( - await this.state.l1Provider.getStateRoot( - fraudulentStateRootIndex - 1 - ), - proof.transactionProof.transaction - ) + + const { OVM_StateTransitioner, OVM_StateManager } = + await this._getFraudProofContracts( + await this.state.l1Provider.getStateRoot( + fraudulentStateRootIndex - 1 + ), + proof.transactionProof.transaction + ) // PRE_EXECUTION phase. if ( @@ -484,7 +477,8 @@ FraudProverService._start (/opt/fraud-prover/src/service.ts:283:23)\n at FraudPr } } - this.state.nextUnverifiedStateRoot = proof.preStateRootProof.stateRootBatchHeader.prevTotalElements.toNumber() + this.state.nextUnverifiedStateRoot = + proof.preStateRootProof.stateRootBatchHeader.prevTotalElements.toNumber() } catch (err) { this.logger.error('Caught an unhandled error', { err, @@ -498,31 +492,33 @@ FraudProverService._start (/opt/fraud-prover/src/service.ts:283:23)\n at FraudPr * @return Index of the next fraudulent state root, if any. */ private async _findNextFraudulentStateRoot(): Promise { - - this.logger.info('getStateRootBatchHeader', { nUSR: this.state.nextUnverifiedStateRoot }) + this.logger.info('getStateRootBatchHeader', { + nUSR: this.state.nextUnverifiedStateRoot, + }) let nextBatchHeader = await this.state.l1Provider.getStateRootBatchHeader( this.state.nextUnverifiedStateRoot ) - this.logger.info('_findNextFraudulentStateRoot(): nextBatchHeader', { nextBatchHeader }) + this.logger.info('_findNextFraudulentStateRoot(): nextBatchHeader', { + nextBatchHeader, + }) while (nextBatchHeader !== undefined) { - //this.logger.info("ok, let's have a look", { nextBatchHeader }) - - const nextBatchStateRoots = await this.state.l1Provider.getBatchStateRoots( - this.state.nextUnverifiedStateRoot - ) + + const nextBatchStateRoots = + await this.state.l1Provider.getBatchStateRoots( + this.state.nextUnverifiedStateRoot + ) for (let i = 0; i < nextBatchHeader.batchSize.toNumber(); i++) { - const index = i + nextBatchHeader.prevTotalElements.toNumber() - + this.logger.info('Checking state root for mismatch', { index }) const l1StateRoot = nextBatchStateRoots[i] - + const l2StateRoot = await this.state.l2Provider.getStateRoot( index + this.options.l2BlockOffset ) @@ -538,7 +534,9 @@ FraudProverService._start (/opt/fraud-prover/src/service.ts:283:23)\n at FraudPr } } - this.state.nextUnverifiedStateRoot = nextBatchHeader.prevTotalElements.toNumber() + nextBatchHeader.batchSize.toNumber() + this.state.nextUnverifiedStateRoot = + nextBatchHeader.prevTotalElements.toNumber() + + nextBatchHeader.batchSize.toNumber() nextBatchHeader = await this.state.l1Provider.getStateRootBatchHeader( this.state.nextUnverifiedStateRoot @@ -554,30 +552,35 @@ FraudProverService._start (/opt/fraud-prover/src/service.ts:283:23)\n at FraudPr private async _getFraudProofData( transactionIndex: number ): Promise { - - this.logger.info('Getting pre-state root inclusion proof for index - 1...',{preIndex: transactionIndex - 1}) - const preStateRootProof = await this.state.l1Provider.getStateRootBatchProof( - transactionIndex - 1 + this.logger.info( + 'Getting pre-state root inclusion proof for index - 1...', + { preIndex: transactionIndex - 1 } ) + const preStateRootProof = + await this.state.l1Provider.getStateRootBatchProof(transactionIndex - 1) - this.logger.info('Getting post-state root inclusion proof for index...',{postIndex: transactionIndex}) - const postStateRootProof = await this.state.l1Provider.getStateRootBatchProof( - transactionIndex - ) + this.logger.info('Getting post-state root inclusion proof for index...', { + postIndex: transactionIndex, + }) + const postStateRootProof = + await this.state.l1Provider.getStateRootBatchProof(transactionIndex) this.logger.info('Getting transaction inclusion proof...') - const transactionProof = await this.state.l1Provider.getTransactionBatchProof( - transactionIndex - ) + const transactionProof = + await this.state.l1Provider.getTransactionBatchProof(transactionIndex) //this might be ok at this point? //this.logger.info('Transaction inclusion proof...',{transactionProof}) - - console.log("The right index?",transactionIndex + this.options.l2BlockOffset) - this.logger.info('Getting state diff proof...') - - const stateDiffProof: StateDiffProof = await this.state.l2Provider.getStateDiffProof( + + console.log( + 'The right index?', transactionIndex + this.options.l2BlockOffset ) + this.logger.info('Getting state diff proof...') + + const stateDiffProof: StateDiffProof = + await this.state.l2Provider.getStateDiffProof( + transactionIndex + this.options.l2BlockOffset + ) //this.logger.info('State diff proof...',{stateDiffProof}) const stateTrie = await this._makeStateTrie(stateDiffProof) @@ -624,8 +627,8 @@ FraudProverService._start (/opt/fraud-prover/src/service.ts:283:23)\n at FraudPr this.logger.info('Loading the corresponding state manager...') const stateManagerAddress = await OVM_StateTransitioner.ovmStateManager() - - this.logger.info('stateManagerAddress...',{stateManagerAddress}) + + this.logger.info('stateManagerAddress...', { stateManagerAddress }) const OVM_StateManager = loadContract( 'OVM_StateManager', @@ -647,14 +650,12 @@ FraudProverService._start (/opt/fraud-prover/src/service.ts:283:23)\n at FraudPr * @return View of the state trie. */ private async _makeStateTrie(proof: StateDiffProof): Promise { - this.logger.info('_makeStateTrie for this proof:', { proof }) - if(proof.accountStateProofs === null){ - //not sure why this is happening - this.logger.info("_makeStateTrie proof.accountStateProofs === null") + if (proof.accountStateProofs === null) { + //not sure why this is happening + this.logger.info('_makeStateTrie proof.accountStateProofs === null') return - } return makeTrieFromProofs( @@ -669,9 +670,7 @@ FraudProverService._start (/opt/fraud-prover/src/service.ts:283:23)\n at FraudPr * @param proof State diff proof to generate tries from. * @return View of a set of all account tries. */ - private async _makeAccountTries( - proof: StateDiffProof - ): Promise<{ + private async _makeAccountTries(proof: StateDiffProof): Promise<{ [address: string]: BaseTrie }> { const accountTries: { [address: string]: BaseTrie } = {} diff --git a/packages/omgx/fraud-prover/src/utils/l1-provider-wrapper.ts b/packages/omgx/fraud-prover/src/utils/l1-provider-wrapper.ts index b661235364d6..925499b919c6 100644 --- a/packages/omgx/fraud-prover/src/utils/l1-provider-wrapper.ts +++ b/packages/omgx/fraud-prover/src/utils/l1-provider-wrapper.ts @@ -10,10 +10,7 @@ import { OvmTransaction, } from '../types' -import { - fromHexString, - toHexString -} from './hex-utils' +import { fromHexString, toHexString } from './hex-utils' export class L1ProviderWrapper { private eventCache: { @@ -37,7 +34,6 @@ export class L1ProviderWrapper { filter: ethers.EventFilter, fromBlock?: number ): Promise { - const cache = this.eventCache[filter.topics[0] as string] || { startingBlockNumber: fromBlock || this.l1StartOffset, events: [], @@ -46,7 +42,7 @@ export class L1ProviderWrapper { let events: ethers.Event[] = [] let startingBlockNumber = cache.startingBlockNumber let latestL1BlockNumber = await this.provider.getBlockNumber() - + while (startingBlockNumber < latestL1BlockNumber) { events = events.concat( await contract.queryFilter( @@ -77,7 +73,6 @@ export class L1ProviderWrapper { public async getStateRootBatchHeader( index: number ): Promise { - const event = await this._getStateRootBatchEvent(index) if (!event) { @@ -94,18 +89,17 @@ export class L1ProviderWrapper { } public async getStateRoot(index: number): Promise { - const stateRootBatchHeader = await this.getStateRootBatchHeader(index) - + if (stateRootBatchHeader === undefined) { return } - console.log("We found a stateRootBatchHeader on L1:",stateRootBatchHeader) + console.log('We found a stateRootBatchHeader on L1:', stateRootBatchHeader) const batchStateRoots = await this.getBatchStateRoots(index) - console.log("We found the batchStateRoots on L1:",batchStateRoots) + console.log('We found the batchStateRoots on L1:', batchStateRoots) return batchStateRoots[ index - stateRootBatchHeader.prevTotalElements.toNumber() @@ -113,7 +107,6 @@ export class L1ProviderWrapper { } public async getBatchStateRoots(index: number): Promise { - const event = await this._getStateRootBatchEvent(index) if (!event) { @@ -124,12 +117,11 @@ export class L1ProviderWrapper { event.transactionHash ) - const [ - stateRoots, - ] = this.OVM_StateCommitmentChain.interface.decodeFunctionData( - 'appendStateBatch', - transaction.data - ) + const [stateRoots] = + this.OVM_StateCommitmentChain.interface.decodeFunctionData( + 'appendStateBatch', + transaction.data + ) return stateRoots } @@ -137,14 +129,13 @@ export class L1ProviderWrapper { public async getStateRootBatchProof( index: number ): Promise { - const batchHeader = await this.getStateRootBatchHeader(index) - + const stateRoots = await this.getBatchStateRoots(index) - console.log("\nIndex:", index) - console.log("Batch Header:", batchHeader) - console.log("State roots:", stateRoots) + console.log('\nIndex:', index) + console.log('Batch Header:', batchHeader) + console.log('State roots:', stateRoots) const elements = [] for ( @@ -172,7 +163,7 @@ export class L1ProviderWrapper { //this might be off by one as well?? const batchIndex = index - batchHeader.prevTotalElements.toNumber() - + const treeProof = tree .getProof(leaves[batchIndex], batchIndex) .map((element) => { @@ -207,9 +198,7 @@ export class L1ProviderWrapper { } } - public async getBatchTransactions( - index: number - ): Promise< + public async getBatchTransactions(index: number): Promise< { transaction: OvmTransaction transactionChainElement: TransactionChainElement @@ -221,27 +210,26 @@ export class L1ProviderWrapper { return } - const emGasLimit = await this.OVM_ExecutionManager.getMaxTransactionGasLimit() + const emGasLimit = + await this.OVM_ExecutionManager.getMaxTransactionGasLimit() const transaction = await this.provider.getTransaction( event.transactionHash ) if ((event as any).isSequencerBatch) { - const transactions = [] - + const txdata = fromHexString(transaction.data) const shouldStartAtBatch = BigNumber.from(txdata.slice(4, 9)) const totalElementsToAppend = BigNumber.from(txdata.slice(9, 12)) const numContexts = BigNumber.from(txdata.slice(12, 15)) let nextTxPointer = 15 + 16 * numContexts.toNumber() - + for (let i = 0; i < numContexts.toNumber(); i++) { - const contextPointer = 15 + 16 * i - + const context = { numSequencedTransactions: BigNumber.from( txdata.slice(contextPointer, contextPointer + 3) @@ -258,11 +246,10 @@ export class L1ProviderWrapper { } for (let j = 0; j < context.numSequencedTransactions.toNumber(); j++) { - const txDataLength = BigNumber.from( txdata.slice(nextTxPointer, nextTxPointer + 3) ) - + const txData = txdata.slice( nextTxPointer + 3, nextTxPointer + 3 + txDataLength.toNumber() @@ -300,30 +287,25 @@ export class L1ProviderWrapper { public async getTransactionBatchProof( index: number ): Promise { - const batchHeader = await this.getTransactionBatchHeader(index) - console.log("\nbatchHeader:", batchHeader) - + console.log('\nbatchHeader:', batchHeader) + const transactions = await this.getBatchTransactions(index) //this will be empty if the transactions were not batch transactions to begin with - console.log("\nWe found a problem in Batch:", index) - console.log("Number of Transactions in this batch:", transactions.length) - console.log("Transactions:", transactions) + console.log('\nWe found a problem in Batch:', index) + console.log('Number of Transactions in this batch:', transactions.length) + console.log('Transactions:', transactions) const elements = [] const n_elements = Math.pow(2, Math.ceil(Math.log2(transactions.length))) - console.log("Elements to generate:", n_elements) - - for ( - let i = 0; - i < n_elements; - i++ - ) { - console.log("Generating element:", i) + console.log('Elements to generate:', n_elements) + + for (let i = 0; i < n_elements; i++) { + console.log('Generating element:', i) if (i < transactions.length) { // TODO: FIX - more info would have been great - // fix what??? + // fix what??? const tx = transactions[i] elements.push( `0x01${BigNumber.from(tx.transaction.timestamp) @@ -339,7 +321,7 @@ export class L1ProviderWrapper { } } - console.log("Final Elements Array:", elements) + console.log('Final Elements Array:', elements) const hash = (el: Buffer | string): Buffer => { return Buffer.from(ethers.utils.keccak256(el).slice(2), 'hex') @@ -349,20 +331,23 @@ export class L1ProviderWrapper { return hash(element) }) - console.log("leaves:",leaves) + console.log('leaves:', leaves) const tree = new MerkleTree(leaves, hash) - + //this seems to be off by one sometimes????? const batchIndex = index - batchHeader.prevTotalElements.toNumber() - 1 //I HAVE NO IDEA WHY - 1 IS NEEDED HERE? JTL - - console.log("leaves:",leaves) - console.log("leaves batchindex?:",leaves[batchIndex]) - - if(batchIndex >= transactions.length) { - console.log("\n\n************************\nbatchIndex out of array bounds:",batchIndex) - console.log("But transactions.length is only:",transactions.length) - console.log("transactions[batchIndex]:", transactions[batchIndex]) + + console.log('leaves:', leaves) + console.log('leaves batchindex?:', leaves[batchIndex]) + + if (batchIndex >= transactions.length) { + console.log( + '\n\n************************\nbatchIndex out of array bounds:', + batchIndex + ) + console.log('But transactions.length is only:', transactions.length) + console.log('transactions[batchIndex]:', transactions[batchIndex]) } const treeProof = tree @@ -373,9 +358,12 @@ export class L1ProviderWrapper { //console.log("*****************************\n") //console.log("Transactions",transactions) - console.log("batchIndex",index) //the problem is in this batch - console.log("batchHeader.prevTotalElements.toNumber()",batchHeader.prevTotalElements.toNumber()) - console.log("The fraudulant transaction array position:",batchIndex) + console.log('batchIndex', index) //the problem is in this batch + console.log( + 'batchHeader.prevTotalElements.toNumber()', + batchHeader.prevTotalElements.toNumber() + ) + console.log('The fraudulant transaction array position:', batchIndex) //console.log("transactions[0]",transactions[0]) //console.log("transactions[1]",transactions[1]) //console.log("transactions[batchIndex-1]",transactions[batchIndex-1]) @@ -396,24 +384,27 @@ export class L1ProviderWrapper { } private async _getStateRootBatchEvent(index: number): Promise { - const events = await this.findAllEvents( this.OVM_StateCommitmentChain, this.OVM_StateCommitmentChain.filters.StateBatchAppended() ) - console.log("All events in the OVM_StateCommitmentChain:", events) + console.log('All events in the OVM_StateCommitmentChain:', events) if (events.length === 0) { return } - const matching = events.filter((event) => { - - console.log("index", index) - console.log("event.args._prevTotalElements.toNumber():", event.args._prevTotalElements.toNumber()) - console.log("event.args._batchSize.toNumber()", event.args._batchSize.toNumber()) + console.log('index', index) + console.log( + 'event.args._prevTotalElements.toNumber():', + event.args._prevTotalElements.toNumber() + ) + console.log( + 'event.args._batchSize.toNumber()', + event.args._batchSize.toNumber() + ) return ( event.args._prevTotalElements.toNumber() <= index && @@ -423,15 +414,15 @@ export class L1ProviderWrapper { ) }) - console.log("This StateRootBatchEvent matches:", matching) - + console.log('This StateRootBatchEvent matches:', matching) + const deletions = await this.findAllEvents( this.OVM_StateCommitmentChain, this.OVM_StateCommitmentChain.filters.StateBatchDeleted() ) const results: ethers.Event[] = [] - + for (const event of matching) { const wasDeleted = deletions.some((deletion) => { return ( diff --git a/packages/omgx/fraud-prover/src/utils/l2-provider-wrapper.ts b/packages/omgx/fraud-prover/src/utils/l2-provider-wrapper.ts index f3a5fe3a29f5..a33f301cf075 100644 --- a/packages/omgx/fraud-prover/src/utils/l2-provider-wrapper.ts +++ b/packages/omgx/fraud-prover/src/utils/l2-provider-wrapper.ts @@ -5,7 +5,6 @@ import { StateDiffProof } from '../types' import { toUnpaddedHexString } from './hex-utils' export class L2ProviderWrapper { - constructor(public provider: providers.JsonRpcProvider) {} public async getStateRoot(index: number): Promise { @@ -37,63 +36,62 @@ export class L2ProviderWrapper { ]) } -/* + /* {"level":30,"time":1621976500683,"l1StateRoot":"0xbad1bad1bad1bad1bad1bad1bad1bad1bad1bad1bad1bad1bad1bad1bad1bad1","msg":"L1 State Root"} {"level":30,"time":1621976500683,"l2StateRoot":"0x701a046ebe69e7a2745a7aeccaa3c7f3d1148cca6c8cbca445736b27f06326ca","msg":"L2 State Root"} */ public async getStateDiffProof(index: number): Promise { - let proof = await this.provider.send('eth_getStateDiffProof', [ toUnpaddedHexString(0), ]) - console.log("proof 0:",proof) + console.log('proof 0:', proof) proof = await this.provider.send('eth_getStateDiffProof', [ toUnpaddedHexString(1), ]) - console.log("proof 1:",proof) + console.log('proof 1:', proof) proof = await this.provider.send('eth_getStateDiffProof', [ toUnpaddedHexString(2), ]) - console.log("proof 2:",proof) + console.log('proof 2:', proof) proof = await this.provider.send('eth_getStateDiffProof', [ toUnpaddedHexString(3), ]) - console.log("proof 3:",proof) + console.log('proof 3:', proof) proof = await this.provider.send('eth_getStateDiffProof', [ toUnpaddedHexString(4), ]) - console.log("proof 4:",proof) + console.log('proof 4:', proof) proof = await this.provider.send('eth_getStateDiffProof', [ toUnpaddedHexString(5), ]) - console.log("proof 5:",proof) + console.log('proof 5:', proof) proof = await this.provider.send('eth_getStateDiffProof', [ toUnpaddedHexString(6), ]) - console.log("proof 6:",proof) + console.log('proof 6:', proof) proof = await this.provider.send('eth_getStateDiffProof', [ toUnpaddedHexString(7), ]) - console.log("proof 7:",proof) + console.log('proof 7:', proof) proof = await this.provider.send('eth_getStateDiffProof', [ toUnpaddedHexString(index), ]) - console.log("If this is empty, there is a major problem") - console.log("proof:",proof) + console.log('If this is empty, there is a major problem') + console.log('proof:', proof) return { header: proof.header, diff --git a/packages/omgx/fraud-prover/src/utils/ovm-utils.ts b/packages/omgx/fraud-prover/src/utils/ovm-utils.ts index b2617ed3cc12..8328facc3dc3 100644 --- a/packages/omgx/fraud-prover/src/utils/ovm-utils.ts +++ b/packages/omgx/fraud-prover/src/utils/ovm-utils.ts @@ -1,8 +1,7 @@ import { ethers } from 'ethers' import { OvmTransaction } from '../types' -import { toUint256, toUint8 } from './hex-utils' -import { toHexString, fromHexString } from './hex-utils' +import { toUint256, toUint8, toHexString, fromHexString } from './hex-utils' export const encodeOvmTransaction = (transaction: OvmTransaction): string => { return toHexString( diff --git a/packages/omgx/fraud-prover/test/a_setup.spec.ts b/packages/omgx/fraud-prover/test/a_setup.spec.ts index 00f1d1d88862..5bc6df322d45 100644 --- a/packages/omgx/fraud-prover/test/a_setup.spec.ts +++ b/packages/omgx/fraud-prover/test/a_setup.spec.ts @@ -1,5 +1,12 @@ import { expect } from 'chai' -import { Contract, ContractFactory, BigNumber, Wallet, utils, providers } from 'ethers' +import { + Contract, + ContractFactory, + BigNumber, + Wallet, + utils, + providers, +} from 'ethers' import { Direction } from './shared/watcher-utils' import L1ERC20Json from '../artifacts/contracts/ERC20.sol/ERC20.json' @@ -11,7 +18,6 @@ import { OptimismEnv } from './shared/env' import * as fs from 'fs' describe('System setup', async () => { - let Factory__L1ERC20: ContractFactory let Factory__L2DepositedERC20: ContractFactory let Factory__L1ERC20Gateway: ContractFactory @@ -19,17 +25,16 @@ describe('System setup', async () => { let L1ERC20: Contract let L2DepositedERC20: Contract let L1ERC20Gateway: Contract - + let env: OptimismEnv - //Test ERC20 - const initialAmount = utils.parseEther("10000000000") + //Test ERC20 + const initialAmount = utils.parseEther('10000000000') const tokenName = 'OMGX Test' const tokenDecimals = 18 const tokenSymbol = 'OMG' before(async () => { - env = await OptimismEnv.new() Factory__L1ERC20 = new ContractFactory( @@ -49,11 +54,9 @@ describe('System setup', async () => { L1ERC20GatewayJson.bytecode, env.bobl1Wallet ) - }) before(async () => { - //Mint a new token on L1 and set up the L1 and L2 infrastructure // [initialSupply, name, decimals, symbol] // this is owned by bobl1Wallet @@ -64,7 +67,7 @@ describe('System setup', async () => { tokenSymbol ) await L1ERC20.deployTransaction.wait() - console.log("L1ERC20 deployed to:", L1ERC20.address) + console.log('L1ERC20 deployed to:', L1ERC20.address) //Set up things on L2 for this new token // [l2MessengerAddress, name, symbol] @@ -74,34 +77,34 @@ describe('System setup', async () => { tokenSymbol ) await L2DepositedERC20.deployTransaction.wait() - console.log("L2DepositedERC20 deployed to:", L2DepositedERC20.address) - + console.log('L2DepositedERC20 deployed to:', L2DepositedERC20.address) + //Deploy a gateway for the new token // [L1_ERC20.address, OVM_L2DepositedERC20.address, l1MessengerAddress] L1ERC20Gateway = await Factory__L1ERC20Gateway.deploy( L1ERC20.address, L2DepositedERC20.address, - env.watcher.l1.messengerAddress, + env.watcher.l1.messengerAddress ) await L1ERC20Gateway.deployTransaction.wait() - console.log("L1ERC20Gateway deployed to:", L1ERC20Gateway.address) + console.log('L1ERC20Gateway deployed to:', L1ERC20Gateway.address) //Initialize the contracts for the new token - const initL2 = await L2DepositedERC20.init(L1ERC20Gateway.address); - await initL2.wait(); - console.log('L2 ERC20 initialized:',initL2.hash); - + const initL2 = await L2DepositedERC20.init(L1ERC20Gateway.address) + await initL2.wait() + console.log('L2 ERC20 initialized:', initL2.hash) }) it('Bob Approve and Deposit ERC20 from L1 to L2', async () => { - const depositL2ERC20Amount = utils.parseEther('150') const preL1ERC20Balance = await L1ERC20.balanceOf(env.bobl1Wallet.address) - const preL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) - - console.log(" Bob Depositing L1 ERC20 to L2...") - console.log(" On L1, Bob has:", preL1ERC20Balance) - console.log(" On L2, Bob has:", preL2ERC20Balance) + const preL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.bobl2Wallet.address + ) + + console.log(' Bob Depositing L1 ERC20 to L2...') + console.log(' On L1, Bob has:', preL1ERC20Balance) + console.log(' On L2, Bob has:', preL2ERC20Balance) const approveL1ERC20TX = await L1ERC20.approve( L1ERC20Gateway.address, @@ -115,11 +118,13 @@ describe('System setup', async () => { ) const l1FeePaid = receipt.gasUsed.mul(tx.gasPrice) - const postL1ERC20Balance = await L1ERC20.balanceOf(env.bobl1Wallet.address); - const postL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) + const postL1ERC20Balance = await L1ERC20.balanceOf(env.bobl1Wallet.address) + const postL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.bobl2Wallet.address + ) - console.log(" On L1, Bob now has:", postL1ERC20Balance) - console.log(" On L2, Bob now has:", postL2ERC20Balance) + console.log(' On L1, Bob now has:', postL1ERC20Balance) + console.log(' On L2, Bob now has:', postL2ERC20Balance) expect(preL1ERC20Balance).to.deep.eq( postL1ERC20Balance.add(depositL2ERC20Amount) @@ -127,30 +132,48 @@ describe('System setup', async () => { expect(preL2ERC20Balance).to.deep.eq( postL2ERC20Balance.sub(depositL2ERC20Amount) ) - }) it('should transfer ERC20 token to Alice and Fraud', async () => { - const transferL2ERC20Amount = utils.parseEther('10') - const preBobL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) - const preAliceL2ERC20Balance = await L2DepositedERC20.balanceOf(env.alicel2Wallet.address) - const preFraudL2ERC20Balance = await L2DepositedERC20.balanceOf(env.fraudl2Wallet.address) + const preBobL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.bobl2Wallet.address + ) + const preAliceL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.alicel2Wallet.address + ) + const preFraudL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.fraudl2Wallet.address + ) - const tranferToAliceTX = await L2DepositedERC20.transfer(env.alicel2Wallet.address, transferL2ERC20Amount) + const tranferToAliceTX = await L2DepositedERC20.transfer( + env.alicel2Wallet.address, + transferL2ERC20Amount + ) await tranferToAliceTX.wait() - const tranferToFraudTX = await L2DepositedERC20.transfer(env.fraudl2Wallet.address, transferL2ERC20Amount) + const tranferToFraudTX = await L2DepositedERC20.transfer( + env.fraudl2Wallet.address, + transferL2ERC20Amount + ) await tranferToFraudTX.wait() - const postBobL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) - const postAliceL2ERC20Balance = await L2DepositedERC20.balanceOf(env.alicel2Wallet.address) - const postFraudL2ERC20Balance = await L2DepositedERC20.balanceOf(env.fraudl2Wallet.address) + const postBobL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.bobl2Wallet.address + ) + const postAliceL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.alicel2Wallet.address + ) + const postFraudL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.fraudl2Wallet.address + ) //because i'm sending the same amount out, twice.... expect(preBobL2ERC20Balance).to.deep.eq( - postBobL2ERC20Balance.add(transferL2ERC20Amount).add(transferL2ERC20Amount) + postBobL2ERC20Balance + .add(transferL2ERC20Amount) + .add(transferL2ERC20Amount) ) expect(preAliceL2ERC20Balance).to.deep.eq( @@ -163,26 +186,32 @@ describe('System setup', async () => { }) it('should transfer ERC20 token from Alice to Fraud', async () => { - const transferL2ERC20Amount = utils.parseEther('3') - const preAliceL2ERC20Balance = await L2DepositedERC20.balanceOf(env.alicel2Wallet.address) - const preFraudL2ERC20Balance = await L2DepositedERC20.balanceOf(env.fraudl2Wallet.address) + const preAliceL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.alicel2Wallet.address + ) + const preFraudL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.fraudl2Wallet.address + ) - console.log(" On L2, Alice has:", preAliceL2ERC20Balance.toString()) - console.log(" On L2, Fraud has:", preFraudL2ERC20Balance.toString()) + console.log(' On L2, Alice has:', preAliceL2ERC20Balance.toString()) + console.log(' On L2, Fraud has:', preFraudL2ERC20Balance.toString()) - const tranferToFraudTX = await L2DepositedERC20.connect(env.alicel2Wallet).transfer( - env.fraudl2Wallet.address, - transferL2ERC20Amount - ) + const tranferToFraudTX = await L2DepositedERC20.connect( + env.alicel2Wallet + ).transfer(env.fraudl2Wallet.address, transferL2ERC20Amount) await tranferToFraudTX.wait() - const postAliceL2ERC20Balance = await L2DepositedERC20.balanceOf(env.alicel2Wallet.address) - const postFraudL2ERC20Balance = await L2DepositedERC20.balanceOf(env.fraudl2Wallet.address) + const postAliceL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.alicel2Wallet.address + ) + const postFraudL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.fraudl2Wallet.address + ) - console.log(" On L2, Alice now has:", postAliceL2ERC20Balance.toString()) - console.log(" On L2, Fraud now has:", postFraudL2ERC20Balance.toString()) + console.log(' On L2, Alice now has:', postAliceL2ERC20Balance.toString()) + console.log(' On L2, Fraud now has:', postFraudL2ERC20Balance.toString()) expect(postAliceL2ERC20Balance).to.deep.eq( preAliceL2ERC20Balance.sub(transferL2ERC20Amount) @@ -194,26 +223,32 @@ describe('System setup', async () => { }) it('should transfer ERC20 token from Fraud to Bob and commit fraud', async () => { - const transferL2ERC20Amount = utils.parseEther('1') - const preBobL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) - const preFraudL2ERC20Balance = await L2DepositedERC20.balanceOf(env.fraudl2Wallet.address) + const preBobL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.bobl2Wallet.address + ) + const preFraudL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.fraudl2Wallet.address + ) - console.log(" On L2, Bob has:", preBobL2ERC20Balance.toString()) - console.log(" On L2, Fraud has:", preFraudL2ERC20Balance.toString()) + console.log(' On L2, Bob has:', preBobL2ERC20Balance.toString()) + console.log(' On L2, Fraud has:', preFraudL2ERC20Balance.toString()) - const tranferToFraudTX = await L2DepositedERC20.connect(env.fraudl2Wallet).transfer( - env.bobl2Wallet.address, - transferL2ERC20Amount - ) + const tranferToFraudTX = await L2DepositedERC20.connect( + env.fraudl2Wallet + ).transfer(env.bobl2Wallet.address, transferL2ERC20Amount) await tranferToFraudTX.wait() - const postBobL2ERC20Balance = await L2DepositedERC20.balanceOf(env.bobl2Wallet.address) - const postFraudL2ERC20Balance = await L2DepositedERC20.balanceOf(env.fraudl2Wallet.address) + const postBobL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.bobl2Wallet.address + ) + const postFraudL2ERC20Balance = await L2DepositedERC20.balanceOf( + env.fraudl2Wallet.address + ) - console.log(" On L2, Bob now has:", postBobL2ERC20Balance.toString()) - console.log(" On L2, Fraud now has:", postFraudL2ERC20Balance.toString()) + console.log(' On L2, Bob now has:', postBobL2ERC20Balance.toString()) + console.log(' On L2, Fraud now has:', postFraudL2ERC20Balance.toString()) expect(postBobL2ERC20Balance).to.deep.eq( preBobL2ERC20Balance.add(transferL2ERC20Amount) @@ -223,5 +258,4 @@ describe('System setup', async () => { preFraudL2ERC20Balance.sub(transferL2ERC20Amount) ) }) - -}) \ No newline at end of file +}) diff --git a/packages/omgx/fraud-prover/test/shared/env.ts b/packages/omgx/fraud-prover/test/shared/env.ts index 88ec0df51aef..4c50a3f12afa 100644 --- a/packages/omgx/fraud-prover/test/shared/env.ts +++ b/packages/omgx/fraud-prover/test/shared/env.ts @@ -1,4 +1,7 @@ -import { getContractInterface, getContractFactory } from '@eth-optimism/contracts' +import { + getContractInterface, + getContractFactory, +} from '@eth-optimism/contracts' import { Contract, utils, Wallet } from 'ethers' import { Watcher } from './watcher' @@ -48,7 +51,7 @@ export class OptimismEnv { // The wallets bobl1Wallet: Wallet bobl2Wallet: Wallet - + alicel2Wallet: Wallet alicel1Wallet: Wallet @@ -74,7 +77,6 @@ export class OptimismEnv { } static async new(): Promise { - const addressManager = getAddressManager(bobl1Wallet) const watcher = await initWatcher(l1Provider, l2Provider, addressManager) @@ -85,8 +87,8 @@ export class OptimismEnv { .connect(bobl1Wallet) .attach(watcher.l1.messengerAddress) - const l1MessengerAddress = l1Messenger.address; - + const l1MessengerAddress = l1Messenger.address + const l2Messenger = getContractFactory('iOVM_L2CrossDomainMessenger') .connect(bobl2Wallet) .attach(watcher.l2.messengerAddress) @@ -113,7 +115,7 @@ export class OptimismEnv { alicel2Wallet, fraudl1Wallet, fraudl2Wallet, - l2Provider + l2Provider, }) } diff --git a/packages/omgx/fraud-prover/test/shared/utils.ts b/packages/omgx/fraud-prover/test/shared/utils.ts index 170b3e7e78a0..15360085f6af 100644 --- a/packages/omgx/fraud-prover/test/shared/utils.ts +++ b/packages/omgx/fraud-prover/test/shared/utils.ts @@ -1,38 +1,55 @@ +/* eslint @typescript-eslint/no-var-requires: 0 */ + import { injectL2Context } from '@eth-optimism/core-utils' -import { getContractInterface, getContractFactory } from '@eth-optimism/contracts' import { - Contract, - Wallet, - constants, - providers, - BigNumber, -} from 'ethers' + getContractInterface, + getContractFactory, +} from '@eth-optimism/contracts' +import { Contract, Wallet, constants, providers, BigNumber } from 'ethers' + require('dotenv').config() export const GWEI = BigNumber.from(0) // The hardhat instance //const l1HttpPort = 9545 -export const l1Provider = new providers.JsonRpcProvider(process.env.L1_NODE_WEB3_URL) -export const l2Provider = new providers.JsonRpcProvider(process.env.L2_NODE_WEB3_URL) +export const l1Provider = new providers.JsonRpcProvider( + process.env.L1_NODE_WEB3_URL +) +export const l2Provider = new providers.JsonRpcProvider( + process.env.L2_NODE_WEB3_URL +) // export const l2Provider = injectL2Context(l2P) // An account for testing which is funded on L1 -export const bobl1Wallet = new Wallet(process.env.TEST_PRIVATE_KEY_1,l1Provider) +export const bobl1Wallet = new Wallet( + process.env.TEST_PRIVATE_KEY_1, + l1Provider +) export const bobl2Wallet = bobl1Wallet.connect(l2Provider) // Another test user with some eth -export const alicel1Wallet = new Wallet(process.env.TEST_PRIVATE_KEY_2).connect(l1Provider) -export const alicel2Wallet = new Wallet(process.env.TEST_PRIVATE_KEY_2).connect(l2Provider) +export const alicel1Wallet = new Wallet(process.env.TEST_PRIVATE_KEY_2).connect( + l1Provider +) +export const alicel2Wallet = new Wallet(process.env.TEST_PRIVATE_KEY_2).connect( + l2Provider +) // Any transactions from this wallet will trigger a fake state root -export const fraudl1Wallet = new Wallet(process.env.FRAUD_PRIVATE_KEY).connect(l1Provider) -export const fraudl2Wallet = new Wallet(process.env.FRAUD_PRIVATE_KEY).connect(l2Provider) +export const fraudl1Wallet = new Wallet(process.env.FRAUD_PRIVATE_KEY).connect( + l1Provider +) +export const fraudl2Wallet = new Wallet(process.env.FRAUD_PRIVATE_KEY).connect( + l2Provider +) // Predeploys -export const PROXY_SEQUENCER_ENTRYPOINT_ADDRESS = '0x4200000000000000000000000000000000000004' +export const PROXY_SEQUENCER_ENTRYPOINT_ADDRESS = + '0x4200000000000000000000000000000000000004' export const OVM_ETH_ADDRESS = '0x4200000000000000000000000000000000000006' -export const Proxy__OVM_L2CrossDomainMessenger = '0x4200000000000000000000000000000000000007' +export const Proxy__OVM_L2CrossDomainMessenger = + '0x4200000000000000000000000000000000000007' export const addressManagerAddress = process.env.ETH1_ADDRESS_RESOLVER_ADDRESS export const getAddressManager = (provider: any) => { @@ -42,11 +59,15 @@ export const getAddressManager = (provider: any) => { } // Gets the gateway using the proxy if available -export const getL1ETHGateway = async (wallet: Wallet, AddressManager: Contract) => { - +export const getL1ETHGateway = async ( + wallet: Wallet, + AddressManager: Contract +) => { const l1GatewayInterface = getContractInterface('OVM_L1ETHGateway') - const ProxyGatewayAddress = await AddressManager.getAddress('Proxy__OVM_L1ETHGateway') - + const ProxyGatewayAddress = await AddressManager.getAddress( + 'Proxy__OVM_L1ETHGateway' + ) + const L1ETHGateway = new Contract( ProxyGatewayAddress, l1GatewayInterface as any, @@ -65,5 +86,4 @@ export const getL2ETHGateway = (wallet: Wallet) => { return OVM_ETH } - export const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)) diff --git a/packages/omgx/fraud-prover/test/shared/watcher-utils.ts b/packages/omgx/fraud-prover/test/shared/watcher-utils.ts index 361e6a9c673d..cba69e0f1f79 100644 --- a/packages/omgx/fraud-prover/test/shared/watcher-utils.ts +++ b/packages/omgx/fraud-prover/test/shared/watcher-utils.ts @@ -11,8 +11,9 @@ export const initWatcher = async ( l2Provider: JsonRpcProvider, AddressManager: Contract ) => { - - const l1MessengerAddress = await AddressManager.getAddress('Proxy__OVM_L1CrossDomainMessenger') + const l1MessengerAddress = await AddressManager.getAddress( + 'Proxy__OVM_L1CrossDomainMessenger' + ) return new Watcher({ l1: { @@ -21,7 +22,7 @@ export const initWatcher = async ( }, l2: { provider: l2Provider, - messengerAddress: "0x4200000000000000000000000000000000000007", + messengerAddress: '0x4200000000000000000000000000000000000007', }, }) } @@ -42,10 +43,9 @@ export const waitForXDomainTransaction = async ( tx: Promise | TransactionResponse, direction: Direction ): Promise => { - // await it if needed tx = await tx - + // get the receipt and the full transaction const receipt = await tx.wait() diff --git a/packages/omgx/fraud-prover/test/shared/watcher.ts b/packages/omgx/fraud-prover/test/shared/watcher.ts index 3af52bf32e69..6db77acf0a1e 100644 --- a/packages/omgx/fraud-prover/test/shared/watcher.ts +++ b/packages/omgx/fraud-prover/test/shared/watcher.ts @@ -13,7 +13,6 @@ export interface WatcherOptions { } export class Watcher { - public NUM_BLOCKS_TO_FETCH: number = 10000 public l1: Layer public l2: Layer @@ -48,9 +47,8 @@ export class Watcher { layer: Layer, txHash: string ): Promise { - const receipt = await layer.provider.getTransactionReceipt(txHash) - + if (!receipt) { return [] } @@ -77,9 +75,8 @@ export class Watcher { msgHash: string, pollForPending: boolean = true ): Promise { - // console.log(" Watcher::getTransactionReceipt") - + const blockNumber = await layer.provider.getBlockNumber() const startingBlock = Math.max(blockNumber - this.NUM_BLOCKS_TO_FETCH, 0) @@ -88,11 +85,11 @@ export class Watcher { topics: [ethers.utils.id(`RelayedMessage(bytes32)`)], fromBlock: startingBlock, } - + const logs = await layer.provider.getLogs(filter) const matches = logs.filter((log: any) => log.data === msgHash) - + // Message was relayed in the past if (matches.length > 0) { if (matches.length > 1) { @@ -102,7 +99,7 @@ export class Watcher { } return layer.provider.getTransactionReceipt(matches[0].transactionHash) } - + if (!pollForPending) { return Promise.resolve(undefined) } @@ -115,7 +112,9 @@ export class Watcher { // console.log(" Watcher polling::layer.provider.getTransactionReceipt post filter") if (log.data === msgHash) { try { - const txReceipt = await layer.provider.getTransactionReceipt(log.transactionHash) + const txReceipt = await layer.provider.getTransactionReceipt( + log.transactionHash + ) layer.provider.off(filter) resolve(txReceipt) } catch (e) { @@ -125,4 +124,4 @@ export class Watcher { }) }) } -} \ No newline at end of file +} diff --git a/packages/omgx/fraud-prover/yarn-error.log b/packages/omgx/fraud-prover/yarn-error.log new file mode 100644 index 000000000000..7acc3f0f3127 --- /dev/null +++ b/packages/omgx/fraud-prover/yarn-error.log @@ -0,0 +1,86 @@ +Arguments: + /usr/local/Cellar/node/15.12.0/bin/node /usr/local/Cellar/yarn/1.22.10/libexec/bin/yarn.js run lint:check + +PATH: + /Users/janliphardt/.cabal/bin:/Users/janliphardt/.ghcup/bin:/usr/local/opt/openssl/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin + +Yarn version: + 1.22.10 + +Node version: + 15.12.0 + +Platform: + darwin x64 + +Trace: + SyntaxError: /Users/janliphardt/Documents/GitHub/optimism/packages/omgx/fraud-prover/package.json: Unexpected token } in JSON at position 1786 + at JSON.parse () + at /usr/local/Cellar/yarn/1.22.10/libexec/lib/cli.js:1625:59 + at Generator.next () + at step (/usr/local/Cellar/yarn/1.22.10/libexec/lib/cli.js:310:30) + at /usr/local/Cellar/yarn/1.22.10/libexec/lib/cli.js:321:13 + +npm manifest: + { + "name": "@omgx/fraud-prover", + "version": "0.0.1", + "private": true, + "description": "Fraud Prover Service", + "main": "dist/index", + "types": "dist/index", + "files": [ + "dist/index" + ], + "scripts": { + "start": "node ./exec/run-fraud-prover.js", + "build": "tsc -p ./tsconfig.build.json", + "clean": "rimraf dist/ ./tsconfig.build.tsbuildinfo", + "lint": "yarn lint:fix && yarn lint:check", + "lint:fix": "prettier --config .prettierrc.json --write \"{src,exec,test}/**/*.ts\"", + "lint:check": "tslint --format stylish --project .", + "build:contracts": "hardhat compile", + "build:contracts:ovm": "hardhat compile --network omgx", + "build:fraud": "yarn build:contracts && yarn build:contracts:ovm", + "deploy": "yarn build:contracts && yarn build:contracts:ovm && hardhat --network omgx test" + }, + "keywords": [ + "optimism", + "ethereum", + "fraud-prover" + ], + "homepage": "https://github.com/ethereum-optimism/optimism-monorepo/tree/master/packages/fraud-prover#readme", + "license": "MIT", + "author": "Optimism", + "repository": { + "type": "git", + "url": "https://github.com/ethereum-optimism/optimism.git" + }, + "dependencies": { + "@eth-optimism/common-ts": "^0.1.2", + "@eth-optimism/contracts": "^0.3.4", + "@eth-optimism/core-utils": "^0.4.4", + "@eth-optimism/hardhat-ovm": "^0.2.2", + "@ethersproject/providers": "^5.0.21", + "bcfg": "^0.1.6", + "dotenv": "^8.2.0", + "merkletreejs": "^0.2.18", + "rlp": "^2.2.6", + "ethers": "^5.1.4", + "hardhat": "^2.2.1" + }, + "devDependencies": { + "prettier": "^2.2.1", + "tslint": "^6.1.3", + "tslint-config-prettier": "^1.18.0", + "tslint-no-focused-test": "^0.5.0", + "tslint-plugin-prettier": "^2.3.0", + "merkle-patricia-tree": "^4.0.0", + } + } + +yarn manifest: + No manifest + +Lockfile: + No lockfile diff --git a/packages/omgx/message-relayer-fast/src/exec/run.ts b/packages/omgx/message-relayer-fast/src/exec/run.ts index b177cc58d35c..00223b347e88 100644 --- a/packages/omgx/message-relayer-fast/src/exec/run.ts +++ b/packages/omgx/message-relayer-fast/src/exec/run.ts @@ -21,10 +21,7 @@ const main = async () => { 'address-manager-address', env.ADDRESS_MANAGER_ADDRESS ) - const L1_TARGET = config.str( - 'l1-target', - env.L1_TARGET - ) + const L1_TARGET = config.str('l1-target', env.L1_TARGET) const L1_WALLET_KEY = config.str('l1-wallet-key', env.L1_WALLET_KEY) const MNEMONIC = config.str('mnemonic', env.MNEMONIC) const HD_PATH = config.str('hd-path', env.HD_PATH) diff --git a/packages/omgx/message-relayer-fast/src/service.ts b/packages/omgx/message-relayer-fast/src/service.ts index 091f92af5da4..6d6bb3a39fc6 100644 --- a/packages/omgx/message-relayer-fast/src/service.ts +++ b/packages/omgx/message-relayer-fast/src/service.ts @@ -117,7 +117,7 @@ export class MessageRelayerService extends BaseService { this.state.OVM_L1CrossDomainMessenger = loadContract( 'OVM_L1CrossDomainMessenger', l1MessengerAddress, - this.options.l1RpcProvider, + this.options.l1RpcProvider ) this.logger.info('Connected to OVM_L1CrossDomainMessenger', { address: this.state.OVM_L1CrossDomainMessenger.address, @@ -263,16 +263,15 @@ export class MessageRelayerService extends BaseService { } } - private async _getStateBatchHeader( - height: number - ): Promise< + private async _getStateBatchHeader(height: number): Promise< | { batch: StateRootBatchHeader stateRoots: string[] } | undefined > { - const filter = this.state.OVM_StateCommitmentChain.filters.StateBatchAppended() + const filter = + this.state.OVM_StateCommitmentChain.filters.StateBatchAppended() let startingBlock = this.state.lastQueriedL1Block while ( @@ -284,11 +283,12 @@ export class MessageRelayerService extends BaseService { endBlock: startingBlock + this.options.getLogsInterval, }) - const events: ethers.Event[] = await this.state.OVM_StateCommitmentChain.queryFilter( - filter, - startingBlock, - startingBlock + this.options.getLogsInterval - ) + const events: ethers.Event[] = + await this.state.OVM_StateCommitmentChain.queryFilter( + filter, + startingBlock, + startingBlock + this.options.getLogsInterval + ) this.state.eventCache = this.state.eventCache.concat(events) startingBlock += this.options.getLogsInterval @@ -308,12 +308,11 @@ export class MessageRelayerService extends BaseService { const transaction = await this.options.l1RpcProvider.getTransaction( event.transactionHash ) - const [ - stateRoots, - ] = this.state.OVM_StateCommitmentChain.interface.decodeFunctionData( - 'appendStateBatch', - transaction.data - ) + const [stateRoots] = + this.state.OVM_StateCommitmentChain.interface.decodeFunctionData( + 'appendStateBatch', + transaction.data + ) return { batch: { @@ -362,10 +361,11 @@ export class MessageRelayerService extends BaseService { return events.map((event) => { const message = event.args.message - const decoded = this.state.OVM_L2CrossDomainMessenger.interface.decodeFunctionData( - 'relayMessage', - message - ) + const decoded = + this.state.OVM_L2CrossDomainMessenger.interface.decodeFunctionData( + 'relayMessage', + message + ) return { target: decoded._target, @@ -473,7 +473,8 @@ export class MessageRelayerService extends BaseService { batchIndex: proof.stateRootBatchHeader.batchIndex.toString(), batchRoot: proof.stateRootBatchHeader.batchRoot, batchSize: proof.stateRootBatchHeader.batchSize.toString(), - prevTotalElements: proof.stateRootBatchHeader.prevTotalElements.toString(), + prevTotalElements: + proof.stateRootBatchHeader.prevTotalElements.toString(), extraData: proof.stateRootBatchHeader.extraData, index: proof.stateRootProof.index, siblings: proof.stateRootProof.siblings.join(','), diff --git a/tslint.base.json b/tslint.base.json index 28bab7f8245b..86d12eb421f0 100644 --- a/tslint.base.json +++ b/tslint.base.json @@ -28,7 +28,8 @@ "no-focused-test": true, "array-type": false, "prettier": [true, "./.prettierrc.json"], - "curly": true + "curly": true, + "no-var-requires": false }, "linterOptions": { "exclude": [ From 6e6cb6a0e7a183317f5f4de433ff88d3e3a21e38 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Fri, 4 Jun 2021 14:02:07 -0700 Subject: [PATCH 23/30] final lint/GH/yarn actions fixes --- packages/omgx/fraud-prover/package.json | 4 +- packages/omgx/fraud-prover/yarn-error.log | 86 -- yarn.lock | 1162 +++++++++++---------- 3 files changed, 586 insertions(+), 666 deletions(-) delete mode 100644 packages/omgx/fraud-prover/yarn-error.log diff --git a/packages/omgx/fraud-prover/package.json b/packages/omgx/fraud-prover/package.json index 0767c18a8ca8..60d3cf7f10d5 100644 --- a/packages/omgx/fraud-prover/package.json +++ b/packages/omgx/fraud-prover/package.json @@ -37,8 +37,6 @@ "@eth-optimism/contracts": "^0.3.4", "@eth-optimism/core-utils": "^0.4.4", "@eth-optimism/hardhat-ovm": "^0.2.2", - "@ethersproject/providers": "^5.0.21", - "@ethersproject/abstract-provider": "^5.0.8", "bcfg": "^0.1.6", "dotenv": "^8.2.0", "merkletreejs": "^0.2.18", @@ -55,6 +53,8 @@ "merkle-patricia-tree": "^4.0.0", "@nomiclabs/hardhat-ethers": "^2.0.2", "ethereumjs-util": "^7.0.5", + "@ethersproject/providers": "^5.0.21", + "@ethersproject/abstract-provider": "^5.0.8", "chai": "^4.2.0" } } diff --git a/packages/omgx/fraud-prover/yarn-error.log b/packages/omgx/fraud-prover/yarn-error.log deleted file mode 100644 index 7acc3f0f3127..000000000000 --- a/packages/omgx/fraud-prover/yarn-error.log +++ /dev/null @@ -1,86 +0,0 @@ -Arguments: - /usr/local/Cellar/node/15.12.0/bin/node /usr/local/Cellar/yarn/1.22.10/libexec/bin/yarn.js run lint:check - -PATH: - /Users/janliphardt/.cabal/bin:/Users/janliphardt/.ghcup/bin:/usr/local/opt/openssl/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin - -Yarn version: - 1.22.10 - -Node version: - 15.12.0 - -Platform: - darwin x64 - -Trace: - SyntaxError: /Users/janliphardt/Documents/GitHub/optimism/packages/omgx/fraud-prover/package.json: Unexpected token } in JSON at position 1786 - at JSON.parse () - at /usr/local/Cellar/yarn/1.22.10/libexec/lib/cli.js:1625:59 - at Generator.next () - at step (/usr/local/Cellar/yarn/1.22.10/libexec/lib/cli.js:310:30) - at /usr/local/Cellar/yarn/1.22.10/libexec/lib/cli.js:321:13 - -npm manifest: - { - "name": "@omgx/fraud-prover", - "version": "0.0.1", - "private": true, - "description": "Fraud Prover Service", - "main": "dist/index", - "types": "dist/index", - "files": [ - "dist/index" - ], - "scripts": { - "start": "node ./exec/run-fraud-prover.js", - "build": "tsc -p ./tsconfig.build.json", - "clean": "rimraf dist/ ./tsconfig.build.tsbuildinfo", - "lint": "yarn lint:fix && yarn lint:check", - "lint:fix": "prettier --config .prettierrc.json --write \"{src,exec,test}/**/*.ts\"", - "lint:check": "tslint --format stylish --project .", - "build:contracts": "hardhat compile", - "build:contracts:ovm": "hardhat compile --network omgx", - "build:fraud": "yarn build:contracts && yarn build:contracts:ovm", - "deploy": "yarn build:contracts && yarn build:contracts:ovm && hardhat --network omgx test" - }, - "keywords": [ - "optimism", - "ethereum", - "fraud-prover" - ], - "homepage": "https://github.com/ethereum-optimism/optimism-monorepo/tree/master/packages/fraud-prover#readme", - "license": "MIT", - "author": "Optimism", - "repository": { - "type": "git", - "url": "https://github.com/ethereum-optimism/optimism.git" - }, - "dependencies": { - "@eth-optimism/common-ts": "^0.1.2", - "@eth-optimism/contracts": "^0.3.4", - "@eth-optimism/core-utils": "^0.4.4", - "@eth-optimism/hardhat-ovm": "^0.2.2", - "@ethersproject/providers": "^5.0.21", - "bcfg": "^0.1.6", - "dotenv": "^8.2.0", - "merkletreejs": "^0.2.18", - "rlp": "^2.2.6", - "ethers": "^5.1.4", - "hardhat": "^2.2.1" - }, - "devDependencies": { - "prettier": "^2.2.1", - "tslint": "^6.1.3", - "tslint-config-prettier": "^1.18.0", - "tslint-no-focused-test": "^0.5.0", - "tslint-plugin-prettier": "^2.3.0", - "merkle-patricia-tree": "^4.0.0", - } - } - -yarn manifest: - No manifest - -Lockfile: - No lockfile diff --git a/yarn.lock b/yarn.lock index 09b8e0aa17ff..fdb1e39baa7c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -338,38 +338,38 @@ patch-package "^6.2.2" postinstall-postinstall "^2.1.0" -"@ethereumjs/block@^3.2.0", "@ethereumjs/block@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.2.1.tgz#c24c345e6dd6299efa4bed40979280b7dda96d3a" - integrity sha512-FCxo5KwwULne2A2Yuae4iaGGqSsRjwzXOlDhGalOFiBbLfP3hE04RHaHGw4c8vh1PfOrLauwi0dQNUBkOG3zIA== +"@ethereumjs/block@^3.2.1", "@ethereumjs/block@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.3.0.tgz#a1b3baec831c71c0d9e7f6145f25e919cff4939c" + integrity sha512-WoefY9Rs4W8vZTxG9qwntAlV61xsSv0NPoXmHO7x3SH16dwJQtU15YvahPCz4HEEXbu7GgGgNgu0pv8JY7VauA== dependencies: - "@ethereumjs/common" "^2.2.0" - "@ethereumjs/tx" "^3.1.3" + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/tx" "^3.2.0" ethereumjs-util "^7.0.10" - merkle-patricia-tree "^4.1.0" + merkle-patricia-tree "^4.2.0" -"@ethereumjs/blockchain@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.2.1.tgz#83ed83647667265f1666f111caf065ef9d1e82b5" - integrity sha512-+hshP2qSOOFsiYvZCbaDQFG7jYTWafE8sfBi+pAsdhAHfP7BN7VLyob7qoQISgwS1s7NTR4c4+2t/woU9ahItw== +"@ethereumjs/blockchain@^5.2.1", "@ethereumjs/blockchain@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.3.0.tgz#206936e30a4320d87a26e58d157eadef21ef6ff1" + integrity sha512-B0Y5QDZcRDQISPilv3m8nzk97QmC98DnSE9WxzGpCxfef22Mw7xhwGipci5Iy0dVC2Np2Cr5d3F6bHAR7+yVmQ== dependencies: - "@ethereumjs/block" "^3.2.0" - "@ethereumjs/common" "^2.2.0" + "@ethereumjs/block" "^3.3.0" + "@ethereumjs/common" "^2.3.0" "@ethereumjs/ethash" "^1.0.0" debug "^2.2.0" - ethereumjs-util "^7.0.9" + ethereumjs-util "^7.0.10" level-mem "^5.0.1" lru-cache "^5.1.1" rlp "^2.2.4" semaphore-async-await "^1.5.1" -"@ethereumjs/common@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.2.0.tgz#850a3e3e594ee707ad8d44a11e8152fb62450535" - integrity sha512-PyQiTG00MJtBRkJmv46ChZL8u2XWxNBeAthznAUIUiefxPAXjbkuiCZOuncgJS34/XkMbNc9zMt/PlgKRBElig== +"@ethereumjs/common@^2.2.0", "@ethereumjs/common@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.3.0.tgz#b1174fab8653565b4835a455d972dc2e89411896" + integrity sha512-Fmi15MdVptsC85n6NcUXIFiiXCXWEfZNgPWP+OGAQOC6ZtdzoNawtxH/cYpIgEgSuIzfOeX3VKQP/qVI1wISHg== dependencies: crc-32 "^1.2.0" - ethereumjs-util "^7.0.9" + ethereumjs-util "^7.0.10" "@ethereumjs/ethash@^1.0.0": version "1.0.0" @@ -381,30 +381,30 @@ ethereumjs-util "^7.0.7" miller-rabin "^4.0.0" -"@ethereumjs/tx@^3.1.3": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.1.4.tgz#04cf9e9406da5f04a1a26c458744641f4b4b8dd0" - integrity sha512-6cJpmmjCpG5ZVN9NJYtWvmrEQcevw9DIR8hj2ca2PszD2fxbIFXky3Z37gpf8S6u0Npv09kG8It+G4xjydZVLg== +"@ethereumjs/tx@^3.1.3", "@ethereumjs/tx@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.2.0.tgz#2a816d5db67eb36059c8dc13f022f64e9b8d7ab9" + integrity sha512-D3X/XtZ3ldUg34hr99Jvj7NxW3NxVKdUKrwQnEWlAp4CmCQpvYoyn7NF4lk34rHEt7ScS+Agu01pcDHoOcd19A== dependencies: - "@ethereumjs/common" "^2.2.0" + "@ethereumjs/common" "^2.3.0" ethereumjs-util "^7.0.10" "@ethereumjs/vm@^5.3.2": - version "5.3.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.3.2.tgz#b4d83a3d50a7ad22d6d412cc21bbde221b3e2871" - integrity sha512-QmCUQrW6xbhgEbQh9njue4kAJdM056C+ytBFUTF/kDYa3kNDm4Qxp9HUyTlt1OCSXvDhws0qqlh8+q+pmXpN7g== - dependencies: - "@ethereumjs/block" "^3.2.1" - "@ethereumjs/blockchain" "^5.2.1" - "@ethereumjs/common" "^2.2.0" - "@ethereumjs/tx" "^3.1.3" + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.4.0.tgz#092d530388e855310406160f144d6f492800c0ea" + integrity sha512-0Mv51inp5S/mh+fKP0H90byT/5DdFirChUFUMhEjDlIBnHK55o/liKZ+0iNSLm6ZxX8iPs7urp11/UCoxPJfLA== + dependencies: + "@ethereumjs/block" "^3.3.0" + "@ethereumjs/blockchain" "^5.3.0" + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/tx" "^3.2.0" async-eventemitter "^0.2.4" core-js-pure "^3.0.1" debug "^2.2.0" ethereumjs-util "^7.0.10" functional-red-black-tree "^1.0.1" mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.1.0" + merkle-patricia-tree "^4.2.0" rustbn.js "~0.2.0" util.promisify "^1.0.1" @@ -438,355 +438,356 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" -"@ethersproject/abi@5.2.0", "@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.2.0.tgz#e2ca0b7f7e3b83e4d427ed8b38fdc1c48e2bb00f" - integrity sha512-24ExfHa0VbIOUHbB36b6lCVmWkaIVmrd9/m8MICtmSsRKzlugWqUD0B8g0zrRylXNxAOc3V6T4xKJ8jEDSvp3w== - dependencies: - "@ethersproject/address" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/constants" "^5.2.0" - "@ethersproject/hash" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/strings" "^5.2.0" - -"@ethersproject/abstract-provider@5.2.0", "@ethersproject/abstract-provider@^5.0.0", "@ethersproject/abstract-provider@^5.0.5", "@ethersproject/abstract-provider@^5.0.8", "@ethersproject/abstract-provider@^5.0.9", "@ethersproject/abstract-provider@^5.1.0", "@ethersproject/abstract-provider@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.2.0.tgz#b5c24b162f119b5d241738ded9555186013aa77d" - integrity sha512-Xi7Pt+CulRijc/vskBGIaYMEhafKjoNx8y4RNj/dnSpXHXScOJUSTtypqGBUngZddRbcwZGbHwEr6DZoKZwIZA== - dependencies: - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/networks" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/transactions" "^5.2.0" - "@ethersproject/web" "^5.2.0" - -"@ethersproject/abstract-signer@5.2.0", "@ethersproject/abstract-signer@^5.0.0", "@ethersproject/abstract-signer@^5.1.0", "@ethersproject/abstract-signer@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.2.0.tgz#8e291fb6558b4190fb3e2fe440a9ffd092a2f459" - integrity sha512-JTXzLUrtoxpOEq1ecH86U7tstkEa9POKAGbGBb+gicbjGgzYYkLR4/LD83SX2/JNWvtYyY8t5errt5ehiy1gxQ== +"@ethersproject/abi@5.3.0", "@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.3.0.tgz#00f0647d906edcd32c50b16ab9c98f83e208dcf1" + integrity sha512-NaT4UacjOwca8qCG/gv8k+DgTcWu49xlrvdhr/p8PTFnoS8e3aMWqjI3znFME5Txa/QWXDrg2/heufIUue9rtw== + dependencies: + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + +"@ethersproject/abstract-provider@5.3.0", "@ethersproject/abstract-provider@^5.0.0", "@ethersproject/abstract-provider@^5.0.5", "@ethersproject/abstract-provider@^5.0.8", "@ethersproject/abstract-provider@^5.0.9", "@ethersproject/abstract-provider@^5.1.0", "@ethersproject/abstract-provider@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.3.0.tgz#f4c0ae4a4cef9f204d7781de805fd44b72756c81" + integrity sha512-1+MLhGP1GwxBDBNwMWVmhCsvKwh4gK7oIfOrmlmePNeskg1NhIrYssraJBieaFNHUYfKEd/1DjiVZMw8Qu5Cxw== + dependencies: + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/networks" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/web" "^5.3.0" + +"@ethersproject/abstract-signer@5.3.0", "@ethersproject/abstract-signer@^5.0.0", "@ethersproject/abstract-signer@^5.1.0", "@ethersproject/abstract-signer@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.3.0.tgz#05172b653e15b535ed5854ef5f6a72f4b441052d" + integrity sha512-w8IFwOYqiPrtvosPuArZ3+QPR2nmdVTRrVY8uJYL3NNfMmQfTy3V3l2wbzX47UUlNbPJY+gKvzJAyvK1onZxJg== dependencies: - "@ethersproject/abstract-provider" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" -"@ethersproject/address@5.2.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.0", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.2.0.tgz#afcfa92db84582f54a60a9da361cea4aae450a69" - integrity sha512-2YfZlalWefOEfnr/CdqKRrgMgbKidYc+zG4/ilxSdcryZSux3eBU5/5btAT/hSiaHipUjd8UrWK8esCBHU6QNQ== +"@ethersproject/address@5.3.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.0", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.3.0.tgz#e53b69eacebf332e8175de814c5e6507d6932518" + integrity sha512-29TgjzEBK+gUEUAOfWCG7s9IxLNLCqvr+oDSk6L9TXD0VLvZJKhJV479tKQqheVA81OeGxfpdxYtUVH8hqlCvA== dependencies: - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/rlp" "^5.2.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/rlp" "^5.3.0" -"@ethersproject/base64@5.2.0", "@ethersproject/base64@^5.0.0", "@ethersproject/base64@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.2.0.tgz#e01066d25e5b4e8a051545163bee5def47bd9534" - integrity sha512-D9wOvRE90QBI+yFsKMv0hnANiMzf40Xicq9JZbV9XYzh7srImmwmMcReU2wHjOs9FtEgSJo51Tt+sI1dKPYKDg== +"@ethersproject/base64@5.3.0", "@ethersproject/base64@^5.0.0", "@ethersproject/base64@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.3.0.tgz#b831fb35418b42ad24d943c557259062b8640824" + integrity sha512-JIqgtOmgKcbc2sjGWTXyXktqUhvFUDte8fPVsAaOrcPiJf6YotNF+nsrOYGC9pbHBEGSuSBp3QR0varkO8JHEw== dependencies: - "@ethersproject/bytes" "^5.2.0" + "@ethersproject/bytes" "^5.3.0" -"@ethersproject/basex@5.2.0", "@ethersproject/basex@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.2.0.tgz#f921039e3bdfdab8c5a7ba8b21e81c83fc1ab98b" - integrity sha512-Oo7oX7BmaHLY/8ZsOLI5W0mrSwPBb1iboosN17jfK/4vGAtKjAInDai9I72CzN4NRJaMN5FkFLoPYywGqgGHlg== +"@ethersproject/basex@5.3.0", "@ethersproject/basex@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.3.0.tgz#02dea3ab8559ae625c6d548bc11773432255c916" + integrity sha512-8J4nS6t/SOnoCgr3DF5WCSRLC5YwTKYpZWJqeyYQLX+86TwPhtzvHXacODzcDII9tWKhVg6g0Bka8JCBWXsCiQ== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/properties" "^5.2.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/properties" "^5.3.0" -"@ethersproject/bignumber@5.2.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.0", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.2.0.tgz#03f91ea740c5adb6f8c6a2e91bb4ee5ffaff5503" - integrity sha512-+MNQTxwV7GEiA4NH/i51UqQ+lY36O0rxPdV+0qzjFSySiyBlJpLk6aaa4UTvKmYWlI7YKZm6vuyCENeYn7qAOw== +"@ethersproject/bignumber@5.3.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.0", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.3.0.tgz#74ab2ec9c3bda4e344920565720a6ee9c794e9db" + integrity sha512-5xguJ+Q1/zRMgHgDCaqAexx/8DwDVLRemw2i6uR8KyGjwGdXI8f32QZZ1cKGucBN6ekJvpUpHy6XAuQnTv0mPA== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - bn.js "^4.4.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + bn.js "^4.11.9" -"@ethersproject/bytes@5.2.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.2.0.tgz#327917d5a1600f92fd2a9da4052fa6d974583132" - integrity sha512-O1CRpvJDnRTB47vvW8vyqojUZxVookb4LJv/s06TotriU3Xje5WFvlvXJu1yTchtxTz9BbvJw0lFXKpyO6Dn7w== +"@ethersproject/bytes@5.3.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.3.0.tgz#473e0da7f831d535b2002be05e6f4ca3729a1bc9" + integrity sha512-rqLJjdVqCcn7glPer7Fxh87PRqlnRScVAoxcIP3PmOUNApMWJ6yRdOFfo2KvPAdO7Le3yEI1o0YW+Yvr7XCYvw== dependencies: - "@ethersproject/logger" "^5.2.0" + "@ethersproject/logger" "^5.3.0" -"@ethersproject/constants@5.2.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.0", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.2.0.tgz#ccea78ce325f78abfe7358397c03eec570518d92" - integrity sha512-p+34YG0KbHS20NGdE+Ic0M6egzd7cDvcfoO9RpaAgyAYm3V5gJVqL7UynS87yCt6O6Nlx6wRFboPiM5ctAr+jA== +"@ethersproject/constants@5.3.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.0", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.3.0.tgz#a5d6d86c0eec2c64c3024479609493b9afb3fc77" + integrity sha512-4y1feNOwEpgjAfiCFWOHznvv6qUF/H6uI0UKp8xdhftb+H+FbKflXg1pOgH5qs4Sr7EYBL+zPyPb+YD5g1aEyw== dependencies: - "@ethersproject/bignumber" "^5.2.0" + "@ethersproject/bignumber" "^5.3.0" -"@ethersproject/contracts@5.2.0", "@ethersproject/contracts@^5.0.0", "@ethersproject/contracts@^5.0.5": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.2.0.tgz#f54e12ec4a323f2bf93c338034839cc6dfc1e347" - integrity sha512-/2fg5tWPG6Z4pciEWpwGji3ggGA5j0ChVNF7NTmkOhvFrrJuWnRpzbvYA00nz8tBDNCOV3cwub5zfWRpgwYEJQ== - dependencies: - "@ethersproject/abi" "^5.2.0" - "@ethersproject/abstract-provider" "^5.2.0" - "@ethersproject/abstract-signer" "^5.2.0" - "@ethersproject/address" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/constants" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/transactions" "^5.2.0" +"@ethersproject/contracts@5.3.0", "@ethersproject/contracts@^5.0.0", "@ethersproject/contracts@^5.0.5": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.3.0.tgz#ad699a3abaae30bfb6422cf31813a663b2d4099c" + integrity sha512-eDyQ8ltykvyQqnGZxb/c1e0OnEtzqXhNNC4BX8nhYBCaoBrYYuK/1fLmyEvc5+XUMoxNhwpYkoSSwvPLci7/Zg== + dependencies: + "@ethersproject/abi" "^5.3.0" + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" "@ethersproject/hardware-wallets@^5.0.8": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hardware-wallets/-/hardware-wallets-5.2.0.tgz#995449aedad4346a4e728e1d6dfd35b35b690b22" - integrity sha512-85cIjl4KKh8Nj6DyOXjXrz67kg2N/AS2kAkymCZNRVBD3uMNL8pYAQeDaMgiE/9AC5Bf7ccdVWU78yNQHHIjow== + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hardware-wallets/-/hardware-wallets-5.3.0.tgz#d8b92cd1c800c30f42e17d79fe395fec1b89c26b" + integrity sha512-IbGRJXYEWlcMSy8JSFu1shoSOOVM7zPTRaer5NsjQyuRRLNHg2hCpzySMB4zXdDpixHErUC63frWi1DhyDYtCA== dependencies: "@ledgerhq/hw-app-eth" "5.27.2" "@ledgerhq/hw-transport" "5.26.0" "@ledgerhq/hw-transport-u2f" "5.26.0" - ethers "^5.2.0" + ethers "^5.3.0" optionalDependencies: "@ledgerhq/hw-transport-node-hid" "5.26.0" -"@ethersproject/hash@5.2.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.0", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.2.0.tgz#2d21901eafc5bdb738b4ad96bee364d371ec724b" - integrity sha512-wEGry2HFFSssFiNEkFWMzj1vpdFv4rQlkBp41UfL6J58zKGNycoAWimokITDMk8p7548MKr27h48QfERnNKkRw== - dependencies: - "@ethersproject/abstract-signer" "^5.2.0" - "@ethersproject/address" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/strings" "^5.2.0" - -"@ethersproject/hdnode@5.2.0", "@ethersproject/hdnode@^5.0.0", "@ethersproject/hdnode@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.2.0.tgz#efea9b2f713e55aa5ba23cc62b4aac6d08dcfa53" - integrity sha512-ffq2JrW5AftCmfWZ8DxpdWdw/x06Yn+e9wrWHLpj8If1+w87W4LbTMRUaUmO1DUSN8H8g/6kMUKCTJPVuxsuOw== - dependencies: - "@ethersproject/abstract-signer" "^5.2.0" - "@ethersproject/basex" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/pbkdf2" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/sha2" "^5.2.0" - "@ethersproject/signing-key" "^5.2.0" - "@ethersproject/strings" "^5.2.0" - "@ethersproject/transactions" "^5.2.0" - "@ethersproject/wordlists" "^5.2.0" - -"@ethersproject/json-wallets@5.2.0", "@ethersproject/json-wallets@^5.0.0", "@ethersproject/json-wallets@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.2.0.tgz#d41c7c39e4d236b586e26e2145b09ac49dc56608" - integrity sha512-iWxSm9XiugEtaehYD6w1ImmXeatjcGcrQvffZVJHH1UqV4FckDzrOYnZBRHPQRYlnhNVrGTld1+S0Cu4MB8gdw== - dependencies: - "@ethersproject/abstract-signer" "^5.2.0" - "@ethersproject/address" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/hdnode" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/pbkdf2" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/random" "^5.2.0" - "@ethersproject/strings" "^5.2.0" - "@ethersproject/transactions" "^5.2.0" +"@ethersproject/hash@5.3.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.0", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.3.0.tgz#f65e3bf3db3282df4da676db6cfa049535dd3643" + integrity sha512-gAFZSjUPQ32CIfoKSMtMEQ+IO0kQxqhwz9fCIFt2DtAq2u4pWt8mL9Z5P0r6KkLcQU8LE9FmuPPyd+JvBzmr1w== + dependencies: + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + +"@ethersproject/hdnode@5.3.0", "@ethersproject/hdnode@^5.0.0", "@ethersproject/hdnode@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.3.0.tgz#26fed65ffd5c25463fddff13f5fb4e5617553c94" + integrity sha512-zLmmtLNoDMGoYRdjOab01Zqkvp+TmZyCGDAMQF1Bs3yZyBs/kzTNi1qJjR1jVUcPP5CWGtjFwY8iNG8oNV9J8g== + dependencies: + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/basex" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/pbkdf2" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/signing-key" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/wordlists" "^5.3.0" + +"@ethersproject/json-wallets@5.3.0", "@ethersproject/json-wallets@^5.0.0", "@ethersproject/json-wallets@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.3.0.tgz#7b1a5ff500c12aa8597ae82c8939837b0449376e" + integrity sha512-/xwbqaIb5grUIGNmeEaz8GdcpmDr++X8WT4Jqcclnxow8PXCUHFeDxjf3O+nSuoqOYG/Ds0+BI5xuQKbva6Xkw== + dependencies: + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/hdnode" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/pbkdf2" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/random" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.2.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.0", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.2.0.tgz#15257862807c23f24a3209d1016d322dca85a464" - integrity sha512-LqyxTwVANga5Y3L1yo184czW6b3PibabN8xyE/eOulQLLfXNrHHhwrOTpOhoVRWCICVCD/5SjQfwqTrczjS7jQ== +"@ethersproject/keccak256@5.3.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.0", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.3.0.tgz#fb5cd36bdfd6fa02e2ea84964078a9fc6bd731be" + integrity sha512-Gv2YqgIUmRbYVNIibafT0qGaeGYLIA/EdWHJ7JcVxVSs2vyxafGxOJ5VpSBHWeOIsE6OOaCelYowhuuTicgdFQ== dependencies: - "@ethersproject/bytes" "^5.2.0" + "@ethersproject/bytes" "^5.3.0" js-sha3 "0.5.7" -"@ethersproject/logger@5.2.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.2.0.tgz#accf5348251f78b6c8891af67f42490a4ea4e5ae" - integrity sha512-dPZ6/E3YiArgG8dI/spGkaRDry7YZpCntf4gm/c6SI8Mbqiihd7q3nuLN5VvDap/0K3xm3RE1AIUOcUwwh2ezQ== +"@ethersproject/logger@5.3.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.3.0.tgz#7a69fa1d4ca0d4b7138da1627eb152f763d84dd0" + integrity sha512-8bwJ2gxJGkZZnpQSq5uSiZSJjyVTWmlGft4oH8vxHdvO1Asy4TwVepAhPgxIQIMxXZFUNMych1YjIV4oQ4I7dA== -"@ethersproject/networks@5.2.0", "@ethersproject/networks@^5.0.0", "@ethersproject/networks@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.2.0.tgz#66c23c6ac477dd703645b2c971ac842d8b8aa524" - integrity sha512-q+htMgq7wQoEnjlkdHM6t1sktKxNbEB/F6DQBPNwru7KpQ1R0n0UTIXJB8Rb7lSnvjqcAQ40X3iVqm94NJfYDw== +"@ethersproject/networks@5.3.0", "@ethersproject/networks@^5.0.0", "@ethersproject/networks@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.3.0.tgz#d8ad06eb107c69fb8651f4c81ddd0e88944fdfea" + integrity sha512-XGbD9MMgqrR7SYz8o6xVgdG+25v7YT5vQG8ZdlcLj2I7elOBM7VNeQrnxfSN7rWQNcqu2z80OM29gGbQz+4Low== dependencies: - "@ethersproject/logger" "^5.2.0" + "@ethersproject/logger" "^5.3.0" -"@ethersproject/pbkdf2@5.2.0", "@ethersproject/pbkdf2@^5.0.0", "@ethersproject/pbkdf2@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.2.0.tgz#8166a7a7238a5fd1d9bb6eb2000fea0f19fdde06" - integrity sha512-qKOoO6yir/qnAgg6OP3U4gRuZ6jl9P7xwggRu/spVfnuaR+wa490AatWLqB1WOXKf6JFjm5yOaT/T5fCICQVdQ== +"@ethersproject/pbkdf2@5.3.0", "@ethersproject/pbkdf2@^5.0.0", "@ethersproject/pbkdf2@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.3.0.tgz#8adbb41489c3c9f319cc44bc7d3e6095fd468dc8" + integrity sha512-Q9ChVU6gBFiex0FSdtzo4b0SAKz3ZYcYVFLrEWHL0FnHvNk3J3WgAtRNtBQGQYn/T5wkoTdZttMbfBkFlaiWcA== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/sha2" "^5.2.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" -"@ethersproject/properties@5.2.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.2.0.tgz#8fadf367f7ac7357019d0224aa579b234c545ac1" - integrity sha512-oNFkzcoGwXXV+/Yp/MLcDLrL/2i360XIy2YN9yRZJPnIbLwjroFNLiRzLs6PyPw1D09Xs8OcPR1/nHv6xDKE2A== +"@ethersproject/properties@5.3.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.3.0.tgz#feef4c4babeb7c10a6b3449575016f4ad2c092b2" + integrity sha512-PaHxJyM5/bfusk6vr3yP//JMnm4UEojpzuWGTmtL5X4uNhNnFNvlYilZLyDr4I9cTkIbipCMsAuIcXWsmdRnEw== dependencies: - "@ethersproject/logger" "^5.2.0" + "@ethersproject/logger" "^5.3.0" -"@ethersproject/providers@5.2.0", "@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.0.14", "@ethersproject/providers@^5.0.21", "@ethersproject/providers@^5.0.24": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.2.0.tgz#b2f3e3b2ca4567c8372543ceb6f3c6e3a2370783" - integrity sha512-Yf/ZUqCrVr+jR0SHA9GuNZs4R1xnV9Ibnh1TlOa0ZzI6o+Qf8bEyE550k9bYI4zk2f9x9baX2RRs6BJY7Jz/WA== - dependencies: - "@ethersproject/abstract-provider" "^5.2.0" - "@ethersproject/abstract-signer" "^5.2.0" - "@ethersproject/address" "^5.2.0" - "@ethersproject/basex" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/constants" "^5.2.0" - "@ethersproject/hash" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/networks" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/random" "^5.2.0" - "@ethersproject/rlp" "^5.2.0" - "@ethersproject/sha2" "^5.2.0" - "@ethersproject/strings" "^5.2.0" - "@ethersproject/transactions" "^5.2.0" - "@ethersproject/web" "^5.2.0" +"@ethersproject/providers@5.3.0", "@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.0.14", "@ethersproject/providers@^5.0.21", "@ethersproject/providers@^5.0.24": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.3.0.tgz#bccb49f1073a7d56e24f49abb14bb281c9b08636" + integrity sha512-HtL+DEbzPcRyfrkrMay7Rk/4he+NbUpzI/wHXP4Cqtra82nQOnqqCgTQc4HbdDrl75WVxG/JRMFhyneIPIMZaA== + dependencies: + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/basex" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/networks" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/random" "^5.3.0" + "@ethersproject/rlp" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/strings" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/web" "^5.3.0" bech32 "1.1.4" - ws "7.2.3" + ws "7.4.6" -"@ethersproject/random@5.2.0", "@ethersproject/random@^5.0.0", "@ethersproject/random@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.2.0.tgz#1d7e19f17d88eda56228a263063826829e49eebe" - integrity sha512-7Nd3qjivBGlDCGDuGYjPi8CXdtVhRZ7NeyBXoJgtnJBwn1S01ahrbMeOUVmRVWrFM0YiSEPEGo7i4xEu2gRPcg== +"@ethersproject/random@5.3.0", "@ethersproject/random@^5.0.0", "@ethersproject/random@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.3.0.tgz#7c46bf36e50cb0d0550bc8c666af8e1d4496dc1a" + integrity sha512-A5SL/4inutSwt3Fh2OD0x2gz+x6GHmuUnIPkR7zAiTidMD2N8F6tZdMF1hlQKWVCcVMWhEQg8mWijhEzm6BBYw== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" -"@ethersproject/rlp@5.2.0", "@ethersproject/rlp@^5.0.0", "@ethersproject/rlp@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.2.0.tgz#bbf605183818a9d96bdc40323d734c79e26cfaca" - integrity sha512-RqGsELtPWxcFhOOhSr0lQ2hBNT9tBE08WK0tb6VQbCk97EpqkbgP8yXED9PZlWMiRGchJTw6S+ExzK62XMX/fw== +"@ethersproject/rlp@5.3.0", "@ethersproject/rlp@^5.0.0", "@ethersproject/rlp@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.3.0.tgz#7cb93a7b5dfa69163894153c9d4b0d936f333188" + integrity sha512-oI0joYpsRanl9guDubaW+1NbcpK0vJ3F/6Wpcanzcnqq+oaW9O5E98liwkEDPcb16BUTLIJ+ZF8GPIHYxJ/5Pw== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" -"@ethersproject/sha2@5.2.0", "@ethersproject/sha2@^5.0.0", "@ethersproject/sha2@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.2.0.tgz#ae18fa6c09c6d99fa2b564dac7276bcd513c1579" - integrity sha512-Wqqptfn0PRO2mvmpktPW1HOLrrCyGtxhVQxO1ZyePoGrcEOurhICOlIvkTogoX4Q928D3Z9XtSSCUbdOJUF2kg== +"@ethersproject/sha2@5.3.0", "@ethersproject/sha2@^5.0.0", "@ethersproject/sha2@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.3.0.tgz#209f9a1649f7d2452dcd5e5b94af43b7f3f42366" + integrity sha512-r5ftlwKcocYEuFz2JbeKOT5SAsCV4m1RJDsTOEfQ5L67ZC7NFDK5i7maPdn1bx4nPhylF9VAwxSrQ1esmwzylg== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - hash.js "1.1.3" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + hash.js "1.1.7" -"@ethersproject/signing-key@5.2.0", "@ethersproject/signing-key@^5.0.0", "@ethersproject/signing-key@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.2.0.tgz#e8eb10d3c0f4a575479db8d70c62aaf93cd384d1" - integrity sha512-9A+dVSkrVAPuhJnWqLWV/NkKi/KB4iagTKEuojfuApUfeIHEhpwQ0Jx3cBimk7qWISSSKdgiAmIqpvVtZ5FEkg== +"@ethersproject/signing-key@5.3.0", "@ethersproject/signing-key@^5.0.0", "@ethersproject/signing-key@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.3.0.tgz#a96c88f8173e1abedfa35de32d3e5db7c48e5259" + integrity sha512-+DX/GwHAd0ok1bgedV1cKO0zfK7P/9aEyNoaYiRsGHpCecN7mhLqcdoUiUzE7Uz86LBsxm5ssK0qA1kBB47fbQ== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - bn.js "^4.4.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + bn.js "^4.11.9" elliptic "6.5.4" + hash.js "1.1.7" -"@ethersproject/solidity@5.2.0", "@ethersproject/solidity@^5.0.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.2.0.tgz#ac902d8f8b11bf58fd37ccf77392178cbbd0b08f" - integrity sha512-EEFlNyEnONW3CWF8UGWPcqxJUHiaIoofO7itGwO/2gvGpnwlL+WUV+GmQoHNxmn+QJeOHspnZuh6NOVrJL6H1g== +"@ethersproject/solidity@5.3.0", "@ethersproject/solidity@^5.0.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.3.0.tgz#2a0b00b4aaaef99a080ddea13acab1fa35cd4a93" + integrity sha512-uLRBaNUiISHbut94XKewJgQh6UmydWTBp71I7I21pkjVXfZO2dJ5EOo3jCnumJc01M4LOm79dlNNmF3oGIvweQ== dependencies: - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/sha2" "^5.2.0" - "@ethersproject/strings" "^5.2.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/sha2" "^5.3.0" + "@ethersproject/strings" "^5.3.0" -"@ethersproject/strings@5.2.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.0", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.2.0.tgz#e93d989859587191c3f64bda124d9dedbc3f5a97" - integrity sha512-RmjX800wRYKgrzo2ZCSlA8OCQYyq4+M46VgjSVDVyYkLZctBXC3epqlppDA24R7eo856KNbXqezZsMnHT+sSuA== +"@ethersproject/strings@5.3.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.0", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.3.0.tgz#a6b640aab56a18e0909f657da798eef890968ff0" + integrity sha512-j/AzIGZ503cvhuF2ldRSjB0BrKzpsBMtCieDtn4TYMMZMQ9zScJn9wLzTQl/bRNvJbBE6TOspK0r8/Ngae/f2Q== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/constants" "^5.2.0" - "@ethersproject/logger" "^5.2.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/logger" "^5.3.0" -"@ethersproject/transactions@5.2.0", "@ethersproject/transactions@^5.0.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.21", "@ethersproject/transactions@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.2.0.tgz#052e2ef8f8adf7037ebe4cc47aad2a61950e6491" - integrity sha512-QrGbhGYsouNNclUp3tWMbckMsuXJTOsA56kT3BuRrLlXJcUH7myIihajXdSfKcyJsvHJPrGZP+U3TKh+sLzZtg== - dependencies: - "@ethersproject/address" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/constants" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/rlp" "^5.2.0" - "@ethersproject/signing-key" "^5.2.0" - -"@ethersproject/units@5.2.0", "@ethersproject/units@^5.0.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.2.0.tgz#08643e5d4583ecc1a32b103c1157f7ae80803392" - integrity sha512-yrwlyomXcBBHp5oSrLxlLkyHN7dVu3PO7hMbQXc00h388zU4TF3o/PAIUhh+x695wgJ19Fa8YgUWCab3a1RDwA== +"@ethersproject/transactions@5.3.0", "@ethersproject/transactions@^5.0.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.21", "@ethersproject/transactions@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.3.0.tgz#49b86f2bafa4d0bdf8e596578fc795ee47c50458" + integrity sha512-cdfK8VVyW2oEBCXhURG0WQ6AICL/r6Gmjh0e4Bvbv6MCn/GBd8FeBH3rtl7ho+AW50csMKeGv3m3K1HSHB2jMQ== + dependencies: + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/rlp" "^5.3.0" + "@ethersproject/signing-key" "^5.3.0" + +"@ethersproject/units@5.3.0", "@ethersproject/units@^5.0.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.3.0.tgz#c4d1493532ad3d4ddf6e2bc4f8c94a2db933a8f5" + integrity sha512-BkfccZGwfJ6Ob+AelpIrgAzuNhrN2VLp3AILnkqTOv+yBdsc83V4AYf25XC/u0rHnWl6f4POaietPwlMqP2vUg== dependencies: - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/constants" "^5.2.0" - "@ethersproject/logger" "^5.2.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/constants" "^5.3.0" + "@ethersproject/logger" "^5.3.0" -"@ethersproject/wallet@5.2.0", "@ethersproject/wallet@^5.0.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.2.0.tgz#b5a8406676067e34f633536a4cb53c2ff98c0b5c" - integrity sha512-uPdjZwUmAJLo1+ybR/G/rL9pv/NEcCqOsjn6RJFvG7RmwP2kS1v5C+F+ysgx2W/PxBIVT+2IEsfXLbBz8s/6Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.2.0" - "@ethersproject/abstract-signer" "^5.2.0" - "@ethersproject/address" "^5.2.0" - "@ethersproject/bignumber" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/hash" "^5.2.0" - "@ethersproject/hdnode" "^5.2.0" - "@ethersproject/json-wallets" "^5.2.0" - "@ethersproject/keccak256" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/random" "^5.2.0" - "@ethersproject/signing-key" "^5.2.0" - "@ethersproject/transactions" "^5.2.0" - "@ethersproject/wordlists" "^5.2.0" - -"@ethersproject/web@5.2.0", "@ethersproject/web@^5.0.0", "@ethersproject/web@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.2.0.tgz#47d8e152e7fcc07ba0aff4f99fde268fde79dd7a" - integrity sha512-mYb9qxGlOBFR2pR6t1CZczuqqX6r8RQGn7MtwrBciMex3cvA/qs+wbmcDgl+/OZY0Pco/ih6WHQRnVi+4sBeCQ== +"@ethersproject/wallet@5.3.0", "@ethersproject/wallet@^5.0.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.3.0.tgz#91946b470bd279e39ade58866f21f92749d062af" + integrity sha512-boYBLydG6671p9QoG6EinNnNzbm7DNOjVT20eV8J6HQEq4aUaGiA2CytF2vK+2rOEWbzhZqoNDt6AlkE1LlsTg== + dependencies: + "@ethersproject/abstract-provider" "^5.3.0" + "@ethersproject/abstract-signer" "^5.3.0" + "@ethersproject/address" "^5.3.0" + "@ethersproject/bignumber" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/hdnode" "^5.3.0" + "@ethersproject/json-wallets" "^5.3.0" + "@ethersproject/keccak256" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/random" "^5.3.0" + "@ethersproject/signing-key" "^5.3.0" + "@ethersproject/transactions" "^5.3.0" + "@ethersproject/wordlists" "^5.3.0" + +"@ethersproject/web@5.3.0", "@ethersproject/web@^5.0.0", "@ethersproject/web@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.3.0.tgz#7959c403f6476c61515008d8f92da51c553a8ee1" + integrity sha512-Ni6/DHnY6k/TD41LEkv0RQDx4jqWz5e/RZvrSecsxGYycF+MFy2z++T/yGc2peRunLOTIFwEksgEGGlbwfYmhQ== dependencies: - "@ethersproject/base64" "^5.2.0" - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/strings" "^5.2.0" + "@ethersproject/base64" "^5.3.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" -"@ethersproject/wordlists@5.2.0", "@ethersproject/wordlists@^5.0.0", "@ethersproject/wordlists@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.2.0.tgz#afcce0229e9ef64af1bf8a1e96571fa441e9f444" - integrity sha512-/7TG5r/Zm8Wd9WhoqQ4QnntgMkIfIZ8QVrpU81muiChLD26XLOgmyiqKPL7K058uYt7UZ0wzbXjxyCYadU3xFQ== +"@ethersproject/wordlists@5.3.0", "@ethersproject/wordlists@^5.0.0", "@ethersproject/wordlists@^5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.3.0.tgz#45a0205f5178c1de33d316cb2ab7ed5eac3c06c5" + integrity sha512-JcwumCZcsUxgWpiFU/BRy6b4KlTRdOmYvOKZcAw/3sdF93/pZyPW5Od2hFkHS8oWp4xS06YQ+qHqQhdcxdHafQ== dependencies: - "@ethersproject/bytes" "^5.2.0" - "@ethersproject/hash" "^5.2.0" - "@ethersproject/logger" "^5.2.0" - "@ethersproject/properties" "^5.2.0" - "@ethersproject/strings" "^5.2.0" + "@ethersproject/bytes" "^5.3.0" + "@ethersproject/hash" "^5.3.0" + "@ethersproject/logger" "^5.3.0" + "@ethersproject/properties" "^5.3.0" + "@ethersproject/strings" "^5.3.0" "@hapi/bourne@^2.0.0": version "2.0.0" @@ -805,9 +806,9 @@ chalk "^4.0.0" "@ledgerhq/cryptoassets@^5.27.2": - version "5.52.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/cryptoassets/-/cryptoassets-5.52.0.tgz#90728bb7199a105f8a58bbf271eeb5023859758d" - integrity sha512-iLM7fTfaB1SRANdlU5CX3LEkzQcr5vwNlY72H4LDlmN3UdoXU1ofRSA8J71kwz27lEqDDXuh+Xz/KJEFt5g6Tg== + version "5.53.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/cryptoassets/-/cryptoassets-5.53.0.tgz#11dcc93211960c6fd6620392e4dd91896aaabe58" + integrity sha512-M3ibc3LRuHid5UtL7FI3IC6nMEppvly98QHFoSa7lJU0HDzQxY6zHec/SPM4uuJUC8sXoGVAiRJDkgny54damw== dependencies: invariant "2" @@ -1587,25 +1588,25 @@ globby "^11.0.0" read-yaml-file "^1.1.0" -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - "@nodelib/fs.stat" "2.0.4" + "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + version "1.2.7" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2" + integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA== dependencies: - "@nodelib/fs.scandir" "2.1.4" + "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" "@nomiclabs/ethereumjs-vm@^4.2.2": @@ -1738,10 +1739,10 @@ "@octokit/types" "^6.0.3" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^7.2.0": - version "7.2.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-7.2.1.tgz#3ba1abe8906863edd403e185bc12e2bf79b3e240" - integrity sha512-IHQJpLciwzwDvciLxiFj3IEV5VYn7lSVcj5cu0jbTwMfK4IG6/g8SPrVp3Le1VRzIiYSRcBzm1dA7vgWelYP3Q== +"@octokit/openapi-types@^7.2.3": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-7.2.3.tgz#a7105796db9b85d25d3feba9a1785a124c7803e4" + integrity sha512-V1ycxkR19jqbIl3evf2RQiMRBvTNRi+Iy9h20G5OP5dPfEF6GJ1DPlUeiZRxo2HJxRr+UA4i0H1nn4btBDPFrw== "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" @@ -1760,12 +1761,12 @@ resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz#70a62be213e1edc04bb8897ee48c311482f9700d" integrity sha512-4RFU4li238jMJAzLgAwkBAw+4Loile5haQMQr+uhFq27BmyJXcXSKvoQKqh0agsZEiUlW6iSv3FAgvmGkur7OQ== -"@octokit/plugin-rest-endpoint-methods@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.0.1.tgz#631b8d4edc6798b03489911252a25f2a4e58c594" - integrity sha512-vvWbPtPqLyIzJ7A4IPdTl+8IeuKAwMJ4LjvmqWOOdfSuqWQYZXq2CEd0hsnkidff2YfKlguzujHs/reBdAx8Sg== +"@octokit/plugin-rest-endpoint-methods@5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.3.1.tgz#deddce769b4ec3179170709ab42e4e9e6195aaa9" + integrity sha512-3B2iguGmkh6bQQaVOtCsS0gixrz8Lg0v4JuXPqBcFqLKuJtxAUf3K88RxMEf/naDOI73spD+goJ/o7Ie7Cvdjg== dependencies: - "@octokit/types" "^6.13.1" + "@octokit/types" "^6.16.2" deprecation "^2.3.1" "@octokit/request-error@^2.0.0", "@octokit/request-error@^2.0.5": @@ -1790,21 +1791,21 @@ universal-user-agent "^6.0.0" "@octokit/rest@^18.1.0": - version "18.5.3" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.5.3.tgz#6a2e6006a87ebbc34079c419258dd29ec9ff659d" - integrity sha512-KPAsUCr1DOdLVbZJgGNuE/QVLWEaVBpFQwDAz/2Cnya6uW2wJ/P5RVGk0itx7yyN1aGa8uXm2pri4umEqG1JBA== + version "18.5.6" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.5.6.tgz#8c9a7c9329c7bbf478af20df78ddeab0d21f6d89" + integrity sha512-8HdG6ZjQdZytU6tCt8BQ2XLC7EJ5m4RrbyU/EARSkAM1/HP3ceOzMG/9atEfe17EDMer3IVdHWLedz2wDi73YQ== dependencies: "@octokit/core" "^3.2.3" "@octokit/plugin-paginate-rest" "^2.6.2" "@octokit/plugin-request-log" "^1.0.2" - "@octokit/plugin-rest-endpoint-methods" "5.0.1" + "@octokit/plugin-rest-endpoint-methods" "5.3.1" -"@octokit/types@^6.0.3", "@octokit/types@^6.11.0", "@octokit/types@^6.13.1", "@octokit/types@^6.7.1": - version "6.16.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.16.0.tgz#15f71e391ca74e91a21b70e3a1b033c89625dca4" - integrity sha512-EktqSNq8EKXE82a7Vw33ozOEhFXIRik+rZHJTHAgVZRm/p2K5r5ecn5fVpRkLCm3CAVFwchRvt3yvtmfbt2LCQ== +"@octokit/types@^6.0.3", "@octokit/types@^6.11.0", "@octokit/types@^6.16.2", "@octokit/types@^6.7.1": + version "6.16.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.16.2.tgz#62242e0565a3eb99ca2fd376283fe78b4ea057b4" + integrity sha512-wWPSynU4oLy3i4KGyk+J1BLwRKyoeW2TwRHgwbDz17WtVFzSK2GOErGliruIx8c+MaYtHSYTx36DSmLNoNbtgA== dependencies: - "@octokit/openapi-types" "^7.2.0" + "@octokit/openapi-types" "^7.2.3" "@openzeppelin/contracts-upgradeable@^3.3.0": version "3.4.1" @@ -1864,15 +1865,15 @@ "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/core@6.4.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.4.1.tgz#789b0071996de5c1a20673f879408926aa3b4fa6" - integrity sha512-Lx13oTiP+Tjvm5VxulcCszNVd2S1wY4viSnr+ygq62ySVERR+t7uOZDSARZ0rZ259GwW6nkbMh9dDmD0d6VCGQ== +"@sentry/core@6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.5.1.tgz#c8b6c3ed86ed07b193c95d599c1b9a4a161e500e" + integrity sha512-Mh3sl/iUOT1myHmM6RlDy2ARzkUClx/g4DAt1rJ/IpQBOlDYQraplXSIW80i/hzRgQDfwhwgf4wUa5DicKBjKw== dependencies: - "@sentry/hub" "6.4.1" - "@sentry/minimal" "6.4.1" - "@sentry/types" "6.4.1" - "@sentry/utils" "6.4.1" + "@sentry/hub" "6.5.1" + "@sentry/minimal" "6.5.1" + "@sentry/types" "6.5.1" + "@sentry/utils" "6.5.1" tslib "^1.9.3" "@sentry/hub@5.30.0": @@ -1884,13 +1885,13 @@ "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/hub@6.4.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.4.1.tgz#fa9c05ca32674e2e8477120b71084a1c91a5e023" - integrity sha512-7IZRP5buDE6s/c3vWzzPR/ySE+8GUuHPgTEPiDCPOCWwUN11zXDafJDKkJqY3muJfebUKmC/JG67RyBx+XlnlQ== +"@sentry/hub@6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.5.1.tgz#135ef09d07d32e87a53f664c0ae8fcc4f5963519" + integrity sha512-lBRMBVMYP8B4PfRiM70murbtJAXiIAao/asDEMIRNGMP6pI2ArqXfJCBYDkStukhikYD0Kqb4trXq+JYF07Hbg== dependencies: - "@sentry/types" "6.4.1" - "@sentry/utils" "6.4.1" + "@sentry/types" "6.5.1" + "@sentry/utils" "6.5.1" tslib "^1.9.3" "@sentry/minimal@5.30.0": @@ -1902,13 +1903,13 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@sentry/minimal@6.4.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.4.1.tgz#d3f968c060c3d3cc997071756659e24047b5dd97" - integrity sha512-4x/PRbDZACCKJqjta9EkhiIMyGMf7VgBX13EEWEDVWLP7ymFukBuTr4ap/Tz9429kB/yXZuDGGMIZp/G618H3g== +"@sentry/minimal@6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.5.1.tgz#b8c1b382c2ea788eec3d32d203e5081b00eb6838" + integrity sha512-q9Do/oreu1RP695CXCLowVDuQyk7ilE6FGdz2QLpTXAfx8247qOwk6+zy9Kea/Djk93+BoSDVQUSneNiVwl0nQ== dependencies: - "@sentry/hub" "6.4.1" - "@sentry/types" "6.4.1" + "@sentry/hub" "6.5.1" + "@sentry/types" "6.5.1" tslib "^1.9.3" "@sentry/node@^5.18.1": @@ -1927,15 +1928,15 @@ tslib "^1.9.3" "@sentry/node@^6.2.5", "@sentry/node@^6.3.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.4.1.tgz#db76348e267f26e5cbe788a84e52015bba6e7e85" - integrity sha512-w4IFRA7UFZxKL9xVXmQU8eAjVMY/sr0fJcTV8Wma4uZqa1FQVX4p6xgfylLrcaA8VsolE3l9LRrP1XYxCVwvOw== - dependencies: - "@sentry/core" "6.4.1" - "@sentry/hub" "6.4.1" - "@sentry/tracing" "6.4.1" - "@sentry/types" "6.4.1" - "@sentry/utils" "6.4.1" + version "6.5.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.5.1.tgz#a572b380858de5aeaf98eade6d8d3afcba13d364" + integrity sha512-Yh8J/QJ5e8gRBVL9VLCDpUvmiaxsxVZm0CInPHw3V/smgMkrzSKEiqxSeMq8ImPlaJrCFECqdpv4gnvYKI+mQQ== + dependencies: + "@sentry/core" "6.5.1" + "@sentry/hub" "6.5.1" + "@sentry/tracing" "6.5.1" + "@sentry/types" "6.5.1" + "@sentry/utils" "6.5.1" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" @@ -1952,15 +1953,15 @@ "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/tracing@6.4.1", "@sentry/tracing@^6.3.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.4.1.tgz#3a9119e1ef5206ea565854c325b19a317cc1cca7" - integrity sha512-EPRadE9n/wpUjx4jqP/8vXdOAZBk7vjlzRKniJgKgQUO3v03i0ui6xydaal2mvhplIyOCI2muXdGhjUO7ga4uw== +"@sentry/tracing@6.5.1", "@sentry/tracing@^6.3.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.5.1.tgz#a5f3e497d4f1f319f36475df050e135cf65af750" + integrity sha512-y1W/xFC2hAuKqSuuaovkElHY4pbli3XoXrreesg8PtO7ilX6ZbatOQbHsEsHQyoUv0F6aVA+MABOxWH2jt7tfw== dependencies: - "@sentry/hub" "6.4.1" - "@sentry/minimal" "6.4.1" - "@sentry/types" "6.4.1" - "@sentry/utils" "6.4.1" + "@sentry/hub" "6.5.1" + "@sentry/minimal" "6.5.1" + "@sentry/types" "6.5.1" + "@sentry/utils" "6.5.1" tslib "^1.9.3" "@sentry/types@5.30.0": @@ -1968,10 +1969,10 @@ resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== -"@sentry/types@6.4.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.4.1.tgz#7c0a4355a1d04321b901197723a8f55c263226e9" - integrity sha512-sTu/GaLsLYk1AkAqpkMT4+4q665LtZjhV0hkgiTD4N3zPl5uSf1pCIzxPRYjOpe7NEANmWv8U4PaGKGtc2eMfA== +"@sentry/types@6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.5.1.tgz#0a34ecfd1ae9275a416a105640eb4bed45a46a1d" + integrity sha512-b/7a6CMoytaeFPx4IBjfxPw3nPvsQh7ui1C8Vw0LxNNDgBwVhPLzUOWeLWbo5YZCVbGEMIWwtCUQYWxneceZSA== "@sentry/utils@5.30.0": version "5.30.0" @@ -1981,12 +1982,12 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@sentry/utils@6.4.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.4.1.tgz#55fa7da58898773cbd538e4895fc2e4ec695ecab" - integrity sha512-xJ1uVa5fvg23pXQfulvCIBb9pQ3p1awyd1PapK2AYi+wKjTuYl4B9edmhjRREEQEExznl/d2OVm78fRXLq7M9Q== +"@sentry/utils@6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.5.1.tgz#046baf7d1a6564d6d555437ad3674dba9bc0806a" + integrity sha512-Wv86JYGQH+ZJ5XGFQX7h6ijl32667ikenoL9EyXMn8UoOYX/MLwZoQZin1P60wmKkYR9ifTNVmpaI9OoTaH+UQ== dependencies: - "@sentry/types" "6.4.1" + "@sentry/types" "6.5.1" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": @@ -2009,9 +2010,9 @@ "@sinonjs/commons" "^1.7.0" "@sinonjs/fake-timers@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.0.tgz#8f13af27d842cbf51ad4502e05562fe9391d084e" - integrity sha512-hAEzXi6Wbvlb67NnGMGSNOeAflLVnMa4yliPU/ty1qjgW/vAletH15/v/esJwASSIA0YlIyjnloenFbEZc9q9A== + version "7.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5" + integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg== dependencies: "@sinonjs/commons" "^1.7.0" @@ -2056,22 +2057,22 @@ resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.14.tgz#59683b5407bede7bddf16d80dc5592f9c5e5fa05" integrity sha512-utJx+SZYoMqk8wldQG4gCVKhV8GwMJbWY7sLXFT/D8wWZTnE2peX7URFJh/cxkjTRCO328z1s2qewkhyVsu2HA== -"@truffle/interface-adapter@^0.4.24": - version "0.4.24" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.24.tgz#5d6d4f10c756e967f19ac2ad1620d11d25c034bb" - integrity sha512-2Zho4dJbm/XGwNleY7FdxcjXiAR3SzdGklgrAW4N/YVmltaJv6bT56ACIbPNN6AdzkTSTO65OlsB/63sfSa/VA== +"@truffle/interface-adapter@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.0.tgz#00c9e16fe0edafbfbf4b331fb4db178c9148c8fc" + integrity sha512-0MRt9orgQqo0knyKDy0fGRqnI+alkuK0BUAvHB1/VUJgCKyWBNAUUZO5gPjuj75qCjV4Rw+W6SKDQpn2xOWsXw== dependencies: bn.js "^5.1.3" ethers "^4.0.32" web3 "1.3.6" "@truffle/provider@^0.2.24": - version "0.2.31" - resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.31.tgz#4a52fedb663366a36214dc9f33772c832c941b61" - integrity sha512-IA1EYgwXX3sJgxmOEq6PDbSKaiOs4cSm1AImsZawomDW1MnmQY+6IotRrUsfUZsYPto/2ovNPfawNoxvAM0KzQ== + version "0.2.32" + resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.32.tgz#a2b6d9c74d151be3d91747a43a40f2ed08809a46" + integrity sha512-dzO7bnCO5iSLfoHH/SIIYQ5dUi9oVxtRE1qJ89dwKuUgtvaWOTPtZK1MLq7Ai+wrgNrYFKBVpxQjkCPXGdMWWw== dependencies: "@truffle/error" "^0.0.14" - "@truffle/interface-adapter" "^0.4.24" + "@truffle/interface-adapter" "^0.5.0" web3 "1.3.6" "@typechain/ethers-v5@1.0.0": @@ -2144,17 +2145,7 @@ dependencies: "@types/chai" "*" -"@types/chai@*", "@types/chai@^4.1.7": - version "4.2.16" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.16.tgz#f09cc36e18d28274f942e7201147cce34d97e8c8" - integrity sha512-vI5iOAsez9+roLS3M3+Xx7w+WRuDtSmF8bQkrbcIJ2sC1PcDgVoA0WGpa+bIrJ+y8zqY2oi//fUctkxtIcXJCw== - -"@types/chai@^4.2.17": - version "4.2.17" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.17.tgz#85f9f0610f514b22a94125d441f73eef65bde5cc" - integrity sha512-LaiwWNnYuL8xJlQcE91QB2JoswWZckq9A4b+nMPq8dt8AP96727Nb3X4e74u+E3tm4NLTILNI9MYFsyVc30wSA== - -"@types/chai@^4.2.18": +"@types/chai@*", "@types/chai@^4.1.7", "@types/chai@^4.2.17", "@types/chai@^4.2.18": version "4.2.18" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.18.tgz#0c8e298dbff8205e2266606c1ea5fbdba29b46e4" integrity sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ== @@ -2184,9 +2175,9 @@ integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== "@types/express-serve-static-core@^4.17.18": - version "4.17.20" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.20.tgz#44caee029f2c26c46711da5e845cdc12167ad72d" - integrity sha512-8qqFN4W53IEWa9bdmuVrUcVkFemQWnt5DKPQ/oa8xKDYgtjCr2OO6NX5TIK49NLFr3mPYU2cLh92DQquC3oWWQ== + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.21.tgz#a427278e106bca77b83ad85221eae709a3414d42" + integrity sha512-gwCiEZqW6f7EoR8TTEfalyEhb1zA5jQJnRngr97+3pzMaO1RKoI1w2bw07TK72renMUVWcWS5mLI6rk1NqN0nA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2230,9 +2221,9 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" - integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" @@ -2315,9 +2306,9 @@ form-data "^3.0.0" "@types/node@*": - version "15.6.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.1.tgz#32d43390d5c62c5b6ec486a9bc9c59544de39a08" - integrity sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA== + version "15.12.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.1.tgz#9b60797dee1895383a725f828a869c86c6caa5c2" + integrity sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw== "@types/node@^10.0.3": version "10.17.60" @@ -2330,9 +2321,9 @@ integrity sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g== "@types/node@^12.12.6", "@types/node@^12.7.1": - version "12.20.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.13.tgz#e743bae112bd779ac9650f907197dd2caa7f0364" - integrity sha512-1x8W5OpxPq+T85OUsHRP6BqXeosKmeXRtjoF39STcdf/UWLqUsoehstZKOi0CunhVqHG17AyZgpj20eRVooK6A== + version "12.20.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.14.tgz#9caf7eea0df08b406829889cc015256a6d81ab10" + integrity sha512-iFJOS5Q470FF+r4Ol2pSley7/wCNVqf+jgjhtxLLaJcDs+To2iCxlXIkJXrGLD9w9G/oJ9ibySu7z92DCwr7Pg== "@types/node@^8.0.0": version "8.10.66" @@ -2464,9 +2455,9 @@ "@types/sinon" "*" "@types/sinon@*": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.1.tgz#97ccb0482b750f5140ffdc661240ebbbe6e28d75" - integrity sha512-tZulsvuJwif5ddTBtscflI7gJcd+RpENcNZ7QCp0jKEl0bZY3Pu6PbJs4GR3SfQkGgsUa+FrlKsKQ0XyGNvDuA== + version "10.0.2" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.2.tgz#f360d2f189c0fd433d14aeb97b9d705d7e4cc0e4" + integrity sha512-BHn8Bpkapj8Wdfxvh2jWIUoaYB/9/XhsL0oOvBfRagJtKlSl9NWPcFOz2lRukI9szwGxFtYZCTejJSqsGDbdmw== dependencies: "@sinonjs/fake-timers" "^7.1.0" @@ -3896,7 +3887,7 @@ bytewise@~1.1.0: bytewise-core "^1.2.2" typewise "^1.0.3" -cacache@^15.0.5: +cacache@^15.0.5, cacache@^15.2.0: version "15.2.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389" integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw== @@ -4016,9 +4007,9 @@ camelcase@^6.0.0: integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== caniuse-lite@^1.0.30000844: - version "1.0.30001230" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71" - integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ== + version "1.0.30001234" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001234.tgz#8fc2e709e3b0679d7af7f073a1c661155c39b975" + integrity sha512-a3gjUVKkmwLdNysa1xkUAwN2VfJUJyVW47rsi3aCbkRCtbHAfo+rOsCqVw29G6coQ8gzAPb5XBXwiGHwme3isA== cardinal@^2.1.1: version "2.1.1" @@ -4422,9 +4413,9 @@ concat-stream@^2.0.0: typedarray "^0.0.6" config-chain@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" proto-list "~1.2.1" @@ -4586,9 +4577,9 @@ copyfiles@^2.3.0: yargs "^16.1.0" core-js-pure@^3.0.1: - version "3.13.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.13.0.tgz#9d267fb47d1d7046cfbc05e7b67bb235b6735355" - integrity sha512-7VTvXbsMxROvzPAVczLgfizR8CyYnvWPrb1eGrtlZAJfjQWEHLofVfCKljLHdpazTfpaziRORwUH/kfGDKvpdA== + version "3.13.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.13.1.tgz#5d139d346780f015f67225f45ee2362a6bed6ba1" + integrity sha512-wVlh0IAi2t1iOEh16y4u1TRk6ubd4KvLE8dlMi+3QUI6SfKphQUh7tAwihGGSQ8affxEXpVIPpOdf9kjR4v4Pw== core-js@^2.4.0, core-js@^2.5.0: version "2.6.12" @@ -5013,9 +5004,9 @@ detect-indent@^5.0.0: integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= detect-indent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" - integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== + version "6.1.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== detect-libc@^1.0.3: version "1.0.3" @@ -5080,9 +5071,9 @@ directory-tree@^2.2.7: integrity sha512-BOHxPNvP+XWijPkzoSBvr164IiNxRzvyAiWelbJsU/wG5OYXByer0+Aqo74G1qU+nRKC4yU/czmkmunkWdPPvQ== docker-compose@^0.23.8: - version "0.23.10" - resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-0.23.10.tgz#369fd2c6429754fb4134d3d29174a8c9569690e8" - integrity sha512-IzR6LzHrQyUvVwPNZY6F0oszAQLqHKOMNTN43Yu5aE6IBbhN9D/MpHbVUqHXTwzqIWiJM+ImYFjY5RdWWDGgfQ== + version "0.23.11" + resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-0.23.11.tgz#91485e3bbe20408e228afa57adacbe8099986c93" + integrity sha512-zLWAgEaCI2raqv2qwiDBs8kzFy7S5RUJ574EorF5ARICqC1/GwEWrFy56q41rd9RfwqWsVIhmxt02EcQ2oRDzQ== dependencies: yaml "^1.10.2" @@ -5167,9 +5158,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.47: - version "1.3.740" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.740.tgz#e38b7d2b848f632191b643e6dabca51be2162922" - integrity sha512-Mi2m55JrX2BFbNZGKYR+2ItcGnR4O5HhrvgoRRyZQlaMGQULqDhoGkLWHzJoshSzi7k1PUofxcDbNhlFrDZNhg== + version "1.3.748" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.748.tgz#16638a8130f407ae5bf2fc168f2173574deb36c5" + integrity sha512-fmIKfYALVeEybk/L2ucdgt7jN3JsbGtg3K9pmF/MRWgkeADBI1VSAa5IzdG2gZwTxsnsrFtdMpOTSM5mrBRKVQ== elliptic@6.5.3: version "6.5.3" @@ -5294,9 +5285,9 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.2.tgz#6eb518b640262e8ddcbd48e0bc8549f82efd48a7" - integrity sha512-byRiNIQXE6HWNySaU6JohoNXzYgbBjztwFnBLUTiJmWXjaU9bSq3urQLUlNLQ292tc+gc07zYZXNZjaOoAX3sw== + version "1.18.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" + integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -5786,7 +5777,7 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.7, ethereumjs-util@^7.0.9: +ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.5, ethereumjs-util@^7.0.7: version "7.0.10" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.10.tgz#5fb7b69fa1fda0acc59634cf39d6b0291180fc1f" integrity sha512-c/xThw6A+EAnej5Xk5kOzFzyoSnw0WX0tSlZ6pAsfGVvQj3TItaDg9b1+Fz1RJXA+y2YksKwQnuzgt1eY6LKzw== @@ -5901,41 +5892,41 @@ ethers@^4.0.32, ethers@^4.0.40: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.0.26, ethers@^5.0.31, ethers@^5.0.32, ethers@^5.1.0, ethers@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.2.0.tgz#13452e35947ab5d77053286d1f7161ee666c85ba" - integrity sha512-HqFGU2Qab0mAg3y1eHKVMXS4i1gTObMY0/4+x4LiO72NHhJL3Z795gnqyivmwG1J8e5NLSlRSfyIR7TL0Hw3ig== - dependencies: - "@ethersproject/abi" "5.2.0" - "@ethersproject/abstract-provider" "5.2.0" - "@ethersproject/abstract-signer" "5.2.0" - "@ethersproject/address" "5.2.0" - "@ethersproject/base64" "5.2.0" - "@ethersproject/basex" "5.2.0" - "@ethersproject/bignumber" "5.2.0" - "@ethersproject/bytes" "5.2.0" - "@ethersproject/constants" "5.2.0" - "@ethersproject/contracts" "5.2.0" - "@ethersproject/hash" "5.2.0" - "@ethersproject/hdnode" "5.2.0" - "@ethersproject/json-wallets" "5.2.0" - "@ethersproject/keccak256" "5.2.0" - "@ethersproject/logger" "5.2.0" - "@ethersproject/networks" "5.2.0" - "@ethersproject/pbkdf2" "5.2.0" - "@ethersproject/properties" "5.2.0" - "@ethersproject/providers" "5.2.0" - "@ethersproject/random" "5.2.0" - "@ethersproject/rlp" "5.2.0" - "@ethersproject/sha2" "5.2.0" - "@ethersproject/signing-key" "5.2.0" - "@ethersproject/solidity" "5.2.0" - "@ethersproject/strings" "5.2.0" - "@ethersproject/transactions" "5.2.0" - "@ethersproject/units" "5.2.0" - "@ethersproject/wallet" "5.2.0" - "@ethersproject/web" "5.2.0" - "@ethersproject/wordlists" "5.2.0" +ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.0.26, ethers@^5.0.31, ethers@^5.0.32, ethers@^5.1.0, ethers@^5.1.4, ethers@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.3.0.tgz#1ec14d09c461e8f2554b00cd080e94a3094e7e9d" + integrity sha512-myN+338S4sFQZvQ9trii7xit8Hu/LnUtjA0ROFOHpUreQc3fgLZEMNVqF3vM1u2D78DIIeG1TbuozVCVlXQWvQ== + dependencies: + "@ethersproject/abi" "5.3.0" + "@ethersproject/abstract-provider" "5.3.0" + "@ethersproject/abstract-signer" "5.3.0" + "@ethersproject/address" "5.3.0" + "@ethersproject/base64" "5.3.0" + "@ethersproject/basex" "5.3.0" + "@ethersproject/bignumber" "5.3.0" + "@ethersproject/bytes" "5.3.0" + "@ethersproject/constants" "5.3.0" + "@ethersproject/contracts" "5.3.0" + "@ethersproject/hash" "5.3.0" + "@ethersproject/hdnode" "5.3.0" + "@ethersproject/json-wallets" "5.3.0" + "@ethersproject/keccak256" "5.3.0" + "@ethersproject/logger" "5.3.0" + "@ethersproject/networks" "5.3.0" + "@ethersproject/pbkdf2" "5.3.0" + "@ethersproject/properties" "5.3.0" + "@ethersproject/providers" "5.3.0" + "@ethersproject/random" "5.3.0" + "@ethersproject/rlp" "5.3.0" + "@ethersproject/sha2" "5.3.0" + "@ethersproject/signing-key" "5.3.0" + "@ethersproject/solidity" "5.3.0" + "@ethersproject/strings" "5.3.0" + "@ethersproject/transactions" "5.3.0" + "@ethersproject/units" "5.3.0" + "@ethersproject/wallet" "5.3.0" + "@ethersproject/web" "5.3.0" + "@ethersproject/wordlists" "5.3.0" ethjs-unit@0.1.6: version "0.1.6" @@ -6008,9 +5999,9 @@ execa@^1.0.0: strip-eof "^1.0.0" execa@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" - integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" get-stream "^6.0.0" @@ -6426,10 +6417,10 @@ formidable@^1.2.2: resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fp-ts@1.19.3: version "1.19.3" @@ -7009,9 +7000,9 @@ hard-rejection@^2.1.0: integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== hardhat-deploy@^0.7.4: - version "0.7.9" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.7.9.tgz#67ed5408ac882ee7e70504ad344f59e2647da263" - integrity sha512-+8srf0vm5Y9SL2hR0UDUldwjHaXCl2S+TcbdeSyoZXacw7T930MOv3VIwZWru32rYc8bbGGsGSBMY8omafVlMw== + version "0.7.10" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.7.10.tgz#2bc94bf36db5f39aa488c6c6569f07d5ca4b410a" + integrity sha512-+0oiEWy/FgKOEzRNhSWPqSjofVCwtkK3E5x916kbZ5SgFGOjWTFCrWbWUYjzc2GyZgNXuSuRn8mBowHSLF4sVg== dependencies: "@ethersproject/abi" "^5.0.0" "@ethersproject/abstract-signer" "^5.0.0" @@ -7202,7 +7193,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.1.7: +hash.js@1.1.7, 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== @@ -8499,23 +8490,23 @@ levn@~0.3.0: type-check "~0.3.2" libnpmaccess@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.2.tgz#781832fb7ccb867b26343a75a85ad9c43e50406e" - integrity sha512-avXtJibZuGap0/qADDYqb9zdpgzVu/yG5+tl2sTRa7MCkDNv2ZlGwCYI0r6/+tmqXPj0iB9fKexHz426vB326w== + version "4.0.3" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz#dfb0e5b0a53c315a2610d300e46b4ddeb66e7eec" + integrity sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ== dependencies: aproba "^2.0.0" minipass "^3.1.1" npm-package-arg "^8.1.2" - npm-registry-fetch "^10.0.0" + npm-registry-fetch "^11.0.0" libnpmpublish@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.1.tgz#08ca2cbb5d7f6be1ce4f3f9c49b3822682bcf166" - integrity sha512-hZCrZ8v4G9YH3DxpIyBdob25ijD5v5LNzRbwsej4pPDopjdcLLj1Widl+BUeFa7D0ble1JYL4F3owjLJqiA8yA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz#be77e8bf5956131bcb45e3caa6b96a842dec0794" + integrity sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw== dependencies: normalize-package-data "^3.0.2" npm-package-arg "^8.1.2" - npm-registry-fetch "^10.0.0" + npm-registry-fetch "^11.0.0" semver "^7.1.3" ssri "^8.0.1" @@ -8791,6 +8782,28 @@ make-fetch-happen@^8.0.9: socks-proxy-agent "^5.0.0" ssri "^8.0.0" +make-fetch-happen@^9.0.1: + version "9.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.0.2.tgz#aa8c0e4a5e3a5f2be86c54d3abed44fe5a32ad5d" + integrity sha512-UkAWAuXPXSSlVviTjH2We20mtj1NnZW2Qq/oTY2dyMbRQ5CR3Xed3akCDMnM7j6axrMY80lhgM7loNE132PfAw== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^5.0.0" + ssri "^8.0.0" + map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" @@ -9008,7 +9021,7 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: rlp "^2.0.0" semaphore ">=1.0.1" -merkle-patricia-tree@^4.0.0, merkle-patricia-tree@^4.1.0: +merkle-patricia-tree@^4.0.0, merkle-patricia-tree@^4.1.0, merkle-patricia-tree@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.0.tgz#a204b9041be5c25e8d14f0ff47021de090e811a1" integrity sha512-0sBVXs7z1Q1/kxzWZ3nPnxSPiaHKF/f497UQzt9O7isRcS10tel9jM/4TivF6Jv7V1yFq4bWyoATxbDUOen5vQ== @@ -9072,17 +9085,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.47.0: - version "1.47.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" - integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== +mime-db@1.48.0: + version "1.48.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" + integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.30" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" - integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== + version "2.1.31" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" + integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== dependencies: - mime-db "1.47.0" + mime-db "1.48.0" mime@1.6.0: version "1.6.0" @@ -9521,7 +9534,7 @@ napi-macros@~2.0.0: resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== -negotiator@0.6.2: +negotiator@0.6.2, negotiator@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== @@ -9570,9 +9583,9 @@ node-addon-api@^2.0.0: integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== node-addon-api@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.0.tgz#7028b56a7eb572b73873aed731a7f9c9365f5ee4" - integrity sha512-kcwSAWhPi4+QzAtsL2+2s/awvDo2GKLsvMCwNRxb5BUshteXU8U97NCyvQDsGKs/m0He9WcG4YWew/BnuLx++w== + version "3.2.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== node-emoji@^1.10.0, node-emoji@^1.4.1: version "1.10.0" @@ -9742,16 +9755,16 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - normalize-url@^4.1.0: version "4.5.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +normalize-url@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.0.1.tgz#a4f27f58cf8c7b287b440b8a8201f42d0b00d256" + integrity sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ== + npm-bundled@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" @@ -9786,9 +9799,9 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.2.tgz#b868016ae7de5619e729993fbd8d11dc3c52ab62" - integrity sha512-6Eem455JsSMJY6Kpd3EyWE+n5hC+g9bSyHr9K9U2zqZb7+02+hObQ2c0+8iDk/mNF+8r1MhY44WypKJAkySIYA== + version "8.1.4" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.4.tgz#8001cdbc4363997b8ef6c6cf7aaf543c5805879d" + integrity sha512-xLokoCFqj/rPdr3LvcdDL6Kj6ipXGEDHD/QGpzwU6/pibYUOXmp5DBmg76yukFyx4ZDbrXNOTn+BPyd8TD4Jlw== dependencies: hosted-git-info "^4.0.1" semver "^7.3.4" @@ -9814,13 +9827,12 @@ npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1: npm-package-arg "^8.1.2" semver "^7.3.4" -npm-registry-fetch@^10.0.0: - version "10.1.2" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-10.1.2.tgz#11ffe03d813c653e768bdf762cfc5f1afe91b8bd" - integrity sha512-KsM/TdPmntqgBFlfsbkOLkkE9ovZo7VpVcd+/eTdYszCrgy5zFl5JzWm+OxavFaEWlbkirpkou+ZYI00RmOBFA== +npm-registry-fetch@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" + integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== dependencies: - lru-cache "^6.0.0" - make-fetch-happen "^8.0.9" + make-fetch-happen "^9.0.1" minipass "^3.1.3" minipass-fetch "^1.3.0" minipass-json-stream "^1.0.1" @@ -10227,9 +10239,9 @@ p-waterfall@^2.1.1: p-reduce "^2.0.0" pacote@^11.2.6: - version "11.3.3" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.3.tgz#d7d6091464f77c09691699df2ded13ab906b3e68" - integrity sha512-GQxBX+UcVZrrJRYMK2HoG+gPeSUX/rQhnbPkkGrCYa4n2F/bgClFPaMm0nsdnYrxnmUy85uMHoFXZ0jTD0drew== + version "11.3.4" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.4.tgz#c290b790a5cee3082bb8fa223f3f3e2fdf3d0bfc" + integrity sha512-RfahPCunM9GI7ryJV/zY0bWQiokZyLqaSNHXtbNSoLb7bwTvBbJBEyCJ01KWs4j1Gj7GmX8crYXQ1sNX6P2VKA== dependencies: "@npmcli/git" "^2.0.1" "@npmcli/installed-package-contents" "^1.0.6" @@ -10244,7 +10256,7 @@ pacote@^11.2.6: npm-package-arg "^8.0.1" npm-packlist "^2.1.4" npm-pick-manifest "^6.0.0" - npm-registry-fetch "^10.0.0" + npm-registry-fetch "^11.0.0" promise-retry "^2.0.1" read-package-json-fast "^2.0.1" rimraf "^3.0.2" @@ -10320,12 +10332,12 @@ parse-path@^4.0.0: query-string "^6.13.8" parse-url@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59" - integrity sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA== + version "5.0.3" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.3.tgz#c158560f14cb1560917e0b7fd8b01adc1e9d3cab" + integrity sha512-nrLCVMJpqo12X8uUJT4GJPd5AFaTOrGx/QpJy3HNcVtq0AZSstVIsnxS5fqNPuoqMUs3MyfBoOP6Zvu2Arok5A== dependencies: is-ssh "^1.3.0" - normalize-url "^3.3.0" + normalize-url "^6.0.1" parse-path "^4.0.0" protocols "^1.4.0" @@ -10601,9 +10613,9 @@ prebuild-install@^5.3.3, prebuild-install@^5.3.4: which-pm-runs "^1.0.0" prebuild-install@^6.0.0: - version "6.1.2" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.2.tgz#6ce5fc5978feba5d3cbffedca0682b136a0b5bff" - integrity sha512-PzYWIKZeP+967WuKYXlTOhYBgGOvTRSfaKI89XnfJ0ansRAH7hDU45X+K+FZeI1Wb/7p/NnuctPH3g0IqKUuSQ== + version "6.1.3" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.3.tgz#8ea1f9d7386a0b30f7ef20247e36f8b2b82825a2" + integrity sha512-iqqSR84tNYQUQHRXalSKdIaM8Ov1QxOVuBNWI7+BzZWv6Ih9k75wOnH1rGQ9WWTaaLkTpxWKIciOF0KyfM74+Q== dependencies: detect-libc "^1.0.3" expand-template "^2.0.3" @@ -10612,7 +10624,6 @@ prebuild-install@^6.0.0: mkdirp-classic "^0.5.3" napi-build-utils "^1.0.1" node-abi "^2.21.0" - noop-logger "^0.1.1" npmlog "^4.0.1" pump "^3.0.0" rc "^1.2.7" @@ -10743,11 +10754,11 @@ protocols@^1.1.0, protocols@^1.4.0: integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: - forwarded "~0.1.2" + forwarded "0.2.0" ipaddr.js "1.9.1" prr@~1.0.1: @@ -12735,9 +12746,9 @@ trim-newlines@^1.0.0: integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= trim-newlines@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" - integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== trim-off-newlines@^1.0.0: version "1.0.1" @@ -13285,9 +13296,9 @@ util.promisify@^1.0.0, util.promisify@^1.0.1: object.getownpropertydescriptors "^2.1.1" util@^0.12.0: - version "0.12.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" - integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== + version "0.12.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== dependencies: inherits "^2.0.3" is-arguments "^1.0.4" @@ -14092,10 +14103,10 @@ write-pkg@^4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" -ws@7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" - integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== +ws@7.4.6, ws@^7.2.1: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== ws@^3.0.0: version "3.3.3" @@ -14113,11 +14124,6 @@ ws@^5.1.1: dependencies: async-limiter "~1.0.0" -ws@^7.2.1: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - xhr-request-promise@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" From 10762b2da5e7901269ed3fe8320036e77266369f Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Fri, 4 Jun 2021 14:19:26 -0700 Subject: [PATCH 24/30] remove unneeded spreadsheet code --- .../omgx/message-relayer-fast/src/exec/run.ts | 31 ------------- .../omgx/message-relayer-fast/src/service.ts | 46 +------------------ .../message-relayer-fast/src/spreadsheet.ts | 25 ---------- 3 files changed, 2 insertions(+), 100 deletions(-) delete mode 100644 packages/omgx/message-relayer-fast/src/spreadsheet.ts diff --git a/packages/omgx/message-relayer-fast/src/exec/run.ts b/packages/omgx/message-relayer-fast/src/exec/run.ts index 00223b347e88..0648c4003952 100644 --- a/packages/omgx/message-relayer-fast/src/exec/run.ts +++ b/packages/omgx/message-relayer-fast/src/exec/run.ts @@ -1,7 +1,6 @@ import { Wallet, providers } from 'ethers' import { MessageRelayerService } from '../service' import { Bcfg } from '@eth-optimism/core-utils' -import SpreadSheet from '../spreadsheet' import * as dotenv from 'dotenv' import Config from 'bcfg' @@ -50,18 +49,6 @@ const main = async () => { parseInt(env.FROM_L2_TRANSACTION_INDEX, 10) || 0 ) - // Spreadsheet configuration - const SPREADSHEET_MODE = config.bool( - 'spreadsheet-mode', - !!env.SPREADSHEET_MODE || false - ) - const SHEET_ID = config.str('sheet-id', env.SHEET_ID) - const CLIENT_EMAIL = config.str('client-email', env.CLIENT_EMAIL) - const CLIENT_PRIVATE_KEY = config.str( - 'client-private-key', - env.CLIENT_PRIVATE_KEY - ) - if (!ADDRESS_MANAGER_ADDRESS) { throw new Error('Must pass ADDRESS_MANAGER_ADDRESS') } @@ -88,22 +75,6 @@ const main = async () => { throw new Error('Must pass one of L1_WALLET_KEY or MNEMONIC') } - let spreadsheet = null - if (SPREADSHEET_MODE) { - if (!SHEET_ID) { - throw new Error('Must pass SHEET_ID') - } - if (!CLIENT_EMAIL) { - throw new Error('Must pass CLIENT_EMAIL') - } - if (!CLIENT_PRIVATE_KEY) { - throw new Error('Must pass CLIENT_PRIVATE_KEY') - } - const privateKey = CLIENT_PRIVATE_KEY.replace(/\\n/g, '\n') - spreadsheet = new SpreadSheet(SHEET_ID) - await spreadsheet.init(CLIENT_EMAIL, privateKey) - } - const service = new MessageRelayerService({ l1RpcProvider: l1Provider, l2RpcProvider: l2Provider, @@ -116,8 +87,6 @@ const main = async () => { l2BlockOffset: L2_BLOCK_OFFSET, l1StartOffset: L1_START_OFFSET, getLogsInterval: GET_LOGS_INTERVAL, - spreadsheetMode: !!SPREADSHEET_MODE, - spreadsheet, }) await service.start() diff --git a/packages/omgx/message-relayer-fast/src/service.ts b/packages/omgx/message-relayer-fast/src/service.ts index 6d6bb3a39fc6..762bbf2e3223 100644 --- a/packages/omgx/message-relayer-fast/src/service.ts +++ b/packages/omgx/message-relayer-fast/src/service.ts @@ -6,7 +6,6 @@ import { MerkleTree } from 'merkletreejs' /* Imports: Internal */ import { fromHexString, sleep } from '@eth-optimism/core-utils' import { BaseService } from '@eth-optimism/common-ts' -import SpreadSheet from './spreadsheet' import { loadContract, loadContractFromManager } from '@eth-optimism/contracts' import { StateRootBatchHeader, SentMessage, SentMessageProof } from './types' @@ -44,9 +43,6 @@ interface MessageRelayerOptions { // Number of blocks within each getLogs query - max is 2000 getLogsInterval?: number - // Append txs to a spreadsheet instead of submitting transactions - spreadsheetMode?: boolean - spreadsheet?: SpreadSheet } const optionSettings = { @@ -56,7 +52,6 @@ const optionSettings = { l2BlockOffset: { default: 1 }, l1StartOffset: { default: 0 }, getLogsInterval: { default: 2000 }, - spreadsheetMode: { default: false }, } export class MessageRelayerService extends BaseService { @@ -64,9 +59,6 @@ export class MessageRelayerService extends BaseService { super('Message_Relayer', options, optionSettings) } - protected spreadsheetMode: boolean - protected spreadsheet: SpreadSheet - private state: { lastFinalizedTxHeight: number nextUnfinalizedTxHeight: number @@ -86,7 +78,6 @@ export class MessageRelayerService extends BaseService { pollingInterval: this.options.pollingInterval, l2BlockOffset: this.options.l2BlockOffset, getLogsInterval: this.options.getLogsInterval, - spreadSheetMode: this.options.spreadsheetMode, }) // Need to improve this, sorry. this.state = {} as any @@ -145,10 +136,6 @@ export class MessageRelayerService extends BaseService { this.logger.info('Connected to all contracts.') - if (this.options.spreadsheetMode) { - this.logger.info('Running in spreadsheet mode') - } - this.state.lastQueriedL1Block = this.options.l1StartOffset this.state.eventCache = [] @@ -458,35 +445,7 @@ export class MessageRelayerService extends BaseService { message: SentMessage, proof: SentMessageProof ): Promise { - if (this.options.spreadsheetMode) { - try { - await this.options.spreadsheet.addRow({ - target: message.target, - sender: message.sender, - message: message.message, - messageNonce: message.messageNonce.toString(), - encodedMessage: message.encodedMessage, - encodedMessageHash: message.encodedMessageHash, - parentTransactionIndex: message.parentTransactionIndex, - parentTransactionHash: message.parentTransactionIndex, - stateRoot: proof.stateRoot, - batchIndex: proof.stateRootBatchHeader.batchIndex.toString(), - batchRoot: proof.stateRootBatchHeader.batchRoot, - batchSize: proof.stateRootBatchHeader.batchSize.toString(), - prevTotalElements: - proof.stateRootBatchHeader.prevTotalElements.toString(), - extraData: proof.stateRootBatchHeader.extraData, - index: proof.stateRootProof.index, - siblings: proof.stateRootProof.siblings.join(','), - stateTrieWitness: proof.stateTrieWitness.toString('hex'), - storageTrieWitness: proof.storageTrieWitness.toString('hex'), - }) - this.logger.info('Submitted relay message to spreadsheet') - } catch (e) { - this.logger.error('Cannot submit message to spreadsheet') - this.logger.error(e.message) - } - } else { + try { this.logger.info( 'Dry-run, checking to make sure proof would succeed...' @@ -554,5 +513,4 @@ export class MessageRelayerService extends BaseService { } this.logger.info('Message successfully relayed to Layer 1!') } - } -} + } \ No newline at end of file diff --git a/packages/omgx/message-relayer-fast/src/spreadsheet.ts b/packages/omgx/message-relayer-fast/src/spreadsheet.ts deleted file mode 100644 index bf1260c88746..000000000000 --- a/packages/omgx/message-relayer-fast/src/spreadsheet.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { GoogleSpreadsheet } from 'google-spreadsheet' - -export default class SpreadSheet { - public doc - public sheet - - constructor(id) { - this.doc = new GoogleSpreadsheet(id) - this.sheet = null - } - - async init(email, privateKey) { - await this.doc.useServiceAccountAuth({ - client_email: email, - private_key: privateKey, - }) - - await this.doc.loadInfo() - this.sheet = this.doc.sheetsByIndex[0] - } - - async addRow(row) { - return this.sheet.addRow(row) - } -} From 531ee02dbf3f555edbe4dad33c14faf863332719 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Fri, 4 Jun 2021 19:31:07 -0700 Subject: [PATCH 25/30] fix truffle networkID and more linting --- examples/truffle/truffle-config-ovm.js | 2 +- packages/contracts/hardhat.config.ts | 8 -- .../omgx/message-relayer-fast/src/service.ts | 102 +++++++++--------- packages/omgx/wallet/hardhat.config.ts | 2 +- packages/smock/src/smockit/binding.ts | 17 ++- packages/smock/src/smockit/smockit.ts | 4 +- 6 files changed, 57 insertions(+), 78 deletions(-) diff --git a/examples/truffle/truffle-config-ovm.js b/examples/truffle/truffle-config-ovm.js index b7b849d43ee4..4b81421b11b2 100644 --- a/examples/truffle/truffle-config-ovm.js +++ b/examples/truffle/truffle-config-ovm.js @@ -13,7 +13,7 @@ module.exports = { providerOrUrl: 'http://127.0.0.1:8545' }) }, - network_id: 420, + network_id: 28, host: '127.0.0.1', port: 8545, gasPrice: 0, diff --git a/packages/contracts/hardhat.config.ts b/packages/contracts/hardhat.config.ts index 681216d7a5d8..1708509fde72 100644 --- a/packages/contracts/hardhat.config.ts +++ b/packages/contracts/hardhat.config.ts @@ -76,14 +76,6 @@ const config: HardhatUserConfig = { }, } -/* -old: DEPLOYER_PRIVATE_KEY -new: CONTRACTS_DEPLOYER_KEY - -old: L1_NODE_WEB3_URL -new: CONTRACTS_RPC_URL -*/ - if ( process.env.CONTRACTS_TARGET_NETWORK && process.env.CONTRACTS_DEPLOYER_KEY && diff --git a/packages/omgx/message-relayer-fast/src/service.ts b/packages/omgx/message-relayer-fast/src/service.ts index 762bbf2e3223..6c279332367e 100644 --- a/packages/omgx/message-relayer-fast/src/service.ts +++ b/packages/omgx/message-relayer-fast/src/service.ts @@ -42,7 +42,6 @@ interface MessageRelayerOptions { // Number of blocks within each getLogs query - max is 2000 getLogsInterval?: number - } const optionSettings = { @@ -445,40 +444,12 @@ export class MessageRelayerService extends BaseService { message: SentMessage, proof: SentMessageProof ): Promise { + try { + this.logger.info('Dry-run, checking to make sure proof would succeed...') - try { - this.logger.info( - 'Dry-run, checking to make sure proof would succeed...' - ) - - await this.state.OVM_L1CrossDomainMessenger.connect( - this.options.l1Wallet - ).callStatic.relayMessage( - message.target, - message.sender, - message.message, - message.messageNonce, - proof, - { - gasLimit: this.options.relayGasLimit, - } - ) - - this.logger.info( - 'Proof should succeed. Submitting for real this time...' - ) - } catch (err) { - this.logger.error('Proof would fail, skipping', { - message: err.toString(), - stack: err.stack, - code: err.code, - }) - return - } - - const result = await this.state.OVM_L1CrossDomainMessenger.connect( + await this.state.OVM_L1CrossDomainMessenger.connect( this.options.l1Wallet - ).relayMessage( + ).callStatic.relayMessage( message.target, message.sender, message.message, @@ -489,28 +460,51 @@ export class MessageRelayerService extends BaseService { } ) - this.logger.info('Relay message transaction sent', { - transactionHash: result, + this.logger.info('Proof should succeed. Submitting for real this time...') + } catch (err) { + this.logger.error('Proof would fail, skipping', { + message: err.toString(), + stack: err.stack, + code: err.code, }) + return + } - try { - const receipt = await result.wait() - - this.logger.info('Relay message included in block', { - transactionHash: receipt.transactionHash, - blockNumber: receipt.blockNumber, - gasUsed: receipt.gasUsed.toString(), - confirmations: receipt.confirmations, - status: receipt.status, - }) - } catch (err) { - this.logger.error('Real relay attempt failed, skipping.', { - message: err.toString(), - stack: err.stack, - code: err.code, - }) - return + const result = await this.state.OVM_L1CrossDomainMessenger.connect( + this.options.l1Wallet + ).relayMessage( + message.target, + message.sender, + message.message, + message.messageNonce, + proof, + { + gasLimit: this.options.relayGasLimit, } - this.logger.info('Message successfully relayed to Layer 1!') + ) + + this.logger.info('Relay message transaction sent', { + transactionHash: result, + }) + + try { + const receipt = await result.wait() + + this.logger.info('Relay message included in block', { + transactionHash: receipt.transactionHash, + blockNumber: receipt.blockNumber, + gasUsed: receipt.gasUsed.toString(), + confirmations: receipt.confirmations, + status: receipt.status, + }) + } catch (err) { + this.logger.error('Real relay attempt failed, skipping.', { + message: err.toString(), + stack: err.stack, + code: err.code, + }) + return } - } \ No newline at end of file + this.logger.info('Message successfully relayed to Layer 1!') + } +} diff --git a/packages/omgx/wallet/hardhat.config.ts b/packages/omgx/wallet/hardhat.config.ts index 228d804ba828..1d650223c45d 100644 --- a/packages/omgx/wallet/hardhat.config.ts +++ b/packages/omgx/wallet/hardhat.config.ts @@ -5,7 +5,7 @@ import '@eth-optimism/hardhat-ovm' const config: HardhatUserConfig = { mocha: { - timeout: 200000, + timeout: 60000, }, networks: { omgx: { diff --git a/packages/smock/src/smockit/binding.ts b/packages/smock/src/smockit/binding.ts index 3436d6390cff..f03b56b62341 100644 --- a/packages/smock/src/smockit/binding.ts +++ b/packages/smock/src/smockit/binding.ts @@ -8,12 +8,12 @@ import BN from 'bn.js' let TransactionExecutionError: any try { // tslint:disable-next-line - TransactionExecutionError = require('hardhat/internal/hardhat-network/provider/errors') - .TransactionExecutionError + TransactionExecutionError = + require('hardhat/internal/hardhat-network/provider/errors').TransactionExecutionError } catch (err) { // tslint:disable-next-line - TransactionExecutionError = require('hardhat/internal/core/providers/errors') - .TransactionExecutionError + TransactionExecutionError = + require('hardhat/internal/core/providers/errors').TransactionExecutionError } /* Imports: Internal */ @@ -112,13 +112,8 @@ const initializeSmock = (provider: HardhatNetworkProvider): void => { // Compute the mock return data. const mock: MockContract = vm._smockState.mocks[target] - const { - resolve, - functionName, - rawReturnValue, - returnValue, - gasUsed, - } = await mock._smockit(message.data) + const { resolve, functionName, rawReturnValue, returnValue, gasUsed } = + await mock._smockit(message.data) // Set the mock return data, potentially set the `exceptionError` field if the user requested // a revert. diff --git a/packages/smock/src/smockit/smockit.ts b/packages/smock/src/smockit/smockit.ts index 1673064518aa..5403b02915be 100644 --- a/packages/smock/src/smockit/smockit.ts +++ b/packages/smock/src/smockit/smockit.ts @@ -197,9 +197,7 @@ export const smockit = async ( } // TODO: Make this less of a hack. - ;(contract as any)._smockit = async function ( - data: Buffer - ): Promise<{ + ;(contract as any)._smockit = async function (data: Buffer): Promise<{ resolve: 'return' | 'revert' functionName: string rawReturnValue: any From 6757064f111e8b1f582b1c80342496ed04a43f08 Mon Sep 17 00:00:00 2001 From: cby3149 <46272347+cby3149@users.noreply.github.com> Date: Mon, 7 Jun 2021 11:35:45 -0700 Subject: [PATCH 26/30] Updated addresses (#45) --- packages/message-relayer/lambda/whitelist.py | 3 ++- packages/omgx/wallet/contracts/TokenPool.sol | 7 +++--- .../wallet/deployment/rinkeby/addresses.json | 22 ++++++++++--------- packages/omgx/wallet/test/a_setup.spec.ts | 4 ++-- .../wallet/src/containers/account/Account.js | 2 +- .../wallet/wallet/src/containers/home/Home.js | 5 ++--- .../src/deployment/rinkeby/addresses.json | 22 ++++++++++--------- .../wallet/src/services/networkService.js | 8 +++---- 8 files changed, 38 insertions(+), 35 deletions(-) diff --git a/packages/message-relayer/lambda/whitelist.py b/packages/message-relayer/lambda/whitelist.py index 12017b95d3f3..955bf845f9c4 100644 --- a/packages/message-relayer/lambda/whitelist.py +++ b/packages/message-relayer/lambda/whitelist.py @@ -2,7 +2,8 @@ def get_whitelist(event, context): whitelist = [ - "0x455c31AF3Bb2e3f4300F517bd246E39b4A7f49c5", + "0xb1b9F48d1DFF3C08288c73117FC21fAE47c5a8Ec", + "0x79F81178B1358F209dbFCeC57f42918CC3a36cEC" ] response = { "statusCode": 201, diff --git a/packages/omgx/wallet/contracts/TokenPool.sol b/packages/omgx/wallet/contracts/TokenPool.sol index 70128f22d34d..d18c816d629e 100644 --- a/packages/omgx/wallet/contracts/TokenPool.sol +++ b/packages/omgx/wallet/contracts/TokenPool.sol @@ -1,12 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity >0.5.0; -import '@openzeppelin/contracts/token/ERC20/SafeERC20.sol'; import '@openzeppelin/contracts/math/SafeMath.sol'; import '@openzeppelin/contracts/access/Ownable.sol'; +import './L2DepositedERC20.sol'; contract TokenPool is Ownable { - using SafeERC20 for IERC20; using SafeMath for uint256; mapping(address => uint256) lastRequest; @@ -29,9 +28,9 @@ contract TokenPool is Ownable { function requestToken() public - { + { require(lastRequest[msg.sender].add(3600) <= block.timestamp, "Request limit"); - IERC20(tokenAddress).safeTransfer(msg.sender, 10e18); + L2DepositedERC20(tokenAddress).transfer(msg.sender, 10e18); lastRequest[msg.sender] = block.timestamp; emit RequestToken(msg.sender, block.timestamp, 10e18); diff --git a/packages/omgx/wallet/deployment/rinkeby/addresses.json b/packages/omgx/wallet/deployment/rinkeby/addresses.json index eb35a2d14e15..a22f359941eb 100644 --- a/packages/omgx/wallet/deployment/rinkeby/addresses.json +++ b/packages/omgx/wallet/deployment/rinkeby/addresses.json @@ -1,12 +1,14 @@ { - "L1LiquidityPool": "0xB90B4418b15ac78eE592F12f1668E066745FAb89", - "L2LiquidityPool": "0x6418E5Da52A3d7543d393ADD3Fa98B0795d27736", - "L1ERC20": "0xa1faF62b538206Aafd556237dDeBF71e5e2253f5", - "L2DepositedERC20": "0x9934FC453d11334e6bFbE5D3856A2c0E917D26f1", - "L1ERC20Gateway": "0xb7F6458b6Ab078241437bB771404912582dD6f47", - "l1ETHGatewayAddress": "0x2F409ed85de987D1190CAD5dbe089ccD880C585b", - "l1MessengerAddress": "0xA695d1F761D1489148bdEd0cb1811b50A72b7D75", - "L2ERC721": "0x5952bFfE9d6C232439E265D0E1A775Bc721AFA90", - "L2TokenPool": "0x3C38fd8D4e647b230D006d98793Fa3A0ec60bC41", - "AtomicSwap": "0xd898b4D61cA2b55754e90C3F9D6006d85eefe6Ee" + "L1LiquidityPool": "0xb1b9F48d1DFF3C08288c73117FC21fAE47c5a8Ec", + "L2LiquidityPool": "0xA01de1D54bB41eb61B19D4ca4E64ce273B2F5a72", + "L1ERC20": "0xf64BBDb113C6082891444057E380862B3500F778", + "L2DepositedERC20": "0x870D429254A0B056d31E26C713d9A94A90B3Fb6C", + "L1ERC20Gateway": "0x6FC5b1854a3666c772FC347b0C65b2c63CB0Df3c", + "l1ETHGatewayAddress": "0x2d8f019DC35220c1DE40Ba175694CD87e990b33f", + "l1MessengerAddress": "0x49BE134fDa420540BbCCad0dDEed4aE0BB939Bae", + "L2TokenPool": "0xd71B2b3B29cF5A4B1Ca669B25E858a4E9F735ecd", + "AtomicSwap": "0xb59d474a17249B8dB9E17c53A2Dd2F08c3378783", + "L1Message": "0x79F81178B1358F209dbFCeC57f42918CC3a36cEC", + "L2Message": "0x1484754034B52c2802F859684671E3588b46B031", + "L2ERC721": "0xf2F253520AC17c461059Ea52E7eDE3D2381d3C8d" } \ No newline at end of file diff --git a/packages/omgx/wallet/test/a_setup.spec.ts b/packages/omgx/wallet/test/a_setup.spec.ts index 63810644f167..3eef7fb2179d 100644 --- a/packages/omgx/wallet/test/a_setup.spec.ts +++ b/packages/omgx/wallet/test/a_setup.spec.ts @@ -90,13 +90,13 @@ describe('System setup', async () => { Factory__L2TokenPool = new ContractFactory( L2TokenPoolJson.abi, L2TokenPoolJson.bytecode, - env.bobl1Wallet + env.bobl2Wallet ) Factory__AtomicSwap = new ContractFactory( AtomicSwapJson.abi, AtomicSwapJson.bytecode, - env.bobl1Wallet + env.bobl2Wallet ) Factory__L1Message = new ContractFactory( diff --git a/packages/omgx/wallet/wallet/src/containers/account/Account.js b/packages/omgx/wallet/wallet/src/containers/account/Account.js index c5f006cdd14e..43958eb047f6 100644 --- a/packages/omgx/wallet/wallet/src/containers/account/Account.js +++ b/packages/omgx/wallet/wallet/src/containers/account/Account.js @@ -86,7 +86,7 @@ function Account () { const handleGetToken = async () => { const res = await networkService.getTestToken(); if (res) { - dispatch(openAlert('5 test tokens were sent to your wallet')); + dispatch(openAlert('10 test tokens were sent to your wallet')); } else { dispatch(openError('Your reached the limit')); } diff --git a/packages/omgx/wallet/wallet/src/containers/home/Home.js b/packages/omgx/wallet/wallet/src/containers/home/Home.js index bbf1ddf5ec07..df60ebb0753c 100644 --- a/packages/omgx/wallet/wallet/src/containers/home/Home.js +++ b/packages/omgx/wallet/wallet/src/containers/home/Home.js @@ -71,7 +71,7 @@ import logo from 'images/omgx.png'; import * as styles from './Home.module.scss'; -const POLL_INTERVAL = 1000; //in milliseconds? +const POLL_INTERVAL = 10000; //in milliseconds? function Home () { @@ -119,11 +119,10 @@ function Home () { // watcher only calls dispatch(checkWatcherStatus()); - dispatch(fetchBalances()); dispatch(fetchExits()); dispatch(fetchTransactions()); }); - }, POLL_INTERVAL * 5); + }, POLL_INTERVAL * 2); useInterval(() => { dispatch(fetchBalances()); diff --git a/packages/omgx/wallet/wallet/src/deployment/rinkeby/addresses.json b/packages/omgx/wallet/wallet/src/deployment/rinkeby/addresses.json index eb35a2d14e15..a22f359941eb 100644 --- a/packages/omgx/wallet/wallet/src/deployment/rinkeby/addresses.json +++ b/packages/omgx/wallet/wallet/src/deployment/rinkeby/addresses.json @@ -1,12 +1,14 @@ { - "L1LiquidityPool": "0xB90B4418b15ac78eE592F12f1668E066745FAb89", - "L2LiquidityPool": "0x6418E5Da52A3d7543d393ADD3Fa98B0795d27736", - "L1ERC20": "0xa1faF62b538206Aafd556237dDeBF71e5e2253f5", - "L2DepositedERC20": "0x9934FC453d11334e6bFbE5D3856A2c0E917D26f1", - "L1ERC20Gateway": "0xb7F6458b6Ab078241437bB771404912582dD6f47", - "l1ETHGatewayAddress": "0x2F409ed85de987D1190CAD5dbe089ccD880C585b", - "l1MessengerAddress": "0xA695d1F761D1489148bdEd0cb1811b50A72b7D75", - "L2ERC721": "0x5952bFfE9d6C232439E265D0E1A775Bc721AFA90", - "L2TokenPool": "0x3C38fd8D4e647b230D006d98793Fa3A0ec60bC41", - "AtomicSwap": "0xd898b4D61cA2b55754e90C3F9D6006d85eefe6Ee" + "L1LiquidityPool": "0xb1b9F48d1DFF3C08288c73117FC21fAE47c5a8Ec", + "L2LiquidityPool": "0xA01de1D54bB41eb61B19D4ca4E64ce273B2F5a72", + "L1ERC20": "0xf64BBDb113C6082891444057E380862B3500F778", + "L2DepositedERC20": "0x870D429254A0B056d31E26C713d9A94A90B3Fb6C", + "L1ERC20Gateway": "0x6FC5b1854a3666c772FC347b0C65b2c63CB0Df3c", + "l1ETHGatewayAddress": "0x2d8f019DC35220c1DE40Ba175694CD87e990b33f", + "l1MessengerAddress": "0x49BE134fDa420540BbCCad0dDEed4aE0BB939Bae", + "L2TokenPool": "0xd71B2b3B29cF5A4B1Ca669B25E858a4E9F735ecd", + "AtomicSwap": "0xb59d474a17249B8dB9E17c53A2Dd2F08c3378783", + "L1Message": "0x79F81178B1358F209dbFCeC57f42918CC3a36cEC", + "L2Message": "0x1484754034B52c2802F859684671E3588b46B031", + "L2ERC721": "0xf2F253520AC17c461059Ea52E7eDE3D2381d3C8d" } \ No newline at end of file diff --git a/packages/omgx/wallet/wallet/src/services/networkService.js b/packages/omgx/wallet/wallet/src/services/networkService.js index af62376b6db6..6d1762d5ed14 100644 --- a/packages/omgx/wallet/wallet/src/services/networkService.js +++ b/packages/omgx/wallet/wallet/src/services/networkService.js @@ -748,8 +748,8 @@ class NetworkService { const [l2ToL1msgHash] = await this.watcher.getMessageHashesFromL2Tx(tx.hash) console.log(' got L2->L1 message hash', l2ToL1msgHash) - const l1Receipt = await this.watcher.getL1TransactionReceipt(l2ToL1msgHash) - console.log(' completed Deposit! L1 tx hash:', l1Receipt.transactionHash) + // const l1Receipt = await this.watcher.getL1TransactionReceipt(l2ToL1msgHash) + // console.log(' completed Deposit! L1 tx hash:', l1Receipt.transactionHash) return tx } @@ -764,8 +764,8 @@ class NetworkService { const [l2ToL1msgHash] = await this.watcher.getMessageHashesFromL2Tx(tx.hash) console.log(' got L2->L1 message hash', l2ToL1msgHash) - const l1Receipt = await this.watcher.getL1TransactionReceipt(l2ToL1msgHash) - console.log(' completed Deposit! L1 tx hash:', l1Receipt.transactionHash) + // const l1Receipt = await this.watcher.getL1TransactionReceipt(l2ToL1msgHash) + // console.log(' completed Deposit! L1 tx hash:', l1Receipt.transactionHash) return tx } From 0b929ffd8818d63b9f7372d5b7ba8c96dfdf6cfd Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Mon, 7 Jun 2021 23:30:36 -0700 Subject: [PATCH 27/30] update fraud-prover .env and accomodate L2 fee = enabled --- packages/omgx/fraud-prover/.env.example | 12 ++++----- packages/omgx/fraud-prover/hardhat.config.ts | 6 ++++- .../omgx/fraud-prover/test/a_setup.spec.ts | 26 ++++++++++++++----- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/packages/omgx/fraud-prover/.env.example b/packages/omgx/fraud-prover/.env.example index 4891092d6173..92dea0ef99c1 100644 --- a/packages/omgx/fraud-prover/.env.example +++ b/packages/omgx/fraud-prover/.env.example @@ -3,12 +3,12 @@ NODE_ENV=local L1_NODE_WEB3_URL=http://localhost:9545 L2_NODE_WEB3_URL=http://localhost:8545 VERIFIER_WEB3_URL=http://localhost:8045 -ADDRESS_MANAGER_ADDRESS=0x3e4CFaa8730092552d9425575E49bB542e329981 -L1_WALLET_KEY=0x5b1c2653250e5c580dcb4e51c2944455e144c57ebd6a0645bd359d2e69ca0f0c -ETH1_ADDRESS_RESOLVER_ADDRESS=0x3e4CFaa8730092552d9425575E49bB542e329981 -TEST_PRIVATE_KEY_1=0x754fde3f5e60ef2c7649061e06957c29017fe21032a8017132c0078e37f6193a -TEST_PRIVATE_KEY_2=0x23d9aeeaa08ab710a57972eb56fc711d9ab13afdecc92c89586e0150bfa380a6 -FRAUD_PRIVATE_KEY=0xce2b97944c381b369135a9b5f58481e288627e23f963692a03e1464490316d99 +ADDRESS_MANAGER_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3 +ETH1_ADDRESS_RESOLVER_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3 +L1_WALLET_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 +TEST_PRIVATE_KEY_1=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d +TEST_PRIVATE_KEY_2=0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a +FRAUD_PRIVATE_KEY=0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a L1_BLOCK_OFFSET=0 L1_START_OFFSET=0 L2_BLOCK_OFFSET=1 diff --git a/packages/omgx/fraud-prover/hardhat.config.ts b/packages/omgx/fraud-prover/hardhat.config.ts index 8cef1d8f10a8..d304e0d00717 100644 --- a/packages/omgx/fraud-prover/hardhat.config.ts +++ b/packages/omgx/fraud-prover/hardhat.config.ts @@ -11,6 +11,10 @@ const config: HardhatUserConfig = { networks: { omgx: { url: 'http://localhost:8545', //never is actually used - set by the .env + // This sets the gas price to 0 for all transactions on L2. We do this + // because account balances are not automatically initiated with an ETH + // balance. + gasPrice: 0, ovm: true, }, }, @@ -20,4 +24,4 @@ const config: HardhatUserConfig = { }, } -export default config +export default config \ No newline at end of file diff --git a/packages/omgx/fraud-prover/test/a_setup.spec.ts b/packages/omgx/fraud-prover/test/a_setup.spec.ts index 5bc6df322d45..37ff92b72912 100644 --- a/packages/omgx/fraud-prover/test/a_setup.spec.ts +++ b/packages/omgx/fraud-prover/test/a_setup.spec.ts @@ -74,7 +74,8 @@ describe('System setup', async () => { L2DepositedERC20 = await Factory__L2DepositedERC20.deploy( env.watcher.l2.messengerAddress, tokenName, - tokenSymbol + tokenSymbol, + {gasLimit: 800000, gasPrice: 0} ) await L2DepositedERC20.deployTransaction.wait() console.log('L2DepositedERC20 deployed to:', L2DepositedERC20.address) @@ -90,7 +91,10 @@ describe('System setup', async () => { console.log('L1ERC20Gateway deployed to:', L1ERC20Gateway.address) //Initialize the contracts for the new token - const initL2 = await L2DepositedERC20.init(L1ERC20Gateway.address) + const initL2 = await L2DepositedERC20.init( + L1ERC20Gateway.address, + {gasLimit: 800000, gasPrice: 0} + ) await initL2.wait() console.log('L2 ERC20 initialized:', initL2.hash) }) @@ -149,13 +153,15 @@ describe('System setup', async () => { const tranferToAliceTX = await L2DepositedERC20.transfer( env.alicel2Wallet.address, - transferL2ERC20Amount + transferL2ERC20Amount, + {gasLimit: 800000, gasPrice: 0} ) await tranferToAliceTX.wait() const tranferToFraudTX = await L2DepositedERC20.transfer( env.fraudl2Wallet.address, - transferL2ERC20Amount + transferL2ERC20Amount, + {gasLimit: 800000, gasPrice: 0} ) await tranferToFraudTX.wait() @@ -200,7 +206,11 @@ describe('System setup', async () => { const tranferToFraudTX = await L2DepositedERC20.connect( env.alicel2Wallet - ).transfer(env.fraudl2Wallet.address, transferL2ERC20Amount) + ).transfer( + env.fraudl2Wallet.address, + transferL2ERC20Amount, + {gasLimit: 800000, gasPrice: 0} + ) await tranferToFraudTX.wait() const postAliceL2ERC20Balance = await L2DepositedERC20.balanceOf( @@ -237,7 +247,11 @@ describe('System setup', async () => { const tranferToFraudTX = await L2DepositedERC20.connect( env.fraudl2Wallet - ).transfer(env.bobl2Wallet.address, transferL2ERC20Amount) + ).transfer( + env.bobl2Wallet.address, + transferL2ERC20Amount, + {gasLimit: 800000, gasPrice: 0} + ) await tranferToFraudTX.wait() const postBobL2ERC20Balance = await L2DepositedERC20.balanceOf( From cd5f05afdf9b7a5833b8d6690fdb302e2a628fec Mon Sep 17 00:00:00 2001 From: cby3149 Date: Tue, 8 Jun 2021 04:26:44 -0700 Subject: [PATCH 28/30] Update addresses.json --- .gitignore | 3 +++ .../hardhat.config.js | 2 +- packages/message-relayer/lambda/whitelist.py | 4 ++-- .../wallet/deployment/rinkeby/addresses.json | 24 +++++++++---------- packages/omgx/wallet/wallet/src/Settings.js | 2 -- .../wallet/src/actions/serviceAction.js | 2 +- .../src/deployment/rinkeby/addresses.json | 24 +++++++++---------- 7 files changed, 31 insertions(+), 30 deletions(-) diff --git a/.gitignore b/.gitignore index 6b49063deddf..3b96ad85ee8d 100644 --- a/.gitignore +++ b/.gitignore @@ -20,12 +20,15 @@ packages/contracts/hardhat* packages/data-transport-layer/db +packages/omgx/wallet/wallet/build + # vim *.swp .env env.js env.yml +env.js .serverless packages/omgx/wallet/deployment/local/addresses.json diff --git a/examples/l1-l2-deposit-withdrawal/hardhat.config.js b/examples/l1-l2-deposit-withdrawal/hardhat.config.js index 6cafbf7ca3cd..42a126edf8fc 100644 --- a/examples/l1-l2-deposit-withdrawal/hardhat.config.js +++ b/examples/l1-l2-deposit-withdrawal/hardhat.config.js @@ -20,6 +20,6 @@ module.exports = { solcVersion: '0.7.6' }, mocha: { - timeout: 60000 + timeout: 300000 } } diff --git a/packages/message-relayer/lambda/whitelist.py b/packages/message-relayer/lambda/whitelist.py index 955bf845f9c4..1bada37ae7ca 100644 --- a/packages/message-relayer/lambda/whitelist.py +++ b/packages/message-relayer/lambda/whitelist.py @@ -2,8 +2,8 @@ def get_whitelist(event, context): whitelist = [ - "0xb1b9F48d1DFF3C08288c73117FC21fAE47c5a8Ec", - "0x79F81178B1358F209dbFCeC57f42918CC3a36cEC" + "0xD0Fb87bf4017e0A5A3bcE2eF33Bf0B95348a479E", + "0x1383fF5A0Ef67f4BE949408838478917d87FeAc7", ] response = { "statusCode": 201, diff --git a/packages/omgx/wallet/deployment/rinkeby/addresses.json b/packages/omgx/wallet/deployment/rinkeby/addresses.json index a22f359941eb..5e00118fd372 100644 --- a/packages/omgx/wallet/deployment/rinkeby/addresses.json +++ b/packages/omgx/wallet/deployment/rinkeby/addresses.json @@ -1,14 +1,14 @@ { - "L1LiquidityPool": "0xb1b9F48d1DFF3C08288c73117FC21fAE47c5a8Ec", - "L2LiquidityPool": "0xA01de1D54bB41eb61B19D4ca4E64ce273B2F5a72", - "L1ERC20": "0xf64BBDb113C6082891444057E380862B3500F778", - "L2DepositedERC20": "0x870D429254A0B056d31E26C713d9A94A90B3Fb6C", - "L1ERC20Gateway": "0x6FC5b1854a3666c772FC347b0C65b2c63CB0Df3c", - "l1ETHGatewayAddress": "0x2d8f019DC35220c1DE40Ba175694CD87e990b33f", - "l1MessengerAddress": "0x49BE134fDa420540BbCCad0dDEed4aE0BB939Bae", - "L2TokenPool": "0xd71B2b3B29cF5A4B1Ca669B25E858a4E9F735ecd", - "AtomicSwap": "0xb59d474a17249B8dB9E17c53A2Dd2F08c3378783", - "L1Message": "0x79F81178B1358F209dbFCeC57f42918CC3a36cEC", - "L2Message": "0x1484754034B52c2802F859684671E3588b46B031", - "L2ERC721": "0xf2F253520AC17c461059Ea52E7eDE3D2381d3C8d" + "L1LiquidityPool": "0x1383fF5A0Ef67f4BE949408838478917d87FeAc7", + "L2LiquidityPool": "0x88b3743A9e1FdB3C8C92Cec7A6A370c1403c7C60", + "L1ERC20": "0x8251170C40C49F0b55B7913566AA6e31971F6c6e", + "L2DepositedERC20": "0x4267C3dE5d20Ec77A94EafaB1cbD3FF18E594875", + "L1ERC20Gateway": "0x04bFdCdfE4b2C3dCFb79dA9C0253f6feF92b6952", + "l1ETHGatewayAddress": "0xa611c04e5330e782E1Db9189497128d180cE93a0", + "l1MessengerAddress": "0x6EF23884406dcacC43E9BCA677A9E6331A44be21", + "L2TokenPool": "0x57b47fE191b4AbAd8187AbB182Ec9F22AE317434", + "AtomicSwap": "0xcB7F4a9B5344919E0Db08989b5d450F64cF2013f", + "L1Message": "0xD0Fb87bf4017e0A5A3bcE2eF33Bf0B95348a479E", + "L2Message": "0xf047bc835F3765AEfb9d9A2af396ae060Bc947c5", + "L2ERC721": "0xA952aECB83f31C43446B62815c77580123038875" } \ No newline at end of file diff --git a/packages/omgx/wallet/wallet/src/Settings.js b/packages/omgx/wallet/wallet/src/Settings.js index 152b0a699e63..f14a18ff4b45 100644 --- a/packages/omgx/wallet/wallet/src/Settings.js +++ b/packages/omgx/wallet/wallet/src/Settings.js @@ -1,7 +1,5 @@ require('dotenv').config() -export const VERSION = "1.0.26"; - export const INFURA_ID = process.env.REACT_APP_INFURA_ID; export const ETHERSCAN_URL = `https://api-rinkeby.etherscan.io/api?module=account&action=txlist&startblock=0&endblock=99999999&sort=asc&apikey=${process.env.REACT_APP_ETHERSCAN_API}`; diff --git a/packages/omgx/wallet/wallet/src/actions/serviceAction.js b/packages/omgx/wallet/wallet/src/actions/serviceAction.js index c755adae2093..b4a7cd0101d4 100644 --- a/packages/omgx/wallet/wallet/src/actions/serviceAction.js +++ b/packages/omgx/wallet/wallet/src/actions/serviceAction.js @@ -1,4 +1,4 @@ -const VERSION = "1.0.2"; +const VERSION = "1.0.5"; const SERVICE_API_URL = "https://api-service.rinkeby.omgx.network/"; export const checkVersion = () => { diff --git a/packages/omgx/wallet/wallet/src/deployment/rinkeby/addresses.json b/packages/omgx/wallet/wallet/src/deployment/rinkeby/addresses.json index a22f359941eb..5e00118fd372 100644 --- a/packages/omgx/wallet/wallet/src/deployment/rinkeby/addresses.json +++ b/packages/omgx/wallet/wallet/src/deployment/rinkeby/addresses.json @@ -1,14 +1,14 @@ { - "L1LiquidityPool": "0xb1b9F48d1DFF3C08288c73117FC21fAE47c5a8Ec", - "L2LiquidityPool": "0xA01de1D54bB41eb61B19D4ca4E64ce273B2F5a72", - "L1ERC20": "0xf64BBDb113C6082891444057E380862B3500F778", - "L2DepositedERC20": "0x870D429254A0B056d31E26C713d9A94A90B3Fb6C", - "L1ERC20Gateway": "0x6FC5b1854a3666c772FC347b0C65b2c63CB0Df3c", - "l1ETHGatewayAddress": "0x2d8f019DC35220c1DE40Ba175694CD87e990b33f", - "l1MessengerAddress": "0x49BE134fDa420540BbCCad0dDEed4aE0BB939Bae", - "L2TokenPool": "0xd71B2b3B29cF5A4B1Ca669B25E858a4E9F735ecd", - "AtomicSwap": "0xb59d474a17249B8dB9E17c53A2Dd2F08c3378783", - "L1Message": "0x79F81178B1358F209dbFCeC57f42918CC3a36cEC", - "L2Message": "0x1484754034B52c2802F859684671E3588b46B031", - "L2ERC721": "0xf2F253520AC17c461059Ea52E7eDE3D2381d3C8d" + "L1LiquidityPool": "0x1383fF5A0Ef67f4BE949408838478917d87FeAc7", + "L2LiquidityPool": "0x88b3743A9e1FdB3C8C92Cec7A6A370c1403c7C60", + "L1ERC20": "0x8251170C40C49F0b55B7913566AA6e31971F6c6e", + "L2DepositedERC20": "0x4267C3dE5d20Ec77A94EafaB1cbD3FF18E594875", + "L1ERC20Gateway": "0x04bFdCdfE4b2C3dCFb79dA9C0253f6feF92b6952", + "l1ETHGatewayAddress": "0xa611c04e5330e782E1Db9189497128d180cE93a0", + "l1MessengerAddress": "0x6EF23884406dcacC43E9BCA677A9E6331A44be21", + "L2TokenPool": "0x57b47fE191b4AbAd8187AbB182Ec9F22AE317434", + "AtomicSwap": "0xcB7F4a9B5344919E0Db08989b5d450F64cF2013f", + "L1Message": "0xD0Fb87bf4017e0A5A3bcE2eF33Bf0B95348a479E", + "L2Message": "0xf047bc835F3765AEfb9d9A2af396ae060Bc947c5", + "L2ERC721": "0xA952aECB83f31C43446B62815c77580123038875" } \ No newline at end of file From b77a61cc2758306801be8b765466131201c0f5dc Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Tue, 8 Jun 2021 14:25:22 -0700 Subject: [PATCH 29/30] fixes tslint<>prettier clash which breaks the GH actions --- .../test/basic-l1-l2-communication.spec.ts | 7 ++-- integration-tests/test/fee-payment.spec.ts | 6 ++-- integration-tests/test/ovmcontext.spec.ts | 5 +-- .../omgx/fraud-prover/test/a_setup.spec.ts | 32 +++++++++---------- 4 files changed, 23 insertions(+), 27 deletions(-) diff --git a/integration-tests/test/basic-l1-l2-communication.spec.ts b/integration-tests/test/basic-l1-l2-communication.spec.ts index 96c400995e94..af784c697e40 100644 --- a/integration-tests/test/basic-l1-l2-communication.spec.ts +++ b/integration-tests/test/basic-l1-l2-communication.spec.ts @@ -133,10 +133,9 @@ describe('Basic L1<>L2 Communication', async () => { // This call is fine but will give a status of 0. const transaction = await env.l1Messenger.sendMessage( predeploys.Lib_AddressManager, - getContractInterface('Lib_AddressManager').encodeFunctionData( - 'getAddress', - ['whatever'] - ), + getContractInterface( + 'Lib_AddressManager' // tslint:disable-line + ).encodeFunctionData('getAddress', ['whatever']), 5000000 ) diff --git a/integration-tests/test/fee-payment.spec.ts b/integration-tests/test/fee-payment.spec.ts index 6c345285d72c..ebc294ed1c89 100644 --- a/integration-tests/test/fee-payment.spec.ts +++ b/integration-tests/test/fee-payment.spec.ts @@ -27,10 +27,8 @@ describe('Fee Payment Integration Tests', async () => { other, utils.parseEther('0.5') ) - const executionGas = await (env.ovmEth.provider as any).send( - 'eth_estimateExecutionGas', - [tx, true] - ) + const executionGas = await (env.ovmEth // tslint:disable-line + .provider as any).send('eth_estimateExecutionGas', [tx, true]) // tslint:disable-line const decoded = TxGasLimit.decode(gas) expect(BigNumber.from(executionGas)).deep.eq(decoded) }) diff --git a/integration-tests/test/ovmcontext.spec.ts b/integration-tests/test/ovmcontext.spec.ts index f664dcc4ae63..682a4da86f57 100644 --- a/integration-tests/test/ovmcontext.spec.ts +++ b/integration-tests/test/ovmcontext.spec.ts @@ -49,8 +49,9 @@ describe('OVM Context: Layer 2 EVM Context', () => { 'OVM_CanonicalTransactionChain' ) - CanonicalTransactionChain = - CanonicalTransactionChainFactory.connect(l1Wallet).attach(ctcAddress) + CanonicalTransactionChain = CanonicalTransactionChainFactory.connect( // tslint:disable-line + l1Wallet + ).attach(ctcAddress) const OVMMulticallFactory = await ethers.getContractFactory( 'OVMMulticall', diff --git a/packages/omgx/fraud-prover/test/a_setup.spec.ts b/packages/omgx/fraud-prover/test/a_setup.spec.ts index 37ff92b72912..4001ec9070ab 100644 --- a/packages/omgx/fraud-prover/test/a_setup.spec.ts +++ b/packages/omgx/fraud-prover/test/a_setup.spec.ts @@ -75,7 +75,7 @@ describe('System setup', async () => { env.watcher.l2.messengerAddress, tokenName, tokenSymbol, - {gasLimit: 800000, gasPrice: 0} + { gasLimit: 800000, gasPrice: 0 } ) await L2DepositedERC20.deployTransaction.wait() console.log('L2DepositedERC20 deployed to:', L2DepositedERC20.address) @@ -91,10 +91,10 @@ describe('System setup', async () => { console.log('L1ERC20Gateway deployed to:', L1ERC20Gateway.address) //Initialize the contracts for the new token - const initL2 = await L2DepositedERC20.init( - L1ERC20Gateway.address, - {gasLimit: 800000, gasPrice: 0} - ) + const initL2 = await L2DepositedERC20.init(L1ERC20Gateway.address, { + gasLimit: 800000, + gasPrice: 0, + }) await initL2.wait() console.log('L2 ERC20 initialized:', initL2.hash) }) @@ -154,14 +154,14 @@ describe('System setup', async () => { const tranferToAliceTX = await L2DepositedERC20.transfer( env.alicel2Wallet.address, transferL2ERC20Amount, - {gasLimit: 800000, gasPrice: 0} + { gasLimit: 800000, gasPrice: 0 } ) await tranferToAliceTX.wait() const tranferToFraudTX = await L2DepositedERC20.transfer( env.fraudl2Wallet.address, transferL2ERC20Amount, - {gasLimit: 800000, gasPrice: 0} + { gasLimit: 800000, gasPrice: 0 } ) await tranferToFraudTX.wait() @@ -206,11 +206,10 @@ describe('System setup', async () => { const tranferToFraudTX = await L2DepositedERC20.connect( env.alicel2Wallet - ).transfer( - env.fraudl2Wallet.address, - transferL2ERC20Amount, - {gasLimit: 800000, gasPrice: 0} - ) + ).transfer(env.fraudl2Wallet.address, transferL2ERC20Amount, { + gasLimit: 800000, + gasPrice: 0, + }) await tranferToFraudTX.wait() const postAliceL2ERC20Balance = await L2DepositedERC20.balanceOf( @@ -247,11 +246,10 @@ describe('System setup', async () => { const tranferToFraudTX = await L2DepositedERC20.connect( env.fraudl2Wallet - ).transfer( - env.bobl2Wallet.address, - transferL2ERC20Amount, - {gasLimit: 800000, gasPrice: 0} - ) + ).transfer(env.bobl2Wallet.address, transferL2ERC20Amount, { + gasLimit: 800000, + gasPrice: 0, + }) await tranferToFraudTX.wait() const postBobL2ERC20Balance = await L2DepositedERC20.balanceOf( From 1d33a94691859561328547918f3573dfdade1325 Mon Sep 17 00:00:00 2001 From: CAPtheorem <79423264+CAPtheorem@users.noreply.github.com> Date: Tue, 8 Jun 2021 14:28:31 -0700 Subject: [PATCH 30/30] delete deployment files --- .../hardhat/deployments/optimism/.chainId | 1 - .../hardhat/deployments/optimism/ERC20.json | 446 ------------------ .../a4e2764a77fec30ccb674d800c46e436.json | 35 -- 3 files changed, 482 deletions(-) delete mode 100644 examples/hardhat/deployments/optimism/.chainId delete mode 100644 examples/hardhat/deployments/optimism/ERC20.json delete mode 100644 examples/hardhat/deployments/optimism/solcInputs/a4e2764a77fec30ccb674d800c46e436.json diff --git a/examples/hardhat/deployments/optimism/.chainId b/examples/hardhat/deployments/optimism/.chainId deleted file mode 100644 index 368f89ceef17..000000000000 --- a/examples/hardhat/deployments/optimism/.chainId +++ /dev/null @@ -1 +0,0 @@ -28 \ No newline at end of file diff --git a/examples/hardhat/deployments/optimism/ERC20.json b/examples/hardhat/deployments/optimism/ERC20.json deleted file mode 100644 index 83957d098339..000000000000 --- a/examples/hardhat/deployments/optimism/ERC20.json +++ /dev/null @@ -1,446 +0,0 @@ -{ - "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_initialSupply", - "type": "uint256" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0x765a414cd26e30a4fff343acbf41f1079f9701e6a9101122719891ed5b4ce05e", - "receipt": { - "to": null, - "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "contractAddress": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "transactionIndex": 0, - "gasUsed": "2441643", - "logsBloom": "0x00000000000000000000000000000000000000000000000000040000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000008000000000000000010000000000000000000000400000000000000000000000100008000000000000000000000000010000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000200000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa190804f212464a8da4f8919f1525707f46abcc0f4e6e560c42c4aca62c50ff3", - "transactionHash": "0x765a414cd26e30a4fff343acbf41f1079f9701e6a9101122719891ed5b4ce05e", - "logs": [ - { - "transactionIndex": 0, - "blockNumber": 1, - "transactionHash": "0x765a414cd26e30a4fff343acbf41f1079f9701e6a9101122719891ed5b4ce05e", - "address": "0x4200000000000000000000000000000000000006", - "topics": [ - "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", - "0x0000000000000000000000004200000000000000000000000000000000000005" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 0, - "blockHash": "0xa190804f212464a8da4f8919f1525707f46abcc0f4e6e560c42c4aca62c50ff3" - } - ], - "blockNumber": 1, - "cumulativeGasUsed": "2441643", - "status": 1, - "byzantium": true - }, - "args": [ - 1000000, - "My Optimistic Token" - ], - "solcInputHash": "a4e2764a77fec30ccb674d800c46e436", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+ovm+commit.aff196a1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_initialSupply\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A super simple ERC20 implementation!\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"params\":{\"_owner\":\"Address of the account to check an allowance from.\",\"_spender\":\"Address of the account trying to spend from the owner.\"},\"returns\":{\"_0\":\"Allowance for the spender from the owner.\"}},\"approve(address,uint256)\":{\"params\":{\"_amount\":\"Amount to allow the account to spend from your account.\",\"_spender\":\"Account to approve a balance for.\"},\"returns\":{\"_0\":\"true if the allowance was successful.\"}},\"balanceOf(address)\":{\"params\":{\"_owner\":\"Address to check a balance for.\"},\"returns\":{\"_0\":\"Balance of the address.\"}},\"constructor\":{\"params\":{\"_initialSupply\":\"Initial maximum token supply.\",\"_name\":\"A name for our ERC20 (technically optional, but it's fun ok jeez).\"}},\"transfer(address,uint256)\":{\"params\":{\"_amount\":\"Amount to transfer to the other account.\",\"_to\":\"Address to transfer a balance to.\"},\"returns\":{\"_0\":\"true if the transfer was successful.\"}},\"transferFrom(address,address,uint256)\":{\"params\":{\"_amount\":\"Amount to transfer to the other account.\",\"_from\":\"Account to transfer a balance from.\",\"_to\":\"Account to transfer a balance to.\"},\"returns\":{\"_0\":\"true if the transfer was successful.\"}}},\"title\":\"ERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address)\":{\"notice\":\"Checks how much a given account is allowed to spend from another given account.\"},\"approve(address,uint256)\":{\"notice\":\"Approves an account to spend some amount from your account.\"},\"balanceOf(address)\":{\"notice\":\"Checks the balance of an address.\"},\"transfer(address,uint256)\":{\"notice\":\"Transfers a balance from your account to someone else's account!\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"Transfers a balance from someone else's account to another account. You need an allowance from the sending account for this to work!\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC20\\n * @dev A super simple ERC20 implementation!\\n */\\ncontract ERC20 {\\n\\n /**********\\n * Events *\\n **********/\\n\\n event Transfer(\\n address indexed _from,\\n address indexed _to,\\n uint256 _value\\n );\\n\\n event Approval(\\n address indexed _owner,\\n address indexed _spender,\\n uint256 _value\\n );\\n\\n\\n /*************\\n * Variables *\\n *************/\\n\\n mapping (address => uint256) public balances;\\n mapping (address => mapping (address => uint256)) public allowances;\\n\\n // Some optional extra goodies.\\n uint256 public totalSupply;\\n string public name;\\n\\n\\n /***************\\n * Constructor *\\n ***************/\\n\\n /**\\n * @param _initialSupply Initial maximum token supply.\\n * @param _name A name for our ERC20 (technically optional, but it's fun ok jeez).\\n */\\n constructor(\\n uint256 _initialSupply,\\n string memory _name\\n )\\n public\\n {\\n balances[msg.sender] = _initialSupply;\\n totalSupply = _initialSupply;\\n name = _name;\\n }\\n\\n\\n /********************\\n * Public Functions *\\n ********************/\\n\\n /**\\n * Checks the balance of an address.\\n * @param _owner Address to check a balance for.\\n * @return Balance of the address.\\n */\\n function balanceOf(\\n address _owner\\n )\\n external\\n view\\n returns (\\n uint256\\n )\\n {\\n return balances[_owner];\\n }\\n\\n /**\\n * Transfers a balance from your account to someone else's account!\\n * @param _to Address to transfer a balance to.\\n * @param _amount Amount to transfer to the other account.\\n * @return true if the transfer was successful.\\n */\\n function transfer(\\n address _to,\\n uint256 _amount\\n )\\n external\\n returns (\\n bool\\n )\\n {\\n require(\\n balances[msg.sender] >= _amount,\\n \\\"You don't have enough balance to make this transfer!\\\"\\n );\\n\\n balances[msg.sender] -= _amount;\\n balances[_to] += _amount;\\n\\n emit Transfer(\\n msg.sender,\\n _to,\\n _amount\\n );\\n\\n return true;\\n }\\n\\n /**\\n * Transfers a balance from someone else's account to another account. You need an allowance\\n * from the sending account for this to work!\\n * @param _from Account to transfer a balance from.\\n * @param _to Account to transfer a balance to.\\n * @param _amount Amount to transfer to the other account.\\n * @return true if the transfer was successful.\\n */\\n function transferFrom(\\n address _from,\\n address _to,\\n uint256 _amount\\n )\\n external\\n returns (\\n bool\\n )\\n {\\n require(\\n balances[_from] >= _amount,\\n \\\"Can't transfer from the desired account because it doesn't have enough balance.\\\"\\n );\\n\\n require(\\n allowances[_from][msg.sender] >= _amount,\\n \\\"Can't transfer from the desired account because you don't have enough of an allowance.\\\"\\n );\\n\\n balances[_to] += _amount;\\n balances[_from] -= _amount;\\n\\n emit Transfer(\\n _from,\\n _to,\\n _amount\\n );\\n\\n return true;\\n }\\n\\n /**\\n * Approves an account to spend some amount from your account.\\n * @param _spender Account to approve a balance for.\\n * @param _amount Amount to allow the account to spend from your account.\\n * @return true if the allowance was successful.\\n */\\n function approve(\\n address _spender,\\n uint256 _amount\\n )\\n external\\n returns (\\n bool\\n )\\n {\\n allowances[msg.sender][_spender] = _amount;\\n\\n emit Approval(\\n msg.sender,\\n _spender,\\n _amount\\n );\\n\\n return true;\\n }\\n\\n /**\\n * Checks how much a given account is allowed to spend from another given account.\\n * @param _owner Address of the account to check an allowance from.\\n * @param _spender Address of the account trying to spend from the owner.\\n * @return Allowance for the spender from the owner.\\n */\\n function allowance(\\n address _owner,\\n address _spender\\n )\\n external\\n view\\n returns (\\n uint256\\n )\\n {\\n return allowances[_owner][_spender];\\n }\\n}\\n\",\"keccak256\":\"0x5c76dbdcd208a53d57d8f7afa0061e54cd83157cf7d0e57be8ed914d0018283c\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60806040523480156200001c5760008062000019620001c4565b50505b50604051620012e8380380620012e8833981810160405260408110156200004d576000806200004a620001c4565b50505b810190808051906020019092919080516040519392919084640100000000821115620000835760008062000080620001c4565b50505b83820191506020820185811115620000a557600080620000a2620001c4565b50505b8251866001820283011164010000000082111715620000ce57600080620000cb620001c4565b50505b8083526020830192505050908051906020019080838360005b8381101562000104578082015181840152602081019050620000e7565b50505050905090810190601f168015620001325780820380516001836020036101000a031916815260200191505b50604052505050816000805a6200014862000234565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081906200018e62000293565b5050508160028190620001a062000293565b5050508060039080519060200190620001bb929190620002fa565b50505062000455565b632a2a7adb598160e01b8152600481016020815285602082015260005b8681101562000201578086015181604084010152602081019050620001e1565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b60408110156200028e5760008183015260208101905062000272565b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b6040811015620002f557600081830152602081019050620002d9565b505050565b828062000306620003c6565b600181600116156101000203166002900490600052602060002090601f01602090048101928262000346576000856200033e62000293565b5050620003b3565b82601f106200036c57805160ff191683800117856200036462000293565b5050620003b3565b828001600101856200037d62000293565b50508215620003b3579182015b82811115620003b257825182620003a062000293565b5050916020019190600101906200038a565b5b509050620003c291906200042b565b5090565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b604081101562000426576000818301526020810190506200040a565b505050565b5b8082111562000451576000816000906200044562000293565b5050506001016200042c565b5090565b610e8380620004656000396000f3fe608060405234801561001957600080610016610c16565b50505b506004361061009c5760003560e01c806327e235e31161006f57806327e235e31461024557806355b6ed5c146102a657806370a0823114610327578063a9059cbb14610388578063dd62ed3e146103f55761009c565b806306fdde03146100aa578063095ea7b31461012d57806318160ddd1461019a57806323b872dd146101b8575b6000806100a7610c16565b50505b6100b2610476565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100f25780820151818401526020810190506100d7565b50505050905090810190601f16801561011f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101826004803603604081101561014c57600080610149610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610530565b60405180821515815260200191505060405180910390f35b6101a261063b565b6040518082815260200191505060405180910390f35b61022d600480360360608110156101d7576000806101d4610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610648565b60405180821515815260200191505060405180910390f35b6102906004803603602081101561026457600080610261610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610906565b6040518082815260200191505060405180910390f35b610311600480360360408110156102c5576000806102c2610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610925565b6040518082815260200191505060405180910390f35b6103726004803603602081101561034657600080610343610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610951565b6040518082815260200191505060405180910390f35b6103dd600480360360408110156103a7576000806103a4610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109a0565b60405180821515815260200191505060405180910390f35b6104606004803603604081101561041457600080610411610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b88565b6040518082815260200191505060405180910390f35b600380610481610c84565b600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182806104bc610c84565b600181600116156101000203166002900480156105285780601f106104f65761010080836104e8610c84565b040283529160200191610528565b820191906000526020600020905b8161050d610c84565b8152906001019060200180831161050457829003601f168201915b505050505081565b600081600160005a610540610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081906105c1610d44565b5050508273ffffffffffffffffffffffffffffffffffffffff165a6105e4610ce7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6002610645610c84565b81565b6000816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610691610c84565b10156106f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604f815260200180610e00604f9139606001915050604051809103906106ee610c16565b50505b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005a61073c610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061077e610c84565b10156107de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526056815260200180610daa60569139606001915050604051809103906107db610c16565b50505b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610829610c84565b019250508190610837610d44565b505050816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610885610c84565b039250508190610893610d44565b5050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000602052806000526040600020600091509050610922610c84565b81565b60016020528160005260406000206020528060005260406000206000915091505061094e610c84565b81565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610999610c84565b9050919050565b6000816000805a6109af610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206109f1610c84565b1015610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180610e4f6034913960400191505060405180910390610a4e610c16565b50505b816000805a610a5e610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610aa4610c84565b039250508190610ab2610d44565b505050816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610b00610c84565b019250508190610b0e610d44565b5050508273ffffffffffffffffffffffffffffffffffffffff165a610b31610ce7565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610c0e610c84565b905092915050565b632a2a7adb598160e01b8152600481016020815285602082015260005b86811015610c51578086015181604084010152602081019050610c33565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b6040811015610ce257600081830152602081019050610cc8565b505050565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b6040811015610d3f57600081830152602081019050610d25565b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b6040811015610da457600081830152602081019050610d8a565b50505056fe43616e2774207472616e736665722066726f6d207468652064657369726564206163636f756e74206265636175736520796f7520646f6e2774206861766520656e6f756768206f6620616e20616c6c6f77616e63652e43616e2774207472616e736665722066726f6d207468652064657369726564206163636f756e74206265636175736520697420646f65736e2774206861766520656e6f7567682062616c616e63652e596f7520646f6e2774206861766520656e6f7567682062616c616e636520746f206d616b652074686973207472616e7366657221", - "deployedBytecode": "0x608060405234801561001957600080610016610c16565b50505b506004361061009c5760003560e01c806327e235e31161006f57806327e235e31461024557806355b6ed5c146102a657806370a0823114610327578063a9059cbb14610388578063dd62ed3e146103f55761009c565b806306fdde03146100aa578063095ea7b31461012d57806318160ddd1461019a57806323b872dd146101b8575b6000806100a7610c16565b50505b6100b2610476565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100f25780820151818401526020810190506100d7565b50505050905090810190601f16801561011f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101826004803603604081101561014c57600080610149610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610530565b60405180821515815260200191505060405180910390f35b6101a261063b565b6040518082815260200191505060405180910390f35b61022d600480360360608110156101d7576000806101d4610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610648565b60405180821515815260200191505060405180910390f35b6102906004803603602081101561026457600080610261610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610906565b6040518082815260200191505060405180910390f35b610311600480360360408110156102c5576000806102c2610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610925565b6040518082815260200191505060405180910390f35b6103726004803603602081101561034657600080610343610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610951565b6040518082815260200191505060405180910390f35b6103dd600480360360408110156103a7576000806103a4610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109a0565b60405180821515815260200191505060405180910390f35b6104606004803603604081101561041457600080610411610c16565b50505b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b88565b6040518082815260200191505060405180910390f35b600380610481610c84565b600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182806104bc610c84565b600181600116156101000203166002900480156105285780601f106104f65761010080836104e8610c84565b040283529160200191610528565b820191906000526020600020905b8161050d610c84565b8152906001019060200180831161050457829003601f168201915b505050505081565b600081600160005a610540610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081906105c1610d44565b5050508273ffffffffffffffffffffffffffffffffffffffff165a6105e4610ce7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6002610645610c84565b81565b6000816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610691610c84565b10156106f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604f815260200180610e00604f9139606001915050604051809103906106ee610c16565b50505b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060005a61073c610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061077e610c84565b10156107de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526056815260200180610daa60569139606001915050604051809103906107db610c16565b50505b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610829610c84565b019250508190610837610d44565b505050816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610885610c84565b039250508190610893610d44565b5050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b6000602052806000526040600020600091509050610922610c84565b81565b60016020528160005260406000206020528060005260406000206000915091505061094e610c84565b81565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610999610c84565b9050919050565b6000816000805a6109af610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206109f1610c84565b1015610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180610e4f6034913960400191505060405180910390610a4e610c16565b50505b816000805a610a5e610ce7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610aa4610c84565b039250508190610ab2610d44565b505050816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282610b00610c84565b019250508190610b0e610d44565b5050508273ffffffffffffffffffffffffffffffffffffffff165a610b31610ce7565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020610c0e610c84565b905092915050565b632a2a7adb598160e01b8152600481016020815285602082015260005b86811015610c51578086015181604084010152602081019050610c33565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b6040811015610ce257600081830152602081019050610cc8565b505050565b6373509064598160e01b8152602081600483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b6040811015610d3f57600081830152602081019050610d25565b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b6040811015610da457600081830152602081019050610d8a565b50505056fe43616e2774207472616e736665722066726f6d207468652064657369726564206163636f756e74206265636175736520796f7520646f6e2774206861766520656e6f756768206f6620616e20616c6c6f77616e63652e43616e2774207472616e736665722066726f6d207468652064657369726564206163636f756e74206265636175736520697420646f65736e2774206861766520656e6f7567682062616c616e63652e596f7520646f6e2774206861766520656e6f7567682062616c616e636520746f206d616b652074686973207472616e7366657221", - "devdoc": { - "details": "A super simple ERC20 implementation!", - "kind": "dev", - "methods": { - "allowance(address,address)": { - "params": { - "_owner": "Address of the account to check an allowance from.", - "_spender": "Address of the account trying to spend from the owner." - }, - "returns": { - "_0": "Allowance for the spender from the owner." - } - }, - "approve(address,uint256)": { - "params": { - "_amount": "Amount to allow the account to spend from your account.", - "_spender": "Account to approve a balance for." - }, - "returns": { - "_0": "true if the allowance was successful." - } - }, - "balanceOf(address)": { - "params": { - "_owner": "Address to check a balance for." - }, - "returns": { - "_0": "Balance of the address." - } - }, - "constructor": { - "params": { - "_initialSupply": "Initial maximum token supply.", - "_name": "A name for our ERC20 (technically optional, but it's fun ok jeez)." - } - }, - "transfer(address,uint256)": { - "params": { - "_amount": "Amount to transfer to the other account.", - "_to": "Address to transfer a balance to." - }, - "returns": { - "_0": "true if the transfer was successful." - } - }, - "transferFrom(address,address,uint256)": { - "params": { - "_amount": "Amount to transfer to the other account.", - "_from": "Account to transfer a balance from.", - "_to": "Account to transfer a balance to." - }, - "returns": { - "_0": "true if the transfer was successful." - } - } - }, - "title": "ERC20", - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "allowance(address,address)": { - "notice": "Checks how much a given account is allowed to spend from another given account." - }, - "approve(address,uint256)": { - "notice": "Approves an account to spend some amount from your account." - }, - "balanceOf(address)": { - "notice": "Checks the balance of an address." - }, - "transfer(address,uint256)": { - "notice": "Transfers a balance from your account to someone else's account!" - }, - "transferFrom(address,address,uint256)": { - "notice": "Transfers a balance from someone else's account to another account. You need an allowance from the sending account for this to work!" - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 22, - "contract": "contracts/ERC20.sol:ERC20", - "label": "balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 28, - "contract": "contracts/ERC20.sol:ERC20", - "label": "allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 30, - "contract": "contracts/ERC20.sol:ERC20", - "label": "totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 32, - "contract": "contracts/ERC20.sol:ERC20", - "label": "name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} \ No newline at end of file diff --git a/examples/hardhat/deployments/optimism/solcInputs/a4e2764a77fec30ccb674d800c46e436.json b/examples/hardhat/deployments/optimism/solcInputs/a4e2764a77fec30ccb674d800c46e436.json deleted file mode 100644 index 9172859cb7af..000000000000 --- a/examples/hardhat/deployments/optimism/solcInputs/a4e2764a77fec30ccb674d800c46e436.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "contracts/ERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity >0.6.0 <0.8.0;\n\n/**\n * @title ERC20\n * @dev A super simple ERC20 implementation!\n */\ncontract ERC20 {\n\n /**********\n * Events *\n **********/\n\n event Transfer(\n address indexed _from,\n address indexed _to,\n uint256 _value\n );\n\n event Approval(\n address indexed _owner,\n address indexed _spender,\n uint256 _value\n );\n\n\n /*************\n * Variables *\n *************/\n\n mapping (address => uint256) public balances;\n mapping (address => mapping (address => uint256)) public allowances;\n\n // Some optional extra goodies.\n uint256 public totalSupply;\n string public name;\n\n\n /***************\n * Constructor *\n ***************/\n\n /**\n * @param _initialSupply Initial maximum token supply.\n * @param _name A name for our ERC20 (technically optional, but it's fun ok jeez).\n */\n constructor(\n uint256 _initialSupply,\n string memory _name\n )\n public\n {\n balances[msg.sender] = _initialSupply;\n totalSupply = _initialSupply;\n name = _name;\n }\n\n\n /********************\n * Public Functions *\n ********************/\n\n /**\n * Checks the balance of an address.\n * @param _owner Address to check a balance for.\n * @return Balance of the address.\n */\n function balanceOf(\n address _owner\n )\n external\n view\n returns (\n uint256\n )\n {\n return balances[_owner];\n }\n\n /**\n * Transfers a balance from your account to someone else's account!\n * @param _to Address to transfer a balance to.\n * @param _amount Amount to transfer to the other account.\n * @return true if the transfer was successful.\n */\n function transfer(\n address _to,\n uint256 _amount\n )\n external\n returns (\n bool\n )\n {\n require(\n balances[msg.sender] >= _amount,\n \"You don't have enough balance to make this transfer!\"\n );\n\n balances[msg.sender] -= _amount;\n balances[_to] += _amount;\n\n emit Transfer(\n msg.sender,\n _to,\n _amount\n );\n\n return true;\n }\n\n /**\n * Transfers a balance from someone else's account to another account. You need an allowance\n * from the sending account for this to work!\n * @param _from Account to transfer a balance from.\n * @param _to Account to transfer a balance to.\n * @param _amount Amount to transfer to the other account.\n * @return true if the transfer was successful.\n */\n function transferFrom(\n address _from,\n address _to,\n uint256 _amount\n )\n external\n returns (\n bool\n )\n {\n require(\n balances[_from] >= _amount,\n \"Can't transfer from the desired account because it doesn't have enough balance.\"\n );\n\n require(\n allowances[_from][msg.sender] >= _amount,\n \"Can't transfer from the desired account because you don't have enough of an allowance.\"\n );\n\n balances[_to] += _amount;\n balances[_from] -= _amount;\n\n emit Transfer(\n _from,\n _to,\n _amount\n );\n\n return true;\n }\n\n /**\n * Approves an account to spend some amount from your account.\n * @param _spender Account to approve a balance for.\n * @param _amount Amount to allow the account to spend from your account.\n * @return true if the allowance was successful.\n */\n function approve(\n address _spender,\n uint256 _amount\n )\n external\n returns (\n bool\n )\n {\n allowances[msg.sender][_spender] = _amount;\n\n emit Approval(\n msg.sender,\n _spender,\n _amount\n );\n\n return true;\n }\n\n /**\n * Checks how much a given account is allowed to spend from another given account.\n * @param _owner Address of the account to check an allowance from.\n * @param _spender Address of the account trying to spend from the owner.\n * @return Allowance for the spender from the owner.\n */\n function allowance(\n address _owner,\n address _spender\n )\n external\n view\n returns (\n uint256\n )\n {\n return allowances[_owner][_spender];\n }\n}\n" - } - }, - "settings": { - "optimizer": { - "enabled": false, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - } - } -} \ No newline at end of file