Source Code
Latest 25 from a total of 326 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Deposit | 24292523 | 7 days ago | IN | 0.00067184 ETH | 0.00001903 | ||||
| Deposit | 24150752 | 27 days ago | IN | 0.00030391 ETH | 0.00000665 | ||||
| Deposit | 24005621 | 47 days ago | IN | 0.00143234 ETH | 0.00003732 | ||||
| Deposit | 23721037 | 87 days ago | IN | 0.00056653 ETH | 0.0005902 | ||||
| Deposit | 23720937 | 87 days ago | IN | 0.00027853 ETH | 0.00015778 | ||||
| Deposit | 23720907 | 87 days ago | IN | 0.00025262 ETH | 0.00016799 | ||||
| Deposit | 23715787 | 87 days ago | IN | 0.00145768 ETH | 0.00045957 | ||||
| Deposit | 23628801 | 100 days ago | IN | 0.00023215 ETH | 0.00003103 | ||||
| Deposit | 23543276 | 112 days ago | IN | 0.00412358 ETH | 0.00205439 | ||||
| Deposit | 23531113 | 113 days ago | IN | 0.00025669 ETH | 0.00012666 | ||||
| Deposit | 23530914 | 113 days ago | IN | 0.00019907 ETH | 0.00015612 | ||||
| Deposit | 23516621 | 115 days ago | IN | 0.00135795 ETH | 0.0001473 | ||||
| Deposit | 23429403 | 128 days ago | IN | 0.00248223 ETH | 0.00003816 | ||||
| Deposit | 23154357 | 166 days ago | IN | 0.00047046 ETH | 0.00027466 | ||||
| Deposit | 23154304 | 166 days ago | IN | 0.00727877 ETH | 0.00028875 | ||||
| Deposit | 23089092 | 175 days ago | IN | 0.00144229 ETH | 0.00023165 | ||||
| Deposit | 23058620 | 179 days ago | IN | 0.0002852 ETH | 0.00006248 | ||||
| Deposit | 23017584 | 185 days ago | IN | 0.00024188 ETH | 0.00006538 | ||||
| Deposit | 22574806 | 247 days ago | IN | 0.00159483 ETH | 0.00165576 | ||||
| Deposit | 22434273 | 267 days ago | IN | 0.00060263 ETH | 0.00021115 | ||||
| Deposit | 22383098 | 274 days ago | IN | 0.00126595 ETH | 0.00031115 | ||||
| Deposit | 22375275 | 275 days ago | IN | 0.01538817 ETH | 0.00034691 | ||||
| Deposit | 22351610 | 278 days ago | IN | 0.01858098 ETH | 0.00024613 | ||||
| Deposit | 22322913 | 282 days ago | IN | 0.00305571 ETH | 0.00007753 | ||||
| Deposit | 22309161 | 284 days ago | IN | 0.03506206 ETH | 0.00018613 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Send | 24292523 | 7 days ago | 0.00067164 ETH | ||||
| Send | 24150752 | 27 days ago | 0.00030377 ETH | ||||
| Send | 24005621 | 47 days ago | 0.00031252 ETH | ||||
| Send | 24005621 | 47 days ago | 0.00027744 ETH | ||||
| Send | 24005621 | 47 days ago | 0.00027729 ETH | ||||
| Send | 24005621 | 47 days ago | 0.00027728 ETH | ||||
| Send | 24005621 | 47 days ago | 0.00028572 ETH | ||||
| Send | 23721037 | 87 days ago | 0.00056649 ETH | ||||
| Send | 23720937 | 87 days ago | 0.00027849 ETH | ||||
| Send | 23720907 | 87 days ago | 0.00025252 ETH | ||||
| Send | 23715787 | 87 days ago | 0.00145764 ETH | ||||
| Send | 23628801 | 100 days ago | 0.00023205 ETH | ||||
| Send | 23543276 | 112 days ago | 0.00412329 ETH | ||||
| Send | 23531113 | 113 days ago | 0.00025667 ETH | ||||
| Send | 23530914 | 113 days ago | 0.00019878 ETH | ||||
| Send | 23516621 | 115 days ago | 0.00135771 ETH | ||||
| Send | 23429403 | 128 days ago | 0.00141938 ETH | ||||
| Send | 23429403 | 128 days ago | 0.00021683 ETH | ||||
| Send | 23154357 | 166 days ago | 0.00047043 ETH | ||||
| Send | 23154304 | 166 days ago | 0.00727867 ETH | ||||
| Send | 23089092 | 175 days ago | 0.00144219 ETH | ||||
| Send | 23058620 | 179 days ago | 0.00028516 ETH | ||||
| Send | 23017584 | 185 days ago | 0.00024186 ETH | ||||
| Send | 22574806 | 247 days ago | 0.0015948 ETH | ||||
| Send | 22434273 | 267 days ago | 0.00060251 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GasZipLZ
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 20000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./OptimizedLzApp.sol";
contract GasZipLZ is OptimizedLzApp {
constructor(address _lzEndpoint) OptimizedLzApp(_lzEndpoint) {
_initializeOwner(msg.sender);
}
function estimateFees(uint16[] calldata _dstChainIds, bytes[] calldata _adapterParams) external view returns (uint256[] memory nativeFees) {
nativeFees = new uint256[](_dstChainIds.length);
for (uint i; i < _dstChainIds.length; i++) {
nativeFees[i] = estimateFees(_dstChainIds[i], _adapterParams[i]);
}
}
function estimateFees(uint16 _dstChainId, bytes memory _adapterParams) public view returns (uint256 nativeFee) {
(nativeFee,) = lzEndpoint.estimateFees(_dstChainId, address(this), "", false, _adapterParams);
}
function deposit(
uint256[] calldata _depositParams,
address to
) external payable {
uint256 fee;
for (uint i; i < _depositParams.length; i++) {
fee += _deposit(_depositParams[i], to);
}
require(msg.value >= fee, "Fee Not Met");
}
function _deposit(uint256 _depositParam, address _to) internal returns (uint256 fee) {
(uint16 _dstChainId, bytes memory _adapterParams) = _decodeDeposit(_depositParam, _to);
fee = estimateFees(_dstChainId, _adapterParams);
_lzSend(_dstChainId, "", payable(this), _adapterParams, fee);
}
function _decodeDeposit(uint256 _depositParam, address _to) internal view returns (uint16 _dstChainId, bytes memory _adapterParams) {
_dstChainId = uint16(_depositParam >> 240);
_adapterParams = createAdapterParams(_dstChainId, uint256(uint240(_depositParam)), _to);
}
function createAdapterParams(uint16 dstChainId, uint256 nativeAmount, address to) public view returns (bytes memory) {
return abi.encodePacked(uint16(2), getGasLimit(dstChainId), nativeAmount, to);
}
function withdraw(address token, uint256 amount) external onlyOwner {
bool s;
if (token == address(0)) {
(s,) = msg.sender.call{value: address(this).balance}("");
} else {
(s,) = token.call(abi.encodeWithSignature("transfer(address,uint256)", msg.sender, amount));
}
require(s, "Withdraw Failed");
}
receive() external payable {}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./Ownable.sol";
import "./layerzero/ILayerZeroReceiver.sol";
import "./layerzero/ILayerZeroEndpoint.sol";
abstract contract OptimizedLzApp is Ownable, ILayerZeroReceiver {
ILayerZeroEndpoint public immutable lzEndpoint;
mapping(uint16 => bytes) public trustedRemoteLookup;
mapping(uint16 => uint256) public gasLimitLookup;
uint256 public defaultGasLimit = 20_000;
constructor(address _endpoint) {
lzEndpoint = ILayerZeroEndpoint(_endpoint);
}
// Do nothing
function lzReceive(
uint16,
bytes calldata,
uint64,
bytes calldata
) public virtual override {
return;
}
function _lzSend(
uint16 _dstChainId,
bytes memory _payload,
address payable _refundAddress,
bytes memory _adapterParams,
uint _nativeFee
) internal virtual {
bytes memory trustedRemote = getTrusted(_dstChainId);
lzEndpoint.send{value: _nativeFee}(_dstChainId, trustedRemote, _payload, _refundAddress, address(0), _adapterParams);
}
function getTrusted(uint16 _dstChainId) internal view returns (bytes memory) {
bytes memory trustedRemote = trustedRemoteLookup[_dstChainId];
if (trustedRemote.length == 0) {
return abi.encodePacked(address(this), address(this));
} else {
return trustedRemote;
}
}
function getGasLimit(uint16 _dstChainId) internal view returns (uint256) {
uint256 gasLimit = gasLimitLookup[_dstChainId];
if (gasLimit == 0) {
return defaultGasLimit;
} else {
return gasLimit;
}
}
function setTrusted(
uint16[] calldata _remoteChainIds,
address[] calldata _remoteAddresses
) external onlyOwner {
require(_remoteChainIds.length == _remoteAddresses.length, "Length Mismatch");
for (uint i; i < _remoteChainIds.length; i++) {
trustedRemoteLookup[_remoteChainIds[i]] = abi.encodePacked(_remoteAddresses[i], address(this));
}
}
function setGasLimit(
uint16[] calldata _remoteChainIds,
uint256[] calldata _gasLimits
) external onlyOwner {
require(_remoteChainIds.length == _gasLimits.length, "Length Mismatch");
for (uint i; i < _remoteChainIds.length; i++) {
gasLimitLookup[_remoteChainIds[i]] = _gasLimits[i];
}
}
function setDefaultGasLimit(uint256 _defaultGasLimit) external onlyOwner {
defaultGasLimit = _defaultGasLimit;
}
function setConfig(
uint16 _version,
uint16 _chainId,
uint _configType,
bytes calldata _config
) external onlyOwner {
lzEndpoint.setConfig(_version, _chainId, _configType, _config);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/// @notice Simple single owner authorization mixin.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)
///
/// @dev Note:
/// This implementation does NOT auto-initialize the owner to `msg.sender`.
/// You MUST call the `_initializeOwner` in the constructor / initializer.
///
/// While the ownable portion follows
/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,
/// the nomenclature for the 2-step ownership handover may be unique to this codebase.
abstract contract Ownable {
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* CUSTOM ERRORS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The caller is not authorized to call the function.
error Unauthorized();
/// @dev The `newOwner` cannot be the zero address.
error NewOwnerIsZeroAddress();
/// @dev The `pendingOwner` does not have a valid handover request.
error NoHandoverRequest();
/// @dev Cannot double-initialize.
error AlreadyInitialized();
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* EVENTS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The ownership is transferred from `oldOwner` to `newOwner`.
/// This event is intentionally kept the same as OpenZeppelin's Ownable to be
/// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173),
/// despite it not being as lightweight as a single argument event.
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);
/// @dev An ownership handover to `pendingOwner` has been requested.
event OwnershipHandoverRequested(address indexed pendingOwner);
/// @dev The ownership handover to `pendingOwner` has been canceled.
event OwnershipHandoverCanceled(address indexed pendingOwner);
/// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`.
uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE =
0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0;
/// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`.
uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE =
0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d;
/// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`.
uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE =
0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92;
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* STORAGE */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The owner slot is given by:
/// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`.
/// It is intentionally chosen to be a high value
/// to avoid collision with lower slots.
/// The choice of manual storage layout is to enable compatibility
/// with both regular and upgradeable contracts.
bytes32 internal constant _OWNER_SLOT =
0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927;
/// The ownership handover slot of `newOwner` is given by:
/// ```
/// mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED))
/// let handoverSlot := keccak256(0x00, 0x20)
/// ```
/// It stores the expiry timestamp of the two-step ownership handover.
uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1;
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* INTERNAL FUNCTIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Override to return true to make `_initializeOwner` prevent double-initialization.
function _guardInitializeOwner() internal pure virtual returns (bool guard) {}
/// @dev Initializes the owner directly without authorization guard.
/// This function must be called upon initialization,
/// regardless of whether the contract is upgradeable or not.
/// This is to enable generalization to both regular and upgradeable contracts,
/// and to save gas in case the initial owner is not the caller.
/// For performance reasons, this function will not check if there
/// is an existing owner.
function _initializeOwner(address newOwner) internal virtual {
if (_guardInitializeOwner()) {
/// @solidity memory-safe-assembly
assembly {
let ownerSlot := _OWNER_SLOT
if sload(ownerSlot) {
mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`.
revert(0x1c, 0x04)
}
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Store the new value.
sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
// Emit the {OwnershipTransferred} event.
log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
}
} else {
/// @solidity memory-safe-assembly
assembly {
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Store the new value.
sstore(_OWNER_SLOT, newOwner)
// Emit the {OwnershipTransferred} event.
log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner)
}
}
}
/// @dev Sets the owner directly without authorization guard.
function _setOwner(address newOwner) internal virtual {
if (_guardInitializeOwner()) {
/// @solidity memory-safe-assembly
assembly {
let ownerSlot := _OWNER_SLOT
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Emit the {OwnershipTransferred} event.
log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
// Store the new value.
sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner))))
}
} else {
/// @solidity memory-safe-assembly
assembly {
let ownerSlot := _OWNER_SLOT
// Clean the upper 96 bits.
newOwner := shr(96, shl(96, newOwner))
// Emit the {OwnershipTransferred} event.
log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner)
// Store the new value.
sstore(ownerSlot, newOwner)
}
}
}
/// @dev Throws if the sender is not the owner.
function _checkOwner() internal view virtual {
/// @solidity memory-safe-assembly
assembly {
// If the caller is not the stored owner, revert.
if iszero(eq(caller(), sload(_OWNER_SLOT))) {
mstore(0x00, 0x82b42900) // `Unauthorized()`.
revert(0x1c, 0x04)
}
}
}
/// @dev Returns how long a two-step ownership handover is valid for in seconds.
/// Override to return a different value if needed.
/// Made internal to conserve bytecode. Wrap it in a public function if needed.
function _ownershipHandoverValidFor() internal view virtual returns (uint64) {
return 48 * 3600;
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* PUBLIC UPDATE FUNCTIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Allows the owner to transfer the ownership to `newOwner`.
function transferOwnership(address newOwner) public payable virtual onlyOwner {
/// @solidity memory-safe-assembly
assembly {
if iszero(shl(96, newOwner)) {
mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`.
revert(0x1c, 0x04)
}
}
_setOwner(newOwner);
}
/// @dev Allows the owner to renounce their ownership.
function renounceOwnership() public payable virtual onlyOwner {
_setOwner(address(0));
}
/// @dev Request a two-step ownership handover to the caller.
/// The request will automatically expire in 48 hours (172800 seconds) by default.
function requestOwnershipHandover() public payable virtual {
unchecked {
uint256 expires = block.timestamp + _ownershipHandoverValidFor();
/// @solidity memory-safe-assembly
assembly {
// Compute and set the handover slot to `expires`.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, caller())
sstore(keccak256(0x0c, 0x20), expires)
// Emit the {OwnershipHandoverRequested} event.
log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller())
}
}
}
/// @dev Cancels the two-step ownership handover to the caller, if any.
function cancelOwnershipHandover() public payable virtual {
/// @solidity memory-safe-assembly
assembly {
// Compute and set the handover slot to 0.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, caller())
sstore(keccak256(0x0c, 0x20), 0)
// Emit the {OwnershipHandoverCanceled} event.
log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller())
}
}
/// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`.
/// Reverts if there is no existing ownership handover requested by `pendingOwner`.
function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner {
/// @solidity memory-safe-assembly
assembly {
// Compute and set the handover slot to 0.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, pendingOwner)
let handoverSlot := keccak256(0x0c, 0x20)
// If the handover does not exist, or has expired.
if gt(timestamp(), sload(handoverSlot)) {
mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`.
revert(0x1c, 0x04)
}
// Set the handover slot to 0.
sstore(handoverSlot, 0)
}
_setOwner(pendingOwner);
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* PUBLIC READ FUNCTIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Returns the owner of the contract.
function owner() public view virtual returns (address result) {
/// @solidity memory-safe-assembly
assembly {
result := sload(_OWNER_SLOT)
}
}
/// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.
function ownershipHandoverExpiresAt(address pendingOwner)
public
view
virtual
returns (uint256 result)
{
/// @solidity memory-safe-assembly
assembly {
// Compute the handover slot.
mstore(0x0c, _HANDOVER_SLOT_SEED)
mstore(0x00, pendingOwner)
// Load the handover slot.
result := sload(keccak256(0x0c, 0x20))
}
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* MODIFIERS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Marks a function as only callable by the owner.
modifier onlyOwner() virtual {
_checkOwner();
_;
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;
interface ILayerZeroReceiver {
// @notice LayerZero endpoint will invoke this function to deliver the message on the destination
// @param _srcChainId - the source endpoint identifier
// @param _srcAddress - the source sending contract address from the source chain
// @param _nonce - the ordered message nonce
// @param _payload - the signed payload is the UA bytes has encoded to be sent
function lzReceive(
uint16 _srcChainId,
bytes calldata _srcAddress,
uint64 _nonce,
bytes calldata _payload
) external;
}// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;
import "./ILayerZeroUserApplicationConfig.sol";
interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig {
// @notice send a LayerZero message to the specified address at a LayerZero endpoint.
// @param _dstChainId - the destination chain identifier
// @param _destination - the address on destination chain (in bytes). address length/format may vary by chains
// @param _payload - a custom bytes payload to send to the destination contract
// @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address
// @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction
// @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination
function send(
uint16 _dstChainId,
bytes calldata _destination,
bytes calldata _payload,
address payable _refundAddress,
address _zroPaymentAddress,
bytes calldata _adapterParams
) external payable;
// @notice used by the messaging library to publish verified payload
// @param _srcChainId - the source chain identifier
// @param _srcAddress - the source contract (as bytes) at the source chain
// @param _dstAddress - the address on destination chain
// @param _nonce - the unbound message ordering nonce
// @param _gasLimit - the gas limit for external contract execution
// @param _payload - verified payload to send to the destination contract
function receivePayload(
uint16 _srcChainId,
bytes calldata _srcAddress,
address _dstAddress,
uint64 _nonce,
uint _gasLimit,
bytes calldata _payload
) external;
// @notice get the inboundNonce of a lzApp from a source chain which could be EVM or non-EVM chain
// @param _srcChainId - the source chain identifier
// @param _srcAddress - the source chain contract address
function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64);
// @notice get the outboundNonce from this source chain which, consequently, is always an EVM
// @param _srcAddress - the source chain contract address
function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64);
// @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery
// @param _dstChainId - the destination chain identifier
// @param _userApplication - the user app address on this EVM chain
// @param _payload - the custom message to send over LayerZero
// @param _payInZRO - if false, user app pays the protocol fee in native token
// @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain
function estimateFees(
uint16 _dstChainId,
address _userApplication,
bytes calldata _payload,
bool _payInZRO,
bytes calldata _adapterParam
) external view returns (uint nativeFee, uint zroFee);
// @notice get this Endpoint's immutable source identifier
function getChainId() external view returns (uint16);
// @notice the interface to retry failed message on this Endpoint destination
// @param _srcChainId - the source chain identifier
// @param _srcAddress - the source chain contract address
// @param _payload - the payload to be retried
function retryPayload(
uint16 _srcChainId,
bytes calldata _srcAddress,
bytes calldata _payload
) external;
// @notice query if any STORED payload (message blocking) at the endpoint.
// @param _srcChainId - the source chain identifier
// @param _srcAddress - the source chain contract address
function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool);
// @notice query if the _libraryAddress is valid for sending msgs.
// @param _userApplication - the user app address on this EVM chain
function getSendLibraryAddress(address _userApplication) external view returns (address);
// @notice query if the _libraryAddress is valid for receiving msgs.
// @param _userApplication - the user app address on this EVM chain
function getReceiveLibraryAddress(address _userApplication) external view returns (address);
// @notice query if the non-reentrancy guard for send() is on
// @return true if the guard is on. false otherwise
function isSendingPayload() external view returns (bool);
// @notice query if the non-reentrancy guard for receive() is on
// @return true if the guard is on. false otherwise
function isReceivingPayload() external view returns (bool);
// @notice get the configuration of the LayerZero messaging library of the specified version
// @param _version - messaging library version
// @param _chainId - the chainId for the pending config change
// @param _userApplication - the contract address of the user application
// @param _configType - type of configuration. every messaging library has its own convention.
function getConfig(
uint16 _version,
uint16 _chainId,
address _userApplication,
uint _configType
) external view returns (bytes memory);
// @notice get the send() LayerZero messaging library version
// @param _userApplication - the contract address of the user application
function getSendVersion(address _userApplication) external view returns (uint16);
// @notice get the lzReceive() LayerZero messaging library version
// @param _userApplication - the contract address of the user application
function getReceiveVersion(address _userApplication) external view returns (uint16);
}// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;
interface ILayerZeroUserApplicationConfig {
// @notice set the configuration of the LayerZero messaging library of the specified version
// @param _version - messaging library version
// @param _chainId - the chainId for the pending config change
// @param _configType - type of configuration. every messaging library has its own convention.
// @param _config - configuration in the bytes. can encode arbitrary content.
function setConfig(
uint16 _version,
uint16 _chainId,
uint _configType,
bytes calldata _config
) external;
// @notice set the send() LayerZero messaging library version to _version
// @param _version - new messaging library version
function setSendVersion(uint16 _version) external;
// @notice set the lzReceive() LayerZero messaging library version to _version
// @param _version - new messaging library version
function setReceiveVersion(uint16 _version) external;
// @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload
// @param _srcChainId - the chainId of the source chain
// @param _srcAddress - the contract address of the source contract at the source chain
function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external;
}{
"remappings": [
"ds-test/=lib/forge-std/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/"
],
"optimizer": {
"enabled": true,
"runs": 20000
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "paris",
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_lzEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"dstChainId","type":"uint16"},{"internalType":"uint256","name":"nativeAmount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"createAdapterParams","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultGasLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_depositParams","type":"uint256[]"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_dstChainIds","type":"uint16[]"},{"internalType":"bytes[]","name":"_adapterParams","type":"bytes[]"}],"name":"estimateFees","outputs":[{"internalType":"uint256[]","name":"nativeFees","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"estimateFees","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"gasLimitLookup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lzEndpoint","outputs":[{"internalType":"contract ILayerZeroEndpoint","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":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_version","type":"uint16"},{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"_configType","type":"uint256"},{"internalType":"bytes","name":"_config","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_defaultGasLimit","type":"uint256"}],"name":"setDefaultGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_remoteChainIds","type":"uint16[]"},{"internalType":"uint256[]","name":"_gasLimits","type":"uint256[]"}],"name":"setGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_remoteChainIds","type":"uint16[]"},{"internalType":"address[]","name":"_remoteAddresses","type":"address[]"}],"name":"setTrusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a0604052614e2060025534801561001657600080fd5b5060405162001b4538038062001b458339810160408190526100379161008f565b6001600160a01b03811660805261004d33610053565b506100bf565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b6000602082840312156100a157600080fd5b81516001600160a01b03811681146100b857600080fd5b9392505050565b608051611a55620000f060003960008181610311015281816107be015281816108860152610f390152611a556000f3fe60806040526004361061016d5760003560e01c8063b0bf07c6116100cb578063e32bb67b1161007f578063f2fde38b11610059578063f2fde38b146103d9578063f3fef3a3146103ec578063fee81cf41461040c57600080fd5b8063e32bb67b14610393578063f04e283e146103b3578063f2cac920146103c657600080fd5b8063cbed8b9c116100b0578063cbed8b9c14610333578063d191f54914610353578063d2f1e34b1461037357600080fd5b8063b0bf07c6146102d2578063b353aaa7146102ff57600080fd5b8063715018a6116101225780638da5cb5b116101075780638da5cb5b1461023957806395368d2e1461028e5780639753df2c146102b257600080fd5b8063715018a6146102045780637533d7881461020c57600080fd5b8063256929621161015357806325692962146101d457806352b0896a146101dc57806354d1f13d146101fc57600080fd5b80621d35671461017957806309efa2851461019e57600080fd5b3661017457005b600080fd5b34801561018557600080fd5b5061019c610194366004611131565b505050505050565b005b3480156101aa57600080fd5b506101be6101b9366004611210565b61043f565b6040516101cb919061127c565b60405180910390f35b61019c610551565b3480156101e857600080fd5b5061019c6101f7366004611210565b6105a1565b61019c610694565b61019c6106d0565b34801561021857600080fd5b5061022c6102273660046112c0565b6106e4565b6040516101cb9190611350565b34801561024557600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927545b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cb565b34801561029a57600080fd5b506102a460025481565b6040519081526020016101cb565b3480156102be57600080fd5b506102a46102cd366004611392565b61077e565b3480156102de57600080fd5b506102a46102ed3660046112c0565b60016020526000908152604090205481565b34801561030b57600080fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b34801561033f57600080fd5b5061019c61034e366004611472565b610841565b34801561035f57600080fd5b5061022c61036e366004611505565b6108fc565b34801561037f57600080fd5b5061019c61038e366004611210565b61098c565b34801561039f57600080fd5b5061019c6103ae366004611541565b610ad9565b61019c6103c136600461155a565b610ae6565b61019c6103d4366004611575565b610b26565b61019c6103e736600461155a565b610be3565b3480156103f857600080fd5b5061019c6104073660046115c0565b610c0a565b34801561041857600080fd5b506102a461042736600461155a565b63389a75e1600c908152600091909152602090205490565b60608367ffffffffffffffff81111561045a5761045a611363565b604051908082528060200260200182016040528015610483578160200160208202803683370190505b50905060005b84811015610548576105198686838181106104a6576104a66115ea565b90506020020160208101906104bb91906112c0565b8585848181106104cd576104cd6115ea565b90506020028101906104df9190611619565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061077e92505050565b82828151811061052b5761052b6115ea565b602090810291909101015280610540816116ad565b915050610489565b50949350505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6105a9610ddf565b828114610617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064015b60405180910390fd5b60005b8381101561068d57828282818110610634576106346115ea565b9050602002013560016000878785818110610651576106516115ea565b905060200201602081019061066691906112c0565b61ffff16815260208101919091526040016000205580610685816116ad565b91505061061a565b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6106d8610ddf565b6106e26000610e15565b565b600060208190529081526040902080546106fd906116e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610729906116e5565b80156107765780601f1061074b57610100808354040283529160200191610776565b820191906000526020600020905b81548152906001019060200180831161075957829003601f168201915b505050505081565b6040517f40a7bb1000000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906340a7bb10906107f9908690309086908890600401611732565b6040805180830381865afa158015610815573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610839919061178b565b509392505050565b610849610ddf565b6040517fcbed8b9c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c906108c390889088908890889088906004016117af565b600060405180830381600087803b1580156108dd57600080fd5b505af11580156108f1573d6000803e3d6000fd5b505050505050505050565b6060600261090985610e7b565b60405160f09290921b7fffff000000000000000000000000000000000000000000000000000000000000166020830152602282015260428101849052606083901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016606282015260760160405160208183030381529060405290509392505050565b610994610ddf565b8281146109fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d617463680000000000000000000000000000000000604482015260640161060e565b60005b8381101561068d57828282818110610a1a57610a1a6115ea565b9050602002016020810190610a2f919061155a565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606092831b811660208301523090921b9091166034820152604801604051602081830303815290604052600080878785818110610a9257610a926115ea565b9050602002016020810190610aa791906112c0565b61ffff168152602081019190915260400160002090610ac69082611862565b5080610ad1816116ad565b915050610a00565b610ae1610ddf565b600255565b610aee610ddf565b63389a75e1600c52806000526020600c208054421115610b1657636f5e88186000526004601cfd5b60009055610b2381610e15565b50565b6000805b83811015610b7257610b54858583818110610b4757610b476115ea565b9050602002013584610eac565b610b5e908361197c565b915080610b6a816116ad565b915050610b2a565b5080341015610bdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d6574000000000000000000000000000000000000000000604482015260640161060e565b50505050565b610beb610ddf565b8060601b610c0157637448fbae6000526004601cfd5b610b2381610e15565b610c12610ddf565b600073ffffffffffffffffffffffffffffffffffffffff8316610c7f5760405133904790600081818185875af1925050503d8060008114610c6f576040519150601f19603f3d011682016040523d82523d6000602084013e610c74565b606091505b505080915050610d73565b6040513360248201526044810183905273ffffffffffffffffffffffffffffffffffffffff841690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905251610d2b919061198f565b6000604051808303816000865af19150503d8060008114610d68576040519150601f19603f3d011682016040523d82523d6000602084013e610d6d565b606091505b50909150505b80610dda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5769746864726177204661696c65640000000000000000000000000000000000604482015260640161060e565b505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275433146106e2576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b61ffff8116600090815260016020526040812054808203610ea0575050600254919050565b92915050565b50919050565b6000806000610ebb8585610eef565b91509150610ec9828261077e565b9250610ee78260405180602001604052806000815250308487610f2a565b505092915050565b60f082901c6060610f21827dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8616856108fc565b90509250929050565b6000610f3586610fd6565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c5803100838884898960008a6040518863ffffffff1660e01b8152600401610f9c969594939291906119ab565b6000604051808303818588803b158015610fb557600080fd5b505af1158015610fc9573d6000803e3d6000fd5b5050505050505050505050565b61ffff8116600090815260208190526040812080546060929190610ff9906116e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611025906116e5565b80156110725780601f1061104757610100808354040283529160200191611072565b820191906000526020600020905b81548152906001019060200180831161105557829003601f168201915b505050505090508051600003610ea0576040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b16602082018190526034820152604801604051602081830303815290604052915050919050565b803561ffff811681146110e357600080fd5b919050565b60008083601f8401126110fa57600080fd5b50813567ffffffffffffffff81111561111257600080fd5b60208301915083602082850101111561112a57600080fd5b9250929050565b6000806000806000806080878903121561114a57600080fd5b611153876110d1565b9550602087013567ffffffffffffffff8082111561117057600080fd5b61117c8a838b016110e8565b909750955060408901359150808216821461119657600080fd5b909350606088013590808211156111ac57600080fd5b506111b989828a016110e8565b979a9699509497509295939492505050565b60008083601f8401126111dd57600080fd5b50813567ffffffffffffffff8111156111f557600080fd5b6020830191508360208260051b850101111561112a57600080fd5b6000806000806040858703121561122657600080fd5b843567ffffffffffffffff8082111561123e57600080fd5b61124a888389016111cb565b9096509450602087013591508082111561126357600080fd5b50611270878288016111cb565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156112b457835183529284019291840191600101611298565b50909695505050505050565b6000602082840312156112d257600080fd5b6112db826110d1565b9392505050565b60005b838110156112fd5781810151838201526020016112e5565b50506000910152565b6000815180845261131e8160208601602086016112e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006112db6020830184611306565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113a557600080fd5b6113ae836110d1565b9150602083013567ffffffffffffffff808211156113cb57600080fd5b818501915085601f8301126113df57600080fd5b8135818111156113f1576113f1611363565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561143757611437611363565b8160405282815288602084870101111561145057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008060008060006080868803121561148a57600080fd5b611493866110d1565b94506114a1602087016110d1565b935060408601359250606086013567ffffffffffffffff8111156114c457600080fd5b6114d0888289016110e8565b969995985093965092949392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146110e357600080fd5b60008060006060848603121561151a57600080fd5b611523846110d1565b925060208401359150611538604085016114e1565b90509250925092565b60006020828403121561155357600080fd5b5035919050565b60006020828403121561156c57600080fd5b6112db826114e1565b60008060006040848603121561158a57600080fd5b833567ffffffffffffffff8111156115a157600080fd5b6115ad868287016111cb565b90945092506115389050602085016114e1565b600080604083850312156115d357600080fd5b6115dc836114e1565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261164e57600080fd5b83018035915067ffffffffffffffff82111561166957600080fd5b60200191503681900382131561112a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116de576116de61167e565b5060010190565b600181811c908216806116f957607f821691505b602082108103610ea6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61ffff8516815273ffffffffffffffffffffffffffffffffffffffff8416602082015260a06040820152600060a0820152821515606082015260c06080820152600061178160c0830184611306565b9695505050505050565b6000806040838503121561179e57600080fd5b505080516020909101519092909150565b600061ffff808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011683010190509695505050505050565b601f821115610dda57600081815260208120601f850160051c810160208610156118435750805b601f850160051c820191505b818110156101945782815560010161184f565b815167ffffffffffffffff81111561187c5761187c611363565b6118908161188a84546116e5565b8461181c565b602080601f8311600181146118e357600084156118ad5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610194565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561193057888601518255948401946001909101908401611911565b508582101561196c57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115610ea057610ea061167e565b600082516119a18184602087016112e2565b9190910192915050565b61ffff8716815260c0602082015260006119c860c0830188611306565b82810360408401526119da8188611306565b73ffffffffffffffffffffffffffffffffffffffff87811660608601528616608085015283810360a08501529050611a128185611306565b999850505050505050505056fea2646970667358221220a7b9f213db84f551024f6407a836ae7fda747923cd937eb32c4e764c651c6c6464736f6c6343000815003300000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Deployed Bytecode
0x60806040526004361061016d5760003560e01c8063b0bf07c6116100cb578063e32bb67b1161007f578063f2fde38b11610059578063f2fde38b146103d9578063f3fef3a3146103ec578063fee81cf41461040c57600080fd5b8063e32bb67b14610393578063f04e283e146103b3578063f2cac920146103c657600080fd5b8063cbed8b9c116100b0578063cbed8b9c14610333578063d191f54914610353578063d2f1e34b1461037357600080fd5b8063b0bf07c6146102d2578063b353aaa7146102ff57600080fd5b8063715018a6116101225780638da5cb5b116101075780638da5cb5b1461023957806395368d2e1461028e5780639753df2c146102b257600080fd5b8063715018a6146102045780637533d7881461020c57600080fd5b8063256929621161015357806325692962146101d457806352b0896a146101dc57806354d1f13d146101fc57600080fd5b80621d35671461017957806309efa2851461019e57600080fd5b3661017457005b600080fd5b34801561018557600080fd5b5061019c610194366004611131565b505050505050565b005b3480156101aa57600080fd5b506101be6101b9366004611210565b61043f565b6040516101cb919061127c565b60405180910390f35b61019c610551565b3480156101e857600080fd5b5061019c6101f7366004611210565b6105a1565b61019c610694565b61019c6106d0565b34801561021857600080fd5b5061022c6102273660046112c0565b6106e4565b6040516101cb9190611350565b34801561024557600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927545b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cb565b34801561029a57600080fd5b506102a460025481565b6040519081526020016101cb565b3480156102be57600080fd5b506102a46102cd366004611392565b61077e565b3480156102de57600080fd5b506102a46102ed3660046112c0565b60016020526000908152604090205481565b34801561030b57600080fd5b506102697f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67581565b34801561033f57600080fd5b5061019c61034e366004611472565b610841565b34801561035f57600080fd5b5061022c61036e366004611505565b6108fc565b34801561037f57600080fd5b5061019c61038e366004611210565b61098c565b34801561039f57600080fd5b5061019c6103ae366004611541565b610ad9565b61019c6103c136600461155a565b610ae6565b61019c6103d4366004611575565b610b26565b61019c6103e736600461155a565b610be3565b3480156103f857600080fd5b5061019c6104073660046115c0565b610c0a565b34801561041857600080fd5b506102a461042736600461155a565b63389a75e1600c908152600091909152602090205490565b60608367ffffffffffffffff81111561045a5761045a611363565b604051908082528060200260200182016040528015610483578160200160208202803683370190505b50905060005b84811015610548576105198686838181106104a6576104a66115ea565b90506020020160208101906104bb91906112c0565b8585848181106104cd576104cd6115ea565b90506020028101906104df9190611619565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061077e92505050565b82828151811061052b5761052b6115ea565b602090810291909101015280610540816116ad565b915050610489565b50949350505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6105a9610ddf565b828114610617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d61746368000000000000000000000000000000000060448201526064015b60405180910390fd5b60005b8381101561068d57828282818110610634576106346115ea565b9050602002013560016000878785818110610651576106516115ea565b905060200201602081019061066691906112c0565b61ffff16815260208101919091526040016000205580610685816116ad565b91505061061a565b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6106d8610ddf565b6106e26000610e15565b565b600060208190529081526040902080546106fd906116e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610729906116e5565b80156107765780601f1061074b57610100808354040283529160200191610776565b820191906000526020600020905b81548152906001019060200180831161075957829003601f168201915b505050505081565b6040517f40a7bb1000000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67516906340a7bb10906107f9908690309086908890600401611732565b6040805180830381865afa158015610815573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610839919061178b565b509392505050565b610849610ddf565b6040517fcbed8b9c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675169063cbed8b9c906108c390889088908890889088906004016117af565b600060405180830381600087803b1580156108dd57600080fd5b505af11580156108f1573d6000803e3d6000fd5b505050505050505050565b6060600261090985610e7b565b60405160f09290921b7fffff000000000000000000000000000000000000000000000000000000000000166020830152602282015260428101849052606083901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016606282015260760160405160208183030381529060405290509392505050565b610994610ddf565b8281146109fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468204d69736d617463680000000000000000000000000000000000604482015260640161060e565b60005b8381101561068d57828282818110610a1a57610a1a6115ea565b9050602002016020810190610a2f919061155a565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606092831b811660208301523090921b9091166034820152604801604051602081830303815290604052600080878785818110610a9257610a926115ea565b9050602002016020810190610aa791906112c0565b61ffff168152602081019190915260400160002090610ac69082611862565b5080610ad1816116ad565b915050610a00565b610ae1610ddf565b600255565b610aee610ddf565b63389a75e1600c52806000526020600c208054421115610b1657636f5e88186000526004601cfd5b60009055610b2381610e15565b50565b6000805b83811015610b7257610b54858583818110610b4757610b476115ea565b9050602002013584610eac565b610b5e908361197c565b915080610b6a816116ad565b915050610b2a565b5080341015610bdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f466565204e6f74204d6574000000000000000000000000000000000000000000604482015260640161060e565b50505050565b610beb610ddf565b8060601b610c0157637448fbae6000526004601cfd5b610b2381610e15565b610c12610ddf565b600073ffffffffffffffffffffffffffffffffffffffff8316610c7f5760405133904790600081818185875af1925050503d8060008114610c6f576040519150601f19603f3d011682016040523d82523d6000602084013e610c74565b606091505b505080915050610d73565b6040513360248201526044810183905273ffffffffffffffffffffffffffffffffffffffff841690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905251610d2b919061198f565b6000604051808303816000865af19150503d8060008114610d68576040519150601f19603f3d011682016040523d82523d6000602084013e610d6d565b606091505b50909150505b80610dda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5769746864726177204661696c65640000000000000000000000000000000000604482015260640161060e565b505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275433146106e2576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b61ffff8116600090815260016020526040812054808203610ea0575050600254919050565b92915050565b50919050565b6000806000610ebb8585610eef565b91509150610ec9828261077e565b9250610ee78260405180602001604052806000815250308487610f2a565b505092915050565b60f082901c6060610f21827dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8616856108fc565b90509250929050565b6000610f3586610fd6565b90507f00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67573ffffffffffffffffffffffffffffffffffffffff1663c5803100838884898960008a6040518863ffffffff1660e01b8152600401610f9c969594939291906119ab565b6000604051808303818588803b158015610fb557600080fd5b505af1158015610fc9573d6000803e3d6000fd5b5050505050505050505050565b61ffff8116600090815260208190526040812080546060929190610ff9906116e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611025906116e5565b80156110725780601f1061104757610100808354040283529160200191611072565b820191906000526020600020905b81548152906001019060200180831161105557829003601f168201915b505050505090508051600003610ea0576040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b16602082018190526034820152604801604051602081830303815290604052915050919050565b803561ffff811681146110e357600080fd5b919050565b60008083601f8401126110fa57600080fd5b50813567ffffffffffffffff81111561111257600080fd5b60208301915083602082850101111561112a57600080fd5b9250929050565b6000806000806000806080878903121561114a57600080fd5b611153876110d1565b9550602087013567ffffffffffffffff8082111561117057600080fd5b61117c8a838b016110e8565b909750955060408901359150808216821461119657600080fd5b909350606088013590808211156111ac57600080fd5b506111b989828a016110e8565b979a9699509497509295939492505050565b60008083601f8401126111dd57600080fd5b50813567ffffffffffffffff8111156111f557600080fd5b6020830191508360208260051b850101111561112a57600080fd5b6000806000806040858703121561122657600080fd5b843567ffffffffffffffff8082111561123e57600080fd5b61124a888389016111cb565b9096509450602087013591508082111561126357600080fd5b50611270878288016111cb565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156112b457835183529284019291840191600101611298565b50909695505050505050565b6000602082840312156112d257600080fd5b6112db826110d1565b9392505050565b60005b838110156112fd5781810151838201526020016112e5565b50506000910152565b6000815180845261131e8160208601602086016112e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006112db6020830184611306565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156113a557600080fd5b6113ae836110d1565b9150602083013567ffffffffffffffff808211156113cb57600080fd5b818501915085601f8301126113df57600080fd5b8135818111156113f1576113f1611363565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561143757611437611363565b8160405282815288602084870101111561145057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008060008060006080868803121561148a57600080fd5b611493866110d1565b94506114a1602087016110d1565b935060408601359250606086013567ffffffffffffffff8111156114c457600080fd5b6114d0888289016110e8565b969995985093965092949392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146110e357600080fd5b60008060006060848603121561151a57600080fd5b611523846110d1565b925060208401359150611538604085016114e1565b90509250925092565b60006020828403121561155357600080fd5b5035919050565b60006020828403121561156c57600080fd5b6112db826114e1565b60008060006040848603121561158a57600080fd5b833567ffffffffffffffff8111156115a157600080fd5b6115ad868287016111cb565b90945092506115389050602085016114e1565b600080604083850312156115d357600080fd5b6115dc836114e1565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261164e57600080fd5b83018035915067ffffffffffffffff82111561166957600080fd5b60200191503681900382131561112a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116de576116de61167e565b5060010190565b600181811c908216806116f957607f821691505b602082108103610ea6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61ffff8516815273ffffffffffffffffffffffffffffffffffffffff8416602082015260a06040820152600060a0820152821515606082015260c06080820152600061178160c0830184611306565b9695505050505050565b6000806040838503121561179e57600080fd5b505080516020909101519092909150565b600061ffff808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011683010190509695505050505050565b601f821115610dda57600081815260208120601f850160051c810160208610156118435750805b601f850160051c820191505b818110156101945782815560010161184f565b815167ffffffffffffffff81111561187c5761187c611363565b6118908161188a84546116e5565b8461181c565b602080601f8311600181146118e357600084156118ad5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610194565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561193057888601518255948401946001909101908401611911565b508582101561196c57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115610ea057610ea061167e565b600082516119a18184602087016112e2565b9190910192915050565b61ffff8716815260c0602082015260006119c860c0830188611306565b82810360408401526119da8188611306565b73ffffffffffffffffffffffffffffffffffffffff87811660608601528616608085015283810360a08501529050611a128185611306565b999850505050505050505056fea2646970667358221220a7b9f213db84f551024f6407a836ae7fda747923cd937eb32c4e764c651c6c6464736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
-----Decoded View---------------
Arg [0] : _lzEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Loading...
Loading
Loading...
Loading
Net Worth in USD
$259.62
Net Worth in ETH
0.095072
Token Allocations
ETH
37.22%
XDAI
29.72%
POL
16.58%
Others
16.49%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| GNO | 29.72% | $0.999409 | 77.1934 | $77.15 | |
| LINEA | 20.96% | $2,730.77 | 0.0199 | $54.41 | |
| POL | 16.58% | $0.110987 | 387.8021 | $43.04 | |
| AVAX | 10.79% | $10.93 | 2.5631 | $28.02 | |
| ETH | 9.03% | $2,730.77 | 0.00858284 | $23.44 | |
| ARBNOVA | 7.23% | $2,735.59 | 0.00685695 | $18.76 | |
| OPBNB | 4.63% | $845.17 | 0.0142 | $12.02 | |
| CELO | 0.67% | $0.107103 | 16.3107 | $1.75 | |
| MOVR | 0.22% | $2.1 | 0.2772 | $0.581631 | |
| GLMR | 0.16% | $0.018948 | 21.482 | $0.407038 | |
| BSC | 0.01% | $844.69 | 0.00003171 | $0.026781 | |
| BASE | <0.01% | $2,736.3 | 0.00000364 | $0.009971 | |
| OP | <0.01% | $2,735.12 | 0.00000282 | $0.007725 | |
| ARB | <0.01% | $2,733.59 | 0.000000567682 | $0.001552 | |
| SCROLL | <0.01% | $2,738.95 | 0.000000102057 | $0.00028 |
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.