在之前的文章里,我们介绍了如何使用Foundry来对我们的合约进行测试。现在合约测试完成后,我们需要将合约部署到本地网络上,以便其他用户可以调用。
准备工作
与测试合约类似,Foundry支持通过脚本的方式来部署合约到本地网络。首先,需要我们在之前的项目下新建script
目录,并新建deploy.s.sol
文件,内容如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../src/String.sol"; // 需要部署的合约
import "forge-std/Script.sol";
contract DeployString is Script{
function run() public{
uint256 deployerPrivateKey = vm.envUint("RAW_PRIVATE_KEY");
vm.startBroadcast(deployerPrivateKey);
SimpleStorage ss = new SimpleStorage();
vm.stopBroadcast();
console.log("SimpleStorage address: ",address(ss));
}
}
在上面的脚本中,我们使用了环境变量RAW_PRIVATE_KEY
来获取部署者的私钥,并使用vm.startBroadcast
方法开启广播模式,然后使用new
关键字创建了一个SimpleStorage
合约的实例,并使用vm.stopBroadcast
方法停止广播模式。最后,我们使用console.log
方法输出了SimpleStorage
合约的地址。
部署合约
在开始部署合约之前,我们还需要配置两个环境变量:
RAW_PRIVATE_KEY
,存储部署者的私钥,格式为十六进制字符串。ETH_RPC_URL
,本地测试网络的RPC URL。
环境变量配置完成后,我们可以运行forge script
命令来部署合约:
$ forge script script/deployString.s.sol --broadcast --legacy
[⠢] Compiling...
No files changed, compilation skipped
Script ran successfully.
== Logs ==
SimpleStorage address: 0xb9f4084fFef8e747dC607879dc87cdF4f0D7041C
## Setting up 1 EVM.
==========================
Chain 42958543
Estimated gas price: 0.000000001 gwei
Estimated total gas used for script: 332722
Estimated amount required: 0.000000000000332722 ETH
==========================
##### 42958543
✅ [Success] Hash: 0x46d38f9576fb621fab64ce51f62136ca0f98184e30ffd8a453ffbcd08e5348d9
Contract Address: 0xb9f4084fFef8e747dC607879dc87cdF4f0D7041C
Block: 26
Paid: 0.00000000000025594 ETH (255940 gas * 0.000000001 gwei)
✅ Sequence #1 on 42958543 | Total Paid: 0.00000000000025594 ETH (255940 gas * avg 0.000000001 gwei)
==========================
ONCHAIN EXECUTION COMPLETE & SUCCESSFUL.
Transactions saved to: /root/vscode/contract/broadcast/deployString.s.sol/42958543/run-latest.json
Sensitive values saved to: /root/vscode/contract/cache/deployString.s.sol/42958543/run-latest.json
部署成功后,我们可以看到SimpleStorage
合约的地址。
因为我本地的测试网络不支持 EIP1559,所以使用
--legacy
参数
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特
—