Contract 0x4200000000000000000000000000000000000010 12

 

Contract Overview

Boba Network: L2 Standard Bridge
Balance:
0 Ether

EtherValue:
$0.00
My Name Tag:
Not Available, login to update

ContractCreator:
GENESIS at txn GENESIS_4200000000000000000000000000000000000010
Txn Hash Method
Block
From
To
Value
0x8d60528a8d791d2fb03fc7e437176b6f82e7d5aa41c60deb0a3d9b3c7302dd86Withdraw7783282022-08-18 13:30:24224 days 52 mins ago0xf9f548927067adcb3dc39b1aeb29df13a404f489 IN Boba Network: L2 Standard Bridge0 Ether0.0001730121
0x6291fab8239646d521ab981ba1faa92a950f199edafdaab7449b9d2d5459c8bfTransfer3128982022-02-05 19:19:30417 days 19 hrs ago0x21f693bb80e41d6bab50c3fef9fc3dc4d93d0f38 IN Boba Network: L2 Standard Bridge0 Ether0.0004595782331
0x8eedfcfbce22d1b553f9d8037efcb1369915a14d4752cc9004b6bf3cb3a5e6adWithdraw1420102021-11-23 23:11:36491 days 15 hrs ago0xd4a870b8a784eb228eb8cc56606a479c342ac3fd IN Boba Network: L2 Standard Bridge0 Ether0.001719510
0x51b8702e1e29c768f1e434f5b908645987d1689351da5108d9e149bfc54f151dWithdraw1415482021-11-23 22:17:13491 days 16 hrs ago0x545600fa318f1e717756ff461cf0e7e0ecff08e3 IN Boba Network: L2 Standard Bridge0 Ether0.0012861610
0x21ac8c2525972a32cad29e4c30043cd0d11b9b511f07c9d73ebdcc9b0fc04831Withdraw1414692021-11-23 22:07:57491 days 16 hrs ago0xd850bcfbce1b434ab1d7f6d7b453b5199b7c1ade IN Boba Network: L2 Standard Bridge0 Ether0.0003307410
0x11215becb4fe393ff94ab1a0ff31a5402108490e2fed5f8503660639ed012d94Withdraw1413812021-11-23 21:57:37491 days 16 hrs ago0xd850bcfbce1b434ab1d7f6d7b453b5199b7c1ade IN Boba Network: L2 Standard Bridge0 Ether0.0003306210
0xa12a36543b084e37700c3517f350ee9519c4b55a01f05d6967066019772695efWithdraw1413762021-11-23 21:57:37491 days 16 hrs ago0xd850bcfbce1b434ab1d7f6d7b453b5199b7c1ade IN Boba Network: L2 Standard Bridge0 Ether0.0003307410
0xa7e5f6b9cbef76673edeb31b0a4371516f774de8d50ca52f11a1312c1dccf8c1Withdraw1406402021-11-23 21:08:13491 days 17 hrs ago0x491319e9bacda44e931be9136d4676db0a8c2755 IN Boba Network: L2 Standard Bridge0 Ether0.0013784310
0x78887de980f535092cb338d5435f80b51780c3de8277b1cb2c86ca9bdb0662a9Withdraw1406322021-11-23 21:08:13491 days 17 hrs ago0x491319e9bacda44e931be9136d4676db0a8c2755 IN Boba Network: L2 Standard Bridge0 Ether0.0003307410
0xe3a949576f237821847d2b394bc428d023c0191c51980075fd529450bdde9e99Withdraw1406232021-11-23 21:08:13491 days 17 hrs ago0x491319e9bacda44e931be9136d4676db0a8c2755 IN Boba Network: L2 Standard Bridge0 Ether0.0003307410
0x3e104e20d2f893e0d94374951f32bf25e8edbf61bdff081bd8a13b0712f10c72Withdraw1404642021-11-23 20:54:44491 days 17 hrs ago0xd4a870b8a784eb228eb8cc56606a479c342ac3fd IN Boba Network: L2 Standard Bridge0 Ether0.001719510
0x970a8562cf65bac10aaaaf578ff088045dd4f0f44f0da1bfb8ded287df7d131fWithdraw1404632021-11-23 20:54:44491 days 17 hrs ago0x871ea9af361ec1104489ed96438319b46e5fb4c6 IN Boba Network: L2 Standard Bridge0 Ether0.0014361610
0x3b90d7fa7423de782f35a8840b6a2f5581fcd0add5fc99c151c29f3e6f81ad63Withdraw1403822021-11-23 20:46:11491 days 17 hrs ago0xc0a564ae0bfbfb5c0d2027559669a785916387a6 IN Boba Network: L2 Standard Bridge0 Ether0.0012862810
0x184455cc92812db1509d0f93ba70f0ee6206bd560f22700440bb712fb7be334fWithdraw1401032021-11-23 20:16:38491 days 18 hrs ago0x2ca7d720a4dd8e12aeee609d8cdc3da86de559d0 IN Boba Network: L2 Standard Bridge0 Ether0.0012862810
0x94253f8fc1ae1a9480c02b7ff91184eff01ec9c9132fa9794032d2cfec15ab31Withdraw1400532021-11-23 20:09:06491 days 18 hrs ago0x726dd56a24a8f16fe263cdb2b14bdc52d744e966 IN Boba Network: L2 Standard Bridge0 Ether0.0012862810
0x413a85819edc10ecae960502b62b8f77611644fb644489992cbc1a3e759287ccWithdraw1400482021-11-23 20:09:06491 days 18 hrs ago0x2c74e288c5af4e0e448f1484f6e1715b6e59f96e IN Boba Network: L2 Standard Bridge0 Ether0.0003306210
0xb6f0a58cc303af21e120047b2f1f6c287edc3571f4aa256574c33745b507f29bWithdraw1397522021-11-23 19:45:11491 days 18 hrs ago0x0788d7e71b2d9049ad662c52e0171fbc4df973bc IN Boba Network: L2 Standard Bridge0 Ether0.0013784310
0xe8a8a0c732864435458afe5d7620e8d77d9e50b7a9b5ff52e4bf4e695c6ed5a7Withdraw1397482021-11-23 19:43:11491 days 18 hrs ago0x0788d7e71b2d9049ad662c52e0171fbc4df973bc IN Boba Network: L2 Standard Bridge0 Ether0.0003307410
0x841bf3bc8ecc59efb9e9c368ea670c5fcdc371f6f0d039c08f4acdbe2dc76896Withdraw1397422021-11-23 19:43:11491 days 18 hrs ago0xc84c19bbf07d0cb7cc430fc3c51173c4acd5dd9d IN Boba Network: L2 Standard Bridge0 Ether0.0013784310
0xbb42a5d70c47add192ff87ba9668b5bca021003c3b3d4fc1b8b6da58df3a893eWithdraw1397372021-11-23 19:43:11491 days 18 hrs ago0xc84c19bbf07d0cb7cc430fc3c51173c4acd5dd9d IN Boba Network: L2 Standard Bridge0 Ether0.0003307410
0x9c03387d396490bdacc89a97671e1818ff50d8d5204ed689c7b6f7928be03677Withdraw1397312021-11-23 19:42:14491 days 18 hrs ago0xc84c19bbf07d0cb7cc430fc3c51173c4acd5dd9d IN Boba Network: L2 Standard Bridge0 Ether0.0003306210
0xa87a7a5f08ef2f5154ae09a2ed1fe1434b72fee3dab4b301e96a790d5c0e878bWithdraw1397272021-11-23 19:42:14491 days 18 hrs ago0xc84c19bbf07d0cb7cc430fc3c51173c4acd5dd9d IN Boba Network: L2 Standard Bridge0 Ether0.0003307410
0xba911f1372ef940074fd3c02042671ee10f24962f796543c060fcd92609ad552Withdraw1395272021-11-23 19:23:30491 days 18 hrs ago0xe0f29d3e0a5f0d15e96f579839859578e66f16a3 IN Boba Network: L2 Standard Bridge0 Ether0.0012861610
0xf970a3a4a19ab828e32b6370af1d2a9f117230882af7ab91ee36fad50ed53221Withdraw1394392021-11-23 19:17:53491 days 19 hrs ago0x84a0feea44b550ebd58344773f5f4c98cd57e0de IN Boba Network: L2 Standard Bridge0 Ether0.0013783110
0xd67161c5131cf15b3f271124966d4ea560282180480c629e49b539e4dc589b26Withdraw1393952021-11-23 19:12:22491 days 19 hrs ago0x84a0feea44b550ebd58344773f5f4c98cd57e0de IN Boba Network: L2 Standard Bridge0 Ether0.0003306210
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x317468f579dd510a261b41a24f4e89350880edea65abdd24f254fd261397e7209935632023-03-30 10:54:013 hrs 28 mins ago Boba Network: L2 Standard BridgeBoba Network: L2 Cross Domain Messenger0 Ether
0x317468f579dd510a261b41a24f4e89350880edea65abdd24f254fd261397e7209935632023-03-30 10:54:013 hrs 28 mins ago Boba Network: L2 Standard BridgeBoba Network: USDC Token0 Ether
0x317468f579dd510a261b41a24f4e89350880edea65abdd24f254fd261397e7209935632023-03-30 10:54:013 hrs 28 mins ago Boba Network: L2 Standard BridgeBoba Network: USDC Token0 Ether
0x317468f579dd510a261b41a24f4e89350880edea65abdd24f254fd261397e7209935632023-03-30 10:54:013 hrs 28 mins ago Boba Network: Discretionary Exit FeeBoba Network: L2 Standard Bridge0 Ether
0x2bc92a8f985f633aa767abb5fd9b188e677f654c8b8882830de10181f8f842b19929522023-03-29 23:53:1814 hrs 29 mins ago Boba Network: L2 Standard BridgeBoba Network: BOBA Token0 Ether
0x2bc92a8f985f633aa767abb5fd9b188e677f654c8b8882830de10181f8f842b19929522023-03-29 23:53:1814 hrs 29 mins ago Boba Network: L2 Standard BridgeBoba Network: BOBA Token0 Ether
0x2bc92a8f985f633aa767abb5fd9b188e677f654c8b8882830de10181f8f842b19929522023-03-29 23:53:1814 hrs 29 mins ago Boba Network: L2 Standard BridgeBoba Network: BOBA Token0 Ether
0x2bc92a8f985f633aa767abb5fd9b188e677f654c8b8882830de10181f8f842b19929522023-03-29 23:53:1814 hrs 29 mins ago Boba Network: L2 Standard BridgeBoba Network: BOBA Token0 Ether
0x2bc92a8f985f633aa767abb5fd9b188e677f654c8b8882830de10181f8f842b19929522023-03-29 23:53:1814 hrs 29 mins ago Boba Network: L2 Standard BridgeBoba Network: BOBA Token0 Ether
0x2bc92a8f985f633aa767abb5fd9b188e677f654c8b8882830de10181f8f842b19929522023-03-29 23:53:1814 hrs 29 mins ago Boba Network: L2 Standard BridgeBoba Network: L2 Cross Domain Messenger0 Ether
0x2bc92a8f985f633aa767abb5fd9b188e677f654c8b8882830de10181f8f842b19929522023-03-29 23:53:1814 hrs 29 mins ago Boba Network: L2 Cross Domain MessengerBoba Network: L2 Standard Bridge0 Ether
0xde540f134f0125e5b22ebf740be54b919fdfb8f2e57b5fdcc189e08b626e57689927342023-03-29 16:01:5122 hrs 20 mins ago Boba Network: L2 Standard BridgeBoba Network: L2 Boba0 Ether
0xde540f134f0125e5b22ebf740be54b919fdfb8f2e57b5fdcc189e08b626e57689927342023-03-29 16:01:5122 hrs 20 mins ago Boba Network: L2 Standard BridgeBoba Network: L2 Boba0 Ether
0xde540f134f0125e5b22ebf740be54b919fdfb8f2e57b5fdcc189e08b626e57689927342023-03-29 16:01:5122 hrs 20 mins ago Boba Network: L2 Standard BridgeBoba Network: L2 Boba0 Ether
0xde540f134f0125e5b22ebf740be54b919fdfb8f2e57b5fdcc189e08b626e57689927342023-03-29 16:01:5122 hrs 20 mins ago Boba Network: L2 Standard BridgeBoba Network: L2 Boba0 Ether
0xde540f134f0125e5b22ebf740be54b919fdfb8f2e57b5fdcc189e08b626e57689927342023-03-29 16:01:5122 hrs 20 mins ago Boba Network: L2 Standard BridgeBoba Network: L2 Boba0 Ether
0xde540f134f0125e5b22ebf740be54b919fdfb8f2e57b5fdcc189e08b626e57689927342023-03-29 16:01:5122 hrs 20 mins ago Boba Network: L2 Standard BridgeBoba Network: L2 Cross Domain Messenger0 Ether
0xde540f134f0125e5b22ebf740be54b919fdfb8f2e57b5fdcc189e08b626e57689927342023-03-29 16:01:5122 hrs 20 mins ago Boba Network: L2 Cross Domain MessengerBoba Network: L2 Standard Bridge0 Ether
0x3d2e4929e7c260206ba87e58a6687fa399ff83d9e94e9d5e3945ea643986a62f9927222023-03-29 15:53:3822 hrs 29 mins ago Boba Network: L2 Standard BridgeBoba Network: BOBA Token0 Ether
0x3d2e4929e7c260206ba87e58a6687fa399ff83d9e94e9d5e3945ea643986a62f9927222023-03-29 15:53:3822 hrs 29 mins ago Boba Network: L2 Standard BridgeBoba Network: BOBA Token0 Ether
0x3d2e4929e7c260206ba87e58a6687fa399ff83d9e94e9d5e3945ea643986a62f9927222023-03-29 15:53:3822 hrs 29 mins ago Boba Network: L2 Standard BridgeBoba Network: BOBA Token0 Ether
0x3d2e4929e7c260206ba87e58a6687fa399ff83d9e94e9d5e3945ea643986a62f9927222023-03-29 15:53:3822 hrs 29 mins ago Boba Network: L2 Standard BridgeBoba Network: BOBA Token0 Ether
0x3d2e4929e7c260206ba87e58a6687fa399ff83d9e94e9d5e3945ea643986a62f9927222023-03-29 15:53:3822 hrs 29 mins ago Boba Network: L2 Standard BridgeBoba Network: BOBA Token0 Ether
0x3d2e4929e7c260206ba87e58a6687fa399ff83d9e94e9d5e3945ea643986a62f9927222023-03-29 15:53:3822 hrs 29 mins ago Boba Network: L2 Standard BridgeBoba Network: L2 Cross Domain Messenger0 Ether
0x3d2e4929e7c260206ba87e58a6687fa399ff83d9e94e9d5e3945ea643986a62f9927222023-03-29 15:53:3822 hrs 29 mins ago Boba Network: L2 Cross Domain MessengerBoba Network: L2 Standard Bridge0 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Genesis Bytecode Match Only)

