Web3:在 VSCode 中基于 Foundry 快速构建 Solidity 智能合约本地开发环境

相关文章推荐链接
Web3专栏https://blog.csdn.net/qq_42392981/category_13016259.html

在 VSCode 中基于 Foundry 快速构建 Solidity 智能合约本地开发环境

    • 引言
    • 1. 开发环境准备(Windows)
      • 1.1 安装 VSCode
      • 1.2 安装推荐插件
      • 1.3 安装 Foundry
      • 1.4 验证 Forge 和 Anvil 安装成功
    • 2. 创建 Solidity 项目(使用 Foundry)
      • 2.1 使用 Forge Init 创建项目
      • 2.2 项目目录结构解析
      • 2.3 配置文件 foundry.toml 的作用说明
    • 3. 编写智能合约与单元测试
      • 3.1 编写简单合约示例(Counter.sol)
      • 3.2 编写测试用例(使用 Forge 测试框架)
      • 3.3 运行本地测试命令
    • 4. 使用 Foundry 搭建本地测试网络
      • 4.1 启动本地节点 Anvil
      • 4.2 使用 Anvil 模拟本地区块链环境
      • 4.3 在本地部署合约(使用 Forge Script)
    • 5. 使用 Anvil 生成的私钥通过欧易连接本地区块链
      • 5.1 下载欧易插件
      • 5.2 导入私钥
      • 5.3 设置自定义网络
    • 6. 脚本部署与调试演示
      • 6.1 编写部署脚本(script/Deploy.s.sol)
      • 6.2 运行部署脚本连接 Anvil
      • 6.3 在终端查看交易过程和输出
    • 结语
    • 参考链接

引言

作为 Solidity 初学者或中级开发者,你可能希望在本地环境中快速开发和测试智能合约。Foundry 是一个高效的以太坊开发工具链,支持 Solidity 合约的编写、测试和部署,而 VSCode 则提供优秀的代码编辑支持。本教程将指导你在 Windows 系统下搭建环境、创建项目、编写合约、进行单元测试,并使用本地网络进行部署和调试。所有步骤均针对 Windows 环境,确保易于复现。

前提条件

  • Windows 10 或更高版本。
  • 基本命令行操作知识(Git bash)。
  • 安装 Git(如果未安装,可从 Git 官网 下载)。

1. 开发环境准备(Windows)

1.1 安装 VSCode

  1. 访问 VSCode 官网 下载 Windows 安装包。
  2. 双击安装包,按照提示完成安装。
  3. 启动 VSCode,确认界面正常。

**建议截图位置**:VSCode 启动后的欢迎界面。

1.2 安装推荐插件

在 VSCode 中打开扩展面板(Ctrl + Shift + X),搜索并安装以下插件:

  • Solidity(由 Juan Blanco 开发):提供 Solidity 语法高亮、自动补全和 linting。
  • Prettier - Code formatter:自动格式化代码,确保一致性。
  • Solidity Visual Developer:增强 Solidity 可视化,如函数调用图和审计工具。

安装后,重启 VSCode 以生效。

**建议截图位置**:扩展面板显示已安装插件列表。

1.3 安装 Foundry

可以参考我的另外一篇详细安装Foundry的文章:Foundry安装和使用指南

官网安装指南:https://getfoundry.sh/

Foundry 通过 foundryup 安装脚本进行安装。在 Windows 上,使用 Git bash 执行以下步骤:
在这里插入图片描述

  1. 打开 Git bash。

  2. 执行以下命令下载并安装 Foundry:

    curl -L https://foundry.paradigm.xyz | Invoke-Expression
    

    这将安装 foundryup,然后运行 foundryup 更新到最新版本。

    注意:如果 curl 未安装,确保你的 Windows 已启用(或通过 Git Bash 使用)。

**建议截图位置**:PowerShell 中运行  后的成功输出。

1.4 验证 Forge 和 Anvil 安装成功

在 Git Bash 中运行以下命令验证:

forge --version
anvil --version

输出类似 forge Version 0.x.xanvil Version 0.x.x 表示安装成功。

**建议截图位置**:验证命令的输出结果。


2. 创建 Solidity 项目(使用 Foundry)

