forge create
Deploy a smart contract
$ forge create --help
Usage: 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
--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')
Cache options:
--force
Clear the cache and artifacts folder and recompile
Build options:
--no-cache
Disable the cache
--eof
Use EOF-enabled solc binary. Enables via-ir and sets EVM version to
Prague. Requires Docker to be installed.
Note that this is a temporary solution until the EOF support is merged
into the main solc release.
--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
--deny-warnings
Warnings will trigger a compiler error
--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
--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>
--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.
Ethereum options:
-r, --rpc-url <URL>
The RPC endpoint
[env: ETH_RPC_URL=]
--flashbots
Use the Flashbots RPC URL with fast mode
(<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>
--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=]
-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
Verifier options:
--verifier <VERIFIER>
The contract verification provider to use
[default: etherscan]
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=]
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
-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.