Contract Name:
L2StandardBridge

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at bobascan.com on 2022-12-08
*/

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// 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: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: packages/contracts/contracts/standards/IL2StandardERC20.sol


pragma solidity ^0.8.9;



interface IL2StandardERC20 is IERC20, IERC165 {
    function l1Token() external returns (address);

    function mint(address _to, uint256 _amount) external;

    function burn(address _from, uint256 _amount) external;

    event Mint(address indexed _account, uint256 _amount);
    event Burn(address indexed _account, uint256 _amount);
}

// File: packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol


pragma solidity ^0.8.9;

/**
 * @title Lib_PredeployAddresses
 */
library Lib_PredeployAddresses {
    // solhint-disable max-line-length
    address internal constant L2_TO_L1_MESSAGE_PASSER = 0x4200000000000000000000000000000000000000;
    address internal constant L1_MESSAGE_SENDER = 0x4200000000000000000000000000000000000001;
    address internal constant DEPLOYER_WHITELIST = 0x4200000000000000000000000000000000000002;
    address payable internal constant OVM_ETH = payable(0x4200000000000000000000000000000000000006);
    // solhint-disable-next-line max-line-length
    address internal constant L2_CROSS_DOMAIN_MESSENGER =
        0x4200000000000000000000000000000000000007;
    address internal constant LIB_ADDRESS_MANAGER = 0x4200000000000000000000000000000000000008;
    address internal constant PROXY_EOA = 0x4200000000000000000000000000000000000009;
    address internal constant L2_STANDARD_BRIDGE = 0x4200000000000000000000000000000000000010;
    address internal constant SEQUENCER_FEE_WALLET = 0x4200000000000000000000000000000000000011;
    address internal constant L2_STANDARD_TOKEN_FACTORY =
        0x4200000000000000000000000000000000000012;
    address internal constant L1_BLOCK_NUMBER = 0x4200000000000000000000000000000000000013;
    address internal constant OVM_GAS_PRICE_ORACLE = 0x420000000000000000000000000000000000000F;
    address internal constant PROXY__BOBA_TURING_PREPAY =
        0x4200000000000000000000000000000000000020;
    address internal constant BOBA_TURING_PREPAY = 0x4200000000000000000000000000000000000021;
    address internal constant BOBA_TURING_HELPER = 0x4200000000000000000000000000000000000022;
}

