Branch data Line data Source code
1 : : // SPDX-License-Identifier: MIT
2 : : pragma solidity ^0.8.10;
3 : :
4 : : import {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';
5 : : import {IPool} from '../../../interfaces/IPool.sol';
6 : : import {IncentivizedERC20} from './IncentivizedERC20.sol';
7 : :
8 : : /**
9 : : * @title MintableIncentivizedERC20
10 : : * @author Aave
11 : : * @notice Implements mint and burn functions for IncentivizedERC20
12 : : */
13 : : abstract contract MintableIncentivizedERC20 is IncentivizedERC20 {
14 : : /**
15 : : * @dev Constructor.
16 : : * @param pool The reference to the main Pool contract
17 : : * @param name The name of the token
18 : : * @param symbol The symbol of the token
19 : : * @param decimals The number of decimals of the token
20 : : */
21 : : constructor(
22 : : IPool pool,
23 : : string memory name,
24 : : string memory symbol,
25 : : uint8 decimals
26 : : ) IncentivizedERC20(pool, name, symbol, decimals) {
27 : : // Intentionally left blank
28 : : }
29 : :
30 : : /**
31 : : * @notice Mints tokens to an account and apply incentives if defined
32 : : * @param account The address receiving tokens
33 : : * @param amount The amount of tokens to mint
34 : : */
35 : : function _mint(address account, uint128 amount) internal virtual {
36 : 62621 : uint256 oldTotalSupply = _totalSupply;
37 : 62621 : _totalSupply = oldTotalSupply + amount;
38 : :
39 : 62621 : uint128 oldAccountBalance = _userState[account].balance;
40 : 62621 : _userState[account].balance = oldAccountBalance + amount;
41 : :
42 : 62621 : IAaveIncentivesController incentivesControllerLocal = _incentivesController;
43 : 62621 : if (address(incentivesControllerLocal) != address(0)) {
44 : 62621 : incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);
45 : : }
46 : : }
47 : :
48 : : /**
49 : : * @notice Burns tokens from an account and apply incentives if defined
50 : : * @param account The account whose tokens are burnt
51 : : * @param amount The amount of tokens to burn
52 : : */
53 : : function _burn(address account, uint128 amount) internal virtual {
54 : 26087 : uint256 oldTotalSupply = _totalSupply;
55 : 26087 : _totalSupply = oldTotalSupply - amount;
56 : :
57 : 26087 : uint128 oldAccountBalance = _userState[account].balance;
58 : 26087 : _userState[account].balance = oldAccountBalance - amount;
59 : :
60 : 26086 : IAaveIncentivesController incentivesControllerLocal = _incentivesController;
61 : :
62 : 26086 : if (address(incentivesControllerLocal) != address(0)) {
63 : 26086 : incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);
64 : : }
65 : : }
66 : : }
|