智能合约本地开发利器-Foundry

智能合约本地开发利器-Foundry

分类: Web3

目前为止,我们都是在 Remix 上来开发以及测试智能合约代码的。Remix 对区块链新手来说非常友好,我们不用去关心相关的环境以及配置,可以快速验证智能合约代码。但是 Remix 也有其局限性,在后续的学习过程中,我们将使用 Foundry 来作为我们本地的智能合约开发环境。

Remix 和 Foundry 都是非常流行的智能合约开发环境,它们各自有着不同的特点和适用场景。

选择适合你的开发环境

Remix

Remix是一个开源的、基于浏览器的IDE,专为以太坊智能合约的开发和管理设计。它主要适用于小型项目或初学者,因为它的界面友好,且不需要复杂的设置或安装过程。Remix 支持 Solidity 语言,可以直接在浏览器中编写、编译、测试和部署智能合约。

主要特点:

  • 易于使用:基于 Web 的界面,无需安装。
  • 即时反馈:代码更改后立即编译,快速看到结果。
  • 内置测试环境:包括 JavaScript VM,允许在没有任何区块链安装的情况下测试合约。
  • 集成调试工具:提供调试功能,帮助开发者找到合约中的问题。

Foundry

Foundry 是一个比较新的工具,由 Paradigm 开发,它是基于 Rust 的智能合约开发框架,包括 Forge(用于测试)、Cast(用于交云端互动)、Anvil(本地以太坊模拟器)和 Chisel(交互式编程环境)。Foundry 旨在提供高效率和高性能的开发流程,特别适合需要高级测试功能和连续集成/持续部署(CI/CD)的复杂项目。

主要特点:

  • 高性能:基于Rust,执行速度快。
  • 灵活的测试框架:提供丰富的测试功能,包括模拟 EVM 环境、自定义测试用例等。
  • 集成开发流程:适合用于大型项目和团队合作,支持高级的开发流程和自动化部署。
  • 可扩展性和可组合性:支持复杂的智能合约开发需求,包括多合约交互和复杂的逻辑测试。

对比

  • 使用便利性:Remix 适合初学者和小型项目,因为它易于上手且不需要安装任何软件。Foundry则适合于需要进行复杂测试和持续集成的大型项目。
  • 开发环境:Remix 是基于浏览器的,而 Foundry 是基于本地开发环境,需要在本地计算机上安装和配置。
  • 性能:Foundry 基于 Rust,性能上有优势,尤其是在运行大量测试和复杂项目时。
  • 测试和调试:Foundry 提供了更高级的测试框架和工具,而 Remix 的测试和调试功能相对简单,但对新手友好。

总之,选择哪个环境取决于项目的需求、团队的规模以及开发者的偏好。对于想要快速开始和学习智能合约开发的个人来说,Remix 是一个很好的选择。而对于那些寻求高效率开发流程和复杂测试能力的专业团队和项目,Foundry 可能更适合。

Foundry 开发环境搭建

我自己的笔记本是 Windows11,所以在这里只讨论基于 Windows11 的 Foundry 开发环境搭建,Mac 以及 Linux 还请参考官方文档。

WSL

首先在 Windows11 上,推荐使用 WSL 来搭建,可以避免一些莫名其妙的问题。只需要在 Windows 终端程序中选择 Ubuntu 即可安装并打开 WSL 的终端窗口,这里不再赘述。

file

安装 Foundry

访问 官方网站 复制脚本,贴到终端窗口执行即可安装。执行完毕后,输入 foundryup 即可安装相关组件,包括:Forge(用于测试)、Cast(用于交云端互动)、Anvil(本地以太坊模拟器)和 Chisel(交互式编程环境)。

file

安装完毕后,可以通过如下命令来查看版本信息。

$ forge —version

VSCode 扩展

为了方便我们开发,需要在 VSCode 上安装额外的扩展,用来支持 Solidity 语言。

file

file

settings中也要进行一下配置

{
    "editor.formatOnSave": true,
    "[solidity]": {
        "editor.defaultFormatter": "NomicFoundation.hardhat-solidity"
    }
}

常用命令

初始化项目

$ forge init BlockChainContactList-Foundry
$ cd BlockChainContactList-Foundry
$ tree . -d -L 1
.
├── cache
├── lib
├── out
├── script
├── src
└── test

anvil 可以启动一个本地的 EVM 环境,并提供一些测试账户。在 MetaMask 我们可以手动添加本地的区块链网络。

file

创建智能合约

$ forge create BlockChainContactList --rpc-url [http://127.0.0.1:8545](http://127.0.0.1:8545) --interactive
[] Compiling...
No files changed, compilation skipped
Enter private key:
Deployer: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
Deployed to: 0x5FbDB2315678afecb367f032d93F642f64180aa3
Transaction hash: 0xa9cb6176c5eb015f97d8337aca3bceee106950d7266ec7dbddae1317695cbe22

编写部署脚本

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

import {Script} from "forge-std/Script.sol";
import {BlockChainContactList} from "../src/BlockChainContactList.sol";

contract DeployBlockChainContactList is Script {
    function run() external returns (BlockChainContactList) {
        vm.startBroadcast();

        BlockChainContactList blockChainContactList = new BlockChainContactList();

        vm.stopBroadcast();
        return blockChainContactList;
    }
}
$ forge script script/DeployBlockChainContactList.s.sol --rpc-url http://127.0.0.1:8545 --broadcast --private-key 0xa9cb6176c5eb015f97d8337aca3bceee106950d7266ec7dbddae1317695cbe22

cast 转换小工具

$ cast --to-base 0x714c2 dec

使用 env 配置文件

PRIVATE_KEY=XXXXXXXXX
RPC_URL=http://0.0.0.0:8545
ETHERSCAN_API_KEY=XXXX

使用 source .env 命令之后,部署命令可以修改为:

$ forge script script/DeployBlockChainContactList.s.sol --rpc-url $RPC_URL --broadcast --private-key $PRIVATE_KEY

为了更好的安全性,在实际生产环境部署合约时,应该使用如下两种方式:

  • a password encrypted keystore
  • something like thirdweb deploy

在 命令行调用智能合约:

$ cast send 0x5FbDB2315678afecb367f032d93F642f64180aa3 "addContact(string,string)" murphy 18638229999 --rpc-url $RPC_URL --private-key $
PRIVATE_KEY

读取数据:

$ cast call 0x5FbDB2315678afecb367f032d93F642f64180aa3 "getAllContactNames()" --rpc-url $RPC_URL --private-key $PRIVATE_KEY

然后,我们可以借助 alchemy 来部署到测试网络,在此就不再赘述了。

本文由博客一文多发平台 OpenWrite 发布!

  • 23
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值