Contract 0x6D2457a4ad276000A615295f7A80F79E48CcD318

 

Contract Overview

Livepeer: L2 LPT Gateway
Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x7c560b4ba3a27ba25652a3c8313df89521eb7cfb2b10743cac4c9bfc9b7fb9a7Finalize Inbound...760136002023-04-01 18:05:262 hrs 6 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000006080.1
0x9e8bfdb14509ee7ae3bc082e3307b4fc42ec724e767dc2999c0cebc04f441041Finalize Inbound...760091132023-04-01 17:46:112 hrs 25 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0x36948fad3a2b500a432f82e070f1468bf461e2b7dcdd681c1fce9e08d22e20dfFinalize Inbound...759970062023-04-01 16:54:553 hrs 17 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0x5b8bbfea40da2dfef0a28178013af53de83f48b07f96539823fc642d33ed625bFinalize Inbound...759863202023-04-01 16:10:094 hrs 1 min ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000006080.1
0x59889733671cc9ea4ab245ca278b8631a266a7d566c4080b75d57626908b6db8Finalize Inbound...759832752023-04-01 15:57:244 hrs 14 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0x6caf856bc7b0d22e9ff12d25874b49cbcc82a3927266b1cd897dc770ba9ba25fFinalize Inbound...759770402023-04-01 15:31:384 hrs 40 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0xfbb9ec9518da114f480afa11ae3b01141727642d0e186bf6896f2d580cc13930Finalize Inbound...759586742023-04-01 14:14:525 hrs 57 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0x9afcf2d3843a068a9d78f826c7a700ee9a79f84ba7c5242ff42f5a4569b35af1Finalize Inbound...759510372023-04-01 13:42:526 hrs 29 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000006080.1
0x20e3f245d9cd5d81e8cea2f673acacc2c31e340d253b39897db8706489517cfaFinalize Inbound...759433792023-04-01 13:10:517 hrs 1 min ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000006080.1
0xd7eba984ba2bc2515aad8767b48758b5f9c80cf012a9964aed8424c8ad7257ddFinalize Inbound...759310842023-04-01 12:19:507 hrs 52 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0x74ef3028c82d2c7ac549976fd3c1d8305b9c2fc55876aca0b6aaff0e92edbc1aFinalize Inbound...759110382023-04-01 10:56:349 hrs 15 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0xcbdac0ddca8195844f9bae2c078a34e4b78f48989addb27841b3efe8f934cb8cFinalize Inbound...758910562023-04-01 9:33:1710 hrs 38 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0x144a857aa6ddd5464e9c3589cfc776e24d855a1adca10eb9c99f928902834586Finalize Inbound...758693992023-04-01 8:03:4612 hrs 8 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0x405ec2b2daba39b97bfc9fd91b799d0cae7df2dcd3a8af9bac3b19a3d08b58e4Finalize Inbound...758678492023-04-01 7:57:1612 hrs 14 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0xcf3d11691fc9fee5def89e0ca7993032d80081a443671b5645cf74d68cd831b2Finalize Inbound...758433882023-04-01 6:14:5913 hrs 57 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0xe17f956c7a2e6fd7a979a6ab360a5436df8387933e675c84a8b16840394c7400Finalize Inbound...758297032023-04-01 5:17:2914 hrs 54 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0x4a7fc93e5012fb230fe0cfe58c886411fc127dda3af60b88e4e0490f7393d19bFinalize Inbound...758175492023-04-01 4:26:1315 hrs 45 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000006080.1
0xbb4e27db55fc8cdb112896f78925c23fbd0b747d85a8ce53116d1b5e52140c0dFinalize Inbound...758160302023-04-01 4:19:4315 hrs 52 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0xb81729a9fd6c445f33fb2ed72eb910d72edb1943b6522f51d7cc8e57c3f68604Finalize Inbound...758101152023-04-01 3:54:1216 hrs 17 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000006080.1
0xb20245cbae0ce324ba655027937d01c0b4309f6fe7715fbe1e14a4092dc66017Finalize Inbound...758101112023-04-01 3:54:1216 hrs 17 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0xe0b64d16419ecfa5fc5844151b6d12e19a45fb44f84207f2b191db5770fccf56Finalize Inbound...758056942023-04-01 3:34:5716 hrs 37 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0x053acf7415132955338c7f3754c60ce888bf38ef569b7b827b29c8383f2e7cfdFinalize Inbound...757894392023-04-01 2:24:2617 hrs 47 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
0x77ed191dc89594a14a6531fb1ea8d2f1260558d51db065e35539c0946fa2a1c9Finalize Inbound...757820412023-04-01 1:52:4018 hrs 19 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000006080.1
0xd5fb30db413025acf69da32d945b38dcf26cbb9ee9c495145648da3da4ecc852Finalize Inbound...757820392023-04-01 1:52:4018 hrs 19 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000006080.1
0xf585628c0068634b1507b22fdd3e86320452fcccb1d960c98928a69f8e1250a9Finalize Inbound...757761502023-04-01 1:26:5518 hrs 45 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  Livepeer: L2 LPT Gateway0 ETH0.000007790.1
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x5dbdce877ee348801f4afbcbae2d22663251599a3c66d36cb5606c068f4c2ea6720787262023-03-21 9:46:0411 days 10 hrs ago Livepeer: L2 LPT Gateway Livepeer: L2 LPT Data Cache0 ETH
0x5dbdce877ee348801f4afbcbae2d22663251599a3c66d36cb5606c068f4c2ea6720787262023-03-21 9:46:0411 days 10 hrs ago Livepeer: L2 LPT Gateway Livepeer: LPT Token0 ETH
0x2737f17a960bc58f3bcf61a9ce051a5572272ddf508b1a1a2a731be04a971421720490772023-03-21 7:44:3211 days 12 hrs ago Livepeer: L2 LPT Gateway Livepeer: L2 LPT Data Cache0 ETH
0x2737f17a960bc58f3bcf61a9ce051a5572272ddf508b1a1a2a731be04a971421720490772023-03-21 7:44:3211 days 12 hrs ago Livepeer: L2 LPT Gateway Livepeer: LPT Token0 ETH
0x029219f97857b812e8042a462a24448ef4078cfc9a2ad97919e79cd507173716720335002023-03-21 6:40:3111 days 13 hrs ago Livepeer: L2 LPT Gateway Livepeer: L2 LPT Data Cache0 ETH
0x029219f97857b812e8042a462a24448ef4078cfc9a2ad97919e79cd507173716720335002023-03-21 6:40:3111 days 13 hrs ago Livepeer: L2 LPT Gateway Livepeer: LPT Token0 ETH
0x2b0f3fbf24115f59f6173771d6ec7b45d5ccc01b860b18798c572b88570fcfc6720117512023-03-21 5:11:0011 days 15 hrs ago Livepeer: L2 LPT Gateway Livepeer: L2 LPT Data Cache0 ETH
0x2b0f3fbf24115f59f6173771d6ec7b45d5ccc01b860b18798c572b88570fcfc6720117512023-03-21 5:11:0011 days 15 hrs ago Livepeer: L2 LPT Gateway Livepeer: LPT Token0 ETH
0x3166d7186b03e9156154e7cf11fb5d4665ba01dec01b2d8f96b8b70d54256b62719670252023-03-21 2:05:2711 days 18 hrs ago Livepeer: L2 LPT Gateway Livepeer: L2 LPT Data Cache0 ETH
0x3166d7186b03e9156154e7cf11fb5d4665ba01dec01b2d8f96b8b70d54256b62719670252023-03-21 2:05:2711 days 18 hrs ago Livepeer: L2 LPT Gateway Livepeer: LPT Token0 ETH
0xe77842f0c955e2599cf1461c71176ca2e205d5249fd722936b37aface38d93bf719384232023-03-21 0:03:4011 days 20 hrs ago Livepeer: L2 LPT Gateway Livepeer: L2 LPT Data Cache0 ETH
0xe77842f0c955e2599cf1461c71176ca2e205d5249fd722936b37aface38d93bf719384232023-03-21 0:03:4011 days 20 hrs ago Livepeer: L2 LPT Gateway Livepeer: LPT Token0 ETH
0x34419620ac1e1a32480eb68d25b0e2552d34709589ea62e4ccde2a23fcca5d32719338892023-03-20 23:44:2511 days 20 hrs ago Livepeer: L2 LPT Gateway Livepeer: L2 LPT Data Cache0 ETH
0x34419620ac1e1a32480eb68d25b0e2552d34709589ea62e4ccde2a23fcca5d32719338892023-03-20 23:44:2511 days 20 hrs ago Livepeer: L2 LPT Gateway Livepeer: LPT Token0 ETH
0x978f7a97187f6b6a6ba91e33f3be4b694a37f86d5288a66c1cbb9e6600552816717216702023-03-20 9:01:3412 days 11 hrs ago Livepeer: L2 LPT Gateway Arbitrum: ArbSys0 ETH
0x978f7a97187f6b6a6ba91e33f3be4b694a37f86d5288a66c1cbb9e6600552816717216702023-03-20 9:01:3412 days 11 hrs ago Livepeer: L2 LPT Gateway Livepeer: L2 LPT Data Cache0 ETH
0x978f7a97187f6b6a6ba91e33f3be4b694a37f86d5288a66c1cbb9e6600552816717216702023-03-20 9:01:3412 days 11 hrs ago Livepeer: L2 LPT Gateway Livepeer: LPT Token0 ETH
0x978f7a97187f6b6a6ba91e33f3be4b694a37f86d5288a66c1cbb9e6600552816717216702023-03-20 9:01:3412 days 11 hrs ago Arbitrum One: L2 Gateway Router Livepeer: L2 LPT Gateway0 ETH
0x01bf52fd6c586c45b74ae1a68b46ee9beb3f90dcbac25bc5e3751d48debef8d7715212982023-03-19 18:56:2813 days 1 hr ago Livepeer: L2 LPT Gateway Livepeer: L2 LPT Data Cache0 ETH
0x01bf52fd6c586c45b74ae1a68b46ee9beb3f90dcbac25bc5e3751d48debef8d7715212982023-03-19 18:56:2813 days 1 hr ago Livepeer: L2 LPT Gateway Livepeer: LPT Token0 ETH
0xf90b55c878760839d8f9e4553c210cf8067f9e151a56f409dff1c1a0656dd0e3713579992023-03-19 7:38:1913 days 12 hrs ago Livepeer: L2 LPT Gateway Arbitrum: ArbSys0 ETH
0xf90b55c878760839d8f9e4553c210cf8067f9e151a56f409dff1c1a0656dd0e3713579992023-03-19 7:38:1913 days 12 hrs ago Livepeer: L2 LPT Gateway Livepeer: L2 LPT Data Cache0 ETH
0xf90b55c878760839d8f9e4553c210cf8067f9e151a56f409dff1c1a0656dd0e3713579992023-03-19 7:38:1913 days 12 hrs ago Livepeer: L2 LPT Gateway Livepeer: LPT Token0 ETH
0xf90b55c878760839d8f9e4553c210cf8067f9e151a56f409dff1c1a0656dd0e3713579992023-03-19 7:38:1913 days 12 hrs ago Arbitrum One: L2 Gateway Router Livepeer: L2 LPT Gateway0 ETH
0x396d054caa27bed2f75bab6f0150d4874976e0da01b0a2715a119a5be5c7d74e713035622023-03-19 3:47:4513 days 16 hrs ago Livepeer: L2 LPT Gateway Livepeer: L2 LPT Data Cache0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
L2LPTGateway

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 13 : AccessControl.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/AccessControl.sol)

