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

郑州网站建设最便宜徐州市城乡建设局网站

郑州网站建设最便宜,徐州市城乡建设局网站,wordpress评论图片,手机怎么做销售网站引言:告别繁琐的调试脚本 作为一名智能合约开发者,大家一定经历过这样的场景:刚刚在本地网络部署了新版本的合约,只是想快速调用一个函数,看看返回值是否符合预期。为此,我们不得不又写一个小的 task 或者 …
引言:告别繁琐的调试脚本

作为一名智能合约开发者,大家一定经历过这样的场景:刚刚在本地网络部署了新版本的合约,只是想快速调用一个函数,看看返回值是否符合预期。为此,我们不得不又写一个小的 task 或者 script,然后再次运行 npx hardhat run ...。整个过程虽然不复杂,但频繁操作起来却十分繁琐,打断了开发的流畅感。

如果有一个交互式的环境,能让我们像在浏览器里打开开发者工具的 Console 一样,直接与本地链和合约对话,那该多好?

这正是 npx hardhat console 的价值所在。它是一个被许多开发者低估了的强大工具,一个能让我们实时、动态地与我们的智能合约进行交互的“瑞士军刀”。本文带大家深入探索 hardhat console 的常用功能,让大家彻底掌握这个调试利器。在这里插入图片描述

准备工作:在开始之前,请确保我们已经在项目下启动了一个本地Hardhat节点。

npx hardhat node

然后,在另一个终端窗口中,我们将通过以下命令进入本文的主角——Hardhat控制台:

npx hardhat console --network localhost
核心功能一:查询链上状态

当我们进入控制台后,我们就处在一个已经预配置好 ethers.js 的JavaScript交互式环境(REPL)中。我们可以直接使用 ethers 对象来执行各种操作。

1. 查看可用账户

Hardhat默认为我们创建了20个测试账户。在控制台中,获取它们非常简单:

// 获取所有签名者对象(Signer)
const signers = await ethers.getSigners();// signers 是一个包含20个Signer实例的数组
// 我们可以获取第一个账户的地址
const account0 = signers[0];
console.log("第一个账户的地址:", account0.address);

实用建议getSigners() 返回的是 Signer 对象,而不仅仅是地址。Signer 对象可以用来签名和发送交易,这在后续的合约写入操作中至关重要。

2. 查询账户余额

想知道某个账户有多少ETH?一条命令即可搞定。

// 查询第一个账户的余额
const balanceWei = await ethers.provider.getBalance(signers[0].address);// 返回值是 BigNumber 类型,单位是 Wei
console.log("账户余额 (Wei):", balanceWei.toString());// 使用 ethers 的工具函数将其格式化为 Ether,更具可读性
console.log("账户余额 (Ether):", ethers.formatEther(balanceWei));
3. 获取当前区块号

这是一个简单但常用的命令,用于确认我们的本地链是否在正常出块。

const blockNumber = await ethers.provider.getBlockNumber();
console.log("当前区块高度:", blockNumber);
核心功能二:与已部署的合约交互

这才是 hardhat console 最激动人心的部分。假设我们已经通过部署脚本,将一个名为 Greeter 的合约部署到了本地网络。

我们的部署脚本 (scripts/deploy.js) 可能像这样,并且在运行时打印了合约地址:

// scripts/deploy.js
async function main() {const Greeter = await ethers.getContractFactory("Greeter");const greeter = await Greeter.deploy("Hello, Hardhat!");await greeter.deployed();console.log("Greeter deployed to:", greeter.address); // <-- 我们需要这个地址
}
main();

现在,我们要在控制台中与这个已部署的合约交互。

交互流程建模

下面的流程图清晰地展示了在控制台中与合约交互的步骤:
在这里插入图片描述

1. 获取并“附着”到合约

首先,我们需要告诉 ethers 我们要操作的是哪个合约,以及它在哪里。

