-
bitcoin $87959.907984 USD
1.34% -
ethereum $2920.497338 USD
3.04% -
tether $0.999775 USD
0.00% -
xrp $2.237324 USD
8.12% -
bnb $860.243768 USD
0.90% -
solana $138.089498 USD
5.43% -
usd-coin $0.999807 USD
0.01% -
tron $0.272801 USD
-1.53% -
dogecoin $0.150904 USD
2.96% -
cardano $0.421635 USD
1.97% -
hyperliquid $32.152445 USD
2.23% -
bitcoin-cash $533.301069 USD
-1.94% -
chainlink $12.953417 USD
2.68% -
unus-sed-leo $9.535951 USD
0.73% -
zcash $521.483386 USD
-2.87%
如何使用HardHat測試智能合約?
Hardhat is an Ethereum development environment that streamlines smart contract testing with tools like Mocha and Chai, ensuring reliable deployment.
2025/07/26 23:15
什麼是硬漢,為什麼將其用於智能合約測試?
HardHat是一個以太坊開發環境,它允許開發人員有效地編譯,部署,調試和測試智能合約。它提供了一個被稱為HardHat網絡的本地區塊鏈環境,該環境模仿了Mainnet或Ropsten等真實以太坊網絡的行為,使其非常適合測試。
開發人員更喜歡HardHat的關鍵原因之一是其靈活性和豐富的插件生態系統。無論您是使用摩卡咖啡編寫單元測試,使用Chai進行斷言,還是使用內置工具進行調試, HardHat都會簡化整個智能合約開發生命週期。當您要確保合同邏輯在實時網絡上部署之前,這使其特別有用。
建立您的開發環境
在進行測試之前,必須建立一個適當的環境:
- 安裝Node.js :確保安裝Node.js (版本14.x或更高版本)和NPM 。
- 初始化一個項目:在項目目錄中運行
npm init -y以創建一個package.json文件。 - 安裝HARDHAT :執行
npm install --save-dev hardhat以在您的項目中添加HardHat 。 - 創建HARDHAT配置文件:運行
npx hardhat,然後選擇“創建JavaScript項目”以生成hardhat.config.js文件。
設置完成後,您可以開始編寫和測試智能合約。
寫一份基本的智能合同
為了演示如何使用硬漢進行測試,讓我們考慮一個簡單的堅固合同:
// contracts/Token.sol pragma solidity ^0.8.0;合同令牌{mapping(address => uint256) public balances; function transfer(address to, uint256 amount) external { require(balances[msg.sender] >= amount, 'Insufficient balance'); balances[msg.sender] -= amount; balances[to] += amount; } function mint(address account, uint256 amount) external { balances[account] += amount; }}
該基本令牌合同包括轉移和鑄造令牌的功能。目的是使用Hardhat的測試框架測試這些功能是否在不同方案下的預期表現。
配置測試環境
在編寫測試之前,請確保您的項目結構支持測試:
- 將您的堅固合同放在
contracts/文件夾中。 - 將測試文件存儲在
test/目錄中。 - 如果需要,更新
hardhat.config.js(例如,添加網絡或插件)。
這是一個最小的配置示例:
// hardhat.config.js module.exports = { solidity: '0.8.0', };使用此設置,您可以使用Mocha和Chai編寫和執行測試。
使用摩托馬和柴編寫測試
HardHat與流行的JavaScript測試框架Mocha無縫集成,並與斷言庫Chai無縫集成。
首先在test/目錄中創建測試文件:
// test/token-test.js const { expect } = require('chai');描述(“令牌合同”,函數(){ 讓令牌; 讓Hardhattoken; 讓所有者; 令addr1;the eacheach(async函數(){
Token = await ethers.getContractFactory('Token'); [owner, addr1] = await ethers.getSigners(); hardhatToken = await Token.deploy(); await hardhatToken.deployed();});
它(“應將總供應分配給所有者”,異步函數(){
await hardhatToken.mint(owner.address, 100); const ownerBalance = await hardhatToken.balances(owner.address); expect(ownerBalance).to.equal(100);});
它('應該在帳戶之間傳輸令牌',async函數(){
await hardhatToken.mint(owner.address, 100); await hardhatToken.transfer(addr1.address, 50); const addr1Balance = await hardhatToken.balances(addr1.address); expect(addr1Balance).to.equal(50);});
它(“如果發送者沒有足夠的令牌,則應該失敗',async函數(){
const initialOwnerBalance = await hardhatToken.balances(owner.address); await expect( hardhatToken.transfer(addr1.address, 1) ).to.be.revertedWith('Insufficient balance'); expect(await hardhatToken.balances(owner.address)).to.equal(initialOwnerBalance);}); });
每個測試用例都使用柴來主張預期的結果。 beforeEach鉤可確保每次測試的全新部署,從而防止測試案例之間的干擾。
用硬漢進行測試
一旦編寫了測試,執行它們就很簡單:
- 在您的項目根目錄中打開終端。
- 運行命令
npx hardhat test。
輸出將顯示每個測試的結果,包括通過和失敗情況。如果任何測試失敗, HardHat將顯示詳細的錯誤消息,以幫助快速識別問題。
對於更多顆粒狀控件,您可以通過附加文件路徑來運行特定的測試文件:
npx hardhat test test/token-test.js這使您可以專注於特定的合同行為,而無需重新運行整個測試套件。
常見問題
問:我可以不堅固地使用硬漢嗎?是的,儘管HardHat主要是為了固體而設計的,但它也可以與其他EVM兼容語言(例如Vyper)一起使用,儘管社區支持可能會有所不同。
問:如何調試Hardhat的測試失敗?在@nomiclabs/hardhat-Waffle或HardHat Runtime Environment(HRE)中使用Console.log在測試執行過程中打印可變值。此外,檢查測試輸出中提供的交易收據和還原原因。
問:我可以使用HardHat測試合同升級嗎?是的, HardHat通過@OpenZeppelin/HardHat-Upgrades等插件支持代理模式,從而使您可以在本地模擬和測試可升級的合同。
問:是否還有摩卡和柴的替代方案可以在Hardhat中進行測試?儘管摩卡和柴被廣泛採用,但您可以將其他測試框架(例如JEST)與其他配置集成在一起,儘管本機支持和文檔對於摩卡和柴ai而言更加成熟。
免責聲明:info@kdj.com
所提供的資訊並非交易建議。 kDJ.com對任何基於本文提供的資訊進行的投資不承擔任何責任。加密貨幣波動性較大,建議您充分研究後謹慎投資!
如果您認為本網站使用的內容侵犯了您的版權,請立即聯絡我們(info@kdj.com),我們將及時刪除。
- 比特幣的瘋狂之旅:在市場波動中應對反彈和下行
- 2026-02-04 19:55:02
- 內華達州瞄準:Coinbase 的預測市場面臨監管攤牌
- 2026-02-04 19:50:02
- 在投資者的抵制下,Tether 縮減了數十億美元的融資規模,報告詳情
- 2026-02-04 18:50:02
- 比特幣的大暴跌:揭開混凝土叢林崩潰的原因
- 2026-02-04 18:55:01
- 金色特朗普雕像成為野生 Memecoin 傳奇的核心
- 2026-02-04 18:50:02
- 紐約熱議:Remittix 預售迅速售罄,著眼於匯款革命的巨大收益!
- 2026-02-04 18:45:01
相關知識
如何使用TradingView警報自動執行期貨交易?
2026-02-04 21:00:31
設置期貨合約的 TradingView 警報1. 登錄您的 TradingView 賬戶並打開所需期貨工具的圖表,例如 Binance 或 Bybit 上的 BTC/USD 或 ETH/USD 永續合約。 2. 使用您喜歡的指標、燭台時間框架和繪圖工具配置圖表,以定義精確的入場和出場條件。 3. 點...
期貨交易中如何使用單向模式與對沖模式?
2026-02-04 18:19:57
了解單向模式1. 單向模式在任何給定時間為每種資產建立單一頭寸方向(多頭或空頭)。 2. 交易者不能在同一交易品種上持有相反的頭寸,這簡化了保證金計算和風險敞口跟踪。 3. 初始保證金是根據未平倉頭寸的名義價值和所選槓桿水平計算的。 4. 當保證金餘額低於專門與該單一頭寸相關的維持閾值時,就會發生清...
如何從現貨錢包轉賬至期貨賬戶? (即時指南)
2026-02-04 18:00:07
了解加密貨幣交易所中的錢包分離1. 現貨錢包和期貨賬戶在大多數中心化交易所中作為獨立的金融容器運行。 2、現貨錢包中持有的資產不能直接用於期貨市場槓桿交易或建倉。 3. 這兩個環境之間的傳輸需要用戶通過指定的界面選項進行顯式啟動。 4. 分離的存在是為了加強風險控制——期貨頭寸帶有槓桿、清算機制和獨...
如何手動或自動平倉加密貨幣合約頭寸?
2026-02-01 23:19:36
手動平倉流程1. 登錄合約處於活動狀態的交易平台,然後導航至“持倉”或“未結訂單”選項卡。 2. 通過檢查合約品種、規模、入場價格和槓桿水平來找到具體合約倉位。 3. 單擊倉位旁邊的“平倉”或“平倉”按鈕——某些界面將其標記為“僅減倉”或“平倉”。 4、在彈出的對話框中確認關閉動作;系統將執行與倉位...
如何理解BitcoinETF對加密合約的影響?
2026-02-01 16:19:51
Bitcoin ETF 和市場流動性1. Bitcoin ETF 將機構資本直接引入現貨市場,增加訂單簿深度並減少大額交易的滑點。 2. 隨著套利者利用期貨和永續掉期對沖 ETF 頭寸,衍生品市場的流動性增強。 3. ETF 的存在與主要加密貨幣交易所的買賣價差收窄相關,尤其是在美國市場交易時段。 ...
在當前流動性激增的情況下,如何交易 DeFi 合約?
2026-02-01 07:00:25
了解 DeFi 協議中的流動性動態1. DeFi 的流動性激增通常是由流動性挖礦激勵、代幣發行和跨鏈橋接活動協調資本流入引發的。 2. 當大型流動性池吸收增加的訂單流時,自動化做市商會經歷暫時的價格滑點壓縮,從而創造短期套利窗口。 3. 流動性深度不對稱的代幣對(例如穩定幣掛鉤資產與波動性治理代幣)...
如何使用TradingView警報自動執行期貨交易?
2026-02-04 21:00:31
設置期貨合約的 TradingView 警報1. 登錄您的 TradingView 賬戶並打開所需期貨工具的圖表,例如 Binance 或 Bybit 上的 BTC/USD 或 ETH/USD 永續合約。 2. 使用您喜歡的指標、燭台時間框架和繪圖工具配置圖表,以定義精確的入場和出場條件。 3. 點...
期貨交易中如何使用單向模式與對沖模式?
2026-02-04 18:19:57
了解單向模式1. 單向模式在任何給定時間為每種資產建立單一頭寸方向(多頭或空頭)。 2. 交易者不能在同一交易品種上持有相反的頭寸,這簡化了保證金計算和風險敞口跟踪。 3. 初始保證金是根據未平倉頭寸的名義價值和所選槓桿水平計算的。 4. 當保證金餘額低於專門與該單一頭寸相關的維持閾值時,就會發生清...
如何從現貨錢包轉賬至期貨賬戶? (即時指南)
2026-02-04 18:00:07
了解加密貨幣交易所中的錢包分離1. 現貨錢包和期貨賬戶在大多數中心化交易所中作為獨立的金融容器運行。 2、現貨錢包中持有的資產不能直接用於期貨市場槓桿交易或建倉。 3. 這兩個環境之間的傳輸需要用戶通過指定的界面選項進行顯式啟動。 4. 分離的存在是為了加強風險控制——期貨頭寸帶有槓桿、清算機制和獨...
如何手動或自動平倉加密貨幣合約頭寸?
2026-02-01 23:19:36
手動平倉流程1. 登錄合約處於活動狀態的交易平台,然後導航至“持倉”或“未結訂單”選項卡。 2. 通過檢查合約品種、規模、入場價格和槓桿水平來找到具體合約倉位。 3. 單擊倉位旁邊的“平倉”或“平倉”按鈕——某些界面將其標記為“僅減倉”或“平倉”。 4、在彈出的對話框中確認關閉動作;系統將執行與倉位...
如何理解BitcoinETF對加密合約的影響?
2026-02-01 16:19:51
Bitcoin ETF 和市場流動性1. Bitcoin ETF 將機構資本直接引入現貨市場,增加訂單簿深度並減少大額交易的滑點。 2. 隨著套利者利用期貨和永續掉期對沖 ETF 頭寸,衍生品市場的流動性增強。 3. ETF 的存在與主要加密貨幣交易所的買賣價差收窄相關,尤其是在美國市場交易時段。 ...
在當前流動性激增的情況下,如何交易 DeFi 合約?
2026-02-01 07:00:25
了解 DeFi 協議中的流動性動態1. DeFi 的流動性激增通常是由流動性挖礦激勵、代幣發行和跨鏈橋接活動協調資本流入引發的。 2. 當大型流動性池吸收增加的訂單流時,自動化做市商會經歷暫時的價格滑點壓縮,從而創造短期套利窗口。 3. 流動性深度不對稱的代幣對(例如穩定幣掛鉤資產與波動性治理代幣)...
看所有文章














