POL Price: $0.204743 (-4.08%)
 

Overview

POL Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 POL

POL Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

1 Internal Transaction found.

Latest 1 internal transaction

Parent Transaction Hash Block From To
540640272024-02-28 16:04:36386 days ago1709136276  Contract Creation0 POL
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LayerZeroV2Executor

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion
File 1 of 6 : LayerZeroV2Executor.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

import {
    ILayerZeroEndpointV2,
    Origin
} from "layerzero-v2/protocol/contracts/interfaces/ILayerZeroEndpointV2.sol";

contract LayerZeroV2Executor {
    uint64 internal constant RECEIVER_VERSION = 1;
    address public immutable endpoint;

    error InvalidSender();

    constructor(address _endpoint, address delegate) {
        endpoint = _endpoint;
        ILayerZeroEndpointV2(endpoint).setDelegate(delegate);
    }

    function oAppVersion() public view virtual returns (uint64, uint64) {
        return (0, RECEIVER_VERSION);
    }

    function nextNonce(uint32, bytes32) public view virtual returns (uint64) {
        return 0;
    }

    function allowInitializePath(Origin calldata) public view virtual returns (bool) {
        return true;
    }

    function lzReceive(
        Origin calldata _origin,
        bytes32, // _guid
        bytes calldata _message,
        address, // _executor
        bytes calldata // _extraData
    ) external payable {
        if (msg.sender != endpoint) revert InvalidSender();

        address src = address(uint160(uint256(_origin.sender)));

        (bool success, bytes memory result) = src.call(_message);

        if (!success) {
            assembly {
                revert(add(result, 32), mload(result))
            }
        }
    }
}

File 2 of 6 : ILayerZeroEndpointV2.sol
// 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;
}

File 3 of 6 : IMessageLibManager.sol
// 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);
}

File 4 of 6 : IMessagingComposer.sol
// 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;
}

File 5 of 6 : IMessagingChannel.sol
// 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);
}

File 6 of 6 : IMessagingContext.sol
// 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);
}

