transfer & mint
Last updated
Last updated
updateInterestRates was covered in the common functions section
This transfers the asset to be supplied from user to the corresponding AToken contract
from: msg.sender
to: aTokenAddress
(aDAI, aWETH...)
User' supplied assets are held on their respective AToken contracts; DAI held on aDAI.
Use of safeTransferFrom
SafeERC20
is a helper to make safe the interaction with someone else’s ERC20 token, in your contracts. What the helper does for you is:
check the boolean return values of ERC20 operations and revert the transaction if they fail,
at the same time allowing you to support some non-standard ERC20 tokens that don’t have boolean return values.
It additionally provides helpers to increase or decrease an allowance, to mitigate an attack 118 possible with vanilla approve
.
For more: https://forum.openzeppelin.com/t/making-sure-i-understand-how-safeerc20-works/2940
minting of ATokens corresponding the supplied asset
mint
calls _mintScaled
_mintScaled
mints tokens in-line with the current liquidity index, as seen by amountScaled
amountToMint
: amountScaled
cast as uint128
balanceIncrease
: interest accrued from user's last recorded index and current index
_userState[onBehalfOf].additionalData
is updated with the latest index.
balanceIncrease
is calculated as part of the mint event emission.
super.BalanceOf
and _userState[onBehalfOf].additionalData
super.BalanceOf
calls balanceOf
declared in IncentivizedERC20.sol
Inheritance: ScaledBalanceTokenBase > MintableIncentivizedERC20 > IncentivizedERC20
notice the irregular definition of balanceOf
, it calls out a mapping _userState
_userState
is mapping of user addresses to UserState
structs
Each UserState
struct stores a user's balance with a wildcard field of additionalData
additionalData
in the context of Atokens
used to store the index of the user's last "index-sensitive" action: --> last supply/withdrawal/borrow/repayment
mint
returns the bool value of (scaledBalance == 0)
scaledBalance
is the amount of balance a user has of a specific asset pre-dating this supply action
(scaledBalance == 0)
will return true only if this supply action is the user's very first supply action - specific to said asset.
The return bool value is useful to us as explained in the next section.