Skip to main content

OVaultHubComposer

Git Source

Inherits: ILayerZeroComposer, Ownable, ReentrancyGuard

Title: OVaultHubComposer

Base-side LayerZero compose receiver for cross-chain deposit/redeem intents.

The destination OFT credits tokens to this contract first, then EndpointV2 calls lzCompose. This contract executes wrapper deposit/withdraw and enforces strict balance-delta invariants so a compose packet can never spend or mint more than the packet-provided OFT amount.

State Variables

ACTION_DEPOSIT

uint8 public constant ACTION_DEPOSIT = 1

ACTION_REDEEM

uint8 public constant ACTION_REDEEM = 2

registry

ICreatorRegistry public immutable registry

endpoint

address public immutable endpoint

allowedComposeSenders

mapping(address => bool) public allowedComposeSenders

Functions

constructor

constructor(address _registry, address _owner) Ownable(_owner);

setAllowedComposeSender

function setAllowedComposeSender(address sender, bool allowed) external onlyOwner;

lzCompose

function lzCompose(
address _from,
bytes32 _guid,
bytes calldata _message,
address _executor,
bytes calldata _extraData
) external payable override nonReentrant;

_composeDeposit

function _composeDeposit(
address creatorToken,
address shareOft,
address wrapper,
address receiver,
uint256 amountIn,
uint256 minSharesOut
) internal returns (uint256 sharesOut);

_composeRedeem

function _composeRedeem(
address creatorToken,
address shareOft,
address wrapper,
address receiver,
uint256 amountIn,
uint256 minAssetsOut
) internal returns (uint256 assetsOut);

_validateCreatorBindings

function _validateCreatorBindings(address creatorToken, address wrapper) internal view returns (address shareOft);

Events

ComposeSenderAllowed

event ComposeSenderAllowed(address indexed sender, bool allowed);

DepositComposed

event DepositComposed(
bytes32 indexed guid,
address indexed sourceOft,
address indexed receiver,
address creatorToken,
address wrapper,
uint256 assetsIn,
uint256 sharesOut,
uint32 srcEid,
address composeFrom
);

RedeemComposed

event RedeemComposed(
bytes32 indexed guid,
address indexed sourceOft,
address indexed receiver,
address creatorToken,
address wrapper,
uint256 sharesIn,
uint256 assetsOut,
uint32 srcEid,
address composeFrom
);

Errors

OnlyEndpoint

error OnlyEndpoint();

ZeroAddress

error ZeroAddress();

ZeroAmount

error ZeroAmount();

SenderNotAllowed

error SenderNotAllowed(address sender);

UnknownAction

error UnknownAction(uint8 action);

SourceOftMismatch

error SourceOftMismatch(address expected, address actual);

CanonicalShareOftMismatch

error CanonicalShareOftMismatch(address expected, address actual);

WrapperMismatch

error WrapperMismatch(address expected, address actual);

WrapperCreatorTokenMismatch

error WrapperCreatorTokenMismatch(address expected, address actual);

WrapperShareOftMismatch

error WrapperShareOftMismatch(address expected, address actual);

InsufficientComposerBalance

error InsufficientComposerBalance(address token, uint256 available, uint256 requiredAmount);

InputSpendInvariantFailed

error InputSpendInvariantFailed(address token, uint256 beforeBalance, uint256 afterBalance, uint256 expectedSpend);

OutputMintInvariantFailed

error OutputMintInvariantFailed(address token, uint256 beforeBalance, uint256 afterBalance, uint256 expectedMint);

ResidualBalanceInvariantFailed

error ResidualBalanceInvariantFailed(address token, uint256 beforeBalance, uint256 afterBalance);