A universal lending pool is a vault<-> (isolated lending pool)s architecture that accepts any set of collateral/credit conditions, such as illiquid tokens or NFTs or a certain credit criterion(assuming a composable identity layer). See the diagram in the Borrowing from the pool below.
A RAMMLend's vault could host multiple lending pools where its collateral is either a singleton or a combination of collaterals. A lending pool will be supplied/withdrawn by the vault when managers issue or redeem longZCB.
Adding a new pool
A new lending pool can be added to the vault by anyone. The following information needs to a provided either through the UI or contract calls. More details in parameter details
// 1. CollateralInfo[], for each collateral. Includes params// such as maxBorrowAble amount per unit collateral, collateral address, etcstructCollateralInfo// 2. Interest Rate Parametersstruct RateParams// 3. Tranche Parameters applicable for all perpetual instruments, parametrizes the junior vs senior profit split struct PoolData
Supplying to the pool
Whenever a manager issues longZCB for the given pool, the collateral presented + capital from the vault will be allocated to the lending pool.
High level of backend logic of supplying
Withdrawing from the pool
Whenever a manager redeems longZCB for the given pool, the protocol withdraws funds from the lendingPool back to the vault, and the manager will realize his profit.
High level backend logic of withdrawing
Borrowing from the pool
Dotted lines denotes capital is allocated from vault by the managers