使用hardhat进行合约测试
演示源码:hardhat-demo: 演示基于hardhat的HelloWord合约测试案例。
环境
NodeJs
创建工程
1.创建一个hardhat工程根目录(hardhat-demo),然后进入该目录执行。
npx hardhat
执行该命令,会进行hardhat工程初始化。

提示我们是否安装该版本hardhat软件包。输入y,回车。

就是问我们需要哪种工程环境。我这里选择创建一个支持ts的。

提示我们输入工程根目录。直接回车就行。
后面也是输入y,回车。
2.创建完成,我们删除他默认的测试案例,形成如下结构。

contracts:放测试合约。
scripts:放部署脚本。
test:放测试脚本。
hardhat.config.ts:这是hardhat配置文件,修改合约编译版本、连接测试网络等信息,都在这个文件上。
使用
在./contracts 目录下面创建HelloWorld.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract HelloWorld {string private hello;function getHello() public view returns (string memory) {return hello;}function setHello(string memory _hello) public {hello = _hello;}
}
由于我们的测试合约版本,为0.8.0,修改hardhat.config.ts文件。
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";const config: HardhatUserConfig = {solidity: "0.8.0",networks: {// hardhat内置测试网络连接localhost: {url: 'http://127.0.0.1:8545',},// ganache 网络连接配置信息ganache: {url: 'http://127.0.0.1:7545',accounts: ['0x172a483415c5e119f1ea336d44646572ac34a088e7bc2884f8e1f83da4cb304a']},},
};export default config;
部署
在./scripts创建deploy.ts
关于用法直接看注释。
import { ethers } from "hardhat"; // 从hardhat中导入ethers工具库/*** 主函数,用于部署HelloWorld智能合约*/
async function main() {// 获取当前区块链环境的签名者列表,[owner]表示获取第一个签名者,通常是部署合约的账户const [owner] = await ethers.getSigners();// 通过ethers获取HelloWorld合约的工厂,这一步是准备部署合约const HelloWorld = await ethers.getContractFactory("HelloWorld");// 连接到owner账户并部署HelloWorld合约const helloWorld = await HelloWorld.connect(owner).deploy();// 等待合约部署完成await helloWorld.deployed();// 打印合约部署地址console.log("HelloWorld deployed to:", helloWorld.address);
}// 执行主函数
main().then(() => process.exit(0)) // 主函数执行成功后,退出进程,返回码为0.catch((error) => {console.error(error); // 主函数执行失败后,打印错误信息process.exit(1); // 退出进程,返回码为1,表示有错误发生});
执行命令: npx hardhat run .\scripts\deploy.ts

测试
在 ./test创建HelloWorld.test.ts
关于用法直接看注释。
// 导入chai模块用于断言验证
import { expect } from "chai";
// 导入hardhat模块用于部署和管理合约
import { ethers } from "hardhat";// 描述HelloWorld合约的测试行为
describe("HelloWorld", function () {// 测试改变问候语后是否返回新的问候语it("Should return the new greeting once it's changed", async function () {// 获取HelloWorld合约的工厂const HelloWorld = await ethers.getContractFactory("HelloWorld");// 部署HelloWorld合约const helloWorld = await HelloWorld.deploy();// 等待合约部署完成await helloWorld.deployed();// 验证初始问候语是否为空expect(await helloWorld.getHello()).to.equal("");// 执行改变问候语的操作const setGreetingTx = await helloWorld.setHello("Hello, world!");// 等待交易确认await setGreetingTx.wait();// 验证新的问候语是否为"Hello, world!"expect(await helloWorld.getHello()).to.equal("Hello, world!");});
});
执行命令:npx hardhat test <指定脚本路径>
此方法会执行test目录下的全部脚本,要想执行特定脚本,后面跟脚本路径。

部署到其他网络
下面以合约部署到ganache来说明。
我们需要先启动ganache,指定端口为7545,接着将第一个账户私钥,粘贴到hardhat.config.ts的如下位置。

当一切准备齐全时,执行部署命令带上 --network ganache即可。


