Contract 0x4200000000000000000000000000000000000011 5

 

Contract Overview

Boba Network: OVM Sequencer Fee Vault
Balance:
62.872953307374161607 Ether

EtherValue:
$113,553.58 (@ $1,806.08/ETH)

Token:
My Name Tag:
Not Available, login to update

ContractCreator:
GENESIS at txn GENESIS_4200000000000000000000000000000000000011
Txn Hash Method
Block
From
To
Value
0xd78873e18be06313244fd4818868ad0097d79fce35f4c6adbc88f08220ba1f6bWithdraw6519672022-06-06 16:20:06288 days 13 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0002748531
0x54010da04d7678f2e0325a2a353409d460485a9569c59225853da90fce1f9c57Withdraw4669752022-04-11 20:04:58344 days 10 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0004559731
0x56fa2c9bfbd8075db593eb61213e87754f5299c1ae3fff893b023b5ca447778fWithdraw3035212022-01-26 23:58:58419 days 6 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0006770870521
0xad7e7aa2748582d846554e3ecf5e013cb0b0fe97eab40d966b37efb4f1cc02d3Withdraw2714332021-12-31 21:10:19445 days 8 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x6131386c34965a23c82563355b2d41562402decabf82725ed18167d1e22c0e90Withdraw2499322021-12-20 19:03:21456 days 11 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x05c2202c244ce8dec36a9ee7bc4092ad7041be0f4d3262b7bad27693ada0aec6Withdraw2405502021-12-16 1:59:03461 days 4 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x1a2e8e89f5d58e20c3c685dd72c4e24a1def55092bb3db0be1934eaab99a8db8Withdraw2287952021-12-08 23:17:19468 days 6 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x9969a963098ebb5eff0817aac8930ab6d307a8c27951fbd5d57c36ad609cb1c0Withdraw2189862021-12-05 6:34:17471 days 23 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0xf9ca509b60cc701c2b20f519ad2abccd0d6c73055157846c60f94fe511480cffWithdraw2080172021-12-02 18:19:05474 days 11 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x0f9c5f99cf66aa2e00791700f3350a07ce652de8f757f5e0577fe5dd6ec3c080Withdraw2035722021-12-01 19:58:17475 days 10 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x2502ae158a536556007c6526e5c79bf4cbc5d893870b212a7a587e4afd38cd02Withdraw1987492021-12-01 2:23:03476 days 3 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0xe17f9db9ce86cb046abce53159b8f58a7de6f8a8e1560495921b87c1b62c8dd0Withdraw1947732021-11-30 8:28:12476 days 21 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x991d811664c70862503d2f0bf45e670cd6acf3301674b0a3c0b7a0134331c309Withdraw1825112021-11-28 4:59:10479 days 1 hr agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0xe2f03bcb91045d4f749ea6a5f8180e936422b5c164dbd1ebcb078ba2e2474a9cWithdraw1728132021-11-26 19:42:51480 days 10 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x8002684c3326c9c5aaccbe76601b259c0c7cd534a1e10a4758529a0f3a184c8dWithdraw1637142021-11-25 18:52:05481 days 11 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x9b972b9923e0867eb48a20f923e9f6c5b4a2990a7c2ae7c8f3399130a37d7cfdWithdraw1532312021-11-24 19:24:04482 days 10 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0012015253259.025
0xb1f7251b7edd67f53f7cb554ac09a63280a4f24554a55e420442478eae534230Withdraw1421332021-11-23 23:24:10483 days 6 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x40f12d15a1924a5407e014233c592ecbb78b0cd8fa02ea3bac78202394613613Withdraw1309172021-11-23 4:31:24484 days 1 hr agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x326f5a7b0409d039784ea2f6336d32c3789c0cbf31f0dca0407cb8ee72ec5785Withdraw1230282021-11-22 18:27:22484 days 11 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x691026a57dd5bc4aae7d11ffcfe10ff132ea634521541df38edbd3a574d30bddWithdraw1046892021-11-21 23:59:20485 days 6 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x238069d0b21d2a8724cad3d9153f67009793b02017c640d5bb33ffe34e4b415bWithdraw957222021-11-21 17:40:13485 days 12 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x2b525bee9f5338152681d0b53c6c4580fb5047ac982d763742ae1ffc796a14a0Withdraw819402021-11-21 4:12:48486 days 1 hr agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x95e78310dd92982f6a3f83c4699b9e57b2128037d26c262cd5d08e016a063359Withdraw411532021-11-16 7:00:47490 days 23 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
0x2990c5e9e99f823ec9a75d717fa190bc1e36cdc85cce8d32f854ef1d8d5b67f2Withdraw230702021-11-15 3:57:34492 days 2 hrs agoBoba Network: Deployer IN Boba Network: OVM Sequencer Fee Vault0 Ether0.0013313310
GENESIS_42000000000000000000000000000000000000110x6080604002021-10-28 3:57:19510 days 2 hrs agoGENESIS IN  Create: OVM_SequencerFeeVault0 Ether00
[ Download CSV Export 
Parent Txn Hash Block From To Value
Latest 24 Withdrawals
L2 Txn Hash Value Token Status L1 Withdrawal Txn
0xd78873e18be06313244fd4818868ad0097d79fce35f4c6adbc88f08220ba1f6b2022-06-06 16:20:06288 days 13 hrs ago67.182695090393063467 Ether (ETH)Relayed0x60a8b2cb6c19875d2f614cc0e4c25aaa01d0fcafc1cb7db327fb9ecea60b1ce8
0x54010da04d7678f2e0325a2a353409d460485a9569c59225853da90fce1f9c572022-04-11 20:04:58344 days 10 hrs ago94.420189903881383449 Ether (ETH)Relayed0xd38e54882adc9129f57090d5f968713ebf1a9718dc2481d4abfa3758f21880a5
0x56fa2c9bfbd8075db593eb61213e87754f5299c1ae3fff893b023b5ca447778f2022-01-26 23:58:58419 days 6 hrs ago68.050334852582304968 Ether (ETH)Relayed0xe512e58d351381882eb16e665e2761265bc0b98f0f078a66a0e3d5632cf4642d
0xad7e7aa2748582d846554e3ecf5e013cb0b0fe97eab40d966b37efb4f1cc02d32021-12-31 21:10:19445 days 8 hrs ago60.314279587951194969 Ether (ETH)Relayed0x41a28c81a3327a60751d8f9a8cc04dd65ddc6ed8aa5865c298dd8c4b813498d6
0x6131386c34965a23c82563355b2d41562402decabf82725ed18167d1e22c0e902021-12-20 19:03:21456 days 11 hrs ago25.933384833372311353 Ether (ETH)Relayed0x6e9c38325266cd924e457baf6c507bdcc0bb81813b357acbd768d294a06e1dbf
0x05c2202c244ce8dec36a9ee7bc4092ad7041be0f4d3262b7bad27693ada0aec62021-12-16 1:59:03461 days 4 hrs ago45.408753331221917697 Ether (ETH)Relayed0x7d13d93f12c79ea3fa2ccf8341ddadf62364655622f0ad25c46f3ba73705d029
0x1a2e8e89f5d58e20c3c685dd72c4e24a1def55092bb3db0be1934eaab99a8db82021-12-08 23:17:19468 days 6 hrs ago38.334548012782342577 Ether (ETH)Relayed0x7f7898a225f6ddcc4f4c98c2fb57e41ee6919c3a68fccbe2f84c1460c63544cd
0x9969a963098ebb5eff0817aac8930ab6d307a8c27951fbd5d57c36ad609cb1c02021-12-05 6:34:17471 days 23 hrs ago46.594853793223391556 Ether (ETH)Relayed0x2e13c0348f871b2c2724306b0e6291e7882fe41dd24dd91158529812f0992525
0xf9ca509b60cc701c2b20f519ad2abccd0d6c73055157846c60f94fe511480cff2021-12-02 18:19:05474 days 11 hrs ago19.471858079987797092 Ether (ETH)Relayed0x6d2c813a786fbe12efbe509c3cc511a06c16d0989a2d1d4cc013f02c52a6d7f6
0x0f9c5f99cf66aa2e00791700f3350a07ce652de8f757f5e0577fe5dd6ec3c0802021-12-01 19:58:17475 days 10 hrs ago17.574607794393041629 Ether (ETH)Relayed0x817313fc612be95434f69bc64f7e890be1784cec8ffd798f2d03fad9378be582
0x2502ae158a536556007c6526e5c79bf4cbc5d893870b212a7a587e4afd38cd022021-12-01 2:23:03476 days 3 hrs ago16.519164925265232551 Ether (ETH)Relayed0x60906f77eb897f704220e1e2f4ea72c1fc9c1824a9677495fbcc3d90ecb22352
0xe17f9db9ce86cb046abce53159b8f58a7de6f8a8e1560495921b87c1b62c8dd02021-11-30 8:28:12476 days 21 hrs ago43.835896810664243742 Ether (ETH)Relayed0xfe865c585b9856c064effabd17b03a0aa75993847a9028e1436b568226765c8f
0x991d811664c70862503d2f0bf45e670cd6acf3301674b0a3c0b7a0134331c3092021-11-28 4:59:10479 days 1 hr ago30.227329098184865709 Ether (ETH)Relayed0x2e7167d7f5c01d65edc0f58a10c5930582f910dc8b6483fd4c4d1d6faa39839b
0xe2f03bcb91045d4f749ea6a5f8180e936422b5c164dbd1ebcb078ba2e2474a9c2021-11-26 19:42:51480 days 10 hrs ago32.613795118727342983 Ether (ETH)Relayed0x3f3832e0aa973756c31e5a60648334c28ed20704603c50ea6c2c7b97ccc8acf8
0x8002684c3326c9c5aaccbe76601b259c0c7cd534a1e10a4758529a0f3a184c8d2021-11-25 18:52:05481 days 11 hrs ago37.64637147222125261 Ether (ETH)Relayed0x2f276d47003da85a54635711e043f32a387805fcbdd2ba21968e79e7e3e84243
0x9b972b9923e0867eb48a20f923e9f6c5b4a2990a7c2ae7c8f3399130a37d7cfd2021-11-24 19:24:04482 days 10 hrs ago37.061317008425774883 Ether (ETH)Relayed0x0c1c8564ccac17a568b3cf721acbe4c99c25680489da176a022132af97ce5d1f
0xb1f7251b7edd67f53f7cb554ac09a63280a4f24554a55e420442478eae5342302021-11-23 23:24:10483 days 6 hrs ago29.626636267026705395 Ether (ETH)Relayed0xf94bc0f26d01b9a90d9ceb67dc89234021e6e39a67ca7f0c0add61749be05f8c
0x40f12d15a1924a5407e014233c592ecbb78b0cd8fa02ea3bac782023946136132021-11-23 4:31:24484 days 1 hr ago22.693992641156920432 Ether (ETH)Relayed0xe4e377f03597b983d66b70936f1da6bc4627098e7b98f64945da1e385104e13b
0x326f5a7b0409d039784ea2f6336d32c3789c0cbf31f0dca0407cb8ee72ec57852021-11-22 18:27:22484 days 11 hrs ago51.362579779641566057 Ether (ETH)Relayed0x6414fd939896040de8354e8ff56640d0c30ce3a3e22e0b5891109a0bb68b6466
0x691026a57dd5bc4aae7d11ffcfe10ff132ea634521541df38edbd3a574d30bdd2021-11-21 23:59:20485 days 6 hrs ago22.264173717918773023 Ether (ETH)Relayed0xad4dc12bf39d7a8d5c63ad2c0fcf8ed675e2c22e7c717cad4ad10d9549302356
0x238069d0b21d2a8724cad3d9153f67009793b02017c640d5bb33ffe34e4b415b2021-11-21 17:40:13485 days 12 hrs ago36.504511580441905021 Ether (ETH)Relayed0xc49c59e87bd6ef9c76039a55b603b1ccd724734c74e17997c974a7cb7b9e8092
0x2b525bee9f5338152681d0b53c6c4580fb5047ac982d763742ae1ffc796a14a02021-11-21 4:12:48486 days 1 hr ago113.494391533393243252 Ether (ETH)Relayed0xe5c857359de4d904dbd6cc4d44d7d9230038c6c31e483d270c9046c472d9a91a
0x95e78310dd92982f6a3f83c4699b9e57b2128037d26c262cd5d08e016a0633592021-11-16 7:00:47490 days 23 hrs ago35.463564470137229531 Ether (ETH)Relayed0x67020d39c007e758487d3f28b289738a6d0ebddc1af2bb96b5b23dc06013904b
0x2990c5e9e99f823ec9a75d717fa190bc1e36cdc85cce8d32f854ef1d8d5b67f22021-11-15 3:57:34492 days 2 hrs ago57.532393640410945167 Ether (ETH)Relayed0xea4b469166368e0fb6176ab1d46a560d956fac07dad23fe5c4957d5e9161bc37
[ Download CSV Export 
Loading

Contract Source Code Verified (Genesis Bytecode Match Only)

Contract Name:
OVM_SequencerFeeVault

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/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/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: @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: 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: @openzeppelin/contracts/utils/introspection/ERC165Checker.sol


// OpenZeppelin Contracts (last updated v4.8.0) (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
            supportsERC165InterfaceUnchecked(account, type(IERC165).interfaceId) &&
            !supportsERC165InterfaceUnchecked(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) && supportsERC165InterfaceUnchecked(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] = supportsERC165InterfaceUnchecked(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 (!supportsERC165InterfaceUnchecked(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 supportsERC165InterfaceUnchecked(address account, bytes4 interfaceId) internal view returns (bool) {
        // prepare call
        bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);

        // perform static call
        bool success;
        uint256 returnSize;
        uint256 returnValue;
        assembly {
            success := staticcall(30000, account, add(encodedParams, 0x20), mload(encodedParams), 0x00, 0x20)
            returnSize := returndatasize()
            returnValue := mload(0x00)
        }

        return success && returnSize >= 0x20 && returnValue > 0;
    }
}

// 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/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/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);
        }
    }
}

