diff --git a/packages/contracts/contracts/optimistic-ethereum/bridge/BaseMockCrossDomainMessenger.sol b/packages/contracts/contracts/optimistic-ethereum/bridge/BaseMockCrossDomainMessenger.sol deleted file mode 100644 index 6825ce3284f1d..0000000000000 --- a/packages/contracts/contracts/optimistic-ethereum/bridge/BaseMockCrossDomainMessenger.sol +++ /dev/null @@ -1,102 +0,0 @@ -pragma solidity ^0.5.0; - -/** - * @title BaseMockCrossDomainMessenger - */ -contract BaseMockCrossDomainMessenger { - /* - * Contract Variables - */ - - mapping (uint256 => bytes) internal fullSentMessages; - uint256 public messagesToRelay; - uint256 public lastRelayedMessage; - - - /* - * Public Functions - */ - - function relayMessageToTarget() - public - { - require( - lastRelayedMessage < messagesToRelay, - "Already relayed all of the messages!" - ); - - bytes memory topMessage = fullSentMessages[lastRelayedMessage]; - - ( - address target, - address sender, - bytes memory message, - uint256 messageNonce - ) = _decodeXDomainCalldata(topMessage); - - _relayXDomainMessageToTarget( - target, - sender, - message, - messageNonce - ); - - lastRelayedMessage += 1; - } - - - /* - * Internal Functions - */ - - /** - * Sends a cross domain message. - */ - function _sendXDomainMessage( - bytes memory _message - ) - internal - { - fullSentMessages[messagesToRelay] = _message; - messagesToRelay += 1; - - return; - } - - /** - * Internal relay function. - */ - function _relayXDomainMessageToTarget( - address _target, - address _sender, - bytes memory _message, - uint256 _messageNonce - ) - internal - { - return; - } - - /** - * Generates the correct cross domain calldata for a message. - * @param _target Target contract address. - * @param _sender Message sender address. - * @param _message Message to send to the target. - * @param _messageNonce Nonce for the provided message. - * @return ABI encoded cross domain calldata. - */ - function _decodeXDomainCalldata( - bytes memory _calldata - ) - internal - pure - returns ( - address _target, - address _sender, - bytes memory _message, - uint256 _messageNonce - ) - { - return abi.decode(_calldata, (address, address, bytes, uint256)); - } -} diff --git a/packages/contracts/contracts/optimistic-ethereum/bridge/MockL1CrossDomainMessenger.sol b/packages/contracts/contracts/optimistic-ethereum/bridge/MockL1CrossDomainMessenger.sol deleted file mode 100644 index 5e94cc9c44ab1..0000000000000 --- a/packages/contracts/contracts/optimistic-ethereum/bridge/MockL1CrossDomainMessenger.sol +++ /dev/null @@ -1,53 +0,0 @@ -pragma solidity ^0.5.0; -pragma experimental ABIEncoderV2; - -/* Interface Imports */ -import { IL2CrossDomainMessenger } from "./L2CrossDomainMessenger.interface.sol"; - -/* Contract Imports */ -import { BaseMockCrossDomainMessenger } from "./BaseMockCrossDomainMessenger.sol"; -import { L1CrossDomainMessenger } from "./L1CrossDomainMessenger.sol"; - -/** - * @title MockL1CrossDomainMessenger - */ -contract MockL1CrossDomainMessenger is BaseMockCrossDomainMessenger, L1CrossDomainMessenger { - /* - * Internal Functions - */ - - /** - * Verifies that the given message is valid. - * .inheritdoc L1CrossDomainMessenger - */ - function _verifyXDomainMessage( - bytes memory _xDomainCalldata, - L2MessageInclusionProof memory _proof - ) - internal - returns ( - bool - ) - { - return true; - } - - /** - * Internal relay function. - */ - function _relayXDomainMessageToTarget( - address _target, - address _sender, - bytes memory _message, - uint256 _messageNonce - ) - internal - { - IL2CrossDomainMessenger(targetMessengerAddress).relayMessage( - _target, - _sender, - _message, - _messageNonce - ); - } -} diff --git a/packages/contracts/contracts/optimistic-ethereum/bridge/MockL2CrossDomainMessenger.sol b/packages/contracts/contracts/optimistic-ethereum/bridge/MockL2CrossDomainMessenger.sol deleted file mode 100644 index f519a3f76fd1a..0000000000000 --- a/packages/contracts/contracts/optimistic-ethereum/bridge/MockL2CrossDomainMessenger.sol +++ /dev/null @@ -1,68 +0,0 @@ -pragma solidity ^0.5.0; - -/* Interface Imports */ -import { IL1CrossDomainMessenger } from "./L1CrossDomainMessenger.interface.sol"; - -/* Library Imports */ -import { DataTypes } from "../utils/libraries/DataTypes.sol"; - -/* Contract Imports */ -import { BaseMockCrossDomainMessenger } from "./BaseMockCrossDomainMessenger.sol"; -import { L2CrossDomainMessenger } from "./L2CrossDomainMessenger.sol"; - -/** - * @title MockL2CrossDomainMessenger - */ -contract MockL2CrossDomainMessenger is BaseMockCrossDomainMessenger, L2CrossDomainMessenger { - /* - * Internal Functions - */ - - /** - * Verifies that a received cross domain message is valid. - * .inheritdoc L2CrossDomainMessenger - */ - function _verifyXDomainMessage() - internal - returns ( - bool - ) - { - return true; - } - - /** - * Internal relay function. - */ - function _relayXDomainMessageToTarget( - address _target, - address _sender, - bytes memory _message, - uint256 _messageNonce - ) - internal - { - IL1CrossDomainMessenger(targetMessengerAddress).relayMessage( - _target, - _sender, - _message, - _messageNonce, - IL1CrossDomainMessenger.L2MessageInclusionProof({ - stateRoot: bytes32(''), - stateRootIndex: 0, - stateRootProof: DataTypes.StateElementInclusionProof({ - batchIndex: 0, - batchHeader: DataTypes.StateChainBatchHeader({ - elementsMerkleRoot: bytes32(''), - numElementsInBatch: 0, - cumulativePrevElements: 0 - }), - indexInBatch: 0, - siblings: new bytes32[](1) - }), - stateTrieWitness: bytes(''), - storageTrieWitness: bytes('') - }) - ); - } -} diff --git a/packages/contracts/contracts/optimistic-ethereum/bridge/mocks/MockCrossDomainMessenger.sol b/packages/contracts/contracts/optimistic-ethereum/bridge/mocks/MockCrossDomainMessenger.sol new file mode 100644 index 0000000000000..3ad349a932c14 --- /dev/null +++ b/packages/contracts/contracts/optimistic-ethereum/bridge/mocks/MockCrossDomainMessenger.sol @@ -0,0 +1,132 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.5.0; +pragma experimental ABIEncoderV2; + +/* Contract Imports */ +import { BaseCrossDomainMessenger } from "../BaseCrossDomainMessenger.sol"; + +/** + * @title MockCrossDomainMessenger + */ +contract MockCrossDomainMessenger is BaseCrossDomainMessenger { + + /*********** + * Structs * + ***********/ + + struct ReceivedMessage { + uint256 timestamp; + address target; + address sender; + bytes message; + uint256 messageNonce; + uint256 gasLimit; + } + + + /********************** + * Contract Variables * + **********************/ + + ReceivedMessage[] internal fullReceivedMessages; + uint256 internal lastRelayedMessage; + uint256 internal delay; + + + /*************** + * Constructor * + ***************/ + + /** + * @param _delay Time in seconds before a message can be relayed. + */ + constructor( + uint256 _delay + ) + public + { + delay = _delay; + } + + + /******************** + * Public Functions * + ********************/ + + /** + * Sends a message to another mock xdomain messenger. + * @param _target Target for the message. + * @param _message Message to send. + * @param _gasLimit Amount of gas to send with the call. + */ + function sendMessage( + address _target, + bytes memory _message, + uint32 _gasLimit + ) + public + { + MockCrossDomainMessenger targetMessenger = MockCrossDomainMessenger( + targetMessengerAddress + ); + + // Just send it over! + targetMessenger.receiveMessage(ReceivedMessage({ + timestamp: block.timestamp, + target: _target, + sender: msg.sender, + message: _message, + messageNonce: messageNonce, + gasLimit: _gasLimit + })); + + messageNonce += 1; + } + + /** + * Receives a message to be sent later. + * @param _message Message to send later. + */ + function receiveMessage( + ReceivedMessage memory _message + ) + public + { + fullReceivedMessages.push(_message); + } + + /** + * Checks whether we have messages to relay. + * @param _exists Whether or not we have more messages to relay. + */ + function hasNextMessage() + public + view + returns ( + bool _exists + ) + { + if (fullReceivedMessages.length <= lastRelayedMessage) { + return false; + } + + ReceivedMessage memory nextMessage = fullReceivedMessages[lastRelayedMessage]; + return nextMessage.timestamp + delay < block.timestamp; + } + + /** + * Relays the last received message not yet relayed. + */ + function relayNextMessage() + public + { + if (hasNextMessage() == false) { + return; + } + + ReceivedMessage memory nextMessage = fullReceivedMessages[lastRelayedMessage]; + xDomainMessageSender = nextMessage.sender; + nextMessage.target.call.gas(nextMessage.gasLimit)(nextMessage.message); + lastRelayedMessage += 1; + } +} diff --git a/packages/contracts/package.json b/packages/contracts/package.json index bfd00a7f2b1e5..8a1fb123e2965 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,7 +1,7 @@ { "name": "@eth-optimism/rollup-contracts", "private": true, - "version": "0.0.1-alpha.29", + "version": "0.0.1-alpha.32", "main": "build/index.js", "files": [ "build/**/*.js", @@ -41,11 +41,10 @@ }, "dependencies": { "@ethersproject/keccak256": "5.0.3", - "@eth-optimism/core-db": "^0.0.1-alpha.28", - "@eth-optimism/core-utils": "^0.0.1-alpha.28", - "@eth-optimism/solc": "^0.5.16-alpha.0", - "@eth-optimism/solc-transpiler": "^0.0.1-alpha.27", - "@nomiclabs/buidler": "^1.3.8", + "@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", + "@nomiclabs/buidler": "1.3.8", "@nomiclabs/buidler-ethers": "^2.0.0", "@nomiclabs/buidler-solpp": "^1.3.3", "@nomiclabs/buidler-waffle": "^2.0.0", diff --git a/packages/core-db/package.json b/packages/core-db/package.json index 45f7f7c51df5e..c01e612e7aaf9 100644 --- a/packages/core-db/package.json +++ b/packages/core-db/package.json @@ -1,6 +1,6 @@ { "name": "@eth-optimism/core-db", - "version": "0.0.1-alpha.28", + "version": "0.0.1-alpha.30", "description": "Optimism DB Utils", "main": "build/index.js", "files": [ @@ -30,7 +30,7 @@ "url": "https://github.com/ethereum-optimism/optimism-monorepo.git" }, "dependencies": { - "@eth-optimism/core-utils": "^0.0.1-alpha.28", + "@eth-optimism/core-utils": "^0.0.1-alpha.30", "abstract-leveldown": "^6.2.2", "async-lock": "^1.2.2", "chai": "^4.2.0", diff --git a/packages/core-utils/package.json b/packages/core-utils/package.json index 4a5f2985c642c..3dc3b7f1baf8f 100644 --- a/packages/core-utils/package.json +++ b/packages/core-utils/package.json @@ -1,6 +1,6 @@ { "name": "@eth-optimism/core-utils", - "version": "0.0.1-alpha.28", + "version": "0.0.1-alpha.30", "description": "Optimism Core Utils", "main": "build/index.js", "files": [ @@ -39,7 +39,7 @@ "debug": "^4.1.1", "dotenv": "^8.2.0", "ethereumjs-util": "^6.2.0", - "ethers": "^4.0.37", + "ethers-v4": "npm:ethers@4", "express": "^4.17.1", "memdown": "^4.0.0", "ts-md5": "^1.2.4", diff --git a/packages/core-utils/src/app/contract-deployment.ts b/packages/core-utils/src/app/contract-deployment.ts index e49611a29d33f..5af5b72ce4349 100644 --- a/packages/core-utils/src/app/contract-deployment.ts +++ b/packages/core-utils/src/app/contract-deployment.ts @@ -2,9 +2,9 @@ /* External Imports */ import { config } from 'dotenv' -import { Contract, ContractFactory, ethers, Wallet } from 'ethers' -import { stripZeros, hexlify, RLP, getAddress } from 'ethers/utils' -import { Provider } from 'ethers/providers' +import { Contract, ContractFactory, ethers, Wallet } from 'ethers-v4' +import { stripZeros, hexlify, RLP, getAddress } from 'ethers-v4/utils' +import { Provider } from 'ethers-v4/providers' /* Internal Imports */ import { ContractDeploymentFunction } from '../types' diff --git a/packages/core-utils/src/app/crypto.ts b/packages/core-utils/src/app/crypto.ts index 2121c56c5fc0c..f916c49137ef3 100644 --- a/packages/core-utils/src/app/crypto.ts +++ b/packages/core-utils/src/app/crypto.ts @@ -1,12 +1,12 @@ /* External Imports */ import { Md5 } from 'ts-md5' -import { ethers } from 'ethers' -import { TransactionRequest } from 'ethers/providers/abstract-provider' +import { ethers } from 'ethers-v4' +import { TransactionRequest } from 'ethers-v4/providers/abstract-provider' import { joinSignature, resolveProperties, serializeTransaction, -} from 'ethers/utils' +} from 'ethers-v4/utils' /* Internal Imports */ import { HashAlgorithm, HashFunction } from '../types' diff --git a/packages/core-utils/src/app/ethereum.ts b/packages/core-utils/src/app/ethereum.ts index dd6122c76e5d0..2e398658ca1ef 100644 --- a/packages/core-utils/src/app/ethereum.ts +++ b/packages/core-utils/src/app/ethereum.ts @@ -1,9 +1,9 @@ -import { Contract, Wallet } from 'ethers' +import { Contract, Wallet } from 'ethers-v4' import { Provider, TransactionRequest, TransactionResponse, -} from 'ethers/providers' +} from 'ethers-v4/providers' import { getLogger } from './log' import { Logger } from '../types' diff --git a/packages/core-utils/src/app/index.ts b/packages/core-utils/src/app/index.ts index 9f2c66d3ee27b..eb3c9d9aff0cb 100644 --- a/packages/core-utils/src/app/index.ts +++ b/packages/core-utils/src/app/index.ts @@ -1,5 +1,5 @@ /* External Imports */ -import { ethers } from 'ethers' +import { ethers } from 'ethers-v4' /* Abi */ export const abi = new ethers.utils.AbiCoder() diff --git a/packages/core-utils/src/app/misc.ts b/packages/core-utils/src/app/misc.ts index fd80c275d5509..36b1f416be34e 100644 --- a/packages/core-utils/src/app/misc.ts +++ b/packages/core-utils/src/app/misc.ts @@ -3,7 +3,7 @@ import * as domain from 'domain' /* Internal Imports */ import { BigNumber } from './number' -import { RLP, hexlify } from 'ethers/utils' +import { RLP, hexlify } from 'ethers-v4/utils' export const NULL_ADDRESS = '0x0000000000000000000000000000000000000000' const hexRegex = /^(0x)?[0-9a-fA-F]*$/ diff --git a/packages/core-utils/src/app/signatures.ts b/packages/core-utils/src/app/signatures.ts index d7aed0ce3a956..5aa0550a42286 100644 --- a/packages/core-utils/src/app/signatures.ts +++ b/packages/core-utils/src/app/signatures.ts @@ -1,5 +1,5 @@ /* Internal Imports */ -import { ethers } from 'ethers' +import { ethers } from 'ethers-v4' import { SignatureProvider, SignatureVerifier } from '../types' import { hexStrToBuf } from './misc' diff --git a/packages/core-utils/src/types/contract-deployment.ts b/packages/core-utils/src/types/contract-deployment.ts index 083bb0527b40d..ef2765ac00b18 100644 --- a/packages/core-utils/src/types/contract-deployment.ts +++ b/packages/core-utils/src/types/contract-deployment.ts @@ -1,4 +1,4 @@ -import { Wallet } from 'ethers' +import { Wallet } from 'ethers-v4' /** * Deploys a contract and returns its deployed address. diff --git a/packages/core-utils/src/types/type-guards.ts b/packages/core-utils/src/types/type-guards.ts index 9eea8a5463458..3263764b5ec65 100644 --- a/packages/core-utils/src/types/type-guards.ts +++ b/packages/core-utils/src/types/type-guards.ts @@ -9,7 +9,7 @@ import { ZERO, add0x } from '../app' import { Address } from 'cluster' /* External Imports */ -import { ethers } from 'ethers' +import { ethers } from 'ethers-v4' /** * Checks if a JSON-RPC response is an error response. diff --git a/packages/core-utils/test/app/contract-deployment.spec.ts b/packages/core-utils/test/app/contract-deployment.spec.ts index e013afb6f05bb..f8b1a4fd4ec89 100644 --- a/packages/core-utils/test/app/contract-deployment.spec.ts +++ b/packages/core-utils/test/app/contract-deployment.spec.ts @@ -2,8 +2,8 @@ import { should } from '../setup' /* External Imports */ import { createMockProvider, getWallets } from 'ethereum-waffle' -import { ContractFactory, Wallet } from 'ethers' -import { Provider } from 'ethers/providers' +import { ContractFactory, Wallet } from 'ethers-v4' +import { Provider } from 'ethers-v4/providers' /* Internal Imports */ import { getDeployedContractAddress } from '../../src/app' diff --git a/packages/ovm-toolchain/package.json b/packages/ovm-toolchain/package.json index 2be67ff13483a..93d393bf986f7 100644 --- a/packages/ovm-toolchain/package.json +++ b/packages/ovm-toolchain/package.json @@ -1,6 +1,6 @@ { "name": "@eth-optimism/ovm-toolchain", - "version": "0.0.1-alpha.1", + "version": "0.0.1-alpha.5", "description": "Wrappers for Ethereum dev tools", "private": true, "main": "build/index.js", @@ -49,7 +49,7 @@ "access": "public" }, "devDependencies": { - "@eth-optimism/solc": "^0.5.16-alpha.0", + "@eth-optimism/solc": "^0.5.16-alpha.2", "@nomiclabs/buidler": "^1.4.4", "@nomiclabs/buidler-ethers": "^2.0.0", "@nomiclabs/buidler-waffle": "^2.0.0", @@ -68,9 +68,8 @@ "web3": "^1.2.11" }, "dependencies": { - "@eth-optimism/core-utils": "^0.0.1-alpha.27", - "@eth-optimism/rollup-contracts": "^0.0.1-alpha.29", - "@eth-optimism/solc-transpiler": "^0.0.1-alpha.28", + "@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", diff --git a/packages/ovm-toolchain/src/waffle/waffle-v2.ts b/packages/ovm-toolchain/src/waffle/waffle-v2.ts index 3e6063b54028d..2a6dc13c1e688 100644 --- a/packages/ovm-toolchain/src/waffle/waffle-v2.ts +++ b/packages/ovm-toolchain/src/waffle/waffle-v2.ts @@ -5,15 +5,25 @@ import Ganache from 'ganache-core' /* Internal Imports */ import { ganache } from '../ganache' -import { initCrossDomainMessengersVX } from './waffle-vx' +import { + initCrossDomainMessengersVX, + waitForCrossDomainMessages, +} from './waffle-vx' -export const initCrossDomainMessengers = async ( - provider: any +const initCrossDomainMessengers = async ( + l1ToL2MessageDelay: number, + l2ToL1MessageDelay: number, + signer: any ): Promise<{ l1CrossDomainMessenger: Contract l2CrossDomainMessenger: Contract }> => { - return initCrossDomainMessengersVX(ethers, provider) + return initCrossDomainMessengersVX( + l1ToL2MessageDelay, + l2ToL1MessageDelay, + ethers, + signer + ) } /** @@ -72,4 +82,6 @@ export class MockProvider extends providers.Web3Provider { export const waffleV2 = { MockProvider, + initCrossDomainMessengers, + waitForCrossDomainMessages, } diff --git a/packages/ovm-toolchain/src/waffle/waffle-v3.ts b/packages/ovm-toolchain/src/waffle/waffle-v3.ts index b2681038d1182..8ae5b38b8e5fe 100644 --- a/packages/ovm-toolchain/src/waffle/waffle-v3.ts +++ b/packages/ovm-toolchain/src/waffle/waffle-v3.ts @@ -5,17 +5,25 @@ import Ganache from 'ganache-core' /* Internal Imports */ import { ganache } from '../ganache' -import { initCrossDomainMessengersVX } from './waffle-vx' - -export { waitForCrossDomainMessages } from './waffle-vx' +import { + initCrossDomainMessengersVX, + waitForCrossDomainMessages, +} from './waffle-vx' export const initCrossDomainMessengers = async ( - provider: any + l1ToL2MessageDelay: number, + l2ToL1MessageDelay: number, + signer: any ): Promise<{ l1CrossDomainMessenger: Contract l2CrossDomainMessenger: Contract }> => { - return initCrossDomainMessengersVX(ethers, provider) + return initCrossDomainMessengersVX( + l1ToL2MessageDelay, + l2ToL1MessageDelay, + ethers, + signer + ) } interface MockProviderOptions { @@ -48,4 +56,6 @@ export class MockProvider extends providers.Web3Provider { export const waffleV3 = { MockProvider, + initCrossDomainMessengers, + waitForCrossDomainMessages, } diff --git a/packages/ovm-toolchain/src/waffle/waffle-vx.ts b/packages/ovm-toolchain/src/waffle/waffle-vx.ts index 48a4388fddc8d..985406add71e9 100644 --- a/packages/ovm-toolchain/src/waffle/waffle-vx.ts +++ b/packages/ovm-toolchain/src/waffle/waffle-vx.ts @@ -11,6 +11,7 @@ import { getContractDefinition } from '@eth-optimism/rollup-contracts' */ const getContractFromDefinition = ( ethers: any, + signer: any, name: string, args: any[] = [] ): any => { @@ -18,7 +19,8 @@ const getContractFromDefinition = ( const contractFactory = new ethers.ContractFactory( contractDefinition.abi, - contractDefinition.bytecode + contractDefinition.bytecode, + signer ) return contractFactory.deploy(...args) @@ -31,20 +33,26 @@ const getContractFromDefinition = ( * @returns Both cross domain messenger objects. */ export const initCrossDomainMessengersVX = async ( + l1ToL2MessageDelay: number, + l2ToL1MessageDelay: number, ethers: any, - provider: any + signer: any ): Promise<{ l1CrossDomainMessenger: any l2CrossDomainMessenger: any }> => { - const l1CrossDomainMessenger = getContractFromDefinition( + const l1CrossDomainMessenger = await getContractFromDefinition( ethers, - 'MockL1CrossDomainMessenger' + signer, + 'MockCrossDomainMessenger', + [l2ToL1MessageDelay] ) - const l2CrossDomainMessenger = getContractFromDefinition( + const l2CrossDomainMessenger = await getContractFromDefinition( ethers, - 'MockL2CrossDomainMessenger' + signer, + 'MockCrossDomainMessenger', + [l1ToL2MessageDelay] ) await l1CrossDomainMessenger.setTargetMessengerAddress( @@ -54,8 +62,8 @@ export const initCrossDomainMessengersVX = async ( l1CrossDomainMessenger.address ) - provider.__l1CrossDomainMessenger = l1CrossDomainMessenger - provider.__l2CrossDomainMessenger = l2CrossDomainMessenger + signer.provider.__l1CrossDomainMessenger = l1CrossDomainMessenger + signer.provider.__l2CrossDomainMessenger = l2CrossDomainMessenger return { l1CrossDomainMessenger, @@ -68,10 +76,10 @@ export const initCrossDomainMessengersVX = async ( * @param provider Ethers provider with attached messengers. */ export const waitForCrossDomainMessages = async ( - provider: any + signer: any ): Promise => { - const l1CrossDomainMessenger = provider.__l1CrossDomainMessenger - const l2CrossDomainMessenger = provider.__l2CrossDomainMessenger + const l1CrossDomainMessenger = signer.provider.__l1CrossDomainMessenger + const l2CrossDomainMessenger = signer.provider.__l2CrossDomainMessenger if (!l1CrossDomainMessenger || !l2CrossDomainMessenger) { throw new Error( @@ -79,11 +87,11 @@ export const waitForCrossDomainMessages = async ( ) } - while ((await l1CrossDomainMessenger.messagesToRelay()) > 0) { - await l1CrossDomainMessenger.relayMessageToTarget() + while (await l1CrossDomainMessenger.hasNextMessage()) { + await l1CrossDomainMessenger.relayNextMessage() } - while ((await l2CrossDomainMessenger.messagesToRelay()) > 0) { - await l2CrossDomainMessenger.relayMessageToTarget() + while (await l2CrossDomainMessenger.hasNextMessage()) { + await l2CrossDomainMessenger.relayNextMessage() } } diff --git a/yarn.lock b/yarn.lock index 31a3254169365..d73130ded683f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -60,6 +60,20 @@ ts-md5 "^1.2.4" uuid "^3.3.3" +"@eth-optimism/ovm-toolchain@0.0.1-alpha.1": + version "0.0.1-alpha.1" + resolved "https://registry.yarnpkg.com/@eth-optimism/ovm-toolchain/-/ovm-toolchain-0.0.1-alpha.1.tgz#69ebb93723ae0bf1fd5210366afa8456c90e86ed" + integrity sha512-nqGWNSvIYvbHXB71ulkiZIALkcZYq43G6E5WMfTn/g/rLM7GALZuTZ6AjoFguPkYmsd9wLa9dPCWx7pKc7D/dg== + dependencies: + "@eth-optimism/core-utils" "^0.0.1-alpha.27" + "@eth-optimism/solc-transpiler" "^0.0.1-alpha.28" + "@nomiclabs/buidler" "^1.4.4" + 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" + "@eth-optimism/rollup-core@^0.0.1-alpha.28": version "0.0.1-alpha.28" resolved "https://registry.yarnpkg.com/@eth-optimism/rollup-core/-/rollup-core-0.0.1-alpha.28.tgz#845de41ed266e0f1fd738776cb68bfe1fa391104" @@ -86,7 +100,7 @@ ethereumjs-vm "^4.1.3" ethers "^4.0.42" -"@eth-optimism/solc-transpiler@^0.0.1-alpha.27", "@eth-optimism/solc-transpiler@^0.0.1-alpha.28": +"@eth-optimism/solc-transpiler@^0.0.1-alpha.28": version "0.0.1-alpha.28" resolved "https://registry.yarnpkg.com/@eth-optimism/solc-transpiler/-/solc-transpiler-0.0.1-alpha.28.tgz#327743c7c0271dac13243fb4de22e1f0ee81b31c" integrity sha512-UyQK6AseKfG1h1kRW+Atu9z0z0Ym3MW+ncoiRK+7TUbKyrDcKuBlLst+FXuo6fChHkw25oDfHpb3t/oTLDLlCg== @@ -112,6 +126,21 @@ semver "^5.5.0" tmp "0.0.33" +"@eth-optimism/solc@^0.5.16-alpha.2": + version "0.5.16-alpha.2" + resolved "https://registry.yarnpkg.com/@eth-optimism/solc/-/solc-0.5.16-alpha.2.tgz#24e92d93682b2895fc4de70a2ab28b80e78000cb" + integrity sha512-c8Ynl6teu5z7kKOweGB8V629liKTIC/udnuwpdImQgBGyp6BTMXwgBPKQkHagCC5eTAEr9jGF+ENvt6ppxElGA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + "@ethereum-waffle/chai@^2.5.1": version "2.5.1" resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-2.5.1.tgz#8bdc055952fc80ff78132571396a2771a36d97ae" @@ -1361,7 +1390,53 @@ "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" -"@nomiclabs/buidler@^1.3.8", "@nomiclabs/buidler@^1.4.4": +"@nomiclabs/buidler@1.3.8": + version "1.3.8" + resolved "https://registry.yarnpkg.com/@nomiclabs/buidler/-/buidler-1.3.8.tgz#55013ed8513afbd0d06ff9d00f6fa8b5e6173982" + integrity sha512-SmSsNteks20Vl4WBELRV8Vnokh1CxbPHFF5aBqhe/4tR2QVR51dNy8dwDkmj153UyAW+f6ZtxF9QT+TxNomZBg== + dependencies: + "@nomiclabs/ethereumjs-vm" "^4.1.1" + "@solidity-parser/parser" "^0.5.2" + "@types/bn.js" "^4.11.5" + "@types/lru-cache" "^5.1.0" + abort-controller "^3.0.0" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + ci-info "^2.0.0" + debug "^4.1.1" + deepmerge "^2.1.0" + download "^7.1.0" + enquirer "^2.3.0" + eth-sig-util "^2.5.2" + ethereum-cryptography "^0.1.2" + ethereumjs-abi "^0.6.8" + ethereumjs-account "^3.0.0" + ethereumjs-block "^2.2.0" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + ethereumjs-util "^6.1.0" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "^7.1.3" + io-ts "1.10.4" + is-installed-globally "^0.2.0" + lodash "^4.17.11" + merkle-patricia-tree "^3.0.0" + mocha "^7.1.2" + node-fetch "^2.6.0" + qs "^6.7.0" + raw-body "^2.4.1" + semver "^6.3.0" + slash "^3.0.0" + solc "0.6.8" + source-map-support "^0.5.13" + ts-essentials "^2.0.7" + tsort "0.0.1" + uuid "^3.3.2" + ws "^7.2.1" + +"@nomiclabs/buidler@^1.4.4": version "1.4.5" resolved "https://registry.yarnpkg.com/@nomiclabs/buidler/-/buidler-1.4.5.tgz#9e332918bf0c19416494e3c4580fd3ca350ed70b" integrity sha512-jaaVvG7OsrObhEBnLtQ/8L3J92+Jgioaw2+296dDO4Uc+MO/kprORbnpbE/WKvPL1geKQ4uj6VdCpM7qNCwL3g==