// File: packages/contracts/contracts/libraries/bridge/ICrossDomainMessenger.sol


pragma solidity >0.5.0 <0.9.0;

/**
 * @title ICrossDomainMessenger
 */
interface ICrossDomainMessenger {
    /**********
     * Events *
     **********/

    event SentMessage(
        address indexed target,
        address sender,
        bytes message,
        uint256 messageNonce,
        uint256 gasLimit
    );
    event RelayedMessage(bytes32 indexed msgHash);
    event FailedRelayedMessage(bytes32 indexed msgHash);

    /*************
     * Variables *
     *************/

    function xDomainMessageSender() external view returns (address);

    /********************
     * Public Functions *
     ********************/

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

// File: packages/contracts/contracts/libraries/bridge/CrossDomainEnabled.sol


pragma solidity >0.5.0 <0.9.0;

/* Interface Imports */


/**
 * @title CrossDomainEnabled
 * @dev Helper contract for contracts performing cross-domain communications
 *
 * Compiler used: defined by inheriting contract
 * Runtime target: defined by inheriting contract
 */
contract CrossDomainEnabled {
    /*************
     * Variables *
     *************/

    // Messenger contract used to send and recieve messages from the other domain.
    address public messenger;

    /***************
     * Constructor *
     ***************/

    /**
     * @param _messenger Address of the CrossDomainMessenger on the current layer.
     */
    constructor(address _messenger) {
        messenger = _messenger;
    }

    /**********************
     * Function Modifiers *
     **********************/

    /**
     * Enforces that the modified function is only callable by a specific cross-domain account.
     * @param _sourceDomainAccount The only account on the originating domain which is
     *  authenticated to call this function.
     */
    modifier onlyFromCrossDomainAccount(address _sourceDomainAccount) {
        require(
            msg.sender == address(getCrossDomainMessenger()),
            "OVM_XCHAIN: messenger contract unauthenticated"
        );

        require(
            getCrossDomainMessenger().xDomainMessageSender() == _sourceDomainAccount,
            "OVM_XCHAIN: wrong sender of cross-domain message"
        );

        _;
    }

    /**********************
     * Internal Functions *
     **********************/

    /**
     * Gets the messenger, usually from storage. This function is exposed in case a child contract
     * needs to override.
     * @return The address of the cross-domain messenger contract which should be used.
     */
    function getCrossDomainMessenger() internal virtual returns (ICrossDomainMessenger) {
        return ICrossDomainMessenger(messenger);
    }

    /**q
     * Sends a message to an account on another domain
     * @param _crossDomainTarget The intended recipient on the destination domain
     * @param _message The data to send to the target (usually calldata to a function with
     *  `onlyFromCrossDomainAccount()`)
     * @param _gasLimit The gasLimit for the receipt of the message on the target domain.
     */
    function sendCrossDomainMessage(
        address _crossDomainTarget,
        uint32 _gasLimit,
        bytes memory _message
    ) internal {
        getCrossDomainMessenger().sendMessage(_crossDomainTarget, _message, _gasLimit);
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.2/contracts/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.2/contracts/utils/introspection/ERC165Checker.sol



pragma solidity ^0.8.0;


/**
 * @dev Library used to query support of an interface declared via {IERC165}.
 *
 * Note that these functions return the actual result of the query: they do not
 * `revert` if an interface is not supported. It is up to the caller to decide
 * what to do in these cases.
 */
library ERC165Checker {
    // As per the EIP-165 spec, no interface should ever match 0xffffffff
    bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;

    /**
     * @dev Returns true if `account` supports the {IERC165} interface,
     */
    function supportsERC165(address account) internal view returns (bool) {
        // Any contract that implements ERC165 must explicitly indicate support of
        // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid
        return
            _supportsERC165Interface(account, type(IERC165).interfaceId) &&
            !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);
    }

    /**
     * @dev Returns true if `account` supports the interface defined by
     * `interfaceId`. Support for {IERC165} itself is queried automatically.
     *
     * See {IERC165-supportsInterface}.
     */
    function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {
        // query support of both ERC165 as per the spec and support of _interfaceId
        return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);
    }

    /**
     * @dev Returns a boolean array where each value corresponds to the
     * interfaces passed in and whether they're supported or not. This allows
     * you to batch check interfaces for a contract where your expectation
     * is that some interfaces may not be supported.
     *
     * See {IERC165-supportsInterface}.
     *
     * _Available since v3.4._
     */
    function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)
        internal
        view
        returns (bool[] memory)
    {
        // an array of booleans corresponding to interfaceIds and whether they're supported or not
        bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);

