Creating a New Project
To start a new project with Foundry-ZKsync, use forge init
:
$ forge init hello_foundry
This creates a new directory hello_foundry
from the default template. This also initializes a new git
repository.
If you want to create a new project using a different template, you would pass the --template
flag, like so:
$ forge init --template https://github.com/foundry-rs/forge-template hello_template
For now, letβs check what the default template looks like:
$ cd hello_foundry
$ tree . -d -L 1
.
βββ lib
βββ script
βββ src
βββ test
4 directories
The default template comes with one dependency installed: Forge Standard Library. This is the preferred testing library used for Foundry projects. Additionally, the template also comes with an empty starter contract and a simple test.
Letβs build the project:
$ forge build --zksync
Compiling 27 files with zksolc and solc 0.8.26
zksolc and solc 0.8.26 finished in 2.85s
Compiler run successful!
And run the tests:
$ forge test --zksync
Compiling 25 files with Solc 0.8.27
Solc 0.8.27 finished in 676.84ms
Compiler run successful!
No files changed, compilation skipped
Ran 2 tests for test/Counter.t.sol:CounterTest
[PASS] testFuzz_SetNumber(uint256) (runs: 256, ΞΌ: 683547, ~: 577696)
[PASS] test_Increment() (gas: 526627)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.20s (3.20s CPU time)
Ran 1 test suite in 3.20s (3.20s CPU time): 2 tests passed, 0 failed, 0 skipped (2 total tests)
Youβll notice that two new directories have popped up: out
, zkout
and cache
.
The out
directory contains your EVM contract artifact, such as the ABI, the zkout
directory contains the zkEVM contract artifacts, while the cache
is used by forge
to only recompile what is necessary.