Settings
{
  "remappings": [
    "@account-abstraction/=lib/account-abstraction/",
    "erc6551/=lib/erc6551/src/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "multicall-authenticated/=lib/multicall-authenticated/src/",
    "layerzero-v1/=lib/layerzero-v1/contracts/",
    "layerzero-v2/=lib/layerzero-v2/",
    "@layerzerolabs/lz-evm-protocol-v2/=lib/layerzero-v2/protocol/",
    "@layerzerolabs/lz-evm-messagelib-v2/=lib/layerzero-v2/messagelib/",
    "solidity-bytes-utils/=lib/layerzero-v2/oapp/node_modules/solidity-bytes-utils/",
    "@openzeppelin/contracts-upgradeable/=lib/layerzero-v2/messagelib/node_modules/@openzeppelin/contracts-upgradeable/",
    "@layerzerolabs/lz-evm-v1-0.7/=lib/layerzero-v2/messagelib/node_modules/@layerzerolabs/lz-evm-v1-0.7/",
    "@axelar-network/=lib/layerzero-v2/messagelib/node_modules/@axelar-network/",
    "@chainlink/=lib/layerzero-v2/messagelib/node_modules/@chainlink/contracts-ccip/src/",
    "account-abstraction/=lib/account-abstraction/contracts/",
    "hardhat-deploy/=lib/layerzero-v2/oapp/node_modules/hardhat-deploy/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_endpoint","type":"address"},{"internalType":"address","name":"delegate","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidSender","type":"error"},{"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":"view","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"_origin","type":"tuple"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"_message","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":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oAppVersion","outputs":[{"internalType":"uint64","name":"","type":"uint64"},{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"}]

60a060405234801561001057600080fd5b506040516104c53803806104c583398101604081905261002f916100b3565b6001600160a01b03828116608081905260405163ca5eb5e160e01b815291831660048301529063ca5eb5e190602401600060405180830381600087803b15801561007857600080fd5b505af115801561008c573d6000803e3d6000fd5b5050505050506100e6565b80516001600160a01b03811681146100ae57600080fd5b919050565b600080604083850312156100c657600080fd5b6100cf83610097565b91506100dd60208401610097565b90509250929050565b6080516103be61010760003960008181609d015261014f01526103be6000f3fe60806040526004361061004a5760003560e01c806313137d651461004f57806317442b70146100645780635e280f111461008b5780637d25a05e146100d7578063ff7bd03d14610113575b600080fd5b61006261005d366004610274565b610144565b005b34801561007057600080fd5b50604080516000815260016020820152015b60405180910390f35b34801561009757600080fd5b506100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610082565b3480156100e357600080fd5b506100fa6100f2366004610320565b600092915050565b60405167ffffffffffffffff9091168152602001610082565b34801561011f57600080fd5b5061013461012e366004610355565b50600190565b6040519015158152602001610082565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018d57604051636edaef2f60e11b815260040160405180910390fd5b60405160208801359060009081906001600160a01b038416906101b3908a908a90610378565b6000604051808303816000865af19150503d80600081146101f0576040519150601f19603f3d011682016040523d82523d6000602084013e6101f5565b606091505b50915091508161020757805160208201fd5b50505050505050505050565b60006060828403121561022557600080fd5b50919050565b60008083601f84011261023d57600080fd5b50813567ffffffffffffffff81111561025557600080fd5b60208301915083602082850101111561026d57600080fd5b9250929050565b600080600080600080600060e0888a03121561028f57600080fd5b6102998989610213565b965060608801359550608088013567ffffffffffffffff808211156102bd57600080fd5b6102c98b838c0161022b565b909750955060a08a013591506001600160a01b03821682146102ea57600080fd5b90935060c0890135908082111561030057600080fd5b5061030d8a828b0161022b565b989b979a50959850939692959293505050565b6000806040838503121561033357600080fd5b823563ffffffff8116811461034757600080fd5b946020939093013593505050565b60006060828403121561036757600080fd5b6103718383610213565b9392505050565b818382376000910190815291905056fea264697066735822122071fb98406b6d56d491e3673fedbc61f33ce6f1337d4a42d0ee7ea613b50475d364736f6c634300081400330000000000000000000000001a44076050125825900e736c501f859c50fe728c000000000000000000000000781b6a527482828bb04f33563797d4b696ddf328

Deployed Bytecode

0x60806040526004361061004a5760003560e01c806313137d651461004f57806317442b70146100645780635e280f111461008b5780637d25a05e146100d7578063ff7bd03d14610113575b600080fd5b61006261005d366004610274565b610144565b005b34801561007057600080fd5b50604080516000815260016020820152015b60405180910390f35b34801561009757600080fd5b506100bf7f0000000000000000000000001a44076050125825900e736c501f859c50fe728c81565b6040516001600160a01b039091168152602001610082565b3480156100e357600080fd5b506100fa6100f2366004610320565b600092915050565b60405167ffffffffffffffff9091168152602001610082565b34801561011f57600080fd5b5061013461012e366004610355565b50600190565b6040519015158152602001610082565b336001600160a01b037f0000000000000000000000001a44076050125825900e736c501f859c50fe728c161461018d57604051636edaef2f60e11b815260040160405180910390fd5b60405160208801359060009081906001600160a01b038416906101b3908a908a90610378565b6000604051808303816000865af19150503d80600081146101f0576040519150601f19603f3d011682016040523d82523d6000602084013e6101f5565b606091505b50915091508161020757805160208201fd5b50505050505050505050565b60006060828403121561022557600080fd5b50919050565b60008083601f84011261023d57600080fd5b50813567ffffffffffffffff81111561025557600080fd5b60208301915083602082850101111561026d57600080fd5b9250929050565b600080600080600080600060e0888a03121561028f57600080fd5b6102998989610213565b965060608801359550608088013567ffffffffffffffff808211156102bd57600080fd5b6102c98b838c0161022b565b909750955060a08a013591506001600160a01b03821682146102ea57600080fd5b90935060c0890135908082111561030057600080fd5b5061030d8a828b0161022b565b989b979a50959850939692959293505050565b6000806040838503121561033357600080fd5b823563ffffffff8116811461034757600080fd5b946020939093013593505050565b60006060828403121561036757600080fd5b6103718383610213565b9392505050565b818382376000910190815291905056fea264697066735822122071fb98406b6d56d491e3673fedbc61f33ce6f1337d4a42d0ee7ea613b50475d364736f6c63430008140033

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

0000000000000000000000001a44076050125825900e736c501f859c50fe728c000000000000000000000000781b6a527482828bb04f33563797d4b696ddf328

-----Decoded View---------------
Arg [0] : _endpoint (address): 0x1a44076050125825900e736c501f859c50fE728c
Arg [1] : delegate (address): 0x781b6A527482828bB04F33563797d4b696ddF328

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001a44076050125825900e736c501f859c50fe728c
Arg [1] : 000000000000000000000000781b6a527482828bb04f33563797d4b696ddf328


Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.