聚焦资讯
服务于区块链创业者

使用 Foundry 命令和脚本,快速部署与开源一个合约

chatGPT账号

图片来源:由无界AI生成

cast命令初步使用

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 xxx
    也可以使用 –account 来替换私钥参数
    forge create src/MyContract.sol:MyContract --account xxx --rpc-url xxx
    如果需要简化输入合约的路径,也可以在 remappings 中添加一个键值对做个映射。
  • forge script
    在脚本合约中,我们通过new合约的方式来创建(部署)一个合约实例,
    完整脚本如下:
// 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不一样,前者是模拟广播交易,而后者才是实际在链上广播交易
  • 建议每次运行前运行 forge clean命令,清除缓存
    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地址。
免责声明

发文时比特币价格:$68249

免责声明:

本文不代表行至网立场,且不构成投资建议,请谨慎对待。用户由此造成的损失由用户自行承担,与行至网没有任何关系;

行至网不对网站所发布内容的准确性,真实性等任何方面做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,行至网对项目的真实性,准确性等任何方面均不做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,行至网不对其构成任何投资建议,用户由此造成的损失由用户自行承担,与行至网没有任何关系;

行至区块链研究院声明:行至区块链研究院内容由行至网发布,部分来源于互联网和行业分析师投稿收录,内容为行至区块链研究院加盟专职分析师独立观点,不代表行至网立场。

chatGPT账号
赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权,未经允许不得转载。
文章名称:《使用 Foundry 命令和脚本,快速部署与开源一个合约》
文章链接:https://www.xingzhi.io/definance/35662.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

服务于区块链创业者

业务范围商务合作

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的区块链世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录后才能复制或下载网站内容