        // query support of ERC165 itself
        if (supportsERC165(account)) {
            // query support of each interface in interfaceIds
            for (uint256 i = 0; i < interfaceIds.length; i++) {
                interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);
            }
        }

        return interfaceIdsSupported;
    }

    /**
     * @dev Returns true if `account` supports all the interfaces defined in
     * `interfaceIds`. Support for {IERC165} itself is queried automatically.
     *
     * Batch-querying can lead to gas savings by skipping repeated checks for
     * {IERC165} support.
     *
     * See {IERC165-supportsInterface}.
     */
    function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {
        // query support of ERC165 itself
        if (!supportsERC165(account)) {
            return false;
        }

        // query support of each interface in _interfaceIds
        for (uint256 i = 0; i < interfaceIds.length; i++) {
            if (!_supportsERC165Interface(account, interfaceIds[i])) {
                return false;
            }
        }

        // all interfaces supported
        return true;
    }

    /**
     * @notice Query if a contract implements an interface, does not check ERC165 support
     * @param account The address of the contract to query for support of an interface
     * @param interfaceId The interface identifier, as specified in ERC-165
     * @return true if the contract at account indicates support of the interface with
     * identifier interfaceId, false otherwise
     * @dev Assumes that account contains a contract that supports ERC165, otherwise
     * the behavior of this method is undefined. This precondition can be checked
     * with {supportsERC165}.
     * Interface identification is specified in ERC-165.
     */
    function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {
        bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);
        (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);
        if (result.length < 32) return false;
        return success && abi.decode(result, (bool));
    }
}

