当前位置: 首页 > news >正文

使用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进行合约测试

演示源码&#xff1a;hardhat-demo: 演示基于hardhat的HelloWord合约测试案例。 环境 NodeJs 创建工程 1.创建一个hardhat工程根目录(hardhat-demo)&#xff0c;然后进入该目录执行。 npx hardhat执行该命令&#xff0c;会进行hardhat工程初始化。 提示我们是否安装该版本h…...

基于生成式对抗网络(GAN)的前沿研究与应用

引言 人工智能&#xff08;AI&#xff09;领域在过去几年中经历了快速的发展&#xff0c;尤其是深度学习的兴起带来了许多变革。其中&#xff0c;生成式对抗网络&#xff08;Generative Adversarial Network, GAN&#xff09;因其强大的生成能力成为了研究热点。自2014年Ian G…...

Apache zookeeper集群搭建

文章目录 引言I 集群搭建保证服务器基础环境一致JDK安装与配置环境变量安装与修改zk配置文件同步zk安装包与配置文件zk集群启停查看进程、状态、日志II 扩展:shell脚本一键启停引言 springCloud 脚手架项目功能模块:Java分布式锁 https://blog.csdn.net/z929118967/article/d…...

cmake使用记录

Android相关 编译一个动态库&#xff0c;到指定的目录 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反向代理

系统&#xff1a;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&#xff0c;但可以在 /etc/nginx/sites-available/ 目录下创建一个新的配置文件&#xff0c;并在…...

实数的奥秘:柯西序列深度解析

实数的奥秘&#xff1a;柯西序列深度解析 一、柯西序列的概念与性质二、柯西序列定义无理数三、柯西序列定义实数系统 实数&#xff0c;是初中学到的概念&#xff0c;我知都知道它是有理数和无理数的统称。 然而&#xff0c;实数可不只是小数点后的一堆零碎儿&#xff0c;它背后…...

信息系统管理师试题-人力资源

信息系统管理师试题-人力资源 当组织计划的人力资源需求超过供给时&#xff0c;可通过下列方法解决&#xff0c;其中不包括&#xff08;&#xff09; A降低录用标准&#xff0c;招聘新员工 B增加临时性员工和使用退休员工 C减少加班数量或工作时间 D提高员工工作效率 答案C 下…...

补偿电阻对ota零极点的影响

本文内容主要是关于补偿电阻对零极点产生的影响。 1.极点分析 该补偿电阻并不会影响在输出端的主极点&#xff0c;受影响的主要是镜像极点。 这里我们可以先单看电流镜部分&#xff0c;这个补偿电阻的作用在于将极点推向原来的两倍&#xff0c;从而达到增加带宽的目的[1]。 …...

UVM: uvm_sequence

topcic sequence overview sequence excution flow sequence class callbacks sequencer driver communication...

编译技术实验三之编译器的构造和设计

一、实验目的: 我们将设计多个不同的综合实验项目提供给学生选择。&#xff08;如&#xff1a;LL(1)文法自动生成语法分析程序的设计&#xff1b;单词的自动识别与智能纠错&#xff1b;语言的程序编辑器&#xff1b;数学计算式的识别等&#xff09;学生可在这些项目中选择1个项…...

数据挖掘——数据预处理

数据挖掘——数据预处理 数据预处理数据预处理 ——主要任务数据清洗如何处理丢失的数据如何处理噪声数据如何处理不一致数据 数据集成相关分析相关系数(也成为皮尔逊相关系数)协方差 数据规约降维法&#xff1a;PCA主成分分析降数据——抽样法数据压缩 数据预处理 数据预处理…...

ECharts饼图下钻

背景&#xff1a;项目上需要对Echarts饼图进行功能定制&#xff0c;实现点击颜色块&#xff0c;下钻显示下一层级占比说明&#xff1a;饼图实现点击下钻/面包屑返回的功能 数据结构 [{name: a,value: 1,children: [...]},... ]点击下钻 // 为图表绑定点击事件&#xff08;需要…...

【RK3568笔记】Android修改开机动画

概述 Android 的开机动画是由一系列连续的 PNG 图片作为帧组成的动画形式&#xff0c;不是一张 GIF 图片。将各帧 PNG 图片以压缩方式进行保存&#xff08;压缩方式要求是存储压缩&#xff09;&#xff0c;并将保存的文件名命名为 bootanimation.zip&#xff0c;这个 bootanim…...

嵌入式技术之Linux(Ubuntu) 一

一、Linux入门 1.硬件和操作系统以及用户的关系 一个传感器&#xff0c;获得数据后&#xff0c;需要向服务器发送数据。传感器传数据给上位机。 上位机需要一个程序来接收数据&#xff0c;那么这个上位机是什么机器&#xff1f; 我们的笔记本电脑就可以当成上位机。 两个手…...

代码随想录day39 动态规划7

打家劫舍 题目&#xff1a;198.打家劫舍 213.打家劫舍II 337.打家劫舍III 需要重做&#xff1a;全部 198.打家劫舍 思路&#xff1a;第i个房子偷与不偷&#xff0c;取决于第i-2个房子和第i-1个房子 注意&#xff1a;注意下标的一致性。现在的下标含义是房子的下标&#x…...

ESP32-S3模组上实现低功耗(5)

接前一篇文章:ESP32-S3模组上实现低功耗(4) 本文内容参考: 系统低功耗模式介绍 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档 电源管理 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档...

PDF转文本以及转图片:itextpdf

文章目录 &#x1f412;个人主页&#xff1a;信计2102罗铠威&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380; 1. itextpdf1.1导入itextpdf的maven依赖1.2 提取文本代码1.3 pdf转换成图片代码&#xff08;本地图片地址还是线上PDF的URL地址均支持&#…...

AnaConda下载PyTorch慢的解决办法

使用Conda下载比较慢&#xff0c;改为pip下载 复制下载链接到迅雷下载 激活虚拟环境&#xff0c;安装whl&#xff0c;即可安装成功 pip install D:\openai.wiki\ChatGLM2-6B\torch-2.4.1cu121-cp38-cp38-win_amd64.whl...

移动端自动化测试Appium-java

一、Appium的简介 移动端的自动化测试框架 模拟人的操作进行功能自动化常用于功能测试、兼容性测试 跨平台的自动化测试 二、Appium的原理 核心是web服务器&#xff0c;接受客户端的连接&#xff0c;接收客户端的命令&#xff0c;在手机设备上执行命令&#xff0c;收集命令…...

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…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...