2.1 使用 Forge Init 创建项目

  1. 在 Git Bash 中导航到你想要的目录(例如:cd C:\Projects)。

  2. 创建并初始化项目:

    forge init my-solidity-project
    cd my-solidity-project
    

    这将生成一个模板项目。

**建议截图位置**:项目初始化后的终端输出。

2.2 项目目录结构解析

初始化后,项目结构如下:

  • src/:存放智能合约源代码(例如 Counter.sol)。
  • test/:存放单元测试文件(例如 Counter.t.sol)。
  • script/:存放部署和交互脚本(例如 Deploy.s.sol)。
  • lib/:存放依赖库(如 Forge-Std)。
  • foundry.toml:配置文件。
  • .git/:Git 版本控制目录。
    在这里插入图片描述

2.3 配置文件 foundry.toml 的作用说明

foundry.toml 是 Foundry 的配置文件,用于自定义构建、测试和部署行为。默认内容包括:

[profile.default]
src = 'src'
out = 'out'
libs = ['lib']
  • src:源代码目录。
  • out:编译输出目录。
  • libs:依赖库目录。

可以查看详细配置:foundry.toml详细配置


3. 编写智能合约与单元测试

3.1 编写简单合约示例(Counter.sol)

在 VSCode 中打开项目,编辑 src/Counter.sol

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;contract Counter {uint256 public number;function setNumber(uint256 newNumber) public {number = newNumber;}function increment() public {number++;}
}

保存文件,插件会自动高亮语法。

3.2 编写测试用例(使用 Forge 测试框架)

编辑 test/Counter.t.sol

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;import {Test, console} from "forge-std/Test.sol";
import {Counter} from "../src/Counter.sol";contract CounterTest is Test {Counter public counter;function setUp() public {counter = new Counter();counter.setNumber(0);}function test_Increment() public {counter.increment();assertEq(counter.number(), 1);}function testFuzz_SetNumber(uint256 x) public {counter.setNumber(x);assertEq(counter.number(), x);}
}

在这里插入图片描述

3.3 运行本地测试命令

在 Git Bash中运行:

forge build
forge test
  • forge build:编译合约。
  • forge test:运行测试用例。

**建议截图位置**: 运行后的成功输出(显示通过的测试)


4. 使用 Foundry 搭建本地测试网络

4.1 启动本地节点 Anvil

Anvil 是 Foundry 的本地以太坊模拟器。在新建的 Git Bash窗口中运行:

anvil --accounts 10 --balance 100
  • --accounts 10:生成 10 个测试账户。
  • --balance 100:每个账户初始余额 100 ETH。