// File: packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol


pragma solidity ^0.8.9;

/**
 * @title IL2ERC20Bridge
 */
interface IL2ERC20Bridge {
    /**********
     * Events *
     **********/

    event WithdrawalInitiated(
        address indexed _l1Token,
        address indexed _l2Token,
        address indexed _from,
        address _to,
        uint256 _amount,
        bytes _data
    );

    event DepositFinalized(
        address indexed _l1Token,
        address indexed _l2Token,
        address indexed _from,
        address _to,
        uint256 _amount,
        bytes _data
    );

    event DepositFailed(
        address indexed _l1Token,
        address indexed _l2Token,
        address indexed _from,
        address _to,
        uint256 _amount,
        bytes _data
    );

    /********************
     * Public Functions *
     ********************/

    /**
     * @dev get the address of the corresponding L1 bridge contract.
     * @return Address of the corresponding L1 bridge contract.
     */
    function l1TokenBridge() external returns (address);

    /**
     * @dev initiate a withdraw of some tokens to the caller's account on L1
     * @param _l2Token Address of L2 token where withdrawal was initiated.
     * @param _amount Amount of the token to withdraw.
     * param _l1Gas Unused, but included for potential forward compatibility considerations.
     * @param _data Optional data to forward to L1. This data is provided
     *        solely as a convenience for external contracts. Aside from enforcing a maximum
     *        length, these contracts provide no guarantees about its content.
     */
    function withdraw(
        address _l2Token,
        uint256 _amount,
        uint32 _l1Gas,
        bytes calldata _data
    ) external;

    /**
     * @dev initiate a withdraw of some token to a recipient's account on L1.
     * @param _l2Token Address of L2 token where withdrawal is initiated.
     * @param _to L1 adress to credit the withdrawal to.
     * @param _amount Amount of the token to withdraw.
     * param _l1Gas Unused, but included for potential forward compatibility considerations.
     * @param _data Optional data to forward to L1. This data is provided
     *        solely as a convenience for external contracts. Aside from enforcing a maximum
     *        length, these contracts provide no guarantees about its content.
     */
    function withdrawTo(
        address _l2Token,
        address _to,
        uint256 _amount,
        uint32 _l1Gas,
        bytes calldata _data
    ) external;

    /*************************
     * Cross-chain Functions *
     *************************/

    /**
     * @dev Complete a deposit from L1 to L2, and credits funds to the recipient's balance of this
     * L2 token. This call will fail if it did not originate from a corresponding deposit in
     * L1StandardTokenBridge.
     * @param _l1Token Address for the l1 token this is called with
     * @param _l2Token Address for the l2 token this is called with
     * @param _from Account to pull the deposit from on L2.
     * @param _to Address to receive the withdrawal at
     * @param _amount Amount of the token to withdraw
     * @param _data Data provider by the sender on L1. This data is provided
     *        solely as a convenience for external contracts. Aside from enforcing a maximum
     *        length, these contracts provide no guarantees about its content.
     */
    function finalizeDeposit(
        address _l1Token,
        address _l2Token,
        address _from,
        address _to,
        uint256 _amount,
        bytes calldata _data
    ) external;
}

// File: packages/contracts/contracts/L1/messaging/IL1ERC20Bridge.sol


pragma solidity >0.5.0 <0.9.0;

/**
 * @title IL1ERC20Bridge
 */
interface IL1ERC20Bridge {
    /**********
     * Events *
     **********/

    event ERC20DepositInitiated(
        address indexed _l1Token,
        address indexed _l2Token,
        address indexed _from,
        address _to,
        uint256 _amount,
        bytes _data
    );

    event ERC20WithdrawalFinalized(
        address indexed _l1Token,
        address indexed _l2Token,
        address indexed _from,
        address _to,
        uint256 _amount,
        bytes _data
    );

    /********************
     * Public Functions *
     ********************/

    /**
     * @dev get the address of the corresponding L2 bridge contract.
     * @return Address of the corresponding L2 bridge contract.
     */
    function l2TokenBridge() external returns (address);

    /**
     * @dev deposit an amount of the ERC20 to the caller's balance on L2.
     * @param _l1Token Address of the L1 ERC20 we are depositing
     * @param _l2Token Address of the L1 respective L2 ERC20
     * @param _amount Amount of the ERC20 to deposit
     * @param _l2Gas Gas limit required to complete the deposit on L2.
     * @param _data Optional data to forward to L2. This data is provided
     *        solely as a convenience for external contracts. Aside from enforcing a maximum
     *        length, these contracts provide no guarantees about its content.
     */
    function depositERC20(
        address _l1Token,
        address _l2Token,
        uint256 _amount,
        uint32 _l2Gas,
        bytes calldata _data
    ) external;