pragma solidity ^0.8.0;

import "./IAccessControl.sol";
import "../utils/Context.sol";
import "../utils/Strings.sol";
import "../utils/introspection/ERC165.sol";

/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     *
     * NOTE: This function is deprecated in favor of {_grantRole}.
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * Internal function without access restriction.
     */
    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * Internal function without access restriction.
     */
    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

File 2 of 13 : IAccessControl.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)

pragma solidity ^0.8.0;

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}

File 3 of 13 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 4 of 13 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^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 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) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 5 of 13 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 6 of 13 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 7 of 13 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 8 of 13 : ControlledGateway.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol";
import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";

/**
 * @title ControlledGateway
 * @notice Base Contract for both L1 and L2 LPT gateways. Provides AccessControl.
 * Gateways can be paused by the admin to stop outgoing token migrations
 */
contract ControlledGateway is AccessControl, Pausable {
    address public immutable l1Lpt;
    address public immutable l2Lpt;

    constructor(address _l1Lpt, address _l2Lpt) {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);

        l1Lpt = _l1Lpt;
        l2Lpt = _l2Lpt;
    }

    function pause() external onlyRole(DEFAULT_ADMIN_ROLE) {
        _pause();
    }

    function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) {
        _unpause();
    }
}

File 9 of 13 : IL1LPTGateway.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

