OVaultHubComposer
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);