    /**
     * @dev deposit an amount of ERC20 to a recipient's balance on L2.
     * @param _l1Token Address of the L1 ERC20 we are depositing
     * @param _l2Token Address of the L1 respective L2 ERC20
     * @param _to L2 address to credit the withdrawal to.
     * @param _amount Amount of the ERC20 to deposit.
     * @param _l2Gas Gas limit required to complete the deposit on L2.
     * @param _data Optional data to forward to L2. This data is provided
     *        solely as a convenience for external contracts. Aside from enforcing a maximum
     *        length, these contracts provide no guarantees about its content.
     */
    function depositERC20To(
        address _l1Token,
        address _l2Token,
        address _to,
        uint256 _amount,
        uint32 _l2Gas,
        bytes calldata _data
    ) external;

    /*************************
     * Cross-chain Functions *
     *************************/

    /**
     * @dev Complete a withdrawal from L2 to L1, and credit funds to the recipient's balance of the
     * L1 ERC20 token.
     * This call will fail if the initialized withdrawal from L2 has not been finalized.
     *
     * @param _l1Token Address of L1 token to finalizeWithdrawal for.
     * @param _l2Token Address of L2 token where withdrawal was initiated.
     * @param _from L2 address initiating the transfer.
     * @param _to L1 address to credit the withdrawal to.
     * @param _amount Amount of the ERC20 to deposit.
     * @param _data Data provided by the sender on L2. This data is provided
     *   solely as a convenience for external contracts. Aside from enforcing a maximum
     *   length, these contracts provide no guarantees about its content.
     */
    function finalizeERC20Withdrawal(
        address _l1Token,
        address _l2Token,
        address _from,
        address _to,
        uint256 _amount,
        bytes calldata _data
    ) external;
}

// File: packages/contracts/contracts/L1/messaging/IL1StandardBridge.sol


pragma solidity >0.5.0 <0.9.0;


/**
 * @title IL1StandardBridge
 */
interface IL1StandardBridge is IL1ERC20Bridge {
    /**********
     * Events *
     **********/
    event ETHDepositInitiated(
        address indexed _from,
        address indexed _to,
        uint256 _amount,
        bytes _data
    );

    event ETHWithdrawalFinalized(
        address indexed _from,
        address indexed _to,
        uint256 _amount,
        bytes _data
    );

    /********************
     * Public Functions *
     ********************/

    /**
     * @dev Deposit an amount of the ETH to the caller's balance on L2.
     * @param _l2Gas Gas limit required to complete the deposit on L2.
     * @param _data Optional data to forward to L2. This data is provided
     *        solely as a convenience for external contracts. Aside from enforcing a maximum
     *        length, these contracts provide no guarantees about its content.
     */
    function depositETH(uint32 _l2Gas, bytes calldata _data) external payable;

    /**
     * @dev Deposit an amount of ETH to a recipient's balance on L2.
     * @param _to L2 address to credit the withdrawal to.
     * @param _l2Gas Gas limit required to complete the deposit on L2.
     * @param _data Optional data to forward to L2. This data is provided
     *        solely as a convenience for external contracts. Aside from enforcing a maximum
     *        length, these contracts provide no guarantees about its content.
     */
    function depositETHTo(
        address _to,
        uint32 _l2Gas,
        bytes calldata _data
    ) external payable;

    /*************************
     * Cross-chain Functions *
     *************************/

    /**
     * @dev Complete a withdrawal from L2 to L1, and credit funds to the recipient's balance of the
     * L1 ETH token. Since only the xDomainMessenger can call this function, it will never be called
     * before the withdrawal is finalized.
     * @param _from L2 address initiating the transfer.
     * @param _to L1 address to credit the withdrawal to.
     * @param _amount Amount of the ERC20 to deposit.
     * @param _data Optional data to forward to L2. This data is provided
     *        solely as a convenience for external contracts. Aside from enforcing a maximum
     *        length, these contracts provide no guarantees about its content.
     */
    function finalizeETHWithdrawal(
        address _from,
        address _to,
        uint256 _amount,
        bytes calldata _data
    ) external;
}

// File: packages/contracts/contracts/L2/messaging/L2StandardBridge.sol


pragma solidity ^0.8.9;

/* Interface Imports */




/* Library Imports */




/* Contract Imports */


/**
 * @title L2StandardBridge
 * @dev The L2 Standard bridge is a contract which works together with the L1 Standard bridge to
 * enable ETH and ERC20 transitions between L1 and L2.
 * This contract acts as a minter for new tokens when it hears about deposits into the L1 Standard
 * bridge.
 * This contract also acts as a burner of the tokens intended for withdrawal, informing the L1
 * bridge to release L1 funds.
 */
