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')
Display options:
      --json
          Print the deployment information as JSON
Cache options:
      --force
          Clear the cache and artifacts folder and recompile
Build options:
      --no-cache
          Disable the cache
      --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`.
      --silent
          Don't print anything on startup
      --ast
          Includes the AST as JSON in the compiler output
      --evm-version <VERSION>
          The target EVM version
      --optimize
          Activate the Solidity optimizer
      --optimizer-runs <RUNS>
          The number of optimizer runs
      --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.
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=]
  -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 inbetween 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]
      --verifier-url <VERIFIER_URL>
          The verifier URL, if using a custom provider
          
          [env: VERIFIER_URL=]