Latest 25 from a total of 528 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Gas Transfer | 19593979 | 244 days ago | IN | 0.0361201 ETH | 0.00003436 | ||||
| Gas Transfer | 19593978 | 244 days ago | IN | 0.0361201 ETH | 0.00003436 | ||||
| Gas Transfer | 19488669 | 247 days ago | IN | 0.03611335 ETH | 0.00004424 | ||||
| Gas Transfer | 19488668 | 247 days ago | IN | 0.03611335 ETH | 0.00004424 | ||||
| Gas Transfer | 19488668 | 247 days ago | IN | 0.03611335 ETH | 0.00004424 | ||||
| Gas Transfer | 18457349 | 279 days ago | IN | 0.02992985 ETH | 0.00002723 | ||||
| Gas Transfer | 18457319 | 279 days ago | IN | 0.00335694 ETH | 0.00005472 | ||||
| Gas Transfer | 18417068 | 280 days ago | IN | 0.0011295 ETH | 0.00003215 | ||||
| Gas Transfer | 18374240 | 282 days ago | IN | 0.02465 ETH | 0.00005938 | ||||
| Gas Transfer | 18347598 | 282 days ago | IN | 0.00023068 ETH | 0.00001573 | ||||
| Gas Transfer | 18347598 | 282 days ago | IN | 0.00023068 ETH | 0.00001573 | ||||
| Gas Transfer | 18252417 | 285 days ago | IN | 0.0093704 ETH | 0.00002878 | ||||
| Gas Transfer | 18234885 | 286 days ago | IN | 0.0226983 ETH | 0.00002878 | ||||
| Gas Transfer | 18195532 | 287 days ago | IN | 0.00144441 ETH | 0.00002723 | ||||
| Gas Transfer | 18194570 | 287 days ago | IN | 0.00154251 ETH | 0.00001379 | ||||
| Gas Transfer | 17913998 | 296 days ago | IN | 0.00050102 ETH | 0.00006109 | ||||
| Gas Transfer | 17690238 | 303 days ago | IN | 0.0091164 ETH | 0.00002878 | ||||
| Gas Transfer | 17643603 | 304 days ago | IN | 0.00027843 ETH | 0.00001438 | ||||
| Gas Transfer | 17643460 | 304 days ago | IN | 0.00027798 ETH | 0.00001436 | ||||
| Gas Transfer | 17635699 | 305 days ago | IN | 0.0015044 ETH | 0.00002672 | ||||
| Gas Transfer | 17559122 | 307 days ago | IN | 0.00688389 ETH | 0.00002867 | ||||
| Gas Transfer | 17527232 | 308 days ago | IN | 0.00136517 ETH | 0.00001195 | ||||
| Gas Transfer | 17297491 | 314 days ago | IN | 0.01082926 ETH | 0.00003778 | ||||
| Gas Transfer | 17230128 | 316 days ago | IN | 0.00135338 ETH | 0.00002467 | ||||
| Gas Transfer | 17196624 | 317 days ago | IN | 0.00873556 ETH | 0.00003262 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 19593979 | 244 days ago | 0.03605986 ETH | ||||
| 19593979 | 244 days ago | 0 ETH | ||||
| 19593978 | 244 days ago | 0.03605986 ETH | ||||
| 19593978 | 244 days ago | 0 ETH | ||||
| 19591596 | 244 days ago | 0 ETH | ||||
| 19583995 | 244 days ago | 0 ETH | ||||
| 19488669 | 247 days ago | 0.03605603 ETH | ||||
| 19488669 | 247 days ago | 0 ETH | ||||
| 19488668 | 247 days ago | 0.03605603 ETH | ||||
| 19488668 | 247 days ago | 0 ETH | ||||
| 19488668 | 247 days ago | 0.03605603 ETH | ||||
| 19488668 | 247 days ago | 0 ETH | ||||
| 19482083 | 247 days ago | 0 ETH | ||||
| 19482082 | 247 days ago | 0 ETH | ||||
| 19482082 | 247 days ago | 0 ETH | ||||
| 19346434 | 251 days ago | 0 ETH | ||||
| 19328408 | 252 days ago | 0 ETH | ||||
| 19187931 | 256 days ago | 0 ETH | ||||
| 18787384 | 269 days ago | 0 ETH | ||||
| 18680359 | 272 days ago | 0 ETH | ||||
| 18625315 | 274 days ago | 0 ETH | ||||
| 18493010 | 278 days ago | 0 ETH | ||||
| 18492745 | 278 days ago | 0 ETH | ||||
| 18487543 | 278 days ago | 0 ETH | ||||
| 18457349 | 279 days ago | 0.02984626 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
InterportLZV2GasTransfer
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 { ILayerZeroEndpointV2, MessagingParams, Origin } from '@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol';
import { IExecutor } from '@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol';
import { OwnerManageable } from '../access/OwnerManageable.sol';
import { SystemVersionId } from '../SystemVersionId.sol';
import '../helpers/AddressHelper.sol' as AddressHelper;
/**
* @title InterportLZV2GasTransfer
* @notice Gas transfer contract
*/
contract InterportLZV2GasTransfer is SystemVersionId, OwnerManageable {
/**
* @notice Gas transfer item structure
* @param remoteEid The remote endpoint identifier
* @param recipient The address of the gas transfer recipient
* @param amount Gas transfer amount
* @param settings Gas transfer settings
*/
struct GasTransferItem {
uint16 remoteEid;
address recipient;
uint128 amount;
bytes settings;
}
/**
* @notice Endpoint data item structure
* @param value The endpoint call value
* @param messagingParams The endpoint messaging parameters
*/
struct EndpointDataItem {
uint256 value;
MessagingParams messagingParams;
}
/**
* @dev The cross-chain endpoint contract reference
*/
ILayerZeroEndpointV2 public endpoint;
uint128 private minDstAppGas;
uint256 private minReserve;
/**
* @notice Emitted when the cross-chain endpoint contract reference is set
* @param endpoint The cross-chain endpoint contract reference
*/
event SetEndpoint(ILayerZeroEndpointV2 indexed endpoint);
/**
* @notice Emitted when the delegate address is set
* @param delegate The delegate address
*/
event SetDelegate(address indexed delegate);
/**
* @notice Emitted when the parameter validation results in an error
*/
error ValidationError();
/**
* @notice Initializes the contract
* @param _endpoint The cross-chain endpoint contract reference
* @param _validation The initial validation data
* @param _owner The address of the initial owner of the contract
*/
constructor(ILayerZeroEndpointV2 _endpoint, bytes memory _validation, address _owner) {
_setEndpoint(_endpoint);
_setValidation(_validation);
_initOwner(_owner);
_setDelegate(_owner);
}
/**
* @notice The standard "receive" function
*/
receive() external payable {}
/**
* @notice Performs a gas transfer action
* @param _gasTransferData Gas transfer data
*/
function gasTransfer(
GasTransferItem[] calldata _gasTransferData
) external payable whenNotPaused {
(EndpointDataItem[] memory endpointData, ) = _getEndpointData(_gasTransferData, true);
for (uint256 index = 0; index < endpointData.length; index++) {
EndpointDataItem memory endpointDataItem = endpointData[index];
endpoint.send{ value: endpointDataItem.value }(
endpointDataItem.messagingParams,
address(this)
);
}
}
/**
* @notice Entry point for receiving messages or packets from the endpoint
* @dev _origin The origin information containing the source endpoint and sender address
* @dev _guid The unique identifier for the received LayerZero message
* @dev _message The payload of the received message
* @dev _executor The address of the executor for the received message
* @dev _extraData Additional arbitrary data provided by the corresponding executor
*/
function lzReceive(
Origin calldata /*_origin*/,
bytes32 /*_guid*/,
bytes calldata /*_message*/,
address /*_executor*/,
bytes calldata /*_extraData*/
) external payable {}
/**
* @notice Sets the cross-chain endpoint contract reference
* @param _endpoint The cross-chain endpoint contract reference
*/
function setEndpoint(ILayerZeroEndpointV2 _endpoint) external onlyOwner {
_setEndpoint(_endpoint);
}
/**
* @notice Sets the validation data
* @param _validation The validation data
*/
function setValidation(bytes memory _validation) external onlyOwner {
_setValidation(_validation);
}
/**
* @notice Sets the delegate address
* @param _delegate The delegate address
*/
function setDelegate(address _delegate) external onlyOwner {
_setDelegate(_delegate);
}
/**
* @notice Source chain action value estimation
* @param _gasTransferData Gas transfer data
* @return value The source chain action value
*/
function estimateSourceValue(
GasTransferItem[] calldata _gasTransferData
) external view returns (uint256 value) {
(, value) = _getEndpointData(_gasTransferData, false);
}
/**
* @notice The native token amount cap on the destination chains
* @param _remoteEids The destination endpoint identifier array
* @return result The native token amount cap on the destination chains
*/
function destinationAmountCap(
uint16[] calldata _remoteEids
) external view returns (uint128[] memory result) {
result = new uint128[](_remoteEids.length);
uint16 remoteEid;
address sendLibraryAddress;
address executorAddress;
uint128 nativeCap;
for (uint256 index; index < _remoteEids.length; index++) {
remoteEid = _remoteEids[index];
if (endpoint.isSupportedEid(remoteEid)) {
sendLibraryAddress = endpoint.getSendLibrary(address(this), remoteEid);
executorAddress = ExecutorConfigProvider(sendLibraryAddress)
.getExecutorConfig(address(this), remoteEid)
.executor;
(, , , nativeCap) = IExecutor(executorAddress).dstConfig(remoteEid);
result[index] = nativeCap;
}
}
}
/**
* @notice Checks if the path initialization is allowed based on the provided origin
* @dev _origin The origin information containing the source endpoint and sender address
* @return Whether the path has been initialized
*/
function allowInitializePath(Origin calldata /*_origin*/) external pure returns (bool) {
return true;
}
/**
* @notice Retrieves the next nonce for a given source endpoint and sender address
* @dev _srcEid The source endpoint ID
* @dev _sender The sender address
* @return nonce The next nonce
*/
function nextNonce(
uint32 /*_srcEid*/,
bytes32 /*_sender*/
) external pure returns (uint64 nonce) {
return 0;
}
function _setEndpoint(ILayerZeroEndpointV2 _endpoint) private {
AddressHelper.requireContract(address(_endpoint));
endpoint = _endpoint;
emit SetEndpoint(_endpoint);
}
function _setValidation(bytes memory _validation) private {
(minDstAppGas, minReserve) = abi.decode(_validation, (uint128, uint256));
}
function _setDelegate(address _delegate) private {
endpoint.setDelegate(_delegate);
emit SetDelegate(_delegate);
}
function _getEndpointData(
GasTransferItem[] calldata _gasTransferData,
bool _validate
) private view returns (EndpointDataItem[] memory endpointData, uint256 value) {
endpointData = new EndpointDataItem[](_gasTransferData.length);
for (uint256 index; index < _gasTransferData.length; index++) {
GasTransferItem calldata gasTransferItem = _gasTransferData[index];
(address dstApp, uint128 dstAppGas, bytes memory lzOptions) = _decodeParameters(
gasTransferItem
);
if (_validate && dstAppGas < minDstAppGas) {
revert ValidationError();
}
MessagingParams memory itemMessagingParams = MessagingParams(
gasTransferItem.remoteEid,
bytes32(uint256(uint160(dstApp))),
'', // empty message
lzOptions,
false
);
uint256 itemValue = endpoint.quote(itemMessagingParams, address(this)).nativeFee;
value += itemValue + (_validate ? minReserve : 0);
endpointData[index] = EndpointDataItem({
value: itemValue,
messagingParams: itemMessagingParams
});
}
if (_validate && msg.value < value) {
revert ValidationError();
}
}
function _decodeParameters(
GasTransferItem calldata _parameters
) private view returns (address dstApp, uint128 dstAppGas, bytes memory lzOptions) {
(dstApp, dstAppGas) = abi.decode(_parameters.settings, (address, uint128));
lzOptions = _prepareOptions(
dstAppGas,
_parameters.amount,
_parameters.recipient == address(0) ? msg.sender : _parameters.recipient
);
}
function _prepareOptions(
uint128 _dstAppGas,
uint128 _dstNativeDropAmount,
address _dstNativeDropRecipient
) private pure returns (bytes memory) {
return
abi.encodePacked(
// options type
uint16(3), // TYPE_3
// executor LZ receive option
uint8(1), // WORKER_ID
uint16(17), // option length in bytes: (optionType -> 1) + (uint128 -> 16)
uint8(1), // OPTION_TYPE_LZRECEIVE
_dstAppGas,
// executor native drop option
uint8(1), // WORKER_ID
uint16(49), // option length in bytes: (optionType -> 1) + (uint128 -> 16) + (bytes32 -> 32)
uint8(2), // OPTION_TYPE_NATIVE_DROP
_dstNativeDropAmount,
bytes32(uint256(uint160(_dstNativeDropRecipient)))
);
}
}
interface ExecutorConfigProvider {
struct ExecutorConfig {
uint32 maxMessageSize;
address executor;
}
function getExecutorConfig(
address _oapp,
uint32 _remoteEid
) external view returns (ExecutorConfig memory rtnConfig);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
import { Origin } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol";
import { IWorker } from "./IWorker.sol";
import { ILayerZeroExecutor } from "./ILayerZeroExecutor.sol";
interface IExecutor is IWorker, ILayerZeroExecutor {
struct DstConfigParam {
uint32 dstEid;
uint64 baseGas;
uint16 multiplierBps;
uint128 floorMarginUSD;
uint128 nativeCap;
}
struct DstConfig {
uint64 baseGas; // for verifying / fixed calldata overhead
uint16 multiplierBps;
uint128 floorMarginUSD; // uses priceFeed PRICE_RATIO_DENOMINATOR
uint128 nativeCap;
}
struct ExecutionParams {
address receiver;
Origin origin;
bytes32 guid;
bytes message;
bytes extraData;
uint256 gasLimit;
}
struct NativeDropParams {
address receiver;
uint256 amount;
}
event DstConfigSet(DstConfigParam[] params);
event NativeDropApplied(Origin origin, uint32 dstEid, address oapp, NativeDropParams[] params, bool[] success);
function dstConfig(uint32 _dstEid) external view returns (uint64, uint16, uint128, uint128);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
interface ILayerZeroExecutor {
// @notice query price and assign jobs at the same time
// @param _dstEid - the destination endpoint identifier
// @param _sender - the source sending contract address. executors may apply price discrimination to senders
// @param _calldataSize - dynamic data size of message + caller params
// @param _options - optional parameters for extra service plugins, e.g. sending dust tokens at the destination chain
function assignJob(
uint32 _dstEid,
address _sender,
uint256 _calldataSize,
bytes calldata _options
) external returns (uint256 price);
// @notice query the executor price for relaying the payload and its proof to the destination chain
// @param _dstEid - the destination endpoint identifier
// @param _sender - the source sending contract address. executors may apply price discrimination to senders
// @param _calldataSize - dynamic data size of message + caller params
// @param _options - optional parameters for extra service plugins, e.g. sending dust tokens at the destination chain
function getFee(
uint32 _dstEid,
address _sender,
uint256 _calldataSize,
bytes calldata _options
) external view returns (uint256 price);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
interface IWorker {
event SetWorkerLib(address workerLib);
event SetPriceFeed(address priceFeed);
event SetDefaultMultiplierBps(uint16 multiplierBps);
event SetSupportedOptionTypes(uint32 dstEid, uint8[] optionTypes);
event Withdraw(address lib, address to, uint256 amount);
error Worker_NotAllowed();
error Worker_OnlyMessageLib();
error Worker_RoleRenouncingDisabled();
function setPriceFeed(address _priceFeed) external;
function priceFeed() external view returns (address);
function setDefaultMultiplierBps(uint16 _multiplierBps) external;
function defaultMultiplierBps() external view returns (uint16);
function withdrawFee(address _lib, address _to, uint256 _amount) external;
function setSupportedOptionTypes(uint32 _eid, uint8[] calldata _optionTypes) external;
function getSupportedOptionTypes(uint32 _eid) external view returns (uint8[] memory);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
import { IMessageLibManager } from "./IMessageLibManager.sol";
import { IMessagingComposer } from "./IMessagingComposer.sol";
import { IMessagingChannel } from "./IMessagingChannel.sol";
import { IMessagingContext } from "./IMessagingContext.sol";
struct MessagingParams {
uint32 dstEid;
bytes32 receiver;
bytes message;
bytes options;
bool payInLzToken;
}
struct MessagingReceipt {
bytes32 guid;
uint64 nonce;
MessagingFee fee;
}
struct MessagingFee {
uint256 nativeFee;
uint256 lzTokenFee;
}
struct Origin {
uint32 srcEid;
bytes32 sender;
uint64 nonce;
}
interface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {
event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);
event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);
event PacketDelivered(Origin origin, address receiver);
event LzReceiveAlert(
address indexed receiver,
address indexed executor,
Origin origin,
bytes32 guid,
uint256 gas,
uint256 value,
bytes message,
bytes extraData,
bytes reason
);
event LzTokenSet(address token);
event DelegateSet(address sender, address delegate);
function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);
function send(
MessagingParams calldata _params,
address _refundAddress
) external payable returns (MessagingReceipt memory);
function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;
function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);
function initializable(Origin calldata _origin, address _receiver) external view returns (bool);
function lzReceive(
Origin calldata _origin,
address _receiver,
bytes32 _guid,
bytes calldata _message,
bytes calldata _extraData
) external payable;
// oapp can burn messages partially by calling this function with its own business logic if messages are verified in order
function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;
function setLzToken(address _lzToken) external;
function lzToken() external view returns (address);
function nativeToken() external view returns (address);
function setDelegate(address _delegate) external;
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
struct SetConfigParam {
uint32 eid;
uint32 configType;
bytes config;
}
interface IMessageLibManager {
struct Timeout {
address lib;
uint256 expiry;
}
event LibraryRegistered(address newLib);
event DefaultSendLibrarySet(uint32 eid, address newLib);
event DefaultReceiveLibrarySet(uint32 eid, address newLib);
event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);
event SendLibrarySet(address sender, uint32 eid, address newLib);
event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);
event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);
function registerLibrary(address _lib) external;
function isRegisteredLibrary(address _lib) external view returns (bool);
function getRegisteredLibraries() external view returns (address[] memory);
function setDefaultSendLibrary(uint32 _eid, address _newLib) external;
function defaultSendLibrary(uint32 _eid) external view returns (address);
function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _timeout) external;
function defaultReceiveLibrary(uint32 _eid) external view returns (address);
function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;
function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);
function isSupportedEid(uint32 _eid) external view returns (bool);
function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);
/// ------------------- OApp interfaces -------------------
function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;
function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);
function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);
function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;
function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);
function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _gracePeriod) external;
function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);
function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;
function getConfig(
address _oapp,
address _lib,
uint32 _eid,
uint32 _configType
) external view returns (bytes memory config);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
interface IMessagingChannel {
event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);
event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);
event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);
function eid() external view returns (uint32);
// this is an emergency function if a message cannot be verified for some reasons
// required to provide _nextNonce to avoid race condition
function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;
function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;
function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;
function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);
function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);
function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);
function inboundPayloadHash(
address _receiver,
uint32 _srcEid,
bytes32 _sender,
uint64 _nonce
) external view returns (bytes32);
function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
interface IMessagingComposer {
event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);
event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);
event LzComposeAlert(
address indexed from,
address indexed to,
address indexed executor,
bytes32 guid,
uint16 index,
uint256 gas,
uint256 value,
bytes message,
bytes extraData,
bytes reason
);
function composeQueue(
address _from,
address _to,
bytes32 _guid,
uint16 _index
) external view returns (bytes32 messageHash);
function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;
function lzCompose(
address _from,
address _to,
bytes32 _guid,
uint16 _index,
bytes calldata _message,
bytes calldata _extraData
) external payable;
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
interface IMessagingContext {
function isSendingMessage() external view returns (bool);
function getSendContext() external view returns (uint32 dstEid, address sender);
}// 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; /** * @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;
/**
* @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":"contract ILayerZeroEndpointV2","name":"_endpoint","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":"delegate","type":"address"}],"name":"SetDelegate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract ILayerZeroEndpointV2","name":"endpoint","type":"address"}],"name":"SetEndpoint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"SYSTEM_VERSION_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"","type":"tuple"}],"name":"allowInitializePath","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","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":"_remoteEids","type":"uint16[]"}],"name":"destinationAmountCap","outputs":[{"internalType":"uint128[]","name":"result","type":"uint128[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"contract ILayerZeroEndpointV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint16","name":"remoteEid","type":"uint16"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"bytes","name":"settings","type":"bytes"}],"internalType":"struct InterportLZV2GasTransfer.GasTransferItem[]","name":"_gasTransferData","type":"tuple[]"}],"name":"estimateSourceValue","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint16","name":"remoteEid","type":"uint16"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"bytes","name":"settings","type":"bytes"}],"internalType":"struct InterportLZV2GasTransfer.GasTransferItem[]","name":"_gasTransferData","type":"tuple[]"}],"name":"gasTransfer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"srcEid","type":"uint32"},{"internalType":"bytes32","name":"sender","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"internalType":"struct Origin","name":"","type":"tuple"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"nextNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"pure","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":"address","name":"_delegate","type":"address"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ILayerZeroEndpointV2","name":"_endpoint","type":"address"}],"name":"setEndpoint","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
60806040523480156200001157600080fd5b5060405162001de638038062001de68339810160408190526200003491620002a6565b6200003f3362000081565b6000805460ff60a01b191690556200005783620000d1565b620000628262000126565b6200006d8162000162565b620000788162000198565b505050620003df565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620000dc8162000230565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fc8e81a4efc849969069ec6aae575cf7a6bc5f9d3abac59f4ed190a6f7e05fc6f90600090a250565b808060200190518101906200013c9190620003a3565b600355600280546001600160801b0319166001600160801b039290921691909117905550565b6001600160a01b03811633148015906200018457506001600160a01b03811615155b156200019557620001958162000081565b50565b60015460405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620001e057600080fd5b505af1158015620001f5573d6000803e3d6000fd5b50506040516001600160a01b03841692507fe04946a482d4e81124cf46321be733aca4133ddfc19ce89a6106b4de11d33c8b9150600090a250565b6001600160a01b0381163b6200019557604051638c50d7cd60e01b81526001600160a01b038216600482015260240160405180910390fd5b6001600160a01b03811681146200019557600080fd5b634e487b7160e01b600052604160045260246000fd5b8051620002a18162000268565b919050565b600080600060608486031215620002bc57600080fd5b8351620002c98162000268565b602085810151919450906001600160401b0380821115620002e957600080fd5b818701915087601f830112620002fe57600080fd5b8151818111156200031357620003136200027e565b604051601f8201601f19908116603f011681019083821181831017156200033e576200033e6200027e565b816040528281528a868487010111156200035757600080fd5b600093505b828410156200037b57848401860151818501870152928501926200035c565b60008684830101528097505050505050506200039a6040850162000294565b90509250925092565b60008060408385031215620003b757600080fd5b82516001600160801b0381168114620003cf57600080fd5b6020939093015192949293505050565b6119f780620003ef6000396000f3fe6080604052600436106101185760003560e01c80637d25a05e116100a0578063dbbb415511610064578063dbbb41551461032a578063f2fde38b1461034a578063fbacefce1461036a578063fd26f5e01461038a578063ff7bd03d1461039d57600080fd5b80637d25a05e1461027e5780637f42754f146102b75780638456cb59146102d75780638da5cb5b146102ec578063ca5eb5e11461030a57600080fd5b80633f4ba83a116100e75780633f4ba83a146101c45780635c975abb146101d95780635e280f11146102045780636a0b3ad41461023c578063715018a61461026957600080fd5b8063093f0e271461012457806313137d651461016b5780632c16f926146101845780633132bb31146101a457600080fd5b3661011f57005b600080fd5b34801561013057600080fd5b506101587f22ad9585a395edc8067b50da4778cafbb7fa2c4bbd7619fad6aeba403857fd7481565b6040519081526020015b60405180910390f35b6101826101793660046111dd565b50505050505050565b005b34801561019057600080fd5b5061018261019f36600461127d565b6103be565b3480156101b057600080fd5b506101826101bf3660046112e8565b610404565b3480156101d057600080fd5b50610182610418565b3480156101e557600080fd5b50600054600160a01b900460ff165b6040519015158152602001610162565b34801561021057600080fd5b50600154610224906001600160a01b031681565b6040516001600160a01b039091168152602001610162565b34801561024857600080fd5b5061025c6102573660046113de565b610432565b6040516101629190611420565b34801561027557600080fd5b506101826106de565b34801561028a57600080fd5b5061029e61029936600461147f565b6106f0565b60405167ffffffffffffffff9091168152602001610162565b3480156102c357600080fd5b506101586102d23660046113de565b6106f9565b3480156102e357600080fd5b5061018261070f565b3480156102f857600080fd5b506000546001600160a01b0316610224565b34801561031657600080fd5b5061018261032536600461149d565b610727565b34801561033657600080fd5b5061018261034536600461149d565b610738565b34801561035657600080fd5b5061018261036536600461149d565b610749565b34801561037657600080fd5b5061018261038536600461149d565b6107c4565b6101826103983660046113de565b610870565b3480156103a957600080fd5b506101f46103b83660046114c1565b50600190565b6103c661094e565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038316016103f9576103f533826109a8565b5050565b6103f5823383610a3b565b61040c61094e565b61041581610b2d565b50565b61042061094e565b610428610b67565b610430610bb7565b565b60608167ffffffffffffffff81111561044d5761044d6112a9565b604051908082528060200260200182016040528015610476578160200160208202803683370190505b50905060008060008060005b868110156106d35787878281811061049c5761049c6114dd565b90506020020160208101906104b19190611503565b6001546040516319d4335360e21b815261ffff831660048201529196506001600160a01b031690636750cd4c90602401602060405180830381865afa1580156104fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105229190611520565b156106c15760015460405163b96a277f60e01b815230600482015261ffff871660248201526001600160a01b039091169063b96a277f90604401602060405180830381865afa158015610579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059d9190611542565b60405163062060fd60e21b815230600482015261ffff871660248201529094506001600160a01b0385169063188183f4906044016040805180830381865afa1580156105ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610611919061155f565b60200151604051639e94496560e01b815261ffff871660048201529093506001600160a01b03841690639e94496590602401608060405180830381865afa158015610660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068491906115d2565b895190955085935089925084915081106106a0576106a06114dd565b60200260200101906001600160801b031690816001600160801b0316815250505b806106cb81611644565b915050610482565b505050505092915050565b6106e661094e565b6104306000610c0c565b60005b92915050565b600061070783836000610c5c565b949350505050565b61071761094e565b61071f610ea1565b610430610eee565b61072f61094e565b61041581610f31565b61074061094e565b61041581610fc7565b61075161094e565b6001600160a01b0381166107bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61041581610c0c565b6107cc61094e565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038216016107fb5761041533476109a8565b6040516370a0823160e01b815230600482015261041590829033906001600160a01b038316906370a0823190602401602060405180830381865afa158015610847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086b919061165d565b610a3b565b610878610ea1565b600061088683836001610c5c565b50905060005b81518110156109485760008282815181106108a9576108a96114dd565b6020908102919091018101516001548151928201516040516302637a4560e41b81529294506001600160a01b0390911692632637a4509290916108f09130906004016116c6565b60806040518083038185885af115801561090e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610933919061176f565b5050808061094090611644565b91505061088c565b50505050565b6000546001600160a01b031633146104305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b2565b604080516000808252602082019092526001600160a01b0384169083906040516109d291906117d5565b60006040518083038185875af1925050503d8060008114610a0f576040519150601f19603f3d011682016040523d82523d6000602084013e610a14565b606091505b5050905080610a3657604051632e05b05360e21b815260040160405180910390fd5b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691610a9791906117d5565b6000604051808303816000865af19150503d8060008114610ad4576040519150601f19603f3d011682016040523d82523d6000602084013e610ad9565b606091505b50915091506000828015610b05575081511580610b05575081806020019051810190610b059190611520565b905080610b2557604051632fdb1b7f60e11b815260040160405180910390fd5b505050505050565b80806020019051810190610b4191906117f1565b600355600280546001600160801b0319166001600160801b039290921691909117905550565b600054600160a01b900460ff166104305760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107b2565b610bbf610b67565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060008367ffffffffffffffff811115610c7957610c796112a9565b604051908082528060200260200182016040528015610cb257816020015b610c9f611113565b815260200190600190039081610c975790505b50915060005b84811015610e6e5736868683818110610cd357610cd36114dd565b9050602002810190610ce5919061181f565b90506000806000610cf58461101a565b925092509250878015610d1657506002546001600160801b03908116908316105b15610d345760405163ae64f5e560e01b815260040160405180910390fd5b6040805160a0810190915260009080610d506020880188611503565b61ffff1681526001600160a01b038087166020808401919091526040805191820181526000808352818501929092526060840187905260809093018190526001549251631bb8518b60e31b81529394509291169063ddc28c5890610dba90859030906004016116c6565b6040805180830381865afa158015610dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfa9190611835565b51905089610e09576000610e0d565b6003545b610e179082611851565b610e219089611851565b9750604051806040016040528082815260200183815250898881518110610e4a57610e4a6114dd565b60200260200101819052505050505050508080610e6690611644565b915050610cb8565b50828015610e7b57508034105b15610e995760405163ae64f5e560e01b815260040160405180910390fd5b935093915050565b600054600160a01b900460ff16156104305760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107b2565b610ef6610ea1565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bef3390565b60015460405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015610f7857600080fd5b505af1158015610f8c573d6000803e3d6000fd5b50506040516001600160a01b03841692507fe04946a482d4e81124cf46321be733aca4133ddfc19ce89a6106b4de11d33c8b9150600090a250565b610fd081611094565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fc8e81a4efc849969069ec6aae575cf7a6bc5f9d3abac59f4ed190a6f7e05fc6f90600090a250565b600080606061102b84820185611864565b81019061103891906118ab565b909350915061108c8261105160608701604088016118e4565b60006110636040890160208a0161149d565b6001600160a01b03161461108657611081604088016020890161149d565b6110c7565b336110c7565b929491935050565b6001600160a01b0381163b61041557604051638c50d7cd60e01b81526001600160a01b03821660048201526024016107b2565b6040516060906110fb906003906001906011908290899082906031906002908c906001600160a01b038d1690602001611901565b60405160208183030381529060405290509392505050565b6040518060400160405280600081526020016111626040518060a00160405280600063ffffffff1681526020016000801916815260200160608152602001606081526020016000151581525090565b905290565b60006060828403121561117957600080fd5b50919050565b60008083601f84011261119157600080fd5b50813567ffffffffffffffff8111156111a957600080fd5b6020830191508360208285010111156111c157600080fd5b9250929050565b6001600160a01b038116811461041557600080fd5b600080600080600080600060e0888a0312156111f857600080fd5b6112028989611167565b965060608801359550608088013567ffffffffffffffff8082111561122657600080fd5b6112328b838c0161117f565b909750955060a08a01359150611247826111c8565b90935060c0890135908082111561125d57600080fd5b5061126a8a828b0161117f565b989b979a50959850939692959293505050565b6000806040838503121561129057600080fd5b823561129b816111c8565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156112e2576112e26112a9565b60405290565b6000602082840312156112fa57600080fd5b813567ffffffffffffffff8082111561131257600080fd5b818401915084601f83011261132657600080fd5b813581811115611338576113386112a9565b604051601f8201601f19908116603f01168101908382118183101715611360576113606112a9565b8160405282815287602084870101111561137957600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008083601f8401126113ab57600080fd5b50813567ffffffffffffffff8111156113c357600080fd5b6020830191508360208260051b85010111156111c157600080fd5b600080602083850312156113f157600080fd5b823567ffffffffffffffff81111561140857600080fd5b61141485828601611399565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156114615783516001600160801b03168352928401929184019160010161143c565b50909695505050505050565b63ffffffff8116811461041557600080fd5b6000806040838503121561149257600080fd5b823561129b8161146d565b6000602082840312156114af57600080fd5b81356114ba816111c8565b9392505050565b6000606082840312156114d357600080fd5b6114ba8383611167565b634e487b7160e01b600052603260045260246000fd5b61ffff8116811461041557600080fd5b60006020828403121561151557600080fd5b81356114ba816114f3565b60006020828403121561153257600080fd5b815180151581146114ba57600080fd5b60006020828403121561155457600080fd5b81516114ba816111c8565b60006040828403121561157157600080fd5b6115796112bf565b82516115848161146d565b81526020830151611594816111c8565b60208201529392505050565b805167ffffffffffffffff811681146115b857600080fd5b919050565b6001600160801b038116811461041557600080fd5b600080600080608085870312156115e857600080fd5b6115f1856115a0565b93506020850151611601816114f3565b6040860151909350611612816115bd565b6060860151909250611623816115bd565b939692955090935050565b634e487b7160e01b600052601160045260246000fd5b6000600182016116565761165661162e565b5060010190565b60006020828403121561166f57600080fd5b5051919050565b60005b83811015611691578181015183820152602001611679565b50506000910152565b600081518084526116b2816020860160208601611676565b601f01601f19169290920160200192915050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526116fc60e084018261169a565b90506060850151603f198483030160a0850152611719828261169a565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561175157600080fd5b6117596112bf565b9050815181526020820151602082015292915050565b60006080828403121561178157600080fd5b6040516060810181811067ffffffffffffffff821117156117a4576117a46112a9565b604052825181526117b7602084016115a0565b60208201526117c9846040850161173f565b60408201529392505050565b600082516117e7818460208701611676565b9190910192915050565b6000806040838503121561180457600080fd5b825161180f816115bd565b6020939093015192949293505050565b60008235607e198336030181126117e757600080fd5b60006040828403121561184757600080fd5b6114ba838361173f565b808201808211156106f3576106f361162e565b6000808335601e1984360301811261187b57600080fd5b83018035915067ffffffffffffffff82111561189657600080fd5b6020019150368190038213156111c157600080fd5b600080604083850312156118be57600080fd5b82356118c9816111c8565b915060208301356118d9816115bd565b809150509250929050565b6000602082840312156118f657600080fd5b81356114ba816115bd565b6001600160f01b031960f08c811b821683526001600160f81b031960f88d811b82166002860152918c901b909216600384015289811b821660058401526001600160801b031960808a901b16600684015287901b1660168201526000611976601783018760f01b6001600160f01b0319169052565b61198f601983018660f81b6001600160f81b0319169052565b6119a8601a83018560801b6001600160801b0319169052565b50602a810191909152604a01999850505050505050505056fea26469706673582212203cc8fc6b707871e50c7a822a20f4ab3fc7e1aa517981ee9bb56d89042e485c0f64736f6c634300081300330000000000000000000000001a44076050125825900e736c501f859c50fe728c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000894634481e0d40f55dbae68b4340d2c051db585e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000b3a73cfd8d0
Deployed Bytecode
0x6080604052600436106101185760003560e01c80637d25a05e116100a0578063dbbb415511610064578063dbbb41551461032a578063f2fde38b1461034a578063fbacefce1461036a578063fd26f5e01461038a578063ff7bd03d1461039d57600080fd5b80637d25a05e1461027e5780637f42754f146102b75780638456cb59146102d75780638da5cb5b146102ec578063ca5eb5e11461030a57600080fd5b80633f4ba83a116100e75780633f4ba83a146101c45780635c975abb146101d95780635e280f11146102045780636a0b3ad41461023c578063715018a61461026957600080fd5b8063093f0e271461012457806313137d651461016b5780632c16f926146101845780633132bb31146101a457600080fd5b3661011f57005b600080fd5b34801561013057600080fd5b506101587f22ad9585a395edc8067b50da4778cafbb7fa2c4bbd7619fad6aeba403857fd7481565b6040519081526020015b60405180910390f35b6101826101793660046111dd565b50505050505050565b005b34801561019057600080fd5b5061018261019f36600461127d565b6103be565b3480156101b057600080fd5b506101826101bf3660046112e8565b610404565b3480156101d057600080fd5b50610182610418565b3480156101e557600080fd5b50600054600160a01b900460ff165b6040519015158152602001610162565b34801561021057600080fd5b50600154610224906001600160a01b031681565b6040516001600160a01b039091168152602001610162565b34801561024857600080fd5b5061025c6102573660046113de565b610432565b6040516101629190611420565b34801561027557600080fd5b506101826106de565b34801561028a57600080fd5b5061029e61029936600461147f565b6106f0565b60405167ffffffffffffffff9091168152602001610162565b3480156102c357600080fd5b506101586102d23660046113de565b6106f9565b3480156102e357600080fd5b5061018261070f565b3480156102f857600080fd5b506000546001600160a01b0316610224565b34801561031657600080fd5b5061018261032536600461149d565b610727565b34801561033657600080fd5b5061018261034536600461149d565b610738565b34801561035657600080fd5b5061018261036536600461149d565b610749565b34801561037657600080fd5b5061018261038536600461149d565b6107c4565b6101826103983660046113de565b610870565b3480156103a957600080fd5b506101f46103b83660046114c1565b50600190565b6103c661094e565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038316016103f9576103f533826109a8565b5050565b6103f5823383610a3b565b61040c61094e565b61041581610b2d565b50565b61042061094e565b610428610b67565b610430610bb7565b565b60608167ffffffffffffffff81111561044d5761044d6112a9565b604051908082528060200260200182016040528015610476578160200160208202803683370190505b50905060008060008060005b868110156106d35787878281811061049c5761049c6114dd565b90506020020160208101906104b19190611503565b6001546040516319d4335360e21b815261ffff831660048201529196506001600160a01b031690636750cd4c90602401602060405180830381865afa1580156104fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105229190611520565b156106c15760015460405163b96a277f60e01b815230600482015261ffff871660248201526001600160a01b039091169063b96a277f90604401602060405180830381865afa158015610579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059d9190611542565b60405163062060fd60e21b815230600482015261ffff871660248201529094506001600160a01b0385169063188183f4906044016040805180830381865afa1580156105ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610611919061155f565b60200151604051639e94496560e01b815261ffff871660048201529093506001600160a01b03841690639e94496590602401608060405180830381865afa158015610660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068491906115d2565b895190955085935089925084915081106106a0576106a06114dd565b60200260200101906001600160801b031690816001600160801b0316815250505b806106cb81611644565b915050610482565b505050505092915050565b6106e661094e565b6104306000610c0c565b60005b92915050565b600061070783836000610c5c565b949350505050565b61071761094e565b61071f610ea1565b610430610eee565b61072f61094e565b61041581610f31565b61074061094e565b61041581610fc7565b61075161094e565b6001600160a01b0381166107bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61041581610c0c565b6107cc61094e565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038216016107fb5761041533476109a8565b6040516370a0823160e01b815230600482015261041590829033906001600160a01b038316906370a0823190602401602060405180830381865afa158015610847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086b919061165d565b610a3b565b610878610ea1565b600061088683836001610c5c565b50905060005b81518110156109485760008282815181106108a9576108a96114dd565b6020908102919091018101516001548151928201516040516302637a4560e41b81529294506001600160a01b0390911692632637a4509290916108f09130906004016116c6565b60806040518083038185885af115801561090e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610933919061176f565b5050808061094090611644565b91505061088c565b50505050565b6000546001600160a01b031633146104305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107b2565b604080516000808252602082019092526001600160a01b0384169083906040516109d291906117d5565b60006040518083038185875af1925050503d8060008114610a0f576040519150601f19603f3d011682016040523d82523d6000602084013e610a14565b606091505b5050905080610a3657604051632e05b05360e21b815260040160405180910390fd5b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691610a9791906117d5565b6000604051808303816000865af19150503d8060008114610ad4576040519150601f19603f3d011682016040523d82523d6000602084013e610ad9565b606091505b50915091506000828015610b05575081511580610b05575081806020019051810190610b059190611520565b905080610b2557604051632fdb1b7f60e11b815260040160405180910390fd5b505050505050565b80806020019051810190610b4191906117f1565b600355600280546001600160801b0319166001600160801b039290921691909117905550565b600054600160a01b900460ff166104305760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107b2565b610bbf610b67565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060008367ffffffffffffffff811115610c7957610c796112a9565b604051908082528060200260200182016040528015610cb257816020015b610c9f611113565b815260200190600190039081610c975790505b50915060005b84811015610e6e5736868683818110610cd357610cd36114dd565b9050602002810190610ce5919061181f565b90506000806000610cf58461101a565b925092509250878015610d1657506002546001600160801b03908116908316105b15610d345760405163ae64f5e560e01b815260040160405180910390fd5b6040805160a0810190915260009080610d506020880188611503565b61ffff1681526001600160a01b038087166020808401919091526040805191820181526000808352818501929092526060840187905260809093018190526001549251631bb8518b60e31b81529394509291169063ddc28c5890610dba90859030906004016116c6565b6040805180830381865afa158015610dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfa9190611835565b51905089610e09576000610e0d565b6003545b610e179082611851565b610e219089611851565b9750604051806040016040528082815260200183815250898881518110610e4a57610e4a6114dd565b60200260200101819052505050505050508080610e6690611644565b915050610cb8565b50828015610e7b57508034105b15610e995760405163ae64f5e560e01b815260040160405180910390fd5b935093915050565b600054600160a01b900460ff16156104305760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107b2565b610ef6610ea1565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bef3390565b60015460405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015610f7857600080fd5b505af1158015610f8c573d6000803e3d6000fd5b50506040516001600160a01b03841692507fe04946a482d4e81124cf46321be733aca4133ddfc19ce89a6106b4de11d33c8b9150600090a250565b610fd081611094565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fc8e81a4efc849969069ec6aae575cf7a6bc5f9d3abac59f4ed190a6f7e05fc6f90600090a250565b600080606061102b84820185611864565b81019061103891906118ab565b909350915061108c8261105160608701604088016118e4565b60006110636040890160208a0161149d565b6001600160a01b03161461108657611081604088016020890161149d565b6110c7565b336110c7565b929491935050565b6001600160a01b0381163b61041557604051638c50d7cd60e01b81526001600160a01b03821660048201526024016107b2565b6040516060906110fb906003906001906011908290899082906031906002908c906001600160a01b038d1690602001611901565b60405160208183030381529060405290509392505050565b6040518060400160405280600081526020016111626040518060a00160405280600063ffffffff1681526020016000801916815260200160608152602001606081526020016000151581525090565b905290565b60006060828403121561117957600080fd5b50919050565b60008083601f84011261119157600080fd5b50813567ffffffffffffffff8111156111a957600080fd5b6020830191508360208285010111156111c157600080fd5b9250929050565b6001600160a01b038116811461041557600080fd5b600080600080600080600060e0888a0312156111f857600080fd5b6112028989611167565b965060608801359550608088013567ffffffffffffffff8082111561122657600080fd5b6112328b838c0161117f565b909750955060a08a01359150611247826111c8565b90935060c0890135908082111561125d57600080fd5b5061126a8a828b0161117f565b989b979a50959850939692959293505050565b6000806040838503121561129057600080fd5b823561129b816111c8565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156112e2576112e26112a9565b60405290565b6000602082840312156112fa57600080fd5b813567ffffffffffffffff8082111561131257600080fd5b818401915084601f83011261132657600080fd5b813581811115611338576113386112a9565b604051601f8201601f19908116603f01168101908382118183101715611360576113606112a9565b8160405282815287602084870101111561137957600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008083601f8401126113ab57600080fd5b50813567ffffffffffffffff8111156113c357600080fd5b6020830191508360208260051b85010111156111c157600080fd5b600080602083850312156113f157600080fd5b823567ffffffffffffffff81111561140857600080fd5b61141485828601611399565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156114615783516001600160801b03168352928401929184019160010161143c565b50909695505050505050565b63ffffffff8116811461041557600080fd5b6000806040838503121561149257600080fd5b823561129b8161146d565b6000602082840312156114af57600080fd5b81356114ba816111c8565b9392505050565b6000606082840312156114d357600080fd5b6114ba8383611167565b634e487b7160e01b600052603260045260246000fd5b61ffff8116811461041557600080fd5b60006020828403121561151557600080fd5b81356114ba816114f3565b60006020828403121561153257600080fd5b815180151581146114ba57600080fd5b60006020828403121561155457600080fd5b81516114ba816111c8565b60006040828403121561157157600080fd5b6115796112bf565b82516115848161146d565b81526020830151611594816111c8565b60208201529392505050565b805167ffffffffffffffff811681146115b857600080fd5b919050565b6001600160801b038116811461041557600080fd5b600080600080608085870312156115e857600080fd5b6115f1856115a0565b93506020850151611601816114f3565b6040860151909350611612816115bd565b6060860151909250611623816115bd565b939692955090935050565b634e487b7160e01b600052601160045260246000fd5b6000600182016116565761165661162e565b5060010190565b60006020828403121561166f57600080fd5b5051919050565b60005b83811015611691578181015183820152602001611679565b50506000910152565b600081518084526116b2816020860160208601611676565b601f01601f19169290920160200192915050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a060808401526116fc60e084018261169a565b90506060850151603f198483030160a0850152611719828261169a565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b60006040828403121561175157600080fd5b6117596112bf565b9050815181526020820151602082015292915050565b60006080828403121561178157600080fd5b6040516060810181811067ffffffffffffffff821117156117a4576117a46112a9565b604052825181526117b7602084016115a0565b60208201526117c9846040850161173f565b60408201529392505050565b600082516117e7818460208701611676565b9190910192915050565b6000806040838503121561180457600080fd5b825161180f816115bd565b6020939093015192949293505050565b60008235607e198336030181126117e757600080fd5b60006040828403121561184757600080fd5b6114ba838361173f565b808201808211156106f3576106f361162e565b6000808335601e1984360301811261187b57600080fd5b83018035915067ffffffffffffffff82111561189657600080fd5b6020019150368190038213156111c157600080fd5b600080604083850312156118be57600080fd5b82356118c9816111c8565b915060208301356118d9816115bd565b809150509250929050565b6000602082840312156118f657600080fd5b81356114ba816115bd565b6001600160f01b031960f08c811b821683526001600160f81b031960f88d811b82166002860152918c901b909216600384015289811b821660058401526001600160801b031960808a901b16600684015287901b1660168201526000611976601783018760f01b6001600160f01b0319169052565b61198f601983018660f81b6001600160f81b0319169052565b6119a8601a83018560801b6001600160801b0319169052565b50602a810191909152604a01999850505050505050505056fea26469706673582212203cc8fc6b707871e50c7a822a20f4ab3fc7e1aa517981ee9bb56d89042e485c0f64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001a44076050125825900e736c501f859c50fe728c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000894634481e0d40f55dbae68b4340d2c051db585e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000b3a73cfd8d0
-----Decoded View---------------
Arg [0] : _endpoint (address): 0x1a44076050125825900e736c501f859c50fE728c
Arg [1] : _validation (bytes): 0x0000000000000000000000000000000000000000000000000000000000001b5800000000000000000000000000000000000000000000000000000b3a73cfd8d0
Arg [2] : _owner (address): 0x894634481E0d40f55dBAe68b4340D2c051Db585E
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000001a44076050125825900e736c501f859c50fe728c
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 000000000000000000000000894634481e0d40f55dbae68b4340d2c051db585e
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [4] : 0000000000000000000000000000000000000000000000000000000000001b58
Arg [5] : 00000000000000000000000000000000000000000000000000000b3a73cfd8d0
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$496.82
Net Worth in ETH
Token Allocations
ETH
82.86%
BNB
14.35%
AVAX
1.49%
Others
1.30%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BASE | 27.03% | $2,382.88 | 0.0564 | $134.28 | |
| ARB | 25.60% | $2,382.91 | 0.0534 | $127.21 | |
| OP | 14.25% | $2,380.8 | 0.0297 | $70.81 | |
| BSC | 13.77% | $767.47 | 0.0891 | $68.39 | |
| LINEA | 12.00% | $2,383.9 | 0.025 | $59.63 | |
| ARBNOVA | 1.99% | $2,383.01 | 0.00415659 | $9.91 | |
| SCROLL | 1.98% | $2,383.9 | 0.00413355 | $9.85 | |
| AVAX | 1.49% | $10.05 | 0.7388 | $7.43 | |
| POL | 1.25% | $0.104479 | 59.6082 | $6.23 | |
| OPBNB | 0.58% | $767.9 | 0.00375198 | $2.88 | |
| GLMR | 0.04% | $0.017687 | 12.1058 | $0.214114 |
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.