<!--
Sitemap:
- [Installation](/introduction/installation): Install Foundry using foundryup, precompiled binaries, or build from source.
- [Getting Started](/introduction/getting-started): Get started with Foundry's four core tools - Forge, Cast, Anvil, and Chisel.
- [Prompting](/introduction/prompting): Use structured prompts to get better results from AI coding assistants.
- [Project Setup](/projects/): Create and configure Foundry projects for smart contract development.
- [Project Layout](/projects/layout): Understand Foundry's project structure and directory conventions.
- [Dependencies](/projects/dependencies): Manage dependencies using git submodules and remappings.
- [Soldeer](/projects/soldeer): Use Soldeer as an alternative package manager for Foundry projects.
- [Forge](/forge/): Forge is Foundry's build, test, and deploy tool for Solidity smart contracts.
- [Building contracts](/forge/build): Compile Solidity contracts with Forge.
- [Testing](/forge/testing): Write and run tests for Solidity contracts with Forge.
- [Scripting](/forge/scripting): Deploy and interact with contracts using Forge scripts.
- [Debugging](/forge/debugging): Debug Solidity contracts with Forge traces and the interactive debugger.
- [Gas tracking](/forge/gas-tracking): Track and compare gas usage with Forge snapshots and reports.
- [Formatting](/forge/formatting): Format Solidity code with Forge.
- [Linting](/forge/linting): Lint Solidity code with Forge.
- [Arbitrary ERC20 send](/forge/linting/arbitrary-send-erc20): Arbitrary ERC20 send
- [Arbitrary ETH send](/forge/linting/arbitrary-send-eth): Arbitrary ETH send
- [Controlled delegatecall](/forge/linting/controlled-delegatecall): Controlled delegatecall target
- [Hash collision from abi.encodePacked](/forge/linting/encode-packed-collision): Hash collision from abi.encodePacked with multiple dynamic arguments
- [Unchecked ERC20 transfer return value](/forge/linting/erc20-unchecked-transfer): Unchecked ERC20 transfer return value
- [Incorrect shift order](/forge/linting/incorrect-shift): Incorrect shift order
- [ETH reentrancy through uncapped calls](/forge/linting/reentrancy-eth): ETH reentrancy through uncapped calls
- [Right-to-left override character](/forge/linting/rtlo): Right-to-left override character
- [Unchecked low-level call](/forge/linting/unchecked-call): Unchecked low-level call
- [Unprotected upgradeable initializer](/forge/linting/unprotected-initializer): Unprotected upgradeable initializer
- [Assert State Change](/forge/linting/assert-state-change): State-modifying expression inside assert()
- [Misuse of a boolean constant](/forge/linting/boolean-cst): Misuse of a boolean constant
- [Divide before multiply](/forge/linting/divide-before-multiply): Divide before multiply
- [Incorrect ERC20 interface](/forge/linting/incorrect-erc20-interface): Incorrect ERC20 interface
- [Incorrect ERC721 interface](/forge/linting/incorrect-erc721-interface): Incorrect ERC721 interface
- [Incorrect strict equality](/forge/linting/incorrect-strict-equality): Dangerous strict equality check on an externally-influenced value
- [Locked Ether](/forge/linting/locked-ether): Contract receives ETH but has no way to send it out
- [Low-level calls](/forge/linting/low-level-calls): Low-level calls
- [No-ETH read-before-write reentrancy](/forge/linting/reentrancy-no-eth): No-ETH read-before-write reentrancy
- [Use of tx.origin for authorization](/forge/linting/tx-origin): Use of tx.origin for authorization
- [Type-Based Tautology](/forge/linting/type-based-tautology): Type-based tautological comparison
- [Uninitialized local variable](/forge/linting/uninitialized-local): Uninitialized local variable
- [Uninitialized state variable](/forge/linting/uninitialized-state): Uninitialized state variable
- [Unsafe typecast](/forge/linting/unsafe-typecast): Unsafe typecast
- [Unused return value](/forge/linting/unused-return): Unused return value from an external call
- [Weak pseudo-random number generation](/forge/linting/weak-prng): Weak pseudo-random number generation
- [Use of block.timestamp in comparisons](/forge/linting/block-timestamp): Use of block.timestamp in comparisons
- [External calls inside loops](/forge/linting/calls-loop): External calls inside loops
- [Delegatecall inside payable loops](/forge/linting/delegatecall-loop): Delegatecall inside payable loops
- [Missing events for access control changes](/forge/linting/missing-events-access-control): Missing events for access control changes
- [Missing events for arithmetic state changes](/forge/linting/missing-events-arithmetic): Missing events for arithmetic state changes
- [Missing zero-address check](/forge/linting/missing-zero-check): Missing zero-address check
- [msg.value inside loops](/forge/linting/msg-value-loop): msg.value inside loops
- [Events emitted after external calls](/forge/linting/reentrancy-events): Events emitted after external calls
- [Return bomb](/forge/linting/return-bomb): Return bomb
- [Boolean comparison to a constant](/forge/linting/boolean-equal): Boolean comparison to a constant
- [Address and id event parameters should be indexed](/forge/linting/event-fields): Address and id event parameters should be indexed
- [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 inheritance from an implemented interface](/forge/linting/missing-inheritance): Missing inheritance from an implemented interface
- [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
- [Redundant base-constructor call](/forge/linting/redundant-base-constructor-call): Redundant base-constructor call
- [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
- [Unaliased plain import](/forge/linting/unaliased-plain-import): Unaliased plain import
- [Usage of unsafe cheatcodes](/forge/linting/unsafe-cheatcode): Usage of unsafe cheatcodes
- [Unused import](/forge/linting/unused-import): Unused import
- [Inefficient keccak256 call](/forge/linting/asm-keccak256): Inefficient keccak256 call
- [Array length not cached](/forge/linting/cache-array-length): Array length not cached
- [Costly Operations Inside a Loop](/forge/linting/costly-loop): Costly operations inside a loop
- [State variable could be constant](/forge/linting/could-be-constant): State variable could be 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
- [Public function can be declared external](/forge/linting/external-function): Public function can be declared external
- [Unused state variable](/forge/linting/unused-state-variables): Unused state variable
- [State variable read via this](/forge/linting/var-read-using-this): State variable read via `this`
- [Write After Write](/forge/linting/write-after-write): Redundant storage write; value overwritten before being read
- [Unwrapped modifier logic](/forge/linting/unwrapped-modifier-logic): Unwrapped modifier logic
- [Cast](/cast/): Cast is Foundry's command-line tool for interacting with Ethereum.
- [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.
- [ABI encoding](/cast/abi-encoding): Encode and decode ABI data, calldata, and function signatures with Cast.
- [Anvil](/anvil/): Anvil is Foundry's local Ethereum node for development and testing.
- [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.
- [Custom methods](/anvil/custom-methods): Anvil's custom RPC methods for impersonation, mining control, and state manipulation.
- [Chisel](/chisel/): Chisel is Foundry's interactive Solidity REPL for rapid prototyping and debugging.
- [Session management](/chisel/session-management): Save, load, and export Chisel REPL sessions.
- [Forking](/chisel/forking): Fork live chains in Chisel to interact with deployed contracts.
- [Commands](/chisel/commands): All available commands in the Chisel REPL.
- [FAQ](/help/faq): Frequently asked questions about Foundry and its tools.
- [Troubleshooting](/help/troubleshooting): Solutions to common Foundry errors and issues.
- [Configuration](/config/): Configure Foundry with foundry.toml, profiles, and environment variables.
- [Profiles](/config/profiles): Use profiles to switch between configurations for development, CI, and production.
- [Compiler](/config/compiler): Configure the Solidity compiler settings for your Foundry project.
- [Testing](/config/testing): Configure testing behavior including fuzz testing and invariant testing.
- [MESC](/config/mesc): Use MESC to manage RPC endpoints across all your crypto tools from a single configuration file.
- [CI Integration](/config/ci): Set up Foundry in GitHub Actions and other CI systems.
- [Editor Setup](/config/editors): Configure VS Code, Vim, and other editors for Foundry projects.
- [Best Practices](/best-practices): Best practices for writing contracts, tests, scripts, and managing security in Foundry projects.
- [Guides](/guides/): Practical guides for common Foundry workflows and advanced patterns.
- [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.
- [Multi-Chain Deployments](/guides/multi-chain-deployments): Deploy the same contracts across multiple networks with per-chain configuration.
- [Upgrading Contracts](/guides/upgrading-contracts): Implement proxy patterns with Forge scripts and verify storage layout compatibility.
- [Fork Testing](/guides/fork-testing): Test against live chain state, impersonate accounts, and handle time-sensitive logic.
- [Invariant Testing](/guides/invariant-testing): Write effective invariant tests with handler patterns and ghost variables.
- [Foundry on Tempo](/guides/tempo): Use Foundry's upstream Tempo support to initialize projects, configure foundry.toml, and work with Tempo transactions.
- [MPP-backed RPC endpoints](/guides/mpp): Use Foundry with HTTP 402 payment-gated RPC endpoints through the Machine Payments Protocol (MPP).
- [Debugging Transactions](/guides/debugging-transactions): Replay and debug failed mainnet transactions with trace analysis.
- [Gas Optimization](/guides/gas-optimization): Profile gas usage and optimize with snapshots and the IR pipeline.
- [Stack Too Deep](/guides/stack-too-deep): Understanding and resolving the "Stack too deep" compilation error in Solidity.
- [Docker & Containers](/guides/docker): Run Foundry in Docker for reproducible builds and CI environments.
- [Foundry v1.0 migration guide](/guides/migrations/foundry-v1): Summary of breaking changes and migration steps for Foundry v1.0.
- [forge](/reference/forge/forge)
- [forge build](/reference/forge/build)
- [forge cache clean](/reference/forge/cache/clean)
- [forge clean](/reference/forge/clean)
- [forge inspect](/reference/forge/inspect)
- [forge soldeer clean](/reference/forge/soldeer/clean)
- [forge create](/reference/forge/create)
- [forge flatten](/reference/forge/flatten)
- [forge verify-check](/reference/forge/verify-check)
- [forge verify-contract](/reference/forge/verify-contract)
- [forge completions](/reference/forge/completions)
- [forge clone](/reference/forge/clone)
- [forge config](/reference/forge/config)
- [forge geiger](/reference/forge/geiger)
- [forge init](/reference/forge/init)
- [forge install](/reference/forge/install)
- [forge remappings](/reference/forge/remappings)
- [forge remove](/reference/forge/remove)
- [forge soldeer init](/reference/forge/soldeer/init)
- [forge soldeer install](/reference/forge/soldeer/install)
- [forge soldeer update](/reference/forge/soldeer/update)
- [forge tree](/reference/forge/tree)
- [forge update](/reference/forge/update)
- [forge coverage](/reference/forge/coverage)
- [forge snapshot](/reference/forge/snapshot)
- [forge test](/reference/forge/test)
- [forge bind](/reference/forge/bind)
- [forge bind-json](/reference/forge/bind-json)
- [forge cache](/reference/forge/cache)
- [forge cache ls](/reference/forge/cache/ls)
- [forge compiler](/reference/forge/compiler)
- [forge compiler resolve](/reference/forge/compiler/resolve)
- [forge doc](/reference/forge/doc)
- [forge eip712](/reference/forge/eip712)
- [forge fmt](/reference/forge/fmt)
- [forge lint](/reference/forge/lint)
- [forge script](/reference/forge/script)
- [forge selectors](/reference/forge/selectors)
- [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](/reference/forge/soldeer)
- [forge soldeer login](/reference/forge/soldeer/login)
- [forge soldeer push](/reference/forge/soldeer/push)
- [forge soldeer uninstall](/reference/forge/soldeer/uninstall)
- [forge soldeer version](/reference/forge/soldeer/version)
- [forge verify-bytecode](/reference/forge/verify-bytecode)
- [cast](/reference/cast/cast)
- [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 calldata](/reference/cast/calldata)
- [cast decode-abi](/reference/cast/decode-abi)
- [cast decode-calldata](/reference/cast/decode-calldata)
- [cast pretty-calldata](/reference/cast/pretty-calldata)
- [cast selectors](/reference/cast/selectors)
- [cast upload-signature](/reference/cast/upload-signature)
- [cast balance](/reference/cast/balance)
- [cast code](/reference/cast/code)
- [cast codesize](/reference/cast/codesize)
- [cast erc20-token balance](/reference/cast/erc20-token/balance)
- [cast nonce](/reference/cast/nonce)
- [cast proof](/reference/cast/proof)
- [cast storage](/reference/cast/storage)
- [cast age](/reference/cast/age)
- [cast block](/reference/cast/block)
- [cast block-number](/reference/cast/block-number)
- [cast find-block](/reference/cast/find-block)
- [cast gas-price](/reference/cast/gas-price)
- [cast chain](/reference/cast/chain)
- [cast chain-id](/reference/cast/chain-id)
- [cast client](/reference/cast/client)
- [cast format-bytes32-string](/reference/cast/format-bytes32-string)
- [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 parse-bytes32-address](/reference/cast/parse-bytes32-address)
- [cast parse-bytes32-string](/reference/cast/parse-bytes32-string)
- [cast shl](/reference/cast/shl)
- [cast shr](/reference/cast/shr)
- [cast to-ascii](/reference/cast/to-ascii)
- [cast to-base](/reference/cast/to-base)
- [cast to-bytes32](/reference/cast/to-bytes32)
- [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-wei](/reference/cast/to-wei)
- [cast lookup-address](/reference/cast/lookup-address)
- [cast namehash](/reference/cast/namehash)
- [cast resolve-name](/reference/cast/resolve-name)
- [cast source](/reference/cast/source)
- [cast completions](/reference/cast/completions)
- [cast access-list](/reference/cast/access-list)
- [cast call](/reference/cast/call)
- [cast estimate](/reference/cast/estimate)
- [cast logs](/reference/cast/logs)
- [cast mktx](/reference/cast/mktx)
- [cast publish](/reference/cast/publish)
- [cast receipt](/reference/cast/receipt)
- [cast rpc](/reference/cast/rpc)
- [cast run](/reference/cast/run)
- [cast send](/reference/cast/send)
- [cast tx](/reference/cast/tx)
- [cast abi-encode-event](/reference/cast/abi-encode-event)
- [cast address-zero](/reference/cast/address-zero)
- [cast admin](/reference/cast/admin)
- [cast artifact](/reference/cast/artifact)
- [cast b2e-payload](/reference/cast/b2e-payload)
- [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 call --create](/reference/cast/call/--create)
- [cast codehash](/reference/cast/codehash)
- [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 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 erc20-token allowance](/reference/cast/erc20-token/allowance)
- [cast erc20-token approve](/reference/cast/erc20-token/approve)
- [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 format-units](/reference/cast/format-units)
- [cast hash-message](/reference/cast/hash-message)
- [cast hash-zero](/reference/cast/hash-zero)
- [cast implementation](/reference/cast/implementation)
- [cast index-erc7201](/reference/cast/index-erc7201)
- [cast interface](/reference/cast/interface)
- [cast keccak](/reference/cast/keccak)
- [cast keychain](/reference/cast/keychain)
- [cast keychain authorize](/reference/cast/keychain/authorize)
- [cast keychain check](/reference/cast/keychain/check)
- [cast keychain doctor](/reference/cast/keychain/doctor)
- [cast keychain inspect](/reference/cast/keychain/inspect)
- [cast keychain list](/reference/cast/keychain/list)
- [cast keychain policy](/reference/cast/keychain/policy)
- [cast keychain policy add-call](/reference/cast/keychain/policy/add-call)
- [cast keychain policy remove-target](/reference/cast/keychain/policy/remove-target)
- [cast keychain policy set-limit](/reference/cast/keychain/policy/set-limit)
- [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 max-int](/reference/cast/max-int)
- [cast max-uint](/reference/cast/max-uint)
- [cast min-int](/reference/cast/min-int)
- [cast mktx --create](/reference/cast/mktx/--create)
- [cast pad](/reference/cast/pad)
- [cast parse-units](/reference/cast/parse-units)
- [cast recover-authority](/reference/cast/recover-authority)
- [cast send --create](/reference/cast/send/--create)
- [cast sig](/reference/cast/sig)
- [cast sig-event](/reference/cast/sig-event)
- [cast storage-root](/reference/cast/storage-root)
- [cast tempo](/reference/cast/tempo)
- [cast tempo login](/reference/cast/tempo/login)
- [cast tip20-token](/reference/cast/tip20-token)
- [cast tip20-token create](/reference/cast/tip20-token/create)
- [cast tip20-token mine](/reference/cast/tip20-token/mine)
- [cast to-check-sum-address](/reference/cast/to-check-sum-address)
- [cast to-utf8](/reference/cast/to-utf8)
- [cast trace](/reference/cast/trace)
- [cast tx-pool](/reference/cast/tx-pool)
- [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 virtual-address](/reference/cast/virtual-address)
- [cast virtual-address create](/reference/cast/virtual-address/create)
- [cast virtual-address resolve](/reference/cast/virtual-address/resolve)
- [cast virtual-address watch](/reference/cast/virtual-address/watch)
- [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)
- [cast wallet](/reference/cast/wallet)
- [anvil](/reference/anvil/anvil)
- [anvil completions](/reference/anvil/completions)
- [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)
- [Cheatcodes Reference](/reference/cheatcodes/overview)
- [warp](/reference/cheatcodes/warp): Sets block.timestamp to a specified value in Forge tests
- [roll](/reference/cheatcodes/roll): Sets block.number to a specified value in Forge tests
- [fee](/reference/cheatcodes/fee): Sets block.basefee to a specified value in Forge tests
- [getBlockTimestamp](/reference/cheatcodes/get-block-timestamp): Gets the current block.timestamp, avoiding IR compilation optimization issues
- [getBlockNumber](/reference/cheatcodes/get-block-number): Gets the current block.number, avoiding IR compilation optimization issues
- [difficulty](/reference/cheatcodes/difficulty): Sets block.difficulty for pre-merge EVM versions in Forge tests
- [prevrandao](/reference/cheatcodes/prevrandao): Sets block.prevrandao for post-merge EVM versions in Forge tests
- [chainId](/reference/cheatcodes/chain-id): Sets block.chainid to a specified value in Forge tests
- [store](/reference/cheatcodes/store): Stores a value in a specific storage slot of an account
- [load](/reference/cheatcodes/load): Loads a value from a specific storage slot of an account
- [etch](/reference/cheatcodes/etch): Sets the bytecode of an address to custom code
- [deal](/reference/cheatcodes/deal): Sets the ETH balance of an address
- [prank](/reference/cheatcodes/prank): Sets msg.sender for the next call to a specified address
- [startPrank](/reference/cheatcodes/start-prank): Sets msg.sender for all subsequent calls until stopPrank is called
- [stopPrank](/reference/cheatcodes/stop-prank): Stops an active prank, resetting msg.sender and tx.origin
- [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
- [accesses](/reference/cheatcodes/accesses): Gets all storage slots that have been read or written to on an address
- [recordLogs](/reference/cheatcodes/record-logs): Starts recording all emitted events
- [getRecordedLogs](/reference/cheatcodes/get-recorded-logs): Gets all emitted events recorded by recordLogs
- [setNonce](/reference/cheatcodes/set-nonce): Sets the nonce of an account
- [getNonce](/reference/cheatcodes/get-nonce): Gets the nonce of an account or wallet
- [mockCall](/reference/cheatcodes/mock-call): Mocks calls to an address with specific calldata to return specified data
- [mockCalls](/reference/cheatcodes/mock-calls): Mocks calls to return different data for each successive invocation
- [mockCallRevert](/reference/cheatcodes/mock-call-revert): Mocks calls to an address to revert with specified data
- [mockFunction](/reference/cheatcodes/mock-function): Executes calls to an address using bytecode from another address
- [clearMockedCalls](/reference/cheatcodes/clear-mocked-calls): Clears all mocked calls
- [coinbase](/reference/cheatcodes/coinbase): Sets block.coinbase to a specified address
- [broadcast](/reference/cheatcodes/broadcast): Makes the next call create a transaction that can be signed and sent onchain
- [startBroadcast](/reference/cheatcodes/start-broadcast): Makes all subsequent calls create transactions that can be signed and sent onchain
- [stopBroadcast](/reference/cheatcodes/stop-broadcast): Stops collecting transactions for onchain broadcasting
- [pauseGasMetering](/reference/cheatcodes/pause-gas-metering): Pauses gas metering so gasleft() does not decrease
- [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
- [txGasPrice](/reference/cheatcodes/tx-gas-price): Sets tx.gasprice for the rest of the transaction
- [startStateDiffRecording](/reference/cheatcodes/start-state-diff-recording): Starts recording all state changes during execution
- [stopAndReturnStateDiff](/reference/cheatcodes/stop-and-return-state-diff): Stops state diff recording and returns all recorded state changes
- [snapshotState cheatcodes](/reference/cheatcodes/state-snapshots): Snapshot and restore EVM state
- [snapshotGas cheatcodes](/reference/cheatcodes/gas-snapshots): Capture and compare gas usage across test runs
- [isContext](/reference/cheatcodes/is-context): Checks the current Forge execution context
- [expectRevert](/reference/cheatcodes/expect-revert): Asserts that the next call reverts with optional message matching
- [expectEmit](/reference/cheatcodes/expect-emit): Asserts that specific events are emitted during the next call
- [expectCall](/reference/cheatcodes/expect-call): Asserts that a specific call is made during test execution
- [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
- [createFork](/reference/cheatcodes/create-fork): Creates a new fork from an RPC endpoint
- [selectFork](/reference/cheatcodes/select-fork): Activates a previously created fork
- [createSelectFork](/reference/cheatcodes/create-select-fork): Creates and activates a new fork in one call
- [activeFork](/reference/cheatcodes/active-fork): Returns the identifier of the currently active fork
- [rollFork](/reference/cheatcodes/roll-fork): Sets the block number of a fork
- [makePersistent](/reference/cheatcodes/make-persistent): Marks accounts as persistent across fork switches
- [revokePersistent](/reference/cheatcodes/revoke-persistent): Removes persistent status from accounts
- [isPersistent](/reference/cheatcodes/is-persistent): Checks if an account is marked as persistent across forks
- [allowCheatcodes](/reference/cheatcodes/allow-cheatcodes): Grants cheatcode access to an address in forking mode
- [transact](/reference/cheatcodes/transact): Fetches and executes a transaction from a fork
- [ffi](/reference/cheatcodes/ffi): Calls an arbitrary external command
- [prompt](/reference/cheatcodes/prompt): Displays an interactive prompt for user input in scripts
- [projectRoot](/reference/cheatcodes/project-root): Returns the root directory of the current Foundry project
- [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
- [sleep](/reference/cheatcodes/sleep): Pauses execution for a specified duration
- [unixTime](/reference/cheatcodes/unix-time): Returns the current unix timestamp in milliseconds
- [setEnv](/reference/cheatcodes/set-env): Sets an environment variable
- [envOr](/reference/cheatcodes/env-or): Reads an environment variable with a default fallback value
- [envBool](/reference/cheatcodes/env-bool): Reads an environment variable as bool or bool[]
- [envUint](/reference/cheatcodes/env-uint): Reads an environment variable as uint256 or uint256[]
- [envInt](/reference/cheatcodes/env-int): Reads an environment variable as int256 or int256[]
- [envAddress](/reference/cheatcodes/env-address): Reads an environment variable as address or address[]
- [envBytes32](/reference/cheatcodes/env-bytes32): Reads an environment variable as bytes32 or bytes32[]
- [envString](/reference/cheatcodes/env-string): Reads an environment variable as string or string[]
- [envBytes](/reference/cheatcodes/env-bytes): Reads an environment variable as bytes or bytes[]
- [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
- [parseJson](/reference/cheatcodes/parse-json): Parses JSON files and returns values as ABI-encoded bytes
- [parseToml](/reference/cheatcodes/parse-toml): Parses TOML files and returns values as ABI-encoded bytes
- [parseJsonKeys](/reference/cheatcodes/parse-json-keys): Gets list of keys present in a JSON string
- [parseTomlKeys](/reference/cheatcodes/parse-toml-keys): Gets list of keys present in a TOML string
- [serializeJson](/reference/cheatcodes/serialize-json): Serializes values as a stringified JSON object
- [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
- [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
- [addr](/reference/cheatcodes/addr): Computes the address for a given private key
- [skip](/reference/cheatcodes/skip): Marks a test as skipped conditionally
- [label](/reference/cheatcodes/label): Sets a label for an address in test traces
- [getLabel](/reference/cheatcodes/get-label): Retrieves the label for an address
- [deriveKey](/reference/cheatcodes/derive-key): Derives a private key from a mnemonic phrase
- [parseBytes](/reference/cheatcodes/parse-bytes): Parses a hex string into bytes
- [parseAddress](/reference/cheatcodes/parse-address): Parses a hex string into an address
- [parseUint](/reference/cheatcodes/parse-uint): Parses a string into a uint256
- [parseInt](/reference/cheatcodes/parse-int): Parses a string into an int256
- [parseBytes32](/reference/cheatcodes/parse-bytes32): Parses a hex string into bytes32
- [parseBool](/reference/cheatcodes/parse-bool): Parses a string into a bool
- [rememberKey](/reference/cheatcodes/remember-key): Stores a private key in forge's local wallet for broadcasting
- [toString](/reference/cheatcodes/to-string): Converts any type to its string representation
- [breakpoint](/reference/cheatcodes/breakpoint): Places a breakpoint for the debugger
- [createWallet](/reference/cheatcodes/create-wallet): Creates a new Wallet struct with address and keys
- [copyStorage](/reference/cheatcodes/copy-storage): Copies storage from one contract to another
- [setArbitraryStorage](/reference/cheatcodes/set-arbitrary-storage): Makes the storage of an address fully symbolic
- [RPC Cheatcodes](/reference/cheatcodes/rpc): Access configured RPC endpoints and make JSON-RPC calls
- [File Cheatcodes](/reference/cheatcodes/fs): File system operations for reading, writing, and managing files
- [Forge Standard Library Reference](/reference/forge-std/overview)
- [Std Logs](/reference/forge-std/std-logs)
- [Std Assertions](/reference/forge-std/std-assertions)
- [fail](/reference/forge-std/fail)
- [assertTrue](/reference/forge-std/assertTrue)
- [assertFalse](/reference/forge-std/assertFalse)
- [assertEq](/reference/forge-std/assertEq)
- [assertEqDecimal](/reference/forge-std/assertEqDecimal)
- [assertNotEq](/reference/forge-std/assertNotEq)
- [assertNotEqDecimal](/reference/forge-std/assertNotEqDecimal)
- [assertLt](/reference/forge-std/assertLt)
- [assertLtDecimal](/reference/forge-std/assertLtDecimal)
- [assertGt](/reference/forge-std/assertGt)
- [assertGtDecimal](/reference/forge-std/assertGtDecimal)
- [assertLe](/reference/forge-std/assertLe)
- [assertLeDecimal](/reference/forge-std/assertLeDecimal)
- [assertGe](/reference/forge-std/assertGe)
- [assertGeDecimal](/reference/forge-std/assertGeDecimal)
- [assertApproxEqAbs](/reference/forge-std/assertApproxEqAbs)
- [assertApproxEqAbsDecimal](/reference/forge-std/assertApproxEqAbsDecimal)
- [assertApproxEqRel](/reference/forge-std/assertApproxEqRel)
- [assertApproxEqRelDecimal](/reference/forge-std/assertApproxEqRelDecimal)
- [Std Cheats](/reference/forge-std/std-cheats)
- [skip](/reference/forge-std/skip)
- [rewind](/reference/forge-std/rewind)
- [hoax](/reference/forge-std/hoax)
- [startHoax](/reference/forge-std/startHoax)
- [deal](/reference/forge-std/deal)
- [deployCode](/reference/forge-std/deployCode)
- [deployCodeTo](/reference/forge-std/deployCodeTo)
- [bound](/reference/forge-std/bound)
- [changePrank](/reference/forge-std/change-prank)
- [makeAddr](/reference/forge-std/make-addr)
- [makeAddrAndKey](/reference/forge-std/make-addr-and-key)
- [noGasMetering](/reference/forge-std/noGasMetering)
- [assumeNotPrecompile](/reference/forge-std/assume-no-precompiles)
- [assumePayable](/reference/forge-std/assume-payable)
- [StdConfig](/reference/forge-std/std-config)
- [Std Errors](/reference/forge-std/std-errors)
- [assertionError](/reference/forge-std/assertionError)
- [arithmeticError](/reference/forge-std/arithmeticError)
- [divisionError](/reference/forge-std/divisionError)
- [enumConversionError](/reference/forge-std/enumConversionError)
- [encodeStorageError](/reference/forge-std/encodeStorageError)
- [popError](/reference/forge-std/popError)
- [indexOOBError](/reference/forge-std/indexOOBError)
- [memOverflowError](/reference/forge-std/memOverflowError)
- [zeroVarError](/reference/forge-std/zeroVarError)
- [Std Storage](/reference/forge-std/std-storage)
- [target](/reference/forge-std/target)
- [sig](/reference/forge-std/sig)
- [with_key](/reference/forge-std/with_key)
- [depth](/reference/forge-std/depth)
- [enable_packed_slots](/reference/forge-std/enable_packed_slots)
- [checked_write](/reference/forge-std/checked_write)
- [find](/reference/forge-std/find)
- [read](/reference/forge-std/read)
- [Std Math](/reference/forge-std/std-math)
- [abs](/reference/forge-std/abs)
- [delta](/reference/forge-std/delta)
- [percentDelta](/reference/forge-std/percentDelta)
- [Script Utils](/reference/forge-std/script-utils)
- [computeCreateAddress](/reference/forge-std/compute-create-address)
- [deriveRememberKey](/reference/forge-std/derive-remember-key)
- [Console Logging](/reference/forge-std/console-log)
- [Config Overview](/config/reference/overview)
- [Project](/config/reference/project)
- [Solidity compiler](/config/reference/solidity-compiler)
- [Testing](/config/reference/testing)
- [In-line test configuration](/config/reference/inline-test-config)
- [Formatter](/config/reference/formatter)
- [Linter Configuration](/config/reference/linter)
- [Documentation Generator](/config/reference/doc-generator)
- [Etherscan](/config/reference/etherscan)
- [Foundry - Ethereum Development Framework](/index)
- [Benchmarks](/benchmarks)
- [Changelog](/changelog/)
- [cast index](/reference/cast/)
- [References](/reference/README)
- [Default foundry configuration](/config/reference/default-config)
- [Config Reference](/config/reference/README)
- [cast da-estimate](/reference/cast/da-estimate)
- [cast index](/reference/cast/index-cmd)
- [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)
- [Config](/reference/forge-std/config)
- [forge generate](/reference/forge/generate)
- [forge generate test](/reference/forge/generate/test)
-->

## forge script

Run a smart contract as a script, building transactions that can be sent onchain

:::terminal

```bash
$ forge script --help
```

````txt
Usage: forge script [OPTIONS] <PATH> [ARGS]...

Arguments:
  <PATH>
          The contract you want to run. Either the file path or contract name.
          
          If multiple contracts exist in the same file you must specify the
          target contract with --target-contract.

  [ARGS]...
          Arguments to pass to the script function

Options:
  -j, --threads <THREADS>
          Number of threads to use. Specifying 0 defaults to the number of
          logical cores
          
          [aliases: --jobs]

      --target-contract <CONTRACT_NAME>
          The name of the contract you want to run
          
          [aliases: --tc]

  -s, --sig <SIG>
          The signature of the function you want to call in the contract, or raw
          calldata
          
          [default: run]

      --priority-gas-price <PRICE>
          Max priority fee per gas for EIP1559 transactions
          
          [env: ETH_PRIORITY_GAS_PRICE=]

      --legacy
          Use legacy transactions instead of EIP1559 ones.
          
          This is auto-enabled for common networks without EIP1559.

      --broadcast
          Broadcasts the transactions

      --batch
          Batch all broadcast transactions into a single Tempo batch
          transaction.
          
          When enabled, all vm.broadcast() calls are collected and sent as a
          single atomic type 0x76 transaction instead of individual
          transactions. This provides atomicity (all-or-nothing execution) and
          gas savings.

      --batch-size <BATCH_SIZE>
          Number of calls per Tempo batch transaction.
          
          When `--batch` is enabled, splits the collected calls into multiple
          batch transactions of at most this many calls each.
          
          [default: 100]

  -h, --help
          Print help (see a summary with '-h')

Display options:
  -v, --verbosity...
          Verbosity level of the log messages.
          
          Pass multiple times to increase the verbosity (e.g. -v, -vv, -vvv).
          
          Depending on the context the verbosity levels have different meanings.
          
          For example, the verbosity levels of the EVM are:
          - 2 (-vv): Print logs for all tests.
          - 3 (-vvv): Print execution traces for failing tests.
          - 4 (-vvvv): Print execution traces for all tests, and setup traces
          for failing tests.
          - 5 (-vvvvv): Print execution and setup traces for all tests,
          including storage changes and
            backtraces with line numbers.

  -q, --quiet
          Do not print log messages

      --json
          Format log messages as JSON

      --machine
          Activate the agent contract: disables color and wraps CLI-runtime
          exits (parse / usage / help / version) in a structured envelope.
          Per-command machine output (declared `output_mode`, progress and
          prompt suppression, canonical exit codes) is adopted incrementally —
          see `docs/agents/spec.md` §10. Mutually exclusive with `--json` and
          `--md` to keep machine-mode output unambiguous

      --md
          Format log messages as Markdown

      --color <COLOR>
          The color of the log messages

          Possible values:
          - auto:   Intelligently guess whether to use color output (default)
          - always: Force color output
          - never:  Force disable color output

Tempo:
      --tempo.session <SESSION_ID>
          Use a live Tempo wallet session for signing.
          
          When set, Foundry resolves the session from
          `$TEMPO_HOME/wallet/sessions.toml` and signs Tempo transactions with
          the session's temporary access key on behalf of its root account.

      --tempo.fee-token <FEE_TOKEN>
          Fee token address for Tempo transactions.
          
          When set, builds a Tempo (type 0x76) transaction that pays gas fees in
          the specified token.
          
          If this is not set, the fee token is chosen according to network
          rules. See the Tempo docs for more information.

      --tempo.expires <SECONDS>
          Opt into TIP-1009 expiring-nonce mode with a validity window.
          
          Convenience flag that combines `--tempo.expiring-nonce` with a
          relative `--tempo.valid-before`. Sets nonce_key = U256::MAX, nonce =
          0, and valid_before = now + seconds.
          
          Maximum value is 30 seconds. The transaction must be mined before the
          deadline or it becomes permanently invalid, giving safe retry
          semantics: retries produce a fresh tx hash and the old tx can never
          land late.

      --tempo.nonce-key <NONCE_KEY>
          Nonce key for Tempo parallelizable nonces.
          
          When set, builds a Tempo (type 0x76) transaction with the specified
          nonce key, allowing multiple transactions with the same nonce but
          different keys to be executed in parallel. If not set, the protocol
          nonce key (0) will be used.
          
          For more information see
          [https://docs.tempo.xyz/protocol/transactions/spec-tempo-transaction#parallelizable-nonces](https://docs.tempo.xyz/protocol/transactions/spec-tempo-transaction#parallelizable-nonces).

      --tempo.lane <NAME>
          Named nonce lane for Tempo parallelizable nonces.
          
          Resolves a friendly lane name (e.g. `deploy`, `payments`) to a
          `nonce_key` via a shared lanes file (default: `tempo.lanes.toml` at
          the project root). The lanes file is a TOML map of `name = <U256>`
          entries, e.g.:
          
          ```toml deploy   = 1 ops      = 2 payments = 3 ```
          
          Mutually exclusive with `--tempo.nonce-key`.

      --tempo.lanes-file <PATH>
          Path to the Tempo lanes file used by `--tempo.lane`.
          
          Defaults to `tempo.lanes.toml` at the project root.

      --tempo.sponsor <ADDRESS>
          Sponsor (fee payer) address for Tempo sponsored transactions

      --tempo.sponsor-signer <SIGNER>
          Sign Tempo sponsor digests in-band with the given signer URI.
          
          Supported forms include `env://VAR`, `keystore://PATH`,
          `account://NAME`, `ledger://`, `trezor://`, `aws://`, `gcp://`,
          `turnkey://`, and `private-key://KEY`.

      --tempo.sponsor-sig <SPONSOR_SIG>
          Sponsor (fee payer) signature for Tempo sponsored transactions.
          
          The sponsor signs the `fee_payer_signature_hash` to commit to paying
          gas fees on behalf of the sender. Provide as a hex-encoded signature.

      --sponsor-url <URL>
          Remote sponsor (fee payer) service URL.
          
          When set, the user-signed transaction is forwarded to this URL via
          `eth_signRawTransaction`. The service adds its fee payer signature and
          returns the fully-sponsored transaction, which is then submitted via
          the regular RPC. No local sponsor key is required.
          
          Example: `cast send 0x... --sponsor-url
          https://sponsor.tempo.xyz/tp_abc123`
          
          [env: TEMPO_SPONSOR_URL=]

      --tempo.print-sponsor-hash
          Print the sponsor signature hash and exit.
          
          Computes the `fee_payer_signature_hash` for the transaction so that a
          sponsor knows what hash to sign. The transaction is not sent.

      --tempo.key-id <KEY_ID>
          Access key ID for Tempo Keychain signature transactions.
          
          Used during gas estimation to override the key_id that would normally
          be recovered from the signature.

      --tempo.expiring-nonce
          Enable expiring nonce mode for Tempo transactions.
          
          Sets nonce to 0 and nonce_key to U256::MAX, enabling time-bounded
          transaction validity via `--tempo.valid-before` and
          `--tempo.valid-after`.

      --tempo.valid-before <VALID_BEFORE>
          Upper bound timestamp for Tempo expiring nonce transactions.
          
          The transaction is only valid before this unix timestamp. Requires
          `--tempo.expiring-nonce`.

      --tempo.valid-after <VALID_AFTER>
          Lower bound timestamp for Tempo expiring nonce transactions.
          
          The transaction is only valid after this unix timestamp. Requires
          `--tempo.expiring-nonce`.

      --skip-simulation
          Skips on-chain simulation

  -g, --gas-estimate-multiplier <GAS_ESTIMATE_MULTIPLIER>
          Relative percentage to multiply gas estimates by
          
          [default: 130]

      --unlocked
          Send via `eth_sendTransaction` using the `--sender` argument as sender

      --resume
          Resumes submitting transactions that failed or timed-out previously.
          
          It DOES NOT simulate the script again and it expects nonces to have
          remained the same.
          
          Example: If transaction N has a nonce of 22, then the account should
          have a nonce of 22, otherwise it fails.

      --multi
          If present, --resume or --verify will be assumed to be a multi chain
          deployment

      --debug
          Open the script in the debugger.
          
          Takes precedence over broadcast.

      --dump <PATH>
          Dumps all debugger steps to file

      --slow
          Makes sure a transaction is sent, only after its previous one has been
          confirmed and succeeded

      --non-interactive
          Disables interactive prompts that might appear when deploying big
          contracts.
          
          For more info on the contract size limit, see EIP-170:
          [https://eips.ethereum.org/EIPS/eip-170](https://eips.ethereum.org/EIPS/eip-170)

      --disable-code-size-limit
          Disables the contract size limit during script execution

      --disable-labels
          Disables the labels in the traces

      --etherscan-api-key <KEY>
          The Etherscan (or equivalent) API key
          
          [env: ETHERSCAN_API_KEY=]

      --verify
          Verifies all the contracts found in the receipts of a script, if any

      --with-gas-price <PRICE>
          Gas price for legacy transactions, or max fee per gas for EIP1559
          transactions, either specified in wei, or as a string with a unit
          type.
          
          Examples: 1ether, 10gwei, 0.01ether
          
          [env: ETH_GAS_PRICE=]

      --timeout <TIMEOUT>
          Timeout to use for broadcasting transactions
          
          [env: ETH_TIMEOUT=]

Cache options:
      --force
          Clear the cache and artifacts folder and recompile

Build options:
      --no-cache
          Disable the cache

      --dynamic-test-linking
          Enable dynamic test linking

      --skip <SKIP>...
          Skip building files whose names contain the given filter.
          
          `test` and `script` are aliases for `.t.sol` and `.s.sol`.

Linker options:
      --libraries <LIBRARIES>
          Set pre-linked libraries
          
          [env: DAPP_LIBRARIES=]

Compiler options:
      --ignored-error-codes <ERROR_CODES>
          Ignore solc warnings by error code

  -D, --deny <LEVEL>
          A compiler error will be triggered at the specified diagnostic level.
          
          Replaces the deprecated `--deny-warnings` flag.
          
          Possible values: - `never`: Do not treat any diagnostics as errors. -
          `warnings`: Treat warnings as errors. - `notes`: Treat both, warnings
          and notes, as errors.

          Possible values:
          - never:    Always exit with zero code
          - warnings: Exit with a non-zero code if any warnings are found
          - notes:    Exit with a non-zero code if any notes or warnings are
            found

      --no-auto-detect
          Do not auto-detect the `solc` version

      --use <SOLC_VERSION>
          Specify the solc version, or a path to a local solc, to build with.
          
          Valid values are in the format `x.y.z`, `solc:x.y.z` or
          `path/to/solc`.

      --offline
          Do not access the network.
          
          Missing solc versions will not be installed.

      --via-ir
          Use the Yul intermediate representation compilation pipeline

      --use-literal-content
          Changes compilation to only use literal content and not URLs

      --no-metadata
          Do not append any metadata to the bytecode.
          
          This is equivalent to setting `bytecode_hash` to `none` and
          `cbor_metadata` to `false`.

      --ast
          Includes the AST as JSON in the compiler output

      --evm-version <VERSION>
          The target EVM version

      --optimize [<OPTIMIZE>]
          Activate the Solidity optimizer
          
          [possible values: true, false]

      --optimizer-runs <RUNS>
          The number of runs specifies roughly how often each opcode of the
          deployed code will be executed across the life-time of the contract.
          This means it is a trade-off parameter between code size (deploy cost)
          and code execution cost (cost after deployment). An `optimizer_runs`
          parameter of `1` will produce short but expensive code. In contrast, a
          larger `optimizer_runs` parameter will produce longer but more gas
          efficient code

      --extra-output <SELECTOR>...
          Extra output to include in the contract's artifact.
          
          Example keys: evm.assembly, ewasm, ir, irOptimized, metadata
          
          For a full description, see
          [https://docs.soliditylang.org/en/v0.8.13/using-the-compiler.html#input-description](https://docs.soliditylang.org/en/v0.8.13/using-the-compiler.html#input-description)

      --extra-output-files <SELECTOR>...
          Extra output to write to separate files.
          
          Valid values: metadata, ir, irOptimized, ewasm, evm.assembly

Project options:
  -o, --out <PATH>
          The path to the contract artifacts folder

      --revert-strings <REVERT>
          Revert string configuration.
          
          Possible values are "default", "strip" (remove), "debug"
          (Solidity-generated revert strings) and "verboseDebug"

      --build-info
          Generate build info files

      --build-info-path <PATH>
          Output path to directory that build info files will be written to

      --root <PATH>
          The project's root path.
          
          By default root of the Git repository, if in one, or the current
          working directory.

  -C, --contracts <PATH>
          The contracts source directory

  -R, --remappings <REMAPPINGS>
          The project's remappings

      --remappings-env <ENV>
          The project's remappings from the environment

      --cache-path <PATH>
          The path to the compiler cache

      --lib-paths <PATH>
          The path to the library folder

      --hardhat
          Use the Hardhat-style project layout.
          
          This is the same as using: `--contracts contracts --lib-paths
          node_modules`.
          
          [aliases: --hh]

      --config-path <FILE>
          Path to the config file

Wallet options - raw:
      --interactives <NUM>
          Open an interactive prompt to enter your private key.
          
          Takes a value for the number of keys to enter.
          
          [default: 0]

  -i, --interactive
          Open an interactive prompt to enter your private key

      --private-keys <RAW_PRIVATE_KEYS>
          Use the provided private keys

      --private-key <RAW_PRIVATE_KEY>
          Use the provided private key

      --mnemonics <MNEMONICS>
          Use the mnemonic phrases of mnemonic files at the specified paths

      --mnemonic-passphrases <PASSPHRASE>
          Use a BIP39 passphrases for the mnemonic

      --mnemonic-derivation-paths <PATH>
          The wallet derivation path.
          
          Works with both --mnemonic-path and hardware wallets.

      --mnemonic-indexes <INDEXES>
          Use the private key from the given mnemonic index.
          
          Can be used with --mnemonics, --ledger, --aws and --trezor.
          
          [default: 0]

Wallet options - keystore:
      --keystore <PATHS>
          Use the keystore by its filename in the given folder
          
          [env: ETH_KEYSTORE=]
          [aliases: --keystores]

      --account <ACCOUNT_NAMES>
          Use a keystore from the default keystores folder
          (~/.foundry/keystores) by its filename
          
          [env: ETH_KEYSTORE_ACCOUNT=]
          [aliases: --accounts]

      --password <PASSWORDS>
          The keystore password.
          
          Used with --keystore.

      --password-file <PATHS>
          The keystore password file path.
          
          Used with --keystore.
          
          [env: ETH_PASSWORD=]

Wallet options - hardware wallet:
  -l, --ledger
          Use a Ledger hardware wallet

  -t, --trezor
          Use a Trezor hardware wallet

Wallet options - remote:
      --aws
          Use AWS Key Management Service.
          
          Ensure either one of AWS_KMS_KEY_IDS (comma-separated) or
          AWS_KMS_KEY_ID environment variables are set.

      --gcp
          Use Google Cloud Key Management Service.
          
          Ensure the following environment variables are set: GCP_PROJECT_ID,
          GCP_LOCATION, GCP_KEY_RING, GCP_KEY_NAME, GCP_KEY_VERSION.
          
          See: [https://cloud.google.com/kms/docs](https://cloud.google.com/kms/docs)

      --turnkey
          Use Turnkey.
          
          Ensure the following environment variables are set:
          TURNKEY_API_PRIVATE_KEY, TURNKEY_ORGANIZATION_ID, TURNKEY_ADDRESS.
          
          See: [https://docs.turnkey.com/getting-started/quickstart](https://docs.turnkey.com/getting-started/quickstart)

Wallet options - browser wallet:
      --browser
          Use a browser wallet

      --browser-port <PORT>
          Port for the browser wallet server
          
          [default: 9545]

      --browser-disable-open
          Whether to open the browser for wallet connection

EVM options:
  -r, --rpc-url <URL>
          The RPC endpoint
          
          [aliases: --fork-url]

  -k, --insecure
          Allow insecure RPC connections (accept invalid HTTPS certificates).
          
          When the provider's inner runtime transport variant is HTTP, this
          configures the reqwest client to accept invalid certificates.

      --rpc-timeout <RPC_TIMEOUT>
          Timeout for the RPC request in seconds.
          
          The specified timeout will be used to override the default timeout for
          RPC requests.
          
          Default value: 45
          
          [env: ETH_RPC_TIMEOUT=]

      --no-proxy
          Disable automatic proxy detection.
          
          Use this in sandboxed environments (e.g., Cursor IDE sandbox, macOS
          App Sandbox) where system proxy detection causes crashes. When
          enabled, HTTP_PROXY/HTTPS_PROXY environment variables and system proxy
          settings will be ignored.

      --compute-units-per-second <CUPS>
          Sets the number of assumed available compute units per second for this
          provider.
          
          default value: 330
          
          See also
          [https://docs.alchemy.com/reference/compute-units#what-are-cups-compute-units-per-second](https://docs.alchemy.com/reference/compute-units#what-are-cups-compute-units-per-second)

      --no-rpc-rate-limit
          Disables rate limiting for this node's provider.
          
          See also
          [https://docs.alchemy.com/reference/compute-units#what-are-cups-compute-units-per-second](https://docs.alchemy.com/reference/compute-units#what-are-cups-compute-units-per-second)
          
          [aliases: --no-rate-limit]

      --fork-block-number <BLOCK>
          Fetch state from a specific block number over a remote endpoint.
          
          See --rpc-url.

      --fork-retries <RETRIES>
          Number of retries.
          
          See --rpc-url.

      --fork-retry-backoff <BACKOFF>
          Initial retry backoff on encountering errors.
          
          See --rpc-url.

      --no-storage-caching
          Explicitly disables the use of RPC caching.
          
          All storage slots are read entirely from the endpoint.
          
          This flag overrides the project's configuration file.
          
          See --rpc-url.

      --initial-balance <BALANCE>
          The initial balance of deployed test contracts

      --sender <ADDRESS>
          The address which will be executing tests/scripts

      --ffi
          Enable the FFI cheatcode

      --live-logs
          Whether to show `console.log` outputs in realtime during script/test
          execution

      --always-use-create-2-factory
          Use the create 2 factory in all cases including tests and
          non-broadcasting scripts

      --create2-deployer <ADDRESS>
          The CREATE2 deployer address to use, this will override the one in the
          config

Executor environment config:
      --code-size-limit <CODE_SIZE>
          EIP-170: Contract code size limit in bytes. Useful to increase this
          because of tests. By default, it is 0x6000 (~25kb)

      --chain <CHAIN>
          The chain name or EIP-155 chain ID
          
          [aliases: --chain-id]

      --gas-price <GAS_PRICE>
          The gas price

      --block-base-fee-per-gas <FEE>
          The base fee in a block
          
          [aliases: --base-fee]

      --tx-origin <ADDRESS>
          The transaction origin

      --block-coinbase <ADDRESS>
          The coinbase of the block

      --block-timestamp <TIMESTAMP>
          The timestamp of the block

      --block-number <BLOCK>
          The block number

      --block-difficulty <DIFFICULTY>
          The block difficulty

      --block-prevrandao <PREVRANDAO>
          The block prevrandao value. NOTE: Before merge this field was mix_hash

      --block-gas-limit <BLOCK_GAS_LIMIT>
          The block gas limit
          
          [aliases: --gas-limit]

      --memory-limit <MEMORY_LIMIT>
          The memory limit per EVM execution in bytes. If this limit is
          exceeded, a `MemoryLimitOOG` result is thrown.
          
          The default is 128MiB.

      --disable-block-gas-limit
          Whether to disable the block gas limit checks
          
          [aliases: --no-block-gas-limit, --no-gas-limit]

      --enable-tx-gas-limit
          Whether to enable tx gas limit checks as imposed by Osaka (EIP-7825)
          
          [aliases: --tx-gas-limit]

      --isolate
          Whether to enable isolation of calls. In isolation mode all top-level
          calls are executed as a separate transaction in a separate EVM
          context, enabling more precise gas accounting and transaction state
          changes

      --retries <RETRIES>
          Number of attempts for retrying verification
          
          [default: 5]

      --delay <DELAY>
          Optional delay to apply in between verification attempts, in seconds
          
          [default: 5]

Networks:
  -n, --network <NETWORK>
          Enable a specific network family
          
          [possible values: ethereum, tempo]

      --celo
          Enable Celo network features

Verifier options:
      --verifier <VERIFIER>
          The contract verification provider to use

          Possible values:
          - etherscan
          - sourcify
          - blockscout
          - oklink
          - custom:     Custom verification provider, requires compatibility
            with the Etherscan API

      --verifier-api-key <VERIFIER_API_KEY>
          The verifier API KEY, if using a custom provider
          
          [env: VERIFIER_API_KEY=]

      --verifier-url <VERIFIER_URL>
          The verifier URL, if using a custom provider
          
          [env: VERIFIER_URL=]
````

:::
