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
英文地址,請注明出處:http://en.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…