相关文章:
使用hardhat进行合约测试
演示源码:hardhat-demo: 演示基于hardhat的HelloWord合约测试案例。 环境 NodeJs 创建工程 1.创建一个hardhat工程根目录(hardhat-demo),然后进入该目录执行。 npx hardhat执行该命令,会进行hardhat工程初始化。 提示我们是否安装该版本h…...
基于生成式对抗网络(GAN)的前沿研究与应用
引言 人工智能(AI)领域在过去几年中经历了快速的发展,尤其是深度学习的兴起带来了许多变革。其中,生成式对抗网络(Generative Adversarial Network, GAN)因其强大的生成能力成为了研究热点。自2014年Ian G…...
Apache zookeeper集群搭建
文章目录 引言I 集群搭建保证服务器基础环境一致JDK安装与配置环境变量安装与修改zk配置文件同步zk安装包与配置文件zk集群启停查看进程、状态、日志II 扩展:shell脚本一键启停引言 springCloud 脚手架项目功能模块:Java分布式锁 https://blog.csdn.net/z929118967/article/d…...
cmake使用记录
Android相关 编译一个动态库,到指定的目录 cmake_minimum_required(VERSION 3.22.1) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../v2x_algo_output/${ANDROID_ABI}) project("serial_port") include_directories(include) add_…...
nginx http反向代理
系统:Ubuntu_24.0.4 1、安装nginx sudo apt-get update sudo apt-get install nginx sudo systemctl start nginx 2、配置nginx.conf文件 /etc/nginx/nginx.conf,但可以在 /etc/nginx/sites-available/ 目录下创建一个新的配置文件,并在…...
实数的奥秘:柯西序列深度解析
实数的奥秘:柯西序列深度解析 一、柯西序列的概念与性质二、柯西序列定义无理数三、柯西序列定义实数系统 实数,是初中学到的概念,我知都知道它是有理数和无理数的统称。 然而,实数可不只是小数点后的一堆零碎儿,它背后…...
信息系统管理师试题-人力资源
信息系统管理师试题-人力资源 当组织计划的人力资源需求超过供给时,可通过下列方法解决,其中不包括() A降低录用标准,招聘新员工 B增加临时性员工和使用退休员工 C减少加班数量或工作时间 D提高员工工作效率 答案C 下…...
补偿电阻对ota零极点的影响
本文内容主要是关于补偿电阻对零极点产生的影响。 1.极点分析 该补偿电阻并不会影响在输出端的主极点,受影响的主要是镜像极点。 这里我们可以先单看电流镜部分,这个补偿电阻的作用在于将极点推向原来的两倍,从而达到增加带宽的目的[1]。 …...
UVM: uvm_sequence
topcic sequence overview sequence excution flow sequence class callbacks sequencer driver communication...
编译技术实验三之编译器的构造和设计
一、实验目的: 我们将设计多个不同的综合实验项目提供给学生选择。(如:LL(1)文法自动生成语法分析程序的设计;单词的自动识别与智能纠错;语言的程序编辑器;数学计算式的识别等)学生可在这些项目中选择1个项…...
数据挖掘——数据预处理
数据挖掘——数据预处理 数据预处理数据预处理 ——主要任务数据清洗如何处理丢失的数据如何处理噪声数据如何处理不一致数据 数据集成相关分析相关系数(也成为皮尔逊相关系数)协方差 数据规约降维法:PCA主成分分析降数据——抽样法数据压缩 数据预处理 数据预处理…...
ECharts饼图下钻
背景:项目上需要对Echarts饼图进行功能定制,实现点击颜色块,下钻显示下一层级占比说明:饼图实现点击下钻/面包屑返回的功能 数据结构 [{name: a,value: 1,children: [...]},... ]点击下钻 // 为图表绑定点击事件(需要…...
【RK3568笔记】Android修改开机动画
概述 Android 的开机动画是由一系列连续的 PNG 图片作为帧组成的动画形式,不是一张 GIF 图片。将各帧 PNG 图片以压缩方式进行保存(压缩方式要求是存储压缩),并将保存的文件名命名为 bootanimation.zip,这个 bootanim…...
嵌入式技术之Linux(Ubuntu) 一
一、Linux入门 1.硬件和操作系统以及用户的关系 一个传感器,获得数据后,需要向服务器发送数据。传感器传数据给上位机。 上位机需要一个程序来接收数据,那么这个上位机是什么机器? 我们的笔记本电脑就可以当成上位机。 两个手…...
代码随想录day39 动态规划7
打家劫舍 题目:198.打家劫舍 213.打家劫舍II 337.打家劫舍III 需要重做:全部 198.打家劫舍 思路:第i个房子偷与不偷,取决于第i-2个房子和第i-1个房子 注意:注意下标的一致性。现在的下标含义是房子的下标&#x…...
ESP32-S3模组上实现低功耗(5)
接前一篇文章:ESP32-S3模组上实现低功耗(4) 本文内容参考: 系统低功耗模式介绍 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档 电源管理 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档...
PDF转文本以及转图片:itextpdf
文章目录 🐒个人主页:信计2102罗铠威🏅JavaEE系列专栏📖前言:🎀 1. itextpdf1.1导入itextpdf的maven依赖1.2 提取文本代码1.3 pdf转换成图片代码(本地图片地址还是线上PDF的URL地址均支持&#…...
AnaConda下载PyTorch慢的解决办法
使用Conda下载比较慢,改为pip下载 复制下载链接到迅雷下载 激活虚拟环境,安装whl,即可安装成功 pip install D:\openai.wiki\ChatGLM2-6B\torch-2.4.1cu121-cp38-cp38-win_amd64.whl...
移动端自动化测试Appium-java
一、Appium的简介 移动端的自动化测试框架 模拟人的操作进行功能自动化常用于功能测试、兼容性测试 跨平台的自动化测试 二、Appium的原理 核心是web服务器,接受客户端的连接,接收客户端的命令,在手机设备上执行命令,收集命令…...
IO: 作业:Day1
思维导图 main.c #include"student.h" int main(int argc, const char *argv[]) { stuPtr hcreat(); int n0; add_node(h); add_node(h); add_node(h); show(h); save(h,"student.txt"); stuPtr ptrc…...
PIVlab软件入门:从GUI操作到2D2C粒子测速实战
1. PIVlab是什么?为什么选择它做粒子测速? 第一次接触PIVlab时,我也被这个基于MATLAB的开源工具惊艳到了。它把复杂的粒子图像测速(Particle Image Velocimetry, PIV)流程封装成了一个直观的图形界面,让没有…...
导师说我的问卷像“废纸”:毕业季的问卷设计困境,AI能拯救你吗?
每年毕业季,数以百万计的学生在图书馆、实验室和电脑前煎熬。其中最令人头疼的环节之一,就是设计研究问卷。社会学专业的小李花了三周时间设计出一份关于“00后消费观”的问卷,信心满满地交给导师审阅。 导师只扫了一眼,就指出关…...
别只盯着IV曲线!用Silvaco TCAD深挖电阻仿真的5个隐藏玩法
别只盯着IV曲线!用Silvaco TCAD深挖电阻仿真的5个隐藏玩法 在半导体器件仿真领域,电阻模型常被视为入门级的"Hello World"案例。但正是这种看似简单的结构,往往蕴含着最基础却最容易被忽视的物理本质。本文将带你跳出标准例程的框…...
Windows冷注入实战:如何绕过内存检测并加密混淆DLL?【附完整代码】
1. 冷注入技术基础与内存检测原理 冷注入(Cold Injection)是Windows平台下一种特殊的DLL注入技术,与热注入不同,它不需要目标进程处于运行状态。这种技术最早被用于软件插件开发,后来在安全领域有了更广泛的应用。我刚…...
纵轴套零件的工艺规程及钻、攻6-M5-7H螺纹的工装夹具设计(设计说明书+CAD图纸+工序卡+过程卡)
纵轴套零件作为机械传动系统中的关键部件,其加工质量直接影响设备运行的稳定性。设计合理的工艺规程与专用工装夹具,是确保零件加工精度、提升生产效率的核心环节。本文围绕纵轴套零件的工艺设计展开,重点解析钻、攻6-M5-7H螺纹的工装方案&am…...
庖丁解牛:从Linux内核源码看NandFlash ECC校验的位运算艺术
1. 为什么需要ECC校验 NandFlash作为嵌入式系统中最常用的存储介质之一,其物理特性决定了它存在一定的位翻转概率。想象一下,你正在用笔记本记录重要会议内容,突然发现某个字的笔画出现了错误 - 这就是NandFlash面临的现实问题。位翻转可能由…...
Qwen3-VL-4B Pro快速部署:单命令拉取镜像+一键启动服务
Qwen3-VL-4B Pro快速部署:单命令拉取镜像一键启动服务 想体验一个能看懂图片、还能跟你聊天的AI吗?今天给大家介绍一个开箱即用的视觉语言模型服务——Qwen3-VL-4B Pro。你不用懂复杂的深度学习框架,也不用折腾环境配置,只需要一…...
基于Ardupilot/PX4固件的VTOL垂直起降固定翼飞行特性优化与参数调校
1. VTOL固定翼飞行特性优化基础 VTOL(垂直起降)固定翼无人机结合了多旋翼垂直起降和固定翼长航时的双重优势,成为近年来的热门机型。在Ardupilot/PX4开源飞控生态中,通过合理配置参数可以实现平滑的模态转换和稳定的飞行性能。我们…...
蓝桥杯之进制转换计算器-分治法与模块化设计实战(C++实现)
1. 为什么需要进制转换计算器? 第一次参加蓝桥杯时,我遇到一道进制转换的题目卡了整整半小时。后来发现很多算法题都会涉及不同进制数的运算,比如网络协议中的十六进制、硬件编程中的二进制。这时候如果有个智能的进制转换工具,就…...
Qwen3字幕系统入门教程:清音刻墨镜像+Jupyter Notebook交互式调试
Qwen3字幕系统入门教程:清音刻墨镜像Jupyter Notebook交互式调试 1. 教程概述 清音刻墨是一款基于Qwen3-ForcedAligner技术的智能字幕对齐系统,能够将音频内容精确转换为时间轴准确的字幕文件。本教程将带你从零开始,学习如何使用清音刻墨镜…...
