Escrow
In layman terms, an escrow is a third party that holds funds, bonds, deeds or other documents that take effect only when certain conditions are fulfilled. An example would be:
An escrow account between a buyer and seller holding funds required to buy a home
The escrow will only transfer to the seller the funds if certain conditions are met by both the buyer and the seller
In the Teller Protocol, our Escrow holds funds between a user of the Teller App and the multiple DeFi applications Teller can call upon, which include:
Compound
Uniswap
Yearn
This allows users to deposit loaned funds into a Loan Escrow and, depending if conditions are fulfilled, can interact with multiple DeFi applications. Quite exciting stuff!
dapps
dappsThe dapps directory contains all the meta data we need to connect to our multiple DeFi applications. In here, we will find:
interfacescontains all the different functions available for a respective DeFi application. Some applications, like Aave, contain 4 different interfaces.librariescontains all the defined functions needed to be implemented in our Facet files. If you don't know what a Diamond Contract is, kindly refer to **EIP-2535.**DappMods.solis a contract that contains modifiers required to transact certain functions in the Facet files<dapp-name>Facet.solare the multiple Facet contracts that call their respective dapp interface functions and store the updated storage inside the Escrow libraries
escrow
escrowThis directory contains the Interface ILoansEscrow along with it's implemented contracts.
It contains functions like
callDapp()setTokenAllowance()claimToken()
These functions calls a dapp, sets the token allowance of your escrow tokens and claim your escrow tokens. How your escrow tokens get updated (adding or removing) is explained in the libraries section.
libraries
librariesThe LibEscrow.sol library contains functions that help us interact with our respective escrow. It does the following:
Gets our list of escrow tokens
Checks out the balance of a respective token in our escrow
Finds the total value of our escrow loan
And, perhaps most importantly, updates our tokens in the escrow
This function tokenUpdated() either adds or removes escrow tokens from a loan escrow depending whether the tokenAddress is contained in the list of tokens or not.
EscrowClaimTokensFacet.sol
EscrowClaimTokensFacet.solFinally, our Facet here has one function, claimTokens() that allows the user, as long as they are the borrower and the loan status is closed, to safely transfer all the escrow tokens from the loan escrow to the user's wallet.
Last updated
Was this helpful?