Skip to main content

Pool

Pool

Deployment on Ethereum mainnet:

https://etherscan.io/address/0xB01b315e32D1D9B5CE93e296D483e1f0aAD39E75

Main entry point for LP's (a.k.a. capital providers) Handles key logic for depositing and withdrawing funds from the Pool

config

contract GoldfinchConfig config

compoundBalance

uint256 compoundBalance

DepositMade

event DepositMade(address capitalProvider, uint256 amount, uint256 shares)

WithdrawalMade

event WithdrawalMade(address capitalProvider, uint256 userAmount, uint256 reserveAmount)

TransferMade

event TransferMade(address from, address to, uint256 amount)

InterestCollected

event InterestCollected(address payer, uint256 poolAmount, uint256 reserveAmount)

PrincipalCollected

event PrincipalCollected(address payer, uint256 amount)

ReserveFundsCollected

event ReserveFundsCollected(address user, uint256 amount)

PrincipalWrittendown

event PrincipalWrittendown(address creditline, int256 amount)

GoldfinchConfigUpdated

event GoldfinchConfigUpdated(address who, address configAddress)

initialize

function initialize(address owner, contract GoldfinchConfig _config) public

Run only once, on initialization

NameTypeDescription
owneraddressThe address of who should have the "OWNER_ROLE" of this contract
_configcontract GoldfinchConfigThe address of the GoldfinchConfig contract

deposit

function deposit(uint256 amount) external

Deposits `amount` USDC from msg.sender into the Pool, and returns you the equivalent value of FIDU tokens

NameTypeDescription
amountuint256The amount of USDC to deposit

withdraw

function withdraw(uint256 usdcAmount) external

Withdraws USDC from the Pool to msg.sender, and burns the equivalent value of FIDU tokens

NameTypeDescription
usdcAmountuint256The amount of USDC to withdraw

withdrawInFidu

function withdrawInFidu(uint256 fiduAmount) external

Withdraws USDC (denominated in FIDU terms) from the Pool to msg.sender

NameTypeDescription
fiduAmountuint256The amount of USDC to withdraw in terms of fidu shares

collectInterestAndPrincipal

function collectInterestAndPrincipal(address from, uint256 interest, uint256 principal) public

Collects `interest` USDC in interest and `principal` in principal from `from` and sends it to the Pool. This also increases the share price accordingly. A portion is sent to the Goldfinch Reserve address

NameTypeDescription
fromaddressThe address to take the USDC from. Implicitly, the Pool must be authorized to move USDC on behalf of `from`.
interestuint256the interest amount of USDC to move to the Pool
principaluint256the principal amount of USDC to move to the Pool Requirements: - The caller must be the Credit Desk. Not even the owner can call this function.

distributeLosses

function distributeLosses(address creditlineAddress, int256 writedownDelta) external

transferFrom

function transferFrom(address from, address to, uint256 amount) public returns (bool)

Moves `amount` USDC from `from`, to `to`.

NameTypeDescription
fromaddressThe address to take the USDC from. Implicitly, the Pool must be authorized to move USDC on behalf of `from`.
toaddressThe address that the USDC should be moved to
amountuint256the amount of USDC to move to the Pool Requirements: - The caller must be the Credit Desk. Not even the owner can call this function.

drawdown

function drawdown(address to, uint256 amount) public returns (bool)

Moves `amount` USDC from the pool, to `to`. This is similar to transferFrom except we sweep any balance we have from compound first and recognize interest. Meant to be called only by the credit desk on drawdown

NameTypeDescription
toaddressThe address that the USDC should be moved to
amountuint256the amount of USDC to move to the Pool Requirements: - The caller must be the Credit Desk. Not even the owner can call this function.

assets

function assets() public view returns (uint256)

migrateToSeniorPool

function migrateToSeniorPool() external

toUint256

function toUint256(bytes _bytes) internal pure returns (uint256 value)

sweepToCompound

function sweepToCompound() public

Moves any USDC still in the Pool to Compound, and tracks the amount internally. This is done to earn interest on latent funds until we have other borrowers who can use it.

Requirements:

  • The caller must be an admin.

sweepFromCompound

function sweepFromCompound() public

Moves any USDC from Compound back to the Pool, and recognizes interest earned. This is done automatically on drawdown or withdraw, but can be called manually if necessary.

Requirements:

  • The caller must be an admin.

_withdraw

function _withdraw(uint256 usdcAmount, uint256 withdrawShares) internal

sweepToCompound

function sweepToCompound(contract ICUSDCContract cUSDC, uint256 usdcAmount) internal

sweepFromCompound

function sweepFromCompound(contract ICUSDCContract cUSDC, uint256 cUSDCAmount) internal

_collectInterestAndPrincipal

function _collectInterestAndPrincipal(address from, uint256 interest, uint256 principal) internal

_sweepFromCompound

function _sweepFromCompound() internal

fiduMantissa

function fiduMantissa() internal pure returns (uint256)

usdcMantissa

function usdcMantissa() internal pure returns (uint256)

usdcToFidu

function usdcToFidu(uint256 amount) internal pure returns (uint256)

cUSDCToUSDC

function cUSDCToUSDC(uint256 exchangeRate, uint256 amount) internal pure returns (uint256)

totalShares

function totalShares() internal view returns (uint256)

usdcToSharePrice

function usdcToSharePrice(uint256 usdcAmount) internal view returns (uint256)

poolWithinLimit

function poolWithinLimit(uint256 _totalShares) internal view returns (bool)

transactionWithinLimit

function transactionWithinLimit(uint256 amount) internal view returns (bool)

getNumShares

function getNumShares(uint256 amount) internal view returns (uint256)

getUSDCAmountFromShares

function getUSDCAmountFromShares(uint256 fiduAmount) internal view returns (uint256)

fiduToUSDC

function fiduToUSDC(uint256 amount) internal pure returns (uint256)

sendToReserve

function sendToReserve(address from, uint256 amount, address userForEvent) internal

doUSDCTransfer

function doUSDCTransfer(address from, address to, uint256 amount) internal returns (bool)

withinTransactionLimit

modifier withinTransactionLimit(uint256 amount)

onlyCreditDesk

modifier onlyCreditDesk()