ETH Price: $2,936.33 (-0.77%)

Contract

0x3BfBB7eEDa236d9AD9E79f338aA8D11C190e1BfE
 

Overview

ETH Balance

0.032146844043813946 ETH

ETH Value

$94.39 (@ $2,936.33/ETH)

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Gas Transfer186056672025-04-30 13:52:29269 days ago1746021149IN
Interport: Gas Transfer V1
0.00167948 ETH0.000016090.00110025
Gas Transfer183883932025-04-25 13:10:01274 days ago1745586601IN
Interport: Gas Transfer V1
0.00953242 ETH0.000006150.00103313
Gas Transfer182698362025-04-22 19:18:07277 days ago1745349487IN
Interport: Gas Transfer V1
0.02987608 ETH0.000001640.00100237
Gas Transfer182479752025-04-22 7:09:25277 days ago1745305765IN
Interport: Gas Transfer V1
0.00186232 ETH0.000000480.0018432
Gas Transfer182466472025-04-22 6:25:09277 days ago1745303109IN
Interport: Gas Transfer V1
0.00143095 ETH0.000000560.00213432
Gas Transfer182456042025-04-22 5:50:23277 days ago1745301023IN
Interport: Gas Transfer V1
0.00186267 ETH0.000000540.00206916
Gas Transfer182410042025-04-22 3:17:03278 days ago1745291823IN
Interport: Gas Transfer V1
0.00186269 ETH0.000000590.00198457
Gas Transfer169650822025-03-23 14:26:19307 days ago1742739979IN
Interport: Gas Transfer V1
0.01099119 ETH0.000000360.00134723
Gas Transfer153942542025-02-15 5:45:23343 days ago1739598323IN
Interport: Gas Transfer V1
0.00016131 ETH0.000000630.00245593
Gas Transfer152786282025-02-12 13:31:11346 days ago1739367071IN
Interport: Gas Transfer V1
0.00016337 ETH0.000002590.00335898
Gas Transfer150864912025-02-08 2:46:37351 days ago1738982797IN
Interport: Gas Transfer V1
0.00114108 ETH0.000000410.00155689
Gas Transfer149233882025-02-04 8:09:51354 days ago1738656591IN
Interport: Gas Transfer V1
0.00050344 ETH0.000000960.00128374
Gas Transfer141095892025-01-16 12:03:13373 days ago1737028993IN
Interport: Gas Transfer V1
0.00128773 ETH0.000005980.00100028
Gas Transfer132714242024-12-28 2:24:23393 days ago1735352663IN
Interport: Gas Transfer V1
0.00078024 ETH0.000007190.00117661
Gas Transfer130667352024-12-23 8:41:25397 days ago1734943285IN
Interport: Gas Transfer V1
0.00068463 ETH0.000000130.00046666
Gas Transfer122224352024-12-03 19:38:05417 days ago1733254685IN
Interport: Gas Transfer V1
0.00037336 ETH0.000000270.00062594
Gas Transfer117466102024-11-22 19:17:15428 days ago1732303035IN
Interport: Gas Transfer V1
0.00138455 ETH0.000002040.00515658
Gas Transfer117465932024-11-22 19:16:41428 days ago1732303001IN
Interport: Gas Transfer V1
0.00104441 ETH0.000002050.00511198
Gas Transfer114103872024-11-15 0:29:49436 days ago1731630589IN
Interport: Gas Transfer V1
0.00010908 ETH0.000002720.01026268
Gas Transfer109118622024-11-03 11:32:19447 days ago1730633539IN
Interport: Gas Transfer V1
0.00136059 ETH0.00000080.00306429
Gas Transfer108719462024-11-02 13:21:47448 days ago1730553707IN
Interport: Gas Transfer V1
0.00142444 ETH0.000000720.00046713
Gas Transfer107361622024-10-30 9:55:39451 days ago1730282139IN
Interport: Gas Transfer V1
0.00050213 ETH0.000000840.00170853
Gas Transfer102892262024-10-20 1:37:47462 days ago1729388267IN
Interport: Gas Transfer V1
0.00013529 ETH0.000000830.00314516
Gas Transfer102576642024-10-19 8:05:43462 days ago1729325143IN
Interport: Gas Transfer V1
0.00035074 ETH0.000000830.00310998
Gas Transfer102566522024-10-19 7:31:59462 days ago1729323119IN
Interport: Gas Transfer V1
0.00078508 ETH0.000001230.00465161
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
186056672025-04-30 13:52:29269 days ago1746021149
Interport: Gas Transfer V1
0.0015942 ETH
183883932025-04-25 13:10:01274 days ago1745586601
Interport: Gas Transfer V1
0.00944807 ETH
182698362025-04-22 19:18:07277 days ago1745349487
Interport: Gas Transfer V1
0.02978795 ETH
182479752025-04-22 7:09:25277 days ago1745305765
Interport: Gas Transfer V1
0.00176762 ETH
182466472025-04-22 6:25:09277 days ago1745303109
Interport: Gas Transfer V1
0.00133626 ETH
182456042025-04-22 5:50:23277 days ago1745301023
Interport: Gas Transfer V1
0.00176762 ETH
182410042025-04-22 3:17:03278 days ago1745291823
Interport: Gas Transfer V1
0.00176762 ETH
169650822025-03-23 14:26:19307 days ago1742739979
Interport: Gas Transfer V1
0.01091645 ETH
153942542025-02-15 5:45:23343 days ago1739598323
Interport: Gas Transfer V1
0.00010621 ETH
152786282025-02-12 13:31:11346 days ago1739367071
Interport: Gas Transfer V1
0.00010621 ETH
150864912025-02-08 2:46:37351 days ago1738982797
Interport: Gas Transfer V1
0.00108422 ETH
149233882025-02-04 8:09:51354 days ago1738656591
Interport: Gas Transfer V1
0.00044804 ETH
141095892025-01-16 12:03:13373 days ago1737028993
Interport: Gas Transfer V1
0.00124288 ETH
132714242024-12-28 2:24:23393 days ago1735352663
Interport: Gas Transfer V1
0.00073526 ETH
130667352024-12-23 8:41:25397 days ago1734943285
Interport: Gas Transfer V1
0.00063917 ETH
125599052024-12-11 15:07:05409 days ago1733929625
Interport: Gas Transfer V1
0.00017611 ETH
125599052024-12-11 15:07:05409 days ago1733929625
Interport: Gas Transfer V1
0.00021416 ETH
125065262024-12-10 9:27:47410 days ago1733822867
Interport: Gas Transfer V1
0.00002054 ETH
125065262024-12-10 9:27:47410 days ago1733822867
Interport: Gas Transfer V1
0.00006049 ETH
125065262024-12-10 9:27:47410 days ago1733822867
Interport: Gas Transfer V1
0.00006972 ETH
125065262024-12-10 9:27:47410 days ago1733822867
Interport: Gas Transfer V1
0.00010968 ETH
125065262024-12-10 9:27:47410 days ago1733822867
Interport: Gas Transfer V1
0.00003394 ETH
125065262024-12-10 9:27:47410 days ago1733822867
Interport: Gas Transfer V1
0.00007389 ETH
122224352024-12-03 19:38:05417 days ago1733254685
Interport: Gas Transfer V1
0.0003312 ETH
117466102024-11-22 19:17:15428 days ago1732303035
Interport: Gas Transfer V1
0.00133867 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
InterportLZGasTransfer_Blast

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

import { BlastConfig } from '../blast-config/BlastConfig.sol';
import { InterportLZGasTransfer } from '../../gas-transfer/InterportLZGasTransfer.sol';

/**
 * @title InterportLZGasTransfer_Blast
 * @notice Gas transfer contract
 */
