Skip to content

Commit 9dc5bb1

Browse files
Merge pull request #2 from solidity-labs-io/final-exercises
Final exercises
2 parents f8c128e + 57b92b3 commit 9dc5bb1

32 files changed

+712
-378
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ on:
77

88
env:
99
FOUNDRY_PROFILE: ci
10+
ETH_RPC_URL: ${{secrets.ETH_RPC_URL}}
1011

1112
jobs:
1213
check:

foundry.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ remappings = [
2020
fs_permissions = [{ access = "read", path = "./addresses/"}]
2121

2222
[fmt]
23-
line_length = 80
23+
line_length = 70
2424

2525
# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options
2626

src/examples/01/REQUIREMENTS.md

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

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

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,17 @@ pragma solidity ^0.8.0;
33

44
import {GovernorBravoProposal} from
55
"@forge-proposal-simulator/src/proposals/GovernorBravoProposal.sol";
6-
import {Addresses} from "@forge-proposal-simulator/addresses/Addresses.sol";
6+
import {Addresses} from
7+
"@forge-proposal-simulator/addresses/Addresses.sol";
78

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

12-
/// 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
12+
/// 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
1313
contract SIP00 is GovernorBravoProposal {
1414
using ForkSelector for uint256;
1515

1616
constructor() {
17-
// ETHEREUM_FORK_ID.createForksAndSelect();
1817
primaryForkId = ETHEREUM_FORK_ID;
1918
}
2019

@@ -32,7 +31,12 @@ contract SIP00 is GovernorBravoProposal {
3231
return "SIP-00 System Deploy";
3332
}
3433

35-
function description() public pure override returns (string memory) {
34+
function description()
35+
public
36+
pure
37+
override
38+
returns (string memory)
39+
{
3640
return name();
3741
}
3842

@@ -45,20 +49,20 @@ contract SIP00 is GovernorBravoProposal {
4549
}
4650

4751
function deploy() public override {
48-
if (!addresses.isAddressSet("V1_VAULT")) {
52+
if (!addresses.isAddressSet("V0_VAULT")) {
4953
address[] memory tokens = new address[](3);
5054
tokens[0] = addresses.getAddress("USDC");
5155
tokens[1] = addresses.getAddress("DAI");
5256
tokens[2] = addresses.getAddress("USDT");
5357

5458
Vault vault = new Vault(tokens);
5559

56-
addresses.addAddress("V1_VAULT", address(vault), true);
60+
addresses.addAddress("V0_VAULT", address(vault), true);
5761
}
5862
}
5963

6064
function validate() public view override {
61-
Vault vault = Vault(addresses.getAddress("V1_VAULT"));
65+
Vault vault = Vault(addresses.getAddress("V0_VAULT"));
6266

6367
assertEq(
6468
vault.authorizedToken(addresses.getAddress("USDC")),

src/examples/00/Vault00.sol renamed to src/exercises/00/Vault00.sol

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ contract Vault {
5959

6060
totalSupplied += amount;
6161

62-
IERC20(token).safeTransferFrom(msg.sender, address(this), amount);
62+
IERC20(token).safeTransferFrom(
63+
msg.sender, address(this), amount
64+
);
6365

6466
emit Deposit(token, msg.sender, amount);
6567
}

src/exercises/01/REQUIREMENTS.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Overview
2+
3+
The first round of security reviews was conducted by an external security firm. The results were pretty bad for such a simple contract. They refused to give you the findings, so you're on your own.
4+
5+
Good luck...

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

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,17 @@ pragma solidity ^0.8.0;
33

44
import {GovernorBravoProposal} from
55
"@forge-proposal-simulator/src/proposals/GovernorBravoProposal.sol";
6-
import {Addresses} from "@forge-proposal-simulator/addresses/Addresses.sol";
6+
import {Addresses} from
7+
"@forge-proposal-simulator/addresses/Addresses.sol";
78

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

12-
/// 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
12+
/// 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
1313
contract SIP01 is GovernorBravoProposal {
1414
using ForkSelector for uint256;
1515

1616
constructor() {
17-
// ETHEREUM_FORK_ID.createForksAndSelect();
1817
primaryForkId = ETHEREUM_FORK_ID;
1918
}
2019

@@ -32,7 +31,12 @@ contract SIP01 is GovernorBravoProposal {
3231
return "SIP-01 System Deploy";
3332
}
3433

35-
function description() public pure override returns (string memory) {
34+
function description()
35+
public
36+
pure
37+
override
38+
returns (string memory)
39+
{
3640
return name();
3741
}
3842

@@ -46,11 +50,9 @@ contract SIP01 is GovernorBravoProposal {
4650

4751
function deploy() public override {
4852
if (!addresses.isAddressSet("V1_VAULT")) {
49-
address[] memory tokens = new address[](3);
53+
address[] memory tokens = new address[](2);
5054
tokens[0] = addresses.getAddress("USDC");
51-
// usdc added again instead of dai
52-
tokens[1] = addresses.getAddress("USDC");
53-
tokens[2] = addresses.getAddress("USDT");
55+
tokens[1] = addresses.getAddress("USDT");
5456

5557
Vault vault = new Vault(tokens);
5658

@@ -67,14 +69,14 @@ contract SIP01 is GovernorBravoProposal {
6769
"USDC should be authorized"
6870
);
6971
assertEq(
70-
vault.authorizedToken(addresses.getAddress("DAI")),
72+
vault.authorizedToken(addresses.getAddress("USDT")),
7173
true,
72-
"DAI should be authorized"
74+
"USDT should be authorized"
7375
);
7476
assertEq(
75-
vault.authorizedToken(addresses.getAddress("USDT")),
77+
vault.authorizedToken(addresses.getAddress("DAI")),
7678
true,
77-
"USDT should be authorized"
79+
"DAI should be authorized"
7880
);
7981
}
8082
}
File renamed without changes.

src/examples/01/Vault01.sol renamed to src/exercises/01/Vault01.sol

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ contract Vault {
6767

6868
totalSupplied += normalizedAmount;
6969

70-
IERC20(token).safeTransferFrom(msg.sender, address(this), amount);
70+
IERC20(token).safeTransferFrom(
71+
msg.sender, address(this), amount
72+
);
7173

7274
emit Deposit(token, msg.sender, amount);
7375
}

0 commit comments

Comments
 (0)