ETH Price: $1,950.69 (-2.79%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Ownersh...169480552023-03-31 15:25:471047 days ago1680276347IN
0x209c23DB...8e1d564dA
0 ETH0.0010687337.25124931

Latest 12 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
Create Retryable...241410962026-01-01 16:52:1140 days ago1767286331
0x209c23DB...8e1d564dA
0.00000546 ETH
Relay Message241410962026-01-01 16:52:1140 days ago1767286331
0x209c23DB...8e1d564dA
0.00000546 ETH
Create Retryable...238647532025-11-23 23:06:5979 days ago1763939219
0x209c23DB...8e1d564dA
0.00001962 ETH
Relay Message238647532025-11-23 23:06:5979 days ago1763939219
0x209c23DB...8e1d564dA
0.00001962 ETH
Create Retryable...220681492025-03-17 17:38:11330 days ago1742233091
0x209c23DB...8e1d564dA
0.00034978 ETH
Relay Message220681492025-03-17 17:38:11330 days ago1742233091
0x209c23DB...8e1d564dA
0.00034978 ETH
Create Retryable...184785932023-11-01 16:57:47832 days ago1698857867
0x209c23DB...8e1d564dA
0.00376846 ETH
Relay Message184785932023-11-01 16:57:47832 days ago1698857867
0x209c23DB...8e1d564dA
0.00376846 ETH
Create Retryable...174152262023-06-05 15:33:23981 days ago1685979203
0x209c23DB...8e1d564dA
0.00400662 ETH
Relay Message174152262023-06-05 15:33:23981 days ago1685979203
0x209c23DB...8e1d564dA
0.00400662 ETH
Create Retryable...173653882023-05-29 14:58:59988 days ago1685372339
0x209c23DB...8e1d564dA
0.01544912 ETH
Relay Message173653882023-05-29 14:58:59988 days ago1685372339
0x209c23DB...8e1d564dA
0.01544912 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
L1MessageRelayer

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
// SPDX-License-Identifier: MIT
pragma solidity 0.7.5;

import "@arbitrum/nitro-contracts/src/bridge/IInbox.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

import "./L2MessageExecutor.sol";

contract L1MessageRelayer is Ownable {
  /// @notice Address of the governance TimeLock contract.
  address public timeLock;

  /// @notice Address of arbitrum's L1 inbox contract.
  IInbox public inbox;

  /// @notice Emitted when a retryable ticket is created for relaying L1 message to L2.
  event RetryableTicketCreated(uint256 indexed ticketId);

  /// @notice Throws if called by any account other than the timeLock contract.
  modifier onlyTimeLock() {
    require(
      msg.sender == timeLock,
      "L1MessageRelayer::onlyTimeLock: Unauthorized message sender"
    );
    _;
  }

  constructor(address _timeLock, address _inbox) {
    require(_timeLock != address(0), "_timeLock can't the zero address");
    require(_inbox != address(0), "_inbox can't the zero address");
    timeLock = _timeLock;
    inbox = IInbox(_inbox);
  }

  /// @notice renounceOwnership has been disabled so that the contract is never left without a onwer
  /// @inheritdoc Ownable
  function renounceOwnership() public override onlyOwner {
    revert("function disabled");
  }

  /**
   * @notice sends message received from timeLock to L2MessageExecutorProxy.
   * @param target address of the target contract on arbitrum.
   * @param payLoad message calldata that will be executed by l2MessageExecutorProxy.
   * @param maxSubmissionCost same as maxSubmissionCost parameter of inbox.createRetryableTicket
   * @param maxGas same as maxGas parameter of inbox.createRetryableTicket
   * @param gasPriceBid same as gasPriceBid parameter of inbox.createRetryableTicket
   **/
  function relayMessage(
    address target,
    bytes memory payLoad,
    uint256 maxSubmissionCost,
    uint256 maxGas,
    uint256 gasPriceBid
  ) external payable onlyTimeLock returns (uint256) {
    require(maxGas != 1, "maxGas can't be 1");
    require(gasPriceBid != 1, "gasPriceBid can't be 1");
    uint256 ticketID = inbox.createRetryableTicket{value: msg.value}(
      target,
      0,
      maxSubmissionCost,
      msg.sender,
      msg.sender,
      maxGas,
      gasPriceBid,
      payLoad
    );
    emit RetryableTicketCreated(ticketID);
    return ticketID;
  }
}

// Copyright 2021-2022, Offchain Labs, Inc.
// For license information, see https://github.com/nitro/blob/master/LICENSE
// SPDX-License-Identifier: BUSL-1.1

// solhint-disable-next-line compiler-version
pragma solidity >=0.6.9 <0.9.0;

import "./IOwnable.sol";

interface IBridge {
    event MessageDelivered(
        uint256 indexed messageIndex,
        bytes32 indexed beforeInboxAcc,
        address inbox,
        uint8 kind,
        address sender,
        bytes32 messageDataHash,
        uint256 baseFeeL1,
        uint64 timestamp
    );

    event BridgeCallTriggered(
        address indexed outbox,
        address indexed to,
        uint256 value,
        bytes data
    );

    event InboxToggle(address indexed inbox, bool enabled);

    event OutboxToggle(address indexed outbox, bool enabled);

    event SequencerInboxUpdated(address newSequencerInbox);

    function enqueueDelayedMessage(
        uint8 kind,
        address sender,
        bytes32 messageDataHash
    ) external payable returns (uint256);

    function enqueueSequencerMessage(bytes32 dataHash, uint256 afterDelayedMessagesRead)
        external
        returns (
            uint256 seqMessageIndex,
            bytes32 beforeAcc,
            bytes32 delayedAcc,
            bytes32 acc
        );

    function submitBatchSpendingReport(address batchPoster, bytes32 dataHash)
        external
        returns (uint256 msgNum);

    function executeCall(
        address to,
        uint256 value,
        bytes calldata data
    ) external returns (bool success, bytes memory returnData);

    // These are only callable by the admin
    function setDelayedInbox(address inbox, bool enabled) external;

    function setOutbox(address inbox, bool enabled) external;

    function setSequencerInbox(address _sequencerInbox) external;

    // View functions

    function sequencerInbox() external view returns (address);

    function activeOutbox() external view returns (address);

    function allowedDelayedInboxes(address inbox) external view returns (bool);

    function allowedOutboxes(address outbox) external view returns (bool);

    function delayedInboxAccs(uint256 index) external view returns (bytes32);

    function sequencerInboxAccs(uint256 index) external view returns (bytes32);

    function delayedMessageCount() external view returns (uint256);

    function sequencerMessageCount() external view returns (uint256);

    function rollup() external view returns (IOwnable);

    function acceptFundsFromOldBridge() external payable;
}

File 3 of 10 : IDelayedMessageProvider.sol
// Copyright 2021-2022, Offchain Labs, Inc.
// For license information, see https://github.com/nitro/blob/master/LICENSE
// SPDX-License-Identifier: BUSL-1.1

// solhint-disable-next-line compiler-version
pragma solidity >=0.6.9 <0.9.0;

interface IDelayedMessageProvider {
    /// @dev event emitted when a inbox message is added to the Bridge's delayed accumulator
    event InboxMessageDelivered(uint256 indexed messageNum, bytes data);

    /// @dev event emitted when a inbox message is added to the Bridge's delayed accumulator
    /// same as InboxMessageDelivered but the batch data is available in tx.input
    event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum);
}

