File tree 7 files changed +170
-0
lines changed
7 files changed +170
-0
lines changed Original file line number Diff line number Diff line change
1
+ name : test
2
+
3
+ on : workflow_dispatch
4
+
5
+ env :
6
+ FOUNDRY_PROFILE : ci
7
+
8
+ jobs :
9
+ check :
10
+ strategy :
11
+ fail-fast : true
12
+
13
+ name : Foundry project
14
+ runs-on : ubuntu-latest
15
+ steps :
16
+ - uses : actions/checkout@v4
17
+ with :
18
+ submodules : recursive
19
+
20
+ - name : Install Foundry
21
+ uses : foundry-rs/foundry-toolchain@v1
22
+ with :
23
+ version : nightly
24
+
25
+ - name : Run Forge build
26
+ run : |
27
+ forge --version
28
+ forge build --sizes
29
+ id : build
30
+
31
+ - name : Run Forge tests
32
+ run : |
33
+ forge test -vvv
34
+ id : test
Original file line number Diff line number Diff line change
1
+ # Compiler files
2
+ cache /
3
+ out /
4
+
5
+ # Ignores development broadcast logs
6
+ ! /broadcast
7
+ /broadcast /* /31337 /
8
+ /broadcast /** /dry-run /
9
+
10
+ # Docs
11
+ docs /
12
+
13
+ # Dotenv file
14
+ .env
Original file line number Diff line number Diff line change
1
+ ## Foundry
2
+
3
+ ** Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.**
4
+
5
+ Foundry consists of:
6
+
7
+ - ** Forge** : Ethereum testing framework (like Truffle, Hardhat and DappTools).
8
+ - ** Cast** : Swiss army knife for interacting with EVM smart contracts, sending transactions and getting chain data.
9
+ - ** Anvil** : Local Ethereum node, akin to Ganache, Hardhat Network.
10
+ - ** Chisel** : Fast, utilitarian, and verbose solidity REPL.
11
+
12
+ ## Documentation
13
+
14
+ https://book.getfoundry.sh/
15
+
16
+ ## Usage
17
+
18
+ ### Build
19
+
20
+ ``` shell
21
+ $ forge build
22
+ ```
23
+
24
+ ### Test
25
+
26
+ ``` shell
27
+ $ forge test
28
+ ```
29
+
30
+ ### Format
31
+
32
+ ``` shell
33
+ $ forge fmt
34
+ ```
35
+
36
+ ### Gas Snapshots
37
+
38
+ ``` shell
39
+ $ forge snapshot
40
+ ```
41
+
42
+ ### Anvil
43
+
44
+ ``` shell
45
+ $ anvil
46
+ ```
47
+
48
+ ### Deploy
49
+
50
+ ``` shell
51
+ $ forge script script/Counter.s.sol:CounterScript --rpc-url < your_rpc_url> --private-key < your_private_key>
52
+ ```
53
+
54
+ ### Cast
55
+
56
+ ``` shell
57
+ $ cast < subcommand>
58
+ ```
59
+
60
+ ### Help
61
+
62
+ ``` shell
63
+ $ forge --help
64
+ $ anvil --help
65
+ $ cast --help
66
+ ```
Original file line number Diff line number Diff line change
1
+ [profile .default ]
2
+ src = " src"
3
+ out = " out"
4
+ libs = [" lib" ]
5
+
6
+ # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options
Original file line number Diff line number Diff line change
1
+ // SPDX-License-Identifier: UNLICENSED
2
+ pragma solidity ^ 0.8.13 ;
3
+
4
+ import {Script, console} from "forge-std/Script.sol " ;
5
+
6
+ contract CounterScript is Script {
7
+ function setUp () public {}
8
+
9
+ function run () public {
10
+ vm.broadcast ();
11
+ }
12
+ }
Original file line number Diff line number Diff line change
1
+ // SPDX-License-Identifier: UNLICENSED
2
+ pragma solidity ^ 0.8.13 ;
3
+
4
+ contract Counter {
5
+ uint256 public number;
6
+
7
+ function setNumber (uint256 newNumber ) public {
8
+ number = newNumber;
9
+ }
10
+
11
+ function increment () public {
12
+ number++ ;
13
+ }
14
+ }
Original file line number Diff line number Diff line change
1
+ // SPDX-License-Identifier: UNLICENSED
2
+ pragma solidity ^ 0.8.13 ;
3
+
4
+ import {Test, console} from "forge-std/Test.sol " ;
5
+ import {Counter} from "../src/Counter.sol " ;
6
+
7
+ contract CounterTest is Test {
8
+ Counter public counter;
9
+
10
+ function setUp () public {
11
+ counter = new Counter ();
12
+ counter.setNumber (0 );
13
+ }
14
+
15
+ function test_Increment () public {
16
+ counter.increment ();
17
+ assertEq (counter.number (), 1 );
18
+ }
19
+
20
+ function testFuzz_SetNumber (uint256 x ) public {
21
+ counter.setNumber (x);
22
+ assertEq (counter.number (), x);
23
+ }
24
+ }
You can’t perform that action at this time.
0 commit comments