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
, sourcify
和 blockscout
。默认: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.z
,solc:x.y.z
或 path/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
打印帮助信息。
例子
-
以脚本形式运行
BroadcastTest
,在链上广播产生的交易forge script ./test/Broadcast.t.sol --tc BroadcastTest --sig "deploy()" \ -vvv --fork-url $SEPOLIA_RPC_URL
-
在 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
-
恢复失败的脚本。以上述为例,删除
--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
-
验证刚刚部署的合约所使用的脚本
forge script script/NFT.s.sol --rpc-url $RPC_URL --verify --resume