forge script

名称

forge-script - 以脚本形式运行智能合约,建立可在链上发送的交易。

简介

forge script [options] path [args...]

描述

以脚本形式运行智能合约,建立可在链上发送的交易。

脚本可用于在实时合约上应用状态转换,或使用 Solidity 部署和初始化一组复杂的智能合约。

选项

--broadcast
    广播交易。

--debug
    在 调试器 中打开脚本。优先于 broadcast。

-g
--gas-estimate-multiplier multiplier
    相对百分比,所有 Gas 估计值都要乘以这个百分比。(即设置为 200 以使其加倍)     默认: 130

--json
    以 JSON 格式输出结果。     注意:该输出正在开发中,容易发生变化。

--legacy
    使用传统的交易而不是 EIP1559 交易。这对于没有 EIP1559 的普通网络来说是自动启用的。

--resume
    恢复并提交之前失败或超时的交易。

-s
--sig signature
    你想在合约中调用的函数的签名,或原始的 calldata。     默认:run()

--skip-simulation
    跳过链上模拟。

--skip
    跳过非必要合约目录的编译,如测试或脚本(用法 --skip test)。

--non-interactive
    移除交互式提示,如果合约接近 EIP-170 大小限制,则会出现交互式提示。

--slow
    确保只有在前一个交易得到确认和成功之后才发送交易。

--target-contract contract_name
    你想要运行的合约名称。

--priority-gas-price
    设置 EIP1559 交易的优先级 Gas 价格。当 Gas 价格波动较大且你希望确保你的交易被包含时,此选项非常有用。

--with-gas-price price
    设置 广播 传统交易的 Gas 价格,或广播 EIP1559 交易的最大费用。     注意:要在脚本的执行环境中设置 Gas 价格,请使用 --gas-price 代替(见下文)。

Etherscan Options

--chain chain_name
    Etherscan 的链.

--etherscan-api-key key
    Etherscan API 密钥,或 Etherscan 配置表 密钥。     环境变量:ETHERSCAN_API_KEY

Verification Options

--verify
    如果它发现一个匹配的广播日志,它就会尝试验证在交易回执中发现的每一个合约。

--verifier name
    验证提供者。可用选项。etherscan, sourcifyblockscout。默认:etherscan。注意:确保在 Blockscout 主页资源管理器 URL 的末尾添加 "/api?"。

--verifier-url url
    用于提交验证请求的可选验证网址。     环境变量:VERIFIER_URL

--delay delay
    可选的超时,在两次尝试之间,以秒为单位。默认为 3。

--retries retries
    重试的尝试次数。默认为 15。

缓存选项

--force
    清除缓存和 artifacts 文件夹并重新编译。

链接器选项

--libraries libraries
    设置预链接库。

    参数的格式必须是 <remapped path to lib>:<library name>:<address>,例如 src/Contract.sol:Library:0x...

    也可以在你的配置文件中设置为 libraries = ["<path>:<lib name>:<address>"].

编译器选项

--optimize
    激活 Solidity 优化器。

--optimizer-runs runs
    优化器 runs 的选项。

--via-ir
    使用 Yul 作为编译管道的中间语言。

--revert-strings
    如何处理 revert 和 require 的结果字符串。

--use solc_version
    指定 solc 的版本,或一个本地 solc 的路径,以进行编译。

    有效值的格式为 x.y.zsolc:x.y.zpath/to/solc

--offline
    不使用网络,缺失的 solc 版本将不会被安装。

--no-auto-detect
    不使用 solc 的自动检测。

--ignored-error-codes error_codes
    从错误代码中忽略 solc 警告。该参数是一个以逗号分隔的错误代码列表。

--extra-output selector
    额外的产出要包括在合约的 artifact 中。

    示例键: abi, storageLayout, evm.assembly, ewasm, ir, ir-optimized, metadata

    关于完整的描述, 请参阅 [Solidity docs][output-desc]。

--extra-output-files selector
    额外的输出写到单独的文件。

    示例键: abi, storageLayout, evm.assembly, ewasm, ir, ir-optimized, metadata.

    关于完整的描述, 请参阅 [Solidity docs][output-desc].

--evm-version version
    目标 EVM 版本

Project Options

--build-info
    生成构建信息文件。

--build-info-path path
    输出目录的路径,构建信息文件将被写入。

--root path
    项目的根路径。默认情况下,这是当前 git 仓库的根目录,或当前工作目录。

-C path
--contracts path
    合约源代码目录。     环境变量:DAPP_SRC

--lib-paths path
    库的文件夹路径。

-R remappings
--remappings remappings
    项目的重映射。

    该参数是一个逗号分隔的重映射列表,格式为 <source>=<dest>

--cache-path path
    编译器缓存的路径。

--config-path file
    配置文件的路径。

--hh
--hardhat
    这是一个方便的标志,与传递 --contracts contracts --lib-paths node-modules 相同。

-o path
--out path
    项目的 artifacts 目录。

--silent
    抑制所有输出。

构建选项

--names
    打印编译的合约名称。