// 1. 获取合约工厂 (ContractFactory),需要合约名字
const Greeter = await ethers.getContractFactory("Greeter");// 2. 使用 attach() 方法附着到已部署的合约地址上
//    请将 "0x..." 替换为我们的部署脚本输出的真实地址
const greeter = await Greeter.attach("0x5FbDB2315678afecb367f032d93F642f64180aa3");console.log("成功连接到Greeter合约,地址:", greeter.target);
console.log("成功连接到Greeter合约,地址:", greeter.runner.address);
2. 调用只读函数 (Read)

附着成功后,我们就可以像操作一个普通的JavaScript对象一样调用合约的 viewpure 函数了。

// 调用合约的 greet() 函数
const currentGreeting = await greeter.greet();
console.log("当前的问候语:", currentGreeting);
3. 调用写入函数 (Write)

调用会改变合约状态的函数同样简单。默认情况下,ethers 会使用 signers[0] 这个账户来签名并发送交易。

// 调用 setGreeting() 函数,修改问候语
const tx = await greeter.setGreeting("Hola, Hardhat Console!");// 等待交易被矿工打包
await tx.wait(); console.log("问候语已更新!交易哈希:", tx.hash);

实用建议:写入操作返回的是一个交易对象(TransactionResponse),而不是函数的返回值。我们需要调用 .wait() 来等待交易上链确认。

现在,我们可以再次调用只读函数来验证状态是否真的改变了:

const newGreeting = await greeter.greet();
console.log("更新后的问候语:", newGreeting); // 输出: "Hola, Hardhat Console!"
总结:我们的开发流程加速器

hardhat console 远不止这些功能。我们还可以用它发送ETH、查询历史事件、甚至利用Hardhat Network的特殊RPC接口(如 evm_mine 手动挖矿)来精细控制我们的测试环境。

它完美地填补了“编写代码”和“编写自动化测试”之间的空白,为我们提供了一个即时反馈的游乐场。当我们下次需要快速验证一个想法或调试一个问题时,请毫不犹豫地打开 npx hardhat console。我们会发现,它能为我们节省大量的时间和精力,让智能合约开发变得更加流畅和愉快。

http://www.dtcms.com/a/586907.html

相关文章:

  • 网站界面设计需要首先做市场研究吗做网站吗
  • TypeVariable
  • 计算机图形学·12 OpenGL Transformations
  • Pycatia二次开发基础代码解析:未分配材料零件识别、工作对象设置与截面平面创建技术解析
  • 阿里云的网站建设方案seo自学网免费
  • 网站更新文章wordpress文章发布区
  • 2025_11_8_刷题
  • 深圳制作网站建设的企业网站高转化页面
  • STM32项目分享:基于STM32的智能婴儿监护系统设计
  • 黄页推广引流网站网站云主机吗
  • 网站建设策划ppt音乐培训如何做网站宣传
  • 制作简历的免费网站wordpress更改电子邮箱验证功能
  • 前端页面白屏排查终极指南:从定位到解决,再到监控 SDK 实现
  • 高通Android DDR分区报错无法启动
  • 做视频类网站需要哪些许可网站制作多少钱一年
  • linux主机上传网站网站免费优化软件
  • 南京市溧水区建设局网站wordpress只能看主页
  • 网站流程图制作软件做外贸网站推广
  • 挖掘关键词爱站网番禺 大石网站建设
  • 基于单片机的智能豆浆机设计(加热打浆熬煮自动控制与防干溢保护)
  • 山东省工程建设管理协会网站网站用户体验评价方案
  • 使用Docker安装Immich照片和视频管理工具
  • 一本通网站1124题:矩阵加法
  • 成都建站费用商丘雷光网络科技有限公司
  • S13 排序算法--快速排序
  • 关于生命意义的问题,在语言这一逻辑范畴内无法解决
  • 顺势而为——交易记录
  • 使用Labelme进行图像标注
  • 商丘网站建设推广公司网站建设管理的规章制度
  • 做网站需要学那些房地产网站制作