使用Foundry命令和脚本,快速部署与开源一个合约cast命令初步使用cast与forge不同,是用于与以太坊合约进行交互的工具。而forge侧重于合约的开发和测试,两者配合使用。常用钱包命令castwallet-h查看帮助castwalletnew/new-
cast 与 forge 不同,是用于与以太坊合约进行交互的工具。
而 forge 侧重于合约的开发和测试,两者配合使用。
cast wallet -h 查看帮助cast wallet new/new-mnemonic 生成一个私钥或助记词cast wallet import 导入私钥到内置 keystore 中,后续可以通过 --account参数来引用
一般有两种方式,可以通过命令 forge create 或 forge script 来部署,但后者需要编写脚本。
forge create路径:合约名 的形式找到需要部署的合约forge create src/MyContract.sol:MyContract --private-key 私钥 --rpc-url xxx--constructor-args xxx xxx来输入参数。forge create src/MyContract.sol:MyContract --constructor-args xxx --private-key 私钥 --rpc-url xxxforge create src/MyContract.sol:MyContract --account xxx --rpc-url xxxforge scriptnew合约的方式来创建(部署)一个合约实例,// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "forge-std/Script.sol";
import "forge-std/console.sol";
//import "@openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
import {MyToken} from "src/DeployLearning/ERC20.sol";
contract Deploy is Script {
function run() external {
vm.startBroadcast(key);
new MyToken("Dwoura","Dw"); // new导入的合约,并携带构造参数
vm.stopBroadcast();
}
}forge script script/MyContract.s.sol --account tester --rpc-url http://127.0.0.1:8545 --broadcast --verify -vvvv
--broadcast: 在部署完成后,自动广播交易。
--verify: 部署后验证合约,包括检查合约地址是否有效。
-vvvv: 输出详细的调试信息
--verify 参数即可。对于forge create, 会自动使用env中的ETHERSCAN_API_KEY参数;forge script 则是使用到了forge.toml 文件中的 [rpc-endpoints]下的自定义变量。forge verify-contract 合约地址 合约路径:合约名 --chain 链名。--constructor-args,参数用到构造函数的字节码。// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor(string memory name_, string memory symbol_) ERC20(name_, symbol_) {
_mint(msg.sender, 1e10*1e18);
}
}
我们可以通过cast abi-encode "constructor(string memory name_, string memory symbol_)" "xxx" "xxx" 来获取字节码,其中的 xxx 是已部署合约的两个函数参数。
forge verify-contract 合约地址 合约路径:合约名 --chain 链名 --constructor-args 生成的字节码。
或者在cast的时候输出到一个文件中> data.txt,改为使用参数 --constructor-args-path data.txt。
--account 参数,通过 keyStore 可以避免使用明文私钥,保证安全性。vm.broadcast 与命令中的--broadcast不一样,前者是模拟广播交易,而后者才是实际在链上广播交易。 ERROR foundry_compilers_artifacts_solc::sources: error=的错误就是因为缓存问题引起的。forge create的--rpc-url 是通过读 .env 文件中的ETH_RPC_URL,而 forge script 的--rpc-url 需要 foundry.toml 文件中的rpc_endpoints下自定义的rpc-url变量。forge script的方式进行部署,可以很方便地选择定义好的rpc网络,而不需要反复地在ETH_RPC_URL 设置值rpc地址。如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!