--sizes
    打印已编译的非测试合约大小,如果其中任何一个超过大小限制,则以代码 1 退出。

Watch Options

-w [path...]
--watch [path...]
    监听特定的文件或文件夹。

    默认情况下,项目的源目录被监听着。

-d delay
--delay delay
    文件更新的退避延迟。

    在延迟期间,传入的变化事件被累积,只有在延迟过后,才会采取相应的行动。     请注意,这并不意味着一个命令会被启动:如果给出了 --no-restart,而一个命令已经在运行,那么这个动作的结果将是什么都不做。

    默认为 50ms。默认解析为十进制的秒,但使用带有 ms 后缀的整数可能更方便。

    当使用 --poll 模式时,你需要一个更大的持续时间,否则会有磁盘 I/O 过载的风险。

--no-restart
    在命令运行时不要重新启动。

--run-all
    当有变化时,明确地对所有文件重新运行命令。

Wallet Options - Raw

-i --interactives num
    打开一个交互式提示,输入你的私钥。接受一个要输入的密钥数量的值。     默认值:0

--mnemonic-indexes indexes
    使用来自给定助记词的私钥。与 --mnemonic-path 一起使用。     默认值:0

--mnemonic-paths paths
    使用指定路径下的助记词文件。

--private-key raw_private_key
    使用提供的私钥。

--private-keys raw_private_keys
    使用提供的私钥。

Wallet Options - Keystore

--keystores paths
    使用指定文件夹或文件中的密钥库。     环境变量:ETH_KEYSTORE

--account account-name
    使用默认密钥库文件夹(~/.foundry/keystores)中的密钥库文件名。     环境变量:ETH_KEYSTORE_ACCOUNT

--password passwords
    密钥库的密码。与 --keystore 一起使用。

Wallet Options - Hardware Wallet

-t
--trezor
    使用 Trezor 硬件钱包。

-l
--ledger
    使用 Ledger 硬件钱包。

--hd-paths paths
    与硬件钱包一起使用的派生路径。

Wallet Options - Remote

-a addresses
--froms addresses
    与 RPC 上的指定账户签署交易。     环境变量:ETH_FROM

EVM 选项

-f url
--rpc-url url
--fork-url url
    通过远程端点获取状态,而不是从一个空的状态开始。

    如果你想从一个特定的区块号码中获取状态,请参阅 --fork-block-number.

--fork-block-number block
    通过一个远程端点从一个特定的区块号中获取状态。请见 --fork-url.

--fork-retry-backoff <BACKOFF>
     初始化遇到错误时的重试退避。

--no-storage-caching
    明确禁止使用 RPC 缓存。

    所有存储槽完全从端点读取。请见 --fork-url

-v
--verbosity
    EVM 的日志级别。

    多次传递,以提高日志级别 (例如 -v, -vv, -vvv)。

    日志级别:     - 2: 打印所有测试的日志     - 3: 打印失败测试的执行追踪     - 4: 对所有测试进行跟踪,并对失败的测试进行设置跟踪     - 5: 打印所有测试的执行和设置跟踪

--sender address
    用作执行测试的地址

--initial-balance balance
    已部署合约的初始余额

--ffi
    开启 FFI 作弊码

Executor 选项

--base-fee <FEE>
--block-base-fee-per-gas <FEE>
    一个区块的基本费用(单位:Wei)。

--block-coinbase address
    区块的 coinbase。

--block-difficulty difficulty
    区块的难度。

--block-gas-limit gas_limit
    区块的 Gas 限制。

--block-number block
    区块号。

--block-timestamp timestamp
    区块的时间戳(以秒为单位)。

--chain-id chain_id
    链 ID。

--gas-limit gas_limit
    区块的 Gas 限制。

--gas-price gas_price
    Gas 价格(单位:Wei)。

--tx-origin address
    交易的 origin。

普通选项

-h
--help
    打印帮助信息。

例子

  1. 以脚本形式运行 BroadcastTest,在链上广播产生的交易

    forge script ./test/Broadcast.t.sol --tc BroadcastTest --sig "deploy()" \
                 -vvv --fork-url $SEPOLIA_RPC_URL
    
  2. 在 Polygon 上部署合约(请参阅脚本教程以获取示例脚本)。每个网络的验证器网址都不同。

    forge script script/NFT.s.sol:MyScript --chain-id 137 --rpc-url $RPC_URL \
        --etherscan-api-key $POLYGONSCAN_API_KEY --verifier-url https://api.polygonscan.com/api \
        --broadcast --verify -vvvv
    
  3. 恢复失败的脚本。以上述为例,删除--broadcast,添加--resume

    forge script script/NFT.s.sol:MyScript --chain-id 137 --rpc-url $RPC_URL \
        --etherscan-api-key $POLYGONSCAN_API_KEY --verifier-url https://api.polygonscan.com/api \
        --verify -vvvv --resume
    
  4. 验证刚刚部署的合约所使用的脚本

    forge script script/NFT.s.sol --rpc-url $RPC_URL --verify --resume