市值: $2.1591T 2.61%
成交额(24h): $74.6886B -50.71%
恐惧与贪婪指数:

15 - 极度恐惧

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

选择语种

选择语种

选择货币

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

如何使用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),我们将及时删除。

相关百科

在Bybit上进行BTC交易如何选择线性永续合约和反向永续合约?

在Bybit上进行BTC交易如何选择线性永续合约和反向永续合约?

2026-06-06 02:54:55

合同结算机制1. Bybit的线性永续合约以USDT结算,这意味着所有盈亏计算、保证金要求和清算门槛均以稳定币单位计价。 2.反向永续合约以BTC本身结算,因此每笔交易都会直接影响交易者的BTC余额——收益会增加BTC持有量,而损失会减少BTC持有量。 3. 反向合约的定价引擎使用 BTC/USDT...

如何识别和避免止损、欺骗等期货市场操纵行为?

如何识别和避免止损、欺骗等期货市场操纵行为?

2026-06-07 14:20:10

Bitcoin 减半机制1. Bitcoin 的协议强制执行固定的发行时间表,其中大约每 210,000 个区块,区块奖励就会减少一半。 2. 该事件大约每四年发生一次,直接减少了新进入流通的 BTC 数量。 3.截至2020年减半,矿工每区块获得6.25 BTC;下一次减少将达到 3.125 BT...

如何在Bybit上设置风险管理规则来限制我的每日最大损失?

如何在Bybit上设置风险管理规则来限制我的每日最大损失?

2026-06-04 16:40:15

账户级损失限额配置1. 使用双因素身份验证通过网络或移动应用程序登录您的 Bybit 帐户。 2. 导航至“资产”部分,然后从左侧菜单中选择“风险管理”。 3. 选择“每日损失限制”并将该功能切换为“开”以激活控制。 4. 输入代表当前交易日 USDT 最大允许净亏损的数值。 5. 使用您的电子邮件...

如何在币安上启用投资组合保证金模式以降低我的保证金要求?

如何在币安上启用投资组合保证金模式以降低我的保证金要求?

2026-06-05 04:59:43

Bitcoin 减半机制1. Bitcoin 的协议强制执行固定的发行时间表,其中大约每 210,000 个区块,区块奖励就会减少一半。 2. 该事件大约每四年发生一次,直接减少每个区块新进入流通的 BTC 数量。 3.截至2020年减半,矿工每区块获得6.25 BTC;下一次减少将使其达到 3.1...

如何将我的未平仓期货头寸从币安迁移到Bybit而不平仓?

如何将我的未平仓期货头寸从币安迁移到Bybit而不平仓?

2026-06-04 03:59:47

Bitcoin 减半机制1. Bitcoin 的协议强制执行固定的发行时间表,其中大约每 210,000 个区块,区块奖励就会减少一半。 2. 该事件大约每四年发生一次,直接减少了新进入流通的 BTC 数量。 3.截至2020年减半,矿工每区块获得6.25 BTC;下一次减少将达到 3.125 BT...

如何处理美国加密货币期货交易利润的税务影响?

如何处理美国加密货币期货交易利润的税务影响?

2026-05-29 18:19:59

Bitcoin 减半机制1. Bitcoin 的协议强制规定 2100 万枚代币的固定供应上限,并通过区块奖励引入新单位。 2. 每 210,000 个区块(大约每四年)区块奖励就会减少一半,这个过程称为减半。 3. 最近一次减半发生在 2024 年 4 月,每个区块的奖励从 6.25 BTC 减少...

在Bybit上进行BTC交易如何选择线性永续合约和反向永续合约?

在Bybit上进行BTC交易如何选择线性永续合约和反向永续合约?

2026-06-06 02:54:55

合同结算机制1. Bybit的线性永续合约以USDT结算,这意味着所有盈亏计算、保证金要求和清算门槛均以稳定币单位计价。 2.反向永续合约以BTC本身结算,因此每笔交易都会直接影响交易者的BTC余额——收益会增加BTC持有量,而损失会减少BTC持有量。 3. 反向合约的定价引擎使用 BTC/USDT...

如何识别和避免止损、欺骗等期货市场操纵行为?

如何识别和避免止损、欺骗等期货市场操纵行为?

2026-06-07 14:20:10

Bitcoin 减半机制1. Bitcoin 的协议强制执行固定的发行时间表,其中大约每 210,000 个区块,区块奖励就会减少一半。 2. 该事件大约每四年发生一次,直接减少了新进入流通的 BTC 数量。 3.截至2020年减半,矿工每区块获得6.25 BTC;下一次减少将达到 3.125 BT...

如何在Bybit上设置风险管理规则来限制我的每日最大损失?

如何在Bybit上设置风险管理规则来限制我的每日最大损失?

2026-06-04 16:40:15

账户级损失限额配置1. 使用双因素身份验证通过网络或移动应用程序登录您的 Bybit 帐户。 2. 导航至“资产”部分,然后从左侧菜单中选择“风险管理”。 3. 选择“每日损失限制”并将该功能切换为“开”以激活控制。 4. 输入代表当前交易日 USDT 最大允许净亏损的数值。 5. 使用您的电子邮件...

如何在币安上启用投资组合保证金模式以降低我的保证金要求?

如何在币安上启用投资组合保证金模式以降低我的保证金要求?

2026-06-05 04:59:43

Bitcoin 减半机制1. Bitcoin 的协议强制执行固定的发行时间表,其中大约每 210,000 个区块,区块奖励就会减少一半。 2. 该事件大约每四年发生一次,直接减少每个区块新进入流通的 BTC 数量。 3.截至2020年减半,矿工每区块获得6.25 BTC;下一次减少将使其达到 3.1...

如何将我的未平仓期货头寸从币安迁移到Bybit而不平仓?

如何将我的未平仓期货头寸从币安迁移到Bybit而不平仓?

2026-06-04 03:59:47

Bitcoin 减半机制1. Bitcoin 的协议强制执行固定的发行时间表,其中大约每 210,000 个区块,区块奖励就会减少一半。 2. 该事件大约每四年发生一次,直接减少了新进入流通的 BTC 数量。 3.截至2020年减半,矿工每区块获得6.25 BTC;下一次减少将达到 3.125 BT...

如何处理美国加密货币期货交易利润的税务影响?

如何处理美国加密货币期货交易利润的税务影响?

2026-05-29 18:19:59

Bitcoin 减半机制1. Bitcoin 的协议强制规定 2100 万枚代币的固定供应上限,并通过区块奖励引入新单位。 2. 每 210,000 个区块(大约每四年)区块奖励就会减少一半,这个过程称为减半。 3. 最近一次减半发生在 2024 年 4 月,每个区块的奖励从 6.25 BTC 减少...

查看所有文章

User not found or password invalid

Your input is correct