Provider smart contracts wrap the unique logic and arguments to interact with each lending-borrowing protocol in a common interface. Provider smart contracts are stateless contracts.
Fuji defines a provider as any protocol with a lending-borrowing market that allows users to interact with the following main 4 functions: deposit, withdraw, borrow and payback.
Fuji core integrates the following providers:

Compound V2 and V3

Compound is an algorithmic, autonomous interest rate protocol built for developers, to unlock a universe of open financial applications.

Aave V2 and V3

Aave is a decentralized non-custodial liquidity protocol where users can participate as depositors or borrowers. Depositors provide liquidity to the market to earn a passive income, while borrowers are able to borrow in an overcollateralized (perpetually) or undercollateralized (one-block liquidity) fashion.

Forks and other lending markets including: Geist, Hundred, DForce, WePiggy


The IProvider.sol defines the provider interface that the vault contracts use to make external calls to the lending-borrowing protocols.
interface IProvider {
//Basic Core Functions
function deposit(address _collateralAsset, uint256 _collateralAmount) external payable;
function borrow(address _borrowAsset, uint256 _borrowAmount) external payable;
function withdraw(address _collateralAsset, uint256 _collateralAmount) external payable;
function payback(address _borrowAsset, uint256 _borrowAmount) external payable;
// returns the borrow annualized rate for an asset in ray (1e27)
//Example 8.5% annual interest = 0.085 x 10^27 = 85000000000000000000000000 or 85*(10**24)
function getBorrowRateFor(address _asset) external view returns (uint256);
function getBorrowBalance(address _asset) external view returns (uint256);
function getDepositBalance(address _asset) external view returns (uint256);
function getBorrowBalanceOf(address _asset, address _who) external returns (uint256);
Copy link
On this page