在之前的文章里,我们介绍了如何使用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: 恋水无意
腾讯云开发者社区:孟斯特