Prerequisites
Ensure that you have Foundry installed, by running the following command:1.2.3-stable. Be sure to use this version or later when following along.
If you do not have foundry yet, run the following command to install it:
There are other options for how to install Foundry.
See the the Foundry installation docs.
You can request EVM testnet funds from the Injective Testnet faucet.
Note that private keys should be handled with caution.
The instructions here should be considered sufficient for local development and Testnet.
However, these are not secure enough for private keys used on Mainnet.
Please ensure that you follow best practices for key security on Mainnet, and do not re-use the same keys/ accounts between Mainnet and other networks.
Set up a new Foundry project
Use git to clone the demo repo, which already has the project completely set up for you.forge-std library, which provides utility functions used in this project.
Orientation
Open the repo in your code editor/ IDE, and take a look at the directory structure.foundry.toml file is already pre-configured to connect to the Injective EVM Testnet.
All you need to do before proceeding is to provide it with a private key of your Injective Testnet account.
Enter the following command to import a private key, and save it against an account named injTest:
This saves an encrypted version of the private key in
~/.foundry/keystores,
and in subsequent commands can be accessed using the --account CLI flag.Edit the smart contract
The smart contract that is included in this demo is very basic. It:- Stores one
valuewhich is a number. - Exposes a
value()query method. - Exposes an
increment(num)transaction method.
src/Counter.sol
Compile the smart contract
Run the following command:solc) that was configured in the foundry.toml file.
Check the compilation output
After the compiler completes, you should see additional directories in the project directory:Counter.json file (out/Counter.sol/Counter.json).
In it, you should see the compiler outputs, including the abi and bytecode fields.
These artifacts are used in all later steps (test, deploy, verify, and interact).