The Chisel
component in the Foundry toolkit is a very sophisticated REPL tool designed for Solidity. This tool is incredibly useful for rapidly evaluating Solidity code snippets in a local or forked network environment.
As an integral component of the Foundry suite, Chisel is installed along with other tools like forge, cast, and anvil. So make sure you got foundry installed.
# Install it
curl -L https://foundry.paradigm.xyz | bash
# or update
foundryup
When foundry is installed locally we can just fire up a terminal and type chisel
to get started.
As you can see, type !help
to show available commands. To quit the REPL you will have use the command !quit
. The common theme is the use of !
as prefix for all commands.
Lets start the test drive with chisel by playing with some expressions.
We can see that if we do the expression 1337 + 42
in Solidity we will get the result 1379
of the type uint
and in hex it will be 0x0000000000000000000000000000000000000000000000000000000000000563
(as a 32 byte word or 256 bit).
In the REPL we can tinker with any Solidity code that we might think of. Here is an example of some testing with the Solidity function require
.
This make it very easy to try something out or if you just want to explore something in Solidity.
It is also possible to save your session so you can go back to it at a later time. The command for that is !s
or !save
.
Now you can quit the session, !q
, and in the terminal type chisel list
to list all your saved sessions in chisel.
By using the load
command when starting a chisel session you can load any of the earlier saved sessions. When loaded you can use the session command !source
to display the source code of the loaded/current session.
Other notable features of chisel is the possibility to fork a network, !fork <rpc-url>
and toggling traces, !traces
.
We have only scratched the surface of the tool yet, but I hope you will explore it more either via Foundry book or its GitHub page.
Happy REPLing
Top comments (1)
What was the revert all about?
I was trying to test an encoded value with a decoded one if it would be of the same value.
So I go the encoded variable using abi.encode() and did for decode, when checking if the are equal using require () how do I do that?.
Should I say require (encoded == decoded)