Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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;
}
}
11 changes: 5 additions & 6 deletions packages/contracts/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down Expand Up @@ -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",
Expand Down
Loading