interface IL1LPTGateway {
    event DepositInitiated(
        address _l1Token,
        address indexed _from,
        address indexed _to,
        uint256 indexed _sequenceNumber,
        uint256 _amount
    );

    event WithdrawalFinalized(
        address _l1Token,
        address indexed _from,
        address indexed _to,
        uint256 indexed _exitNum,
        uint256 _amount
    );

    function outboundTransfer(
        address _l1Token,
        address _to,
        uint256 _amount,
        uint256 _maxGas,
        uint256 _gasPriceBid,
        bytes calldata _data
    ) external payable returns (bytes memory);

    function finalizeInboundTransfer(
        address _token,
        address _from,
        address _to,
        uint256 _amount,
        bytes calldata _data
    ) external;

    // if token is not supported this should return 0x0 address
    function calculateL2TokenAddress(address l1Token)
        external
        view
        returns (address);

    // used by router
    function counterpartGateway() external view returns (address);
}

File 10 of 13 : IL2LPTGateway.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

interface IL2LPTGateway {
    event DepositFinalized(
        address indexed _l1Token,
        address indexed _from,
        address indexed _to,
        uint256 _amount
    );

    event WithdrawalInitiated(
        address _l1Token,
        address indexed _from,
        address indexed _to,
        uint256 indexed _l2ToL1Id,
        uint256 _exitNum,
        uint256 _amount
    );

    function outboundTransfer(
        address _token,
        address _to,
        uint256 _amount,
        bytes calldata _data
    ) external returns (bytes memory);

    function finalizeInboundTransfer(
        address _token,
        address _from,
        address _to,
        uint256 _amount,
        bytes calldata _data
    ) external;

    // if token is not supported this should return 0x0 address
    function calculateL2TokenAddress(address _l1Token)
        external
        view
        returns (address);

    // used by router
    function counterpartGateway() external view returns (address);
}

File 11 of 13 : L2ArbitrumMessenger.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import {IArbSys} from "../../arbitrum/IArbSys.sol";

abstract contract L2ArbitrumMessenger {
    event TxToL1(
        address indexed _from,
        address indexed _to,
        uint256 indexed _id,
        bytes _data
    );

    function sendTxToL1(
        address user,
        address to,
        bytes memory data
    ) internal returns (uint256) {
        // note: this method doesn't support sending ether to L1 together with a call
        uint256 id = IArbSys(address(100)).sendTxToL1(to, data);
        emit TxToL1(user, to, id, data);
        return id;
    }

    modifier onlyL1Counterpart(address l1Counterpart) {
        require(
            msg.sender == applyL1ToL2Alias(l1Counterpart),
            "ONLY_COUNTERPART_GATEWAY"
        );
        _;
    }

    uint160 internal constant OFFSET =
        uint160(0x1111000000000000000000000000000000001111);

    // l1 addresses are transformed durng l1->l2 calls
    function applyL1ToL2Alias(address l1Address)
        internal
        pure
        returns (address l2Address)
    {
        l2Address = address(uint160(l1Address) + OFFSET);
    }
}

File 12 of 13 : L2LPTGateway.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import {ControlledGateway} from "../../ControlledGateway.sol";
import {L2ArbitrumMessenger} from "./L2ArbitrumMessenger.sol";
import {IL2LPTGateway} from "./IL2LPTGateway.sol";
import {IL1LPTGateway} from "../../L1/gateway/IL1LPTGateway.sol";