// File: packages/contracts/contracts/L2/predeploys/OVM_SequencerFeeVault.sol


pragma solidity ^0.8.9;

/* Library Imports */


/* Contract Imports */


/**
 * @title OVM_SequencerFeeVault
 * @dev Simple holding contract for fees paid to the Sequencer. Likely to be replaced in the future
 * but "good enough for now".
 */
contract OVM_SequencerFeeVault {
    /*************
     * Constants *
     *************/

    // Minimum ETH balance that can be withdrawn in a single withdrawal.
    uint256 public constant MIN_WITHDRAWAL_AMOUNT = 15 ether;

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

    // Address on L1 that will hold the fees once withdrawn. Dynamically initialized within l2geth.
    address public l1FeeWallet;

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

    /**
     * @param _l1FeeWallet Initial address for the L1 wallet that will hold fees once withdrawn.
     * Currently HAS NO EFFECT in production because l2geth will mutate this storage slot during
     * the genesis block. This is ONLY for testing purposes.
     */
    constructor(address _l1FeeWallet) {
        l1FeeWallet = _l1FeeWallet;
    }

    /************
     * Fallback *
     ************/

    receive() external payable {}

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

    function withdraw() public {
        require(
            address(this).balance >= MIN_WITHDRAWAL_AMOUNT,
            // solhint-disable-next-line max-line-length
            "OVM_SequencerFeeVault: withdrawal amount must be greater than minimum withdrawal amount"
        );

        L2StandardBridge(Lib_PredeployAddresses.L2_STANDARD_BRIDGE).withdrawTo(
            Lib_PredeployAddresses.OVM_ETH,
            l1FeeWallet,
            address(this).balance,
            0,
            bytes("")
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs": [{"internalType": "address","name": "_l1FeeWallet","type": "address"}],"stateMutability": "nonpayable","type": "constructor"},{"inputs": [],"name": "MIN_WITHDRAWAL_AMOUNT","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "l1FeeWallet","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "withdraw","outputs": [],"stateMutability": "nonpayable","type": "function"},{"stateMutability": "payable","type": "receive"}]

6080604052600436106100385760003560e01c80633ccfd60b14610044578063d3e5792b1461005b578063d4ff92181461008a57600080fd5b3661003f57005b600080fd5b34801561005057600080fd5b506100596100dc565b005b34801561006757600080fd5b5061007767d02ab486cedc000081565b6040519081526020015b60405180910390f35b34801561009657600080fd5b506000546100b79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610081565b67d02ab486cedc000047101561019e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605760248201527f4f564d5f53657175656e6365724665655661756c743a2077697468647261776160448201527f6c20616d6f756e74206d7573742062652067726561746572207468616e206d6960648201527f6e696d756d207769746864726177616c20616d6f756e74000000000000000000608482015260a40160405180910390fd5b600080546040805160208101825283815290517fa3a795480000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000109363a3a7954893610230937342000000000000000000000000000000000000069373ffffffffffffffffffffffffffffffffffffffff909216924792909190600401610264565b600060405180830381600087803b15801561024a57600080fd5b505af115801561025e573d6000803e3d6000fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835260208188168185015286604085015263ffffffff8616606085015260a06080850152845191508160a085015260005b828110156102cb5785810182015185820160c0015281016102af565b828111156102dd57600060c084870101525b5050601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160c001969550505050505056fea164736f6c6343000809000a

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.