diff --git a/package.json b/package.json index 95d2b7cab16..d9dc2d5bf03 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "release:alpha": "yarn clean && yarn build && lerna version prerelease --yes && lerna publish from-package --yes --force-publish --dist-tag=alpha -m \"chore(@ethereum-optimism) publish %s release\"", "release:beta": "yarn clean && yarn build && lerna version prerelease --yes && lerna publish from-package --yes --force-publish --dist-tag=beta -m \"chore(@ethereum-optimism) publish %s release\"", "patch": "yarn run patch:ganache && yarn run patch:waffle", - "patch:ganache": "sed -ie 's!import { Provider as Web3Provider } from \"web3/providers\";!import { AbstractProvider as Web3Provider } from \"web3-core\";!' node_modules/ganache-core/typings/index.d.ts", + "patch:ganache": "rm node_modules/ganache-core/typings/index.d.ts ||:", "patch:waffle": "sed -ie 's!Ganache.GanacheOpts!any!g' node_modules/ethereum-waffle/dist/waffle.d.ts" }, "repository": "git+https://github.com/ethereum-optimism/optimism-monorepo.git", diff --git a/packages/contracts/.gitignore b/packages/contracts/.gitignore new file mode 100644 index 00000000000..bf49086f6d8 --- /dev/null +++ b/packages/contracts/.gitignore @@ -0,0 +1,5 @@ +.coverage_artifacts/ +.coverage_cache/ +.coverage_contracts/ +coverage/ +coverage.json \ No newline at end of file diff --git a/packages/contracts/.solcover.js b/packages/contracts/.solcover.js new file mode 100644 index 00000000000..29eb49216cc --- /dev/null +++ b/packages/contracts/.solcover.js @@ -0,0 +1,69 @@ +/** + * SolCover configuration management: + * + * SolCover unfortunately doesn't provide us with the ability to exclusively + * generate coverage reports for a given file. Although we can use the + * `--testfiles`` parameter to limit tests to a particular glob, SolCover will + * still try to generate coverage reports for anything not covered within the + * `skipFiles` option exported below. `skipFiles` additionally does not parse + * globs, creating a mismatch between it and the `--testfiles` option. + * + * To address the above issues, we take the following steps: + * 1. Parse the `--testfiles` option from our command-line arguments. + * 2. Use the `--testfiles` option to find the list of contracts to be tested. + * 3. Find *all* contracts and exclude the results of (2). + * 4. Add the result of (3) to `skipFiles`. + * + * NOTE: The above will *only* work if contract test files follow the + * `.spec.ts` convention. Our function will fail to find the + * correct contracts otherwise. + */ + +const path = require('path') +const glob = require('glob') +const ArgumentParser = require('argparse').ArgumentParser + +const parser = new ArgumentParser() +parser.addArgument( + ['--testfiles'], +) + +/** + * Given a glob, finds all files to skip. + * @param skipFiles Path or glob of files to skip. + * @returns Paths to files to skip. + */ +const parseSkipFiles = (skipFiles) => { + return skipFiles.reduce((files, contract) => { + return files.concat(glob.sync(contract)) + }, []).map((contract) => { + return contract.replace('contracts/', '') + }) +} + +/** + * Given a glob, finds all contracts to skip that are *not* the given files. + * @param includeFiles Path or glob of files not to skip. + * @returns Paths to files to skip. + */ +const parseIncludeFiles = (includeFiles) => { + const allFiles = parseSkipFiles(['contracts/**/*.sol']) + const includedFiles = parseSkipFiles(includeFiles) + return allFiles.filter((file) => { + return !includedFiles.includes(file) + }) +} + +/** + * Parses command-line arguments and picks out the correct contracts to skip. + */ +const parseTestFiles = () => { + const args = parser.parseKnownArgs()[0] + const testFileName = path.basename(args.testfiles) + const contractFileName = testFileName.split('.')[0] + '.sol' + return parseIncludeFiles(['contracts/**/' + contractFileName]) +} + +module.exports = { + skipFiles: parseTestFiles() +} \ No newline at end of file diff --git a/packages/contracts/buidler.config.ts b/packages/contracts/buidler.config.ts index e84604aeee9..1a768524353 100644 --- a/packages/contracts/buidler.config.ts +++ b/packages/contracts/buidler.config.ts @@ -1,10 +1,13 @@ -import * as path from 'path' import { usePlugin, BuidlerConfig } from '@nomiclabs/buidler/config' -import { DEFAULT_ACCOUNTS_BUIDLER } from './test/test-helpers/constants' +import { + DEFAULT_ACCOUNTS_BUIDLER, + GAS_LIMIT, +} from './test/test-helpers/constants' usePlugin('@nomiclabs/buidler-ethers') usePlugin('@nomiclabs/buidler-waffle') +usePlugin('solidity-coverage') import './plugins/hijack-compiler' @@ -12,6 +15,10 @@ const config: BuidlerConfig = { networks: { buidlerevm: { accounts: DEFAULT_ACCOUNTS_BUIDLER, + blockGasLimit: GAS_LIMIT * 2, + }, + coverage: { + url: 'http://localhost:8555', }, }, } diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 6c3063e6025..a0d51f0e56d 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -12,6 +12,8 @@ "nohoist": [ "**/@nomiclabs", "**/@nomiclabs/**", + "**/solidity-coverage", + "**/solidity-coverage/**", "**/typescript", "**/typescript/**", "**/ts-node", @@ -22,6 +24,8 @@ "all": "yarn clean && yarn build && yarn test && yarn fix && yarn lint", "test": "yarn run test:contracts", "test:contracts": "buidler test --show-stack-traces", + "coverage": "yarn run coverage:contracts", + "coverage:contracts": "buidler coverage --network coverage --show-stack-traces --testfiles \"test/contracts/**/*.spec.ts\"", "build": "yarn run build:contracts && yarn run build:typescript", "build:contracts": "buidler compile", "build:typescript": "tsc -p .", @@ -52,5 +56,9 @@ "seedrandom": "^3.0.5", "ts-node": "^8.10.2", "typescript": "^3.9.5" + }, + "devDependencies": { + "glob": "^7.1.6", + "solidity-coverage": "^0.7.9" } -} \ No newline at end of file +} diff --git a/packages/contracts/test/contracts/chain/CanonicalTransactionChain.spec.ts b/packages/contracts/test/contracts/chain/CanonicalTransactionChain.spec.ts index c7ed0f3e524..36fdd889f22 100644 --- a/packages/contracts/test/contracts/chain/CanonicalTransactionChain.spec.ts +++ b/packages/contracts/test/contracts/chain/CanonicalTransactionChain.spec.ts @@ -3,11 +3,14 @@ import '../../setup' /* External Imports */ import { ethers } from '@nomiclabs/buidler' import { getLogger, sleep, TestUtils } from '@eth-optimism/core-utils' -import { Signer, ContractFactory } from 'ethers' +import { Contract, Signer, ContractFactory } from 'ethers' /* Internal Imports */ -import { TxChainBatch, TxQueueBatch } from '../../test-helpers/rl-helpers' -import { makeRandomBatchOfSize } from '../../test-helpers' +import { + makeRandomBatchOfSize, + TxQueueBatch, + TxChainBatch, +} from '../../test-helpers' /* Logging */ const log = getLogger('canonical-tx-chain', true) @@ -32,10 +35,10 @@ describe('CanonicalTransactionChain', () => { ] = await ethers.getSigners() }) - let canonicalTxChain - let rollupMerkleUtils - let l1ToL2Queue - let safetyQueue + let canonicalTxChain: Contract + let rollupMerkleUtils: Contract + let l1ToL2Queue: Contract + let safetyQueue: Contract const appendSequencerBatch = async (batch: string[]): Promise => { const timestamp = Math.floor(Date.now() / 1000) diff --git a/packages/contracts/test/contracts/chain/SequencerBatchSubmitter.spec.ts b/packages/contracts/test/contracts/chain/SequencerBatchSubmitter.spec.ts index ba467017358..e6c146cf5ba 100644 --- a/packages/contracts/test/contracts/chain/SequencerBatchSubmitter.spec.ts +++ b/packages/contracts/test/contracts/chain/SequencerBatchSubmitter.spec.ts @@ -6,14 +6,13 @@ import { getLogger, TestUtils } from '@eth-optimism/core-utils' import { Contract, Signer, ContractFactory } from 'ethers' /* Internal Imports */ -import { StateChainBatch, TxChainBatch } from '../../test-helpers/rl-helpers' +import { StateChainBatch, TxChainBatch } from '../../test-helpers' /* Logging */ const log = getLogger('batch-submitter', true) /* Tests */ describe('SequencerBatchSubmitter', () => { - const provider = ethers.provider const DEFAULT_STATE_BATCH = ['0x1234', '0x5678'] const DEFAULT_TX_BATCH = ['0xabcd', '0xef12'] const FORCE_INCLUSION_PERIOD = 600 diff --git a/packages/contracts/test/contracts/chain/StateCommitmentChain.spec.ts b/packages/contracts/test/contracts/chain/StateCommitmentChain.spec.ts index b21d0c7f7c8..f50c2f369ff 100644 --- a/packages/contracts/test/contracts/chain/StateCommitmentChain.spec.ts +++ b/packages/contracts/test/contracts/chain/StateCommitmentChain.spec.ts @@ -6,8 +6,7 @@ import { getLogger, sleep, TestUtils } from '@eth-optimism/core-utils' import { Contract, Signer, ContractFactory } from 'ethers' /* Internal Imports */ -import { StateChainBatch } from '../../test-helpers/rl-helpers' -import { makeRandomBatchOfSize } from '../../test-helpers' +import { makeRandomBatchOfSize, StateChainBatch } from '../../test-helpers' /* Logging */ const log = getLogger('state-commitment-chain', true) diff --git a/packages/contracts/test/contracts/ovm/L2ExecutionManager.spec.ts b/packages/contracts/test/contracts/ovm/L2ExecutionManager.spec.ts index 175e4ea653a..4933ed7ad0f 100644 --- a/packages/contracts/test/contracts/ovm/L2ExecutionManager.spec.ts +++ b/packages/contracts/test/contracts/ovm/L2ExecutionManager.spec.ts @@ -6,11 +6,7 @@ import { add0x, getLogger } from '@eth-optimism/core-utils' import { Contract, Signer, ContractFactory } from 'ethers' /* Internal Imports */ -import { - DEFAULT_OPCODE_WHITELIST_MASK, - GAS_LIMIT, - DEFAULT_ETHNODE_GAS_LIMIT, -} from '../../test-helpers/core-helpers' +import { DEFAULT_OPCODE_WHITELIST_MASK, GAS_LIMIT } from '../../test-helpers' /* Logging */ const log = getLogger('l2-execution-manager-calls', true) diff --git a/packages/contracts/test/contracts/ovm/PartialStateManager.spec.ts b/packages/contracts/test/contracts/ovm/PartialStateManager.spec.ts index 8c796c50108..be5aab52923 100644 --- a/packages/contracts/test/contracts/ovm/PartialStateManager.spec.ts +++ b/packages/contracts/test/contracts/ovm/PartialStateManager.spec.ts @@ -2,7 +2,7 @@ import '../../setup' /* External Imports */ import { ethers } from '@nomiclabs/buidler' -import { getLogger, TestUtils } from '@eth-optimism/core-utils' +import { getLogger } from '@eth-optimism/core-utils' import { Contract, ContractFactory, Signer } from 'ethers' /* Logging */ @@ -20,7 +20,7 @@ describe('PartialStateManager', () => { PartialStateManager = await ethers.getContractFactory('PartialStateManager') }) - let partialStateManager + let partialStateManager: Contract beforeEach(async () => { partialStateManager = await PartialStateManager.deploy( await wallet.getAddress(), diff --git a/packages/contracts/test/contracts/ovm/StateTransitioner.spec.ts b/packages/contracts/test/contracts/ovm/StateTransitioner.spec.ts index ee507239aae..eb41cd0ecd5 100644 --- a/packages/contracts/test/contracts/ovm/StateTransitioner.spec.ts +++ b/packages/contracts/test/contracts/ovm/StateTransitioner.spec.ts @@ -2,7 +2,7 @@ import '../../setup' /* External Imports */ import { ethers } from '@nomiclabs/buidler' -import { getLogger, TestUtils } from '@eth-optimism/core-utils' +import { getLogger } from '@eth-optimism/core-utils' import { Contract, ContractFactory, Signer } from 'ethers' /* Logging */ diff --git a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.call-opcodes.spec.ts b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.call-opcodes.spec.ts index 1cb8e4a9eab..54fa4316604 100644 --- a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.call-opcodes.spec.ts +++ b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.call-opcodes.spec.ts @@ -15,16 +15,12 @@ import { fromPairs } from 'lodash' /* Internal Imports */ import { - Address, GAS_LIMIT, DEFAULT_OPCODE_WHITELIST_MASK, - DEFAULT_ETHNODE_GAS_LIMIT, -} from '../../../test-helpers/core-helpers' -import { + Address, manuallyDeployOvmContract, addressToBytes32Address, didCreateSucceed, - gasLimit, encodeMethodId, encodeRawArguments, } from '../../../test-helpers' @@ -450,7 +446,7 @@ describe('Execution Manager -- Call opcodes', () => { const receipt = await wallet.sendTransaction({ to: executionManager.address, data: add0x(data), - gasLimit, + gasLimit: GAS_LIMIT, }) return receipt.hash @@ -477,7 +473,7 @@ describe('Execution Manager -- Call opcodes', () => { return executionManager.provider.call({ to: executionManager.address, data, - gasLimit, + gasLimit: GAS_LIMIT, }) } }) diff --git a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.code-opcodes.spec.ts b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.code-opcodes.spec.ts index 035151e1bf6..52e1d393fd7 100644 --- a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.code-opcodes.spec.ts +++ b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.code-opcodes.spec.ts @@ -13,12 +13,9 @@ import { Contract, ContractFactory, Signer } from 'ethers' /* Internal Imports */ import { - Address, GAS_LIMIT, DEFAULT_OPCODE_WHITELIST_MASK, - DEFAULT_ETHNODE_GAS_LIMIT, -} from '../../../test-helpers/core-helpers' -import { + Address, manuallyDeployOvmContract, executeOVMCall, addressToBytes32Address, diff --git a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.context-opcodes.spec.ts b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.context-opcodes.spec.ts index 85e4a082ebb..cb7872f8998 100644 --- a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.context-opcodes.spec.ts +++ b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.context-opcodes.spec.ts @@ -16,17 +16,13 @@ import { fromPairs } from 'lodash' /* Internal Imports */ import { - Address, GAS_LIMIT, DEFAULT_OPCODE_WHITELIST_MASK, - DEFAULT_ETHNODE_GAS_LIMIT, -} from '../../../test-helpers/core-helpers' -import { + Address, manuallyDeployOvmContract, addressToBytes32Address, encodeRawArguments, encodeMethodId, - gasLimit, } from '../../../test-helpers' /* Logging */ @@ -229,7 +225,7 @@ describe('Execution Manager -- Context opcodes', () => { return executionManager.provider.call({ to: executionManager.address, data, - gasLimit, + gasLimit: GAS_LIMIT, }) } }) diff --git a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.create-opcodes.spec.ts b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.create-opcodes.spec.ts index 3a09c30aa60..e539756d543 100644 --- a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.create-opcodes.spec.ts +++ b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.create-opcodes.spec.ts @@ -10,10 +10,6 @@ import { fromPairs } from 'lodash' import { DEFAULT_OPCODE_WHITELIST_MASK, GAS_LIMIT, - DEFAULT_ETHNODE_GAS_LIMIT, -} from '../../../test-helpers/core-helpers' -import { - gasLimit, executeOVMCall, encodeMethodId, encodeRawArguments, @@ -31,11 +27,6 @@ const methodIds = fromPairs( /* Tests */ describe('ExecutionManager -- Create opcodes', () => { - let wallet: Signer - before(async () => { - ;[wallet] = await ethers.getSigners() - }) - let ExecutionManager: ContractFactory let SimpleStorage: ContractFactory let InvalidOpcodes: ContractFactory @@ -91,7 +82,7 @@ describe('ExecutionManager -- Create opcodes', () => { const result = await executionManager.provider.call({ to: safetyCheckedExecutionManager.address, data, - gasLimit, + gasLimit: GAS_LIMIT, }) log.debug(`Result: [${result}]`) @@ -112,7 +103,7 @@ describe('ExecutionManager -- Create opcodes', () => { const result = await executionManager.provider.call({ to: executionManager.address, data, - gasLimit, + gasLimit: GAS_LIMIT, }) log.debug(`Result: [${result}]`) @@ -131,7 +122,7 @@ describe('ExecutionManager -- Create opcodes', () => { const result = await executionManager.provider.call({ to: safetyCheckedExecutionManager.address, data, - gasLimit, + gasLimit: GAS_LIMIT, }) log.debug(`Result: [${result}]`) diff --git a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.executeCall.spec.ts b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.executeCall.spec.ts index ccd02a409ba..1bb09e48599 100644 --- a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.executeCall.spec.ts +++ b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.executeCall.spec.ts @@ -9,21 +9,16 @@ import { TestUtils, getCurrentTime, } from '@eth-optimism/core-utils' -import { Contract, ContractFactory, Signer } from 'ethers' -import * as ethereumjsAbi from 'ethereumjs-abi' +import { Contract, ContractFactory } from 'ethers' /* Internal Imports */ import { - Address, GAS_LIMIT, CHAIN_ID, DEFAULT_OPCODE_WHITELIST_MASK, - DEFAULT_ETHNODE_GAS_LIMIT, - getUnsignedTransactionCalldata, -} from '../../../test-helpers/core-helpers' -import { - manuallyDeployOvmContract, ZERO_UINT, + Address, + manuallyDeployOvmContract, signTransaction, getSignedComponents, getWallets, @@ -34,10 +29,6 @@ const log = getLogger('execution-manager-calls', true) export const abi = new ethers.utils.AbiCoder() -const unsignedCallMethodId: string = ethereumjsAbi - .methodID('executeTransaction', []) - .toString('hex') - /* Tests */ describe('Execution Manager -- Call opcodes', () => { const provider = ethers.provider @@ -85,8 +76,7 @@ describe('Execution Manager -- Call opcodes', () => { const intParam = 0 const bytesParam = '0xdeadbeef' // Generate our tx calldata - const calldata = getUnsignedTransactionCalldata( - DummyContract, + const calldata = DummyContract.interface.encodeFunctionData( 'dummyFunction', [intParam, bytesParam] ) @@ -127,8 +117,7 @@ describe('Execution Manager -- Call opcodes', () => { const intParam = 0 const bytesParam = '0xdeadbeef' // Generate our tx calldata - const calldata = getUnsignedTransactionCalldata( - DummyContract, + const calldata = DummyContract.interface.encodeFunctionData( 'dummyFunction', [intParam, bytesParam] ) @@ -163,8 +152,7 @@ describe('Execution Manager -- Call opcodes', () => { const intParam = 0 const bytesParam = '0xdeadbeef' // Generate our tx calldata - const calldata = getUnsignedTransactionCalldata( - DummyContract, + const calldata = DummyContract.interface.encodeFunctionData( 'dummyFunction', [intParam, bytesParam] ) @@ -200,8 +188,7 @@ describe('Execution Manager -- Call opcodes', () => { const intParam = 0 const bytesParam = '0xdeadbeef' // Generate our tx calldata - const calldata = getUnsignedTransactionCalldata( - DummyContract, + const calldata = DummyContract.interface.encodeFunctionData( 'dummyFunction', [intParam, bytesParam] ) @@ -238,8 +225,7 @@ describe('Execution Manager -- Call opcodes', () => { const intParam = 1 const bytesParam = '0xdeadbeef' // Generate our tx calldata - const calldata = getUnsignedTransactionCalldata( - DummyContract, + const calldata = DummyContract.interface.encodeFunctionData( 'dummyFunction', [intParam, bytesParam] ) @@ -272,14 +258,12 @@ describe('Execution Manager -- Call opcodes', () => { it('reverts when it makes a call that reverts', async () => { // Generate our tx internalCalldata - const internalCalldata = getUnsignedTransactionCalldata( - DummyContract, + const internalCalldata = DummyContract.interface.encodeFunctionData( 'dummyRevert', [] ) - const calldata = getUnsignedTransactionCalldata( - executionManager, + const calldata = ExecutionManager.interface.encodeFunctionData( 'executeTransaction', [ ZERO_UINT, @@ -314,14 +298,12 @@ describe('Execution Manager -- Call opcodes', () => { it('reverts when it makes a call that fails a require', async () => { // Generate our tx internalCalldata - const internalCalldata = getUnsignedTransactionCalldata( - DummyContract, + const internalCalldata = DummyContract.interface.encodeFunctionData( 'dummyFailingRequire', [] ) - const calldata = getUnsignedTransactionCalldata( - executionManager, + const calldata = ExecutionManager.interface.encodeFunctionData( 'executeTransaction', [ ZERO_UINT, diff --git a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.l1-l2-opcodes.spec.ts b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.l1-l2-opcodes.spec.ts index e9cf50e48a9..dfa9e2f6f45 100644 --- a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.l1-l2-opcodes.spec.ts +++ b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.l1-l2-opcodes.spec.ts @@ -15,15 +15,12 @@ import { cloneDeep, fromPairs } from 'lodash' /* Internal Imports */ import { - Address, GAS_LIMIT, DEFAULT_OPCODE_WHITELIST_MASK, L2_TO_L1_MESSAGE_PASSER_OVM_ADDRESS, -} from '../../../test-helpers/core-helpers' -import { + Address, manuallyDeployOvmContract, addressToBytes32Address, - gasLimit, encodeMethodId, encodeRawArguments, } from '../../../test-helpers' @@ -156,7 +153,7 @@ describe('Execution Manager -- L1 <-> L2 Opcodes', () => { const txResult = await wallet.sendTransaction({ to: executionManager.address, data: add0x(data), - gasLimit, + gasLimit: GAS_LIMIT, }) const receipt = await provider.getTransactionReceipt(txResult.hash) diff --git a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.purity-checking.spec.ts b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.purity-checking.spec.ts index 33a3136e442..eb4964336a0 100644 --- a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.purity-checking.spec.ts +++ b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.purity-checking.spec.ts @@ -10,9 +10,6 @@ import { TransactionReceipt } from 'ethers/providers' import { DEFAULT_OPCODE_WHITELIST_MASK, GAS_LIMIT, - DEFAULT_ETHNODE_GAS_LIMIT, -} from '../../../test-helpers/core-helpers' -import { manuallyDeployOvmContractReturnReceipt, didCreateSucceed, } from '../../../test-helpers' diff --git a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.recover-eoa-address.spec.ts b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.recover-eoa-address.spec.ts index 4ebf8e57e8f..62efcaf191b 100644 --- a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.recover-eoa-address.spec.ts +++ b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.recover-eoa-address.spec.ts @@ -3,16 +3,13 @@ import '../../../setup' /* External Imports */ import { ethers } from '@nomiclabs/buidler' import { getLogger } from '@eth-optimism/core-utils' -import { Contract, Wallet, ContractFactory } from 'ethers' +import { Contract, ContractFactory } from 'ethers' /* Internal Imports */ import { CHAIN_ID, DEFAULT_OPCODE_WHITELIST_MASK, GAS_LIMIT, - DEFAULT_ETHNODE_GAS_LIMIT, -} from '../../../test-helpers/core-helpers' -import { signTransaction, getSignedComponents, getWallets, diff --git a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.storage-opcodes.spec.ts b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.storage-opcodes.spec.ts index 3dc85834d38..ce82b2100ce 100644 --- a/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.storage-opcodes.spec.ts +++ b/packages/contracts/test/contracts/ovm/execution-manager/ExecutionManager.storage-opcodes.spec.ts @@ -4,16 +4,11 @@ import '../../../setup' import { ethers } from '@nomiclabs/buidler' import { abi, getLogger, add0x } from '@eth-optimism/core-utils' import { Contract, Signer, ContractFactory } from 'ethers' -import { fromPairs } from 'lodash' /* Internal Imports */ import { DEFAULT_OPCODE_WHITELIST_MASK, GAS_LIMIT, - DEFAULT_ETHNODE_GAS_LIMIT, -} from '../../../test-helpers/core-helpers' -import { - gasLimit, encodeMethodId, encodeRawArguments, } from '../../../test-helpers' @@ -21,13 +16,6 @@ import { /* Logging */ const log = getLogger('execution-manager-storage', true) -const methodIds = fromPairs( - ['ovmSSTORE', 'ovmSLOAD'].map((methodId) => [ - methodId, - encodeMethodId(methodId), - ]) -) - /* Tests */ describe('ExecutionManager -- Storage opcodes', () => { const provider = ethers.provider @@ -63,7 +51,7 @@ describe('ExecutionManager -- Storage opcodes', () => { const tx = await wallet.sendTransaction({ to: executionManager.address, data, - gasLimit, + gasLimit: GAS_LIMIT, }) const reciept = await provider.getTransactionReceipt(tx.hash) @@ -104,7 +92,7 @@ describe('ExecutionManager -- Storage opcodes', () => { const result = await executionManager.provider.call({ to: executionManager.address, data, - gasLimit, + gasLimit: GAS_LIMIT, }) // It should load the value which we just set diff --git a/packages/contracts/test/contracts/queue/RollupQueue.spec.ts b/packages/contracts/test/contracts/queue/RollupQueue.spec.ts index 9e358a70397..9ae40b76e9e 100644 --- a/packages/contracts/test/contracts/queue/RollupQueue.spec.ts +++ b/packages/contracts/test/contracts/queue/RollupQueue.spec.ts @@ -6,7 +6,7 @@ import { getLogger, sleep, TestUtils } from '@eth-optimism/core-utils' import { Signer, ContractFactory, Contract } from 'ethers' /* Internal Imports */ -import { TxQueueBatch } from '../../test-helpers/rl-helpers' +import { TxQueueBatch } from '../../test-helpers' /* Logging */ const log = getLogger('rollup-queue', true) diff --git a/packages/contracts/test/contracts/utils/ContractAddressGenerator.spec.ts b/packages/contracts/test/contracts/utils/ContractAddressGenerator.spec.ts index 1f5bfa51722..38a85e3f68e 100644 --- a/packages/contracts/test/contracts/utils/ContractAddressGenerator.spec.ts +++ b/packages/contracts/test/contracts/utils/ContractAddressGenerator.spec.ts @@ -5,8 +5,7 @@ import { ethers } from '@nomiclabs/buidler' import { utils, Contract, ContractFactory, Signer } from 'ethers' /* Internal Imports */ -import { create2Tests } from '../../test-helpers/data/create2.test.json' -import { buildCreate2Address } from '../../test-helpers' +import { buildCreate2Address, CREATE2_TEST_JSON } from '../../test-helpers' /* Tests */ describe('ContractAddressGenerator', () => { @@ -86,9 +85,9 @@ describe('ContractAddressGenerator', () => { }) describe('buildCreate2Address helper', async () => { - for (const test of Object.keys(create2Tests)) { + for (const test of Object.keys(CREATE2_TEST_JSON)) { it(`should properly generate CREATE2 address from ${test}`, async () => { - const { address, salt, init_code, result } = create2Tests[test] + const { address, salt, init_code, result } = CREATE2_TEST_JSON[test] const computedAddress = buildCreate2Address(address, salt, init_code) computedAddress.should.equal(result.toLowerCase()) }) @@ -96,9 +95,9 @@ describe('ContractAddressGenerator', () => { }) describe('getAddressFromCREATE2', async () => { - for (const test of Object.keys(create2Tests)) { + for (const test of Object.keys(CREATE2_TEST_JSON)) { it(`should properly generate CREATE2 address from ${test}`, async () => { - const { address, salt, init_code, result } = create2Tests[test] + const { address, salt, init_code, result } = CREATE2_TEST_JSON[test] const computedAddress = await contractAddressGenerator.getAddressFromCREATE2( address, salt, diff --git a/packages/contracts/test/contracts/utils/EthMerkleTrie.spec.ts b/packages/contracts/test/contracts/utils/EthMerkleTrie.spec.ts index a97507d1977..090f203687a 100644 --- a/packages/contracts/test/contracts/utils/EthMerkleTrie.spec.ts +++ b/packages/contracts/test/contracts/utils/EthMerkleTrie.spec.ts @@ -8,7 +8,7 @@ import { keccak256 } from 'ethers/utils' import { makeAccountStorageProofTest, makeAccountStorageUpdateTest, -} from '../../test-helpers/trie-helpers' +} from '../../test-helpers' const DUMMY_ACCOUNT_ADDRESSES = [ '0x548855F6073c3430285c61Ed0ABf62F12084aA41', diff --git a/packages/contracts/test/contracts/utils/RLPEncode.spec.ts b/packages/contracts/test/contracts/utils/RLPEncode.spec.ts index e652c57269f..69398205e19 100644 --- a/packages/contracts/test/contracts/utils/RLPEncode.spec.ts +++ b/packages/contracts/test/contracts/utils/RLPEncode.spec.ts @@ -5,7 +5,7 @@ import { ethers } from '@nomiclabs/buidler' import { Contract, ContractFactory } from 'ethers' /* Internal Imports */ -import { rlpTests } from '../../test-helpers/data/rlp.test.json' +import { RLP_TEST_JSON } from '../../test-helpers' /* Tests */ describe('RLP Encoder', () => { @@ -49,11 +49,11 @@ describe('RLP Encoder', () => { } describe('Official Ethereum RLP Tests', async () => { - for (const test of Object.keys(rlpTests)) { + for (const test of Object.keys(RLP_TEST_JSON)) { it(`should properly encode ${test}`, async () => { - const input = rlpTests[test].in + const input = RLP_TEST_JSON[test].in const encodedOutput = await encode(input) - encodedOutput.should.equal(rlpTests[test].out) + encodedOutput.should.equal(RLP_TEST_JSON[test].out) }) } }) diff --git a/packages/contracts/test/contracts/utils/SafetyChecker.spec.ts b/packages/contracts/test/contracts/utils/SafetyChecker.spec.ts index c9221adf013..e9a373e8f15 100644 --- a/packages/contracts/test/contracts/utils/SafetyChecker.spec.ts +++ b/packages/contracts/test/contracts/utils/SafetyChecker.spec.ts @@ -11,7 +11,7 @@ import { DEFAULT_UNSAFE_OPCODES, EVMOpcode, Opcode, -} from '../../test-helpers/core-helpers' +} from '../../test-helpers' /* Logging */ const log = getLogger('safety-checker', true) diff --git a/packages/contracts/test/test-helpers/batch-helpers.ts b/packages/contracts/test/test-helpers/batch-helpers.ts new file mode 100644 index 00000000000..f1b547fdeed --- /dev/null +++ b/packages/contracts/test/test-helpers/batch-helpers.ts @@ -0,0 +1,16 @@ +export function makeRepeatedBytes(value: string, length: number): string { + const repeated = value.repeat((length * 2) / value.length + 1) + return '0x' + repeated.slice(0, length * 2) +} + +export function makeRandomBlockOfSize(blockSize: number): string[] { + const block = [] + for (let i = 0; i < blockSize; i++) { + block.push(makeRepeatedBytes('' + Math.floor(Math.random() * 500 + 1), 32)) + } + return block +} + +export function makeRandomBatchOfSize(batchSize: number): string[] { + return makeRandomBlockOfSize(batchSize) +} diff --git a/packages/contracts/test/test-helpers/constants.ts b/packages/contracts/test/test-helpers/constants.ts index 8987a33a8c7..f8e19027085 100644 --- a/packages/contracts/test/test-helpers/constants.ts +++ b/packages/contracts/test/test-helpers/constants.ts @@ -1,6 +1,12 @@ +/* External Imports */ import { ethers } from 'ethers' import { defaultAccounts } from 'ethereum-waffle' +/* Internal Imports */ +import { EVMOpcode, Opcode } from './types' + +export { ZERO_ADDRESS } from '@eth-optimism/core-utils' + export const DEFAULT_ACCOUNTS = defaultAccounts export const DEFAULT_ACCOUNTS_BUIDLER = defaultAccounts.map((account) => { return { @@ -8,3 +14,38 @@ export const DEFAULT_ACCOUNTS_BUIDLER = defaultAccounts.map((account) => { privateKey: account.secretKey, } }) + +export const DEFAULT_UNSAFE_OPCODES: EVMOpcode[] = [ + Opcode.ADDRESS, + Opcode.BALANCE, + Opcode.BLOCKHASH, + Opcode.CALLCODE, + Opcode.CALLER, + Opcode.COINBASE, + Opcode.CREATE, + Opcode.CREATE2, + Opcode.DELEGATECALL, + Opcode.DIFFICULTY, + Opcode.EXTCODESIZE, + Opcode.EXTCODECOPY, + Opcode.EXTCODEHASH, + Opcode.GASLIMIT, + Opcode.GASPRICE, + Opcode.NUMBER, + Opcode.ORIGIN, + Opcode.SELFBALANCE, + Opcode.SELFDESTRUCT, + Opcode.SLOAD, + Opcode.SSTORE, + Opcode.STATICCALL, + Opcode.TIMESTAMP, +] + +export const GAS_LIMIT = 1_000_000_000 +export const DEFAULT_OPCODE_WHITELIST_MASK = + '0x600a0000000000000000001fffffffffffffffff0fcf004063f000013fff0fff' +export const L2_TO_L1_MESSAGE_PASSER_OVM_ADDRESS = + '0x4200000000000000000000000000000000000000' + +export const CHAIN_ID = 108 +export const ZERO_UINT = '00'.repeat(32) diff --git a/packages/contracts/test/test-helpers/data/index.ts b/packages/contracts/test/test-helpers/data/index.ts new file mode 100644 index 00000000000..296274fb633 --- /dev/null +++ b/packages/contracts/test/test-helpers/data/index.ts @@ -0,0 +1,5 @@ +import { create2Tests } from './create2.test.json' +import { rlpTests } from './rlp.test.json' + +export const CREATE2_TEST_JSON = create2Tests +export const RLP_TEST_JSON = rlpTests diff --git a/packages/contracts/test/test-helpers/ethereum-helpers.ts b/packages/contracts/test/test-helpers/ethereum-helpers.ts new file mode 100644 index 00000000000..ee11deb1860 --- /dev/null +++ b/packages/contracts/test/test-helpers/ethereum-helpers.ts @@ -0,0 +1,116 @@ +import { Transaction } from 'ethers/utils' +import { Log } from 'ethers/providers' +import * as ethereumjsAbi from 'ethereumjs-abi' +import { + add0x, + remove0x, + keccak256, + abi, + strToHexStr, + bufferUtils, + bufToHexString, + hexStrToBuf, +} from '@eth-optimism/core-utils' + +/** + * Deterministically computes the smart contract address given + * the account that will deploy the contract (factory contract) + * the salt as uint256 and the contract bytecode + * Source: https://github.com/miguelmota/solidity-create2-example + * Note: Use this function to generate new tests + */ +export const buildCreate2Address = ( + creatorAddress: string, + saltHex: string, + byteCode: string +): string => { + const preimage: string = `ff${remove0x(creatorAddress)}${remove0x( + saltHex + )}${keccak256(byteCode)}` + return add0x( + keccak256(preimage) + .slice(-40) + .toLowerCase() + ) +} + +/** + * Waits for a transaction to complete and returns the result + * @param n the Number to convert + * @returns The buffer + */ +export const getTransactionResult = async ( + provider: any, + tx: Transaction, + returnType: string +): Promise => { + const receipt = await provider.waitForTransaction(tx.hash) + return abi.decode([returnType], receipt.logs.pop().data) +} + +/** + * Builds a ethers.js Log object from it's respective parts + * + * @param address The address the logs was sent from + * @param event The event identifier + * @param data The event data + * @returns an ethers.js Log object + */ +export const buildLog = ( + address: string, + event: string, + data: string[], + logIndex: number +): Log => { + const types = event.match(/\((.+)\)/) + const encodedData = types ? abi.encode(types[1].split(','), data) : '0x' + + return { + address, + topics: [add0x(keccak256(strToHexStr(event)))], + data: encodedData, + logIndex, + } +} + +/** + * Computes the method id of a function name and encodes it as + * a hexidecimal string. + * @param The name of the function + * @returns The hex-encoded methodId + */ +export const encodeMethodId = (functionName: string): string => { + return ethereumjsAbi.methodID(functionName, []).toString('hex') +} + +/** + * Encodes an array of function arguments into a hex string. + * @param any[] An array of arguments + * @returns The hex-encoded function arguments + */ +export const encodeRawArguments = (args: any[]): string => { + return args + .map((arg) => { + if (Number.isInteger(arg)) { + return bufferUtils.numberToBuffer(arg).toString('hex') + } else if (Buffer.isBuffer(arg)) { + return arg.toString('hex') + } else if (arg && arg.startsWith('0x')) { + return remove0x(arg) + } else { + return arg + } + }) + .join('') +} + +/** + * Gets a padded big-endian 32-byte address string from an address string. + * @param addr The 20-byte address string + * @returns The 0x-prefixed 32-byte address string + */ +export const addressToBytes32Address = (addr: string): string => { + return bufToHexString( + bufferUtils.padLeft(hexStrToBuf(addr), 32) + ).toLowerCase() +} diff --git a/packages/contracts/test/test-helpers/index.ts b/packages/contracts/test/test-helpers/index.ts index 2ee737a4bf4..b67ce455533 100644 --- a/packages/contracts/test/test-helpers/index.ts +++ b/packages/contracts/test/test-helpers/index.ts @@ -1,583 +1,8 @@ -/* External Imports */ -import { ethers } from '@nomiclabs/buidler' -import { Transaction } from 'ethers/utils' -import * as ethereumjsAbi from 'ethereumjs-abi' - -/* Internal Imports */ -import * as ExecutionManager from '../../artifacts/ExecutionManager.json' - -const executionManagerInterface = new ethers.utils.Interface( - ExecutionManager.abi -) - -/********************************** - * Byte String Generation Helpers * - *********************************/ - -// Create a byte string of some length in bytes. It repeats the value provided until the -// string hits that length -export function makeRepeatedBytes(value: string, length: number): string { - const repeated = value.repeat((length * 2) / value.length + 1) - const sliced = repeated.slice(0, length * 2) - return '0x' + sliced -} - -export function makeRandomBlockOfSize(blockSize: number): string[] { - const block = [] - for (let i = 0; i < blockSize; i++) { - block.push(makeRepeatedBytes('' + Math.floor(Math.random() * 500 + 1), 32)) - } - return block -} - -export function makeRandomBatchOfSize(batchSize: number): string[] { - return makeRandomBlockOfSize(batchSize) -} - -/* External Imports */ -import { - ZERO_ADDRESS, - getLogger, - add0x, - abi, - getCurrentTime, - keccak256, - strToHexStr, - remove0x, - hexStrToBuf, - bufToHexString, - bufferUtils, - logError, - BloomFilter, - numberToHexString, -} from '@eth-optimism/core-utils' -import { Contract, ContractFactory, Wallet, Signer } from 'ethers' -import { - Provider, - TransactionReceipt, - JsonRpcProvider, - Log, -} from 'ethers/providers' - -/* Internal Imports */ -import { DEFAULT_ACCOUNTS } from './constants' -import { Address, CHAIN_ID, GAS_LIMIT } from './core-helpers' - -type Signature = [string, string, string] - -/** - * Convert internal transaction logs into OVM logs. Or in other words, take the logs which - * are emitted by a normal Ganache or Geth node (this will include logs from the ExecutionManager), - * parse them, and then convert them into logs which look like they would if you were running this tx - * using an OVM backend. - * - * NOTE: The input logs MUST NOT be stripped of any Execution Manager events, or this function will break. - * - * @param logs An array of internal transaction logs which we will parse and then convert. - * @param executionManagerAddress The address of the Execution Manager contract for log parsing. - * @return the converted logs - */ -export const convertInternalLogsToOvmLogs = ( - logs: Log[], - executionManagerAddress: string -): Log[] => { - const uppercaseExecutionMangerAddress: string = executionManagerAddress.toUpperCase() - let activeContractAddress: string = logs[0] ? logs[0].address : ZERO_ADDRESS - const stringsToDebugLog = [`Parsing internal logs ${JSON.stringify(logs)}: `] - const ovmLogs = [] - let numberOfEMLogs = 0 - let prevEMLogIndex = 0 - logs.forEach((log) => { - if (log.address.toUpperCase() === uppercaseExecutionMangerAddress) { - if (log.logIndex <= prevEMLogIndex) { - // This indicates a new TX, so reset number of EM logs to 0 - numberOfEMLogs = 0 - } - numberOfEMLogs++ - prevEMLogIndex = log.logIndex - const executionManagerLog = executionManagerInterface.parseLog(log) - if (!executionManagerLog) { - stringsToDebugLog.push( - `Execution manager emitted log with topics: ${log.topics}. These were unrecognized by the interface parser-but definitely not an ActiveContract event, ignoring...` - ) - } else if (executionManagerLog.name === 'ActiveContract') { - activeContractAddress = executionManagerLog.args['_activeContract'] - } - } else { - const newIndex = log.logIndex - numberOfEMLogs - ovmLogs.push({ - ...log, - address: activeContractAddress, - logIndex: newIndex, - }) - } - }) - return ovmLogs -} - -export const revertMessagePrefix: string = - 'VM Exception while processing transaction: revert ' - -/** - * Gets ovm transaction metadata from an internal transaction receipt. - * - * @param internalTxReceipt the internal transaction receipt - * @return ovm transaction metadata - */ -export const getSuccessfulOvmTransactionMetadata = ( - internalTxReceipt: TransactionReceipt -): any => { - let ovmTo - let ovmFrom - let ovmCreatedContractAddress - let ovmTxSucceeded - - if (!internalTxReceipt) { - return undefined - } - - const logs = internalTxReceipt.logs - .map((log) => executionManagerInterface.parseLog(log)) - .filter((log) => log != null) - const callingWithEoaLog = logs.find((log) => log.name === 'CallingWithEOA') - - const revertEvents: any[] = logs.filter((x) => x.name === 'EOACallRevert') - ovmTxSucceeded = !revertEvents.length - - if (callingWithEoaLog) { - ovmFrom = callingWithEoaLog.args._ovmFromAddress - ovmTo = callingWithEoaLog.args._ovmToAddress - } - - const eoaContractCreatedLog = logs.find( - (log) => log.name === 'EOACreatedContract' - ) - if (eoaContractCreatedLog) { - ovmCreatedContractAddress = eoaContractCreatedLog.args._ovmContractAddress - ovmTo = ovmCreatedContractAddress - } - - const metadata: any = { - ovmTxSucceeded, - ovmTo, - ovmFrom, - ovmCreatedContractAddress, - } - - if (!ovmTxSucceeded) { - try { - if ( - !revertEvents[0].values['_revertMessage'] || - revertEvents[0].values['_revertMessage'].length <= 2 - ) { - metadata.revertMessage = revertMessagePrefix - } else { - // decode revert message from event - const msgBuf: any = abi.decode( - ['bytes'], - // Remove the first 4 bytes of the revert message that is a sighash - ethers.utils.hexDataSlice(revertEvents[0].values['_revertMessage'], 4) - ) - const revertMsg: string = hexStrToBuf(msgBuf[0]).toString('utf8') - metadata.revertMessage = `${revertMessagePrefix}${revertMsg}` - logger.debug(`Decoded revert message: [${metadata.revertMessage}]`) - } - } catch (e) { - logError(logger, `Error decoding revert event!`, e) - } - } - - return metadata -} - -export const getWallets = (): Wallet[] => { - return DEFAULT_ACCOUNTS.map((account) => { - return new ethers.Wallet(account.secretKey) - }) -} - -export const signTransaction = async ( - wallet: Wallet, - transaction: any -): Promise => { - return wallet.signTransaction(transaction) -} - -export const getSignedComponents = (signed: string): any[] => { - return ethers.utils.RLP.decode(signed).slice(-3) -} - -/** - * Converts an EVM receipt to an OVM receipt. - * - * @param internalTxReceipt The EVM tx receipt to convert to an OVM tx receipt - * @param ovmTxHash The OVM tx hash to replace the internal tx hash with. - * @returns The converted receipt - */ -export const internalTxReceiptToOvmTxReceipt = async ( - internalTxReceipt: TransactionReceipt, - executionManagerAddress: string, - ovmTxHash?: string -): Promise => { - const ovmTransactionMetadata = getSuccessfulOvmTransactionMetadata( - internalTxReceipt - ) - // Construct a new receipt - - // Start off with the internalTxReceipt - const ovmTxReceipt: any = internalTxReceipt - // Add the converted logs - ovmTxReceipt.logs = convertInternalLogsToOvmLogs( - internalTxReceipt.logs, - executionManagerAddress - ) - // Update the to and from fields if necessary - if (ovmTransactionMetadata.ovmTo) { - ovmTxReceipt.to = ovmTransactionMetadata.ovmTo - } - // Also update the contractAddress in case we deployed a new contract - ovmTxReceipt.contractAddress = !!ovmTransactionMetadata.ovmCreatedContractAddress - ? ovmTransactionMetadata.ovmCreatedContractAddress - : null - - ovmTxReceipt.status = ovmTransactionMetadata.ovmTxSucceeded ? 1 : 0 - - if (!!ovmTxReceipt.transactionHash && !!ovmTxHash) { - ovmTxReceipt.transactionHash = ovmTxHash - } - - if (ovmTransactionMetadata.revertMessage !== undefined) { - ovmTxReceipt.revertMessage = ovmTransactionMetadata.revertMessage - } - - logger.debug('Ovm parsed logs:', ovmTxReceipt.logs) - const logsBloom = new BloomFilter() - ovmTxReceipt.logs.forEach((log, index) => { - logsBloom.add(hexStrToBuf(log.address)) - log.topics.forEach((topic) => logsBloom.add(hexStrToBuf(topic))) - log.transactionHash = ovmTxReceipt.transactionHash - log.logIndex = numberToHexString(index) as any - }) - ovmTxReceipt.logsBloom = bufToHexString(logsBloom.bitvector) - - // Return! - return ovmTxReceipt -} - -export const ZERO_UINT = '00'.repeat(32) - -export const gasLimit = 6_700_000 -const logger = getLogger('helpers', true) - -/** - * Helper function to ensure GoVM is connected - */ -export const ensureGovmIsConnected = async (provider: JsonRpcProvider) => { - let connected - try { - connected = (await provider.send('web3_clientVersion', [])).startsWith( - 'govm' - ) - } catch { - connected = false - } - connected.should.be.equal( - true, - 'Govm is not connected. Please run govm as described [here](https://github.com/op-optimism/go-ethereum/blob/master/OPTIMISM_README.md)' - ) -} -/** - * Helper function for generating initcode based on a contract definition & constructor arguments - */ -export const manuallyDeployOvmContractReturnReceipt = async ( - wallet: Signer, - provider: any, - executionManager: Contract, - contractDefinition: ContractFactory, - constructorArguments: any[] -): Promise => { - const initCode = contractDefinition.getDeployTransaction( - ...constructorArguments - ).data as string - - const receipt: TransactionReceipt = await executeTransaction( - executionManager, - wallet, - undefined, - initCode, - false - ) - - return internalTxReceiptToOvmTxReceipt(receipt, executionManager.address) -} - -/** - * Helper function for generating initcode based on a contract definition & constructor arguments - */ -export const manuallyDeployOvmContract = async ( - wallet: Signer, - provider: any, - executionManager: Contract, - contractDefinition: any, - constructorArguments: any[] -): Promise
=> { - const receipt = await manuallyDeployOvmContractReturnReceipt( - wallet, - provider, - executionManager, - contractDefinition, - constructorArguments - ) - return receipt.contractAddress -} - -export const executeTransaction = async ( - executionManager: Contract, - wallet: Signer, - to: Address, - data: string, - allowRevert: boolean -): Promise => { - // Verify that the transaction is not accidentally sending to the ZERO_ADDRESS - if (to === ZERO_ADDRESS) { - throw new Error('Sending to Zero Address disallowed') - } - - // Get the `to` field -- NOTE: We have to set `to` to equal ZERO_ADDRESS if this is a contract create - const ovmTo = to === null || to === undefined ? ZERO_ADDRESS : to - - // Actually make the call - const tx = await executionManager.executeTransaction( - getCurrentTime(), - 0, - ovmTo, - data, - await wallet.getAddress(), - ZERO_ADDRESS, - allowRevert - ) - // Return the parsed transaction values - return executionManager.provider.waitForTransaction(tx.hash) -} - -export const executeEOACall = async ( - executionManager: Contract, - wallet: Wallet, - to: Address, - data: string -): Promise => { - // Verify that the transaction is not accidentally sending to the ZERO_ADDRESS - if (to === ZERO_ADDRESS) { - throw new Error('Sending to Zero Address disallowed') - } - - // Get the nonce - const nonce = await executionManager.getOvmContractNonce(wallet.address) - // Create the transaction - const transaction = { - nonce, - gasLimit: GAS_LIMIT, - gasPrice: 0, - to, - value: 0, - data, - chainId: CHAIN_ID, - } - // Sign the transaction - const signedTransaction = await signTransaction(wallet, transaction) - - // Parse the tx that we just signed to get the signature - const ovmTx = ethers.utils.parseTransaction(signedTransaction) - // Get the to field -- NOTE: We have to set `to` to equal ZERO_ADDRESS if this is a contract create - const ovmTo = to === null || to === undefined ? ZERO_ADDRESS : to - - // Actually make the call - const tx = await executionManager.executeEOACall( - 0, - 0, - ovmTx.nonce, - ovmTo, - ovmTx.data, - ovmTx.v, - ovmTx.r, - ovmTx.s - ) - // Return the parsed transaction values - return executionManager.provider.waitForTransaction(tx.hash) -} - -/** - * Deterministically computes the smart contract address given - * the account that will deploy the contract (factory contract) - * the salt as uint256 and the contract bytecode - * Source: https://github.com/miguelmota/solidity-create2-example - * Note: Use this function to generate new tests - */ -export const buildCreate2Address = ( - creatorAddress, - saltHex, - byteCode -): Address => { - const preimage: string = `ff${remove0x(creatorAddress)}${remove0x( - saltHex - )}${keccak256(byteCode)}` - return add0x( - keccak256(preimage) - .slice(-40) - .toLowerCase() - ) -} - -/** - * Gets an address string from a bytes32 big-endian Address. - * @param bytes32Address The 32-byte address string - * @returns The 0x-prefixed 20-byte address string - */ -export const bytes32AddressToAddress = (bytes32Address: string): Address => { - return bufToHexString(hexStrToBuf(bytes32Address).slice(12)).toLowerCase() -} - -/** - * Gets a padded big-endian 32-byte address string from an address string. - * @param addr The 20-byte address string - * @returns The 0x-prefixed 32-byte address string - */ -export const addressToBytes32Address = (addr: Address): string => { - return bufToHexString( - bufferUtils.padLeft(hexStrToBuf(addr), 32) - ).toLowerCase() -} - -/** - * Converts a number to a 32-byte word hex string - * @param n the number to convert - * @returns The 0x-prefixed 32-byte address string - */ -export const numberToHexWord = (n: number): string => { - return bufToHexString(bufferUtils.padLeft(numberToBuf(n), 32)).toLowerCase() -} - -/** - * Converts a Number to a Buffer of bytes - * @param n the Number to convert - * @returns The buffer - */ -export const numberToBuf = (n: number): Buffer => { - const arr = new ArrayBuffer(4) - const view = new DataView(arr) - view.setUint32(0, n, false) - return Buffer.from(arr) -} - -/** - * Waits for a transaction to complete and returns the result - * @param n the Number to convert - * @returns The buffer - */ -export const getTransactionResult = async ( - provider: any, - tx: Transaction, - returnType: string -): Promise => { - const receipt = await provider.waitForTransaction(tx.hash) - return abi.decode([returnType], receipt.logs.pop().data) -} - -/** - * Returns whether the provided Create transaction succeeded. - * - * @param executionManager The ExecutionManager contract. - * @param createTxHash The transaction hash in question. - * @returns True if there was a successful create in this tx, false otherwise. - */ -export const didCreateSucceed = async ( - executionManager: Contract, - createTxHash: string -): Promise => { - const receipt = await executionManager.provider.waitForTransaction( - createTxHash - ) - return ( - receipt.logs - .map((x) => executionManager.interface.parseLog(x)) - .filter((x) => x.name === 'CreatedContract').length > 0 - ) -} - -/** - * Builds a ethers.js Log object from it's respective parts - * - * @param address The address the logs was sent from - * @param event The event identifier - * @param data The event data - * @returns an ethers.js Log object - */ -export const buildLog = ( - address: string, - event: string, - data: string[], - logIndex: number -): Log => { - const types = event.match(/\((.+)\)/) - const encodedData = types ? abi.encode(types[1].split(','), data) : '0x' - - return { - address, - topics: [add0x(keccak256(strToHexStr(event)))], - data: encodedData, - logIndex, - } -} - -/** - * Executes a call in the OVM - * @param The name of the function to call - * @param The function arguments - * @returns The return value of the function executed - */ -export const executeOVMCall = async ( - executionManager: Contract, - functionName: string, - args: any[] -): Promise => { - const data: string = add0x( - encodeMethodId(functionName) + encodeRawArguments(args) - ) - - return executionManager.provider.call({ - to: executionManager.address, - data, - gasLimit, - }) -} - -/** - * Computes the method id of a function name and encodes it as - * a hexidecimal string. - * @param The name of the function - * @returns The hex-encoded methodId - */ -export const encodeMethodId = (functionName: string): string => { - return ethereumjsAbi.methodID(functionName, []).toString('hex') -} - -/** - * Encodes an array of function arguments into a hex string. - * @param any[] An array of arguments - * @returns The hex-encoded function arguments - */ -export const encodeRawArguments = (args: any[]): string => { - return args - .map((arg) => { - if (Number.isInteger(arg)) { - return bufferUtils.numberToBuffer(arg).toString('hex') - } else if (Buffer.isBuffer(arg)) { - return arg.toString('hex') - } else if (arg && arg.startsWith('0x')) { - return remove0x(arg) - } else { - return arg - } - }) - .join('') -} +export * from './data' +export * from './types' +export * from './batch-helpers' +export * from './constants' +export * from './ethereum-helpers' +export * from './ovm-helpers' +export * from './trie-helpers' +export * from './wallet-helpers' diff --git a/packages/contracts/test/test-helpers/ovm-helpers.ts b/packages/contracts/test/test-helpers/ovm-helpers.ts new file mode 100644 index 00000000000..60bb0bac1a4 --- /dev/null +++ b/packages/contracts/test/test-helpers/ovm-helpers.ts @@ -0,0 +1,322 @@ +/* External Imports */ +import { ethers, Signer, Contract, ContractFactory } from 'ethers' +import { Log, TransactionReceipt, JsonRpcProvider } from 'ethers/providers' +import { + abi, + add0x, + hexStrToBuf, + getLogger, + logError, + BloomFilter, + numberToHexString, + bufToHexString, + getCurrentTime, +} from '@eth-optimism/core-utils' + +/* Internal Imports */ +import { ZERO_ADDRESS, GAS_LIMIT } from './constants' +import { Address } from './types' +import { encodeMethodId, encodeRawArguments } from './ethereum-helpers' + +/* Contract Imports */ +import { getContractInterface } from '../../index' + +const ExecutionManagerInterface = getContractInterface('ExecutionManager') +const logger = getLogger('contracts:test-helpers', true) +const revertMessagePrefix: string = + 'VM Exception while processing transaction: revert ' + +/** + * Convert internal transaction logs into OVM logs. Or in other words, take the logs which + * are emitted by a normal Ganache or Geth node (this will include logs from the ExecutionManager), + * parse them, and then convert them into logs which look like they would if you were running this tx + * using an OVM backend. + * + * NOTE: The input logs MUST NOT be stripped of any Execution Manager events, or this function will break. + * + * @param logs An array of internal transaction logs which we will parse and then convert. + * @param executionManagerAddress The address of the Execution Manager contract for log parsing. + * @return the converted logs + */ +export const convertInternalLogsToOvmLogs = ( + logs: Log[], + executionManagerAddress: string +): Log[] => { + const uppercaseExecutionMangerAddress: string = executionManagerAddress.toUpperCase() + let activeContractAddress: string = logs[0] ? logs[0].address : ZERO_ADDRESS + const stringsToDebugLog = [`Parsing internal logs ${JSON.stringify(logs)}: `] + const ovmLogs = [] + let numberOfEMLogs = 0 + let prevEMLogIndex = 0 + logs.forEach((log) => { + if (log.address.toUpperCase() === uppercaseExecutionMangerAddress) { + if (log.logIndex <= prevEMLogIndex) { + // This indicates a new TX, so reset number of EM logs to 0 + numberOfEMLogs = 0 + } + numberOfEMLogs++ + prevEMLogIndex = log.logIndex + const executionManagerLog = ExecutionManagerInterface.parseLog(log) + if (!executionManagerLog) { + stringsToDebugLog.push( + `Execution manager emitted log with topics: ${log.topics}. These were unrecognized by the interface parser-but definitely not an ActiveContract event, ignoring...` + ) + } else if (executionManagerLog.name === 'ActiveContract') { + activeContractAddress = executionManagerLog.args['_activeContract'] + } + } else { + const newIndex = log.logIndex - numberOfEMLogs + ovmLogs.push({ + ...log, + address: activeContractAddress, + logIndex: newIndex, + }) + } + }) + return ovmLogs +} + +/** + * Gets ovm transaction metadata from an internal transaction receipt. + * + * @param internalTxReceipt the internal transaction receipt + * @return ovm transaction metadata + */ +export const getSuccessfulOvmTransactionMetadata = ( + internalTxReceipt: TransactionReceipt +): any => { + let ovmTo + let ovmFrom + let ovmCreatedContractAddress + let ovmTxSucceeded + + if (!internalTxReceipt) { + return undefined + } + + const logs = internalTxReceipt.logs + .map((log) => ExecutionManagerInterface.parseLog(log)) + .filter((log) => log != null) + const callingWithEoaLog = logs.find((log) => log.name === 'CallingWithEOA') + + const revertEvents: any[] = logs.filter((x) => x.name === 'EOACallRevert') + ovmTxSucceeded = !revertEvents.length + + if (callingWithEoaLog) { + ovmFrom = callingWithEoaLog.args._ovmFromAddress + ovmTo = callingWithEoaLog.args._ovmToAddress + } + + const eoaContractCreatedLog = logs.find( + (log) => log.name === 'EOACreatedContract' + ) + if (eoaContractCreatedLog) { + ovmCreatedContractAddress = eoaContractCreatedLog.args._ovmContractAddress + ovmTo = ovmCreatedContractAddress + } + + const metadata: any = { + ovmTxSucceeded, + ovmTo, + ovmFrom, + ovmCreatedContractAddress, + } + + if (!ovmTxSucceeded) { + try { + if ( + !revertEvents[0].values['_revertMessage'] || + revertEvents[0].values['_revertMessage'].length <= 2 + ) { + metadata.revertMessage = revertMessagePrefix + } else { + // decode revert message from event + const msgBuf: any = abi.decode( + ['bytes'], + // Remove the first 4 bytes of the revert message that is a sighash + ethers.utils.hexDataSlice(revertEvents[0].values['_revertMessage'], 4) + ) + const revertMsg: string = hexStrToBuf(msgBuf[0]).toString('utf8') + metadata.revertMessage = `${revertMessagePrefix}${revertMsg}` + logger.debug(`Decoded revert message: [${metadata.revertMessage}]`) + } + } catch (e) { + logError(logger, `Error decoding revert event!`, e) + } + } + + return metadata +} +/** + * Converts an EVM receipt to an OVM receipt. + * + * @param internalTxReceipt The EVM tx receipt to convert to an OVM tx receipt + * @param ovmTxHash The OVM tx hash to replace the internal tx hash with. + * @returns The converted receipt + */ +export const internalTxReceiptToOvmTxReceipt = async ( + internalTxReceipt: TransactionReceipt, + executionManagerAddress: string, + ovmTxHash?: string +): Promise => { + const ovmTransactionMetadata = getSuccessfulOvmTransactionMetadata( + internalTxReceipt + ) + // Construct a new receipt + + // Start off with the internalTxReceipt + const ovmTxReceipt: any = internalTxReceipt + // Add the converted logs + ovmTxReceipt.logs = convertInternalLogsToOvmLogs( + internalTxReceipt.logs, + executionManagerAddress + ) + // Update the to and from fields if necessary + if (ovmTransactionMetadata.ovmTo) { + ovmTxReceipt.to = ovmTransactionMetadata.ovmTo + } + // Also update the contractAddress in case we deployed a new contract + ovmTxReceipt.contractAddress = !!ovmTransactionMetadata.ovmCreatedContractAddress + ? ovmTransactionMetadata.ovmCreatedContractAddress + : null + + ovmTxReceipt.status = ovmTransactionMetadata.ovmTxSucceeded ? 1 : 0 + + if (!!ovmTxReceipt.transactionHash && !!ovmTxHash) { + ovmTxReceipt.transactionHash = ovmTxHash + } + + if (ovmTransactionMetadata.revertMessage !== undefined) { + ovmTxReceipt.revertMessage = ovmTransactionMetadata.revertMessage + } + + logger.debug('Ovm parsed logs:', ovmTxReceipt.logs) + const logsBloom = new BloomFilter() + ovmTxReceipt.logs.forEach((log, index) => { + logsBloom.add(hexStrToBuf(log.address)) + log.topics.forEach((topic) => logsBloom.add(hexStrToBuf(topic))) + log.transactionHash = ovmTxReceipt.transactionHash + log.logIndex = numberToHexString(index) as any + }) + ovmTxReceipt.logsBloom = bufToHexString(logsBloom.bitvector) + + // Return! + return ovmTxReceipt +} + +/** + * Helper function for generating initcode based on a contract definition & constructor arguments + */ +export const manuallyDeployOvmContractReturnReceipt = async ( + wallet: Signer, + provider: any, + executionManager: Contract, + contractDefinition: ContractFactory, + constructorArguments: any[] +): Promise => { + const initCode = contractDefinition.getDeployTransaction( + ...constructorArguments + ).data as string + + const receipt: TransactionReceipt = await executeTransaction( + executionManager, + wallet, + undefined, + initCode, + false + ) + + return internalTxReceiptToOvmTxReceipt(receipt, executionManager.address) +} + +/** + * Helper function for generating initcode based on a contract definition & constructor arguments + */ +export const manuallyDeployOvmContract = async ( + wallet: Signer, + provider: any, + executionManager: Contract, + contractDefinition: any, + constructorArguments: any[] +): Promise
=> { + const receipt = await manuallyDeployOvmContractReturnReceipt( + wallet, + provider, + executionManager, + contractDefinition, + constructorArguments + ) + return receipt.contractAddress +} + +export const executeTransaction = async ( + executionManager: Contract, + wallet: Signer, + to: Address, + data: string, + allowRevert: boolean +): Promise => { + // Verify that the transaction is not accidentally sending to the ZERO_ADDRESS + if (to === ZERO_ADDRESS) { + throw new Error('Sending to Zero Address disallowed') + } + + // Get the `to` field -- NOTE: We have to set `to` to equal ZERO_ADDRESS if this is a contract create + const ovmTo = to === null || to === undefined ? ZERO_ADDRESS : to + + // Actually make the call + const tx = await executionManager.executeTransaction( + getCurrentTime(), + 0, + ovmTo, + data, + await wallet.getAddress(), + ZERO_ADDRESS, + allowRevert + ) + // Return the parsed transaction values + return executionManager.provider.waitForTransaction(tx.hash) +} + +/** + * Returns whether the provided Create transaction succeeded. + * + * @param executionManager The ExecutionManager contract. + * @param createTxHash The transaction hash in question. + * @returns True if there was a successful create in this tx, false otherwise. + */ +export const didCreateSucceed = async ( + executionManager: Contract, + createTxHash: string +): Promise => { + const receipt = await executionManager.provider.waitForTransaction( + createTxHash + ) + return ( + receipt.logs + .map((x) => executionManager.interface.parseLog(x)) + .filter((x) => x.name === 'CreatedContract').length > 0 + ) +} + +/** + * Executes a call in the OVM + * @param The name of the function to call + * @param The function arguments + * @returns The return value of the function executed + */ +export const executeOVMCall = async ( + executionManager: Contract, + functionName: string, + args: any[] +): Promise => { + const data: string = add0x( + encodeMethodId(functionName) + encodeRawArguments(args) + ) + + return executionManager.provider.call({ + to: executionManager.address, + data, + gasLimit: GAS_LIMIT, + }) +} diff --git a/packages/contracts/test/test-helpers/rl-helpers.ts b/packages/contracts/test/test-helpers/types/batch.ts similarity index 99% rename from packages/contracts/test/test-helpers/rl-helpers.ts rename to packages/contracts/test/test-helpers/types/batch.ts index 3592d379dc9..d9cd5ce7724 100644 --- a/packages/contracts/test/test-helpers/rl-helpers.ts +++ b/packages/contracts/test/test-helpers/types/batch.ts @@ -3,7 +3,6 @@ import { hexStrToBuf, bufToHexString, BigNumber, - keccak256, } from '@eth-optimism/core-utils' import { newInMemoryDB, SparseMerkleTreeImpl } from '@eth-optimism/core-db' diff --git a/packages/contracts/test/test-helpers/types/convenience.ts b/packages/contracts/test/test-helpers/types/convenience.ts new file mode 100644 index 00000000000..79ea8b12453 --- /dev/null +++ b/packages/contracts/test/test-helpers/types/convenience.ts @@ -0,0 +1 @@ +export type Address = string diff --git a/packages/contracts/test/test-helpers/types/index.ts b/packages/contracts/test/test-helpers/types/index.ts new file mode 100644 index 00000000000..dad87e88974 --- /dev/null +++ b/packages/contracts/test/test-helpers/types/index.ts @@ -0,0 +1,3 @@ +export * from './batch' +export * from './convenience' +export * from './opcodes' diff --git a/packages/contracts/test/test-helpers/core-helpers.ts b/packages/contracts/test/test-helpers/types/opcodes.ts similarity index 93% rename from packages/contracts/test/test-helpers/core-helpers.ts rename to packages/contracts/test/test-helpers/types/opcodes.ts index 92301558a43..25a5a5cceee 100644 --- a/packages/contracts/test/test-helpers/core-helpers.ts +++ b/packages/contracts/test/test-helpers/types/opcodes.ts @@ -1,26 +1,4 @@ -import { - ZERO_ADDRESS, - bufToHexString, - remove0x, -} from '@eth-optimism/core-utils' - -export type Address = string - -/** - * Creates an unsigned transaction and returns its calldata. - * - * @param contract The contract containing the function being invoked - * @param functionName The function being invoked - * @param args The arguments of the function call - * @returns The unsigned transaction's calldata - */ -export const getUnsignedTransactionCalldata = ( - contract: any, - functionName: string, - args: any[] = [] -) => { - return contract.interface.encodeFunctionData(functionName, args) -} +import { bufToHexString, remove0x } from '@eth-optimism/core-utils' export interface EVMOpcode { name: string @@ -1010,45 +988,3 @@ export class Opcode { ) } } - -export const L1ToL2TransactionEventName = 'L1ToL2Transaction' -export const L1ToL2TransactionBatchEventName = 'NewTransactionBatchAdded' - -export const CREATOR_CONTRACT_ADDRESS = ZERO_ADDRESS -export const GAS_LIMIT = 1_000_000_000 -export const DEFAULT_ETHNODE_GAS_LIMIT = 10_000_000 - -export const CHAIN_ID = 108 - -export const DEFAULT_UNSAFE_OPCODES: EVMOpcode[] = [ - Opcode.ADDRESS, - Opcode.BALANCE, - Opcode.BLOCKHASH, - Opcode.CALLCODE, - Opcode.CALLER, - Opcode.COINBASE, - Opcode.CREATE, - Opcode.CREATE2, - Opcode.DELEGATECALL, - Opcode.DIFFICULTY, - Opcode.EXTCODESIZE, - Opcode.EXTCODECOPY, - Opcode.EXTCODEHASH, - Opcode.GASLIMIT, - Opcode.GASPRICE, - Opcode.NUMBER, - Opcode.ORIGIN, - Opcode.SELFBALANCE, - Opcode.SELFDESTRUCT, - Opcode.SLOAD, - Opcode.SSTORE, - Opcode.STATICCALL, - Opcode.TIMESTAMP, -] - -// use whitelist-mask-generator.spec.ts to re-generate this -export const DEFAULT_OPCODE_WHITELIST_MASK = - '0x600a0000000000000000001fffffffffffffffff0fcf004063f000013fff0fff' - -export const L2_TO_L1_MESSAGE_PASSER_OVM_ADDRESS = - '0x4200000000000000000000000000000000000000' diff --git a/packages/contracts/test/test-helpers/wallet-helpers.ts b/packages/contracts/test/test-helpers/wallet-helpers.ts new file mode 100644 index 00000000000..809fdf14908 --- /dev/null +++ b/packages/contracts/test/test-helpers/wallet-helpers.ts @@ -0,0 +1,22 @@ +/* External Imports */ +import { ethers, Wallet } from 'ethers' + +/* Internal Imports */ +import { DEFAULT_ACCOUNTS } from './constants' + +export const getWallets = (): Wallet[] => { + return DEFAULT_ACCOUNTS.map((account) => { + return new ethers.Wallet(account.secretKey) + }) +} + +export const signTransaction = async ( + wallet: Wallet, + transaction: any +): Promise => { + return wallet.signTransaction(transaction) +} + +export const getSignedComponents = (signed: string): any[] => { + return ethers.utils.RLP.decode(signed).slice(-3) +} diff --git a/packages/core-db/test/app/ethereum/contracts/TestToken.json b/packages/core-db/test/app/ethereum/contracts/TestToken.json new file mode 100644 index 00000000000..739c2ffd987 --- /dev/null +++ b/packages/core-db/test/app/ethereum/contracts/TestToken.json @@ -0,0 +1,259 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "block", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes", + "name": "input", + "type": "bytes" + } + ], + "name": "updateMeaninglessHash", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506040516106333803806106338339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806001819055506001546000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050610593806100a06000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630bfd41fe1461005157806318160ddd1461010c57806370a082311461012a578063beabacc814610182575b600080fd5b61010a6004803603602081101561006757600080fd5b810190808035906020019064010000000081111561008457600080fd5b82018360208201111561009657600080fd5b803590602001918460018302840111640100000000831117156100b857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506101f0565b005b610114610201565b6040518082815260200191505060405180910390f35b61016c6004803603602081101561014057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061020b565b6040518082815260200191505060405180910390f35b6101ee6004803603606081101561019857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610253565b005b808051906020012060028190555050565b6000600154905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156102d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061053a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561035f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806105176023913960400191505060405180910390fd5b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e742073656e6465722062616c616e6365000000000081525060200191505060405180910390fd5b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9ed053bb818ff08b8353cd46f78db1f0799f31c9e4458fdb425c10eccd2efc44426040518082815260200191505060405180910390a450505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373a265627a7a723158203abdaf808a8849d3b184c800fe9984414ac6f1e6f7810d2c77a511a0263a601564736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x633 CODESIZE SUB DUP1 PUSH2 0x633 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP1 PUSH1 0x1 DUP2 SWAP1 SSTORE POP PUSH1 0x1 SLOAD PUSH1 0x0 DUP1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP PUSH2 0x593 DUP1 PUSH2 0xA0 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xBFD41FE EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x10C JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x12A JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0x182 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x1F0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x114 PUSH2 0x201 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x16C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x20B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1EE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x253 JUMP JUMPDEST STOP JUMPDEST DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x2 DUP2 SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2D9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x53A PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x35F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x517 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD LT ISZERO PUSH2 0x413 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x496E73756666696369656E742073656E6465722062616C616E63650000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP1 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9ED053BB818FF08B8353CD46F78DB1F0799F31C9E4458FDB425C10ECCD2EFC44 TIMESTAMP PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E736665722066726F6D20746865207A65726F KECCAK256 PUSH2 0x6464 PUSH19 0x657373A265627A7A723158203ABDAF808A8849 0xD3 0xB1 DUP5 0xC8 STOP INVALID SWAP10 DUP5 COINBASE 0x4A 0xC6 CALL 0xE6 0xF7 DUP2 0xD 0x2C PUSH24 0xA511A0263A601564736F6C63430005110032000000000000 ", + "sourceMap": "146:1168:0:-;;;412:132;8:9:-1;5:2;;;30:1;27;20:12;5:2;412:132:0;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;412:132:0;;;;;;;;;;;;;;;;484:11;469:12;:26;;;;526:12;;502:9;:21;512:10;502:21;;;;;;;;;;;;;;;:36;;;;412:132;146:1168;;;;;;" + }, + "deployedBytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c80630bfd41fe1461005157806318160ddd1461010c57806370a082311461012a578063beabacc814610182575b600080fd5b61010a6004803603602081101561006757600080fd5b810190808035906020019064010000000081111561008457600080fd5b82018360208201111561009657600080fd5b803590602001918460018302840111640100000000831117156100b857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506101f0565b005b610114610201565b6040518082815260200191505060405180910390f35b61016c6004803603602081101561014057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061020b565b6040518082815260200191505060405180910390f35b6101ee6004803603606081101561019857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610253565b005b808051906020012060028190555050565b6000600154905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156102d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061053a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561035f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806105176023913960400191505060405180910390fd5b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e742073656e6465722062616c616e6365000000000081525060200191505060405180910390fd5b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9ed053bb818ff08b8353cd46f78db1f0799f31c9e4458fdb425c10eccd2efc44426040518082815260200191505060405180910390a450505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373a265627a7a723158203abdaf808a8849d3b184c800fe9984414ac6f1e6f7810d2c77a511a0263a601564736f6c63430005110032", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xBFD41FE EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x10C JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x12A JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0x182 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP SWAP2 SWAP3 SWAP2 SWAP3 SWAP1 POP POP POP PUSH2 0x1F0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x114 PUSH2 0x201 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x16C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x20B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1EE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x253 JUMP JUMPDEST STOP JUMPDEST DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x2 DUP2 SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2D9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x53A PUSH1 0x25 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x35F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x517 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD LT ISZERO PUSH2 0x413 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x496E73756666696369656E742073656E6465722062616C616E63650000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD SUB SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP1 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 DUP3 SLOAD ADD SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9ED053BB818FF08B8353CD46F78DB1F0799F31C9E4458FDB425C10ECCD2EFC44 TIMESTAMP PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220746F20746865207A65726F2061 PUSH5 0x6472657373 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E736665722066726F6D20746865207A65726F KECCAK256 PUSH2 0x6464 PUSH19 0x657373A265627A7A723158203ABDAF808A8849 0xD3 0xB1 DUP5 0xC8 STOP INVALID SWAP10 DUP5 COINBASE 0x4A 0xC6 CALL 0xE6 0xF7 DUP2 0xD 0x2C PUSH24 0xA511A0263A601564736F6C63430005110032000000000000 ", + "sourceMap": "146:1168:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;146:1168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1205:106;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1205:106:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1205:106:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1205:106:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1205:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1205:106:0;;;;;;;;;;;;;;;:::i;:::-;;550:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;641:104;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;641:104:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;751:448;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;751:448:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1205:106;1299:5;1289:16;;;;;;1270;:35;;;;1205:106;:::o;550:85::-;594:7;617:12;;610:19;;550:85;:::o;641:104::-;698:7;721:9;:18;731:7;721:18;;;;;;;;;;;;;;;;714:25;;641:104;;;:::o;751:448::-;860:1;842:20;;:6;:20;;;;834:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;940:1;919:23;;:9;:23;;;;911:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1018:6;997:9;:17;1007:6;997:17;;;;;;;;;;;;;;;;:27;;989:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1086:6;1065:9;:17;1075:6;1065:17;;;;;;;;;;;;;;;;:27;;;;;;;;;;;1123:6;1099:9;:20;1109:9;1099:20;;;;;;;;;;;;;;;;:30;;;;;;;;;;;1169:6;1158:9;1141:52;;1150:6;1141:52;;;1177:15;1141:52;;;;;;;;;;;;;;;;;;751:448;;;:::o" + } + }, + "interface": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "block", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "bytes", + "name": "input", + "type": "bytes" + } + ], + "name": "updateMeaninglessHash", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "608060405234801561001057600080fd5b506040516106333803806106338339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806001819055506001546000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050610593806100a06000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630bfd41fe1461005157806318160ddd1461010c57806370a082311461012a578063beabacc814610182575b600080fd5b61010a6004803603602081101561006757600080fd5b810190808035906020019064010000000081111561008457600080fd5b82018360208201111561009657600080fd5b803590602001918460018302840111640100000000831117156100b857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506101f0565b005b610114610201565b6040518082815260200191505060405180910390f35b61016c6004803603602081101561014057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061020b565b6040518082815260200191505060405180910390f35b6101ee6004803603606081101561019857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610253565b005b808051906020012060028190555050565b6000600154905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156102d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061053a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561035f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806105176023913960400191505060405180910390fd5b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e742073656e6465722062616c616e6365000000000081525060200191505060405180910390fd5b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f9ed053bb818ff08b8353cd46f78db1f0799f31c9e4458fdb425c10eccd2efc44426040518082815260200191505060405180910390a450505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373a265627a7a723158203abdaf808a8849d3b184c800fe9984414ac6f1e6f7810d2c77a511a0263a601564736f6c63430005110032" +} \ No newline at end of file diff --git a/packages/gas-profiler/src/helpers/ganache.ts b/packages/gas-profiler/src/helpers/ganache.ts index 6bacad3949d..221b818ef85 100644 --- a/packages/gas-profiler/src/helpers/ganache.ts +++ b/packages/gas-profiler/src/helpers/ganache.ts @@ -3,8 +3,8 @@ import { BigNumber } from 'ethers/utils' import getPort from 'get-port' interface GanacheServer { - listen: (port: number) => Promise - close: () => Promise + listen: (port: number, callback?: any) => void + close: (callback?: any) => void } interface GanacheServerOptions { @@ -34,7 +34,17 @@ export class Ganache { */ public async start(): Promise { this._options.port = this.port || (await getPort()) - await this._server.listen(this._options.port) + + await new Promise((resolve, reject) => { + this._server.listen(this._options.port, (err: any) => { + if (err) { + reject(err) + } else { + resolve() + } + }) + }) + this._running = true } @@ -42,7 +52,16 @@ export class Ganache { * Stops the ganache server. */ public async stop(): Promise { - await this._server.close() + await new Promise((resolve, reject) => { + this._server.close((err: any) => { + if (err) { + reject(err) + } else { + resolve() + } + }) + }) + this._running = false } diff --git a/yarn.lock b/yarn.lock index 49f6d792006..936f6c9f557 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,18 +39,18 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== -"@ethereum-waffle/chai@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.0.0.tgz#0b92d74aa7f22fde8b867f4b520122f6b82f766a" - integrity sha512-4fd5AOD7DxwgJi/234rhWMkZMqkpXgqjCJV0ZhF6sOyZ4jPBLllYJNtEfxWaA8a1NBCHr1B98o6NvYGG0gD7vA== +"@ethereum-waffle/chai@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.0.1.tgz#0ca13f517a9689d485ad9f83ca7188ea12c154cc" + integrity sha512-E8u7eGSXEO16Kv3F1cbkmYAobIEUQ1qMNg8uxiUBPLc/LLIKjS8n3NuUmAy/pRpemPzQcNWgNyjeF2OCg/JLWw== dependencies: - "@ethereum-waffle/provider" "^3.0.0" + "@ethereum-waffle/provider" "^3.0.1" ethers "^5.0.0" -"@ethereum-waffle/compiler@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.0.0.tgz#20a8f41b18b464de5a3b6db36b7baabdad97bea1" - integrity sha512-Tc9TqaD7QBxh6cLRkp5t41ZFNZpc7zBWDv9wq4EqgAg021lX6HS0KeGl3dLp4ajHie+PNCVKvQivEH7e7Jql+A== +"@ethereum-waffle/compiler@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.0.1.tgz#a033979bc8f520cf305d892e1ab9f85dc5b506f8" + integrity sha512-jCn2KWO05ScuXRIfEgCw/Ck2fPM/jSpq7+8juwKqwmzzR8DuGeCl/5b3cIA1XkGPBRnMtVugRubEorFznAynuw== dependencies: "@resolver-engine/imports" "^0.3.3" "@resolver-engine/imports-fs" "^0.3.3" @@ -61,29 +61,29 @@ node-fetch "^2.6.0" solc "^0.6.3" -"@ethereum-waffle/ens@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.0.0.tgz#44e0b58918cf76a31f5189637621dbf85d2f8acf" - integrity sha512-ZH1vFx+AKkL0Q7mbJRz09LblurgxvYh1f6gxhnOWwACg6lt+H3wMGTdMSBZ8ttkxjfSa0CB2kFi3B6YKH/7iyQ== +"@ethereum-waffle/ens@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.0.1.tgz#74e989276273a1790586c0a9cfa16d7b993ed4dd" + integrity sha512-nylX5Pi3M5CQkvOMX/5uCO+2i7R7RZg+aCUyVsYP99IafG7/FxxA8OBZZ2L8vpag5QxN2Ed4P3UKGTok9YPKEA== dependencies: "@ensdomains/ens" "^0.4.4" "@ensdomains/resolver" "^0.2.4" ethers "^5.0.1" -"@ethereum-waffle/mock-contract@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.0.0.tgz#309522b88f0266c6274835900e0e4382a4b7f1d2" - integrity sha512-xv3O0uygk/RbQ4aa+u7GSiC4MUpF3FA01oyBKzPmcd/X1DOyAmq5/+1jDvSgb3NYEjCW4gufyN9hPpDkGoW8ew== +"@ethereum-waffle/mock-contract@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.0.1.tgz#8b99513bfada9ca6af5142b4d9fce527c7f40e37" + integrity sha512-rtdq/N6gM75KE+u3K9+N+NFtk1hy39SSoNjmJmr3PwJmWmXhJnOEDdU5N567ViRBdMNiQNnZfdKtu/b1pbL5JA== dependencies: "@ethersproject/abi" "^5.0.1" ethers "^5.0.1" -"@ethereum-waffle/provider@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.0.0.tgz#cca3c3d2a5cca43c90d8c988dc74618dd5cff306" - integrity sha512-aCxjI9zNA4Iu7pubvH6W9bSJe7mv+SpqO+ggX+41HgbY2GBEVU44+0KEgVgBhQednmlDO9l7WBnXZFB1TO3pqA== +"@ethereum-waffle/provider@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.0.1.tgz#2e89e198433beb75d0a0d7fd45bab6af8125dd64" + integrity sha512-IoMFWgglaEmo2LC1/J2JM+uUGhF1YFIr2B+QksL36y1wa+UtpDPvCpnUNTSuVKS6J9t8uz/FhQdROzBdRX/aPg== dependencies: - "@ethereum-waffle/ens" "^3.0.0" + "@ethereum-waffle/ens" "^3.0.1" ethers "^5.0.1" ganache-core "^2.10.2" @@ -169,9 +169,9 @@ "@ethersproject/properties" "^5.0.0" "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.2.tgz#797e0b8955e49509d297a42e50db9159a902ed83" - integrity sha512-fy27wYrrgXCHSG1Y8WMrcZQC8L28X2+yRHvSMr/dXAS0BDqIjcT+QdiVAynbIzShALklZdMkKHBe0qA45nLNEQ== + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.4.tgz#2061a85cfe07d496a005047442fcb3277d371169" + integrity sha512-fgfwehdxS4BPRvq2B+joKqchW2E2cV3DE+O/DhG7jH3m2blM1VIzjtIOtJNjNI/YCgkygGjT1DaZS1j29RAwHw== dependencies: "@ethersproject/bytes" "^5.0.0" "@ethersproject/logger" "^5.0.0" @@ -179,9 +179,9 @@ bn.js "^4.4.0" "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.0": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.1.tgz#da8cd9b3e3b2800be9b46fda7036fc441b334680" - integrity sha512-Y198536UW9Jb9RBXuqmCsCa9mYJUsxJn+5aGr2XjNMpLBc6vEn/44GHnbQXYgRCzh4rnWtJ9bTgSwDjme9Hgnw== + version "5.0.2" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.2.tgz#42aa6e6fca4c594b282ef424dd082b8ffd67058b" + integrity sha512-QLE5zCreNv7KGh0AsXdvmdOYcWSJbnR654M+dLyY90g3D0ehVDSf+wxzG/GmWa79ESsqo/cWC1kJA1Vrcq7GFw== dependencies: "@ethersproject/logger" "^5.0.0" @@ -291,9 +291,9 @@ "@ethersproject/logger" "^5.0.0" "@ethersproject/providers@^5.0.0": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.3.tgz#0181f3ef225365356064dc2015c3756842ca04bc" - integrity sha512-HuZf+QSq3R/TKEOQE2ZrEqXy8r6wtXwxOC3+ZayHAiVisy9hL/VRTljhVd2XwHwu/1GSn4FmXyCT3OzZxXpiQg== + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.4.tgz#18f3857651fc479f0606815db07335f311bcabbf" + integrity sha512-bnju7KB3v+NDcbHYxbZJawb20WRh/FLhop/XvHBmGUAbYSCV+cRftRvvgsdeyJOApjsCioMtmIe5iYkRxDx/DA== dependencies: "@ethersproject/abstract-provider" "^5.0.0" "@ethersproject/abstract-signer" "^5.0.0" @@ -1200,11 +1200,32 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + "@nodelib/fs.stat@^1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + "@nomiclabs/buidler-ethers@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@nomiclabs/buidler-ethers/-/buidler-ethers-2.0.0.tgz#f972df98a5d9f32fce974749f3ba9d964f057f2a" @@ -1446,6 +1467,11 @@ resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.5.2.tgz#4d74670ead39e4f4fdab605a393ba8ea2390a2c4" integrity sha512-uRyvnvVYmgNmTBpWDbBsH/0kPESQhQpEc4KsvMRLVzFJ1o1s0uIv0Y6Y9IB5vI1Dwz2CbS4X/y4Wyw/75cTFnQ== +"@solidity-parser/parser@^0.6.0": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.6.2.tgz#49707fc4e06649d39d6b25bdab2e9093d372ce50" + integrity sha512-kUVUvrqttndeprLoXjI5arWHeiP3uh4XODAKbG+ZaWHCVQeelxCbnXBeWxZ2BPHdXgH0xR9dU1b916JhDhbgAA== + "@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" @@ -1453,6 +1479,30 @@ dependencies: defer-to-connect "^1.0.1" +"@truffle/error@^0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.7.tgz#e9db39885575647ef08bf624b0c13fe46d41a209" + integrity sha512-UIfVKsXSXocKnn5+RNklUXNoGd/JVj7V8KmC48TQzmjU33HQI86PX0JDS7SpHMHasI3w9X//1q7Lu7nZtj3Zzg== + +"@truffle/interface-adapter@^0.3.0": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.3.3.tgz#61305378cf81776769ef36c60d394e568ac4a2ee" + integrity sha512-l3I4WFTfnBSIfG96IOBRtAIE6AHDAxcOUJE7W5zh9hocQwzQlGWc2yEyyTcLa0656TTM8RxaZZ2S/KdHHMvCaw== + dependencies: + bn.js "^4.11.8" + ethers "^4.0.32" + lodash "^4.17.13" + web3 "1.2.2" + +"@truffle/provider@^0.1.17": + version "0.1.19" + resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.1.19.tgz#3e6f15fdd8475ca5d0c846d2b412cc823f1fb767" + integrity sha512-ke8iQmzW4Y99+8iff8xQcc+mCNU4AkwtaZ/iSpmVD8qpLytw8/DSNCm0RiEz9/+I93Q1zqI4Jnij/rXnkS2Njw== + dependencies: + "@truffle/error" "^0.0.7" + "@truffle/interface-adapter" "^0.3.0" + web3 "1.2.1" + "@types/abstract-leveldown@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-5.0.1.tgz#3c7750d0186b954c7f2d2f6acc8c3c7ba0c3412e" @@ -1478,9 +1528,9 @@ "@types/node" "*" "@types/chai-as-promised@^7.1.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.2.tgz#2f564420e81eaf8650169e5a3a6b93e096e5068b" - integrity sha512-PO2gcfR3Oxa+u0QvECLe1xKXOqYTzCmWf0FhLhjREoW3fPAVamjihL7v1MOVLJLsnAMdLcjkfrs01yvDMwVK4Q== + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.3.tgz#779166b90fda611963a3adbfd00b339d03b747bd" + integrity sha512-FQnh1ohPXJELpKhzjuDkPLR2BZCAqed+a6xV4MI/T3XzHfd2FlarfUGUdZYgqYe8oxkYn0fchHEeHfHqdZ96sg== dependencies: "@types/chai" "*" @@ -1497,9 +1547,9 @@ ganache-core "*" "@types/glob@^7.1.1": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.2.tgz#06ca26521353a545d94a0adc74f38a59d232c987" - integrity sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA== + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== dependencies: "@types/minimatch" "*" "@types/node" "*" @@ -1545,9 +1595,9 @@ form-data "^3.0.0" "@types/node@*", "@types/node@>= 8": - version "14.0.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce" - integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ== + version "14.0.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.20.tgz#0da05cddbc761e1fa98af88a17244c8c1ff37231" + integrity sha512-MRn/NP3dee8yL5QhbSA6riuwkS+UOcsPUMOIOG3KMUQpuor/2TopdRBu8QaaB4fGU+gz/bzyDWt0FtUbeJ8H1A== "@types/node@^10.12.18", "@types/node@^10.3.2": version "10.17.26" @@ -1555,14 +1605,14 @@ integrity sha512-myMwkO2Cr82kirHY8uknNRHEVtn0wV3DTQfkrjx17jmkstDRZ24gNUdl8AHXVyVclTYI/bNjgTPTAWvWLqXqkw== "@types/node@^11.0.0", "@types/node@^11.11.3": - version "11.15.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.16.tgz#0d7072715d51bb0f1dced2a7749db77b61b7a8e6" - integrity sha512-QUb2Wgrw0aq7Pfk9LhjOXrnm8E7CmwHSa5fy0IYvxWSujNVV0wDkaGxnAsu2WZcdYRBerYqnf6e6Qiq1FkBxGw== + version "11.15.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.17.tgz#e64ad0bc4a15f68f5ad5e3d08e882f0c2f832d4a" + integrity sha512-E80F/POUH2MURsoO3XwerkVZ7HAalXqTIEHf8jrx43iTO6MPTBgNdKNxlIJCvXp0o8VhYcpY9ZSBsXqBvkf6fw== "@types/node@^12.0.7", "@types/node@^12.6.1": - version "12.12.47" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.47.tgz#5007b8866a2f9150de82335ca7e24dd1d59bdfb5" - integrity sha512-yzBInQFhdY8kaZmqoL2+3U5dSTMrKaYcb561VU+lDzAYvqt+2lojvBEy+hmpSNuXnPTx7m9+04CzWYOUqWME2A== + version "12.12.48" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.48.tgz#4135f064eeed9fcfb4756deea5ba2caa11603391" + integrity sha512-m3Nmo/YaDUfYzdCQlxjF5pIy7TNyDTAJhIa//xtHcF0dlgYIBKULKnmloCPtByDxtZXrWV8Pge1AKT6/lRvVWg== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1604,9 +1654,9 @@ integrity sha512-yYezQwGWty8ziyYLdZjwxyMb0CZR49h8JALHGrxjQHWlqGgc8kLdHEgWrgL0uZ29DMvEVBDnHU2Wg36zKSIUtA== "@types/underscore@*": - version "1.10.2" - resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.10.2.tgz#2426153e092646ed79e58f1532f429aeafa69a4e" - integrity sha512-+++tVg7PrEZxO++8xUSJygAMqezp7CLD+Mp4bNSAZUdlFDyp4OcW24o4FLAAKpoKOGUPmWLWfpxaWi83uKeh4g== + version "1.10.5" + resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.10.5.tgz#a2f741147066b04d40a4051c314d583bfcc5da00" + integrity sha512-4pI77A5w5QjFFMlEDkcMYN/B3cWACYV++J2wYT15+WcB/om3YJVejzi6i++e/13J7G4rDGNX4HR6QVq9h8fOVQ== "@types/web3@1.0.19": version "1.0.19" @@ -1657,6 +1707,11 @@ abbrev@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" @@ -1730,6 +1785,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== + aes-js@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" @@ -1762,15 +1822,20 @@ agentkeepalive@^3.4.1: humanize-ms "^1.2.1" ajv@^6.10.2, ajv@^6.5.5: - version "6.12.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" - integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" +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" @@ -2004,6 +2069,11 @@ array-union@^1.0.2: dependencies: array-uniq "^1.0.1" +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.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -2104,6 +2174,11 @@ async-settle@^1.0.0: dependencies: async-done "^1.2.2" +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" @@ -2111,11 +2186,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" @@ -2868,7 +2938,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@~3.0.2: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -3220,9 +3290,9 @@ camelcase@^6.0.0: integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== caniuse-lite@^1.0.30000844: - version "1.0.30001093" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001093.tgz#833e80f64b1a0455cbceed2a4a3baf19e4abd312" - integrity sha512-0+ODNoOjtWD5eS9aaIpf4K0gQqZfILNY4WSNuYzeT1sXni+lMrrVjc0odEobJt6wrODofDZUX8XYi/5y7+xl8g== + version "1.0.30001096" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001096.tgz#5a4541af5317dc21f91f5b24d453030a35f919c0" + integrity sha512-PFTw9UyVfbkcMEFs82q8XVlRayj7HKvnhu5BLcmjGpv+SNyiWasCcWXPGJuO0rK0dhLRDJmtZcJ+LHUfypbw1w== caseless@~0.12.0: version "0.12.0" @@ -3893,7 +3963,12 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -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== @@ -4028,6 +4103,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= + deepmerge@^2.1.0: version "2.2.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" @@ -4164,6 +4244,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" + dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" @@ -4198,6 +4286,13 @@ dir-glob@^2.2.2: dependencies: path-type "^3.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" @@ -4298,9 +4393,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.47: - version "1.3.484" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.484.tgz#75f5a1eee5fe3168758b7c2cf375ae73c1ccf5e6" - integrity sha512-esh5mmjAGl6HhAaYgHlDZme+jCIc+XIrLrBTwxviE+pM64UBmdLUIHLlrPzJGbit7hQI1TR/oGDQWCvQZ5yrFA== + version "1.3.494" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.494.tgz#0d2dba65b69d696c5b71abb37552ff055fb32a5c" + integrity sha512-EOZuaDT3L1sCIMAVN5J0nGuGWVq5dThrdl0d8XeDYf4MOzbXqZ19OLKesN8TZj0RxtpYjqHpiw/fR6BKWdMwYA== elliptic@6.3.3: version "6.3.3" @@ -4503,6 +4598,18 @@ 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" + eslint-plugin-prettier@^2.2.0: version "2.7.0" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" @@ -4511,11 +4618,21 @@ eslint-plugin-prettier@^2.2.0: fast-diff "^1.1.1" jest-docblock "^21.0.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" @@ -4714,7 +4831,7 @@ ethereum-common@^0.0.18: resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= -ethereum-cryptography@^0.1.2: +ethereum-cryptography@^0.1.2, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== @@ -4748,14 +4865,14 @@ ethereum-waffle@2.1.0: solc "^0.5.10" ethereum-waffle@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.0.0.tgz#59e46b8e303eb5decbb5ceebca1ddf378db312d6" - integrity sha512-r7hQHGs6uuUIcZxcwsxXbntk6XQkdC4HST4lFN493H9Ac9JLnYbaQ3Yp2qeGK7P7BqrDUqGZwylSIT+1odtAmA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.0.1.tgz#fbc701cc12de8824bc6a42c82cef6ca8d4f214db" + integrity sha512-FAAiN0VqNF9+yCPLPW9Rtq77dHcx9XwTGDe8s0nko34MeWKRX3EH258zwvmA29IhDmNMsRz7em6a7Zaw4g8hPw== dependencies: - "@ethereum-waffle/chai" "^3.0.0" - "@ethereum-waffle/compiler" "^3.0.0" - "@ethereum-waffle/mock-contract" "^3.0.0" - "@ethereum-waffle/provider" "^3.0.0" + "@ethereum-waffle/chai" "^3.0.1" + "@ethereum-waffle/compiler" "^3.0.1" + "@ethereum-waffle/mock-contract" "^3.0.1" + "@ethereum-waffle/provider" "^3.0.1" ethers "^5.0.1" ethereumjs-abi@0.6.5: @@ -4949,17 +5066,16 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum secp256k1 "^3.0.1" ethereumjs-util@^7.0.0, ethereumjs-util@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.2.tgz#7e0d9fcd225ece6e49ee4ea65609d124715f1d15" - integrity sha512-ATAP02eJLpAlWGfiKQddNrRfZpwXiTFhRN2EM/yLXMCdBW/xjKYblNKcx8GLzzrjXg0ymotck+lam1nuV90arQ== + version "7.0.3" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.3.tgz#d055fc7f852d79065d2e689002a789b1323cf3fd" + integrity sha512-uLQsGPOwsRxe50WV1Dybh5N8zXDz4ev7wP49LKX9kr28I5TmcDILPgpKK/BFe5zYSfRGEeo+hPT7W3tjghYLuA== dependencies: "@types/bn.js" "^4.11.3" bn.js "^5.1.2" create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" ethjs-util "0.1.6" - keccak "^3.0.0" rlp "^2.2.4" - secp256k1 "^4.0.1" ethereumjs-util@~6.0.0: version "6.0.0" @@ -5117,7 +5233,7 @@ ethers@5.0.0: "@ethersproject/web" "^5.0.0" "@ethersproject/wordlists" "^5.0.0" -ethers@^4.0.0, ethers@^4.0.37, ethers@^4.0.39, ethers@^4.0.42, ethers@^4.0.45: +ethers@^4.0.0, ethers@^4.0.32, ethers@^4.0.37, ethers@^4.0.39, ethers@^4.0.42, ethers@^4.0.45: version "4.0.47" resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.47.tgz#91b9cd80473b1136dd547095ff9171bd1fc68c85" integrity sha512-hssRYhngV4hiDNeZmVU/k5/E8xmLG8UpcNUzg6mb7lqhgpFPH/t7nuv20RjRrEf0gblzvi2XwR5Te+V3ZFc9pQ== @@ -5133,9 +5249,9 @@ ethers@^4.0.0, ethers@^4.0.37, ethers@^4.0.39, ethers@^4.0.42, ethers@^4.0.45: xmlhttprequest "1.8.0" ethers@^5.0.0, ethers@^5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.3.tgz#41587a09934fb4dd5960cfe1fbc67560a53df7d5" - integrity sha512-Y9ud5W9Gtuzibyc8tEEkFRd/+uQciUoy0j7PTHF0i8H9521i67NQPXYOIA0NS0fRD2TolNTFeRLNNEY7EA98qg== + version "5.0.5" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.5.tgz#09b37c27d3b7d93c084af7ec4cad72ca8cfa5b7a" + integrity sha512-hkVI7fi16ADWTctYMEfamU39hoR+JpkdEI7LH8PC7Bhl0Dp8y8dqFJ948pSEuuPJI5NR/L4+V6y2Alvyu+zROw== dependencies: "@ethersproject/abi" "^5.0.0" "@ethersproject/abstract-provider" "^5.0.0" @@ -5412,16 +5528,40 @@ fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" +fast-glob@^3.0.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + 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= + fastpriorityqueue@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/fastpriorityqueue/-/fastpriorityqueue-0.6.3.tgz#619ce78f86a839530a69165d5d676fbde920f4e2" integrity sha512-l4Whw9/MDkl/0XuqZEzGE/sw9T7dIxuUnxqq4ZJDLt8AE45j8wkx4/nBRZm50aQ9kN71NB9mwQzglLsvQGROsw== +fastq@^1.6.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" + integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + dependencies: + reusify "^1.0.4" + fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -5816,6 +5956,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.9.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.9.0.tgz#94d7e26964dff80b7382a33829ec75e15709a948" + integrity sha512-ZdL6kPrApXF/O+f6uU431OJcwxMk69H3KPDSHHrMP82ZvZRNpDHbR+rVv7XX/YUeoQ5q6nZ2AFiGiFAVn9pfzA== + dependencies: + ethereumjs-util "6.1.0" + source-map-support "0.5.12" + yargs "13.2.4" + ganache-core@*, ganache-core@^2.10.2: version "2.10.2" resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.10.2.tgz#17c171c6c0195b6734a0dd741a9d2afd4f74e292" @@ -5989,6 +6138,14 @@ 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" + git-raw-commits@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" @@ -6046,7 +6203,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@~5.1.0: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -6110,7 +6267,18 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.6: +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.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, 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== @@ -6138,6 +6306,13 @@ global-modules@^1.0.0: is-windows "^1.0.1" resolve-dir "^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@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" @@ -6149,6 +6324,15 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + global@~4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" @@ -6162,6 +6346,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" + globby@^9.2.0: version "9.2.0" resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" @@ -6299,7 +6497,7 @@ gulplog@^1.0.0: dependencies: glogg "^1.0.0" -handlebars@^4.7.6: +handlebars@^4.0.1, handlebars@^4.7.6: version "4.7.6" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== @@ -6336,6 +6534,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +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" @@ -6584,6 +6787,11 @@ ignore@^4.0.3: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +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" @@ -6655,7 +6863,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.2, ini@^1.3.4: +ini@^1.3.2, ini@^1.3.4, ini@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -6693,7 +6901,7 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" -interpret@^1.4.0: +interpret@^1.0.0, interpret@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== @@ -6718,6 +6926,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" @@ -7139,7 +7352,7 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.13.1: +js-yaml@3.x, js-yaml@^3.13.1: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== @@ -7252,6 +7465,11 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= +jsonschema@^1.2.4: + version "1.2.6" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.6.tgz#52b0a8e9dc06bbae7295249d03e4b9faee8a0c0b" + integrity sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA== + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -7370,6 +7588,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" + lead@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" @@ -7617,6 +7842,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" + liftoff@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" @@ -7741,6 +7974,11 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" +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.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -7751,10 +7989,10 @@ lodash@4.17.14: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.1: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.1: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== log-symbols@2.2.0: version "2.2.0" @@ -7891,6 +8129,13 @@ make-iterator@^1.0.0: dependencies: kind-of "^6.0.2" +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.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -7949,6 +8194,15 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" +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" @@ -8057,7 +8311,7 @@ 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.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== @@ -8111,6 +8365,14 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" 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== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -8141,6 +8403,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +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" @@ -8168,7 +8435,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== @@ -8267,7 +8534,7 @@ mkdirp@0.5.4: dependencies: minimist "^1.2.5" -mkdirp@0.5.5, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.5.5, mkdirp@0.5.x, "mkdirp@>=0.5 0", 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== @@ -8509,9 +8776,9 @@ negotiator@0.6.2: integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== neo-async@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + 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" @@ -8528,6 +8795,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.5: version "1.0.5" resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" @@ -8598,6 +8872,13 @@ node-gyp@^5.0.2: tar "^4.4.12" which "^1.3.1" +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" + nopt@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" @@ -8877,7 +9158,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -8891,6 +9172,18 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +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" + ordered-read-streams@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" @@ -8924,6 +9217,15 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.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-name@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" @@ -8960,6 +9262,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-event@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" @@ -8977,6 +9284,11 @@ p-is-promise@^1.1.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= +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" @@ -9255,6 +9567,11 @@ path-type@^3.0.0: dependencies: pify "^3.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.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" @@ -9281,7 +9598,7 @@ 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.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== @@ -9330,6 +9647,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" @@ -9790,6 +10112,13 @@ rechoir@^0.6.2: 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" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -10011,6 +10340,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.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0, resolve@~1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" @@ -10050,6 +10384,11 @@ retry@^0.10.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= +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, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -10077,6 +10416,11 @@ run-async@^2.2.0: resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" @@ -10125,6 +10469,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.5" + resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.5.tgz#1896066484d55336cf2cdbcc7884dc79da50dc76" + integrity sha512-7wR5EZFLsC4w0wSm9BUuCgW+OGKAU7PNlW5L0qwVPbh+Q1sfVn2fyzfMXYCm6rkNA5ipaCOt94nApcguQwF5Gg== + 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.3: version "2.0.3" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.3.tgz#bb0040be03043da9a012a2cea9fc9f852cfc87d4" @@ -10140,6 +10504,13 @@ scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== +"scrypt-shim@github:web3-js/scrypt-shim": + version "0.1.0" + resolved "https://codeload.github.com/web3-js/scrypt-shim/tar.gz/aafdadda13e660e25e1c525d1f5b2443f5eb1ebb" + dependencies: + scryptsy "^2.1.0" + semver "^6.3.0" + scrypt.js@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.2.0.tgz#af8d1465b71e9990110bedfc593b9479e03a8ada" @@ -10362,6 +10733,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" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -10501,9 +10881,9 @@ solc@^0.5.10, solc@^0.5.12: tmp "0.0.33" solc@^0.6.3: - version "0.6.10" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.6.10.tgz#6e45b4f7013c7098fc1e31f7d86ce949e8c49e18" - integrity sha512-+oHwIvNjg3bxXvL9yua/Z4ZFEdkCkgRSh7aIGGb+mf/gzoA8PRKiKGYDsjMaj0CJLH1BTBOUpNFeYhhnUFfjRg== + version "0.6.11" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.6.11.tgz#3205b13c8162a02c5d8f1d85ff267889a5095467" + integrity sha512-qMe8epy45eMzXZ9IGDk986NGjakC5/s+yPGuO99YsDaJQitxDAd3rIItlzxgfEvjr0xNJ3IaqGAGvvJ0/59nfA== dependencies: command-exists "^1.2.8" commander "3.0.2" @@ -10514,6 +10894,30 @@ solc@^0.6.3: semver "^5.5.0" tmp "0.0.33" +solidity-coverage@^0.7.9: + version "0.7.9" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.9.tgz#6d1c40639066b93c67b21da48f4bc27ae01f0e58" + integrity sha512-UWkl0iNmpjuVanPWvZzF6eCAKwbEmmolmzwbN8nU+MexOKO3eW6kVbxBkfEjVa8TuQcLb0F2wdgXJZBRbjpjnA== + dependencies: + "@solidity-parser/parser" "^0.6.0" + "@truffle/provider" "^0.1.17" + chalk "^2.4.2" + death "^1.1.0" + detect-port "^1.3.0" + fs-extra "^8.1.0" + ganache-cli "6.9.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" + shelljs "^0.8.3" + web3 "1.2.6" + sort-keys-length@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" @@ -10584,6 +10988,13 @@ source-map@^0.6.0, source-map@^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" + sparkles@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" @@ -10893,6 +11304,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" @@ -11263,9 +11681,9 @@ truffle-hdwallet-provider@^1.0.17: websocket "^1.0.28" truffle@^5.1.12: - version "5.1.32" - resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.32.tgz#01d73df23f28007ddb8d32c0560e7d0fe8ff60d1" - integrity sha512-wrMQDvZ1P4FrSIc9CUCD6y1mTtK7bUDgJSW1k1r33BBtzqyJ5oKoZ30IgickUW669gABClYDMk6tj5gVrmZCng== + version "5.1.33" + resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.33.tgz#6cd202f288d35b30a31ffec3e1b96fb367debbdf" + integrity sha512-zV220OC6YtKSOViA+eQpU61orAlNX4msDogecUsjsxjH0MZGIVPMfsh1LiA817KXIg1uEM7G5XPjTaCJeRB8iw== dependencies: app-module-path "^2.2.0" mocha "5.2.0" @@ -11380,6 +11798,13 @@ tweetnacl@^1.0.0: 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" @@ -11819,6 +12244,16 @@ web3-bzz@1.2.1: swarm-js "0.1.39" underscore "1.9.1" +web3-bzz@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.2.tgz#a3b9f613c49fd3e120e0997088a73557d5adb724" + integrity sha512-b1O2ObsqUN1lJxmFSjvnEC4TsaCbmh7Owj3IAIWTKqL9qhVgx7Qsu5O9cD13pBiSPNZJ68uJPaKq380QB4NWeA== + dependencies: + "@types/node" "^10.12.18" + got "9.6.0" + swarm-js "0.1.39" + underscore "1.9.1" + web3-bzz@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.4.tgz#a4adb7a8cba3d260de649bdb1f14ed359bfb3821" @@ -11829,6 +12264,16 @@ web3-bzz@1.2.4: swarm-js "0.1.39" underscore "1.9.1" +web3-bzz@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.6.tgz#0b88c0b96029eaf01b10cb47c4d5f79db4668883" + integrity sha512-9NiHLlxdI1XeFtbPJAmi2jnnIHVF+GNy517wvOS72P7ZfuJTPwZaSNXfT01vWgPPE9R96/uAHDWHOg+T4WaDQQ== + dependencies: + "@types/node" "^10.12.18" + got "9.6.0" + swarm-js "0.1.39" + 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" @@ -11857,6 +12302,15 @@ web3-core-helpers@1.2.1: web3-eth-iban "1.2.1" web3-utils "1.2.1" +web3-core-helpers@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.2.tgz#484974f4bd4a487217b85b0d7cfe841af0907619" + integrity sha512-HJrRsIGgZa1jGUIhvGz4S5Yh6wtOIo/TMIsSLe+Xay+KVnbseJpPprDI5W3s7H2ODhMQTbogmmUFquZweW2ImQ== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.2.2" + web3-utils "1.2.2" + web3-core-helpers@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.4.tgz#ffd425861f4d66b3f38df032afdb39ea0971fc0f" @@ -11866,6 +12320,15 @@ web3-core-helpers@1.2.4: web3-eth-iban "1.2.4" web3-utils "1.2.4" +web3-core-helpers@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.6.tgz#7aacd25bf8015adcdfc0f3243d0dcfdff0373f7d" + integrity sha512-gYKWmC2HmO7RcDzpo4L1K8EIoy5L8iubNDuTC6q69UxczwqKF/Io0kbK/1Z10Av++NlzOSiuyGp2gc4t4UOsDw== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.2.6" + web3-utils "1.2.6" + 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" @@ -11897,6 +12360,17 @@ web3-core-method@1.2.1: web3-core-subscriptions "1.2.1" web3-utils "1.2.1" +web3-core-method@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.2.tgz#d4fe2bb1945b7152e5f08e4ea568b171132a1e56" + integrity sha512-szR4fDSBxNHaF1DFqE+j6sFR/afv9Aa36OW93saHZnrh+iXSrYeUUDfugeNcRlugEKeUCkd4CZylfgbK2SKYJA== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.2" + web3-core-promievent "1.2.2" + web3-core-subscriptions "1.2.2" + web3-utils "1.2.2" + web3-core-method@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.4.tgz#a0fbc50b8ff5fd214021435cc2c6d1e115807aed" @@ -11908,6 +12382,17 @@ web3-core-method@1.2.4: web3-core-subscriptions "1.2.4" web3-utils "1.2.4" +web3-core-method@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.6.tgz#f5a3e4d304abaf382923c8ab88ec8eeef45c1b3b" + integrity sha512-r2dzyPEonqkBg7Mugq5dknhV5PGaZTHBZlS/C+aMxNyQs3T3eaAsCTqlQDitwNUh/sUcYPEGF0Vo7ahYK4k91g== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.6" + web3-core-promievent "1.2.6" + web3-core-subscriptions "1.2.6" + web3-utils "1.2.6" + 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" @@ -11936,6 +12421,14 @@ web3-core-promievent@1.2.1: any-promise "1.3.0" eventemitter3 "3.1.2" +web3-core-promievent@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.2.tgz#3b60e3f2a0c96db8a891c927899d29d39e66ab1c" + integrity sha512-tKvYeT8bkUfKABcQswK6/X79blKTKYGk949urZKcLvLDEaWrM3uuzDwdQT3BNKzQ3vIvTggFPX9BwYh0F1WwqQ== + dependencies: + any-promise "1.3.0" + eventemitter3 "3.1.2" + web3-core-promievent@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.4.tgz#75e5c0f2940028722cdd21ba503ebd65272df6cb" @@ -11944,6 +12437,14 @@ web3-core-promievent@1.2.4: any-promise "1.3.0" eventemitter3 "3.1.2" +web3-core-promievent@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.6.tgz#b1550a3a4163e48b8b704c1fe4b0084fc2dad8f5" + integrity sha512-km72kJef/qtQNiSjDJJVHIZvoVOm6ytW3FCYnOcCs7RIkviAb5JYlPiye0o4pJOLzCXYID7DK7Q9bhY8qWb1lw== + dependencies: + any-promise "1.3.0" + eventemitter3 "3.1.2" + 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" @@ -11973,6 +12474,17 @@ web3-core-requestmanager@1.2.1: web3-providers-ipc "1.2.1" web3-providers-ws "1.2.1" +web3-core-requestmanager@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.2.tgz#667ba9ac724c9c76fa8965ae8a3c61f66e68d8d6" + integrity sha512-a+gSbiBRHtHvkp78U2bsntMGYGF2eCb6219aMufuZWeAZGXJ63Wc2321PCbA8hF9cQrZI4EoZ4kVLRI4OF15Hw== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.2" + web3-providers-http "1.2.2" + web3-providers-ipc "1.2.2" + web3-providers-ws "1.2.2" + web3-core-requestmanager@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.4.tgz#0a7020a23fb91c6913c611dfd3d8c398d1e4b4a8" @@ -11984,6 +12496,17 @@ web3-core-requestmanager@1.2.4: web3-providers-ipc "1.2.4" web3-providers-ws "1.2.4" +web3-core-requestmanager@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.6.tgz#5808c0edc0d6e2991a87b65508b3a1ab065b68ec" + integrity sha512-QU2cbsj9Dm0r6om40oSwk8Oqbp3wTa08tXuMpSmeOTkGZ3EMHJ1/4LiJ8shwg1AvPMrKVU0Nri6+uBNCdReZ+g== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.6" + web3-providers-http "1.2.6" + web3-providers-ipc "1.2.6" + web3-providers-ws "1.2.6" + 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" @@ -12013,6 +12536,15 @@ web3-core-subscriptions@1.2.1: underscore "1.9.1" web3-core-helpers "1.2.1" +web3-core-subscriptions@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.2.tgz#bf4ba23a653a003bdc3551649958cc0b080b068e" + integrity sha512-QbTgigNuT4eicAWWr7ahVpJyM8GbICsR1Ys9mJqzBEwpqS+RXTRVSkwZ2IsxO+iqv6liMNwGregbJLq4urMFcQ== + dependencies: + eventemitter3 "3.1.2" + underscore "1.9.1" + web3-core-helpers "1.2.2" + web3-core-subscriptions@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.4.tgz#0dc095b5cfd82baa527a39796e3515a846b21b99" @@ -12022,6 +12554,15 @@ web3-core-subscriptions@1.2.4: underscore "1.9.1" web3-core-helpers "1.2.4" +web3-core-subscriptions@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.6.tgz#9d44189e2321f8f1abc31f6c09103b5283461b57" + integrity sha512-M0PzRrP2Ct13x3wPulFtc5kENH4UtnPxO9YxkfQlX2WRKENWjt4Rfq+BCVGYEk3rTutDfWrjfzjmqMRvXqEY5Q== + dependencies: + eventemitter3 "3.1.2" + underscore "1.9.1" + web3-core-helpers "1.2.6" + 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" @@ -12051,6 +12592,18 @@ web3-core@1.2.1: web3-core-requestmanager "1.2.1" web3-utils "1.2.1" +web3-core@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.2.tgz#334b99c8222ef9cfd0339e27352f0b58ea789a2f" + integrity sha512-miHAX3qUgxV+KYfaOY93Hlc3kLW2j5fH8FJy6kSxAv+d4d5aH0wwrU2IIoJylQdT+FeenQ38sgsCnFu9iZ1hCQ== + dependencies: + "@types/bn.js" "^4.11.4" + "@types/node" "^12.6.1" + web3-core-helpers "1.2.2" + web3-core-method "1.2.2" + web3-core-requestmanager "1.2.2" + web3-utils "1.2.2" + web3-core@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.4.tgz#2df13b978dcfc59c2abaa887d27f88f21ad9a9d6" @@ -12064,6 +12617,18 @@ web3-core@1.2.4: web3-core-requestmanager "1.2.4" web3-utils "1.2.4" +web3-core@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.6.tgz#bb42a1d7ae49a7258460f0d95ddb00906f59ef92" + integrity sha512-y/QNBFtr5cIR8vxebnotbjWJpOnO8LDYEAzZjeRRUJh2ijmhjoYk7dSNx9ExgC0UCfNFRoNCa9dGRu/GAxwRlw== + dependencies: + "@types/bn.js" "^4.11.4" + "@types/node" "^12.6.1" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-core-requestmanager "1.2.6" + web3-utils "1.2.6" + web3-core@1.2.9, web3-core@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.9.tgz#2cba57aa259b6409db532d21bdf57db8d504fd3e" @@ -12096,6 +12661,15 @@ web3-eth-abi@1.2.1: underscore "1.9.1" web3-utils "1.2.1" +web3-eth-abi@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.2.tgz#d5616d88a90020f894763423a9769f2da11fe37a" + integrity sha512-Yn/ZMgoOLxhTVxIYtPJ0eS6pnAnkTAaJgUJh1JhZS4ekzgswMfEYXOwpMaD5eiqPJLpuxmZFnXnBZlnQ1JMXsw== + dependencies: + ethers "4.0.0-beta.3" + underscore "1.9.1" + web3-utils "1.2.2" + web3-eth-abi@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.4.tgz#5b73e5ef70b03999227066d5d1310b168845e2b8" @@ -12105,6 +12679,15 @@ web3-eth-abi@1.2.4: underscore "1.9.1" web3-utils "1.2.4" +web3-eth-abi@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.6.tgz#b495383cc5c0d8e2857b26e7fe25606685983b25" + integrity sha512-w9GAyyikn8nSifSDZxAvU9fxtQSX+W2xQWMmrtTXmBGCaE4/ywKOSPAO78gq8AoU4Wq5yqVGKZLLbfpt7/sHlA== + dependencies: + ethers "4.0.0-beta.3" + underscore "1.9.1" + web3-utils "1.2.6" + 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" @@ -12147,6 +12730,24 @@ web3-eth-accounts@1.2.1: web3-core-method "1.2.1" web3-utils "1.2.1" +web3-eth-accounts@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.2.tgz#c187e14bff6baa698ac352220290222dbfd332e5" + integrity sha512-KzHOEyXOEZ13ZOkWN3skZKqSo5f4Z1ogPFNn9uZbKCz+kSp+gCAEKxyfbOsB/JMAp5h7o7pb6eYsPCUBJmFFiA== + dependencies: + any-promise "1.3.0" + crypto-browserify "3.12.0" + eth-lib "0.2.7" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + scrypt-shim "github:web3-js/scrypt-shim" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.2.2" + web3-core-helpers "1.2.2" + web3-core-method "1.2.2" + web3-utils "1.2.2" + web3-eth-accounts@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.4.tgz#ada6edc49542354328a85cafab067acd7f88c288" @@ -12165,6 +12766,24 @@ web3-eth-accounts@1.2.4: web3-core-method "1.2.4" web3-utils "1.2.4" +web3-eth-accounts@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.6.tgz#a1ba4bf75fa8102a3ec6cddd0eccd72462262720" + integrity sha512-cDVtonHRgzqi/ZHOOf8kfCQWFEipcfQNAMzXIaKZwc0UUD9mgSI5oJrN45a89Ze+E6Lz9m77cDG5Ax9zscSkcw== + dependencies: + "@web3-js/scrypt-shim" "^0.1.0" + any-promise "1.3.0" + crypto-browserify "3.12.0" + eth-lib "^0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-utils "1.2.6" + 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" @@ -12210,6 +12829,21 @@ web3-eth-contract@1.2.1: web3-eth-abi "1.2.1" web3-utils "1.2.1" +web3-eth-contract@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.2.tgz#84e92714918a29e1028ee7718f0712536e14e9a1" + integrity sha512-EKT2yVFws3FEdotDQoNsXTYL798+ogJqR2//CaGwx3p0/RvQIgfzEwp8nbgA6dMxCsn9KOQi7OtklzpnJMkjtA== + dependencies: + "@types/bn.js" "^4.11.4" + underscore "1.9.1" + web3-core "1.2.2" + web3-core-helpers "1.2.2" + web3-core-method "1.2.2" + web3-core-promievent "1.2.2" + web3-core-subscriptions "1.2.2" + web3-eth-abi "1.2.2" + web3-utils "1.2.2" + web3-eth-contract@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.4.tgz#68ef7cc633232779b0a2c506a810fbe903575886" @@ -12225,6 +12859,21 @@ web3-eth-contract@1.2.4: web3-eth-abi "1.2.4" web3-utils "1.2.4" +web3-eth-contract@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.6.tgz#39111543960035ed94c597a239cf5aa1da796741" + integrity sha512-ak4xbHIhWgsbdPCkSN+HnQc1SH4c856y7Ly+S57J/DQVzhFZemK5HvWdpwadJrQTcHET3ZeId1vq3kmW7UYodw== + dependencies: + "@types/bn.js" "^4.11.4" + underscore "1.9.1" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-core-promievent "1.2.6" + web3-core-subscriptions "1.2.6" + web3-eth-abi "1.2.6" + web3-utils "1.2.6" + 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" @@ -12254,6 +12903,20 @@ web3-eth-ens@1.2.1: web3-eth-contract "1.2.1" web3-utils "1.2.1" +web3-eth-ens@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.2.tgz#0a4abed1d4cbdacbf5e1ab06e502d806d1192bc6" + integrity sha512-CFjkr2HnuyMoMFBoNUWojyguD4Ef+NkyovcnUc/iAb9GP4LHohKrODG4pl76R5u61TkJGobC2ij6TyibtsyVYg== + dependencies: + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.2.2" + web3-core-helpers "1.2.2" + web3-core-promievent "1.2.2" + web3-eth-abi "1.2.2" + web3-eth-contract "1.2.2" + web3-utils "1.2.2" + web3-eth-ens@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.4.tgz#b95b3aa99fb1e35c802b9e02a44c3046a3fa065e" @@ -12268,6 +12931,20 @@ web3-eth-ens@1.2.4: web3-eth-contract "1.2.4" web3-utils "1.2.4" +web3-eth-ens@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.6.tgz#bf86a624c4c72bc59913c2345180d3ea947e110d" + integrity sha512-8UEqt6fqR/dji/jBGPFAyBs16OJjwi0t2dPWXPyGXmty/fH+osnXwWXE4HRUyj4xuafiM5P1YkXMsPhKEadjiw== + dependencies: + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-promievent "1.2.6" + web3-eth-abi "1.2.6" + web3-eth-contract "1.2.6" + web3-utils "1.2.6" + 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" @@ -12299,6 +12976,14 @@ web3-eth-iban@1.2.1: bn.js "4.11.8" web3-utils "1.2.1" +web3-eth-iban@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.2.tgz#76bec73bad214df7c4192388979a59fc98b96c5a" + integrity sha512-gxKXBoUhaTFHr0vJB/5sd4i8ejF/7gIsbM/VvemHT3tF5smnmY6hcwSMmn7sl5Gs+83XVb/BngnnGkf+I/rsrQ== + dependencies: + bn.js "4.11.8" + web3-utils "1.2.2" + web3-eth-iban@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.4.tgz#8e0550fd3fd8e47a39357d87fe27dee9483ee476" @@ -12307,6 +12992,14 @@ web3-eth-iban@1.2.4: bn.js "4.11.8" web3-utils "1.2.4" +web3-eth-iban@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.6.tgz#0b22191fd1aa6e27f7ef0820df75820bfb4ed46b" + integrity sha512-TPMc3BW9Iso7H+9w+ytbqHK9wgOmtocyCD3PaAe5Eie50KQ/j7ThA60dGJnxItVo6yyRv5pZAYxPVob9x/fJlg== + dependencies: + bn.js "4.11.8" + web3-utils "1.2.6" + 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" @@ -12337,6 +13030,18 @@ web3-eth-personal@1.2.1: web3-net "1.2.1" web3-utils "1.2.1" +web3-eth-personal@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.2.tgz#eee1c86a8132fa16b5e34c6d421ca92e684f0be6" + integrity sha512-4w+GLvTlFqW3+q4xDUXvCEMU7kRZ+xm/iJC8gm1Li1nXxwwFbs+Y+KBK6ZYtoN1qqAnHR+plYpIoVo27ixI5Rg== + dependencies: + "@types/node" "^12.6.1" + web3-core "1.2.2" + web3-core-helpers "1.2.2" + web3-core-method "1.2.2" + web3-net "1.2.2" + web3-utils "1.2.2" + web3-eth-personal@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.4.tgz#3224cca6851c96347d9799b12c1b67b2a6eb232b" @@ -12349,6 +13054,18 @@ web3-eth-personal@1.2.4: web3-net "1.2.4" web3-utils "1.2.4" +web3-eth-personal@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.6.tgz#47a0a0657ec04dd77f95451a6869d4751d324b6b" + integrity sha512-T2NUkh1plY8d7wePXSoHnaiKOd8dLNFaQfgBl9JHU6S7IJrG9jnYD9bVxLEgRUfHs9gKf9tQpDf7AcPFdq/A8g== + dependencies: + "@types/node" "^12.6.1" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-net "1.2.6" + web3-utils "1.2.6" + 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" @@ -12398,6 +13115,25 @@ web3-eth@1.2.1: web3-net "1.2.1" web3-utils "1.2.1" +web3-eth@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.2.tgz#65a1564634a23b990efd1655bf94ad513904286c" + integrity sha512-UXpC74mBQvZzd4b+baD4Ocp7g+BlwxhBHumy9seyE/LMIcMlePXwCKzxve9yReNpjaU16Mmyya6ZYlyiKKV8UA== + dependencies: + underscore "1.9.1" + web3-core "1.2.2" + web3-core-helpers "1.2.2" + web3-core-method "1.2.2" + web3-core-subscriptions "1.2.2" + web3-eth-abi "1.2.2" + web3-eth-accounts "1.2.2" + web3-eth-contract "1.2.2" + web3-eth-ens "1.2.2" + web3-eth-iban "1.2.2" + web3-eth-personal "1.2.2" + web3-net "1.2.2" + web3-utils "1.2.2" + web3-eth@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.4.tgz#24c3b1f1ac79351bbfb808b2ab5c585fa57cdd00" @@ -12417,6 +13153,25 @@ web3-eth@1.2.4: web3-net "1.2.4" web3-utils "1.2.4" +web3-eth@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.6.tgz#15a8c65fdde0727872848cae506758d302d8d046" + integrity sha512-ROWlDPzh4QX6tlGGGlAK6X4kA2n0/cNj/4kb0nNVWkRouGmYO0R8k6s47YxYHvGiXt0s0++FUUv5vAbWovtUQw== + dependencies: + underscore "1.9.1" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-core-subscriptions "1.2.6" + web3-eth-abi "1.2.6" + web3-eth-accounts "1.2.6" + web3-eth-contract "1.2.6" + web3-eth-ens "1.2.6" + web3-eth-iban "1.2.6" + web3-eth-personal "1.2.6" + web3-net "1.2.6" + web3-utils "1.2.6" + web3-eth@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.9.tgz#e40e7b88baffc9b487193211c8b424dc944977b3" @@ -12454,6 +13209,15 @@ web3-net@1.2.1: web3-core-method "1.2.1" web3-utils "1.2.1" +web3-net@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.2.tgz#5c3226ca72df7c591422440ce6f1203fd42ddad9" + integrity sha512-K07j2DXq0x4UOJgae65rWZKraOznhk8v5EGSTdFqASTx7vWE/m+NqBijBYGEsQY1lSMlVaAY9UEQlcXK5HzXTw== + dependencies: + web3-core "1.2.2" + web3-core-method "1.2.2" + web3-utils "1.2.2" + web3-net@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.4.tgz#1d246406d3aaffbf39c030e4e98bce0ca5f25458" @@ -12463,6 +13227,15 @@ web3-net@1.2.4: web3-core-method "1.2.4" web3-utils "1.2.4" +web3-net@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.6.tgz#035ca0fbe55282fda848ca17ebb4c8966147e5ea" + integrity sha512-hsNHAPddrhgjWLmbESW0KxJi2GnthPcow0Sqpnf4oB6+/+ZnQHU9OsIyHb83bnC1OmunrK2vf9Ye2mLPdFIu3A== + dependencies: + web3-core "1.2.6" + web3-core-method "1.2.6" + web3-utils "1.2.6" + web3-net@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.9.tgz#51d248ed1bc5c37713c4ac40c0073d9beacd87d3" @@ -12540,6 +13313,14 @@ web3-providers-http@1.2.1: web3-core-helpers "1.2.1" xhr2-cookies "1.1.0" +web3-providers-http@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.2.tgz#155e55c1d69f4c5cc0b411ede40dea3d06720956" + integrity sha512-BNZ7Hguy3eBszsarH5gqr9SIZNvqk9eKwqwmGH1LQS1FL3NdoOn7tgPPdddrXec4fL94CwgNk4rCU+OjjZRNDg== + dependencies: + web3-core-helpers "1.2.2" + xhr2-cookies "1.1.0" + web3-providers-http@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.4.tgz#514fcad71ae77832c2c15574296282fbbc5f4a67" @@ -12548,6 +13329,14 @@ web3-providers-http@1.2.4: web3-core-helpers "1.2.4" xhr2-cookies "1.1.0" +web3-providers-http@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.6.tgz#3c7b1252751fb37e53b873fce9dbb6340f5e31d9" + integrity sha512-2+SaFCspb5f82QKuHB3nEPQOF9iSWxRf7c18fHtmnLNVkfG9SwLN1zh67bYn3tZGUdOI3gj8aX4Uhfpwx9Ezpw== + dependencies: + web3-core-helpers "1.2.6" + 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" @@ -12574,6 +13363,15 @@ web3-providers-ipc@1.2.1: underscore "1.9.1" web3-core-helpers "1.2.1" +web3-providers-ipc@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.2.tgz#c6d165a12bc68674b4cdd543ea18aec79cafc2e8" + integrity sha512-t97w3zi5Kn/LEWGA6D9qxoO0LBOG+lK2FjlEdCwDQatffB/+vYrzZ/CLYVQSoyFZAlsDoBasVoYSWZK1n39aHA== + dependencies: + oboe "2.1.4" + underscore "1.9.1" + web3-core-helpers "1.2.2" + web3-providers-ipc@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.4.tgz#9d6659f8d44943fb369b739f48df09092be459bd" @@ -12583,6 +13381,15 @@ web3-providers-ipc@1.2.4: underscore "1.9.1" web3-core-helpers "1.2.4" +web3-providers-ipc@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.6.tgz#adabab5ac66b3ff8a26c7dc97af3f1a6a7609701" + integrity sha512-b0Es+/GTZyk5FG3SgUDW+2/mBwJAXWt5LuppODptiOas8bB2khLjG6+Gm1K4uwOb+1NJGPt5mZZ8Wi7vibtQ+A== + dependencies: + oboe "2.1.4" + underscore "1.9.1" + web3-core-helpers "1.2.6" + 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" @@ -12610,6 +13417,15 @@ web3-providers-ws@1.2.1: web3-core-helpers "1.2.1" websocket "github:web3-js/WebSocket-Node#polyfill/globalThis" +web3-providers-ws@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.2.tgz#d2c05c68598cea5ad3fa6ef076c3bcb3ca300d29" + integrity sha512-Wb1mrWTGMTXOpJkL0yGvL/WYLt8fUIXx8k/l52QB2IiKzvyd42dTWn4+j8IKXGSYYzOm7NMqv6nhA5VDk12VfA== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.2" + websocket "github:web3-js/WebSocket-Node#polyfill/globalThis" + web3-providers-ws@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.4.tgz#099ee271ee03f6ea4f5df9cfe969e83f4ce0e36f" @@ -12619,6 +13435,15 @@ web3-providers-ws@1.2.4: underscore "1.9.1" web3-core-helpers "1.2.4" +web3-providers-ws@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.6.tgz#3cecc49f7c99f07a75076d3c54247050bc4f7e11" + integrity sha512-20waSYX+gb5M5yKhug5FIwxBBvkKzlJH7sK6XEgdOx6BZ9YYamLmvg9wcRVtnSZO8hV/3cWenO/tRtTrHVvIgQ== + dependencies: + "@web3-js/websocket" "^1.0.29" + underscore "1.9.1" + web3-core-helpers "1.2.6" + 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" @@ -12649,6 +13474,16 @@ web3-shh@1.2.1: web3-core-subscriptions "1.2.1" web3-net "1.2.1" +web3-shh@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.2.tgz#44ed998f2a6ba0ec5cb9d455184a0f647826a49c" + integrity sha512-og258NPhlBn8yYrDWjoWBBb6zo1OlBgoWGT+LL5/LPqRbjPe09hlOYHgscAAr9zZGtohTOty7RrxYw6Z6oDWCg== + dependencies: + web3-core "1.2.2" + web3-core-method "1.2.2" + web3-core-subscriptions "1.2.2" + web3-net "1.2.2" + web3-shh@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.4.tgz#5c8ff5ab624a3b14f08af0d24d2b16c10e9f70dd" @@ -12659,6 +13494,16 @@ web3-shh@1.2.4: web3-core-subscriptions "1.2.4" web3-net "1.2.4" +web3-shh@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.6.tgz#2492616da4cac32d4c7534b890f43bac63190c14" + integrity sha512-rouWyOOM6YMbLQd65grpj8BBezQfgNeRRX+cGyW4xsn6Xgu+B73Zvr6OtA/ftJwwa9bqHGpnLrrLMeWyy4YLUw== + dependencies: + web3-core "1.2.6" + web3-core-method "1.2.6" + web3-core-subscriptions "1.2.6" + web3-net "1.2.6" + web3-shh@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.9.tgz#c4ba70d6142cfd61341a50752d8cace9a0370911" @@ -12695,6 +13540,20 @@ web3-utils@1.2.1: underscore "1.9.1" utf8 "3.0.0" +web3-utils@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.2.tgz#b53a08c40d2c3f31d3c4a28e7d749405df99c8c0" + integrity sha512-joF+s3243TY5cL7Z7y4h1JsJpUCf/kmFmj+eJar7Y2yNIGVcW961VyrAms75tjUysSuHaUQ3eQXjBEUJueT52A== + dependencies: + bn.js "4.11.8" + eth-lib "0.2.7" + 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.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.4.tgz#96832a39a66b05bf8862a5b0bdad2799d709d951" @@ -12709,6 +13568,20 @@ web3-utils@1.2.4: underscore "1.9.1" utf8 "3.0.0" +web3-utils@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.6.tgz#b9a25432da00976457fcc1094c4af8ac6d486db9" + integrity sha512-8/HnqG/l7dGmKMgEL9JeKPTtjScxOePTzopv5aaKFExPfaBrYRkgoMqhoowCiAl/s16QaTn4DoIF1QC4YsT7Mg== + dependencies: + bn.js "4.11.8" + eth-lib "0.2.7" + 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.2.9, web3-utils@^1.0.0-beta.31: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.9.tgz#abe11735221627da943971ef1a630868fb9c61f3" @@ -12749,6 +13622,20 @@ web3@1.2.1: web3-shh "1.2.1" web3-utils "1.2.1" +web3@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.2.tgz#b1b8b69aafdf94cbaeadbb68a8aa1df2ef266aec" + integrity sha512-/ChbmB6qZpfGx6eNpczt5YSUBHEA5V2+iUCbn85EVb3Zv6FVxrOo5Tv7Lw0gE2tW7EEjASbCyp3mZeiZaCCngg== + dependencies: + "@types/node" "^12.6.1" + web3-bzz "1.2.2" + web3-core "1.2.2" + web3-eth "1.2.2" + web3-eth-personal "1.2.2" + web3-net "1.2.2" + web3-shh "1.2.2" + web3-utils "1.2.2" + web3@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.4.tgz#6e7ab799eefc9b4648c2dab63003f704a1d5e7d9" @@ -12763,6 +13650,20 @@ web3@1.2.4: web3-shh "1.2.4" web3-utils "1.2.4" +web3@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.6.tgz#c497dcb14cdd8d6d9fb6b445b3b68ff83f8ccf68" + integrity sha512-tpu9fLIComgxGrFsD8LUtA4s4aCZk7px8UfcdEy6kS2uDi/ZfR07KJqpXZMij7Jvlq+cQrTAhsPSiBVvoMaivA== + dependencies: + "@types/node" "^12.6.1" + web3-bzz "1.2.6" + web3-core "1.2.6" + web3-eth "1.2.6" + web3-eth-personal "1.2.6" + web3-net "1.2.6" + web3-shh "1.2.6" + web3-utils "1.2.6" + web3@^1.2.7: version "1.2.9" resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.9.tgz#cbcf1c0fba5e213a6dfb1f2c1f4b37062e4ce337" @@ -12846,7 +13747,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@1.3.1, which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@1.3.1, which@^1.1.1, which@^1.2.14, 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== @@ -12872,6 +13773,11 @@ windows-release@^3.1.0: dependencies: execa "^1.0.0" +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" @@ -12962,9 +13868,9 @@ ws@^5.1.1: async-limiter "~1.0.0" ws@^7.2.1: - version "7.3.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" - integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w== + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" + integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== wsrun@^3.6.4: version "3.6.6" @@ -13059,7 +13965,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== -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== @@ -13115,6 +14021,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"