contract InterportLZGasTransfer_Blast is InterportLZGasTransfer, BlastConfig {
    /**
     * @notice Initializes the contract
     * @param _lzEndpoint The cross-chain endpoint contract address
     * @param _lzRelayer The cross-chain relayer contract address
     * @param _validation The initial validation data
     * @param _owner The address of the initial owner of the contract
     */
    constructor(
        address _lzEndpoint,
        address _lzRelayer,
        bytes memory _validation,
        address _owner
    ) InterportLZGasTransfer(_lzEndpoint, _lzRelayer, _validation, _owner) {
        blastConfigureClaimableAssets();
        blastConfigureGovernor(_owner);
    }

    function _isBlastConfigAuthorized() internal view override returns (bool) {
        return msg.sender == owner();
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;

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

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

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

    bool private _paused;

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

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

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

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

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

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

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

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

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

import { Ownable } from '@openzeppelin/contracts/access/Ownable.sol';
import { Pausable } from '@openzeppelin/contracts/security/Pausable.sol';
import { ITokenBalance } from '../interfaces/ITokenBalance.sol';
import '../helpers/TransferHelper.sol' as TransferHelper;
import '../Constants.sol' as Constants;

/**
 * @title OwnerManageable
 * @notice OwnerManageable contract
 */
contract OwnerManageable is Ownable, Pausable {
    /**
     * @notice Enter pause state
     */
    function pause() external virtual onlyOwner whenNotPaused {
        _pause();
    }

    /**
     * @notice Exit pause state
     */
    function unpause() external virtual onlyOwner whenPaused {
        _unpause();
    }

    /**
     * @notice Performs the token cleanup
     * @dev Use the "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" address for the native token
     * @param _tokenAddress The address of the token
     */
    function cleanup(address _tokenAddress) external onlyOwner {
        if (_tokenAddress == Constants.NATIVE_TOKEN_ADDRESS) {
            TransferHelper.safeTransferNative(msg.sender, address(this).balance);
        } else {
            TransferHelper.safeTransfer(
                _tokenAddress,
                msg.sender,
                ITokenBalance(_tokenAddress).balanceOf(address(this))
            );
        }
    }

    /**
     * @notice Performs the token cleanup using the provided amount
     * @dev Use the "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" address for the native token
     * @param _tokenAddress The address of the token
     * @param _tokenAmount The amount of the token
     */
    function cleanupWithAmount(address _tokenAddress, uint256 _tokenAmount) external onlyOwner {
        if (_tokenAddress == Constants.NATIVE_TOKEN_ADDRESS) {
            TransferHelper.safeTransferNative(msg.sender, _tokenAmount);
        } else {
            TransferHelper.safeTransfer(_tokenAddress, msg.sender, _tokenAmount);
        }
    }

    function _initOwner(address _owner) internal {
        if (_owner != _msgSender() && _owner != address(0)) {
            _transferOwnership(_owner);
        }
    }
}

// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

import { IBlast, IERC20Rebasing, YieldMode, GasMode } from './interfaces/IBlast.sol';
import { BlastContracts } from './BlastContracts.sol';

abstract contract BlastConfig is BlastContracts {
    /**
     * @dev Modifier to check if the caller is authorized to perform Blast configuration
     */
    modifier onlyBlastConfigAuthorized(bool _initAllowed) {
        require(
            (_initAllowed && address(this).code.length == 0) || _isBlastConfigAuthorized(),
            'BlastConfig: Unauthorized'
        );

        _;
    }

    /**
     * @notice Blast: claimable assets configuration
     */
    function blastConfigureClaimableAssets() public virtual onlyBlastConfigAuthorized(true) {
        BLAST.configureClaimableYield(); // The default is YieldMode.VOID
        BLAST.configureClaimableGas(); // The default is GasMode.VOID

        USDB.configure(YieldMode.CLAIMABLE); // The default is YieldMode.AUTOMATIC
        WETH.configure(YieldMode.CLAIMABLE); // The default is YieldMode.AUTOMATIC
    }

    /**
     * @notice Blast: token yield configuration
     * @param _token Token reference
     * @param _yieldMode Yield mode
     */
    function blastConfigureTokenYield(
        IERC20Rebasing _token,
        YieldMode _yieldMode
    ) public virtual onlyBlastConfigAuthorized(true) {
        _token.configure(_yieldMode);
    }

    /**
     * @notice Blast: governor configuration
     * @param _governor Governor address
     */
    function blastConfigureGovernor(
        address _governor
    ) public virtual onlyBlastConfigAuthorized(true) {
        BLAST.configureGovernor(_governor);
    }

    /**
     * @notice Blast: points operator configuration
     * @param _pointsOperator Blast points operator address
     */
    function blastConfigurePointsOperator(
        address _pointsOperator
    ) public virtual onlyBlastConfigAuthorized(true) {
        BLAST_POINTS.configurePointsOperator(_pointsOperator);
    }

    /**
     * @notice Blast: token yield claim
     * @param _token Token reference
     * @param _recipient Recipient address
     * @param _amount Token amount
     */
    function blastClaimTokenYield(
        IERC20Rebasing _token,
        address _recipient,
        uint256 _amount
    ) public virtual onlyBlastConfigAuthorized(false) {
        _token.claim(_recipient, _amount);
    }

    function _isBlastConfigAuthorized() internal virtual returns (bool);
}

File 7 of 17 : BlastContracts.sol
// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

import { IBlast, IERC20Rebasing, IBlastPoints } from './interfaces/IBlast.sol';

contract BlastContracts {
    /**
     * @dev Blast gas fees and ETH yield contract reference
     * @dev Gas fees: https://docs.blast.io/building/guides/gas-fees
     * @dev ETH yield: https://docs.blast.io/building/guides/eth-yield
     */
    IBlast public constant BLAST = IBlast(0x4300000000000000000000000000000000000002);

    /**
     * @dev Blast USDB contract reference
     * @dev See https://docs.blast.io/building/guides/weth-yield
     */
    IERC20Rebasing public constant USDB =
        IERC20Rebasing(0x4300000000000000000000000000000000000003);

    /**
     * @dev Blast WETH contract reference
     * @dev See https://docs.blast.io/building/guides/weth-yield
     */
    IERC20Rebasing public constant WETH =
        IERC20Rebasing(0x4300000000000000000000000000000000000004);

    /**
     * @dev Blast points contract reference
     * @dev See https://docs.blast.io/airdrop/api
     */
    IBlastPoints public constant BLAST_POINTS =
        IBlastPoints(0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800);
}

// SPDX-License-Identifier: BSL 1.1 - Copyright 2024 MetaLayer Labs Ltd.

pragma solidity 0.8.19;

enum YieldMode {
    AUTOMATIC,
    VOID,
    CLAIMABLE
}

enum GasMode {
    VOID,
    CLAIMABLE
}

interface IBlast {
    // configure
    function configureContract(
        address contractAddress,
        YieldMode _yield,
        GasMode gasMode,
        address governor
    ) external;

    function configure(YieldMode _yield, GasMode gasMode, address governor) external;

    // base configuration options
    function configureClaimableYield() external;

    function configureClaimableYieldOnBehalf(address contractAddress) external;

    function configureAutomaticYield() external;

    function configureAutomaticYieldOnBehalf(address contractAddress) external;

    function configureVoidYield() external;

    function configureVoidYieldOnBehalf(address contractAddress) external;

    function configureClaimableGas() external;

    function configureClaimableGasOnBehalf(address contractAddress) external;

    function configureVoidGas() external;

    function configureVoidGasOnBehalf(address contractAddress) external;

    function configureGovernor(address _governor) external;

    function configureGovernorOnBehalf(address _newGovernor, address contractAddress) external;

    // claim yield
    function claimYield(
        address contractAddress,
        address recipientOfYield,
        uint256 amount
    ) external returns (uint256);

    function claimAllYield(
        address contractAddress,
        address recipientOfYield
    ) external returns (uint256);

    // claim gas
    function claimAllGas(
        address contractAddress,
        address recipientOfGas
    ) external returns (uint256);

    function claimGasAtMinClaimRate(
        address contractAddress,
        address recipientOfGas,
        uint256 minClaimRateBips
    ) external returns (uint256);

    function claimMaxGas(
        address contractAddress,
        address recipientOfGas
    ) external returns (uint256);

    function claimGas(
        address contractAddress,
        address recipientOfGas,
        uint256 gasToClaim,
        uint256 gasSecondsToConsume
    ) external returns (uint256);

    // read functions
    function readClaimableYield(address contractAddress) external view returns (uint256);

    function readYieldConfiguration(address contractAddress) external view returns (uint8);

    function readGasParams(
        address contractAddress
    )
        external
        view
        returns (uint256 etherSeconds, uint256 etherBalance, uint256 lastUpdated, GasMode);
}

interface IERC20Rebasing {
    // changes the yield mode of the caller and update the balance
    // to reflect the configuration
    function configure(YieldMode) external returns (uint256);

    // "claimable" yield mode accounts can call this this claim their yield
    // to another address
    function claim(address recipient, uint256 amount) external returns (uint256);

    // read the claimable amount for an account
    function getClaimableAmount(address account) external view returns (uint256);
}

interface IBlastPoints {
    function configurePointsOperator(address operator) external;
}

File 9 of 17 : Constants.sol
// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

/**
 * @dev The default token decimals value
 */
uint256 constant DECIMALS_DEFAULT = 18;

/**
 * @dev The maximum uint256 value for swap amount limit settings
 */
uint256 constant INFINITY = type(uint256).max;

/**
 * @dev The default limit of account list size
 */
uint256 constant LIST_SIZE_LIMIT_DEFAULT = 100;

/**
 * @dev The limit of swap router list size
 */
uint256 constant LIST_SIZE_LIMIT_ROUTERS = 200;

/**
 * @dev The factor for percentage settings. Example: 100 is 0.1%
 */
uint256 constant MILLIPERCENT_FACTOR = 100_000;

/**
 * @dev The de facto standard address to denote the native token
 */
address constant NATIVE_TOKEN_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

/**
 * @title ILayerZeroEndpoint
 * @notice LayerZero endpoint interface
 */
interface ILayerZeroEndpoint {
    /**
     * @notice Send a cross-chain message
     * @param _dstChainId The destination chain identifier
     * @param _destination Remote address concatenated with local address packed into 40 bytes
     * @param _payload The message content
     * @param _refundAddress Refund the additional amount to this address
     * @param _zroPaymentAddress The address of the ZRO token holder who would pay for the transaction
     * @param _adapterParam Parameters for the adapter service
     */
    function send(
        uint16 _dstChainId,
        bytes calldata _destination,
        bytes calldata _payload,
        address payable _refundAddress,
        address _zroPaymentAddress,
        bytes calldata _adapterParam
    ) external payable;

    /**
     * @notice Cross-chain message fee estimation
     * @param _dstChainId The destination chain identifier
     * @param _userApplication The application address on the source chain
     * @param _payload The message content
     * @param _payInZRO If false, the user application pays the protocol fee in the native token
     * @param _adapterParam Parameters for the adapter service
     * @return nativeFee The native token fee for the message
     * @return zroFee The ZRO token fee for the message
     */
    function estimateFees(
        uint16 _dstChainId,
        address _userApplication,
        bytes calldata _payload,
        bool _payInZRO,
        bytes calldata _adapterParam
    ) external view returns (uint256 nativeFee, uint256 zroFee);
}

File 11 of 17 : ILayerZeroRelayer.sol
// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

/**
 * @title ILayerZeroRelayer
 * @notice LayerZero relayer interface
 */
interface ILayerZeroRelayer {
    /**
     * @notice Destination config lookup
     * @param _chainId The chain identifier
     * @param _outboundProofType The type of the outbound proof
     * @return dstNativeAmtCap The native token amount cap on the destination chain
     * @return baseGas The base gas value
     * @return gasPerByte The gas value per byte
     */
    function dstConfigLookup(
        uint16 _chainId,
        uint16 _outboundProofType
    ) external view returns (uint128 dstNativeAmtCap, uint64 baseGas, uint64 gasPerByte);
}

// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

/**
 * @title ILayerZeroResumeReceive
 * @notice LayerZero queue unblocking interface
 */
interface ILayerZeroResumeReceive {
    /**
     * @notice Unblocks the LayerZero message queue
     * @param _srcChainId The source chain identifier
     * @param _srcAddress Remote address concatenated with local address packed into 40 bytes
     */
    function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external;
}

// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

import { ILayerZeroEndpoint } from '../crosschain/layerzero/interfaces/ILayerZeroEndpoint.sol';
import { ILayerZeroRelayer } from '../crosschain/layerzero/interfaces/ILayerZeroRelayer.sol';
import { ILayerZeroResumeReceive } from '../crosschain/layerzero/interfaces/ILayerZeroResumeReceive.sol';
import { OwnerManageable } from '../access/OwnerManageable.sol';
import { SystemVersionId } from '../SystemVersionId.sol';
import '../helpers/AddressHelper.sol' as AddressHelper;

/**
 * @title InterportLZGasTransfer
 * @notice Gas transfer contract
 */
contract InterportLZGasTransfer is SystemVersionId, OwnerManageable {
    /**
     * @notice Gas transfer parameter data structure
     * @param lzChainId LayerZero-specific chain identifier
     * @param recipient The address of the gas transfer recipient
     * @param amount Gas transfer amount
     * @param settings Gas transfer settings
     */
    struct GasTransferParameters {
        uint16 lzChainId;
        address recipient;
        uint256 amount;
        bytes settings;
    }

    /**
     * @dev The address of the cross-chain endpoint
     */
    address public lzEndpoint;

    /**
     * @dev The address of the cross-chain relayer
     */
    address public lzRelayer;

    uint16 private constant LZ_ADAPTER_PARAMETERS_VERSION = 2;
    bytes private constant LZ_PAYLOAD_NONE = '';
    uint256 private minDstGas;
    uint256 private minReserve;

    /**
     * @notice Emitted when the cross-chain endpoint contract reference is set
     * @param endpoint The cross-chain endpoint contract address
     */
    event SetEndpoint(address indexed endpoint);

    /**
     * @notice Emitted when the cross-chain relayer contract reference is set
     * @param relayer The cross-chain relayer contract address
     */
    event SetRelayer(address indexed relayer);

    /**
     * @notice Emitted when the parameter validation results in an error
     */
    error ValidationError();

    /**
     * @notice Initializes the InterportLZGasTransfer contract
     * @param _lzEndpoint The cross-chain endpoint contract address
     * @param _lzRelayer The cross-chain relayer contract address
     * @param _validation The initial validation data
     * @param _owner The address of the initial owner of the contract
     */
    constructor(address _lzEndpoint, address _lzRelayer, bytes memory _validation, address _owner) {
        _setEndpoint(_lzEndpoint);
        _setRelayer(_lzRelayer);
        _setValidation(_validation);

        _initOwner(_owner);
    }

    /**
     * @notice The standard "receive" function
     */
    receive() external payable {}

    /**
     * @notice Performs a gas transfer action
     * @param _parameters Gas transfer parameters
     */
    function gasTransfer(
        GasTransferParameters calldata _parameters
    ) external payable whenNotPaused {
        (uint256 lzValue, address dstApp, bytes memory lzAdapterParameters) = _getEndpointData(
            _parameters,
            true
        );

        ILayerZeroEndpoint(lzEndpoint).send{ value: lzValue }(
            _parameters.lzChainId,
            abi.encodePacked(dstApp, address(this)),
            LZ_PAYLOAD_NONE,
            payable(this),
            address(0),
            lzAdapterParameters
        );
    }

    /**
     * @notice Receives cross-chain messages
     * @dev The function is called by the cross-chain endpoint
     */
    function lzReceive(uint16, bytes calldata, uint64, bytes calldata) external {}

    /**
     * @notice Unblocks the cross-chain message queue
     * @param _lzSourceChainId The source chain identifier (LayerZero-specific)
     * @param _sourceApp The source chain app address
     */
    function resumeReceive(uint16 _lzSourceChainId, address _sourceApp) external {
        ILayerZeroResumeReceive(lzEndpoint).forceResumeReceive(
            _lzSourceChainId,
            abi.encodePacked(_sourceApp, address(this))
        );
    }

    /**
     * @notice Sets the cross-chain endpoint contract reference
     * @param _lzEndpoint The cross-chain endpoint contract address
     */
    function setEndpoint(address _lzEndpoint) external onlyOwner {
        _setEndpoint(_lzEndpoint);
    }

    /**
     * @notice Sets the cross-chain relayer contract reference
     * @param _lzRelayer The cross-chain relayer contract address
     */
    function setRelayer(address _lzRelayer) external onlyOwner {
        _setRelayer(_lzRelayer);
    }

    /**
     * @notice Sets the validation data
     * @param _validation The validation data
     */
    function setValidation(bytes memory _validation) external onlyOwner {
        _setValidation(_validation);
    }

    /**
     * @notice Source chain tx value estimation
     * @param _parameters Gas transfer parameters
     * @return lzValue The source chain tx value
     */
    function estimateSourceValue(
        GasTransferParameters calldata _parameters
    ) external view returns (uint256 lzValue) {
        (lzValue, , ) = _getEndpointData(_parameters, false);
    }

    /**
     * @notice The native token amount cap on the destination chains
     * @param _lzChainIds The destination chain identifier array (LayerZero-specific)
     * @return The native token amount cap on the destination chains
     */
    function destinationAmountCap(
        uint16[] calldata _lzChainIds
    ) external view returns (uint128[] memory) {
        uint128[] memory result = new uint128[](_lzChainIds.length);

        uint16 lzChainId;
        uint16 outboundProofType;
        uint128 cap;

        address sendLibrary = SendLibraryProvider(lzEndpoint).getSendLibraryAddress(address(this));

        for (uint256 index; index < _lzChainIds.length; index++) {
            lzChainId = _lzChainIds[index];
            outboundProofType = AppConfigProvider(sendLibrary)
                .getAppConfig(lzChainId, address(this))
                .outboundProofType;

            (cap, , ) = ILayerZeroRelayer(lzRelayer).dstConfigLookup(lzChainId, outboundProofType);

            result[index] = cap;
        }

        return result;
    }

    function _setEndpoint(address _lzEndpoint) private {
        AddressHelper.requireContract(_lzEndpoint);

        lzEndpoint = _lzEndpoint;

        emit SetEndpoint(_lzEndpoint);
    }

    function _setRelayer(address _lzRelayer) private {
        AddressHelper.requireContract(_lzRelayer);

        lzRelayer = _lzRelayer;

        emit SetRelayer(_lzRelayer);
    }

    function _setValidation(bytes memory _validation) private {
        (minDstGas, minReserve) = abi.decode(_validation, (uint256, uint256));
    }

    function _getEndpointData(
        GasTransferParameters calldata _parameters,
        bool _validate
    ) private view returns (uint256 lzValue, address dstApp, bytes memory lzAdapterParameters) {
        uint256 dstGas;

        (dstApp, dstGas, lzAdapterParameters) = _decodeParameters(_parameters);

        (lzValue, ) = ILayerZeroEndpoint(lzEndpoint).estimateFees(
            _parameters.lzChainId,
            address(this),
            LZ_PAYLOAD_NONE,
            false,
            lzAdapterParameters
        );

        if (_validate && (dstGas < minDstGas || lzValue + minReserve > msg.value)) {
            revert ValidationError();
        }
    }

    function _decodeParameters(
        GasTransferParameters calldata _parameters
    ) private view returns (address dstApp, uint256 dstGas, bytes memory lzAdapterParameters) {
        (dstApp, dstGas) = abi.decode(_parameters.settings, (address, uint256));

        lzAdapterParameters = abi.encodePacked(
            LZ_ADAPTER_PARAMETERS_VERSION,
            dstGas,
            _parameters.amount,
            _parameters.recipient == address(0) ? msg.sender : _parameters.recipient
        );
    }
}

interface SendLibraryProvider {
    function getSendLibraryAddress(
        address _userApplication
    ) external view returns (address sendLibraryAddress);
}

interface AppConfigProvider {
    struct ApplicationConfiguration {
        uint16 inboundProofLibraryVersion;
        uint64 inboundBlockConfirmations;
        address relayer;
        uint16 outboundProofType;
        uint64 outboundBlockConfirmations;
        address oracle;
    }

    function getAppConfig(
        uint16 _remoteChainId,
        address _userApplicationAddress
    ) external view returns (ApplicationConfiguration memory);
}

File 14 of 17 : AddressHelper.sol
// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

/**
 * @notice Emitted when the account is not a contract
 * @param account The account address
 */
error NonContractAddressError(address account);

/**
 * @notice Function to check if the account is a contract
 * @return The account contract status flag
 */
function isContract(address _account) view returns (bool) {
    return _account.code.length > 0;
}

/**
 * @notice Function to require an account to be a contract
 */
function requireContract(address _account) view {
    if (!isContract(_account)) {
        revert NonContractAddressError(_account);
    }
}

/**
 * @notice Function to require an account to be a contract or a zero address
 */
function requireContractOrZeroAddress(address _account) view {
    if (_account != address(0)) {
        requireContract(_account);
    }
}

File 15 of 17 : TransferHelper.sol
// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

/**
 * @notice Emitted when an approval action fails
 */
error SafeApproveError();

/**
 * @notice Emitted when a transfer action fails
 */
error SafeTransferError();

/**
 * @notice Emitted when a transferFrom action fails
 */
error SafeTransferFromError();

/**
 * @notice Emitted when a transfer of the native token fails
 */
error SafeTransferNativeError();

/**
 * @notice Safely approve the token to the account
 * @param _token The token address
 * @param _to The token approval recipient address
 * @param _value The token approval amount
 */
function safeApprove(address _token, address _to, uint256 _value) {
    // 0x095ea7b3 is the selector for "approve(address,uint256)"
    (bool success, bytes memory data) = _token.call(
        abi.encodeWithSelector(0x095ea7b3, _to, _value)
    );

    bool condition = success && (data.length == 0 || abi.decode(data, (bool)));

    if (!condition) {
        revert SafeApproveError();
    }
}

/**
 * @notice Safely transfer the token to the account
 * @param _token The token address
 * @param _to The token transfer recipient address
 * @param _value The token transfer amount
 */
function safeTransfer(address _token, address _to, uint256 _value) {
    // 0xa9059cbb is the selector for "transfer(address,uint256)"
    (bool success, bytes memory data) = _token.call(
        abi.encodeWithSelector(0xa9059cbb, _to, _value)
    );

    bool condition = success && (data.length == 0 || abi.decode(data, (bool)));

    if (!condition) {
        revert SafeTransferError();
    }
}

/**
 * @notice Safely transfer the token between the accounts
 * @param _token The token address
 * @param _from The token transfer source address
 * @param _to The token transfer recipient address
 * @param _value The token transfer amount
 */
function safeTransferFrom(address _token, address _from, address _to, uint256 _value) {
    // 0x23b872dd is the selector for "transferFrom(address,address,uint256)"
    (bool success, bytes memory data) = _token.call(
        abi.encodeWithSelector(0x23b872dd, _from, _to, _value)
    );

    bool condition = success && (data.length == 0 || abi.decode(data, (bool)));

    if (!condition) {
        revert SafeTransferFromError();
    }
}

/**
 * @notice Safely transfer the native token to the account
 * @param _to The native token transfer recipient address
 * @param _value The native token transfer amount
 */
function safeTransferNative(address _to, uint256 _value) {
    (bool success, ) = _to.call{ value: _value }(new bytes(0));

    if (!success) {
        revert SafeTransferNativeError();
    }
}

// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

/**
 * @title ITokenBalance
 * @notice Token balance interface
 */
interface ITokenBalance {
    /**
     * @notice Getter of the token balance by the account
     * @param _account The account address
     * @return Token balance
     */
    function balanceOf(address _account) external view returns (uint256);
}

File 17 of 17 : SystemVersionId.sol
// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity 0.8.19;

/**
 * @title SystemVersionId
 * @notice Base contract providing the system version identifier
 */
abstract contract SystemVersionId {
    /**
     * @dev The system version identifier
     */
    uint256 public constant SYSTEM_VERSION_ID = uint256(keccak256('Initial'));
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_lzEndpoint","type":"address"},{"internalType":"address","name":"_lzRelayer","type":"address"},{"internalType":"bytes","name":"_validation","type":"bytes"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NonContractAddressError","type":"error"},{"inputs":[],"name":"SafeTransferError","type":"error"},{"inputs":[],"name":"SafeTransferNativeError","type":"error"},{"inputs":[],"name":"ValidationError","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"endpoint","type":"address"}],"name":"SetEndpoint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"relayer","type":"address"}],"name":"SetRelayer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"contract IBlast","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLAST_POINTS","outputs":[{"internalType":"contract IBlastPoints","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SYSTEM_VERSION_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDB","outputs":[{"internalType":"contract IERC20Rebasing","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IERC20Rebasing","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20Rebasing","name":"_token","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"blastClaimTokenYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blastConfigureClaimableAssets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governor","type":"address"}],"name":"blastConfigureGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pointsOperator","type":"address"}],"name":"blastConfigurePointsOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20Rebasing","name":"_token","type":"address"},{"internalType":"enum YieldMode","name":"_yieldMode","type":"uint8"}],"name":"blastConfigureTokenYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"cleanup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"cleanupWithAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_lzChainIds","type":"uint16[]"}],"name":"destinationAmountCap","outputs":[{"internalType":"uint128[]","name":"","type":"uint128[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint16","name":"lzChainId","type":"uint16"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"settings","type":"bytes"}],"internalType":"struct InterportLZGasTransfer.GasTransferParameters","name":"_parameters","type":"tuple"}],"name":"estimateSourceValue","outputs":[{"internalType":"uint256","name":"lzValue","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint16","name":"lzChainId","type":"uint16"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"settings","type":"bytes"}],"internalType":"struct InterportLZGasTransfer.GasTransferParameters","name":"_parameters","type":"tuple"}],"name":"gasTransfer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"lzEndpoint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint64","name":"","type":"uint64"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lzRelayer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_lzSourceChainId","type":"uint16"},{"internalType":"address","name":"_sourceApp","type":"address"}],"name":"resumeReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lzEndpoint","type":"address"}],"name":"setEndpoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lzRelayer","type":"address"}],"name":"setRelayer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_validation","type":"bytes"}],"name":"setValidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50604051620023f2380380620023f283398101604081905262000034916200057c565b838383836200004333620000a5565b6000805460ff60a01b191690556200005b84620000f5565b62000066836200014a565b62000071826200019f565b6200007c81620001be565b5050505062000090620001f460201b60201c565b6200009b8162000438565b50505050620006f1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001008162000514565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fc8e81a4efc849969069ec6aae575cf7a6bc5f9d3abac59f4ed190a6f7e05fc6f90600090a250565b620001558162000514565b600280546001600160a01b0319166001600160a01b0383169081179091556040517fedb217d6a3bb873e0066d9872f47ec52905562e46c8f025fa4d5044a344aa5fc90600090a250565b80806020019051810190620001b5919062000689565b60045560035550565b6001600160a01b0381163314801590620001e057506001600160a01b03811615155b15620001f157620001f181620000a5565b50565b6001303b15806200020f57506000546001600160a01b031633145b620002615760405162461bcd60e51b815260206004820152601960248201527f426c617374436f6e6669673a20556e617574686f72697a65640000000000000060448201526064015b60405180910390fd5b7343000000000000000000000000000000000000026001600160a01b031663f098767a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002b157600080fd5b505af1158015620002c6573d6000803e3d6000fd5b505050507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200031a57600080fd5b505af11580156200032f573d6000803e3d6000fd5b5050604051631a33757d60e01b81527343000000000000000000000000000000000000039250631a33757d91506200036d90600290600401620006ae565b6020604051808303816000875af11580156200038d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b39190620006d7565b50604051631a33757d60e01b815273430000000000000000000000000000000000000490631a33757d90620003ee90600290600401620006ae565b6020604051808303816000875af11580156200040e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004349190620006d7565b5050565b6001303b15806200045357506000546001600160a01b031633145b620004a15760405162461bcd60e51b815260206004820152601960248201527f426c617374436f6e6669673a20556e617574686f72697a656400000000000000604482015260640162000258565b604051631d70c8d360e31b81526001600160a01b03831660048201527343000000000000000000000000000000000000029063eb86469890602401600060405180830381600087803b158015620004f757600080fd5b505af11580156200050c573d6000803e3d6000fd5b505050505050565b6001600160a01b0381163b620001f157604051638c50d7cd60e01b81526001600160a01b038216600482015260240162000258565b80516001600160a01b03811681146200056157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156200059357600080fd5b6200059e8562000549565b93506020620005af81870162000549565b60408701519094506001600160401b0380821115620005cd57600080fd5b818801915088601f830112620005e257600080fd5b815181811115620005f757620005f762000566565b604051601f8201601f19908116603f0116810190838211818310171562000622576200062262000566565b816040528281528b868487010111156200063b57600080fd5b600093505b828410156200065f578484018601518185018701529285019262000640565b60008684830101528097505050505050506200067e6060860162000549565b905092959194509250565b600080604083850312156200069d57600080fd5b505080516020909101519092909150565b6020810160038310620006d157634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215620006ea57600080fd5b5051919050565b611cf180620007016000396000f3fe6080604052600436106101ba5760003560e01c80637110e34d116100ec578063ad5c46481161008a578063dfed8bd711610064578063dfed8bd7146104ec578063efb738801461050c578063f2fde38b1461051f578063fbacefce1461053f57600080fd5b8063ad5c464814610491578063b353aaa7146104ac578063dbbb4155146104cc57600080fd5b80638da5cb5b116100c65780638da5cb5b14610418578063964236941461043657806397d7577614610456578063ad5304091461047157600080fd5b80637110e34d146103ce578063715018a6146103ee5780638456cb591461040357600080fd5b806331a0edec116101595780634b8f9025116101335780634b8f90251461032f5780635c975abb146103575780636548e9bc146103815780636a0b3ad4146103a157600080fd5b806331a0edec146102c757806338405ec3146102fa5780633f4ba83a1461031a57600080fd5b806327b257491161019557806327b2574914610247578063286d05d2146102675780632c16f926146102875780633132bb31146102a757600080fd5b80621d3567146101c6578063093f0e27146101eb5780631581c5bf1461023257600080fd5b366101c157005b600080fd5b3480156101d257600080fd5b506101e96101e1366004611568565b505050505050565b005b3480156101f757600080fd5b5061021f7f22ad9585a395edc8067b50da4778cafbb7fa2c4bbd7619fad6aeba403857fd7481565b6040519081526020015b60405180910390f35b34801561023e57600080fd5b506101e961055f565b34801561025357600080fd5b506101e9610262366004611614565b610733565b34801561027357600080fd5b5061021f610282366004611638565b6107d3565b34801561029357600080fd5b506101e96102a2366004611673565b6107e9565b3480156102b357600080fd5b506101e96102c23660046116b5565b61082b565b3480156102d357600080fd5b506102e26003604360981b0181565b6040516001600160a01b039091168152602001610229565b34801561030657600080fd5b506101e9610315366004611766565b61083f565b34801561032657600080fd5b506101e96108e4565b34801561033b57600080fd5b506102e2732536fe9ab3f511540f2f9e2ec2a805005c3dd80081565b34801561036357600080fd5b50600054600160a01b900460ff166040519015158152602001610229565b34801561038d57600080fd5b506101e961039c366004611614565b6108fe565b3480156103ad57600080fd5b506103c16103bc3660046117a7565b61090f565b604051610229919061181c565b3480156103da57600080fd5b506101e96103e9366004611869565b610b45565b3480156103fa57600080fd5b506101e9610ba8565b34801561040f57600080fd5b506101e9610bba565b34801561042457600080fd5b506000546001600160a01b03166102e2565b34801561044257600080fd5b506101e9610451366004611614565b610bd2565b34801561046257600080fd5b506102e26002604360981b0181565b34801561047d57600080fd5b506101e961048c3660046118a2565b610c3b565b34801561049d57600080fd5b506102e26004604360981b0181565b3480156104b857600080fd5b506001546102e2906001600160a01b031681565b3480156104d857600080fd5b506101e96104e7366004611614565b610ce6565b3480156104f857600080fd5b506002546102e2906001600160a01b031681565b6101e961051a366004611638565b610cf7565b34801561052b57600080fd5b506101e961053a366004611614565b610dd0565b34801561054b57600080fd5b506101e961055a366004611614565b610e46565b6001303b158061057957506000546001600160a01b031633145b61059e5760405162461bcd60e51b8152600401610595906118d4565b60405180910390fd5b6002604360981b016001600160a01b031663f098767a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105e057600080fd5b505af11580156105f4573d6000803e3d6000fd5b505050506002604360981b016001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561063a57600080fd5b505af115801561064e573d6000803e3d6000fd5b5050604051631a33757d60e01b81526003604360981b019250631a33757d915061067d9060029060040161190b565b6020604051808303816000875af115801561069c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c09190611933565b50604051631a33757d60e01b81526004604360981b0190631a33757d906106ec9060029060040161190b565b6020604051808303816000875af115801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f9190611933565b5050565b6001303b158061074d57506000546001600160a01b031633145b6107695760405162461bcd60e51b8152600401610595906118d4565b6040516336b91f2b60e01b81526001600160a01b0383166004820152732536fe9ab3f511540f2f9e2ec2a805005c3dd800906336b91f2b906024015b600060405180830381600087803b1580156107bf57600080fd5b505af11580156101e1573d6000803e3d6000fd5b60006107e0826000610ef2565b50909392505050565b6107f1610fe8565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038316016108205761072f3382611042565b61072f8233836110d5565b610833610fe8565b61083c816111bf565b50565b600080546001600160a01b0316331461086a5760405162461bcd60e51b8152600401610595906118d4565b604051635569f64b60e11b81526001600160a01b0384811660048301526024820184905285169063aad3ec96906044016020604051808303816000875af11580156108b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dd9190611933565b5050505050565b6108ec610fe8565b6108f46111dc565b6108fc61122c565b565b610906610fe8565b61083c81611281565b606060008267ffffffffffffffff81111561092c5761092c61169f565b604051908082528060200260200182016040528015610955578160200160208202803683370190505b50600154604051639c729da160e01b81523060048201529192506000918291829182916001600160a01b031690639c729da190602401602060405180830381865afa1580156109a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cc919061194c565b905060005b87811015610b36578888828181106109eb576109eb611969565b9050602002016020810190610a00919061197f565b604051635233111160e11b815261ffff821660048201523060248201529095506001600160a01b0383169063a46622229060440160c060405180830381865afa158015610a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a75919061199c565b60600151600254604051630462c3ff60e31b815261ffff8089166004830152831660248201529195506001600160a01b0316906323161ff890604401606060405180830381865afa158015610ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af29190611a47565b9050508093505082868281518110610b0c57610b0c611969565b6001600160801b039092166020928302919091019091015280610b2e81611ab6565b9150506109d1565b50939450505050505b92915050565b600154604080516001600160601b0319606085811b8216602084015230901b1660348201528151808203602801815260488201928390526342d65a8d60e01b9092526001600160a01b03909216916342d65a8d916107a591869190604c01611b1f565b610bb0610fe8565b6108fc60006112d4565b610bc2610fe8565b610bca611324565b6108fc611371565b6001303b1580610bec57506000546001600160a01b031633145b610c085760405162461bcd60e51b8152600401610595906118d4565b604051631d70c8d360e31b81526001600160a01b03831660048201526002604360981b019063eb864698906024016107a5565b6001303b1580610c5557506000546001600160a01b031633145b610c715760405162461bcd60e51b8152600401610595906118d4565b604051631a33757d60e01b81526001600160a01b03841690631a33757d90610c9d90859060040161190b565b6020604051808303816000875af1158015610cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce09190611933565b50505050565b610cee610fe8565b61083c816113b4565b610cff611324565b6000806000610d0f846001610ef2565b60015492955090935091506001600160a01b031663c580310084610d36602088018861197f565b6040516001600160601b0319606088811b8216602084015230901b16603482015260480160408051601f19818403018152602083018252600080845291516001600160e01b031960e088901b168152610d989493919230918a90600401611b44565b6000604051808303818588803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b505050505050505050565b610dd8610fe8565b6001600160a01b038116610e3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610595565b61083c816112d4565b610e4e610fe8565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03821601610e7d5761083c3347611042565b6040516370a0823160e01b815230600482015261083c90829033906001600160a01b038316906370a0823190602401602060405180830381865afa158015610ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eed9190611933565b6110d5565b60008060606000610f0286611407565b600154929550935091506001600160a01b03166340a7bb10610f27602089018961197f565b60408051602081018252600080825291516001600160e01b031960e086901b168152610f5b93923092918990600401611bab565b6040805180830381865afa158015610f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9b9190611bff565b509350848015610fc25750600354811080610fc257503460045485610fc09190611c23565b115b15610fe05760405163ae64f5e560e01b815260040160405180910390fd5b509250925092565b6000546001600160a01b031633146108fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610595565b604080516000808252602082019092526001600160a01b03841690839060405161106c9190611c36565b60006040518083038185875af1925050503d80600081146110a9576040519150601f19603f3d011682016040523d82523d6000602084013e6110ae565b606091505b50509050806110d057604051632e05b05360e21b815260040160405180910390fd5b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916111319190611c36565b6000604051808303816000865af19150503d806000811461116e576040519150601f19603f3d011682016040523d82523d6000602084013e611173565b606091505b5091509150600082801561119f57508151158061119f57508180602001905181019061119f9190611c52565b9050806101e157604051632fdb1b7f60e11b815260040160405180910390fd5b808060200190518101906111d39190611bff565b60045560035550565b600054600160a01b900460ff166108fc5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610595565b6112346111dc565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61128a816114c6565b600280546001600160a01b0319166001600160a01b0383169081179091556040517fedb217d6a3bb873e0066d9872f47ec52905562e46c8f025fa4d5044a344aa5fc90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff16156108fc5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610595565b611379611324565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112643390565b6113bd816114c6565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fc8e81a4efc849969069ec6aae575cf7a6bc5f9d3abac59f4ed190a6f7e05fc6f90600090a250565b600080606061141884820185611c74565b8101906114259190611673565b9093509150600282604086018035906000906114449060208a01611614565b6001600160a01b031614611467576114626040880160208901611614565b611469565b335b6040516020016114ae949392919060f09490941b6001600160f01b03191684526002840192909252602283015260601b6001600160601b031916604282015260560190565b60405160208183030381529060405290509193909250565b6001600160a01b0381163b61083c57604051638c50d7cd60e01b81526001600160a01b0382166004820152602401610595565b61ffff8116811461083c57600080fd5b60008083601f84011261151b57600080fd5b50813567ffffffffffffffff81111561153357600080fd5b60208301915083602082850101111561154b57600080fd5b9250929050565b67ffffffffffffffff8116811461083c57600080fd5b6000806000806000806080878903121561158157600080fd5b863561158c816114f9565b9550602087013567ffffffffffffffff808211156115a957600080fd5b6115b58a838b01611509565b9097509550604089013591506115ca82611552565b909350606088013590808211156115e057600080fd5b506115ed89828a01611509565b979a9699509497509295939492505050565b6001600160a01b038116811461083c57600080fd5b60006020828403121561162657600080fd5b8135611631816115ff565b9392505050565b60006020828403121561164a57600080fd5b813567ffffffffffffffff81111561166157600080fd5b82016080818503121561163157600080fd5b6000806040838503121561168657600080fd5b8235611691816115ff565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156116c757600080fd5b813567ffffffffffffffff808211156116df57600080fd5b818401915084601f8301126116f357600080fd5b8135818111156117055761170561169f565b604051601f8201601f19908116603f0116810190838211818310171561172d5761172d61169f565b8160405282815287602084870101111561174657600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060006060848603121561177b57600080fd5b8335611786816115ff565b92506020840135611796816115ff565b929592945050506040919091013590565b600080602083850312156117ba57600080fd5b823567ffffffffffffffff808211156117d257600080fd5b818501915085601f8301126117e657600080fd5b8135818111156117f557600080fd5b8660208260051b850101111561180a57600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b8181101561185d5783516001600160801b031683529284019291840191600101611838565b50909695505050505050565b6000806040838503121561187c57600080fd5b8235611887816114f9565b91506020830135611897816115ff565b809150509250929050565b600080604083850312156118b557600080fd5b82356118c0816115ff565b915060208301356003811061189757600080fd5b60208082526019908201527f426c617374436f6e6669673a20556e617574686f72697a656400000000000000604082015260600190565b602081016003831061192d57634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561194557600080fd5b5051919050565b60006020828403121561195e57600080fd5b8151611631816115ff565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561199157600080fd5b8135611631816114f9565b600060c082840312156119ae57600080fd5b60405160c0810181811067ffffffffffffffff821117156119d1576119d161169f565b60405282516119df816114f9565b815260208301516119ef81611552565b60208201526040830151611a02816115ff565b60408201526060830151611a15816114f9565b60608201526080830151611a2881611552565b608082015260a0830151611a3b816115ff565b60a08201529392505050565b600080600060608486031215611a5c57600080fd5b83516001600160801b0381168114611a7357600080fd5b6020850151909350611a8481611552565b6040850151909250611a9581611552565b809150509250925092565b634e487b7160e01b600052601160045260246000fd5b600060018201611ac857611ac8611aa0565b5060010190565b60005b83811015611aea578181015183820152602001611ad2565b50506000910152565b60008151808452611b0b816020860160208601611acf565b601f01601f19169290920160200192915050565b61ffff83168152604060208201526000611b3c6040830184611af3565b949350505050565b61ffff8716815260c060208201526000611b6160c0830188611af3565b8281036040840152611b738188611af3565b6001600160a01b0387811660608601528616608085015283810360a08501529050611b9e8185611af3565b9998505050505050505050565b61ffff861681526001600160a01b038516602082015260a060408201819052600090611bd990830186611af3565b84151560608401528281036080840152611bf38185611af3565b98975050505050505050565b60008060408385031215611c1257600080fd5b505080516020909101519092909150565b80820180821115610b3f57610b3f611aa0565b60008251611c48818460208701611acf565b9190910192915050565b600060208284031215611c6457600080fd5b8151801515811461163157600080fd5b6000808335601e19843603018112611c8b57600080fd5b83018035915067ffffffffffffffff821115611ca657600080fd5b60200191503681900382131561154b57600080fdfea2646970667358221220d62d1fa3dca9c511243cf4aa944a45d65aa3e5400c22fc73411863e36a47468164736f6c63430008130033000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7000000000000000000000000a658742d33ebd2ce2f0bdff73515aa797fd161d90000000000000000000000000000000000000000000000000000000000000080000000000000000000000000894634481e0d40f55dbae68b4340d2c051db585e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000b3a73cfd8d0

