市值: $2.827T -4.84%
體積(24小時): $188.512B 68.83%
恐懼與貪婪指數:

38 - 害怕

  • 市值: $2.827T -4.84%
  • 體積(24小時): $188.512B 68.83%
  • 恐懼與貪婪指數:
  • 市值: $2.827T -4.84%
加密
主題
加密植物
資訊
加密術
影片
頂級加密植物

選擇語言

選擇語言

選擇貨幣

加密
主題
加密植物
資訊
加密術
影片

如何使用 Hardhat 測試您的 Solidity 合約?

Hardhat enables robust smart contract development with local testing, forking, debugging tools like console.log in Solidity, gas reporting, and precise event/time manipulation.

2026/01/20 12:20

設置安全帽環境

1. 安裝 Node.js 和 npm 以確保與 Hardhat 工具鏈的兼容性。

2. 運行npm init -y初始化新的 Node.js 項目。

3. 執行npm install --save-dev Hardhat將 Hardhat 添加為開發依賴項。

4. 使用npx Hardhat啟動 Hardhat 設置嚮導,然後選擇“創建空的 Hardhat.config.js”。

5. 創建一個contracts/目錄並將您的Solidity源文件(例如Token.sol )放入其中。

使用 JavaScript 或 TypeScript 編寫測試腳本

1. 生成test/文件夾並添加測試文件,例如Token.test.js

2. 導入 Hardhat 的測試實用程序: const { Expect } = require('@nomicfoundation/hardhat-c​​hai-matchers');

3. 使用describe()it()塊邏輯地構建測試用例。

4. 通過await ethers.deployContract('Token')在測試中部署合約,而不是手動字節碼處理。

5. 使用await token.transfer(address, amount)與合約方法交互,並使用Chai 匹配器斷言結果。

在本地分叉網絡上運行測試

1. 通過使用 RPC URL 指定以太坊主網或 Sepolia 等網絡,在Hardhat.config.js中配置分叉。

2. 啟動 Hardhat 網絡並啟用分叉: npx hardhat node --fork https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY

3. 編寫與已部署的主網合約(例如 Uniswap V3 池)交互的測試,方法是獲取其 ABI 並通過ethers.getContractAt()附加到它們。

4. 使用 Hardhat Network 的內置助手模擬現實世界的條件,包括 Gas 價格波動和區塊時間戳操作。

5. 通過使用wait network.provider.request({ method: 'hardhat_impersonateAccount', params: [address] })模擬從 Etherscan 等瀏覽器檢索到的 EOA 地址來驗證許可訪問模式。

使用 Hardhat 的內置工具進行調試

1. 直接在 Solidity 代碼中插入console.log()語句,並在啟用控制台日誌插件的情況下進行編譯。

2. 運行npx hardhat test --no-compile以在僅測試邏輯更改時跳過重新編譯。

3. 使用hardhat-tracer檢查每個事務期間執行的低級EVM 操作碼。

4. 利用hardhat-gas-reporter測量函數調用之間的gas 消耗並檢測效率低下的情況。

5. 通過在 Hardhat 配置的 mocha 部分中設置throwOnTransactionFailures: true來啟用還原事務的堆棧跟踪。

常見問題解答

問:我可以使用 Hardhat 測試合約發出的事件嗎?答:是的。使用await Expect(tx).to.emit(contract, 'Transfer').withArgs(owner,recipient,amount)來驗證事件參數。

問:如何測試重入漏洞?答:在測試中部署惡意攻擊者合約,觸發易受攻擊的功能,並斷言餘額不一致或狀態損壞。

問:是否可以測試與時間相關的邏輯,例如歸屬計劃?答:是的。使用await network.provider.send('evm_increaseTime', [seconds]) ,然後使用await network.provider.send('evm_mine')來推進塊。

問:如果我的合約使用 OpenZeppelin 的 AccessControl 怎麼辦?答:在調用受限函數之前,使用await accessControl.grantRole(ROLE_HASH, address)在測試中分配角色。

免責聲明:info@kdj.com

所提供的資訊並非交易建議。 kDJ.com對任何基於本文提供的資訊進行的投資不承擔任何責任。加密貨幣波動性較大,建議您充分研究後謹慎投資!

如果您認為本網站使用的內容侵犯了您的版權,請立即聯絡我們(info@kdj.com),我們將及時刪除。

相關知識

如何使用LayerZero合約執行跨鏈消息?

如何使用LayerZero合約執行跨鏈消息?

2026-01-18 13:19:39

了解 LayerZero 架構1. LayerZero 作為一種輕量級、無需許可的互操作性協議運行,無需依賴可信中介或包裝資產即可實現區塊鏈之間的通信。 2. 它利用部署在每條鏈上的超輕節點(ULN)來驗證消息的完整性和一致性,而無需存儲完整的區塊鏈狀態。 3. 核心組件包括處理消息路由的 Endp...

如何實施EIP-712進行安全簽名驗證?

如何實施EIP-712進行安全簽名驗證?

2026-01-20 22:20:26

EIP-712 概述和核心目的1. EIP-712 定義了以太坊應用程序中類型化結構化數據哈希和簽名的標準。 2. 它使錢包能夠在簽名請求期間顯示人類可讀的域和消息字段,而不是原始的十六進製字符串。 3. 該規範通過域分隔符哈希引入域分離,防止跨不同 dApp 或鏈的簽名重放。 4. 每個簽名的有效...