// Copyright 2021-2022, Offchain Labs, Inc.
// For license information, see https://github.com/nitro/blob/master/LICENSE
// SPDX-License-Identifier: BUSL-1.1

// solhint-disable-next-line compiler-version
pragma solidity >=0.6.9 <0.9.0;

import "./IBridge.sol";
import "./IDelayedMessageProvider.sol";

interface IInbox is IDelayedMessageProvider {
    function sendL2Message(bytes calldata messageData) external returns (uint256);

    function sendUnsignedTransaction(
        uint256 gasLimit,
        uint256 maxFeePerGas,
        uint256 nonce,
        address to,
        uint256 value,
        bytes calldata data
    ) external returns (uint256);

    function sendContractTransaction(
        uint256 gasLimit,
        uint256 maxFeePerGas,
        address to,
        uint256 value,
        bytes calldata data
    ) external returns (uint256);

    function sendL1FundedUnsignedTransaction(
        uint256 gasLimit,
        uint256 maxFeePerGas,
        uint256 nonce,
        address to,
        bytes calldata data
    ) external payable returns (uint256);

    function sendL1FundedContractTransaction(
        uint256 gasLimit,
        uint256 maxFeePerGas,
        address to,
        bytes calldata data
    ) external payable returns (uint256);

    /// @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error
    function createRetryableTicket(
        address to,
        uint256 arbTxCallValue,
        uint256 maxSubmissionCost,
        address submissionRefundAddress,
        address valueRefundAddress,
        uint256 gasLimit,
        uint256 maxFeePerGas,
        bytes calldata data
    ) external payable returns (uint256);

