Skip to content

Commit 50648e6

Browse files
checkpoint
Signed-off-by: Elliot <[email protected]>
1 parent 4765aa0 commit 50648e6

File tree

12 files changed

+139
-193
lines changed

12 files changed

+139
-193
lines changed

src/proposals/sips/SIP00.sol renamed to src/exercises/00/SIP00.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {Vault} from "src/exercises/00/Vault00.sol";
1010
import {MockToken} from "@mocks/MockToken.sol";
1111
import {ForkSelector, ETHEREUM_FORK_ID} from "@test/utils/Forks.sol";
1212

13-
/// DO_RUN=false DO_BUILD=false DO_DEPLOY=true DO_SIMULATE=false DO_PRINT=false DO_VALIDATE=true forge script src/proposals/sips/SIP00.sol:SIP00 -vvvv
13+
/// DO_RUN=false DO_BUILD=false DO_DEPLOY=true DO_SIMULATE=false DO_PRINT=false DO_VALIDATE=true forge script src/exercises/00/SIP00.sol:SIP00 -vvvv
1414
contract SIP00 is GovernorBravoProposal {
1515
using ForkSelector for uint256;
1616

src/proposals/sips/SIP01.sol renamed to src/exercises/01/SIP01.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import {GovernorBravoProposal} from
66
import {Addresses} from
77
"@forge-proposal-simulator/addresses/Addresses.sol";
88

9-
import {Vault} from "src/exercises/00/Vault00.sol";
9+
import {Vault} from "src/exercises/01/Vault01.sol";
1010
import {MockToken} from "@mocks/MockToken.sol";
1111
import {ForkSelector, ETHEREUM_FORK_ID} from "@test/utils/Forks.sol";
1212

13-
/// DO_RUN=false DO_BUILD=false DO_DEPLOY=true DO_SIMULATE=false DO_PRINT=false DO_VALIDATE=true forge script src/proposals/sips/SIP01.sol:SIP01 -vvvv
13+
/// DO_RUN=false DO_BUILD=false DO_DEPLOY=true DO_SIMULATE=false DO_PRINT=false DO_VALIDATE=true forge script src/exercises/01/SIP01.sol:SIP01 -vvvv
1414
contract SIP01 is GovernorBravoProposal {
1515
using ForkSelector for uint256;
1616

src/proposals/sips/SIP02.sol renamed to src/exercises/02/SIP02.sol

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {GovernorBravoProposal} from
66
import {Addresses} from
77
"@forge-proposal-simulator/addresses/Addresses.sol";
88

9-
import {Vault03} from "src/exercises/03/Vault03.sol";
9+
import {Vault03} from "src/exercises/03/Vault.sol";
1010
import {Vault04} from "src/exercises/04/Vault04.sol";
1111
import {MockToken} from "@mocks/MockToken.sol";
1212
import {ForkSelector, ETHEREUM_FORK_ID} from "@test/utils/Forks.sol";
@@ -20,7 +20,7 @@ import {ERC1967Utils} from
2020
"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol";
2121
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
2222

23-
/// DO_RUN=false DO_BUILD=false DO_DEPLOY=true DO_SIMULATE=false DO_PRINT=false DO_VALIDATE=true forge script src/proposals/sips/SIP02.sol:SIP02 -vvvv
23+
/// DO_RUN=false DO_BUILD=false DO_DEPLOY=true DO_SIMULATE=false DO_PRINT=false DO_VALIDATE=true forge script src/exercises/02/SIP02.sol:SIP02 -vvvv
2424
contract SIP02 is GovernorBravoProposal {
2525
using ForkSelector for uint256;
2626

@@ -140,7 +140,6 @@ contract SIP02 is GovernorBravoProposal {
140140
1_000_000e18,
141141
"Max supply should be 1,000,000 USDC"
142142
);
143-
// fails as slot for totalSupplied is changed
144143
assertEq(
145144
vault.totalSupplied(),
146145
1_000e18,

src/exercises/03/SIP04.sol

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
// SPDX-License-Identifier: GPL-3.0-or-later
2+
pragma solidity ^0.8.0;
3+
4+
import {GovernorBravoProposal} from
5+
"@forge-proposal-simulator/src/proposals/GovernorBravoProposal.sol";
6+
import {Addresses} from
7+
"@forge-proposal-simulator/addresses/Addresses.sol";
8+
9+
import {Vault04} from "src/exercises/04/Vault04.sol";
10+
import {MockToken} from "@mocks/MockToken.sol";
11+
import {ForkSelector, ETHEREUM_FORK_ID} from "@test/utils/Forks.sol";
12+
import {
13+
ProxyAdmin,
14+
TransparentUpgradeableProxy,
15+
ITransparentUpgradeableProxy
16+
} from
17+
"@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
18+
import {ERC1967Utils} from
19+
"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol";
20+
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
21+
22+
/// DO_RUN=false DO_BUILD=false DO_DEPLOY=true DO_SIMULATE=false DO_PRINT=false DO_VALIDATE=true forge script src/exercises/SIP04.sol:SIP04 -vvvv
23+
contract SIP04 is GovernorBravoProposal {
24+
using ForkSelector for uint256;
25+
26+
constructor() {
27+
primaryForkId = ETHEREUM_FORK_ID;
28+
}
29+
30+
function setupProposal() public {
31+
ETHEREUM_FORK_ID.createForksAndSelect();
32+
33+
string memory addressesFolderPath = "./addresses";
34+
uint256[] memory chainIds = new uint256[](1);
35+
chainIds[0] = 1;
36+
37+
setAddresses(new Addresses(addressesFolderPath, chainIds));
38+
}
39+
40+
function name() public pure override returns (string memory) {
41+
return "SIP-04 Upgrade";
42+
}
43+
44+
function description()
45+
public
46+
pure
47+
override
48+
returns (string memory)
49+
{
50+
return name();
51+
}
52+
53+
function run() public override {
54+
setupProposal();
55+
56+
setGovernor(addresses.getAddress("COMPOUND_GOVERNOR_BRAVO"));
57+
58+
super.run();
59+
}
60+
61+
function deploy() public override {
62+
if (!addresses.isAddressSet("PROXY_ADMIN")) {
63+
ProxyAdmin proxyAdmin = new ProxyAdmin();
64+
proxyAdmin.transferOwnership(
65+
addresses.getAddress("COMPOUND_TIMELOCK_BRAVO")
66+
);
67+
68+
addresses.addAddress("PROXY_ADMIN", address(proxyAdmin), true);
69+
}
70+
71+
address vaultProxy;
72+
if (!addresses.isAddressSet("V4_VAULT_IMPLEMENTATION")) {
73+
address vaultImpl = address(new Vault04());
74+
addresses.addAddress(
75+
"V4_VAULT_IMPLEMENTATION", vaultImpl, true
76+
);
77+
78+
address[] memory tokens = new address[](3);
79+
tokens[0] = addresses.getAddress("USDC");
80+
tokens[1] = addresses.getAddress("DAI");
81+
tokens[2] = addresses.getAddress("USDT");
82+
83+
address owner = addresses.getAddress("COMPOUND_TIMELOCK_BRAVO");
84+
85+
// Generate calldata for initialize function of vault
86+
bytes memory data = abi.encodeWithSignature(
87+
"initialize(address[],address)", tokens, owner
88+
);
89+
90+
vaultProxy = address(
91+
new TransparentUpgradeableProxy(
92+
vaultImpl, owner, data
93+
)
94+
);
95+
addresses.addAddress("VAULT_PROXY", vaultProxy, true);
96+
}
97+
}
98+
99+
function validate() public view override {
100+
Vault04 vault = Vault04(addresses.getAddress("VAULT_PROXY"));
101+
102+
assertEq(
103+
vault.authorizedToken(addresses.getAddress("USDC")),
104+
true,
105+
"USDC should be authorized"
106+
);
107+
assertEq(
108+
vault.authorizedToken(addresses.getAddress("DAI")),
109+
true,
110+
"DAI should be authorized"
111+
);
112+
assertEq(
113+
vault.authorizedToken(addresses.getAddress("USDT")),
114+
true,
115+
"USDT should be authorized"
116+
);
117+
118+
address vaultProxy = addresses.getAddress("VAULT_PROXY");
119+
bytes32 adminSlot =
120+
vm.load(vaultProxy, ERC1967Utils.ADMIN_SLOT);
121+
122+
address proxyAdmin = address(uint160(uint256(adminSlot)));
123+
}
124+
}

src/exercises/03/Vault03.sol

Lines changed: 0 additions & 160 deletions
This file was deleted.

src/exercises/03/Vault03Storage.sol

Lines changed: 0 additions & 20 deletions
This file was deleted.
File renamed without changes.
File renamed without changes.
File renamed without changes.

test/00/Test_SIP00.t.sol renamed to test/TestVault00.t.sol

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ import {SafeERC20} from
44
"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
55
import {console} from "@forge-std/console.sol";
66
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
7+
78
import {Test} from "@forge-std/Test.sol";
89

910
import {Vault} from "src/exercises/00/Vault00.sol";
10-
import {SIP00} from "src/proposals/sips/SIP00.sol";
11+
import {SIP00} from "src/exercises/00/SIP00.sol";
1112

12-
contract TestSIP00 is Test, SIP00 {
13+
contract TestVault00 is Test, SIP00 {
1314
using SafeERC20 for IERC20;
1415

1516
Vault public vault;
@@ -39,15 +40,17 @@ contract TestSIP00 is Test, SIP00 {
3940
/// run the proposal
4041
deploy();
4142

42-
/// validate the proposal
43-
validate();
44-
4543
dai = addresses.getAddress("DAI");
4644
usdc = addresses.getAddress("USDC");
4745
usdt = addresses.getAddress("USDT");
4846
vault = Vault(addresses.getAddress("V1_VAULT"));
4947
}
5048

49+
function testValidate() public view {
50+
/// validate the proposal
51+
validate();
52+
}
53+
5154
function testVaultDepositDai() public {
5255
uint256 daiDepositAmount = 1_000e18;
5356

0 commit comments

Comments
 (0)