Latest 25 from a total of 597 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Gas Transfer | 18605667 | 269 days ago | IN | 0.00167948 ETH | 0.00001609 | ||||
| Gas Transfer | 18388393 | 274 days ago | IN | 0.00953242 ETH | 0.00000615 | ||||
| Gas Transfer | 18269836 | 277 days ago | IN | 0.02987608 ETH | 0.00000164 | ||||
| Gas Transfer | 18247975 | 277 days ago | IN | 0.00186232 ETH | 0.00000048 | ||||
| Gas Transfer | 18246647 | 277 days ago | IN | 0.00143095 ETH | 0.00000056 | ||||
| Gas Transfer | 18245604 | 277 days ago | IN | 0.00186267 ETH | 0.00000054 | ||||
| Gas Transfer | 18241004 | 278 days ago | IN | 0.00186269 ETH | 0.00000059 | ||||
| Gas Transfer | 16965082 | 307 days ago | IN | 0.01099119 ETH | 0.00000036 | ||||
| Gas Transfer | 15394254 | 343 days ago | IN | 0.00016131 ETH | 0.00000063 | ||||
| Gas Transfer | 15278628 | 346 days ago | IN | 0.00016337 ETH | 0.00000259 | ||||
| Gas Transfer | 15086491 | 351 days ago | IN | 0.00114108 ETH | 0.00000041 | ||||
| Gas Transfer | 14923388 | 354 days ago | IN | 0.00050344 ETH | 0.00000096 | ||||
| Gas Transfer | 14109589 | 373 days ago | IN | 0.00128773 ETH | 0.00000598 | ||||
| Gas Transfer | 13271424 | 393 days ago | IN | 0.00078024 ETH | 0.00000719 | ||||
| Gas Transfer | 13066735 | 397 days ago | IN | 0.00068463 ETH | 0.00000013 | ||||
| Gas Transfer | 12222435 | 417 days ago | IN | 0.00037336 ETH | 0.00000027 | ||||
| Gas Transfer | 11746610 | 428 days ago | IN | 0.00138455 ETH | 0.00000204 | ||||
| Gas Transfer | 11746593 | 428 days ago | IN | 0.00104441 ETH | 0.00000205 | ||||
| Gas Transfer | 11410387 | 436 days ago | IN | 0.00010908 ETH | 0.00000272 | ||||
| Gas Transfer | 10911862 | 447 days ago | IN | 0.00136059 ETH | 0.0000008 | ||||
| Gas Transfer | 10871946 | 448 days ago | IN | 0.00142444 ETH | 0.00000072 | ||||
| Gas Transfer | 10736162 | 451 days ago | IN | 0.00050213 ETH | 0.00000084 | ||||
| Gas Transfer | 10289226 | 462 days ago | IN | 0.00013529 ETH | 0.00000083 | ||||
| Gas Transfer | 10257664 | 462 days ago | IN | 0.00035074 ETH | 0.00000083 | ||||
| Gas Transfer | 10256652 | 462 days ago | IN | 0.00078508 ETH | 0.00000123 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 18605667 | 269 days ago | 0.0015942 ETH | ||||
| 18388393 | 274 days ago | 0.00944807 ETH | ||||
| 18269836 | 277 days ago | 0.02978795 ETH | ||||
| 18247975 | 277 days ago | 0.00176762 ETH | ||||
| 18246647 | 277 days ago | 0.00133626 ETH | ||||
| 18245604 | 277 days ago | 0.00176762 ETH | ||||
| 18241004 | 278 days ago | 0.00176762 ETH | ||||
| 16965082 | 307 days ago | 0.01091645 ETH | ||||
| 15394254 | 343 days ago | 0.00010621 ETH | ||||
| 15278628 | 346 days ago | 0.00010621 ETH | ||||
| 15086491 | 351 days ago | 0.00108422 ETH | ||||
| 14923388 | 354 days ago | 0.00044804 ETH | ||||
| 14109589 | 373 days ago | 0.00124288 ETH | ||||
| 13271424 | 393 days ago | 0.00073526 ETH | ||||
| 13066735 | 397 days ago | 0.00063917 ETH | ||||
| 12559905 | 409 days ago | 0.00017611 ETH | ||||
| 12559905 | 409 days ago | 0.00021416 ETH | ||||
| 12506526 | 410 days ago | 0.00002054 ETH | ||||
| 12506526 | 410 days ago | 0.00006049 ETH | ||||
| 12506526 | 410 days ago | 0.00006972 ETH | ||||
| 12506526 | 410 days ago | 0.00010968 ETH | ||||
| 12506526 | 410 days ago | 0.00003394 ETH | ||||
| 12506526 | 410 days ago | 0.00007389 ETH | ||||
| 12222435 | 417 days ago | 0.0003312 ETH | ||||
| 11746610 | 428 days ago | 0.00133867 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
InterportLZGasTransfer_Blast
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// 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);
}// 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;
}// 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);
}// 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);
}// 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);
}
}// 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);
}// 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'));
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$94.39
Net Worth in ETH
0.032147
Token Allocations
ETH
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BLAST | 100.00% | $2,936.33 | 0.0321 | $94.39 |
Loading...
Loading
Loading...
Loading
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.