contract L2StandardBridge is IL2ERC20Bridge, CrossDomainEnabled {
    /********************************
     * External Contract References *
     ********************************/

    address public l1TokenBridge;

    /***************
     * Constructor *
     ***************/

    /**
     * @param _l2CrossDomainMessenger Cross-domain messenger used by this contract.
     * @param _l1TokenBridge Address of the L1 bridge deployed to the main chain.
     */
    constructor(address _l2CrossDomainMessenger, address _l1TokenBridge)
        CrossDomainEnabled(_l2CrossDomainMessenger)
    {
        l1TokenBridge = _l1TokenBridge;
    }

    /***************
     * Withdrawing *
     ***************/

    /**
     * @inheritdoc IL2ERC20Bridge
     */
    function withdraw(
        address _l2Token,
        uint256 _amount,
        uint32 _l1Gas,
        bytes calldata _data
    ) external virtual {
        _initiateWithdrawal(_l2Token, msg.sender, msg.sender, _amount, _l1Gas, _data);
    }

    /**
     * @inheritdoc IL2ERC20Bridge
     */
    function withdrawTo(
        address _l2Token,
        address _to,
        uint256 _amount,
        uint32 _l1Gas,
        bytes calldata _data
    ) external virtual {
        _initiateWithdrawal(_l2Token, msg.sender, _to, _amount, _l1Gas, _data);
    }

    /**
     * @dev Performs the logic for deposits by storing the token and informing the L2 token Gateway
     * of the deposit.
     * @param _l2Token Address of L2 token where withdrawal was initiated.
     * @param _from Account to pull the deposit from on L2.
     * @param _to Account to give the withdrawal to on L1.
     * @param _amount Amount of the token to withdraw.
     * param _l1Gas Unused, but included for potential forward compatibility considerations.
     * @param _data Optional data to forward to L1. This data is provided
     *        solely as a convenience for external contracts. Aside from enforcing a maximum
     *        length, these contracts provide no guarantees about its content.
     */
    function _initiateWithdrawal(
        address _l2Token,
        address _from,
        address _to,
        uint256 _amount,
        uint32 _l1Gas,
        bytes calldata _data
    ) internal {
        // When a withdrawal is initiated, we burn the withdrawer's funds to prevent subsequent L2
        // usage
        IL2StandardERC20(_l2Token).burn(msg.sender, _amount);

        // Construct calldata for l1TokenBridge.finalizeERC20Withdrawal(_to, _amount)
        address l1Token = IL2StandardERC20(_l2Token).l1Token();
        bytes memory message;

        if (_l2Token == Lib_PredeployAddresses.OVM_ETH) {
            message = abi.encodeWithSelector(
                IL1StandardBridge.finalizeETHWithdrawal.selector,
                _from,
                _to,
                _amount,
                _data
            );
        } else {
            message = abi.encodeWithSelector(
                IL1ERC20Bridge.finalizeERC20Withdrawal.selector,
                l1Token,
                _l2Token,
                _from,
                _to,
                _amount,
                _data
            );
        }

        // Send message up to L1 bridge
        sendCrossDomainMessage(l1TokenBridge, _l1Gas, message);

        emit WithdrawalInitiated(l1Token, _l2Token, msg.sender, _to, _amount, _data);
    }

    /************************************
     * Cross-chain Function: Depositing *
     ************************************/

    /**
     * @inheritdoc IL2ERC20Bridge
     */
    function finalizeDeposit(
        address _l1Token,
        address _l2Token,
        address _from,
        address _to,
        uint256 _amount,
        bytes calldata _data
    ) external virtual onlyFromCrossDomainAccount(l1TokenBridge) {
        // Check the target token is compliant and
        // verify the deposited token on L1 matches the L2 deposited token representation here
        if (
            ERC165Checker.supportsInterface(_l2Token, 0x1d1d8b63) &&
            _l1Token == IL2StandardERC20(_l2Token).l1Token()
        ) {
            // When a deposit is finalized, we credit the account on L2 with the same amount of
            // tokens.
            IL2StandardERC20(_l2Token).mint(_to, _amount);
            emit DepositFinalized(_l1Token, _l2Token, _from, _to, _amount, _data);
        } else {
            // Either the L2 token which is being deposited-into disagrees about the correct address
            // of its L1 token, or does not support the correct interface.
            // This should only happen if there is a  malicious L2 token, or if a user somehow
            // specified the wrong L2 token address to deposit into.
            // In either case, we stop the process here and construct a withdrawal
            // message so that users can get their funds out in some cases.
            // There is no way to prevent malicious token contracts altogether, but this does limit
            // user error and mitigate some forms of malicious contract behavior.
            bytes memory message = abi.encodeWithSelector(
                IL1ERC20Bridge.finalizeERC20Withdrawal.selector,
                _l1Token,
                _l2Token,
                _to, // switched the _to and _from here to bounce back the deposit to the sender
                _from,
                _amount,
                _data
            );

            // Send message up to L1 bridge
            sendCrossDomainMessage(l1TokenBridge, 0, message);
            emit DepositFailed(_l1Token, _l2Token, _from, _to, _amount, _data);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs": [{"internalType": "address","name": "_l2CrossDomainMessenger","type": "address"},{"internalType": "address","name": "_l1TokenBridge","type": "address"}],"stateMutability": "nonpayable","type": "constructor"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "_l1Token","type": "address"},{"indexed": true,"internalType": "address","name": "_l2Token","type": "address"},{"indexed": true,"internalType": "address","name": "_from","type": "address"},{"indexed": false,"internalType": "address","name": "_to","type": "address"},{"indexed": false,"internalType": "uint256","name": "_amount","type": "uint256"},{"indexed": false,"internalType": "bytes","name": "_data","type": "bytes"}],"name": "DepositFailed","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "_l1Token","type": "address"},{"indexed": true,"internalType": "address","name": "_l2Token","type": "address"},{"indexed": true,"internalType": "address","name": "_from","type": "address"},{"indexed": false,"internalType": "address","name": "_to","type": "address"},{"indexed": false,"internalType": "uint256","name": "_amount","type": "uint256"},{"indexed": false,"internalType": "bytes","name": "_data","type": "bytes"}],"name": "DepositFinalized","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "_l1Token","type": "address"},{"indexed": true,"internalType": "address","name": "_l2Token","type": "address"},{"indexed": true,"internalType": "address","name": "_from","type": "address"},{"indexed": false,"internalType": "address","name": "_to","type": "address"},{"indexed": false,"internalType": "uint256","name": "_amount","type": "uint256"},{"indexed": false,"internalType": "bytes","name": "_data","type": "bytes"}],"name": "WithdrawalInitiated","type": "event"},{"inputs": [{"internalType": "address","name": "_l1Token","type": "address"},{"internalType": "address","name": "_l2Token","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": "finalizeDeposit","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "l1TokenBridge","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "messenger","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "address","name": "_l2Token","type": "address"},{"internalType": "uint256","name": "_amount","type": "uint256"},{"internalType": "uint32","name": "_l1Gas","type": "uint32"},{"internalType": "bytes","name": "_data","type": "bytes"}],"name": "withdraw","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "_l2Token","type": "address"},{"internalType": "address","name": "_to","type": "address"},{"internalType": "uint256","name": "_amount","type": "uint256"},{"internalType": "uint32","name": "_l1Gas","type": "uint32"},{"internalType": "bytes","name": "_data","type": "bytes"}],"name": "withdrawTo","outputs": [],"stateMutability": "nonpayable","type": "function"}]

