Comment on page
💫
FlashAngle - Instant AgToken liquidity
Flash loans on top of Angle Protocol stablecoins
- Contract Name:
FlashAngle
FlashAngle.json
6KB
Code
FlashAngle ABI
FlashAngle
is a contract to take flash loans on top of Angle Protocol AgTokens. With this contract and for a whitelisted stablecoin, any address can take a flash-loan of AgToken
.The innovation here is that stablecoins given out in flash loans are minted during the transaction and burnt at the end of it: this means that this contract could be used to take theorically uncapped and free flash loans on Angle Protocol stablecoins.
Implements
IFlashAngle
, IERC3156FlashLender
, ReentrancyGuardUpgradeable
and Initializable
. This contract is upgradeable.core
: Reference to theCoreBorrow
contractstablecoinMap
: Maps a stablecoin to its associated parameters and reference, that is to say: thetreasury
contract associated to the stablecoin, the maximum amount borrowable through a flash-loan and the fee taken on each flash loan.
Some functions can only be called by the
CoreBorrow
contract as such a custom modifier onlyCore
has been defined. This contract also reads in its associated core
contract to know whether addresses have the guardian role.All standard ERC3156 methods are implemented, such as
flashFee()
, maxFlashLoan()
and flashLoan()
. function flashLoan(
IERC3156FlashBorrower receiver,
address token,
uint256 amount,
bytes calldata data
) external returns (bool);
The
flashLoan
implementation differs from other standard implementations in that stablecoins are minted to the receiver
address.This address must have a function
onFlashLoan
to receive the flash-loan, and this function should return keccak256("ERC3156FlashBorrower.onFlashLoan")
after being called. If there are some fees setup for this function, then if amount
of stablecoins have been sent to the receiver
, then amount + amount * fees
will have to be burnt from the receiver
contract.This function will revert if it is called on a token, that is to say a stablecoin, that has not been whitelisted.
If fees are taken, then this contract may make revenue. There is a
accrueInterestToTreasury
function to pass these fees to Treasury
contract responsible for doing the accounting of profits and losses.There can never be a loss by the
FlashAngle
contract.The
FlashAngle
contract can be made aware that it supports a new stablecoin by associating a non-zero treasury address to the stablecoin address in the stablecoinMap
.This can be done by the
core
contract in the addStablecoinSupport
function. The core
contract can also remove a stablecoin through the removeStablecoinSupport
function, or pass its role to another contract with the setCore
function.Parameters for flash loans and for a given stablecoin can be changed by governance with the
setFlashLoanParameters
function.