interface Mintable {
    function mint(address _to, uint256 _amount) external;

    function burnFrom(address _from, uint256 _amount) external;
}

interface IL2LPTDataCache {
    function increaseL2SupplyFromL1(uint256 _amount) external;

    function decreaseL2SupplyFromL1(uint256 _amount) external;
}

/**
 * @title L2LPTGateway
 * @notice Manages inbound and outbound transfers of LPT between Arbitrum Rollup and L1
 * @dev the contract can be paused by the governor which will prevent any outbound transfers
 * but pausing the contract does not affect inbound transfers (tokens coming from L1)
 */
contract L2LPTGateway is IL2LPTGateway, ControlledGateway, L2ArbitrumMessenger {
    address public immutable l2Router;
    address public immutable l2LPTDataCache;

    address public l1Counterpart;

    event L1CounterpartUpdate(address _l1Counterpart);

    constructor(
        address _l2Router,
        address _l1Lpt,
        address _l2Lpt,
        address _l2LPTDataCache
    ) ControlledGateway(_l1Lpt, _l2Lpt) {
        l2Router = _l2Router;
        l2LPTDataCache = _l2LPTDataCache;

        _pause();
    }

    /**
     * @notice Sets address of companion L1LPTGateway
     * @dev Only address with the governor role is allowed to change the value of l1Counterpart
     * @param _l1Counterpart L1 Address of the counterpart
     */
    function setCounterpart(address _l1Counterpart)
        external
        onlyRole(DEFAULT_ADMIN_ROLE)
    {
        l1Counterpart = _l1Counterpart;
        emit L1CounterpartUpdate(_l1Counterpart);
    }

    /**
     * @notice Burns L2 tokens and sends a message to L1
     * The tokens will be received on L1 only after the wait period (7 days) is over
     * @dev no additional callhook data is allowed
     * @param _l1Token L1 Address of LPT
     * @param _to Recipient address on L1
     * @param _amount Amount of tokens to burn
     * @param _data Contains sender and additional data to send to L1
     * @return ID of the withdraw tx
     */
    function outboundTransfer(
        address _l1Token,
        address _to,
        uint256 _amount,
        bytes calldata _data
    ) external override returns (bytes memory) {
        return outboundTransfer(_l1Token, _to, _amount, 0, 0, _data);
    }

    /**
     * @notice Burns L2 tokens and sends a message to L1
     * The tokens will be received on L1 only after the wait period (7 days) is over
     * @dev no additional callhook data is allowed
     * @param _l1Token L1 Address of LPT
     * @param _to Recipient address on L1
     * @param _amount Amount of tokens to burn
     * @param _data Contains sender and additional data (always zero) to send to L1
     * @return ID of the withdraw tx
     */
    function outboundTransfer(
        address _l1Token,
        address _to,
        uint256 _amount,
        uint256, // maxGas
        uint256, // gasPriceBid
        bytes calldata _data
    ) public whenNotPaused returns (bytes memory) {
        require(_l1Token == l1Lpt, "TOKEN_NOT_LPT");
        require(_amount > 0, "INVALID_ZERO_AMOUNT");

        (address from, bytes memory extraData) = parseOutboundData(_data);
        require(extraData.length == 0, "CALL_HOOK_DATA_NOT_ALLOWED");

        // from needs to approve this contract to burn the amount first
        Mintable(l2Lpt).burnFrom(from, _amount);
        IL2LPTDataCache(l2LPTDataCache).decreaseL2SupplyFromL1(_amount);

        uint256 id = sendTxToL1(
            from,
            l1Counterpart,
            getOutboundCalldata(_l1Token, from, _to, _amount, extraData)
        );

        // we don't need to track exitNums (b/c we have no fast exits) so we always use 0
        emit WithdrawalInitiated(_l1Token, from, _to, id, 0, _amount);

        return abi.encode(id);
    }

    /**
     * @notice Receives token amount from L1 and mints the equivalent tokens to the receiving address
     * @dev can only accept txs coming directly from L1 LPT Gateway
     * data param is unused because no additional data is allowed from L1
     * @param _l1Token L1 Address of LPT
     * @param _from Address of the sender on L1
     * @param _to Recepient address on L2
     * @param _amount Amount of tokens transferred
     */
    function finalizeInboundTransfer(
        address _l1Token,
        address _from,
        address _to,
        uint256 _amount,
        bytes calldata // data -- unused
    ) external override onlyL1Counterpart(l1Counterpart) {
        require(_l1Token == l1Lpt, "TOKEN_NOT_LPT");

        Mintable(l2Lpt).mint(_to, _amount);
        IL2LPTDataCache(l2LPTDataCache).increaseL2SupplyFromL1(_amount);

        emit DepositFinalized(_l1Token, _from, _to, _amount);
    }

    /**
     * @notice Decodes calldata required for migration of tokens
     * @dev extraData can be left empty
     * @param data Encoded callhook data
     * @return from Sender of the tx
     * @return extraData Any other data sent to L1
     */
    function parseOutboundData(bytes memory data)
        private
        view
        returns (address from, bytes memory extraData)
    {
        if (msg.sender == l2Router) {
            (from, extraData) = abi.decode(data, (address, bytes));
        } else {
            from = msg.sender;
            extraData = data;
        }
    }

    /**
     * @notice returns address of L1 LPT Gateway
     */
    function counterpartGateway() external view override returns (address) {
        return l1Counterpart;
    }

    /**
     * @notice returns address of L2 version of LPT
     */
    function calculateL2TokenAddress(address l1Token)
        external
        view
        override
        returns (address)
    {
        if (l1Token != l1Lpt) {
            return address(0);
        }

        return l2Lpt;
    }

    /**
     * @notice Creates calldata required to send tx to L1
     * @dev encodes the target function with its params which
     * will be called on L1 when the message is received on L1
     */
    function getOutboundCalldata(
        address token,
        address from,
        address to,
        uint256 amount,
        bytes memory data
    ) public pure returns (bytes memory outboundCalldata) {
        outboundCalldata = abi.encodeWithSelector(
            IL1LPTGateway.finalizeInboundTransfer.selector,
            token,
            from,
            to,
            amount,
            abi.encode(0, data) // we don't need to track exitNums (b/c we have no fast exits) so we always use 0
        );
    }
}

