市值: $2.5826T -2.44%
成交额(24h): $165.9411B 17.98%
恐惧与贪婪指数:

17 - 极度恐惧

  • 市值: $2.5826T -2.44%
  • 成交额(24h): $165.9411B 17.98%
  • 恐惧与贪婪指数:
  • 市值: $2.5826T -2.44%
加密货币
话题
百科
资讯
加密话题
视频
热门加密百科

选择语种

选择语种

选择货币

加密货币
话题
百科
资讯
加密话题
视频

如何使用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', };

使用此设置,您可以使用MochaChai编写和执行测试。

使用摩托马和柴编写测试

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-WaffleHardHat Runtime Environment(HRE)中使用Console.log在测试执行过程中打印可变值。此外,检查测试输出中提供的交易收据和还原原因。

问:我可以使用HardHat测试合同升级吗?是的, HardHat通过@OpenZeppelin/HardHat-Upgrades等插件支持代理模式,从而使您可以在本地模拟和测试可升级的合同。

问:是否还有摩卡和柴的替代方案可以在Hardhat中进行测试?尽管摩卡被广泛采用,但您可以将其他测试框架(例如JEST)与其他配置集成在一起,尽管本机支持和文档对于摩卡柴ai而言更加成熟。

免责声明:info@kdj.com

所提供的信息并非交易建议。根据本文提供的信息进行的任何投资,kdj.com不承担任何责任。加密货币具有高波动性,强烈建议您深入研究后,谨慎投资!

如您认为本网站上使用的内容侵犯了您的版权,请立即联系我们(info@kdj.com),我们将及时删除。

相关百科

期货交易中如何使用单向模式与对冲模式?

期货交易中如何使用单向模式与对冲模式?

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对加密合约的影响?

如何理解BitcoinETF对加密合约的影响?

2026-02-01 16:19:51

Bitcoin ETF 和市场流动性1. Bitcoin ETF 将机构资本直接引入现货市场,增加订单簿深度并减少大额交易的滑点。 2. 随着套利者利用期货和永续掉期对冲 ETF 头寸,衍生品市场的流动性增强。 3. ETF 的存在与主要加密货币交易所的买卖价差收窄相关,尤其是在美国市场交易时段。 ...

在当前流动性激增的情况下,如何交易 DeFi 合约?

在当前流动性激增的情况下,如何交易 DeFi 合约?

2026-02-01 07:00:25

了解 DeFi 协议中的流动性动态1. DeFi 的流动性激增通常是由流动性挖矿激励、代币发行和跨链桥接活动协调资本流入引发的。 2. 当大型流动性池吸收增加的订单流时,自动化做市商会经历暂时的价格滑点压缩,从而创造短期套利窗口。 3. 流动性深度不对称的代币对(例如稳定币挂钩资产与波动性治理代币)...

如何利用社交交易复制加密合约专家?

如何利用社交交易复制加密合约专家?

2026-02-02 07:40:22

了解社交交易平台1. 社交交易平台将实时市场数据与用户交互功能相结合,使交易者能够观察、跟随和复制其他人开立的头寸。 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对加密合约的影响?

如何理解BitcoinETF对加密合约的影响?

2026-02-01 16:19:51

Bitcoin ETF 和市场流动性1. Bitcoin ETF 将机构资本直接引入现货市场,增加订单簿深度并减少大额交易的滑点。 2. 随着套利者利用期货和永续掉期对冲 ETF 头寸,衍生品市场的流动性增强。 3. ETF 的存在与主要加密货币交易所的买卖价差收窄相关,尤其是在美国市场交易时段。 ...

在当前流动性激增的情况下,如何交易 DeFi 合约?

在当前流动性激增的情况下,如何交易 DeFi 合约?

2026-02-01 07:00:25

了解 DeFi 协议中的流动性动态1. DeFi 的流动性激增通常是由流动性挖矿激励、代币发行和跨链桥接活动协调资本流入引发的。 2. 当大型流动性池吸收增加的订单流时,自动化做市商会经历暂时的价格滑点压缩,从而创造短期套利窗口。 3. 流动性深度不对称的代币对(例如稳定币挂钩资产与波动性治理代币)...

如何利用社交交易复制加密合约专家?

如何利用社交交易复制加密合约专家?

2026-02-02 07:40:22

了解社交交易平台1. 社交交易平台将实时市场数据与用户交互功能相结合,使交易者能够观察、跟随和复制其他人开立的头寸。 2. 这些平台通常需要账户验证、将资金存入稳定币或原生代币,并链接到支持的加密衍生品交易所。 3. 交易者在选择跟单对象之前可以访问公开绩效指标,例如胜率、利润系数、最大回撤和平均交...

查看所有文章

User not found or password invalid

Your input is correct