transfer & mint
Last updated
Was this helpful?
Last updated
Was this helpful?
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.