ETH Price: $2,941.00 (-0.57%)

Contract

0xD8c6dD978a3768F7DDfE3A9aAD2c3Fd75Fa9B6Fd

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

Transaction Hash
Block
From
To
Deposit149765662022-06-18 8:41:121317 days ago1655541672IN
Across Protocol: Deposit Box
0 ETH0.000211216287 ETH0.35086636
Bridge Tokens149425852022-06-17 23:16:391317 days ago1655507799IN
Across Protocol: Deposit Box
0 ETH0.00020830527 ETH0.42456
Bridge Tokens149425842022-06-17 23:16:391317 days ago1655507799IN
Across Protocol: Deposit Box
0 ETH0.000208010626 ETH0.42456
Bridge Tokens149425832022-06-17 23:16:391317 days ago1655507799IN
Across Protocol: Deposit Box
0 ETH0.000208515852 ETH0.42456
Set Enable Depos...149410742022-06-17 22:39:491317 days ago1655505589IN
Across Protocol: Deposit Box
0 ETH0 ETH0
Set Enable Depos...149410742022-06-17 22:39:491317 days ago1655505589IN
Across Protocol: Deposit Box
0 ETH0 ETH0
Set Enable Depos...149410742022-06-17 22:39:491317 days ago1655505589IN
Across Protocol: Deposit Box
0 ETH0 ETH0
Set Enable Depos...149410742022-06-17 22:39:491317 days ago1655505589IN
Across Protocol: Deposit Box
0 ETH0 ETH0
Set Enable Depos...149410742022-06-17 22:39:491317 days ago1655505589IN
Across Protocol: Deposit Box
0 ETH0 ETH0
Set Enable Depos...149410742022-06-17 22:39:491317 days ago1655505589IN
Across Protocol: Deposit Box
0 ETH0 ETH0
Bridge Tokens149161462022-06-17 16:46:321317 days ago1655484392IN
Across Protocol: Deposit Box
0 ETH0.000180025826 ETH0.36694508
Deposit149161162022-06-17 16:46:141317 days ago1655484374IN
Across Protocol: Deposit Box
0 ETH0.000258947274 ETH0.36694508
Bridge Tokens148719052022-06-17 7:54:401318 days ago1655452480IN
Across Protocol: Deposit Box
0 ETH0.000176823351 ETH0.3604175
Deposit148718742022-06-17 7:53:331318 days ago1655452413IN
Across Protocol: Deposit Box
0 ETH0.000254838243 ETH0.3604175
Bridge Tokens148112532022-06-16 15:14:041318 days ago1655392444IN
Across Protocol: Deposit Box
0 ETH0.000268459813 ETH0.54413816
Deposit148111962022-06-16 15:12:431318 days ago1655392363IN
Across Protocol: Deposit Box
0 ETH0.000383989595 ETH0.54413816
Bridge Tokens146891612022-06-15 9:10:141320 days ago1655284214IN
Across Protocol: Deposit Box
0 ETH0.000296394377 ETH0.60075841
Deposit146890112022-06-15 9:08:011320 days ago1655284081IN
Across Protocol: Deposit Box
0 ETH0.000424774648 ETH0.60075841
Bridge Tokens145988272022-06-14 11:29:211320 days ago1655206161IN
Across Protocol: Deposit Box
0 ETH0.000309479307 ETH0.63080899
Deposit145987062022-06-14 11:28:491320 days ago1655206129IN
Across Protocol: Deposit Box
0 ETH0.000445151813 ETH0.63080899
Bridge Tokens145832352022-06-14 7:30:191321 days ago1655191819IN
Across Protocol: Deposit Box
0 ETH0.000352090881 ETH0.7261013
Bridge Tokens145521312022-06-14 0:56:141321 days ago1655168174IN
Across Protocol: Deposit Box
0 ETH0.000351948044 ETH0.714595
Bridge Tokens144994662022-06-13 11:53:091321 days ago1655121189IN
Across Protocol: Deposit Box
0 ETH0.000620562028 ETH1.26133826
Deposit144994142022-06-13 11:53:091321 days ago1655121189IN
Across Protocol: Deposit Box
0 ETH0.000890106231 ETH1.26133826
Bridge Tokens144162232022-06-12 15:06:031322 days ago1655046363IN
Across Protocol: Deposit Box
0 ETH0.000176476107 ETH0.36019648
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
153454222022-06-22 7:41:011313 days ago1655883661
Across Protocol: Deposit Box
0.159 ETH
153454212022-06-22 7:41:011313 days ago1655883661
Across Protocol: Deposit Box
0.1575 ETH
149425852022-06-17 23:16:391317 days ago1655507799
Across Protocol: Deposit Box
0 ETH
149425852022-06-17 23:16:391317 days ago1655507799
Across Protocol: Deposit Box
0 ETH
149425842022-06-17 23:16:391317 days ago1655507799
Across Protocol: Deposit Box
0 ETH
149425842022-06-17 23:16:391317 days ago1655507799
Across Protocol: Deposit Box
0 ETH
149425832022-06-17 23:16:391317 days ago1655507799
Across Protocol: Deposit Box
0 ETH
149425832022-06-17 23:16:391317 days ago1655507799
Across Protocol: Deposit Box
0 ETH
149410742022-06-17 22:39:491317 days ago1655505589
Across Protocol: Deposit Box
0 ETH
149410742022-06-17 22:39:491317 days ago1655505589
Across Protocol: Deposit Box
0 ETH
149410742022-06-17 22:39:491317 days ago1655505589
Across Protocol: Deposit Box
0 ETH
149410742022-06-17 22:39:491317 days ago1655505589
Across Protocol: Deposit Box
0 ETH
149410742022-06-17 22:39:491317 days ago1655505589
Across Protocol: Deposit Box
0 ETH
149410742022-06-17 22:39:491317 days ago1655505589
Across Protocol: Deposit Box
0 ETH
149161462022-06-17 16:46:321317 days ago1655484392
Across Protocol: Deposit Box
0 ETH
149161462022-06-17 16:46:321317 days ago1655484392
Across Protocol: Deposit Box
0 ETH
149161162022-06-17 16:46:141317 days ago1655484374
Across Protocol: Deposit Box
0 ETH
148719052022-06-17 7:54:401318 days ago1655452480
Across Protocol: Deposit Box
0 ETH
148719052022-06-17 7:54:401318 days ago1655452480
Across Protocol: Deposit Box
0 ETH
148718742022-06-17 7:53:331318 days ago1655452413
Across Protocol: Deposit Box
0 ETH
148112532022-06-16 15:14:041318 days ago1655392444
Across Protocol: Deposit Box
0 ETH
148112532022-06-16 15:14:041318 days ago1655392444
Across Protocol: Deposit Box
0 ETH
148111962022-06-16 15:12:431318 days ago1655392363
Across Protocol: Deposit Box
0 ETH
146891612022-06-15 9:10:141320 days ago1655284214
Across Protocol: Deposit Box
0 ETH
146891612022-06-15 9:10:141320 days ago1655284214
Across Protocol: Deposit Box
0 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AVM_BridgeDepositBox

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2021-11-03
*/

// Sources flattened with hardhat v2.5.0 https://hardhat.org

// File contracts/common/implementation/Timer.sol


// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity ^0.8.0;

/**
 * @title Universal store of current contract time for testing environments.
 */
contract Timer {
    uint256 private currentTime;

    constructor() {
        currentTime = block.timestamp; // solhint-disable-line not-rely-on-time
    }

    /**
     * @notice Sets the current time.
     * @dev Will revert if not running in test mode.
     * @param time timestamp to set `currentTime` to.
     */
    function setCurrentTime(uint256 time) external {
        currentTime = time;
    }

    /**
     * @notice Gets the currentTime variable set in the Timer.
     * @return uint256 for the current Testable timestamp.
     */
    function getCurrentTime() public view returns (uint256) {
        return currentTime;
    }
}


// File contracts/common/implementation/Testable.sol




/**
 * @title Base class that provides time overrides, but only if being run in test mode.
 */
abstract contract Testable {
    // If the contract is being run in production, then `timerAddress` will be the 0x0 address.
    // Note: this variable should be set on construction and never modified.
    address public timerAddress;

    /**
     * @notice Constructs the Testable contract. Called by child contracts.
     * @param _timerAddress Contract that stores the current time in a testing environment.
     * Must be set to 0x0 for production environments that use live time.
     */
    constructor(address _timerAddress) {
        timerAddress = _timerAddress;
    }

    /**
     * @notice Reverts if not running in test mode.
     */
    modifier onlyIfTest {
        require(timerAddress != address(0x0));
        _;
    }

    /**
     * @notice Sets the current time.
     * @dev Will revert if not running in test mode.
     * @param time timestamp to set current Testable time to.
     */
    function setCurrentTime(uint256 time) external onlyIfTest {
        Timer(timerAddress).setCurrentTime(time);
    }

    /**
     * @notice Gets the current time. Will return the last time set in `setCurrentTime` if running in test mode.
     * Otherwise, it will return the block timestamp.
     * @return uint for the current Testable timestamp.
     */
    function getCurrentTime() public view virtual returns (uint256) {
        if (timerAddress != address(0x0)) {
            return Timer(timerAddress).getCurrentTime();
        } else {
            return block.timestamp; // solhint-disable-line not-rely-on-time
        }
    }
}


// File contracts/common/implementation/Lockable.sol




