diff --git a/packages/contracts/bin/make-dump.ts b/packages/contracts/bin/make-dump.ts new file mode 100644 index 0000000000000..397c95d5c2985 --- /dev/null +++ b/packages/contracts/bin/make-dump.ts @@ -0,0 +1,15 @@ +/* External Imports */ +import * as fs from 'fs' +import * as path from 'path' +import * as mkdirp from 'mkdirp' + +/* Internal Imports */ +import { makeStateDump } from '../src' +;(async () => { + const outdir = path.resolve(__dirname, '../build/dumps') + const outfile = path.join(outdir, 'state-dump.latest.json') + mkdirp.sync(outdir) + + const dump = await makeStateDump() + fs.writeFileSync(outfile, JSON.stringify(dump)) +})() diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 030ce063a5ca6..e33d1e3cdd9cc 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -6,6 +6,7 @@ "files": [ "build/**/*.js", "build/contracts/*", + "build/dumps/*json", "build/artifacts/*json" ], "license": "MIT", @@ -27,23 +28,24 @@ "test:contracts": "cross-env SOLPP_FLAGS=\"FLAG_IS_TEST,FLAG_IS_DEBUG\" buidler test --show-stack-traces", "coverage": "yarn run coverage:contracts", "coverage:contracts": "cross-env SOLPP_FLAGS=\"FLAG_IS_TEST\" buidler coverage --network coverage --show-stack-traces --testfiles \"test/contracts/**/*.spec.ts\"", - "build": "yarn run build:contracts && yarn run build:typescript && yarn run build:copy", + "build": "yarn run build:contracts && yarn run build:typescript && yarn run build:copy && yarn run build:dump", "build:contracts": "buidler compile", "build:typescript": "tsc -p .", "build:copy": "yarn run build:copy:contracts", "build:copy:contracts": "copyfiles -u 2 \"contracts/optimistic-ethereum/**/*.sol\" \"build/contracts\"", + "build:dump": "ts-node \"./bin/make-dump.ts\"", "clean": "rm -rf ./artifacts ./build ./cache", "lint": "yarn run lint:typescript", "lint:typescript": "tslint --format stylish --project .", "fix": "yarn run fix:typescript", - "fix:typescript": "prettier --config ../../prettier-config.json --write \"index.ts\" \"buidler.config.ts\" \"{src,test,plugins}/**/*.ts\"", + "fix:typescript": "prettier --config ../../prettier-config.json --write \"index.ts\" \"buidler.config.ts\" \"{src,test,plugins,bin}/**/*.ts\"", "deploy:all": "env DEBUG=\"info:*,error:*,debug:*\" node ./build/src/exec/deploy-contracts.js" }, "dependencies": { - "@ethersproject/keccak256": "5.0.3", "@eth-optimism/core-db": "^0.0.1-alpha.30", "@eth-optimism/core-utils": "^0.0.1-alpha.30", "@eth-optimism/solc": "^0.5.16-alpha.2", + "@ethersproject/keccak256": "5.0.3", "@nomiclabs/buidler": "1.3.8", "@nomiclabs/buidler-ethers": "^2.0.0", "@nomiclabs/buidler-solpp": "^1.3.3", @@ -67,7 +69,9 @@ "devDependencies": { "copyfiles": "^2.3.0", "cross-env": "^7.0.2", + "ganache-core": "^2.11.3", "glob": "^7.1.6", + "mkdirp": "^1.0.4", "solidity-coverage": "^0.7.9" } } diff --git a/packages/contracts/src/dump.ts b/packages/contracts/src/dump.ts new file mode 100644 index 0000000000000..8191b82c93c10 --- /dev/null +++ b/packages/contracts/src/dump.ts @@ -0,0 +1,227 @@ +/* External Imports */ +import * as path from 'path' +import { ethers } from 'ethers' +import * as Ganache from 'ganache-core' +import { deployAllContracts, RollupDeployConfig } from './deployment' +import { getContractDefinition } from './contract-imports' +import { keccak256 } from 'ethers/lib/utils' + +type Accounts = Array<{ + originalAddress: string + address: string + code: string +}> + +interface StorageDump { + [key: string]: string +} + +export interface StateDump { + contracts: { + ovmExecutionManager: string + ovmStateManager: string + } + accounts: { + [address: string]: { + balance: number + nonce: number + code: string + storage: StorageDump + } + } +} + +/** + * Finds the addresses of all accounts changed in the state. + * @param cStateManager Instance of the callback-based internal vm StateManager. + * @returns Array of changed addresses. + */ +const getChangedAccounts = async (cStateManager: any): Promise => { + return new Promise((resolve, reject) => { + const accounts: string[] = [] + const stream = cStateManager._trie.createReadStream() + + stream.on('data', (val: any) => { + accounts.push(val.key.toString('hex')) + }) + + stream.on('end', () => { + resolve(accounts) + }) + }) +} + +/** + * Generates a storage dump for a given address. + * @param cStateManager Instance of the callback-based internal vm StateManager. + * @param address Address to generate a state dump for. + */ +const getStorageDump = async ( + cStateManager: any, + address: string +): Promise => { + return new Promise((resolve, reject) => { + cStateManager._getStorageTrie(address, (err: any, trie: any) => { + if (err) { + reject(err) + } + + const storage: StorageDump = {} + const stream = trie.createReadStream() + + stream.on('data', (val: any) => { + storage[val.key.toString('hex')] = val.value.toString('hex') + }) + + stream.on('end', () => { + resolve(storage) + }) + }) + }) +} + +/** + * Replaces old addresses found in a storage dump with new ones. + * @param storageDump Storage dump to sanitize. + * @param accounts Set of accounts to sanitize with. + * @returns Sanitized storage dump. + */ +const sanitizeStorageDump = ( + storageDump: StorageDump, + accounts: Accounts +): StorageDump => { + for (const [key, value] of Object.entries(storageDump)) { + let parsedKey = key + let parsedValue = value + for (const account of accounts) { + const re = new RegExp(`${account.originalAddress}`, 'g') + parsedValue = parsedValue.replace(re, account.address) + parsedKey = parsedKey.replace(re, account.address) + } + + if (parsedKey !== key) { + delete storageDump[key] + } + + storageDump[parsedKey] = parsedValue + } + + return storageDump +} + +export const makeStateDump = async (): Promise => { + const ganache = Ganache.provider({ + gasLimit: 100_000_000, + allowUnlimitedContractSize: true, + accounts: [ + { + secretKey: + '0x29f3edee0ad3abf8e2699402e0e28cd6492c9be7eaab00d732a791c33552f797', + balance: 10000000000000000000000000000000000, + }, + ], + }) + + const provider = new ethers.providers.Web3Provider(ganache) + const signer = provider.getSigner(0) + + const config: RollupDeployConfig = { + signer, + rollupOptions: { + forceInclusionPeriodSeconds: 600, + ownerAddress: await signer.getAddress(), + sequencerAddress: await signer.getAddress(), + gasMeterConfig: { + ovmTxFlatGasFee: 0, + ovmTxMaxGas: 1_000_000_000, + gasRateLimitEpochLength: 600, + maxSequencedGasPerEpoch: 1_000_000_000_000, + maxQueuedGasPerEpoch: 1_000_000_000_000, + }, + deployerWhitelistOwnerAddress: await signer.getAddress(), + allowArbitraryContractDeployment: true, + }, + } + + const resolver = await deployAllContracts(config) + + const pStateManager = ganache.engine.manager.state.blockchain.vm.pStateManager + const cStateManager = pStateManager._wrapped + + const ovmExecutionManagerOriginalAddress = resolver.contracts.executionManager.address.slice(2).toLowerCase() + const ovmExecutionManagerAddress = 'c0dec0dec0dec0dec0dec0dec0dec0dec0de0000' + + const ovmStateManagerOriginalAddress = resolver.contracts.stateManager.address.slice(2).toLowerCase() + const ovmStateManagerAddress = 'c0dec0dec0dec0dec0dec0dec0dec0dec0de0001' + + const l2ToL1MessagePasserDef = getContractDefinition('L2ToL1MessagePasser') + const l2ToL1MessagePasserHash = keccak256(l2ToL1MessagePasserDef.deployedBytecode) + const l2ToL1MessagePasserAddress = '4200000000000000000000000000000000000000' + + const l1MessageSenderDef = getContractDefinition('L1MessageSender') + const l1MessageSenderHash = keccak256(l1MessageSenderDef.deployedBytecode) + const l1MessageSenderAddress = '4200000000000000000000000000000000000001' + + const changedAccounts = await getChangedAccounts(cStateManager) + + let deadAddressIndex = 0 + let accounts: Accounts = [] + + for (const originalAddress of changedAccounts) { + const code = (await pStateManager.getContractCode(originalAddress)).toString('hex') + const codeHash = keccak256('0x' + code) + + if (code.length === 0) { + continue + } + + // Sorry for this one! + let address = originalAddress + if (codeHash === l2ToL1MessagePasserHash) { + address = l2ToL1MessagePasserAddress + } else if (codeHash === l1MessageSenderHash) { + address = l1MessageSenderAddress + } else if (originalAddress === ovmExecutionManagerOriginalAddress) { + address = ovmExecutionManagerAddress + } else if (originalAddress === ovmStateManagerOriginalAddress) { + address = ovmStateManagerAddress + } else { + address = `deaddeaddeaddeaddeaddeaddeaddeaddead${deadAddressIndex.toString(16).padStart(4, '0')}` + deadAddressIndex++ + } + + accounts.push({ + originalAddress, + address, + code: code + }) + } + + const dump: StateDump = { + contracts: { + ovmExecutionManager: '0x' + ovmExecutionManagerAddress, + ovmStateManager: '0x' + ovmStateManagerAddress, + }, + accounts: {}, + } + + for (const account of accounts) { + const storageDump = sanitizeStorageDump( + await getStorageDump(cStateManager, account.originalAddress), + accounts + ) + + dump.accounts[account.address] = { + balance: 0, + nonce: 0, + code: account.code, + storage: storageDump + } + } + + return dump +} + +export const getLatestStateDump = (): StateDump => { + return require(path.join(__dirname, '../dumps', `state-dump.latest.json`)) +} diff --git a/packages/contracts/src/index.ts b/packages/contracts/src/index.ts index 93e896037614b..75757bc3fc80d 100644 --- a/packages/contracts/src/index.ts +++ b/packages/contracts/src/index.ts @@ -1,2 +1,3 @@ export * from './deployment' export * from './contract-imports' +export * from './dump' diff --git a/packages/ovm-toolchain/package.json b/packages/ovm-toolchain/package.json index 40e9ef6520866..0110702babcf4 100644 --- a/packages/ovm-toolchain/package.json +++ b/packages/ovm-toolchain/package.json @@ -69,14 +69,16 @@ }, "dependencies": { "@eth-optimism/core-utils": "^0.0.1-alpha.30", - "@eth-optimism/rollup-contracts": "^0.0.1-alpha.33", + "@eth-optimism/contracts": "^0.0.2-alpha.1", + "@eth-optimism/ethereumjs-vm": "4.2.0-alpha.0", "@nomiclabs/buidler": "^1.4.4", "bn.js": "^5.1.3", "child_process": "^1.0.2", "ethereum-waffle-v2": "npm:ethereum-waffle@2", "ethereum-waffle-v3": "npm:ethereum-waffle@3", - "ethereumjs-ovm": "git+https://github.com/ethereum-optimism/ethereumjs-vm", "ethers-v4": "npm:ethers@4", - "ethers-v5": "npm:ethers@5.0.7" + "ethers-v5": "npm:ethers@5.0.7", + "ethjs-common-v1": "npm:ethereumjs-common@1.5.0", + "ethjs-util-v6": "npm:ethereumjs-util@6.2.1" } } diff --git a/packages/ovm-toolchain/src/buidler-plugins/buidler-ovm-node.ts b/packages/ovm-toolchain/src/buidler-plugins/buidler-ovm-node.ts index 5252be5bae70a..af64a1f1f73ed 100644 --- a/packages/ovm-toolchain/src/buidler-plugins/buidler-ovm-node.ts +++ b/packages/ovm-toolchain/src/buidler-plugins/buidler-ovm-node.ts @@ -1,32 +1,39 @@ -import { extendEnvironment } from '@nomiclabs/buidler/config' -// tslint:disable-next-line -const VM = require('ethereumjs-ovm').default // tslint:disable-next-line const BN = require('bn.js') +import { extendEnvironment } from '@nomiclabs/buidler/config' + +/* Internal Imports */ +import { makeOVM } from '../utils/ovm' extendEnvironment(async (bre) => { const config: any = bre.config config.startOvmNode = async (): Promise => { - const gasLimit = 100_000_000 + const ovmGasLimit = config.ovmGasLimit || 100_000_000 // Initialize the provider so it has a VM instance ready to copy. await bre.network.provider['_init' as any]() const node = bre.network.provider['_node' as any] - // Copy the options from the old VM instance and insert our new one. + // Copy the options from the old VM instance and create a new one. const vm = node['_vm' as any] - const ovm = new VM({ - ...vm.opts, - stateManager: vm.stateManager, - emGasLimit: gasLimit, + const ovm = makeOVM({ + evmOpts: { + ...vm.opts, + stateManager: vm.stateManager, + }, + ovmOpts: { + emGasLimit: ovmGasLimit, + }, }) + + // Initialize the OVM and replace the old VM. await ovm.init() node['_vm' as any] = ovm // Hijack the gas estimation function. - node.estimateGas = async (txParams: any): Promise<{ estimation: any }> => { + node.estimateGas = async (): Promise<{ estimation: any }> => { return { - estimation: new BN(gasLimit), + estimation: new BN(ovmGasLimit), } } diff --git a/packages/ovm-toolchain/src/ganache.ts b/packages/ovm-toolchain/src/ganache.ts deleted file mode 100644 index 7cff337a95019..0000000000000 --- a/packages/ovm-toolchain/src/ganache.ts +++ /dev/null @@ -1,102 +0,0 @@ -import * as eGanache from 'ganache-core' -// tslint:disable-next-line -const VM = require('ethereumjs-ovm').default -// tslint:disable-next-line -const BN = require('bn.js') - -// tslint:disable-next-line:no-shadowed-variable -const wrap = (provider: any, opts: any = {}) => { - const gasLimit = opts.gasLimit || 100_000_000 - const blockchain = provider.engine.manager.state.blockchain - - blockchain.blockGasLimit = '0x' + new BN(gasLimit).toString('hex') - - let ovm: any - const _original = blockchain.createVMFromStateTrie.bind(blockchain) - // tslint:disable-next-line:only-arrow-functions - blockchain.createVMFromStateTrie = function( - state: any, - activatePrecompiles: any - ) { - if (ovm === undefined) { - const vm = _original(state, activatePrecompiles) - ovm = new VM({ - ...vm.opts, - stateManager: vm.stateManager, - emGasLimit: gasLimit, - }) - return ovm - } else { - return new VM({ - ...ovm.opts, - state, - stateManager: undefined, - activatePrecompiles, - emOpts: ovm._emOpts, - initialized: ovm._initialized, - contracts: ovm._contracts, - }) - } - } - - // tslint:disable-next-line:only-arrow-functions - blockchain.estimateGas = function(tx: any, blockNumber: any, callback: any) { - callback(null, { - gasEstimate: new BN(gasLimit), - }) - } - - const _send = provider.send.bind(provider) - const _wrappedSend = (payload: any, cb: any) => { - if (payload.method === 'eth_getProof') { - ovm - .getEthTrieProof(payload.params[0], payload.params[1]) - .then((ethTrieProof: any) => { - cb(null, { - id: payload.id, - jsonrpc: '2.0', - result: ethTrieProof, - }) - }) - .catch((err: any) => { - cb(err, null) - }) - } else if (payload.method === 'eth_getAccount') { - ovm - .getEthAccount(payload.params[0]) - .then((account: any) => { - cb(null, { - id: payload.id, - jsonrpc: '2.0', - result: account, - }) - }) - .catch((err: any) => { - cb(err, null) - }) - } else { - _send(payload, cb) - } - } - - provider.send = _wrappedSend - provider.sendAsync = _wrappedSend - - return provider -} - -const provider = (opts: any) => { - const gProvider = (eGanache as any).provider(opts) - return wrap(gProvider, opts) -} - -const server = (opts: any) => { - const gServer = (eGanache as any).server(opts) - gServer.provider = wrap(gServer.provider, opts) - return gServer -} - -export const ganache = { - provider, - server, -} diff --git a/packages/ovm-toolchain/src/ganache/ganache.ts b/packages/ovm-toolchain/src/ganache/ganache.ts new file mode 100644 index 0000000000000..3015c2602c42d --- /dev/null +++ b/packages/ovm-toolchain/src/ganache/ganache.ts @@ -0,0 +1,163 @@ +// tslint:disable +const BN = require('bn.js') +import * as eGanache from 'ganache-core' + +/* Internal Imports */ +import Common from 'ethjs-common-v1' +import { to } from './utils/to' +import { makeOVM } from '../utils/ovm' + +function createVMFromStateTrie( + state: any, + activatePrecompiles: any, + ovm?: any +): any { + const self = this + const common = Common.forCustomChain( + 'mainnet', // TODO needs to match chain id + { + name: 'ganache', + networkId: self.options.network_id || self.forkVersion, + chainId: self.options._chainId, + comment: 'Local test network', + bootstrapNodes: [], + }, + self.options.hardfork + ) + const vm = makeOVM({ + evmOpts: { + state: state, + common, + blockchain: { + // EthereumJS VM needs a blockchain object in order to get block information. + // When calling getBlock() it will pass a number that's of a Buffer type. + // Unfortunately, it uses a 64-character buffer (when converted to hex) to + // represent block numbers as well as block hashes. Since it's very unlikely + // any block number will get higher than the maximum safe Javascript integer, + // we can convert this buffer to a number ahead of time before calling our + // own getBlock(). If the conversion succeeds, we have a block number. + // If it doesn't, we have a block hash. (Note: Our implementation accepts both.) + getBlock: function(number, done) { + try { + number = typeof to.number(number) + } catch (e) { + // Do nothing; must be a block hash. + } + + self.getBlock(number, done) + }, + }, + activatePrecompiles: activatePrecompiles || false, + allowUnlimitedContractSize: self.options.allowUnlimitedContractSize, + }, + ovmOpts: ovm + ? { + initialized: + ovm.contracts && + ovm.contracts.OVM_ExecutionManager.address.length !== 0, + contracts: ovm.contracts, + } + : {}, + }) + + if (self.options.debug === true) { + // log executed opcodes, including args as hex + vm.on('step', function(info) { + var name = info.opcode.name + var argsNum = info.opcode.in + if (argsNum) { + var args = info.stack + .slice(-argsNum) + .map((arg) => to.hex(arg)) + .join(' ') + + self.logger.log(`${name} ${args}`) + } else { + self.logger.log(name) + } + }) + } + + return vm +} + +const wrap = (provider: any, opts: any = {}) => { + const gasLimit = opts.gasLimit || 100_000_000 + const blockchain = provider.engine.manager.state.blockchain + + blockchain.blockGasLimit = '0x' + new BN(gasLimit).toString('hex') + + let ovm: any + blockchain.createVMFromStateTrie = function( + state: any, + activatePrecompiles: any + ) { + const vm = createVMFromStateTrie.call(this, state, activatePrecompiles, ovm) + + if (!ovm) { + ovm = vm + } + + return vm + } + + blockchain.estimateGas = function(tx: any, blockNumber: any, callback: any) { + callback(null, { + gasEstimate: new BN(gasLimit), + }) + } + + const _send = provider.send.bind(provider) + const _wrappedSend = (payload: any, cb: any) => { + if (payload.method === 'eth_getProof') { + ovm + .getEthTrieProof(payload.params[0], payload.params[1]) + .then((ethTrieProof: any) => { + cb(null, { + id: payload.id, + jsonrpc: '2.0', + result: ethTrieProof, + }) + }) + .catch((err: any) => { + cb(err, null) + }) + } else if (payload.method === 'eth_getAccount') { + ovm + .getEthAccount(payload.params[0]) + .then((account: any) => { + cb(null, { + id: payload.id, + jsonrpc: '2.0', + result: account, + }) + }) + .catch((err: any) => { + cb(err, null) + }) + } else { + _send(payload, cb) + } + } + + provider.send = _wrappedSend + provider.sendAsync = _wrappedSend + + return provider +} + +const provider = (opts: any) => { + const gProvider = (eGanache as any).provider(opts) + return wrap(gProvider, opts) +} + +const server = (opts: any) => { + const gServer = (eGanache as any).server(opts) + gServer.provider = wrap(gServer.provider, opts) + return gServer +} + +export const ganache = { + provider, + server, +} diff --git a/packages/ovm-toolchain/src/ganache/index.ts b/packages/ovm-toolchain/src/ganache/index.ts new file mode 100644 index 0000000000000..0f5bde9539777 --- /dev/null +++ b/packages/ovm-toolchain/src/ganache/index.ts @@ -0,0 +1 @@ +export * from './ganache' diff --git a/packages/ovm-toolchain/src/ganache/utils/to.ts b/packages/ovm-toolchain/src/ganache/utils/to.ts new file mode 100644 index 0000000000000..7d22400a9ece4 --- /dev/null +++ b/packages/ovm-toolchain/src/ganache/utils/to.ts @@ -0,0 +1,43 @@ +import * as utils from 'ethjs-util-v6' +import { BigNumber } from 'ethers-v5' + +export const to = { + hex: (val: any) => { + if (typeof val === 'string') { + if (val.indexOf('0x') === 0) { + return val.trim() + } else { + val = new utils.BN(val) + } + } + + if (typeof val === 'boolean') { + val = val ? 1 : 0 + } + + if (typeof val === 'number') { + val = BigNumber.from(val).toHexString() + } else if (val == null) { + return '0x' + } else if (typeof val === 'object') { + // Support Buffer, BigInteger and BN library + // Hint: BN is used in ethereumjs + val = val.toString('hex') + } + + return utils.addHexPrefix(val) + }, + number: (val: any): number => { + if (typeof val === 'number') { + return val + } + + if (typeof val === 'string') { + if (val.indexOf('0x') !== 0) { + return parseInt(val, 10) + } + } + + return utils.bufferToInt(utils.toBuffer(val)) + }, +} diff --git a/packages/ovm-toolchain/src/utils/ovm/index.ts b/packages/ovm-toolchain/src/utils/ovm/index.ts new file mode 100644 index 0000000000000..2a36a1a0d7bb1 --- /dev/null +++ b/packages/ovm-toolchain/src/utils/ovm/index.ts @@ -0,0 +1 @@ +export { makeOVM } from './make-ovm' diff --git a/packages/ovm-toolchain/src/utils/ovm/make-ovm.ts b/packages/ovm-toolchain/src/utils/ovm/make-ovm.ts new file mode 100644 index 0000000000000..0d23bb4189e05 --- /dev/null +++ b/packages/ovm-toolchain/src/utils/ovm/make-ovm.ts @@ -0,0 +1,27 @@ +// tslint:disable-next-line +const VM = require('@eth-optimism/ethereumjs-vm').default +import { StateDump, getLatestStateDump } from '@eth-optimism/contracts' + +interface OVMOpts { + initialized: boolean + emGasLimit: number + dump: StateDump + contracts: { + ovmExecutionManager: any + ovmStateManager: any + } +} + +export const makeOVM = (args: { + evmOpts?: any + ovmOpts?: Partial +}): any => { + return new VM({ + ...args.evmOpts, + ovmOpts: { + dump: getLatestStateDump(), + emGasLimit: 100_000_000, + ...args.ovmOpts, + }, + }) +} diff --git a/yarn.lock b/yarn.lock index dcb3c21cf3381..a1bf9baca9535 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,6 +39,45 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== +"@eth-optimism/ethereumjs-vm@4.2.0-alpha.0": + version "4.2.0-alpha.0" + resolved "https://registry.yarnpkg.com/@eth-optimism/ethereumjs-vm/-/ethereumjs-vm-4.2.0-alpha.0.tgz#58c8b84732568b73a7ba8105c30dc1513b331324" + integrity sha512-Ef6/WihVYJhrPMuL+ts3sC8ePWSU4AKG78j/3XITAVxhPBEJqetHdOeT8UMIDJPulCmvWbuJ0pz6KQ5Xztol/Q== + dependencies: + async "^2.1.2" + async-eventemitter "^0.2.2" + core-js-pure "^3.0.1" + debug "^4.2.0" + ethereumjs-account "^3.0.0" + ethereumjs-block "^2.2.2" + ethereumjs-blockchain "^4.0.3" + ethereumjs-common "^1.5.0" + ethereumjs-tx "^2.1.2" + ethereumjs-util "^6.2.0" + ethers "^5.0.14" + fake-merkle-patricia-tree "^1.0.1" + functional-red-black-tree "^1.0.1" + merkle-patricia-tree "^2.3.2" + rustbn.js "~0.2.0" + safe-buffer "^5.1.1" + util.promisify "^1.0.0" + uuid "^8.3.0" + +"@eth-optimism/ovm-toolchain@0.0.1-alpha.5": + version "0.0.1-alpha.5" + resolved "https://registry.yarnpkg.com/@eth-optimism/ovm-toolchain/-/ovm-toolchain-0.0.1-alpha.5.tgz#abd961528e1d10eae523ce73547887d811df0aa2" + integrity sha512-2geNns/bo1f5Ic/iuT4JeAa+eIzUU8jhrfEOwcQ+W3UoA857rwbff5UqKNvMm3jXlI1YLIYQhXTbBZsezpBPEw== + dependencies: + "@eth-optimism/core-utils" "^0.0.1-alpha.30" + "@eth-optimism/rollup-contracts" "^0.0.1-alpha.32" + "@nomiclabs/buidler" "^1.4.4" + bn.js "^5.1.3" + child_process "^1.0.2" + ethereum-waffle-v2 "npm:ethereum-waffle@2" + ethereum-waffle-v3 "npm:ethereum-waffle@3" + ethers-v4 "npm:ethers@4" + ethers-v5 "npm:ethers@5.0.7" + "@eth-optimism/solc@^0.5.16-alpha.0": version "0.5.16-alpha.1" resolved "https://registry.yarnpkg.com/@eth-optimism/solc/-/solc-0.5.16-alpha.1.tgz#04019314df03faac8bc5363e8a1c2c561d404a04" @@ -171,6 +210,21 @@ "@ethersproject/properties" ">=5.0.0-beta.131" "@ethersproject/strings" ">=5.0.0-beta.130" +"@ethersproject/abi@5.0.6", "@ethersproject/abi@^5.0.5": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.6.tgz#129b794e5868472374d1ecb8ff55d3ebec1f6769" + integrity sha512-ldhyQANDeVH0tMJM4SeySx9HTuKdev15/CUTSJMyvjgfLrWApE4Fmz8FRz9/giN1Nw8gRCWlPOfKkfmuypA7pg== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.0.3": version "5.0.4" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.4.tgz#92d603307ad343f9465d5e0f546df3cf72709862" @@ -186,6 +240,19 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.3" +"@ethersproject/abstract-provider@5.0.5", "@ethersproject/abstract-provider@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.5.tgz#797a32a8707830af1ad8f833e9c228994d5572b9" + integrity sha512-i/CjElAkzV7vQBAeoz+IpjGfcFYEP9eD7j3fzZ0fzTq03DO7PPnR+xkEZ1IoDXGwDS+55aLM1xvLDwB/Lx6IOQ== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/networks" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/web" "^5.0.6" + "@ethersproject/abstract-provider@^5.0.0", "@ethersproject/abstract-provider@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.3.tgz#be3dd880bb24c15cd7eb14daeae56ba9e00d967e" @@ -199,6 +266,17 @@ "@ethersproject/transactions" "^5.0.3" "@ethersproject/web" "^5.0.4" +"@ethersproject/abstract-signer@5.0.6", "@ethersproject/abstract-signer@^5.0.4": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.6.tgz#c01211665ab9c9e93988c4783b789712fd93a388" + integrity sha512-h8TZBX3pL2Xx9tmsRxfWcaaI+FcJFHWvZ/vNvFjLp8zJ0kPD501LKTt2jo44LZ20N3EW68JMoyEmRQ6bpsn+iA== + dependencies: + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/abstract-signer@^5.0.0", "@ethersproject/abstract-signer@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.3.tgz#197bad52933a2e8c745d55f644bab1109f1be16f" @@ -210,6 +288,18 @@ "@ethersproject/logger" "^5.0.5" "@ethersproject/properties" "^5.0.3" +"@ethersproject/address@5.0.5", "@ethersproject/address@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.5.tgz#2caa65f6b7125015395b1b54c985ee0b27059cc7" + integrity sha512-DpkQ6rwk9jTefrRsJzEm6nhRiJd9pvhn1xN0rw5N/jswXG5r7BLk/GVA0mMAVWAsYfvi2xSc5L41FMox43RYEA== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/rlp" "^5.0.3" + bn.js "^4.4.0" + "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.0", "@ethersproject/address@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.3.tgz#86489f836d1656135fa6cae56d9fd1ab5b2c95af" @@ -222,6 +312,13 @@ "@ethersproject/rlp" "^5.0.3" bn.js "^4.4.0" +"@ethersproject/base64@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.4.tgz#b0d8fdbf3dda977cf546dcd35725a7b1d5256caa" + integrity sha512-4KRykQ7BQMeOXfvio1YITwHjxwBzh92UoXIdzxDE1p53CK28bbHPdsPNYo0wl0El7lJAMpT2SOdL0hhbWRnyIA== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/base64@^5.0.0", "@ethersproject/base64@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.3.tgz#d0aaa32c9ab08e2d62a6238581607ab6e929297e" @@ -229,6 +326,14 @@ dependencies: "@ethersproject/bytes" "^5.0.4" +"@ethersproject/basex@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.4.tgz#93e1cd11f9a47281da2389de24f88e13e9d90847" + integrity sha512-ixIr/kKiAoSzOnSc777AGIOAhKai5Ivqr4HO/Gz+YG+xkfv6kqD6AW4ga9vM20Wwb0QBhh3LoRWTu4V1K+x9Ew== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/basex@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.0.3.tgz#f8c9bc449a089131f52cfa8698cf77bc22e27e32" @@ -237,6 +342,15 @@ "@ethersproject/bytes" "^5.0.4" "@ethersproject/properties" "^5.0.3" +"@ethersproject/bignumber@5.0.8", "@ethersproject/bignumber@^5.0.7": + version "5.0.8" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.8.tgz#cee33bd8eb0266176def0d371b45274b1d2c4ec0" + integrity sha512-KXFVAFKS1jdTXYN8BE5Oj+ZfPMh28iRdFeNGBVT6cUFdtiPVqeXqc0ggvBqA3A1VoFFGgM7oAeaagA393aORHA== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + bn.js "^4.4.0" + "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.0", "@ethersproject/bignumber@^5.0.6": version "5.0.6" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.6.tgz#1b5494a640c64096538e622b6ba8a5b8439ebde4" @@ -246,6 +360,13 @@ "@ethersproject/logger" "^5.0.5" bn.js "^4.4.0" +"@ethersproject/bytes@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.5.tgz#688b70000e550de0c97a151a21f15b87d7f97d7c" + integrity sha512-IEj9HpZB+ACS6cZ+QQMTqmu/cnUK2fYNE6ms/PVxjoBjoxc6HCraLpam1KuRvreMy0i523PLmjN8OYeikRdcUQ== + dependencies: + "@ethersproject/logger" "^5.0.5" + "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.0", "@ethersproject/bytes@^5.0.4": version "5.0.4" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.4.tgz#328d9d929a3e970964ecf5d62e12568a187189f1" @@ -253,6 +374,13 @@ dependencies: "@ethersproject/logger" "^5.0.5" +"@ethersproject/constants@5.0.5", "@ethersproject/constants@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.5.tgz#0ed19b002e8404bdf6d135234dc86a7d9bcf9b71" + integrity sha512-foaQVmxp2+ik9FrLUCtVrLZCj4M3Ibgkqvh+Xw/vFRSerkjVSYePApaVE5essxhoSlF1U9oXfWY09QI2AXtgKA== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.0", "@ethersproject/constants@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.3.tgz#7ccb8e2e9f14fbcc2d52d0e1402a83a5613a2f65" @@ -260,6 +388,21 @@ dependencies: "@ethersproject/bignumber" "^5.0.6" +"@ethersproject/contracts@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.5.tgz#64831a341ec8ca225e83ff3e9437c26b970fd5d7" + integrity sha512-tFI255lFbmbqMkgnuyhDWHl3yWqttPlReplYuVvDCT/SuvBjLR4ad2uipBlh1fh5X1ipK9ettAoV4S0HKim4Kw== + dependencies: + "@ethersproject/abi" "^5.0.5" + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/contracts@^5.0.0", "@ethersproject/contracts@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.0.3.tgz#9e9a395b6c9ddf1f456d9443e96c0c8d7660f79f" @@ -275,6 +418,16 @@ "@ethersproject/logger" "^5.0.5" "@ethersproject/properties" "^5.0.3" +"@ethersproject/hash@5.0.5", "@ethersproject/hash@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.5.tgz#e383ba2c7941834266fa6e2cf543d2b0c50a9d59" + integrity sha512-GpI80/h2HDpfNKpCZoxQJCjOQloGnlD5hM1G+tZe8FQDJhEvFjJoPDuWv+NaYjJfOciKS2Axqc4Q4WamdLoUgg== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.0", "@ethersproject/hash@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.3.tgz#41f17fd7972838831620338dad932bfe3d684209" @@ -285,6 +438,24 @@ "@ethersproject/logger" "^5.0.5" "@ethersproject/strings" "^5.0.3" +"@ethersproject/hdnode@5.0.5", "@ethersproject/hdnode@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.0.5.tgz#1f89aad0a5ba9dfae3a85a36e0669f8bc7a74781" + integrity sha512-Ho4HZaK+KijE5adayvjAGusWMnT0mgwGa5hGMBofBOgX9nqiKf6Wxx68SXBGI1/L3rmKo6mlAjxUd8gefs0teQ== + dependencies: + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/basex" "^5.0.3" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/pbkdf2" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/signing-key" "^5.0.4" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/wordlists" "^5.0.4" + "@ethersproject/hdnode@^5.0.0", "@ethersproject/hdnode@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.0.3.tgz#47c83f34d0ccb15a110f28ba8cc00590b81197b6" @@ -303,6 +474,25 @@ "@ethersproject/transactions" "^5.0.3" "@ethersproject/wordlists" "^5.0.3" +"@ethersproject/json-wallets@5.0.7", "@ethersproject/json-wallets@^5.0.6": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.0.7.tgz#4c48753b38ce7bce23a55f25c23f24617cf560e5" + integrity sha512-dgOn9JtGgjT28mDXs4LYY2rT4CzS6bG/rxoYuPq3TLHIf6nmvBcr33Fee6RrM/y8UAx4gyIkf6wb2cXsOctvQQ== + dependencies: + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/hdnode" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/pbkdf2" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/random" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + aes-js "3.0.0" + scrypt-js "3.0.1" + "@ethersproject/json-wallets@^5.0.0", "@ethersproject/json-wallets@^5.0.5": version "5.0.5" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.0.5.tgz#35fa0bb9360c4f2ac62b3e2d7ebe2c4913baa324" @@ -330,11 +520,31 @@ "@ethersproject/bytes" "^5.0.4" js-sha3 "0.5.7" +"@ethersproject/keccak256@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.4.tgz#36ca0a7d1ae2a272da5654cb886776d0c680ef3a" + integrity sha512-GNpiOUm9PGUxFNqOxYKDQBM0u68bG9XC9iOulEQ8I0tOx/4qUpgVzvgXL6ugxr0RY554Gz/NQsVqknqPzUcxpQ== + dependencies: + "@ethersproject/bytes" "^5.0.4" + js-sha3 "0.5.7" + +"@ethersproject/logger@5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.6.tgz#faa484203e86e08be9e07fef826afeef7183fe88" + integrity sha512-FrX0Vnb3JZ1md/7GIZfmJ06XOAA8r3q9Uqt9O5orr4ZiksnbpXKlyDzQtlZ5Yv18RS8CAUbiKH9vwidJg1BPmQ== + "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.0", "@ethersproject/logger@^5.0.5": version "5.0.5" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.5.tgz#e3ba3d0bcf9f5be4da5f043b1e328eb98b80002f" integrity sha512-gJj72WGzQhUtCk6kfvI8elTaPOQyMvrMghp/nbz0ivTo39fZ7IjypFh/ySDeUSdBNplAwhzWKKejQhdpyefg/w== +"@ethersproject/networks@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.4.tgz#6d320a5e15a0cda804f5da88be0ba846156f6eec" + integrity sha512-/wHDTRms5mpJ09BoDrbNdFWINzONe05wZRgohCXvEv39rrH/Gd/yAnct8wC0RsW3tmFOgjgQxuBvypIxuUynTw== + dependencies: + "@ethersproject/logger" "^5.0.5" + "@ethersproject/networks@^5.0.0", "@ethersproject/networks@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.3.tgz#c4ebe56e79ca399247382627e50a022aa68ece55" @@ -342,6 +552,14 @@ dependencies: "@ethersproject/logger" "^5.0.5" +"@ethersproject/pbkdf2@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.4.tgz#a0841d53f5ce9a2b52a65a349d2dc15910b0a767" + integrity sha512-9jVBjHXQKfr9+3bkCg01a8Cd1H9e+7Kw3ZMIvAxD0lZtuzrXsJxm1hVwY9KA+PRUvgS/9tTP4viXQYwLAax7zg== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/pbkdf2@^5.0.0", "@ethersproject/pbkdf2@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.0.3.tgz#f9eca284a458cd11179d407884c595412d8d2775" @@ -350,6 +568,13 @@ "@ethersproject/bytes" "^5.0.4" "@ethersproject/sha2" "^5.0.3" +"@ethersproject/properties@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.4.tgz#a67a1f5a52c30850b5062c861631e73d131f666e" + integrity sha512-UdyX3GqBxFt15B0uSESdDNmhvEbK3ACdDXl2soshoPcneXuTswHDeA0LoPlnaZzhbgk4p6jqb4GMms5C26Qu6A== + dependencies: + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.0", "@ethersproject/properties@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.3.tgz#991aef39a5f87d4645cee76cec4df868bfb08be6" @@ -357,6 +582,31 @@ dependencies: "@ethersproject/logger" "^5.0.5" +"@ethersproject/providers@5.0.10": + version "5.0.10" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.10.tgz#761ae58aa0749dfc6059fc01c46fe04df2b6346d" + integrity sha512-Nre9ZxO+Bjpf5bK1noUS7lx7YFuSAofYr9MM71zbrOuLuR2IhJm8yeKLewbRpnA/Cx6ZHUCYCo4B8FVOWXW2Zg== + dependencies: + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/basex" "^5.0.3" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/networks" "^5.0.3" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/random" "^5.0.3" + "@ethersproject/rlp" "^5.0.3" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/web" "^5.0.6" + bech32 "1.1.4" + ws "7.2.3" + "@ethersproject/providers@^5.0.0", "@ethersproject/providers@^5.0.6", "@ethersproject/providers@^5.0.7": version "5.0.7" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.0.7.tgz#8dfb9eacb36d3c05c08831f71ad43fb46d2aaec6" @@ -382,6 +632,14 @@ bech32 "1.1.4" ws "7.2.3" +"@ethersproject/random@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.0.4.tgz#98f7cf65b0e588cec39ef24843e391ed5004556f" + integrity sha512-AIZJhqs6Ba4/+U3lOjt3QZbP6b/kuuGLJUYFUonAgWmkTHwqsCwYnFvnHKQSUuHbXHvErp7WFXFlztx+yMn3kQ== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/random@^5.0.0", "@ethersproject/random@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.0.3.tgz#ec16546fffdc10b9082f1207bd3a09f54cbcf5e6" @@ -390,6 +648,14 @@ "@ethersproject/bytes" "^5.0.4" "@ethersproject/logger" "^5.0.5" +"@ethersproject/rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.4.tgz#0090a0271e84ea803016a112a79f5cfd80271a77" + integrity sha512-5qrrZad7VTjofxSsm7Zg/7Dr4ZOln4S2CqiDdOuTv6MBKnXj0CiBojXyuDy52M8O3wxH0CyE924hXWTDV1PQWQ== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/rlp@^5.0.0", "@ethersproject/rlp@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.3.tgz#841a5edfdf725f92155fe74424f5510c9043c13a" @@ -398,6 +664,15 @@ "@ethersproject/bytes" "^5.0.4" "@ethersproject/logger" "^5.0.5" +"@ethersproject/sha2@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.4.tgz#40f639721a27dbe034b3dee021ba20b054586fec" + integrity sha512-0yFhf1mspxAfWdXXoPtK94adUeu1R7/FzAa+DfEiZTc76sz/vHXf0LSIazoR3znYKFny6haBxME+usbvvEcF3A== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + hash.js "1.1.3" + "@ethersproject/sha2@^5.0.0", "@ethersproject/sha2@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.0.3.tgz#52c16edc1135d0ec7d242d88eed035dae72800c0" @@ -407,6 +682,16 @@ "@ethersproject/logger" "^5.0.5" hash.js "1.1.3" +"@ethersproject/signing-key@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.5.tgz#acfd06fc05a14180df7e027688bbd23fc4baf782" + integrity sha512-Z1wY7JC1HVO4CvQWY2TyTTuAr8xK3bJijZw1a9G92JEmKdv1j255R/0YLBBcFTl2J65LUjtXynNJ2GbArPGi5g== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + elliptic "6.5.3" + "@ethersproject/signing-key@^5.0.0", "@ethersproject/signing-key@^5.0.4": version "5.0.4" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.4.tgz#a5334ce8a52d4e9736dc8fb6ecc384704ecf8783" @@ -417,6 +702,17 @@ "@ethersproject/properties" "^5.0.3" elliptic "6.5.3" +"@ethersproject/solidity@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.5.tgz#97a7d8a67f2d944f208c948fed0d565512bcc2be" + integrity sha512-DMFQ0ouXmNVoKWbGEUFGi8Urli4SJip9jXafQyFHWPRr5oJUqDVkNfwcyC37k+mhBG93k7qrYXCH2xJnGEOxHg== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/sha2" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/solidity@^5.0.0", "@ethersproject/solidity@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.0.3.tgz#178197cb2f19d2986dadd515928c5dba3cb27e55" @@ -428,6 +724,15 @@ "@ethersproject/sha2" "^5.0.3" "@ethersproject/strings" "^5.0.3" +"@ethersproject/strings@5.0.5", "@ethersproject/strings@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.5.tgz#ed7e99a282a02f40757691b04a24cd83f3752195" + integrity sha512-JED6WaIV00xM/gvj8vSnd+0VWtDYdidTmavFRCTQakqfz+4tDo6Jz5LHgG+dd45h7ah7ykCHW0C7ZXWEDROCXQ== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.0", "@ethersproject/strings@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.3.tgz#756cc4b93203a091966d40824b0b28048e2d5d9b" @@ -437,6 +742,21 @@ "@ethersproject/constants" "^5.0.3" "@ethersproject/logger" "^5.0.5" +"@ethersproject/transactions@5.0.6", "@ethersproject/transactions@^5.0.5": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.6.tgz#b8b27938be6e9ed671dbdd35fe98af8b14d0df7c" + integrity sha512-htsFhOD+NMBxx676A8ehSuwVV49iqpSB+CkjPZ02tpNew0K6p8g0CZ46Z1ZP946gIHAU80xQ0NACHYrjIUaCFA== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/rlp" "^5.0.3" + "@ethersproject/signing-key" "^5.0.4" + "@ethersproject/transactions@^5.0.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.3", "@ethersproject/transactions@^5.0.4": version "5.0.4" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.4.tgz#76d7afdb0667efde22b054de3a8dc5b440eb6cd2" @@ -452,6 +772,15 @@ "@ethersproject/rlp" "^5.0.3" "@ethersproject/signing-key" "^5.0.4" +"@ethersproject/units@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.5.tgz#6e088900cf1f982ff60c9c35ce0a0f797ca7d78c" + integrity sha512-XHZZIA+o4Sfne9ycWWdoCpMQSpTAF1V1fxNIfgFAVYBp0JKZp4YypDdHCDleAP4rPuFgSNeJqZyb3kAe1VJMkg== + dependencies: + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/units@^5.0.0", "@ethersproject/units@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.0.3.tgz#3b6d7a027f53b25e1752d353f3c5cedb4e4a0dc7" @@ -461,6 +790,27 @@ "@ethersproject/constants" "^5.0.3" "@ethersproject/logger" "^5.0.5" +"@ethersproject/wallet@5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.0.5.tgz#93973d919e75bbc5422f11d1c3f39695f1a27e71" + integrity sha512-NbrKmsW3w+5dVOEyVCN5VAAIp3y8ckutW6AV7Lo0Hn8RO9mLT8ZFzLGp4lzgJoxkm+EV8BE+x1N6NdiOgUzRng== + dependencies: + "@ethersproject/abstract-provider" "^5.0.4" + "@ethersproject/abstract-signer" "^5.0.4" + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/hdnode" "^5.0.4" + "@ethersproject/json-wallets" "^5.0.6" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/random" "^5.0.3" + "@ethersproject/signing-key" "^5.0.4" + "@ethersproject/transactions" "^5.0.5" + "@ethersproject/wordlists" "^5.0.4" + "@ethersproject/wallet@^5.0.0", "@ethersproject/wallet@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.0.3.tgz#45016e0fd3a79dcbb2be867a5181bdd055fbb3ac" @@ -482,6 +832,17 @@ "@ethersproject/transactions" "^5.0.3" "@ethersproject/wordlists" "^5.0.3" +"@ethersproject/web@5.0.8", "@ethersproject/web@^5.0.6": + version "5.0.8" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.8.tgz#afd2363df0b440025b7b4a95527ea0dbfdb65e2e" + integrity sha512-5An1sar40zXUYmBLH+P1m0F3mTi8lNBV/usLKP3AYBdSxPQyQWymLAEPyX7x5/eBpQAwCInLtF7LPMm9HPI28g== + dependencies: + "@ethersproject/base64" "^5.0.3" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/web@^5.0.0", "@ethersproject/web@^5.0.4", "@ethersproject/web@^5.0.5": version "5.0.5" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.5.tgz#dd0531bf2fbf44c37ce8b547e40c183cf88c3e09" @@ -493,6 +854,17 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.3" +"@ethersproject/wordlists@5.0.5", "@ethersproject/wordlists@^5.0.4": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.5.tgz#a935b7fdb86c96b44ea8391fed94b3fa2f33c606" + integrity sha512-XA3ycFltVrCTQt04w5nHu3Xq5Z6HjqWsXaAYQHFdqtugyUsIumaO9S5MOwFFuUYTNkZUoT3jCRa/OBS+K4tLfA== + dependencies: + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + "@ethersproject/wordlists@^5.0.0", "@ethersproject/wordlists@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.0.3.tgz#e3bddae0b046ea294bb7c9d564e5bfcde1510613" @@ -4335,6 +4707,13 @@ debug@4, debug@4.1.1, debug@^4.1.1: dependencies: ms "^2.1.1" +debug@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" + integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== + dependencies: + ms "2.1.2" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -5359,7 +5738,8 @@ ethereumjs-blockchain@^4.0.3: rlp "^2.2.2" semaphore "^1.1.0" -ethereumjs-common@1.5.0: +ethereumjs-common@1.5.0, "ethjs-common-v1@npm:ethereumjs-common@1.5.0": + name ethjs-common-v1 version "1.5.0" resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz#d3e82fc7c47c0cef95047f431a99485abc9bb1cd" integrity sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ== @@ -5460,7 +5840,7 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0: +ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0, "ethjs-util-v6@npm:ethereumjs-util@6.2.1": version "6.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== @@ -5706,6 +6086,42 @@ ethers@^5.0.0, ethers@^5.0.1: "@ethersproject/web" "^5.0.4" "@ethersproject/wordlists" "^5.0.3" +ethers@^5.0.14: + version "5.0.15" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.0.15.tgz#958818605ea1bfe5a745bbe6b6f4f2c5c0e4637c" + integrity sha512-ODBTkK+dg44d4yzLgD/w3IxDBa9nLFBF4z8OgICISvkVO2uLLmlR5boqv61PtTMTIPydT9wTn5C1cUntHKFkqQ== + dependencies: + "@ethersproject/abi" "5.0.6" + "@ethersproject/abstract-provider" "5.0.5" + "@ethersproject/abstract-signer" "5.0.6" + "@ethersproject/address" "5.0.5" + "@ethersproject/base64" "5.0.4" + "@ethersproject/basex" "5.0.4" + "@ethersproject/bignumber" "5.0.8" + "@ethersproject/bytes" "5.0.5" + "@ethersproject/constants" "5.0.5" + "@ethersproject/contracts" "5.0.5" + "@ethersproject/hash" "5.0.5" + "@ethersproject/hdnode" "5.0.5" + "@ethersproject/json-wallets" "5.0.7" + "@ethersproject/keccak256" "5.0.4" + "@ethersproject/logger" "5.0.6" + "@ethersproject/networks" "5.0.4" + "@ethersproject/pbkdf2" "5.0.4" + "@ethersproject/properties" "5.0.4" + "@ethersproject/providers" "5.0.10" + "@ethersproject/random" "5.0.4" + "@ethersproject/rlp" "5.0.4" + "@ethersproject/sha2" "5.0.4" + "@ethersproject/signing-key" "5.0.5" + "@ethersproject/solidity" "5.0.5" + "@ethersproject/strings" "5.0.5" + "@ethersproject/transactions" "5.0.6" + "@ethersproject/units" "5.0.5" + "@ethersproject/wallet" "5.0.5" + "@ethersproject/web" "5.0.8" + "@ethersproject/wordlists" "5.0.5" + ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -6409,7 +6825,7 @@ ganache-cli@6.9.0: source-map-support "0.5.12" yargs "13.2.4" -ganache-core@*, ganache-core@^2.10.2, ganache-core@^2.11.2: +ganache-core@*, ganache-core@^2.10.2, ganache-core@^2.11.2, ganache-core@^2.11.3: version "2.11.3" resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.11.3.tgz#c59e6c34b03279bffd32f4694ec8ed6f5f1d76a8" integrity sha512-SsFJUnyiZI+jW3I43XluXi3TvJC3Ke6vZkvN6NjbWpXvi6dOrmafkyq9Rq07+Qrri6BLGKWoZcG8HfH6ietuqg==