Reserves are pretty straightforward.
In order for a reserve to exist one must create a reserve via the CoreReserveFactory:
struct CreateReserveParams {
CoreReserve.ReserveType reserveType;
bool isNativeTokenReserve;
address reserveToken;
uint256 reserveTokenInitialAmount;
}
function createReserve(CreateReserveParams calldata _params) external payable nonReentrant whenNotPaused returns (address)
Once a reserve is created, one can provide liquidity to the selected reserve via a deposit:
function deposit(uint256 _depositAmount, address _creationDepositor) external payable nonReentrant whenNotPaused
Whenever one is ready to withdraw liquidity, they can simply do so via a withdrawal:
function withdraw(uint256 _withdrawAmount) external nonReentrant whenNotPaused