    /// @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error
    function unsafeCreateRetryableTicket(
        address to,
        uint256 arbTxCallValue,
        uint256 maxSubmissionCost,
        address submissionRefundAddress,
        address valueRefundAddress,
        uint256 gasLimit,
        uint256 maxFeePerGas,
        bytes calldata data
    ) external payable returns (uint256);

    function depositEth() external payable returns (uint256);

    /// @notice deprecated in favour of depositEth with no parameters
    function depositEth(uint256 maxSubmissionCost) external payable returns (uint256);

    function bridge() external view returns (IBridge);

    function postUpgradeInit(IBridge _bridge) external;
}

File 5 of 10 : IOwnable.sol
// Copyright 2021-2022, Offchain Labs, Inc.
// For license information, see https://github.com/nitro/blob/master/LICENSE
// SPDX-License-Identifier: BUSL-1.1

// solhint-disable-next-line compiler-version
pragma solidity >=0.4.21 <0.9.0;

interface IOwnable {
    function owner() external view returns (address);
}

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

import "../utils/Context.sol";
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev 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.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 8 of 10 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev 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 make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// SPDX-License-Identifier: Apache-2.0

/*
 * Copyright 2019-2021, Offchain Labs, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

pragma solidity 0.7.5;

library AddressAliasHelper {
  uint160 constant OFFSET = uint160(0x1111000000000000000000000000000000001111);

  /// @notice Utility function that converts the address in the L1 that submitted a tx to
  /// the inbox to the msg.sender viewed in the L2
  /// @param l1Address the address in the L1 that triggered the tx to L2
  /// @return l2Address L2 address as viewed in msg.sender
  function applyL1ToL2Alias(address l1Address)
    internal
    pure
    returns (address l2Address)
  {
    l2Address = address(uint160(l1Address) + OFFSET);
  }

  /// @notice Utility function that converts the msg.sender viewed in the L2 to the
  /// address in the L1 that submitted a tx to the inbox
  /// @param l2Address L2 address as viewed in msg.sender
  /// @return l1Address the address in the L1 that triggered the tx to L2
  function undoL1ToL2Alias(address l2Address)
    internal
    pure
    returns (address l1Address)
  {
    l1Address = address(uint160(l2Address) - OFFSET);
  }
}

// SPDX-License-Identifier: MIT
pragma solidity 0.7.5;

import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";

import {AddressAliasHelper} from "./AddressAliasHelper.sol";

/**
 * @dev This contract executes messages received from layer1 governance on arbitrum.
 * This meant to be an upgradeable contract and it should only be used with TransparentUpgradeableProxy.
 */
