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
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
pragma solidity ^0.5.0;

/**
* @title L1CrossDomainMessenger
*/
contract BaseCrossDomainMessenger {
/*
* Contract Variables
*/

mapping (bytes32 => bool) public receivedMessages;
mapping (bytes32 => bool) public sentMessages;
address public targetMessengerAddress;
uint256 public messageNonce;
address public xDomainMessageSender;


/*
* Public Functions
*/

/**
* Sets the target messenger address.
* @param _targetMessengerAddress New messenger address.
*/
function setTargetMessengerAddress(
address _targetMessengerAddress
)
public
{
targetMessengerAddress = _targetMessengerAddress;
}


/*
* Internal Functions
*/

/**
* 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 _getXDomainCalldata(
address _target,
address _sender,
bytes memory _message,
uint256 _messageNonce
)
internal
pure
returns (
bytes memory
)
{
return abi.encodeWithSelector(
bytes4(keccak256(bytes("relayMessage(address,address,bytes,uint256)"))),
_target,
_sender,
_message,
_messageNonce
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
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));
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;

/* Library Imports */
import { DataTypes } from "../utils/libraries/DataTypes.sol";

/**
* @title IL1CrossDomainMessenger
*/
contract IL1CrossDomainMessenger {
/*
* Contract Variables
*/

mapping (bytes32 => bool) public receivedMessages;
mapping (bytes32 => bool) public sentMessages;
address public targetMessengerAddress;
uint256 public messageNonce;
address public xDomainMessageSender;

/*
* Data Structures
*/

struct L2MessageInclusionProof {
bytes32 stateRoot;
uint256 stateRootIndex;
DataTypes.StateElementInclusionProof stateRootProof;
bytes stateTrieWitness;
bytes storageTrieWitness;
}


/*
* Public Functions
*/

/**
* Relays a cross domain message to a contract.
* @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.
* @param _proof Inclusion proof for the given message.
*/
function relayMessage(
address _target,
address _sender,
bytes memory _message,
uint256 _messageNonce,
L2MessageInclusionProof memory _proof
) public;

/**
* Sends a cross domain message to the target messenger.
* @param _target Target contract address.
* @param _message Message to send to the target.
* @param _gasLimit Gas limit for the provided message.
*/
function sendMessage(
address _target,
bytes memory _message,
uint32 _gasLimit
) public;

/**
* Replays a cross domain message to the target messenger.
* @param _target Target contract address.
* @param _sender Original sender address.
* @param _message Message to send to the target.
* @param _messageNonce Nonce for the provided message.
* @param _gasLimit Gas limit for the provided message.
*/
function replayMessage(
address _target,
address _sender,
bytes memory _message,
uint256 _messageNonce,
uint32 _gasLimit
) public;
}
Loading