File 13 of 13 : IArbSys.sol
// SPDX-License-Identifier: Apache-2.0

/*
 * Copyright 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.8.9;

/**
 * @title Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064. Exposes a variety of system-level functionality.
 */
interface IArbSys {
    /**
     * @notice Get internal version number identifying an ArbOS build
     * @return version number as int
     */
    function arbOSVersion() external pure returns (uint256);

    function arbChainID() external view returns (uint256);

    /**
     * @notice Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0)
     * @return block number as int
     */
    function arbBlockNumber() external view returns (uint256);

    /**
     * @notice Send given amount of Eth to dest from sender.
     * This is a convenience function, which is equivalent to calling sendTxToL1 with empty calldataForL1.
     * @param destination recipient address on L1
     * @return unique identifier for this L2-to-L1 transaction.
     */
    function withdrawEth(address destination)
        external
        payable
        returns (uint256);

    /**
     * @notice Send a transaction to L1
     * @param destination recipient address on L1
     * @param calldataForL1 (optional) calldata for L1 contract call
     * @return a unique identifier for this L2-to-L1 transaction.
     */
    function sendTxToL1(address destination, bytes calldata calldataForL1)
        external
        payable
        returns (uint256);

    /**
     * @notice get the number of transactions issued by the given external account or the account sequence number of the given contract
     * @param account target account
     * @return the number of transactions issued by the given external account or the account sequence number of the given contract
     */
    function getTransactionCount(address account)
        external
        view
        returns (uint256);

    /**
     * @notice get the value of target L2 storage slot
     * This function is only callable from address 0 to prevent contracts from being able to call it
     * @param account target account
     * @param index target index of storage slot
     * @return stotage value for the given account at the given index
     */
    function getStorageAt(address account, uint256 index)
        external
        view
        returns (uint256);

    /**
     * @notice check if current call is coming from l1
     * @return true if the caller of this was called directly from L1
     */
    function isTopLevelCall() external view returns (bool);

    event EthWithdrawal(address indexed destAddr, uint256 amount);