contract L2MessageExecutor is ReentrancyGuard {
  /// @notice Address of the L1MessageRelayer contract on mainnet.
  address public l1MessageRelayer;

  /// @dev flag to make sure that the initialize function is only called once
  bool private isInitialized = false;

  constructor() {
		// Disable initialization for external users.
		// Only proxies should be able to initialize this contract.
    isInitialized = true;
  }

  function initialize(address _l1MessageRelayer) external {
    require(!isInitialized, "Contract is already initialized!");
    isInitialized = true;
    require(
      _l1MessageRelayer != address(0),
      "_l1MessageRelayer can't be the zero address"
    );
    l1MessageRelayer = _l1MessageRelayer;
  }

  /**
   * @notice executes message received from L1.
   * @param payLoad message received from L1 that needs to be executed.
   **/
  function executeMessage(bytes calldata payLoad) external nonReentrant {
    // To check that message came from L1, we check that the sender is the L1 contract's L2 alias.
    require(
      msg.sender == AddressAliasHelper.applyL1ToL2Alias(l1MessageRelayer),
      "L2MessageExecutor::executeMessage: Unauthorized message sender"
    );

    (address target, bytes memory callData) = abi.decode(
      payLoad,
      (address, bytes)
    );
    require(target != address(0), "target can't be the zero address");
    (bool success, ) = target.call(callData);
    require(
      success,
      "L2MessageExecutor::executeMessage: Message execution reverted."
    );
  }
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_timeLock","type":"address"},{"internalType":"address","name":"_inbox","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ticketId","type":"uint256"}],"name":"RetryableTicketCreated","type":"event"},{"inputs":[],"name":"inbox","outputs":[{"internalType":"contract IInbox","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"payLoad","type":"bytes"},{"internalType":"uint256","name":"maxSubmissionCost","type":"uint256"},{"internalType":"uint256","name":"maxGas","type":"uint256"},{"internalType":"uint256","name":"gasPriceBid","type":"uint256"}],"name":"relayMessage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timeLock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5060405161084a38038061084a8339818101604052604081101561003357600080fd5b5080516020909101516000610046610177565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0382166100eb576040805162461bcd60e51b815260206004820181905260248201527f5f74696d654c6f636b2063616e277420746865207a65726f2061646472657373604482015290519081900360640190fd5b6001600160a01b038116610146576040805162461bcd60e51b815260206004820152601d60248201527f5f696e626f782063616e277420746865207a65726f2061646472657373000000604482015290519081900360640190fd5b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905561017b565b3390565b6106c08061018a6000396000f3fe6080604052600436106100555760003560e01c8063715018a61461005a5780638cefc434146100715780638da5cb5b14610144578063d085835a14610175578063f2fde38b1461018a578063fb0e722b146101bd575b600080fd5b34801561006657600080fd5b5061006f6101d2565b005b610132600480360360a081101561008757600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100b257600080fd5b8201836020820111156100c457600080fd5b803590602001918460018302840111640100000000831117156100e657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060208101359060400135610287565b60408051918252519081900360200190f35b34801561015057600080fd5b506101596104e4565b604080516001600160a01b039092168252519081900360200190f35b34801561018157600080fd5b506101596104f3565b34801561019657600080fd5b5061006f600480360360208110156101ad57600080fd5b50356001600160a01b0316610502565b3480156101c957600080fd5b50610159610616565b6101da610625565b6001600160a01b03166101eb6104e4565b6001600160a01b031614610246576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040805162461bcd60e51b8152602060048201526011602482015270199d5b98dd1a5bdb88191a5cd8589b1959607a1b604482015290519081900360640190fd5b6001546000906001600160a01b031633146102d35760405162461bcd60e51b815260040180806020018281038252603b815260200180610650603b913960400191505060405180910390fd5b826001141561031d576040805162461bcd60e51b81526020600482015260116024820152706d61784761732063616e2774206265203160781b604482015290519081900360640190fd5b816001141561036c576040805162461bcd60e51b815260206004820152601660248201527567617350726963654269642063616e2774206265203160501b604482015290519081900360640190fd5b6000600260009054906101000a90046001600160a01b03166001600160a01b031663679b6ded348960008933338b8b8f6040518a63ffffffff1660e01b815260040180896001600160a01b03168152602001888152602001878152602001866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561042d578181015183820152602001610415565b50505050905090810190601f16801561045a5780820380516001836020036101000a031916815260200191505b5099505050505050505050506020604051808303818588803b15801561047f57600080fd5b505af1158015610493573d6000803e3d6000fd5b50505050506040513d60208110156104aa57600080fd5b505160405190915081907fde92b5b7839f4a2c640f5e3bbb66d415458dadc57a487b0c7fa562ed7c9c896f90600090a29695505050505050565b6000546001600160a01b031690565b6001546001600160a01b031681565b61050a610625565b6001600160a01b031661051b6104e4565b6001600160a01b031614610576576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166105bb5760405162461bcd60e51b815260040180806020018281038252602681526020018061062a6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c314d65737361676552656c617965723a3a6f6e6c7954696d654c6f636b3a20556e617574686f72697a6564206d6573736167652073656e646572a26469706673582212201989498ce37004791ee0f22b6f058e8ca3401d549c5f00a2204bff524d89301364736f6c63430007050033000000000000000000000000a54074b2cc0e96a43048d4a68472f7f046ac0da80000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f

