Skip to main content
Monad Foundry is a custom fork of Foundry with Monad-native EVM execution, staking precompile support, and human-readable trace decoding.

1. Installing Monad Foundry

Install the Monad Foundry installer:
curl -L https://foundry.category.xyz | bash
Then install the binaries:
foundryup --network monad
This installs forge, cast, anvil, and chisel with Monad support.
If you’re on Windows, you’ll need to use WSL, since Foundry currently doesn’t work natively on Windows. Please follow this link to learn more about WSL.

2. Create a new foundry project

You can use foundry-monad template to create a new project.Foundry-Monad is a Foundry template with Monad configuration.
The below command uses foundry-monad to create a new foundry project:
forge init --template monad-developers/foundry-monad [project_name]
Alternatively, you can create a foundry project using the command below:
forge init [project_name]

3. Modify Foundry configuration

Update the foundry.toml file to add Monad Testnet configuration.
foundry.toml
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
# Monad Testnet Configuration
eth-rpc-url = "https://testnet-rpc.monad.xyz"
chain_id = 10143

4. Write a smart contract

You can write your smart contracts under the src folder. There is already a Counter contract in the project located at src/Counter.sol.
src/Counter.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;

contract Counter {
    uint256 public number;

    function setNumber(uint256 newNumber) public {
        number = newNumber;
    }

    function increment() public {
        number++;
    }
}

5. Compile the smart contract

forge compile
Compilation process output can be found in the newly created out directory, which includes contract ABI and bytecode.

6. Deploy the smart contract

For deploying contracts, we recommend using keystores instead of private keys.

Get testnet funds

Deploying smart contracts requires testnet funds. Claim testnet funds via a faucet.

Deploy smart contract

On successful deployment of the smart contract, the output should be similar to the following:
[⠊] Compiling...
Deployer: 0xB1aB62fdFC104512F594fCa0EF6ddd93FcEAF67b
Deployed to: 0x67329e4dc233512f06c16cF362EC3D44Cdc800e0
Transaction hash: 0xa0a40c299170c9077d321a93ec20c71e91b8aff54dd9fa33f08d6b61f8953ee0

Next Steps

Check out how to verify the deployed smart contract on MonadVision.