如何通過新合約交互獲得空投資格?

如何通過新合約交互獲得空投資格?

2026-01-24 21:00:23

了解合約交互要求1. 大多數空投活動都要求與部署在受支持的區塊鏈(例如以太坊、Arbitrum 或 Base)上的智能合約進行直接交互。 2. 交互通常涉及使用連接到 dApp 接口的錢包執行諸如approve() 、 stake()或mint()之類的函數。 3. 某些協議需要多種交易類型,例如將...

如何監控智能合約的安全警報?

如何監控智能合約的安全警報?

2026-01-21 07:59:57

鏈上監控工具1. Etherscan和Blockscout等區塊鏈瀏覽器允許實時檢查合約字節碼、交易日誌和內部調用。 2. 在信任任何鏈上數據之前必須確認合約驗證狀態——未經驗證的合約存在高風險。 3. 事件日誌解析可以檢測異常狀態變化,例如意外的代幣轉移或所有權修改。 4. 可以針對特定事件簽名設...

如何建立自動支付合同並為其提供資金?

如何建立自動支付合同並為其提供資金?

2026-01-26 08:59:35

了解智能合約部署1. 開發者必鬚根據gas效率和安全性要求選擇兼容的區塊鏈平台,例如以太坊、Polygon或Arbitrum。 2. Solidity 仍然是編寫支付自動化邏輯的主要語言,特別是對於定期或有條件的轉賬。 3. 在主網部署之前,使用 Hardhat 或 Foundry 等本地開發環境來...

如何使用 OpenZeppelin 合約構建安全的 dApp?

如何使用 OpenZeppelin 合約構建安全的 dApp?

2026-01-18 11:19:49

了解 OpenZeppelin 合約基礎知識1. OpenZeppelin Contracts 是一個可重用、經過社區審核的智能合約組件庫,專為以太坊和 EVM 兼容的區塊鏈而構建。 2. 庫中的每個合約都遵循嚴格的安全實踐,包括遵守“檢查-效果-交互”模式以及廣泛使用訪問控制修飾符。 3. 該庫提...

如何使用LayerZero合約執行跨鏈消息?

如何使用LayerZero合約執行跨鏈消息?

2026-01-18 13:19:39

了解 LayerZero 架構1. LayerZero 作為一種輕量級、無需許可的互操作性協議運行,無需依賴可信中介或包裝資產即可實現區塊鏈之間的通信。 2. 它利用部署在每條鏈上的超輕節點(ULN)來驗證消息的完整性和一致性,而無需存儲完整的區塊鏈狀態。 3. 核心組件包括處理消息路由的 Endp...

如何實施EIP-712進行安全簽名驗證?

如何實施EIP-712進行安全簽名驗證?

2026-01-20 22:20:26

EIP-712 概述和核心目的1. EIP-712 定義了以太坊應用程序中類型化結構化數據哈希和簽名的標準。 2. 它使錢包能夠在簽名請求期間顯示人類可讀的域和消息字段,而不是原始的十六進製字符串。 3. 該規範通過域分隔符哈希引入域分離,防止跨不同 dApp 或鏈的簽名重放。 4. 每個簽名的有效...

如何通過新合約交互獲得空投資格?

如何通過新合約交互獲得空投資格?

2026-01-24 21:00:23

了解合約交互要求1. 大多數空投活動都要求與部署在受支持的區塊鏈(例如以太坊、Arbitrum 或 Base)上的智能合約進行直接交互。 2. 交互通常涉及使用連接到 dApp 接口的錢包執行諸如approve() 、 stake()或mint()之類的函數。 3. 某些協議需要多種交易類型,例如將...

如何監控智能合約的安全警報?

如何監控智能合約的安全警報?

2026-01-21 07:59:57

鏈上監控工具1. Etherscan和Blockscout等區塊鏈瀏覽器允許實時檢查合約字節碼、交易日誌和內部調用。 2. 在信任任何鏈上數據之前必須確認合約驗證狀態——未經驗證的合約存在高風險。 3. 事件日誌解析可以檢測異常狀態變化,例如意外的代幣轉移或所有權修改。 4. 可以針對特定事件簽名設...

如何建立自動支付合同並為其提供資金?

如何建立自動支付合同並為其提供資金?

2026-01-26 08:59:35

了解智能合約部署1. 開發者必鬚根據gas效率和安全性要求選擇兼容的區塊鏈平台,例如以太坊、Polygon或Arbitrum。 2. Solidity 仍然是編寫支付自動化邏輯的主要語言,特別是對於定期或有條件的轉賬。 3. 在主網部署之前,使用 Hardhat 或 Foundry 等本地開發環境來...

如何使用 OpenZeppelin 合約構建安全的 dApp?

如何使用 OpenZeppelin 合約構建安全的 dApp?

2026-01-18 11:19:49

了解 OpenZeppelin 合約基礎知識1. OpenZeppelin Contracts 是一個可重用、經過社區審核的智能合約組件庫,專為以太坊和 EVM 兼容的區塊鏈而構建。 2. 庫中的每個合約都遵循嚴格的安全實踐,包括遵守“檢查-效果-交互”模式以及廣泛使用訪問控制修飾符。 3. 該庫提...

看所有文章

User not found or password invalid

Your input is correct