608060405234801561001057600080fd5b50600436106100675760003560e01c80633cb747bf116100505780633cb747bf146100ca578063662a633a146100ea578063a3a79548146100fd57600080fd5b806332b7006d1461006c57806336c717c114610081575b600080fd5b61007f61007a366004610d0f565b610110565b005b6001546100a19073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6000546100a19073ffffffffffffffffffffffffffffffffffffffff1681565b61007f6100f8366004610d80565b610126565b61007f61010b366004610e18565b6106c1565b61011f853333878787876106d8565b5050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1661015e60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084015b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661025360005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b15801561029857600080fd5b505afa1580156102ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d09190610e9b565b73ffffffffffffffffffffffffffffffffffffffff1614610373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610214565b61039d877f1d1d8b6300000000000000000000000000000000000000000000000000000000610a32565b801561045357508673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156103ec57600080fd5b505af1158015610400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104249190610e9b565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b15610567576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690528816906340c10f1990604401600060405180830381600087803b1580156104c857600080fd5b505af11580156104dc573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd898888888860405161055a9493929190610f08565b60405180910390a46106b7565b600063a9f9e67560e01b8989888a89898960405160240161058e9796959493929190610f3e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526001549091506106339073ffffffffffffffffffffffffffffffffffffffff16600083610a57565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167f7ea89a4591614515571c2b51f5ea06494056f261c10ab1ed8c03c7590d87bce0898989896040516106ad9493929190610f08565b60405180910390a4505b5050505050505050565b6106d0863387878787876106d8565b505050505050565b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810185905273ffffffffffffffffffffffffffffffffffffffff881690639dc29fac90604401600060405180830381600087803b15801561074657600080fd5b505af115801561075a573d6000803e3d6000fd5b5050505060008773ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156107a857600080fd5b505af11580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e09190610e9b565b9050606073ffffffffffffffffffffffffffffffffffffffff891673420000000000000000000000000000000000000614156108d5576040517f1532ec340000000000000000000000000000000000000000000000000000000090610851908a908a908a9089908990602401610f9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050610994565b6040517fa9f9e67500000000000000000000000000000000000000000000000000000000906109149084908c908c908c908c908b908b90602401610f3e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b6001546109b89073ffffffffffffffffffffffffffffffffffffffff168683610a57565b3373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8a8a89896040516106ad9493929190610f08565b6000610a3d83610ae8565b8015610a4e5750610a4e8383610b4c565b90505b92915050565b6000546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690633dbb202b90610ab190869085908790600401611016565b600060405180830381600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b50505050505050565b6000610b14827f01ffc9a700000000000000000000000000000000000000000000000000000000610b4c565b8015610a515750610b45827fffffffff00000000000000000000000000000000000000000000000000000000610b4c565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff87169061753090610c06908690611092565b6000604051808303818686fa925050503d8060008114610c42576040519150601f19603f3d011682016040523d82523d6000602084013e610c47565b606091505b5091509150602081511015610c625760009350505050610a51565b818015610c7e575080806020019051810190610c7e91906110ae565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610caa57600080fd5b50565b803563ffffffff81168114610cc157600080fd5b919050565b60008083601f840112610cd857600080fd5b50813567ffffffffffffffff811115610cf057600080fd5b602083019150836020828501011115610d0857600080fd5b9250929050565b600080600080600060808688031215610d2757600080fd5b8535610d3281610c88565b945060208601359350610d4760408701610cad565b9250606086013567ffffffffffffffff811115610d6357600080fd5b610d6f88828901610cc6565b969995985093965092949392505050565b600080600080600080600060c0888a031215610d9b57600080fd5b8735610da681610c88565b96506020880135610db681610c88565b95506040880135610dc681610c88565b94506060880135610dd681610c88565b93506080880135925060a088013567ffffffffffffffff811115610df957600080fd5b610e058a828b01610cc6565b989b979a50959850939692959293505050565b60008060008060008060a08789031215610e3157600080fd5b8635610e3c81610c88565b95506020870135610e4c81610c88565b945060408701359350610e6160608801610cad565b9250608087013567ffffffffffffffff811115610e7d57600080fd5b610e8989828a01610cc6565b979a9699509497509295939492505050565b600060208284031215610ead57600080fd5b8151610eb881610c88565b9392505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610c7e606083018486610ebf565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152610f8e60c083018486610ebf565b9998505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152610fdb608083018486610ebf565b979650505050505050565b60005b83811015611001578181015183820152602001610fe9565b83811115611010576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260008351806060840152611051816080850160208801610fe6565b63ffffffff93909316604083015250601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160160800192915050565b600082516110a4818460208701610fe6565b9190910192915050565b6000602082840312156110c057600080fd5b81518015158114610eb857600080fdfea164736f6c6343000809000a

Block Transaction Difficulty Gas Used Reward
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.