**VaultImplementation** Create a new loan: ``` commitToLien(IAstariaRouter.Commitment calldata params, address receiver) returns (uint256 lienId, ILienToken.Stack[] memory stack); ``` Uses: ``` struct IAstariaRouter.Commitment { address tokenContract; uint256 tokenId; NewLienRequest lienRequest; } ``` ``` struct IAstariaRouter.NewLienRequest { StrategyDetails strategy; ILienToken.Stack[] stack; bytes nlrDetails; MerkleData merkle; uint256 amount; uint8 v; bytes32 r; bytes32 s; } ``` ``` struct IAstariaRouter.StrategyDetails { uint8 version; uint256 deadline; address vault; } ``` ``` struct IAstariaRouter.MerkleData { bytes32 root; bytes32[] proof; } ``` ``` struct ILienToken.Stack { Lien lien; Point point; } ``` ``` struct ILienToken.Lien { address token; address vault; bytes32 strategyRoot; uint256 collateralId; Details details; } ``` ``` struct ILienToken.Details { uint256 maxAmount; uint256 rate; //rate per second uint256 duration; uint256 maxPotentialDebt; uint256 liquidationInitialAsk; } ``` ``` struct ILienToken.Point { uint88 amount; uint8 position; uint40 last; uint40 end; uint256 lienId; } ``` Refinance a loan: ``` function buyoutLien( uint256 collateralId, uint8 position, IAstariaRouter.Commitment calldata incomingTerms, ILienToken.Stack[] calldata stack ) returns (ILienToken.Stack[] memory, ILienToken.Stack memory); ``` **AstariaRouter** Create a PrivateVault: ``` function newVault(address delegate) external returns (address); ``` Liquidate an expired lien: ``` function liquidate(ILienToken.Stack[] calldata stack, uint8 position) external returns (OrderParameters memory); ``` **PublicVault** Begin a withdrawal (deposit VaultTokens and receive an equivalent amount of WithdrawTokens redeemable for WETH by the end of ```epoch + 1```) ``` function redeemFutureEpoch( uint256 shares, address receiver, address owner, uint64 epoch ) external returns (uint256 assets); ``` **CollateralToken** Claim the underlying NFT for a liquidated CollateralToken after an auction (permissionless): ``` function listForSaleOnSeaport(ListUnderlyingForSaleParams calldata params) external; ``` Uses: ``` struct ListUnderlyingForSaleParams { ILienToken.Stack[] stack; uint256 listPrice; uint56 maxDuration; } ``` **WithdrawProxy** Redeem WETH from WithdrawTokens: ``` function redeem( uint256 shares, address receiver, address owner ) returns (uint256 assets); ```