Awesome-omni-skill foundry

Foundry is a Rust-based toolkit for developing, testing, and deploying Ethereum smart contracts using Solidity.

install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/tools/foundry" ~/.claude/skills/diegosouzapw-awesome-omni-skill-foundry && rm -rf "$T"
manifest: skills/tools/foundry/SKILL.md
source content

foundry

Purpose

Foundry is a command-line toolkit for efficiently developing, testing, and deploying Ethereum smart contracts written in Solidity. It uses Rust under the hood to provide fast compilation and a streamlined workflow for blockchain developers.

When to Use

Use Foundry when building or maintaining Solidity-based smart contracts for Ethereum, especially if you need rapid iteration, local testing, or deployment to testnets/mainnets. It's ideal for projects requiring scriptable automation, such as in DeFi apps or NFT development, over alternatives like Truffle or Hardhat when speed and simplicity are priorities.

Key Capabilities

  • Compile Solidity contracts with incremental builds for faster development.
  • Run unit tests with fuzzing and invariant testing to catch edge cases.
  • Deploy contracts to Ethereum networks using customizable scripts.
  • Manage dependencies via Git submodules or npm-like remotes.
  • Generate ABI and bytecode outputs for integration with dApps.
  • Support for EVM-compatible chains beyond Ethereum, like Polygon.

Usage Patterns

Start by initializing a project with

forge init
, then write contracts in the
src
directory. Build and test iteratively using
forge build
and
forge test
. For deployment, create a script in
script
and run it with
forge script
. Always configure networks in foundry.toml for different environments. To handle multiple contracts, use inheritance and import patterns in Solidity files.

Common Commands/API

Foundry operates via CLI commands; no direct API endpoints. Use these in your terminal:

  • forge init --no-git
    : Initialize a new project without creating a Git repo. Example:
    forge init mycontract
    .
  • forge build --force
    : Compile all contracts, forcing a rebuild. Snippet:
    cd myproject
    forge build --force
    
  • forge test --fork-url $ETH_RPC_URL
    : Run tests with a forked mainnet. Use env var for RPC:
    export ETH_RPC_URL=https://mainnet.infura.io/v3/$INFURA_KEY
    . Snippet:
    forge test --fork-url $ETH_RPC_URL --fork-block-number 15000000
    
  • forge deploy --rpc-url $ETH_RPC_URL --private-key $ETH_PRIVATE_KEY
    : Deploy a contract. For auth, set
    $ETH_PRIVATE_KEY
    as your wallet key. Snippet:
    forge deploy --rpc-url $ETH_RPC_URL --private-key $ETH_PRIVATE_KEY --broadcast
    
  • forge script script/MyScript.sol:run --sig "run()" --rpc-url $ETH_RPC_URL
    : Execute a custom script. Config format in foundry.toml:
    [rpc_endpoints] mainnet = "${ETH_RPC_URL}"
    .

Integration Notes

Integrate Foundry with VS Code by installing the Solidity extension and adding a tasks.json for commands like "forge build". For CI/CD, use GitHub Actions with a step:

run: forge test --fork-url ${{ env.ETH_RPC_URL }}
. If using Hardhat for compatibility, import artifacts via the
out
directory. Set env vars for keys:
export ETH_PRIVATE_KEY=$YOUR_KEY
. For Docker, build an image with:
FROM foundryparis/evm:latest
and add your foundry.toml for config overrides.

Error Handling

Check for common errors like compilation failures by running

forge build --verbose
to see detailed logs. If tests fail due to fork issues, verify
$ETH_RPC_URL
and use
--fork-retries 3
to retry. For deployment errors (e.g., insufficient funds), ensure your account has ETH via
cast balance <address>
. Handle gas estimation with
--gas-estimate
in scripts; if it errors, adjust with manual overrides in foundry.toml like
[etherscan] api_key = "$ETHERSCAN_API_KEY"
. Always wrap scripts in try-catch for Solidity reverts.

Concrete Usage Examples

  1. Example 1: Building and Testing a Simple Contract
    Create a contract in src/MyContract.sol:

    contract MyContract { uint public x = 1; }
    . Then, build it:
    forge build
    . Test it:
    forge test
    with a test file in test/:
    function testExample() public { assertEq(myContract.x(), 1); }
    . This verifies basic functionality in under 5 minutes.

  2. Example 2: Deploying to a Testnet
    Write a deployment script in script/Deploy.sol:

    function run() public { vm.broadcast(); new MyContract(); }
    . Run:
    forge script script/Deploy.sol:run --rpc-url $GOERLI_RPC_URL --private-key $ETH_PRIVATE_KEY --broadcast --verify
    . This deploys and verifies on Goerli, using Etherscan if configured.

Graph Relationships

  • Related to cluster: blockchain
  • Connected to tags: ethereum, solidity, smart-contracts
  • Depends on: rust, solidity compiler
  • Used with: ethers.js for frontend, hardhat for migration compatibility