Deployed Bytecode

0x6080604052600436106100555760003560e01c8063715018a61461005a5780638cefc434146100715780638da5cb5b14610144578063d085835a14610175578063f2fde38b1461018a578063fb0e722b146101bd575b600080fd5b34801561006657600080fd5b5061006f6101d2565b005b610132600480360360a081101561008757600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100b257600080fd5b8201836020820111156100c457600080fd5b803590602001918460018302840111640100000000831117156100e657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060208101359060400135610287565b60408051918252519081900360200190f35b34801561015057600080fd5b506101596104e4565b604080516001600160a01b039092168252519081900360200190f35b34801561018157600080fd5b506101596104f3565b34801561019657600080fd5b5061006f600480360360208110156101ad57600080fd5b50356001600160a01b0316610502565b3480156101c957600080fd5b50610159610616565b6101da610625565b6001600160a01b03166101eb6104e4565b6001600160a01b031614610246576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040805162461bcd60e51b8152602060048201526011602482015270199d5b98dd1a5bdb88191a5cd8589b1959607a1b604482015290519081900360640190fd5b6001546000906001600160a01b031633146102d35760405162461bcd60e51b815260040180806020018281038252603b815260200180610650603b913960400191505060405180910390fd5b826001141561031d576040805162461bcd60e51b81526020600482015260116024820152706d61784761732063616e2774206265203160781b604482015290519081900360640190fd5b816001141561036c576040805162461bcd60e51b815260206004820152601660248201527567617350726963654269642063616e2774206265203160501b604482015290519081900360640190fd5b6000600260009054906101000a90046001600160a01b03166001600160a01b031663679b6ded348960008933338b8b8f6040518a63ffffffff1660e01b815260040180896001600160a01b03168152602001888152602001878152602001866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561042d578181015183820152602001610415565b50505050905090810190601f16801561045a5780820380516001836020036101000a031916815260200191505b5099505050505050505050506020604051808303818588803b15801561047f57600080fd5b505af1158015610493573d6000803e3d6000fd5b50505050506040513d60208110156104aa57600080fd5b505160405190915081907fde92b5b7839f4a2c640f5e3bbb66d415458dadc57a487b0c7fa562ed7c9c896f90600090a29695505050505050565b6000546001600160a01b031690565b6001546001600160a01b031681565b61050a610625565b6001600160a01b031661051b6104e4565b6001600160a01b031614610576576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166105bb5760405162461bcd60e51b815260040180806020018281038252602681526020018061062a6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031681565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734c314d65737361676552656c617965723a3a6f6e6c7954696d654c6f636b3a20556e617574686f72697a6564206d6573736167652073656e646572a26469706673582212201989498ce37004791ee0f22b6f058e8ca3401d549c5f00a2204bff524d89301364736f6c63430007050033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000a54074b2cc0e96a43048d4a68472f7f046ac0da80000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f

-----Decoded View---------------
Arg [0] : _timeLock (address): 0xa54074b2cc0e96a43048d4a68472F7F046aC0DA8
Arg [1] : _inbox (address): 0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a54074b2cc0e96a43048d4a68472f7f046ac0da8
Arg [1] : 0000000000000000000000004dbd4fc535ac27206064b68ffcf827b0a60bab3f


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.