使用Hardhat测试智能合约

这篇具有很好参考价值的文章主要介绍了使用Hardhat测试智能合约。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hardhat是一个编译、部署、测试和调试以太坊应用的开发环境。它可以帮助开发人员管理和自动化构建智能合约和dApps过程中固有的重复性任务,并围绕这一工作流程轻松引入更多功能。这意味着hardhat在最核心的地方是编译、运行和测试智能合约。

Hardhat内置了Hardhat网络,这是一个专为开发设计的本地以太坊网络。主要功能有Solidity调试,跟踪调用堆栈、console.log()和交易失败时的明确错误信息提示等。

在Hardhat中编写智能合约测试是使用JavaScript或TypeScript完成的。

使用Waffle的测试是用Mocha和Chai一起编写的。

Mocha是流行的JavaScript测试框架之一,通过它添加和运行测试,从而保证代码质量。

```

const { expect } = require("chai");

describe("Greeter", function() {
  it("Should return the new greeting once it's changed", async function() {
    const Greeter = await ethers.getContractFactory("Greeter");
    const greeter = await Greeter.deploy("Hello, world!");
    
    await greeter.deployed();
    expect(await greeter.greet()).to.equal("Hello, world!");

    await greeter.setGreeting("Hola, mundo!");
    expect(await greeter.greet()).to.equal("Hola, mundo!");
  });
});

```

在终端上运行npx hardhat test, 你应该看到以下输出:

```

$ npx hardhat test

  Contract: Greeter
    ✓ Should return the new greeting once it's changed (762ms)

  1 passing (762ms)
  
```

这意味着测试通过了。 现在我们来解释一下每一行代码:


```

const { expect } = require("chai");

```

我们需要的是 Chai,它是一个断言库。 这些断言函数被称为 匹配器,我们在这里使用的这些函数其实来自Waffle。

这就是为什么我们要使用hardhat-waffle插件的原因,这使得我们更容易从以太坊中断言值。

```

describe("Greeter", function () {
  it("Should return the new greeting once it's changed", async function () {
    // ...
  });
});

```

这个包装器只是遵循Mocha提出的测试结构,但你可能已经注意到在it的回调函数中使用了async。 与以太坊网络和智能合约的交互是异步操作,因此大多数API和库都使用JavaScript的Promise来返回值。 使用 async可以让我们通过 await等待对合约和Hardhat网络节点的调用。

```

const Greeter = await ethers.getContractFactory("Greeter");

```

ethers.js中的ContractFactory是一个用于部署新的智能合约的抽象,所以这里的Greeter是我们的greeter合约实例的工厂。

```

const greeter = await Greeter.deploy("Hello, world!");

```

在 ContractFactory上调用 deploy()将开始部署,并返回一个解析为 Contract的 Promise。 这是一个合约对象,在这个对象上可以条用每个智能合约函数。 这里我们要把字符串 Hello, world!传递给合约的构造函数。

一旦合约部署完毕,就可以在greeter上调用合约方法,用它们来获取合约的状态。

```

expect(await greeter.greet()).to.equal("Hello, world!");

```

在这里,我们使用Contract实例来调用Solidity代码中的智能合约函数。 greet()返回迎接者的问候语,我们正在检查它是否等于Hello, world!,因为它应该相等。 这里,我们使用了Chai匹配器expect、to和equal。

```

await greeter.setGreeting("Hola, mundo!");
expect(await greeter.greet()).to.equal("Hola, mundo!");

```

我们可以用相同的方式修改合约的状态, 调用 setGreeting将设置一个新的问候信息。 在解析了 Promise之后,我们再进行一次断言,以验证问候语是否真正改变了。文章来源地址https://www.toymoban.com/news/detail-441651.html

