This is not an audit. This is the codebase of the course for you to learn how compilers and opcodes work. We will be dissecting contracts that you build and tinker with.
We will be using huff, solidity, and yul to do so.
We are also (later) going to use this repo to understand the basics of formal verification.
- Git
- You'll know you've done it right if you can run
git --version
- You'll know you've done it right if you can run
- Foundry / Foundryup
- This will install
forge
,cast
, andanvil
- You can test you've installed them right by running
forge --version
and get an output like:forge 0.2.0 (f016135 2022-07-04T00:15:02.930499Z)
- To get the latest of each, just run
foundryup
- This will install
- Huff Compiler
- You'll know you've done it right if you can run
huffc --version
and get an output like:huffc 0.2.0
- You'll know you've done it right if you can run
- Solidity Compiler
- You'll know you've done it right if you can run
solc --version
and get an output like: solc, the solidity compiler commandline interface Version: 0.8.15+commit.e14f2714.Darwin.appleclan
- You'll know you've done it right if you can run
- Halmos (which means you need python)
- You'll know you've done it right if you can run
halmos --version
and get an output like:Halmos 0.1.9
- You'll know you've done it right if you can run
- Clone the repo & install dependencies
git clone https://github.com/ibourn/1-horse-store
cd 1-horse-store
make
- Run tests
forge test
To get the raw bytecode of each contract manually:
To get the exact same as what I get, you'll need to use solc version Version: 0.8.20+commit.a1b79de6.Darwin.appleclan
.
huffc src/huff/HorseStore.huff -b
solc --strict-assembly --optimize --optimize-runs 20000 yul/HorseStoreYul.yul --bin | grep 60
solc --optimize --optimize-runs 20000 src/HorseStore.sol --bin | grep 60
solc --optimize --optimize-runs 20000 src/HorseStoreYul.sol --bin | grep 60