/**
 * @title A contract that provides modifiers to prevent reentrancy to state-changing and view-only methods. This contract
 * is inspired by https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/ReentrancyGuard.sol
 * and https://github.com/balancer-labs/balancer-core/blob/master/contracts/BPool.sol.
 */
contract Lockable {
    bool private _notEntered;

    constructor() {
        // Storing an initial non-zero value makes deployment a bit more expensive, but in exchange the refund on every
        // call to nonReentrant will be lower in amount. Since refunds are capped to a percentage of the total
        // transaction's gas, it is best to keep them low in cases like this one, to increase the likelihood of the full
        // refund coming into effect.
        _notEntered = true;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant` function is not supported. It is possible to
     * prevent this from happening by making the `nonReentrant` function external, and making it call a `private`
     * function that does the actual state modification.
     */
    modifier nonReentrant() {
        _preEntranceCheck();
        _preEntranceSet();
        _;
        _postEntranceReset();
    }

    /**
     * @dev Designed to prevent a view-only method from being re-entered during a call to a `nonReentrant()` state-changing method.
     */
    modifier nonReentrantView() {
        _preEntranceCheck();
        _;
    }

    // Internal methods are used to avoid copying the require statement's bytecode to every `nonReentrant()` method.
    // On entry into a function, `_preEntranceCheck()` should always be called to check if the function is being
    // re-entered. Then, if the function modifies state, it should call `_postEntranceSet()`, perform its logic, and
    // then call `_postEntranceReset()`.
    // View-only methods can simply call `_preEntranceCheck()` to make sure that it is not being re-entered.
    function _preEntranceCheck() internal view {
        // On the first call to nonReentrant, _notEntered will be true
        require(_notEntered, "ReentrancyGuard: reentrant call");
    }

    function _preEntranceSet() internal {
        // Any calls to nonReentrant after this point will fail
        _notEntered = false;
    }

    function _postEntranceReset() internal {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _notEntered = true;
    }
}


// File contracts/insured-bridge/BridgeDepositBox.sol





// Define some interfaces and helper libraries. This is temporary until we can bump the solidity version in these
// contracts to 0.8.x and import the rest of these libs from other UMA contracts in the repo.
library TokenHelper {
    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "TokenHelper::transferFrom: transferFrom failed"
        );
    }
}

interface TokenLike {
    function balanceOf(address guy) external returns (uint256 wad);
}

interface WETH9Like {
    function deposit() external payable;
}

/**
 * @title OVM Bridge Deposit Box.
 * @notice Accepts deposits on Optimism L2 to relay to Ethereum L1 as part of the UMA insured bridge system.
 */

abstract contract BridgeDepositBox is Testable, Lockable {
    /*************************************
     *  OVM DEPOSIT BOX DATA STRUCTURES  *
     *************************************/

    // ChainID of the L2 this deposit box is deployed on.
    uint256 public chainId;

    // Address of WETH on L1. If the deposited token maps to this L1 token then wrap ETH to WETH on the users behalf.
    address public l1Weth;

    // Track the total number of deposits. Used as a unique identifier for bridged transfers.
    uint256 public numberOfDeposits;

    struct L2TokenRelationships {
        address l1Token;
        address l1BridgePool;
        uint64 lastBridgeTime;
        bool depositsEnabled;
    }

    // Mapping of whitelisted L2Token to L2TokenRelationships. Contains L1 TokenAddress and the last time this token
    // type was bridged. Used to rate limit bridging actions to rate limit withdraws to L1.
    mapping(address => L2TokenRelationships) public whitelistedTokens;

    // Minimum time that must elapse between bridging actions for a given token. Used to rate limit bridging back to L1.
    uint64 public minimumBridgingDelay;

    /****************************************
     *                EVENTS                *
     ****************************************/

    event SetMinimumBridgingDelay(uint64 newMinimumBridgingDelay);
    event WhitelistToken(address l1Token, address l2Token, uint64 lastBridgeTime, address bridgePool);
    event DepositsEnabled(address l2Token, bool depositsEnabled);
    event FundsDeposited(
        uint256 chainId,
        uint256 depositId,
        address l1Recipient,
        address l2Sender,
        address l1Token,
        address l2Token,
        uint256 amount,
        uint64 slowRelayFeePct,
        uint64 instantRelayFeePct,
        uint64 quoteTimestamp
    );
    event TokensBridged(address indexed l2Token, uint256 numberOfTokensBridged, uint256 l1Gas, address indexed caller);

    /****************************************
     *               MODIFIERS              *
     ****************************************/

    modifier onlyIfDepositsEnabled(address l2Token) {
        require(whitelistedTokens[l2Token].depositsEnabled, "Contract is disabled");
        _;
    }

    /**
     * @notice Construct the Bridge Deposit Box
     * @param _minimumBridgingDelay Minimum seconds that must elapse between L2 -> L1 token transfer to prevent dos.
     * @param _chainId Chain identifier for the Bridge deposit box.
     * @param _l1Weth Address of Weth on L1. Used to inform if the deposit should wrap ETH to WETH, if deposit is ETH.
     * @param timerAddress Timer used to synchronize contract time in testing. Set to 0x000... in production.
     */
    constructor(
        uint64 _minimumBridgingDelay,
        uint256 _chainId,
        address _l1Weth,
        address timerAddress
    ) Testable(timerAddress) {
        _setMinimumBridgingDelay(_minimumBridgingDelay);
        chainId = _chainId;
        l1Weth = _l1Weth;
    }

    /**************************************
     *          ADMIN FUNCTIONS           *
     **************************************/

    /**
     * @notice Changes the minimum time in seconds that must elapse between withdraws from L2 -> L1.
     * @param newMinimumBridgingDelay the new minimum delay.
     */
    function _setMinimumBridgingDelay(uint64 newMinimumBridgingDelay) internal {
        minimumBridgingDelay = newMinimumBridgingDelay;
        emit SetMinimumBridgingDelay(minimumBridgingDelay);
    }

    /**
     * @notice Enables L1 owner to whitelist a L1 Token <-> L2 Token pair for bridging.
     * @param l1Token Address of the canonical L1 token. This is the token users will receive on Ethereum.
     * @param l2Token Address of the L2 token representation. This is the token users would deposit on optimism.
     * @param l1BridgePool Address of the L1 withdrawal pool linked to this L2+L1 token.
     */
    function _whitelistToken(
        address l1Token,
        address l2Token,
        address l1BridgePool
    ) internal {
        whitelistedTokens[l2Token] = L2TokenRelationships({
            l1Token: l1Token,
            l1BridgePool: l1BridgePool,
            lastBridgeTime: uint64(getCurrentTime()),
            depositsEnabled: true
        });

        emit WhitelistToken(l1Token, l2Token, uint64(getCurrentTime()), l1BridgePool);
    }

    /**
     * @notice L1 owner can enable/disable deposits for a whitelisted token.
     * @param l2Token address of L2 token to enable/disable deposits for.
     * @param depositsEnabled bool to set if the deposit box should accept/reject deposits.
     */
    function _setEnableDeposits(address l2Token, bool depositsEnabled) internal {
        whitelistedTokens[l2Token].depositsEnabled = depositsEnabled;
        emit DepositsEnabled(l2Token, depositsEnabled);
    }

    /**************************************
     *         DEPOSITOR FUNCTIONS        *
     **************************************/

    /**
     * @notice Called by L2 user to bridge funds between L2 and L1.
     * @dev Emits the `FundsDeposited` event which relayers listen for as part of the bridging action.
     * @dev The caller must first approve this contract to spend `amount` of `l2Token`.
     * @param l1Recipient L1 address that should receive the tokens.
     * @param l2Token L2 token to deposit.
     * @param amount How many L2 tokens should be deposited.
     * @param slowRelayFeePct Max fraction of `amount` that the depositor is willing to pay as a slow relay fee.
     * @param instantRelayFeePct Fraction of `amount` that the depositor is willing to pay as an instant relay fee.
     * @param quoteTimestamp Timestamp, at which the depositor will be quoted for L1 liquidity. This enables the
     *    depositor to know the L1 fees before submitting their deposit. Must be within 10 mins of the current time.
     */
    function deposit(
        address l1Recipient,
        address l2Token,
        uint256 amount,
        uint64 slowRelayFeePct,
        uint64 instantRelayFeePct,
        uint64 quoteTimestamp
    ) public payable onlyIfDepositsEnabled(l2Token) nonReentrant() {
        require(isWhitelistToken(l2Token), "deposit token not whitelisted");
        // We limit the sum of slow and instant relay fees to 50% to prevent the user spending all their funds on fees.
        // The realizedLPFeePct on L1 is limited to 50% so the total spent on fees does not ever exceed 100%.
        require(slowRelayFeePct <= 0.25e18, "slowRelayFeePct must be <= 25%");
        require(instantRelayFeePct <= 0.25e18, "instantRelayFeePct must be <= 25%");

        // Note that the OVM's notion of `block.timestamp` is different to the main ethereum L1 EVM. The OVM timestamp
        // corresponds to the L1 timestamp of the last confirmed L1 ⇒ L2 transaction. The quoteTime must be within 10
        // mins of the current time to allow for this variance.
        // Note also that `quoteTimestamp` cannot be less than 10 minutes otherwise the following arithmetic can result
        // in underflow. This isn't a problem as the deposit will revert, but the error might be unexpected for clients.
        // Consider requiring `quoteTimestamp >= 10 minutes`.
        require(
            getCurrentTime() >= quoteTimestamp - 10 minutes && getCurrentTime() <= quoteTimestamp + 10 minutes,
            "deposit mined after deadline"
        );
        // If the address of the L1 token is the l1Weth and there is a msg.value with the transaction then the user
        // is sending ETH. In this case, the ETH should be deposited to WETH, which is then bridged to L1.
        if (whitelistedTokens[l2Token].l1Token == l1Weth && msg.value > 0) {
            require(msg.value == amount, "msg.value must match amount");
            WETH9Like(address(l2Token)).deposit{ value: msg.value }();
        }
        // Else, it is a normal ERC20. In this case pull the token from the users wallet as per normal.
        // Note: this includes the case where the L2 user has WETH (already wrapped ETH) and wants to bridge them. In
        // this case the msg.value will be set to 0, indicating a "normal" ERC20 bridging action.
        else TokenHelper.safeTransferFrom(l2Token, msg.sender, address(this), amount);

        emit FundsDeposited(
            chainId,
            numberOfDeposits, // depositId: the current number of deposits acts as a deposit ID (nonce).
            l1Recipient,
            msg.sender,
            whitelistedTokens[l2Token].l1Token,
            l2Token,
            amount,
            slowRelayFeePct,
            instantRelayFeePct,
            quoteTimestamp
        );

        numberOfDeposits += 1;
    }

    /**************************************
     *           VIEW FUNCTIONS           *
     **************************************/

    /**
     * @notice Checks if a given L2 token is whitelisted.
     * @dev Check the whitelisted token's `lastBridgeTime` parameter since its guaranteed to be != 0 once
     * the token has been whitelisted.
     * @param l2Token L2 token to check against the whitelist.
     * @return true if token is whitelised.
     */
    function isWhitelistToken(address l2Token) public view returns (bool) {
        return whitelistedTokens[l2Token].lastBridgeTime != 0;
    }

    function _hasEnoughTimeElapsedToBridge(address l2Token) internal view returns (bool) {
        return getCurrentTime() > whitelistedTokens[l2Token].lastBridgeTime + minimumBridgingDelay;
    }

    /**
     * @notice Designed to be called by implementing contract in `bridgeTokens` method which sends this contract's
     * balance of tokens from L2 to L1 via the canonical token bridge. Tokens that can be bridged are whitelisted
     * and have had enough time elapsed since the latest bridge (or the time at which at was whitelisted).
     * @dev This function is also public for caller convenience.
     * @param l2Token L2 token to check bridging status.
     * @return true if token is whitelised and enough time has elapsed since the previous bridge.
     */
    function canBridge(address l2Token) public view returns (bool) {
        return isWhitelistToken(l2Token) && _hasEnoughTimeElapsedToBridge(l2Token);
    }
}


// File contracts/external/avm/AVM_CrossDomainEnabled.sol

// Copied logic from https://github.com/makerdao/arbitrum-dai-bridge/blob/34acc39bc6f3a2da0a837ea3c5dbc634ec61c7de/contracts/l2/L2CrossDomainEnabled.sol
// with a change to the solidity version.



abstract contract AVM_CrossDomainEnabled {
    modifier onlyFromCrossDomainAccount(address l1Counterpart) {
        require(msg.sender == applyL1ToL2Alias(l1Counterpart), "ONLY_COUNTERPART_GATEWAY");
        _;
    }

    uint160 constant offset = uint160(0x1111000000000000000000000000000000001111);

    // l1 addresses are transformed during l1->l2 calls. see https://developer.offchainlabs.com/docs/l1_l2_messages#address-aliasing for more information.
    function applyL1ToL2Alias(address l1Address) internal pure returns (address l2Address) {
        l2Address = address(uint160(l1Address) + offset);
    }
}


// File contracts/insured-bridge/avm/AVM_BridgeDepositBox.sol





interface StandardBridgeLike {
    function outboundTransfer(
        address _l1Token,
        address _to,
        uint256 _amount,
        bytes calldata _data
    ) external payable returns (bytes memory);
}

/**
 * @notice AVM specific bridge deposit box.
 * @dev Uses AVM cross-domain-enabled logic for access control.
 */

contract AVM_BridgeDepositBox is BridgeDepositBox, AVM_CrossDomainEnabled {
    // Address of the L1 contract that acts as the owner of this Bridge deposit box.
    address public crossDomainAdmin;

    // Address of the Arbitrum L2 token gateway.
    address public l2GatewayRouter;

    event SetXDomainAdmin(address indexed newAdmin);

    /**
     * @notice Construct the Arbitrum Bridge Deposit Box
     * @param _l2GatewayRouter Address of the Arbitrum L2 token gateway router for sending tokens from L2->L1.
     * @param _crossDomainAdmin Address of the L1 contract that can call admin functions on this contract from L1.
     * @param _minimumBridgingDelay Minimum second that must elapse between L2->L1 token transfer to prevent dos.
     * @param _chainId L2 Chain identifier this deposit box is deployed on.
     * @param _l1Weth Address of Weth on L1. Used to inform if the deposit should wrap ETH to WETH, if deposit is ETH.
     * @param timerAddress Timer used to synchronize contract time in testing. Set to 0x000... in production.
     */
    constructor(
        address _l2GatewayRouter,
        address _crossDomainAdmin,
        uint64 _minimumBridgingDelay,
        uint256 _chainId,
        address _l1Weth,
        address timerAddress
    ) BridgeDepositBox(_minimumBridgingDelay, _chainId, _l1Weth, timerAddress) {
        l2GatewayRouter = _l2GatewayRouter;
        _setCrossDomainAdmin(_crossDomainAdmin);
    }

    /**************************************
     *          ADMIN FUNCTIONS           *
     **************************************/

    /**
     * @notice Changes the L1 contract that can trigger admin functions on this L2 deposit deposit box.
     * @dev This should be set to the address of the L1 contract that ultimately relays a cross-domain message, which
     * is expected to be the Arbitrum_Messenger.
     * @dev Only callable by the existing crossDomainAdmin via the Arbitrum cross domain messenger.
     * @param newCrossDomainAdmin address of the new L1 admin contract.
     */
    function setCrossDomainAdmin(address newCrossDomainAdmin) public onlyFromCrossDomainAccount(crossDomainAdmin) {
        _setCrossDomainAdmin(newCrossDomainAdmin);
    }

    /**
     * @notice Changes the minimum time in seconds that must elapse between withdraws from L2->L1.
     * @dev Only callable by the existing crossDomainAdmin via the Arbitrum cross domain messenger.
     * @param newMinimumBridgingDelay the new minimum delay.
     */
    function setMinimumBridgingDelay(uint64 newMinimumBridgingDelay)
        public
        onlyFromCrossDomainAccount(crossDomainAdmin)
    {
        _setMinimumBridgingDelay(newMinimumBridgingDelay);
    }

    /**
     * @notice Enables L1 owner to whitelist a L1 Token <-> L2 Token pair for bridging.
     * @dev Only callable by the existing crossDomainAdmin via the Arbitrum cross domain messenger.
     * @param l1Token Address of the canonical L1 token. This is the token users will receive on Ethereum.
     * @param l2Token Address of the L2 token representation. This is the token users would deposit on Arbitrum.
     * @param l1BridgePool Address of the L1 withdrawal pool linked to this L2+L1 token.
     */
    function whitelistToken(
        address l1Token,
        address l2Token,
        address l1BridgePool
    ) public onlyFromCrossDomainAccount(crossDomainAdmin) {
        _whitelistToken(l1Token, l2Token, l1BridgePool);
    }

    /**
     * @notice L1 owner can enable/disable deposits for a whitelisted token.
     * @dev Only callable by the existing crossDomainAdmin via the Arbitrum cross domain messenger.
     * @param l2Token address of L2 token to enable/disable deposits for.
     * @param depositsEnabled bool to set if the deposit box should accept/reject deposits.
     */
    function setEnableDeposits(address l2Token, bool depositsEnabled)
        public
        onlyFromCrossDomainAccount(crossDomainAdmin)
    {
        _setEnableDeposits(l2Token, depositsEnabled);
    }

    /**************************************
     *          RELAYER FUNCTIONS         *
     **************************************/

    /**
     * @notice Called by relayer (or any other EOA) to move a batch of funds from the deposit box, through the canonical
     *      token bridge, to the L1 Withdraw box.
     * @dev The frequency that this function can be called is rate limited by the `minimumBridgingDelay` to prevent spam
     *      on L1 as the finalization of a L2->L1 tx is quite expensive.
     * @param l2Token L2 token to relay over the canonical bridge.
     * @param l1Gas Unused by Arbitrum, but included for potential forward compatibility considerations.
     */
    function bridgeTokens(address l2Token, uint32 l1Gas) public {
        uint256 bridgeDepositBoxBalance = TokenLike(l2Token).balanceOf(address(this));
        require(bridgeDepositBoxBalance > 0, "can't bridge zero tokens");
        require(canBridge(l2Token), "non-whitelisted token or last bridge too recent");

        whitelistedTokens[l2Token].lastBridgeTime = uint64(getCurrentTime());

        StandardBridgeLike(l2GatewayRouter).outboundTransfer(
            whitelistedTokens[l2Token].l1Token, // _l1Token. Address of the L1 token to bridge over.
            whitelistedTokens[l2Token].l1BridgePool, // _to. Withdraw, over the bridge, to the l1 withdraw contract.
            bridgeDepositBoxBalance, // _amount. Send the full balance of the deposit box to bridge.
            "" // _data. We don't need to send any data for the bridging action.
        );

        emit TokensBridged(l2Token, bridgeDepositBoxBalance, l1Gas, msg.sender);
    }

    /**************************************
     *         INTERNAL FUNCTIONS         *
     **************************************/

    function _setCrossDomainAdmin(address newCrossDomainAdmin) internal {
        require(newCrossDomainAdmin != address(0), "Empty address");
        crossDomainAdmin = newCrossDomainAdmin;
        emit SetXDomainAdmin(crossDomainAdmin);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_l2GatewayRouter","type":"address"},{"internalType":"address","name":"_crossDomainAdmin","type":"address"},{"internalType":"uint64","name":"_minimumBridgingDelay","type":"uint64"},{"internalType":"uint256","name":"_chainId","type":"uint256"},{"internalType":"address","name":"_l1Weth","type":"address"},{"internalType":"address","name":"timerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"l2Token","type":"address"},{"indexed":false,"internalType":"bool","name":"depositsEnabled","type":"bool"}],"name":"DepositsEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositId","type":"uint256"},{"indexed":false,"internalType":"address","name":"l1Recipient","type":"address"},{"indexed":false,"internalType":"address","name":"l2Sender","type":"address"},{"indexed":false,"internalType":"address","name":"l1Token","type":"address"},{"indexed":false,"internalType":"address","name":"l2Token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"slowRelayFeePct","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"instantRelayFeePct","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"quoteTimestamp","type":"uint64"}],"name":"FundsDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"newMinimumBridgingDelay","type":"uint64"}],"name":"SetMinimumBridgingDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"SetXDomainAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"l2Token","type":"address"},{"indexed":false,"internalType":"uint256","name":"numberOfTokensBridged","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"l1Gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"TokensBridged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"l1Token","type":"address"},{"indexed":false,"internalType":"address","name":"l2Token","type":"address"},{"indexed":false,"internalType":"uint64","name":"lastBridgeTime","type":"uint64"},{"indexed":false,"internalType":"address","name":"bridgePool","type":"address"}],"name":"WhitelistToken","type":"event"},{"inputs":[{"internalType":"address","name":"l2Token","type":"address"},{"internalType":"uint32","name":"l1Gas","type":"uint32"}],"name":"bridgeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"l2Token","type":"address"}],"name":"canBridge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"crossDomainAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"l1Recipient","type":"address"},{"internalType":"address","name":"l2Token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint64","name":"slowRelayFeePct","type":"uint64"},{"internalType":"uint64","name":"instantRelayFeePct","type":"uint64"},{"internalType":"uint64","name":"quoteTimestamp","type":"uint64"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getCurrentTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"l2Token","type":"address"}],"name":"isWhitelistToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l1Weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2GatewayRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumBridgingDelay","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newCrossDomainAdmin","type":"address"}],"name":"setCrossDomainAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setCurrentTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"l2Token","type":"address"},{"internalType":"bool","name":"depositsEnabled","type":"bool"}],"name":"setEnableDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"newMinimumBridgingDelay","type":"uint64"}],"name":"setMinimumBridgingDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"l1Token","type":"address"},{"internalType":"address","name":"l2Token","type":"address"},{"internalType":"address","name":"l1BridgePool","type":"address"}],"name":"whitelistToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedTokens","outputs":[{"internalType":"address","name":"l1Token","type":"address"},{"internalType":"address","name":"l1BridgePool","type":"address"},{"internalType":"uint64","name":"lastBridgeTime","type":"uint64"},{"internalType":"bool","name":"depositsEnabled","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200204a3803806200204a8339810160408190526200003491620001ce565b600080546001600160a81b0319166001600160a01b03831617600160a01b179055838383836200006484620000b2565b50600191909155600280546001600160a01b03199081166001600160a01b03938416179091556006805490911691891691909117905550620000a68562000106565b50505050505062000255565b600580546001600160401b0319166001600160401b0383169081179091556040519081527f3f27163d4f4fe7a27a9d79683adf471b236f49fe9e8808717b3cc3c05a27611f9060200160405180910390a150565b6001600160a01b038116620001515760405162461bcd60e51b815260206004820152600d60248201526c456d707479206164647265737360981b604482015260640160405180910390fd5b60058054600160401b600160e01b031916680100000000000000006001600160a01b0384811682029290921792839055604051920416907fa9e8c42c9e7fca7f62755189a16b2f5314d43d8fb24e91ba54e6d65f9314e84990600090a250565b80516001600160a01b0381168114620001c957600080fd5b919050565b60008060008060008060c08789031215620001e857600080fd5b620001f387620001b1565b95506200020360208801620001b1565b60408801519095506001600160401b03811681146200022157600080fd5b606088015190945092506200023960808801620001b1565b91506200024960a08801620001b1565b90509295509295509295565b611de580620002656000396000f3fe6080604052600436106101295760003560e01c80639a8a0592116100a5578063c2d9dca911610074578063daf9c21011610059578063daf9c21014610386578063de7eba7814610465578063fbb9fcf71461048557600080fd5b8063c2d9dca914610346578063c83568591461035957600080fd5b80639a8a0592146102c05780639bfd2cdc146102d6578063a1244c67146102f6578063b2d6f4d41461030c57600080fd5b80632ec35b31116100fc5780635285e058116100e15780635285e05814610237578063563c7f601461027057806363635fd91461029057600080fd5b80632ec35b31146101f75780634dedca281461021757600080fd5b8063146bf4b11461012e5780631c39c38d1461018557806322f8e566146101b257806329cb924d146101d4575b600080fd5b34801561013a57600080fd5b5060025461015b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561019157600080fd5b5060005461015b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101be57600080fd5b506101d26101cd3660046119a8565b6104ef565b005b3480156101e057600080fd5b506101e9610598565b60405190815260200161017c565b34801561020357600080fd5b506101d26102123660046119de565b61065f565b34801561022357600080fd5b506101d2610232366004611a24565b610733565b34801561024357600080fd5b5060055461015b9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561027c57600080fd5b506101d261028b366004611a78565b610806565b34801561029c57600080fd5b506102b06102ab366004611aaf565b6108d7565b604051901515815260200161017c565b3480156102cc57600080fd5b506101e960015481565b3480156102e257600080fd5b506101d26102f1366004611aca565b61093a565b34801561030257600080fd5b506101e960035481565b34801561031857600080fd5b5060055461032d9067ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161017c565b6101d2610354366004611aff565b610c96565b34801561036557600080fd5b5060065461015b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039257600080fd5b5061041c6103a1366004611aaf565b6004602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff9182169181169074010000000000000000000000000000000000000000810467ffffffffffffffff16907c0100000000000000000000000000000000000000000000000000000000900460ff1684565b6040805173ffffffffffffffffffffffffffffffffffffffff958616815294909316602085015267ffffffffffffffff909116918301919091521515606082015260800161017c565b34801561047157600080fd5b506101d2610480366004611aaf565b61122a565b34801561049157600080fd5b506102b06104a0366004611aaf565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090206001015474010000000000000000000000000000000000000000900467ffffffffffffffff16151590565b60005473ffffffffffffffffffffffffffffffffffffffff1661051157600080fd5b6000546040517f22f8e5660000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff909116906322f8e56690602401600060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b5050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff161561065a5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329cb924d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561061d57600080fd5b505afa158015610631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106559190611b6c565b905090565b504290565b60055468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661068d816112f5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f4e4c595f434f554e544552504152545f47415445574159000000000000000060448201526064015b60405180910390fd5b61072f82611315565b5050565b60055468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16610761816112f5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604482015260640161071d565b610800848484611382565b50505050565b60055468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16610834816112f5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604482015260640161071d565b6108d2838361155a565b505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081206001015474010000000000000000000000000000000000000000900467ffffffffffffffff161515801561093457506109348261160d565b92915050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381600087803b1580156109a457600080fd5b505af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190611b6c565b905060008111610a48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f63616e277420627269646765207a65726f20746f6b656e730000000000000000604482015260640161071d565b610a51836108d7565b610add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f6e6f6e2d77686974656c697374656420746f6b656e206f72206c61737420627260448201527f6964676520746f6f20726563656e740000000000000000000000000000000000606482015260840161071d565b610ae5610598565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260046020819052604080832060018101805467ffffffffffffffff9790971674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff88168117909155600654915492517f7b3a3c8b00000000000000000000000000000000000000000000000000000000815292861693830193909352918416948416949094176024850152604484018590526080606485015260848401919091521690637b3a3c8b9060a401600060405180830381600087803b158015610bde57600080fd5b505af1158015610bf2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c389190810190611be0565b506040805182815263ffffffff84166020820152339173ffffffffffffffffffffffffffffffffffffffff8616917f95b5ec953bd38fbaa6f859725352bf73202c155a6809e5622c95ceef331eac6c910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602052604090206001015485907c0100000000000000000000000000000000000000000000000000000000900460ff16610d4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e74726163742069732064697361626c6564000000000000000000000000604482015260640161071d565b610d52611684565b610d7f600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602052604090206001015474010000000000000000000000000000000000000000900467ffffffffffffffff16610e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6465706f73697420746f6b656e206e6f742077686974656c6973746564000000604482015260640161071d565b6703782dace9d900008467ffffffffffffffff161115610eac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f736c6f7752656c6179466565506374206d757374206265203c3d203235250000604482015260640161071d565b6703782dace9d900008367ffffffffffffffff161115610f4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f696e7374616e7452656c6179466565506374206d757374206265203c3d20323560448201527f2500000000000000000000000000000000000000000000000000000000000000606482015260840161071d565b610f5a61025883611cda565b67ffffffffffffffff16610f6c610598565b10158015610f965750610f8182610258611d03565b67ffffffffffffffff16610f93610598565b11155b610ffc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6465706f736974206d696e656420616674657220646561646c696e6500000000604482015260640161071d565b60025473ffffffffffffffffffffffffffffffffffffffff878116600090815260046020526040902054811691161480156110375750600034115b1561110b578434146110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6d73672e76616c7565206d757374206d6174636820616d6f756e740000000000604482015260640161071d565b8573ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b5050505050611117565b6111178633308861170a565b60015460035473ffffffffffffffffffffffffffffffffffffffff888116600081815260046020908152604091829020548251968752908601949094528b8316908501523360608501529116608083015260a082015260c0810186905267ffffffffffffffff80861660e083015280851661010083015283166101208201527fab77617f2b9bdbb101fc328e585470fb3c845c92b25c4b080cb7b66f7163cf72906101400160405180910390a16001600360008282546111d79190611d2f565b909155506112219050600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b50505050505050565b60055468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16611258816112f5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604482015260640161071d565b61072f826118a9565b600061093473111100000000000000000000000000000000111183611d47565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040519081527f3f27163d4f4fe7a27a9d79683adf471b236f49fe9e8808717b3cc3c05a27611f9060200160405180910390a150565b60405180608001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020016113cd610598565b67ffffffffffffffff90811682526001602092830181905273ffffffffffffffffffffffffffffffffffffffff868116600090815260048552604090819020865181547fffffffffffffffffffffffff0000000000000000000000000000000000000000169084161781559486015194909201805492860151606090960151949091167fffffffff0000000000000000000000000000000000000000000000000000000090921691909117740100000000000000000000000000000000000000009490921693909302177fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c0100000000000000000000000000000000000000000000000000000000911515919091021790557f93f23add56b90352ea2ef3bc2123262792af300dc6060c99f6ee06a7026863bd838361150c610598565b6040805173ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015267ffffffffffffffff90911690820152908316606082015260800160405180910390a1505050565b73ffffffffffffffffffffffffffffffffffffffff821660008181526004602090815260409182902060010180547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c0100000000000000000000000000000000000000000000000000000000861515908102919091179091558251938452908301527ff84482204ff927822d3068d71e16e14b51cb1b2adafa7d6e11edc1b8dfd8c0db910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812060010154909161166b9167ffffffffffffffff918216917401000000000000000000000000000000000000000090910416611d03565b67ffffffffffffffff1661167d610598565b1192915050565b60005474010000000000000000000000000000000000000000900460ff16611708576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916117a99190611d76565b6000604051808303816000865af19150503d80600081146117e6576040519150601f19603f3d011682016040523d82523d6000602084013e6117eb565b606091505b50915091508180156118155750805115806118155750808060200190518101906118159190611d92565b6118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f546f6b656e48656c7065723a3a7472616e7366657246726f6d3a207472616e7360448201527f66657246726f6d206661696c6564000000000000000000000000000000000000606482015260840161071d565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f456d707479206164647265737300000000000000000000000000000000000000604482015260640161071d565b600580547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff84811682029290921792839055604051920416907fa9e8c42c9e7fca7f62755189a16b2f5314d43d8fb24e91ba54e6d65f9314e84990600090a250565b6000602082840312156119ba57600080fd5b5035919050565b803567ffffffffffffffff811681146119d957600080fd5b919050565b6000602082840312156119f057600080fd5b6119f9826119c1565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146119d957600080fd5b600080600060608486031215611a3957600080fd5b611a4284611a00565b9250611a5060208501611a00565b9150611a5e60408501611a00565b90509250925092565b8015158114611a7557600080fd5b50565b60008060408385031215611a8b57600080fd5b611a9483611a00565b91506020830135611aa481611a67565b809150509250929050565b600060208284031215611ac157600080fd5b6119f982611a00565b60008060408385031215611add57600080fd5b611ae683611a00565b9150602083013563ffffffff81168114611aa457600080fd5b60008060008060008060c08789031215611b1857600080fd5b611b2187611a00565b9550611b2f60208801611a00565b945060408701359350611b44606088016119c1565b9250611b52608088016119c1565b9150611b6060a088016119c1565b90509295509295509295565b600060208284031215611b7e57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015611bcf578181015183820152602001611bb7565b838111156108005750506000910152565b600060208284031215611bf257600080fd5b815167ffffffffffffffff80821115611c0a57600080fd5b818401915084601f830112611c1e57600080fd5b815181811115611c3057611c30611b85565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611c7657611c76611b85565b81604052828152876020848701011115611c8f57600080fd5b611ca0836020830160208801611bb4565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff83811690831681811015611cfb57611cfb611cab565b039392505050565b600067ffffffffffffffff808316818516808303821115611d2657611d26611cab565b01949350505050565b60008219821115611d4257611d42611cab565b500190565b600073ffffffffffffffffffffffffffffffffffffffff808316818516808303821115611d2657611d26611cab565b60008251611d88818460208701611bb4565b9190910192915050565b600060208284031215611da457600080fd5b81516119f981611a6756fea26469706673582212205eee84fe56e25398ddd797a5a280524411fb09a74a7d491ae7f2e3ac94b2e99c64736f6c634300080900330000000000000000000000005288c571fd7ad117bea99bf60fe0846c4e84f9330000000000000000000000000d8563d3b8b3fec542aae50a530c606dac4d1c4f0000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000a4b1000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101295760003560e01c80639a8a0592116100a5578063c2d9dca911610074578063daf9c21011610059578063daf9c21014610386578063de7eba7814610465578063fbb9fcf71461048557600080fd5b8063c2d9dca914610346578063c83568591461035957600080fd5b80639a8a0592146102c05780639bfd2cdc146102d6578063a1244c67146102f6578063b2d6f4d41461030c57600080fd5b80632ec35b31116100fc5780635285e058116100e15780635285e05814610237578063563c7f601461027057806363635fd91461029057600080fd5b80632ec35b31146101f75780634dedca281461021757600080fd5b8063146bf4b11461012e5780631c39c38d1461018557806322f8e566146101b257806329cb924d146101d4575b600080fd5b34801561013a57600080fd5b5060025461015b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561019157600080fd5b5060005461015b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101be57600080fd5b506101d26101cd3660046119a8565b6104ef565b005b3480156101e057600080fd5b506101e9610598565b60405190815260200161017c565b34801561020357600080fd5b506101d26102123660046119de565b61065f565b34801561022357600080fd5b506101d2610232366004611a24565b610733565b34801561024357600080fd5b5060055461015b9068010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561027c57600080fd5b506101d261028b366004611a78565b610806565b34801561029c57600080fd5b506102b06102ab366004611aaf565b6108d7565b604051901515815260200161017c565b3480156102cc57600080fd5b506101e960015481565b3480156102e257600080fd5b506101d26102f1366004611aca565b61093a565b34801561030257600080fd5b506101e960035481565b34801561031857600080fd5b5060055461032d9067ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161017c565b6101d2610354366004611aff565b610c96565b34801561036557600080fd5b5060065461015b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039257600080fd5b5061041c6103a1366004611aaf565b6004602052600090815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff9182169181169074010000000000000000000000000000000000000000810467ffffffffffffffff16907c0100000000000000000000000000000000000000000000000000000000900460ff1684565b6040805173ffffffffffffffffffffffffffffffffffffffff958616815294909316602085015267ffffffffffffffff909116918301919091521515606082015260800161017c565b34801561047157600080fd5b506101d2610480366004611aaf565b61122a565b34801561049157600080fd5b506102b06104a0366004611aaf565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090206001015474010000000000000000000000000000000000000000900467ffffffffffffffff16151590565b60005473ffffffffffffffffffffffffffffffffffffffff1661051157600080fd5b6000546040517f22f8e5660000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff909116906322f8e56690602401600060405180830381600087803b15801561057d57600080fd5b505af1158015610591573d6000803e3d6000fd5b5050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff161561065a5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329cb924d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561061d57600080fd5b505afa158015610631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106559190611b6c565b905090565b504290565b60055468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661068d816112f5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f4e4c595f434f554e544552504152545f47415445574159000000000000000060448201526064015b60405180910390fd5b61072f82611315565b5050565b60055468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16610761816112f5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604482015260640161071d565b610800848484611382565b50505050565b60055468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16610834816112f5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604482015260640161071d565b6108d2838361155a565b505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081206001015474010000000000000000000000000000000000000000900467ffffffffffffffff161515801561093457506109348261160d565b92915050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381600087803b1580156109a457600080fd5b505af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190611b6c565b905060008111610a48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f63616e277420627269646765207a65726f20746f6b656e730000000000000000604482015260640161071d565b610a51836108d7565b610add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f6e6f6e2d77686974656c697374656420746f6b656e206f72206c61737420627260448201527f6964676520746f6f20726563656e740000000000000000000000000000000000606482015260840161071d565b610ae5610598565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260046020819052604080832060018101805467ffffffffffffffff9790971674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff88168117909155600654915492517f7b3a3c8b00000000000000000000000000000000000000000000000000000000815292861693830193909352918416948416949094176024850152604484018590526080606485015260848401919091521690637b3a3c8b9060a401600060405180830381600087803b158015610bde57600080fd5b505af1158015610bf2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c389190810190611be0565b506040805182815263ffffffff84166020820152339173ffffffffffffffffffffffffffffffffffffffff8616917f95b5ec953bd38fbaa6f859725352bf73202c155a6809e5622c95ceef331eac6c910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602052604090206001015485907c0100000000000000000000000000000000000000000000000000000000900460ff16610d4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e74726163742069732064697361626c6564000000000000000000000000604482015260640161071d565b610d52611684565b610d7f600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b73ffffffffffffffffffffffffffffffffffffffff861660009081526004602052604090206001015474010000000000000000000000000000000000000000900467ffffffffffffffff16610e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6465706f73697420746f6b656e206e6f742077686974656c6973746564000000604482015260640161071d565b6703782dace9d900008467ffffffffffffffff161115610eac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f736c6f7752656c6179466565506374206d757374206265203c3d203235250000604482015260640161071d565b6703782dace9d900008367ffffffffffffffff161115610f4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f696e7374616e7452656c6179466565506374206d757374206265203c3d20323560448201527f2500000000000000000000000000000000000000000000000000000000000000606482015260840161071d565b610f5a61025883611cda565b67ffffffffffffffff16610f6c610598565b10158015610f965750610f8182610258611d03565b67ffffffffffffffff16610f93610598565b11155b610ffc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6465706f736974206d696e656420616674657220646561646c696e6500000000604482015260640161071d565b60025473ffffffffffffffffffffffffffffffffffffffff878116600090815260046020526040902054811691161480156110375750600034115b1561110b578434146110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6d73672e76616c7565206d757374206d6174636820616d6f756e740000000000604482015260640161071d565b8573ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110ed57600080fd5b505af1158015611101573d6000803e3d6000fd5b5050505050611117565b6111178633308861170a565b60015460035473ffffffffffffffffffffffffffffffffffffffff888116600081815260046020908152604091829020548251968752908601949094528b8316908501523360608501529116608083015260a082015260c0810186905267ffffffffffffffff80861660e083015280851661010083015283166101208201527fab77617f2b9bdbb101fc328e585470fb3c845c92b25c4b080cb7b66f7163cf72906101400160405180910390a16001600360008282546111d79190611d2f565b909155506112219050600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b50505050505050565b60055468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16611258816112f5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f4e4c595f434f554e544552504152545f474154455741590000000000000000604482015260640161071d565b61072f826118a9565b600061093473111100000000000000000000000000000000111183611d47565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040519081527f3f27163d4f4fe7a27a9d79683adf471b236f49fe9e8808717b3cc3c05a27611f9060200160405180910390a150565b60405180608001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020016113cd610598565b67ffffffffffffffff90811682526001602092830181905273ffffffffffffffffffffffffffffffffffffffff868116600090815260048552604090819020865181547fffffffffffffffffffffffff0000000000000000000000000000000000000000169084161781559486015194909201805492860151606090960151949091167fffffffff0000000000000000000000000000000000000000000000000000000090921691909117740100000000000000000000000000000000000000009490921693909302177fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c0100000000000000000000000000000000000000000000000000000000911515919091021790557f93f23add56b90352ea2ef3bc2123262792af300dc6060c99f6ee06a7026863bd838361150c610598565b6040805173ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015267ffffffffffffffff90911690820152908316606082015260800160405180910390a1505050565b73ffffffffffffffffffffffffffffffffffffffff821660008181526004602090815260409182902060010180547fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c0100000000000000000000000000000000000000000000000000000000861515908102919091179091558251938452908301527ff84482204ff927822d3068d71e16e14b51cb1b2adafa7d6e11edc1b8dfd8c0db910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040812060010154909161166b9167ffffffffffffffff918216917401000000000000000000000000000000000000000090910416611d03565b67ffffffffffffffff1661167d610598565b1192915050565b60005474010000000000000000000000000000000000000000900460ff16611708576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161071d565b565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916117a99190611d76565b6000604051808303816000865af19150503d80600081146117e6576040519150601f19603f3d011682016040523d82523d6000602084013e6117eb565b606091505b50915091508180156118155750805115806118155750808060200190518101906118159190611d92565b6118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f546f6b656e48656c7065723a3a7472616e7366657246726f6d3a207472616e7360448201527f66657246726f6d206661696c6564000000000000000000000000000000000000606482015260840161071d565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f456d707479206164647265737300000000000000000000000000000000000000604482015260640161071d565b600580547fffffffff0000000000000000000000000000000000000000ffffffffffffffff166801000000000000000073ffffffffffffffffffffffffffffffffffffffff84811682029290921792839055604051920416907fa9e8c42c9e7fca7f62755189a16b2f5314d43d8fb24e91ba54e6d65f9314e84990600090a250565b6000602082840312156119ba57600080fd5b5035919050565b803567ffffffffffffffff811681146119d957600080fd5b919050565b6000602082840312156119f057600080fd5b6119f9826119c1565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146119d957600080fd5b600080600060608486031215611a3957600080fd5b611a4284611a00565b9250611a5060208501611a00565b9150611a5e60408501611a00565b90509250925092565b8015158114611a7557600080fd5b50565b60008060408385031215611a8b57600080fd5b611a9483611a00565b91506020830135611aa481611a67565b809150509250929050565b600060208284031215611ac157600080fd5b6119f982611a00565b60008060408385031215611add57600080fd5b611ae683611a00565b9150602083013563ffffffff81168114611aa457600080fd5b60008060008060008060c08789031215611b1857600080fd5b611b2187611a00565b9550611b2f60208801611a00565b945060408701359350611b44606088016119c1565b9250611b52608088016119c1565b9150611b6060a088016119c1565b90509295509295509295565b600060208284031215611b7e57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015611bcf578181015183820152602001611bb7565b838111156108005750506000910152565b600060208284031215611bf257600080fd5b815167ffffffffffffffff80821115611c0a57600080fd5b818401915084601f830112611c1e57600080fd5b815181811115611c3057611c30611b85565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611c7657611c76611b85565b81604052828152876020848701011115611c8f57600080fd5b611ca0836020830160208801611bb4565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff83811690831681811015611cfb57611cfb611cab565b039392505050565b600067ffffffffffffffff808316818516808303821115611d2657611d26611cab565b01949350505050565b60008219821115611d4257611d42611cab565b500190565b600073ffffffffffffffffffffffffffffffffffffffff808316818516808303821115611d2657611d26611cab565b60008251611d88818460208701611bb4565b9190910192915050565b600060208284031215611da457600080fd5b81516119f981611a6756fea26469706673582212205eee84fe56e25398ddd797a5a280524411fb09a74a7d491ae7f2e3ac94b2e99c64736f6c63430008090033

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

0000000000000000000000005288c571fd7ad117bea99bf60fe0846c4e84f9330000000000000000000000000d8563d3b8b3fec542aae50a530c606dac4d1c4f0000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000a4b1000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _l2GatewayRouter (address): 0x5288c571Fd7aD117beA99bF60FE0846C4E84F933
Arg [1] : _crossDomainAdmin (address): 0x0D8563d3B8b3Fec542aaE50a530C606DAc4D1c4F
Arg [2] : _minimumBridgingDelay (uint64): 21600
Arg [3] : _chainId (uint256): 42161
Arg [4] : _l1Weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [5] : timerAddress (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000005288c571fd7ad117bea99bf60fe0846c4e84f933
Arg [1] : 0000000000000000000000000d8563d3b8b3fec542aae50a530c606dac4d1c4f
Arg [2] : 0000000000000000000000000000000000000000000000000000000000005460
Arg [3] : 000000000000000000000000000000000000000000000000000000000000a4b1
Arg [4] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

18388:6150:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6986:21;;;;;;;;;;-1:-1:-1;6986:21:0;;;;;;;;;;;190:42:1;178:55;;;160:74;;148:2;133:18;6986:21:0;;;;;;;;1317:27;;;;;;;;;;-1:-1:-1;1317:27:0;;;;;;;;2047:117;;;;;;;;;;-1:-1:-1;2047:117:0;;;;;:::i;:::-;;:::i;:::-;;2416:282;;;;;;;;;;;;;:::i;:::-;;;576:25:1;;;564:2;549:18;2416:282:0;430:177:1;20927:208:0;;;;;;;;;;-1:-1:-1;20927:208:0;;;;;:::i;:::-;;:::i;21663:232::-;;;;;;;;;;-1:-1:-1;21663:232:0;;;;;:::i;:::-;;:::i;18555:31::-;;;;;;;;;;-1:-1:-1;18555:31:0;;;;;;;;;;;22268:204;;;;;;;;;;-1:-1:-1;22268:204:0;;;;;:::i;:::-;;:::i;16909:156::-;;;;;;;;;;-1:-1:-1;16909:156:0;;;;;:::i;:::-;;:::i;:::-;;;2316:14:1;;2309:22;2291:41;;2279:2;2264:18;16909:156:0;2151:187:1;6836:22:0;;;;;;;;;;;;;;;;23179:966;;;;;;;;;;-1:-1:-1;23179:966:0;;;;;:::i;:::-;;:::i;7111:31::-;;;;;;;;;;;;;;;;7722:34;;;;;;;;;;-1:-1:-1;7722:34:0;;;;;;;;;;;2872:18:1;2860:31;;;2842:50;;2830:2;2815:18;7722:34:0;2698:200:1;12635:2863:0;;;;;;:::i;:::-;;:::i;18645:30::-;;;;;;;;;;-1:-1:-1;18645:30:0;;;;;;;;7526:65;;;;;;;;;;-1:-1:-1;7526:65:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3688:42:1;3757:15;;;3739:34;;3809:15;;;;3804:2;3789:18;;3782:43;3873:18;3861:31;;;3841:18;;;3834:59;;;;3936:14;3929:22;3924:2;3909:18;;3902:50;3665:3;3650:19;7526:65:0;3455:503:1;20468:170:0;;;;;;;;;;-1:-1:-1;20468:170:0;;;;;:::i;:::-;;:::i;15977:142::-;;;;;;;;;;-1:-1:-1;15977:142:0;;;;;:::i;:::-;16065:26;;16041:4;16065:26;;;:17;:26;;;;;:41;;;;;;;;:46;;;15977:142;2047:117;1840:3;1816:12;:28;:12;1808:37;;;;;;2122:12:::1;::::0;2116:40:::1;::::0;;;;::::1;::::0;::::1;576:25:1::0;;;2122:12:0::1;::::0;;::::1;::::0;2116:34:::1;::::0;549:18:1;;2116:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2047:117:::0;:::o;2416:282::-;2471:7;2495:12;;:28;:12;:28;2491:200;;2553:12;;;;;;;;;;2547:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2540:43;;2416:282;:::o;2491:200::-;-1:-1:-1;2623:15:0;;2416:282::o;20927:208::-;21044:16;;;;;;;17478:31;21044:16;17478;:31::i;:::-;17464:45;;:10;:45;;;17456:82;;;;;;;4354:2:1;17456:82:0;;;4336:21:1;4393:2;4373:18;;;4366:30;4432:26;4412:18;;;4405:54;4476:18;;17456:82:0;;;;;;;;;21078:49:::1;21103:23;21078:24;:49::i;:::-;20927:208:::0;;:::o;21663:232::-;21811:16;;;;;;;17478:31;21811:16;17478;:31::i;:::-;17464:45;;:10;:45;;;17456:82;;;;;;;4354:2:1;17456:82:0;;;4336:21:1;4393:2;4373:18;;;4366:30;4432:26;4412:18;;;4405:54;4476:18;;17456:82:0;4152:348:1;17456:82:0;21840:47:::1;21856:7;21865;21874:12;21840:15;:47::i;:::-;21663:232:::0;;;;:::o;22268:204::-;22386:16;;;;;;;17478:31;22386:16;17478;:31::i;:::-;17464:45;;:10;:45;;;17456:82;;;;;;;4354:2:1;17456:82:0;;;4336:21:1;4393:2;4373:18;;;4366:30;4432:26;4412:18;;;4405:54;4476:18;;17456:82:0;4152:348:1;17456:82:0;22420:44:::1;22439:7;22448:15;22420:18;:44::i;:::-;22268:204:::0;;;:::o;16909:156::-;16065:26;;;16966:4;16065:26;;;:17;:26;;;;;:41;;;;;;;;:46;;16990:67;;;;;17019:38;17049:7;17019:29;:38::i;:::-;16983:74;16909:156;-1:-1:-1;;16909:156:0:o;23179:966::-;23284:43;;;;;23321:4;23284:43;;;160:74:1;23250:31:0;;23284:28;;;;;;133:18:1;;23284:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23250:77;;23372:1;23346:23;:27;23338:64;;;;;;;4707:2:1;23338:64:0;;;4689:21:1;4746:2;4726:18;;;4719:30;4785:26;4765:18;;;4758:54;4829:18;;23338:64:0;4505:348:1;23338:64:0;23421:18;23431:7;23421:9;:18::i;:::-;23413:78;;;;;;;5060:2:1;23413:78:0;;;5042:21:1;5099:2;5079:18;;;5072:30;5138:34;5118:18;;;5111:62;5209:17;5189:18;;;5182:45;5244:19;;23413:78:0;4858:411:1;23413:78:0;23555:16;:14;:16::i;:::-;23504:26;;;;;;;;:17;:26;;;;;;;;:41;;;:68;;;;;;;;;;;;;;;;;23604:15;;23652:34;;23585:468;;;;;23652:34;;;23585:468;;;5602:34:1;;;;23754:39:0;;;;;;;;;;5652:18:1;;;5645:43;5704:18;;;5697:34;;;5767:3;5747:18;;;5740:31;5787:19;;;5780:30;;;;23604:15:0;;23585:52;;5827:19:1;;23585:468:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24071:66:0;;;7429:25:1;;;7502:10;7490:23;;7485:2;7470:18;;7463:51;24126:10:0;;24071:66;;;;;;7402:18:1;24071:66:0;;;;;;;23239:906;23179:966;;:::o;12635:2863::-;8805:26;;;;;;;:17;:26;;;;;:42;;;:26;;:42;;;;;8797:75;;;;;;;7727:2:1;8797:75:0;;;7709:21:1;7766:2;7746:18;;;7739:30;7805:22;7785:18;;;7778:50;7845:18;;8797:75:0;7525:344:1;8797:75:0;4042:19:::1;:17;:19::i;:::-;4072:17;5210:5:::0;5196:19;;;;;;5084:139;4072:17:::1;16065:26:::0;;;16041:4;16065:26;;;:17;:26;;;;;:41;;;;;;;;12913:67:::2;;;::::0;::::2;::::0;;8076:2:1;12913:67:0::2;::::0;::::2;8058:21:1::0;8115:2;8095:18;;;8088:30;8154:31;8134:18;;;8127:59;8203:18;;12913:67:0::2;7874:353:1::0;12913:67:0::2;13250:7;13231:15;:26;;;;13223:69;;;::::0;::::2;::::0;;8434:2:1;13223:69:0::2;::::0;::::2;8416:21:1::0;8473:2;8453:18;;;8446:30;8512:32;8492:18;;;8485:60;8562:18;;13223:69:0::2;8232:354:1::0;13223:69:0::2;13333:7;13311:18;:29;;;;13303:75;;;::::0;::::2;::::0;;8793:2:1;13303:75:0::2;::::0;::::2;8775:21:1::0;8832:2;8812:18;;;8805:30;8871:34;8851:18;;;8844:62;8942:3;8922:18;;;8915:31;8963:19;;13303:75:0::2;8591:397:1::0;13303:75:0::2;14045:27;14062:10;14045:14:::0;:27:::2;:::i;:::-;14025:47;;:16;:14;:16::i;:::-;:47;;:98;;;;-1:-1:-1::0;14096:27:0::2;:14:::0;14113:10:::2;14096:27;:::i;:::-;14076:47;;:16;:14;:16::i;:::-;:47;;14025:98;14003:176;;;::::0;::::2;::::0;;9859:2:1;14003:176:0::2;::::0;::::2;9841:21:1::0;9898:2;9878:18;;;9871:30;9937;9917:18;;;9910:58;9985:18;;14003:176:0::2;9657:352:1::0;14003:176:0::2;14457:6;::::0;::::2;14419:26:::0;;::::2;14457:6;14419:26:::0;;;:17:::2;:26;::::0;;;;:34;;::::2;14457:6:::0;::::2;14419:44;:61:::0;::::2;;;;14479:1;14467:9;:13;14419:61;14415:635;;;14518:6;14505:9;:19;14497:59;;;::::0;::::2;::::0;;10216:2:1;14497:59:0::2;::::0;::::2;10198:21:1::0;10255:2;10235:18;;;10228:30;10294:29;10274:18;;;10267:57;10341:18;;14497:59:0::2;10014:351:1::0;14497:59:0::2;14589:7;14571:35;;;14615:9;14571:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;14415:635;;;14978:72;15007:7;15016:10;15036:4;15043:6;14978:28;:72::i;:::-;15097:7;::::0;15119:16:::2;::::0;15276:26:::2;::::0;;::::2;;::::0;;;:17:::2;:26;::::0;;;;;;;;:34;15068:388;;10763:25:1;;;10804:18;;;10797:34;;;;10928:15;;;10908:18;;;10901:43;15251:10:0::2;10975:2:1::0;10960:18;;10953:43;15276:34:0;::::2;11027:3:1::0;11012:19;;11005:44;11080:3;11065:19;;11058:44;11133:3;11118:19;;11111:35;;;11165:18;11220:15;;;11214:3;11199:19;;11192:44;11273:15;;;11267:3;11252:19;;11245:44;11326:15;;11320:3;11305:19;;11298:44;15068:388:0::2;::::0;10750:3:1;10735:19;15068:388:0::2;;;;;;;15489:1;15469:16;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;4112:20:0::1;::::0;-1:-1:-1;5415:11:0;:18;;;;;;;;5231:210;4112:20:::1;12635:2863:::0;;;;;;;:::o;20468:170::-;20560:16;;;;;;;17478:31;20560:16;17478;:31::i;:::-;17464:45;;:10;:45;;;17456:82;;;;;;;4354:2:1;17456:82:0;;;4336:21:1;4393:2;4373:18;;;4366:30;4432:26;4412:18;;;4405:54;4476:18;;17456:82:0;4152:348:1;17456:82:0;20589:41:::1;20610:19;20589:20;:41::i;17808:154::-:0;17876:17;17926:27;17600:42;17934:9;17926:27;:::i;10000:201::-;10086:20;:46;;;;;;;;;;;;;10148:45;;2842:50:1;;;10148:45:0;;2830:2:1;2815:18;10148:45:0;;;;;;;10000:201;:::o;10628:458::-;10792:196;;;;;;;;10837:7;10792:196;;;;;;10873:12;10792:196;;;;;;10923:16;:14;:16::i;:::-;10792:196;;;;;;10972:4;10792:196;;;;;;;10763:26;;;;-1:-1:-1;10763:26:0;;;:17;:26;;;;;;;:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11006:72;11021:7;10763:26;11046:16;:14;:16::i;:::-;11006:72;;;11991:42:1;12060:15;;;12042:34;;12112:15;;;12107:2;12092:18;;12085:43;12176:18;12164:31;;;12144:18;;;12137:59;12232:15;;;12227:2;12212:18;;12205:43;11968:3;11953:19;11006:72:0;;;;;;;10628:458;;;:::o;11358:212::-;11445:26;;;;;;;:17;:26;;;;;;;;;:42;;:60;;;;;;;;;;;;;;;;;;11521:41;;12427:74:1;;;12517:18;;;12510:50;11521:41:0;;12400:18:1;11521:41:0;;;;;;;11358:212;;:::o;16127:194::-;16293:20;;16249:26;;;16206:4;16249:26;;;:17;:26;;;;;16293:20;16249:41;;16206:4;;16249:64;;16293:20;;;;;16249:41;;;;;:64;:::i;:::-;16230:83;;:16;:14;:16::i;:::-;:83;;16127:194;-1:-1:-1;;16127:194:0:o;4887:189::-;5021:11;;;;;;;5013:55;;;;;;;12773:2:1;5013:55:0;;;12755:21:1;12812:2;12792:18;;;12785:30;12851:33;12831:18;;;12824:61;12902:18;;5013:55:0;12571:355:1;5013:55:0;4887:189::o;5752:495::-;6023:51;;;6012:10;13212:15:1;;;6023:51:0;;;13194:34:1;13264:15;;;13244:18;;;13237:43;13296:18;;;;13289:34;;;6023:51:0;;;;;;;;;;13106:18:1;;;;6023:51:0;;;;;;;;;;;;;6012:63;;-1:-1:-1;;;;6012:10:0;;;;:63;;6023:51;6012:63;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5976:99;;;;6108:7;:57;;;;-1:-1:-1;6120:11:0;;:16;;:44;;;6151:4;6140:24;;;;;;;;;;;;:::i;:::-;6086:153;;;;;;;14065:2:1;6086:153:0;;;14047:21:1;14104:2;14084:18;;;14077:30;14143:34;14123:18;;;14116:62;14214:16;14194:18;;;14187:44;14248:19;;6086:153:0;13863:410:1;6086:153:0;5886:361;;5752:495;;;;:::o;24291:244::-;24378:33;;;24370:59;;;;;;;14480:2:1;24370:59:0;;;14462:21:1;14519:2;14499:18;;;14492:30;14558:15;14538:18;;;14531:43;14591:18;;24370:59:0;14278:337:1;24370:59:0;24440:16;:38;;;;;;;;;;;;;;;;;;;24494:33;;24510:16;;;;24494:33;;-1:-1:-1;;24494:33:0;24291:244;:::o;245:180:1:-;304:6;357:2;345:9;336:7;332:23;328:32;325:52;;;373:1;370;363:12;325:52;-1:-1:-1;396:23:1;;245:180;-1:-1:-1;245:180:1:o;612:171::-;679:20;;739:18;728:30;;718:41;;708:69;;773:1;770;763:12;708:69;612:171;;;:::o;788:184::-;846:6;899:2;887:9;878:7;874:23;870:32;867:52;;;915:1;912;905:12;867:52;938:28;956:9;938:28;:::i;:::-;928:38;788:184;-1:-1:-1;;;788:184:1:o;977:196::-;1045:20;;1105:42;1094:54;;1084:65;;1074:93;;1163:1;1160;1153:12;1178:334;1255:6;1263;1271;1324:2;1312:9;1303:7;1299:23;1295:32;1292:52;;;1340:1;1337;1330:12;1292:52;1363:29;1382:9;1363:29;:::i;:::-;1353:39;;1411:38;1445:2;1434:9;1430:18;1411:38;:::i;:::-;1401:48;;1468:38;1502:2;1491:9;1487:18;1468:38;:::i;:::-;1458:48;;1178:334;;;;;:::o;1517:118::-;1603:5;1596:13;1589:21;1582:5;1579:32;1569:60;;1625:1;1622;1615:12;1569:60;1517:118;:::o;1640:315::-;1705:6;1713;1766:2;1754:9;1745:7;1741:23;1737:32;1734:52;;;1782:1;1779;1772:12;1734:52;1805:29;1824:9;1805:29;:::i;:::-;1795:39;;1884:2;1873:9;1869:18;1856:32;1897:28;1919:5;1897:28;:::i;:::-;1944:5;1934:15;;;1640:315;;;;;:::o;1960:186::-;2019:6;2072:2;2060:9;2051:7;2047:23;2043:32;2040:52;;;2088:1;2085;2078:12;2040:52;2111:29;2130:9;2111:29;:::i;2343:350::-;2410:6;2418;2471:2;2459:9;2450:7;2446:23;2442:32;2439:52;;;2487:1;2484;2477:12;2439:52;2510:29;2529:9;2510:29;:::i;:::-;2500:39;;2589:2;2578:9;2574:18;2561:32;2633:10;2626:5;2622:22;2615:5;2612:33;2602:61;;2659:1;2656;2649:12;2903:547;3004:6;3012;3020;3028;3036;3044;3097:3;3085:9;3076:7;3072:23;3068:33;3065:53;;;3114:1;3111;3104:12;3065:53;3137:29;3156:9;3137:29;:::i;:::-;3127:39;;3185:38;3219:2;3208:9;3204:18;3185:38;:::i;:::-;3175:48;;3270:2;3259:9;3255:18;3242:32;3232:42;;3293:37;3326:2;3315:9;3311:18;3293:37;:::i;:::-;3283:47;;3349:38;3382:3;3371:9;3367:19;3349:38;:::i;:::-;3339:48;;3406:38;3439:3;3428:9;3424:19;3406:38;:::i;:::-;3396:48;;2903:547;;;;;;;;:::o;3963:184::-;4033:6;4086:2;4074:9;4065:7;4061:23;4057:32;4054:52;;;4102:1;4099;4092:12;4054:52;-1:-1:-1;4125:16:1;;3963:184;-1:-1:-1;3963:184:1:o;5857:::-;5909:77;5906:1;5899:88;6006:4;6003:1;5996:15;6030:4;6027:1;6020:15;6046:258;6118:1;6128:113;6142:6;6139:1;6136:13;6128:113;;;6218:11;;;6212:18;6199:11;;;6192:39;6164:2;6157:10;6128:113;;;6259:6;6256:1;6253:13;6250:48;;;-1:-1:-1;;6294:1:1;6276:16;;6269:27;6046:258::o;6309:942::-;6388:6;6441:2;6429:9;6420:7;6416:23;6412:32;6409:52;;;6457:1;6454;6447:12;6409:52;6490:9;6484:16;6519:18;6560:2;6552:6;6549:14;6546:34;;;6576:1;6573;6566:12;6546:34;6614:6;6603:9;6599:22;6589:32;;6659:7;6652:4;6648:2;6644:13;6640:27;6630:55;;6681:1;6678;6671:12;6630:55;6710:2;6704:9;6732:2;6728;6725:10;6722:36;;;6738:18;;:::i;:::-;6872:2;6866:9;6934:4;6926:13;;6777:66;6922:22;;;6946:2;6918:31;6914:40;6902:53;;;6970:18;;;6990:22;;;6967:46;6964:72;;;7016:18;;:::i;:::-;7056:10;7052:2;7045:22;7091:2;7083:6;7076:18;7131:7;7126:2;7121;7117;7113:11;7109:20;7106:33;7103:53;;;7152:1;7149;7142:12;7103:53;7165:55;7217:2;7212;7204:6;7200:15;7195:2;7191;7187:11;7165:55;:::i;:::-;7239:6;6309:942;-1:-1:-1;;;;;;;6309:942:1:o;8993:184::-;9045:77;9042:1;9035:88;9142:4;9139:1;9132:15;9166:4;9163:1;9156:15;9182:229;9221:4;9250:18;9318:10;;;;9288;;9340:12;;;9337:38;;;9355:18;;:::i;:::-;9392:13;;9182:229;-1:-1:-1;;;9182:229:1:o;9416:236::-;9455:3;9483:18;9528:2;9525:1;9521:10;9558:2;9555:1;9551:10;9589:3;9585:2;9581:12;9576:3;9573:21;9570:47;;;9597:18;;:::i;:::-;9633:13;;9416:236;-1:-1:-1;;;;9416:236:1:o;11353:128::-;11393:3;11424:1;11420:6;11417:1;11414:13;11411:39;;;11430:18;;:::i;:::-;-1:-1:-1;11466:9:1;;11353:128::o;11486:261::-;11526:3;11554:42;11623:2;11620:1;11616:10;11653:2;11650:1;11646:10;11684:3;11680:2;11676:12;11671:3;11668:21;11665:47;;;11692:18;;:::i;13334:274::-;13463:3;13501:6;13495:13;13517:53;13563:6;13558:3;13551:4;13543:6;13539:17;13517:53;:::i;:::-;13586:16;;;;;13334:274;-1:-1:-1;;13334:274:1:o;13613:245::-;13680:6;13733:2;13721:9;13712:7;13708:23;13704:32;13701:52;;;13749:1;13746;13739:12;13701:52;13781:9;13775:16;13800:28;13822:5;13800:28;:::i

Swarm Source

ipfs://5eee84fe56e25398ddd797a5a280524411fb09a74a7d491ae7f2e3ac94b2e99c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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