123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // SPDX-License-Identifier: BUSL-1.1
- 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 receiver 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);
- }
|