Contract 0x6D2457a4ad276000A615295f7A80F79E48CcD318

 

Contract Overview

Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x44e6ef0f4d2c1bdfc39711659c86f361401c39b0b1584c041e2c95ec74f56dbcFinalize Inbound...129717772022-05-26 6:40:246 hrs 52 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0xf75282095b208cffb4b5319fdc42d6877fe8fcd189e8565c3abf34a70210579dFinalize Inbound...129665162022-05-26 4:30:309 hrs 2 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x1bce5a8f77aa24166922d72fda829c3521acd1ca9151929bcb497e76753969e1Finalize Inbound...129565462022-05-25 23:52:4213 hrs 40 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x718f7b8cbe389c31bd120bd12564224f6b3e3988b364fa6b00059c2a1a2dc03fFinalize Inbound...129540532022-05-25 22:15:4515 hrs 17 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x74a62fe2ce4581a798068681ac246763bbc1cc1ba7154b89595740f2f5fdf33cFinalize Inbound...129528072022-05-25 21:37:4015 hrs 55 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x88c687993441979ee1e7bae0bf7e77d8586dfa8bf3e04afacf5881a25c635777Finalize Inbound...129363352022-05-25 14:34:4822 hrs 58 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x37c3c860e317dd1ef89ae497038f169af9a51afae33436a304bc8b091fa0389bFinalize Inbound...129294752022-05-25 12:45:051 day 47 mins ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0xeaf3b6f263c65cbc119766e8d23f20b8e78da40eb28ab909355cc1764fa71abfFinalize Inbound...129080182022-05-25 6:37:471 day 6 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x6b8ce9d169e7fd1a3d7bfdf22aaffd1f75cde7fc31c87d0bbf8247fe3626f58eFinalize Inbound...128969762022-05-25 3:00:101 day 10 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x5a20a3f66a8423b4977b4ea683c3ed006e5c4079530c034bfbad68ba1eee7f8bFinalize Inbound...128923362022-05-25 1:38:451 day 11 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0xb95c342317d3029eea4f618908a5bc52cec8349b2aa090bd26685e8a6190c203Finalize Inbound...128364262022-05-24 6:34:132 days 6 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x51d3494462b03f8cf1f4545e29b69010adf39c3a2dc6108a9168a4a0207c653dFinalize Inbound...128342372022-05-24 5:55:022 days 7 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x2f99c0872d5395c7f06f00d6025d2e52a69384e19d496061fed3d76b8826f94cFinalize Inbound...128135922022-05-23 22:14:132 days 15 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x3117aee671db398f861d60bad951642d24b4de776d8525c7a43b5ae5198ee45dFinalize Inbound...128129482022-05-23 21:59:502 days 15 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0xdfa8da7490973615090a6111ee9ad466277bdaf96f0e0e1ca228ccea794beaa2Finalize Inbound...128100682022-05-23 20:46:112 days 16 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x2bf6f6474f3b7aba89423195545b772532f5fb61fc64ee63adbcefae7885fd50Finalize Inbound...127921002022-05-23 14:57:202 days 22 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x871c8c2c3e200cff5a70e7335342597c9d203efad7bca0291425469885de67f3Finalize Inbound...127919062022-05-23 14:54:322 days 22 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x7081df58cefb78f97a32db4f318f1eb3d2063993fc06c2ea98e483eb3ce33828Finalize Inbound...127668892022-05-23 8:29:123 days 5 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x856d2c9b724d15628af4621a154cdb7da114a1ba61bc2646718f72ed572b5ac1Finalize Inbound...127540632022-05-23 4:58:433 days 8 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x04e67e502fa4582cae7244a672bc40665997e136a4ce931be2d18aa9b9ac4cf4Finalize Inbound...127387222022-05-22 23:40:203 days 13 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x8fa682983f6ab71cb1b9e12354871a5ce445164a6416c75914e59432d6d212faFinalize Inbound...127335312022-05-22 21:16:033 days 16 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x1765161217455a029e5a8df1100ebf0b8b28a9b836a1e29055e785df8e1cc258Finalize Inbound...127330472022-05-22 21:00:143 days 16 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0xdf305d100d2abbe099b2c6b1a97b6f534ea7bc068cd04991b1dc1fbc7c7bf250Finalize Inbound...127316652022-05-22 20:23:443 days 17 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x73e5d5ec853932db39cc1cdec03a90884b05a3ce2db8d0b6b944891162003eb9Finalize Inbound...127314242022-05-22 20:15:283 days 17 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
0x2a0ac75fb8fb703def70f8670455f341ed36140c610318e36c46173f4ec23587Finalize Inbound...127314242022-05-22 20:15:283 days 17 hrs ago0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 IN  0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH0 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xf5c9e5c35da4292f83641793b9314470cf1a8f1e144631d31eea65681f82d2c7129736462022-05-26 7:16:016 hrs 16 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318Arbitrum: ArbSys0 ETH
0xf5c9e5c35da4292f83641793b9314470cf1a8f1e144631d31eea65681f82d2c7129736462022-05-26 7:16:016 hrs 16 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b10 ETH
0xf5c9e5c35da4292f83641793b9314470cf1a8f1e144631d31eea65681f82d2c7129736462022-05-26 7:16:016 hrs 16 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0x289ba1701c2f088cf0faf8b3705246331cb8a8390 ETH
0xf5c9e5c35da4292f83641793b9314470cf1a8f1e144631d31eea65681f82d2c7129736462022-05-26 7:16:016 hrs 16 mins ago 0x5288c571fd7ad117bea99bf60fe0846c4e84f933 0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH
0x664917e8b0cfc0fe91318c2ace7a835175d9aec2b4c3427d60227dbe360305af129717772022-05-26 6:40:246 hrs 52 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b10 ETH
0x664917e8b0cfc0fe91318c2ace7a835175d9aec2b4c3427d60227dbe360305af129717772022-05-26 6:40:246 hrs 52 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0x289ba1701c2f088cf0faf8b3705246331cb8a8390 ETH
0x664917e8b0cfc0fe91318c2ace7a835175d9aec2b4c3427d60227dbe360305af129717772022-05-26 6:40:246 hrs 52 mins ago 0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH
0x64624a7ea21d70c6ee7ffa9c4b89f72fd2eaf8f9674f28f54521a8324f18878c129665162022-05-26 4:30:309 hrs 2 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b10 ETH
0x64624a7ea21d70c6ee7ffa9c4b89f72fd2eaf8f9674f28f54521a8324f18878c129665162022-05-26 4:30:309 hrs 2 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0x289ba1701c2f088cf0faf8b3705246331cb8a8390 ETH
0x64624a7ea21d70c6ee7ffa9c4b89f72fd2eaf8f9674f28f54521a8324f18878c129665162022-05-26 4:30:309 hrs 2 mins ago 0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH
0xc262d5660313b0ee8f7d732ea98dbba81f0c1f90e7ee0a42a6837592c678b0cf129565462022-05-25 23:52:4213 hrs 40 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b10 ETH
0xc262d5660313b0ee8f7d732ea98dbba81f0c1f90e7ee0a42a6837592c678b0cf129565462022-05-25 23:52:4213 hrs 40 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0x289ba1701c2f088cf0faf8b3705246331cb8a8390 ETH
0xc262d5660313b0ee8f7d732ea98dbba81f0c1f90e7ee0a42a6837592c678b0cf129565462022-05-25 23:52:4213 hrs 40 mins ago 0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH
0x85a63d0da562cf9e7744899b749e47901c2b2ad236251283435f208708ddf869129540532022-05-25 22:15:4515 hrs 17 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b10 ETH
0x85a63d0da562cf9e7744899b749e47901c2b2ad236251283435f208708ddf869129540532022-05-25 22:15:4515 hrs 17 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0x289ba1701c2f088cf0faf8b3705246331cb8a8390 ETH
0x85a63d0da562cf9e7744899b749e47901c2b2ad236251283435f208708ddf869129540532022-05-25 22:15:4515 hrs 17 mins ago 0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH
0x71e4f3a5f1c87395a38ead1efe8077b891e2f9744050269e8990436f617ed03c129528072022-05-25 21:37:4015 hrs 55 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b10 ETH
0x71e4f3a5f1c87395a38ead1efe8077b891e2f9744050269e8990436f617ed03c129528072022-05-25 21:37:4015 hrs 55 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0x289ba1701c2f088cf0faf8b3705246331cb8a8390 ETH
0x71e4f3a5f1c87395a38ead1efe8077b891e2f9744050269e8990436f617ed03c129528072022-05-25 21:37:4015 hrs 55 mins ago 0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH
0x643c4a0ef1c3f2a12d49ad97f818704b8d4f6e6b807568929194730ffa0689a5129363352022-05-25 14:34:4822 hrs 58 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b10 ETH
0x643c4a0ef1c3f2a12d49ad97f818704b8d4f6e6b807568929194730ffa0689a5129363352022-05-25 14:34:4822 hrs 58 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0x289ba1701c2f088cf0faf8b3705246331cb8a8390 ETH
0x643c4a0ef1c3f2a12d49ad97f818704b8d4f6e6b807568929194730ffa0689a5129363352022-05-25 14:34:4822 hrs 58 mins ago 0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 0x6d2457a4ad276000a615295f7a80f79e48ccd3180 ETH
0xc2a31ff78ceeeec4e5e75233d67b8263149249dc28ad40985e414b677e91be28129294752022-05-25 12:45:051 day 47 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b10 ETH
0xc2a31ff78ceeeec4e5e75233d67b8263149249dc28ad40985e414b677e91be28129294752022-05-25 12:45:051 day 47 mins ago 0x6d2457a4ad276000a615295f7a80f79e48ccd318 0x289ba1701c2f088cf0faf8b3705246331cb8a8390 ETH
0xc2a31ff78ceeeec4e5e75233d67b8263149249dc28ad40985e414b677e91be28129294752022-05-25 12:45:051 day 47 mins ago 0x7253f1c8bbf02e6a6bd074e8d564c9a5420a1787 0x6d2457a4ad276000a615295f7a80f79e48ccd3180 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
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.