<!--
Sitemap:
- [Foundry - Ethereum Development Framework](/index)
- [Anvil](/anvil/): Anvil is Foundry's local Ethereum node for development and testing.
- [Benchmarks](/benchmarks)
- [Best Practices](/best-practices): Best practices for writing contracts, tests, scripts, and managing security in Foundry projects.
- [Cast](/cast/): Cast is Foundry's command-line tool for interacting with Ethereum.
- [Changelog](/changelog/)
- [Chisel](/chisel/): Chisel is Foundry's interactive Solidity REPL for rapid prototyping and debugging.
- [Configuration](/config/): Configure Foundry with foundry.toml, profiles, and environment variables.
- [Forge](/forge/): Forge is Foundry's build, test, and deploy tool for Solidity smart contracts.
- [Guides](/guides/): Practical guides for common Foundry workflows and advanced patterns.
- [Project Setup](/projects/): Create and configure Foundry projects for smart contract development.
- [Custom methods](/anvil/custom-methods): Anvil's custom RPC methods for impersonation, mining control, and state manipulation.
- [Forking](/anvil/forking): Fork mainnet or any EVM-compatible chain with Anvil.
- [State management](/anvil/state-management): Dump and load Anvil chain state for reproducible testing.
- [ABI encoding](/cast/abi-encoding): Encode and decode ABI data, calldata, and function signatures with Cast.
- [Reading chain data](/cast/reading-chain-data): Query blockchain data with Cast — blocks, transactions, logs, and account state.
- [Sending transactions](/cast/sending-transactions): Send transactions and interact with contracts using Cast.
- [Wallet operations](/cast/wallet-operations): Manage wallets, sign messages, and verify signatures with Cast.
- [Commands](/chisel/commands): All available commands in the Chisel REPL.
- [Forking](/chisel/forking): Fork live chains in Chisel to interact with deployed contracts.
- [Session management](/chisel/session-management): Save, load, and export Chisel REPL sessions.
- [CI Integration](/config/ci): Set up Foundry in GitHub Actions and other CI systems.
- [Compiler](/config/compiler): Configure the Solidity compiler settings for your Foundry project.
- [Editor Setup](/config/editors): Configure VS Code, Vim, and other editors for Foundry projects.
- [MESC](/config/mesc): Use MESC to manage RPC endpoints across all your crypto tools from a single configuration file.
- [Profiles](/config/profiles): Use profiles to switch between configurations for development, CI, and production.
- [Testing](/config/testing): Configure testing behavior including fuzz testing and invariant testing.
- [Building contracts](/forge/build): Compile Solidity contracts with Forge.
- [Debugging](/forge/debugging): Debug Solidity contracts with Forge traces and the interactive debugger.
- [Formatting](/forge/formatting): Format Solidity code with Forge.
- [Gas tracking](/forge/gas-tracking): Track and compare gas usage with Forge snapshots and reports.
- [Linting](/forge/linting): Lint Solidity code with Forge.
- [Scripting](/forge/scripting): Deploy and interact with contracts using Forge scripts.
- [Testing](/forge/testing): Write and run tests for Solidity contracts with Forge.
- [Debugging Transactions](/guides/debugging-transactions): Replay and debug failed mainnet transactions with trace analysis.
- [Deploying Contracts](/guides/deploying-contracts): Deploy contracts from local development to testnet and mainnet with verification and deterministic addresses.
- [Deterministic Deployments with CREATE2](/guides/deterministic-deployments-using-create2): Deploy smart contracts to predictable addresses across multiple networks using CREATE2 opcode for counterfactual interactions.
- [Docker & Containers](/guides/docker): Run Foundry in Docker for reproducible builds and CI environments.
- [Fork Testing](/guides/fork-testing): Test against live chain state, impersonate accounts, and handle time-sensitive logic.
- [Gas Optimization](/guides/gas-optimization): Profile gas usage and optimize with snapshots and the IR pipeline.
- [Invariant Testing](/guides/invariant-testing): Write effective invariant tests with handler patterns and ghost variables.
- [MPP-backed RPC endpoints](/guides/mpp): Use Foundry with HTTP 402 payment-gated RPC endpoints through the Machine Payments Protocol (MPP).
- [Multi-Chain Deployments](/guides/multi-chain-deployments): Deploy the same contracts across multiple networks with per-chain configuration.
- [Stack Too Deep](/guides/stack-too-deep): Understanding and resolving the "Stack too deep" compilation error in Solidity.
- [Foundry on Tempo](/guides/tempo): Use Foundry's upstream Tempo support to initialize projects, configure foundry.toml, and work with Tempo transactions.
- [Upgrading Contracts](/guides/upgrading-contracts): Implement proxy patterns with Forge scripts and verify storage layout compatibility.
- [FAQ](/help/faq): Frequently asked questions about Foundry and its tools.
- [Troubleshooting](/help/troubleshooting): Solutions to common Foundry errors and issues.
- [Getting Started](/introduction/getting-started): Get started with Foundry's four core tools - Forge, Cast, Anvil, and Chisel.
- [Installation](/introduction/installation): Install Foundry using foundryup, precompiled binaries, or build from source.
- [Prompting](/introduction/prompting): Use structured prompts to get better results from AI coding assistants.
- [Dependencies](/projects/dependencies): Manage dependencies using git submodules and remappings.
- [Project Layout](/projects/layout): Understand Foundry's project structure and directory conventions.
- [Soldeer](/projects/soldeer): Use Soldeer as an alternative package manager for Foundry projects.
- [cast index](/reference/cast/)
- [DSTest Reference](/reference/ds-test)
- [References](/reference/README)
- [Default foundry configuration](/config/reference/default-config)
- [Documentation Generator](/config/reference/doc-generator)
- [Etherscan](/config/reference/etherscan)
- [Formatter](/config/reference/formatter)
- [In-line test configuration](/config/reference/inline-test-config)
- [Linter Configuration](/config/reference/linter)
- [Config Overview](/config/reference/overview)
- [Project](/config/reference/project)
- [Config Reference](/config/reference/README)
- [Solidity compiler](/config/reference/solidity-compiler)
- [Testing](/config/reference/testing)
- [Inefficient keccak256 call](/forge/linting/asm-keccak256): Inefficient keccak256 call
- [Use of block.timestamp in comparisons](/forge/linting/block-timestamp): Use of block.timestamp in comparisons
- [Misuse of a boolean constant](/forge/linting/boolean-cst): Misuse of a boolean constant
- [Boolean comparison to a constant](/forge/linting/boolean-equal): Boolean comparison to a constant
- [State variable could be immutable](/forge/linting/could-be-immutable): State variable could be immutable
- [Prefer custom errors over revert strings](/forge/linting/custom-errors): Prefer custom errors over revert strings
- [Divide before multiply](/forge/linting/divide-before-multiply): Divide before multiply
- [Unchecked ERC20 transfer return value](/forge/linting/erc20-unchecked-transfer): Unchecked ERC20 transfer return value
- [Incorrect ERC20 interface](/forge/linting/incorrect-erc20-interface): Incorrect ERC20 interface
- [Incorrect ERC721 interface](/forge/linting/incorrect-erc721-interface): Incorrect ERC721 interface
- [Incorrect shift order](/forge/linting/incorrect-shift): Incorrect shift order
- [Inline assembly](/forge/linting/inline-assembly): Inline assembly usage
- [Interface file naming](/forge/linting/interface-file-naming): Interface file naming
- [Interface name should be prefixed with 'I'](/forge/linting/interface-naming): Interface name should be prefixed with 'I'
- [Missing zero-address check](/forge/linting/missing-zero-check): Missing zero-address check
- [Function names should use mixedCase](/forge/linting/mixed-case-function): Function names should use mixedCase
- [Mutable variable names should use mixedCase](/forge/linting/mixed-case-variable): Mutable variable names should use mixedCase
- [Multiple contracts in one file](/forge/linting/multi-contract-file): Multiple contracts in one file
- [Prefer named struct fields](/forge/linting/named-struct-fields): Prefer named struct fields
- [Struct names should use PascalCase](/forge/linting/pascal-case-struct): Struct names should use PascalCase
- [Inconsistent pragma directives](/forge/linting/pragma-inconsistent): Inconsistent pragma directives
- [Right-to-left override character](/forge/linting/rtlo): Right-to-left override character
- [Constants should use SCREAMING_SNAKE_CASE](/forge/linting/screaming-snake-case-const): Constants should use SCREAMING_SNAKE_CASE
- [Immutables should use SCREAMING_SNAKE_CASE](/forge/linting/screaming-snake-case-immutable): Immutables should use SCREAMING_SNAKE_CASE
- [Numeric literal with too many digits](/forge/linting/too-many-digits): Numeric literal with too many digits
- [Use of tx.origin for authorization](/forge/linting/tx-origin): Use of tx.origin for authorization
- [Unaliased plain import](/forge/linting/unaliased-plain-import): Unaliased plain import
- [Unchecked low-level call](/forge/linting/unchecked-call): Unchecked low-level call
- [Usage of unsafe cheatcodes](/forge/linting/unsafe-cheatcode): Usage of unsafe cheatcodes
- [Unsafe typecast](/forge/linting/unsafe-typecast): Unsafe typecast
- [Unused import](/forge/linting/unused-import): Unused import
- [Unused state variable](/forge/linting/unused-state-variables): Unused state variable
- [Unwrapped modifier logic](/forge/linting/unwrapped-modifier-logic): Unwrapped modifier logic
- [Foundry v1.0 migration guide](/guides/migrations/foundry-v1): Summary of breaking changes and migration steps for Foundry v1.0.
- [anvil](/reference/anvil/anvil)
- [anvil completions](/reference/anvil/completions)
- [cast 4byte](/reference/cast/4byte)
- [cast 4byte-calldata](/reference/cast/4byte-calldata)
- [cast 4byte-event](/reference/cast/4byte-event)
- [cast abi-encode](/reference/cast/abi-encode)
- [cast abi-encode-event](/reference/cast/abi-encode-event)
- [cast access-list](/reference/cast/access-list)
- [cast address-zero](/reference/cast/address-zero)
- [cast admin](/reference/cast/admin)
- [cast age](/reference/cast/age)
- [cast artifact](/reference/cast/artifact)
- [cast b2e-payload](/reference/cast/b2e-payload)
- [cast balance](/reference/cast/balance)
- [cast base-fee](/reference/cast/base-fee)
- [cast batch-mktx](/reference/cast/batch-mktx)
- [cast batch-send](/reference/cast/batch-send)
- [cast bind](/reference/cast/bind)
- [cast block](/reference/cast/block)
- [cast block-number](/reference/cast/block-number)
- [cast call](/reference/cast/call)
- [cast calldata](/reference/cast/calldata)
- [cast](/reference/cast/cast)
- [cast chain](/reference/cast/chain)
- [cast chain-id](/reference/cast/chain-id)
- [cast client](/reference/cast/client)
- [cast code](/reference/cast/code)
- [cast codehash](/reference/cast/codehash)
- [cast codesize](/reference/cast/codesize)
- [cast completions](/reference/cast/completions)
- [cast compute-address](/reference/cast/compute-address)
- [cast concat-hex](/reference/cast/concat-hex)
- [cast constructor-args](/reference/cast/constructor-args)
- [cast create2](/reference/cast/create2)
- [cast creation-code](/reference/cast/creation-code)
- [cast da-estimate](/reference/cast/da-estimate)
- [cast decode-abi](/reference/cast/decode-abi)
- [cast decode-calldata](/reference/cast/decode-calldata)
- [cast decode-error](/reference/cast/decode-error)
- [cast decode-event](/reference/cast/decode-event)
- [cast decode-string](/reference/cast/decode-string)
- [cast decode-transaction](/reference/cast/decode-transaction)
- [cast disassemble](/reference/cast/disassemble)
- [cast erc20-token](/reference/cast/erc20-token)
- [cast estimate](/reference/cast/estimate)
- [cast find-block](/reference/cast/find-block)
- [cast format-bytes32-string](/reference/cast/format-bytes32-string)
- [cast format-units](/reference/cast/format-units)
- [cast from-bin](/reference/cast/from-bin)
- [cast from-fixed-point](/reference/cast/from-fixed-point)
- [cast from-rlp](/reference/cast/from-rlp)
- [cast from-utf8](/reference/cast/from-utf8)
- [cast from-wei](/reference/cast/from-wei)
- [cast gas-price](/reference/cast/gas-price)
- [cast hash-message](/reference/cast/hash-message)
- [cast hash-zero](/reference/cast/hash-zero)
- [cast implementation](/reference/cast/implementation)
- [cast index](/reference/cast/index-cmd)
- [cast index-erc7201](/reference/cast/index-erc7201)
- [cast interface](/reference/cast/interface)
- [cast keccak](/reference/cast/keccak)
- [cast keychain](/reference/cast/keychain)
- [cast logs](/reference/cast/logs)
- [cast lookup-address](/reference/cast/lookup-address)
- [cast max-int](/reference/cast/max-int)
- [cast max-uint](/reference/cast/max-uint)
- [cast min-int](/reference/cast/min-int)
- [cast mktx](/reference/cast/mktx)
- [cast namehash](/reference/cast/namehash)
- [cast nonce](/reference/cast/nonce)
- [cast pad](/reference/cast/pad)
- [cast parse-bytes32-address](/reference/cast/parse-bytes32-address)
- [cast parse-bytes32-string](/reference/cast/parse-bytes32-string)
- [cast parse-units](/reference/cast/parse-units)
- [cast pretty-calldata](/reference/cast/pretty-calldata)
- [cast proof](/reference/cast/proof)
- [cast publish](/reference/cast/publish)
- [cast receipt](/reference/cast/receipt)
- [cast recover-authority](/reference/cast/recover-authority)
- [cast resolve-name](/reference/cast/resolve-name)
- [cast rpc](/reference/cast/rpc)
- [cast run](/reference/cast/run)
- [cast selectors](/reference/cast/selectors)
- [cast send](/reference/cast/send)
- [cast shl](/reference/cast/shl)
- [cast shr](/reference/cast/shr)
- [cast sig](/reference/cast/sig)
- [cast sig-event](/reference/cast/sig-event)
- [cast source](/reference/cast/source)
- [cast storage](/reference/cast/storage)
- [cast storage-root](/reference/cast/storage-root)
- [cast tip20-token](/reference/cast/tip20-token)
- [cast to-ascii](/reference/cast/to-ascii)
- [cast to-base](/reference/cast/to-base)
- [cast to-bytes32](/reference/cast/to-bytes32)
- [cast to-check-sum-address](/reference/cast/to-check-sum-address)
- [cast to-dec](/reference/cast/to-dec)
- [cast to-fixed-point](/reference/cast/to-fixed-point)
- [cast to-hex](/reference/cast/to-hex)
- [cast to-hexdata](/reference/cast/to-hexdata)
- [cast to-int256](/reference/cast/to-int256)
- [cast to-rlp](/reference/cast/to-rlp)
- [cast to-uint256](/reference/cast/to-uint256)
- [cast to-unit](/reference/cast/to-unit)
- [cast to-utf8](/reference/cast/to-utf8)
- [cast to-wei](/reference/cast/to-wei)
- [cast trace](/reference/cast/trace)
- [cast tx](/reference/cast/tx)
- [cast tx-pool](/reference/cast/tx-pool)
- [cast upload-signature](/reference/cast/upload-signature)
- [cast wallet](/reference/cast/wallet)
- [accesses](/reference/cheatcodes/accesses): Gets all storage slots that have been read or written to on an address
- [activeFork](/reference/cheatcodes/active-fork): Returns the identifier of the currently active fork
- [addr](/reference/cheatcodes/addr): Computes the address for a given private key
- [allowCheatcodes](/reference/cheatcodes/allow-cheatcodes): Grants cheatcode access to an address in forking mode
- [assume](/reference/cheatcodes/assume): Discards fuzz inputs that don't satisfy a condition
- [assumeNoRevert](/reference/cheatcodes/assume-no-revert): Discards fuzz inputs if the next call reverts
- [breakpoint](/reference/cheatcodes/breakpoint): Places a breakpoint for the debugger
- [broadcast](/reference/cheatcodes/broadcast): Makes the next call create a transaction that can be signed and sent onchain
- [chainId](/reference/cheatcodes/chain-id): Sets block.chainid to a specified value in Forge tests
- [clearMockedCalls](/reference/cheatcodes/clear-mocked-calls): Clears all mocked calls
- [coinbase](/reference/cheatcodes/coinbase): Sets block.coinbase to a specified address
- [copyStorage](/reference/cheatcodes/copy-storage): Copies storage from one contract to another
- [createFork](/reference/cheatcodes/create-fork): Creates a new fork from an RPC endpoint
- [createSelectFork](/reference/cheatcodes/create-select-fork): Creates and activates a new fork in one call
- [createWallet](/reference/cheatcodes/create-wallet): Creates a new Wallet struct with address and keys
- [deal](/reference/cheatcodes/deal): Sets the ETH balance of an address
- [deriveKey](/reference/cheatcodes/derive-key): Derives a private key from a mnemonic phrase
- [difficulty](/reference/cheatcodes/difficulty): Sets block.difficulty for pre-merge EVM versions in Forge tests
- [envAddress](/reference/cheatcodes/env-address): Reads an environment variable as address or address[]
- [envBool](/reference/cheatcodes/env-bool): Reads an environment variable as bool or bool[]
- [envBytes](/reference/cheatcodes/env-bytes): Reads an environment variable as bytes or bytes[]
- [envBytes32](/reference/cheatcodes/env-bytes32): Reads an environment variable as bytes32 or bytes32[]
- [envInt](/reference/cheatcodes/env-int): Reads an environment variable as int256 or int256[]
- [envOr](/reference/cheatcodes/env-or): Reads an environment variable with a default fallback value
- [envString](/reference/cheatcodes/env-string): Reads an environment variable as string or string[]
- [envUint](/reference/cheatcodes/env-uint): Reads an environment variable as uint256 or uint256[]
- [etch](/reference/cheatcodes/etch): Sets the bytecode of an address to custom code
- [expectCall](/reference/cheatcodes/expect-call): Asserts that a specific call is made during test execution
- [expectEmit](/reference/cheatcodes/expect-emit): Asserts that specific events are emitted during the next call
- [expectRevert](/reference/cheatcodes/expect-revert): Asserts that the next call reverts with optional message matching
- [fee](/reference/cheatcodes/fee): Sets block.basefee to a specified value in Forge tests
- [ffi](/reference/cheatcodes/ffi): Calls an arbitrary external command
- [File Cheatcodes](/reference/cheatcodes/fs): File system operations for reading, writing, and managing files
- [snapshotGas cheatcodes](/reference/cheatcodes/gas-snapshots): Capture and compare gas usage across test runs
- [getBlockNumber](/reference/cheatcodes/get-block-number): Gets the current block.number, avoiding IR compilation optimization issues
- [getBlockTimestamp](/reference/cheatcodes/get-block-timestamp): Gets the current block.timestamp, avoiding IR compilation optimization issues
- [getCode](/reference/cheatcodes/get-code): Returns the creation bytecode for a contract in the project
- [getDeployedCode](/reference/cheatcodes/get-deployed-code): Returns the deployed (runtime) bytecode for a contract in the project
- [getLabel](/reference/cheatcodes/get-label): Retrieves the label for an address
- [getNonce](/reference/cheatcodes/get-nonce): Gets the nonce of an account or wallet
- [getRecordedLogs](/reference/cheatcodes/get-recorded-logs): Gets all emitted events recorded by recordLogs
- [isContext](/reference/cheatcodes/is-context): Checks the current Forge execution context
- [isPersistent](/reference/cheatcodes/is-persistent): Checks if an account is marked as persistent across forks
- [keyExists](/reference/cheatcodes/key-exists): Checks if a key exists in a JSON string (deprecated)
- [keyExistsJson](/reference/cheatcodes/key-exists-json): Checks if a key exists in a JSON string
- [keyExistsToml](/reference/cheatcodes/key-exists-toml): Checks if a key exists in a TOML table
- [label](/reference/cheatcodes/label): Sets a label for an address in test traces
- [load](/reference/cheatcodes/load): Loads a value from a specific storage slot of an account
- [makePersistent](/reference/cheatcodes/make-persistent): Marks accounts as persistent across fork switches
- [mockCall](/reference/cheatcodes/mock-call): Mocks calls to an address with specific calldata to return specified data
- [mockCallRevert](/reference/cheatcodes/mock-call-revert): Mocks calls to an address to revert with specified data
- [mockCalls](/reference/cheatcodes/mock-calls): Mocks calls to return different data for each successive invocation
- [mockFunction](/reference/cheatcodes/mock-function): Executes calls to an address using bytecode from another address
- [Cheatcodes Reference](/reference/cheatcodes/overview)
- [parseAddress](/reference/cheatcodes/parse-address): Parses a hex string into an address
- [parseBool](/reference/cheatcodes/parse-bool): Parses a string into a bool
- [parseBytes](/reference/cheatcodes/parse-bytes): Parses a hex string into bytes
- [parseBytes32](/reference/cheatcodes/parse-bytes32): Parses a hex string into bytes32
- [parseInt](/reference/cheatcodes/parse-int): Parses a string into an int256
- [parseJson](/reference/cheatcodes/parse-json): Parses JSON files and returns values as ABI-encoded bytes
- [parseJsonKeys](/reference/cheatcodes/parse-json-keys): Gets list of keys present in a JSON string
- [parseToml](/reference/cheatcodes/parse-toml): Parses TOML files and returns values as ABI-encoded bytes
- [parseTomlKeys](/reference/cheatcodes/parse-toml-keys): Gets list of keys present in a TOML string
- [parseUint](/reference/cheatcodes/parse-uint): Parses a string into a uint256
- [pauseGasMetering](/reference/cheatcodes/pause-gas-metering): Pauses gas metering so gasleft() does not decrease
- [prank](/reference/cheatcodes/prank): Sets msg.sender for the next call to a specified address
- [prevrandao](/reference/cheatcodes/prevrandao): Sets block.prevrandao for post-merge EVM versions in Forge tests
- [projectRoot](/reference/cheatcodes/project-root): Returns the root directory of the current Foundry project
- [prompt](/reference/cheatcodes/prompt): Displays an interactive prompt for user input in scripts
- [readCallers](/reference/cheatcodes/read-callers): Reads the current caller mode, msg.sender, and tx.origin
- [record](/reference/cheatcodes/record): Starts recording all storage reads and writes
- [recordLogs](/reference/cheatcodes/record-logs): Starts recording all emitted events
- [rememberKey](/reference/cheatcodes/remember-key): Stores a private key in forge's local wallet for broadcasting
- [resetGasMetering](/reference/cheatcodes/reset-gas-metering): Resets gas metering to the gas limit of the current execution frame
- [resumeGasMetering](/reference/cheatcodes/resume-gas-metering): Resumes gas metering after it was paused
- [revokePersistent](/reference/cheatcodes/revoke-persistent): Removes persistent status from accounts
- [roll](/reference/cheatcodes/roll): Sets block.number to a specified value in Forge tests
- [rollFork](/reference/cheatcodes/roll-fork): Sets the block number of a fork
- [RPC Cheatcodes](/reference/cheatcodes/rpc): Access configured RPC endpoints and make JSON-RPC calls
- [selectFork](/reference/cheatcodes/select-fork): Activates a previously created fork
- [serializeJson](/reference/cheatcodes/serialize-json): Serializes values as a stringified JSON object
- [setArbitraryStorage](/reference/cheatcodes/set-arbitrary-storage): Makes the storage of an address fully symbolic
- [setEnv](/reference/cheatcodes/set-env): Sets an environment variable
- [setNonce](/reference/cheatcodes/set-nonce): Sets the nonce of an account
- [sign](/reference/cheatcodes/sign): Signs a digest with a private key, returning (v, r, s)
- [signDelegation](/reference/cheatcodes/sign-delegation): Signs and attaches EIP-7702 authorization for account delegation
- [skip](/reference/cheatcodes/skip): Marks a test as skipped conditionally
- [sleep](/reference/cheatcodes/sleep): Pauses execution for a specified duration
- [startBroadcast](/reference/cheatcodes/start-broadcast): Makes all subsequent calls create transactions that can be signed and sent onchain
- [startPrank](/reference/cheatcodes/start-prank): Sets msg.sender for all subsequent calls until stopPrank is called
- [startStateDiffRecording](/reference/cheatcodes/start-state-diff-recording): Starts recording all state changes during execution
- [snapshotState cheatcodes](/reference/cheatcodes/state-snapshots): Snapshot and restore EVM state
- [stopAndReturnStateDiff](/reference/cheatcodes/stop-and-return-state-diff): Stops state diff recording and returns all recorded state changes
- [stopBroadcast](/reference/cheatcodes/stop-broadcast): Stops collecting transactions for onchain broadcasting
- [stopPrank](/reference/cheatcodes/stop-prank): Stops an active prank, resetting msg.sender and tx.origin
- [store](/reference/cheatcodes/store): Stores a value in a specific storage slot of an account
- [toString](/reference/cheatcodes/to-string): Converts any type to its string representation
- [transact](/reference/cheatcodes/transact): Fetches and executes a transaction from a fork
- [txGasPrice](/reference/cheatcodes/tx-gas-price): Sets tx.gasprice for the rest of the transaction
- [unixTime](/reference/cheatcodes/unix-time): Returns the current unix timestamp in milliseconds
- [warp](/reference/cheatcodes/warp): Sets block.timestamp to a specified value in Forge tests
- [writeJson](/reference/cheatcodes/write-json): Writes a serialized JSON object to a file
- [writeToml](/reference/cheatcodes/write-toml): Writes a serialized JSON object to a TOML file
- [chisel](/reference/chisel/chisel)
- [chisel clear-cache](/reference/chisel/clear-cache)
- [chisel eval](/reference/chisel/eval)
- [chisel list](/reference/chisel/list)
- [chisel load](/reference/chisel/load)
- [chisel view](/reference/chisel/view)
- [Base Options](/reference/common/base-options)
- [Create Option](/reference/common/cast-estimate-create-option)
- [Display Options](/reference/common/display-options)
- [Etherscan Options](/reference/common/etherscan-options)
- [Wallet Options - Hardware Wallet](/reference/common/multi-wallet-options-hardware)
- [Wallet Options - Keystore](/reference/common/multi-wallet-options-keystore)
- [Wallet Options - Raw](/reference/common/multi-wallet-options-raw)
- [Wallet Options - Remote](/reference/common/multi-wallet-options-remote)
- [RPC Options](/reference/common/rpc-options)
- [Transaction Options](/reference/common/transaction-options)
- [Wallet Options - Hardware Wallet](/reference/common/wallet-options-hardware)
- [Wallet Options - Keystore](/reference/common/wallet-options-keystore)
- [WALLET OPTIONS - RAW:](/reference/common/wallet-options-raw)
- [Wallet Options - Remote](/reference/common/wallet-options-remote)
- [abs](/reference/forge-std/abs)
- [arithmeticError](/reference/forge-std/arithmeticError)
- [assertApproxEqAbs](/reference/forge-std/assertApproxEqAbs)
- [assertApproxEqAbsDecimal](/reference/forge-std/assertApproxEqAbsDecimal)
- [assertApproxEqRel](/reference/forge-std/assertApproxEqRel)
- [assertApproxEqRelDecimal](/reference/forge-std/assertApproxEqRelDecimal)
- [assertEq](/reference/forge-std/assertEq)
- [assertEqDecimal](/reference/forge-std/assertEqDecimal)
- [assertFalse](/reference/forge-std/assertFalse)
- [assertGe](/reference/forge-std/assertGe)
- [assertGeDecimal](/reference/forge-std/assertGeDecimal)
- [assertGt](/reference/forge-std/assertGt)
- [assertGtDecimal](/reference/forge-std/assertGtDecimal)
- [assertionError](/reference/forge-std/assertionError)
- [assertLe](/reference/forge-std/assertLe)
- [assertLeDecimal](/reference/forge-std/assertLeDecimal)
- [assertLt](/reference/forge-std/assertLt)
- [assertLtDecimal](/reference/forge-std/assertLtDecimal)
- [assertNotEq](/reference/forge-std/assertNotEq)
- [assertNotEqDecimal](/reference/forge-std/assertNotEqDecimal)
- [assertTrue](/reference/forge-std/assertTrue)
- [assumeNotPrecompile](/reference/forge-std/assume-no-precompiles)
- [assumePayable](/reference/forge-std/assume-payable)
- [bound](/reference/forge-std/bound)
- [changePrank](/reference/forge-std/change-prank)
- [checked_write](/reference/forge-std/checked_write)
- [computeCreateAddress](/reference/forge-std/compute-create-address)
- [Config](/reference/forge-std/config)
- [Console Logging](/reference/forge-std/console-log)
- [deal](/reference/forge-std/deal)
- [delta](/reference/forge-std/delta)
- [deployCode](/reference/forge-std/deployCode)
- [deployCodeTo](/reference/forge-std/deployCodeTo)
- [depth](/reference/forge-std/depth)
- [deriveRememberKey](/reference/forge-std/derive-remember-key)
- [divisionError](/reference/forge-std/divisionError)
- [enable_packed_slots](/reference/forge-std/enable_packed_slots)
- [encodeStorageError](/reference/forge-std/encodeStorageError)
- [enumConversionError](/reference/forge-std/enumConversionError)
- [fail](/reference/forge-std/fail)
- [find](/reference/forge-std/find)
- [hoax](/reference/forge-std/hoax)
- [indexOOBError](/reference/forge-std/indexOOBError)
- [makeAddr](/reference/forge-std/make-addr)
- [makeAddrAndKey](/reference/forge-std/make-addr-and-key)
- [memOverflowError](/reference/forge-std/memOverflowError)
- [noGasMetering](/reference/forge-std/noGasMetering)
- [Forge Standard Library Reference](/reference/forge-std/overview)
- [percentDelta](/reference/forge-std/percentDelta)
- [popError](/reference/forge-std/popError)
- [read](/reference/forge-std/read)
- [rewind](/reference/forge-std/rewind)
- [Script Utils](/reference/forge-std/script-utils)
- [sig](/reference/forge-std/sig)
- [skip](/reference/forge-std/skip)
- [startHoax](/reference/forge-std/startHoax)
- [Std Assertions](/reference/forge-std/std-assertions)
- [Std Cheats](/reference/forge-std/std-cheats)
- [StdConfig](/reference/forge-std/std-config)
- [Std Errors](/reference/forge-std/std-errors)
- [Std Logs](/reference/forge-std/std-logs)
- [Std Math](/reference/forge-std/std-math)
- [Std Storage](/reference/forge-std/std-storage)
- [target](/reference/forge-std/target)
- [with_key](/reference/forge-std/with_key)
- [zeroVarError](/reference/forge-std/zeroVarError)
- [forge bind](/reference/forge/bind)
- [forge bind-json](/reference/forge/bind-json)
- [forge build](/reference/forge/build)
- [forge cache](/reference/forge/cache)
- [forge clean](/reference/forge/clean)
- [forge clone](/reference/forge/clone)
- [forge compiler](/reference/forge/compiler)
- [forge completions](/reference/forge/completions)
- [forge config](/reference/forge/config)
- [forge coverage](/reference/forge/coverage)
- [forge create](/reference/forge/create)
- [forge doc](/reference/forge/doc)
- [forge eip712](/reference/forge/eip712)
- [forge flatten](/reference/forge/flatten)
- [forge fmt](/reference/forge/fmt)
- [forge](/reference/forge/forge)
- [forge geiger](/reference/forge/geiger)
- [forge generate](/reference/forge/generate)
- [forge init](/reference/forge/init)
- [forge inspect](/reference/forge/inspect)
- [forge install](/reference/forge/install)
- [forge lint](/reference/forge/lint)
- [forge remappings](/reference/forge/remappings)
- [forge remove](/reference/forge/remove)
- [forge script](/reference/forge/script)
- [forge selectors](/reference/forge/selectors)
- [forge snapshot](/reference/forge/snapshot)
- [forge soldeer](/reference/forge/soldeer)
- [forge test](/reference/forge/test)
- [forge tree](/reference/forge/tree)
- [forge update](/reference/forge/update)
- [forge verify-bytecode](/reference/forge/verify-bytecode)
- [forge verify-check](/reference/forge/verify-check)
- [forge verify-contract](/reference/forge/verify-contract)
- [cast call --create](/reference/cast/call/--create)
- [cast erc20-token allowance](/reference/cast/erc20-token/allowance)
- [cast erc20-token approve](/reference/cast/erc20-token/approve)
- [cast erc20-token balance](/reference/cast/erc20-token/balance)
- [cast erc20-token burn](/reference/cast/erc20-token/burn)
- [cast erc20-token decimals](/reference/cast/erc20-token/decimals)
- [cast erc20-token mint](/reference/cast/erc20-token/mint)
- [cast erc20-token name](/reference/cast/erc20-token/name)
- [cast erc20-token symbol](/reference/cast/erc20-token/symbol)
- [cast erc20-token total-supply](/reference/cast/erc20-token/total-supply)
- [cast erc20-token transfer](/reference/cast/erc20-token/transfer)
- [cast estimate --create](/reference/cast/estimate/--create)
- [cast keychain authorize](/reference/cast/keychain/authorize)
- [cast keychain check](/reference/cast/keychain/check)
- [cast keychain list](/reference/cast/keychain/list)
- [cast keychain revoke](/reference/cast/keychain/revoke)
- [cast keychain rl](/reference/cast/keychain/rl)
- [cast keychain rs](/reference/cast/keychain/rs)
- [cast keychain show](/reference/cast/keychain/show)
- [cast keychain ss](/reference/cast/keychain/ss)
- [cast keychain ul](/reference/cast/keychain/ul)
- [cast mktx --create](/reference/cast/mktx/--create)
- [cast send --create](/reference/cast/send/--create)
- [cast tip20-token create](/reference/cast/tip20-token/create)
- [cast tip20-token mine](/reference/cast/tip20-token/mine)
- [cast tx-pool content](/reference/cast/tx-pool/content)
- [cast tx-pool content-from](/reference/cast/tx-pool/content-from)
- [cast tx-pool inspect](/reference/cast/tx-pool/inspect)
- [cast tx-pool status](/reference/cast/tx-pool/status)
- [cast wallet address](/reference/cast/wallet/address)
- [cast wallet change-password](/reference/cast/wallet/change-password)
- [cast wallet decrypt-keystore](/reference/cast/wallet/decrypt-keystore)
- [cast wallet derive](/reference/cast/wallet/derive)
- [cast wallet import](/reference/cast/wallet/import)
- [cast wallet list](/reference/cast/wallet/list)
- [cast wallet new](/reference/cast/wallet/new)
- [cast wallet new-mnemonic](/reference/cast/wallet/new-mnemonic)
- [cast wallet private-key](/reference/cast/wallet/private-key)
- [cast wallet public-key](/reference/cast/wallet/public-key)
- [cast wallet remove](/reference/cast/wallet/remove)
- [cast wallet sign](/reference/cast/wallet/sign)
- [cast wallet sign-auth](/reference/cast/wallet/sign-auth)
- [cast wallet vanity](/reference/cast/wallet/vanity)
- [cast wallet verify](/reference/cast/wallet/verify)
- [forge cache clean](/reference/forge/cache/clean)
- [forge cache ls](/reference/forge/cache/ls)
- [forge compiler resolve](/reference/forge/compiler/resolve)
- [forge generate test](/reference/forge/generate/test)
- [forge selectors cache](/reference/forge/selectors/cache)
- [forge selectors collision](/reference/forge/selectors/collision)
- [forge selectors find](/reference/forge/selectors/find)
- [forge selectors list](/reference/forge/selectors/list)
- [forge selectors upload](/reference/forge/selectors/upload)
- [forge soldeer clean](/reference/forge/soldeer/clean)
- [forge soldeer init](/reference/forge/soldeer/init)
- [forge soldeer install](/reference/forge/soldeer/install)
- [forge soldeer login](/reference/forge/soldeer/login)
- [forge soldeer push](/reference/forge/soldeer/push)
- [forge soldeer uninstall](/reference/forge/soldeer/uninstall)
- [forge soldeer update](/reference/forge/soldeer/update)
- [forge soldeer version](/reference/forge/soldeer/version)
-->

