-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathDeployImplementations.s.sol
107 lines (97 loc) · 3.27 KB
/
DeployImplementations.s.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.11;
import 'forge-std/Test.sol';
import 'forge-std/Script.sol';
import {AaveV2Ethereum} from 'aave-address-book/AaveV2Ethereum.sol';
interface Initializable {
function initialize(
uint8 underlyingAssetDecimals,
string calldata tokenName,
string calldata tokenSymbol
) external;
}
contract DeployImplementationsScript is Script, Test {
address internal constant INCENTIVES_CONTROLLER =
address(0xd784927Ff2f95ba542BfC824c8a8a98F3495f6b5);
string public constant ATOKEN_NAME_PREFIX = 'Aave interest bearing ';
string public constant ATOKEN_SYMBOL_PREFIX = 'a';
string public constant VAR_DEBT_NAME_PREFIX = 'Aave variable debt bearing ';
string public constant VAR_DEBT_SYMBOL_PREFIX = 'variableDebt';
string public constant STABLE_DEBT_NAME_PREFIX = 'Aave stable debt bearing ';
string public constant STABLE_DEBT_SYMBOL_PREFIX = 'stableDebt';
// artifacts
string internal constant aTokenArtifact = 'AToken.sol:AToken';
string internal constant stableDebtArtifact =
'StableDebt.sol:StableDebtToken';
string internal constant variableDebtArtifact =
'VariableDebt.sol:VariableDebtToken';
function deployASVTokens(
address underlyingAsset,
uint8 decimals,
string memory underlyingAssetSymbol
)
public
returns (
address,
address,
address
)
{
address aToken = deployCode(
aTokenArtifact,
abi.encode(
AaveV2Ethereum.POOL,
underlyingAsset,
AaveV2Ethereum.COLLECTOR,
string(abi.encodePacked(ATOKEN_NAME_PREFIX, underlyingAssetSymbol)),
string(abi.encodePacked(ATOKEN_SYMBOL_PREFIX, underlyingAssetSymbol)),
INCENTIVES_CONTROLLER
)
);
Initializable(aToken).initialize(
decimals,
string(abi.encodePacked(ATOKEN_NAME_PREFIX, underlyingAssetSymbol)),
string(abi.encodePacked(ATOKEN_SYMBOL_PREFIX, underlyingAssetSymbol))
);
address stableDebt = deployCode(
stableDebtArtifact,
abi.encode(
AaveV2Ethereum.POOL,
underlyingAsset,
string(
abi.encodePacked(STABLE_DEBT_NAME_PREFIX, underlyingAssetSymbol)
),
string(
abi.encodePacked(STABLE_DEBT_SYMBOL_PREFIX, underlyingAssetSymbol)
),
INCENTIVES_CONTROLLER
)
);
Initializable(stableDebt).initialize(
decimals,
string(abi.encodePacked(STABLE_DEBT_NAME_PREFIX, underlyingAssetSymbol)),
string(abi.encodePacked(STABLE_DEBT_SYMBOL_PREFIX, underlyingAssetSymbol))
);
address varDebt = deployCode(
variableDebtArtifact,
abi.encode(
AaveV2Ethereum.POOL,
underlyingAsset,
string(abi.encodePacked(VAR_DEBT_NAME_PREFIX, underlyingAssetSymbol)),
string(abi.encodePacked(VAR_DEBT_SYMBOL_PREFIX, underlyingAssetSymbol)),
INCENTIVES_CONTROLLER
)
);
Initializable(varDebt).initialize(
decimals,
string(abi.encodePacked(VAR_DEBT_NAME_PREFIX, underlyingAssetSymbol)),
string(abi.encodePacked(VAR_DEBT_SYMBOL_PREFIX, underlyingAssetSymbol))
);
return (aToken, varDebt, stableDebt);
}
function run() external {
vm.startBroadcast();
deployASVTokens(0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72, 18, 'ENS');
vm.stopBroadcast();
}
}