File tree Expand file tree Collapse file tree 7 files changed +186
-0
lines changed Expand file tree Collapse file tree 7 files changed +186
-0
lines changed Original file line number Diff line number Diff line change 1+ name : CI
2+
3+ on :
4+ push :
5+ pull_request :
6+ workflow_dispatch :
7+
8+ env :
9+ FOUNDRY_PROFILE : ci
10+
11+ jobs :
12+ check :
13+ strategy :
14+ fail-fast : true
15+
16+ name : Foundry project
17+ runs-on : ubuntu-latest
18+ steps :
19+ - uses : actions/checkout@v4
20+ with :
21+ submodules : recursive
22+
23+ - name : Install Foundry
24+ uses : foundry-rs/foundry-toolchain@v1
25+
26+ - name : Show Forge version
27+ run : |
28+ forge --version
29+
30+ - name : Run Forge fmt
31+ run : |
32+ forge fmt --check
33+ id : fmt
34+
35+ - name : Run Forge build
36+ run : |
37+ forge build --sizes
38+ id : build
39+
40+ - name : Run Forge tests
41+ run : |
42+ forge test -vvv
43+ 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+ import {Counter} from "../src/Counter.sol " ;
6+
7+ contract CounterScript is Script {
8+ Counter public counter;
9+
10+ function setUp () public {}
11+
12+ function run () public {
13+ vm.startBroadcast ();
14+
15+ counter = new Counter ();
16+
17+ vm.stopBroadcast ();
18+ }
19+ }
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