From 5d44e695db5494235695f7718654cb32c314b60f Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Tue, 6 Apr 2021 15:54:47 +0200 Subject: [PATCH 01/21] Optimism L2 integration - Update OZ lib to v3.4.0, polish contracts, fix tests - Turn off solc bytecodeHash metadata generation - Move continuous integration to GitHub - Add target (OVM) support to getContractFactroy fn - Add Optimism L2 network bootstrap to CI integration job - Strictly declare Versions and Targets - Integrating @chainlink/optimism-utils - Update env loading and docs - Use 1_000_000 optimizer runs for v0.7 - Add LinkTokenChild contract - Run on self-hosted CI runner - Add yargs lib to parse argv - Add contract size and gas reporters --- .github/workflows/changelog.yml | 27 + .github/workflows/main.yml | 37 + .gitignore | 3 + .tool-versions | 2 + .travis.yml | 27 - CHANGELOG.md | 34 + README.md | 48 +- contracts/v0.7/README.md | 5 + contracts/v0.7/bridge/README.md | 3 + contracts/v0.7/bridge/token/IERC20Child.sol | 25 + .../v0.7/bridge/token/LinkTokenChild.sol | 70 + env/.env.kovan | 5 + env/.env.local | 4 + hardhat.config.ts | 73 +- package.json | 41 +- src/contract-defs.ts | 60 +- src/hardhat/index.ts | 11 +- src/index.ts | 18 + src/optimism/index.ts | 38 + test/behavior/token/BasicToken.ts | 8 +- test/behavior/token/StandardToken.ts | 6 +- test/{helpers.ts => helpers/index.ts} | 53 +- test/v0.4/ERC677Token.test.ts | 13 +- test/v0.4/LinkToken.test.ts | 12 +- test/v0.4/token/BasicToken.test.ts | 13 +- test/v0.4/token/StandardToken.test.ts | 15 +- test/v0.6/ERC677Token.test.ts | 12 +- test/v0.6/LinkToken.test.ts | 11 +- test/v0.6/PegSwap.test.ts | 2 +- test/v0.6/token/BasicToken.test.ts | 13 +- test/v0.6/token/StandardToken.test.ts | 14 +- test/v0.7/bridge/token/LinkTokenChild.test.ts | 184 +++ yarn.lock | 1219 ++++++++++++++++- 33 files changed, 1879 insertions(+), 227 deletions(-) create mode 100644 .github/workflows/changelog.yml create mode 100644 .github/workflows/main.yml create mode 100644 .tool-versions delete mode 100644 .travis.yml create mode 100644 CHANGELOG.md create mode 100644 contracts/v0.7/README.md create mode 100644 contracts/v0.7/bridge/README.md create mode 100644 contracts/v0.7/bridge/token/IERC20Child.sol create mode 100644 contracts/v0.7/bridge/token/LinkTokenChild.sol create mode 100644 env/.env.kovan create mode 100644 env/.env.local create mode 100644 src/optimism/index.ts rename test/{helpers.ts => helpers/index.ts} (50%) create mode 100644 test/v0.7/bridge/token/LinkTokenChild.test.ts diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml new file mode 100644 index 0000000..03ec1e3 --- /dev/null +++ b/.github/workflows/changelog.yml @@ -0,0 +1,27 @@ +# +# This action checks PRs to see if any CHANGELOG* files were updated. +# If none were, it will add a message to the PR asking if it would make sense to do so. +# +name: Changelog + +on: pull_request + +jobs: + changelog: + name: Changelog checker + runs-on: ubuntu-latest + steps: + - name: Check for changed files + id: changedfiles + uses: futuratrepadeira/changed-files@186b5b30b1f5e44ed655a59652746c3ce00d53ef # Version v3.1.1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + pattern: '^CHANGELOG.*$' + - name: Make a comment + uses: unsplash/comment-on-pr@d1a1d5dd1eb1bb657a01f4d92dd5e4d5bb7857d3 # Version v1.2.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + if: contains(steps.changedfiles.outputs.files_updated, 'CHANGELOG') != true && contains(steps.changedfiles.outputs.files_created, 'CHANGELOG') != true + with: + msg: "I see that you haven't updated any CHANGELOG files. Would it make sense to do so?" + check_for_duplicate_msg: false diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..cfe510c --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,37 @@ +name: Main + +on: + push: + branches: + - master + pull_request: ~ + +jobs: + run-basic-checks: + name: Run linters and unit tests + runs-on: [self-hosted] + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '14.x' + - run: npm install -g yarn + - run: yarn install + - run: yarn setup + - run: yarn lint + - run: yarn test + run-integration: + name: Setup and run integration tests + needs: [run-basic-checks] + runs-on: [self-hosted] + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '14.x' + - run: npm install -g yarn + - run: yarn install + - run: yarn setup + - name: Setup Optimism L2 local network + run: yarn script:oe:up + - run: yarn test --network optimism diff --git a/.gitignore b/.gitignore index 903160c..5ada970 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ coverage.json # Misc .DS_STORE + +# Optimism monorepo used for integration tests +/optimism diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..3ae7268 --- /dev/null +++ b/.tool-versions @@ -0,0 +1,2 @@ +node 14.16.0 +yarn 1.22.4 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 81523d4..0000000 --- a/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -dist: trusty -language: node_js -sudo: required -node_js: - - '12' - -env: - - CXX=g++-4.8 - -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - build-essential - - g++-4.8 - -before_install: - - export CXX="g++-4.8" - - npm install -g npm@latest - -install: - - yarn install - -script: - - yarn setup - - yarn test diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..151b20f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,34 @@ +# Changelog LinkToken + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] - Apr 2021 + +### Added + +- Access controlled mintable & burnable LinkToken, for use on sidechains and L2 networks. + +### Changed + +- Migrated to Hardhat and Waffle + +### Fixed + +### Removed + +- Truffle framework and tests dependencies + +## [1.1.0] - Mar 2021 + +Initial @chainlink/token release! + +### Added + +- Solidity 0.6 support +- Simple token swapping contract + +## [1.0.6] - Sep 2018 + +Initial link_token release! diff --git a/README.md b/README.md index 37c4ad6..685c170 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# LINK Token Contracts [![Build Status](https://travis-ci.org/smartcontractkit/LinkToken.svg?branch=master)](https://travis-ci.org/smartcontractkit/LinkToken) +# LINK Token Contracts The LINK token is an [EIP20](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md) token with additional [ERC677](https://github.com/ethereum/EIPs/issues/677) functionality. @@ -6,36 +6,68 @@ The total supply of the token is 1,000,000,000, and each token is divisible up t To prevent accidental burns, the token does not allow transfers to the contract itself and to 0x0. -Security audit for [v0.4 version of the contracts](./contracts/v0.4/) is available [here](https://gist.github.com/Arachnid/4aa88041bd6e34835b8c0fd051245e79). +Security audit for [0.4 version of the contracts](./contracts/v0.4/) is available [here](https://gist.github.com/Arachnid/4aa88041bd6e34835b8c0fd051245e79). ## Details - Deployments: - - Ethereum Mainnet [LinkToken v0.4](./flat/v0.4/LinkToken.sol): [0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771af9ca656af840dff83e8264ecf986ca) + - Ethereum Mainnet [LinkToken 0.4](./flat/v0.4/LinkToken.sol): [0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771af9ca656af840dff83e8264ecf986ca) - Decimals: 18 - Name: ChainLink Token - Symbol: LINK -## Installation +## Setup -The project contains [v0.4 contracts](./contracts/v0.4/) that were used for LINK Ethereum Mainnet deployment in 2017. For deployments moving forward, we use the updated [v0.6 contracts](./contracts/v0.6/) which use a more recent version of solc and the OpenZeppelin token standards. These updates include a minor ABI change around approval/allowance naming. +The project contains [0.4 contracts](./contracts/v0.4/) that were used for LINK Ethereum Mainnet deployment in 2017. For deployments moving forward, we use the updated [0.6 contracts](./contracts/v0.6/) which use a more recent version of solc and the OpenZeppelin token standards. These updates include a minor ABI change around approval/allowance naming. ```bash yarn install ``` -## Testing - Setup contracts: ```bash yarn setup ``` +This will compile all versions of the contracts. + +## Testing + Run tests: ```bash yarn test ``` -This will test both v0.4 and v0.6 versions of the contracts. +This will run unit tests for all versions of the contracts. + +## Integration testing + +Integration tests are currently setup for Optimism contracts, and to run them make sure you have a local network running first. + +The network can be started using a helpful script, which will clone the [Optimism monorepo](https://github.com/ethereum-optimism/optimism), build the : + +```bash +yarn script:oe:up +``` + +Run tests: + +```bash +yarn test --network optimism +``` + +This will run unit tests for all versions of the contracts, plus supported integration tests against the local L1 & L2 networks. + +The network can be stopped using another script: + +```bash +yarn script:oe:down +``` + +Or use the clean script, which will also delete all the images: + +```bash +yarn script:oe:clean +``` diff --git a/contracts/v0.7/README.md b/contracts/v0.7/README.md new file mode 100644 index 0000000..ed5d076 --- /dev/null +++ b/contracts/v0.7/README.md @@ -0,0 +1,5 @@ +# LINK Token Contracts v0.7 + +## Token bridge contracts + +LinkToken bridge contracts can be found in the [./bridge](./bridge) directory. diff --git a/contracts/v0.7/bridge/README.md b/contracts/v0.7/bridge/README.md new file mode 100644 index 0000000..2bb69ea --- /dev/null +++ b/contracts/v0.7/bridge/README.md @@ -0,0 +1,3 @@ +# LINK Token Bridge v0.7 + +- `./LinkTokenChild.sol`: A mintable & burnable child LinkToken contract to be used on child networks. diff --git a/contracts/v0.7/bridge/token/IERC20Child.sol b/contracts/v0.7/bridge/token/IERC20Child.sol new file mode 100644 index 0000000..27bcc67 --- /dev/null +++ b/contracts/v0.7/bridge/token/IERC20Child.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + +/* Interface Imports */ +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +/// @dev Interface of the child ERC20 token, for use on sidechains and L2 networks. +interface IERC20Child is IERC20 { + /** + * @notice called by bridge gateway when tokens are deposited on root chain + * Should handle deposits by minting the required amount for the recipient + * + * @param recipient an address for whom deposit is being done + * @param amount total amount to deposit/mint + */ + function deposit(address recipient, uint256 amount) external; + + /** + * @notice called by bridge gateway when tokens are withdrawn back to root chain + * @dev Should burn recipient's tokens. + * + * @param amount total amount to withdraw/burn + */ + function withdraw(uint256 amount) external; +} diff --git a/contracts/v0.7/bridge/token/LinkTokenChild.sol b/contracts/v0.7/bridge/token/LinkTokenChild.sol new file mode 100644 index 0000000..f5c2b79 --- /dev/null +++ b/contracts/v0.7/bridge/token/LinkTokenChild.sol @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + +/* Interface Imports */ +import { IERC20Child } from "./IERC20Child.sol"; + +/* Contract Imports */ +import { AccessControl } from "@openzeppelin/contracts/access/AccessControl.sol"; +import { LinkToken } from "../../../v0.6/LinkToken.sol"; + +/// @dev Access controlled mintable & burnable LinkToken, for use on sidechains and L2 networks. +contract LinkTokenChild is IERC20Child, AccessControl, LinkToken { + + // Using this role the bridge gateway can deposit/withdraw (mint/burn) + bytes32 public constant BRIDGE_GATEWAY_ROLE = keccak256("BRIDGE_GATEWAY_ROLE"); + + /** + * @dev Overrides parent contract so no tokens are minted on deployment. + * @inheritdoc LinkToken + */ + function _onCreate() + internal + override + { + _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); + } + + /** + * @dev Modifier to check access by role. + * + * @param role the required role + */ + modifier onlyRole( + bytes32 role + ) { + require(hasRole(role, _msgSender()), "LinkTokenChild: missing role"); + _; + } + + /** + * @dev Only callable by account with BRIDGE_GATEWAY_ROLE + * @inheritdoc IERC20Child + */ + function deposit( + address recipient, + uint256 amount + ) + external + override + virtual + onlyRole(BRIDGE_GATEWAY_ROLE) + { + _mint(recipient, amount); + } + + /** + * @dev Only callable by account with BRIDGE_GATEWAY_ROLE + * @inheritdoc IERC20Child + */ + function withdraw( + uint256 amount + ) + external + override + virtual + onlyRole(BRIDGE_GATEWAY_ROLE) + { + _burn(_msgSender(), amount); + } +} diff --git a/env/.env.kovan b/env/.env.kovan new file mode 100644 index 0000000..03a49ad --- /dev/null +++ b/env/.env.kovan @@ -0,0 +1,5 @@ +### KOVAN +# make sure this private key has Kovan ETH! +PRIVATE_KEY= +L1_WEB3_URL=https://kovan.infura.io/v3/API_KEY +L2_WEB3_URL=https://kovan.optimism.io diff --git a/env/.env.local b/env/.env.local new file mode 100644 index 0000000..3a51526 --- /dev/null +++ b/env/.env.local @@ -0,0 +1,4 @@ +### LOCAL (optimism-integration repo) +PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 +L1_WEB3_URL=http://127.0.0.1:9545 +L2_WEB3_URL=http://127.0.0.1:8545 diff --git a/hardhat.config.ts b/hardhat.config.ts index cfd3c58..8d3eecc 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,55 +1,88 @@ // hardhat.config.ts import { HardhatUserConfig, SolcConfig } from 'hardhat/types' -import { hardhat } from './src' - +import { task } from 'hardhat/config' +import { TASK_COMPILE } from 'hardhat/builtin-tasks/task-names' +import { hardhat, Networks, Versions } from './src' +// plugins import '@nomiclabs/hardhat-waffle' import '@typechain/hardhat' +import '@nomiclabs/hardhat-waffle' +import '@eth-optimism/hardhat-ovm' +import 'hardhat-contract-sizer' +import 'hardhat-gas-reporter' -const DEFAULT_VERSION = 'v0.6' +const DEFAULT_NETWORK = Networks.HARDHAT +const DEFAULT_VERSION = Versions.v0_6 -const optimizer = { - runs: 200, - enabled: true, -} +// Override compile task to add custom param +task(TASK_COMPILE) + .addOptionalParam('contracts', 'The contracts version to compile.', DEFAULT_VERSION) + .setAction(async (_args, _hre, runSuper) => runSuper(_args)) -const settings = { - optimizer, +const _settings = (runs: number) => ({ + optimizer: { + runs, + enabled: true, + }, metadata: { // To support Go code generation from build artifacts // we need to remove the metadata from the compiled bytecode. bytecodeHash: 'none', }, -} +}) -const versions: Record = { - 'v0.4': { version: '0.4.16', settings }, - 'v0.6': { version: '0.6.12', settings }, - 'v0.7': { version: '0.7.6', settings }, +const versions: Record = { + [Versions.v0_4]: { version: '0.4.16', settings: _settings(200) }, + [Versions.v0_6]: { version: '0.6.12', settings: _settings(200) }, + [Versions.v0_7]: { version: '0.7.6', settings: _settings(1_000_000) }, } // Require version exists -const versionLabel = process.env.VERSION || DEFAULT_VERSION -const compiler = versions[versionLabel] +const versionLabel = hardhat.argv.contracts || DEFAULT_VERSION +const compiler = versions[versionLabel as Versions] if (!compiler) throw Error(`Compiler for ${versionLabel} could not be found!`) +// Setup networks +const networks: { [key: string]: any } = { + [Networks.OPTIMISM]: { + url: 'http://127.0.0.1:8545', + ovm: true, // ensures contracts will be compiled to OVM target. + }, +} +const targetNetwork = hardhat.argv.network || DEFAULT_NETWORK +const typesDir = networks[targetNetwork]?.ovm ? `types-ovm` : 'types' +const versionDir = `v${versionLabel}` + const config: HardhatUserConfig = { + defaultNetwork: DEFAULT_NETWORK, + networks, paths: { - sources: `./contracts/${versionLabel}`, + sources: `./contracts/${versionDir}`, cache: './build/cache', artifacts: './build/artifacts', }, solidity: { compilers: Object.values(versions), overrides: { - ...hardhat.generateOverrides(`./contracts/${versionLabel}/**/*.sol`, {}, compiler), + ...hardhat.generateOverrides(`./contracts/${versionDir}/**/*.sol`, {}, compiler), }, }, typechain: { - outDir: `build/types/${versionLabel}`, + outDir: `./build/${typesDir}/${versionDir}`, target: 'ethers-v5', }, mocha: { - timeout: 10000, + timeout: 5000, + }, + contractSizer: { + alphaSort: true, + runOnCompile: true, + disambiguatePaths: true, + }, + gasReporter: { + currency: 'USD', + gasPrice: 100, + showTimeSpent: true, }, } diff --git a/package.json b/package.json index 47d550c..23cadac 100644 --- a/package.json +++ b/package.json @@ -11,39 +11,58 @@ "build/**/*.js", "build/contracts/*", "build/artifacts/**/*.json", + "build/artifacts-ovm/**/*.json", "build/types/**/*.ts", + "build/types-ovm/**/*.ts", "contracts/*" ], "scripts": { + "prepack": "yarn setup", "clean": "tsc -b --clean tsconfig.json && rm -rf build/", - "setup": "yarn build:contracts", - "build:contracts": "yarn build:contracts:v0.4 && yarn build:contracts:v0.6", - "build:contracts:v0.4": "VERSION=v0.4 hardhat compile --show-stack-traces", - "build:contracts:v0.6": "VERSION=v0.6 hardhat compile --show-stack-traces", - "test": "hardhat test --show-stack-traces" + "setup": "yarn build:contracts && yarn build", + "lint": "echo \"Please set up linter\"", + "build": "tsc -p tsconfig.json", + "build:contracts": "yarn build:contracts:0.4 && yarn build:contracts:0.6 && yarn build:contracts:0.7 && yarn build:contracts:0.7:ovm", + "build:contracts:0.4": "hardhat compile --contracts 0.4 --show-stack-traces", + "build:contracts:0.6": "hardhat compile --contracts 0.6 --show-stack-traces", + "build:contracts:0.7": "hardhat compile --contracts 0.7 --show-stack-traces", + "build:contracts:0.7:ovm": "hardhat compile --contracts 0.7 --network optimism --show-stack-traces", + "test": "hardhat test --no-compile --show-stack-traces", + "script:oe:up": "./node_modules/@chainlink/optimism-utils/scripts/run-ci.sh", + "script:oe:down": "cd optimism/ops && docker-compose down -v", + "script:oe:clean": "cd optimism/ops && docker-compose down -v --remove-orphan --rmi all" }, "dependencies": { "@chainlink/contracts": "^0.1.6", - "@openzeppelin/contracts": "^3.4.0" + "@chainlink/optimism-utils": "https://github.com/smartcontractkit/optimism-utils.git", + "@ethersproject/bignumber": "^5.1.1", + "@ethersproject/units": "^5.1.0", + "@openzeppelin/contracts": "3.4.0", + "dotenv": "^8.2.0", + "ethers": "^5.1.3", + "glob": "^7.1.6", + "hardhat": "^2.2.0", + "lodash": "^4.17.21", + "yargs": "^16.2.0" }, "devDependencies": { + "@eth-optimism/hardhat-ovm": "^0.0.3", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-waffle": "^2.0.1", "@typechain/ethers-v5": "^6.0.5", "@typechain/hardhat": "^1.0.1", "@types/chai": "^4.2.16", "@types/glob": "^7.1.3", + "@types/lodash": "^4.14.168", "@types/mocha": "^8.2.2", "@types/node": "^14.14.37", - "@types/semver": "^7.3.4", + "@types/yargs": "^16.0.1", "chai": "^4.3.4", "ethereum-waffle": "^3.3.0", - "ethers": "^5.1.0", - "glob": "^7.1.6", - "hardhat": "^2.1.2", + "hardhat-contract-sizer": "^2.0.3", + "hardhat-gas-reporter": "^1.0.4", "moment": "^2.15.2", "prettier": "^2.2.1", - "semver": "^7.3.5", "ts-generator": "^0.1.1", "ts-node": "^9.1.1", "typechain": "^4.0.3", diff --git a/src/contract-defs.ts b/src/contract-defs.ts index 7890e1a..e428d38 100644 --- a/src/contract-defs.ts +++ b/src/contract-defs.ts @@ -1,32 +1,66 @@ import * as path from 'path' import * as glob from 'glob' -import { ethers, ContractFactory, Signer } from 'ethers' +import { ethers, ContractFactory, Signer, Contract } from 'ethers' import { Interface } from 'ethers/lib/utils' +import { Targets, Versions } from '.' -export const getContractDefinition = (name: string, version?: string): any => { +export const getContractDefinition = ( + name: string, + version?: Versions, + target: Targets = Targets.EVM, +): any => { const match = glob.sync( - path.resolve(__dirname, `../build/artifacts/contracts${version ? `/${version}` : ''}`) + + path.resolve(__dirname, '../build') + + `/artifacts${target ? `-${target}` : ''}` + + `/contracts${version ? `/v${version}` : ''}` + `/**/${name}.json`, ) - if (match.length > 0) { - return require(match[0]) - } else { - throw new Error(`Unable to find artifact for contract: ${name}`) - } + if (match.length === 0) throw new Error(`Unable to find artifact for contract: ${name}`) + + // We return only one match for now + return require(match[0]) } -export const getContractInterface = (name: string, version?: string): Interface => { - const definition = getContractDefinition(name, version) +export const getContractInterface = ( + name: string, + version?: Versions, + target: Targets = Targets.EVM, +): Interface => { + const definition = getContractDefinition(name, version, target) return new ethers.utils.Interface(definition.abi) } export const getContractFactory = ( name: string, signer?: Signer, - version?: string, + version?: Versions, + target: Targets = Targets.EVM, ): ContractFactory => { - const definition = getContractDefinition(name, version) - const contractInterface = getContractInterface(name, version) + const definition = getContractDefinition(name, version, target) + const contractInterface = getContractInterface(name, version, target) return new ContractFactory(contractInterface, definition.bytecode, signer) } + +export const deploy = async ( + factory: ContractFactory, + name: string, + payload: any[] = [], +): Promise => { + const contract = await factory.deploy(...payload) + await contract.deployTransaction.wait() + await assertDeployed(contract) + console.log(`${contract.address} - '${name}' deployed with payload:`, payload) + return contract +} + +// To assert if contract is successfully deployed on OVM, we need to check +// if there is code for reported contract address. This check is necessary +// because Optimism Sequencer doesn't flag failed deployments as a failure. +export const assertDeployed = async (contract: Contract) => { + await contract.deployed() + + const code = await contract.provider.getCode(contract.address) + if (code && code.length > 2) return + throw Error(`Error: Deployment unsuccessful - no code at ${contract.address}`) +} diff --git a/src/hardhat/index.ts b/src/hardhat/index.ts index e2fbe9b..42c1e5a 100644 --- a/src/hardhat/index.ts +++ b/src/hardhat/index.ts @@ -1,6 +1,15 @@ import * as glob from 'glob' import { SolcConfig } from 'hardhat/types' +import _yargs from 'yargs/yargs' +import { hideBin } from 'yargs/helpers' +// Parse CLI arguments +export const yargs = _yargs(hideBin(process.argv)) + +// Load defult CLI arguments +export const { argv } = yargs.env(false).string('contracts').string('network') + +// Glob files matching the pattern and generate Hardhat overrides for them export const generateOverrides = ( pattern: string, options = {}, @@ -10,6 +19,6 @@ export const generateOverrides = ( const files = glob.sync(pattern, options) console.log('Generating Hardhat overrides for: ') console.dir({ files, compiler }, { depth: null, colors: true }) - files.forEach(f => (overrides[f] = compiler)) + files.forEach((f) => (overrides[f] = compiler)) return overrides } diff --git a/src/index.ts b/src/index.ts index faeb7b6..c8ed70a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,2 +1,20 @@ export * as hardhat from './hardhat' +export * as optimism from './optimism' export * from './contract-defs' + +export const enum Versions { + v0_4 = '0.4', + v0_6 = '0.6', + v0_7 = '0.7', +} + +export const enum Targets { + EVM = '', // default target + OVM = 'ovm', +} + +export const enum Networks { + HARDHAT = 'hardhat', + OPTIMISM = 'optimism', // AKA 'hardhat-optimism' + KOVAN_OPTIMISM = 'kovan-optimism', +} diff --git a/src/optimism/index.ts b/src/optimism/index.ts new file mode 100644 index 0000000..91d4cab --- /dev/null +++ b/src/optimism/index.ts @@ -0,0 +1,38 @@ +import * as dotenv from 'dotenv' +import * as optimism from '@chainlink/optimism-utils' +import { Wallet, providers, utils } from 'ethers' + +export * from '@chainlink/optimism-utils' + +// TODO: Fix ERROR { "reason":"cannot estimate gas; transaction may fail or may require manual gas limit","code":"UNPREDICTABLE_GAS_LIMIT" } +export const TX_OVERRIDES_OE_BUG: any = { + gasPrice: utils.parseUnits('1', 'gwei'), + gasLimit: 8_999_999, +} + +export const loadEnv = async (envName: string = 'local'): Promise => { + // Load env configuration by name + dotenv.config({ path: __dirname + `/../../env/.env.${envName}` }) + + // Predefined AddressManager addresses + const addressManager: { [key: string]: string } = { + local: optimism.utils.LOCAL_ADDRESS_MANAGER_ADDR, + kovan: optimism.utils.KOVAN_ADDRESS_MANAGER_ADDR, + mainnet: optimism.utils.MAINNET_ADDRESS_MANAGER_ADDR, + } + + const addressManagerAddr = process.env.ADDRESS_MANAGER_ADDR || addressManager[envName] + if (!addressManagerAddr) throw Error(`Unknown AddressManager for network: ${envName}`) + + const l1Provider = new providers.JsonRpcProvider(process.env.L1_WEB3_URL) + const l2Provider = new providers.JsonRpcProvider(process.env.L2_WEB3_URL) + + l1Provider.pollingInterval = 10 + l2Provider.pollingInterval = 10 + + // Grab wallets for both chains + const l1Wallet = new Wallet(process.env.PRIVATE_KEY!, l1Provider) + const l2Wallet = l1Wallet.connect(l2Provider) + + return await optimism.env.OptimismEnv.new(addressManagerAddr, l1Wallet, l2Wallet) +} diff --git a/test/behavior/token/BasicToken.ts b/test/behavior/token/BasicToken.ts index 1287d62..3f2e15a 100644 --- a/test/behavior/token/BasicToken.ts +++ b/test/behavior/token/BasicToken.ts @@ -19,10 +19,8 @@ export const shouldBehaveLikeBasicToken = ( let token: Contract beforeEach(async () => { - token = await getContractFactory('BasicTokenMock', defaultAccount).deploy( - defaultAccount.address, - 100, - ) + const factory = getContractFactory('BasicTokenMock', defaultAccount) + token = await factory.deploy(defaultAccount.address, 100) }) it('should return the correct totalSupply after construction', async () => { @@ -41,7 +39,7 @@ export const shouldBehaveLikeBasicToken = ( expect(secondAccountBalance).to.equal(100) }) - it('should throw an error when trying to transfer more than balance', async function() { + it('should throw an error when trying to transfer more than balance', async function () { await expect( token.connect(defaultAccount).transfer(personas.Carol.address, 101), ).to.be.revertedWith(getReasonStr('ERC20: transfer amount exceeds balance')) diff --git a/test/behavior/token/StandardToken.ts b/test/behavior/token/StandardToken.ts index 2c30b99..aa2ad15 100644 --- a/test/behavior/token/StandardToken.ts +++ b/test/behavior/token/StandardToken.ts @@ -19,10 +19,8 @@ export const shouldBehaveLikeStandardToken = ( let token: Contract beforeEach(async () => { - token = await getContractFactory('StandardTokenMock', defaultAccount).deploy( - personas.Carol.address, - 100, - ) + const factory = getContractFactory('StandardTokenMock', defaultAccount) + token = await factory.deploy(personas.Carol.address, 100) }) it('should return the correct allowance amount after approval', async () => { diff --git a/test/helpers.ts b/test/helpers/index.ts similarity index 50% rename from test/helpers.ts rename to test/helpers/index.ts index 7e93d19..d562041 100644 --- a/test/helpers.ts +++ b/test/helpers/index.ts @@ -1,5 +1,18 @@ import { ethers } from 'ethers' import { assert } from 'chai' +import { hardhat, Networks, Versions } from '../../src' + +export const describes = { + // Only run if Hardhat unit test + HH: !hardhat.argv.network || hardhat.argv.network === Networks.HARDHAT ? describe : describe.skip, + // Only run if OE integration test + OE: hardhat.argv.network === Networks.OPTIMISM ? describe : describe.skip, +} + +export const revertShim = (v?: Versions) => + v && v === Versions.v0_4 // reason string not supported on versions <= 0.4 + ? (_: string) => REVERT_REASON_EMPTY + : (reason: string) => reason export const REVERT_REASON_EMPTY = 'Transaction reverted without a reason' @@ -17,11 +30,10 @@ export const encodeBytes = (bytes: string) => { return length + padded } -export const functionID = (fnSignature: string) => - ethers.utils - .keccak256(ethers.utils.toUtf8Bytes(fnSignature)) - .slice(2) - .slice(0, 8) +export const functionID = (fnSignature: string) => { + const { keccak256, toUtf8Bytes } = ethers.utils + return keccak256(toUtf8Bytes(fnSignature)).slice(2).slice(0, 8) +} /** * Check that a contract's abi exposes the expected interface. @@ -50,3 +62,34 @@ export function publicAbi( assert.isAtLeast(index, 0, `#${method} is expected to be public`) } } + +/** + * Check that an evm transaction fails + * + * @param action The asynchronous action to execute, which should cause an evm revert. + */ +export async function txRevert(action: (() => Promise) | Promise) { + try { + if (typeof action === 'function') { + await action() + } else { + await action + } + } catch (e) { + assert(e.message, 'Expected an error to contain a message') + + const ERROR_MESSAGES = ['transaction failed'] + const hasErrored = ERROR_MESSAGES.some((msg) => e.message.includes(msg)) + + assert( + hasErrored, + `expected following error message to include ${ERROR_MESSAGES.join(' or ')}. Got: "${ + e.message + }"`, + ) + return + } + + const err = undefined + assert.exists(err, 'Expected an error to be raised') +} diff --git a/test/v0.4/ERC677Token.test.ts b/test/v0.4/ERC677Token.test.ts index 8649e59..356ec27 100644 --- a/test/v0.4/ERC677Token.test.ts +++ b/test/v0.4/ERC677Token.test.ts @@ -1,14 +1,11 @@ import { Signer } from '@ethersproject/abstract-signer' -import { getContractFactory } from '../../src' +import { getContractFactory, Versions } from '../../src' import { shouldBehaveLikeERC677Token } from '../behavior/ERC677Token' -import { REVERT_REASON_EMPTY } from '../helpers' +import * as h from '../helpers' -const VERSION = 'v0.4' - -describe(`ERC677Token ${VERSION}`, () => { +h.describes.HH(`ERC677Token ${Versions.v0_4}`, () => { const _getContractFactory = (name: string, signer?: Signer) => - getContractFactory(name, signer, VERSION) - const _getReasonStr = (_: string) => REVERT_REASON_EMPTY + getContractFactory(name, signer, Versions.v0_4) - shouldBehaveLikeERC677Token(_getContractFactory, _getReasonStr) + shouldBehaveLikeERC677Token(_getContractFactory, h.revertShim(Versions.v0_4)) }) diff --git a/test/v0.4/LinkToken.test.ts b/test/v0.4/LinkToken.test.ts index e00e8cf..c80e2fd 100644 --- a/test/v0.4/LinkToken.test.ts +++ b/test/v0.4/LinkToken.test.ts @@ -1,17 +1,15 @@ import { Signer } from '@ethersproject/abstract-signer' -import { getContractFactory } from '../../src' +import { getContractFactory, Versions } from '../../src' import { shouldBehaveLikeLinkToken } from '../behavior/LinkToken' -import { REVERT_REASON_EMPTY } from '../helpers' +import * as h from '../helpers' -const VERSION = 'v0.4' const v4_EXTRA_PUBLIC_ABI: string[] = [] -describe(`LinkToken ${VERSION}`, () => { +h.describes.HH(`LinkToken ${Versions.v0_4}`, () => { const overrides: Record = { Token677: 'LinkToken' } const _getContractFactory = (name: string, signer?: Signer) => - getContractFactory(overrides[name] || name, signer, VERSION) + getContractFactory(overrides[name] || name, signer, Versions.v0_4) - const _getReasonStr = (_: string) => REVERT_REASON_EMPTY - shouldBehaveLikeLinkToken(_getContractFactory, _getReasonStr, v4_EXTRA_PUBLIC_ABI) + shouldBehaveLikeLinkToken(_getContractFactory, h.revertShim(Versions.v0_4), v4_EXTRA_PUBLIC_ABI) }) diff --git a/test/v0.4/token/BasicToken.test.ts b/test/v0.4/token/BasicToken.test.ts index bed675a..c014681 100644 --- a/test/v0.4/token/BasicToken.test.ts +++ b/test/v0.4/token/BasicToken.test.ts @@ -1,15 +1,12 @@ import { Signer } from '@ethersproject/abstract-signer' -import { getContractFactory } from '../../../src' +import { getContractFactory, Versions } from '../../../src' import { shouldBehaveLikeBasicToken } from '../../behavior/token/BasicToken' -import { REVERT_REASON_EMPTY } from '../../helpers' +import * as h from '../../helpers' -const VERSION = 'v0.4' - -describe(`BasicToken ${VERSION}`, () => { +h.describes.HH(`BasicToken ${Versions.v0_4}`, () => { const _getContractFactory = (name: string, signer?: Signer) => - getContractFactory(name, signer, VERSION) - const _getReasonStr = (_: string) => REVERT_REASON_EMPTY + getContractFactory(name, signer, Versions.v0_4) - shouldBehaveLikeBasicToken(_getContractFactory, _getReasonStr) + shouldBehaveLikeBasicToken(_getContractFactory, h.revertShim(Versions.v0_4)) }) diff --git a/test/v0.4/token/StandardToken.test.ts b/test/v0.4/token/StandardToken.test.ts index 79640bb..8184f5b 100644 --- a/test/v0.4/token/StandardToken.test.ts +++ b/test/v0.4/token/StandardToken.test.ts @@ -1,18 +1,15 @@ import { Signer } from '@ethersproject/abstract-signer' -import { getContractFactory } from '../../../src' +import { getContractFactory, Versions } from '../../../src' import { shouldBehaveLikeBasicToken } from '../../behavior/token/BasicToken' import { shouldBehaveLikeStandardToken } from '../../behavior/token/StandardToken' -import { REVERT_REASON_EMPTY } from '../../helpers' +import * as h from '../../helpers' -const VERSION = 'v0.4' - -describe(`StandardToken ${VERSION}`, () => { +h.describes.HH(`StandardToken ${Versions.v0_4}`, () => { const overrides: Record = { BasicTokenMock: 'StandardTokenMock' } const _getContractFactory = (name: string, signer?: Signer) => - getContractFactory(overrides[name] || name, signer, VERSION) - const _getReasonStr = (_: string) => REVERT_REASON_EMPTY + getContractFactory(overrides[name] || name, signer, Versions.v0_4) - shouldBehaveLikeBasicToken(_getContractFactory, _getReasonStr) - shouldBehaveLikeStandardToken(_getContractFactory, _getReasonStr) + shouldBehaveLikeBasicToken(_getContractFactory, h.revertShim(Versions.v0_4)) + shouldBehaveLikeStandardToken(_getContractFactory, h.revertShim(Versions.v0_4)) }) diff --git a/test/v0.6/ERC677Token.test.ts b/test/v0.6/ERC677Token.test.ts index de9b233..9e1ea4d 100644 --- a/test/v0.6/ERC677Token.test.ts +++ b/test/v0.6/ERC677Token.test.ts @@ -2,16 +2,14 @@ import { ethers } from 'ethers' ethers.utils.Logger.setLogLevel(ethers.utils.Logger.levels.ERROR) import { Signer } from '@ethersproject/abstract-signer' -import { getContractFactory } from '../../src' +import { getContractFactory, Versions } from '../../src' import { shouldBehaveLikeERC677Token } from '../behavior/ERC677Token' +import * as h from '../helpers' -const VERSION = 'v0.6' - -describe(`ERC677Token ${VERSION}`, () => { +h.describes.HH(`ERC677Token ${Versions.v0_6}`, () => { const _getContractFactory = (name: string, signer?: Signer) => - getContractFactory(name, signer, VERSION) - const _getReasonStr = (reason: string) => reason + getContractFactory(name, signer, Versions.v0_6) - shouldBehaveLikeERC677Token(_getContractFactory, _getReasonStr) + shouldBehaveLikeERC677Token(_getContractFactory, h.revertShim()) }) diff --git a/test/v0.6/LinkToken.test.ts b/test/v0.6/LinkToken.test.ts index 97d3156..e3798d3 100644 --- a/test/v0.6/LinkToken.test.ts +++ b/test/v0.6/LinkToken.test.ts @@ -2,18 +2,17 @@ import { ethers } from 'ethers' ethers.utils.Logger.setLogLevel(ethers.utils.Logger.levels.ERROR) import { Signer } from '@ethersproject/abstract-signer' -import { getContractFactory } from '../../src' +import { getContractFactory, Versions } from '../../src' import { shouldBehaveLikeLinkToken } from '../behavior/LinkToken' +import * as h from '../helpers' -const VERSION = 'v0.6' const v6_EXTRA_PUBLIC_ABI = ['decreaseAllowance', 'increaseAllowance'] -describe(`LinkToken ${VERSION}`, () => { +h.describes.HH(`LinkToken ${Versions.v0_6}`, () => { const overrides: Record = { Token677: 'LinkToken' } const _getContractFactory = (name: string, signer?: Signer) => - getContractFactory(overrides[name] || name, signer, VERSION) + getContractFactory(overrides[name] || name, signer, Versions.v0_6) - const _getReasonStr = (reason: string) => reason - shouldBehaveLikeLinkToken(_getContractFactory, _getReasonStr, v6_EXTRA_PUBLIC_ABI) + shouldBehaveLikeLinkToken(_getContractFactory, h.revertShim(), v6_EXTRA_PUBLIC_ABI) }) diff --git a/test/v0.6/PegSwap.test.ts b/test/v0.6/PegSwap.test.ts index 8366ef4..593610b 100644 --- a/test/v0.6/PegSwap.test.ts +++ b/test/v0.6/PegSwap.test.ts @@ -9,7 +9,7 @@ import { StandardTokenMock__factory } from '../../build/types/v0.6/factories/Sta import * as h from '../helpers' -describe('ERC677Token', () => { +h.describes.HH('ERC677Token', () => { let swap: Contract, owner: SignerWithAddress, base: Contract, diff --git a/test/v0.6/token/BasicToken.test.ts b/test/v0.6/token/BasicToken.test.ts index 2137682..047a2a2 100644 --- a/test/v0.6/token/BasicToken.test.ts +++ b/test/v0.6/token/BasicToken.test.ts @@ -2,18 +2,15 @@ import { ethers } from 'ethers' ethers.utils.Logger.setLogLevel(ethers.utils.Logger.levels.ERROR) import { Signer } from '@ethersproject/abstract-signer' -import { getContractFactory } from '../../../src' +import { getContractFactory, Versions } from '../../../src' import { shouldBehaveLikeBasicToken } from '../../behavior/token/BasicToken' +import * as h from '../../helpers' -const VERSION = 'v0.6' - -describe(`BasicToken ${VERSION}`, () => { +h.describes.HH(`BasicToken ${Versions.v0_6}`, () => { const overrides: Record = { BasicTokenMock: 'StandardTokenMock' } const _getContractFactory = (name: string, signer?: Signer) => - getContractFactory(overrides[name] || name, signer, VERSION) - - const _getReasonStr = (reason: string) => reason + getContractFactory(overrides[name] || name, signer, Versions.v0_6) - shouldBehaveLikeBasicToken(_getContractFactory, _getReasonStr) + shouldBehaveLikeBasicToken(_getContractFactory, h.revertShim()) }) diff --git a/test/v0.6/token/StandardToken.test.ts b/test/v0.6/token/StandardToken.test.ts index 9e70714..b6e2f5d 100644 --- a/test/v0.6/token/StandardToken.test.ts +++ b/test/v0.6/token/StandardToken.test.ts @@ -2,19 +2,17 @@ import { ethers } from 'ethers' ethers.utils.Logger.setLogLevel(ethers.utils.Logger.levels.ERROR) import { Signer } from '@ethersproject/abstract-signer' -import { getContractFactory } from '../../../src' +import { getContractFactory, Versions } from '../../../src' import { shouldBehaveLikeBasicToken } from '../../behavior/token/BasicToken' import { shouldBehaveLikeStandardToken } from '../../behavior/token/StandardToken' +import * as h from '../../helpers' -const VERSION = 'v0.6' - -describe(`StandardToken ${VERSION}`, () => { +h.describes.HH(`StandardToken ${Versions.v0_6}`, () => { const overrides: Record = { BasicTokenMock: 'StandardTokenMock' } const _getContractFactory = (name: string, signer?: Signer) => - getContractFactory(overrides[name] || name, signer, VERSION) - const _getReasonStr = (reason: string) => reason + getContractFactory(overrides[name] || name, signer, Versions.v0_6) - shouldBehaveLikeBasicToken(_getContractFactory, _getReasonStr) - shouldBehaveLikeStandardToken(_getContractFactory, _getReasonStr) + shouldBehaveLikeBasicToken(_getContractFactory, h.revertShim()) + shouldBehaveLikeStandardToken(_getContractFactory, h.revertShim()) }) diff --git a/test/v0.7/bridge/token/LinkTokenChild.test.ts b/test/v0.7/bridge/token/LinkTokenChild.test.ts new file mode 100644 index 0000000..915bd5c --- /dev/null +++ b/test/v0.7/bridge/token/LinkTokenChild.test.ts @@ -0,0 +1,184 @@ +import { ethers } from 'hardhat' +import { expect } from 'chai' +import { BigNumberish } from '@ethersproject/bignumber' +import { parseEther } from '@ethersproject/units' +import { Contract, ContractFactory, Signer } from 'ethers' +import { getContractFactory, deploy, Targets, Versions, optimism } from '../../../../src' + +import { shouldBehaveLikeERC677Token } from '../../../behavior/ERC677Token' +import { shouldBehaveLikeLinkToken } from '../../../behavior/LinkToken' +import * as h from '../../../helpers' + +export class LinkTokenChildTest__factory { + readonly signer: Signer + constructor(signer?: Signer) { + this.signer = signer || ({} as Signer) + } + + static new(signer?: Signer): ContractFactory { + return (new LinkTokenChildTest__factory(signer) as unknown) as ContractFactory + } + + deploy(...args: Array): Promise { + const initBalance: number = args[0] || '1000000000000000000000000000' + const _deploy = async () => { + // Deploy LinkTokenChild contract + const token = await getContractFactory( + 'LinkTokenChild', + this.signer, + Versions.v0_7, + Targets.EVM, + ).deploy() + + // Grant BRIDGE_GATEWAY_ROLE role + const signerAddr = await this.signer.getAddress() + const gatewayRole = await token.BRIDGE_GATEWAY_ROLE() + await token.grantRole(gatewayRole, signerAddr) + + // Deposit requested amount + await token.deposit(signerAddr, initBalance) + return token + } + + return _deploy() + } + + connect(signer: Signer): ContractFactory { + return LinkTokenChildTest__factory.new(signer) + } +} + +const OZ_AccessControl_PUBLIC_ABI = ['BRIDGE_GATEWAY_ROLE', 'deposit', 'withdraw'] +const LinkTokenChild_PUBLIC_ABI = [ + 'DEFAULT_ADMIN_ROLE', + 'hasRole', + 'getRoleMemberCount', + 'getRoleMember', + 'getRoleAdmin', + 'grantRole', + 'revokeRole', + 'renounceRole', +] +const EXTRA_PUBLIC_ABI = [ + 'decreaseAllowance', + 'increaseAllowance', + ...OZ_AccessControl_PUBLIC_ABI, + ...LinkTokenChild_PUBLIC_ABI, +] + +describe(`LinkTokenChild ${Versions.v0_7}`, () => { + h.describes.HH(`@unit ${Versions.v0_7}`, () => { + const _getContractFactory = (name: string, signer?: Signer) => { + if (name === 'LinkToken' || name === 'Token677') { + return LinkTokenChildTest__factory.new(signer) + } + return getContractFactory(name, signer, Versions.v0_6) + } + + shouldBehaveLikeERC677Token(_getContractFactory, h.revertShim()) + shouldBehaveLikeLinkToken(_getContractFactory, h.revertShim(), EXTRA_PUBLIC_ABI) + + describe(`Child token functionality`, () => { + let l2Token: Contract + + beforeEach(async function () { + const [admin] = await ethers.getSigners() + // Deploy LinkTokenChild contract + l2Token = await deploy( + getContractFactory('LinkTokenChild', admin, Versions.v0_7, Targets.EVM), + 'LinkTokenChild', + ) + }) + + it('can NOT deposit without BRIDGE_GATEWAY_ROLE', async () => { + const [_admin, recipient] = await ethers.getSigners() + + await expect(l2Token.connect(recipient).deposit(recipient.address, 100)).to.be.revertedWith( + 'LinkTokenChild: missing role', + ) + }) + + it('can deposit with BRIDGE_GATEWAY_ROLE', async () => { + const [_admin, gateway, recipient] = await ethers.getSigners() + + // Get the required gateway role + const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() + + const grantRoleTx = await l2Token.grantRole( + gatewayRole, + gateway.address, + optimism.TX_OVERRIDES_OE_BUG, + ) + await grantRoleTx.wait() + + // Admin deposit still fails + await expect(l2Token.deposit(recipient.address, 100)).to.be.revertedWith( + 'LinkTokenChild: missing role', + ) + + await l2Token.connect(gateway).deposit(recipient.address, 100) + + const balance = await l2Token.balanceOf(recipient.address) + expect(balance).to.be.equal(100) + + const totalSupply = await l2Token.totalSupply() + expect(totalSupply).to.be.equal(100) + }) + + it('admin can give out multiple BRIDGE_GATEWAY_ROLE', async () => { + const [_, gateway1, gateway2, recipient] = await ethers.getSigners() + + // Get the required gateway role + const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() + + await l2Token.grantRole(gatewayRole, gateway1.address) + await l2Token.grantRole(gatewayRole, gateway2.address) + + await l2Token.connect(gateway1).deposit(recipient.address, 100) + await l2Token.connect(gateway2).deposit(recipient.address, 100) + + const balance = await l2Token.balanceOf(recipient.address) + expect(balance).to.be.equal(200) + + const totalSupply = await l2Token.totalSupply() + expect(totalSupply).to.be.equal(200) + }) + }) + }) + + h.describes.OE('@integration', () => { + let oe: optimism.env.OptimismEnv, l2Token: Contract + + before(async function () { + this.timeout(10000) + + // Load the configuration from environment + oe = await optimism.loadEnv() + // Fund L2 wallet + await oe.depositL2(parseEther('10') as BigNumberish) + + // Deploy LinkTokenChild contract + l2Token = await deploy( + getContractFactory('LinkTokenChild', oe.l2Wallet, Versions.v0_7, Targets.OVM), + 'LinkTokenChild', + [optimism.TX_OVERRIDES_OE_BUG], + ) + }) + + it('totalSupply is 0 on deploy', async () => { + const totalSupply = await l2Token.totalSupply() + expect(totalSupply).to.equal('0') + }) + + it('can NOT deposit without BRIDGE_GATEWAY_ROLE', async () => { + const depositTx = await l2Token.deposit( + oe.l2Wallet.address, + 100, + optimism.TX_OVERRIDES_OE_BUG, + ) + // TODO: fetch revert reason + // revert: LinkTokenChild: missing role + await h.txRevert(depositTx.wait()) + }) + }) +}) diff --git a/yarn.lock b/yarn.lock index 1e2ce75..e1b99eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,17 @@ "@truffle/contract" "^4.2.29" ethers "^4.0.45" +"@chainlink/optimism-utils@https://github.com/smartcontractkit/optimism-utils.git": + version "0.0.1-alpha" + resolved "https://github.com/smartcontractkit/optimism-utils.git#b1415a2b4067fd757f0730d597bbb0d4f85a300f" + dependencies: + "@eth-optimism/contracts" "^0.2.7" + "@eth-optimism/core-utils" "^0.3.1" + "@ethersproject/bignumber" "^5.1.1" + "@ethersproject/providers" "^5.1.2" + "@ethersproject/units" "^5.1.0" + ethers "^5.1.3" + "@ensdomains/ens@^0.4.4": version "0.4.5" resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.5.tgz#e0aebc005afdc066447c6e22feb4eda89a5edbfc" @@ -26,6 +37,57 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== +"@eth-optimism/contracts@^0.2.7": + version "0.2.7" + resolved "https://registry.yarnpkg.com/@eth-optimism/contracts/-/contracts-0.2.7.tgz#ab3b1f5e30f36d1f5fd4449e9031d8bb9a920ceb" + integrity sha512-hPaMq+cqdzzXFGdaitlAo5vlUVPoui4zTfkqlXC1Rd12gHxObPYeY1Bhva67i6lQ4OQybmXAYi16fEYWdXTDzA== + dependencies: + "@eth-optimism/core-utils" "^0.3.1" + "@eth-optimism/solc" "^0.6.12-alpha.1" + "@ethersproject/abstract-provider" "^5.0.8" + "@ethersproject/contracts" "^5.0.5" + "@openzeppelin/contracts" "^3.3.0" + "@typechain/hardhat" "^1.0.1" + ganache-core "^2.13.2" + glob "^7.1.6" + +"@eth-optimism/core-utils@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.3.1.tgz#c7979e6fddcd16fa4e466b52bdceaf2260106c32" + integrity sha512-0zqbk2xPUB8dzdquYR2jlRML0IMsy7fOWDmUhaUyV7TS8PhSDDx/Yj/edR86jjncV1AMDanDrxtZlnCLPXPXog== + dependencies: + "@ethersproject/abstract-provider" "^5.0.9" + "@sentry/node" "^6.3.0" + "@types/pino-multi-stream" "^5.1.1" + ethers "^5.0.31" + lodash "^4.17.21" + pino "^6.11.1" + pino-multi-stream "^5.3.0" + pino-sentry "^0.7.0" + prom-client "^13.1.0" + +"@eth-optimism/hardhat-ovm@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@eth-optimism/hardhat-ovm/-/hardhat-ovm-0.0.3.tgz#4d9e34e4a466a4750b68785bec73ff76e44f6198" + integrity sha512-J4B+HXjP2DA8FWaKTbZ+7qIULNM3OxQrkXklcfb63WRjvlR3xWNK72BBMMVA4V1W9BwDNx5hgr08hehg6mmV1w== + 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" + integrity sha512-Ky73mo+2iNJs/VTaT751nMeZ7hXns0TBAlffTOxIOsScjAZ/zi/KWsDUo3r89aV2JKXcYAU/bLidxF40MVJeUw== + 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" + "@ethereum-waffle/chai@^3.3.0": version "3.3.1" resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.3.1.tgz#3f20b810d0fa516f19af93c50c3be1091333fa8e" @@ -79,6 +141,76 @@ 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== + dependencies: + "@ethereumjs/common" "^2.2.0" + "@ethereumjs/tx" "^3.1.3" + ethereumjs-util "^7.0.10" + merkle-patricia-tree "^4.1.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== + dependencies: + "@ethereumjs/block" "^3.2.0" + "@ethereumjs/common" "^2.2.0" + "@ethereumjs/ethash" "^1.0.0" + debug "^2.2.0" + ethereumjs-util "^7.0.9" + level-mem "^5.0.1" + lru-cache "^5.1.1" + rlp "^2.2.4" + semaphore-async-await "^1.5.1" + +"@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== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.0.9" + +"@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": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.1.3.tgz#0e4b0ccec2f12b1f0bbbb0e7542dd79d9ec25d87" + integrity sha512-DJBu6cbwYtiPTFeCUR8DF5p+PF0jxs+0rALJZiEcTz2tiRPIEkM72GEbrkGuqzENLCzBrJHT43O0DxSYTqeo+g== + dependencies: + "@ethereumjs/common" "^2.2.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" + async-eventemitter "^0.2.4" + core-js-pure "^3.0.1" + debug "^2.2.0" + ethereumjs-util "^7.0.10" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + merkle-patricia-tree "^4.1.0" + rustbn.js "~0.2.0" + util.promisify "^1.0.1" + "@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" @@ -109,7 +241,7 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" -"@ethersproject/abi@5.1.0", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.0": +"@ethersproject/abi@5.1.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.1.0.tgz#d582c9f6a8e8192778b5f2c991ce19d7b336b0c5" integrity sha512-N/W9Sbn1/C6Kh2kuHRjf/hX6euMK4+9zdJRBB8sDWmihVntjUAfxbusGZKzDQD8i3szAHhTz8K7XADV5iFNfJw== @@ -124,7 +256,22 @@ "@ethersproject/properties" "^5.1.0" "@ethersproject/strings" "^5.1.0" -"@ethersproject/abstract-provider@5.1.0", "@ethersproject/abstract-provider@^5.1.0": +"@ethersproject/abi@5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.1.1.tgz#79525f582338d98660ac709c65b44c3c081ed2fc" + integrity sha512-UNmhRL4ngm1nCWvhJWRd55PvP1JWojGD4BR63JxyiiWZQAszYzaHHeYdRcj+NY3S0kV6SmAS2dZWSBOZPnXbSw== + dependencies: + "@ethersproject/address" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/hash" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + +"@ethersproject/abstract-provider@5.1.0", "@ethersproject/abstract-provider@^5.0.8", "@ethersproject/abstract-provider@^5.0.9", "@ethersproject/abstract-provider@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz#1f24c56cda5524ef4ed3cfc562a01d6b6f8eeb0b" integrity sha512-8dJUnT8VNvPwWhYIau4dwp7qe1g+KgdRm4XTWvjkI9gAT2zZa90WF5ApdZ3vl1r6NDmnn6vUVvyphClRZRteTQ== @@ -183,6 +330,15 @@ "@ethersproject/logger" "^5.1.0" bn.js "^4.4.0" +"@ethersproject/bignumber@5.1.1", "@ethersproject/bignumber@^5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.1.1.tgz#84812695253ccbc639117f7ac49ee1529b68e637" + integrity sha512-AVz5iqz7+70RIqoQTznsdJ6DOVBYciNlvO+AlQmPTB6ofCvoihI9bQdr6wljsX+d5W7Yc4nyvQvP4JMzg0Agig== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + bn.js "^4.4.0" + "@ethersproject/bytes@5.1.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.1.0.tgz#55dfa9c4c21df1b1b538be3accb50fb76d5facfd" @@ -197,7 +353,7 @@ dependencies: "@ethersproject/bignumber" "^5.1.0" -"@ethersproject/contracts@5.1.0": +"@ethersproject/contracts@5.1.0", "@ethersproject/contracts@^5.0.5": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.1.0.tgz#f7c3451f1af77e029005733ccab3419d07d23f6b" integrity sha512-dvTMs/4XGSc57cYOW0KjgX1NdTujUu7mNb6PQdJWg08m9ULzPyGZuBkFJnijBcp6vTOCQ59RwjboWgNWw393og== @@ -213,6 +369,22 @@ "@ethersproject/properties" "^5.1.0" "@ethersproject/transactions" "^5.1.0" +"@ethersproject/contracts@5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.1.1.tgz#c66cb6d618fcbd73e20a6b808e8f768b2b781d0b" + integrity sha512-6WwktLJ0DFWU8pDkgH4IGttQHhQN4SnwKFu9h+QYVe48VGWtbDu4W8/q/7QA1u/HWlWMrKxqawPiZUJj0UMvOw== + dependencies: + "@ethersproject/abi" "^5.1.0" + "@ethersproject/abstract-provider" "^5.1.0" + "@ethersproject/abstract-signer" "^5.1.0" + "@ethersproject/address" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/transactions" "^5.1.0" + "@ethersproject/hash@5.1.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.1.0.tgz#40961d64837d57f580b7b055e0d74174876d891e" @@ -324,6 +496,31 @@ bech32 "1.1.4" ws "7.2.3" +"@ethersproject/providers@5.1.2", "@ethersproject/providers@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.1.2.tgz#4e4459698903f911402fe91aa7544eb07f3921ed" + integrity sha512-GqsS8rd+eyd4eNkcNgzZ4l9IRULBPUZa7JPnv22k4MHflMobUseyhfbVnmoN5bVNNkOxjV1IPTw9i0sV1hwdpg== + dependencies: + "@ethersproject/abstract-provider" "^5.1.0" + "@ethersproject/abstract-signer" "^5.1.0" + "@ethersproject/address" "^5.1.0" + "@ethersproject/basex" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/hash" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/networks" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/random" "^5.1.0" + "@ethersproject/rlp" "^5.1.0" + "@ethersproject/sha2" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + "@ethersproject/transactions" "^5.1.0" + "@ethersproject/web" "^5.1.0" + bech32 "1.1.4" + ws "7.2.3" + "@ethersproject/random@5.1.0", "@ethersproject/random@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.1.0.tgz#0bdff2554df03ebc5f75689614f2d58ea0d9a71f" @@ -395,7 +592,22 @@ "@ethersproject/rlp" "^5.1.0" "@ethersproject/signing-key" "^5.1.0" -"@ethersproject/units@5.1.0": +"@ethersproject/transactions@5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.1.1.tgz#5a6bbb25fb062c3cc75eb0db12faefcdd3870813" + integrity sha512-Nwgbp09ttIVN0OoUBatCXaHxR7grWPHbozJN8v7AXDLrl6nnOIBEMDh+yJTnosSQlFhcyjfTGGN+Mx6R8HdvMw== + dependencies: + "@ethersproject/address" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/rlp" "^5.1.0" + "@ethersproject/signing-key" "^5.1.0" + +"@ethersproject/units@5.1.0", "@ethersproject/units@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.1.0.tgz#b6ab3430ebc22adc3cb4839516496f167bee3ad5" integrity sha512-isvJrx6qG0nKWfxsGORNjmOq/nh175fStfvRTA2xEKrGqx8JNJY83fswu4GkILowfriEM/eYpretfJnfzi7YhA== @@ -447,27 +659,6 @@ "@ethersproject/properties" "^5.1.0" "@ethersproject/strings" "^5.1.0" -"@nomiclabs/ethereumjs-vm@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@nomiclabs/ethereumjs-vm/-/ethereumjs-vm-4.2.2.tgz#2f8817113ca0fb6c44c1b870d0a809f0e026a6cc" - integrity sha512-8WmX94mMcJaZ7/m7yBbyuS6B+wuOul+eF+RY9fBpGhNaUpyMR/vFIcDojqcWQ4Yafe1tMKY5LDu2yfT4NZgV4Q== - 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 "3.0.0" - rustbn.js "~0.2.0" - safe-buffer "^5.1.1" - util.promisify "^1.0.0" - "@nomiclabs/hardhat-ethers@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" @@ -481,7 +672,12 @@ "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" -"@openzeppelin/contracts@^3.4.0": +"@openzeppelin/contracts@3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.0.tgz#9a1669ad5f9fdfb6e273bb5a4fed10cb4cc35eb0" + integrity sha512-qh+EiHWzfY/9CORr+eRUkeEUP1WiFUcq3974bLHwyYzLBUtK6HPaMkIUHi74S1rDTZ0sNz42DwPc5A4IJvN3rg== + +"@openzeppelin/contracts@^3.3.0": version "3.4.1" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.1.tgz#03c891fec7f93be0ae44ed74e57a122a38732ce7" integrity sha512-cUriqMauq1ylzP2TxePNdPqkwI7Le3Annh4K9rrpvKfSBB/bdW+Iu1ihBaTIABTAAJ85LmKL5SSPPL9ry8d1gQ== @@ -534,6 +730,17 @@ "@sentry/utils" "5.30.0" tslib "^1.9.3" +"@sentry/core@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.3.1.tgz#5e32ca919c9be30fec0bb3125a556bc711584bdf" + integrity sha512-aVuvVbaehGeN86jZlLDGGkhEtprdOtB6lvYLfGy40Dj1Tkh2mGWE550QsRXAXAqYvQzIYwQR23r6m3o8FujgVg== + dependencies: + "@sentry/hub" "6.3.1" + "@sentry/minimal" "6.3.1" + "@sentry/types" "6.3.1" + "@sentry/utils" "6.3.1" + 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" @@ -543,6 +750,15 @@ "@sentry/utils" "5.30.0" tslib "^1.9.3" +"@sentry/hub@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.3.1.tgz#dda07888a82d1c48bbefa00205bfa9d035691f07" + integrity sha512-2er+OeVlsdVZkhl9kXQAANwgjwoCdM1etK2iFuhzX8xkMaJlAuZLyQInv2U1BbXBlIfWjvzRM8B95hCWvVrR3Q== + dependencies: + "@sentry/types" "6.3.1" + "@sentry/utils" "6.3.1" + 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" @@ -552,6 +768,15 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" +"@sentry/minimal@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.3.1.tgz#38f71c77e8820555effb6e868336d4f5672018cd" + integrity sha512-0eN9S7HvXsCQEjX/qXHTMgvSb3mwrnZEWS9Qz/Bz5ig9pEGXKgJ1om5NTTHVHhXqd3wFCjdvIo6slufLHoCtSw== + dependencies: + "@sentry/hub" "6.3.1" + "@sentry/types" "6.3.1" + 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" @@ -567,6 +792,21 @@ lru_map "^0.3.3" tslib "^1.9.3" +"@sentry/node@^6.2.5", "@sentry/node@^6.3.0": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.3.1.tgz#0f81a0e352fa5b3e36bcc53adb6e26cd214c637d" + integrity sha512-D0r603fdNwUPkwvy0IcQaUSTafl+7lrOytiO5dfdLdlkhtTcwivwENc/n8ER8GOC2zpIvYOEIJvzP4PGL85khw== + dependencies: + "@sentry/core" "6.3.1" + "@sentry/hub" "6.3.1" + "@sentry/tracing" "6.3.1" + "@sentry/types" "6.3.1" + "@sentry/utils" "6.3.1" + 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" @@ -578,11 +818,27 @@ "@sentry/utils" "5.30.0" tslib "^1.9.3" +"@sentry/tracing@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.3.1.tgz#3b96aabf4d9cebadfec070c006db79801a68ee24" + integrity sha512-qveDmoWsXy9qLEblZJwJ1OU/zZRlEd/q7Jhd0Hnwlob8Ci96huABEbYyGdJs18BKVHEFU3gSdVfvrikUE/W17g== + dependencies: + "@sentry/hub" "6.3.1" + "@sentry/minimal" "6.3.1" + "@sentry/types" "6.3.1" + "@sentry/utils" "6.3.1" + 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/types@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.3.1.tgz#af3b54728b29f633f38fbe51b8c10e3834fbc158" + integrity sha512-BEBn8JX1yaooCAuonbaMci9z0RjwwMbQ3Eny/eyDdd+rjXprZCZaStZnCvSThbNBqAJ8YaUqY2YBMnEwJxarAw== + "@sentry/utils@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" @@ -591,6 +847,14 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" +"@sentry/utils@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.3.1.tgz#6d8e691139b5b49d8c655ad1dcaf2cb3ff0d0b03" + integrity sha512-cdtl/QWC9FtinAuW3w8QfvSfh/Q9ui5vwvjzVHiS1ga/U38edi2XX+cttY39ZYwz0SQG99cE10GOIhd1p7/mAA== + dependencies: + "@sentry/types" "6.3.1" + 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" @@ -601,6 +865,11 @@ resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.11.1.tgz#fa840af64840c930f24a9c82c08d4a092a068add" integrity sha512-H8BSBoKE8EubJa0ONqecA2TviT3TnHeC4NpgnAHSUiuhZoQBfPB4L2P9bs8R6AoTW10Endvh3vc+fomVMIDIYQ== +"@solidity-parser/parser@^0.12.0": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.12.1.tgz#10ce249890d32ba500e9ce449e60a2b26b11be7a" + integrity sha512-ikxVpwskNxEp2fvYS1BdRImnevHmM97zdPFBa1cVtjtNpoqCm/EmljATTZk0s9G/zsN5ZbPf9OAIAW4gbBJiRA== + "@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" @@ -722,6 +991,11 @@ resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-1.0.1.tgz#6e53956c15b2aff073413cfcdb3f5339b0a85f2e" integrity sha512-gRETPlvLdN95PIP3PVktEtQSnSMJMWxaxNKI34KFPYEuW4QLLm6UrUCHWmulhB1eUQ1EhYRAda7kEhcJOQ/M1g== +"@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" @@ -741,6 +1015,20 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.16.tgz#f09cc36e18d28274f942e7201147cce34d97e8c8" integrity sha512-vI5iOAsez9+roLS3M3+Xx7w+WRuDtSmF8bQkrbcIJ2sC1PcDgVoA0WGpa+bIrJ+y8zqY2oi//fUctkxtIcXJCw== +"@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" + integrity sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0= + dependencies: + "@types/node" "*" + +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" + integrity sha1-yayFsqX9GENbjIXZ7LUObWyJP/g= + dependencies: + "@types/node" "*" + "@types/glob@^7.1.3": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" @@ -749,6 +1037,19 @@ "@types/minimatch" "*" "@types/node" "*" +"@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/lodash@^4.14.168": + version "4.14.168" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" + integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== + "@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" @@ -784,6 +1085,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== +"@types/node@^10.0.3": + version "10.17.58" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.58.tgz#10682f6016fd866725c36d22ce6bbbd029bf4545" + integrity sha512-Dn5RBxLohjdHFj17dVVw3rtrZAeXeWg+LQfvxDIW/fdPkSiuQk7h3frKMYtsQhtIW42wkErDcy9UMVxhGW4O7w== + "@types/node@^10.12.18": version "10.17.56" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.56.tgz#010c9e047c3ff09ddcd11cbb6cf5912725cdc2b3" @@ -794,6 +1100,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.7.tgz#1cb61fd0c85cb87e728c43107b5fd82b69bc9ef8" integrity sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA== +"@types/node@^8.0.0": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + "@types/pbkdf2@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" @@ -801,11 +1112,47 @@ dependencies: "@types/node" "*" +"@types/pino-multi-stream@^5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/pino-multi-stream/-/pino-multi-stream-5.1.1.tgz#8d5bc607357324621667c8a5613d4a534c075d0f" + integrity sha512-juOdSxwfE5TFKJJlq/VzXxTRyO+9yI9RZoyh/CYnof8MvqM+aUSUP1ZXGTuOZe7qgQnGp8xr8NHU2O/rTrYysA== + dependencies: + "@types/pino" "*" + +"@types/pino-pretty@*": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@types/pino-pretty/-/pino-pretty-4.7.0.tgz#e4a18541f8464d1cc48216f5593cc6a0e62dc2c3" + integrity sha512-fIZ+VXf9gJoJR4tiiM7G+j/bZkPoZEfFGzA4d8tAWCTpTVyvVaBwnmdLs3wEXYpMjw8eXulrOzNCjmGHT3FgHw== + dependencies: + "@types/pino" "*" + +"@types/pino-std-serializers@*": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/pino-std-serializers/-/pino-std-serializers-2.4.1.tgz#f8bd52a209c8b3c97d1533b1ba27f57c816382bf" + integrity sha512-17XcksO47M24IVTVKPeAByWUd3Oez7EbIjXpSbzMPhXVzgjGtrOa49gKBwxH9hb8dKv58OelsWQ+A1G1l9S3wQ== + dependencies: + "@types/node" "*" + +"@types/pino@*": + version "6.3.7" + resolved "https://registry.yarnpkg.com/@types/pino/-/pino-6.3.7.tgz#0ccef98a159230cb3fa2589c7e8b00a7550a69f6" + integrity sha512-v7FdDXVEL0Zx1zcCf0cJZMojChnF+O0ujDKV1UdocsLuUhENjdtNIaanCZK1zRELp35x//bI2/IHtYUK0vmRvw== + dependencies: + "@types/node" "*" + "@types/pino-pretty" "*" + "@types/pino-std-serializers" "*" + "@types/sonic-boom" "*" + "@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.2.31": + 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" @@ -820,11 +1167,6 @@ dependencies: "@types/node" "*" -"@types/semver@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" - integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== - "@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" @@ -845,6 +1187,13 @@ resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz#3a84cf5ec3249439015e14049bd3161419bf9eae" integrity sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg== +"@types/sonic-boom@*": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@types/sonic-boom/-/sonic-boom-0.7.0.tgz#38337036293992a1df65dd3161abddf8fb9b7176" + integrity sha512-AfqR0fZMoUXUNwusgXKxcE9DPlHNDHQp6nKYUd4PSRpLobF5CCevSpyTEBcVZreqaWKCnGBr9KI1fHMTttoB7A== + dependencies: + "@types/node" "*" + "@types/underscore@*": version "1.11.0" resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.0.tgz#bb33549f8f89957fdf959c16e4c1d0eaa5bf985d" @@ -858,6 +1207,18 @@ "@types/bn.js" "*" "@types/underscore" "*" +"@types/yargs-parser@*": + version "20.2.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" + integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== + +"@types/yargs@^16.0.1": + version "16.0.1" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.1.tgz#5fc5d41f69762e00fbecbc8d4bf9dea47d8726f4" + integrity sha512-x4HABGLyzr5hKUzBC9dvjciOTm11WVH1NWonNjGgxapnTHu5SWUqyqn0zQ6Re0yQU0lsQ6ztLCoMAKDGZflyxA== + dependencies: + "@types/yargs-parser" "*" + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -891,6 +1252,17 @@ abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: 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" @@ -898,6 +1270,17 @@ abstract-leveldown@~2.6.0: 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" @@ -981,6 +1364,11 @@ ansi-regex@^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" @@ -993,6 +1381,13 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.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.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -1062,6 +1457,11 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + asn1.js@^5.2.0: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -1094,7 +1494,7 @@ assign-symbols@^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.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== @@ -1135,6 +1535,11 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +atomic-sleep@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + available-typed-arrays@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" @@ -1740,6 +2145,18 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bintrees@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.1.tgz#0e655c9b9c2435eaab68bf4027226d2b55a34524" + integrity sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ= + bip39@2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235" @@ -1751,6 +2168,13 @@ bip39@2.5.0: safe-buffer "^5.0.1" unorm "^1.3.3" +bip66@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" + integrity sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI= + dependencies: + safe-buffer "^5.0.1" + blakejs@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" @@ -1843,7 +2267,7 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -2042,7 +2466,7 @@ caniuse-lite@^1.0.30000844: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz#364d47d35a3007e528f69adb6fecb07c2bb2cc50" integrity sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw== -caseless@~0.12.0: +caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= @@ -2087,6 +2511,11 @@ chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" @@ -2197,6 +2626,26 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cli-table3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" + integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== + dependencies: + object-assign "^4.1.0" + string-width "^4.2.0" + optionalDependencies: + colors "^1.1.2" + cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -2215,6 +2664,15 @@ cliui@^5.0.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" @@ -2247,11 +2705,28 @@ color-convert@^1.9.0: 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== + +colors@^1.1.2, colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + 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" @@ -2278,6 +2753,11 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -2288,7 +2768,7 @@ concat-map@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: +concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -2374,6 +2854,14 @@ cors@^2.8.1: 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" @@ -2429,6 +2917,11 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + crypto-browserify@3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -2566,6 +3059,14 @@ deferred-leveldown@~4.0.0: 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" @@ -2689,6 +3190,11 @@ domutils@^2.4.3, domutils@^2.4.4: domelementtype "^2.2.0" domhandler "^4.1.0" +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + dotignore@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" @@ -2696,11 +3202,30 @@ dotignore@~0.1.2: dependencies: minimatch "^3.0.4" +drbg.js@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b" + integrity sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs= + dependencies: + browserify-aes "^1.0.6" + create-hash "^1.1.2" + create-hmac "^1.1.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= +duplexify@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61" + integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2750,6 +3275,11 @@ emoji-regex@^7.0.1: 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== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -2766,6 +3296,16 @@ encoding-down@5.0.4, encoding-down@~5.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" @@ -2773,7 +3313,7 @@ encoding@^0.1.11: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: 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== @@ -2873,6 +3413,11 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: 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" @@ -2919,6 +3464,27 @@ eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.0, eth-ens-namehash@^2.0.8: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" +eth-gas-reporter@^0.2.20: + version "0.2.22" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.22.tgz#bbe91f5d7b22433d26f099eeb5b20118ced0e575" + integrity sha512-L1FlC792aTf3j/j+gGzSNlGrXKSxNPXQNk6TnV5NNZ2w3jnQCRyJjDl0zUo25Cq2t90IS5vGdbkwqFQK7Ce+kw== + dependencies: + "@ethersproject/abi" "^5.0.0-beta.146" + "@solidity-parser/parser" "^0.12.0" + cli-table3 "^0.5.0" + colors "^1.1.2" + ethereumjs-util "6.2.0" + ethers "^4.0.40" + fs-readdir-recursive "^1.1.0" + lodash "^4.17.14" + markdown-table "^1.1.3" + mocha "^7.1.1" + req-cwd "^2.0.0" + request "^2.88.0" + request-promise-native "^1.0.5" + sha1 "^1.1.1" + sync-request "^6.0.0" + 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" @@ -3209,6 +3775,19 @@ ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@ ethereum-common "^0.0.18" ethereumjs-util "^5.0.0" +ethereumjs-util@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz#23ec79b2488a7d041242f01e25f24e5ad0357960" + integrity sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + ethjs-util "0.1.6" + keccak "^2.0.0" + rlp "^2.2.3" + secp256k1 "^3.0.1" + 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" @@ -3246,7 +3825,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.2: +ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.7, ethereumjs-util@^7.0.8, ethereumjs-util@^7.0.9: 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== @@ -3311,7 +3890,7 @@ ethereumjs-wallet@0.6.5: utf8 "^3.0.0" uuid "^3.3.2" -ethers@^4.0.32, ethers@^4.0.45: +ethers@^4.0.32, ethers@^4.0.40, ethers@^4.0.45: version "4.0.48" resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.48.tgz#330c65b8133e112b0613156e57e92d9009d8fbbe" integrity sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g== @@ -3326,7 +3905,7 @@ ethers@^4.0.32, ethers@^4.0.45: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.1.0: +ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.0.31: version "5.1.0" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.1.0.tgz#8a8758e0b6cbbc19fd4b87f4d551170fa6f1a995" integrity sha512-2L6Ge6wMBw02FlRoCLg4E0Elt3khMNlW6ULawa10mMeeZToYJ5+uCfiuTuB+XZ6om1Y7wuO9ZzezP8FsU2M/+g== @@ -3362,6 +3941,42 @@ ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.1.0: "@ethersproject/web" "5.1.0" "@ethersproject/wordlists" "5.1.0" +ethers@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.1.3.tgz#68eb48742b8a8ca53480bca2e53fb314c23fea7f" + integrity sha512-QAj+LG3z5HsK6UDAOdCjDEthWioZ7sTzAcMWyVrQF+ACioalQ99NrrSxIq5qS0c+hoy3TAIjqpYteHgC2Iqy+w== + dependencies: + "@ethersproject/abi" "5.1.1" + "@ethersproject/abstract-provider" "5.1.0" + "@ethersproject/abstract-signer" "5.1.0" + "@ethersproject/address" "5.1.0" + "@ethersproject/base64" "5.1.0" + "@ethersproject/basex" "5.1.0" + "@ethersproject/bignumber" "5.1.1" + "@ethersproject/bytes" "5.1.0" + "@ethersproject/constants" "5.1.0" + "@ethersproject/contracts" "5.1.1" + "@ethersproject/hash" "5.1.0" + "@ethersproject/hdnode" "5.1.0" + "@ethersproject/json-wallets" "5.1.0" + "@ethersproject/keccak256" "5.1.0" + "@ethersproject/logger" "5.1.0" + "@ethersproject/networks" "5.1.0" + "@ethersproject/pbkdf2" "5.1.0" + "@ethersproject/properties" "5.1.0" + "@ethersproject/providers" "5.1.2" + "@ethersproject/random" "5.1.0" + "@ethersproject/rlp" "5.1.0" + "@ethersproject/sha2" "5.1.0" + "@ethersproject/signing-key" "5.1.0" + "@ethersproject/solidity" "5.1.0" + "@ethersproject/strings" "5.1.0" + "@ethersproject/transactions" "5.1.1" + "@ethersproject/units" "5.1.0" + "@ethersproject/wallet" "5.1.0" + "@ethersproject/web" "5.1.0" + "@ethersproject/wordlists" "5.1.0" + ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -3411,6 +4026,11 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: 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" @@ -3528,6 +4148,16 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-redact@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.0.0.tgz#ac2f9e36c9f4976f5db9fb18c6ffbaf308cf316d" + integrity sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w== + +fast-safe-stringify@^2.0.7: + version "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== + fetch-ponyfill@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" @@ -3535,6 +4165,11 @@ fetch-ponyfill@^4.0.0: dependencies: node-fetch "~1.7.1" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -3617,6 +4252,11 @@ flat@^4.1.0: dependencies: is-buffer "~2.0.3" +flatstr@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" + integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== + flow-stoplight@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" @@ -3649,6 +4289,15 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +form-data@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -3730,6 +4379,11 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -3797,7 +4451,7 @@ get-caller-file@^1.0.1: 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.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== @@ -3816,6 +4470,11 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -3951,15 +4610,35 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" -hardhat@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.1.2.tgz#a2128b71b0fb216ffc978c85a2030835b4e306ea" - integrity sha512-42iOheDsDl6Gr7sBfpA0S+bQUIcXSDEUrrqmnFEcBHx9qBoQad3s212y2ODmmkdLt+PqqTM+Mq8N3bZDTdjoLg== +hardhat-contract-sizer@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.0.3.tgz#604455fd803865f81c29f60364e863eaa19395a7" + integrity sha512-iaixOzWxwOSIIE76cl2uk4m9VXI1hKU3bFt+gl7jDhyb2/JB2xOp5wECkfWqAoc4V5lD4JtjldZlpSTbzX+nPQ== + dependencies: + cli-table3 "^0.6.0" + colors "^1.4.0" + +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" + integrity sha512-G376zKh81G3K9WtDA+SoTLWsoygikH++tD1E7llx+X7J+GbIqfwhDKKgvJjcnEesMrtR9UqQHK02lJuXY1RTxw== dependencies: - "@nomiclabs/ethereumjs-vm" "4.2.2" + eth-gas-reporter "^0.2.20" + sha1 "^1.1.1" + +hardhat@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.2.0.tgz#7d569d29678e5f786a228390b4c0b0cc9fd8ae32" + integrity sha512-3g0qFoQTkR4gfcHDZr59vPfbSH2PiAyxzYblkAAHUNTPBadO5W26z5RWzDv6/lRu8SqZZ9/8AdGZX4IZEa8EDg== + 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" "^4.11.5" + "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" abort-controller "^3.0.0" adm-zip "^0.4.16" @@ -3973,11 +4652,7 @@ hardhat@^2.1.2: eth-sig-util "^2.5.2" ethereum-cryptography "^0.1.2" ethereumjs-abi "^0.6.8" - ethereumjs-account "^3.0.0" - ethereumjs-block "^2.2.2" - ethereumjs-common "^1.5.0" - ethereumjs-tx "^2.1.2" - ethereumjs-util "^6.2.0" + ethereumjs-util "^7.0.10" find-up "^2.1.0" fp-ts "1.19.3" fs-extra "^7.0.1" @@ -3985,7 +4660,7 @@ hardhat@^2.1.2: immutable "^4.0.0-rc.12" io-ts "1.10.4" lodash "^4.17.11" - merkle-patricia-tree "3.0.0" + merkle-patricia-tree "^4.1.0" mnemonist "^0.38.0" mocha "^7.1.2" node-fetch "^2.6.0" @@ -4151,6 +4826,16 @@ htmlparser2@^6.0.0: domutils "^2.4.4" entities "^2.0.0" +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + 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" @@ -4183,6 +4868,13 @@ http-https@^1.0.0: resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -4438,6 +5130,11 @@ is-fullwidth-code-point@^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" @@ -4750,6 +5447,16 @@ keccak@3.0.1, keccak@^3.0.0: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" +keccak@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-2.1.0.tgz#734ea53f2edcfd0f42cdb8d5f4c358fef052752b" + integrity sha512-m1wbJRTo+gWbctZWay9i26v5fFnYkOn7D5PCxJ3fZUGUEb49dE1Pm4BREUYCt/aoO6di7jeoGmhvqN9Nzylm3Q== + dependencies: + bindings "^1.5.0" + inherits "^2.0.4" + nan "^2.14.0" + safe-buffer "^5.2.0" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -4814,6 +5521,11 @@ level-codec@~7.0.0: 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" @@ -4863,6 +5575,15 @@ level-iterator-stream@~3.0.0: 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" @@ -4871,6 +5592,22 @@ level-mem@^3.0.1: 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" @@ -4902,6 +5639,13 @@ level-sublevel@6.6.4: 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" @@ -4919,6 +5663,15 @@ level-ws@^1.0.0: 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" @@ -4942,6 +5695,17 @@ levelup@^1.2.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" @@ -5004,7 +5768,7 @@ lodash@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: +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5096,6 +5860,16 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +markdown-table@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +mcl-wasm@^0.7.1: + version "0.7.6" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.6.tgz#c1789ebda5565d49b77d2ee195ff3e4d282f1554" + integrity sha512-cbRl3sUOkBeRY2hsM4t1EIln2TIdQBkSiTOqNTv/4Hu5KOECnMWCgjIf+a9Ebunyn22VKqkMF3zj6ejRzz7YBw== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -5122,6 +5896,18 @@ memdown@^1.0.0: 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" @@ -5171,6 +5957,19 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: rlp "^2.0.0" semaphore ">=1.0.1" +merkle-patricia-tree@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.1.0.tgz#010636c4cfd68682df33a2e3186b7d0be7b98b9d" + integrity sha512-vmP1J7FwIpprFMVjjSMM1JAwFce85Q+tp0TYIedYv8qaMh2oLUZ3ETXn9wbgi9S6elySzKzGa+Ai6VNKGEwSlg== + dependencies: + "@types/levelup" "^4.3.0" + ethereumjs-util "^7.0.8" + level-mem "^5.0.1" + level-ws "^2.0.0" + readable-stream "^3.6.0" + rlp "^2.2.3" + semaphore-async-await "^1.5.1" + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -5316,7 +6115,7 @@ mnemonist@^0.38.0: dependencies: obliterator "^1.6.1" -mocha@^7.1.2: +mocha@^7.1.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== @@ -5416,6 +6215,11 @@ multihashes@^0.4.15, multihashes@~0.4.15: multibase "^0.7.0" varint "^5.0.0" +nan@^2.14.0: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + 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" @@ -5471,7 +6275,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.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== @@ -5758,6 +6562,11 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" + integrity sha1-juqz5U+laSD+Fro493+iGqzC104= + parse-headers@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" @@ -5918,6 +6727,53 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pino-multi-stream@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/pino-multi-stream/-/pino-multi-stream-5.3.0.tgz#2816ec4422c7e37e676a210a1705c7155506afd4" + integrity sha512-4fAGCRll18I+JmoAbxDvU9zc5sera/3c+VgTtUdoNMOZ/VSHB+HMAYtixKpeRmZTDHDDdE2rtwjVkuwWB8mYQA== + dependencies: + pino "^6.0.0" + +pino-sentry@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/pino-sentry/-/pino-sentry-0.7.0.tgz#087717d2787ec437627e97454238ca7ce0562a91" + integrity sha512-/rZO1R/oMcMa4mzfIqW6Afap+TGgVHgB8iZfzwjhLdT2PhyuTUNJ3KJT2eIZ0citsQNv26pxRzIPbqgHuQtUAQ== + dependencies: + "@sentry/node" "^6.2.5" + commander "^2.20.0" + pumpify "^2.0.1" + split2 "^3.1.1" + through2 "^3.0.1" + +pino-std-serializers@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz#b56487c402d882eb96cd67c257868016b61ad671" + integrity sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg== + +pino@^6.0.0: + version "6.11.3" + resolved "https://registry.yarnpkg.com/pino/-/pino-6.11.3.tgz#0c02eec6029d25e6794fdb6bbea367247d74bc29" + integrity sha512-drPtqkkSf0ufx2gaea3TryFiBHdNIdXKf5LN0hTM82SXI4xVIve2wLwNg92e1MT6m3jASLu6VO7eGY6+mmGeyw== + dependencies: + fast-redact "^3.0.0" + fast-safe-stringify "^2.0.7" + flatstr "^1.0.12" + pino-std-serializers "^3.1.0" + quick-format-unescaped "^4.0.3" + sonic-boom "^1.0.2" + +pino@^6.11.1: + version "6.11.2" + resolved "https://registry.yarnpkg.com/pino/-/pino-6.11.2.tgz#2f3d119c526651aab4ec3d280844785d52d0b690" + integrity sha512-bmzxwbrIPxQUlAuMkF4PWVErUGERU4z37HazlhflKFg08crsNE3fACGN6gPwg5xtKOK47Ux5cZm8YCuLV4wWJg== + dependencies: + fast-redact "^3.0.0" + fast-safe-stringify "^2.0.7" + flatstr "^1.0.12" + pino-std-serializers "^3.1.0" + quick-format-unescaped "4.0.1" + sonic-boom "^1.0.2" + 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" @@ -5948,6 +6804,11 @@ prettier@^2.1.2, prettier@^2.2.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== +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" @@ -5963,6 +6824,13 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= +prom-client@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-13.1.0.tgz#1185caffd8691e28d32e373972e662964e3dba45" + integrity sha512-jT9VccZCWrJWXdyEtQddCDszYsiuWj5T0ekrPszi/WEegj3IZy6Mm09iOOVM86A4IKMWq8hZkT2dD9MaSe+sng== + dependencies: + tdigest "^0.1.1" + 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" @@ -5971,6 +6839,13 @@ promise-to-callback@^1.0.0: is-fn "^1.0.0" set-immediate-shim "^1.0.1" +promise@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" + integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== + dependencies: + asap "~2.0.6" + proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" @@ -6062,6 +6937,15 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +pumpify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e" + integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== + dependencies: + duplexify "^4.1.1" + inherits "^2.0.3" + pump "^3.0.0" + punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -6082,7 +6966,7 @@ qs@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.4.0, qs@^6.7.0: version "6.10.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== @@ -6108,6 +6992,16 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +quick-format-unescaped@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz#437a5ea1a0b61deb7605f8ab6a8fd3858dbeb701" + integrity sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A== + +quick-format-unescaped@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.3.tgz#6d6b66b8207aa2b35eef12be1421bb24c428f652" + integrity sha512-MaL/oqh02mhEo5m5J2rwsVL23Iw2PEaGVHgT2vFt8AAsr0lfvQA5dpXo9TPu0rz7tSBdUPgkbam0j/fj5ZM8yg== + 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" @@ -6165,6 +7059,15 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +"readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.1.1, 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.33: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -6188,15 +7091,6 @@ readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, 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" @@ -6294,7 +7188,37 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@^2.79.0, request@^2.85.0: +req-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" + integrity sha1-1AgrTURZgDZkD7c93qAe1T20nrw= + dependencies: + req-from "^2.0.0" + +req-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" + integrity sha1-10GI5H+TeW9Kpx327jWuaJ8+DnA= + dependencies: + resolve-from "^3.0.0" + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.5: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.79.0, request@^2.85.0, request@^2.88.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -6345,6 +7269,11 @@ require-main-filename@^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-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -6457,6 +7386,20 @@ scryptsy@^1.2.1: dependencies: pbkdf2 "^3.0.3" +secp256k1@^3.0.1: + version "3.8.0" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.8.0.tgz#28f59f4b01dbee9575f56a47034b7d2e3b3b352d" + integrity sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw== + dependencies: + bindings "^1.5.0" + bip66 "^1.1.5" + bn.js "^4.11.8" + create-hash "^1.2.0" + drbg.js "^1.0.1" + elliptic "^6.5.2" + nan "^2.14.0" + safe-buffer "^5.1.2" + secp256k1@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" @@ -6471,6 +7414,11 @@ seedrandom@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" @@ -6486,7 +7434,7 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4, semver@^7.3.5: +semver@^7.3.4: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -6581,6 +7529,14 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" + integrity sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg= + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.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" @@ -6701,6 +7657,14 @@ solc@^0.6.3: semver "^5.5.0" tmp "0.0.33" +sonic-boom@^1.0.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.4.1.tgz#d35d6a74076624f12e6f917ade7b9d75e918f53e" + integrity sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg== + dependencies: + atomic-sleep "^1.0.0" + flatstr "^1.0.12" + 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" @@ -6783,6 +7747,13 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +split2@^3.1.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^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" @@ -6823,6 +7794,16 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + 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" @@ -6845,7 +7826,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2": +"string-width@^1.0.2 || 2", string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -6862,6 +7843,15 @@ string-width@^3.0.0, string-width@^3.1.0: 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" @@ -6927,6 +7917,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 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" @@ -6992,6 +7989,22 @@ swarm-js@^0.1.40: tar "^4.0.2" xhr-request "^1.0.1" +sync-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + tape@^4.6.3: version "4.13.3" resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.3.tgz#51b3d91c83668c7a45b1a594b607dee0a0b46278" @@ -7026,6 +8039,13 @@ tar@^4.0.2: safe-buffer "^5.1.2" yallist "^3.0.3" +tdigest@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.1.tgz#2e3cb2c39ea449e55d1e6cd91117accca4588021" + integrity sha1-Ljyyw56kSeVdHmzZEReszKRYgCE= + dependencies: + bintrees "1.0.1" + test-value@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" @@ -7039,6 +8059,23 @@ testrpc@0.0.1: resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" integrity sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA== +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -7047,6 +8084,14 @@ through2@^2.0.3: readable-stream "~2.3.6" xtend "~4.0.1" +through2@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" + integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== + dependencies: + inherits "^2.0.4" + readable-stream "2 || 3" + through@~2.3.4, through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -7118,7 +8163,7 @@ toidentifier@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: +tough-cookie@^2.3.3, 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== @@ -7432,7 +8477,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: 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.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== @@ -8345,6 +9390,15 @@ wrap-ansi@^5.1.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" @@ -8418,7 +9472,7 @@ xmlhttprequest@1.8.0: resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: +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== @@ -8440,6 +9494,11 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== +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" @@ -8471,6 +9530,11 @@ yargs-parser@^2.4.1: 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" @@ -8496,6 +9560,19 @@ yargs@13.3.2, yargs@^13.3.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" From 557b4f2ab6d27c5e4c02f0895be13e0f42421016 Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Wed, 28 Apr 2021 11:17:06 +0200 Subject: [PATCH 02/21] Add more LinkTokenChild tests --- contracts/v0.7/bridge/README.md | 2 +- .../v0.7/bridge/token/LinkTokenChild.sol | 1 - hardhat.config.ts | 22 +-- package.json | 7 +- src/hardhat/index.ts | 12 ++ src/optimism/index.ts | 37 ----- test/helpers/index.ts | 2 + test/helpers/optimism/index.ts | 36 +++++ test/v0.7/bridge/token/LinkTokenChild.test.ts | 148 ++++++++++++++---- 9 files changed, 177 insertions(+), 90 deletions(-) create mode 100644 test/helpers/optimism/index.ts diff --git a/contracts/v0.7/bridge/README.md b/contracts/v0.7/bridge/README.md index 2bb69ea..e703e70 100644 --- a/contracts/v0.7/bridge/README.md +++ b/contracts/v0.7/bridge/README.md @@ -1,3 +1,3 @@ # LINK Token Bridge v0.7 -- `./LinkTokenChild.sol`: A mintable & burnable child LinkToken contract to be used on child networks. +- `./token/LinkTokenChild.sol`: A mintable & burnable child LinkToken contract to be used on child networks. diff --git a/contracts/v0.7/bridge/token/LinkTokenChild.sol b/contracts/v0.7/bridge/token/LinkTokenChild.sol index f5c2b79..72ec711 100644 --- a/contracts/v0.7/bridge/token/LinkTokenChild.sol +++ b/contracts/v0.7/bridge/token/LinkTokenChild.sol @@ -10,7 +10,6 @@ import { LinkToken } from "../../../v0.6/LinkToken.sol"; /// @dev Access controlled mintable & burnable LinkToken, for use on sidechains and L2 networks. contract LinkTokenChild is IERC20Child, AccessControl, LinkToken { - // Using this role the bridge gateway can deposit/withdraw (mint/burn) bytes32 public constant BRIDGE_GATEWAY_ROLE = keccak256("BRIDGE_GATEWAY_ROLE"); diff --git a/hardhat.config.ts b/hardhat.config.ts index 8d3eecc..43bc3d1 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -19,22 +19,10 @@ task(TASK_COMPILE) .addOptionalParam('contracts', 'The contracts version to compile.', DEFAULT_VERSION) .setAction(async (_args, _hre, runSuper) => runSuper(_args)) -const _settings = (runs: number) => ({ - optimizer: { - runs, - enabled: true, - }, - metadata: { - // To support Go code generation from build artifacts - // we need to remove the metadata from the compiled bytecode. - bytecodeHash: 'none', - }, -}) - const versions: Record = { - [Versions.v0_4]: { version: '0.4.16', settings: _settings(200) }, - [Versions.v0_6]: { version: '0.6.12', settings: _settings(200) }, - [Versions.v0_7]: { version: '0.7.6', settings: _settings(1_000_000) }, + [Versions.v0_4]: { version: '0.4.16', settings: hardhat.solcSettings(200) }, + [Versions.v0_6]: { version: '0.6.12', settings: hardhat.solcSettings(200) }, + [Versions.v0_7]: { version: '0.7.6', settings: hardhat.solcSettings(1_000_000) }, } // Require version exists @@ -67,6 +55,10 @@ const config: HardhatUserConfig = { ...hardhat.generateOverrides(`./contracts/${versionDir}/**/*.sol`, {}, compiler), }, }, + ovm: { + // Supported OVM versions: https://github.com/ethereum-optimism/solc-bin/tree/gh-pages/bin + solcVersion: compiler.version, + }, typechain: { outDir: `./build/${typesDir}/${versionDir}`, target: 'ethers-v5', diff --git a/package.json b/package.json index 23cadac..8776d92 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,10 @@ "setup": "yarn build:contracts && yarn build", "lint": "echo \"Please set up linter\"", "build": "tsc -p tsconfig.json", - "build:contracts": "yarn build:contracts:0.4 && yarn build:contracts:0.6 && yarn build:contracts:0.7 && yarn build:contracts:0.7:ovm", + "build:contracts": "yarn build:contracts:0.4 && yarn build:contracts:0.6 && yarn build:contracts:0.6:ovm && yarn build:contracts:0.7 && yarn build:contracts:0.7:ovm", "build:contracts:0.4": "hardhat compile --contracts 0.4 --show-stack-traces", "build:contracts:0.6": "hardhat compile --contracts 0.6 --show-stack-traces", + "build:contracts:0.6:ovm": "hardhat compile --contracts 0.6 --network optimism --show-stack-traces", "build:contracts:0.7": "hardhat compile --contracts 0.7 --show-stack-traces", "build:contracts:0.7:ovm": "hardhat compile --contracts 0.7 --network optimism --show-stack-traces", "test": "hardhat test --no-compile --show-stack-traces", @@ -34,11 +35,9 @@ }, "dependencies": { "@chainlink/contracts": "^0.1.6", - "@chainlink/optimism-utils": "https://github.com/smartcontractkit/optimism-utils.git", "@ethersproject/bignumber": "^5.1.1", "@ethersproject/units": "^5.1.0", "@openzeppelin/contracts": "3.4.0", - "dotenv": "^8.2.0", "ethers": "^5.1.3", "glob": "^7.1.6", "hardhat": "^2.2.0", @@ -46,6 +45,7 @@ "yargs": "^16.2.0" }, "devDependencies": { + "@chainlink/optimism-utils": "https://github.com/smartcontractkit/optimism-utils.git", "@eth-optimism/hardhat-ovm": "^0.0.3", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-waffle": "^2.0.1", @@ -58,6 +58,7 @@ "@types/node": "^14.14.37", "@types/yargs": "^16.0.1", "chai": "^4.3.4", + "dotenv": "^8.2.0", "ethereum-waffle": "^3.3.0", "hardhat-contract-sizer": "^2.0.3", "hardhat-gas-reporter": "^1.0.4", diff --git a/src/hardhat/index.ts b/src/hardhat/index.ts index 42c1e5a..cb678ff 100644 --- a/src/hardhat/index.ts +++ b/src/hardhat/index.ts @@ -9,6 +9,18 @@ export const yargs = _yargs(hideBin(process.argv)) // Load defult CLI arguments export const { argv } = yargs.env(false).string('contracts').string('network') +export const solcSettings = (runs: number) => ({ + optimizer: { + runs, + enabled: true, + }, + metadata: { + // To support Go code generation from build artifacts + // we need to remove the metadata from the compiled bytecode. + bytecodeHash: 'none', + }, +}) + // Glob files matching the pattern and generate Hardhat overrides for them export const generateOverrides = ( pattern: string, diff --git a/src/optimism/index.ts b/src/optimism/index.ts index 91d4cab..15832b9 100644 --- a/src/optimism/index.ts +++ b/src/optimism/index.ts @@ -1,38 +1 @@ -import * as dotenv from 'dotenv' -import * as optimism from '@chainlink/optimism-utils' -import { Wallet, providers, utils } from 'ethers' - export * from '@chainlink/optimism-utils' - -// TODO: Fix ERROR { "reason":"cannot estimate gas; transaction may fail or may require manual gas limit","code":"UNPREDICTABLE_GAS_LIMIT" } -export const TX_OVERRIDES_OE_BUG: any = { - gasPrice: utils.parseUnits('1', 'gwei'), - gasLimit: 8_999_999, -} - -export const loadEnv = async (envName: string = 'local'): Promise => { - // Load env configuration by name - dotenv.config({ path: __dirname + `/../../env/.env.${envName}` }) - - // Predefined AddressManager addresses - const addressManager: { [key: string]: string } = { - local: optimism.utils.LOCAL_ADDRESS_MANAGER_ADDR, - kovan: optimism.utils.KOVAN_ADDRESS_MANAGER_ADDR, - mainnet: optimism.utils.MAINNET_ADDRESS_MANAGER_ADDR, - } - - const addressManagerAddr = process.env.ADDRESS_MANAGER_ADDR || addressManager[envName] - if (!addressManagerAddr) throw Error(`Unknown AddressManager for network: ${envName}`) - - const l1Provider = new providers.JsonRpcProvider(process.env.L1_WEB3_URL) - const l2Provider = new providers.JsonRpcProvider(process.env.L2_WEB3_URL) - - l1Provider.pollingInterval = 10 - l2Provider.pollingInterval = 10 - - // Grab wallets for both chains - const l1Wallet = new Wallet(process.env.PRIVATE_KEY!, l1Provider) - const l2Wallet = l1Wallet.connect(l2Provider) - - return await optimism.env.OptimismEnv.new(addressManagerAddr, l1Wallet, l2Wallet) -} diff --git a/test/helpers/index.ts b/test/helpers/index.ts index d562041..48e6e8e 100644 --- a/test/helpers/index.ts +++ b/test/helpers/index.ts @@ -2,6 +2,8 @@ import { ethers } from 'ethers' import { assert } from 'chai' import { hardhat, Networks, Versions } from '../../src' +export * as optimism from './optimism' + export const describes = { // Only run if Hardhat unit test HH: !hardhat.argv.network || hardhat.argv.network === Networks.HARDHAT ? describe : describe.skip, diff --git a/test/helpers/optimism/index.ts b/test/helpers/optimism/index.ts new file mode 100644 index 0000000..c6a85f3 --- /dev/null +++ b/test/helpers/optimism/index.ts @@ -0,0 +1,36 @@ +import * as dotenv from 'dotenv' +import { Wallet, providers, utils } from 'ethers' +import { optimism } from '../../../src' + +// TODO: Fix ERROR { "reason":"cannot estimate gas; transaction may fail or may require manual gas limit","code":"UNPREDICTABLE_GAS_LIMIT" } +export const TX_OVERRIDES_OE_BUG: any = { + gasPrice: utils.parseUnits('1', 'gwei'), + gasLimit: 8_999_999, +} + +export const loadEnv = async (envName: string = 'local'): Promise => { + // Load env configuration by name + dotenv.config({ path: __dirname + `/../../../env/.env.${envName}` }) + + // Predefined AddressManager addresses + const addressManager: { [key: string]: string } = { + local: optimism.utils.LOCAL_ADDRESS_MANAGER_ADDR, + kovan: optimism.utils.KOVAN_ADDRESS_MANAGER_ADDR, + mainnet: optimism.utils.MAINNET_ADDRESS_MANAGER_ADDR, + } + + const addressManagerAddr = process.env.ADDRESS_MANAGER_ADDR || addressManager[envName] + if (!addressManagerAddr) throw Error(`Unknown AddressManager for network: ${envName}`) + + const l1Provider = new providers.JsonRpcProvider(process.env.L1_WEB3_URL) + const l2Provider = new providers.JsonRpcProvider(process.env.L2_WEB3_URL) + + l1Provider.pollingInterval = 10 + l2Provider.pollingInterval = 10 + + // Grab wallets for both chains + const l1Wallet = new Wallet(process.env.PRIVATE_KEY!, l1Provider) + const l2Wallet = l1Wallet.connect(l2Provider) + + return await optimism.env.OptimismEnv.new(addressManagerAddr, l1Wallet, l2Wallet) +} diff --git a/test/v0.7/bridge/token/LinkTokenChild.test.ts b/test/v0.7/bridge/token/LinkTokenChild.test.ts index 915bd5c..1fcfb97 100644 --- a/test/v0.7/bridge/token/LinkTokenChild.test.ts +++ b/test/v0.7/bridge/token/LinkTokenChild.test.ts @@ -78,6 +78,7 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { shouldBehaveLikeERC677Token(_getContractFactory, h.revertShim()) shouldBehaveLikeLinkToken(_getContractFactory, h.revertShim(), EXTRA_PUBLIC_ABI) + // TODO: refactor as a behavior that we can test both on Hardhat and Optimism networks describe(`Child token functionality`, () => { let l2Token: Contract @@ -92,56 +93,102 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { it('can NOT deposit without BRIDGE_GATEWAY_ROLE', async () => { const [_admin, recipient] = await ethers.getSigners() + // Deposit fails without the BRIDGE_GATEWAY_ROLE + const depositTx = l2Token.connect(recipient).deposit(recipient.address, 100) + await expect(depositTx).to.be.revertedWith('LinkTokenChild: missing role') + }) - await expect(l2Token.connect(recipient).deposit(recipient.address, 100)).to.be.revertedWith( - 'LinkTokenChild: missing role', + it('only admin can grant BRIDGE_GATEWAY_ROLE', async () => { + const [admin, fakeAdmin, gateway] = await ethers.getSigners() + // Get the required gateway role + const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() + // Fake admin fails + const grantRoleTx = l2Token.connect(fakeAdmin).grantRole(gatewayRole, gateway.address) + await expect(grantRoleTx).to.be.revertedWith( + 'AccessControl: sender must be an admin to grant', ) + // Admin succeeds + await l2Token.connect(admin).grantRole(gatewayRole, gateway.address) }) it('can deposit with BRIDGE_GATEWAY_ROLE', async () => { const [_admin, gateway, recipient] = await ethers.getSigners() - - // Get the required gateway role + // Grant the required gateway role const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() - - const grantRoleTx = await l2Token.grantRole( - gatewayRole, - gateway.address, - optimism.TX_OVERRIDES_OE_BUG, - ) - await grantRoleTx.wait() - + await l2Token.grantRole(gatewayRole, gateway.address) // Admin deposit still fails - await expect(l2Token.deposit(recipient.address, 100)).to.be.revertedWith( - 'LinkTokenChild: missing role', - ) - + const depositTx = l2Token.deposit(recipient.address, 100) + await expect(depositTx).to.be.revertedWith('LinkTokenChild: missing role') + // Gateway deposit succeeds await l2Token.connect(gateway).deposit(recipient.address, 100) - - const balance = await l2Token.balanceOf(recipient.address) - expect(balance).to.be.equal(100) - - const totalSupply = await l2Token.totalSupply() - expect(totalSupply).to.be.equal(100) + // Assert state + expect(await l2Token.balanceOf(recipient.address)).to.be.equal(100) + expect(await l2Token.totalSupply()).to.be.equal(100) }) it('admin can give out multiple BRIDGE_GATEWAY_ROLE', async () => { const [_, gateway1, gateway2, recipient] = await ethers.getSigners() - - // Get the required gateway role + // Grant the required gateway role const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() - await l2Token.grantRole(gatewayRole, gateway1.address) await l2Token.grantRole(gatewayRole, gateway2.address) - + // Gateway deposit succeeds await l2Token.connect(gateway1).deposit(recipient.address, 100) await l2Token.connect(gateway2).deposit(recipient.address, 100) + // Assert state + expect(await l2Token.balanceOf(recipient.address)).to.be.equal(200) + expect(await l2Token.totalSupply()).to.be.equal(200) + }) - const balance = await l2Token.balanceOf(recipient.address) - expect(balance).to.be.equal(200) + it('admin can give out and revoke BRIDGE_GATEWAY_ROLE', async () => { + const [_, gateway, recipient] = await ethers.getSigners() + // Grant the required gateway role + const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() + await l2Token.grantRole(gatewayRole, gateway.address) + // Gateway deposit succeeds + await l2Token.connect(gateway).deposit(recipient.address, 100) + // Revoke gateway role + await l2Token.revokeRole(gatewayRole, gateway.address) + // Deposits now fail + const depositTx = l2Token.connect(gateway).deposit(recipient.address, 100) + await expect(depositTx).to.be.revertedWith('LinkTokenChild: missing role') + // Assert state + expect(await l2Token.balanceOf(recipient.address)).to.be.equal(100) + expect(await l2Token.totalSupply()).to.be.equal(100) + }) - const totalSupply = await l2Token.totalSupply() - expect(totalSupply).to.be.equal(200) + it('only gateway can withdraw', async () => { + const [_, gateway, recipient] = await ethers.getSigners() + // Grant the required gateway role + const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() + await l2Token.grantRole(gatewayRole, gateway.address) + // Gateway deposit succeeds + await l2Token.connect(gateway).deposit(recipient.address, 100) + // Recipients direct withdraw fails + const withdrawTx1 = l2Token.connect(recipient).withdraw(69) + await expect(withdrawTx1).to.be.revertedWith('LinkTokenChild: missing role') + // Gateway can withdraw on behalf of the user + await l2Token.connect(recipient).transfer(gateway.address, 69) + await l2Token.connect(gateway).withdraw(69) + // Gateway can NOT withdraw more + const withdrawTx3 = l2Token.connect(gateway).withdraw(10) + await expect(withdrawTx3).to.be.revertedWith('ERC20: burn amount exceeds balance') + // Assert state + expect(await l2Token.balanceOf(recipient.address)).to.be.equal(31) + expect(await l2Token.totalSupply()).to.be.equal(31) + }) + + it('admin can renounce DEFAULT_ADMIN_ROLE', async () => { + const [admin, gateway] = await ethers.getSigners() + // Renounce the admin role + const adminRole = await l2Token.DEFAULT_ADMIN_ROLE() + await l2Token.renounceRole(adminRole, admin.address) + // Reverts on grantRole + const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() + const grantRoleTx = l2Token.grantRole(gatewayRole, gateway.address) + await expect(grantRoleTx).to.be.revertedWith( + 'AccessControl: sender must be an admin to grant', + ) }) }) }) @@ -153,7 +200,7 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { this.timeout(10000) // Load the configuration from environment - oe = await optimism.loadEnv() + oe = await h.optimism.loadEnv() // Fund L2 wallet await oe.depositL2(parseEther('10') as BigNumberish) @@ -161,7 +208,6 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { l2Token = await deploy( getContractFactory('LinkTokenChild', oe.l2Wallet, Versions.v0_7, Targets.OVM), 'LinkTokenChild', - [optimism.TX_OVERRIDES_OE_BUG], ) }) @@ -174,11 +220,47 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { const depositTx = await l2Token.deposit( oe.l2Wallet.address, 100, - optimism.TX_OVERRIDES_OE_BUG, + h.optimism.TX_OVERRIDES_OE_BUG, ) // TODO: fetch revert reason // revert: LinkTokenChild: missing role await h.txRevert(depositTx.wait()) }) + + it('admin can migrate to a new gateway', async () => { + const admin = oe.l2Wallet + const gateway = oe.l2Wallet // TODO: generate acc + // Grant the required gateway role + const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() + const grantRoleTx1 = await l2Token.grantRole(gatewayRole, admin.address) + await grantRoleTx1.wait() + // Deposit some tokens as admin/gateway + const depositTx1 = await l2Token.deposit(admin.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) + await depositTx1.wait() + // Assert state + expect(await l2Token.balanceOf(admin.address)).to.be.equal(100) + expect(await l2Token.totalSupply()).to.be.equal(100) + // Admin can withdraw directly as it has a gateway role + const withdrawTx = await l2Token.withdraw(100) + await withdrawTx.wait() + // Assert state + expect(await l2Token.balanceOf(admin.address)).to.be.equal(0) + expect(await l2Token.totalSupply()).to.be.equal(0) + // Grant role to a new gateway + const grantRoleTx2 = await l2Token.grantRole(gatewayRole, gateway.address) + await grantRoleTx2.wait() + // Revoke gateway role from admin + const revokeRoleTx = await l2Token.revokeRole(gatewayRole, admin.address) + await revokeRoleTx.wait() + // Admin deposit fails + const depositTx = await l2Token.deposit(admin.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) + // TODO: fetch revert reason + // revert: LinkTokenChild: missing role + await h.txRevert(depositTx.wait()) + // Renounce the admin role + const adminRole = await l2Token.DEFAULT_ADMIN_ROLE() + const renounceRoleTx = await l2Token.renounceRole(adminRole, admin.address) + await renounceRoleTx.wait() + }) }) }) From 9b30fbaa99ab12e021d3c2125ff23c5b2fd2c116 Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Tue, 4 May 2021 19:51:14 +0200 Subject: [PATCH 03/21] Update with latest upstream changes --- package.json | 8 +- yarn.lock | 1192 ++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 862 insertions(+), 338 deletions(-) diff --git a/package.json b/package.json index 8776d92..ea06ddd 100644 --- a/package.json +++ b/package.json @@ -35,18 +35,18 @@ }, "dependencies": { "@chainlink/contracts": "^0.1.6", + "@chainlink/optimism-utils": "https://github.com/smartcontractkit/optimism-utils.git", "@ethersproject/bignumber": "^5.1.1", "@ethersproject/units": "^5.1.0", "@openzeppelin/contracts": "3.4.0", - "ethers": "^5.1.3", + "ethers": "^5.1.4", "glob": "^7.1.6", - "hardhat": "^2.2.0", + "hardhat": "^2.2.1", "lodash": "^4.17.21", "yargs": "^16.2.0" }, "devDependencies": { - "@chainlink/optimism-utils": "https://github.com/smartcontractkit/optimism-utils.git", - "@eth-optimism/hardhat-ovm": "^0.0.3", + "@eth-optimism/hardhat-ovm": "^0.1.1", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-waffle": "^2.0.1", "@typechain/ethers-v5": "^6.0.5", diff --git a/yarn.lock b/yarn.lock index e1b99eb..72b0a7a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,14 +12,14 @@ "@chainlink/optimism-utils@https://github.com/smartcontractkit/optimism-utils.git": version "0.0.1-alpha" - resolved "https://github.com/smartcontractkit/optimism-utils.git#b1415a2b4067fd757f0730d597bbb0d4f85a300f" + resolved "https://github.com/smartcontractkit/optimism-utils.git#cb921b34f6ae85158d22bead38211840c8790543" dependencies: - "@eth-optimism/contracts" "^0.2.7" - "@eth-optimism/core-utils" "^0.3.1" + "@eth-optimism/contracts" "^0.2.11" + "@eth-optimism/core-utils" "^0.4.1" "@ethersproject/bignumber" "^5.1.1" "@ethersproject/providers" "^5.1.2" "@ethersproject/units" "^5.1.0" - ethers "^5.1.3" + ethers "^5.1.4" "@ensdomains/ens@^0.4.4": version "0.4.5" @@ -37,57 +37,37 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== -"@eth-optimism/contracts@^0.2.7": - version "0.2.7" - resolved "https://registry.yarnpkg.com/@eth-optimism/contracts/-/contracts-0.2.7.tgz#ab3b1f5e30f36d1f5fd4449e9031d8bb9a920ceb" - integrity sha512-hPaMq+cqdzzXFGdaitlAo5vlUVPoui4zTfkqlXC1Rd12gHxObPYeY1Bhva67i6lQ4OQybmXAYi16fEYWdXTDzA== +"@eth-optimism/contracts@^0.2.11": + version "0.2.11" + resolved "https://registry.yarnpkg.com/@eth-optimism/contracts/-/contracts-0.2.11.tgz#4f8f1eb6b3bf2b399f018a92827f96d4e446da04" + integrity sha512-vbjFXgvikvaijDPZmmg9VthsjTCwsFtFskCqGWr7WjF+f+JtYk6aWLkM2udKuXArEy9WLjBN2JLWD3e43a+udQ== dependencies: - "@eth-optimism/core-utils" "^0.3.1" - "@eth-optimism/solc" "^0.6.12-alpha.1" + "@eth-optimism/core-utils" "^0.4.1" "@ethersproject/abstract-provider" "^5.0.8" "@ethersproject/contracts" "^5.0.5" "@openzeppelin/contracts" "^3.3.0" + "@openzeppelin/contracts-upgradeable" "^3.3.0" "@typechain/hardhat" "^1.0.1" ganache-core "^2.13.2" glob "^7.1.6" + solidity-coverage "^0.7.16" -"@eth-optimism/core-utils@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.3.1.tgz#c7979e6fddcd16fa4e466b52bdceaf2260106c32" - integrity sha512-0zqbk2xPUB8dzdquYR2jlRML0IMsy7fOWDmUhaUyV7TS8PhSDDx/Yj/edR86jjncV1AMDanDrxtZlnCLPXPXog== +"@eth-optimism/core-utils@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.4.1.tgz#acb8b8b197834ad00499d37621934f4c446d1bb3" + integrity sha512-aKgAQ9/dfFFLeRy5rF/7v93lvTM7tSYTIdcIadOAFOUG9QnxEH7RpIrWMpwT5S/u4H9iUEyvzTP7RRiZU68pJw== dependencies: "@ethersproject/abstract-provider" "^5.0.9" - "@sentry/node" "^6.3.0" - "@types/pino-multi-stream" "^5.1.1" ethers "^5.0.31" lodash "^4.17.21" - pino "^6.11.1" - pino-multi-stream "^5.3.0" - pino-sentry "^0.7.0" - prom-client "^13.1.0" -"@eth-optimism/hardhat-ovm@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@eth-optimism/hardhat-ovm/-/hardhat-ovm-0.0.3.tgz#4d9e34e4a466a4750b68785bec73ff76e44f6198" - integrity sha512-J4B+HXjP2DA8FWaKTbZ+7qIULNM3OxQrkXklcfb63WRjvlR3xWNK72BBMMVA4V1W9BwDNx5hgr08hehg6mmV1w== +"@eth-optimism/hardhat-ovm@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@eth-optimism/hardhat-ovm/-/hardhat-ovm-0.1.1.tgz#1e778c5ef08b12458d13d2c9a67490e982c0b081" + integrity sha512-rEp1BRs26r0BQnjJktvs9d96u2pDpQe3yrgeRKW58JKdW/wPza9RuooE50agtUSdF77QeLwtfzxuU6Ce+615Cg== 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" - integrity sha512-Ky73mo+2iNJs/VTaT751nMeZ7hXns0TBAlffTOxIOsScjAZ/zi/KWsDUo3r89aV2JKXcYAU/bLidxF40MVJeUw== - 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" - "@ethereum-waffle/chai@^3.3.0": version "3.3.1" resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.3.1.tgz#3f20b810d0fa516f19af93c50c3be1091333fa8e" @@ -256,10 +236,10 @@ "@ethersproject/properties" "^5.1.0" "@ethersproject/strings" "^5.1.0" -"@ethersproject/abi@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.1.1.tgz#79525f582338d98660ac709c65b44c3c081ed2fc" - integrity sha512-UNmhRL4ngm1nCWvhJWRd55PvP1JWojGD4BR63JxyiiWZQAszYzaHHeYdRcj+NY3S0kV6SmAS2dZWSBOZPnXbSw== +"@ethersproject/abi@5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.1.2.tgz#a8e75cd0455e6dc9e4861c3d1c22bbe436c1d775" + integrity sha512-uMhoQVPX0UtfzTpekYQSEUcJGDgsJ25ifz+SV6PDETWaUFhcR8RNgb1QPTASP13inW8r6iy0/Xdq9D5hK2pNvA== dependencies: "@ethersproject/address" "^5.1.0" "@ethersproject/bignumber" "^5.1.0" @@ -353,7 +333,7 @@ dependencies: "@ethersproject/bignumber" "^5.1.0" -"@ethersproject/contracts@5.1.0", "@ethersproject/contracts@^5.0.5": +"@ethersproject/contracts@5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.1.0.tgz#f7c3451f1af77e029005733ccab3419d07d23f6b" integrity sha512-dvTMs/4XGSc57cYOW0KjgX1NdTujUu7mNb6PQdJWg08m9ULzPyGZuBkFJnijBcp6vTOCQ59RwjboWgNWw393og== @@ -369,7 +349,7 @@ "@ethersproject/properties" "^5.1.0" "@ethersproject/transactions" "^5.1.0" -"@ethersproject/contracts@5.1.1": +"@ethersproject/contracts@5.1.1", "@ethersproject/contracts@^5.0.5": version "5.1.1" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.1.1.tgz#c66cb6d618fcbd73e20a6b808e8f768b2b781d0b" integrity sha512-6WwktLJ0DFWU8pDkgH4IGttQHhQN4SnwKFu9h+QYVe48VGWtbDu4W8/q/7QA1u/HWlWMrKxqawPiZUJj0UMvOw== @@ -659,6 +639,27 @@ "@ethersproject/properties" "^5.1.0" "@ethersproject/strings" "^5.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== + dependencies: + "@nodelib/fs.stat" "2.0.4" + 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.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== + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" + "@nomiclabs/hardhat-ethers@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" @@ -672,6 +673,11 @@ "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" +"@openzeppelin/contracts-upgradeable@^3.3.0": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-3.4.1.tgz#38dfdfa86fda0a088c6fcdebe6870cfaf897b471" + integrity sha512-wBGlUzEkOxcj/ghtcF2yKc8ZYh+PTUtm1mK38zoENulJ6aplij7eH8quo3lMugfzPJy+V6V5qI8QhdQmCn7hkQ== + "@openzeppelin/contracts@3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.0.tgz#9a1669ad5f9fdfb6e273bb5a4fed10cb4cc35eb0" @@ -730,17 +736,6 @@ "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/core@6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.3.1.tgz#5e32ca919c9be30fec0bb3125a556bc711584bdf" - integrity sha512-aVuvVbaehGeN86jZlLDGGkhEtprdOtB6lvYLfGy40Dj1Tkh2mGWE550QsRXAXAqYvQzIYwQR23r6m3o8FujgVg== - dependencies: - "@sentry/hub" "6.3.1" - "@sentry/minimal" "6.3.1" - "@sentry/types" "6.3.1" - "@sentry/utils" "6.3.1" - 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" @@ -750,15 +745,6 @@ "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/hub@6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.3.1.tgz#dda07888a82d1c48bbefa00205bfa9d035691f07" - integrity sha512-2er+OeVlsdVZkhl9kXQAANwgjwoCdM1etK2iFuhzX8xkMaJlAuZLyQInv2U1BbXBlIfWjvzRM8B95hCWvVrR3Q== - dependencies: - "@sentry/types" "6.3.1" - "@sentry/utils" "6.3.1" - 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" @@ -768,15 +754,6 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@sentry/minimal@6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.3.1.tgz#38f71c77e8820555effb6e868336d4f5672018cd" - integrity sha512-0eN9S7HvXsCQEjX/qXHTMgvSb3mwrnZEWS9Qz/Bz5ig9pEGXKgJ1om5NTTHVHhXqd3wFCjdvIo6slufLHoCtSw== - dependencies: - "@sentry/hub" "6.3.1" - "@sentry/types" "6.3.1" - 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" @@ -792,21 +769,6 @@ lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/node@^6.2.5", "@sentry/node@^6.3.0": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.3.1.tgz#0f81a0e352fa5b3e36bcc53adb6e26cd214c637d" - integrity sha512-D0r603fdNwUPkwvy0IcQaUSTafl+7lrOytiO5dfdLdlkhtTcwivwENc/n8ER8GOC2zpIvYOEIJvzP4PGL85khw== - dependencies: - "@sentry/core" "6.3.1" - "@sentry/hub" "6.3.1" - "@sentry/tracing" "6.3.1" - "@sentry/types" "6.3.1" - "@sentry/utils" "6.3.1" - 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" @@ -818,27 +780,11 @@ "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/tracing@6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.3.1.tgz#3b96aabf4d9cebadfec070c006db79801a68ee24" - integrity sha512-qveDmoWsXy9qLEblZJwJ1OU/zZRlEd/q7Jhd0Hnwlob8Ci96huABEbYyGdJs18BKVHEFU3gSdVfvrikUE/W17g== - dependencies: - "@sentry/hub" "6.3.1" - "@sentry/minimal" "6.3.1" - "@sentry/types" "6.3.1" - "@sentry/utils" "6.3.1" - 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/types@6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.3.1.tgz#af3b54728b29f633f38fbe51b8c10e3834fbc158" - integrity sha512-BEBn8JX1yaooCAuonbaMci9z0RjwwMbQ3Eny/eyDdd+rjXprZCZaStZnCvSThbNBqAJ8YaUqY2YBMnEwJxarAw== - "@sentry/utils@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" @@ -847,14 +793,6 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@sentry/utils@6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.3.1.tgz#6d8e691139b5b49d8c655ad1dcaf2cb3ff0d0b03" - integrity sha512-cdtl/QWC9FtinAuW3w8QfvSfh/Q9ui5vwvjzVHiS1ga/U38edi2XX+cttY39ZYwz0SQG99cE10GOIhd1p7/mAA== - dependencies: - "@sentry/types" "6.3.1" - 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" @@ -945,6 +883,11 @@ resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.12.tgz#83e02e6ffe1d154fe274141d90038a91fd1e186d" integrity sha512-kZqqnPR9YDJG7KCDOcN1qH16Qs0oz1PzF0Y93AWdhXuL9S9HYo/RUUeqGKbPpRBEZldQUS8aa4EzfK08u5pu6g== +"@truffle/error@^0.0.14": + version "0.0.14" + resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.14.tgz#59683b5407bede7bddf16d80dc5592f9c5e5fa05" + integrity sha512-utJx+SZYoMqk8wldQG4gCVKhV8GwMJbWY7sLXFT/D8wWZTnE2peX7URFJh/cxkjTRCO328z1s2qewkhyVsu2HA== + "@truffle/interface-adapter@^0.4.20": version "0.4.20" resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.20.tgz#cf3f176e6fe14321bf164d502bf8d05e50209eb5" @@ -954,6 +897,24 @@ ethers "^4.0.32" web3 "1.2.9" +"@truffle/interface-adapter@^0.4.23": + version "0.4.23" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.23.tgz#9b474bb0455df1f02d72bf5a08f3d70b6fef875d" + integrity sha512-mfpwY25Apx36WHHNJMNHWyDQVFZoZYNQ43rOwr/n+5gAMxke7+D7+IR9UW4kuO/Jp0+2848UxMdRV+oqm017kQ== + dependencies: + bn.js "^5.1.3" + ethers "^4.0.32" + web3 "1.3.5" + +"@truffle/provider@^0.2.24": + version "0.2.30" + resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.30.tgz#c2f7d84e698e1d200f48d1349683ee5dee693808" + integrity sha512-5ScTbWsrm7zmQjw020T41U30/kYA1LppXAtaeucUGN2jvPrSwlh0aTL18makbqftTx1NRuYKw7C8wO4jCKQSUQ== + dependencies: + "@truffle/error" "^0.0.14" + "@truffle/interface-adapter" "^0.4.23" + web3 "1.3.5" + "@trufflesuite/chromafi@^2.2.2": version "2.2.2" resolved "https://registry.yarnpkg.com/@trufflesuite/chromafi/-/chromafi-2.2.2.tgz#d3fc507aa8504faffc50fb892cedcfe98ff57f77" @@ -1029,7 +990,7 @@ dependencies: "@types/node" "*" -"@types/glob@^7.1.3": +"@types/glob@^7.1.1", "@types/glob@^7.1.3": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== @@ -1112,37 +1073,6 @@ dependencies: "@types/node" "*" -"@types/pino-multi-stream@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/pino-multi-stream/-/pino-multi-stream-5.1.1.tgz#8d5bc607357324621667c8a5613d4a534c075d0f" - integrity sha512-juOdSxwfE5TFKJJlq/VzXxTRyO+9yI9RZoyh/CYnof8MvqM+aUSUP1ZXGTuOZe7qgQnGp8xr8NHU2O/rTrYysA== - dependencies: - "@types/pino" "*" - -"@types/pino-pretty@*": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@types/pino-pretty/-/pino-pretty-4.7.0.tgz#e4a18541f8464d1cc48216f5593cc6a0e62dc2c3" - integrity sha512-fIZ+VXf9gJoJR4tiiM7G+j/bZkPoZEfFGzA4d8tAWCTpTVyvVaBwnmdLs3wEXYpMjw8eXulrOzNCjmGHT3FgHw== - dependencies: - "@types/pino" "*" - -"@types/pino-std-serializers@*": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/pino-std-serializers/-/pino-std-serializers-2.4.1.tgz#f8bd52a209c8b3c97d1533b1ba27f57c816382bf" - integrity sha512-17XcksO47M24IVTVKPeAByWUd3Oez7EbIjXpSbzMPhXVzgjGtrOa49gKBwxH9hb8dKv58OelsWQ+A1G1l9S3wQ== - dependencies: - "@types/node" "*" - -"@types/pino@*": - version "6.3.7" - resolved "https://registry.yarnpkg.com/@types/pino/-/pino-6.3.7.tgz#0ccef98a159230cb3fa2589c7e8b00a7550a69f6" - integrity sha512-v7FdDXVEL0Zx1zcCf0cJZMojChnF+O0ujDKV1UdocsLuUhENjdtNIaanCZK1zRELp35x//bI2/IHtYUK0vmRvw== - dependencies: - "@types/node" "*" - "@types/pino-pretty" "*" - "@types/pino-std-serializers" "*" - "@types/sonic-boom" "*" - "@types/prettier@^2.1.1": version "2.2.3" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" @@ -1187,13 +1117,6 @@ resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz#3a84cf5ec3249439015e14049bd3161419bf9eae" integrity sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg== -"@types/sonic-boom@*": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@types/sonic-boom/-/sonic-boom-0.7.0.tgz#38337036293992a1df65dd3161abddf8fb9b7176" - integrity sha512-AfqR0fZMoUXUNwusgXKxcE9DPlHNDHQp6nKYUd4PSRpLobF5CCevSpyTEBcVZreqaWKCnGBr9KI1fHMTttoB7A== - dependencies: - "@types/node" "*" - "@types/underscore@*": version "1.11.0" resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.0.tgz#bb33549f8f89957fdf959c16e4c1d0eaa5bf985d" @@ -1224,6 +1147,16 @@ resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -1289,6 +1222,11 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + adm-zip@^0.4.16: version "0.4.16" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" @@ -1321,6 +1259,11 @@ ajv@^6.10.0, ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + ansi-colors@3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" @@ -1447,6 +1390,11 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-uniq@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -1506,6 +1454,11 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async@1.x, 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.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" @@ -1513,11 +1466,6 @@ async@2.6.2: 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" @@ -1535,11 +1483,6 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - available-typed-arrays@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" @@ -2152,11 +2095,6 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bintrees@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.1.tgz#0e655c9b9c2435eaab68bf4027226d2b55a34524" - integrity sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ= - bip39@2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235" @@ -2753,11 +2691,6 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -2906,7 +2839,7 @@ cross-fetch@^2.1.0, cross-fetch@^2.1.1: node-fetch "2.1.2" whatwg-fetch "2.0.4" -cross-spawn@^6.0.5: +cross-spawn@^6.0.0, 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== @@ -2975,7 +2908,12 @@ dashdash@^1.12.0: 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: +death@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" + integrity sha1-AaqcQB7dknUFFEcLgmY5DGbGcxg= + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, 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== @@ -3039,6 +2977,11 @@ deep-equal@~1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + 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" @@ -3136,6 +3079,14 @@ detect-indent@^5.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= +detect-port@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" + integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + dependencies: + address "^1.0.1" + debug "^2.6.0" + diff@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -3155,6 +3106,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + dom-serializer@^1.0.1, dom-serializer@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" @@ -3216,16 +3174,6 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -duplexify@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61" - integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.0" - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -3313,7 +3261,7 @@ encoding@^0.1.11: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +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== @@ -3428,11 +3376,33 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@2.7.x, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + 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== +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -3905,7 +3875,7 @@ ethers@^4.0.32, ethers@^4.0.40, ethers@^4.0.45: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.0.31: +ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.1.0.tgz#8a8758e0b6cbbc19fd4b87f4d551170fa6f1a995" integrity sha512-2L6Ge6wMBw02FlRoCLg4E0Elt3khMNlW6ULawa10mMeeZToYJ5+uCfiuTuB+XZ6om1Y7wuO9ZzezP8FsU2M/+g== @@ -3941,12 +3911,12 @@ ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.0.31: "@ethersproject/web" "5.1.0" "@ethersproject/wordlists" "5.1.0" -ethers@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.1.3.tgz#68eb48742b8a8ca53480bca2e53fb314c23fea7f" - integrity sha512-QAj+LG3z5HsK6UDAOdCjDEthWioZ7sTzAcMWyVrQF+ACioalQ99NrrSxIq5qS0c+hoy3TAIjqpYteHgC2Iqy+w== +ethers@^5.0.31, ethers@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.1.4.tgz#8ae973705ed962f8f41dc59693704002a38dd18b" + integrity sha512-EAPQ/fgGRu0PoR/VNFnHTMOtG/IZ0AItdW55C9T8ffmVu0rnyllZL404eBF66elJehOLz2kxnUrhXpE7TCpW7g== dependencies: - "@ethersproject/abi" "5.1.1" + "@ethersproject/abi" "5.1.2" "@ethersproject/abstract-provider" "5.1.0" "@ethersproject/abstract-signer" "5.1.0" "@ethersproject/address" "5.1.0" @@ -4026,6 +3996,19 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + 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" @@ -4143,20 +4126,34 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-glob@^3.0.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + 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== -fast-redact@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.0.0.tgz#ac2f9e36c9f4976f5db9fb18c6ffbaf308cf316d" - integrity sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w== +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-safe-stringify@^2.0.7: - version "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== +fastq@^1.6.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + dependencies: + reusify "^1.0.4" fetch-ponyfill@^4.0.0: version "4.1.0" @@ -4252,11 +4249,6 @@ flat@^4.1.0: dependencies: is-buffer "~2.0.3" -flatstr@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" - integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== - flow-stoplight@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" @@ -4372,6 +4364,15 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -4409,6 +4410,15 @@ functional-red-black-tree@^1.0.1, functional-red-black-tree@~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-cli@^6.11.0: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" + integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== + dependencies: + ethereumjs-util "6.2.1" + source-map-support "0.5.12" + yargs "13.2.4" + ganache-core@^2.13.2: version "2.13.2" resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.13.2.tgz#27e6fc5417c10e6e76e2e646671869d7665814a3" @@ -4480,7 +4490,7 @@ get-stream@^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: +get-stream@^4.0.0, 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== @@ -4506,7 +4516,15 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@~5.1.0: +ghost-testrpc@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" + integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== + dependencies: + chalk "^2.4.2" + node-emoji "^1.10.0" + +glob-parent@^5.1.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== @@ -4525,6 +4543,29 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0: + 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" + glob@^7.1.2, glob@^7.1.3, glob@^7.1.6, glob@~7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -4537,6 +4578,22 @@ glob@^7.1.2, glob@^7.1.3, glob@^7.1.6, glob@~7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + global@~4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" @@ -4550,6 +4607,20 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + got@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -4587,7 +4658,7 @@ got@^7.1.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.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== @@ -4597,6 +4668,18 @@ growl@1.10.5: resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== +handlebars@^4.0.1: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -4626,10 +4709,10 @@ hardhat-gas-reporter@^1.0.4: eth-gas-reporter "^0.2.20" sha1 "^1.1.1" -hardhat@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.2.0.tgz#7d569d29678e5f786a228390b4c0b0cc9fd8ae32" - integrity sha512-3g0qFoQTkR4gfcHDZr59vPfbSH2PiAyxzYblkAAHUNTPBadO5W26z5RWzDv6/lRu8SqZZ9/8AdGZX4IZEa8EDg== +hardhat@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.2.1.tgz#bef0031b994e3f60a88d428f2097195c58cf9ed2" + integrity sha512-8s7MtGXdh0NDwQKdlA8m8QdloVIN1+hv5aFpn0G5Ljj9vfNY9kUoc0a9pMboeGbd9WrS+XrZs5YlsPgQjaW/Tg== dependencies: "@ethereumjs/block" "^3.2.1" "@ethereumjs/blockchain" "^5.2.1" @@ -4689,6 +4772,11 @@ has-bigints@^1.0.1: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -4918,6 +5006,11 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^5.1.1: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + immediate@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" @@ -4951,6 +5044,16 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -4963,6 +5066,11 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + io-ts@1.10.4: version "1.10.4" resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" @@ -5216,7 +5324,7 @@ is-retry-allowed@^1.0.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: +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -5339,6 +5447,14 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@3.x: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -5429,6 +5545,11 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= +jsonschema@^1.2.4: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -5509,6 +5630,13 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.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" @@ -5706,6 +5834,14 @@ levelup@^4.3.2: level-supports "~1.0.0" xtend "~4.0.0" +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + 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" @@ -5763,6 +5899,11 @@ lodash.sum@^4.0.2: resolved "https://registry.yarnpkg.com/lodash.sum/-/lodash.sum-4.0.2.tgz#ad90e397965d803d4f1ff7aa5b2d0197f3b4637b" integrity sha1-rZDjl5ZdgD1PH/eqWy0Bl/O0Y3s= +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + lodash@4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" @@ -5848,6 +5989,13 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +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" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -5884,6 +6032,15 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + memdown@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" @@ -5930,6 +6087,11 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + 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" @@ -6027,6 +6189,11 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + 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" @@ -6054,7 +6221,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^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: +"minimatch@2 || 3", 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== @@ -6101,7 +6268,7 @@ mkdirp@*: 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: +mkdirp@0.5.5, mkdirp@0.5.x, 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== @@ -6247,6 +6414,11 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +neo-async@^2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -6262,6 +6434,13 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== +node-emoji@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + dependencies: + lodash.toarray "^4.4.0" + 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" @@ -6298,6 +6477,13 @@ nofilter@^1.0.4: resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== +nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + 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" @@ -6318,6 +6504,13 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + nth-check@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" @@ -6454,7 +6647,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -6469,6 +6662,18 @@ open@^7.4.2: is-docker "^2.0.0" is-wsl "^2.1.1" +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -6481,6 +6686,15 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.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" @@ -6496,11 +6710,21 @@ p-cancelable@^1.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + 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-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -6660,7 +6884,7 @@ path-is-absolute@^1.0.0, path-is-absolute@^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: +path-key@^2.0.0, 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= @@ -6684,6 +6908,11 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" @@ -6715,6 +6944,11 @@ pify@^2.0.0, pify@^2.3.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -6727,53 +6961,6 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pino-multi-stream@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/pino-multi-stream/-/pino-multi-stream-5.3.0.tgz#2816ec4422c7e37e676a210a1705c7155506afd4" - integrity sha512-4fAGCRll18I+JmoAbxDvU9zc5sera/3c+VgTtUdoNMOZ/VSHB+HMAYtixKpeRmZTDHDDdE2rtwjVkuwWB8mYQA== - dependencies: - pino "^6.0.0" - -pino-sentry@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/pino-sentry/-/pino-sentry-0.7.0.tgz#087717d2787ec437627e97454238ca7ce0562a91" - integrity sha512-/rZO1R/oMcMa4mzfIqW6Afap+TGgVHgB8iZfzwjhLdT2PhyuTUNJ3KJT2eIZ0citsQNv26pxRzIPbqgHuQtUAQ== - dependencies: - "@sentry/node" "^6.2.5" - commander "^2.20.0" - pumpify "^2.0.1" - split2 "^3.1.1" - through2 "^3.0.1" - -pino-std-serializers@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz#b56487c402d882eb96cd67c257868016b61ad671" - integrity sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg== - -pino@^6.0.0: - version "6.11.3" - resolved "https://registry.yarnpkg.com/pino/-/pino-6.11.3.tgz#0c02eec6029d25e6794fdb6bbea367247d74bc29" - integrity sha512-drPtqkkSf0ufx2gaea3TryFiBHdNIdXKf5LN0hTM82SXI4xVIve2wLwNg92e1MT6m3jASLu6VO7eGY6+mmGeyw== - dependencies: - fast-redact "^3.0.0" - fast-safe-stringify "^2.0.7" - flatstr "^1.0.12" - pino-std-serializers "^3.1.0" - quick-format-unescaped "^4.0.3" - sonic-boom "^1.0.2" - -pino@^6.11.1: - version "6.11.2" - resolved "https://registry.yarnpkg.com/pino/-/pino-6.11.2.tgz#2f3d119c526651aab4ec3d280844785d52d0b690" - integrity sha512-bmzxwbrIPxQUlAuMkF4PWVErUGERU4z37HazlhflKFg08crsNE3fACGN6gPwg5xtKOK47Ux5cZm8YCuLV4wWJg== - dependencies: - fast-redact "^3.0.0" - fast-safe-stringify "^2.0.7" - flatstr "^1.0.12" - pino-std-serializers "^3.1.0" - quick-format-unescaped "4.0.1" - sonic-boom "^1.0.2" - 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" @@ -6789,6 +6976,11 @@ precond@0.2: resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" @@ -6824,13 +7016,6 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -prom-client@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-13.1.0.tgz#1185caffd8691e28d32e373972e662964e3dba45" - integrity sha512-jT9VccZCWrJWXdyEtQddCDszYsiuWj5T0ekrPszi/WEegj3IZy6Mm09iOOVM86A4IKMWq8hZkT2dD9MaSe+sng== - dependencies: - tdigest "^0.1.1" - 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" @@ -6937,15 +7122,6 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e" - integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== - dependencies: - duplexify "^4.1.1" - inherits "^2.0.3" - pump "^3.0.0" - punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -6992,15 +7168,10 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -quick-format-unescaped@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz#437a5ea1a0b61deb7605f8ab6a8fd3858dbeb701" - integrity sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A== - -quick-format-unescaped@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.3.tgz#6d6b66b8207aa2b35eef12be1421bb24c428f652" - integrity sha512-MaL/oqh02mhEo5m5J2rwsVL23Iw2PEaGVHgT2vFt8AAsr0lfvQA5dpXo9TPu0rz7tSBdUPgkbam0j/fj5ZM8yg== +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6, randombytes@^2.1.0: version "2.1.0" @@ -7059,15 +7230,6 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.1.0, readable-stream@^3.1.1, 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.33: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -7091,6 +7253,15 @@ readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable 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" @@ -7115,6 +7286,20 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + regenerate@^1.2.1: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" @@ -7279,6 +7464,11 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + resolve@1.17.0, resolve@~1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" @@ -7286,7 +7476,7 @@ resolve@1.17.0, resolve@~1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.8.1: +resolve@^1.1.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== @@ -7313,6 +7503,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + rimraf@^2.2.8, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -7335,6 +7530,13 @@ rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3, rlp@^2.2.4: dependencies: bn.js "^4.11.1" +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + rustbn.js@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" @@ -7369,6 +7571,26 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sc-istanbul@^0.4.5: + version "0.4.6" + resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" + integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + scrypt-js@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" @@ -7549,6 +7771,15 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shelljs@^0.8.3: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -7558,6 +7789,11 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -7657,13 +7893,30 @@ solc@^0.6.3: semver "^5.5.0" tmp "0.0.33" -sonic-boom@^1.0.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.4.1.tgz#d35d6a74076624f12e6f917ade7b9d75e918f53e" - integrity sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg== +solidity-coverage@^0.7.16: + version "0.7.16" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.16.tgz#c8c8c46baa361e2817bbf275116ddd2ec90a55fb" + integrity sha512-ttBOStywE6ZOTJmmABSg4b8pwwZfYKG8zxu40Nz+sRF5bQX7JULXWj/XbX0KXps3Fsp8CJXg8P29rH3W54ipxw== dependencies: - atomic-sleep "^1.0.0" - flatstr "^1.0.12" + "@solidity-parser/parser" "^0.12.0" + "@truffle/provider" "^0.2.24" + chalk "^2.4.2" + death "^1.1.0" + detect-port "^1.3.0" + fs-extra "^8.1.0" + ganache-cli "^6.11.0" + ghost-testrpc "^0.0.2" + global-modules "^2.0.0" + globby "^10.0.1" + jsonschema "^1.2.4" + lodash "^4.17.15" + node-emoji "^1.10.0" + pify "^4.0.1" + recursive-readdir "^2.2.2" + sc-istanbul "^0.4.5" + semver "^7.3.4" + shelljs "^0.8.3" + web3-utils "^1.3.0" source-map-resolve@^0.5.0: version "0.5.3" @@ -7709,11 +7962,18 @@ source-map@^0.5.6, source-map@^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: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= + dependencies: + amdefine ">=0.0.4" + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -7747,13 +8007,6 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^3.1.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^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" @@ -7799,11 +8052,6 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - 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" @@ -7931,6 +8179,11 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + 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" @@ -7965,6 +8218,13 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -8039,13 +8299,6 @@ tar@^4.0.2: safe-buffer "^5.1.2" yallist "^3.0.3" -tdigest@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.1.tgz#2e3cb2c39ea449e55d1e6cd91117accca4588021" - integrity sha1-Ljyyw56kSeVdHmzZEReszKRYgCE= - dependencies: - bintrees "1.0.1" - test-value@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" @@ -8084,14 +8337,6 @@ through2@^2.0.3: readable-stream "~2.3.6" xtend "~4.0.1" -through2@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" - integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== - dependencies: - inherits "^2.0.4" - readable-stream "2 || 3" - through@~2.3.4, through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -8255,6 +8500,13 @@ tweetnacl@^1.0.0, tweetnacl@^1.0.3: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + 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" @@ -8353,6 +8605,11 @@ typical@^2.6.0, typical@^2.6.1: resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= +uglify-js@^3.1.4: + version "3.13.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.5.tgz#5d71d6dbba64cf441f32929b1efce7365bb4f113" + integrity sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw== + ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" @@ -8577,6 +8834,16 @@ web3-bzz@1.3.4: swarm-js "^0.1.40" underscore "1.9.1" +web3-bzz@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.5.tgz#f181a1319d9f867f4183b147e7aebd21aecff4a0" + integrity sha512-XiEUAbB1uKm/agqfwBsCW8fbw+sma85TfwuDpdcy591vinVk0S9TfWgLxro6v1KJ6nSELySIbKGbAJbh2GSyxw== + 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" @@ -8604,6 +8871,15 @@ web3-core-helpers@1.3.4: web3-eth-iban "1.3.4" web3-utils "1.3.4" +web3-core-helpers@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.5.tgz#9f0ff7ed40befb9f691986e66fd94c828c7b1b13" + integrity sha512-HYh3ix5FjysgT0jyzD8s/X5ym0b4BGU7I2QtuBiydMnE0mQEWy7GcT9XKpTySA8FTOHHIAQYvQS07DN/ky3UzA== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.3.5" + web3-utils "1.3.5" + 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" @@ -8640,6 +8916,18 @@ web3-core-method@1.3.4: web3-core-subscriptions "1.3.4" web3-utils "1.3.4" +web3-core-method@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.5.tgz#995fe12f3b364469e5208a88d72736327b231faa" + integrity sha512-hCbmgQ+At6OTuaNGAdjXMsCr4eUCmp9yGKSuaB5HdkNVDpqFso4HHjVxcjNrTyJp3OZnyjKBzQzK1ZWLpLl84Q== + dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" + underscore "1.9.1" + web3-core-helpers "1.3.5" + web3-core-promievent "1.3.5" + web3-core-subscriptions "1.3.5" + web3-utils "1.3.5" + 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" @@ -8661,6 +8949,13 @@ web3-core-promievent@1.3.4: dependencies: eventemitter3 "4.0.4" +web3-core-promievent@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.5.tgz#33c34811cc4e2987c56e5192f9a014368c42ca39" + integrity sha512-K0j8x3ZJr0eAyNvyUCxOUsSTd4hco0/9nxxlyOuijcsa6YV8l9NL6eqhniWbSyxCJT8ka5Mb7yAiUZe69EDLBQ== + 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" @@ -8695,6 +8990,18 @@ web3-core-requestmanager@1.3.4: web3-providers-ipc "1.3.4" web3-providers-ws "1.3.4" +web3-core-requestmanager@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.5.tgz#c452ea85fcffdf5b82b84c250707b638790d0e75" + integrity sha512-9l294U3Ga8qmvv8E37BqjQREfMs+kFnkU3PY28g9DZGYzKvl3V1dgDYqxyrOBdCFhc7rNSpHdgC4PrVHjouspg== + dependencies: + underscore "1.9.1" + util "^0.12.0" + web3-core-helpers "1.3.5" + web3-providers-http "1.3.5" + web3-providers-ipc "1.3.5" + web3-providers-ws "1.3.5" + 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" @@ -8722,6 +9029,15 @@ web3-core-subscriptions@1.3.4: underscore "1.9.1" web3-core-helpers "1.3.4" +web3-core-subscriptions@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.5.tgz#7c4dc9d559e344d852de2cf01bd0cc13c94023cb" + integrity sha512-6mtXdaEB1V1zKLqYBq7RF2W75AK5ZJNGpW6QYC7Zvbku7zq1ZlgaUkJo88JKMWJ7etfaHaYqQ/7VveHk5sQynA== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.3.5" + web3-core@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.11.tgz#1043cacc1becb80638453cc5b2a14be9050288a7" @@ -8761,6 +9077,19 @@ web3-core@1.3.4: web3-core-requestmanager "1.3.4" web3-utils "1.3.4" +web3-core@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.5.tgz#1e9335e6c4549dac09aaa07157242ebd6d097226" + integrity sha512-VQjTvnGTqJwDwjKEHSApea3RmgtFGLDSJ6bqrOyHROYNyTyKYjFQ/drG9zs3rjDkND9mgh8foI1ty37Qua3QCQ== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-core-requestmanager "1.3.5" + web3-utils "1.3.5" + 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" @@ -8788,6 +9117,15 @@ web3-eth-abi@1.3.4: underscore "1.9.1" web3-utils "1.3.4" +web3-eth-abi@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.5.tgz#eeffab0a4b318c47b8777de90983ca45614f8173" + integrity sha512-bkbG2v/mOW5DH6rF/SEgqunusjYoEi2IBw+fkmD3rzWDaEY7+/i1xY94AeO257d06QMgld75GtV/N+aEs7A6vQ== + dependencies: + "@ethersproject/abi" "5.0.7" + underscore "1.9.1" + web3-utils "1.3.5" + 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" @@ -8839,6 +9177,23 @@ web3-eth-accounts@1.3.4: web3-core-method "1.3.4" web3-utils "1.3.4" +web3-eth-accounts@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.5.tgz#c23ee748759a6a06d6485a9322b106baa944dcdd" + integrity sha512-r3WOR21rgm6Cd6OFnifr3Tizdm5K+g2TsSOPySwX4FrgLrYDL6ck4zr5VXUPz+llpSExb/JztpE8pqEHr3U2NA== + dependencies: + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-utils "1.3.5" + 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" @@ -8884,6 +9239,21 @@ web3-eth-contract@1.3.4: web3-eth-abi "1.3.4" web3-utils "1.3.4" +web3-eth-contract@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.5.tgz#b41ecf8612b379c4fb1c614e950135717aa8f919" + integrity sha512-WfGVeQquN3D7Qm+KEIN9EI7yrm/fL2V9Y4+YhDWiKA/ns1pX1LYcEWojTOnBXCnPF3tcvoKKL+KBxXg1iKm38A== + dependencies: + "@types/bn.js" "^4.11.5" + underscore "1.9.1" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-core-promievent "1.3.5" + web3-core-subscriptions "1.3.5" + web3-eth-abi "1.3.5" + web3-utils "1.3.5" + 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" @@ -8929,6 +9299,21 @@ web3-eth-ens@1.3.4: web3-eth-contract "1.3.4" web3-utils "1.3.4" +web3-eth-ens@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.5.tgz#5a28d23eb402fb1f6964da60ea60641e4d24d366" + integrity sha512-5bkpFTXV18CvaVP8kCbLZZm2r1TWUv9AsXH+80yz8bTZulUGvXsBMRfK6e5nfEr2Yv59xlIXCFoalmmySI9EJw== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-promievent "1.3.5" + web3-eth-abi "1.3.5" + web3-eth-contract "1.3.5" + web3-utils "1.3.5" + 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" @@ -8953,6 +9338,14 @@ web3-eth-iban@1.3.4: bn.js "^4.11.9" web3-utils "1.3.4" +web3-eth-iban@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.5.tgz#dff1e37864e23a3387016ec4db96cdc290a6fbd6" + integrity sha512-x+BI/d2Vt0J1cKK8eFd4W0f1TDjgEOYCwiViTb28lLE+tqrgyPqWDA+l6UlKYLF/yMFX3Dym4ofcCOtgcn4q4g== + dependencies: + bn.js "^4.11.9" + web3-utils "1.3.5" + 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" @@ -8989,6 +9382,18 @@ web3-eth-personal@1.3.4: web3-net "1.3.4" web3-utils "1.3.4" +web3-eth-personal@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.5.tgz#bc5d5b900bc4824139af2ef01eaf8e9855c644ba" + integrity sha512-xELQHNZ8p3VoO1582ghCaq+Bx7pSkOOalc6/ACOCGtHDMelqgVejrmSIZGScYl+k0HzngmQAzURZWQocaoGM1g== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-net "1.3.5" + web3-utils "1.3.5" + web3-eth@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.11.tgz#4c81fcb6285b8caf544058fba3ae802968fdc793" @@ -9046,6 +9451,25 @@ web3-eth@1.3.4: web3-net "1.3.4" web3-utils "1.3.4" +web3-eth@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.5.tgz#2a3d0db870ef7921942a5d798ba0569175cc4de1" + integrity sha512-5qqDPMMD+D0xRqOV2ePU2G7/uQmhn0FgCEhFzKDMHrssDQJyQLW/VgfA0NLn64lWnuUrGnQStGvNxrWf7MgsfA== + dependencies: + underscore "1.9.1" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-core-subscriptions "1.3.5" + web3-eth-abi "1.3.5" + web3-eth-accounts "1.3.5" + web3-eth-contract "1.3.5" + web3-eth-ens "1.3.5" + web3-eth-iban "1.3.5" + web3-eth-personal "1.3.5" + web3-net "1.3.5" + web3-utils "1.3.5" + web3-net@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.11.tgz#eda68ef25e5cdb64c96c39085cdb74669aabbe1b" @@ -9073,6 +9497,15 @@ web3-net@1.3.4: web3-core-method "1.3.4" web3-utils "1.3.4" +web3-net@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.5.tgz#06e3465a9fbbeec1240160e2fd66ddb07b6af944" + integrity sha512-usbFbuUpKK8s7jPLGoUzi/WpNnefGFPTj948aJv8BZ04UQA4L/XS5NNkkhk358zNMmhGfEFW8wrWy+0Oy0njtA== + dependencies: + web3-core "1.3.5" + web3-core-method "1.3.5" + web3-utils "1.3.5" + 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" @@ -9123,6 +9556,14 @@ web3-providers-http@1.3.4: web3-core-helpers "1.3.4" xhr2-cookies "1.1.0" +web3-providers-http@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.5.tgz#cdada6fb342e08fd75aea249fceb6eee467beffc" + integrity sha512-ZQOmceFjcajEZdiuqciXjijwIYWNmEJ1oxMtbrwB2eGxHRCMXEH2xGRUZuhOFNF88yQC/VXVi14yvYg5ZlFJlA== + dependencies: + web3-core-helpers "1.3.5" + 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" @@ -9150,6 +9591,15 @@ web3-providers-ipc@1.3.4: underscore "1.9.1" web3-core-helpers "1.3.4" +web3-providers-ipc@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.5.tgz#2f5536abfe03f3824e00dedc614d8f46db72b57f" + integrity sha512-cbZOeb/sALiHjzMolJjIyHla/J5wdL2JKUtRO66Nh/uLALBCpU8JUgzNvpAdJ1ae3+A33+EdFStdzuDYHKtQew== + dependencies: + oboe "2.1.5" + underscore "1.9.1" + web3-core-helpers "1.3.5" + 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" @@ -9180,6 +9630,16 @@ web3-providers-ws@1.3.4: web3-core-helpers "1.3.4" websocket "^1.0.32" +web3-providers-ws@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.5.tgz#7f841ec79358d90c4a803d1291157b5ffb15aeb7" + integrity sha512-zeZ4LMvKhYaJBDCqA//Bzgp4r/T0tNq5U/xvN0axA4YflzF7yqlsbzGwCkcZYDbrUaK3Ltl2uOmvwjbWALOZ1A== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.3.5" + websocket "^1.0.32" + web3-shh@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" @@ -9210,6 +9670,16 @@ web3-shh@1.3.4: web3-core-subscriptions "1.3.4" web3-net "1.3.4" +web3-shh@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.5.tgz#af0b8ebca90a3652dbbb90d351395f36ca91f40b" + integrity sha512-aRwzCduXvuGVslLL/Y15VcOHa70Qr2kxZI7UwOzQVhaaOdxuRRvo3AK/cmyln1Tsd54/n93Yk8I3qg5I2+6alw== + dependencies: + web3-core "1.3.5" + web3-core-method "1.3.5" + web3-core-subscriptions "1.3.5" + web3-net "1.3.5" + web3-utils@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" @@ -9252,6 +9722,20 @@ web3-utils@1.3.4, web3-utils@^1.0.0-beta.31: underscore "1.9.1" utf8 "3.0.0" +web3-utils@1.3.5, web3-utils@^1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.5.tgz#14ee2ff1a7a226867698d6eaffd21aa97aed422e" + integrity sha512-5apMRm8ElYjI/92GHqijmaLC+s+d5lgjpjHft+rJSs/dsnX8I8tQreqev0dmU+wzU+2EEe4Sx9a/OwGWHhQv3A== + dependencies: + bn.js "^4.11.9" + eth-lib "0.2.8" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + underscore "1.9.1" + utf8 "3.0.0" + web3@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.11.tgz#50f458b2e8b11aa37302071c170ed61cff332975" @@ -9278,6 +9762,19 @@ web3@1.2.9: web3-shh "1.2.9" web3-utils "1.2.9" +web3@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.5.tgz#ef4c3a2241fdd74f2f7794e839f30bc6f9814e46" + integrity sha512-UyQW/MT5EIGBrXPCh/FDIaD7RtJTn5/rJUNw2FOglp0qoXnCQHNKvntiR1ylztk05fYxIF6UgsC76IrazlKJjw== + dependencies: + web3-bzz "1.3.5" + web3-core "1.3.5" + web3-eth "1.3.5" + web3-eth-personal "1.3.5" + web3-net "1.3.5" + web3-shh "1.3.5" + web3-utils "1.3.5" + web3@^1.0.0-beta.34: version "1.3.4" resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.4.tgz#31e014873360aa5840eb17f9f171190c967cffb7" @@ -9354,7 +9851,7 @@ which-typed-array@^1.1.2: has-symbols "^1.0.1" is-typed-array "^1.1.3" -which@1.3.1, which@^1.2.9: +which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -9373,6 +9870,16 @@ window-size@^0.2.0: resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -9514,7 +10021,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@13.1.2, yargs-parser@^13.1.2: +yargs-parser@13.1.2, yargs-parser@^13.1.0, 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== @@ -9544,6 +10051,23 @@ yargs-unparser@1.6.0: lodash "^4.17.15" yargs "^13.3.0" +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + 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.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" From 242a0467c3e161c3a593c77f373c69f9a8362ca8 Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Wed, 5 May 2021 09:06:57 +0200 Subject: [PATCH 04/21] Introduce contract versioning --- CHANGELOG.md | 2 + contracts/v0.6/LinkToken.sol | 53 +++++++++++++++---- contracts/v0.6/PegSwap.sol | 21 +++++++- contracts/v0.6/TypeAndVersionInterface.sol | 16 ++++++ contracts/v0.7/bridge/token/IERC20Child.sol | 11 +++- .../v0.7/bridge/token/LinkTokenChild.sol | 33 +++++++++--- test/v0.6/LinkToken.test.ts | 2 +- test/v0.6/PegSwap.test.ts | 1 + test/v0.7/bridge/token/LinkTokenChild.test.ts | 1 + 9 files changed, 118 insertions(+), 22 deletions(-) create mode 100644 contracts/v0.6/TypeAndVersionInterface.sol diff --git a/CHANGELOG.md b/CHANGELOG.md index 151b20f..056731a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,10 +9,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Added - Access controlled mintable & burnable LinkToken, for use on sidechains and L2 networks. +- Added versioning to v0.6 & v0.7 contracts ### Changed - Migrated to Hardhat and Waffle +- Changed LinkToken v0.6 name from 'ChainLink Token' to 'Chainlink Token' ### Fixed diff --git a/contracts/v0.6/LinkToken.sol b/contracts/v0.6/LinkToken.sol index 174e33e..f7905cf 100644 --- a/contracts/v0.6/LinkToken.sol +++ b/contracts/v0.6/LinkToken.sol @@ -3,18 +3,40 @@ pragma solidity >0.6.0 <0.8.0; import "./token/LinkERC20.sol"; import "./ERC677Token.sol"; +import "./TypeAndVersionInterface.sol"; -contract LinkToken is LinkERC20, ERC677Token { +/// @dev LinkToken, an ERC20/ERC677 Chainlink token with 1 billion supply +contract LinkToken is TypeAndVersionInterface, LinkERC20, ERC677Token { uint private constant TOTAL_SUPPLY = 10**27; - string private constant NAME = 'ChainLink Token'; + string private constant NAME = 'Chainlink Token'; string private constant SYMBOL = 'LINK'; - constructor() ERC20(NAME, SYMBOL) + constructor() + ERC20(NAME, SYMBOL) public { _onCreate(); } + /** + * @notice versions: + * + * - LinkToken 0.0.3: added versioning, update name + * - LinkToken 0.0.2: upgraded to solc 0.6 + * - LinkToken 0.0.1: initial release solc 0.4 + * + * @inheritdoc TypeAndVersionInterface + */ + function typeAndVersion() + external + pure + override + virtual + returns (string memory) + { + return "LinkToken 0.0.3"; + } + /** * @dev Hook that is called when this contract is created. * Useful to override constructor behaviour in child contracts (e.g., LINK bridge tokens). @@ -31,7 +53,11 @@ contract LinkToken is LinkERC20, ERC677Token { * @dev Check if recepient is a valid address before transfer * @inheritdoc ERC20 */ - function _transfer(address sender, address recipient, uint256 amount) + function _transfer( + address sender, + address recipient, + uint256 amount + ) internal override virtual @@ -44,7 +70,11 @@ contract LinkToken is LinkERC20, ERC677Token { * @dev Check if spender is a valid address before approval * @inheritdoc ERC20 */ - function _approve(address owner, address spender, uint256 amount) + function _approve( + address owner, + address spender, + uint256 amount + ) internal override virtual @@ -53,13 +83,16 @@ contract LinkToken is LinkERC20, ERC677Token { super._approve(owner, spender, amount); } - - // MODIFIERS - - modifier validAddress(address _recipient) + /** + * @dev Check if recipient is valid (not this contract address) + * @param recipient the account we transfer/approve to + */ + modifier validAddress( + address recipient + ) virtual { - require(_recipient != address(this), "LinkToken: transfer/approve to this contract address"); + require(recipient != address(this), "LinkToken: transfer/approve to this contract address"); _; } } diff --git a/contracts/v0.6/PegSwap.sol b/contracts/v0.6/PegSwap.sol index 0c56d08..851f9be 100644 --- a/contracts/v0.6/PegSwap.sol +++ b/contracts/v0.6/PegSwap.sol @@ -5,6 +5,7 @@ import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; import "./token/ERC677Receiver.sol"; +import "./TypeAndVersionInterface.sol"; /** * @notice This contract provides a one-to-one swap between pairs of tokens. It @@ -12,7 +13,7 @@ import "./token/ERC677Receiver.sol"; * users should only interact with the swap, onTokenTransfer, and * getSwappableAmount functions. */ -contract PegSwap is Owned, ReentrancyGuard { +contract PegSwap is TypeAndVersionInterface, Owned, ReentrancyGuard { using SafeMath for uint256; event LiquidityUpdated( @@ -33,6 +34,24 @@ contract PegSwap is Owned, ReentrancyGuard { mapping(address => mapping(address => uint256)) private s_swappableAmount; + /** + * @notice versions: + * + * - PegSwap 0.0.2: added versioning + * - PegSwap 0.0.1: initial release + * + * @inheritdoc TypeAndVersionInterface + */ + function typeAndVersion() + external + pure + override + virtual + returns (string memory) + { + return "PegSwap 0.0.2"; + } + /** * @dev Disallows direct send by setting a default function without the `payable` flag. */ diff --git a/contracts/v0.6/TypeAndVersionInterface.sol b/contracts/v0.6/TypeAndVersionInterface.sol new file mode 100644 index 0000000..4aee265 --- /dev/null +++ b/contracts/v0.6/TypeAndVersionInterface.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0; + +/// @dev Interface contracts should use to report its type and version. +interface TypeAndVersionInterface { + /** + * @dev Returns type and version for the contract. + * + * The returned string has the following format: + * Try to keep its length less than 32 to take up less contract space. + */ + function typeAndVersion() + external + pure + returns (string memory); +} diff --git a/contracts/v0.7/bridge/token/IERC20Child.sol b/contracts/v0.7/bridge/token/IERC20Child.sol index 27bcc67..1a482d8 100644 --- a/contracts/v0.7/bridge/token/IERC20Child.sol +++ b/contracts/v0.7/bridge/token/IERC20Child.sol @@ -13,7 +13,11 @@ interface IERC20Child is IERC20 { * @param recipient an address for whom deposit is being done * @param amount total amount to deposit/mint */ - function deposit(address recipient, uint256 amount) external; + function deposit( + address recipient, + uint256 amount + ) + external; /** * @notice called by bridge gateway when tokens are withdrawn back to root chain @@ -21,5 +25,8 @@ interface IERC20Child is IERC20 { * * @param amount total amount to withdraw/burn */ - function withdraw(uint256 amount) external; + function withdraw( + uint256 amount + ) + external; } diff --git a/contracts/v0.7/bridge/token/LinkTokenChild.sol b/contracts/v0.7/bridge/token/LinkTokenChild.sol index 72ec711..19bc19f 100644 --- a/contracts/v0.7/bridge/token/LinkTokenChild.sol +++ b/contracts/v0.7/bridge/token/LinkTokenChild.sol @@ -2,6 +2,7 @@ pragma solidity >0.6.0 <0.8.0; /* Interface Imports */ +import { TypeAndVersionInterface } from "../../../v0.6/TypeAndVersionInterface.sol"; import { IERC20Child } from "./IERC20Child.sol"; /* Contract Imports */ @@ -9,7 +10,7 @@ import { AccessControl } from "@openzeppelin/contracts/access/AccessControl.sol" import { LinkToken } from "../../../v0.6/LinkToken.sol"; /// @dev Access controlled mintable & burnable LinkToken, for use on sidechains and L2 networks. -contract LinkTokenChild is IERC20Child, AccessControl, LinkToken { +contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, AccessControl, LinkToken { // Using this role the bridge gateway can deposit/withdraw (mint/burn) bytes32 public constant BRIDGE_GATEWAY_ROLE = keccak256("BRIDGE_GATEWAY_ROLE"); @@ -25,15 +26,20 @@ contract LinkTokenChild is IERC20Child, AccessControl, LinkToken { } /** - * @dev Modifier to check access by role. + * @notice versions: * - * @param role the required role + * - LinkTokenChild 0.0.1: initial release + * + * @inheritdoc TypeAndVersionInterface */ - modifier onlyRole( - bytes32 role - ) { - require(hasRole(role, _msgSender()), "LinkTokenChild: missing role"); - _; + function typeAndVersion() + external + pure + override(LinkToken, TypeAndVersionInterface) + virtual + returns (string memory) + { + return "LinkTokenChild 0.0.1"; } /** @@ -66,4 +72,15 @@ contract LinkTokenChild is IERC20Child, AccessControl, LinkToken { { _burn(_msgSender(), amount); } + + /** + * @dev Modifier to check access by role. + * @param role the required role + */ + modifier onlyRole( + bytes32 role + ) { + require(hasRole(role, _msgSender()), "LinkTokenChild: missing role"); + _; + } } diff --git a/test/v0.6/LinkToken.test.ts b/test/v0.6/LinkToken.test.ts index e3798d3..b2b6d75 100644 --- a/test/v0.6/LinkToken.test.ts +++ b/test/v0.6/LinkToken.test.ts @@ -7,7 +7,7 @@ import { getContractFactory, Versions } from '../../src' import { shouldBehaveLikeLinkToken } from '../behavior/LinkToken' import * as h from '../helpers' -const v6_EXTRA_PUBLIC_ABI = ['decreaseAllowance', 'increaseAllowance'] +const v6_EXTRA_PUBLIC_ABI = ['decreaseAllowance', 'increaseAllowance', 'typeAndVersion'] h.describes.HH(`LinkToken ${Versions.v0_6}`, () => { const overrides: Record = { Token677: 'LinkToken' } diff --git a/test/v0.6/PegSwap.test.ts b/test/v0.6/PegSwap.test.ts index 593610b..82ee285 100644 --- a/test/v0.6/PegSwap.test.ts +++ b/test/v0.6/PegSwap.test.ts @@ -35,6 +35,7 @@ h.describes.HH('ERC677Token', () => { it('has a limited public ABI', () => { h.publicAbi(swap, [ + 'typeAndVersion', 'addLiquidity', 'getSwappableAmount', 'onTokenTransfer', diff --git a/test/v0.7/bridge/token/LinkTokenChild.test.ts b/test/v0.7/bridge/token/LinkTokenChild.test.ts index 1fcfb97..d96758f 100644 --- a/test/v0.7/bridge/token/LinkTokenChild.test.ts +++ b/test/v0.7/bridge/token/LinkTokenChild.test.ts @@ -62,6 +62,7 @@ const LinkTokenChild_PUBLIC_ABI = [ const EXTRA_PUBLIC_ABI = [ 'decreaseAllowance', 'increaseAllowance', + 'typeAndVersion', ...OZ_AccessControl_PUBLIC_ABI, ...LinkTokenChild_PUBLIC_ABI, ] From 94f2aa3990f9e43ef4624eaff2a1a1d9458f9bd7 Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Fri, 7 May 2021 16:59:07 +0200 Subject: [PATCH 05/21] Change v0.6 contracts code style --- contracts/v0.6/ERC677Token.sol | 36 ++++++++++++------- contracts/v0.6/PegSwap.sol | 3 +- contracts/v0.6/mocks/LinkReceiver.sol | 31 +++++++++++----- contracts/v0.6/mocks/NotERC677Compatible.sol | 4 ++- contracts/v0.6/mocks/StandardTokenMock.sol | 9 +++-- contracts/v0.6/mocks/Token677.sol | 9 +++-- contracts/v0.6/mocks/Token677ReceiverMock.sol | 14 +++++--- contracts/v0.6/token/ERC677.sol | 15 ++++++-- contracts/v0.6/token/ERC677Receiver.sol | 7 +++- contracts/v0.6/token/LinkERC20.sol | 18 ++++++++-- 10 files changed, 110 insertions(+), 36 deletions(-) diff --git a/contracts/v0.6/ERC677Token.sol b/contracts/v0.6/ERC677Token.sol index ab02701..9c138bc 100644 --- a/contracts/v0.6/ERC677Token.sol +++ b/contracts/v0.6/ERC677Token.sol @@ -8,20 +8,24 @@ import "./token/ERC677Receiver.sol"; abstract contract ERC677Token is ERC20, ERC677 { /** * @dev transfer token to a contract address with additional data if the recipient is a contact. - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - * @param _data The extra data to be passed to the receiving contract. + * @param to The address to transfer to. + * @param value The amount to be transferred. + * @param data The extra data to be passed to the receiving contract. */ - function transferAndCall(address _to, uint _value, bytes memory _data) + function transferAndCall( + address to, + uint value, + bytes memory data + ) public override virtual returns (bool success) { - super.transfer(_to, _value); - emit Transfer(msg.sender, _to, _value, _data); - if (isContract(_to)) { - contractFallback(_to, _value, _data); + super.transfer(to, value); + emit Transfer(msg.sender, to, value, data); + if (isContract(to)) { + contractFallback(to, value, data); } return true; } @@ -29,20 +33,26 @@ abstract contract ERC677Token is ERC20, ERC677 { // PRIVATE - function contractFallback(address _to, uint _value, bytes memory _data) + function contractFallback( + address to, + uint value, + bytes memory data + ) private { - ERC677Receiver receiver = ERC677Receiver(_to); - receiver.onTokenTransfer(msg.sender, _value, _data); + ERC677Receiver receiver = ERC677Receiver(to); + receiver.onTokenTransfer(msg.sender, value, data); } - function isContract(address _addr) + function isContract( + address addr + ) private view returns (bool hasCode) { uint length; - assembly { length := extcodesize(_addr) } + assembly { length := extcodesize(addr) } return length > 0; } } diff --git a/contracts/v0.6/PegSwap.sol b/contracts/v0.6/PegSwap.sol index 851f9be..751602a 100644 --- a/contracts/v0.6/PegSwap.sol +++ b/contracts/v0.6/PegSwap.sol @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "@chainlink/contracts/src/v0.6/Owned.sol"; @@ -226,6 +227,7 @@ contract PegSwap is TypeAndVersionInterface, Owned, ReentrancyGuard { address target ) private + view returns ( bool hasLiquidity ) @@ -234,5 +236,4 @@ contract PegSwap is TypeAndVersionInterface, Owned, ReentrancyGuard { if (getSwappableAmount(target, source) > 0) return true; return false; } - } diff --git a/contracts/v0.6/mocks/LinkReceiver.sol b/contracts/v0.6/mocks/LinkReceiver.sol index 3f80f4c..5af2b3d 100644 --- a/contracts/v0.6/mocks/LinkReceiver.sol +++ b/contracts/v0.6/mocks/LinkReceiver.sol @@ -8,23 +8,38 @@ contract LinkReceiver { bool public callDataCalled; uint public tokensReceived; - function onTokenTransfer(address _from, uint _amount, bytes memory _data) public returns (bool) { + function onTokenTransfer( + address /* from */, + uint /* amount */, + bytes memory data + ) + public + returns (bool) + { fallbackCalled = true; - if (_data.length > 0) { - (bool success, bytes memory _returnData) = address(this).delegatecall(_data); + if (data.length > 0) { + (bool success, /* bytes memory returnData */) = address(this).delegatecall(data); require(success, "onTokenTransfer:delegatecall failed"); } return true; } - function callbackWithoutWithdrawl() public { + function callbackWithoutWithdrawl() + public + { callDataCalled = true; } - function callbackWithWithdrawl(uint _value, address _from, address _token) public { + function callbackWithWithdrawl( + uint value, + address from, + address tokenAddr + ) + public + { callDataCalled = true; - IERC20 token = IERC20(_token); - token.transferFrom(_from, address(this), _value); - tokensReceived = _value; + IERC20 token = IERC20(tokenAddr); + token.transferFrom(from, address(this), value); + tokensReceived = value; } } diff --git a/contracts/v0.6/mocks/NotERC677Compatible.sol b/contracts/v0.6/mocks/NotERC677Compatible.sol index 85f617f..6c4cd21 100644 --- a/contracts/v0.6/mocks/NotERC677Compatible.sol +++ b/contracts/v0.6/mocks/NotERC677Compatible.sol @@ -2,5 +2,7 @@ pragma solidity >0.6.0 <0.8.0; contract NotERC677Compatible { - constructor() public {} + constructor() + public + {} } diff --git a/contracts/v0.6/mocks/StandardTokenMock.sol b/contracts/v0.6/mocks/StandardTokenMock.sol index 8cfeb48..c8a8608 100644 --- a/contracts/v0.6/mocks/StandardTokenMock.sol +++ b/contracts/v0.6/mocks/StandardTokenMock.sol @@ -5,8 +5,13 @@ import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "../token/LinkERC20.sol"; contract StandardTokenMock is ERC20, LinkERC20 { - - constructor(address initialAccount, uint initialBalance) ERC20("StandardTokenMock", "STM") public { + constructor( + address initialAccount, + uint initialBalance + ) + ERC20("StandardTokenMock", "STM") + public + { _mint(initialAccount, initialBalance); } } diff --git a/contracts/v0.6/mocks/Token677.sol b/contracts/v0.6/mocks/Token677.sol index 8734ec2..f0b8ca2 100644 --- a/contracts/v0.6/mocks/Token677.sol +++ b/contracts/v0.6/mocks/Token677.sol @@ -8,7 +8,12 @@ contract Token677 is ERC20, ERC677Token { string private constant NAME = "Example ERC677 Token"; string private constant SYMBOL = "ERC677"; - constructor(uint _initialBalance) ERC20(NAME, SYMBOL) public { - _mint(msg.sender, _initialBalance); + constructor( + uint initialBalance + ) + ERC20(NAME, SYMBOL) + public + { + _mint(msg.sender, initialBalance); } } diff --git a/contracts/v0.6/mocks/Token677ReceiverMock.sol b/contracts/v0.6/mocks/Token677ReceiverMock.sol index c1bc5b3..e150c6f 100644 --- a/contracts/v0.6/mocks/Token677ReceiverMock.sol +++ b/contracts/v0.6/mocks/Token677ReceiverMock.sol @@ -7,11 +7,17 @@ contract Token677ReceiverMock { bytes public tokenData; bool public calledFallback = false; - function onTokenTransfer(address _sender, uint _value, bytes memory _data) public { + function onTokenTransfer( + address sender, + uint value, + bytes memory data + ) + public + { calledFallback = true; - tokenSender = _sender; - sentValue = _value; - tokenData = _data; + tokenSender = sender; + sentValue = value; + tokenData = data; } } diff --git a/contracts/v0.6/token/ERC677.sol b/contracts/v0.6/token/ERC677.sol index 1d39b7a..e4f7a12 100644 --- a/contracts/v0.6/token/ERC677.sol +++ b/contracts/v0.6/token/ERC677.sol @@ -4,7 +4,18 @@ pragma solidity >0.6.0 <0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface ERC677 is IERC20 { - function transferAndCall(address to, uint value, bytes memory data) external returns (bool success); + function transferAndCall( + address to, + uint value, + bytes memory data + ) + external + returns (bool success); - event Transfer(address indexed from, address indexed to, uint value, bytes data); + event Transfer( + address indexed from, + address indexed to, + uint value, + bytes data + ); } diff --git a/contracts/v0.6/token/ERC677Receiver.sol b/contracts/v0.6/token/ERC677Receiver.sol index 6d1050f..5beadcd 100644 --- a/contracts/v0.6/token/ERC677Receiver.sol +++ b/contracts/v0.6/token/ERC677Receiver.sol @@ -2,5 +2,10 @@ pragma solidity >0.6.0 <0.8.0; interface ERC677Receiver { - function onTokenTransfer(address _sender, uint _value, bytes memory _data) external; + function onTokenTransfer( + address sender, + uint value, + bytes memory data + ) + external; } diff --git a/contracts/v0.6/token/LinkERC20.sol b/contracts/v0.6/token/LinkERC20.sol index 19690c2..89a7ae9 100644 --- a/contracts/v0.6/token/LinkERC20.sol +++ b/contracts/v0.6/token/LinkERC20.sol @@ -16,7 +16,14 @@ abstract contract LinkERC20 is ERC20 { * * - `spender` cannot be the zero address. */ - function increaseApproval(address spender, uint256 addedValue) public virtual returns (bool) { + function increaseApproval( + address spender, + uint256 addedValue + ) + public + virtual + returns (bool) + { return super.increaseAllowance(spender, addedValue); } @@ -34,7 +41,14 @@ abstract contract LinkERC20 is ERC20 { * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ - function decreaseApproval(address spender, uint256 subtractedValue) public virtual returns (bool) { + function decreaseApproval( + address spender, + uint256 subtractedValue + ) + public + virtual + returns (bool) + { return super.decreaseAllowance(spender, subtractedValue); } } From a71209201c0bb0954053b3ef9c07018c5a27d5d3 Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Fri, 7 May 2021 17:10:25 +0200 Subject: [PATCH 06/21] Remove export of JS helper functions - By doing this we are trying to lower the probablity of supply chain type of attacks --- package.json | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index ea06ddd..7aa5ee5 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,10 @@ { "name": "@chainlink/token", + "version": "1.2.0-alpha", "homepage": "https://github.com/smartcontractkit/LinkToken", "repository": "https://github.com/smartcontractkit/LinkToken", - "version": "1.2.0-alpha", "license": "MIT", - "authors": [ - "Steve Ellis " - ], "files": [ - "build/**/*.js", "build/contracts/*", "build/artifacts/**/*.json", "build/artifacts-ovm/**/*.json", @@ -35,18 +31,13 @@ }, "dependencies": { "@chainlink/contracts": "^0.1.6", - "@chainlink/optimism-utils": "https://github.com/smartcontractkit/optimism-utils.git", - "@ethersproject/bignumber": "^5.1.1", - "@ethersproject/units": "^5.1.0", - "@openzeppelin/contracts": "3.4.0", - "ethers": "^5.1.4", - "glob": "^7.1.6", - "hardhat": "^2.2.1", - "lodash": "^4.17.21", - "yargs": "^16.2.0" + "@openzeppelin/contracts": "3.4.0" }, "devDependencies": { + "@chainlink/optimism-utils": "https://github.com/smartcontractkit/optimism-utils.git", "@eth-optimism/hardhat-ovm": "^0.1.1", + "@ethersproject/bignumber": "^5.1.1", + "@ethersproject/units": "^5.1.0", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-waffle": "^2.0.1", "@typechain/ethers-v5": "^6.0.5", @@ -60,13 +51,21 @@ "chai": "^4.3.4", "dotenv": "^8.2.0", "ethereum-waffle": "^3.3.0", + "ethers": "^5.1.4", + "glob": "^7.1.6", + "hardhat": "^2.2.1", "hardhat-contract-sizer": "^2.0.3", "hardhat-gas-reporter": "^1.0.4", + "lodash": "^4.17.21", "moment": "^2.15.2", "prettier": "^2.2.1", "ts-generator": "^0.1.1", "ts-node": "^9.1.1", "typechain": "^4.0.3", - "typescript": "^4.2.3" - } + "typescript": "^4.2.3", + "yargs": "^16.2.0" + }, + "authors": [ + "Steve Ellis " + ] } From 9a0e59cb2510fb606840f2845998d8a58e94a6fd Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Fri, 7 May 2021 19:00:38 +0200 Subject: [PATCH 07/21] Include vendor contract source - By doing this we are trying to lower the probablity of supply chain type of attacks --- contracts/v0.6/ERC677Token.sol | 2 +- contracts/v0.6/PegSwap.sol | 8 +- contracts/v0.6/mocks/LinkReceiver.sol | 2 +- contracts/v0.6/mocks/StandardTokenMock.sol | 2 +- contracts/v0.6/mocks/Token677.sol | 2 +- contracts/v0.6/token/ERC677.sol | 2 +- contracts/v0.6/token/LinkERC20.sol | 2 +- contracts/v0.7/bridge/token/IERC20Child.sol | 2 +- .../v0.7/bridge/token/LinkTokenChild.sol | 2 +- .../@chainlink/contracts/0.1.7/commit.info | 1 + .../contracts/0.1.7/contracts/v0.6/Owned.sol | 62 ++ .../@openzeppelin/contracts/3.4.1/commit.info | 1 + .../3.4.1/contracts/access/AccessControl.sol | 217 +++++ .../3.4.1/contracts/math/SafeMath.sol | 214 +++++ .../3.4.1/contracts/token/ERC20/ERC20.sol | 306 ++++++ .../3.4.1/contracts/token/ERC20/IERC20.sol | 77 ++ .../3.4.1/contracts/utils/Address.sol | 189 ++++ .../3.4.1/contracts/utils/Context.sol | 24 + .../3.4.1/contracts/utils/EnumerableSet.sol | 297 ++++++ .../3.4.1/contracts/utils/ReentrancyGuard.sol | 62 ++ package.json | 5 +- yarn.lock | 880 +----------------- 22 files changed, 1481 insertions(+), 878 deletions(-) create mode 100644 contracts/vendor/@chainlink/contracts/0.1.7/commit.info create mode 100644 contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol create mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/commit.info create mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/access/AccessControl.sol create mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/math/SafeMath.sol create mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol create mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol create mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Address.sol create mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Context.sol create mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/EnumerableSet.sol create mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/ReentrancyGuard.sol diff --git a/contracts/v0.6/ERC677Token.sol b/contracts/v0.6/ERC677Token.sol index 9c138bc..ce7e66b 100644 --- a/contracts/v0.6/ERC677Token.sol +++ b/contracts/v0.6/ERC677Token.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol"; import "./token/ERC677.sol"; import "./token/ERC677Receiver.sol"; diff --git a/contracts/v0.6/PegSwap.sol b/contracts/v0.6/PegSwap.sol index 751602a..9e448bf 100644 --- a/contracts/v0.6/PegSwap.sol +++ b/contracts/v0.6/PegSwap.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; -import "@chainlink/contracts/src/v0.6/Owned.sol"; -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; -import "@openzeppelin/contracts/math/SafeMath.sol"; +import "../vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol"; +import "../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol"; +import "../vendor/@openzeppelin/contracts/3.4.1/contracts/utils/ReentrancyGuard.sol"; +import "../vendor/@openzeppelin/contracts/3.4.1/contracts/math/SafeMath.sol"; import "./token/ERC677Receiver.sol"; import "./TypeAndVersionInterface.sol"; diff --git a/contracts/v0.6/mocks/LinkReceiver.sol b/contracts/v0.6/mocks/LinkReceiver.sol index 5af2b3d..7bdf835 100644 --- a/contracts/v0.6/mocks/LinkReceiver.sol +++ b/contracts/v0.6/mocks/LinkReceiver.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol"; contract LinkReceiver { bool public fallbackCalled; diff --git a/contracts/v0.6/mocks/StandardTokenMock.sol b/contracts/v0.6/mocks/StandardTokenMock.sol index c8a8608..bbb6405 100644 --- a/contracts/v0.6/mocks/StandardTokenMock.sol +++ b/contracts/v0.6/mocks/StandardTokenMock.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol"; import "../token/LinkERC20.sol"; contract StandardTokenMock is ERC20, LinkERC20 { diff --git a/contracts/v0.6/mocks/Token677.sol b/contracts/v0.6/mocks/Token677.sol index f0b8ca2..8cf3802 100644 --- a/contracts/v0.6/mocks/Token677.sol +++ b/contracts/v0.6/mocks/Token677.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol"; import "../ERC677Token.sol"; contract Token677 is ERC20, ERC677Token { diff --git a/contracts/v0.6/token/ERC677.sol b/contracts/v0.6/token/ERC677.sol index e4f7a12..18d5340 100644 --- a/contracts/v0.6/token/ERC677.sol +++ b/contracts/v0.6/token/ERC677.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol"; interface ERC677 is IERC20 { function transferAndCall( diff --git a/contracts/v0.6/token/LinkERC20.sol b/contracts/v0.6/token/LinkERC20.sol index 89a7ae9..066e198 100644 --- a/contracts/v0.6/token/LinkERC20.sol +++ b/contracts/v0.6/token/LinkERC20.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol"; abstract contract LinkERC20 is ERC20 { /** diff --git a/contracts/v0.7/bridge/token/IERC20Child.sol b/contracts/v0.7/bridge/token/IERC20Child.sol index 1a482d8..7015406 100644 --- a/contracts/v0.7/bridge/token/IERC20Child.sol +++ b/contracts/v0.7/bridge/token/IERC20Child.sol @@ -2,7 +2,7 @@ pragma solidity >0.6.0 <0.8.0; /* Interface Imports */ -import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { IERC20 } from "../../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol"; /// @dev Interface of the child ERC20 token, for use on sidechains and L2 networks. interface IERC20Child is IERC20 { diff --git a/contracts/v0.7/bridge/token/LinkTokenChild.sol b/contracts/v0.7/bridge/token/LinkTokenChild.sol index 19bc19f..680e942 100644 --- a/contracts/v0.7/bridge/token/LinkTokenChild.sol +++ b/contracts/v0.7/bridge/token/LinkTokenChild.sol @@ -6,7 +6,7 @@ import { TypeAndVersionInterface } from "../../../v0.6/TypeAndVersionInterface.s import { IERC20Child } from "./IERC20Child.sol"; /* Contract Imports */ -import { AccessControl } from "@openzeppelin/contracts/access/AccessControl.sol"; +import { AccessControl } from "../../../vendor/@openzeppelin/contracts/3.4.1/contracts/access/AccessControl.sol"; import { LinkToken } from "../../../v0.6/LinkToken.sol"; /// @dev Access controlled mintable & burnable LinkToken, for use on sidechains and L2 networks. diff --git a/contracts/vendor/@chainlink/contracts/0.1.7/commit.info b/contracts/vendor/@chainlink/contracts/0.1.7/commit.info new file mode 100644 index 0000000..ee053c4 --- /dev/null +++ b/contracts/vendor/@chainlink/contracts/0.1.7/commit.info @@ -0,0 +1 @@ +3e90696fb3fe48cb3d19b09848653db2e0e6cb24 diff --git a/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol b/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol new file mode 100644 index 0000000..10b0337 --- /dev/null +++ b/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.6.0; + +/** + * @title The Owned contract + * @notice A contract with helpers for basic contract ownership. + */ +contract Owned { + + address public owner; + address private pendingOwner; + + event OwnershipTransferRequested( + address indexed from, + address indexed to + ); + event OwnershipTransferred( + address indexed from, + address indexed to + ); + + constructor() public { + owner = msg.sender; + } + + /** + * @dev Allows an owner to begin transferring ownership to a new address, + * pending. + */ + function transferOwnership(address _to) + external + onlyOwner() + { + pendingOwner = _to; + + emit OwnershipTransferRequested(owner, _to); + } + + /** + * @dev Allows an ownership transfer to be completed by the recipient. + */ + function acceptOwnership() + external + { + require(msg.sender == pendingOwner, "Must be proposed owner"); + + address oldOwner = owner; + owner = msg.sender; + pendingOwner = address(0); + + emit OwnershipTransferred(oldOwner, msg.sender); + } + + /** + * @dev Reverts if called by anyone other than the contract owner. + */ + modifier onlyOwner() { + require(msg.sender == owner, "Only callable by owner"); + _; + } + +} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/commit.info b/contracts/vendor/@openzeppelin/contracts/3.4.1/commit.info new file mode 100644 index 0000000..ba429f2 --- /dev/null +++ b/contracts/vendor/@openzeppelin/contracts/3.4.1/commit.info @@ -0,0 +1 @@ +cec0800c541c809f883a37f2dfb91ec4c90263c5 diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/access/AccessControl.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/access/AccessControl.sol new file mode 100644 index 0000000..de30822 --- /dev/null +++ b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/access/AccessControl.sol @@ -0,0 +1,217 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +import "../utils/EnumerableSet.sol"; +import "../utils/Address.sol"; +import "../utils/Context.sol"; + +/** + * @dev Contract module that allows children to implement role-based access + * control mechanisms. + * + * Roles are referred to by their `bytes32` identifier. These should be exposed + * in the external API and be unique. The best way to achieve this is by + * using `public constant` hash digests: + * + * ``` + * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); + * ``` + * + * Roles can be used to represent a set of permissions. To restrict access to a + * function call, use {hasRole}: + * + * ``` + * function foo() public { + * require(hasRole(MY_ROLE, msg.sender)); + * ... + * } + * ``` + * + * Roles can be granted and revoked dynamically via the {grantRole} and + * {revokeRole} functions. Each role has an associated admin role, and only + * accounts that have a role's admin role can call {grantRole} and {revokeRole}. + * + * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means + * that only accounts with this role will be able to grant or revoke other + * roles. More complex role relationships can be created by using + * {_setRoleAdmin}. + * + * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to + * grant and revoke this role. Extra precautions should be taken to secure + * accounts that have been granted it. + */ +abstract contract AccessControl is Context { + using EnumerableSet for EnumerableSet.AddressSet; + using Address for address; + + struct RoleData { + EnumerableSet.AddressSet members; + bytes32 adminRole; + } + + mapping (bytes32 => RoleData) private _roles; + + bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; + + /** + * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` + * + * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite + * {RoleAdminChanged} not being emitted signaling this. + * + * _Available since v3.1._ + */ + event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); + + /** + * @dev Emitted when `account` is granted `role`. + * + * `sender` is the account that originated the contract call, an admin role + * bearer except when using {_setupRole}. + */ + event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); + + /** + * @dev Emitted when `account` is revoked `role`. + * + * `sender` is the account that originated the contract call: + * - if using `revokeRole`, it is the admin role bearer + * - if using `renounceRole`, it is the role bearer (i.e. `account`) + */ + event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); + + /** + * @dev Returns `true` if `account` has been granted `role`. + */ + function hasRole(bytes32 role, address account) public view returns (bool) { + return _roles[role].members.contains(account); + } + + /** + * @dev Returns the number of accounts that have `role`. Can be used + * together with {getRoleMember} to enumerate all bearers of a role. + */ + function getRoleMemberCount(bytes32 role) public view returns (uint256) { + return _roles[role].members.length(); + } + + /** + * @dev Returns one of the accounts that have `role`. `index` must be a + * value between 0 and {getRoleMemberCount}, non-inclusive. + * + * Role bearers are not sorted in any particular way, and their ordering may + * change at any point. + * + * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure + * you perform all queries on the same block. See the following + * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] + * for more information. + */ + function getRoleMember(bytes32 role, uint256 index) public view returns (address) { + return _roles[role].members.at(index); + } + + /** + * @dev Returns the admin role that controls `role`. See {grantRole} and + * {revokeRole}. + * + * To change a role's admin, use {_setRoleAdmin}. + */ + function getRoleAdmin(bytes32 role) public view returns (bytes32) { + return _roles[role].adminRole; + } + + /** + * @dev Grants `role` to `account`. + * + * If `account` had not been already granted `role`, emits a {RoleGranted} + * event. + * + * Requirements: + * + * - the caller must have ``role``'s admin role. + */ + function grantRole(bytes32 role, address account) public virtual { + require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant"); + + _grantRole(role, account); + } + + /** + * @dev Revokes `role` from `account`. + * + * If `account` had been granted `role`, emits a {RoleRevoked} event. + * + * Requirements: + * + * - the caller must have ``role``'s admin role. + */ + function revokeRole(bytes32 role, address account) public virtual { + require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke"); + + _revokeRole(role, account); + } + + /** + * @dev Revokes `role` from the calling account. + * + * Roles are often managed via {grantRole} and {revokeRole}: this function's + * purpose is to provide a mechanism for accounts to lose their privileges + * if they are compromised (such as when a trusted device is misplaced). + * + * If the calling account had been granted `role`, emits a {RoleRevoked} + * event. + * + * Requirements: + * + * - the caller must be `account`. + */ + function renounceRole(bytes32 role, address account) public virtual { + require(account == _msgSender(), "AccessControl: can only renounce roles for self"); + + _revokeRole(role, account); + } + + /** + * @dev Grants `role` to `account`. + * + * If `account` had not been already granted `role`, emits a {RoleGranted} + * event. Note that unlike {grantRole}, this function doesn't perform any + * checks on the calling account. + * + * [WARNING] + * ==== + * This function should only be called from the constructor when setting + * up the initial roles for the system. + * + * Using this function in any other way is effectively circumventing the admin + * system imposed by {AccessControl}. + * ==== + */ + function _setupRole(bytes32 role, address account) internal virtual { + _grantRole(role, account); + } + + /** + * @dev Sets `adminRole` as ``role``'s admin role. + * + * Emits a {RoleAdminChanged} event. + */ + function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { + emit RoleAdminChanged(role, _roles[role].adminRole, adminRole); + _roles[role].adminRole = adminRole; + } + + function _grantRole(bytes32 role, address account) private { + if (_roles[role].members.add(account)) { + emit RoleGranted(role, account, _msgSender()); + } + } + + function _revokeRole(bytes32 role, address account) private { + if (_roles[role].members.remove(account)) { + emit RoleRevoked(role, account, _msgSender()); + } + } +} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/math/SafeMath.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/math/SafeMath.sol new file mode 100644 index 0000000..3e81f29 --- /dev/null +++ b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/math/SafeMath.sol @@ -0,0 +1,214 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +/** + * @dev Wrappers over Solidity's arithmetic operations with added overflow + * checks. + * + * Arithmetic operations in Solidity wrap on overflow. This can easily result + * in bugs, because programmers usually assume that an overflow raises an + * error, which is the standard behavior in high level programming languages. + * `SafeMath` restores this intuition by reverting the transaction when an + * operation overflows. + * + * Using this library instead of the unchecked operations eliminates an entire + * class of bugs, so it's recommended to use it always. + */ +library SafeMath { + /** + * @dev Returns the addition of two unsigned integers, with an overflow flag. + * + * _Available since v3.4._ + */ + function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { + uint256 c = a + b; + if (c < a) return (false, 0); + return (true, c); + } + + /** + * @dev Returns the substraction of two unsigned integers, with an overflow flag. + * + * _Available since v3.4._ + */ + function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { + if (b > a) return (false, 0); + return (true, a - b); + } + + /** + * @dev Returns the multiplication of two unsigned integers, with an overflow flag. + * + * _Available since v3.4._ + */ + function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { + // Gas optimization: this is cheaper than requiring 'a' not being zero, but the + // benefit is lost if 'b' is also tested. + // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 + if (a == 0) return (true, 0); + uint256 c = a * b; + if (c / a != b) return (false, 0); + return (true, c); + } + + /** + * @dev Returns the division of two unsigned integers, with a division by zero flag. + * + * _Available since v3.4._ + */ + function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { + if (b == 0) return (false, 0); + return (true, a / b); + } + + /** + * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. + * + * _Available since v3.4._ + */ + function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { + if (b == 0) return (false, 0); + return (true, a % b); + } + + /** + * @dev Returns the addition of two unsigned integers, reverting on + * overflow. + * + * Counterpart to Solidity's `+` operator. + * + * Requirements: + * + * - Addition cannot overflow. + */ + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + require(c >= a, "SafeMath: addition overflow"); + return c; + } + + /** + * @dev Returns the subtraction of two unsigned integers, reverting on + * overflow (when the result is negative). + * + * Counterpart to Solidity's `-` operator. + * + * Requirements: + * + * - Subtraction cannot overflow. + */ + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + require(b <= a, "SafeMath: subtraction overflow"); + return a - b; + } + + /** + * @dev Returns the multiplication of two unsigned integers, reverting on + * overflow. + * + * Counterpart to Solidity's `*` operator. + * + * Requirements: + * + * - Multiplication cannot overflow. + */ + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) return 0; + uint256 c = a * b; + require(c / a == b, "SafeMath: multiplication overflow"); + return c; + } + + /** + * @dev Returns the integer division of two unsigned integers, reverting on + * division by zero. The result is rounded towards zero. + * + * Counterpart to Solidity's `/` operator. Note: this function uses a + * `revert` opcode (which leaves remaining gas untouched) while Solidity + * uses an invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function div(uint256 a, uint256 b) internal pure returns (uint256) { + require(b > 0, "SafeMath: division by zero"); + return a / b; + } + + /** + * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), + * reverting when dividing by zero. + * + * Counterpart to Solidity's `%` operator. This function uses a `revert` + * opcode (which leaves remaining gas untouched) while Solidity uses an + * invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function mod(uint256 a, uint256 b) internal pure returns (uint256) { + require(b > 0, "SafeMath: modulo by zero"); + return a % b; + } + + /** + * @dev Returns the subtraction of two unsigned integers, reverting with custom message on + * overflow (when the result is negative). + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {trySub}. + * + * Counterpart to Solidity's `-` operator. + * + * Requirements: + * + * - Subtraction cannot overflow. + */ + function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + require(b <= a, errorMessage); + return a - b; + } + + /** + * @dev Returns the integer division of two unsigned integers, reverting with custom message on + * division by zero. The result is rounded towards zero. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryDiv}. + * + * Counterpart to Solidity's `/` operator. Note: this function uses a + * `revert` opcode (which leaves remaining gas untouched) while Solidity + * uses an invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + require(b > 0, errorMessage); + return a / b; + } + + /** + * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), + * reverting with custom message when dividing by zero. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryMod}. + * + * Counterpart to Solidity's `%` operator. This function uses a `revert` + * opcode (which leaves remaining gas untouched) while Solidity uses an + * invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + require(b > 0, errorMessage); + return a % b; + } +} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol new file mode 100644 index 0000000..1f3e400 --- /dev/null +++ b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol @@ -0,0 +1,306 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +import "../../utils/Context.sol"; +import "./IERC20.sol"; +import "../../math/SafeMath.sol"; + +/** + * @dev Implementation of the {IERC20} interface. + * + * This implementation is agnostic to the way tokens are created. This means + * that a supply mechanism has to be added in a derived contract using {_mint}. + * For a generic mechanism see {ERC20PresetMinterPauser}. + * + * TIP: For a detailed writeup see our guide + * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How + * to implement supply mechanisms]. + * + * We have followed general OpenZeppelin guidelines: functions revert instead + * of returning `false` on failure. This behavior is nonetheless conventional + * and does not conflict with the expectations of ERC20 applications. + * + * Additionally, an {Approval} event is emitted on calls to {transferFrom}. + * This allows applications to reconstruct the allowance for all accounts just + * by listening to said events. Other implementations of the EIP may not emit + * these events, as it isn't required by the specification. + * + * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} + * functions have been added to mitigate the well-known issues around setting + * allowances. See {IERC20-approve}. + */ +contract ERC20 is Context, IERC20 { + using SafeMath for uint256; + + mapping (address => uint256) private _balances; + + mapping (address => mapping (address => uint256)) private _allowances; + + uint256 private _totalSupply; + + string private _name; + string private _symbol; + uint8 private _decimals; + + /** + * @dev Sets the values for {name} and {symbol}, initializes {decimals} with + * a default value of 18. + * + * To select a different value for {decimals}, use {_setupDecimals}. + * + * All three of these values are immutable: they can only be set once during + * construction. + */ + constructor (string memory name_, string memory symbol_) public { + _name = name_; + _symbol = symbol_; + _decimals = 18; + } + + /** + * @dev Returns the name of the token. + */ + function name() public view virtual returns (string memory) { + return _name; + } + + /** + * @dev Returns the symbol of the token, usually a shorter version of the + * name. + */ + function symbol() public view virtual returns (string memory) { + return _symbol; + } + + /** + * @dev Returns the number of decimals used to get its user representation. + * For example, if `decimals` equals `2`, a balance of `505` tokens should + * be displayed to a user as `5,05` (`505 / 10 ** 2`). + * + * Tokens usually opt for a value of 18, imitating the relationship between + * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is + * called. + * + * NOTE: This information is only used for _display_ purposes: it in + * no way affects any of the arithmetic of the contract, including + * {IERC20-balanceOf} and {IERC20-transfer}. + */ + function decimals() public view virtual returns (uint8) { + return _decimals; + } + + /** + * @dev See {IERC20-totalSupply}. + */ + function totalSupply() public view virtual override returns (uint256) { + return _totalSupply; + } + + /** + * @dev See {IERC20-balanceOf}. + */ + function balanceOf(address account) public view virtual override returns (uint256) { + return _balances[account]; + } + + /** + * @dev See {IERC20-transfer}. + * + * Requirements: + * + * - `recipient` cannot be the zero address. + * - the caller must have a balance of at least `amount`. + */ + function transfer(address recipient, uint256 amount) public virtual override returns (bool) { + _transfer(_msgSender(), recipient, amount); + return true; + } + + /** + * @dev See {IERC20-allowance}. + */ + function allowance(address owner, address spender) public view virtual override returns (uint256) { + return _allowances[owner][spender]; + } + + /** + * @dev See {IERC20-approve}. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function approve(address spender, uint256 amount) public virtual override returns (bool) { + _approve(_msgSender(), spender, amount); + return true; + } + + /** + * @dev See {IERC20-transferFrom}. + * + * Emits an {Approval} event indicating the updated allowance. This is not + * required by the EIP. See the note at the beginning of {ERC20}. + * + * Requirements: + * + * - `sender` and `recipient` cannot be the zero address. + * - `sender` must have a balance of at least `amount`. + * - the caller must have allowance for ``sender``'s tokens of at least + * `amount`. + */ + function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { + _transfer(sender, recipient, amount); + _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); + return true; + } + + /** + * @dev Atomically increases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { + _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); + return true; + } + + /** + * @dev Atomically decreases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + * - `spender` must have allowance for the caller of at least + * `subtractedValue`. + */ + function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { + _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); + return true; + } + + /** + * @dev Moves tokens `amount` from `sender` to `recipient`. + * + * This is internal function is equivalent to {transfer}, and can be used to + * e.g. implement automatic token fees, slashing mechanisms, etc. + * + * Emits a {Transfer} event. + * + * Requirements: + * + * - `sender` cannot be the zero address. + * - `recipient` cannot be the zero address. + * - `sender` must have a balance of at least `amount`. + */ + function _transfer(address sender, address recipient, uint256 amount) internal virtual { + require(sender != address(0), "ERC20: transfer from the zero address"); + require(recipient != address(0), "ERC20: transfer to the zero address"); + + _beforeTokenTransfer(sender, recipient, amount); + + _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); + _balances[recipient] = _balances[recipient].add(amount); + emit Transfer(sender, recipient, amount); + } + + /** @dev Creates `amount` tokens and assigns them to `account`, increasing + * the total supply. + * + * Emits a {Transfer} event with `from` set to the zero address. + * + * Requirements: + * + * - `to` cannot be the zero address. + */ + function _mint(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: mint to the zero address"); + + _beforeTokenTransfer(address(0), account, amount); + + _totalSupply = _totalSupply.add(amount); + _balances[account] = _balances[account].add(amount); + emit Transfer(address(0), account, amount); + } + + /** + * @dev Destroys `amount` tokens from `account`, reducing the + * total supply. + * + * Emits a {Transfer} event with `to` set to the zero address. + * + * Requirements: + * + * - `account` cannot be the zero address. + * - `account` must have at least `amount` tokens. + */ + function _burn(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: burn from the zero address"); + + _beforeTokenTransfer(account, address(0), amount); + + _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); + _totalSupply = _totalSupply.sub(amount); + emit Transfer(account, address(0), amount); + } + + /** + * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. + * + * This internal function is equivalent to `approve`, and can be used to + * e.g. set automatic allowances for certain subsystems, etc. + * + * Emits an {Approval} event. + * + * Requirements: + * + * - `owner` cannot be the zero address. + * - `spender` cannot be the zero address. + */ + function _approve(address owner, address spender, uint256 amount) internal virtual { + require(owner != address(0), "ERC20: approve from the zero address"); + require(spender != address(0), "ERC20: approve to the zero address"); + + _allowances[owner][spender] = amount; + emit Approval(owner, spender, amount); + } + + /** + * @dev Sets {decimals} to a value other than the default one of 18. + * + * WARNING: This function should only be called from the constructor. Most + * applications that interact with token contracts will not expect + * {decimals} to ever change, and may work incorrectly if it does. + */ + function _setupDecimals(uint8 decimals_) internal virtual { + _decimals = decimals_; + } + + /** + * @dev Hook that is called before any transfer of tokens. This includes + * minting and burning. + * + * Calling conditions: + * + * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens + * will be to transferred to `to`. + * - when `from` is zero, `amount` tokens will be minted for `to`. + * - when `to` is zero, `amount` of ``from``'s tokens will be burned. + * - `from` and `to` are never both zero. + * + * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. + */ + function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } +} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol new file mode 100644 index 0000000..9b877d1 --- /dev/null +++ b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +/** + * @dev Interface of the ERC20 standard as defined in the EIP. + */ +interface IERC20 { + /** + * @dev Returns the amount of tokens in existence. + */ + function totalSupply() external view returns (uint256); + + /** + * @dev Returns the amount of tokens owned by `account`. + */ + function balanceOf(address account) external view returns (uint256); + + /** + * @dev Moves `amount` tokens from the caller's account to `recipient`. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transfer(address recipient, uint256 amount) external returns (bool); + + /** + * @dev Returns the remaining number of tokens that `spender` will be + * allowed to spend on behalf of `owner` through {transferFrom}. This is + * zero by default. + * + * This value changes when {approve} or {transferFrom} are called. + */ + function allowance(address owner, address spender) external view returns (uint256); + + /** + * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * IMPORTANT: Beware that changing an allowance with this method brings the risk + * that someone may use both the old and the new allowance by unfortunate + * transaction ordering. One possible solution to mitigate this race + * condition is to first reduce the spender's allowance to 0 and set the + * desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + * Emits an {Approval} event. + */ + function approve(address spender, uint256 amount) external returns (bool); + + /** + * @dev Moves `amount` tokens from `sender` to `recipient` using the + * allowance mechanism. `amount` is then deducted from the caller's + * allowance. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); + + /** + * @dev Emitted when `value` tokens are moved from one account (`from`) to + * another (`to`). + * + * Note that `value` may be zero. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev Emitted when the allowance of a `spender` for an `owner` is set by + * a call to {approve}. `value` is the new allowance. + */ + event Approval(address indexed owner, address indexed spender, uint256 value); +} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Address.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Address.sol new file mode 100644 index 0000000..42a9dc1 --- /dev/null +++ b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Address.sol @@ -0,0 +1,189 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.2 <0.8.0; + +/** + * @dev Collection of functions related to the address type + */ +library Address { + /** + * @dev Returns true if `account` is a contract. + * + * [IMPORTANT] + * ==== + * It is unsafe to assume that an address for which this function returns + * false is an externally-owned account (EOA) and not a contract. + * + * Among others, `isContract` will return false for the following + * types of addresses: + * + * - an externally-owned account + * - a contract in construction + * - an address where a contract will be created + * - an address where a contract lived, but was destroyed + * ==== + */ + function isContract(address account) internal view returns (bool) { + // This method relies on extcodesize, which returns 0 for contracts in + // construction, since the code is only stored at the end of the + // constructor execution. + + uint256 size; + // solhint-disable-next-line no-inline-assembly + assembly { size := extcodesize(account) } + return size > 0; + } + + /** + * @dev Replacement for Solidity's `transfer`: sends `amount` wei to + * `recipient`, forwarding all available gas and reverting on errors. + * + * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost + * of certain opcodes, possibly making contracts go over the 2300 gas limit + * imposed by `transfer`, making them unable to receive funds via + * `transfer`. {sendValue} removes this limitation. + * + * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. + * + * IMPORTANT: because control is transferred to `recipient`, care must be + * taken to not create reentrancy vulnerabilities. Consider using + * {ReentrancyGuard} or the + * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. + */ + function sendValue(address payable recipient, uint256 amount) internal { + require(address(this).balance >= amount, "Address: insufficient balance"); + + // solhint-disable-next-line avoid-low-level-calls, avoid-call-value + (bool success, ) = recipient.call{ value: amount }(""); + require(success, "Address: unable to send value, recipient may have reverted"); + } + + /** + * @dev Performs a Solidity function call using a low level `call`. A + * plain`call` is an unsafe replacement for a function call: use this + * function instead. + * + * If `target` reverts with a revert reason, it is bubbled up by this + * function (like regular Solidity function calls). + * + * Returns the raw returned data. To convert to the expected return value, + * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. + * + * Requirements: + * + * - `target` must be a contract. + * - calling `target` with `data` must not revert. + * + * _Available since v3.1._ + */ + function functionCall(address target, bytes memory data) internal returns (bytes memory) { + return functionCall(target, data, "Address: low-level call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with + * `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but also transferring `value` wei to `target`. + * + * Requirements: + * + * - the calling contract must have an ETH balance of at least `value`. + * - the called Solidity function must be `payable`. + * + * _Available since v3.1._ + */ + function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { + return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); + } + + /** + * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but + * with `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { + require(address(this).balance >= value, "Address: insufficient balance for call"); + require(isContract(target), "Address: call to non-contract"); + + // solhint-disable-next-line avoid-low-level-calls + (bool success, bytes memory returndata) = target.call{ value: value }(data); + return _verifyCallResult(success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { + return functionStaticCall(target, data, "Address: low-level static call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { + require(isContract(target), "Address: static call to non-contract"); + + // solhint-disable-next-line avoid-low-level-calls + (bool success, bytes memory returndata) = target.staticcall(data); + return _verifyCallResult(success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a delegate call. + * + * _Available since v3.4._ + */ + function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { + return functionDelegateCall(target, data, "Address: low-level delegate call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a delegate call. + * + * _Available since v3.4._ + */ + function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { + require(isContract(target), "Address: delegate call to non-contract"); + + // solhint-disable-next-line avoid-low-level-calls + (bool success, bytes memory returndata) = target.delegatecall(data); + return _verifyCallResult(success, returndata, errorMessage); + } + + function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { + if (success) { + return returndata; + } else { + // Look for revert reason and bubble it up if present + if (returndata.length > 0) { + // The easiest way to bubble the revert reason is using memory via assembly + + // solhint-disable-next-line no-inline-assembly + assembly { + let returndata_size := mload(returndata) + revert(add(32, returndata), returndata_size) + } + } else { + revert(errorMessage); + } + } + } +} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Context.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Context.sol new file mode 100644 index 0000000..3d07c4a --- /dev/null +++ b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Context.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +/* + * @dev Provides information about the current execution context, including the + * sender of the transaction and its data. While these are generally available + * via msg.sender and msg.data, they should not be accessed in such a direct + * manner, since when dealing with GSN meta-transactions the account sending and + * paying for execution may not be the actual sender (as far as an application + * is concerned). + * + * This contract is only required for intermediate, library-like contracts. + */ +abstract contract Context { + function _msgSender() internal view virtual returns (address payable) { + return msg.sender; + } + + function _msgData() internal view virtual returns (bytes memory) { + this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 + return msg.data; + } +} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/EnumerableSet.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/EnumerableSet.sol new file mode 100644 index 0000000..858312d --- /dev/null +++ b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/EnumerableSet.sol @@ -0,0 +1,297 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +/** + * @dev Library for managing + * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive + * types. + * + * Sets have the following properties: + * + * - Elements are added, removed, and checked for existence in constant time + * (O(1)). + * - Elements are enumerated in O(n). No guarantees are made on the ordering. + * + * ``` + * contract Example { + * // Add the library methods + * using EnumerableSet for EnumerableSet.AddressSet; + * + * // Declare a set state variable + * EnumerableSet.AddressSet private mySet; + * } + * ``` + * + * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) + * and `uint256` (`UintSet`) are supported. + */ +library EnumerableSet { + // To implement this library for multiple types with as little code + // repetition as possible, we write it in terms of a generic Set type with + // bytes32 values. + // The Set implementation uses private functions, and user-facing + // implementations (such as AddressSet) are just wrappers around the + // underlying Set. + // This means that we can only create new EnumerableSets for types that fit + // in bytes32. + + struct Set { + // Storage of set values + bytes32[] _values; + + // Position of the value in the `values` array, plus 1 because index 0 + // means a value is not in the set. + mapping (bytes32 => uint256) _indexes; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function _add(Set storage set, bytes32 value) private returns (bool) { + if (!_contains(set, value)) { + set._values.push(value); + // The value is stored at length-1, but we add 1 to all indexes + // and use 0 as a sentinel value + set._indexes[value] = set._values.length; + return true; + } else { + return false; + } + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function _remove(Set storage set, bytes32 value) private returns (bool) { + // We read and store the value's index to prevent multiple reads from the same storage slot + uint256 valueIndex = set._indexes[value]; + + if (valueIndex != 0) { // Equivalent to contains(set, value) + // To delete an element from the _values array in O(1), we swap the element to delete with the last one in + // the array, and then remove the last element (sometimes called as 'swap and pop'). + // This modifies the order of the array, as noted in {at}. + + uint256 toDeleteIndex = valueIndex - 1; + uint256 lastIndex = set._values.length - 1; + + // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs + // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. + + bytes32 lastvalue = set._values[lastIndex]; + + // Move the last value to the index where the value to delete is + set._values[toDeleteIndex] = lastvalue; + // Update the index for the moved value + set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based + + // Delete the slot where the moved value was stored + set._values.pop(); + + // Delete the index for the deleted slot + delete set._indexes[value]; + + return true; + } else { + return false; + } + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function _contains(Set storage set, bytes32 value) private view returns (bool) { + return set._indexes[value] != 0; + } + + /** + * @dev Returns the number of values on the set. O(1). + */ + function _length(Set storage set) private view returns (uint256) { + return set._values.length; + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function _at(Set storage set, uint256 index) private view returns (bytes32) { + require(set._values.length > index, "EnumerableSet: index out of bounds"); + return set._values[index]; + } + + // Bytes32Set + + struct Bytes32Set { + Set _inner; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { + return _add(set._inner, value); + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { + return _remove(set._inner, value); + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { + return _contains(set._inner, value); + } + + /** + * @dev Returns the number of values in the set. O(1). + */ + function length(Bytes32Set storage set) internal view returns (uint256) { + return _length(set._inner); + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { + return _at(set._inner, index); + } + + // AddressSet + + struct AddressSet { + Set _inner; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function add(AddressSet storage set, address value) internal returns (bool) { + return _add(set._inner, bytes32(uint256(uint160(value)))); + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function remove(AddressSet storage set, address value) internal returns (bool) { + return _remove(set._inner, bytes32(uint256(uint160(value)))); + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function contains(AddressSet storage set, address value) internal view returns (bool) { + return _contains(set._inner, bytes32(uint256(uint160(value)))); + } + + /** + * @dev Returns the number of values in the set. O(1). + */ + function length(AddressSet storage set) internal view returns (uint256) { + return _length(set._inner); + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(AddressSet storage set, uint256 index) internal view returns (address) { + return address(uint160(uint256(_at(set._inner, index)))); + } + + + // UintSet + + struct UintSet { + Set _inner; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function add(UintSet storage set, uint256 value) internal returns (bool) { + return _add(set._inner, bytes32(value)); + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function remove(UintSet storage set, uint256 value) internal returns (bool) { + return _remove(set._inner, bytes32(value)); + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function contains(UintSet storage set, uint256 value) internal view returns (bool) { + return _contains(set._inner, bytes32(value)); + } + + /** + * @dev Returns the number of values on the set. O(1). + */ + function length(UintSet storage set) internal view returns (uint256) { + return _length(set._inner); + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(UintSet storage set, uint256 index) internal view returns (uint256) { + return uint256(_at(set._inner, index)); + } +} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/ReentrancyGuard.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/ReentrancyGuard.sol new file mode 100644 index 0000000..24c90c3 --- /dev/null +++ b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/ReentrancyGuard.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +/** + * @dev Contract module that helps prevent reentrant calls to a function. + * + * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier + * available, which can be applied to functions to make sure there are no nested + * (reentrant) calls to them. + * + * Note that because there is a single `nonReentrant` guard, functions marked as + * `nonReentrant` may not call one another. This can be worked around by making + * those functions `private`, and then adding `external` `nonReentrant` entry + * points to them. + * + * TIP: If you would like to learn more about reentrancy and alternative ways + * to protect against it, check out our blog post + * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. + */ +abstract contract ReentrancyGuard { + // Booleans are more expensive than uint256 or any type that takes up a full + // word because each write operation emits an extra SLOAD to first read the + // slot's contents, replace the bits taken up by the boolean, and then write + // back. This is the compiler's defense against contract upgrades and + // pointer aliasing, and it cannot be disabled. + + // The values being non-zero value makes deployment a bit more expensive, + // but in exchange the refund on every call to nonReentrant will be lower in + // amount. Since refunds are capped to a percentage of the total + // transaction's gas, it is best to keep them low in cases like this one, to + // increase the likelihood of the full refund coming into effect. + uint256 private constant _NOT_ENTERED = 1; + uint256 private constant _ENTERED = 2; + + uint256 private _status; + + constructor () internal { + _status = _NOT_ENTERED; + } + + /** + * @dev Prevents a contract from calling itself, directly or indirectly. + * Calling a `nonReentrant` function from another `nonReentrant` + * function is not supported. It is possible to prevent this from happening + * by making the `nonReentrant` function external, and make it call a + * `private` function that does the actual work. + */ + modifier nonReentrant() { + // On the first call to nonReentrant, _notEntered will be true + require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); + + // Any calls to nonReentrant after this point will fail + _status = _ENTERED; + + _; + + // By storing the original value once again, a refund is triggered (see + // https://eips.ethereum.org/EIPS/eip-2200) + _status = _NOT_ENTERED; + } +} diff --git a/package.json b/package.json index 7aa5ee5..38780a9 100644 --- a/package.json +++ b/package.json @@ -29,10 +29,7 @@ "script:oe:down": "cd optimism/ops && docker-compose down -v", "script:oe:clean": "cd optimism/ops && docker-compose down -v --remove-orphan --rmi all" }, - "dependencies": { - "@chainlink/contracts": "^0.1.6", - "@openzeppelin/contracts": "3.4.0" - }, + "dependencies": {}, "devDependencies": { "@chainlink/optimism-utils": "https://github.com/smartcontractkit/optimism-utils.git", "@eth-optimism/hardhat-ovm": "^0.1.1", diff --git a/yarn.lock b/yarn.lock index 72b0a7a..98eda49 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,14 +2,6 @@ # yarn lockfile v1 -"@chainlink/contracts@^0.1.6": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@chainlink/contracts/-/contracts-0.1.6.tgz#e4795565c723f99adaf6e97382cfb41dff0bcf91" - integrity sha512-RXKMm+3ADEi1c4/XsXy2Z1m0KQh7H6Nn0FWXmCgXRIorOBt7dvh52c0c41ONJfIhHB/tGeoXnp4lPnZEDqkocA== - optionalDependencies: - "@truffle/contract" "^4.2.29" - ethers "^4.0.45" - "@chainlink/optimism-utils@https://github.com/smartcontractkit/optimism-utils.git": version "0.0.1-alpha" resolved "https://github.com/smartcontractkit/optimism-utils.git#cb921b34f6ae85158d22bead38211840c8790543" @@ -678,11 +670,6 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-3.4.1.tgz#38dfdfa86fda0a088c6fcdebe6870cfaf897b471" integrity sha512-wBGlUzEkOxcj/ghtcF2yKc8ZYh+PTUtm1mK38zoENulJ6aplij7eH8quo3lMugfzPJy+V6V5qI8QhdQmCn7hkQ== -"@openzeppelin/contracts@3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.0.tgz#9a1669ad5f9fdfb6e273bb5a4fed10cb4cc35eb0" - integrity sha512-qh+EiHWzfY/9CORr+eRUkeEUP1WiFUcq3974bLHwyYzLBUtK6HPaMkIUHi74S1rDTZ0sNz42DwPc5A4IJvN3rg== - "@openzeppelin/contracts@^3.3.0": version "3.4.1" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.1.tgz#03c891fec7f93be0ae44ed74e57a122a38732ce7" @@ -815,88 +802,11 @@ dependencies: defer-to-connect "^1.0.1" -"@truffle/blockchain-utils@^0.0.28": - version "0.0.28" - resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.0.28.tgz#6e2c7695c013bcce89af0f05de88210a25f7344a" - integrity sha512-Q3vtGzDAGI3q2OQV1rUX/HYGJ0PB4RKbrgnwSV3YLc01YOkv4baF5ZJbMxtgLDhJQap1llrN59u2BOAa+jVCsg== - -"@truffle/codec@^0.10.2": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.10.2.tgz#b59746c91124b56370011ac1e1ac9a489b35b3eb" - integrity sha512-m396zHfF5ee8zv0O0SctVt0/FxGPv/x9pTm24BHlDz540S6wiWwarBb20QF4sXfJ7lwe6ZfwtyQHExuszCENlg== - dependencies: - big.js "^5.2.2" - bn.js "^5.1.3" - cbor "^5.1.0" - debug "^4.3.1" - lodash.clonedeep "^4.5.0" - lodash.escaperegexp "^4.1.2" - lodash.partition "^4.6.0" - lodash.sum "^4.0.2" - semver "^7.3.4" - utf8 "^3.0.0" - web3-utils "1.2.9" - -"@truffle/contract-schema@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.3.4.tgz#95f0265cac7de7bcaa0542f5fe671a7896011bfe" - integrity sha512-HzscBl/GhZBvPNQeD9l6ewSHSkvNmE+bA0iTVa0Y2mNf5GD5Y3fK2NPyfbOdtckOvLqebvYGEDEPRiXc3BZ05g== - dependencies: - ajv "^6.10.0" - crypto-js "^3.1.9-1" - debug "^4.3.1" - -"@truffle/contract@^4.2.29": - version "4.3.12" - resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.3.12.tgz#9c1fed962fae17a8fe1895c6e80314a00dc62cce" - integrity sha512-gnOkZe28k/pwPkl4Ke9mj7UwLHDr6nq1ZitZOhukXvq5mf6Ll9hsHhGCwlzKnxdwKHHUpJ/1saqp6OjXOiJYEw== - dependencies: - "@truffle/blockchain-utils" "^0.0.28" - "@truffle/contract-schema" "^3.3.4" - "@truffle/debug-utils" "^5.0.12" - "@truffle/error" "^0.0.12" - "@truffle/interface-adapter" "^0.4.20" - bignumber.js "^7.2.1" - ethereum-ens "^0.8.0" - ethers "^4.0.32" - web3 "1.2.9" - web3-core-helpers "1.2.9" - web3-core-promievent "1.2.9" - web3-eth-abi "1.2.9" - web3-utils "1.2.9" - -"@truffle/debug-utils@^5.0.12": - version "5.0.12" - resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-5.0.12.tgz#82ff52cef545ca8c0274292fb97d473253df1570" - integrity sha512-NkdSLjAvyylZAOJeywYHzCWHkrAm0kVPVkZZUtsej0wAvzqqL6FWV/jy9wKtpAv5hYhCQBU9BKrPdfdTnE6dYA== - dependencies: - "@truffle/codec" "^0.10.2" - "@trufflesuite/chromafi" "^2.2.2" - bn.js "^5.1.3" - chalk "^2.4.2" - debug "^4.3.1" - highlight.js "^10.4.0" - highlightjs-solidity "^1.0.21" - -"@truffle/error@^0.0.12": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.12.tgz#83e02e6ffe1d154fe274141d90038a91fd1e186d" - integrity sha512-kZqqnPR9YDJG7KCDOcN1qH16Qs0oz1PzF0Y93AWdhXuL9S9HYo/RUUeqGKbPpRBEZldQUS8aa4EzfK08u5pu6g== - "@truffle/error@^0.0.14": version "0.0.14" resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.14.tgz#59683b5407bede7bddf16d80dc5592f9c5e5fa05" integrity sha512-utJx+SZYoMqk8wldQG4gCVKhV8GwMJbWY7sLXFT/D8wWZTnE2peX7URFJh/cxkjTRCO328z1s2qewkhyVsu2HA== -"@truffle/interface-adapter@^0.4.20": - version "0.4.20" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.20.tgz#cf3f176e6fe14321bf164d502bf8d05e50209eb5" - integrity sha512-GcdtXjU+Mhx/WuD3Af1thojHilhUAWtKfoNF09oEDyGSrS0QEWq9s9kOFjrfTFJrK+g0I6VXMrU2sIido96NBA== - dependencies: - bn.js "^5.1.3" - ethers "^4.0.32" - web3 "1.2.9" - "@truffle/interface-adapter@^0.4.23": version "0.4.23" resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.23.tgz#9b474bb0455df1f02d72bf5a08f3d70b6fef875d" @@ -915,26 +825,6 @@ "@truffle/interface-adapter" "^0.4.23" web3 "1.3.5" -"@trufflesuite/chromafi@^2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@trufflesuite/chromafi/-/chromafi-2.2.2.tgz#d3fc507aa8504faffc50fb892cedcfe98ff57f77" - integrity sha512-mItQwVBsb8qP/vaYHQ1kDt2vJLhjoEXJptT6y6fJGvFophMFhOI/NsTVUa0nJL1nyMeFiS6hSYuNVdpQZzB1gA== - dependencies: - ansi-mark "^1.0.0" - ansi-regex "^3.0.0" - array-uniq "^1.0.3" - camelcase "^4.1.0" - chalk "^2.3.2" - cheerio "^1.0.0-rc.2" - detect-indent "^5.0.0" - he "^1.1.1" - highlight.js "^10.4.1" - lodash.merge "^4.6.2" - min-indent "^1.0.0" - strip-ansi "^4.0.0" - strip-indent "^2.0.0" - super-split "^1.1.0" - "@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" @@ -964,7 +854,7 @@ dependencies: "@types/node" "*" -"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4", "@types/bn.js@^4.11.5": +"@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== @@ -1051,12 +941,7 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.58.tgz#10682f6016fd866725c36d22ce6bbbd029bf4545" integrity sha512-Dn5RBxLohjdHFj17dVVw3rtrZAeXeWg+LQfvxDIW/fdPkSiuQk7h3frKMYtsQhtIW42wkErDcy9UMVxhGW4O7w== -"@types/node@^10.12.18": - version "10.17.56" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.56.tgz#010c9e047c3ff09ddcd11cbb6cf5912725cdc2b3" - integrity sha512-LuAa6t1t0Bfw4CuSR0UITsm1hP17YL+u82kfHGrHUWdhlBtH7sa7jGY5z7glGaIj/WDYDkRtgGd+KCjCzxBW1w== - -"@types/node@^12.12.6", "@types/node@^12.6.1": +"@types/node@^12.12.6": version "12.20.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.7.tgz#1cb61fd0c85cb87e728c43107b5fd82b69bc9ef8" integrity sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA== @@ -1249,7 +1134,7 @@ agent-base@6: dependencies: debug "4" -ajv@^6.10.0, ajv@^6.12.3: +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== @@ -1281,17 +1166,6 @@ ansi-escapes@^4.3.0: dependencies: type-fest "^0.21.3" -ansi-mark@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/ansi-mark/-/ansi-mark-1.0.4.tgz#1cd4ba8d57f15f109d6aaf6ec9ca9786c8a4ee6c" - integrity sha1-HNS6jVfxXxCdaq9uycqXhsik7mw= - dependencies: - ansi-regex "^3.0.0" - array-uniq "^1.0.3" - chalk "^2.3.2" - strip-ansi "^4.0.0" - super-split "^1.1.0" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1395,11 +1269,6 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -2068,17 +1937,7 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -bignumber.js@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" - integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== - -bignumber.js@^9.0.0, bignumber.js@^9.0.1: +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== @@ -2118,7 +1977,7 @@ blakejs@^1.1.0: resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= -bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.2: +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== @@ -2128,11 +1987,6 @@ bn.js@4.11.6: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= -bn.js@4.11.8: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== - bn.js@^4.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.4.0, bn.js@^4.8.0: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" @@ -2159,11 +2013,6 @@ body-parser@1.19.0, body-parser@^1.16.0: raw-body "2.4.0" type-is "~1.6.17" -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2389,11 +2238,6 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -2409,14 +2253,6 @@ caseless@^0.12.0, caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cbor@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== - dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" - chai@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" @@ -2440,7 +2276,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: +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== @@ -2466,30 +2302,6 @@ checkpoint-store@^1.1.0: dependencies: functional-red-black-tree "^1.0.1" -cheerio-select-tmp@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz#55bbef02a4771710195ad736d5e346763ca4e646" - integrity sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ== - dependencies: - css-select "^3.1.2" - css-what "^4.0.0" - domelementtype "^2.1.0" - domhandler "^4.0.0" - domutils "^2.4.4" - -cheerio@^1.0.0-rc.2: - version "1.0.0-rc.5" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.5.tgz#88907e1828674e8f9fee375188b27dadd4f0fa2f" - integrity sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw== - dependencies: - cheerio-select-tmp "^0.1.0" - dom-serializer "~1.2.0" - domhandler "^4.0.0" - entities "~2.1.0" - htmlparser2 "^6.0.0" - parse5 "^6.0.0" - parse5-htmlparser2-tree-adapter "^6.0.0" - chokidar@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" @@ -2872,27 +2684,6 @@ crypto-browserify@3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-js@^3.1.9-1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" - integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== - -css-select@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-3.1.2.tgz#d52cbdc6fee379fba97fb0d3925abbd18af2d9d8" - integrity sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA== - dependencies: - boolbase "^1.0.0" - css-what "^4.0.0" - domhandler "^4.0.0" - domutils "^2.4.3" - nth-check "^2.0.0" - -css-what@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233" - integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== - d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -2927,7 +2718,7 @@ debug@3.2.6: dependencies: ms "^2.1.1" -debug@4, debug@^4.1.1, debug@^4.3.1: +debug@4, debug@^4.1.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -3074,11 +2865,6 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - detect-port@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" @@ -3113,41 +2899,11 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dom-serializer@^1.0.1, dom-serializer@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" - integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - entities "^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== -domelementtype@^2.0.1, domelementtype@^2.1.0, domelementtype@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== - -domhandler@^4.0.0, domhandler@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.1.0.tgz#c1d8d494d5ec6db22de99e46a149c2a4d23ddd43" - integrity sha512-/6/kmsGlMY4Tup/nGVutdrK9yQi4YjWVcVeoQmixpzjOUK1U7pQkvAPHBJeUxOgxF0J8f8lwCJSlCfD0V4CMGQ== - dependencies: - domelementtype "^2.2.0" - -domutils@^2.4.3, domutils@^2.4.4: - version "2.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.5.1.tgz#9b8e84b5d9f788499ae77506ea832e9b4f9aa1c0" - integrity sha512-hO1XwHMGAthA/1KL7c83oip/6UWo3FlUNIuWiWKltoiQ5oCOiqths8KknvY2jpOohUoUgnwa/+Rm7UpwpSbY/Q== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.1.0" - dotenv@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" @@ -3275,16 +3031,6 @@ enquirer@^2.3.0: dependencies: ansi-colors "^4.1.1" -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" - integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== - env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -3426,7 +3172,7 @@ eth-block-tracker@^3.0.0: pify "^2.3.0" tape "^4.6.3" -eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.0, eth-ens-namehash@^2.0.8: +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= @@ -3484,16 +3230,7 @@ eth-json-rpc-middleware@^1.5.0: promise-to-callback "^1.0.0" tape "^4.6.3" -eth-lib@0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.7.tgz#2f93f17b1e23aec3759cd4a3fe20c1286a3fc1ca" - integrity sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco= - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - -eth-lib@0.2.8, eth-lib@^0.2.8: +eth-lib@0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== @@ -3616,18 +3353,6 @@ ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" -ethereum-ens@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/ethereum-ens/-/ethereum-ens-0.8.0.tgz#6d0f79acaa61fdbc87d2821779c4e550243d4c57" - integrity sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg== - dependencies: - bluebird "^3.4.7" - eth-ens-namehash "^2.0.0" - js-sha3 "^0.5.7" - pako "^1.0.4" - underscore "^1.8.3" - web3 "^1.0.0-beta.34" - ethereum-waffle@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.3.0.tgz#166a0cc1d3b2925f117b20ef0951b3fe72e38e79" @@ -3860,7 +3585,7 @@ ethereumjs-wallet@0.6.5: utf8 "^3.0.0" uuid "^3.3.2" -ethers@^4.0.32, ethers@^4.0.40, ethers@^4.0.45: +ethers@^4.0.32, ethers@^4.0.40: version "4.0.48" resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.48.tgz#330c65b8133e112b0613156e57e92d9009d8fbbe" integrity sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g== @@ -3968,21 +3693,11 @@ event-target-shim@^5.0.0: 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@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - eventemitter3@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - events@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -4862,7 +4577,7 @@ hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" -he@1.2.0, he@^1.1.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== @@ -4872,16 +4587,6 @@ heap@0.2.6: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= -highlight.js@^10.4.0, highlight.js@^10.4.1: - version "10.7.2" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.2.tgz#89319b861edc66c48854ed1e6da21ea89f847360" - integrity sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg== - -highlightjs-solidity@^1.0.21: - version "1.0.21" - resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-1.0.21.tgz#6d257215b5b635231d4d0c523f2c419bbff6fe42" - integrity sha512-ozOtTD986CBIxuIuauzz2lqCOTpd27TbfYm+msMtNSB69mJ0cdFNvZ6rOO5iFtEHtDkVYVEFQywXffG2sX3XTw== - hmac-drbg@^1.0.0, hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -4904,16 +4609,6 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== -htmlparser2@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.1.tgz#422521231ef6d42e56bd411da8ba40aa36e91446" - integrity sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.4.4" - entities "^2.0.0" - http-basic@^8.1.1: version "8.1.3" resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" @@ -5874,31 +5569,6 @@ lodash.assign@^4.0.3, lodash.assign@^4.0.6: resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.partition@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.partition/-/lodash.partition-4.6.0.tgz#a38e46b73469e0420b0da1212e66d414be364ba4" - integrity sha1-o45GtzRp4EILDaEhLmbUFL42S6Q= - -lodash.sum@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lodash.sum/-/lodash.sum-4.0.2.tgz#ad90e397965d803d4f1ff7aa5b2d0197f3b4637b" - integrity sha1-rZDjl5ZdgD1PH/eqWy0Bl/O0Y3s= - lodash.toarray@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" @@ -6206,11 +5876,6 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - 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" @@ -6472,11 +6137,6 @@ node-gyp-build@^4.2.0: 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== -nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== - nopt@3.x: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -6511,13 +6171,6 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -nth-check@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" - integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== - dependencies: - boolbase "^1.0.0" - 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" @@ -6770,11 +6423,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@^1.0.4: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - 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" @@ -6803,18 +6451,6 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5@^6.0.0, parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -8191,21 +7827,11 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - 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= -super-split@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/super-split/-/super-split-1.1.0.tgz#43b3ba719155f4d43891a32729d59b213d9155fc" - integrity sha512-I4bA5mgcb6Fw5UJ+EkpzqXfiuvVGS/7MuND+oBxNFmxu3ugLNrdIatzBLfhFRMVMLxgSsRy+TjIktgkF9RFSNQ== - supports-color@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" @@ -8630,11 +8256,6 @@ underscore@1.9.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== -underscore@^1.8.3: - version "1.12.1" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" - integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== - union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -8814,26 +8435,6 @@ web3-bzz@1.2.11: swarm-js "^0.1.40" underscore "1.9.1" -web3-bzz@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.9.tgz#25f8a373bc2dd019f47bf80523546f98b93c8790" - integrity sha512-ogVQr9jHodu9HobARtvUSmWG22cv2EUQzlPeejGWZ7j5h20HX40EDuWyomGY5VclIj5DdLY76Tmq88RTf/6nxA== - dependencies: - "@types/node" "^10.12.18" - got "9.6.0" - swarm-js "^0.1.40" - underscore "1.9.1" - -web3-bzz@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.4.tgz#9be529353c4063bc68395370cb5d8e414c6b6c87" - integrity sha512-DBRVQB8FAgoAtZCpp2GAGPCJjgBgsuwOKEasjV044AAZiONpXcKHbkO6G1SgItIixnrJsRJpoGLGw52Byr6FKw== - dependencies: - "@types/node" "^12.12.6" - got "9.6.0" - swarm-js "^0.1.40" - underscore "1.9.1" - web3-bzz@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.5.tgz#f181a1319d9f867f4183b147e7aebd21aecff4a0" @@ -8853,24 +8454,6 @@ web3-core-helpers@1.2.11: web3-eth-iban "1.2.11" web3-utils "1.2.11" -web3-core-helpers@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.9.tgz#6381077c3e01c127018cb9e9e3d1422697123315" - integrity sha512-t0WAG3orLCE3lqi77ZoSRNFok3VQWZXTniZigDQjyOJYMAX7BU3F3js8HKbjVnAxlX3tiKoDxI0KBk9F3AxYuw== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.2.9" - web3-utils "1.2.9" - -web3-core-helpers@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.4.tgz#b8549740bf24d5c71688d89c3cdd802d8d36b4e4" - integrity sha512-n7BqDalcTa1stncHMmrnFtyTgDhX5Fy+avNaHCf6qcOP2lwTQC8+mdHVBONWRJ6Yddvln+c8oY/TAaB6PzWK0A== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.3.4" - web3-utils "1.3.4" - web3-core-helpers@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.5.tgz#9f0ff7ed40befb9f691986e66fd94c828c7b1b13" @@ -8892,30 +8475,6 @@ web3-core-method@1.2.11: web3-core-subscriptions "1.2.11" web3-utils "1.2.11" -web3-core-method@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.9.tgz#3fb538751029bea570e4f86731e2fa5e4945e462" - integrity sha512-bjsIoqP3gs7A/gP8+QeLUCyOKJ8bopteCSNbCX36Pxk6TYfYWNuC6hP+2GzUuqdP3xaZNe+XEElQFUNpR3oyAg== - dependencies: - "@ethersproject/transactions" "^5.0.0-beta.135" - underscore "1.9.1" - web3-core-helpers "1.2.9" - web3-core-promievent "1.2.9" - web3-core-subscriptions "1.2.9" - web3-utils "1.2.9" - -web3-core-method@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.4.tgz#6c2812d96dd6c811b9e6c8a5d25050d2c22b9527" - integrity sha512-JxmQrujsAWYRRN77P/RY7XuZDCzxSiiQJrgX/60Lfyf7FF1Y0le4L/UMCi7vUJnuYkbU1Kfl9E0udnqwyPqlvQ== - dependencies: - "@ethersproject/transactions" "^5.0.0-beta.135" - underscore "1.9.1" - web3-core-helpers "1.3.4" - web3-core-promievent "1.3.4" - web3-core-subscriptions "1.3.4" - web3-utils "1.3.4" - web3-core-method@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.5.tgz#995fe12f3b364469e5208a88d72736327b231faa" @@ -8935,20 +8494,6 @@ web3-core-promievent@1.2.11: dependencies: eventemitter3 "4.0.4" -web3-core-promievent@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.9.tgz#bb1c56aa6fac2f4b3c598510f06554d25c11c553" - integrity sha512-0eAUA2zjgXTleSrnc1wdoKQPPIHU6KHf4fAscu4W9kKrR+mqP1KsjYrxY9wUyjNnXxfQ+5M29ipvbiaK8OqdOw== - dependencies: - eventemitter3 "3.1.2" - -web3-core-promievent@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.4.tgz#d166239012d91496cdcbe91d5d54071ea818bc73" - integrity sha512-V61dZIeBwogg6hhZZUt0qL9hTp1WDhnsdjP++9fhTDr4vy/Gz8T5vibqT2LLg6lQC8i+Py33yOpMeMNjztaUaw== - dependencies: - eventemitter3 "4.0.4" - web3-core-promievent@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.5.tgz#33c34811cc4e2987c56e5192f9a014368c42ca39" @@ -8967,29 +8512,6 @@ web3-core-requestmanager@1.2.11: web3-providers-ipc "1.2.11" web3-providers-ws "1.2.11" -web3-core-requestmanager@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.9.tgz#dd6d855256c4dd681434fe0867f8cd742fe10503" - integrity sha512-1PwKV2m46ALUnIN5VPPgjOj8yMLJhhqZYvYJE34hTN5SErOkwhzx5zScvo5MN7v7KyQGFnpVCZKKGCiEnDmtFA== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.9" - web3-providers-http "1.2.9" - web3-providers-ipc "1.2.9" - web3-providers-ws "1.2.9" - -web3-core-requestmanager@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.4.tgz#e105ced735c2b5fcedd5771e0ecf9879ae9c373f" - integrity sha512-xriouCrhVnVDYQ04TZXdEREZm0OOJzkSEsoN5bu4JYsA6e/HzROeU+RjDpMUxFMzN4wxmFZ+HWbpPndS3QwMag== - dependencies: - underscore "1.9.1" - util "^0.12.0" - web3-core-helpers "1.3.4" - web3-providers-http "1.3.4" - web3-providers-ipc "1.3.4" - web3-providers-ws "1.3.4" - web3-core-requestmanager@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.5.tgz#c452ea85fcffdf5b82b84c250707b638790d0e75" @@ -9011,24 +8533,6 @@ web3-core-subscriptions@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -web3-core-subscriptions@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.9.tgz#335fd7d15dfce5d78b4b7bef05ce4b3d7237b0e4" - integrity sha512-Y48TvXPSPxEM33OmXjGVDMzTd0j8X0t2+sDw66haeBS8eYnrEzasWuBZZXDq0zNUsqyxItgBGDn+cszkgEnFqg== - dependencies: - eventemitter3 "3.1.2" - underscore "1.9.1" - web3-core-helpers "1.2.9" - -web3-core-subscriptions@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.4.tgz#7b00e92bde21f792620cd02e6e508fcf4f4c31d3" - integrity sha512-drVHVDxh54hv7xmjIm44g4IXjfGj022fGw4/meB5R2D8UATFI40F73CdiBlyqk3DysP9njDOLTJFSQvEkLFUOg== - dependencies: - eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.4" - web3-core-subscriptions@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.5.tgz#7c4dc9d559e344d852de2cf01bd0cc13c94023cb" @@ -9051,32 +8555,6 @@ web3-core@1.2.11: web3-core-requestmanager "1.2.11" web3-utils "1.2.11" -web3-core@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.9.tgz#2cba57aa259b6409db532d21bdf57db8d504fd3e" - integrity sha512-fSYv21IP658Ty2wAuU9iqmW7V+75DOYMVZsDH/c14jcF/1VXnedOcxzxSj3vArsCvXZNe6XC5/wAuGZyQwR9RA== - dependencies: - "@types/bn.js" "^4.11.4" - "@types/node" "^12.6.1" - bignumber.js "^9.0.0" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-core-requestmanager "1.2.9" - web3-utils "1.2.9" - -web3-core@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.4.tgz#2cc7ba7f35cc167f7a0a46fd5855f86e51d34ce8" - integrity sha512-7OJu46RpCEfTerl+gPvHXANR2RkLqAfW7l2DAvQ7wN0pnCzl9nEfdgW6tMhr31k3TR2fWucwKzCyyxMGzMHeSA== - dependencies: - "@types/bn.js" "^4.11.5" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-core-requestmanager "1.3.4" - web3-utils "1.3.4" - web3-core@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.5.tgz#1e9335e6c4549dac09aaa07157242ebd6d097226" @@ -9099,24 +8577,6 @@ web3-eth-abi@1.2.11: underscore "1.9.1" web3-utils "1.2.11" -web3-eth-abi@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.9.tgz#14bedd7e4be04fcca35b2ac84af1400574cd8280" - integrity sha512-3YwUYbh/DMfDbhMWEebAdjSd5bj3ZQieOjLzWFHU23CaLEqT34sUix1lba+hgUH/EN6A7bKAuKOhR3p0OvTn7Q== - dependencies: - "@ethersproject/abi" "5.0.0-beta.153" - underscore "1.9.1" - web3-utils "1.2.9" - -web3-eth-abi@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.4.tgz#10f5d8b6080dbb6cbaa1bcef7e0c70573da6566f" - integrity sha512-PVSLXJ2dzdXsC+R24llIIEOS6S1KhG5qwNznJjJvXZFe3sqgdSe47eNvwUamZtCBjcrdR/HQr+L/FTxqJSf80Q== - dependencies: - "@ethersproject/abi" "5.0.7" - underscore "1.9.1" - web3-utils "1.3.4" - web3-eth-abi@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.5.tgz#eeffab0a4b318c47b8777de90983ca45614f8173" @@ -9143,40 +8603,6 @@ web3-eth-accounts@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-eth-accounts@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.9.tgz#7ec422df90fecb5243603ea49dc28726db7bdab6" - integrity sha512-jkbDCZoA1qv53mFcRHCinoCsgg8WH+M0YUO1awxmqWXRmCRws1wW0TsuSQ14UThih5Dxolgl+e+aGWxG58LMwg== - 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.9" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-utils "1.2.9" - -web3-eth-accounts@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.4.tgz#cf513d78531c13ce079a5e7862820570350e79a5" - integrity sha512-gz9ReSmQEjqbYAjpmAx+UZF4CVMbyS4pfjSYWGAnNNI+Xz0f0u0kCIYXQ1UEaE+YeLcYiE+ZlZdgg6YoatO5nA== - dependencies: - crypto-browserify "3.12.0" - eth-lib "0.2.8" - ethereumjs-common "^1.3.2" - ethereumjs-tx "^2.1.1" - scrypt-js "^3.0.1" - underscore "1.9.1" - uuid "3.3.2" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-utils "1.3.4" - web3-eth-accounts@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.5.tgz#c23ee748759a6a06d6485a9322b106baa944dcdd" @@ -9209,36 +8635,6 @@ web3-eth-contract@1.2.11: web3-eth-abi "1.2.11" web3-utils "1.2.11" -web3-eth-contract@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.9.tgz#713d9c6d502d8c8f22b696b7ffd8e254444e6bfd" - integrity sha512-PYMvJf7EG/HyssUZa+pXrc8IB06K/YFfWYyW4R7ed3sab+9wWUys1TlWxBCBuiBXOokSAyM6H6P6/cKEx8FT8Q== - dependencies: - "@types/bn.js" "^4.11.4" - underscore "1.9.1" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-core-promievent "1.2.9" - web3-core-subscriptions "1.2.9" - web3-eth-abi "1.2.9" - web3-utils "1.2.9" - -web3-eth-contract@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.4.tgz#1ea2dd71be0c4a9cf4772d4f75dbb2fa99751472" - integrity sha512-Fvy8ZxUksQY2ePt+XynFfOiSqxgQtMn4m2NJs6VXRl2Inl17qyRi/nIJJVKTcENLocm+GmZ/mxq2eOE5u02nPg== - dependencies: - "@types/bn.js" "^4.11.5" - underscore "1.9.1" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-core-promievent "1.3.4" - web3-core-subscriptions "1.3.4" - web3-eth-abi "1.3.4" - web3-utils "1.3.4" - web3-eth-contract@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.5.tgz#b41ecf8612b379c4fb1c614e950135717aa8f919" @@ -9269,36 +8665,6 @@ web3-eth-ens@1.2.11: web3-eth-contract "1.2.11" web3-utils "1.2.11" -web3-eth-ens@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.9.tgz#577b9358c036337833fb2bdc59c11be7f6f731b6" - integrity sha512-kG4+ZRgZ8I1WYyOBGI8QVRHfUSbbJjvJAGA1AF/NOW7JXQ+x7gBGeJw6taDWJhSshMoEKWcsgvsiuoG4870YxQ== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-promievent "1.2.9" - web3-eth-abi "1.2.9" - web3-eth-contract "1.2.9" - web3-utils "1.2.9" - -web3-eth-ens@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.4.tgz#a7e4bb18481fb0e2ce5bfb3b3da2fbb0ad78cefe" - integrity sha512-b0580tQyQwpV2wyacwQiBEfQmjCUln5iPhge3IBIMXaI43BUNtH3lsCL9ERFQeOdweB4o+6rYyNYr6xbRcSytg== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-promievent "1.3.4" - web3-eth-abi "1.3.4" - web3-eth-contract "1.3.4" - web3-utils "1.3.4" - web3-eth-ens@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.5.tgz#5a28d23eb402fb1f6964da60ea60641e4d24d366" @@ -9322,22 +8688,6 @@ web3-eth-iban@1.2.11: bn.js "^4.11.9" web3-utils "1.2.11" -web3-eth-iban@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.9.tgz#4ebf3d8783f34d04c4740dc18938556466399f7a" - integrity sha512-RtdVvJE0pyg9dHLy0GzDiqgnLnssSzfz/JYguhC1wsj9+Gnq1M6Diy3NixACWUAp6ty/zafyOaZnNQ+JuH9TjQ== - dependencies: - bn.js "4.11.8" - web3-utils "1.2.9" - -web3-eth-iban@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.4.tgz#5eb7a564e0dcf68730d68f48f95dd207cd173d81" - integrity sha512-Y7/hLjVvIN/OhaAyZ8L/hxbTqVX6AFTl2RwUXR6EEU9oaLydPcMjAx/Fr8mghUvQS3QJSr+UGubP3W4SkyNiYw== - dependencies: - bn.js "^4.11.9" - web3-utils "1.3.4" - web3-eth-iban@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.5.tgz#dff1e37864e23a3387016ec4db96cdc290a6fbd6" @@ -9358,30 +8708,6 @@ web3-eth-personal@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth-personal@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.9.tgz#9b95eb159b950b83cd8ae15873e1d57711b7a368" - integrity sha512-cFiNrktxZ1C/rIdJFzQTvFn3/0zcsR3a+Jf8Y3KxeQDHszQtosjLWptP7bsUmDwEh4hzh0Cy3KpOxlYBWB8bJQ== - dependencies: - "@types/node" "^12.6.1" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-net "1.2.9" - web3-utils "1.2.9" - -web3-eth-personal@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.4.tgz#0d0e0abea3447283d7ee5658ed312990c9bf48dd" - integrity sha512-JiTbaktYVk1j+S2EDooXAhw5j/VsdvZfKRmHtXUe/HizPM9ETXmj1+ne4RT6m+950jQ7DJwUF3XU1FKYNtEDwQ== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-net "1.3.4" - web3-utils "1.3.4" - web3-eth-personal@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.5.tgz#bc5d5b900bc4824139af2ef01eaf8e9855c644ba" @@ -9413,44 +8739,6 @@ web3-eth@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.9.tgz#e40e7b88baffc9b487193211c8b424dc944977b3" - integrity sha512-sIKO4iE9FEBa/CYUd6GdPd7GXt/wISqxUd8PlIld6+hvMJj02lgO7Z7p5T9mZIJcIZJGvZX81ogx8oJ9yif+Ag== - dependencies: - underscore "1.9.1" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-core-subscriptions "1.2.9" - web3-eth-abi "1.2.9" - web3-eth-accounts "1.2.9" - web3-eth-contract "1.2.9" - web3-eth-ens "1.2.9" - web3-eth-iban "1.2.9" - web3-eth-personal "1.2.9" - web3-net "1.2.9" - web3-utils "1.2.9" - -web3-eth@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.4.tgz#7c4607685e66a1c43e3e315e526c959f24f96907" - integrity sha512-8OIVMLbvmx+LB5RZ4tDhXuFGWSdNMrCZ4HM0+PywQ08uEcmAcqTMFAn4vdPii+J8gCatZR501r1KdzX3SDLoPw== - dependencies: - underscore "1.9.1" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-core-subscriptions "1.3.4" - web3-eth-abi "1.3.4" - web3-eth-accounts "1.3.4" - web3-eth-contract "1.3.4" - web3-eth-ens "1.3.4" - web3-eth-iban "1.3.4" - web3-eth-personal "1.3.4" - web3-net "1.3.4" - web3-utils "1.3.4" - web3-eth@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.5.tgz#2a3d0db870ef7921942a5d798ba0569175cc4de1" @@ -9479,24 +8767,6 @@ web3-net@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-net@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.9.tgz#51d248ed1bc5c37713c4ac40c0073d9beacd87d3" - integrity sha512-d2mTn8jPlg+SI2hTj2b32Qan6DmtU9ap/IUlJTeQbZQSkTLf0u9suW8Vjwyr4poJYXTurdSshE7OZsPNn30/ZA== - dependencies: - web3-core "1.2.9" - web3-core-method "1.2.9" - web3-utils "1.2.9" - -web3-net@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.4.tgz#d76158bf0b4a7b3b14352b4f95472db9efc57a2a" - integrity sha512-wVyqgVC3Zt/0uGnBiR3GpnsS8lvOFTDgWZMxAk9C6Guh8aJD9MUc7pbsw5rHrPUVe6S6RUfFJvh/Xq8oMIQgSw== - dependencies: - web3-core "1.3.4" - web3-core-method "1.3.4" - web3-utils "1.3.4" - web3-net@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.5.tgz#06e3465a9fbbeec1240160e2fd66ddb07b6af944" @@ -9540,22 +8810,6 @@ web3-providers-http@1.2.11: web3-core-helpers "1.2.11" xhr2-cookies "1.1.0" -web3-providers-http@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.9.tgz#e698aa5377e2019c24c5a1e6efa0f51018728934" - integrity sha512-F956tCIj60Ttr0UvEHWFIhx+be3He8msoPzyA44/kfzzYoMAsCFRn5cf0zQG6al0znE75g6HlWVSN6s3yAh51A== - dependencies: - web3-core-helpers "1.2.9" - xhr2-cookies "1.1.0" - -web3-providers-http@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.4.tgz#89389e18e27148faa2fef58842740ffadbdda8cc" - integrity sha512-aIg/xHXvxpqpFU70sqfp+JC3sGkLfAimRKTUhG4oJZ7U+tTcYTHoxBJj+4A3Id4JAoKiiv0k1/qeyQ8f3rMC3g== - dependencies: - web3-core-helpers "1.3.4" - xhr2-cookies "1.1.0" - web3-providers-http@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.5.tgz#cdada6fb342e08fd75aea249fceb6eee467beffc" @@ -9573,24 +8827,6 @@ web3-providers-ipc@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -web3-providers-ipc@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.9.tgz#6159eacfcd7ac31edc470d93ef10814fe874763b" - integrity sha512-NQ8QnBleoHA2qTJlqoWu7EJAD/FR5uimf7Ielzk4Z2z+m+6UAuJdJMSuQNj+Umhz9L/Ys6vpS1vHx9NizFl+aQ== - dependencies: - oboe "2.1.4" - underscore "1.9.1" - web3-core-helpers "1.2.9" - -web3-providers-ipc@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.4.tgz#b963518989b1b7847063cdd461ff73b83855834a" - integrity sha512-E0CvXEJElr/TIlG1YfJeO3Le5NI/4JZM+1SsEdiPIfBUAJN18oOoum138EBGKv5+YaLKZUtUuJSXWjIIOR/0Ig== - dependencies: - oboe "2.1.5" - underscore "1.9.1" - web3-core-helpers "1.3.4" - web3-providers-ipc@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.5.tgz#2f5536abfe03f3824e00dedc614d8f46db72b57f" @@ -9610,26 +8846,6 @@ web3-providers-ws@1.2.11: web3-core-helpers "1.2.11" websocket "^1.0.31" -web3-providers-ws@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.9.tgz#22c2006655ec44b4ad2b41acae62741a6ae7a88c" - integrity sha512-6+UpvINeI//dglZoAKStUXqxDOXJy6Iitv2z3dbgInG4zb8tkYl/VBDL80UjUg3ZvzWG0g7EKY2nRPEpON2TFA== - dependencies: - eventemitter3 "^4.0.0" - underscore "1.9.1" - web3-core-helpers "1.2.9" - websocket "^1.0.31" - -web3-providers-ws@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.4.tgz#b94c2e0ec51a0c472abdec53a472b5bf8176bec1" - integrity sha512-WBd9hk2fUAdrbA3kUyUk94ZeILtE6txLeoVVvIKAw2bPegx+RjkLyxC1Du0oceKgQ/qQWod8CCzl1E/GgTP+MQ== - dependencies: - eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.4" - websocket "^1.0.32" - web3-providers-ws@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.5.tgz#7f841ec79358d90c4a803d1291157b5ffb15aeb7" @@ -9650,26 +8866,6 @@ web3-shh@1.2.11: web3-core-subscriptions "1.2.11" web3-net "1.2.11" -web3-shh@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.9.tgz#c4ba70d6142cfd61341a50752d8cace9a0370911" - integrity sha512-PWa8b/EaxaMinFaxy6cV0i0EOi2M7a/ST+9k9nhyhCjVa2vzXuNoBNo2IUOmeZ0WP2UQB8ByJ2+p4htlJaDOjA== - dependencies: - web3-core "1.2.9" - web3-core-method "1.2.9" - web3-core-subscriptions "1.2.9" - web3-net "1.2.9" - -web3-shh@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.4.tgz#b7d29e118f26416c1a74575e585be379cc01a77a" - integrity sha512-zoeww5mxLh3xKcqbX85irQbtFe5pc5XwrgjvmdMkhkOdZzPASlWOgqzUFtaPykpLwC3yavVx4jG5RqifweXLUA== - dependencies: - web3-core "1.3.4" - web3-core-method "1.3.4" - web3-core-subscriptions "1.3.4" - web3-net "1.3.4" - web3-shh@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.5.tgz#af0b8ebca90a3652dbbb90d351395f36ca91f40b" @@ -9694,13 +8890,13 @@ web3-utils@1.2.11: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.9.tgz#abe11735221627da943971ef1a630868fb9c61f3" - integrity sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w== +web3-utils@1.3.5, web3-utils@^1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.5.tgz#14ee2ff1a7a226867698d6eaffd21aa97aed422e" + integrity sha512-5apMRm8ElYjI/92GHqijmaLC+s+d5lgjpjHft+rJSs/dsnX8I8tQreqev0dmU+wzU+2EEe4Sx9a/OwGWHhQv3A== dependencies: - bn.js "4.11.8" - eth-lib "0.2.7" + bn.js "^4.11.9" + eth-lib "0.2.8" ethereum-bloom-filters "^1.0.6" ethjs-unit "0.1.6" number-to-bn "1.7.0" @@ -9708,7 +8904,7 @@ web3-utils@1.2.9: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.3.4, web3-utils@^1.0.0-beta.31: +web3-utils@^1.0.0-beta.31: version "1.3.4" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.4.tgz#9b1aa30d7549f860b573e7bb7e690999e7192198" integrity sha512-/vC2v0MaZNpWooJfpRw63u0Y3ag2gNjAWiLtMSL6QQLmCqCy4SQIndMt/vRyx0uMoeGt1YTwSXEcHjUzOhLg0A== @@ -9722,20 +8918,6 @@ web3-utils@1.3.4, web3-utils@^1.0.0-beta.31: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.3.5, web3-utils@^1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.5.tgz#14ee2ff1a7a226867698d6eaffd21aa97aed422e" - integrity sha512-5apMRm8ElYjI/92GHqijmaLC+s+d5lgjpjHft+rJSs/dsnX8I8tQreqev0dmU+wzU+2EEe4Sx9a/OwGWHhQv3A== - dependencies: - bn.js "^4.11.9" - eth-lib "0.2.8" - ethereum-bloom-filters "^1.0.6" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - underscore "1.9.1" - utf8 "3.0.0" - web3@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.11.tgz#50f458b2e8b11aa37302071c170ed61cff332975" @@ -9749,19 +8931,6 @@ web3@1.2.11: web3-shh "1.2.11" web3-utils "1.2.11" -web3@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.9.tgz#cbcf1c0fba5e213a6dfb1f2c1f4b37062e4ce337" - integrity sha512-Mo5aBRm0JrcNpN/g4VOrDzudymfOnHRC3s2VarhYxRA8aWgF5rnhQ0ziySaugpic1gksbXPe105pUWyRqw8HUA== - dependencies: - web3-bzz "1.2.9" - web3-core "1.2.9" - web3-eth "1.2.9" - web3-eth-personal "1.2.9" - web3-net "1.2.9" - web3-shh "1.2.9" - web3-utils "1.2.9" - web3@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.5.tgz#ef4c3a2241fdd74f2f7794e839f30bc6f9814e46" @@ -9775,19 +8944,6 @@ web3@1.3.5: web3-shh "1.3.5" web3-utils "1.3.5" -web3@^1.0.0-beta.34: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.4.tgz#31e014873360aa5840eb17f9f171190c967cffb7" - integrity sha512-D6cMb2EtTMLHgdGbkTPGl/Qi7DAfczR+Lp7iFX3bcu/bsD9V8fZW69hA8v5cRPNGzXUwVQebk3bS17WKR4cD2w== - dependencies: - web3-bzz "1.3.4" - web3-core "1.3.4" - web3-eth "1.3.4" - web3-eth-personal "1.3.4" - web3-net "1.3.4" - web3-shh "1.3.4" - web3-utils "1.3.4" - websocket@1.0.32: version "1.0.32" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" From 27ecfdaee2adb702850e7ad336e11b6d43d09b0c Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Sun, 9 May 2021 22:46:14 +0200 Subject: [PATCH 08/21] Add CI network teardown step --- .github/workflows/main.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cfe510c..15d1804 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -32,6 +32,8 @@ jobs: - run: npm install -g yarn - run: yarn install - run: yarn setup - - name: Setup Optimism L2 local network + - name: Setup Optimism L2 network run: yarn script:oe:up - run: yarn test --network optimism + - name: Tear down Optimism L2 network + run: yarn script:oe:clean From 8731d538f1290ac6bf6bdcd6a5aa92ae8a8125d5 Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Mon, 10 May 2021 10:27:13 +0200 Subject: [PATCH 09/21] Replace OZ AccessControl with CL SimpleWriteAccessController --- .../v0.7/bridge/token/LinkTokenChild.sol | 30 +-- .../contracts/0.1.7/contracts/v0.6/Owned.sol | 3 +- .../v0.6/SimpleWriteAccessController.sol | 113 +++++++++ .../interfaces/AccessControllerInterface.sol | 7 + .../3.4.1/contracts/access/AccessControl.sol | 217 ------------------ test/v0.7/bridge/token/LinkTokenChild.test.ts | 161 +++++-------- 6 files changed, 192 insertions(+), 339 deletions(-) create mode 100644 contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/SimpleWriteAccessController.sol create mode 100644 contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/interfaces/AccessControllerInterface.sol delete mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/access/AccessControl.sol diff --git a/contracts/v0.7/bridge/token/LinkTokenChild.sol b/contracts/v0.7/bridge/token/LinkTokenChild.sol index 680e942..a78d15a 100644 --- a/contracts/v0.7/bridge/token/LinkTokenChild.sol +++ b/contracts/v0.7/bridge/token/LinkTokenChild.sol @@ -6,14 +6,11 @@ import { TypeAndVersionInterface } from "../../../v0.6/TypeAndVersionInterface.s import { IERC20Child } from "./IERC20Child.sol"; /* Contract Imports */ -import { AccessControl } from "../../../vendor/@openzeppelin/contracts/3.4.1/contracts/access/AccessControl.sol"; +import { SimpleWriteAccessController } from "../../../vendor/@chainlink/contracts/0.1.7/contracts/v0.6/SimpleWriteAccessController.sol"; import { LinkToken } from "../../../v0.6/LinkToken.sol"; /// @dev Access controlled mintable & burnable LinkToken, for use on sidechains and L2 networks. -contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, AccessControl, LinkToken { - // Using this role the bridge gateway can deposit/withdraw (mint/burn) - bytes32 public constant BRIDGE_GATEWAY_ROLE = keccak256("BRIDGE_GATEWAY_ROLE"); - +contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, SimpleWriteAccessController, LinkToken { /** * @dev Overrides parent contract so no tokens are minted on deployment. * @inheritdoc LinkToken @@ -21,9 +18,7 @@ contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, AccessControl, function _onCreate() internal override - { - _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); - } + {} /** * @notice versions: @@ -43,7 +38,7 @@ contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, AccessControl, } /** - * @dev Only callable by account with BRIDGE_GATEWAY_ROLE + * @dev Only callable by account with access (gateway role) * @inheritdoc IERC20Child */ function deposit( @@ -53,13 +48,13 @@ contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, AccessControl, external override virtual - onlyRole(BRIDGE_GATEWAY_ROLE) + checkAccess() { _mint(recipient, amount); } /** - * @dev Only callable by account with BRIDGE_GATEWAY_ROLE + * @dev Only callable by account with access (gateway role) * @inheritdoc IERC20Child */ function withdraw( @@ -68,19 +63,8 @@ contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, AccessControl, external override virtual - onlyRole(BRIDGE_GATEWAY_ROLE) + checkAccess() { _burn(_msgSender(), amount); } - - /** - * @dev Modifier to check access by role. - * @param role the required role - */ - modifier onlyRole( - bytes32 role - ) { - require(hasRole(role, _msgSender()), "LinkTokenChild: missing role"); - _; - } } diff --git a/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol b/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol index 10b0337..6cf043a 100644 --- a/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol +++ b/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol @@ -1,5 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.6.0; +// next-line updated from source +pragma solidity >0.6.0 <0.8.0; /** * @title The Owned contract diff --git a/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/SimpleWriteAccessController.sol b/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/SimpleWriteAccessController.sol new file mode 100644 index 0000000..a07d215 --- /dev/null +++ b/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/SimpleWriteAccessController.sol @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: MIT +// next-line updated from source +pragma solidity >0.6.0 <0.8.0; + +import "./Owned.sol"; +import "./interfaces/AccessControllerInterface.sol"; + +/** + * @title SimpleWriteAccessController + * @notice Gives access to accounts explicitly added to an access list by the + * controller's owner. + * @dev does not make any special permissions for externally, see + * SimpleReadAccessController for that. + */ +contract SimpleWriteAccessController is AccessControllerInterface, Owned { + + bool public checkEnabled; + mapping(address => bool) internal accessList; + + event AddedAccess(address user); + event RemovedAccess(address user); + event CheckAccessEnabled(); + event CheckAccessDisabled(); + + constructor() + public + { + checkEnabled = true; + } + + /** + * @notice Returns the access of an address + * @param _user The address to query + */ + function hasAccess( + address _user, + bytes memory + ) + public + view + virtual + override + returns (bool) + { + return accessList[_user] || !checkEnabled; + } + + /** + * @notice Adds an address to the access list + * @param _user The address to add + */ + function addAccess(address _user) + external + onlyOwner() + { + if (!accessList[_user]) { + accessList[_user] = true; + + emit AddedAccess(_user); + } + } + + /** + * @notice Removes an address from the access list + * @param _user The address to remove + */ + function removeAccess(address _user) + external + onlyOwner() + { + if (accessList[_user]) { + accessList[_user] = false; + + emit RemovedAccess(_user); + } + } + + /** + * @notice makes the access check enforced + */ + function enableAccessCheck() + external + onlyOwner() + { + if (!checkEnabled) { + checkEnabled = true; + + emit CheckAccessEnabled(); + } + } + + /** + * @notice makes the access check unenforced + */ + function disableAccessCheck() + external + onlyOwner() + { + if (checkEnabled) { + checkEnabled = false; + + emit CheckAccessDisabled(); + } + } + + /** + * @dev reverts if the caller does not have access + */ + modifier checkAccess() { + require(hasAccess(msg.sender, msg.data), "No access"); + _; + } +} diff --git a/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/interfaces/AccessControllerInterface.sol b/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/interfaces/AccessControllerInterface.sol new file mode 100644 index 0000000..5d6cd43 --- /dev/null +++ b/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/interfaces/AccessControllerInterface.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT +// next-line updated from source +pragma solidity >0.6.0 <0.8.0; + +interface AccessControllerInterface { + function hasAccess(address user, bytes calldata data) external view returns (bool); +} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/access/AccessControl.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/access/AccessControl.sol deleted file mode 100644 index de30822..0000000 --- a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/access/AccessControl.sol +++ /dev/null @@ -1,217 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.6.0 <0.8.0; - -import "../utils/EnumerableSet.sol"; -import "../utils/Address.sol"; -import "../utils/Context.sol"; - -/** - * @dev Contract module that allows children to implement role-based access - * control mechanisms. - * - * Roles are referred to by their `bytes32` identifier. These should be exposed - * in the external API and be unique. The best way to achieve this is by - * using `public constant` hash digests: - * - * ``` - * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); - * ``` - * - * Roles can be used to represent a set of permissions. To restrict access to a - * function call, use {hasRole}: - * - * ``` - * function foo() public { - * require(hasRole(MY_ROLE, msg.sender)); - * ... - * } - * ``` - * - * Roles can be granted and revoked dynamically via the {grantRole} and - * {revokeRole} functions. Each role has an associated admin role, and only - * accounts that have a role's admin role can call {grantRole} and {revokeRole}. - * - * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means - * that only accounts with this role will be able to grant or revoke other - * roles. More complex role relationships can be created by using - * {_setRoleAdmin}. - * - * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to - * grant and revoke this role. Extra precautions should be taken to secure - * accounts that have been granted it. - */ -abstract contract AccessControl is Context { - using EnumerableSet for EnumerableSet.AddressSet; - using Address for address; - - struct RoleData { - EnumerableSet.AddressSet members; - bytes32 adminRole; - } - - mapping (bytes32 => RoleData) private _roles; - - bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; - - /** - * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` - * - * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite - * {RoleAdminChanged} not being emitted signaling this. - * - * _Available since v3.1._ - */ - event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); - - /** - * @dev Emitted when `account` is granted `role`. - * - * `sender` is the account that originated the contract call, an admin role - * bearer except when using {_setupRole}. - */ - event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); - - /** - * @dev Emitted when `account` is revoked `role`. - * - * `sender` is the account that originated the contract call: - * - if using `revokeRole`, it is the admin role bearer - * - if using `renounceRole`, it is the role bearer (i.e. `account`) - */ - event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); - - /** - * @dev Returns `true` if `account` has been granted `role`. - */ - function hasRole(bytes32 role, address account) public view returns (bool) { - return _roles[role].members.contains(account); - } - - /** - * @dev Returns the number of accounts that have `role`. Can be used - * together with {getRoleMember} to enumerate all bearers of a role. - */ - function getRoleMemberCount(bytes32 role) public view returns (uint256) { - return _roles[role].members.length(); - } - - /** - * @dev Returns one of the accounts that have `role`. `index` must be a - * value between 0 and {getRoleMemberCount}, non-inclusive. - * - * Role bearers are not sorted in any particular way, and their ordering may - * change at any point. - * - * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure - * you perform all queries on the same block. See the following - * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] - * for more information. - */ - function getRoleMember(bytes32 role, uint256 index) public view returns (address) { - return _roles[role].members.at(index); - } - - /** - * @dev Returns the admin role that controls `role`. See {grantRole} and - * {revokeRole}. - * - * To change a role's admin, use {_setRoleAdmin}. - */ - function getRoleAdmin(bytes32 role) public view returns (bytes32) { - return _roles[role].adminRole; - } - - /** - * @dev Grants `role` to `account`. - * - * If `account` had not been already granted `role`, emits a {RoleGranted} - * event. - * - * Requirements: - * - * - the caller must have ``role``'s admin role. - */ - function grantRole(bytes32 role, address account) public virtual { - require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant"); - - _grantRole(role, account); - } - - /** - * @dev Revokes `role` from `account`. - * - * If `account` had been granted `role`, emits a {RoleRevoked} event. - * - * Requirements: - * - * - the caller must have ``role``'s admin role. - */ - function revokeRole(bytes32 role, address account) public virtual { - require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke"); - - _revokeRole(role, account); - } - - /** - * @dev Revokes `role` from the calling account. - * - * Roles are often managed via {grantRole} and {revokeRole}: this function's - * purpose is to provide a mechanism for accounts to lose their privileges - * if they are compromised (such as when a trusted device is misplaced). - * - * If the calling account had been granted `role`, emits a {RoleRevoked} - * event. - * - * Requirements: - * - * - the caller must be `account`. - */ - function renounceRole(bytes32 role, address account) public virtual { - require(account == _msgSender(), "AccessControl: can only renounce roles for self"); - - _revokeRole(role, account); - } - - /** - * @dev Grants `role` to `account`. - * - * If `account` had not been already granted `role`, emits a {RoleGranted} - * event. Note that unlike {grantRole}, this function doesn't perform any - * checks on the calling account. - * - * [WARNING] - * ==== - * This function should only be called from the constructor when setting - * up the initial roles for the system. - * - * Using this function in any other way is effectively circumventing the admin - * system imposed by {AccessControl}. - * ==== - */ - function _setupRole(bytes32 role, address account) internal virtual { - _grantRole(role, account); - } - - /** - * @dev Sets `adminRole` as ``role``'s admin role. - * - * Emits a {RoleAdminChanged} event. - */ - function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { - emit RoleAdminChanged(role, _roles[role].adminRole, adminRole); - _roles[role].adminRole = adminRole; - } - - function _grantRole(bytes32 role, address account) private { - if (_roles[role].members.add(account)) { - emit RoleGranted(role, account, _msgSender()); - } - } - - function _revokeRole(bytes32 role, address account) private { - if (_roles[role].members.remove(account)) { - emit RoleRevoked(role, account, _msgSender()); - } - } -} diff --git a/test/v0.7/bridge/token/LinkTokenChild.test.ts b/test/v0.7/bridge/token/LinkTokenChild.test.ts index d96758f..0e2c932 100644 --- a/test/v0.7/bridge/token/LinkTokenChild.test.ts +++ b/test/v0.7/bridge/token/LinkTokenChild.test.ts @@ -23,17 +23,11 @@ export class LinkTokenChildTest__factory { const initBalance: number = args[0] || '1000000000000000000000000000' const _deploy = async () => { // Deploy LinkTokenChild contract - const token = await getContractFactory( - 'LinkTokenChild', - this.signer, - Versions.v0_7, - Targets.EVM, - ).deploy() + const token = await getContractFactory('LinkTokenChild', this.signer, Versions.v0_7, Targets.EVM).deploy() - // Grant BRIDGE_GATEWAY_ROLE role + // Grant access (gateway role) const signerAddr = await this.signer.getAddress() - const gatewayRole = await token.BRIDGE_GATEWAY_ROLE() - await token.grantRole(gatewayRole, signerAddr) + await token.addAccess(signerAddr) // Deposit requested amount await token.deposit(signerAddr, initBalance) @@ -48,22 +42,23 @@ export class LinkTokenChildTest__factory { } } -const OZ_AccessControl_PUBLIC_ABI = ['BRIDGE_GATEWAY_ROLE', 'deposit', 'withdraw'] -const LinkTokenChild_PUBLIC_ABI = [ - 'DEFAULT_ADMIN_ROLE', - 'hasRole', - 'getRoleMemberCount', - 'getRoleMember', - 'getRoleAdmin', - 'grantRole', - 'revokeRole', - 'renounceRole', +const SimpleWriteAccessController_PUBLIC_ABI = [ + 'owner', + 'transferOwnership', + 'acceptOwnership', + 'checkEnabled', + 'hasAccess', + 'addAccess', + 'removeAccess', + 'enableAccessCheck', + 'disableAccessCheck', ] +const LinkTokenChild_PUBLIC_ABI = ['deposit', 'withdraw'] const EXTRA_PUBLIC_ABI = [ 'decreaseAllowance', 'increaseAllowance', 'typeAndVersion', - ...OZ_AccessControl_PUBLIC_ABI, + ...SimpleWriteAccessController_PUBLIC_ABI, ...LinkTokenChild_PUBLIC_ABI, ] @@ -84,42 +79,36 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { let l2Token: Contract beforeEach(async function () { - const [admin] = await ethers.getSigners() + const [owner] = await ethers.getSigners() // Deploy LinkTokenChild contract l2Token = await deploy( - getContractFactory('LinkTokenChild', admin, Versions.v0_7, Targets.EVM), + getContractFactory('LinkTokenChild', owner, Versions.v0_7, Targets.EVM), 'LinkTokenChild', ) }) - it('can NOT deposit without BRIDGE_GATEWAY_ROLE', async () => { - const [_admin, recipient] = await ethers.getSigners() - // Deposit fails without the BRIDGE_GATEWAY_ROLE + it('can NOT deposit without access (gateway role)', async () => { + const [_owner, recipient] = await ethers.getSigners() + // Deposit fails without access (gateway role) const depositTx = l2Token.connect(recipient).deposit(recipient.address, 100) - await expect(depositTx).to.be.revertedWith('LinkTokenChild: missing role') + await expect(depositTx).to.be.revertedWith('No access') }) - it('only admin can grant BRIDGE_GATEWAY_ROLE', async () => { - const [admin, fakeAdmin, gateway] = await ethers.getSigners() - // Get the required gateway role - const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() - // Fake admin fails - const grantRoleTx = l2Token.connect(fakeAdmin).grantRole(gatewayRole, gateway.address) - await expect(grantRoleTx).to.be.revertedWith( - 'AccessControl: sender must be an admin to grant', - ) - // Admin succeeds - await l2Token.connect(admin).grantRole(gatewayRole, gateway.address) + it('only owner can grant access (gateway role)', async () => { + const [owner, fakeOwner, gateway] = await ethers.getSigners() + // Fake owner fails + const addAccessTx = l2Token.connect(fakeOwner).addAccess(gateway.address) + await expect(addAccessTx).to.be.revertedWith('Only callable by owner') + // Owner succeeds + await l2Token.connect(owner).addAccess(gateway.address) }) - it('can deposit with BRIDGE_GATEWAY_ROLE', async () => { - const [_admin, gateway, recipient] = await ethers.getSigners() - // Grant the required gateway role - const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() - await l2Token.grantRole(gatewayRole, gateway.address) - // Admin deposit still fails + it('can deposit with access (gateway role)', async () => { + const [_owner, gateway, recipient] = await ethers.getSigners() + await l2Token.addAccess(gateway.address) + // Owner deposit still fails const depositTx = l2Token.deposit(recipient.address, 100) - await expect(depositTx).to.be.revertedWith('LinkTokenChild: missing role') + await expect(depositTx).to.be.revertedWith('No access') // Gateway deposit succeeds await l2Token.connect(gateway).deposit(recipient.address, 100) // Assert state @@ -127,12 +116,10 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { expect(await l2Token.totalSupply()).to.be.equal(100) }) - it('admin can give out multiple BRIDGE_GATEWAY_ROLE', async () => { + it('owner can give out multiple access (gateway role)', async () => { const [_, gateway1, gateway2, recipient] = await ethers.getSigners() - // Grant the required gateway role - const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() - await l2Token.grantRole(gatewayRole, gateway1.address) - await l2Token.grantRole(gatewayRole, gateway2.address) + await l2Token.addAccess(gateway1.address) + await l2Token.addAccess(gateway2.address) // Gateway deposit succeeds await l2Token.connect(gateway1).deposit(recipient.address, 100) await l2Token.connect(gateway2).deposit(recipient.address, 100) @@ -141,18 +128,16 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { expect(await l2Token.totalSupply()).to.be.equal(200) }) - it('admin can give out and revoke BRIDGE_GATEWAY_ROLE', async () => { + it('owner can give out and revoke access (gateway role)', async () => { const [_, gateway, recipient] = await ethers.getSigners() - // Grant the required gateway role - const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() - await l2Token.grantRole(gatewayRole, gateway.address) + await l2Token.addAccess(gateway.address) // Gateway deposit succeeds await l2Token.connect(gateway).deposit(recipient.address, 100) // Revoke gateway role - await l2Token.revokeRole(gatewayRole, gateway.address) + await l2Token.removeAccess(gateway.address) // Deposits now fail const depositTx = l2Token.connect(gateway).deposit(recipient.address, 100) - await expect(depositTx).to.be.revertedWith('LinkTokenChild: missing role') + await expect(depositTx).to.be.revertedWith('No access') // Assert state expect(await l2Token.balanceOf(recipient.address)).to.be.equal(100) expect(await l2Token.totalSupply()).to.be.equal(100) @@ -160,14 +145,12 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { it('only gateway can withdraw', async () => { const [_, gateway, recipient] = await ethers.getSigners() - // Grant the required gateway role - const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() - await l2Token.grantRole(gatewayRole, gateway.address) + await l2Token.addAccess(gateway.address) // Gateway deposit succeeds await l2Token.connect(gateway).deposit(recipient.address, 100) // Recipients direct withdraw fails const withdrawTx1 = l2Token.connect(recipient).withdraw(69) - await expect(withdrawTx1).to.be.revertedWith('LinkTokenChild: missing role') + await expect(withdrawTx1).to.be.revertedWith('No access') // Gateway can withdraw on behalf of the user await l2Token.connect(recipient).transfer(gateway.address, 69) await l2Token.connect(gateway).withdraw(69) @@ -179,18 +162,7 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { expect(await l2Token.totalSupply()).to.be.equal(31) }) - it('admin can renounce DEFAULT_ADMIN_ROLE', async () => { - const [admin, gateway] = await ethers.getSigners() - // Renounce the admin role - const adminRole = await l2Token.DEFAULT_ADMIN_ROLE() - await l2Token.renounceRole(adminRole, admin.address) - // Reverts on grantRole - const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() - const grantRoleTx = l2Token.grantRole(gatewayRole, gateway.address) - await expect(grantRoleTx).to.be.revertedWith( - 'AccessControl: sender must be an admin to grant', - ) - }) + // TODO: test 'owner can renounce ownership' }) }) @@ -217,51 +189,44 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { expect(totalSupply).to.equal('0') }) - it('can NOT deposit without BRIDGE_GATEWAY_ROLE', async () => { - const depositTx = await l2Token.deposit( - oe.l2Wallet.address, - 100, - h.optimism.TX_OVERRIDES_OE_BUG, - ) + it('can NOT deposit without access (gateway role)', async () => { + const depositTx = await l2Token.deposit(oe.l2Wallet.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) // TODO: fetch revert reason // revert: LinkTokenChild: missing role await h.txRevert(depositTx.wait()) }) - it('admin can migrate to a new gateway', async () => { - const admin = oe.l2Wallet + it('owner can migrate to a new gateway', async () => { + const owner = oe.l2Wallet const gateway = oe.l2Wallet // TODO: generate acc // Grant the required gateway role - const gatewayRole = await l2Token.BRIDGE_GATEWAY_ROLE() - const grantRoleTx1 = await l2Token.grantRole(gatewayRole, admin.address) - await grantRoleTx1.wait() - // Deposit some tokens as admin/gateway - const depositTx1 = await l2Token.deposit(admin.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) + const addAccessTx1 = await l2Token.addAccess(owner.address) + await addAccessTx1.wait() + // Deposit some tokens as owner/gateway + const depositTx1 = await l2Token.deposit(owner.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) await depositTx1.wait() // Assert state - expect(await l2Token.balanceOf(admin.address)).to.be.equal(100) + expect(await l2Token.balanceOf(owner.address)).to.be.equal(100) expect(await l2Token.totalSupply()).to.be.equal(100) - // Admin can withdraw directly as it has a gateway role + // Owner can withdraw directly as it has a gateway role const withdrawTx = await l2Token.withdraw(100) await withdrawTx.wait() // Assert state - expect(await l2Token.balanceOf(admin.address)).to.be.equal(0) + expect(await l2Token.balanceOf(owner.address)).to.be.equal(0) expect(await l2Token.totalSupply()).to.be.equal(0) // Grant role to a new gateway - const grantRoleTx2 = await l2Token.grantRole(gatewayRole, gateway.address) - await grantRoleTx2.wait() - // Revoke gateway role from admin - const revokeRoleTx = await l2Token.revokeRole(gatewayRole, admin.address) - await revokeRoleTx.wait() - // Admin deposit fails - const depositTx = await l2Token.deposit(admin.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) + const addAccessTx2 = await l2Token.addAccess(gateway.address) + await addAccessTx2.wait() + // Revoke gateway role from owner + const removeAccessTx = await l2Token.removeAccess(owner.address) + await removeAccessTx.wait() + // Owner deposit fails + const depositTx = await l2Token.deposit(owner.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) // TODO: fetch revert reason // revert: LinkTokenChild: missing role await h.txRevert(depositTx.wait()) - // Renounce the admin role - const adminRole = await l2Token.DEFAULT_ADMIN_ROLE() - const renounceRoleTx = await l2Token.renounceRole(adminRole, admin.address) - await renounceRoleTx.wait() + + // TODO: owner renounce ownership }) }) }) From 4413c43ebda57f9502f4f27897fd440fc328b147 Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Tue, 11 May 2021 12:07:11 +0200 Subject: [PATCH 10/21] Polish tests --- test/v0.7/bridge/token/LinkTokenChild.test.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/test/v0.7/bridge/token/LinkTokenChild.test.ts b/test/v0.7/bridge/token/LinkTokenChild.test.ts index 0e2c932..9f7cbf0 100644 --- a/test/v0.7/bridge/token/LinkTokenChild.test.ts +++ b/test/v0.7/bridge/token/LinkTokenChild.test.ts @@ -161,8 +161,6 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { expect(await l2Token.balanceOf(recipient.address)).to.be.equal(31) expect(await l2Token.totalSupply()).to.be.equal(31) }) - - // TODO: test 'owner can renounce ownership' }) }) @@ -189,10 +187,10 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { expect(totalSupply).to.equal('0') }) - it('can NOT deposit without access (gateway role)', async () => { + it('can NOT deposit without access (gateway role)', async () => { const depositTx = await l2Token.deposit(oe.l2Wallet.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) // TODO: fetch revert reason - // revert: LinkTokenChild: missing role + // revert: 'No access' await h.txRevert(depositTx.wait()) }) @@ -203,7 +201,7 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { const addAccessTx1 = await l2Token.addAccess(owner.address) await addAccessTx1.wait() // Deposit some tokens as owner/gateway - const depositTx1 = await l2Token.deposit(owner.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) + const depositTx1 = await l2Token.deposit(owner.address, 100) await depositTx1.wait() // Assert state expect(await l2Token.balanceOf(owner.address)).to.be.equal(100) @@ -223,10 +221,8 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { // Owner deposit fails const depositTx = await l2Token.deposit(owner.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) // TODO: fetch revert reason - // revert: LinkTokenChild: missing role + // revert: 'No access' await h.txRevert(depositTx.wait()) - - // TODO: owner renounce ownership }) }) }) From bf2e2f72bdcbb310ed7f6149e0626293673e718a Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Tue, 11 May 2021 19:02:36 +0200 Subject: [PATCH 11/21] Rename IERC20Child deposit/withdraw as mint/burn --- contracts/v0.7/bridge/token/IERC20Child.sol | 23 +++-- .../v0.7/bridge/token/LinkTokenChild.sol | 62 +++++++++++-- .../contracts/token/ERC20/ERC20Burnable.sol | 42 +++++++++ test/v0.7/bridge/token/LinkTokenChild.test.ts | 88 +++++++++---------- 4 files changed, 157 insertions(+), 58 deletions(-) create mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20Burnable.sol diff --git a/contracts/v0.7/bridge/token/IERC20Child.sol b/contracts/v0.7/bridge/token/IERC20Child.sol index 7015406..d9f023d 100644 --- a/contracts/v0.7/bridge/token/IERC20Child.sol +++ b/contracts/v0.7/bridge/token/IERC20Child.sol @@ -10,10 +10,10 @@ interface IERC20Child is IERC20 { * @notice called by bridge gateway when tokens are deposited on root chain * Should handle deposits by minting the required amount for the recipient * - * @param recipient an address for whom deposit is being done - * @param amount total amount to deposit/mint + * @param recipient an address for whom minting is being done + * @param amount total amount to mint */ - function deposit( + function mint( address recipient, uint256 amount ) @@ -23,9 +23,22 @@ interface IERC20Child is IERC20 { * @notice called by bridge gateway when tokens are withdrawn back to root chain * @dev Should burn recipient's tokens. * - * @param amount total amount to withdraw/burn + * @param amount total amount to burn */ - function withdraw( + function burn( + uint256 amount + ) + external; + + /** + * @notice called by bridge gateway when tokens are withdrawn back to root chain + * @dev Should burn recipient's tokens. Sender must have allowance for `accounts`'s tokens of at least `amount`. + * + * @param account an address for whom burning is being done + * @param amount total amount to burn + */ + function burnFrom( + address account, uint256 amount ) external; diff --git a/contracts/v0.7/bridge/token/LinkTokenChild.sol b/contracts/v0.7/bridge/token/LinkTokenChild.sol index a78d15a..c5fe72e 100644 --- a/contracts/v0.7/bridge/token/LinkTokenChild.sol +++ b/contracts/v0.7/bridge/token/LinkTokenChild.sol @@ -6,11 +6,13 @@ import { TypeAndVersionInterface } from "../../../v0.6/TypeAndVersionInterface.s import { IERC20Child } from "./IERC20Child.sol"; /* Contract Imports */ +import { ERC20 } from "../../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol"; +import { ERC20Burnable } from "../../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20Burnable.sol"; import { SimpleWriteAccessController } from "../../../vendor/@chainlink/contracts/0.1.7/contracts/v0.6/SimpleWriteAccessController.sol"; import { LinkToken } from "../../../v0.6/LinkToken.sol"; /// @dev Access controlled mintable & burnable LinkToken, for use on sidechains and L2 networks. -contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, SimpleWriteAccessController, LinkToken { +contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, SimpleWriteAccessController, ERC20Burnable, LinkToken { /** * @dev Overrides parent contract so no tokens are minted on deployment. * @inheritdoc LinkToken @@ -30,7 +32,7 @@ contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, SimpleWriteAcce function typeAndVersion() external pure - override(LinkToken, TypeAndVersionInterface) + override(TypeAndVersionInterface, LinkToken) virtual returns (string memory) { @@ -41,11 +43,11 @@ contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, SimpleWriteAcce * @dev Only callable by account with access (gateway role) * @inheritdoc IERC20Child */ - function deposit( + function mint( address recipient, uint256 amount ) - external + public override virtual checkAccess() @@ -55,16 +57,58 @@ contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, SimpleWriteAcce /** * @dev Only callable by account with access (gateway role) - * @inheritdoc IERC20Child + * @inheritdoc ERC20Burnable */ - function withdraw( + function burn( uint256 amount ) - external - override + public + override(IERC20Child, ERC20Burnable) virtual checkAccess() { - _burn(_msgSender(), amount); + super.burn(amount); + } + + /** + * @dev Only callable by account with access (gateway role) + * @inheritdoc ERC20Burnable + */ + function burnFrom( + address account, + uint256 amount + ) + public + override(IERC20Child, ERC20Burnable) + virtual + checkAccess() + { + super.burnFrom(account, amount); + } + + /// @inheritdoc LinkToken + function _transfer( + address sender, + address recipient, + uint256 amount + ) + internal + override(ERC20, LinkToken) + virtual + { + super._transfer(sender, recipient, amount); + } + + /// @inheritdoc LinkToken + function _approve( + address owner, + address spender, + uint256 amount + ) + internal + override(ERC20, LinkToken) + virtual + { + super._approve(owner, spender, amount); } } diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20Burnable.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20Burnable.sol new file mode 100644 index 0000000..5c14bed --- /dev/null +++ b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20Burnable.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +import "../../utils/Context.sol"; +import "./ERC20.sol"; + +/** + * @dev Extension of {ERC20} that allows token holders to destroy both their own + * tokens and those that they have an allowance for, in a way that can be + * recognized off-chain (via event analysis). + */ +abstract contract ERC20Burnable is Context, ERC20 { + using SafeMath for uint256; + + /** + * @dev Destroys `amount` tokens from the caller. + * + * See {ERC20-_burn}. + */ + function burn(uint256 amount) public virtual { + _burn(_msgSender(), amount); + } + + /** + * @dev Destroys `amount` tokens from `account`, deducting from the caller's + * allowance. + * + * See {ERC20-_burn} and {ERC20-allowance}. + * + * Requirements: + * + * - the caller must have allowance for ``accounts``'s tokens of at least + * `amount`. + */ + function burnFrom(address account, uint256 amount) public virtual { + uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "ERC20: burn amount exceeds allowance"); + + _approve(account, _msgSender(), decreasedAllowance); + _burn(account, amount); + } +} diff --git a/test/v0.7/bridge/token/LinkTokenChild.test.ts b/test/v0.7/bridge/token/LinkTokenChild.test.ts index 9f7cbf0..0a4a28f 100644 --- a/test/v0.7/bridge/token/LinkTokenChild.test.ts +++ b/test/v0.7/bridge/token/LinkTokenChild.test.ts @@ -29,8 +29,8 @@ export class LinkTokenChildTest__factory { const signerAddr = await this.signer.getAddress() await token.addAccess(signerAddr) - // Deposit requested amount - await token.deposit(signerAddr, initBalance) + // Mint requested amount + await token.mint(signerAddr, initBalance) return token } @@ -53,7 +53,7 @@ const SimpleWriteAccessController_PUBLIC_ABI = [ 'enableAccessCheck', 'disableAccessCheck', ] -const LinkTokenChild_PUBLIC_ABI = ['deposit', 'withdraw'] +const LinkTokenChild_PUBLIC_ABI = ['mint', 'burn', 'burnFrom'] const EXTRA_PUBLIC_ABI = [ 'decreaseAllowance', 'increaseAllowance', @@ -87,11 +87,11 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { ) }) - it('can NOT deposit without access (gateway role)', async () => { + it('can NOT mint without access (gateway role)', async () => { const [_owner, recipient] = await ethers.getSigners() - // Deposit fails without access (gateway role) - const depositTx = l2Token.connect(recipient).deposit(recipient.address, 100) - await expect(depositTx).to.be.revertedWith('No access') + // Mint fails without access (gateway role) + const mintTx = l2Token.connect(recipient).mint(recipient.address, 100) + await expect(mintTx).to.be.revertedWith('No access') }) it('only owner can grant access (gateway role)', async () => { @@ -103,14 +103,14 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { await l2Token.connect(owner).addAccess(gateway.address) }) - it('can deposit with access (gateway role)', async () => { + it('can mint with access (gateway role)', async () => { const [_owner, gateway, recipient] = await ethers.getSigners() await l2Token.addAccess(gateway.address) - // Owner deposit still fails - const depositTx = l2Token.deposit(recipient.address, 100) - await expect(depositTx).to.be.revertedWith('No access') - // Gateway deposit succeeds - await l2Token.connect(gateway).deposit(recipient.address, 100) + // Owner mint still fails + const mintTx = l2Token.mint(recipient.address, 100) + await expect(mintTx).to.be.revertedWith('No access') + // Gateway mint succeeds + await l2Token.connect(gateway).mint(recipient.address, 100) // Assert state expect(await l2Token.balanceOf(recipient.address)).to.be.equal(100) expect(await l2Token.totalSupply()).to.be.equal(100) @@ -120,9 +120,9 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { const [_, gateway1, gateway2, recipient] = await ethers.getSigners() await l2Token.addAccess(gateway1.address) await l2Token.addAccess(gateway2.address) - // Gateway deposit succeeds - await l2Token.connect(gateway1).deposit(recipient.address, 100) - await l2Token.connect(gateway2).deposit(recipient.address, 100) + // Gateway mint succeeds + await l2Token.connect(gateway1).mint(recipient.address, 100) + await l2Token.connect(gateway2).mint(recipient.address, 100) // Assert state expect(await l2Token.balanceOf(recipient.address)).to.be.equal(200) expect(await l2Token.totalSupply()).to.be.equal(200) @@ -131,32 +131,32 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { it('owner can give out and revoke access (gateway role)', async () => { const [_, gateway, recipient] = await ethers.getSigners() await l2Token.addAccess(gateway.address) - // Gateway deposit succeeds - await l2Token.connect(gateway).deposit(recipient.address, 100) + // Gateway mint succeeds + await l2Token.connect(gateway).mint(recipient.address, 100) // Revoke gateway role await l2Token.removeAccess(gateway.address) - // Deposits now fail - const depositTx = l2Token.connect(gateway).deposit(recipient.address, 100) - await expect(depositTx).to.be.revertedWith('No access') + // Mint now fail + const mintTx = l2Token.connect(gateway).mint(recipient.address, 100) + await expect(mintTx).to.be.revertedWith('No access') // Assert state expect(await l2Token.balanceOf(recipient.address)).to.be.equal(100) expect(await l2Token.totalSupply()).to.be.equal(100) }) - it('only gateway can withdraw', async () => { + it('only gateway can burn', async () => { const [_, gateway, recipient] = await ethers.getSigners() await l2Token.addAccess(gateway.address) - // Gateway deposit succeeds - await l2Token.connect(gateway).deposit(recipient.address, 100) - // Recipients direct withdraw fails - const withdrawTx1 = l2Token.connect(recipient).withdraw(69) - await expect(withdrawTx1).to.be.revertedWith('No access') - // Gateway can withdraw on behalf of the user + // Gateway mint succeeds + await l2Token.connect(gateway).mint(recipient.address, 100) + // Recipients direct burn fails + const burnTx1 = l2Token.connect(recipient).burn(69) + await expect(burnTx1).to.be.revertedWith('No access') + // Gateway can burn on behalf of the user await l2Token.connect(recipient).transfer(gateway.address, 69) - await l2Token.connect(gateway).withdraw(69) - // Gateway can NOT withdraw more - const withdrawTx3 = l2Token.connect(gateway).withdraw(10) - await expect(withdrawTx3).to.be.revertedWith('ERC20: burn amount exceeds balance') + await l2Token.connect(gateway).burn(69) + // Gateway can NOT burn more + const burnTx3 = l2Token.connect(gateway).burn(10) + await expect(burnTx3).to.be.revertedWith('ERC20: burn amount exceeds balance') // Assert state expect(await l2Token.balanceOf(recipient.address)).to.be.equal(31) expect(await l2Token.totalSupply()).to.be.equal(31) @@ -187,11 +187,11 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { expect(totalSupply).to.equal('0') }) - it('can NOT deposit without access (gateway role)', async () => { - const depositTx = await l2Token.deposit(oe.l2Wallet.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) + it('can NOT mint without access (gateway role)', async () => { + const mintTx = await l2Token.mint(oe.l2Wallet.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) // TODO: fetch revert reason // revert: 'No access' - await h.txRevert(depositTx.wait()) + await h.txRevert(mintTx.wait()) }) it('owner can migrate to a new gateway', async () => { @@ -200,15 +200,15 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { // Grant the required gateway role const addAccessTx1 = await l2Token.addAccess(owner.address) await addAccessTx1.wait() - // Deposit some tokens as owner/gateway - const depositTx1 = await l2Token.deposit(owner.address, 100) - await depositTx1.wait() + // Mint some tokens as owner/gateway + const mintTx1 = await l2Token.mint(owner.address, 100) + await mintTx1.wait() // Assert state expect(await l2Token.balanceOf(owner.address)).to.be.equal(100) expect(await l2Token.totalSupply()).to.be.equal(100) - // Owner can withdraw directly as it has a gateway role - const withdrawTx = await l2Token.withdraw(100) - await withdrawTx.wait() + // Owner can burn directly as it has a gateway role + const burnTx = await l2Token.burn(100) + await burnTx.wait() // Assert state expect(await l2Token.balanceOf(owner.address)).to.be.equal(0) expect(await l2Token.totalSupply()).to.be.equal(0) @@ -218,11 +218,11 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { // Revoke gateway role from owner const removeAccessTx = await l2Token.removeAccess(owner.address) await removeAccessTx.wait() - // Owner deposit fails - const depositTx = await l2Token.deposit(owner.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) + // Owner mint fails + const mintTx = await l2Token.mint(owner.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) // TODO: fetch revert reason // revert: 'No access' - await h.txRevert(depositTx.wait()) + await h.txRevert(mintTx.wait()) }) }) }) From 0c557ccbf268278e7a6a39330293e00223bf27e7 Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Tue, 11 May 2021 22:25:47 +0200 Subject: [PATCH 12/21] Use submodules for vendor contracts --- .github/workflows/main.yml | 4 + .gitmodules | 6 + contracts/v0.6/ERC677Token.sol | 2 +- contracts/v0.6/PegSwap.sol | 8 +- contracts/v0.6/mocks/LinkReceiver.sol | 2 +- contracts/v0.6/mocks/StandardTokenMock.sol | 2 +- contracts/v0.6/mocks/Token677.sol | 2 +- contracts/v0.6/token/ERC677.sol | 2 +- contracts/v0.6/token/LinkERC20.sol | 2 +- contracts/v0.7/bridge/token/IERC20Child.sol | 2 +- .../v0.7/bridge/token/LinkTokenChild.sol | 6 +- .../@chainlink/contracts/0.1.7/commit.info | 1 - .../contracts/0.1.7/contracts/v0.6/Owned.sol | 63 ---- .../v0.6/SimpleWriteAccessController.sol | 113 ------- .../interfaces/AccessControllerInterface.sol | 7 - .../@openzeppelin/contracts/3.4.1/commit.info | 1 - .../3.4.1/contracts/math/SafeMath.sol | 214 ------------ .../3.4.1/contracts/token/ERC20/ERC20.sol | 306 ------------------ .../contracts/token/ERC20/ERC20Burnable.sol | 42 --- .../3.4.1/contracts/token/ERC20/IERC20.sol | 77 ----- .../3.4.1/contracts/utils/Address.sol | 189 ----------- .../3.4.1/contracts/utils/Context.sol | 24 -- .../3.4.1/contracts/utils/EnumerableSet.sol | 297 ----------------- .../3.4.1/contracts/utils/ReentrancyGuard.sol | 62 ---- vendor/OpenZeppelin/openzeppelin-contracts | 1 + vendor/smartcontractkit/chainlink | 1 + 26 files changed, 26 insertions(+), 1410 deletions(-) create mode 100644 .gitmodules delete mode 100644 contracts/vendor/@chainlink/contracts/0.1.7/commit.info delete mode 100644 contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol delete mode 100644 contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/SimpleWriteAccessController.sol delete mode 100644 contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/interfaces/AccessControllerInterface.sol delete mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/commit.info delete mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/math/SafeMath.sol delete mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol delete mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20Burnable.sol delete mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol delete mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Address.sol delete mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Context.sol delete mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/EnumerableSet.sol delete mode 100644 contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/ReentrancyGuard.sol create mode 160000 vendor/OpenZeppelin/openzeppelin-contracts create mode 160000 vendor/smartcontractkit/chainlink diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 15d1804..ce85430 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,6 +12,8 @@ jobs: runs-on: [self-hosted] steps: - uses: actions/checkout@v2 + with: + submodules: recursive - uses: actions/setup-node@v2 with: node-version: '14.x' @@ -26,6 +28,8 @@ jobs: runs-on: [self-hosted] steps: - uses: actions/checkout@v2 + with: + submodules: recursive - uses: actions/setup-node@v2 with: node-version: '14.x' diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..1e44b5d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "vendor/smartcontractkit/chainlink"] + path = vendor/smartcontractkit/chainlink + url = git@github.com:smartcontractkit/chainlink.git +[submodule "vendor/OpenZeppelin/openzeppelin-contracts"] + path = vendor/OpenZeppelin/openzeppelin-contracts + url = git@github.com:OpenZeppelin/openzeppelin-contracts.git diff --git a/contracts/v0.6/ERC677Token.sol b/contracts/v0.6/ERC677Token.sol index ce7e66b..83e979e 100644 --- a/contracts/v0.6/ERC677Token.sol +++ b/contracts/v0.6/ERC677Token.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -import "../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol"; +import "../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; import "./token/ERC677.sol"; import "./token/ERC677Receiver.sol"; diff --git a/contracts/v0.6/PegSwap.sol b/contracts/v0.6/PegSwap.sol index 9e448bf..7b55cbc 100644 --- a/contracts/v0.6/PegSwap.sol +++ b/contracts/v0.6/PegSwap.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; -import "../vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol"; -import "../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol"; -import "../vendor/@openzeppelin/contracts/3.4.1/contracts/utils/ReentrancyGuard.sol"; -import "../vendor/@openzeppelin/contracts/3.4.1/contracts/math/SafeMath.sol"; +import "../../vendor/smartcontractkit/chainlink/evm-contracts/src/v0.6/Owned.sol"; +import "../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; +import "../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol"; +import "../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/math/SafeMath.sol"; import "./token/ERC677Receiver.sol"; import "./TypeAndVersionInterface.sol"; diff --git a/contracts/v0.6/mocks/LinkReceiver.sol b/contracts/v0.6/mocks/LinkReceiver.sol index 7bdf835..1a98855 100644 --- a/contracts/v0.6/mocks/LinkReceiver.sol +++ b/contracts/v0.6/mocks/LinkReceiver.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -import "../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol"; +import "../../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; contract LinkReceiver { bool public fallbackCalled; diff --git a/contracts/v0.6/mocks/StandardTokenMock.sol b/contracts/v0.6/mocks/StandardTokenMock.sol index bbb6405..9051da6 100644 --- a/contracts/v0.6/mocks/StandardTokenMock.sol +++ b/contracts/v0.6/mocks/StandardTokenMock.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -import "../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol"; +import "../../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; import "../token/LinkERC20.sol"; contract StandardTokenMock is ERC20, LinkERC20 { diff --git a/contracts/v0.6/mocks/Token677.sol b/contracts/v0.6/mocks/Token677.sol index 8cf3802..0f9de08 100644 --- a/contracts/v0.6/mocks/Token677.sol +++ b/contracts/v0.6/mocks/Token677.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -import "../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol"; +import "../../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; import "../ERC677Token.sol"; contract Token677 is ERC20, ERC677Token { diff --git a/contracts/v0.6/token/ERC677.sol b/contracts/v0.6/token/ERC677.sol index 18d5340..d4b4b30 100644 --- a/contracts/v0.6/token/ERC677.sol +++ b/contracts/v0.6/token/ERC677.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -import "../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol"; +import "../../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; interface ERC677 is IERC20 { function transferAndCall( diff --git a/contracts/v0.6/token/LinkERC20.sol b/contracts/v0.6/token/LinkERC20.sol index 066e198..f6b74a2 100644 --- a/contracts/v0.6/token/LinkERC20.sol +++ b/contracts/v0.6/token/LinkERC20.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -import "../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol"; +import "../../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; abstract contract LinkERC20 is ERC20 { /** diff --git a/contracts/v0.7/bridge/token/IERC20Child.sol b/contracts/v0.7/bridge/token/IERC20Child.sol index d9f023d..2644dc5 100644 --- a/contracts/v0.7/bridge/token/IERC20Child.sol +++ b/contracts/v0.7/bridge/token/IERC20Child.sol @@ -2,7 +2,7 @@ pragma solidity >0.6.0 <0.8.0; /* Interface Imports */ -import { IERC20 } from "../../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol"; +import { IERC20 } from "../../../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; /// @dev Interface of the child ERC20 token, for use on sidechains and L2 networks. interface IERC20Child is IERC20 { diff --git a/contracts/v0.7/bridge/token/LinkTokenChild.sol b/contracts/v0.7/bridge/token/LinkTokenChild.sol index c5fe72e..2a2be19 100644 --- a/contracts/v0.7/bridge/token/LinkTokenChild.sol +++ b/contracts/v0.7/bridge/token/LinkTokenChild.sol @@ -6,9 +6,9 @@ import { TypeAndVersionInterface } from "../../../v0.6/TypeAndVersionInterface.s import { IERC20Child } from "./IERC20Child.sol"; /* Contract Imports */ -import { ERC20 } from "../../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol"; -import { ERC20Burnable } from "../../../vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20Burnable.sol"; -import { SimpleWriteAccessController } from "../../../vendor/@chainlink/contracts/0.1.7/contracts/v0.6/SimpleWriteAccessController.sol"; +import { ERC20 } from "../../../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; +import { ERC20Burnable } from "../../../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20Burnable.sol"; +import { SimpleWriteAccessController } from "../../../../vendor/smartcontractkit/chainlink/evm-contracts/src/v0.6/SimpleWriteAccessController.sol"; import { LinkToken } from "../../../v0.6/LinkToken.sol"; /// @dev Access controlled mintable & burnable LinkToken, for use on sidechains and L2 networks. diff --git a/contracts/vendor/@chainlink/contracts/0.1.7/commit.info b/contracts/vendor/@chainlink/contracts/0.1.7/commit.info deleted file mode 100644 index ee053c4..0000000 --- a/contracts/vendor/@chainlink/contracts/0.1.7/commit.info +++ /dev/null @@ -1 +0,0 @@ -3e90696fb3fe48cb3d19b09848653db2e0e6cb24 diff --git a/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol b/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol deleted file mode 100644 index 6cf043a..0000000 --- a/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/Owned.sol +++ /dev/null @@ -1,63 +0,0 @@ -// SPDX-License-Identifier: MIT -// next-line updated from source -pragma solidity >0.6.0 <0.8.0; - -/** - * @title The Owned contract - * @notice A contract with helpers for basic contract ownership. - */ -contract Owned { - - address public owner; - address private pendingOwner; - - event OwnershipTransferRequested( - address indexed from, - address indexed to - ); - event OwnershipTransferred( - address indexed from, - address indexed to - ); - - constructor() public { - owner = msg.sender; - } - - /** - * @dev Allows an owner to begin transferring ownership to a new address, - * pending. - */ - function transferOwnership(address _to) - external - onlyOwner() - { - pendingOwner = _to; - - emit OwnershipTransferRequested(owner, _to); - } - - /** - * @dev Allows an ownership transfer to be completed by the recipient. - */ - function acceptOwnership() - external - { - require(msg.sender == pendingOwner, "Must be proposed owner"); - - address oldOwner = owner; - owner = msg.sender; - pendingOwner = address(0); - - emit OwnershipTransferred(oldOwner, msg.sender); - } - - /** - * @dev Reverts if called by anyone other than the contract owner. - */ - modifier onlyOwner() { - require(msg.sender == owner, "Only callable by owner"); - _; - } - -} diff --git a/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/SimpleWriteAccessController.sol b/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/SimpleWriteAccessController.sol deleted file mode 100644 index a07d215..0000000 --- a/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/SimpleWriteAccessController.sol +++ /dev/null @@ -1,113 +0,0 @@ -// SPDX-License-Identifier: MIT -// next-line updated from source -pragma solidity >0.6.0 <0.8.0; - -import "./Owned.sol"; -import "./interfaces/AccessControllerInterface.sol"; - -/** - * @title SimpleWriteAccessController - * @notice Gives access to accounts explicitly added to an access list by the - * controller's owner. - * @dev does not make any special permissions for externally, see - * SimpleReadAccessController for that. - */ -contract SimpleWriteAccessController is AccessControllerInterface, Owned { - - bool public checkEnabled; - mapping(address => bool) internal accessList; - - event AddedAccess(address user); - event RemovedAccess(address user); - event CheckAccessEnabled(); - event CheckAccessDisabled(); - - constructor() - public - { - checkEnabled = true; - } - - /** - * @notice Returns the access of an address - * @param _user The address to query - */ - function hasAccess( - address _user, - bytes memory - ) - public - view - virtual - override - returns (bool) - { - return accessList[_user] || !checkEnabled; - } - - /** - * @notice Adds an address to the access list - * @param _user The address to add - */ - function addAccess(address _user) - external - onlyOwner() - { - if (!accessList[_user]) { - accessList[_user] = true; - - emit AddedAccess(_user); - } - } - - /** - * @notice Removes an address from the access list - * @param _user The address to remove - */ - function removeAccess(address _user) - external - onlyOwner() - { - if (accessList[_user]) { - accessList[_user] = false; - - emit RemovedAccess(_user); - } - } - - /** - * @notice makes the access check enforced - */ - function enableAccessCheck() - external - onlyOwner() - { - if (!checkEnabled) { - checkEnabled = true; - - emit CheckAccessEnabled(); - } - } - - /** - * @notice makes the access check unenforced - */ - function disableAccessCheck() - external - onlyOwner() - { - if (checkEnabled) { - checkEnabled = false; - - emit CheckAccessDisabled(); - } - } - - /** - * @dev reverts if the caller does not have access - */ - modifier checkAccess() { - require(hasAccess(msg.sender, msg.data), "No access"); - _; - } -} diff --git a/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/interfaces/AccessControllerInterface.sol b/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/interfaces/AccessControllerInterface.sol deleted file mode 100644 index 5d6cd43..0000000 --- a/contracts/vendor/@chainlink/contracts/0.1.7/contracts/v0.6/interfaces/AccessControllerInterface.sol +++ /dev/null @@ -1,7 +0,0 @@ -// SPDX-License-Identifier: MIT -// next-line updated from source -pragma solidity >0.6.0 <0.8.0; - -interface AccessControllerInterface { - function hasAccess(address user, bytes calldata data) external view returns (bool); -} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/commit.info b/contracts/vendor/@openzeppelin/contracts/3.4.1/commit.info deleted file mode 100644 index ba429f2..0000000 --- a/contracts/vendor/@openzeppelin/contracts/3.4.1/commit.info +++ /dev/null @@ -1 +0,0 @@ -cec0800c541c809f883a37f2dfb91ec4c90263c5 diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/math/SafeMath.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/math/SafeMath.sol deleted file mode 100644 index 3e81f29..0000000 --- a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/math/SafeMath.sol +++ /dev/null @@ -1,214 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.6.0 <0.8.0; - -/** - * @dev Wrappers over Solidity's arithmetic operations with added overflow - * checks. - * - * Arithmetic operations in Solidity wrap on overflow. This can easily result - * in bugs, because programmers usually assume that an overflow raises an - * error, which is the standard behavior in high level programming languages. - * `SafeMath` restores this intuition by reverting the transaction when an - * operation overflows. - * - * Using this library instead of the unchecked operations eliminates an entire - * class of bugs, so it's recommended to use it always. - */ -library SafeMath { - /** - * @dev Returns the addition of two unsigned integers, with an overflow flag. - * - * _Available since v3.4._ - */ - function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { - uint256 c = a + b; - if (c < a) return (false, 0); - return (true, c); - } - - /** - * @dev Returns the substraction of two unsigned integers, with an overflow flag. - * - * _Available since v3.4._ - */ - function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { - if (b > a) return (false, 0); - return (true, a - b); - } - - /** - * @dev Returns the multiplication of two unsigned integers, with an overflow flag. - * - * _Available since v3.4._ - */ - function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { - // Gas optimization: this is cheaper than requiring 'a' not being zero, but the - // benefit is lost if 'b' is also tested. - // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 - if (a == 0) return (true, 0); - uint256 c = a * b; - if (c / a != b) return (false, 0); - return (true, c); - } - - /** - * @dev Returns the division of two unsigned integers, with a division by zero flag. - * - * _Available since v3.4._ - */ - function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { - if (b == 0) return (false, 0); - return (true, a / b); - } - - /** - * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. - * - * _Available since v3.4._ - */ - function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { - if (b == 0) return (false, 0); - return (true, a % b); - } - - /** - * @dev Returns the addition of two unsigned integers, reverting on - * overflow. - * - * Counterpart to Solidity's `+` operator. - * - * Requirements: - * - * - Addition cannot overflow. - */ - function add(uint256 a, uint256 b) internal pure returns (uint256) { - uint256 c = a + b; - require(c >= a, "SafeMath: addition overflow"); - return c; - } - - /** - * @dev Returns the subtraction of two unsigned integers, reverting on - * overflow (when the result is negative). - * - * Counterpart to Solidity's `-` operator. - * - * Requirements: - * - * - Subtraction cannot overflow. - */ - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - require(b <= a, "SafeMath: subtraction overflow"); - return a - b; - } - - /** - * @dev Returns the multiplication of two unsigned integers, reverting on - * overflow. - * - * Counterpart to Solidity's `*` operator. - * - * Requirements: - * - * - Multiplication cannot overflow. - */ - function mul(uint256 a, uint256 b) internal pure returns (uint256) { - if (a == 0) return 0; - uint256 c = a * b; - require(c / a == b, "SafeMath: multiplication overflow"); - return c; - } - - /** - * @dev Returns the integer division of two unsigned integers, reverting on - * division by zero. The result is rounded towards zero. - * - * Counterpart to Solidity's `/` operator. Note: this function uses a - * `revert` opcode (which leaves remaining gas untouched) while Solidity - * uses an invalid opcode to revert (consuming all remaining gas). - * - * Requirements: - * - * - The divisor cannot be zero. - */ - function div(uint256 a, uint256 b) internal pure returns (uint256) { - require(b > 0, "SafeMath: division by zero"); - return a / b; - } - - /** - * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), - * reverting when dividing by zero. - * - * Counterpart to Solidity's `%` operator. This function uses a `revert` - * opcode (which leaves remaining gas untouched) while Solidity uses an - * invalid opcode to revert (consuming all remaining gas). - * - * Requirements: - * - * - The divisor cannot be zero. - */ - function mod(uint256 a, uint256 b) internal pure returns (uint256) { - require(b > 0, "SafeMath: modulo by zero"); - return a % b; - } - - /** - * @dev Returns the subtraction of two unsigned integers, reverting with custom message on - * overflow (when the result is negative). - * - * CAUTION: This function is deprecated because it requires allocating memory for the error - * message unnecessarily. For custom revert reasons use {trySub}. - * - * Counterpart to Solidity's `-` operator. - * - * Requirements: - * - * - Subtraction cannot overflow. - */ - function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { - require(b <= a, errorMessage); - return a - b; - } - - /** - * @dev Returns the integer division of two unsigned integers, reverting with custom message on - * division by zero. The result is rounded towards zero. - * - * CAUTION: This function is deprecated because it requires allocating memory for the error - * message unnecessarily. For custom revert reasons use {tryDiv}. - * - * Counterpart to Solidity's `/` operator. Note: this function uses a - * `revert` opcode (which leaves remaining gas untouched) while Solidity - * uses an invalid opcode to revert (consuming all remaining gas). - * - * Requirements: - * - * - The divisor cannot be zero. - */ - function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { - require(b > 0, errorMessage); - return a / b; - } - - /** - * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), - * reverting with custom message when dividing by zero. - * - * CAUTION: This function is deprecated because it requires allocating memory for the error - * message unnecessarily. For custom revert reasons use {tryMod}. - * - * Counterpart to Solidity's `%` operator. This function uses a `revert` - * opcode (which leaves remaining gas untouched) while Solidity uses an - * invalid opcode to revert (consuming all remaining gas). - * - * Requirements: - * - * - The divisor cannot be zero. - */ - function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { - require(b > 0, errorMessage); - return a % b; - } -} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol deleted file mode 100644 index 1f3e400..0000000 --- a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20.sol +++ /dev/null @@ -1,306 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.6.0 <0.8.0; - -import "../../utils/Context.sol"; -import "./IERC20.sol"; -import "../../math/SafeMath.sol"; - -/** - * @dev Implementation of the {IERC20} interface. - * - * This implementation is agnostic to the way tokens are created. This means - * that a supply mechanism has to be added in a derived contract using {_mint}. - * For a generic mechanism see {ERC20PresetMinterPauser}. - * - * TIP: For a detailed writeup see our guide - * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How - * to implement supply mechanisms]. - * - * We have followed general OpenZeppelin guidelines: functions revert instead - * of returning `false` on failure. This behavior is nonetheless conventional - * and does not conflict with the expectations of ERC20 applications. - * - * Additionally, an {Approval} event is emitted on calls to {transferFrom}. - * This allows applications to reconstruct the allowance for all accounts just - * by listening to said events. Other implementations of the EIP may not emit - * these events, as it isn't required by the specification. - * - * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} - * functions have been added to mitigate the well-known issues around setting - * allowances. See {IERC20-approve}. - */ -contract ERC20 is Context, IERC20 { - using SafeMath for uint256; - - mapping (address => uint256) private _balances; - - mapping (address => mapping (address => uint256)) private _allowances; - - uint256 private _totalSupply; - - string private _name; - string private _symbol; - uint8 private _decimals; - - /** - * @dev Sets the values for {name} and {symbol}, initializes {decimals} with - * a default value of 18. - * - * To select a different value for {decimals}, use {_setupDecimals}. - * - * All three of these values are immutable: they can only be set once during - * construction. - */ - constructor (string memory name_, string memory symbol_) public { - _name = name_; - _symbol = symbol_; - _decimals = 18; - } - - /** - * @dev Returns the name of the token. - */ - function name() public view virtual returns (string memory) { - return _name; - } - - /** - * @dev Returns the symbol of the token, usually a shorter version of the - * name. - */ - function symbol() public view virtual returns (string memory) { - return _symbol; - } - - /** - * @dev Returns the number of decimals used to get its user representation. - * For example, if `decimals` equals `2`, a balance of `505` tokens should - * be displayed to a user as `5,05` (`505 / 10 ** 2`). - * - * Tokens usually opt for a value of 18, imitating the relationship between - * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is - * called. - * - * NOTE: This information is only used for _display_ purposes: it in - * no way affects any of the arithmetic of the contract, including - * {IERC20-balanceOf} and {IERC20-transfer}. - */ - function decimals() public view virtual returns (uint8) { - return _decimals; - } - - /** - * @dev See {IERC20-totalSupply}. - */ - function totalSupply() public view virtual override returns (uint256) { - return _totalSupply; - } - - /** - * @dev See {IERC20-balanceOf}. - */ - function balanceOf(address account) public view virtual override returns (uint256) { - return _balances[account]; - } - - /** - * @dev See {IERC20-transfer}. - * - * Requirements: - * - * - `recipient` cannot be the zero address. - * - the caller must have a balance of at least `amount`. - */ - function transfer(address recipient, uint256 amount) public virtual override returns (bool) { - _transfer(_msgSender(), recipient, amount); - return true; - } - - /** - * @dev See {IERC20-allowance}. - */ - function allowance(address owner, address spender) public view virtual override returns (uint256) { - return _allowances[owner][spender]; - } - - /** - * @dev See {IERC20-approve}. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function approve(address spender, uint256 amount) public virtual override returns (bool) { - _approve(_msgSender(), spender, amount); - return true; - } - - /** - * @dev See {IERC20-transferFrom}. - * - * Emits an {Approval} event indicating the updated allowance. This is not - * required by the EIP. See the note at the beginning of {ERC20}. - * - * Requirements: - * - * - `sender` and `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - * - the caller must have allowance for ``sender``'s tokens of at least - * `amount`. - */ - function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { - _transfer(sender, recipient, amount); - _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); - return true; - } - - /** - * @dev Atomically increases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {IERC20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { - _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); - return true; - } - - /** - * @dev Atomically decreases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {IERC20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - * - `spender` must have allowance for the caller of at least - * `subtractedValue`. - */ - function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { - _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); - return true; - } - - /** - * @dev Moves tokens `amount` from `sender` to `recipient`. - * - * This is internal function is equivalent to {transfer}, and can be used to - * e.g. implement automatic token fees, slashing mechanisms, etc. - * - * Emits a {Transfer} event. - * - * Requirements: - * - * - `sender` cannot be the zero address. - * - `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - */ - function _transfer(address sender, address recipient, uint256 amount) internal virtual { - require(sender != address(0), "ERC20: transfer from the zero address"); - require(recipient != address(0), "ERC20: transfer to the zero address"); - - _beforeTokenTransfer(sender, recipient, amount); - - _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); - _balances[recipient] = _balances[recipient].add(amount); - emit Transfer(sender, recipient, amount); - } - - /** @dev Creates `amount` tokens and assigns them to `account`, increasing - * the total supply. - * - * Emits a {Transfer} event with `from` set to the zero address. - * - * Requirements: - * - * - `to` cannot be the zero address. - */ - function _mint(address account, uint256 amount) internal virtual { - require(account != address(0), "ERC20: mint to the zero address"); - - _beforeTokenTransfer(address(0), account, amount); - - _totalSupply = _totalSupply.add(amount); - _balances[account] = _balances[account].add(amount); - emit Transfer(address(0), account, amount); - } - - /** - * @dev Destroys `amount` tokens from `account`, reducing the - * total supply. - * - * Emits a {Transfer} event with `to` set to the zero address. - * - * Requirements: - * - * - `account` cannot be the zero address. - * - `account` must have at least `amount` tokens. - */ - function _burn(address account, uint256 amount) internal virtual { - require(account != address(0), "ERC20: burn from the zero address"); - - _beforeTokenTransfer(account, address(0), amount); - - _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); - _totalSupply = _totalSupply.sub(amount); - emit Transfer(account, address(0), amount); - } - - /** - * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. - * - * This internal function is equivalent to `approve`, and can be used to - * e.g. set automatic allowances for certain subsystems, etc. - * - * Emits an {Approval} event. - * - * Requirements: - * - * - `owner` cannot be the zero address. - * - `spender` cannot be the zero address. - */ - function _approve(address owner, address spender, uint256 amount) internal virtual { - require(owner != address(0), "ERC20: approve from the zero address"); - require(spender != address(0), "ERC20: approve to the zero address"); - - _allowances[owner][spender] = amount; - emit Approval(owner, spender, amount); - } - - /** - * @dev Sets {decimals} to a value other than the default one of 18. - * - * WARNING: This function should only be called from the constructor. Most - * applications that interact with token contracts will not expect - * {decimals} to ever change, and may work incorrectly if it does. - */ - function _setupDecimals(uint8 decimals_) internal virtual { - _decimals = decimals_; - } - - /** - * @dev Hook that is called before any transfer of tokens. This includes - * minting and burning. - * - * Calling conditions: - * - * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens - * will be to transferred to `to`. - * - when `from` is zero, `amount` tokens will be minted for `to`. - * - when `to` is zero, `amount` of ``from``'s tokens will be burned. - * - `from` and `to` are never both zero. - * - * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. - */ - function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } -} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20Burnable.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20Burnable.sol deleted file mode 100644 index 5c14bed..0000000 --- a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/ERC20Burnable.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.6.0 <0.8.0; - -import "../../utils/Context.sol"; -import "./ERC20.sol"; - -/** - * @dev Extension of {ERC20} that allows token holders to destroy both their own - * tokens and those that they have an allowance for, in a way that can be - * recognized off-chain (via event analysis). - */ -abstract contract ERC20Burnable is Context, ERC20 { - using SafeMath for uint256; - - /** - * @dev Destroys `amount` tokens from the caller. - * - * See {ERC20-_burn}. - */ - function burn(uint256 amount) public virtual { - _burn(_msgSender(), amount); - } - - /** - * @dev Destroys `amount` tokens from `account`, deducting from the caller's - * allowance. - * - * See {ERC20-_burn} and {ERC20-allowance}. - * - * Requirements: - * - * - the caller must have allowance for ``accounts``'s tokens of at least - * `amount`. - */ - function burnFrom(address account, uint256 amount) public virtual { - uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "ERC20: burn amount exceeds allowance"); - - _approve(account, _msgSender(), decreasedAllowance); - _burn(account, amount); - } -} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol deleted file mode 100644 index 9b877d1..0000000 --- a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/token/ERC20/IERC20.sol +++ /dev/null @@ -1,77 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.6.0 <0.8.0; - -/** - * @dev Interface of the ERC20 standard as defined in the EIP. - */ -interface IERC20 { - /** - * @dev Returns the amount of tokens in existence. - */ - function totalSupply() external view returns (uint256); - - /** - * @dev Returns the amount of tokens owned by `account`. - */ - function balanceOf(address account) external view returns (uint256); - - /** - * @dev Moves `amount` tokens from the caller's account to `recipient`. - * - * Returns a boolean value indicating whether the operation succeeded. - * - * Emits a {Transfer} event. - */ - function transfer(address recipient, uint256 amount) external returns (bool); - - /** - * @dev Returns the remaining number of tokens that `spender` will be - * allowed to spend on behalf of `owner` through {transferFrom}. This is - * zero by default. - * - * This value changes when {approve} or {transferFrom} are called. - */ - function allowance(address owner, address spender) external view returns (uint256); - - /** - * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. - * - * Returns a boolean value indicating whether the operation succeeded. - * - * IMPORTANT: Beware that changing an allowance with this method brings the risk - * that someone may use both the old and the new allowance by unfortunate - * transaction ordering. One possible solution to mitigate this race - * condition is to first reduce the spender's allowance to 0 and set the - * desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * - * Emits an {Approval} event. - */ - function approve(address spender, uint256 amount) external returns (bool); - - /** - * @dev Moves `amount` tokens from `sender` to `recipient` using the - * allowance mechanism. `amount` is then deducted from the caller's - * allowance. - * - * Returns a boolean value indicating whether the operation succeeded. - * - * Emits a {Transfer} event. - */ - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - - /** - * @dev Emitted when `value` tokens are moved from one account (`from`) to - * another (`to`). - * - * Note that `value` may be zero. - */ - event Transfer(address indexed from, address indexed to, uint256 value); - - /** - * @dev Emitted when the allowance of a `spender` for an `owner` is set by - * a call to {approve}. `value` is the new allowance. - */ - event Approval(address indexed owner, address indexed spender, uint256 value); -} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Address.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Address.sol deleted file mode 100644 index 42a9dc1..0000000 --- a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Address.sol +++ /dev/null @@ -1,189 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.6.2 <0.8.0; - -/** - * @dev Collection of functions related to the address type - */ -library Address { - /** - * @dev Returns true if `account` is a contract. - * - * [IMPORTANT] - * ==== - * It is unsafe to assume that an address for which this function returns - * false is an externally-owned account (EOA) and not a contract. - * - * Among others, `isContract` will return false for the following - * types of addresses: - * - * - an externally-owned account - * - a contract in construction - * - an address where a contract will be created - * - an address where a contract lived, but was destroyed - * ==== - */ - function isContract(address account) internal view returns (bool) { - // This method relies on extcodesize, which returns 0 for contracts in - // construction, since the code is only stored at the end of the - // constructor execution. - - uint256 size; - // solhint-disable-next-line no-inline-assembly - assembly { size := extcodesize(account) } - return size > 0; - } - - /** - * @dev Replacement for Solidity's `transfer`: sends `amount` wei to - * `recipient`, forwarding all available gas and reverting on errors. - * - * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost - * of certain opcodes, possibly making contracts go over the 2300 gas limit - * imposed by `transfer`, making them unable to receive funds via - * `transfer`. {sendValue} removes this limitation. - * - * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. - * - * IMPORTANT: because control is transferred to `recipient`, care must be - * taken to not create reentrancy vulnerabilities. Consider using - * {ReentrancyGuard} or the - * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. - */ - function sendValue(address payable recipient, uint256 amount) internal { - require(address(this).balance >= amount, "Address: insufficient balance"); - - // solhint-disable-next-line avoid-low-level-calls, avoid-call-value - (bool success, ) = recipient.call{ value: amount }(""); - require(success, "Address: unable to send value, recipient may have reverted"); - } - - /** - * @dev Performs a Solidity function call using a low level `call`. A - * plain`call` is an unsafe replacement for a function call: use this - * function instead. - * - * If `target` reverts with a revert reason, it is bubbled up by this - * function (like regular Solidity function calls). - * - * Returns the raw returned data. To convert to the expected return value, - * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. - * - * Requirements: - * - * - `target` must be a contract. - * - calling `target` with `data` must not revert. - * - * _Available since v3.1._ - */ - function functionCall(address target, bytes memory data) internal returns (bytes memory) { - return functionCall(target, data, "Address: low-level call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with - * `errorMessage` as a fallback revert reason when `target` reverts. - * - * _Available since v3.1._ - */ - function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { - return functionCallWithValue(target, data, 0, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but also transferring `value` wei to `target`. - * - * Requirements: - * - * - the calling contract must have an ETH balance of at least `value`. - * - the called Solidity function must be `payable`. - * - * _Available since v3.1._ - */ - function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { - return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); - } - - /** - * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but - * with `errorMessage` as a fallback revert reason when `target` reverts. - * - * _Available since v3.1._ - */ - function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { - require(address(this).balance >= value, "Address: insufficient balance for call"); - require(isContract(target), "Address: call to non-contract"); - - // solhint-disable-next-line avoid-low-level-calls - (bool success, bytes memory returndata) = target.call{ value: value }(data); - return _verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but performing a static call. - * - * _Available since v3.3._ - */ - function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { - return functionStaticCall(target, data, "Address: low-level static call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], - * but performing a static call. - * - * _Available since v3.3._ - */ - function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { - require(isContract(target), "Address: static call to non-contract"); - - // solhint-disable-next-line avoid-low-level-calls - (bool success, bytes memory returndata) = target.staticcall(data); - return _verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but performing a delegate call. - * - * _Available since v3.4._ - */ - function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { - return functionDelegateCall(target, data, "Address: low-level delegate call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], - * but performing a delegate call. - * - * _Available since v3.4._ - */ - function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { - require(isContract(target), "Address: delegate call to non-contract"); - - // solhint-disable-next-line avoid-low-level-calls - (bool success, bytes memory returndata) = target.delegatecall(data); - return _verifyCallResult(success, returndata, errorMessage); - } - - function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { - if (success) { - return returndata; - } else { - // Look for revert reason and bubble it up if present - if (returndata.length > 0) { - // The easiest way to bubble the revert reason is using memory via assembly - - // solhint-disable-next-line no-inline-assembly - assembly { - let returndata_size := mload(returndata) - revert(add(32, returndata), returndata_size) - } - } else { - revert(errorMessage); - } - } - } -} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Context.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Context.sol deleted file mode 100644 index 3d07c4a..0000000 --- a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/Context.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.6.0 <0.8.0; - -/* - * @dev Provides information about the current execution context, including the - * sender of the transaction and its data. While these are generally available - * via msg.sender and msg.data, they should not be accessed in such a direct - * manner, since when dealing with GSN meta-transactions the account sending and - * paying for execution may not be the actual sender (as far as an application - * is concerned). - * - * This contract is only required for intermediate, library-like contracts. - */ -abstract contract Context { - function _msgSender() internal view virtual returns (address payable) { - return msg.sender; - } - - function _msgData() internal view virtual returns (bytes memory) { - this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 - return msg.data; - } -} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/EnumerableSet.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/EnumerableSet.sol deleted file mode 100644 index 858312d..0000000 --- a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/EnumerableSet.sol +++ /dev/null @@ -1,297 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.6.0 <0.8.0; - -/** - * @dev Library for managing - * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive - * types. - * - * Sets have the following properties: - * - * - Elements are added, removed, and checked for existence in constant time - * (O(1)). - * - Elements are enumerated in O(n). No guarantees are made on the ordering. - * - * ``` - * contract Example { - * // Add the library methods - * using EnumerableSet for EnumerableSet.AddressSet; - * - * // Declare a set state variable - * EnumerableSet.AddressSet private mySet; - * } - * ``` - * - * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) - * and `uint256` (`UintSet`) are supported. - */ -library EnumerableSet { - // To implement this library for multiple types with as little code - // repetition as possible, we write it in terms of a generic Set type with - // bytes32 values. - // The Set implementation uses private functions, and user-facing - // implementations (such as AddressSet) are just wrappers around the - // underlying Set. - // This means that we can only create new EnumerableSets for types that fit - // in bytes32. - - struct Set { - // Storage of set values - bytes32[] _values; - - // Position of the value in the `values` array, plus 1 because index 0 - // means a value is not in the set. - mapping (bytes32 => uint256) _indexes; - } - - /** - * @dev Add a value to a set. O(1). - * - * Returns true if the value was added to the set, that is if it was not - * already present. - */ - function _add(Set storage set, bytes32 value) private returns (bool) { - if (!_contains(set, value)) { - set._values.push(value); - // The value is stored at length-1, but we add 1 to all indexes - // and use 0 as a sentinel value - set._indexes[value] = set._values.length; - return true; - } else { - return false; - } - } - - /** - * @dev Removes a value from a set. O(1). - * - * Returns true if the value was removed from the set, that is if it was - * present. - */ - function _remove(Set storage set, bytes32 value) private returns (bool) { - // We read and store the value's index to prevent multiple reads from the same storage slot - uint256 valueIndex = set._indexes[value]; - - if (valueIndex != 0) { // Equivalent to contains(set, value) - // To delete an element from the _values array in O(1), we swap the element to delete with the last one in - // the array, and then remove the last element (sometimes called as 'swap and pop'). - // This modifies the order of the array, as noted in {at}. - - uint256 toDeleteIndex = valueIndex - 1; - uint256 lastIndex = set._values.length - 1; - - // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs - // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. - - bytes32 lastvalue = set._values[lastIndex]; - - // Move the last value to the index where the value to delete is - set._values[toDeleteIndex] = lastvalue; - // Update the index for the moved value - set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based - - // Delete the slot where the moved value was stored - set._values.pop(); - - // Delete the index for the deleted slot - delete set._indexes[value]; - - return true; - } else { - return false; - } - } - - /** - * @dev Returns true if the value is in the set. O(1). - */ - function _contains(Set storage set, bytes32 value) private view returns (bool) { - return set._indexes[value] != 0; - } - - /** - * @dev Returns the number of values on the set. O(1). - */ - function _length(Set storage set) private view returns (uint256) { - return set._values.length; - } - - /** - * @dev Returns the value stored at position `index` in the set. O(1). - * - * Note that there are no guarantees on the ordering of values inside the - * array, and it may change when more values are added or removed. - * - * Requirements: - * - * - `index` must be strictly less than {length}. - */ - function _at(Set storage set, uint256 index) private view returns (bytes32) { - require(set._values.length > index, "EnumerableSet: index out of bounds"); - return set._values[index]; - } - - // Bytes32Set - - struct Bytes32Set { - Set _inner; - } - - /** - * @dev Add a value to a set. O(1). - * - * Returns true if the value was added to the set, that is if it was not - * already present. - */ - function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { - return _add(set._inner, value); - } - - /** - * @dev Removes a value from a set. O(1). - * - * Returns true if the value was removed from the set, that is if it was - * present. - */ - function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { - return _remove(set._inner, value); - } - - /** - * @dev Returns true if the value is in the set. O(1). - */ - function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { - return _contains(set._inner, value); - } - - /** - * @dev Returns the number of values in the set. O(1). - */ - function length(Bytes32Set storage set) internal view returns (uint256) { - return _length(set._inner); - } - - /** - * @dev Returns the value stored at position `index` in the set. O(1). - * - * Note that there are no guarantees on the ordering of values inside the - * array, and it may change when more values are added or removed. - * - * Requirements: - * - * - `index` must be strictly less than {length}. - */ - function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { - return _at(set._inner, index); - } - - // AddressSet - - struct AddressSet { - Set _inner; - } - - /** - * @dev Add a value to a set. O(1). - * - * Returns true if the value was added to the set, that is if it was not - * already present. - */ - function add(AddressSet storage set, address value) internal returns (bool) { - return _add(set._inner, bytes32(uint256(uint160(value)))); - } - - /** - * @dev Removes a value from a set. O(1). - * - * Returns true if the value was removed from the set, that is if it was - * present. - */ - function remove(AddressSet storage set, address value) internal returns (bool) { - return _remove(set._inner, bytes32(uint256(uint160(value)))); - } - - /** - * @dev Returns true if the value is in the set. O(1). - */ - function contains(AddressSet storage set, address value) internal view returns (bool) { - return _contains(set._inner, bytes32(uint256(uint160(value)))); - } - - /** - * @dev Returns the number of values in the set. O(1). - */ - function length(AddressSet storage set) internal view returns (uint256) { - return _length(set._inner); - } - - /** - * @dev Returns the value stored at position `index` in the set. O(1). - * - * Note that there are no guarantees on the ordering of values inside the - * array, and it may change when more values are added or removed. - * - * Requirements: - * - * - `index` must be strictly less than {length}. - */ - function at(AddressSet storage set, uint256 index) internal view returns (address) { - return address(uint160(uint256(_at(set._inner, index)))); - } - - - // UintSet - - struct UintSet { - Set _inner; - } - - /** - * @dev Add a value to a set. O(1). - * - * Returns true if the value was added to the set, that is if it was not - * already present. - */ - function add(UintSet storage set, uint256 value) internal returns (bool) { - return _add(set._inner, bytes32(value)); - } - - /** - * @dev Removes a value from a set. O(1). - * - * Returns true if the value was removed from the set, that is if it was - * present. - */ - function remove(UintSet storage set, uint256 value) internal returns (bool) { - return _remove(set._inner, bytes32(value)); - } - - /** - * @dev Returns true if the value is in the set. O(1). - */ - function contains(UintSet storage set, uint256 value) internal view returns (bool) { - return _contains(set._inner, bytes32(value)); - } - - /** - * @dev Returns the number of values on the set. O(1). - */ - function length(UintSet storage set) internal view returns (uint256) { - return _length(set._inner); - } - - /** - * @dev Returns the value stored at position `index` in the set. O(1). - * - * Note that there are no guarantees on the ordering of values inside the - * array, and it may change when more values are added or removed. - * - * Requirements: - * - * - `index` must be strictly less than {length}. - */ - function at(UintSet storage set, uint256 index) internal view returns (uint256) { - return uint256(_at(set._inner, index)); - } -} diff --git a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/ReentrancyGuard.sol b/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/ReentrancyGuard.sol deleted file mode 100644 index 24c90c3..0000000 --- a/contracts/vendor/@openzeppelin/contracts/3.4.1/contracts/utils/ReentrancyGuard.sol +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.6.0 <0.8.0; - -/** - * @dev Contract module that helps prevent reentrant calls to a function. - * - * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier - * available, which can be applied to functions to make sure there are no nested - * (reentrant) calls to them. - * - * Note that because there is a single `nonReentrant` guard, functions marked as - * `nonReentrant` may not call one another. This can be worked around by making - * those functions `private`, and then adding `external` `nonReentrant` entry - * points to them. - * - * TIP: If you would like to learn more about reentrancy and alternative ways - * to protect against it, check out our blog post - * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. - */ -abstract contract ReentrancyGuard { - // Booleans are more expensive than uint256 or any type that takes up a full - // word because each write operation emits an extra SLOAD to first read the - // slot's contents, replace the bits taken up by the boolean, and then write - // back. This is the compiler's defense against contract upgrades and - // pointer aliasing, and it cannot be disabled. - - // The values being non-zero value makes deployment a bit more expensive, - // but in exchange the refund on every call to nonReentrant will be lower in - // amount. Since refunds are capped to a percentage of the total - // transaction's gas, it is best to keep them low in cases like this one, to - // increase the likelihood of the full refund coming into effect. - uint256 private constant _NOT_ENTERED = 1; - uint256 private constant _ENTERED = 2; - - uint256 private _status; - - constructor () internal { - _status = _NOT_ENTERED; - } - - /** - * @dev Prevents a contract from calling itself, directly or indirectly. - * Calling a `nonReentrant` function from another `nonReentrant` - * function is not supported. It is possible to prevent this from happening - * by making the `nonReentrant` function external, and make it call a - * `private` function that does the actual work. - */ - modifier nonReentrant() { - // On the first call to nonReentrant, _notEntered will be true - require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); - - // Any calls to nonReentrant after this point will fail - _status = _ENTERED; - - _; - - // By storing the original value once again, a refund is triggered (see - // https://eips.ethereum.org/EIPS/eip-2200) - _status = _NOT_ENTERED; - } -} diff --git a/vendor/OpenZeppelin/openzeppelin-contracts b/vendor/OpenZeppelin/openzeppelin-contracts new file mode 160000 index 0000000..cec0800 --- /dev/null +++ b/vendor/OpenZeppelin/openzeppelin-contracts @@ -0,0 +1 @@ +Subproject commit cec0800c541c809f883a37f2dfb91ec4c90263c5 diff --git a/vendor/smartcontractkit/chainlink b/vendor/smartcontractkit/chainlink new file mode 160000 index 0000000..b6d5b43 --- /dev/null +++ b/vendor/smartcontractkit/chainlink @@ -0,0 +1 @@ +Subproject commit b6d5b430f62d95bfd1e1442025c179a18c0f3e1e From 3b0ca75b59a14f48df5fe419df7191a1240604be Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Wed, 12 May 2021 11:36:37 +0200 Subject: [PATCH 13/21] Rename interfaces and flatten contracts --- README.md | 2 +- {flat => contracts-flat}/v0.4/LinkToken.sol | 0 .../v0.6/ERC677.sol | 82 +- {flat => contracts-flat}/v0.6/LinkToken.sol | 173 ++- contracts-flat/v0.6/PegSwap.sol | 1043 +++++++++++++ contracts-flat/v0.7/LinkTokenChild.sol | 1307 +++++++++++++++++ .../v0.6/{ERC677Token.sol => ERC677.sol} | 8 +- ...rsionInterface.sol => ITypeAndVersion.sol} | 2 +- contracts/v0.6/LinkToken.sol | 8 +- contracts/v0.6/PegSwap.sol | 8 +- contracts/v0.6/mocks/LinkReceiver.sol | 6 +- .../{StandardTokenMock.sol => Token20.sol} | 7 +- contracts/v0.6/mocks/Token677.sol | 4 +- contracts/v0.6/mocks/Token677ReceiverMock.sol | 5 +- .../v0.6/token/{ERC677.sol => IERC677.sol} | 2 +- ...ERC677Receiver.sol => IERC677Receiver.sol} | 2 +- .../v0.7/bridge/token/LinkTokenChild.sol | 8 +- test/behavior/{ERC677Token.ts => ERC677.ts} | 4 +- test/v0.4/ERC677Token.test.ts | 4 +- .../{ERC677Token.test.ts => ERC677.test.ts} | 6 +- test/v0.6/PegSwap.test.ts | 6 +- test/v0.6/token/BasicToken.test.ts | 2 +- test/v0.6/token/StandardToken.test.ts | 2 +- test/v0.7/bridge/token/LinkTokenChild.test.ts | 4 +- 24 files changed, 2585 insertions(+), 110 deletions(-) rename {flat => contracts-flat}/v0.4/LinkToken.sol (100%) rename flat/v0.6/ERC677Token.sol => contracts-flat/v0.6/ERC677.sol (93%) rename {flat => contracts-flat}/v0.6/LinkToken.sol (87%) create mode 100644 contracts-flat/v0.6/PegSwap.sol create mode 100644 contracts-flat/v0.7/LinkTokenChild.sol rename contracts/v0.6/{ERC677Token.sol => ERC677.sol} (87%) rename contracts/v0.6/{TypeAndVersionInterface.sol => ITypeAndVersion.sol} (92%) rename contracts/v0.6/mocks/{StandardTokenMock.sol => Token20.sol} (67%) rename contracts/v0.6/token/{ERC677.sol => IERC677.sol} (92%) rename contracts/v0.6/token/{ERC677Receiver.sol => IERC677Receiver.sol} (85%) rename test/behavior/{ERC677Token.ts => ERC677.ts} (97%) rename test/v0.6/{ERC677Token.test.ts => ERC677.test.ts} (65%) diff --git a/README.md b/README.md index 685c170..d321a9b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Security audit for [0.4 version of the contracts](./contracts/v0.4/) is availabl ## Details - Deployments: - - Ethereum Mainnet [LinkToken 0.4](./flat/v0.4/LinkToken.sol): [0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771af9ca656af840dff83e8264ecf986ca) + - Ethereum Mainnet [LinkToken 0.4](./contracts-flat/v0.4/LinkToken.sol): [0x514910771AF9Ca656af840dff83E8264EcF986CA](https://etherscan.io/address/0x514910771af9ca656af840dff83e8264ecf986ca) - Decimals: 18 - Name: ChainLink Token - Symbol: LINK diff --git a/flat/v0.4/LinkToken.sol b/contracts-flat/v0.4/LinkToken.sol similarity index 100% rename from flat/v0.4/LinkToken.sol rename to contracts-flat/v0.4/LinkToken.sol diff --git a/flat/v0.6/ERC677Token.sol b/contracts-flat/v0.6/ERC677.sol similarity index 93% rename from flat/v0.6/ERC677Token.sol rename to contracts-flat/v0.6/ERC677.sol index 2717cc9..427cff9 100644 --- a/flat/v0.6/ERC677Token.sol +++ b/contracts-flat/v0.6/ERC677.sol @@ -1,6 +1,6 @@ -// Sources flattened with hardhat v2.1.2 https://hardhat.org +// Sources flattened with hardhat v2.2.1 https://hardhat.org -// File @openzeppelin/contracts/utils/Context.sol@v3.4.1 +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/utils/Context.sol // SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ abstract contract Context { } -// File @openzeppelin/contracts/token/ERC20/IERC20.sol@v3.4.1 +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT @@ -109,7 +109,7 @@ interface IERC20 { } -// File @openzeppelin/contracts/math/SafeMath.sol@v3.4.1 +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/math/SafeMath.sol // SPDX-License-Identifier: MIT @@ -327,7 +327,7 @@ library SafeMath { } -// File @openzeppelin/contracts/token/ERC20/ERC20.sol@v3.4.1 +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol // SPDX-License-Identifier: MIT @@ -635,52 +635,72 @@ contract ERC20 is Context, IERC20 { } -// File contracts/v0.6/token/ERC677.sol +// File contracts/v0.6/token/IERC677.sol // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -interface ERC677 is IERC20 { - function transferAndCall(address to, uint value, bytes memory data) external returns (bool success); - - event Transfer(address indexed from, address indexed to, uint value, bytes data); +interface IERC677 is IERC20 { + function transferAndCall( + address to, + uint value, + bytes memory data + ) + external + returns (bool success); + + event Transfer( + address indexed from, + address indexed to, + uint value, + bytes data + ); } -// File contracts/v0.6/token/ERC677Receiver.sol +// File contracts/v0.6/token/IERC677Receiver.sol // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -interface ERC677Receiver { - function onTokenTransfer(address _sender, uint _value, bytes memory _data) external; +interface IERC677Receiver { + function onTokenTransfer( + address sender, + uint value, + bytes memory data + ) + external; } -// File contracts/v0.6/ERC677Token.sol +// File contracts/v0.6/ERC677.sol // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -abstract contract ERC677Token is ERC20, ERC677 { +abstract contract ERC677 is IERC677, ERC20 { /** * @dev transfer token to a contract address with additional data if the recipient is a contact. - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - * @param _data The extra data to be passed to the receiving contract. + * @param to The address to transfer to. + * @param value The amount to be transferred. + * @param data The extra data to be passed to the receiving contract. */ - function transferAndCall(address _to, uint _value, bytes memory _data) + function transferAndCall( + address to, + uint value, + bytes memory data + ) public override virtual returns (bool success) { - super.transfer(_to, _value); - emit Transfer(msg.sender, _to, _value, _data); - if (isContract(_to)) { - contractFallback(_to, _value, _data); + super.transfer(to, value); + emit Transfer(msg.sender, to, value, data); + if (isContract(to)) { + contractFallback(to, value, data); } return true; } @@ -688,20 +708,26 @@ abstract contract ERC677Token is ERC20, ERC677 { // PRIVATE - function contractFallback(address _to, uint _value, bytes memory _data) + function contractFallback( + address to, + uint value, + bytes memory data + ) private { - ERC677Receiver receiver = ERC677Receiver(_to); - receiver.onTokenTransfer(msg.sender, _value, _data); + IERC677Receiver receiver = IERC677Receiver(to); + receiver.onTokenTransfer(msg.sender, value, data); } - function isContract(address _addr) + function isContract( + address addr + ) private view returns (bool hasCode) { uint length; - assembly { length := extcodesize(_addr) } + assembly { length := extcodesize(addr) } return length > 0; } } diff --git a/flat/v0.6/LinkToken.sol b/contracts-flat/v0.6/LinkToken.sol similarity index 87% rename from flat/v0.6/LinkToken.sol rename to contracts-flat/v0.6/LinkToken.sol index 9592932..ec6f357 100644 --- a/flat/v0.6/LinkToken.sol +++ b/contracts-flat/v0.6/LinkToken.sol @@ -1,6 +1,6 @@ -// Sources flattened with hardhat v2.1.2 https://hardhat.org +// Sources flattened with hardhat v2.2.1 https://hardhat.org -// File @openzeppelin/contracts/utils/Context.sol@v3.4.1 +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/utils/Context.sol // SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ abstract contract Context { } -// File @openzeppelin/contracts/token/ERC20/IERC20.sol@v3.4.1 +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT @@ -109,7 +109,7 @@ interface IERC20 { } -// File @openzeppelin/contracts/math/SafeMath.sol@v3.4.1 +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/math/SafeMath.sol // SPDX-License-Identifier: MIT @@ -327,7 +327,7 @@ library SafeMath { } -// File @openzeppelin/contracts/token/ERC20/ERC20.sol@v3.4.1 +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol // SPDX-License-Identifier: MIT @@ -653,7 +653,14 @@ abstract contract LinkERC20 is ERC20 { * * - `spender` cannot be the zero address. */ - function increaseApproval(address spender, uint256 addedValue) public virtual returns (bool) { + function increaseApproval( + address spender, + uint256 addedValue + ) + public + virtual + returns (bool) + { return super.increaseAllowance(spender, addedValue); } @@ -671,58 +678,85 @@ abstract contract LinkERC20 is ERC20 { * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ - function decreaseApproval(address spender, uint256 subtractedValue) public virtual returns (bool) { + function decreaseApproval( + address spender, + uint256 subtractedValue + ) + public + virtual + returns (bool) + { return super.decreaseAllowance(spender, subtractedValue); } } -// File contracts/v0.6/token/ERC677.sol +// File contracts/v0.6/token/IERC677.sol // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -interface ERC677 is IERC20 { - function transferAndCall(address to, uint value, bytes memory data) external returns (bool success); - - event Transfer(address indexed from, address indexed to, uint value, bytes data); +interface IERC677 is IERC20 { + function transferAndCall( + address to, + uint value, + bytes memory data + ) + external + returns (bool success); + + event Transfer( + address indexed from, + address indexed to, + uint value, + bytes data + ); } -// File contracts/v0.6/token/ERC677Receiver.sol +// File contracts/v0.6/token/IERC677Receiver.sol // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -interface ERC677Receiver { - function onTokenTransfer(address _sender, uint _value, bytes memory _data) external; +interface IERC677Receiver { + function onTokenTransfer( + address sender, + uint value, + bytes memory data + ) + external; } -// File contracts/v0.6/ERC677Token.sol +// File contracts/v0.6/ERC677.sol // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -abstract contract ERC677Token is ERC20, ERC677 { +abstract contract ERC677 is IERC677, ERC20 { /** * @dev transfer token to a contract address with additional data if the recipient is a contact. - * @param _to The address to transfer to. - * @param _value The amount to be transferred. - * @param _data The extra data to be passed to the receiving contract. + * @param to The address to transfer to. + * @param value The amount to be transferred. + * @param data The extra data to be passed to the receiving contract. */ - function transferAndCall(address _to, uint _value, bytes memory _data) + function transferAndCall( + address to, + uint value, + bytes memory data + ) public override virtual returns (bool success) { - super.transfer(_to, _value); - emit Transfer(msg.sender, _to, _value, _data); - if (isContract(_to)) { - contractFallback(_to, _value, _data); + super.transfer(to, value); + emit Transfer(msg.sender, to, value, data); + if (isContract(to)) { + contractFallback(to, value, data); } return true; } @@ -730,42 +764,90 @@ abstract contract ERC677Token is ERC20, ERC677 { // PRIVATE - function contractFallback(address _to, uint _value, bytes memory _data) + function contractFallback( + address to, + uint value, + bytes memory data + ) private { - ERC677Receiver receiver = ERC677Receiver(_to); - receiver.onTokenTransfer(msg.sender, _value, _data); + IERC677Receiver receiver = IERC677Receiver(to); + receiver.onTokenTransfer(msg.sender, value, data); } - function isContract(address _addr) + function isContract( + address addr + ) private view returns (bool hasCode) { uint length; - assembly { length := extcodesize(_addr) } + assembly { length := extcodesize(addr) } return length > 0; } } +// File contracts/v0.6/ITypeAndVersion.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0; + +/// @dev Interface contracts should use to report its type and version. +interface ITypeAndVersion { + /** + * @dev Returns type and version for the contract. + * + * The returned string has the following format: + * Try to keep its length less than 32 to take up less contract space. + */ + function typeAndVersion() + external + pure + returns (string memory); +} + + // File contracts/v0.6/LinkToken.sol // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -contract LinkToken is LinkERC20, ERC677Token { + +/// @dev LinkToken, an ERC20/ERC677 Chainlink token with 1 billion supply +contract LinkToken is ITypeAndVersion, LinkERC20, ERC677 { uint private constant TOTAL_SUPPLY = 10**27; - string private constant NAME = 'ChainLink Token'; + string private constant NAME = 'Chainlink Token'; string private constant SYMBOL = 'LINK'; - constructor() ERC20(NAME, SYMBOL) + constructor() + ERC20(NAME, SYMBOL) public { _onCreate(); } + /** + * @notice versions: + * + * - LinkToken 0.0.3: added versioning, update name + * - LinkToken 0.0.2: upgraded to solc 0.6 + * - LinkToken 0.0.1: initial release solc 0.4 + * + * @inheritdoc ITypeAndVersion + */ + function typeAndVersion() + external + pure + override + virtual + returns (string memory) + { + return "LinkToken 0.0.3"; + } + /** * @dev Hook that is called when this contract is created. * Useful to override constructor behaviour in child contracts (e.g., LINK bridge tokens). @@ -782,7 +864,11 @@ contract LinkToken is LinkERC20, ERC677Token { * @dev Check if recepient is a valid address before transfer * @inheritdoc ERC20 */ - function _transfer(address sender, address recipient, uint256 amount) + function _transfer( + address sender, + address recipient, + uint256 amount + ) internal override virtual @@ -795,7 +881,11 @@ contract LinkToken is LinkERC20, ERC677Token { * @dev Check if spender is a valid address before approval * @inheritdoc ERC20 */ - function _approve(address owner, address spender, uint256 amount) + function _approve( + address owner, + address spender, + uint256 amount + ) internal override virtual @@ -804,13 +894,16 @@ contract LinkToken is LinkERC20, ERC677Token { super._approve(owner, spender, amount); } - - // MODIFIERS - - modifier validAddress(address _recipient) + /** + * @dev Check if recipient is valid (not this contract address) + * @param recipient the account we transfer/approve to + */ + modifier validAddress( + address recipient + ) virtual { - require(_recipient != address(this), "LinkToken: transfer/approve to this contract address"); + require(recipient != address(this), "LinkToken: transfer/approve to this contract address"); _; } } diff --git a/contracts-flat/v0.6/PegSwap.sol b/contracts-flat/v0.6/PegSwap.sol new file mode 100644 index 0000000..85152a4 --- /dev/null +++ b/contracts-flat/v0.6/PegSwap.sol @@ -0,0 +1,1043 @@ +// Sources flattened with hardhat v2.2.1 https://hardhat.org + +// File vendor/smartcontractkit/chainlink/evm-contracts/src/v0.6/Owned.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + +/** + * @title The Owned contract + * @notice A contract with helpers for basic contract ownership. + */ +contract Owned { + + address public owner; + address private pendingOwner; + + event OwnershipTransferRequested( + address indexed from, + address indexed to + ); + event OwnershipTransferred( + address indexed from, + address indexed to + ); + + constructor() public { + owner = msg.sender; + } + + /** + * @dev Allows an owner to begin transferring ownership to a new address, + * pending. + */ + function transferOwnership(address _to) + external + onlyOwner() + { + pendingOwner = _to; + + emit OwnershipTransferRequested(owner, _to); + } + + /** + * @dev Allows an ownership transfer to be completed by the recipient. + */ + function acceptOwnership() + external + { + require(msg.sender == pendingOwner, "Must be proposed owner"); + + address oldOwner = owner; + owner = msg.sender; + pendingOwner = address(0); + + emit OwnershipTransferred(oldOwner, msg.sender); + } + + /** + * @dev Reverts if called by anyone other than the contract owner. + */ + modifier onlyOwner() { + require(msg.sender == owner, "Only callable by owner"); + _; + } + +} + + +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/utils/Context.sol + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +/* + * @dev Provides information about the current execution context, including the + * sender of the transaction and its data. While these are generally available + * via msg.sender and msg.data, they should not be accessed in such a direct + * manner, since when dealing with GSN meta-transactions the account sending and + * paying for execution may not be the actual sender (as far as an application + * is concerned). + * + * This contract is only required for intermediate, library-like contracts. + */ +abstract contract Context { + function _msgSender() internal view virtual returns (address payable) { + return msg.sender; + } + + function _msgData() internal view virtual returns (bytes memory) { + this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 + return msg.data; + } +} + + +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +/** + * @dev Interface of the ERC20 standard as defined in the EIP. + */ +interface IERC20 { + /** + * @dev Returns the amount of tokens in existence. + */ + function totalSupply() external view returns (uint256); + + /** + * @dev Returns the amount of tokens owned by `account`. + */ + function balanceOf(address account) external view returns (uint256); + + /** + * @dev Moves `amount` tokens from the caller's account to `recipient`. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transfer(address recipient, uint256 amount) external returns (bool); + + /** + * @dev Returns the remaining number of tokens that `spender` will be + * allowed to spend on behalf of `owner` through {transferFrom}. This is + * zero by default. + * + * This value changes when {approve} or {transferFrom} are called. + */ + function allowance(address owner, address spender) external view returns (uint256); + + /** + * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * IMPORTANT: Beware that changing an allowance with this method brings the risk + * that someone may use both the old and the new allowance by unfortunate + * transaction ordering. One possible solution to mitigate this race + * condition is to first reduce the spender's allowance to 0 and set the + * desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + * Emits an {Approval} event. + */ + function approve(address spender, uint256 amount) external returns (bool); + + /** + * @dev Moves `amount` tokens from `sender` to `recipient` using the + * allowance mechanism. `amount` is then deducted from the caller's + * allowance. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); + + /** + * @dev Emitted when `value` tokens are moved from one account (`from`) to + * another (`to`). + * + * Note that `value` may be zero. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev Emitted when the allowance of a `spender` for an `owner` is set by + * a call to {approve}. `value` is the new allowance. + */ + event Approval(address indexed owner, address indexed spender, uint256 value); +} + + +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/math/SafeMath.sol + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +/** + * @dev Wrappers over Solidity's arithmetic operations with added overflow + * checks. + * + * Arithmetic operations in Solidity wrap on overflow. This can easily result + * in bugs, because programmers usually assume that an overflow raises an + * error, which is the standard behavior in high level programming languages. + * `SafeMath` restores this intuition by reverting the transaction when an + * operation overflows. + * + * Using this library instead of the unchecked operations eliminates an entire + * class of bugs, so it's recommended to use it always. + */ +library SafeMath { + /** + * @dev Returns the addition of two unsigned integers, with an overflow flag. + * + * _Available since v3.4._ + */ + function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { + uint256 c = a + b; + if (c < a) return (false, 0); + return (true, c); + } + + /** + * @dev Returns the substraction of two unsigned integers, with an overflow flag. + * + * _Available since v3.4._ + */ + function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { + if (b > a) return (false, 0); + return (true, a - b); + } + + /** + * @dev Returns the multiplication of two unsigned integers, with an overflow flag. + * + * _Available since v3.4._ + */ + function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { + // Gas optimization: this is cheaper than requiring 'a' not being zero, but the + // benefit is lost if 'b' is also tested. + // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 + if (a == 0) return (true, 0); + uint256 c = a * b; + if (c / a != b) return (false, 0); + return (true, c); + } + + /** + * @dev Returns the division of two unsigned integers, with a division by zero flag. + * + * _Available since v3.4._ + */ + function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { + if (b == 0) return (false, 0); + return (true, a / b); + } + + /** + * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. + * + * _Available since v3.4._ + */ + function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { + if (b == 0) return (false, 0); + return (true, a % b); + } + + /** + * @dev Returns the addition of two unsigned integers, reverting on + * overflow. + * + * Counterpart to Solidity's `+` operator. + * + * Requirements: + * + * - Addition cannot overflow. + */ + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + require(c >= a, "SafeMath: addition overflow"); + return c; + } + + /** + * @dev Returns the subtraction of two unsigned integers, reverting on + * overflow (when the result is negative). + * + * Counterpart to Solidity's `-` operator. + * + * Requirements: + * + * - Subtraction cannot overflow. + */ + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + require(b <= a, "SafeMath: subtraction overflow"); + return a - b; + } + + /** + * @dev Returns the multiplication of two unsigned integers, reverting on + * overflow. + * + * Counterpart to Solidity's `*` operator. + * + * Requirements: + * + * - Multiplication cannot overflow. + */ + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) return 0; + uint256 c = a * b; + require(c / a == b, "SafeMath: multiplication overflow"); + return c; + } + + /** + * @dev Returns the integer division of two unsigned integers, reverting on + * division by zero. The result is rounded towards zero. + * + * Counterpart to Solidity's `/` operator. Note: this function uses a + * `revert` opcode (which leaves remaining gas untouched) while Solidity + * uses an invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function div(uint256 a, uint256 b) internal pure returns (uint256) { + require(b > 0, "SafeMath: division by zero"); + return a / b; + } + + /** + * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), + * reverting when dividing by zero. + * + * Counterpart to Solidity's `%` operator. This function uses a `revert` + * opcode (which leaves remaining gas untouched) while Solidity uses an + * invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function mod(uint256 a, uint256 b) internal pure returns (uint256) { + require(b > 0, "SafeMath: modulo by zero"); + return a % b; + } + + /** + * @dev Returns the subtraction of two unsigned integers, reverting with custom message on + * overflow (when the result is negative). + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {trySub}. + * + * Counterpart to Solidity's `-` operator. + * + * Requirements: + * + * - Subtraction cannot overflow. + */ + function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + require(b <= a, errorMessage); + return a - b; + } + + /** + * @dev Returns the integer division of two unsigned integers, reverting with custom message on + * division by zero. The result is rounded towards zero. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryDiv}. + * + * Counterpart to Solidity's `/` operator. Note: this function uses a + * `revert` opcode (which leaves remaining gas untouched) while Solidity + * uses an invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + require(b > 0, errorMessage); + return a / b; + } + + /** + * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), + * reverting with custom message when dividing by zero. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryMod}. + * + * Counterpart to Solidity's `%` operator. This function uses a `revert` + * opcode (which leaves remaining gas untouched) while Solidity uses an + * invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + require(b > 0, errorMessage); + return a % b; + } +} + + +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + + + +/** + * @dev Implementation of the {IERC20} interface. + * + * This implementation is agnostic to the way tokens are created. This means + * that a supply mechanism has to be added in a derived contract using {_mint}. + * For a generic mechanism see {ERC20PresetMinterPauser}. + * + * TIP: For a detailed writeup see our guide + * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How + * to implement supply mechanisms]. + * + * We have followed general OpenZeppelin guidelines: functions revert instead + * of returning `false` on failure. This behavior is nonetheless conventional + * and does not conflict with the expectations of ERC20 applications. + * + * Additionally, an {Approval} event is emitted on calls to {transferFrom}. + * This allows applications to reconstruct the allowance for all accounts just + * by listening to said events. Other implementations of the EIP may not emit + * these events, as it isn't required by the specification. + * + * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} + * functions have been added to mitigate the well-known issues around setting + * allowances. See {IERC20-approve}. + */ +contract ERC20 is Context, IERC20 { + using SafeMath for uint256; + + mapping (address => uint256) private _balances; + + mapping (address => mapping (address => uint256)) private _allowances; + + uint256 private _totalSupply; + + string private _name; + string private _symbol; + uint8 private _decimals; + + /** + * @dev Sets the values for {name} and {symbol}, initializes {decimals} with + * a default value of 18. + * + * To select a different value for {decimals}, use {_setupDecimals}. + * + * All three of these values are immutable: they can only be set once during + * construction. + */ + constructor (string memory name_, string memory symbol_) public { + _name = name_; + _symbol = symbol_; + _decimals = 18; + } + + /** + * @dev Returns the name of the token. + */ + function name() public view virtual returns (string memory) { + return _name; + } + + /** + * @dev Returns the symbol of the token, usually a shorter version of the + * name. + */ + function symbol() public view virtual returns (string memory) { + return _symbol; + } + + /** + * @dev Returns the number of decimals used to get its user representation. + * For example, if `decimals` equals `2`, a balance of `505` tokens should + * be displayed to a user as `5,05` (`505 / 10 ** 2`). + * + * Tokens usually opt for a value of 18, imitating the relationship between + * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is + * called. + * + * NOTE: This information is only used for _display_ purposes: it in + * no way affects any of the arithmetic of the contract, including + * {IERC20-balanceOf} and {IERC20-transfer}. + */ + function decimals() public view virtual returns (uint8) { + return _decimals; + } + + /** + * @dev See {IERC20-totalSupply}. + */ + function totalSupply() public view virtual override returns (uint256) { + return _totalSupply; + } + + /** + * @dev See {IERC20-balanceOf}. + */ + function balanceOf(address account) public view virtual override returns (uint256) { + return _balances[account]; + } + + /** + * @dev See {IERC20-transfer}. + * + * Requirements: + * + * - `recipient` cannot be the zero address. + * - the caller must have a balance of at least `amount`. + */ + function transfer(address recipient, uint256 amount) public virtual override returns (bool) { + _transfer(_msgSender(), recipient, amount); + return true; + } + + /** + * @dev See {IERC20-allowance}. + */ + function allowance(address owner, address spender) public view virtual override returns (uint256) { + return _allowances[owner][spender]; + } + + /** + * @dev See {IERC20-approve}. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function approve(address spender, uint256 amount) public virtual override returns (bool) { + _approve(_msgSender(), spender, amount); + return true; + } + + /** + * @dev See {IERC20-transferFrom}. + * + * Emits an {Approval} event indicating the updated allowance. This is not + * required by the EIP. See the note at the beginning of {ERC20}. + * + * Requirements: + * + * - `sender` and `recipient` cannot be the zero address. + * - `sender` must have a balance of at least `amount`. + * - the caller must have allowance for ``sender``'s tokens of at least + * `amount`. + */ + function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { + _transfer(sender, recipient, amount); + _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); + return true; + } + + /** + * @dev Atomically increases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { + _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); + return true; + } + + /** + * @dev Atomically decreases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + * - `spender` must have allowance for the caller of at least + * `subtractedValue`. + */ + function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { + _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); + return true; + } + + /** + * @dev Moves tokens `amount` from `sender` to `recipient`. + * + * This is internal function is equivalent to {transfer}, and can be used to + * e.g. implement automatic token fees, slashing mechanisms, etc. + * + * Emits a {Transfer} event. + * + * Requirements: + * + * - `sender` cannot be the zero address. + * - `recipient` cannot be the zero address. + * - `sender` must have a balance of at least `amount`. + */ + function _transfer(address sender, address recipient, uint256 amount) internal virtual { + require(sender != address(0), "ERC20: transfer from the zero address"); + require(recipient != address(0), "ERC20: transfer to the zero address"); + + _beforeTokenTransfer(sender, recipient, amount); + + _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); + _balances[recipient] = _balances[recipient].add(amount); + emit Transfer(sender, recipient, amount); + } + + /** @dev Creates `amount` tokens and assigns them to `account`, increasing + * the total supply. + * + * Emits a {Transfer} event with `from` set to the zero address. + * + * Requirements: + * + * - `to` cannot be the zero address. + */ + function _mint(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: mint to the zero address"); + + _beforeTokenTransfer(address(0), account, amount); + + _totalSupply = _totalSupply.add(amount); + _balances[account] = _balances[account].add(amount); + emit Transfer(address(0), account, amount); + } + + /** + * @dev Destroys `amount` tokens from `account`, reducing the + * total supply. + * + * Emits a {Transfer} event with `to` set to the zero address. + * + * Requirements: + * + * - `account` cannot be the zero address. + * - `account` must have at least `amount` tokens. + */ + function _burn(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: burn from the zero address"); + + _beforeTokenTransfer(account, address(0), amount); + + _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); + _totalSupply = _totalSupply.sub(amount); + emit Transfer(account, address(0), amount); + } + + /** + * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. + * + * This internal function is equivalent to `approve`, and can be used to + * e.g. set automatic allowances for certain subsystems, etc. + * + * Emits an {Approval} event. + * + * Requirements: + * + * - `owner` cannot be the zero address. + * - `spender` cannot be the zero address. + */ + function _approve(address owner, address spender, uint256 amount) internal virtual { + require(owner != address(0), "ERC20: approve from the zero address"); + require(spender != address(0), "ERC20: approve to the zero address"); + + _allowances[owner][spender] = amount; + emit Approval(owner, spender, amount); + } + + /** + * @dev Sets {decimals} to a value other than the default one of 18. + * + * WARNING: This function should only be called from the constructor. Most + * applications that interact with token contracts will not expect + * {decimals} to ever change, and may work incorrectly if it does. + */ + function _setupDecimals(uint8 decimals_) internal virtual { + _decimals = decimals_; + } + + /** + * @dev Hook that is called before any transfer of tokens. This includes + * minting and burning. + * + * Calling conditions: + * + * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens + * will be to transferred to `to`. + * - when `from` is zero, `amount` tokens will be minted for `to`. + * - when `to` is zero, `amount` of ``from``'s tokens will be burned. + * - `from` and `to` are never both zero. + * + * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. + */ + function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } +} + + +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +/** + * @dev Contract module that helps prevent reentrant calls to a function. + * + * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier + * available, which can be applied to functions to make sure there are no nested + * (reentrant) calls to them. + * + * Note that because there is a single `nonReentrant` guard, functions marked as + * `nonReentrant` may not call one another. This can be worked around by making + * those functions `private`, and then adding `external` `nonReentrant` entry + * points to them. + * + * TIP: If you would like to learn more about reentrancy and alternative ways + * to protect against it, check out our blog post + * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. + */ +abstract contract ReentrancyGuard { + // Booleans are more expensive than uint256 or any type that takes up a full + // word because each write operation emits an extra SLOAD to first read the + // slot's contents, replace the bits taken up by the boolean, and then write + // back. This is the compiler's defense against contract upgrades and + // pointer aliasing, and it cannot be disabled. + + // The values being non-zero value makes deployment a bit more expensive, + // but in exchange the refund on every call to nonReentrant will be lower in + // amount. Since refunds are capped to a percentage of the total + // transaction's gas, it is best to keep them low in cases like this one, to + // increase the likelihood of the full refund coming into effect. + uint256 private constant _NOT_ENTERED = 1; + uint256 private constant _ENTERED = 2; + + uint256 private _status; + + constructor () internal { + _status = _NOT_ENTERED; + } + + /** + * @dev Prevents a contract from calling itself, directly or indirectly. + * Calling a `nonReentrant` function from another `nonReentrant` + * function is not supported. It is possible to prevent this from happening + * by making the `nonReentrant` function external, and make it call a + * `private` function that does the actual work. + */ + modifier nonReentrant() { + // On the first call to nonReentrant, _notEntered will be true + require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); + + // Any calls to nonReentrant after this point will fail + _status = _ENTERED; + + _; + + // By storing the original value once again, a refund is triggered (see + // https://eips.ethereum.org/EIPS/eip-2200) + _status = _NOT_ENTERED; + } +} + + +// File contracts/v0.6/token/IERC677Receiver.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + +interface IERC677Receiver { + function onTokenTransfer( + address sender, + uint value, + bytes memory data + ) + external; +} + + +// File contracts/v0.6/ITypeAndVersion.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0; + +/// @dev Interface contracts should use to report its type and version. +interface ITypeAndVersion { + /** + * @dev Returns type and version for the contract. + * + * The returned string has the following format: + * Try to keep its length less than 32 to take up less contract space. + */ + function typeAndVersion() + external + pure + returns (string memory); +} + + +// File contracts/v0.6/PegSwap.sol + +// SPDX-License-Identifier: MIT +pragma solidity >=0.6.0 <0.8.0; + + + + + + +/** + * @notice This contract provides a one-to-one swap between pairs of tokens. It + * is controlled by an owner who manages liquidity pools for all pairs. Most + * users should only interact with the swap, onTokenTransfer, and + * getSwappableAmount functions. + */ +contract PegSwap is ITypeAndVersion, Owned, ReentrancyGuard { + using SafeMath for uint256; + + event LiquidityUpdated( + uint256 amount, + address indexed source, + address indexed target + ); + event TokensSwapped( + uint256 amount, + address indexed source, + address indexed target, + address indexed caller + ); + event StuckTokensRecovered( + uint256 amount, + address indexed target + ); + + mapping(address => mapping(address => uint256)) private s_swappableAmount; + + /** + * @notice versions: + * + * - PegSwap 0.0.2: added versioning + * - PegSwap 0.0.1: initial release + * + * @inheritdoc ITypeAndVersion + */ + function typeAndVersion() + external + pure + override + virtual + returns (string memory) + { + return "PegSwap 0.0.2"; + } + + /** + * @dev Disallows direct send by setting a default function without the `payable` flag. + */ + fallback() + external + {} + + /** + * @notice deposits tokens from the target of a swap pair but does not return + * any. WARNING: Liquidity added through this method is only retrievable by + * the owner of the contract. + * @param amount count of liquidity being added + * @param source the token that can be swapped for what is being deposited + * @param target the token that can is being deposited for swapping + */ + function addLiquidity( + uint256 amount, + address source, + address target + ) + external + { + bool allowed = owner == msg.sender || _hasLiquidity(source, target); + // By only allowing the owner to add a new pair, we reduce the potential of + // possible attacks mounted by malicious token contracts. + require(allowed, "only owner can add pairs"); + + _addLiquidity(amount, source, target); + + require(ERC20(target).transferFrom(msg.sender, address(this), amount), "transferFrom failed"); + } + + /** + * @notice withdraws tokens from the target of a swap pair. + * @dev Only callable by owner + * @param amount count of liquidity being removed + * @param source the token that can be swapped for what is being removed + * @param target the token that can is being withdrawn from swapping + */ + function removeLiquidity( + uint256 amount, + address source, + address target + ) + external + onlyOwner() + { + _removeLiquidity(amount, source, target); + + require(ERC20(target).transfer(msg.sender, amount), "transfer failed"); + } + + /** + * @notice exchanges the source token for target token + * @param amount count of tokens being swapped + * @param source the token that is being given + * @param target the token that is being taken + */ + function swap( + uint256 amount, + address source, + address target + ) + external + nonReentrant() + { + _removeLiquidity(amount, source, target); + _addLiquidity(amount, target, source); + + emit TokensSwapped(amount, source, target, msg.sender); + + require(ERC20(source).transferFrom(msg.sender, address(this), amount), "transferFrom failed"); + require(ERC20(target).transfer(msg.sender, amount), "transfer failed"); + } + + /** + * @notice send funds that were accidentally transferred back to the owner. This + * allows rescuing of funds, and poses no additional risk as the owner could + * already withdraw any funds intended to be swapped. WARNING: If not called + * correctly this method can throw off the swappable token balances, but that + * can be recovered from by transferring the discrepancy back to the swap. + * @dev Only callable by owner + * @param amount count of tokens being moved + * @param target the token that is being moved + */ + function recoverStuckTokens( + uint256 amount, + address target + ) + external + onlyOwner() + { + emit StuckTokensRecovered(amount, target); + + require(ERC20(target).transfer(msg.sender, amount), "transfer failed"); + } + + /** + * @notice swap tokens in one transaction if the sending token supports ERC677 + * @param sender address that initially initiated the call to the source token + * @param amount count of tokens sent for the swap + * @param targetData address of target token encoded as a bytes array + */ + function onTokenTransfer( + address sender, + uint256 amount, + bytes calldata targetData + ) + external + { + address source = msg.sender; + address target = abi.decode(targetData, (address)); + + _removeLiquidity(amount, source, target); + _addLiquidity(amount, target, source); + + emit TokensSwapped(amount, source, target, sender); + + require(ERC20(target).transfer(sender, amount), "transfer failed"); + } + + /** + * @notice returns the amount of tokens for a pair that are available to swap + * @param source the token that is being given + * @param target the token that is being taken + * @return amount count of tokens available to swap + */ + function getSwappableAmount( + address source, + address target + ) + public + view + returns( + uint256 amount + ) + { + return s_swappableAmount[source][target]; + } + + + // PRIVATE + + function _addLiquidity( + uint256 amount, + address source, + address target + ) + private + { + uint256 newAmount = getSwappableAmount(source, target).add(amount); + s_swappableAmount[source][target] = newAmount; + + emit LiquidityUpdated(newAmount, source, target); + } + + function _removeLiquidity( + uint256 amount, + address source, + address target + ) + private + { + uint256 newAmount = getSwappableAmount(source, target).sub(amount); + s_swappableAmount[source][target] = newAmount; + + emit LiquidityUpdated(newAmount, source, target); + } + + function _hasLiquidity( + address source, + address target + ) + private + view + returns ( + bool hasLiquidity + ) + { + if (getSwappableAmount(source, target) > 0) return true; + if (getSwappableAmount(target, source) > 0) return true; + return false; + } +} diff --git a/contracts-flat/v0.7/LinkTokenChild.sol b/contracts-flat/v0.7/LinkTokenChild.sol new file mode 100644 index 0000000..62decc8 --- /dev/null +++ b/contracts-flat/v0.7/LinkTokenChild.sol @@ -0,0 +1,1307 @@ +// Sources flattened with hardhat v2.2.1 https://hardhat.org + +// File contracts/v0.6/ITypeAndVersion.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0; + +/// @dev Interface contracts should use to report its type and version. +interface ITypeAndVersion { + /** + * @dev Returns type and version for the contract. + * + * The returned string has the following format: + * Try to keep its length less than 32 to take up less contract space. + */ + function typeAndVersion() + external + pure + returns (string memory); +} + + +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +/** + * @dev Interface of the ERC20 standard as defined in the EIP. + */ +interface IERC20 { + /** + * @dev Returns the amount of tokens in existence. + */ + function totalSupply() external view returns (uint256); + + /** + * @dev Returns the amount of tokens owned by `account`. + */ + function balanceOf(address account) external view returns (uint256); + + /** + * @dev Moves `amount` tokens from the caller's account to `recipient`. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transfer(address recipient, uint256 amount) external returns (bool); + + /** + * @dev Returns the remaining number of tokens that `spender` will be + * allowed to spend on behalf of `owner` through {transferFrom}. This is + * zero by default. + * + * This value changes when {approve} or {transferFrom} are called. + */ + function allowance(address owner, address spender) external view returns (uint256); + + /** + * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * IMPORTANT: Beware that changing an allowance with this method brings the risk + * that someone may use both the old and the new allowance by unfortunate + * transaction ordering. One possible solution to mitigate this race + * condition is to first reduce the spender's allowance to 0 and set the + * desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + * Emits an {Approval} event. + */ + function approve(address spender, uint256 amount) external returns (bool); + + /** + * @dev Moves `amount` tokens from `sender` to `recipient` using the + * allowance mechanism. `amount` is then deducted from the caller's + * allowance. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); + + /** + * @dev Emitted when `value` tokens are moved from one account (`from`) to + * another (`to`). + * + * Note that `value` may be zero. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev Emitted when the allowance of a `spender` for an `owner` is set by + * a call to {approve}. `value` is the new allowance. + */ + event Approval(address indexed owner, address indexed spender, uint256 value); +} + + +// File contracts/v0.7/bridge/token/IERC20Child.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + +/* Interface Imports */ + +/// @dev Interface of the child ERC20 token, for use on sidechains and L2 networks. +interface IERC20Child is IERC20 { + /** + * @notice called by bridge gateway when tokens are deposited on root chain + * Should handle deposits by minting the required amount for the recipient + * + * @param recipient an address for whom minting is being done + * @param amount total amount to mint + */ + function mint( + address recipient, + uint256 amount + ) + external; + + /** + * @notice called by bridge gateway when tokens are withdrawn back to root chain + * @dev Should burn recipient's tokens. + * + * @param amount total amount to burn + */ + function burn( + uint256 amount + ) + external; + + /** + * @notice called by bridge gateway when tokens are withdrawn back to root chain + * @dev Should burn recipient's tokens. Sender must have allowance for `accounts`'s tokens of at least `amount`. + * + * @param account an address for whom burning is being done + * @param amount total amount to burn + */ + function burnFrom( + address account, + uint256 amount + ) + external; +} + + +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/utils/Context.sol + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +/* + * @dev Provides information about the current execution context, including the + * sender of the transaction and its data. While these are generally available + * via msg.sender and msg.data, they should not be accessed in such a direct + * manner, since when dealing with GSN meta-transactions the account sending and + * paying for execution may not be the actual sender (as far as an application + * is concerned). + * + * This contract is only required for intermediate, library-like contracts. + */ +abstract contract Context { + function _msgSender() internal view virtual returns (address payable) { + return msg.sender; + } + + function _msgData() internal view virtual returns (bytes memory) { + this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 + return msg.data; + } +} + + +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/math/SafeMath.sol + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + +/** + * @dev Wrappers over Solidity's arithmetic operations with added overflow + * checks. + * + * Arithmetic operations in Solidity wrap on overflow. This can easily result + * in bugs, because programmers usually assume that an overflow raises an + * error, which is the standard behavior in high level programming languages. + * `SafeMath` restores this intuition by reverting the transaction when an + * operation overflows. + * + * Using this library instead of the unchecked operations eliminates an entire + * class of bugs, so it's recommended to use it always. + */ +library SafeMath { + /** + * @dev Returns the addition of two unsigned integers, with an overflow flag. + * + * _Available since v3.4._ + */ + function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { + uint256 c = a + b; + if (c < a) return (false, 0); + return (true, c); + } + + /** + * @dev Returns the substraction of two unsigned integers, with an overflow flag. + * + * _Available since v3.4._ + */ + function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { + if (b > a) return (false, 0); + return (true, a - b); + } + + /** + * @dev Returns the multiplication of two unsigned integers, with an overflow flag. + * + * _Available since v3.4._ + */ + function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { + // Gas optimization: this is cheaper than requiring 'a' not being zero, but the + // benefit is lost if 'b' is also tested. + // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 + if (a == 0) return (true, 0); + uint256 c = a * b; + if (c / a != b) return (false, 0); + return (true, c); + } + + /** + * @dev Returns the division of two unsigned integers, with a division by zero flag. + * + * _Available since v3.4._ + */ + function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { + if (b == 0) return (false, 0); + return (true, a / b); + } + + /** + * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. + * + * _Available since v3.4._ + */ + function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { + if (b == 0) return (false, 0); + return (true, a % b); + } + + /** + * @dev Returns the addition of two unsigned integers, reverting on + * overflow. + * + * Counterpart to Solidity's `+` operator. + * + * Requirements: + * + * - Addition cannot overflow. + */ + function add(uint256 a, uint256 b) internal pure returns (uint256) { + uint256 c = a + b; + require(c >= a, "SafeMath: addition overflow"); + return c; + } + + /** + * @dev Returns the subtraction of two unsigned integers, reverting on + * overflow (when the result is negative). + * + * Counterpart to Solidity's `-` operator. + * + * Requirements: + * + * - Subtraction cannot overflow. + */ + function sub(uint256 a, uint256 b) internal pure returns (uint256) { + require(b <= a, "SafeMath: subtraction overflow"); + return a - b; + } + + /** + * @dev Returns the multiplication of two unsigned integers, reverting on + * overflow. + * + * Counterpart to Solidity's `*` operator. + * + * Requirements: + * + * - Multiplication cannot overflow. + */ + function mul(uint256 a, uint256 b) internal pure returns (uint256) { + if (a == 0) return 0; + uint256 c = a * b; + require(c / a == b, "SafeMath: multiplication overflow"); + return c; + } + + /** + * @dev Returns the integer division of two unsigned integers, reverting on + * division by zero. The result is rounded towards zero. + * + * Counterpart to Solidity's `/` operator. Note: this function uses a + * `revert` opcode (which leaves remaining gas untouched) while Solidity + * uses an invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function div(uint256 a, uint256 b) internal pure returns (uint256) { + require(b > 0, "SafeMath: division by zero"); + return a / b; + } + + /** + * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), + * reverting when dividing by zero. + * + * Counterpart to Solidity's `%` operator. This function uses a `revert` + * opcode (which leaves remaining gas untouched) while Solidity uses an + * invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function mod(uint256 a, uint256 b) internal pure returns (uint256) { + require(b > 0, "SafeMath: modulo by zero"); + return a % b; + } + + /** + * @dev Returns the subtraction of two unsigned integers, reverting with custom message on + * overflow (when the result is negative). + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {trySub}. + * + * Counterpart to Solidity's `-` operator. + * + * Requirements: + * + * - Subtraction cannot overflow. + */ + function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + require(b <= a, errorMessage); + return a - b; + } + + /** + * @dev Returns the integer division of two unsigned integers, reverting with custom message on + * division by zero. The result is rounded towards zero. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryDiv}. + * + * Counterpart to Solidity's `/` operator. Note: this function uses a + * `revert` opcode (which leaves remaining gas untouched) while Solidity + * uses an invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + require(b > 0, errorMessage); + return a / b; + } + + /** + * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), + * reverting with custom message when dividing by zero. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryMod}. + * + * Counterpart to Solidity's `%` operator. This function uses a `revert` + * opcode (which leaves remaining gas untouched) while Solidity uses an + * invalid opcode to revert (consuming all remaining gas). + * + * Requirements: + * + * - The divisor cannot be zero. + */ + function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { + require(b > 0, errorMessage); + return a % b; + } +} + + +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + + + +/** + * @dev Implementation of the {IERC20} interface. + * + * This implementation is agnostic to the way tokens are created. This means + * that a supply mechanism has to be added in a derived contract using {_mint}. + * For a generic mechanism see {ERC20PresetMinterPauser}. + * + * TIP: For a detailed writeup see our guide + * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How + * to implement supply mechanisms]. + * + * We have followed general OpenZeppelin guidelines: functions revert instead + * of returning `false` on failure. This behavior is nonetheless conventional + * and does not conflict with the expectations of ERC20 applications. + * + * Additionally, an {Approval} event is emitted on calls to {transferFrom}. + * This allows applications to reconstruct the allowance for all accounts just + * by listening to said events. Other implementations of the EIP may not emit + * these events, as it isn't required by the specification. + * + * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} + * functions have been added to mitigate the well-known issues around setting + * allowances. See {IERC20-approve}. + */ +contract ERC20 is Context, IERC20 { + using SafeMath for uint256; + + mapping (address => uint256) private _balances; + + mapping (address => mapping (address => uint256)) private _allowances; + + uint256 private _totalSupply; + + string private _name; + string private _symbol; + uint8 private _decimals; + + /** + * @dev Sets the values for {name} and {symbol}, initializes {decimals} with + * a default value of 18. + * + * To select a different value for {decimals}, use {_setupDecimals}. + * + * All three of these values are immutable: they can only be set once during + * construction. + */ + constructor (string memory name_, string memory symbol_) public { + _name = name_; + _symbol = symbol_; + _decimals = 18; + } + + /** + * @dev Returns the name of the token. + */ + function name() public view virtual returns (string memory) { + return _name; + } + + /** + * @dev Returns the symbol of the token, usually a shorter version of the + * name. + */ + function symbol() public view virtual returns (string memory) { + return _symbol; + } + + /** + * @dev Returns the number of decimals used to get its user representation. + * For example, if `decimals` equals `2`, a balance of `505` tokens should + * be displayed to a user as `5,05` (`505 / 10 ** 2`). + * + * Tokens usually opt for a value of 18, imitating the relationship between + * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is + * called. + * + * NOTE: This information is only used for _display_ purposes: it in + * no way affects any of the arithmetic of the contract, including + * {IERC20-balanceOf} and {IERC20-transfer}. + */ + function decimals() public view virtual returns (uint8) { + return _decimals; + } + + /** + * @dev See {IERC20-totalSupply}. + */ + function totalSupply() public view virtual override returns (uint256) { + return _totalSupply; + } + + /** + * @dev See {IERC20-balanceOf}. + */ + function balanceOf(address account) public view virtual override returns (uint256) { + return _balances[account]; + } + + /** + * @dev See {IERC20-transfer}. + * + * Requirements: + * + * - `recipient` cannot be the zero address. + * - the caller must have a balance of at least `amount`. + */ + function transfer(address recipient, uint256 amount) public virtual override returns (bool) { + _transfer(_msgSender(), recipient, amount); + return true; + } + + /** + * @dev See {IERC20-allowance}. + */ + function allowance(address owner, address spender) public view virtual override returns (uint256) { + return _allowances[owner][spender]; + } + + /** + * @dev See {IERC20-approve}. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function approve(address spender, uint256 amount) public virtual override returns (bool) { + _approve(_msgSender(), spender, amount); + return true; + } + + /** + * @dev See {IERC20-transferFrom}. + * + * Emits an {Approval} event indicating the updated allowance. This is not + * required by the EIP. See the note at the beginning of {ERC20}. + * + * Requirements: + * + * - `sender` and `recipient` cannot be the zero address. + * - `sender` must have a balance of at least `amount`. + * - the caller must have allowance for ``sender``'s tokens of at least + * `amount`. + */ + function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { + _transfer(sender, recipient, amount); + _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); + return true; + } + + /** + * @dev Atomically increases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { + _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); + return true; + } + + /** + * @dev Atomically decreases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + * - `spender` must have allowance for the caller of at least + * `subtractedValue`. + */ + function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { + _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); + return true; + } + + /** + * @dev Moves tokens `amount` from `sender` to `recipient`. + * + * This is internal function is equivalent to {transfer}, and can be used to + * e.g. implement automatic token fees, slashing mechanisms, etc. + * + * Emits a {Transfer} event. + * + * Requirements: + * + * - `sender` cannot be the zero address. + * - `recipient` cannot be the zero address. + * - `sender` must have a balance of at least `amount`. + */ + function _transfer(address sender, address recipient, uint256 amount) internal virtual { + require(sender != address(0), "ERC20: transfer from the zero address"); + require(recipient != address(0), "ERC20: transfer to the zero address"); + + _beforeTokenTransfer(sender, recipient, amount); + + _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); + _balances[recipient] = _balances[recipient].add(amount); + emit Transfer(sender, recipient, amount); + } + + /** @dev Creates `amount` tokens and assigns them to `account`, increasing + * the total supply. + * + * Emits a {Transfer} event with `from` set to the zero address. + * + * Requirements: + * + * - `to` cannot be the zero address. + */ + function _mint(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: mint to the zero address"); + + _beforeTokenTransfer(address(0), account, amount); + + _totalSupply = _totalSupply.add(amount); + _balances[account] = _balances[account].add(amount); + emit Transfer(address(0), account, amount); + } + + /** + * @dev Destroys `amount` tokens from `account`, reducing the + * total supply. + * + * Emits a {Transfer} event with `to` set to the zero address. + * + * Requirements: + * + * - `account` cannot be the zero address. + * - `account` must have at least `amount` tokens. + */ + function _burn(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: burn from the zero address"); + + _beforeTokenTransfer(account, address(0), amount); + + _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); + _totalSupply = _totalSupply.sub(amount); + emit Transfer(account, address(0), amount); + } + + /** + * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. + * + * This internal function is equivalent to `approve`, and can be used to + * e.g. set automatic allowances for certain subsystems, etc. + * + * Emits an {Approval} event. + * + * Requirements: + * + * - `owner` cannot be the zero address. + * - `spender` cannot be the zero address. + */ + function _approve(address owner, address spender, uint256 amount) internal virtual { + require(owner != address(0), "ERC20: approve from the zero address"); + require(spender != address(0), "ERC20: approve to the zero address"); + + _allowances[owner][spender] = amount; + emit Approval(owner, spender, amount); + } + + /** + * @dev Sets {decimals} to a value other than the default one of 18. + * + * WARNING: This function should only be called from the constructor. Most + * applications that interact with token contracts will not expect + * {decimals} to ever change, and may work incorrectly if it does. + */ + function _setupDecimals(uint8 decimals_) internal virtual { + _decimals = decimals_; + } + + /** + * @dev Hook that is called before any transfer of tokens. This includes + * minting and burning. + * + * Calling conditions: + * + * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens + * will be to transferred to `to`. + * - when `from` is zero, `amount` tokens will be minted for `to`. + * - when `to` is zero, `amount` of ``from``'s tokens will be burned. + * - `from` and `to` are never both zero. + * + * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. + */ + function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } +} + + +// File vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20Burnable.sol + +// SPDX-License-Identifier: MIT + +pragma solidity >=0.6.0 <0.8.0; + + +/** + * @dev Extension of {ERC20} that allows token holders to destroy both their own + * tokens and those that they have an allowance for, in a way that can be + * recognized off-chain (via event analysis). + */ +abstract contract ERC20Burnable is Context, ERC20 { + using SafeMath for uint256; + + /** + * @dev Destroys `amount` tokens from the caller. + * + * See {ERC20-_burn}. + */ + function burn(uint256 amount) public virtual { + _burn(_msgSender(), amount); + } + + /** + * @dev Destroys `amount` tokens from `account`, deducting from the caller's + * allowance. + * + * See {ERC20-_burn} and {ERC20-allowance}. + * + * Requirements: + * + * - the caller must have allowance for ``accounts``'s tokens of at least + * `amount`. + */ + function burnFrom(address account, uint256 amount) public virtual { + uint256 decreasedAllowance = allowance(account, _msgSender()).sub(amount, "ERC20: burn amount exceeds allowance"); + + _approve(account, _msgSender(), decreasedAllowance); + _burn(account, amount); + } +} + + +// File vendor/smartcontractkit/chainlink/evm-contracts/src/v0.6/Owned.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + +/** + * @title The Owned contract + * @notice A contract with helpers for basic contract ownership. + */ +contract Owned { + + address public owner; + address private pendingOwner; + + event OwnershipTransferRequested( + address indexed from, + address indexed to + ); + event OwnershipTransferred( + address indexed from, + address indexed to + ); + + constructor() public { + owner = msg.sender; + } + + /** + * @dev Allows an owner to begin transferring ownership to a new address, + * pending. + */ + function transferOwnership(address _to) + external + onlyOwner() + { + pendingOwner = _to; + + emit OwnershipTransferRequested(owner, _to); + } + + /** + * @dev Allows an ownership transfer to be completed by the recipient. + */ + function acceptOwnership() + external + { + require(msg.sender == pendingOwner, "Must be proposed owner"); + + address oldOwner = owner; + owner = msg.sender; + pendingOwner = address(0); + + emit OwnershipTransferred(oldOwner, msg.sender); + } + + /** + * @dev Reverts if called by anyone other than the contract owner. + */ + modifier onlyOwner() { + require(msg.sender == owner, "Only callable by owner"); + _; + } + +} + + +// File vendor/smartcontractkit/chainlink/evm-contracts/src/v0.6/interfaces/AccessControllerInterface.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + +interface AccessControllerInterface { + function hasAccess(address user, bytes calldata data) external view returns (bool); +} + + +// File vendor/smartcontractkit/chainlink/evm-contracts/src/v0.6/SimpleWriteAccessController.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + + +/** + * @title SimpleWriteAccessController + * @notice Gives access to accounts explicitly added to an access list by the + * controller's owner. + * @dev does not make any special permissions for externally, see + * SimpleReadAccessController for that. + */ +contract SimpleWriteAccessController is AccessControllerInterface, Owned { + + bool public checkEnabled; + mapping(address => bool) internal accessList; + + event AddedAccess(address user); + event RemovedAccess(address user); + event CheckAccessEnabled(); + event CheckAccessDisabled(); + + constructor() + public + { + checkEnabled = true; + } + + /** + * @notice Returns the access of an address + * @param _user The address to query + */ + function hasAccess( + address _user, + bytes memory + ) + public + view + virtual + override + returns (bool) + { + return accessList[_user] || !checkEnabled; + } + + /** + * @notice Adds an address to the access list + * @param _user The address to add + */ + function addAccess(address _user) + external + onlyOwner() + { + if (!accessList[_user]) { + accessList[_user] = true; + + emit AddedAccess(_user); + } + } + + /** + * @notice Removes an address from the access list + * @param _user The address to remove + */ + function removeAccess(address _user) + external + onlyOwner() + { + if (accessList[_user]) { + accessList[_user] = false; + + emit RemovedAccess(_user); + } + } + + /** + * @notice makes the access check enforced + */ + function enableAccessCheck() + external + onlyOwner() + { + if (!checkEnabled) { + checkEnabled = true; + + emit CheckAccessEnabled(); + } + } + + /** + * @notice makes the access check unenforced + */ + function disableAccessCheck() + external + onlyOwner() + { + if (checkEnabled) { + checkEnabled = false; + + emit CheckAccessDisabled(); + } + } + + /** + * @dev reverts if the caller does not have access + */ + modifier checkAccess() { + require(hasAccess(msg.sender, msg.data), "No access"); + _; + } +} + + +// File contracts/v0.6/token/LinkERC20.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + +abstract contract LinkERC20 is ERC20 { + /** + * @dev Atomically increases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function increaseApproval( + address spender, + uint256 addedValue + ) + public + virtual + returns (bool) + { + return super.increaseAllowance(spender, addedValue); + } + + /** + * @dev Atomically decreases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + * - `spender` must have allowance for the caller of at least + * `subtractedValue`. + */ + function decreaseApproval( + address spender, + uint256 subtractedValue + ) + public + virtual + returns (bool) + { + return super.decreaseAllowance(spender, subtractedValue); + } +} + + +// File contracts/v0.6/token/IERC677.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + +interface IERC677 is IERC20 { + function transferAndCall( + address to, + uint value, + bytes memory data + ) + external + returns (bool success); + + event Transfer( + address indexed from, + address indexed to, + uint value, + bytes data + ); +} + + +// File contracts/v0.6/token/IERC677Receiver.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + +interface IERC677Receiver { + function onTokenTransfer( + address sender, + uint value, + bytes memory data + ) + external; +} + + +// File contracts/v0.6/ERC677.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + + + +abstract contract ERC677 is IERC677, ERC20 { + /** + * @dev transfer token to a contract address with additional data if the recipient is a contact. + * @param to The address to transfer to. + * @param value The amount to be transferred. + * @param data The extra data to be passed to the receiving contract. + */ + function transferAndCall( + address to, + uint value, + bytes memory data + ) + public + override + virtual + returns (bool success) + { + super.transfer(to, value); + emit Transfer(msg.sender, to, value, data); + if (isContract(to)) { + contractFallback(to, value, data); + } + return true; + } + + + // PRIVATE + + function contractFallback( + address to, + uint value, + bytes memory data + ) + private + { + IERC677Receiver receiver = IERC677Receiver(to); + receiver.onTokenTransfer(msg.sender, value, data); + } + + function isContract( + address addr + ) + private + view + returns (bool hasCode) + { + uint length; + assembly { length := extcodesize(addr) } + return length > 0; + } +} + + +// File contracts/v0.6/LinkToken.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + + + +/// @dev LinkToken, an ERC20/ERC677 Chainlink token with 1 billion supply +contract LinkToken is ITypeAndVersion, LinkERC20, ERC677 { + uint private constant TOTAL_SUPPLY = 10**27; + string private constant NAME = 'Chainlink Token'; + string private constant SYMBOL = 'LINK'; + + constructor() + ERC20(NAME, SYMBOL) + public + { + _onCreate(); + } + + /** + * @notice versions: + * + * - LinkToken 0.0.3: added versioning, update name + * - LinkToken 0.0.2: upgraded to solc 0.6 + * - LinkToken 0.0.1: initial release solc 0.4 + * + * @inheritdoc ITypeAndVersion + */ + function typeAndVersion() + external + pure + override + virtual + returns (string memory) + { + return "LinkToken 0.0.3"; + } + + /** + * @dev Hook that is called when this contract is created. + * Useful to override constructor behaviour in child contracts (e.g., LINK bridge tokens). + * @notice Default implementation mints 10**27 tokens to msg.sender + */ + function _onCreate() + internal + virtual + { + _mint(msg.sender, TOTAL_SUPPLY); + } + + /** + * @dev Check if recepient is a valid address before transfer + * @inheritdoc ERC20 + */ + function _transfer( + address sender, + address recipient, + uint256 amount + ) + internal + override + virtual + validAddress(recipient) + { + super._transfer(sender, recipient, amount); + } + + /** + * @dev Check if spender is a valid address before approval + * @inheritdoc ERC20 + */ + function _approve( + address owner, + address spender, + uint256 amount + ) + internal + override + virtual + validAddress(spender) + { + super._approve(owner, spender, amount); + } + + /** + * @dev Check if recipient is valid (not this contract address) + * @param recipient the account we transfer/approve to + */ + modifier validAddress( + address recipient + ) + virtual + { + require(recipient != address(this), "LinkToken: transfer/approve to this contract address"); + _; + } +} + + +// File contracts/v0.7/bridge/token/LinkTokenChild.sol + +// SPDX-License-Identifier: MIT +pragma solidity >0.6.0 <0.8.0; + +/* Interface Imports */ + + +/* Contract Imports */ + + + + +/// @dev Access controlled mintable & burnable LinkToken, for use on sidechains and L2 networks. +contract LinkTokenChild is ITypeAndVersion, IERC20Child, SimpleWriteAccessController, ERC20Burnable, LinkToken { + /** + * @dev Overrides parent contract so no tokens are minted on deployment. + * @inheritdoc LinkToken + */ + function _onCreate() + internal + override + {} + + /** + * @notice versions: + * + * - LinkTokenChild 0.0.1: initial release + * + * @inheritdoc ITypeAndVersion + */ + function typeAndVersion() + external + pure + override(ITypeAndVersion, LinkToken) + virtual + returns (string memory) + { + return "LinkTokenChild 0.0.1"; + } + + /** + * @dev Only callable by account with access (gateway role) + * @inheritdoc IERC20Child + */ + function mint( + address recipient, + uint256 amount + ) + public + override + virtual + checkAccess() + { + _mint(recipient, amount); + } + + /** + * @dev Only callable by account with access (gateway role) + * @inheritdoc ERC20Burnable + */ + function burn( + uint256 amount + ) + public + override(IERC20Child, ERC20Burnable) + virtual + checkAccess() + { + super.burn(amount); + } + + /** + * @dev Only callable by account with access (gateway role) + * @inheritdoc ERC20Burnable + */ + function burnFrom( + address account, + uint256 amount + ) + public + override(IERC20Child, ERC20Burnable) + virtual + checkAccess() + { + super.burnFrom(account, amount); + } + + /// @inheritdoc LinkToken + function _transfer( + address sender, + address recipient, + uint256 amount + ) + internal + override(ERC20, LinkToken) + virtual + { + super._transfer(sender, recipient, amount); + } + + /// @inheritdoc LinkToken + function _approve( + address owner, + address spender, + uint256 amount + ) + internal + override(ERC20, LinkToken) + virtual + { + super._approve(owner, spender, amount); + } +} diff --git a/contracts/v0.6/ERC677Token.sol b/contracts/v0.6/ERC677.sol similarity index 87% rename from contracts/v0.6/ERC677Token.sol rename to contracts/v0.6/ERC677.sol index 83e979e..1001594 100644 --- a/contracts/v0.6/ERC677Token.sol +++ b/contracts/v0.6/ERC677.sol @@ -2,10 +2,10 @@ pragma solidity >0.6.0 <0.8.0; import "../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; -import "./token/ERC677.sol"; -import "./token/ERC677Receiver.sol"; +import "./token/IERC677.sol"; +import "./token/IERC677Receiver.sol"; -abstract contract ERC677Token is ERC20, ERC677 { +abstract contract ERC677 is IERC677, ERC20 { /** * @dev transfer token to a contract address with additional data if the recipient is a contact. * @param to The address to transfer to. @@ -40,7 +40,7 @@ abstract contract ERC677Token is ERC20, ERC677 { ) private { - ERC677Receiver receiver = ERC677Receiver(to); + IERC677Receiver receiver = IERC677Receiver(to); receiver.onTokenTransfer(msg.sender, value, data); } diff --git a/contracts/v0.6/TypeAndVersionInterface.sol b/contracts/v0.6/ITypeAndVersion.sol similarity index 92% rename from contracts/v0.6/TypeAndVersionInterface.sol rename to contracts/v0.6/ITypeAndVersion.sol index 4aee265..91b5412 100644 --- a/contracts/v0.6/TypeAndVersionInterface.sol +++ b/contracts/v0.6/ITypeAndVersion.sol @@ -2,7 +2,7 @@ pragma solidity >0.6.0; /// @dev Interface contracts should use to report its type and version. -interface TypeAndVersionInterface { +interface ITypeAndVersion { /** * @dev Returns type and version for the contract. * diff --git a/contracts/v0.6/LinkToken.sol b/contracts/v0.6/LinkToken.sol index f7905cf..5484012 100644 --- a/contracts/v0.6/LinkToken.sol +++ b/contracts/v0.6/LinkToken.sol @@ -2,11 +2,11 @@ pragma solidity >0.6.0 <0.8.0; import "./token/LinkERC20.sol"; -import "./ERC677Token.sol"; -import "./TypeAndVersionInterface.sol"; +import "./ERC677.sol"; +import "./ITypeAndVersion.sol"; /// @dev LinkToken, an ERC20/ERC677 Chainlink token with 1 billion supply -contract LinkToken is TypeAndVersionInterface, LinkERC20, ERC677Token { +contract LinkToken is ITypeAndVersion, LinkERC20, ERC677 { uint private constant TOTAL_SUPPLY = 10**27; string private constant NAME = 'Chainlink Token'; string private constant SYMBOL = 'LINK'; @@ -25,7 +25,7 @@ contract LinkToken is TypeAndVersionInterface, LinkERC20, ERC677Token { * - LinkToken 0.0.2: upgraded to solc 0.6 * - LinkToken 0.0.1: initial release solc 0.4 * - * @inheritdoc TypeAndVersionInterface + * @inheritdoc ITypeAndVersion */ function typeAndVersion() external diff --git a/contracts/v0.6/PegSwap.sol b/contracts/v0.6/PegSwap.sol index 7b55cbc..706a0bf 100644 --- a/contracts/v0.6/PegSwap.sol +++ b/contracts/v0.6/PegSwap.sol @@ -5,8 +5,8 @@ import "../../vendor/smartcontractkit/chainlink/evm-contracts/src/v0.6/Owned.sol import "../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; import "../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol"; import "../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/math/SafeMath.sol"; -import "./token/ERC677Receiver.sol"; -import "./TypeAndVersionInterface.sol"; +import "./token/IERC677Receiver.sol"; +import "./ITypeAndVersion.sol"; /** * @notice This contract provides a one-to-one swap between pairs of tokens. It @@ -14,7 +14,7 @@ import "./TypeAndVersionInterface.sol"; * users should only interact with the swap, onTokenTransfer, and * getSwappableAmount functions. */ -contract PegSwap is TypeAndVersionInterface, Owned, ReentrancyGuard { +contract PegSwap is ITypeAndVersion, Owned, ReentrancyGuard { using SafeMath for uint256; event LiquidityUpdated( @@ -41,7 +41,7 @@ contract PegSwap is TypeAndVersionInterface, Owned, ReentrancyGuard { * - PegSwap 0.0.2: added versioning * - PegSwap 0.0.1: initial release * - * @inheritdoc TypeAndVersionInterface + * @inheritdoc ITypeAndVersion */ function typeAndVersion() external diff --git a/contracts/v0.6/mocks/LinkReceiver.sol b/contracts/v0.6/mocks/LinkReceiver.sol index 1a98855..4d03afd 100644 --- a/contracts/v0.6/mocks/LinkReceiver.sol +++ b/contracts/v0.6/mocks/LinkReceiver.sol @@ -2,8 +2,9 @@ pragma solidity >0.6.0 <0.8.0; import "../../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; +import "../token/IERC677Receiver.sol"; -contract LinkReceiver { +contract LinkReceiver is IERC677Receiver { bool public fallbackCalled; bool public callDataCalled; uint public tokensReceived; @@ -14,14 +15,13 @@ contract LinkReceiver { bytes memory data ) public - returns (bool) + override { fallbackCalled = true; if (data.length > 0) { (bool success, /* bytes memory returnData */) = address(this).delegatecall(data); require(success, "onTokenTransfer:delegatecall failed"); } - return true; } function callbackWithoutWithdrawl() diff --git a/contracts/v0.6/mocks/StandardTokenMock.sol b/contracts/v0.6/mocks/Token20.sol similarity index 67% rename from contracts/v0.6/mocks/StandardTokenMock.sol rename to contracts/v0.6/mocks/Token20.sol index 9051da6..ed4aa1f 100644 --- a/contracts/v0.6/mocks/StandardTokenMock.sol +++ b/contracts/v0.6/mocks/Token20.sol @@ -4,12 +4,15 @@ pragma solidity >0.6.0 <0.8.0; import "../../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; import "../token/LinkERC20.sol"; -contract StandardTokenMock is ERC20, LinkERC20 { +contract Token20 is LinkERC20 { + string private constant NAME = "Example ERC20 Token"; + string private constant SYMBOL = "ERC20"; + constructor( address initialAccount, uint initialBalance ) - ERC20("StandardTokenMock", "STM") + ERC20(NAME, SYMBOL) public { _mint(initialAccount, initialBalance); diff --git a/contracts/v0.6/mocks/Token677.sol b/contracts/v0.6/mocks/Token677.sol index 0f9de08..4887c9f 100644 --- a/contracts/v0.6/mocks/Token677.sol +++ b/contracts/v0.6/mocks/Token677.sol @@ -2,9 +2,9 @@ pragma solidity >0.6.0 <0.8.0; import "../../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; -import "../ERC677Token.sol"; +import "../ERC677.sol"; -contract Token677 is ERC20, ERC677Token { +contract Token677 is ERC20, ERC677 { string private constant NAME = "Example ERC677 Token"; string private constant SYMBOL = "ERC677"; diff --git a/contracts/v0.6/mocks/Token677ReceiverMock.sol b/contracts/v0.6/mocks/Token677ReceiverMock.sol index e150c6f..1eb10c4 100644 --- a/contracts/v0.6/mocks/Token677ReceiverMock.sol +++ b/contracts/v0.6/mocks/Token677ReceiverMock.sol @@ -1,7 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -contract Token677ReceiverMock { +import "../token/IERC677Receiver.sol"; + +contract Token677ReceiverMock is IERC677Receiver { address public tokenSender; uint public sentValue; bytes public tokenData; @@ -13,6 +15,7 @@ contract Token677ReceiverMock { bytes memory data ) public + override { calledFallback = true; diff --git a/contracts/v0.6/token/ERC677.sol b/contracts/v0.6/token/IERC677.sol similarity index 92% rename from contracts/v0.6/token/ERC677.sol rename to contracts/v0.6/token/IERC677.sol index d4b4b30..c331c99 100644 --- a/contracts/v0.6/token/ERC677.sol +++ b/contracts/v0.6/token/IERC677.sol @@ -3,7 +3,7 @@ pragma solidity >0.6.0 <0.8.0; import "../../../vendor/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; -interface ERC677 is IERC20 { +interface IERC677 is IERC20 { function transferAndCall( address to, uint value, diff --git a/contracts/v0.6/token/ERC677Receiver.sol b/contracts/v0.6/token/IERC677Receiver.sol similarity index 85% rename from contracts/v0.6/token/ERC677Receiver.sol rename to contracts/v0.6/token/IERC677Receiver.sol index 5beadcd..ae937ff 100644 --- a/contracts/v0.6/token/ERC677Receiver.sol +++ b/contracts/v0.6/token/IERC677Receiver.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >0.6.0 <0.8.0; -interface ERC677Receiver { +interface IERC677Receiver { function onTokenTransfer( address sender, uint value, diff --git a/contracts/v0.7/bridge/token/LinkTokenChild.sol b/contracts/v0.7/bridge/token/LinkTokenChild.sol index 2a2be19..d6e75d4 100644 --- a/contracts/v0.7/bridge/token/LinkTokenChild.sol +++ b/contracts/v0.7/bridge/token/LinkTokenChild.sol @@ -2,7 +2,7 @@ pragma solidity >0.6.0 <0.8.0; /* Interface Imports */ -import { TypeAndVersionInterface } from "../../../v0.6/TypeAndVersionInterface.sol"; +import { ITypeAndVersion } from "../../../v0.6/ITypeAndVersion.sol"; import { IERC20Child } from "./IERC20Child.sol"; /* Contract Imports */ @@ -12,7 +12,7 @@ import { SimpleWriteAccessController } from "../../../../vendor/smartcontractkit import { LinkToken } from "../../../v0.6/LinkToken.sol"; /// @dev Access controlled mintable & burnable LinkToken, for use on sidechains and L2 networks. -contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, SimpleWriteAccessController, ERC20Burnable, LinkToken { +contract LinkTokenChild is ITypeAndVersion, IERC20Child, SimpleWriteAccessController, ERC20Burnable, LinkToken { /** * @dev Overrides parent contract so no tokens are minted on deployment. * @inheritdoc LinkToken @@ -27,12 +27,12 @@ contract LinkTokenChild is TypeAndVersionInterface, IERC20Child, SimpleWriteAcce * * - LinkTokenChild 0.0.1: initial release * - * @inheritdoc TypeAndVersionInterface + * @inheritdoc ITypeAndVersion */ function typeAndVersion() external pure - override(TypeAndVersionInterface, LinkToken) + override(ITypeAndVersion, LinkToken) virtual returns (string memory) { diff --git a/test/behavior/ERC677Token.ts b/test/behavior/ERC677.ts similarity index 97% rename from test/behavior/ERC677Token.ts rename to test/behavior/ERC677.ts index 7b91dc3..0eda005 100644 --- a/test/behavior/ERC677Token.ts +++ b/test/behavior/ERC677.ts @@ -5,11 +5,11 @@ import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' import * as h from '../helpers' -export const shouldBehaveLikeERC677Token = ( +export const shouldBehaveLikeERC677 = ( getContractFactory: (name: string, signer?: Signer) => ContractFactory, getReasonStr: (reason: string) => string, ) => { - describe('ERC677Token', () => { + describe('ERC677', () => { let defaultAccount: SignerWithAddress before(async () => { diff --git a/test/v0.4/ERC677Token.test.ts b/test/v0.4/ERC677Token.test.ts index 356ec27..966c234 100644 --- a/test/v0.4/ERC677Token.test.ts +++ b/test/v0.4/ERC677Token.test.ts @@ -1,11 +1,11 @@ import { Signer } from '@ethersproject/abstract-signer' import { getContractFactory, Versions } from '../../src' -import { shouldBehaveLikeERC677Token } from '../behavior/ERC677Token' +import { shouldBehaveLikeERC677 } from '../behavior/ERC677' import * as h from '../helpers' h.describes.HH(`ERC677Token ${Versions.v0_4}`, () => { const _getContractFactory = (name: string, signer?: Signer) => getContractFactory(name, signer, Versions.v0_4) - shouldBehaveLikeERC677Token(_getContractFactory, h.revertShim(Versions.v0_4)) + shouldBehaveLikeERC677(_getContractFactory, h.revertShim(Versions.v0_4)) }) diff --git a/test/v0.6/ERC677Token.test.ts b/test/v0.6/ERC677.test.ts similarity index 65% rename from test/v0.6/ERC677Token.test.ts rename to test/v0.6/ERC677.test.ts index 9e1ea4d..bd9753f 100644 --- a/test/v0.6/ERC677Token.test.ts +++ b/test/v0.6/ERC677.test.ts @@ -4,12 +4,12 @@ ethers.utils.Logger.setLogLevel(ethers.utils.Logger.levels.ERROR) import { Signer } from '@ethersproject/abstract-signer' import { getContractFactory, Versions } from '../../src' -import { shouldBehaveLikeERC677Token } from '../behavior/ERC677Token' +import { shouldBehaveLikeERC677 } from '../behavior/ERC677' import * as h from '../helpers' -h.describes.HH(`ERC677Token ${Versions.v0_6}`, () => { +h.describes.HH(`ERC677 ${Versions.v0_6}`, () => { const _getContractFactory = (name: string, signer?: Signer) => getContractFactory(name, signer, Versions.v0_6) - shouldBehaveLikeERC677Token(_getContractFactory, h.revertShim()) + shouldBehaveLikeERC677(_getContractFactory, h.revertShim()) }) diff --git a/test/v0.6/PegSwap.test.ts b/test/v0.6/PegSwap.test.ts index 82ee285..41ef63e 100644 --- a/test/v0.6/PegSwap.test.ts +++ b/test/v0.6/PegSwap.test.ts @@ -5,11 +5,11 @@ import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' import { PegSwap__factory } from '../../build/types/v0.6/factories/PegSwap__factory' import { Token677__factory } from '../../build/types/v0.6/factories/Token677__factory' -import { StandardTokenMock__factory } from '../../build/types/v0.6/factories/StandardTokenMock__factory' +import { Token20__factory } from '../../build/types/v0.6/factories/Token20__factory' import * as h from '../helpers' -h.describes.HH('ERC677Token', () => { +h.describes.HH('PegSwap', () => { let swap: Contract, owner: SignerWithAddress, base: Contract, @@ -26,7 +26,7 @@ h.describes.HH('ERC677Token', () => { }) beforeEach(async () => { - base = await new StandardTokenMock__factory(owner).deploy(owner.address, totalIssuance) + base = await new Token20__factory(owner).deploy(owner.address, totalIssuance) wrapped = await new Token677__factory(owner).deploy(totalIssuance) swap = await new PegSwap__factory(owner).deploy() diff --git a/test/v0.6/token/BasicToken.test.ts b/test/v0.6/token/BasicToken.test.ts index 047a2a2..410285d 100644 --- a/test/v0.6/token/BasicToken.test.ts +++ b/test/v0.6/token/BasicToken.test.ts @@ -8,7 +8,7 @@ import { shouldBehaveLikeBasicToken } from '../../behavior/token/BasicToken' import * as h from '../../helpers' h.describes.HH(`BasicToken ${Versions.v0_6}`, () => { - const overrides: Record = { BasicTokenMock: 'StandardTokenMock' } + const overrides: Record = { BasicTokenMock: 'Token20' } const _getContractFactory = (name: string, signer?: Signer) => getContractFactory(overrides[name] || name, signer, Versions.v0_6) diff --git a/test/v0.6/token/StandardToken.test.ts b/test/v0.6/token/StandardToken.test.ts index b6e2f5d..fa3d08f 100644 --- a/test/v0.6/token/StandardToken.test.ts +++ b/test/v0.6/token/StandardToken.test.ts @@ -9,7 +9,7 @@ import { shouldBehaveLikeStandardToken } from '../../behavior/token/StandardToke import * as h from '../../helpers' h.describes.HH(`StandardToken ${Versions.v0_6}`, () => { - const overrides: Record = { BasicTokenMock: 'StandardTokenMock' } + const overrides: Record = { BasicTokenMock: 'Token20', StandardTokenMock: 'Token20' } const _getContractFactory = (name: string, signer?: Signer) => getContractFactory(overrides[name] || name, signer, Versions.v0_6) diff --git a/test/v0.7/bridge/token/LinkTokenChild.test.ts b/test/v0.7/bridge/token/LinkTokenChild.test.ts index 0a4a28f..b59708c 100644 --- a/test/v0.7/bridge/token/LinkTokenChild.test.ts +++ b/test/v0.7/bridge/token/LinkTokenChild.test.ts @@ -5,7 +5,7 @@ import { parseEther } from '@ethersproject/units' import { Contract, ContractFactory, Signer } from 'ethers' import { getContractFactory, deploy, Targets, Versions, optimism } from '../../../../src' -import { shouldBehaveLikeERC677Token } from '../../../behavior/ERC677Token' +import { shouldBehaveLikeERC677 } from '../../../behavior/ERC677' import { shouldBehaveLikeLinkToken } from '../../../behavior/LinkToken' import * as h from '../../../helpers' @@ -71,7 +71,7 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { return getContractFactory(name, signer, Versions.v0_6) } - shouldBehaveLikeERC677Token(_getContractFactory, h.revertShim()) + shouldBehaveLikeERC677(_getContractFactory, h.revertShim()) shouldBehaveLikeLinkToken(_getContractFactory, h.revertShim(), EXTRA_PUBLIC_ABI) // TODO: refactor as a behavior that we can test both on Hardhat and Optimism networks From 7c412121de5ad9872abf649887b8687f6884a753 Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Wed, 12 May 2021 16:25:15 +0200 Subject: [PATCH 14/21] Fix the L2 gasPrice to 1 gwei --- src/optimism/index.ts | 5 +++++ test/helpers/optimism/index.ts | 8 ++------ test/v0.7/bridge/token/LinkTokenChild.test.ts | 6 +++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/optimism/index.ts b/src/optimism/index.ts index 15832b9..56a30d5 100644 --- a/src/optimism/index.ts +++ b/src/optimism/index.ts @@ -1 +1,6 @@ export * from '@chainlink/optimism-utils' + +// TODO: Fix ERROR { "reason":"cannot estimate gas; transaction may fail or may require manual gas limit","code":"UNPREDICTABLE_GAS_LIMIT" } +export const TX_OVERRIDES_BUG: any = { + gasLimit: 8_999_999, +} diff --git a/test/helpers/optimism/index.ts b/test/helpers/optimism/index.ts index c6a85f3..897dfe4 100644 --- a/test/helpers/optimism/index.ts +++ b/test/helpers/optimism/index.ts @@ -2,12 +2,6 @@ import * as dotenv from 'dotenv' import { Wallet, providers, utils } from 'ethers' import { optimism } from '../../../src' -// TODO: Fix ERROR { "reason":"cannot estimate gas; transaction may fail or may require manual gas limit","code":"UNPREDICTABLE_GAS_LIMIT" } -export const TX_OVERRIDES_OE_BUG: any = { - gasPrice: utils.parseUnits('1', 'gwei'), - gasLimit: 8_999_999, -} - export const loadEnv = async (envName: string = 'local'): Promise => { // Load env configuration by name dotenv.config({ path: __dirname + `/../../../env/.env.${envName}` }) @@ -24,6 +18,8 @@ export const loadEnv = async (envName: string = 'local'): Promise Promise.resolve(utils.parseUnits('1', 'gwei')) l1Provider.pollingInterval = 10 l2Provider.pollingInterval = 10 diff --git a/test/v0.7/bridge/token/LinkTokenChild.test.ts b/test/v0.7/bridge/token/LinkTokenChild.test.ts index b59708c..814cc9c 100644 --- a/test/v0.7/bridge/token/LinkTokenChild.test.ts +++ b/test/v0.7/bridge/token/LinkTokenChild.test.ts @@ -188,7 +188,7 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { }) it('can NOT mint without access (gateway role)', async () => { - const mintTx = await l2Token.mint(oe.l2Wallet.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) + const mintTx = await l2Token.mint(oe.l2Wallet.address, 100, optimism.TX_OVERRIDES_BUG) // TODO: fetch revert reason // revert: 'No access' await h.txRevert(mintTx.wait()) @@ -201,7 +201,7 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { const addAccessTx1 = await l2Token.addAccess(owner.address) await addAccessTx1.wait() // Mint some tokens as owner/gateway - const mintTx1 = await l2Token.mint(owner.address, 100) + const mintTx1 = await l2Token.mint(owner.address, 100, optimism.TX_OVERRIDES_BUG) await mintTx1.wait() // Assert state expect(await l2Token.balanceOf(owner.address)).to.be.equal(100) @@ -219,7 +219,7 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { const removeAccessTx = await l2Token.removeAccess(owner.address) await removeAccessTx.wait() // Owner mint fails - const mintTx = await l2Token.mint(owner.address, 100, h.optimism.TX_OVERRIDES_OE_BUG) + const mintTx = await l2Token.mint(owner.address, 100, optimism.TX_OVERRIDES_BUG) // TODO: fetch revert reason // revert: 'No access' await h.txRevert(mintTx.wait()) From e317c6688e83dc7a92e8e0c12dbd3a53082acc0c Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Thu, 13 May 2021 11:42:44 +0200 Subject: [PATCH 15/21] Fix tests error handling (avoid TX_OVERRIDES_BUG) --- src/optimism/index.ts | 5 --- test/helpers/index.ts | 36 +------------------ test/v0.7/bridge/token/LinkTokenChild.test.ts | 14 +++----- 3 files changed, 6 insertions(+), 49 deletions(-) diff --git a/src/optimism/index.ts b/src/optimism/index.ts index 56a30d5..15832b9 100644 --- a/src/optimism/index.ts +++ b/src/optimism/index.ts @@ -1,6 +1 @@ export * from '@chainlink/optimism-utils' - -// TODO: Fix ERROR { "reason":"cannot estimate gas; transaction may fail or may require manual gas limit","code":"UNPREDICTABLE_GAS_LIMIT" } -export const TX_OVERRIDES_BUG: any = { - gasLimit: 8_999_999, -} diff --git a/test/helpers/index.ts b/test/helpers/index.ts index 48e6e8e..0a67f8e 100644 --- a/test/helpers/index.ts +++ b/test/helpers/index.ts @@ -43,10 +43,7 @@ export const functionID = (fnSignature: string) => { * @param contract The contract with the actual abi to check the expected exposed methods and getters against. * @param expectedPublic The expected public exposed methods and getters to match against the actual abi. */ -export function publicAbi( - contract: ethers.Contract | ethers.ContractFactory, - expectedPublic: string[], -) { +export function publicAbi(contract: ethers.Contract | ethers.ContractFactory, expectedPublic: string[]) { const actualPublic = [] for (const method of contract.interface.fragments) { if (method.type === 'function') { @@ -64,34 +61,3 @@ export function publicAbi( assert.isAtLeast(index, 0, `#${method} is expected to be public`) } } - -/** - * Check that an evm transaction fails - * - * @param action The asynchronous action to execute, which should cause an evm revert. - */ -export async function txRevert(action: (() => Promise) | Promise) { - try { - if (typeof action === 'function') { - await action() - } else { - await action - } - } catch (e) { - assert(e.message, 'Expected an error to contain a message') - - const ERROR_MESSAGES = ['transaction failed'] - const hasErrored = ERROR_MESSAGES.some((msg) => e.message.includes(msg)) - - assert( - hasErrored, - `expected following error message to include ${ERROR_MESSAGES.join(' or ')}. Got: "${ - e.message - }"`, - ) - return - } - - const err = undefined - assert.exists(err, 'Expected an error to be raised') -} diff --git a/test/v0.7/bridge/token/LinkTokenChild.test.ts b/test/v0.7/bridge/token/LinkTokenChild.test.ts index 814cc9c..0115d4e 100644 --- a/test/v0.7/bridge/token/LinkTokenChild.test.ts +++ b/test/v0.7/bridge/token/LinkTokenChild.test.ts @@ -188,10 +188,8 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { }) it('can NOT mint without access (gateway role)', async () => { - const mintTx = await l2Token.mint(oe.l2Wallet.address, 100, optimism.TX_OVERRIDES_BUG) - // TODO: fetch revert reason - // revert: 'No access' - await h.txRevert(mintTx.wait()) + const mintTx = l2Token.mint(oe.l2Wallet.address, 100) + await expect(mintTx).to.be.revertedWith('No access') }) it('owner can migrate to a new gateway', async () => { @@ -201,7 +199,7 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { const addAccessTx1 = await l2Token.addAccess(owner.address) await addAccessTx1.wait() // Mint some tokens as owner/gateway - const mintTx1 = await l2Token.mint(owner.address, 100, optimism.TX_OVERRIDES_BUG) + const mintTx1 = await l2Token.mint(owner.address, 100) await mintTx1.wait() // Assert state expect(await l2Token.balanceOf(owner.address)).to.be.equal(100) @@ -219,10 +217,8 @@ describe(`LinkTokenChild ${Versions.v0_7}`, () => { const removeAccessTx = await l2Token.removeAccess(owner.address) await removeAccessTx.wait() // Owner mint fails - const mintTx = await l2Token.mint(owner.address, 100, optimism.TX_OVERRIDES_BUG) - // TODO: fetch revert reason - // revert: 'No access' - await h.txRevert(mintTx.wait()) + const mintTx = l2Token.mint(owner.address, 100) + await expect(mintTx).to.be.revertedWith('No access') }) }) }) From 6c37ec6b92a8f02cefafa65d16309a2f7d9dc320 Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Wed, 2 Jun 2021 10:28:15 +0200 Subject: [PATCH 16/21] Revert token name change --- CHANGELOG.md | 1 - contracts-flat/v0.6/LinkToken.sol | 2 +- contracts-flat/v0.7/LinkTokenChild.sol | 2 +- contracts/v0.6/LinkToken.sol | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 056731a..16f1de6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Changed - Migrated to Hardhat and Waffle -- Changed LinkToken v0.6 name from 'ChainLink Token' to 'Chainlink Token' ### Fixed diff --git a/contracts-flat/v0.6/LinkToken.sol b/contracts-flat/v0.6/LinkToken.sol index ec6f357..332f41e 100644 --- a/contracts-flat/v0.6/LinkToken.sol +++ b/contracts-flat/v0.6/LinkToken.sol @@ -819,7 +819,7 @@ pragma solidity >0.6.0 <0.8.0; /// @dev LinkToken, an ERC20/ERC677 Chainlink token with 1 billion supply contract LinkToken is ITypeAndVersion, LinkERC20, ERC677 { uint private constant TOTAL_SUPPLY = 10**27; - string private constant NAME = 'Chainlink Token'; + string private constant NAME = 'ChainLink Token'; string private constant SYMBOL = 'LINK'; constructor() diff --git a/contracts-flat/v0.7/LinkTokenChild.sol b/contracts-flat/v0.7/LinkTokenChild.sol index 62decc8..90a8cc7 100644 --- a/contracts-flat/v0.7/LinkTokenChild.sol +++ b/contracts-flat/v0.7/LinkTokenChild.sol @@ -1101,7 +1101,7 @@ pragma solidity >0.6.0 <0.8.0; /// @dev LinkToken, an ERC20/ERC677 Chainlink token with 1 billion supply contract LinkToken is ITypeAndVersion, LinkERC20, ERC677 { uint private constant TOTAL_SUPPLY = 10**27; - string private constant NAME = 'Chainlink Token'; + string private constant NAME = 'ChainLink Token'; string private constant SYMBOL = 'LINK'; constructor() diff --git a/contracts/v0.6/LinkToken.sol b/contracts/v0.6/LinkToken.sol index 5484012..9e9d370 100644 --- a/contracts/v0.6/LinkToken.sol +++ b/contracts/v0.6/LinkToken.sol @@ -8,7 +8,7 @@ import "./ITypeAndVersion.sol"; /// @dev LinkToken, an ERC20/ERC677 Chainlink token with 1 billion supply contract LinkToken is ITypeAndVersion, LinkERC20, ERC677 { uint private constant TOTAL_SUPPLY = 10**27; - string private constant NAME = 'Chainlink Token'; + string private constant NAME = 'ChainLink Token'; string private constant SYMBOL = 'LINK'; constructor() From 9e0dcd8bbf2d2812e17187b9307cd55a31d34cc5 Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Mon, 12 Jul 2021 16:45:25 +0200 Subject: [PATCH 17/21] Update to latest deps + compiler config bug fix --- hardhat.config.ts | 2 +- package.json | 12 +- yarn.lock | 441 +++++++++++++++++++++++++++++++++++----------- 3 files changed, 342 insertions(+), 113 deletions(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index 43bc3d1..8e86fc1 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -52,7 +52,7 @@ const config: HardhatUserConfig = { solidity: { compilers: Object.values(versions), overrides: { - ...hardhat.generateOverrides(`./contracts/${versionDir}/**/*.sol`, {}, compiler), + ...hardhat.generateOverrides(`contracts/${versionDir}/**/*.sol`, {}, compiler), }, }, ovm: { diff --git a/package.json b/package.json index 38780a9..9dc0761 100644 --- a/package.json +++ b/package.json @@ -32,13 +32,13 @@ "dependencies": {}, "devDependencies": { "@chainlink/optimism-utils": "https://github.com/smartcontractkit/optimism-utils.git", - "@eth-optimism/hardhat-ovm": "^0.1.1", + "@eth-optimism/hardhat-ovm": "^0.2.2", "@ethersproject/bignumber": "^5.1.1", "@ethersproject/units": "^5.1.0", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-waffle": "^2.0.1", - "@typechain/ethers-v5": "^6.0.5", - "@typechain/hardhat": "^1.0.1", + "@typechain/ethers-v5": "^7.0.1", + "@typechain/hardhat": "^2.1.2", "@types/chai": "^4.2.16", "@types/glob": "^7.1.3", "@types/lodash": "^4.14.168", @@ -47,10 +47,10 @@ "@types/yargs": "^16.0.1", "chai": "^4.3.4", "dotenv": "^8.2.0", - "ethereum-waffle": "^3.3.0", + "ethereum-waffle": "^3.4.0", "ethers": "^5.1.4", "glob": "^7.1.6", - "hardhat": "^2.2.1", + "hardhat": "^2.4.3", "hardhat-contract-sizer": "^2.0.3", "hardhat-gas-reporter": "^1.0.4", "lodash": "^4.17.21", @@ -58,7 +58,7 @@ "prettier": "^2.2.1", "ts-generator": "^0.1.1", "ts-node": "^9.1.1", - "typechain": "^4.0.3", + "typechain": "^5.1.1", "typescript": "^4.2.3", "yargs": "^16.2.0" }, diff --git a/yarn.lock b/yarn.lock index 98eda49..bb38efa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -53,25 +53,25 @@ ethers "^5.0.31" lodash "^4.17.21" -"@eth-optimism/hardhat-ovm@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@eth-optimism/hardhat-ovm/-/hardhat-ovm-0.1.1.tgz#1e778c5ef08b12458d13d2c9a67490e982c0b081" - integrity sha512-rEp1BRs26r0BQnjJktvs9d96u2pDpQe3yrgeRKW58JKdW/wPza9RuooE50agtUSdF77QeLwtfzxuU6Ce+615Cg== +"@eth-optimism/hardhat-ovm@^0.2.2": + 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== +"@ethereum-waffle/chai@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.4.0.tgz#2477877410a96bf370edd64df905b04fb9aba9d5" + integrity sha512-GVaFKuFbFUclMkhHtQTDnWBnBQMJc/pAbfbFj/nnIK237WPLsO3KDDslA7m+MNEyTAOFrcc0CyfruAGGXAQw3g== dependencies: - "@ethereum-waffle/provider" "^3.3.1" + "@ethereum-waffle/provider" "^3.4.0" 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== +"@ethereum-waffle/compiler@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.4.0.tgz#68917321212563544913de33e408327745cb1284" + integrity sha512-a2wxGOoB9F1QFRE+Om7Cz2wn+pxM/o7a0a6cbwhaS2lECJgFzeN9xEkVrKahRkF4gEfXGcuORg4msP0Asxezlw== dependencies: "@resolver-engine/imports" "^0.3.3" "@resolver-engine/imports-fs" "^0.3.3" @@ -80,71 +80,71 @@ "@types/node-fetch" "^2.5.5" ethers "^5.0.1" mkdirp "^0.5.1" - node-fetch "^2.6.0" + node-fetch "^2.6.1" 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== +"@ethereum-waffle/ens@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.3.0.tgz#d54f4c8e6b7bcafdc13ab294433f45416b2b2791" + integrity sha512-zVIH/5cQnIEgJPg1aV8+ehYicpcfuAisfrtzYh1pN3UbfeqPylFBeBaIZ7xj/xYzlJjkrek/h9VfULl6EX9Aqw== 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== +"@ethereum-waffle/mock-contract@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.3.0.tgz#7b331f1c95c5d46ee9478f7a6be2869f707d307a" + integrity sha512-apwq0d+2nQxaNwsyLkE+BNMBhZ1MKGV28BtI9WjD3QD2Ztdt1q9II4sKA4VrLTUneYSmkYbJZJxw89f+OpJGyw== 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== +"@ethereum-waffle/provider@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.4.0.tgz#a36a0890d4fbc230e807870c8d3b683594efef00" + integrity sha512-QgseGzpwlzmaHXhqfdzthCGu5a6P1SBF955jQHf/rBkK1Y7gGo2ukt3rXgxgfg/O5eHqRU+r8xw5MzVyVaBscQ== dependencies: - "@ethereum-waffle/ens" "^3.2.4" + "@ethereum-waffle/ens" "^3.3.0" ethers "^5.0.1" ganache-core "^2.13.2" 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.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.4.0.tgz#4747b0c06220ee10cbdfe1cbde8cbb0677b1b074" + integrity sha512-umKAoTX32yXzErpIksPHodFc/5y8bmZMnOl6hWy5Vd8xId4+HKFUOyEiN16Y97zMwFRysRpcrR6wBejfqc6Bmg== dependencies: - "@ethereumjs/common" "^2.2.0" - "@ethereumjs/tx" "^3.1.3" - ethereumjs-util "^7.0.10" - merkle-patricia-tree "^4.1.0" + "@ethereumjs/common" "^2.4.0" + "@ethereumjs/tx" "^3.3.0" + ethereumjs-util "^7.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.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.4.0.tgz#28d712627d3442b2bb1f50dd5acba7cde1021993" + integrity sha512-wAuKLaew6PL52kH8YPXO7PbjjKV12jivRSyHQehkESw4slSLLfYA6Jv7n5YxyT2ajD7KNMPVh7oyF/MU6HcOvg== dependencies: - "@ethereumjs/block" "^3.2.0" - "@ethereumjs/common" "^2.2.0" + "@ethereumjs/block" "^3.4.0" + "@ethereumjs/common" "^2.4.0" "@ethereumjs/ethash" "^1.0.0" debug "^2.2.0" - ethereumjs-util "^7.0.9" + ethereumjs-util "^7.1.0" 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.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.4.0.tgz#2d67f6e6ba22246c5c89104e6b9a119fb3039766" + integrity sha512-UdkhFWzWcJCZVsj1O/H8/oqj/0RVYjLc1OhPjBrQdALAkQHpCp8xXI4WLnuGTADqTdJZww0NtgwG+TRPkXt27w== dependencies: crc-32 "^1.2.0" - ethereumjs-util "^7.0.9" + ethereumjs-util "^7.1.0" "@ethereumjs/ethash@^1.0.0": version "1.0.0" @@ -156,30 +156,30 @@ ethereumjs-util "^7.0.7" miller-rabin "^4.0.0" -"@ethereumjs/tx@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.1.3.tgz#0e4b0ccec2f12b1f0bbbb0e7542dd79d9ec25d87" - integrity sha512-DJBu6cbwYtiPTFeCUR8DF5p+PF0jxs+0rALJZiEcTz2tiRPIEkM72GEbrkGuqzENLCzBrJHT43O0DxSYTqeo+g== +"@ethereumjs/tx@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.0.tgz#14ed1b7fa0f28e1cd61e3ecbdab824205f6a4378" + integrity sha512-yTwEj2lVzSMgE6Hjw9Oa1DZks/nKTWM8Wn4ykDNapBPua2f4nXO3qKnni86O6lgDj5fVNRqbDsD0yy7/XNGDEA== dependencies: - "@ethereumjs/common" "^2.2.0" - ethereumjs-util "^7.0.10" + "@ethereumjs/common" "^2.4.0" + ethereumjs-util "^7.1.0" -"@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== +"@ethereumjs/vm@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.5.0.tgz#d389c5792320ef28c51366a643b8ab9d64e10a31" + integrity sha512-h6Kr6WqKUP8nVuEzCWPWEPrC63v7HFwt3gRuK7CJiyg9S0iWSBKUA/YVD4YgaSVACuxUfWaOBbwV5uGVupm5PQ== dependencies: - "@ethereumjs/block" "^3.2.1" - "@ethereumjs/blockchain" "^5.2.1" - "@ethereumjs/common" "^2.2.0" - "@ethereumjs/tx" "^3.1.3" + "@ethereumjs/block" "^3.4.0" + "@ethereumjs/blockchain" "^5.4.0" + "@ethereumjs/common" "^2.4.0" + "@ethereumjs/tx" "^3.3.0" async-eventemitter "^0.2.4" core-js-pure "^3.0.1" debug "^2.2.0" - ethereumjs-util "^7.0.10" + ethereumjs-util "^7.1.0" 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" @@ -243,6 +243,21 @@ "@ethersproject/properties" "^5.1.0" "@ethersproject/strings" "^5.1.0" +"@ethersproject/abi@^5.1.2": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.0.tgz#a6d63bdb3672f738398846d4279fa6b6c9818242" + integrity sha512-9gU2H+/yK1j2eVMdzm6xvHSnMxk8waIHQGYCZg5uvAyH0rsAzxkModzBSpbAkAuhKFEovC2S9hM4nPuLym8IZw== + dependencies: + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/abstract-provider@5.1.0", "@ethersproject/abstract-provider@^5.0.8", "@ethersproject/abstract-provider@^5.0.9", "@ethersproject/abstract-provider@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz#1f24c56cda5524ef4ed3cfc562a01d6b6f8eeb0b" @@ -256,6 +271,19 @@ "@ethersproject/transactions" "^5.1.0" "@ethersproject/web" "^5.1.0" +"@ethersproject/abstract-provider@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.0.tgz#415331031b0f678388971e1987305244edc04e1d" + integrity sha512-vPBR7HKUBY0lpdllIn7tLIzNN7DrVnhCLKSzY0l8WAwxz686m/aL7ASDzrVxV93GJtIub6N2t4dfZ29CkPOxgA== + dependencies: + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/networks" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/web" "^5.4.0" + "@ethersproject/abstract-signer@5.1.0", "@ethersproject/abstract-signer@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz#744c7a2d0ebe3cc0bc38294d0f53d5ca3f4e49e3" @@ -267,6 +295,17 @@ "@ethersproject/logger" "^5.1.0" "@ethersproject/properties" "^5.1.0" +"@ethersproject/abstract-signer@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.0.tgz#cd5f50b93141ee9f9f49feb4075a0b3eafb57d65" + integrity sha512-AieQAzt05HJZS2bMofpuxMEp81AHufA5D6M4ScKwtolj041nrfIbIi8ciNW7+F59VYxXq+V4c3d568Q6l2m8ew== + dependencies: + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/address@5.1.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.1.0.tgz#3854fd7ebcb6af7597de66f847c3345dae735b58" @@ -278,6 +317,17 @@ "@ethersproject/logger" "^5.1.0" "@ethersproject/rlp" "^5.1.0" +"@ethersproject/address@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" + integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== + dependencies: + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + "@ethersproject/base64@5.1.0", "@ethersproject/base64@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.1.0.tgz#27240c174d0a4e13f6eae87416fd876caf7f42b6" @@ -285,6 +335,13 @@ dependencies: "@ethersproject/bytes" "^5.1.0" +"@ethersproject/base64@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" + integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/basex@5.1.0", "@ethersproject/basex@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.1.0.tgz#80da2e86f9da0cb5ccd446b337364d791f6a131c" @@ -311,6 +368,15 @@ "@ethersproject/logger" "^5.1.0" bn.js "^4.4.0" +"@ethersproject/bignumber@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.0.tgz#be8dea298c0ec71208ee60f0b245be0761217ad9" + integrity sha512-OXUu9f9hO3vGRIPxU40cignXZVaYyfx6j9NNMjebKdnaCL3anCLSSy8/b8d03vY6dh7duCC0kW72GEC4tZer2w== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + bn.js "^4.11.9" + "@ethersproject/bytes@5.1.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.1.0.tgz#55dfa9c4c21df1b1b538be3accb50fb76d5facfd" @@ -318,6 +384,13 @@ dependencies: "@ethersproject/logger" "^5.1.0" +"@ethersproject/bytes@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" + integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== + dependencies: + "@ethersproject/logger" "^5.4.0" + "@ethersproject/constants@5.1.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.1.0.tgz#4e7da6367ea0e9be87585d8b09f3fccf384b1452" @@ -325,6 +398,13 @@ dependencies: "@ethersproject/bignumber" "^5.1.0" +"@ethersproject/constants@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" + integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== + dependencies: + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/contracts@5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.1.0.tgz#f7c3451f1af77e029005733ccab3419d07d23f6b" @@ -371,6 +451,20 @@ "@ethersproject/properties" "^5.1.0" "@ethersproject/strings" "^5.1.0" +"@ethersproject/hash@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" + integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== + dependencies: + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/hdnode@5.1.0", "@ethersproject/hdnode@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.1.0.tgz#2bf5c4048935136ce83e9242e1bd570afcc0bc83" @@ -416,11 +510,24 @@ "@ethersproject/bytes" "^5.1.0" js-sha3 "0.5.7" +"@ethersproject/keccak256@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" + integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== + dependencies: + "@ethersproject/bytes" "^5.4.0" + js-sha3 "0.5.7" + "@ethersproject/logger@5.1.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.1.0.tgz#4cdeeefac029373349d5818f39c31b82cc6d9bbf" integrity sha512-wtUaD1lBX10HBXjjKV9VHCBnTdUaKQnQ2XSET1ezglqLdPdllNOIlLfhyCRqXm5xwcjExVI5ETokOYfjPtaAlw== +"@ethersproject/logger@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9" + integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ== + "@ethersproject/networks@5.1.0", "@ethersproject/networks@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.1.0.tgz#f537290cb05aa6dc5e81e910926c04cfd5814bca" @@ -428,6 +535,13 @@ dependencies: "@ethersproject/logger" "^5.1.0" +"@ethersproject/networks@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.1.tgz#2ce83b8e42aa85216e5d277a7952d97b6ce8d852" + integrity sha512-8SvowCKz9Uf4xC5DTKI8+il8lWqOr78kmiqAVLYT9lzB8aSmJHQMD1GSuJI0CW4hMAnzocpGpZLgiMdzsNSPig== + dependencies: + "@ethersproject/logger" "^5.4.0" + "@ethersproject/pbkdf2@5.1.0", "@ethersproject/pbkdf2@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.1.0.tgz#6b740a85dc780e879338af74856ca2c0d3b24d19" @@ -443,6 +557,13 @@ dependencies: "@ethersproject/logger" "^5.1.0" +"@ethersproject/properties@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.0.tgz#38ba20539b44dcc5d5f80c45ad902017dcdbefe7" + integrity sha512-7jczalGVRAJ+XSRvNA6D5sAwT4gavLq3OXPuV/74o3Rd2wuzSL035IMpIMgei4CYyBdialJMrTqkOnzccLHn4A== + dependencies: + "@ethersproject/logger" "^5.4.0" + "@ethersproject/providers@5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.1.0.tgz#27695a02cfafa370428cde1c7a4abab13afb6a35" @@ -509,6 +630,14 @@ "@ethersproject/bytes" "^5.1.0" "@ethersproject/logger" "^5.1.0" +"@ethersproject/rlp@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" + integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/sha2@5.1.0", "@ethersproject/sha2@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.1.0.tgz#6ca42d1a26884b3e32ffa943fe6494af7211506c" @@ -529,6 +658,18 @@ bn.js "^4.4.0" elliptic "6.5.4" +"@ethersproject/signing-key@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" + integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/solidity@5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.1.0.tgz#095a9c75244edccb26c452c155736d363399b954" @@ -549,6 +690,15 @@ "@ethersproject/constants" "^5.1.0" "@ethersproject/logger" "^5.1.0" +"@ethersproject/strings@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" + integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/transactions@5.1.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.1.0.tgz#da7fcd7e77e23dcfcca317a945f60bc228c61b36" @@ -579,6 +729,21 @@ "@ethersproject/rlp" "^5.1.0" "@ethersproject/signing-key" "^5.1.0" +"@ethersproject/transactions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" + integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== + dependencies: + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + "@ethersproject/signing-key" "^5.4.0" + "@ethersproject/units@5.1.0", "@ethersproject/units@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.1.0.tgz#b6ab3430ebc22adc3cb4839516496f167bee3ad5" @@ -620,6 +785,17 @@ "@ethersproject/properties" "^5.1.0" "@ethersproject/strings" "^5.1.0" +"@ethersproject/web@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" + integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== + dependencies: + "@ethersproject/base64" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/wordlists@5.1.0", "@ethersproject/wordlists@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.1.0.tgz#54eb9ef3a00babbff90ffe124e19c89e07e6aace" @@ -832,16 +1008,23 @@ dependencies: ethers "^5.0.2" -"@typechain/ethers-v5@^6.0.5": - version "6.0.5" - resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-6.0.5.tgz#39bbf9baadd0e8d9efad9d16c60152b7cd9a467b" - integrity sha512-KJh+EWuxmX1a17fQWS1ba8DCYcqK7UpdbqMZZwyfiv9FQfn8ZQJX17anbkCMOSU8TV3EvRuJ/vFEKGzKnpkO8g== +"@typechain/ethers-v5@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-7.0.1.tgz#f9ae60ae5bd9e8ea8a996f66244147e8e74034ae" + integrity sha512-mXEJ7LG0pOYO+MRPkHtbf30Ey9X2KAsU0wkeoVvjQIn7iAY6tB3k3s+82bbmJAUMyENbQ04RDOZit36CgSG6Gg== "@typechain/hardhat@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-1.0.1.tgz#6e53956c15b2aff073413cfcdb3f5339b0a85f2e" integrity sha512-gRETPlvLdN95PIP3PVktEtQSnSMJMWxaxNKI34KFPYEuW4QLLm6UrUCHWmulhB1eUQ1EhYRAda7kEhcJOQ/M1g== +"@typechain/hardhat@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-2.1.2.tgz#daf4c5ffaad21196fef71296968180acc616a9bf" + integrity sha512-8MbYzR/cXP/FqVQ9C6zHLS+5fjTAjox4qniiZIej+pV7WCe1kzw1VHee3NsFq3nZVN8ITC6pTgSth7iL++dZ9g== + dependencies: + fs-extra "^9.1.0" + "@types/abstract-leveldown@*": version "5.0.1" resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-5.0.1.tgz#3c7750d0186b954c7f2d2f6acc8c3c7ba0c3412e" @@ -1347,6 +1530,11 @@ asynckit@^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" @@ -3353,15 +3541,15 @@ ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: 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== +ethereum-waffle@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.4.0.tgz#990b3c6c26db9c2dd943bf26750a496f60c04720" + integrity sha512-ADBqZCkoSA5Isk486ntKJVjFEawIiC+3HxNqpJqONvh3YXBTNiRfXvJtGuAFLXPG91QaqkGqILEHANAo7j/olQ== 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" + "@ethereum-waffle/chai" "^3.4.0" + "@ethereum-waffle/compiler" "^3.4.0" + "@ethereum-waffle/mock-contract" "^3.3.0" + "@ethereum-waffle/provider" "^3.4.0" ethers "^5.0.1" ethereumjs-abi@0.6.5: @@ -3520,7 +3708,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.8, ethereumjs-util@^7.0.9: +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== @@ -3532,6 +3720,18 @@ ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.7, ethereu ethjs-util "0.1.6" rlp "^2.2.4" +ethereumjs-util@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.0.tgz#e2b43a30bfcdbcb432a4eb42bd5f2393209b3fd5" + integrity sha512-kR+vhu++mUDARrsMMhsjjzPduRVAeundLGXucGRHF3B4oEltOUspfgCVco4kckucj3FMlLaZHUl9n7/kdmr6Tw== + 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" @@ -4088,6 +4288,16 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.1.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" @@ -4424,16 +4634,17 @@ hardhat-gas-reporter@^1.0.4: eth-gas-reporter "^0.2.20" sha1 "^1.1.1" -hardhat@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.2.1.tgz#bef0031b994e3f60a88d428f2097195c58cf9ed2" - integrity sha512-8s7MtGXdh0NDwQKdlA8m8QdloVIN1+hv5aFpn0G5Ljj9vfNY9kUoc0a9pMboeGbd9WrS+XrZs5YlsPgQjaW/Tg== - 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" +hardhat@^2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.4.3.tgz#093373b383eacec0d3e7fb223353b2f0cb9f2802" + integrity sha512-xgbnhEnmaKau8xT6wPJlzoyMLAZyxQoElACQQCyEeAY1DURpZbYwjIQUywmL/ZNv3QEl38Yqu/n8mPOc2HXyGA== + dependencies: + "@ethereumjs/block" "^3.4.0" + "@ethereumjs/blockchain" "^5.4.0" + "@ethereumjs/common" "^2.4.0" + "@ethereumjs/tx" "^3.3.0" + "@ethereumjs/vm" "^5.5.0" + "@ethersproject/abi" "^5.1.2" "@sentry/node" "^5.18.1" "@solidity-parser/parser" "^0.11.0" "@types/bn.js" "^5.1.0" @@ -4450,15 +4661,16 @@ hardhat@^2.2.1: eth-sig-util "^2.5.2" ethereum-cryptography "^0.1.2" ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.0.10" + ethereumjs-util "^7.1.0" find-up "^2.1.0" fp-ts "1.19.3" fs-extra "^7.0.1" glob "^7.1.3" + https-proxy-agent "^5.0.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" lodash "^4.17.11" - merkle-patricia-tree "^4.1.0" + merkle-patricia-tree "^4.2.0" mnemonist "^0.38.0" mocha "^7.1.2" node-fetch "^2.6.0" @@ -4473,7 +4685,7 @@ hardhat@^2.2.1: "true-case-path" "^2.2.1" tsort "0.0.1" uuid "^3.3.2" - ws "^7.2.1" + ws "^7.4.6" has-ansi@^2.0.0: version "2.0.0" @@ -4569,7 +4781,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== @@ -5235,6 +5447,15 @@ jsonfile@^4.0.0: 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" @@ -5789,17 +6010,17 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: rlp "^2.0.0" semaphore ">=1.0.1" -merkle-patricia-tree@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.1.0.tgz#010636c4cfd68682df33a2e3186b7d0be7b98b9d" - integrity sha512-vmP1J7FwIpprFMVjjSMM1JAwFce85Q+tp0TYIedYv8qaMh2oLUZ3ETXn9wbgi9S6elySzKzGa+Ai6VNKGEwSlg== +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.8" + ethereumjs-util "^7.0.10" level-mem "^5.0.1" level-ws "^2.0.0" readable-stream "^3.6.0" - rlp "^2.2.3" + rlp "^2.2.4" semaphore-async-await "^1.5.1" methods@~1.1.2: @@ -5928,7 +6149,7 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*: +mkdirp@*, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -8179,18 +8400,21 @@ typechain@^3.0.0: ts-essentials "^6.0.3" ts-generator "^0.1.1" -typechain@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-4.0.3.tgz#e8fcd6c984676858c64eeeb155ea783a10b73779" - integrity sha512-tmoHQeXZWHxIdeLK+i6dU0CU0vOd9Cndr3jFTZIMzak5/YpFZ8XoiYpTZcngygGBqZo+Z1EUmttLbW9KkFZLgQ== +typechain@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-5.1.1.tgz#2e54bee69bb91d21096943deb400aa91638f698e" + integrity sha512-zN4ylCc3gSw2BXy5Zlpmw8q0lf5pQ+U8gYd5WCWRfDVuUkKyZBURz31VLjkPY/nfOr+P6EcwTC4Ae5VNVqrv/g== dependencies: + "@types/prettier" "^2.1.1" command-line-args "^4.0.7" debug "^4.1.1" fs-extra "^7.0.0" + glob "^7.1.6" js-sha3 "^0.8.0" lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.1.2" ts-essentials "^7.0.1" - ts-generator "^0.1.1" typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -8271,6 +8495,11 @@ universalify@^0.1.0: 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" @@ -9088,10 +9317,10 @@ ws@^5.1.1: dependencies: async-limiter "~1.0.0" -ws@^7.2.1: - version "7.4.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" - integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== +ws@^7.4.6: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== xhr-request-promise@^0.1.2: version "0.1.3" From 70fca4fc3f8a2b2b40f7cd842be4d5e3628f6f8c Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Mon, 28 Jun 2021 17:50:14 +0200 Subject: [PATCH 18/21] Add README docs (NOTICE) for LinkTokenChild contract - style changes to LinkTokenChild contract - additional useful documentationn --- README.md | 18 ++++++++++++-- contracts/v0.7/bridge/README.md | 24 ++++++++++++++++++- .../v0.7/bridge/token/LinkTokenChild.sol | 22 ++++++++--------- 3 files changed, 50 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index d321a9b..fa6bd02 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,16 @@ Security audit for [0.4 version of the contracts](./contracts/v0.4/) is availabl The project contains [0.4 contracts](./contracts/v0.4/) that were used for LINK Ethereum Mainnet deployment in 2017. For deployments moving forward, we use the updated [0.6 contracts](./contracts/v0.6/) which use a more recent version of solc and the OpenZeppelin token standards. These updates include a minor ABI change around approval/allowance naming. +To mitigate supply chain attack type of risk, we currently avoid using NPM modules to pull Solidity vendor code, but instead use git submodules. Make sure you pull submodules explicitly: + +```bash +git submodule update --init --recursive +``` + +After submodules are updated, we can run: + ```bash -yarn install +yarn ``` Setup contracts: @@ -30,7 +38,13 @@ Setup contracts: yarn setup ``` -This will compile all versions of the contracts. +**NOTICE:** This will compile all versions of the contracts, but as Hardhat doesn't have robust support for multiple Solidity versions the resulting artifacts will include only final (latest) compiler output. To make sure you compile the specific version please use the specific command: + +Setup v0.6 contracts using Solidity 0.6 compiler: + +```bash +build:contracts:0.6 +``` ## Testing diff --git a/contracts/v0.7/bridge/README.md b/contracts/v0.7/bridge/README.md index e703e70..d347f96 100644 --- a/contracts/v0.7/bridge/README.md +++ b/contracts/v0.7/bridge/README.md @@ -1,3 +1,25 @@ # LINK Token Bridge v0.7 -- `./token/LinkTokenChild.sol`: A mintable & burnable child LinkToken contract to be used on child networks. +- `./token/LinkTokenChild.sol`: A generalized mintable & burnable child LinkToken contract to be used on child networks. + +NOTICE: Current implementation of LinkTokenChild contract requires some additional consideration: + +- Supporting more than one gateway (multiple bridges minting the same token) leaves room for accounting issues. + If we have more than one gateway supported, an additional check needs to exist that limits withdrawals per + gateway to an amount locked on L1, for the specific gateway. Otherwise one can accidentally "burn" tokens + by withdrawing more than locked in L1 (tx will fail on L1). When there is a 1:1 relationship between the + gateway and token, the token itself is an accounting mechanism. For a potential N:1 relationship, a more + sophisticated type of accounting needs to exist. +- Every bridge is unique in the amount of risk it bears, so tokens bridged by different bridges are not 1:1 + the same token, and shouldn't be forced as such. +- Bridges often require an unique interface to be supported by the child network tokens + (e.g. `mint` vs. `deposit`, `burn` vs. `withdraw/unwrap`, etc.). +- Bridges often assume that the child contract they are bridging to is the ERC20 token itself, not a gateway + (intermediate contract) that could help us map from the specific bridge interface to our standard + LinkTokenChild interface. +- Chainlink often needs to launch on a new network before the native bridge interface is defined. +- To support early (before the bridge is defined) Chainlink network launch, we could make an upgradeable + LinkTokenChild contract which would enable us to slightly update the contract interface after the bridge + gets defined, and once online transfer the ownership (bridge gateway role) to the new bridge. + +TODO: Potentially create an upgradeable `LinkTokenChild.sol` and limit gateway support to only one (owner)! diff --git a/contracts/v0.7/bridge/token/LinkTokenChild.sol b/contracts/v0.7/bridge/token/LinkTokenChild.sol index d6e75d4..d6b6935 100644 --- a/contracts/v0.7/bridge/token/LinkTokenChild.sol +++ b/contracts/v0.7/bridge/token/LinkTokenChild.sol @@ -11,17 +11,8 @@ import { ERC20Burnable } from "../../../../vendor/OpenZeppelin/openzeppelin-cont import { SimpleWriteAccessController } from "../../../../vendor/smartcontractkit/chainlink/evm-contracts/src/v0.6/SimpleWriteAccessController.sol"; import { LinkToken } from "../../../v0.6/LinkToken.sol"; -/// @dev Access controlled mintable & burnable LinkToken, for use on sidechains and L2 networks. +/// @dev A generalized mintable & burnable child LinkToken contract to be used on child networks. contract LinkTokenChild is ITypeAndVersion, IERC20Child, SimpleWriteAccessController, ERC20Burnable, LinkToken { - /** - * @dev Overrides parent contract so no tokens are minted on deployment. - * @inheritdoc LinkToken - */ - function _onCreate() - internal - override - {} - /** * @notice versions: * @@ -86,6 +77,15 @@ contract LinkTokenChild is ITypeAndVersion, IERC20Child, SimpleWriteAccessContro super.burnFrom(account, amount); } + /** + * @dev Overrides parent contract so no tokens are minted on deployment. + * @inheritdoc LinkToken + */ + function _onCreate() + internal + override + {} + /// @inheritdoc LinkToken function _transfer( address sender, @@ -111,4 +111,4 @@ contract LinkTokenChild is ITypeAndVersion, IERC20Child, SimpleWriteAccessContro { super._approve(owner, spender, amount); } -} +} \ No newline at end of file From 07371f68d5e0e318b2a072557c3adfabbfe60a9a Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Thu, 15 Jul 2021 16:05:46 +0200 Subject: [PATCH 19/21] Remove Optimism 1 gwei fixed price --- test/helpers/optimism/index.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/helpers/optimism/index.ts b/test/helpers/optimism/index.ts index 897dfe4..a178988 100644 --- a/test/helpers/optimism/index.ts +++ b/test/helpers/optimism/index.ts @@ -1,5 +1,5 @@ import * as dotenv from 'dotenv' -import { Wallet, providers, utils } from 'ethers' +import { Wallet, providers } from 'ethers' import { optimism } from '../../../src' export const loadEnv = async (envName: string = 'local'): Promise => { @@ -18,8 +18,6 @@ export const loadEnv = async (envName: string = 'local'): Promise Promise.resolve(utils.parseUnits('1', 'gwei')) l1Provider.pollingInterval = 10 l2Provider.pollingInterval = 10 From 426f174ef43ee4560e4a133be27c026738c18f7f Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Thu, 15 Jul 2021 19:27:20 +0200 Subject: [PATCH 20/21] Update to latest upstream changes --- package.json | 7 +- src/contract-defs.ts | 7 +- yarn.lock | 2217 ++++++++++-------------------------------- 3 files changed, 526 insertions(+), 1705 deletions(-) diff --git a/package.json b/package.json index 9dc0761..c5bb994 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,9 @@ "devDependencies": { "@chainlink/optimism-utils": "https://github.com/smartcontractkit/optimism-utils.git", "@eth-optimism/hardhat-ovm": "^0.2.2", - "@ethersproject/bignumber": "^5.1.1", - "@ethersproject/units": "^5.1.0", + "@ethersproject/bignumber": "^5.4.0", + "@ethersproject/providers": "^5.4.0", + "@ethersproject/units": "^5.4.0", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-waffle": "^2.0.1", "@typechain/ethers-v5": "^7.0.1", @@ -48,7 +49,7 @@ "chai": "^4.3.4", "dotenv": "^8.2.0", "ethereum-waffle": "^3.4.0", - "ethers": "^5.1.4", + "ethers": "^5.4.0", "glob": "^7.1.6", "hardhat": "^2.4.3", "hardhat-contract-sizer": "^2.0.3", diff --git a/src/contract-defs.ts b/src/contract-defs.ts index e428d38..9037afc 100644 --- a/src/contract-defs.ts +++ b/src/contract-defs.ts @@ -1,7 +1,6 @@ import * as path from 'path' import * as glob from 'glob' -import { ethers, ContractFactory, Signer, Contract } from 'ethers' -import { Interface } from 'ethers/lib/utils' +import { ContractFactory, ContractInterface, Signer, Contract } from 'ethers' import { Targets, Versions } from '.' export const getContractDefinition = ( @@ -26,9 +25,9 @@ export const getContractInterface = ( name: string, version?: Versions, target: Targets = Targets.EVM, -): Interface => { +): ContractInterface => { const definition = getContractDefinition(name, version, target) - return new ethers.utils.Interface(definition.abi) + return definition.abi } export const getContractFactory = ( diff --git a/yarn.lock b/yarn.lock index bb38efa..02d30f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,14 +4,14 @@ "@chainlink/optimism-utils@https://github.com/smartcontractkit/optimism-utils.git": version "0.0.1-alpha" - resolved "https://github.com/smartcontractkit/optimism-utils.git#cb921b34f6ae85158d22bead38211840c8790543" + resolved "https://github.com/smartcontractkit/optimism-utils.git#e2e04375595d8cca2a5e812e520d9414fb7d6000" dependencies: - "@eth-optimism/contracts" "^0.2.11" - "@eth-optimism/core-utils" "^0.4.1" - "@ethersproject/bignumber" "^5.1.1" - "@ethersproject/providers" "^5.1.2" - "@ethersproject/units" "^5.1.0" - ethers "^5.1.4" + "@eth-optimism/contracts" "^0.4.1" + "@eth-optimism/core-utils" "^0.4.7" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/providers" "^5.4.0" + "@ethersproject/units" "^5.4.0" + ethers "^5.4.0" "@ensdomains/ens@^0.4.4": version "0.4.5" @@ -29,25 +29,30 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== -"@eth-optimism/contracts@^0.2.11": - version "0.2.11" - resolved "https://registry.yarnpkg.com/@eth-optimism/contracts/-/contracts-0.2.11.tgz#4f8f1eb6b3bf2b399f018a92827f96d4e446da04" - integrity sha512-vbjFXgvikvaijDPZmmg9VthsjTCwsFtFskCqGWr7WjF+f+JtYk6aWLkM2udKuXArEy9WLjBN2JLWD3e43a+udQ== +"@eth-optimism/contracts@^0.4.1": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@eth-optimism/contracts/-/contracts-0.4.5.tgz#182d5a4097b7aa61c9b4e1289ccd173c44fde4e3" + integrity sha512-GB7V0KuhvBRI533C2r3Zf/DYKewpwRc0YaIDdYzBKIsMEupZWbXvLzKMX9ZFsoqw+knPhYFEXnTZlT/09VGThg== dependencies: - "@eth-optimism/core-utils" "^0.4.1" + "@eth-optimism/core-utils" "^0.5.1" "@ethersproject/abstract-provider" "^5.0.8" + "@ethersproject/abstract-signer" "^5.1.0" "@ethersproject/contracts" "^5.0.5" - "@openzeppelin/contracts" "^3.3.0" - "@openzeppelin/contracts-upgradeable" "^3.3.0" - "@typechain/hardhat" "^1.0.1" - ganache-core "^2.13.2" glob "^7.1.6" - solidity-coverage "^0.7.16" -"@eth-optimism/core-utils@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.4.1.tgz#acb8b8b197834ad00499d37621934f4c446d1bb3" - integrity sha512-aKgAQ9/dfFFLeRy5rF/7v93lvTM7tSYTIdcIadOAFOUG9QnxEH7RpIrWMpwT5S/u4H9iUEyvzTP7RRiZU68pJw== +"@eth-optimism/core-utils@^0.4.7": + version "0.4.7" + resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.4.7.tgz#3eeec47222ccfad1d8f3d9539a368c9283b2df1e" + integrity sha512-H+NdGAyx6w4Wmjy3PaTF7xnBEeKh8BZK1jfU6yy52sd2E0oH7ABd0H5FtRY2SLPTH8AZ8gAgOhrTNoqE0Mlktw== + dependencies: + "@ethersproject/abstract-provider" "^5.0.9" + ethers "^5.0.31" + lodash "^4.17.21" + +"@eth-optimism/core-utils@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.5.1.tgz#bdf9c08e95e09a72fed52b6665811d364d32ecb3" + integrity sha512-wRFcZgqY5jdXrObiQwmysE+M7gk7h7f6LLOyAKBr2lukWpP4WrBIaPlLvIMJvjCdmcPiFzsi6DOnCA7P2806YA== dependencies: "@ethersproject/abstract-provider" "^5.0.9" ethers "^5.0.31" @@ -198,52 +203,7 @@ "@ethersproject/properties" ">=5.0.0-beta.131" "@ethersproject/strings" ">=5.0.0-beta.130" -"@ethersproject/abi@5.0.7": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" - integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== - dependencies: - "@ethersproject/address" "^5.0.4" - "@ethersproject/bignumber" "^5.0.7" - "@ethersproject/bytes" "^5.0.4" - "@ethersproject/constants" "^5.0.4" - "@ethersproject/hash" "^5.0.4" - "@ethersproject/keccak256" "^5.0.3" - "@ethersproject/logger" "^5.0.5" - "@ethersproject/properties" "^5.0.3" - "@ethersproject/strings" "^5.0.4" - -"@ethersproject/abi@5.1.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.1.0.tgz#d582c9f6a8e8192778b5f2c991ce19d7b336b0c5" - integrity sha512-N/W9Sbn1/C6Kh2kuHRjf/hX6euMK4+9zdJRBB8sDWmihVntjUAfxbusGZKzDQD8i3szAHhTz8K7XADV5iFNfJw== - dependencies: - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@ethersproject/abi@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.1.2.tgz#a8e75cd0455e6dc9e4861c3d1c22bbe436c1d775" - integrity sha512-uMhoQVPX0UtfzTpekYQSEUcJGDgsJ25ifz+SV6PDETWaUFhcR8RNgb1QPTASP13inW8r6iy0/Xdq9D5hK2pNvA== - dependencies: - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@ethersproject/abi@^5.1.2": +"@ethersproject/abi@5.4.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.0.tgz#a6d63bdb3672f738398846d4279fa6b6c9818242" integrity sha512-9gU2H+/yK1j2eVMdzm6xvHSnMxk8waIHQGYCZg5uvAyH0rsAzxkModzBSpbAkAuhKFEovC2S9hM4nPuLym8IZw== @@ -258,20 +218,7 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/abstract-provider@5.1.0", "@ethersproject/abstract-provider@^5.0.8", "@ethersproject/abstract-provider@^5.0.9", "@ethersproject/abstract-provider@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz#1f24c56cda5524ef4ed3cfc562a01d6b6f8eeb0b" - integrity sha512-8dJUnT8VNvPwWhYIau4dwp7qe1g+KgdRm4XTWvjkI9gAT2zZa90WF5ApdZ3vl1r6NDmnn6vUVvyphClRZRteTQ== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/networks" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/web" "^5.1.0" - -"@ethersproject/abstract-provider@^5.4.0": +"@ethersproject/abstract-provider@5.4.0", "@ethersproject/abstract-provider@^5.0.8", "@ethersproject/abstract-provider@^5.0.9", "@ethersproject/abstract-provider@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.0.tgz#415331031b0f678388971e1987305244edc04e1d" integrity sha512-vPBR7HKUBY0lpdllIn7tLIzNN7DrVnhCLKSzY0l8WAwxz686m/aL7ASDzrVxV93GJtIub6N2t4dfZ29CkPOxgA== @@ -284,18 +231,7 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/web" "^5.4.0" -"@ethersproject/abstract-signer@5.1.0", "@ethersproject/abstract-signer@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz#744c7a2d0ebe3cc0bc38294d0f53d5ca3f4e49e3" - integrity sha512-qQDMkjGZSSJSKl6AnfTgmz9FSnzq3iEoEbHTYwjDlEAv+LNP7zd4ixCcVWlWyk+2siud856M5CRhAmPdupeN9w== - dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - -"@ethersproject/abstract-signer@^5.4.0": +"@ethersproject/abstract-signer@5.4.0", "@ethersproject/abstract-signer@^5.1.0", "@ethersproject/abstract-signer@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.0.tgz#cd5f50b93141ee9f9f49feb4075a0b3eafb57d65" integrity sha512-AieQAzt05HJZS2bMofpuxMEp81AHufA5D6M4ScKwtolj041nrfIbIi8ciNW7+F59VYxXq+V4c3d568Q6l2m8ew== @@ -306,18 +242,7 @@ "@ethersproject/logger" "^5.4.0" "@ethersproject/properties" "^5.4.0" -"@ethersproject/address@5.1.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.1.0.tgz#3854fd7ebcb6af7597de66f847c3345dae735b58" - integrity sha512-rfWQR12eHn2cpstCFS4RF7oGjfbkZb0oqep+BfrT+gWEGWG2IowJvIsacPOvzyS1jhNF4MQ4BS59B04Mbovteg== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - -"@ethersproject/address@^5.4.0": +"@ethersproject/address@5.4.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== @@ -328,47 +253,22 @@ "@ethersproject/logger" "^5.4.0" "@ethersproject/rlp" "^5.4.0" -"@ethersproject/base64@5.1.0", "@ethersproject/base64@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.1.0.tgz#27240c174d0a4e13f6eae87416fd876caf7f42b6" - integrity sha512-npD1bLvK4Bcxz+m4EMkx+F8Rd7CnqS9DYnhNu0/GlQBXhWjvfoAZzk5HJ0f1qeyp8d+A86PTuzLOGOXf4/CN8g== - dependencies: - "@ethersproject/bytes" "^5.1.0" - -"@ethersproject/base64@^5.4.0": +"@ethersproject/base64@5.4.0", "@ethersproject/base64@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== dependencies: "@ethersproject/bytes" "^5.4.0" -"@ethersproject/basex@5.1.0", "@ethersproject/basex@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.1.0.tgz#80da2e86f9da0cb5ccd446b337364d791f6a131c" - integrity sha512-vBKr39bum7DDbOvkr1Sj19bRMEPA4FnST6Utt6xhDzI7o7L6QNkDn2yrCfP+hnvJGhZFKtLygWwqlTBZoBXYLg== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - -"@ethersproject/bignumber@5.1.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.1.0.tgz#966a013a5d871fc03fc67bf33cd8aadae627f0fd" - integrity sha512-wUvQlhTjPjFXIdLPOuTrFeQmSa6Wvls1bGXQNQWvB/SEn1NsTCE8PmumIEZxmOPjSHl1eV2uyHP5jBm5Cgj92Q== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - bn.js "^4.4.0" - -"@ethersproject/bignumber@5.1.1", "@ethersproject/bignumber@^5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.1.1.tgz#84812695253ccbc639117f7ac49ee1529b68e637" - integrity sha512-AVz5iqz7+70RIqoQTznsdJ6DOVBYciNlvO+AlQmPTB6ofCvoihI9bQdr6wljsX+d5W7Yc4nyvQvP4JMzg0Agig== +"@ethersproject/basex@5.4.0", "@ethersproject/basex@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.4.0.tgz#0a2da0f4e76c504a94f2b21d3161ed9438c7f8a6" + integrity sha512-J07+QCVJ7np2bcpxydFVf/CuYo9mZ7T73Pe7KQY4c1lRlrixMeblauMxHXD0MPwFmUHZIILDNViVkykFBZylbg== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - bn.js "^4.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/properties" "^5.4.0" -"@ethersproject/bignumber@^5.4.0": +"@ethersproject/bignumber@5.4.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.0.tgz#be8dea298c0ec71208ee60f0b245be0761217ad9" integrity sha512-OXUu9f9hO3vGRIPxU40cignXZVaYyfx6j9NNMjebKdnaCL3anCLSSy8/b8d03vY6dh7duCC0kW72GEC4tZer2w== @@ -377,81 +277,37 @@ "@ethersproject/logger" "^5.4.0" bn.js "^4.11.9" -"@ethersproject/bytes@5.1.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.1.0.tgz#55dfa9c4c21df1b1b538be3accb50fb76d5facfd" - integrity sha512-sGTxb+LVjFxJcJeUswAIK6ncgOrh3D8c192iEJd7mLr95V6du119rRfYT/b87WPkZ5I3gRBUYIYXtdgCWACe8g== - dependencies: - "@ethersproject/logger" "^5.1.0" - -"@ethersproject/bytes@^5.4.0": +"@ethersproject/bytes@5.4.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/constants@5.1.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.1.0.tgz#4e7da6367ea0e9be87585d8b09f3fccf384b1452" - integrity sha512-0/SuHrxc8R8k+JiLmJymxHJbojUDWBQqO+b+XFdwaP0jGzqC09YDy/CAlSZB6qHsBifY8X3I89HcK/oMqxRdBw== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - -"@ethersproject/constants@^5.4.0": +"@ethersproject/constants@5.4.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== dependencies: "@ethersproject/bignumber" "^5.4.0" -"@ethersproject/contracts@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.1.0.tgz#f7c3451f1af77e029005733ccab3419d07d23f6b" - integrity sha512-dvTMs/4XGSc57cYOW0KjgX1NdTujUu7mNb6PQdJWg08m9ULzPyGZuBkFJnijBcp6vTOCQ59RwjboWgNWw393og== - dependencies: - "@ethersproject/abi" "^5.1.0" - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - -"@ethersproject/contracts@5.1.1", "@ethersproject/contracts@^5.0.5": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.1.1.tgz#c66cb6d618fcbd73e20a6b808e8f768b2b781d0b" - integrity sha512-6WwktLJ0DFWU8pDkgH4IGttQHhQN4SnwKFu9h+QYVe48VGWtbDu4W8/q/7QA1u/HWlWMrKxqawPiZUJj0UMvOw== - dependencies: - "@ethersproject/abi" "^5.1.0" - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - -"@ethersproject/hash@5.1.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.1.0.tgz#40961d64837d57f580b7b055e0d74174876d891e" - integrity sha512-fNwry20yLLPpnRRwm3fBL+2ksgO+KMadxM44WJmRIoTKzy4269+rbq9KFoe2LTqq2CXJM2CE70beGaNrpuqflQ== +"@ethersproject/contracts@5.4.0", "@ethersproject/contracts@^5.0.5": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.0.tgz#e05fe6bd33acc98741e27d553889ec5920078abb" + integrity sha512-hkO3L3IhS1Z3ZtHtaAG/T87nQ7KiPV+/qnvutag35I0IkiQ8G3ZpCQ9NNOpSCzn4pWSW4CfzmtE02FcqnLI+hw== dependencies: - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@ethersproject/hash@^5.4.0": + "@ethersproject/abi" "^5.4.0" + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + +"@ethersproject/hash@5.4.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== @@ -465,52 +321,44 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/hdnode@5.1.0", "@ethersproject/hdnode@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.1.0.tgz#2bf5c4048935136ce83e9242e1bd570afcc0bc83" - integrity sha512-obIWdlujloExPHWJGmhJO/sETOOo7SEb6qemV4f8kyFoXg+cJK+Ta9SvBrj7hsUK85n3LZeZJZRjjM7oez3Clg== +"@ethersproject/hdnode@5.4.0", "@ethersproject/hdnode@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.4.0.tgz#4bc9999b9a12eb5ce80c5faa83114a57e4107cac" + integrity sha512-pKxdS0KAaeVGfZPp1KOiDLB0jba11tG6OP1u11QnYfb7pXn6IZx0xceqWRr6ygke8+Kw74IpOoSi7/DwANhy8Q== dependencies: - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/basex" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/pbkdf2" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/wordlists" "^5.1.0" - -"@ethersproject/json-wallets@5.1.0", "@ethersproject/json-wallets@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.1.0.tgz#bba7af2e520e8aea4d3829d80520db5d2e4fb8d2" - integrity sha512-00n2iBy27w8zrGZSiU762UOVuzCQZxUZxopsZC47++js6xUFuI74DHcJ5K/2pddlF1YBskvmMuboEu1geK8mnA== + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/basex" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/pbkdf2" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/signing-key" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wordlists" "^5.4.0" + +"@ethersproject/json-wallets@5.4.0", "@ethersproject/json-wallets@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.4.0.tgz#2583341cfe313fc9856642e8ace3080154145e95" + integrity sha512-igWcu3fx4aiczrzEHwG1xJZo9l1cFfQOWzTqwRw/xcvxTk58q4f9M7cjh51EKphMHvrJtcezJ1gf1q1AUOfEQQ== dependencies: - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/hdnode" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/pbkdf2" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/hdnode" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/pbkdf2" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/random" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.1.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.1.0.tgz#fdcd88fb13bfef4271b225cdd8dec4d315c8e60e" - integrity sha512-vrTB1W6AEYoadww5c9UyVJ2YcSiyIUTNDRccZIgwTmFFoSHwBtcvG1hqy9RzJ1T0bMdATbM9Hfx2mJ6H0i7Hig== - dependencies: - "@ethersproject/bytes" "^5.1.0" - js-sha3 "0.5.7" - -"@ethersproject/keccak256@^5.4.0": +"@ethersproject/keccak256@5.4.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== @@ -518,119 +366,67 @@ "@ethersproject/bytes" "^5.4.0" js-sha3 "0.5.7" -"@ethersproject/logger@5.1.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.1.0.tgz#4cdeeefac029373349d5818f39c31b82cc6d9bbf" - integrity sha512-wtUaD1lBX10HBXjjKV9VHCBnTdUaKQnQ2XSET1ezglqLdPdllNOIlLfhyCRqXm5xwcjExVI5ETokOYfjPtaAlw== - -"@ethersproject/logger@^5.4.0": +"@ethersproject/logger@5.4.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9" integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ== -"@ethersproject/networks@5.1.0", "@ethersproject/networks@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.1.0.tgz#f537290cb05aa6dc5e81e910926c04cfd5814bca" - integrity sha512-A/NIrIED/G/IgU1XUukOA3WcFRxn2I4O5GxsYGA5nFlIi+UZWdGojs85I1VXkR1gX9eFnDXzjE6OtbgZHjFhIA== - dependencies: - "@ethersproject/logger" "^5.1.0" - -"@ethersproject/networks@^5.4.0": +"@ethersproject/networks@5.4.1", "@ethersproject/networks@^5.4.0": version "5.4.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.1.tgz#2ce83b8e42aa85216e5d277a7952d97b6ce8d852" integrity sha512-8SvowCKz9Uf4xC5DTKI8+il8lWqOr78kmiqAVLYT9lzB8aSmJHQMD1GSuJI0CW4hMAnzocpGpZLgiMdzsNSPig== dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/pbkdf2@5.1.0", "@ethersproject/pbkdf2@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.1.0.tgz#6b740a85dc780e879338af74856ca2c0d3b24d19" - integrity sha512-B8cUbHHTgs8OtgJIafrRcz/YPDobVd5Ru8gTnShOiM9EBuFpYHQpq3+8iQJ6pyczDu6HP/oc/njAsIBhwFZYew== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - -"@ethersproject/properties@5.1.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.1.0.tgz#9484bd6def16595fc6e4bdc26f29dff4d3f6ac42" - integrity sha512-519KKTwgmH42AQL3+GFV3SX6khYEfHsvI6v8HYejlkigSDuqttdgVygFTDsGlofNFchhDwuclrxQnD5B0YLNMg== +"@ethersproject/pbkdf2@5.4.0", "@ethersproject/pbkdf2@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.4.0.tgz#ed88782a67fda1594c22d60d0ca911a9d669641c" + integrity sha512-x94aIv6tiA04g6BnazZSLoRXqyusawRyZWlUhKip2jvoLpzJuLb//KtMM6PEovE47pMbW+Qe1uw+68ameJjB7g== dependencies: - "@ethersproject/logger" "^5.1.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" -"@ethersproject/properties@^5.4.0": +"@ethersproject/properties@5.4.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.0.tgz#38ba20539b44dcc5d5f80c45ad902017dcdbefe7" integrity sha512-7jczalGVRAJ+XSRvNA6D5sAwT4gavLq3OXPuV/74o3Rd2wuzSL035IMpIMgei4CYyBdialJMrTqkOnzccLHn4A== dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/providers@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.1.0.tgz#27695a02cfafa370428cde1c7a4abab13afb6a35" - integrity sha512-FjpZL2lSXrYpQDg2fMjugZ0HjQD9a+2fOOoRhhihh+Z+qi/xZ8vIlPoumrEP1DzIG4DBV6liUqLNqnX2C6FIAA== - dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/basex" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/networks" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/web" "^5.1.0" - bech32 "1.1.4" - ws "7.2.3" - -"@ethersproject/providers@5.1.2", "@ethersproject/providers@^5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.1.2.tgz#4e4459698903f911402fe91aa7544eb07f3921ed" - integrity sha512-GqsS8rd+eyd4eNkcNgzZ4l9IRULBPUZa7JPnv22k4MHflMobUseyhfbVnmoN5bVNNkOxjV1IPTw9i0sV1hwdpg== +"@ethersproject/providers@5.4.1", "@ethersproject/providers@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.1.tgz#654267b563b833046b9c9647647cfc8267cb93b4" + integrity sha512-p06eiFKz8nu/5Ju0kIX024gzEQIgE5pvvGrBCngpyVjpuLtUIWT3097Agw4mTn9/dEA0FMcfByzFqacBMSgCVg== dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/basex" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/networks" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/web" "^5.1.0" + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/basex" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/networks" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/random" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/web" "^5.4.0" bech32 "1.1.4" - ws "7.2.3" + ws "7.4.6" -"@ethersproject/random@5.1.0", "@ethersproject/random@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.1.0.tgz#0bdff2554df03ebc5f75689614f2d58ea0d9a71f" - integrity sha512-+uuczLQZ4+no9cP6TCoCktXx0u2YbNaRT7lRkSt12d8263e702f0u+4JnnRO8Qmv5nylWJebnqCHzyxP+6mLqw== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - -"@ethersproject/rlp@5.1.0", "@ethersproject/rlp@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.1.0.tgz#700f4f071c27fa298d3c1d637485fefe919dd084" - integrity sha512-vDTyHIwNPrecy55gKGZ47eJZhBm8LLBxihzi5ou+zrSvYTpkSTWRcKUlXFDFQVwfWB+P5PGyERAdiDEI76clxw== +"@ethersproject/random@5.4.0", "@ethersproject/random@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.4.0.tgz#9cdde60e160d024be39cc16f8de3b9ce39191e16" + integrity sha512-pnpWNQlf0VAZDEOVp1rsYQosmv2o0ITS/PecNw+mS2/btF8eYdspkN0vIXrCMtkX09EAh9bdk8GoXmFXM1eAKw== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" -"@ethersproject/rlp@^5.4.0": +"@ethersproject/rlp@5.4.0", "@ethersproject/rlp@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== @@ -638,27 +434,16 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/logger" "^5.4.0" -"@ethersproject/sha2@5.1.0", "@ethersproject/sha2@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.1.0.tgz#6ca42d1a26884b3e32ffa943fe6494af7211506c" - integrity sha512-+fNSeZRstOpdRJpdGUkRONFCaiAqWkc91zXgg76Nlp5ndBQE25Kk5yK8gCPG1aGnCrbariiPr5j9DmrYH78JCA== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - hash.js "1.1.3" - -"@ethersproject/signing-key@5.1.0", "@ethersproject/signing-key@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.1.0.tgz#6eddfbddb6826b597b9650e01acf817bf8991b9c" - integrity sha512-tE5LFlbmdObG8bY04NpuwPWSRPgEswfxweAI1sH7TbP0ml1elNfqcq7ii/3AvIN05i5U0Pkm3Tf8bramt8MmLw== +"@ethersproject/sha2@5.4.0", "@ethersproject/sha2@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.4.0.tgz#c9a8db1037014cbc4e9482bd662f86c090440371" + integrity sha512-siheo36r1WD7Cy+bDdE1BJ8y0bDtqXCOxRMzPa4bV1TGt/eTUUt03BHoJNB6reWJD8A30E/pdJ8WFkq+/uz4Gg== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - bn.js "^4.4.0" - elliptic "6.5.4" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + hash.js "1.1.7" -"@ethersproject/signing-key@^5.4.0": +"@ethersproject/signing-key@5.4.0", "@ethersproject/signing-key@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== @@ -670,27 +455,18 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.1.0.tgz#095a9c75244edccb26c452c155736d363399b954" - integrity sha512-kPodsGyo9zg1g9XSXp1lGhFaezBAUUsAUB1Vf6OkppE5Wksg4Et+x3kG4m7J/uShDMP2upkJtHNsIBK2XkVpKQ== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@ethersproject/strings@5.1.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.1.0.tgz#0f95a56c3c8c9d5510a06c241d818779750e2da5" - integrity sha512-perBZy0RrmmL0ejiFGUOlBVjMsUceqLut3OBP3zP96LhiJWWbS8u1NqQVgN4/Gyrbziuda66DxiQocXhsvx+Sw== +"@ethersproject/solidity@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec" + integrity sha512-XFQTZ7wFSHOhHcV1DpcWj7VXECEiSrBuv7JErJvB9Uo+KfCdc3QtUZV+Vjh/AAaYgezUEKbCtE6Khjm44seevQ== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/strings" "^5.4.0" -"@ethersproject/strings@^5.4.0": +"@ethersproject/strings@5.4.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== @@ -699,37 +475,7 @@ "@ethersproject/constants" "^5.4.0" "@ethersproject/logger" "^5.4.0" -"@ethersproject/transactions@5.1.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.1.0.tgz#da7fcd7e77e23dcfcca317a945f60bc228c61b36" - integrity sha512-s10crRLZEA0Bgv6FGEl/AKkTw9f+RVUrlWDX1rHnD4ZncPFeiV2AJr4nT7QSUhxJdFPvjyKRDb3nEH27dIqcPQ== - dependencies: - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" - -"@ethersproject/transactions@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.1.1.tgz#5a6bbb25fb062c3cc75eb0db12faefcdd3870813" - integrity sha512-Nwgbp09ttIVN0OoUBatCXaHxR7grWPHbozJN8v7AXDLrl6nnOIBEMDh+yJTnosSQlFhcyjfTGGN+Mx6R8HdvMw== - dependencies: - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" - -"@ethersproject/transactions@^5.4.0": +"@ethersproject/transactions@5.4.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== @@ -744,48 +490,37 @@ "@ethersproject/rlp" "^5.4.0" "@ethersproject/signing-key" "^5.4.0" -"@ethersproject/units@5.1.0", "@ethersproject/units@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.1.0.tgz#b6ab3430ebc22adc3cb4839516496f167bee3ad5" - integrity sha512-isvJrx6qG0nKWfxsGORNjmOq/nh175fStfvRTA2xEKrGqx8JNJY83fswu4GkILowfriEM/eYpretfJnfzi7YhA== +"@ethersproject/units@5.4.0", "@ethersproject/units@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.4.0.tgz#d57477a4498b14b88b10396062c8cbbaf20c79fe" + integrity sha512-Z88krX40KCp+JqPCP5oPv5p750g+uU6gopDYRTBGcDvOASh6qhiEYCRatuM/suC4S2XW9Zz90QI35MfSrTIaFg== dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" -"@ethersproject/wallet@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.1.0.tgz#134c5816eaeaa586beae9f9ff67891104a2c9a15" - integrity sha512-ULmUtiYQLTUS+y3DgkLzRhFEK10zMwmjOthnjiZxee3Q/MVwr3rnmuAnXIUZrPjna6hvUPnyRIdW5XuF0Ld0YQ== - dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/hdnode" "^5.1.0" - "@ethersproject/json-wallets" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/wordlists" "^5.1.0" - -"@ethersproject/web@5.1.0", "@ethersproject/web@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.1.0.tgz#ed56bbe4e3d9a8ffe3b2ed882da5c62d3551381b" - integrity sha512-LTeluWgTq04+RNqAkVhpydPcRZK/kKxD2Vy7PYGrAD27ABO9kTqTBKwiOuzTyAHKUQHfnvZbXmxBXJAGViSDcA== +"@ethersproject/wallet@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.4.0.tgz#fa5b59830b42e9be56eadd45a16a2e0933ad9353" + integrity sha512-wU29majLjM6AjCjpat21mPPviG+EpK7wY1+jzKD0fg3ui5fgedf2zEu1RDgpfIMsfn8fJHJuzM4zXZ2+hSHaSQ== dependencies: - "@ethersproject/base64" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/hdnode" "^5.4.0" + "@ethersproject/json-wallets" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/random" "^5.4.0" + "@ethersproject/signing-key" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wordlists" "^5.4.0" -"@ethersproject/web@^5.4.0": +"@ethersproject/web@5.4.0", "@ethersproject/web@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== @@ -796,37 +531,16 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/wordlists@5.1.0", "@ethersproject/wordlists@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.1.0.tgz#54eb9ef3a00babbff90ffe124e19c89e07e6aace" - integrity sha512-NsUCi/TpBb+oTFvMSccUkJGtp5o/84eOyqp5q5aBeiNBSLkYyw21znRn9mAmxZgySpxgruVgKbaapnYPgvctPQ== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@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== - dependencies: - "@nodelib/fs.stat" "2.0.4" - 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.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== +"@ethersproject/wordlists@5.4.0", "@ethersproject/wordlists@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.4.0.tgz#f34205ec3bbc9e2c49cadaee774cf0b07e7573d7" + integrity sha512-FemEkf6a+EBKEPxlzeVgUaVSodU7G0Na89jqKjmWMlDB0tomoU8RlEMgUvXyqtrg8N4cwpLh8nyRnm1Nay1isA== dependencies: - "@nodelib/fs.scandir" "2.1.4" - fastq "^1.6.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" "@nomiclabs/hardhat-ethers@^2.0.2": version "2.0.2" @@ -841,16 +555,6 @@ "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" -"@openzeppelin/contracts-upgradeable@^3.3.0": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-3.4.1.tgz#38dfdfa86fda0a088c6fcdebe6870cfaf897b471" - integrity sha512-wBGlUzEkOxcj/ghtcF2yKc8ZYh+PTUtm1mK38zoENulJ6aplij7eH8quo3lMugfzPJy+V6V5qI8QhdQmCn7hkQ== - -"@openzeppelin/contracts@^3.3.0": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.1.tgz#03c891fec7f93be0ae44ed74e57a122a38732ce7" - integrity sha512-cUriqMauq1ylzP2TxePNdPqkwI7Le3Annh4K9rrpvKfSBB/bdW+Iu1ihBaTIABTAAJ85LmKL5SSPPL9ry8d1gQ== - "@resolver-engine/core@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.3.3.tgz#590f77d85d45bc7ecc4e06c654f41345db6ca967" @@ -961,15 +665,29 @@ 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== "@solidity-parser/parser@^0.12.0": - version "0.12.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.12.1.tgz#10ce249890d32ba500e9ce449e60a2b26b11be7a" - integrity sha512-ikxVpwskNxEp2fvYS1BdRImnevHmM97zdPFBa1cVtjtNpoqCm/EmljATTZk0s9G/zsN5ZbPf9OAIAW4gbBJiRA== + version "0.12.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.12.2.tgz#1afad367cb29a2ed8cdd4a3a62701c2821fb578f" + integrity sha512-d7VS7PxgMosm5NyaiyDJRNID5pK4AWj1l64Dbz0147hJgy5k2C0/ZiKK/9u5c5K+HRUVHmp+RMvGEjGh84oA5Q== "@szmarczak/http-timer@^1.1.2": version "1.1.2" @@ -978,29 +696,6 @@ dependencies: defer-to-connect "^1.0.1" -"@truffle/error@^0.0.14": - version "0.0.14" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.14.tgz#59683b5407bede7bddf16d80dc5592f9c5e5fa05" - integrity sha512-utJx+SZYoMqk8wldQG4gCVKhV8GwMJbWY7sLXFT/D8wWZTnE2peX7URFJh/cxkjTRCO328z1s2qewkhyVsu2HA== - -"@truffle/interface-adapter@^0.4.23": - version "0.4.23" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.23.tgz#9b474bb0455df1f02d72bf5a08f3d70b6fef875d" - integrity sha512-mfpwY25Apx36WHHNJMNHWyDQVFZoZYNQ43rOwr/n+5gAMxke7+D7+IR9UW4kuO/Jp0+2848UxMdRV+oqm017kQ== - dependencies: - bn.js "^5.1.3" - ethers "^4.0.32" - web3 "1.3.5" - -"@truffle/provider@^0.2.24": - version "0.2.30" - resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.30.tgz#c2f7d84e698e1d200f48d1349683ee5dee693808" - integrity sha512-5ScTbWsrm7zmQjw020T41U30/kYA1LppXAtaeucUGN2jvPrSwlh0aTL18makbqftTx1NRuYKw7C8wO4jCKQSUQ== - dependencies: - "@truffle/error" "^0.0.14" - "@truffle/interface-adapter" "^0.4.23" - web3 "1.3.5" - "@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" @@ -1013,11 +708,6 @@ resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-7.0.1.tgz#f9ae60ae5bd9e8ea8a996f66244147e8e74034ae" integrity sha512-mXEJ7LG0pOYO+MRPkHtbf30Ey9X2KAsU0wkeoVvjQIn7iAY6tB3k3s+82bbmJAUMyENbQ04RDOZit36CgSG6Gg== -"@typechain/hardhat@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-1.0.1.tgz#6e53956c15b2aff073413cfcdb3f5339b0a85f2e" - integrity sha512-gRETPlvLdN95PIP3PVktEtQSnSMJMWxaxNKI34KFPYEuW4QLLm6UrUCHWmulhB1eUQ1EhYRAda7kEhcJOQ/M1g== - "@typechain/hardhat@^2.1.2": version "2.1.2" resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-2.1.2.tgz#daf4c5ffaad21196fef71296968180acc616a9bf" @@ -1026,9 +716,9 @@ fs-extra "^9.1.0" "@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== + version "5.0.2" + resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-5.0.2.tgz#ee81917fe38f770e29eec8139b6f16ee4a8b0a5f" + integrity sha512-+jA1XXF3jsz+Z7FcuiNqgK53hTa/luglT2TyTpKPqoYbxVY+mCPF22Rm+q3KPBrMHJwNXFrTViHszBOfU4vftQ== "@types/bn.js@*", "@types/bn.js@^5.1.0": version "5.1.0" @@ -1045,14 +735,14 @@ "@types/node" "*" "@types/chai@*", "@types/chai@^4.2.16": - 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== + version "4.2.21" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.21.tgz#9f35a5643129df132cf3b5c1ec64046ea1af0650" + integrity sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg== "@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" - integrity sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0= + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== dependencies: "@types/node" "*" @@ -1063,36 +753,42 @@ dependencies: "@types/node" "*" -"@types/glob@^7.1.1", "@types/glob@^7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== +"@types/glob@^7.1.3": + version "7.1.4" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" + integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== dependencies: "@types/minimatch" "*" "@types/node" "*" +"@types/level-errors@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" + integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== + "@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== + version "4.3.3" + resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" + integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== dependencies: "@types/abstract-leveldown" "*" + "@types/level-errors" "*" "@types/node" "*" "@types/lodash@^4.14.168": - version "4.14.168" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" - integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== + version "4.14.171" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.171.tgz#f01b3a5fe3499e34b622c362a46a609fdb23573b" + integrity sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg== "@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== + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== "@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/mkdirp@^0.5.2": version "0.5.2" @@ -1102,32 +798,37 @@ "@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== + version "8.2.3" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.3.tgz#bbeb55fbc73f28ea6de601fbfa4613f58d785323" + integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== "@types/node-fetch@^2.5.5": - version "2.5.9" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.9.tgz#c04a12115aa436f189e39579272b305e477621b4" - integrity sha512-6cUyqLK+JBsATAqNQqk10jURoBFrzfRCDh4kaYxg8ivKhRPIpyBgAvuY7zM/3E4AwsYJSh5HCHBCJRM4DsCTaQ== + version "2.5.11" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.11.tgz#ce22a2e65fc8999f4dbdb7ddbbcf187d755169e4" + integrity sha512-2upCKaqVZETDRb8A2VTaRymqFBEgH8u6yr96b/u3+1uQEPDRo3mJLEiPk7vdXBHRtjwkjqzFYMJXrt0Z9QsYjQ== dependencies: "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@^14.14.37": - version "14.14.37" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" - integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== +"@types/node@*": + version "16.3.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.2.tgz#655432817f83b51ac869c2d51dd8305fb8342e16" + integrity sha512-jJs9ErFLP403I+hMLGnqDRWT0RYKSvArxuBVh2veudHV7ifEC1WAmjJADacZ7mRbA2nWgHtn8xyECMAot0SkAw== "@types/node@^10.0.3": - version "10.17.58" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.58.tgz#10682f6016fd866725c36d22ce6bbbd029bf4545" - integrity sha512-Dn5RBxLohjdHFj17dVVw3rtrZAeXeWg+LQfvxDIW/fdPkSiuQk7h3frKMYtsQhtIW42wkErDcy9UMVxhGW4O7w== + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== "@types/node@^12.12.6": - version "12.20.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.7.tgz#1cb61fd0c85cb87e728c43107b5fd82b69bc9ef8" - integrity sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA== + version "12.20.16" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.16.tgz#1acf34f6456208f495dac0434dd540488d17f991" + integrity sha512-6CLxw83vQf6DKqXxMPwl8qpF8I7THFZuIwLt4TnNsumxkp1VsRZWT8txQxncT/Rl2UojTsFzWgDG4FRMwafrlA== + +"@types/node@^14.14.37": + version "14.17.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.5.tgz#b59daf6a7ffa461b5648456ca59050ba8e40ed54" + integrity sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA== "@types/node@^8.0.0": version "8.10.66" @@ -1142,14 +843,14 @@ "@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== + version "2.3.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.2.tgz#fc8c2825e4ed2142473b4a81064e6e081463d1b3" + integrity sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog== "@types/qs@^6.2.31": - version "6.9.6" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" - integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA== + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== "@types/resolve@^0.0.8": version "0.0.8" @@ -1159,9 +860,9 @@ "@types/node" "*" "@types/secp256k1@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.1.tgz#fb3aa61a1848ad97d7425ff9dcba784549fca5a4" - integrity sha512-+ZjSA8ELlOp8SlKi0YLB2tz9d5iPNEmOBd+8Rz21wTMdaXQIa9b6TEnD6l5qKOCypE7FSyPyck12qZJxSDNoog== + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== dependencies: "@types/node" "*" @@ -1174,21 +875,16 @@ "@types/sinon" "*" "@types/sinon@*": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-9.0.11.tgz#7af202dda5253a847b511c929d8b6dda170562eb" - integrity sha512-PwP4UY33SeeVKodNE37ZlOsR9cReypbMJOhZ7BVE0lB+Hix3efCOxiJWiE5Ia+yL9Cn2Ch72EjFTRze8RZsNtg== + version "10.0.2" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.2.tgz#f360d2f189c0fd433d14aeb97b9d705d7e4cc0e4" + integrity sha512-BHn8Bpkapj8Wdfxvh2jWIUoaYB/9/XhsL0oOvBfRagJtKlSl9NWPcFOz2lRukI9szwGxFtYZCTejJSqsGDbdmw== dependencies: - "@types/sinonjs__fake-timers" "*" - -"@types/sinonjs__fake-timers@*": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz#3a84cf5ec3249439015e14049bd3161419bf9eae" - integrity sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg== + "@sinonjs/fake-timers" "^7.1.0" "@types/underscore@*": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.0.tgz#bb33549f8f89957fdf959c16e4c1d0eaa5bf985d" - integrity sha512-ipNAQLgRnG0EWN1cTtfdVHp5AyTW/PAMJ1PxLN4bAKSHbusSZbj48mIHiydQpN7GgQrYqwfnvZ573OVfJm5Nzg== + version "1.11.3" + resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.3.tgz#d6734f3741ce41b2630018c6b61c6745f6188c07" + integrity sha512-Fl1TX1dapfXyDqFg2ic9M+vlXRktcPJrc4PR7sRc7sdVrjavg/JHlbUXBt8qWWqhJrmSqg3RNAkAPRiOYw6Ahw== "@types/web3@1.0.19": version "1.0.19" @@ -1199,14 +895,14 @@ "@types/underscore" "*" "@types/yargs-parser@*": - version "20.2.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" - integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== "@types/yargs@^16.0.1": - version "16.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.1.tgz#5fc5d41f69762e00fbecbc8d4bf9dea47d8726f4" - integrity sha512-x4HABGLyzr5hKUzBC9dvjciOTm11WVH1NWonNjGgxapnTHu5SWUqyqn0zQ6Re0yQU0lsQ6ztLCoMAKDGZflyxA== + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== dependencies: "@types/yargs-parser" "*" @@ -1215,16 +911,6 @@ resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -1290,11 +976,6 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -address@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== - adm-zip@^0.4.16: version "0.4.16" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" @@ -1327,11 +1008,6 @@ ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - ansi-colors@3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" @@ -1388,10 +1064,10 @@ ansi-styles@^4.0.0: dependencies: color-convert "^2.0.1" -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== +anymatch@~3.1.1, anymatch@~3.1.2: + 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" @@ -1437,21 +1113,11 @@ array-back@^2.0.0: dependencies: typical "^2.6.1" -array-filter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" - integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= - 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-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -1506,11 +1172,6 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@1.x, 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.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" @@ -1518,6 +1179,11 @@ async@2.6.2: 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" @@ -1540,13 +1206,6 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -available-typed-arrays@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" - integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== - dependencies: - array-filter "^1.0.0" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2084,9 +1743,9 @@ backoff@^2.5.0: precond "0.2" balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + 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" @@ -2161,9 +1820,9 @@ bip66@^1.1.5: safe-buffer "^5.0.1" blakejs@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" - integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= + version "1.1.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702" + integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg== bluebird@^3.5.0, bluebird@^3.5.2: version "3.7.2" @@ -2180,7 +1839,7 @@ 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@^ 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, bn.js@^5.1.3: +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== @@ -2432,9 +2091,9 @@ camelcase@^5.0.0: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30000844: - version "1.0.30001207" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001207.tgz#364d47d35a3007e528f69adb6fecb07c2bb2cc50" - integrity sha512-UPQZdmAsyp2qfCTiMU/zqGSWOYaY9F9LL61V8f+8MrubsaDGpaHD9HRV/EWZGULZn0Hxu48SKzI5DgFwTvHuYw== + version "1.0.30001245" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz#45b941bbd833cb0fa53861ff2bae746b3c6ca5d4" + integrity sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA== caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" @@ -2506,19 +2165,19 @@ chokidar@3.3.0: fsevents "~2.1.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== + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" chownr@^1.1.1: version "1.1.4" @@ -2733,9 +2392,9 @@ content-type@~1.0.4: 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== + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" @@ -2765,9 +2424,9 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-pure@^3.0.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.10.0.tgz#dab9d6b141779b622b40567e7a536d2276646c15" - integrity sha512-CC582enhrFZStO4F8lGI7QL3SYx7/AIRc+IdSi3btrQGrVsTawo5K/crmKbRrQ+MOMhNX4v+PATn0k2NN6wI7A== + version "3.15.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.2.tgz#c8e0874822705f3385d3197af9348f7c9ae2e3ce" + integrity sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA== core-js@^2.4.0, core-js@^2.5.0: version "2.6.12" @@ -2839,7 +2498,7 @@ cross-fetch@^2.1.0, cross-fetch@^2.1.1: node-fetch "2.1.2" whatwg-fetch "2.0.4" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +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== @@ -2887,12 +2546,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -death@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" - integrity sha1-AaqcQB7dknUFFEcLgmY5DGbGcxg= - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: +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== @@ -2907,9 +2561,9 @@ debug@3.2.6: ms "^2.1.1" debug@4, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" @@ -2956,11 +2610,6 @@ deep-equal@~1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - 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" @@ -3053,14 +2702,6 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-port@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" - integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== - dependencies: - address "^1.0.1" - debug "^2.6.0" - diff@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -3080,22 +2721,15 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.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== dotenv@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== dotignore@~0.1.2: version "0.1.2" @@ -3132,9 +2766,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.47: - version "1.3.707" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.707.tgz#71386d0ceca6727835c33ba31f507f6824d18c35" - integrity sha512-BqddgxNPrcWnbDdJw7SzXVzPmp+oiyjVrc7tkQVaznPGSS9SKZatw6qxoP857M+HbOyyqJQwYQtsuFIMSTNSZA== + version "1.3.776" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.776.tgz#33f6e2423b61f1bdaa8d2a103aae78a09764a75f" + integrity sha512-V0w7eFSBoFPpdw4xexjVPZ770UDZIevSwkkj4W97XbE3IsCsTRFpa7/yXGZ88EOQAUEA09JMMsWK0xsw0kRAYw== elliptic@6.5.3: version "6.5.3" @@ -3238,10 +2872,10 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== +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" @@ -3251,14 +2885,14 @@ es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: has-symbols "^1.0.2" is-callable "^1.2.3" is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" + 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.0" + unbox-primitive "^1.0.1" es-to-primitive@^1.2.1: version "1.2.1" @@ -3310,33 +2944,11 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -esprima@2.7.x, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - 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== -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -3504,9 +3116,9 @@ ethashjs@~0.0.7: 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== + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== dependencies: js-sha3 "^0.8.0" @@ -3570,7 +3182,7 @@ ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8: "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": version "0.6.8" - resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#1a27c59c15ab1e95ee8e5c4ed6ad814c49cc439e" + resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0" dependencies: bn.js "^4.11.8" ethereumjs-util "^6.0.0" @@ -3632,7 +3244,6 @@ ethereumjs-blockchain@^4.0.3: semaphore "^1.1.0" ethereumjs-common@1.5.0: - name ethjs-common-v1 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== @@ -3708,19 +3319,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: - 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-util@^7.1.0: +ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.7, ethereumjs-util@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.0.tgz#e2b43a30bfcdbcb432a4eb42bd5f2393209b3fd5" integrity sha512-kR+vhu++mUDARrsMMhsjjzPduRVAeundLGXucGRHF3B4oEltOUspfgCVco4kckucj3FMlLaZHUl9n7/kdmr6Tw== @@ -3785,7 +3384,7 @@ ethereumjs-wallet@0.6.5: utf8 "^3.0.0" uuid "^3.3.2" -ethers@^4.0.32, ethers@^4.0.40: +ethers@^4.0.40: version "4.0.48" resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.48.tgz#330c65b8133e112b0613156e57e92d9009d8fbbe" integrity sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g== @@ -3800,77 +3399,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: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.1.0.tgz#8a8758e0b6cbbc19fd4b87f4d551170fa6f1a995" - integrity sha512-2L6Ge6wMBw02FlRoCLg4E0Elt3khMNlW6ULawa10mMeeZToYJ5+uCfiuTuB+XZ6om1Y7wuO9ZzezP8FsU2M/+g== - dependencies: - "@ethersproject/abi" "5.1.0" - "@ethersproject/abstract-provider" "5.1.0" - "@ethersproject/abstract-signer" "5.1.0" - "@ethersproject/address" "5.1.0" - "@ethersproject/base64" "5.1.0" - "@ethersproject/basex" "5.1.0" - "@ethersproject/bignumber" "5.1.0" - "@ethersproject/bytes" "5.1.0" - "@ethersproject/constants" "5.1.0" - "@ethersproject/contracts" "5.1.0" - "@ethersproject/hash" "5.1.0" - "@ethersproject/hdnode" "5.1.0" - "@ethersproject/json-wallets" "5.1.0" - "@ethersproject/keccak256" "5.1.0" - "@ethersproject/logger" "5.1.0" - "@ethersproject/networks" "5.1.0" - "@ethersproject/pbkdf2" "5.1.0" - "@ethersproject/properties" "5.1.0" - "@ethersproject/providers" "5.1.0" - "@ethersproject/random" "5.1.0" - "@ethersproject/rlp" "5.1.0" - "@ethersproject/sha2" "5.1.0" - "@ethersproject/signing-key" "5.1.0" - "@ethersproject/solidity" "5.1.0" - "@ethersproject/strings" "5.1.0" - "@ethersproject/transactions" "5.1.0" - "@ethersproject/units" "5.1.0" - "@ethersproject/wallet" "5.1.0" - "@ethersproject/web" "5.1.0" - "@ethersproject/wordlists" "5.1.0" - -ethers@^5.0.31, ethers@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.1.4.tgz#8ae973705ed962f8f41dc59693704002a38dd18b" - integrity sha512-EAPQ/fgGRu0PoR/VNFnHTMOtG/IZ0AItdW55C9T8ffmVu0rnyllZL404eBF66elJehOLz2kxnUrhXpE7TCpW7g== - dependencies: - "@ethersproject/abi" "5.1.2" - "@ethersproject/abstract-provider" "5.1.0" - "@ethersproject/abstract-signer" "5.1.0" - "@ethersproject/address" "5.1.0" - "@ethersproject/base64" "5.1.0" - "@ethersproject/basex" "5.1.0" - "@ethersproject/bignumber" "5.1.1" - "@ethersproject/bytes" "5.1.0" - "@ethersproject/constants" "5.1.0" - "@ethersproject/contracts" "5.1.1" - "@ethersproject/hash" "5.1.0" - "@ethersproject/hdnode" "5.1.0" - "@ethersproject/json-wallets" "5.1.0" - "@ethersproject/keccak256" "5.1.0" - "@ethersproject/logger" "5.1.0" - "@ethersproject/networks" "5.1.0" - "@ethersproject/pbkdf2" "5.1.0" - "@ethersproject/properties" "5.1.0" - "@ethersproject/providers" "5.1.2" - "@ethersproject/random" "5.1.0" - "@ethersproject/rlp" "5.1.0" - "@ethersproject/sha2" "5.1.0" - "@ethersproject/signing-key" "5.1.0" - "@ethersproject/solidity" "5.1.0" - "@ethersproject/strings" "5.1.0" - "@ethersproject/transactions" "5.1.1" - "@ethersproject/units" "5.1.0" - "@ethersproject/wallet" "5.1.0" - "@ethersproject/web" "5.1.0" - "@ethersproject/wordlists" "5.1.0" +ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.0.31, ethers@^5.4.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.4.1.tgz#bcff1e9f45bf1a061bf313ec04e8d9881d2d53f9" + integrity sha512-SrcddMdCgP1hukDvCPd87Aipbf4NWjQvdfAbZ65XSZGbfyuYPtIrUJPDH5B1SBRsdlfiEgX3eoz28DdBDzMNFg== + dependencies: + "@ethersproject/abi" "5.4.0" + "@ethersproject/abstract-provider" "5.4.0" + "@ethersproject/abstract-signer" "5.4.0" + "@ethersproject/address" "5.4.0" + "@ethersproject/base64" "5.4.0" + "@ethersproject/basex" "5.4.0" + "@ethersproject/bignumber" "5.4.0" + "@ethersproject/bytes" "5.4.0" + "@ethersproject/constants" "5.4.0" + "@ethersproject/contracts" "5.4.0" + "@ethersproject/hash" "5.4.0" + "@ethersproject/hdnode" "5.4.0" + "@ethersproject/json-wallets" "5.4.0" + "@ethersproject/keccak256" "5.4.0" + "@ethersproject/logger" "5.4.0" + "@ethersproject/networks" "5.4.1" + "@ethersproject/pbkdf2" "5.4.0" + "@ethersproject/properties" "5.4.0" + "@ethersproject/providers" "5.4.1" + "@ethersproject/random" "5.4.0" + "@ethersproject/rlp" "5.4.0" + "@ethersproject/sha2" "5.4.0" + "@ethersproject/signing-key" "5.4.0" + "@ethersproject/solidity" "5.4.0" + "@ethersproject/strings" "5.4.0" + "@ethersproject/transactions" "5.4.0" + "@ethersproject/units" "5.4.0" + "@ethersproject/wallet" "5.4.0" + "@ethersproject/web" "5.4.0" + "@ethersproject/wordlists" "5.4.0" ethjs-unit@0.1.6: version "0.1.6" @@ -3911,19 +3474,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - 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" @@ -4041,35 +3591,11 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.0.3: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - 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== -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== - dependencies: - reusify "^1.0.4" - fetch-ponyfill@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" @@ -4170,9 +3696,9 @@ flow-stoplight@^1.0.0: integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= follow-redirects@^1.12.1: - version "1.13.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" - integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== + 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" @@ -4186,11 +3712,6 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -4223,10 +3744,10 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -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" @@ -4279,15 +3800,6 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" @@ -4320,7 +3832,7 @@ fsevents@~2.1.1: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== -fsevents@~2.3.1: +fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -4335,15 +3847,6 @@ functional-red-black-tree@^1.0.1, functional-red-black-tree@~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-cli@^6.11.0: - version "6.12.2" - resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" - integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== - dependencies: - ethereumjs-util "6.2.1" - source-map-support "0.5.12" - yargs "13.2.4" - ganache-core@^2.13.2: version "2.13.2" resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.13.2.tgz#27e6fc5417c10e6e76e2e646671869d7665814a3" @@ -4415,7 +3918,7 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -get-stream@^4.0.0, get-stream@^4.1.0: +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== @@ -4441,15 +3944,7 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -ghost-testrpc@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" - integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== - dependencies: - chalk "^2.4.2" - node-emoji "^1.10.0" - -glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -4468,18 +3963,7 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0: +glob@^7.1.2, glob@^7.1.3, glob@^7.1.6, 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== @@ -4491,34 +3975,6 @@ glob@^7.0.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.2, glob@^7.1.3, glob@^7.1.6, 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" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - global@~4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" @@ -4532,20 +3988,6 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== -globby@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - got@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -4593,18 +4035,6 @@ growl@1.10.5: resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -handlebars@^4.0.1: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -4699,11 +4129,6 @@ has-bigints@^1.0.1: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -4817,9 +4242,9 @@ home-or-tmp@^2.0.0: os-tmpdir "^1.0.1" hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + 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-basic@^8.1.1: version "8.1.3" @@ -4895,9 +4320,9 @@ iconv-lite@0.4.24: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + 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" @@ -4913,11 +4338,6 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.1.1: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - immediate@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" @@ -4929,9 +4349,9 @@ immediate@~3.2.3: 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== + version "4.0.0-rc.14" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.14.tgz#29ba96631ec10867d1348515ac4e6bdba462f071" + integrity sha512-pfkvmRKJSoW7JFx0QeYlAmT+kNYvn5j0u7bnpNq4N2RCvHSTlLT208G8jgaquNe+Q8kCPHKOSpxJkyvLDpYq0w== inflight@^1.0.4: version "1.0.6" @@ -4951,16 +4371,6 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -4973,11 +4383,6 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - io-ts@1.10.4: version "1.10.4" resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" @@ -5017,9 +4422,9 @@ is-arrayish@^0.2.1: integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-bigint@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" - integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + 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" @@ -5029,11 +4434,11 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + 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.0" + call-bind "^1.0.2" is-buffer@^1.1.5: version "1.1.6" @@ -5058,9 +4463,9 @@ is-ci@^2.0.0: ci-info "^2.0.0" is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + version "2.5.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" + integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== dependencies: has "^1.0.3" @@ -5079,9 +4484,9 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + 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" @@ -5102,9 +4507,9 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: kind-of "^6.0.2" is-docker@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.0.tgz#b037c8815281edaad6c2562648a5f5f18839d5f7" - integrity sha512-K4GwB4i/HzhAzwP/XSlspzRdFTI9N8OxJOyOU7Y5Rz+p+WBokXWVWblaJeBkggthmoSV0OoGTH5thJNvplpkvQ== + 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" @@ -5155,11 +4560,6 @@ is-function@^1.0.1: resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== -is-generator-function@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b" - integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ== - 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" @@ -5178,9 +4578,9 @@ is-negative-zero@^2.0.1: integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + 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" @@ -5211,13 +4611,13 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.0.4, is-regex@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" - integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== +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.1" + has-symbols "^1.0.2" is-regex@~1.0.5: version "1.0.5" @@ -5231,33 +4631,22 @@ is-retry-allowed@^1.0.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, is-stream@^1.1.0: +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: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +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.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-typed-array@^1.1.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e" - integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== - dependencies: - available-typed-arrays "^1.0.2" - call-bind "^1.0.2" - es-abstract "^1.18.0-next.2" - foreach "^2.0.5" - has-symbols "^1.0.1" + 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" @@ -5354,14 +4743,6 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@3.x: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -5461,11 +4842,6 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= -jsonschema@^1.2.4: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" - integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -5546,13 +4922,6 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.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" @@ -5750,14 +5119,6 @@ levelup@^4.3.2: level-supports "~1.0.0" xtend "~4.0.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - 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" @@ -5790,11 +5151,6 @@ lodash.assign@^4.0.3, lodash.assign@^4.0.6: resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" - integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= - lodash@4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" @@ -5853,13 +5209,6 @@ lru-cache@^3.2.0: dependencies: pseudomap "^1.0.1" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" @@ -5880,13 +5229,6 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -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" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -5905,9 +5247,11 @@ markdown-table@^1.1.3: integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== mcl-wasm@^0.7.1: - version "0.7.6" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.6.tgz#c1789ebda5565d49b77d2ee195ff3e4d282f1554" - integrity sha512-cbRl3sUOkBeRY2hsM4t1EIln2TIdQBkSiTOqNTv/4Hu5KOECnMWCgjIf+a9Ebunyn22VKqkMF3zj6ejRzz7YBw== + version "0.7.8" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.8.tgz#4d0dc5a92f7bd20892fd3fcd41764acf86fd1e6e" + integrity sha512-qNHlYO6wuEtSoH5A8TcZfCEHtw8gGPqF6hLZpQn2SVd/Mck0ELIKOkmj072D98S9B9CI/jZybTUC96q1P2/ZDw== + dependencies: + typescript "^4.3.4" md5.js@^1.3.4: version "1.3.5" @@ -5923,15 +5267,6 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - memdown@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" @@ -5978,11 +5313,6 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= -merge2@^1.2.3, merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - 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" @@ -6048,12 +5378,12 @@ micromatch@^3.1.4: to-regex "^3.0.2" micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + 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.0.5" + picomatch "^2.2.3" miller-rabin@^4.0.0: version "4.0.1" @@ -6063,28 +5393,23 @@ 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" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mimic-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - 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" @@ -6107,7 +5432,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.4: +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== @@ -6154,7 +5479,7 @@ mkdirp@*, mkdirp@^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.x, mkdirp@^0.5.0, mkdirp@^0.5.1: +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== @@ -6199,9 +5524,9 @@ mocha@^7.1.1, mocha@^7.1.2: yargs-unparser "1.6.0" mock-fs@^4.1.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.13.0.tgz#31c02263673ec3789f90eb7b6963676aa407a598" - integrity sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA== + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== moment@^2.15.2: version "2.29.1" @@ -6300,11 +5625,6 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -6320,13 +5640,6 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== -node-emoji@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" - integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== - dependencies: - lodash.toarray "^4.4.0" - 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" @@ -6358,13 +5671,6 @@ node-gyp-build@^4.2.0: 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== -nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - dependencies: - abbrev "1" - 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" @@ -6381,16 +5687,9 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.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" @@ -6424,10 +5723,10 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== +object-inspect@^1.10.3, object-inspect@^1.9.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== object-inspect@~1.7.0: version "1.7.0" @@ -6507,13 +5806,6 @@ oboe@2.1.4: dependencies: http-https "^1.0.0" -oboe@2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80= - dependencies: - http-https "^1.0.0" - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -6521,7 +5813,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: +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= @@ -6536,18 +5828,6 @@ open@^7.4.2: is-docker "^2.0.0" is-wsl "^2.1.1" -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -6560,15 +5840,6 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.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" @@ -6584,21 +5855,11 @@ p-cancelable@^1.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - 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-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -6741,15 +6002,15 @@ path-is-absolute@^1.0.0, path-is-absolute@^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.0, path-key@^2.0.1: +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.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + 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" @@ -6765,20 +6026,15 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - 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.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + 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" @@ -6791,21 +6047,16 @@ performance-now@^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.0.5, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +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= -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -6833,11 +6084,6 @@ precond@0.2: resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" @@ -6849,9 +6095,9 @@ prepend-http@^2.0.0: integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= prettier@^2.1.2, prettier@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + version "2.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" + integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== printj@~1.1.0: version "1.1.2" @@ -6889,11 +6135,11 @@ promise@^8.0.0: asap "~2.0.6" 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: @@ -7025,11 +6271,6 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - 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" @@ -7136,27 +6377,13 @@ readdirp@~3.2.0: 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== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - -recursive-readdir@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== - dependencies: - minimatch "3.0.4" - regenerate@^1.2.1: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" @@ -7214,9 +6441,9 @@ regjsparser@^0.1.4: jsesc "~0.5.0" repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + 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" @@ -7321,11 +6548,6 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.x: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - resolve@1.17.0, resolve@~1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" @@ -7333,7 +6555,7 @@ resolve@1.17.0, resolve@~1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.8.1: +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== @@ -7360,11 +6582,6 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - rimraf@^2.2.8, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -7387,13 +6604,6 @@ rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3, rlp@^2.2.4: dependencies: bn.js "^4.11.1" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - rustbn.js@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" @@ -7428,26 +6638,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sc-istanbul@^0.4.5: - version "0.4.6" - resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" - integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - scrypt-js@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" @@ -7513,13 +6703,6 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - semver@~5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" @@ -7628,15 +6811,6 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -shelljs@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -7646,11 +6820,6 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -7750,31 +6919,6 @@ solc@^0.6.3: semver "^5.5.0" tmp "0.0.33" -solidity-coverage@^0.7.16: - version "0.7.16" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.16.tgz#c8c8c46baa361e2817bbf275116ddd2ec90a55fb" - integrity sha512-ttBOStywE6ZOTJmmABSg4b8pwwZfYKG8zxu40Nz+sRF5bQX7JULXWj/XbX0KXps3Fsp8CJXg8P29rH3W54ipxw== - dependencies: - "@solidity-parser/parser" "^0.12.0" - "@truffle/provider" "^0.2.24" - chalk "^2.4.2" - death "^1.1.0" - detect-port "^1.3.0" - fs-extra "^8.1.0" - ganache-cli "^6.11.0" - ghost-testrpc "^0.0.2" - global-modules "^2.0.0" - globby "^10.0.1" - jsonschema "^1.2.4" - lodash "^4.17.15" - node-emoji "^1.10.0" - pify "^4.0.1" - recursive-readdir "^2.2.2" - sc-istanbul "^0.4.5" - semver "^7.3.4" - shelljs "^0.8.3" - web3-utils "^1.3.0" - 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" @@ -7819,18 +6963,11 @@ source-map@^0.5.6, source-map@^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, source-map@^0.6.1: +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== -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= - dependencies: - amdefine ">=0.0.4" - spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -7853,9 +6990,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + 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" @@ -8036,11 +7173,6 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - 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" @@ -8065,13 +7197,6 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -8284,9 +7409,9 @@ ts-essentials@^6.0.3: integrity sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw== ts-essentials@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.1.tgz#d205508cae0cdadfb73c89503140cf2228389e2d" - integrity sha512-8lwh3QJtIc1UWhkQtr9XuksXu3O0YQdEE5g79guDfhCaU1FWTDIEDZ1ZSx4HTHUmlJZ8L812j3BZQ4a0aOUkSA== + version "7.0.2" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.2.tgz#e21142df8034dbd444cb9573ed204d0b85fc64fb" + integrity sha512-qWPVC1xZGdefbsgFP7tPo+bsgSA2ZIXL1XeEe5M2WoMZxIOr/HbsHxP/Iv75IFhiMHMDGL7cOOwi5SXcgx9mHw== ts-generator@^0.1.1: version "0.1.1" @@ -8347,14 +7472,7 @@ tweetnacl@^1.0.0, tweetnacl@^1.0.3: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-detect@^4.0.0, type-detect@^4.0.5: +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== @@ -8428,10 +7546,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" - integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== +typescript@^4.2.3, typescript@^4.3.4: + version "4.3.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" + integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" @@ -8455,17 +7573,12 @@ typical@^2.6.0, typical@^2.6.1: resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= -uglify-js@^3.1.4: - version "3.13.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.5.tgz#5d71d6dbba64cf441f32929b1efce7365bb4f113" - integrity sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw== - 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.0: +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== @@ -8475,6 +7588,11 @@ unbox-primitive@^1.0.0: 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" @@ -8568,9 +7686,9 @@ use@^3.1.0: integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== utf-8-validate@^5.0.2: - version "5.0.4" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.4.tgz#72a1735983ddf7a05a43a9c6b67c5ce1c910f9b8" - integrity sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q== + 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" @@ -8595,18 +7713,6 @@ util.promisify@^1.0.0, util.promisify@^1.0.1: has-symbols "^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== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - safe-buffer "^5.1.2" - which-typed-array "^1.1.2" - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -8664,16 +7770,6 @@ web3-bzz@1.2.11: swarm-js "^0.1.40" underscore "1.9.1" -web3-bzz@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.5.tgz#f181a1319d9f867f4183b147e7aebd21aecff4a0" - integrity sha512-XiEUAbB1uKm/agqfwBsCW8fbw+sma85TfwuDpdcy591vinVk0S9TfWgLxro6v1KJ6nSELySIbKGbAJbh2GSyxw== - 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" @@ -8683,15 +7779,6 @@ web3-core-helpers@1.2.11: web3-eth-iban "1.2.11" web3-utils "1.2.11" -web3-core-helpers@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.5.tgz#9f0ff7ed40befb9f691986e66fd94c828c7b1b13" - integrity sha512-HYh3ix5FjysgT0jyzD8s/X5ym0b4BGU7I2QtuBiydMnE0mQEWy7GcT9XKpTySA8FTOHHIAQYvQS07DN/ky3UzA== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.3.5" - web3-utils "1.3.5" - 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" @@ -8704,18 +7791,6 @@ web3-core-method@1.2.11: web3-core-subscriptions "1.2.11" web3-utils "1.2.11" -web3-core-method@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.5.tgz#995fe12f3b364469e5208a88d72736327b231faa" - integrity sha512-hCbmgQ+At6OTuaNGAdjXMsCr4eUCmp9yGKSuaB5HdkNVDpqFso4HHjVxcjNrTyJp3OZnyjKBzQzK1ZWLpLl84Q== - dependencies: - "@ethersproject/transactions" "^5.0.0-beta.135" - underscore "1.9.1" - web3-core-helpers "1.3.5" - web3-core-promievent "1.3.5" - web3-core-subscriptions "1.3.5" - web3-utils "1.3.5" - 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" @@ -8723,13 +7798,6 @@ web3-core-promievent@1.2.11: dependencies: eventemitter3 "4.0.4" -web3-core-promievent@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.5.tgz#33c34811cc4e2987c56e5192f9a014368c42ca39" - integrity sha512-K0j8x3ZJr0eAyNvyUCxOUsSTd4hco0/9nxxlyOuijcsa6YV8l9NL6eqhniWbSyxCJT8ka5Mb7yAiUZe69EDLBQ== - 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" @@ -8741,18 +7809,6 @@ web3-core-requestmanager@1.2.11: web3-providers-ipc "1.2.11" web3-providers-ws "1.2.11" -web3-core-requestmanager@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.5.tgz#c452ea85fcffdf5b82b84c250707b638790d0e75" - integrity sha512-9l294U3Ga8qmvv8E37BqjQREfMs+kFnkU3PY28g9DZGYzKvl3V1dgDYqxyrOBdCFhc7rNSpHdgC4PrVHjouspg== - dependencies: - underscore "1.9.1" - util "^0.12.0" - web3-core-helpers "1.3.5" - web3-providers-http "1.3.5" - web3-providers-ipc "1.3.5" - web3-providers-ws "1.3.5" - 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" @@ -8762,15 +7818,6 @@ web3-core-subscriptions@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -web3-core-subscriptions@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.5.tgz#7c4dc9d559e344d852de2cf01bd0cc13c94023cb" - integrity sha512-6mtXdaEB1V1zKLqYBq7RF2W75AK5ZJNGpW6QYC7Zvbku7zq1ZlgaUkJo88JKMWJ7etfaHaYqQ/7VveHk5sQynA== - dependencies: - eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.5" - web3-core@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.11.tgz#1043cacc1becb80638453cc5b2a14be9050288a7" @@ -8784,19 +7831,6 @@ web3-core@1.2.11: web3-core-requestmanager "1.2.11" web3-utils "1.2.11" -web3-core@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.5.tgz#1e9335e6c4549dac09aaa07157242ebd6d097226" - integrity sha512-VQjTvnGTqJwDwjKEHSApea3RmgtFGLDSJ6bqrOyHROYNyTyKYjFQ/drG9zs3rjDkND9mgh8foI1ty37Qua3QCQ== - dependencies: - "@types/bn.js" "^4.11.5" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-core-requestmanager "1.3.5" - web3-utils "1.3.5" - 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" @@ -8806,15 +7840,6 @@ web3-eth-abi@1.2.11: underscore "1.9.1" web3-utils "1.2.11" -web3-eth-abi@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.5.tgz#eeffab0a4b318c47b8777de90983ca45614f8173" - integrity sha512-bkbG2v/mOW5DH6rF/SEgqunusjYoEi2IBw+fkmD3rzWDaEY7+/i1xY94AeO257d06QMgld75GtV/N+aEs7A6vQ== - dependencies: - "@ethersproject/abi" "5.0.7" - underscore "1.9.1" - web3-utils "1.3.5" - 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" @@ -8832,23 +7857,6 @@ web3-eth-accounts@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-eth-accounts@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.5.tgz#c23ee748759a6a06d6485a9322b106baa944dcdd" - integrity sha512-r3WOR21rgm6Cd6OFnifr3Tizdm5K+g2TsSOPySwX4FrgLrYDL6ck4zr5VXUPz+llpSExb/JztpE8pqEHr3U2NA== - dependencies: - crypto-browserify "3.12.0" - eth-lib "0.2.8" - ethereumjs-common "^1.3.2" - ethereumjs-tx "^2.1.1" - scrypt-js "^3.0.1" - underscore "1.9.1" - uuid "3.3.2" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-utils "1.3.5" - 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" @@ -8864,21 +7872,6 @@ web3-eth-contract@1.2.11: web3-eth-abi "1.2.11" web3-utils "1.2.11" -web3-eth-contract@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.5.tgz#b41ecf8612b379c4fb1c614e950135717aa8f919" - integrity sha512-WfGVeQquN3D7Qm+KEIN9EI7yrm/fL2V9Y4+YhDWiKA/ns1pX1LYcEWojTOnBXCnPF3tcvoKKL+KBxXg1iKm38A== - dependencies: - "@types/bn.js" "^4.11.5" - underscore "1.9.1" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-core-promievent "1.3.5" - web3-core-subscriptions "1.3.5" - web3-eth-abi "1.3.5" - web3-utils "1.3.5" - 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" @@ -8894,21 +7887,6 @@ web3-eth-ens@1.2.11: web3-eth-contract "1.2.11" web3-utils "1.2.11" -web3-eth-ens@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.5.tgz#5a28d23eb402fb1f6964da60ea60641e4d24d366" - integrity sha512-5bkpFTXV18CvaVP8kCbLZZm2r1TWUv9AsXH+80yz8bTZulUGvXsBMRfK6e5nfEr2Yv59xlIXCFoalmmySI9EJw== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-promievent "1.3.5" - web3-eth-abi "1.3.5" - web3-eth-contract "1.3.5" - web3-utils "1.3.5" - 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" @@ -8917,14 +7895,6 @@ web3-eth-iban@1.2.11: bn.js "^4.11.9" web3-utils "1.2.11" -web3-eth-iban@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.5.tgz#dff1e37864e23a3387016ec4db96cdc290a6fbd6" - integrity sha512-x+BI/d2Vt0J1cKK8eFd4W0f1TDjgEOYCwiViTb28lLE+tqrgyPqWDA+l6UlKYLF/yMFX3Dym4ofcCOtgcn4q4g== - dependencies: - bn.js "^4.11.9" - web3-utils "1.3.5" - 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" @@ -8937,18 +7907,6 @@ web3-eth-personal@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth-personal@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.5.tgz#bc5d5b900bc4824139af2ef01eaf8e9855c644ba" - integrity sha512-xELQHNZ8p3VoO1582ghCaq+Bx7pSkOOalc6/ACOCGtHDMelqgVejrmSIZGScYl+k0HzngmQAzURZWQocaoGM1g== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-net "1.3.5" - web3-utils "1.3.5" - web3-eth@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.11.tgz#4c81fcb6285b8caf544058fba3ae802968fdc793" @@ -8968,25 +7926,6 @@ web3-eth@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.5.tgz#2a3d0db870ef7921942a5d798ba0569175cc4de1" - integrity sha512-5qqDPMMD+D0xRqOV2ePU2G7/uQmhn0FgCEhFzKDMHrssDQJyQLW/VgfA0NLn64lWnuUrGnQStGvNxrWf7MgsfA== - dependencies: - underscore "1.9.1" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-core-subscriptions "1.3.5" - web3-eth-abi "1.3.5" - web3-eth-accounts "1.3.5" - web3-eth-contract "1.3.5" - web3-eth-ens "1.3.5" - web3-eth-iban "1.3.5" - web3-eth-personal "1.3.5" - web3-net "1.3.5" - web3-utils "1.3.5" - web3-net@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.11.tgz#eda68ef25e5cdb64c96c39085cdb74669aabbe1b" @@ -8996,15 +7935,6 @@ web3-net@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-net@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.5.tgz#06e3465a9fbbeec1240160e2fd66ddb07b6af944" - integrity sha512-usbFbuUpKK8s7jPLGoUzi/WpNnefGFPTj948aJv8BZ04UQA4L/XS5NNkkhk358zNMmhGfEFW8wrWy+0Oy0njtA== - dependencies: - web3-core "1.3.5" - web3-core-method "1.3.5" - web3-utils "1.3.5" - 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" @@ -9039,14 +7969,6 @@ web3-providers-http@1.2.11: web3-core-helpers "1.2.11" xhr2-cookies "1.1.0" -web3-providers-http@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.5.tgz#cdada6fb342e08fd75aea249fceb6eee467beffc" - integrity sha512-ZQOmceFjcajEZdiuqciXjijwIYWNmEJ1oxMtbrwB2eGxHRCMXEH2xGRUZuhOFNF88yQC/VXVi14yvYg5ZlFJlA== - dependencies: - web3-core-helpers "1.3.5" - 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" @@ -9056,15 +7978,6 @@ web3-providers-ipc@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -web3-providers-ipc@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.5.tgz#2f5536abfe03f3824e00dedc614d8f46db72b57f" - integrity sha512-cbZOeb/sALiHjzMolJjIyHla/J5wdL2JKUtRO66Nh/uLALBCpU8JUgzNvpAdJ1ae3+A33+EdFStdzuDYHKtQew== - dependencies: - oboe "2.1.5" - underscore "1.9.1" - web3-core-helpers "1.3.5" - 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" @@ -9075,16 +7988,6 @@ web3-providers-ws@1.2.11: web3-core-helpers "1.2.11" websocket "^1.0.31" -web3-providers-ws@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.5.tgz#7f841ec79358d90c4a803d1291157b5ffb15aeb7" - integrity sha512-zeZ4LMvKhYaJBDCqA//Bzgp4r/T0tNq5U/xvN0axA4YflzF7yqlsbzGwCkcZYDbrUaK3Ltl2uOmvwjbWALOZ1A== - dependencies: - eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.5" - websocket "^1.0.32" - web3-shh@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" @@ -9095,16 +7998,6 @@ web3-shh@1.2.11: web3-core-subscriptions "1.2.11" web3-net "1.2.11" -web3-shh@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.5.tgz#af0b8ebca90a3652dbbb90d351395f36ca91f40b" - integrity sha512-aRwzCduXvuGVslLL/Y15VcOHa70Qr2kxZI7UwOzQVhaaOdxuRRvo3AK/cmyln1Tsd54/n93Yk8I3qg5I2+6alw== - dependencies: - web3-core "1.3.5" - web3-core-method "1.3.5" - web3-core-subscriptions "1.3.5" - web3-net "1.3.5" - web3-utils@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" @@ -9119,24 +8012,10 @@ web3-utils@1.2.11: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.3.5, web3-utils@^1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.5.tgz#14ee2ff1a7a226867698d6eaffd21aa97aed422e" - integrity sha512-5apMRm8ElYjI/92GHqijmaLC+s+d5lgjpjHft+rJSs/dsnX8I8tQreqev0dmU+wzU+2EEe4Sx9a/OwGWHhQv3A== - 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.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.4.tgz#9b1aa30d7549f860b573e7bb7e690999e7192198" - integrity sha512-/vC2v0MaZNpWooJfpRw63u0Y3ag2gNjAWiLtMSL6QQLmCqCy4SQIndMt/vRyx0uMoeGt1YTwSXEcHjUzOhLg0A== + version "1.4.0" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.4.0.tgz#e8cb381c81b242dc1d4ecb397200356d404410e6" + integrity sha512-b8mEhwh/J928Xk+SQFjtqrR2EGPhpknWLcIt9aCpVPVRXiqjUGo/kpOHKz0azu9c6/onEJ9tWXZt0cVjmH0N5Q== dependencies: bn.js "^4.11.9" eth-lib "0.2.8" @@ -9144,7 +8023,7 @@ web3-utils@^1.0.0-beta.31: ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" - underscore "1.9.1" + underscore "1.12.1" utf8 "3.0.0" web3@1.2.11: @@ -9160,19 +8039,6 @@ web3@1.2.11: web3-shh "1.2.11" web3-utils "1.2.11" -web3@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.5.tgz#ef4c3a2241fdd74f2f7794e839f30bc6f9814e46" - integrity sha512-UyQW/MT5EIGBrXPCh/FDIaD7RtJTn5/rJUNw2FOglp0qoXnCQHNKvntiR1ylztk05fYxIF6UgsC76IrazlKJjw== - dependencies: - web3-bzz "1.3.5" - web3-core "1.3.5" - web3-eth "1.3.5" - web3-eth-personal "1.3.5" - web3-net "1.3.5" - web3-shh "1.3.5" - web3-utils "1.3.5" - websocket@1.0.32: version "1.0.32" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" @@ -9185,10 +8051,10 @@ websocket@1.0.32: utf-8-validate "^5.0.2" yaeti "^0.0.6" -websocket@^1.0.31, websocket@^1.0.32: - version "1.0.33" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.33.tgz#407f763fc58e74a3fa41ca3ae5d78d3f5e3b82a5" - integrity sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA== +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" @@ -9223,20 +8089,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which-typed-array@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" - integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== - dependencies: - available-typed-arrays "^1.0.2" - call-bind "^1.0.0" - es-abstract "^1.18.0-next.1" - foreach "^2.0.5" - function-bind "^1.1.1" - has-symbols "^1.0.1" - is-typed-array "^1.1.3" - -which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: +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== @@ -9255,16 +8108,6 @@ window-size@^0.2.0: resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -9296,10 +8139,10 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -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: + 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" @@ -9311,9 +8154,9 @@ ws@^3.0.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== + version "5.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" + integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== dependencies: async-limiter "~1.0.0" @@ -9382,9 +8225,9 @@ y18n@^3.2.1: integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + 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" @@ -9401,12 +8244,7 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: +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== @@ -9423,9 +8261,9 @@ yargs-parser@^2.4.1: 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== + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs-unparser@1.6.0: version "1.6.0" @@ -9436,23 +8274,6 @@ yargs-unparser@1.6.0: lodash "^4.17.15" yargs "^13.3.0" -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - 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.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" From b64142069c432ae59ba2f6edcd16c91a07b6178f Mon Sep 17 00:00:00 2001 From: Kristijan Rebernisak Date: Fri, 16 Jul 2021 19:15:30 +0200 Subject: [PATCH 21/21] Revert to before merge updated deps --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 02d30f9..e0f7d6e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2766,9 +2766,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.47: - version "1.3.776" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.776.tgz#33f6e2423b61f1bdaa8d2a103aae78a09764a75f" - integrity sha512-V0w7eFSBoFPpdw4xexjVPZ770UDZIevSwkkj4W97XbE3IsCsTRFpa7/yXGZ88EOQAUEA09JMMsWK0xsw0kRAYw== + version "1.3.778" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.778.tgz#bf01048736c95b78f2988e88005e0ebb385942a4" + integrity sha512-Lw04qJaPtWdq0d7qKHJTgkam+FhFi3hm/scf1EyqJWdjO3ZIGUJhNmZJRXWb7yb/bRYXQyVGSpa9RqVpjjWMQw== elliptic@6.5.3: version "6.5.3"