    event L2ToL1Transaction(
        address caller,
        address indexed destination,
        uint256 indexed uniqueId,
        uint256 indexed batchNumber,
        uint256 indexInBatch,
        uint256 arbBlockNum,
        uint256 ethBlockNum,
        uint256 timestamp,
        uint256 callvalue,
        bytes data
    );
}

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_l2Router","type":"address"},{"internalType":"address","name":"_l1Lpt","type":"address"},{"internalType":"address","name":"_l2Lpt","type":"address"},{"internalType":"address","name":"_l2LPTDataCache","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_l1Token","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"DepositFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_l1Counterpart","type":"address"}],"name":"L1CounterpartUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"}],"name":"TxToL1","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_l1Token","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_l2ToL1Id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_exitNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"WithdrawalInitiated","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"l1Token","type":"address"}],"name":"calculateL2TokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"counterpartGateway","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"finalizeInboundTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"getOutboundCalldata","outputs":[{"internalType":"bytes","name":"outboundCalldata","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l1Counterpart","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l1Lpt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2LPTDataCache","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2Lpt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"outboundTransfer","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_l1Token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"outboundTransfer","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_l1Counterpart","type":"address"}],"name":"setCounterpart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6101006040523480156200001257600080fd5b5060405162002e2138038062002e218339818101604052810190620000389190620003f1565b82826000600160006101000a81548160ff0219169083151502179055506200006a6000801b336200015660201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505050508373ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250506200014c6200024760201b60201c565b5050505062000514565b620001688282620002fe60201b60201c565b6200024357600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001e86200036860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b620002576200037060201b60201c565b156200029a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200029190620004c4565b60405180910390fd5b60018060006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620002e56200036860201b60201c565b604051620002f49190620004f7565b60405180910390a1565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b6000600160009054906101000a900460ff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003b9826200038c565b9050919050565b620003cb81620003ac565b8114620003d757600080fd5b50565b600081519050620003eb81620003c0565b92915050565b600080600080608085870312156200040e576200040d62000387565b5b60006200041e87828801620003da565b94505060206200043187828801620003da565b93505060406200044487828801620003da565b92505060606200045787828801620003da565b91505092959194509250565b600082825260208201905092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000620004ac60108362000463565b9150620004b98262000474565b602082019050919050565b60006020820190508181036000830152620004df816200049d565b9050919050565b620004f181620003ac565b82525050565b60006020820190506200050e6000830184620004e6565b92915050565b60805160a05160c05160e0516128946200058d600039600081816106c001528181610dd10152610f5b01526000818161089c01526113c001526000818161063301528181610a0e01528181610b440152610d440152600081816104a3015281816105a501528181610ae80152610bdb01526128946000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80637b3a3c8b116100b8578063a217fddf1161007c578063a217fddf14610351578063a7e28d481461036f578063c4c0087c1461039f578063d2ce7d65146103bd578063d547741f146103ed578063e83d1f171461040957610142565b80637b3a3c8b146102995780638456cb59146102c957806391d14854146102d35780639d79bdb514610303578063a0c76a961461032157610142565b80632f2ff15d1161010a5780632f2ff15d146101ff57806336568abe1461021b5780633f4ba83a146102375780634adc698a146102415780635c975abb1461025f57806377061e4d1461027d57610142565b806301ffc9a7146101475780630725667714610177578063248a9ca3146101955780632db09c1c146101c55780632e567b36146101e3575b600080fd5b610161600480360381019061015c91906117eb565b610427565b60405161016e9190611833565b60405180910390f35b61017f6104a1565b60405161018c919061188f565b60405180910390f35b6101af60048036038101906101aa91906118e0565b6104c5565b6040516101bc919061191c565b60405180910390f35b6101cd6104e4565b6040516101da919061188f565b60405180910390f35b6101fd60048036038101906101f891906119fe565b61050c565b005b61021960048036038101906102149190611a98565b6107ce565b005b61023560048036038101906102309190611a98565b6107f7565b005b61023f61087a565b005b61024961089a565b604051610256919061188f565b60405180910390f35b6102676108be565b6040516102749190611833565b60405180910390f35b61029760048036038101906102929190611ad8565b6108d5565b005b6102b360048036038101906102ae9190611b05565b610965565b6040516102c09190611c26565b60405180910390f35b6102d1610982565b005b6102ed60048036038101906102e89190611a98565b6109a2565b6040516102fa9190611833565b60405180910390f35b61030b610a0c565b604051610318919061188f565b60405180910390f35b61033b60048036038101906103369190611d78565b610a30565b6040516103489190611c26565b60405180910390f35b610359610add565b604051610366919061191c565b60405180910390f35b61038960048036038101906103849190611ad8565b610ae4565b604051610396919061188f565b60405180910390f35b6103a7610b6b565b6040516103b4919061188f565b60405180910390f35b6103d760048036038101906103d29190611e0f565b610b8f565b6040516103e49190611c26565b60405180910390f35b61040760048036038101906104029190611a98565b610f30565b005b610411610f59565b60405161041e919061188f565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061049a575061049982610f7d565b5b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000838152602001908152602001600020600101549050919050565b600060018054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661053681610fe7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059a90611f1b565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614610631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062890611f87565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340c10f1986866040518363ffffffff1660e01b815260040161068c929190611fb6565b600060405180830381600087803b1580156106a657600080fd5b505af11580156106ba573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e879a2aa856040518263ffffffff1660e01b81526004016107179190611fdf565b600060405180830381600087803b15801561073157600080fd5b505af1158015610745573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fc7f2e9c55c40a50fbc217dfc70cd39a222940dfa62145aa0ca49eb9535d4fcb2876040516107bd9190611fdf565b60405180910390a450505050505050565b6107d7826104c5565b6107e8816107e3611010565b611018565b6107f283836110b5565b505050565b6107ff611010565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461086c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108639061206c565b60405180910390fd5b6108768282611195565b5050565b6000801b61088f8161088a611010565b611018565b610897611276565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600160009054906101000a900460ff16905090565b6000801b6108ea816108e5611010565b611018565b816001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5a52572093ca222af40094844bd0260288e45ec83b5074852fe811e99b1474d582604051610959919061188f565b60405180910390a15050565b60606109778686866000808888610b8f565b905095945050505050565b6000801b61099781610992611010565b611018565b61099f611318565b50565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060632e567b3660e01b86868686600087604051602001610a529291906120de565b604051602081830303815290604052604051602401610a7595949392919061210e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905095945050505050565b6000801b81565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610b425760009050610b66565b7f000000000000000000000000000000000000000000000000000000000000000090505b919050565b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060610b996108be565b15610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd0906121b4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90611f87565b60405180910390fd5b60008611610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190612220565b60405180910390fd5b600080610cfa85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506113ba565b915091506000815114610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d399061228c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379cc6790838a6040518363ffffffff1660e01b8152600401610d9d929190611fb6565b600060405180830381600087803b158015610db757600080fd5b505af1158015610dcb573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a6402a7f896040518263ffffffff1660e01b8152600401610e289190611fdf565b600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b505050506000610e938360018054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e8e8e878f8f89610a30565b61143f565b9050808a73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3073a74ecb728d10be779fe19a74a1428e20468f5b4d167bf9c73d9067847d738e60008e604051610ef8939291906122dd565b60405180910390a480604051602001610f119190611fdf565b6040516020818303038152906040529350505050979650505050505050565b610f39826104c5565b610f4a81610f45611010565b611018565b610f548383611195565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000731111000000000000000000000000000000001111826110099190612343565b9050919050565b600033905090565b61102282826109a2565b6110b1576110478173ffffffffffffffffffffffffffffffffffffffff166014611543565b6110558360001c6020611543565b60405160200161106692919061246c565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a891906124df565b60405180910390fd5b5050565b6110bf82826109a2565b61119157600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611136611010565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61119f82826109a2565b1561127257600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611217611010565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b61127e6108be565b6112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b49061254d565b60405180910390fd5b6000600160006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611301611010565b60405161130e919061188f565b60405180910390a1565b6113206108be565b15611360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611357906121b4565b60405180910390fd5b60018060006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113a3611010565b6040516113b0919061188f565b60405180910390a1565b600060607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156114335782806020019051810190611426919061261b565b809250819350505061143a565b3391508290505b915091565b600080606473ffffffffffffffffffffffffffffffffffffffff1663928c169a85856040518363ffffffff1660e01b815260040161147e929190612677565b602060405180830381600087803b15801561149857600080fd5b505af11580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d091906126bc565b9050808473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f2b986d32a0536b7e19baa48ab949fec7b903b7fad7730820b20632d100cc3a68866040516115309190611c26565b60405180910390a4809150509392505050565b60606000600283600261155691906126e9565b6115609190612743565b67ffffffffffffffff81111561157957611578611c4d565b5b6040519080825280601f01601f1916602001820160405280156115ab5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106115e3576115e2612799565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061164757611646612799565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261168791906126e9565b6116919190612743565b90505b6001811115611731577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106116d3576116d2612799565b5b1a60f81b8282815181106116ea576116e9612799565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061172a906127c8565b9050611694565b5060008414611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c9061283e565b60405180910390fd5b8091505092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6117c881611793565b81146117d357600080fd5b50565b6000813590506117e5816117bf565b92915050565b60006020828403121561180157611800611789565b5b600061180f848285016117d6565b91505092915050565b60008115159050919050565b61182d81611818565b82525050565b60006020820190506118486000830184611824565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118798261184e565b9050919050565b6118898161186e565b82525050565b60006020820190506118a46000830184611880565b92915050565b6000819050919050565b6118bd816118aa565b81146118c857600080fd5b50565b6000813590506118da816118b4565b92915050565b6000602082840312156118f6576118f5611789565b5b6000611904848285016118cb565b91505092915050565b611916816118aa565b82525050565b6000602082019050611931600083018461190d565b92915050565b6119408161186e565b811461194b57600080fd5b50565b60008135905061195d81611937565b92915050565b6000819050919050565b61197681611963565b811461198157600080fd5b50565b6000813590506119938161196d565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126119be576119bd611999565b5b8235905067ffffffffffffffff8111156119db576119da61199e565b5b6020830191508360018202830111156119f7576119f66119a3565b5b9250929050565b60008060008060008060a08789031215611a1b57611a1a611789565b5b6000611a2989828a0161194e565b9650506020611a3a89828a0161194e565b9550506040611a4b89828a0161194e565b9450506060611a5c89828a01611984565b935050608087013567ffffffffffffffff811115611a7d57611a7c61178e565b5b611a8989828a016119a8565b92509250509295509295509295565b60008060408385031215611aaf57611aae611789565b5b6000611abd858286016118cb565b9250506020611ace8582860161194e565b9150509250929050565b600060208284031215611aee57611aed611789565b5b6000611afc8482850161194e565b91505092915050565b600080600080600060808688031215611b2157611b20611789565b5b6000611b2f8882890161194e565b9550506020611b408882890161194e565b9450506040611b5188828901611984565b935050606086013567ffffffffffffffff811115611b7257611b7161178e565b5b611b7e888289016119a8565b92509250509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b83811015611bc7578082015181840152602081019050611bac565b83811115611bd6576000848401525b50505050565b6000601f19601f8301169050919050565b6000611bf882611b8d565b611c028185611b98565b9350611c12818560208601611ba9565b611c1b81611bdc565b840191505092915050565b60006020820190508181036000830152611c408184611bed565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c8582611bdc565b810181811067ffffffffffffffff82111715611ca457611ca3611c4d565b5b80604052505050565b6000611cb761177f565b9050611cc38282611c7c565b919050565b600067ffffffffffffffff821115611ce357611ce2611c4d565b5b611cec82611bdc565b9050602081019050919050565b82818337600083830152505050565b6000611d1b611d1684611cc8565b611cad565b905082815260208101848484011115611d3757611d36611c48565b5b611d42848285611cf9565b509392505050565b600082601f830112611d5f57611d5e611999565b5b8135611d6f848260208601611d08565b91505092915050565b600080600080600060a08688031215611d9457611d93611789565b5b6000611da28882890161194e565b9550506020611db38882890161194e565b9450506040611dc48882890161194e565b9350506060611dd588828901611984565b925050608086013567ffffffffffffffff811115611df657611df561178e565b5b611e0288828901611d4a565b9150509295509295909350565b600080600080600080600060c0888a031215611e2e57611e2d611789565b5b6000611e3c8a828b0161194e565b9750506020611e4d8a828b0161194e565b9650506040611e5e8a828b01611984565b9550506060611e6f8a828b01611984565b9450506080611e808a828b01611984565b93505060a088013567ffffffffffffffff811115611ea157611ea061178e565b5b611ead8a828b016119a8565b925092505092959891949750929550565b600082825260208201905092915050565b7f4f4e4c595f434f554e544552504152545f474154455741590000000000000000600082015250565b6000611f05601883611ebe565b9150611f1082611ecf565b602082019050919050565b60006020820190508181036000830152611f3481611ef8565b9050919050565b7f544f4b454e5f4e4f545f4c505400000000000000000000000000000000000000600082015250565b6000611f71600d83611ebe565b9150611f7c82611f3b565b602082019050919050565b60006020820190508181036000830152611fa081611f64565b9050919050565b611fb081611963565b82525050565b6000604082019050611fcb6000830185611880565b611fd86020830184611fa7565b9392505050565b6000602082019050611ff46000830184611fa7565b92915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612056602f83611ebe565b915061206182611ffa565b604082019050919050565b6000602082019050818103600083015261208581612049565b9050919050565b6000819050919050565b600060ff82169050919050565b6000819050919050565b60006120c86120c36120be8461208c565b6120a3565b612096565b9050919050565b6120d8816120ad565b82525050565b60006040820190506120f360008301856120cf565b81810360208301526121058184611bed565b90509392505050565b600060a0820190506121236000830188611880565b6121306020830187611880565b61213d6040830186611880565b61214a6060830185611fa7565b818103608083015261215c8184611bed565b90509695505050505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600061219e601083611ebe565b91506121a982612168565b602082019050919050565b600060208201905081810360008301526121cd81612191565b9050919050565b7f494e56414c49445f5a45524f5f414d4f554e5400000000000000000000000000600082015250565b600061220a601383611ebe565b9150612215826121d4565b602082019050919050565b60006020820190508181036000830152612239816121fd565b9050919050565b7f43414c4c5f484f4f4b5f444154415f4e4f545f414c4c4f574544000000000000600082015250565b6000612276601a83611ebe565b915061228182612240565b602082019050919050565b600060208201905081810360008301526122a581612269565b9050919050565b60006122c76122c26122bd8461208c565b6120a3565b611963565b9050919050565b6122d7816122ac565b82525050565b60006060820190506122f26000830186611880565b6122ff60208301856122ce565b61230c6040830184611fa7565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061234e8261184e565b91506123598361184e565b92508273ffffffffffffffffffffffffffffffffffffffff0382111561238257612381612314565b5b828201905092915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b60006123ce60178361238d565b91506123d982612398565b601782019050919050565b600081519050919050565b60006123fa826123e4565b612404818561238d565b9350612414818560208601611ba9565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b600061245660118361238d565b915061246182612420565b601182019050919050565b6000612477826123c1565b915061248382856123ef565b915061248e82612449565b915061249a82846123ef565b91508190509392505050565b60006124b1826123e4565b6124bb8185611ebe565b93506124cb818560208601611ba9565b6124d481611bdc565b840191505092915050565b600060208201905081810360008301526124f981846124a6565b905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000612537601483611ebe565b915061254282612501565b602082019050919050565b600060208201905081810360008301526125668161252a565b9050919050565b60006125788261184e565b9050919050565b6125888161256d565b811461259357600080fd5b50565b6000815190506125a58161257f565b92915050565b60006125be6125b984611cc8565b611cad565b9050828152602081018484840111156125da576125d9611c48565b5b6125e5848285611ba9565b509392505050565b600082601f83011261260257612601611999565b5b81516126128482602086016125ab565b91505092915050565b6000806040838503121561263257612631611789565b5b600061264085828601612596565b925050602083015167ffffffffffffffff8111156126615761266061178e565b5b61266d858286016125ed565b9150509250929050565b600060408201905061268c6000830185611880565b818103602083015261269e8184611bed565b90509392505050565b6000815190506126b68161196d565b92915050565b6000602082840312156126d2576126d1611789565b5b60006126e0848285016126a7565b91505092915050565b60006126f482611963565b91506126ff83611963565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561273857612737612314565b5b828202905092915050565b600061274e82611963565b915061275983611963565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561278e5761278d612314565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006127d382611963565b915060008214156127e7576127e6612314565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612828602083611ebe565b9150612833826127f2565b602082019050919050565b600060208201905081810360008301526128578161281b565b905091905056fea2646970667358221220ff7bb38ebd7d0f366fd8ca976d9a6381a9b56a311ff0e20880146217db4a1ef764736f6c634300080900330000000000000000000000005288c571fd7ad117bea99bf60fe0846c4e84f93300000000000000000000000058b6a8a3302369daec383334672404ee733ab239000000000000000000000000289ba1701c2f088cf0faf8b3705246331cb8a839000000000000000000000000d78b6bd09cd28a83cfb21afa0da95c685a6bb0b1

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

0000000000000000000000005288c571fd7ad117bea99bf60fe0846c4e84f93300000000000000000000000058b6a8a3302369daec383334672404ee733ab239000000000000000000000000289ba1701c2f088cf0faf8b3705246331cb8a839000000000000000000000000d78b6bd09cd28a83cfb21afa0da95c685a6bb0b1

-----Decoded View---------------
Arg [0] : _l2Router (address): 0x5288c571fd7ad117bea99bf60fe0846c4e84f933
Arg [1] : _l1Lpt (address): 0x58b6a8a3302369daec383334672404ee733ab239
Arg [2] : _l2Lpt (address): 0x289ba1701c2f088cf0faf8b3705246331cb8a839
Arg [3] : _l2LPTDataCache (address): 0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000005288c571fd7ad117bea99bf60fe0846c4e84f933
Arg [1] : 00000000000000000000000058b6a8a3302369daec383334672404ee733ab239
Arg [2] : 000000000000000000000000289ba1701c2f088cf0faf8b3705246331cb8a839
Arg [3] : 000000000000000000000000d78b6bd09cd28a83cfb21afa0da95c685a6bb0b1


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.