forge create
Deploy a smart contract
$ forge create --helpUsage: forge create [OPTIONS] <CONTRACT>
Arguments:
<CONTRACT>
The contract identifier in the form `<path>:<contractname>`
Options:
--constructor-args <ARGS>...
The constructor arguments
--constructor-args-path <PATH>
The path to a file containing the constructor arguments
--broadcast
Broadcast the transaction
--verify
Verify contract after creation
--unlocked
Send via `eth_sendTransaction` using the `--from` argument or
`$ETH_FROM` as sender
--show-standard-json-input
Prints the standard json compiler input if `--verify` is provided.
The standard json compiler input can be used to manually submit
contract verification in the browser.
--timeout <TIMEOUT>
Timeout to use for broadcasting transactions
[env: ETH_TIMEOUT=]
-h, --help
Print help (see a summary with '-h')
-j, --threads <THREADS>
Number of threads to use. Specifying 0 defaults to the number of
logical cores
[aliases: --jobs]
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
Transaction options:
--gas-limit <GAS_LIMIT>
Gas limit for the transaction
[env: ETH_GAS_LIMIT=]
--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=]
--priority-gas-price <PRICE>
Max priority fee per gas for EIP1559 transactions
[env: ETH_PRIORITY_GAS_PRICE=]
--value <VALUE>
Ether to send in the transaction, either specified in wei, or as a
string with a unit type.
Examples: 1ether, 10gwei, 0.01ether
--nonce <NONCE>
Nonce for the transaction
--legacy
Send a legacy transaction instead of an EIP1559 transaction.
This is automatically enabled for common networks without EIP1559.
--blob
Send a EIP-4844 blob transaction
--blob-gas-price <BLOB_PRICE>
Gas price for EIP-4844 blob transaction
[env: ETH_BLOB_GAS_PRICE=]
--auth <AUTH>
EIP-7702 authorization list.
Can be either a hex-encoded signed authorization or an address.
--access-list [<ACCESS_LIST>]
EIP-2930 access list.
Accepts either a JSON-encoded access list or an empty value to create
the access list via an RPC call to `eth_createAccessList`. To retrieve
only the access list portion, use the `cast access-list` command.
Tempo:
--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.
Rpc options:
-r, --rpc-url <URL>
The RPC endpoint, default value is http://localhost:8545
[env: ETH_RPC_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.
--flashbots
Use the Flashbots RPC URL with fast mode
([https://rpc.flashbots.net/fast](https://rpc.flashbots.net/fast)).
This shares the transaction privately with all registered builders.
See:
[https://docs.flashbots.net/flashbots-protect/quick-start#faster-transactions](https://docs.flashbots.net/flashbots-protect/quick-start#faster-transactions)
--jwt-secret <JWT_SECRET>
JWT Secret for the RPC endpoint.
The JWT secret will be used to create a JWT for a RPC. For example,
the following can be used to simulate a CL `engine_forkchoiceUpdated`
call:
cast rpc --jwt-secret <JWT_SECRET> engine_forkchoiceUpdatedV2
'["0x6bb38c26db65749ab6e472080a3d20a2f35776494e72016d1e339593f21c59bc",
"0x6bb38c26db65749ab6e472080a3d20a2f35776494e72016d1e339593f21c59bc",
"0x6bb38c26db65749ab6e472080a3d20a2f35776494e72016d1e339593f21c59bc"]'
[env: ETH_RPC_JWT_SECRET=]
--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=]
--rpc-headers <RPC_HEADERS>
Specify custom headers for RPC requests
[env: ETH_RPC_HEADERS=]
-e, --etherscan-api-key <KEY>
The Etherscan (or equivalent) API key
[env: ETHERSCAN_API_KEY=]
-c, --chain <CHAIN>
The chain name or EIP-155 chain ID
[env: CHAIN=]
Wallet options - raw:
-f, --from <ADDRESS>
The sender account
[env: ETH_FROM=]
-i, --interactive
Open an interactive prompt to enter your private key
--private-key <RAW_PRIVATE_KEY>
Use the provided private key
--mnemonic <MNEMONIC>
Use the mnemonic phrase of mnemonic file at the specified path
--mnemonic-passphrase <PASSPHRASE>
Use a BIP39 passphrase for the mnemonic
--mnemonic-derivation-path <PATH>
The wallet derivation path.
Works with both --mnemonic-path and hardware wallets.
--mnemonic-index <INDEX>
Use the private key from the given mnemonic index.
Used with --mnemonic-path.
[default: 0]
--retries <RETRIES>
Number of attempts for retrying verification
[default: 5]
--delay <DELAY>
Optional delay to apply in between verification attempts, in seconds
[default: 5]
Wallet options - keystore:
--keystore <PATH>
Use the keystore in the given folder or file
[env: ETH_KEYSTORE=]
--account <ACCOUNT_NAME>
Use a keystore from the default keystores folder
(~/.foundry/keystores) by its filename
[env: ETH_KEYSTORE_ACCOUNT=]
--password <PASSWORD>
The keystore password.
Used with --keystore.
--password-file <PASSWORD_FILE>
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 the AWS_KMS_KEY_ID environment variable is 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:
--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
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
[default: sourcify]
--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=]
Display options:
--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
--json
Format log messages as JSON
--md
Format log messages as Markdown
-q, --quiet
Do not print log messages
-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.