Skip to main content



A version of the child messenger that allows an admin to relay messages on its behalf.

No parent messenger is needed for this case, as the admin could be trusted to manually send DVM requests on mainnet. This is intended to be used as a "beta" deployment compatible with any EVM-compatible chains before implementing a full bridge adapter. Put simply, it is meant as a stop-gap.


setOracleSpoke(address newOracleSpoke) (public)

Changes the stored address of the Oracle spoke, deployed on L2.

The caller of this function must be the admin.


  • newOracleSpoke: address of the new oracle spoke, deployed on L2.
sendMessageToParent(bytes data) (public)

Logs a message to be manually relayed to L1.

The caller must be the OracleSpoke on L2. No other contract is permissioned to call this function.


  • data: data message sent to the L1 messenger. Should be an encoded function call or packed data.
processMessageFromCrossChainParent(bytes data, address target) (public)

Process a received message from the admin.

The caller must be the the admin.


  • data: data message sent from the admin. Should be an encoded function call or packed data.
  • target: desired recipient of data. Target must implement the processMessageFromParent function. Having this as a param enables the Admin to send messages to arbitrary addresses from the messenger contract. This is primarily used to send messages to the OracleSpoke and GovernorSpoke.
_preEntranceCheck() (internal)
_preEntranceSet() (internal)
_postEntranceReset() (internal)
_startReentrantGuardDisabled() (internal)
_endReentrantGuardDisabled() (internal)
constructor() (internal)

Initializes the contract setting the deployer as the initial owner.

owner() → address (public)

Returns the address of the current owner.

renounceOwnership() (public)

Leaves the contract without owner. It will not be possible to call onlyOwner functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.

transferOwnership(address newOwner) (public)

Transfers ownership of the contract to a new account (newOwner). Can only be called by the current owner.

_transferOwnership(address newOwner) (internal)

Transfers ownership of the contract to a new account (newOwner). Internal function without access restriction.

_msgSender() → address (internal)
_msgData() → bytes (internal)


SetOracleSpoke(address newOracleSpoke)
MessageSentToParent(bytes data, address oracleSpoke)
MessageReceivedFromParent(bytes data, address targetSpoke, address caller)
OwnershipTransferred(address previousOwner, address newOwner)



Prevents a contract from calling itself, directly or indirectly. Calling a nonReentrant function from another nonReentrant function is not supported. It is possible to prevent this from happening by making the nonReentrant function external, and making it call a private function that does the actual state modification.


Designed to prevent a view-only method from being re-entered during a call to a nonReentrant() state-changing method.


Throws if called by any account other than the owner.