Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions evm/contracts/apps/lz-dvn/ILayerZeroDVN.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
pragma solidity ^0.8.27;

interface ILayerZeroDVN {
struct AssignJobParam {
uint32 dstEid;
bytes packetHeader;
bytes32 payloadHash;
uint64 confirmations;
address sender;
}

function assignJob(
AssignJobParam calldata _param,
bytes calldata _options
) external payable returns (uint256 fee);

function getFee(
uint32 _dstEid,
uint64 _confirmations,
address _sender,
bytes calldata _options
) external view returns (uint256 fee);
}
13 changes: 13 additions & 0 deletions evm/contracts/apps/lz-dvn/ILayerZeroEndpointV2.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
pragma solidity ^0.8.27;

interface ILayerZeroEndpointV2 {
function getSendLibrary(
address _sender,
uint32 _dstEid
) external view returns (address lib);

function getReceiveLibrary(
address _receiver,
uint32 _srcEid
) external view returns (address lib, bool isDefault);
}
14 changes: 14 additions & 0 deletions evm/contracts/apps/lz-dvn/IReceiveUlnE2.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
pragma solidity ^0.8.27;

interface IReceiveUlnE2 {
function verify(
bytes calldata _packetHeader,
bytes32 _payloadHash,
uint64 _confirmations
) external;

function commitVerification(
bytes calldata _packetHeader,
bytes32 _payloadHash
) external;
}
70 changes: 70 additions & 0 deletions evm/contracts/apps/lz-dvn/PacketV1Codec.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
pragma solidity ^0.8.27;

/// @notice Decoder for LayerZero V2 packet headers.
/// Header layout (81 bytes):
/// [0] uint8 version (must be 1)
/// [1] uint64 nonce
/// [9] uint32 srcEid
/// [13] bytes32 sender
/// [45] uint32 dstEid
/// [49] bytes32 receiver
library PacketV1Codec {
uint8 internal constant PACKET_VERSION = 1;
uint256 internal constant PACKET_HEADER_SIZE = 81;

error ErrInvalidHeaderLength();
error ErrInvalidHeaderVersion();

function assertValid(
bytes memory header
) internal pure {
if (header.length != PACKET_HEADER_SIZE) {
revert ErrInvalidHeaderLength();
}
if (uint8(header[0]) != PACKET_VERSION) {
revert ErrInvalidHeaderVersion();
}
}

function srcEid(
bytes memory header
) internal pure returns (uint32 out) {
// data starts at header + 32; srcEid is at byte offset 9 within the data.
assembly {
out := shr(224, mload(add(header, 41)))
}
}

function dstEid(
bytes memory header
) internal pure returns (uint32 out) {
// data + 45
assembly {
out := shr(224, mload(add(header, 77)))
}
}

function sender(
bytes memory header
) internal pure returns (bytes32 out) {
// data + 13
assembly {
out := mload(add(header, 45))
}
}

function receiverB32(
bytes memory header
) internal pure returns (bytes32 out) {
// data + 49
assembly {
out := mload(add(header, 81))
}
}

function receiverAddress(
bytes memory header
) internal pure returns (address) {
return address(uint160(uint256(receiverB32(header))));
}
}
Loading
Loading