## Default foundry configuration

```toml
[profile.default]

# =============================================================================
# PROJECT PATHS
# =============================================================================

# Path of the sources directory
# Default: "src"
src = "src"

# Path of the tests directory
# Default: "test"
test = "test"

# Path of the scripts directory
# Default: "script"
script = "script"

# Path to the artifacts directory
# Default: "out"
out = "out"

# Paths to all library folders, such as "lib" or "node_modules"
# Default: ["lib"]
libs = ["lib"]

# Path to the cache store
# Default: "cache"
cache_path = "cache"

# Path to store broadcast logs
# Default: "broadcast"
broadcast = "broadcast"

# Where the gas snapshots are stored
# Default: "snapshots"
snapshots = "snapshots"

# Path where last test run failures are recorded
# Default: "cache/test-failures"
test_failures_file = "cache/test-failures"

# =============================================================================
# REMAPPINGS & LIBRARIES
# =============================================================================

# Remappings to use for this repo
# Format: ["@openzeppelin/=lib/openzeppelin-contracts/"]
# Default: []
remappings = []

# Whether to autodetect remappings by scanning the libs folders
# Default: true
auto_detect_remappings = true

# Library addresses to link
# Format: ["src/MyLib.sol:MyLib:0x..."]
# Default: []
libraries = []

# Additional paths passed to solc --allow-paths
# Default: []
allow_paths = []

# Additional paths passed to solc --include-path
# Default: []
include_paths = []

# Glob patterns for file paths to skip when building and executing contracts
# Example: ["test/invariant/**/*", "script/**/*"]
# Default: []
skip = []

# =============================================================================
# BUILD & CACHE
# =============================================================================

# Whether to enable the build cache
# Default: true
cache = true

# Whether to dynamically link tests
# Default: false
dynamic_test_linking = false

# Whether to forcefully clean all project artifacts before running commands
# Default: false
force = false

# Whether to compile in sparse mode
# If enabled, only required contracts/files will be selected for solc's output
# Default: false
sparse_mode = false

# Generates additional build info json files for every new build
# Contains the CompilerInput and CompilerOutput
# Default: false
build_info = false

# The path to the build-info directory that contains the build info json files
# Default: None
# build_info_path = "build-info"

# =============================================================================
# GAS SNAPSHOTS
# =============================================================================

# Whether to check for differences against previously stored gas snapshots
# Default: false
gas_snapshot_check = false

# Whether to emit gas snapshots to disk
# Default: true
gas_snapshot_emit = true

# =============================================================================
# SOLIDITY COMPILER
# =============================================================================

# The Solc instance to use. Takes precedence over auto_detect_solc
# Can be a version string like "0.8.20" or path to solc binary
# Default: None
# solc = "0.8.20"

# Whether to autodetect the solc compiler version to use
# Default: true
auto_detect_solc = true

# Offline mode - if set, network access (downloading solc) is disallowed
# If auto_detect_solc = true and offline = true, required solc versions will
# be auto detected but will not be installed if missing
# Default: false
offline = false

# The EVM version to use when building contracts
# Options: "homestead", "tangerineWhistle", "spuriousDragon", "byzantium",
#          "constantinople", "petersburg", "istanbul", "berlin", "london",
#          "paris", "shanghai", "cancun", "osaka"
# Default: "osaka"
evm_version = "osaka"

# Select a non-Ethereum network family for execution.
# Options: "optimism", "tempo"
# Default: none
# network = "tempo"

# Legacy equivalents for the network key are still accepted.
# optimism = true
# tempo = true

# Runtime hardfork for tests and scripts.
# Can be a plain Ethereum hardfork (for example "osaka") or a namespaced
# network hardfork such as "optimism:holocene" or "tempo:T3".
# Default: none
# hardfork = "tempo:T3"

# Whether to activate optimizer
# Default: None
# optimizer = true

# The number of runs specifies roughly how often each opcode will be executed
# Trade-off between code size (deploy cost) and execution cost
# optimizer_runs = 1 produces short but expensive code
# Higher values produce longer but more gas efficient code
# Maximum value: 2^32-1
# Default: None
# optimizer_runs = 200

# Switch optimizer components on or off in detail
[profile.default.optimizer_details]
peephole = true
inliner = true
jumpdestRemover = true
orderLiterals = true
deduplicate = true
cse = true
constantOptimizer = true
yul = true

# Model checker settings for formal verification
[profile.default.model_checker]
contracts = {}
engine = "chc"
timeout = 10000

# If set to true, changes compilation pipeline to go through Yul IR
# Default: false
via_ir = false

# Whether to include the AST as JSON in the compiler output
# Default: false
ast = false

# Whether to store the referenced sources in the metadata as literal data
# Default: false
use_literal_content = false

# Whether to include the metadata hash
# Options: "none", "ipfs", "bzzr1"
# Set to "none" for deterministic code (machine-independent)
# Default: "ipfs"
bytecode_hash = "ipfs"

# Whether to append the metadata hash to the bytecode
# If false and bytecode_hash is not "none", solc will issue a warning
# Default: true
cbor_metadata = true

# How to treat revert (and require) reason strings
# Options: "default", "strip", "debug", "verboseDebug"
# Default: None
# revert_strings = "default"

# Additional output selection for all contracts
# Examples: "ir", "irOptimized", "devdoc", "userdoc", "storageLayout", "ewasm"
# See Solc Compiler API for full list
# Default: []
extra_output = []

# Additional output files to emit for every contract
# Difference from extra_output: emits as separate files instead of in artifact
# Example: ["metadata"] creates metadata.json for each contract
# Default: []
extra_output_files = []

# Whether to print the names of the compiled contracts
# Default: false
names = false

# Whether to print the sizes of the compiled contracts
# Default: false
sizes = false

# Optional additional CLI arguments to pass to solc binary
# Default: []
extra_args = []

# =============================================================================
# ERROR HANDLING
# =============================================================================

# List of solidity error codes to always silence in compiler output
# Default: [1878, 5574, 5660, 2394, 5733, 3199]
ignored_error_codes = [1878, 5574, 5660, 2394, 5733, 3199]

# List of file paths to ignore warnings from
# Default: []
ignored_warnings_from = []

# Diagnostic level (minimum) at which the process should finish with non-zero exit
# Options: "never", "warnings", "notes"
# Default: "never"
deny = "never"

# DEPRECATED: use `deny` instead
# deny_warnings = false

# =============================================================================
# TESTING
# =============================================================================

# The address which will be executing all tests
# Default: "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38"
sender = "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38"

# The tx.origin value during EVM execution
# Default: "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38"
tx_origin = "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38"

# The initial balance of each deployed test contract
# Default: "0xffffffffffffffffffffffff"
initial_balance = "0xffffffffffffffffffffffff"

# Only run test functions matching the specified regex pattern
# Default: None
# match_test = "test_.*"

# Only run test functions that do not match the specified regex pattern
# Default: None
# no_match_test = "testFail.*"

# Only run tests in contracts matching the specified regex pattern
# Default: None
# match_contract = ".*Test"

# Only run tests in contracts that do not match the specified regex pattern
# Default: None
# no_match_contract = ".*Invariant.*"

# Only run tests in source files matching the specified glob pattern
# Default: None
# match_path = "test/unit/*"

# Only run tests in source files that do not match the specified glob pattern
# Default: None
# no_match_path = "test/integration/*"

# Only show coverage for files that do not match the specified regex pattern
# Default: None
# no_match_coverage = "test/.*"

# Max concurrent threads to use
# Default: None
# threads = 4

# Whether to show test execution progress
# Default: false
show_progress = false

# Whether to allow ffi cheatcodes in tests
# Default: false
ffi = false

# Whether to allow expectRevert for internal functions
# Default: false
allow_internal_expect_revert = false

# Use the CREATE2 factory in all cases including tests and non-broadcasting scripts
# Default: false
always_use_create_2_factory = false

# Sets a timeout in seconds for vm.prompt cheatcodes
# Default: 120
prompt_timeout = 120

# Whether failed assertions should revert (only for native cheatcode assertions)
# Default: true
assertions_revert = true

# Whether failed() should be invoked to check if the test has failed
# Default: false
legacy_assertions = false

# =============================================================================
# EVM CONFIGURATION
# =============================================================================

# The block.number value during EVM execution
# Default: 1
block_number = 1

# Pins the block number for the state fork
# Default: None
# fork_block_number = 12345678

# The chain name or EIP-155 chain ID
# Default: None
# chain = 1

# Block gas limit
# Default: 1073741824
gas_limit = 1073741824

# EIP-170: Contract code size limit in bytes
# Useful to increase for tests
# Default: None
# code_size_limit = 24576

# tx.gasprice value during EVM execution
# If not set, uses remote client's gas price in fork mode
# Default: None
# gas_price = 0

# The base fee in a block
# Default: 0
block_base_fee_per_gas = 0

# The block.coinbase value during EVM execution
# Default: "0x0000000000000000000000000000000000000000"
block_coinbase = "0x0000000000000000000000000000000000000000"

# The block.timestamp value during EVM execution
# Default: 1
block_timestamp = 1

# The block.difficulty value during EVM execution
# Default: 0
block_difficulty = 0

# Before merge: block.max_hash, after merge: block.prevrandao
# Default: "0x0000000000000000000000000000000000000000000000000000000000000000"
block_prevrandao = "0x0000000000000000000000000000000000000000000000000000000000000000"

# The block.gaslimit value during EVM execution
# Default: None
# block_gas_limit = 30000000

# The memory limit per EVM execution in bytes
# If exceeded, a MemoryLimitOOG result is thrown
# Default: 134217728
memory_limit = 134217728

# Whether to enable call isolation
# Useful for more correct gas accounting and EVM behavior
# Default: false
isolate = false

# Whether to disable the block gas limit checks
# Default: false
disable_block_gas_limit = false

# Whether to enable the tx gas limit checks as imposed by Osaka (EIP-7825)
# Default: false
enable_tx_gas_limit = false

# =============================================================================
# RPC CONFIGURATION
# =============================================================================

# URL of the RPC server that should be used for any RPC calls
# Default: None
# eth_rpc_url = "https://eth-mainnet.alchemyapi.io/v2/YOUR_KEY"

# Whether to accept invalid certificates for the RPC server
# Default: false
eth_rpc_accept_invalid_certs = false

# Whether to disable automatic proxy detection for the RPC server
# Helps in sandboxed environments where system proxy detection causes crashes
# Default: false
eth_rpc_no_proxy = false

# JWT secret for RPC authentication
# Default: None
# eth_rpc_jwt = "your-jwt-secret"

# Timeout in seconds for RPC calls
# Default: None
# eth_rpc_timeout = 30

# Headers to include in RPC calls
# Format: ["x-custom-header:value", "x-another-header:another-value"]
# Default: None
# eth_rpc_headers = []

# Etherscan API key, or alias for an EtherscanConfig in etherscan table
# Default: None
# etherscan_api_key = "YOUR_API_KEY"

# RPC storage caching settings
[profile.default.rpc_storage_caching]
# Which chains to cache (e.g., "all", "mainnet,optimism", or chain IDs)
# Default: "all"
chains = "all"
# Which endpoints to cache ("all", "remote", or specific URLs)
# Default: "remote"
endpoints = "remote"

# Disables storage caching entirely (overrides rpc_storage_caching)
# Default: false
no_storage_caching = false

# Disables rate limiting entirely (overrides compute_units_per_second)
# Default: false
no_rpc_rate_limit = false

# Multiple RPC endpoints and their aliases
[profile.default.rpc_endpoints]
mainnet = "https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_KEY}"
optimism = "https://opt-mainnet.g.alchemy.com/v2/${ALCHEMY_KEY}"

# Multiple Etherscan API configs and their aliases
[profile.default.etherscan]
mainnet = { key = "${ETHERSCAN_API_KEY}" }
optimism = { key = "${OPTIMISM_ETHERSCAN_KEY}", chain = "optimism" }

# =============================================================================
# GAS REPORTS
# =============================================================================

# List of contracts to generate gas reports for
# Use ["*"] for all contracts
# Default: ["*"]
gas_reports = ["*"]

# List of contracts to ignore for gas reports
# Default: []
gas_reports_ignore = []

# Whether to include gas reports for tests
# Default: false
gas_reports_include_tests = false

# =============================================================================
# CREATE2 CONFIGURATION
# =============================================================================

# CREATE2 salt to use for library deployment in scripts
# Default: "0x0000000000000000000000000000000000000000000000000000000000000000"
create2_library_salt = "0x0000000000000000000000000000000000000000000000000000000000000000"

# The CREATE2 deployer address to use
# Default: "0x4e59b44847b379578588920ca78fbf26c0b4956c"
create2_deployer = "0x4e59b44847b379578588920ca78fbf26c0b4956c"

# =============================================================================
# FILE SYSTEM PERMISSIONS
# =============================================================================

# Configures permissions of cheat codes that touch the file system
# Specifies what operations can be executed (read, write)
[profile.default.fs_permissions]
read = ["out"]
read-write = ["cache", "broadcast"]

# =============================================================================
# ADDRESS LABELS
# =============================================================================

# Address labels for better trace output
[profile.default.labels]
"0x1234..." = "MyContract"
"0xabcd..." = "Treasury"

# =============================================================================
# CHEATCODE CONFIGURATION
# =============================================================================

# Verbosity level (0-5)
# Default: 0
verbosity = 0

# Whether to enable safety checks for vm.getCode and vm.getDeployedCode
# If disabled, it's possible to access artifacts which were not recompiled/cached
# Default: false
unchecked_cheatcode_artifacts = false

# =============================================================================
# TRANSACTION CONFIGURATION
# =============================================================================

# Timeout for transactions in seconds
# Default: 120
transaction_timeout = 120

# Whether to enable script execution protection
# Default: true
script_execution_protection = true

# =============================================================================
# VYPER CONFIGURATION
# =============================================================================

[profile.default.vyper]
# Default: "vyper"
path = "vyper"  # Path to vyper binary

# =============================================================================
# FUZZ TESTING CONFIGURATION
# =============================================================================

[fuzz]
# The number of test cases that must execute for each property test
# Default: 256
runs = 256

# Fails the fuzzed test if a revert occurs
# Default: true
fail_on_revert = true

# The maximum number of test case rejections allowed
# Encountered during usage of vm.assume cheatcode
# Default: 65536
max_test_rejects = 65536

# Seed for the fuzzing RNG algorithm
# Default: None
# seed = "0x..."

# Number of runs to execute and include in the gas report
# Default: 256
gas_report_samples = 256

# Path where fuzz failures are recorded and replayed
# Default: None
# failure_persist_dir = "cache/fuzz"

# Show console.log in fuzz test
# Default: false
show_logs = false

# Timeout (in seconds) for each property test
# Default: None
# timeout = 60

# --- Fuzz Dictionary Configuration ---

# The weight of the dictionary (percentage 0-100)
# Default: 40
dictionary_weight = 40

# Whether to include values from storage
# Default: true
include_storage = true

# Whether to include push bytes values
# Default: true
include_push_bytes = true

# Maximum addresses to record in dictionary
# Once exceeded, starts evicting random entries to prevent memory blowup
# Default: 15728640
max_fuzz_dictionary_addresses = 15728640

# Maximum values to record in dictionary
# Once exceeded, starts evicting random entries
# Default: 9830400
max_fuzz_dictionary_values = 9830400

# Maximum literal values to seed from the AST
# Independent from max addresses and values
# Default: 6553600
max_fuzz_dictionary_literals = 6553600

# --- Fuzz Corpus Configuration ---

# Path to corpus directory, enables coverage-guided fuzzing mode
# If not set, sequences producing new coverage are not persisted and mutated
# Default: None
# corpus_dir = "corpus/fuzz"

# Whether corpus uses gzip file compression and decompression
# Default: true
corpus_gzip = true

# Number of mutations until entry marked as eligible to be flushed from memory
# Mutations will be performed at least this many times
# Default: 5
corpus_min_mutations = 5

# Number of corpus entries that won't be evicted from memory
# Default: 0
corpus_min_size = 0

# Whether to collect and display edge coverage metrics
# Default: false
show_edge_coverage = false

# =============================================================================
# INVARIANT TESTING CONFIGURATION
# =============================================================================

[invariant]
# The number of runs that must execute for each invariant test group
# Default: 256
runs = 256

# The number of calls executed to attempt to break invariants in one run
# Default: 500
depth = 500

# Fails the invariant fuzzing if a revert occurs
# Default: false
fail_on_revert = false

# Allows overriding an unsafe external call when running invariant tests
# e.g., reentrancy checks
# Default: false
call_override = false

# The maximum number of attempts to shrink the sequence
# Default: 5000
shrink_run_limit = 5000

# The maximum number of rejects via vm.assume in a single invariant run
# Default: 65536
max_assume_rejects = 65536

# Number of runs to execute and include in the gas report
# Default: 256
gas_report_samples = 256

# Path where invariant failures are recorded and replayed
# Default: None
# failure_persist_dir = "cache/invariant"

# Whether to collect and display fuzzed selectors metrics
# Default: true
show_metrics = true

# Timeout (in seconds) for each invariant test
# Default: None
# timeout = 300

# Display counterexample as solidity calls
# Default: false
show_solidity = false

# Maximum time (in seconds) between generated transactions
# Default: None
# max_time_delay = 86400

# Maximum number of blocks elapsed between generated transactions
# Default: None
# max_block_delay = 1000

# Number of calls to execute between invariant assertions
# 0: Only assert on the last call of each run (fastest, may miss exact breaking call)
# 1 (default): Assert after every call (most precise)
# N: Assert every N calls AND always on the last call
# Default: 1
check_interval = 1

# --- Invariant Dictionary Configuration ---

# The weight of the dictionary (percentage 0-100)
# Default: 80
dictionary_weight = 80

# Whether to include values from storage
# Default: true
include_storage = true

# Whether to include push bytes values
# Default: true
include_push_bytes = true

# Maximum addresses to record in dictionary
# Default: 15728640
max_fuzz_dictionary_addresses = 15728640

# Maximum values to record in dictionary
# Default: 9830400
max_fuzz_dictionary_values = 9830400

# Maximum literal values to seed from the AST
# Default: 6553600
max_fuzz_dictionary_literals = 6553600

# --- Invariant Corpus Configuration ---

# Path to corpus directory, enables coverage-guided fuzzing mode
# Default: None
# corpus_dir = "corpus/invariant"

# Whether corpus uses gzip compression
# Default: true
corpus_gzip = true

# Minimum mutations before entry can be flushed
# Default: 5
corpus_min_mutations = 5

# Minimum corpus entries to keep in memory
# Default: 0
corpus_min_size = 0

# Whether to collect and display edge coverage metrics
# Default: false
show_edge_coverage = false

# =============================================================================
# FORMATTER CONFIGURATION
# =============================================================================

[fmt]
# Maximum line length where formatter will try to wrap the line
# Default: 120
line_length = 120

# Number of spaces per indentation level (ignored if style is Tab)
# Default: 4
tab_width = 4

# Style of indent
# Options: "space", "tab"
# Default: "space"
style = "space"

# Print spaces between brackets
# Default: false
bracket_spacing = false

# Style of uint/int256 types
# Options: "preserve", "long", "short"
# "preserve": Use the type defined in source code
# "long": Print full length uint256 or int256
# "short": Print alias uint or int
# Default: "long"
int_types = "long"

# Style of multiline function header when it doesn't fit
# Options: "params_always", "params_first_multi", "attributes_first", "all", "all_params"
# Default: "attributes_first"
multiline_func_header = "attributes_first"

# Style of quotation marks
# Options: "preserve", "double", "single"
# Default: "double"
quote_style = "double"

# Style of underscores in number literals
# Options: "preserve", "remove", "thousands"
# "thousands": Add underscore every thousand if > 9999 (e.g., 10000 -> 10_000)
# Default: "preserve"
number_underscore = "preserve"

# Style of underscores in hex literals
# Options: "preserve", "remove", "bytes"
# "bytes": Add underscore as separator between byte boundaries
# Default: "remove"
hex_underscore = "remove"

# Style of single line blocks in statements
# Options: "preserve", "single", "multi"
# Default: "preserve"
single_line_statement_blocks = "preserve"

# Print space in state variable, function, and modifier override attribute
# Default: false
override_spacing = false

# Wrap comments on line_length reached
# Default: false
wrap_comments = false

# Style of doc comments
# Options: "preserve", "line", "block"
# "line": Use single-line style (///)
# "block": Use block style (/** .. */)
# Default: "preserve"
docs_style = "preserve"

# Globs to ignore
# Default: []
ignore = []

# Add new line at start and end of contract declarations
# Default: false
contract_new_lines = false

# Sort import statements alphabetically in groups (groups separated by newline)
# Default: false
sort_imports = false

# Choose between import styles
# Options: "prefer_plain", "prefer_glob", "preserve"
# "prefer_plain": import "a" as name
# "prefer_glob": import * as name from "a"
# Default: "prefer_plain"
namespace_import_style = "prefer_plain"

# Whether to suppress spaces around the power operator (**)
# Default: false
pow_no_space = false

# Style for broken lists - keep elements together before breaking individually
# Options: "none", "calls", "events", "errors", "events_errors", "all"
# Default: "all"
prefer_compact = "all"

# Keep single imports on a single line even if they exceed line length
# Default: false
single_line_imports = false

# =============================================================================
# DOCUMENTATION CONFIGURATION
# =============================================================================

[doc]
# Doc output path
# Default: "docs"
out = "docs"

# The documentation title
# Default: ""
title = ""

# Path to user provided book.toml
# Default: "book.toml"
book = "book.toml"

# Path to user provided welcome markdown
# If none provided, defaults to README.md
# Default: "README.md"
homepage = "README.md"

# The repository URL
# Default: ""
repository = "https://github.com/user/repo"

# The path to source code (e.g., "tree/main/packages/contracts")
# Useful for monorepos or projects with source code in specific directories
# Default: ""
path = "tree/main/src"

# Globs to ignore
# Default: []
ignore = []

# =============================================================================
# LINTER CONFIGURATION
# =============================================================================

[lint]
# Specifies which lints to run based on severity
# If uninformed, all severities are checked
# Options: "high", "medium", "low", "info", "gas", "code-size"
# Default: ["high", "medium", "low"]
severity = ["high", "medium", "low"]

# Deny specific lints based on their ID (e.g., "mixed-case-function")
# Default: []
exclude_lints = []

# Globs to ignore
# Default: []
ignore = []

# Whether to run linting during forge build
# Default: true
lint_on_build = true

# Patterns excluded from mixedCase lint checks
# Default: ["ERC", "URI"]
mixed_case_exceptions = ["ERC", "URI"]
```