到了这里,关于使用Hardhat测试智能合约的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Hardhat编写合约测试用例

    为智能合约编写自动化测试至关重要,毕竟写智能合约多多少少都会跟用户资金挂钩。 这里假设自己正在开发一个NFT交易平台,这个平台可以让用户售卖自己的NFT,包括ERC721和ERC1155,并且用户可以指定购买者需要支付指定的 ERC20 Token 购买。 我们先确定自己的测试功能和目标

    2024年02月02日
    浏览(43)
  • 如何使用hardhat进行合约uups模式升级

    id:BSN_2021 公众号:BSN研习社 背景: 在开发或维护solidity语言的智能合约时,经常会因为业务逻辑变动而变动合约内的逻辑,这就要考虑在不影响以前智能合约中已上链的数据的同时,修改或扩展新的业务逻辑,所以合约第一次开发时就需要考虑其本身支持可升级功能 目的:

    2024年02月16日
    浏览(30)
  • 使用Truffle编译智能合约及所遇到的问题

    1.下载安装nvm,首先安装目录不要有空格和中文,会出现乱码 2、解压之后安装,安装后自动配置环境变量 3、nvm -v 查看版本 4、通过如下指令进行node版本的安装、替换 我是通过VS code 打开项目,编辑truffle-config.js文件 配置本地以太坊网络和远程的以太坊测试网络方式有所差异

    2023年04月08日
    浏览(39)
  • python 之 web3 与智能合约的交互、编译等使用

    一、背景 web3.py是一个用于与以太坊交互的 Python 库。 它常见于去中心化应用程序 (dapps)中,帮助发送交易、与智能合约交互、读取块数据以及各种其他用例。 最初的 API 源自Web3.js Javascript API,但后来不断发展以满足 Python 开发人员的需求和物质享受。 本人在合约审计于模糊

    2024年02月11日
    浏览(36)
  • 基于Hardhat和Openzeppelin开发可升级合约(二)

    在本章我将开始介绍和演示 基于 Openzeppelin 的可升级合约解决方案 根据设计,智能合约是不可变的。但随着新的客户需求和产品设计的升级迭代,合约也需要升级。 Openzeppelin 的基础可升级合约解决方案是将合约数据与逻辑分离。 代理合约(Proxy) 负责转发交易到逻辑合约,

    2024年01月19日
    浏览(39)
  • 8.区块链系列之hardhat框架部署合约(二)

    现在我们来实践hardhat部署合约中的其他更多技术要点 1. 代码方式验证合约 注册 https://etherscan.io/ , 如下图添加拷贝API_KEY 在.env文件中新增 ETHERSCAN_API_KEY hardhat.config.js中新增配置 覆盖deploy.js 验证合约 如果用的使用了clash代理的话开启Tun模式,否则可能会报Connect Timeout Error 2.

    2024年01月22日
    浏览(34)
  • 10.区块链系列之hardhat部署抵押赎回Fund合约

    本文继续通过笔者学习到的抵押赎回智能合约Fund来进一步学习solidity语言,加深对开发的理解,其中通过storage节省gas是需要重点实践的,毕竟涉及到资产 代码已提交至https://gitee.com/SJshenjian/blockchain/tree/master/hardhat-fund-me-fcc 1. 依赖安装 若出现如下错误 在yarn.lock中ethereumjs-abi指

    2023年04月09日
    浏览(30)
  • java使用web3j,部署智能合约在测试链上,并调用(万字详细教程)

    最近在学区块链相关,想做点自己感兴趣的。网上关于这块部分的坑也比较多,最近也是问了很多行业从事者才慢慢填坑,因此记录下来分享一下。 钱包 :metemask、 solidity编译器 :remix 、 java ide :idea。 智能合约编写的我选择在remix上方便,而且部署的时候不需要自定义gasP

    2024年01月16日
    浏览(53)
  • 区块链java开发智能合约nf(部署第一个NFT智能合约)

    手把手教你区块链java开发智能合约nft-第二篇(部署第一个NFT智能合约) 刚搞区块链开发真的是太累了,自己摸石头过河,动不动就报错,网上搜索错误,一律看不出什么问题,或者报错的信息太少,问同事同事不鸟,问领导,领导也烦,无奈,对于英文不好的我,只能被迫

    2024年02月12日
    浏览(52)
  • 如何在智能合约中调用另一个合约的函数

    智能合约是在区块链中被执行的一段程序,因为它们在区块链上执行,所以不依赖于任何的中心化服务器。目前最主流的智能合约编程语言是 Solidity。 在以太坊区块链中,智能合约可以和其他已经部署的智能合约进行交互。除了以太坊,其他 EVM 兼容的区块链(使用以太坊虚

    2024年01月22日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包