Deployed Bytecode

0x6080604052600436106101ba5760003560e01c80637110e34d116100ec578063ad5c46481161008a578063dfed8bd711610064578063dfed8bd7146104ec578063efb738801461050c578063f2fde38b1461051f578063fbacefce1461053f57600080fd5b8063ad5c464814610491578063b353aaa7146104ac578063dbbb4155146104cc57600080fd5b80638da5cb5b116100c65780638da5cb5b14610418578063964236941461043657806397d7577614610456578063ad5304091461047157600080fd5b80637110e34d146103ce578063715018a6146103ee5780638456cb591461040357600080fd5b806331a0edec116101595780634b8f9025116101335780634b8f90251461032f5780635c975abb146103575780636548e9bc146103815780636a0b3ad4146103a157600080fd5b806331a0edec146102c757806338405ec3146102fa5780633f4ba83a1461031a57600080fd5b806327b257491161019557806327b2574914610247578063286d05d2146102675780632c16f926146102875780633132bb31146102a757600080fd5b80621d3567146101c6578063093f0e27146101eb5780631581c5bf1461023257600080fd5b366101c157005b600080fd5b3480156101d257600080fd5b506101e96101e1366004611568565b505050505050565b005b3480156101f757600080fd5b5061021f7f22ad9585a395edc8067b50da4778cafbb7fa2c4bbd7619fad6aeba403857fd7481565b6040519081526020015b60405180910390f35b34801561023e57600080fd5b506101e961055f565b34801561025357600080fd5b506101e9610262366004611614565b610733565b34801561027357600080fd5b5061021f610282366004611638565b6107d3565b34801561029357600080fd5b506101e96102a2366004611673565b6107e9565b3480156102b357600080fd5b506101e96102c23660046116b5565b61082b565b3480156102d357600080fd5b506102e26003604360981b0181565b6040516001600160a01b039091168152602001610229565b34801561030657600080fd5b506101e9610315366004611766565b61083f565b34801561032657600080fd5b506101e96108e4565b34801561033b57600080fd5b506102e2732536fe9ab3f511540f2f9e2ec2a805005c3dd80081565b34801561036357600080fd5b50600054600160a01b900460ff166040519015158152602001610229565b34801561038d57600080fd5b506101e961039c366004611614565b6108fe565b3480156103ad57600080fd5b506103c16103bc3660046117a7565b61090f565b604051610229919061181c565b3480156103da57600080fd5b506101e96103e9366004611869565b610b45565b3480156103fa57600080fd5b506101e9610ba8565b34801561040f57600080fd5b506101e9610bba565b34801561042457600080fd5b506000546001600160a01b03166102e2565b34801561044257600080fd5b506101e9610451366004611614565b610bd2565b34801561046257600080fd5b506102e26002604360981b0181565b34801561047d57600080fd5b506101e961048c3660046118a2565b610c3b565b34801561049d57600080fd5b506102e26004604360981b0181565b3480156104b857600080fd5b506001546102e2906001600160a01b031681565b3480156104d857600080fd5b506101e96104e7366004611614565b610ce6565b3480156104f857600080fd5b506002546102e2906001600160a01b031681565b6101e961051a366004611638565b610cf7565b34801561052b57600080fd5b506101e961053a366004611614565b610dd0565b34801561054b57600080fd5b506101e961055a366004611614565b610e46565b6001303b158061057957506000546001600160a01b031633145b61059e5760405162461bcd60e51b8152600401610595906118d4565b60405180910390fd5b6002604360981b016001600160a01b031663f098767a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156105e057600080fd5b505af11580156105f4573d6000803e3d6000fd5b505050506002604360981b016001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561063a57600080fd5b505af115801561064e573d6000803e3d6000fd5b5050604051631a33757d60e01b81526003604360981b019250631a33757d915061067d9060029060040161190b565b6020604051808303816000875af115801561069c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c09190611933565b50604051631a33757d60e01b81526004604360981b0190631a33757d906106ec9060029060040161190b565b6020604051808303816000875af115801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f9190611933565b5050565b6001303b158061074d57506000546001600160a01b031633145b6107695760405162461bcd60e51b8152600401610595906118d4565b6040516336b91f2b60e01b81526001600160a01b0383166004820152732536fe9ab3f511540f2f9e2ec2a805005c3dd800906336b91f2b906024015b600060405180830381600087803b1580156107bf57600080fd5b505af11580156101e1573d6000803e3d6000fd5b60006107e0826000610ef2565b50909392505050565b6107f1610fe8565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038316016108205761072f3382611042565b61072f8233836110d5565b610833610fe8565b61083c816111bf565b50565b600080546001600160a01b0316331461086a5760405162461bcd60e51b8152600401610595906118d4565b604051635569f64b60e11b81526001600160a01b0384811660048301526024820184905285169063aad3ec96906044016020604051808303816000875af11580156108b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dd9190611933565b5050505050565b6108ec610fe8565b6108f46111dc565b6108fc61122c565b565b610906610fe8565b61083c81611281565b606060008267ffffffffffffffff81111561092c5761092c61169f565b604051908082528060200260200182016040528015610955578160200160208202803683370190505b50600154604051639c729da160e01b81523060048201529192506000918291829182916001600160a01b031690639c729da190602401602060405180830381865afa1580156109a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cc919061194c565b905060005b87811015610b36578888828181106109eb576109eb611969565b9050602002016020810190610a00919061197f565b604051635233111160e11b815261ffff821660048201523060248201529095506001600160a01b0383169063a46622229060440160c060405180830381865afa158015610a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a75919061199c565b60600151600254604051630462c3ff60e31b815261ffff8089166004830152831660248201529195506001600160a01b0316906323161ff890604401606060405180830381865afa158015610ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af29190611a47565b9050508093505082868281518110610b0c57610b0c611969565b6001600160801b039092166020928302919091019091015280610b2e81611ab6565b9150506109d1565b50939450505050505b92915050565b600154604080516001600160601b0319606085811b8216602084015230901b1660348201528151808203602801815260488201928390526342d65a8d60e01b9092526001600160a01b03909216916342d65a8d916107a591869190604c01611b1f565b610bb0610fe8565b6108fc60006112d4565b610bc2610fe8565b610bca611324565b6108fc611371565b6001303b1580610bec57506000546001600160a01b031633145b610c085760405162461bcd60e51b8152600401610595906118d4565b604051631d70c8d360e31b81526001600160a01b03831660048201526002604360981b019063eb864698906024016107a5565b6001303b1580610c5557506000546001600160a01b031633145b610c715760405162461bcd60e51b8152600401610595906118d4565b604051631a33757d60e01b81526001600160a01b03841690631a33757d90610c9d90859060040161190b565b6020604051808303816000875af1158015610cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce09190611933565b50505050565b610cee610fe8565b61083c816113b4565b610cff611324565b6000806000610d0f846001610ef2565b60015492955090935091506001600160a01b031663c580310084610d36602088018861197f565b6040516001600160601b0319606088811b8216602084015230901b16603482015260480160408051601f19818403018152602083018252600080845291516001600160e01b031960e088901b168152610d989493919230918a90600401611b44565b6000604051808303818588803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b505050505050505050565b610dd8610fe8565b6001600160a01b038116610e3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610595565b61083c816112d4565b610e4e610fe8565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03821601610e7d5761083c3347611042565b6040516370a0823160e01b815230600482015261083c90829033906001600160a01b038316906370a0823190602401602060405180830381865afa158015610ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eed9190611933565b6110d5565b60008060606000610f0286611407565b600154929550935091506001600160a01b03166340a7bb10610f27602089018961197f565b60408051602081018252600080825291516001600160e01b031960e086901b168152610f5b93923092918990600401611bab565b6040805180830381865afa158015610f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9b9190611bff565b509350848015610fc25750600354811080610fc257503460045485610fc09190611c23565b115b15610fe05760405163ae64f5e560e01b815260040160405180910390fd5b509250925092565b6000546001600160a01b031633146108fc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610595565b604080516000808252602082019092526001600160a01b03841690839060405161106c9190611c36565b60006040518083038185875af1925050503d80600081146110a9576040519150601f19603f3d011682016040523d82523d6000602084013e6110ae565b606091505b50509050806110d057604051632e05b05360e21b815260040160405180910390fd5b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916111319190611c36565b6000604051808303816000865af19150503d806000811461116e576040519150601f19603f3d011682016040523d82523d6000602084013e611173565b606091505b5091509150600082801561119f57508151158061119f57508180602001905181019061119f9190611c52565b9050806101e157604051632fdb1b7f60e11b815260040160405180910390fd5b808060200190518101906111d39190611bff565b60045560035550565b600054600160a01b900460ff166108fc5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610595565b6112346111dc565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61128a816114c6565b600280546001600160a01b0319166001600160a01b0383169081179091556040517fedb217d6a3bb873e0066d9872f47ec52905562e46c8f025fa4d5044a344aa5fc90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff16156108fc5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610595565b611379611324565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112643390565b6113bd816114c6565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fc8e81a4efc849969069ec6aae575cf7a6bc5f9d3abac59f4ed190a6f7e05fc6f90600090a250565b600080606061141884820185611c74565b8101906114259190611673565b9093509150600282604086018035906000906114449060208a01611614565b6001600160a01b031614611467576114626040880160208901611614565b611469565b335b6040516020016114ae949392919060f09490941b6001600160f01b03191684526002840192909252602283015260601b6001600160601b031916604282015260560190565b60405160208183030381529060405290509193909250565b6001600160a01b0381163b61083c57604051638c50d7cd60e01b81526001600160a01b0382166004820152602401610595565b61ffff8116811461083c57600080fd5b60008083601f84011261151b57600080fd5b50813567ffffffffffffffff81111561153357600080fd5b60208301915083602082850101111561154b57600080fd5b9250929050565b67ffffffffffffffff8116811461083c57600080fd5b6000806000806000806080878903121561158157600080fd5b863561158c816114f9565b9550602087013567ffffffffffffffff808211156115a957600080fd5b6115b58a838b01611509565b9097509550604089013591506115ca82611552565b909350606088013590808211156115e057600080fd5b506115ed89828a01611509565b979a9699509497509295939492505050565b6001600160a01b038116811461083c57600080fd5b60006020828403121561162657600080fd5b8135611631816115ff565b9392505050565b60006020828403121561164a57600080fd5b813567ffffffffffffffff81111561166157600080fd5b82016080818503121561163157600080fd5b6000806040838503121561168657600080fd5b8235611691816115ff565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156116c757600080fd5b813567ffffffffffffffff808211156116df57600080fd5b818401915084601f8301126116f357600080fd5b8135818111156117055761170561169f565b604051601f8201601f19908116603f0116810190838211818310171561172d5761172d61169f565b8160405282815287602084870101111561174657600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060006060848603121561177b57600080fd5b8335611786816115ff565b92506020840135611796816115ff565b929592945050506040919091013590565b600080602083850312156117ba57600080fd5b823567ffffffffffffffff808211156117d257600080fd5b818501915085601f8301126117e657600080fd5b8135818111156117f557600080fd5b8660208260051b850101111561180a57600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b8181101561185d5783516001600160801b031683529284019291840191600101611838565b50909695505050505050565b6000806040838503121561187c57600080fd5b8235611887816114f9565b91506020830135611897816115ff565b809150509250929050565b600080604083850312156118b557600080fd5b82356118c0816115ff565b915060208301356003811061189757600080fd5b60208082526019908201527f426c617374436f6e6669673a20556e617574686f72697a656400000000000000604082015260600190565b602081016003831061192d57634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561194557600080fd5b5051919050565b60006020828403121561195e57600080fd5b8151611631816115ff565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561199157600080fd5b8135611631816114f9565b600060c082840312156119ae57600080fd5b60405160c0810181811067ffffffffffffffff821117156119d1576119d161169f565b60405282516119df816114f9565b815260208301516119ef81611552565b60208201526040830151611a02816115ff565b60408201526060830151611a15816114f9565b60608201526080830151611a2881611552565b608082015260a0830151611a3b816115ff565b60a08201529392505050565b600080600060608486031215611a5c57600080fd5b83516001600160801b0381168114611a7357600080fd5b6020850151909350611a8481611552565b6040850151909250611a9581611552565b809150509250925092565b634e487b7160e01b600052601160045260246000fd5b600060018201611ac857611ac8611aa0565b5060010190565b60005b83811015611aea578181015183820152602001611ad2565b50506000910152565b60008151808452611b0b816020860160208601611acf565b601f01601f19169290920160200192915050565b61ffff83168152604060208201526000611b3c6040830184611af3565b949350505050565b61ffff8716815260c060208201526000611b6160c0830188611af3565b8281036040840152611b738188611af3565b6001600160a01b0387811660608601528616608085015283810360a08501529050611b9e8185611af3565b9998505050505050505050565b61ffff861681526001600160a01b038516602082015260a060408201819052600090611bd990830186611af3565b84151560608401528281036080840152611bf38185611af3565b98975050505050505050565b60008060408385031215611c1257600080fd5b505080516020909101519092909150565b80820180821115610b3f57610b3f611aa0565b60008251611c48818460208701611acf565b9190910192915050565b600060208284031215611c6457600080fd5b8151801515811461163157600080fd5b6000808335601e19843603018112611c8b57600080fd5b83018035915067ffffffffffffffff821115611ca657600080fd5b60200191503681900382131561154b57600080fdfea2646970667358221220d62d1fa3dca9c511243cf4aa944a45d65aa3e5400c22fc73411863e36a47468164736f6c63430008130033

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

000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7000000000000000000000000a658742d33ebd2ce2f0bdff73515aa797fd161d90000000000000000000000000000000000000000000000000000000000000080000000000000000000000000894634481e0d40f55dbae68b4340d2c051db585e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000b3a73cfd8d0

-----Decoded View---------------
Arg [0] : _lzEndpoint (address): 0xb6319cC6c8c27A8F5dAF0dD3DF91EA35C4720dd7
Arg [1] : _lzRelayer (address): 0xA658742d33ebd2ce2F0bdFf73515Aa797Fd161D9
Arg [2] : _validation (bytes): 0x0000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000b3a73cfd8d0
Arg [3] : _owner (address): 0x894634481E0d40f55dBAe68b4340D2c051Db585E

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000b6319cc6c8c27a8f5daf0dd3df91ea35c4720dd7
Arg [1] : 000000000000000000000000a658742d33ebd2ce2f0bdff73515aa797fd161d9
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 000000000000000000000000894634481e0d40f55dbae68b4340d2c051db585e
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [5] : 0000000000000000000000000000000000000000000000000000000000001b58
Arg [6] : 00000000000000000000000000000000000000000000000000000b3a73cfd8d0


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.