Anvil 会输出 RPC URL(如 http://127.0.0.1:8545)和测试账户私钥。

在这里插入图片描述

4.2 使用 Anvil 模拟本地区块链环境

Anvil 模拟完整的以太坊环境,支持合约部署和交易模拟。保持 Anvil 窗口打开,作为本地链。

4.3 在本地部署合约(使用 Forge Script)

使用脚本部署到 Anvil 本地链。


5. 使用 Anvil 生成的私钥通过欧易连接本地区块链

在区块链开发和测试中,本地模拟环境是必不可少的工具。Foundry 框架中的 Anvil 是一个高效的本地以太坊节点模拟器,它可以快速启动一个测试链,并生成测试账户和私钥。本文将介绍如何使用 Anvil 生成私钥,然后通过欧易(OKX)Web3 钱包导入这些私钥,并连接到本地区块链节点。这适用于开发者在本地测试智能合约、DApp 或钱包集成时使用。

pc@DESKTOP-C1KR1ML MINGW64 /e/web3
$ anvil --accounts 10 --balance 100_   _(_) | |__ _   _ __   __   __  _  | |/ _` | | '_ \  \ \ / / | | | || (_| | | | | |  \ V /  | | | |\__,_| |_| |_|   \_/   |_| |_|1.2.3-stable (a813a2cee7 2025-06-08T15:44:09.674540400Z)https://github.com/foundry-rs/foundryAvailable Accounts
==================(0) 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 (100.000000000000000000 ETH)
(1) 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 (100.000000000000000000 ETH)
(2) 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC (100.000000000000000000 ETH)
(3) 0x90F79bf6EB2c4f870365E785982E1f101E93b906 (100.000000000000000000 ETH)
(4) 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 (100.000000000000000000 ETH)
(5) 0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc (100.000000000000000000 ETH)
(6) 0x976EA74026E726554dB657fA54763abd0C3a0aa9 (100.000000000000000000 ETH)
(7) 0x14dC79964da2C08b23698B3D3cc7Ca32193d9955 (100.000000000000000000 ETH)
(8) 0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f (100.000000000000000000 ETH)
(9) 0xa0Ee7A142d267C1f36714E4a8F75612F20a79720 (100.000000000000000000 ETH)Private Keys
==================(0) 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
(1) 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d
(2) 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a
(3) 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6
(4) 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a
(5) 0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba
(6) 0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e
(7) 0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356
(8) 0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97
(9) 0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6Wallet
==================
Mnemonic:          test test test test test test test test test test test junk
Derivation path:   m/44'/60'/0'/0/Chain ID
==================31337Base Fee
==================1000000000Gas Limit
==================30000000Genesis Timestamp
==================1754019204Genesis Number
==================0Listening on 127.0.0.1:8545

5.1 下载欧易插件

要使用欧易(OKX)Web3 钱包与本地区块链交互,首先需要安装 OKX 钱包插件。以下是具体步骤:

  1. 访问 OKX 官网

    • 打开浏览器,前往 插件市场 (https://chromewebstore.google.com/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge?hl=zh-CN)。
    • 下载浏览器扩展版本。
    • 安装完成后,浏览器右上角会显示 OKX 钱包图标。
  2. 初始化钱包

    • 点击 OKX 钱包图标,按照提示设置密码并完成初始化。
    • 备份助记词(若新建钱包),并妥善保存。注意:助记词仅用于新钱包创建,导入私钥时无需使用。

注意:确保从官方渠道下载插件,避免使用非官方来源以防止安全风险。

5.2 导入私钥

使用 Anvil 生成的私钥导入 OKX 钱包,可以快速接入测试账户。以下是导入步骤:

  1. 打开 OKX 钱包

    • 点击浏览器右上角的 OKX 钱包图标,进入钱包界面。
    • 如果使用移动端 App,打开 OKX Web3 钱包应用。
  2. 选择导入选项

    • 在钱包界面,点击“添加钱包”或“我已经有钱包”。
    • 选择“导入私钥”选项。
  3. 输入私钥

    • 粘贴从 Anvil 获取的私钥(例如:0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80)。
    • 确认导入,钱包会自动生成对应的公钥和地址。
  4. 验证账户

    • 切换到钱包主界面,检查新导入的账户是否显示正确的地址和余额(在 Anvil 本地节点中为 100 ETH)。

安全提示:私钥是账户的唯一凭证,仅在本地测试环境使用 Anvil 的私钥。切勿将测试私钥用于生产环境或泄露给他人。

5.3 设置自定义网络

为了让 OKX 钱包连接到 Anvil 运行的本地以太坊节点,需要配置自定义网络。以下是详细步骤:

  1. 进入网络管理

    • 在 OKX 钱包界面,点击“设置”或“网络”选项。
    • 找到“管理网络”或“Add Network”按钮。
  2. 添加本地网络

    • 点击“添加自定义网络”,填写以下信息:
      • 网络名称:Local Anvil(可自定义)
      • RPC URLhttp://127.0.0.1:8545(Anvil 默认 RPC 地址)
      • 链 ID:31337(Anvil 默认链 ID)
      • 货币符号:ETH
      • 区块浏览器 URL:(可选,留空)
    • 保存配置。
  3. 切换网络

    • 在钱包网络选择菜单中,选择刚添加的“Local Anvil”网络。
    • 确认切换后,钱包应显示本地节点的账户余额(10,000 ETH)。
  4. 测试连接

    • 尝试发送一笔小额测试交易(如 0.01 ETH 到另一测试地址)。
    • 在 Anvil 终端查看交易日志,确认交易被本地节点处理。

在这里插入图片描述


6. 脚本部署与调试演示

6.1 编写部署脚本(script/Deploy.s.sol)

创建或编辑 script/Counter.s.sol
注意:如果是初始化的,则已经存在了这个文件

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;import {Script, console} from "forge-std/Script.sol";
import {Counter} from "../src/Counter.sol";contract CounterScript is Script {Counter public counter;function setUp() public {}function run() public {vm.startBroadcast();counter = new Counter();vm.stopBroadcast();}
}

6.2 运行部署脚本连接 Anvil

在另一个 PowerShell 窗口(项目目录下)运行:

forge script script/Counter.s.sol --rpc-url http://127.0.0.1:8545 --broadcast --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
  • --rpc-url:Anvil 的 URL。
  • --broadcast:实际广播交易。
  • --private-key:从 Anvil 输出中复制一个私钥。

6.3 在终端查看交易过程和输出

部署后,终端会显示交易哈希和合约地址。Anvil 窗口会日志交易细节,用于调试。

**建议截图位置**:部署脚本运行输出和 Anvil 的交易日志。
根据这个输出的结果可以得到:

项目说明
脚本script/Counter.s.sol
运行环境本地 Anvil 节点(localhost:8545)
合约部署成功✅ 是
合约地址0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0
交易哈希0x9ab869...
Gas 花费156,801
支付 ETH~0.00012 ETH
保存位置broadcast/cache/ 文件夹

使用 Foundry 框架 编写的 Solidity 脚本,用于在本地或测试网络中部署一个名为 Counter 的智能合约。这个脚本文件遵循 Foundry 的标准结构,通常保存在 script/ 目录下,并配合命令 forge script 使用。


结语

通过本教程,你已在 Windows 上使用 VSCode 和 Foundry 完成了 Solidity 合约的开发、测试和本地部署。实践这些步骤,能显著提升你的开发效率。如果遇到问题,检查命令是否正确或参考官方文档。

参考链接

  • Foundry 官方文档
  • Foundry GitHub 仓库
相关文章推荐链接
Web3专栏https://blog.csdn.net/qq_42392981/category_13016259.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917129.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Implement recovery based on PITR using dump file and binlog

模拟生产场景中需要基于某个事务点的恢复,使用存量备份与存量binlog 生成测试数据 (rootlocalhost) [(none)]> create database NanJing; Query OK, 1 row affected (0.01 sec) (rootlocalhost) [test]> use NanJing; Database changed (rootlocalhost) [NanJ…

HTML-取消div,a等标签点击效果

一、背景当标签被设置onclick事件之后,在有些手机浏览器中,点击这些标签,会有点击变色效果。想要取消点击变色效果。通过为div和标签元素添加-webkit-tap-highlight-color样式属性,可以有效地解决这一问题二、解决方案已a标签示例…

VR 三维重建:开启沉浸式体验新时代

在科技飞速发展的今天,VR(虚拟现实)技术已经逐渐渗透到我们生活的各个领域,为我们带来了前所未有的沉浸式体验。而 VR 三维重建作为 VR 技术的重要应用之一,更是让人们能够身临其境地感受各种场景,无论是旅…

iTwinjs 几何 - Curve

CurvePrimitive 常用的见下 LineSegment3d直线段两点直线边、杆件、骨架LineString3d折线多点连续直线轮廓线、路径Arc3d圆弧 / 椭圆弧圆心 半径 起止角圆孔、圆角、弧段BezierCurve3d贝塞尔曲线端点 控制点平滑过渡、动画轨迹BSplineCurve3dB 样条 / NURBS控制点 节点矢…

iPhone 恢复出厂设置是否会删除所有内容?

当你的 iPhone 经常崩溃、出现黑屏死机、卡在加载屏幕上等问题时,你可能会考虑进行恢复出厂设置来修复它。或者在其他情况下,如果你要将使用多年的设备交给新主人,出于安全考虑,也需要进行恢复出厂设置。那么,恢复出厂…

机器学习②【字典特征提取、文本特征处理(TF-IDF)、数据标准化与归一化、特征降维】

文章目录先言一、特征工程概述二、特征提取1.字典特征提取(特征离散化)2.文本特征提取2.1英文文本提取2.2中文文本提取(jieba分词器)3.TfidfVectorizer TF-IDF文本特征词的重要程度特征提取三、数据归一化与标准化1.MinMaxScaler …

3、CC3200串口DMA

先说下CC3200存在2个16*8的fifos, 分别用于发送和接收 当fifos被disable时,将会作为一个1字节深度的保持寄存器, 所以无论fifos是开是关,发送和接收都绕不开fifos DMA 由于发送和接收都绕不过fifos,所以DMA也绕不开FIFOS. MAP_UARTFIFOLevelS…

从游戏NPC到手术助手:Agent AI重构多模态交互,具身智能打开AGI新大门

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】 清华《GPT多模态大模型与AI Agent智能体》书籍配套视频课程【陈敬雷…

Lesson 29 Taxi!

Lesson 29 Taxi! taxi n.出租车 同义词:cab n.出租车 相关:taxi meter计价器 taxi stand taxi rank 出租车站 call ataxi 叫车,打车 例句:对不起,请问出租车站在哪里? Excuse me, do you know where the taxi rank is please? land v.着陆,登陆n.陆地…

怎样将allegro的brd文件转化为AD的PCB文件

由于工作需要将allegro的PCB转成ad给同事,在使用AD软件导入Allegro的brd格式文件时出现各种的异常报错弹窗问题,现分享两种将Allegro PCB文件导入到AD中的方法。一、第1种方法使用高版本的AD软件(AD22,同时操作电脑需安装了Allegr…

[免费]【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts)【论文+源码+SQL脚本】

大家好,我是python222_小锋老师,看到一个不错的【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts),分享下哈。 项目视频演示 【免费】【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts爬虫) Pytho…

什么是CI/CD?

CI/CD是持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)的缩写:持续集成(Continuous Integration, CI):CI是一种开发实践&#x…

【Linux】重生之从零开始学习运维之Mysql

一主一从主12主机准备工作mkdir -p /data/mysql/logbin chown -R mysql:mysql /data/mysql主节点mysql配置vim /etc/my.cnf.d/mysql-server.cnf server-id177 log_bin/data/mysql/logbin/mysql-bin default_authentication_pluginmysql_native_password查看效果systemctl resta…

Trust Management System (TMS)

Trust Management System (TMS)信托管理系统学习信托管理系统(TMS)是一种用于高效管理信托业务的综合平台,涵盖客户信息、资产配置、风险监控等功能。通过学习TMS,可以掌握信托产品设计、业务流程优化及合规…

Spring Boot中使用Bouncy Castle实现SM2国密算法(与前端JS加密交互)

Spring Boot中使用Bouncy Castle实现SM2国密算法(与前端JS加密交互)一、环境准备二、核心实现三、前后端交互流程四、关键问题解决方案五、常见问题排查六、最佳实践建议在现代Web应用中,数据安全传输至关重要。SM2作为我国自主设计的非对称加…

机器学习sklearn:随机森林的决策树

bg:对比决策树来说,搞多几棵树就是随机森林了rlf_1 [] rlf_2 [] for i in range(10):rfc RandomForestClassifier(n_estimators25)rfc_s cross_val_score(rfc, wine.data, wine.target, cv10).mean()rlf_1.append(rfc_s)clf DecisionTreeClassifier…

上海月赛kk

1.十六进制#include<bits/stdc.h> using namespace std;int n;int main(){cin>>n;stack<int>re;if(n<16)cout<<0;while(n){re.push(n%16);n/16;}while(!re.empty()){int xre.top();re.pop();if(x<10)cout<<x;else cout<<char(Ax-10)…

暑期算法训练.12

目录 52. 力扣1 两数之和 52.1 题目解析&#xff1a; 52.2 算法思路&#xff1a; 52.3 代码演示&#xff1a; ​编辑 52.4 总结反思&#xff1a; 53 面试题&#xff1a;判定是否互为字符重排 53.1 题目解析&#xff1a; 53.2 算法思路&#xff1a; 53.3 代码演示&…

MySQL时间处理完全指南:从存储到查询优化

时间是数据库中最活跃的数据维度之一&#xff0c;正确处理时间数据关系到系统稳定性、数据分析准确性和业务逻辑正确性。本文将深入剖析MySQL时间处理的完整知识体系。一、MySQL时间数据类型详解1. 核心时间类型对比类型存储空间范围特性时区影响DATE3字节1000-01-01~9999-12-3…

Text2SQL 智能问答系统开发-预定义模板(二)

背景 在构建一个支持多轮对话的 Text2SQL 系统过程中&#xff0c;我完成了以下关键功能&#xff1a; 已完成 基础 Text2SQL 功能实现 实现用户输入自然语言问题后&#xff0c;系统能够自动生成 SQL 并执行返回结果。用户交互优化 支持用户通过补充信息对查询进行调整&#xff0…