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

WEB3——开发者怎么查看自己的合约日志记录

在区块链中查看合约的日志信息(也叫事件 logs),主要有以下几种方式,具体方法依赖于你使用的区块链平台(如 Ethereum、BSC、Polygon 等)和工具(如 Etherscan、web3.js、ethers.js、Hardhat 等)。以下是主流的几种查看方法:


✅ 一、使用区块链浏览器(如 Etherscan)

这是最直观的方法:

步骤:
  1. 打开 Etherscan.io(或其他链对应的区块链浏览器,如:

    • BSC -> bscscan.com

    • Polygon -> polygonscan.com

    • Arbitrum -> arbiscan.io

  2. 搜索你的合约地址。

  3. 进入合约页面后,点击上方的 "Events""Logs" 标签页。

  4. 查看合约发出的事件(Event),包括事件名、参数值、交易哈希等。

优点:
  • 快速直观,适合查看已部署合约的历史事件日志。


✅ 二、使用 web3.js 或 ethers.js 读取事件日志

适合开发者在代码中抓取合约日志。

1)web3.js 示例

const Web3 = require("web3"); const web3 = new Web3("https://mainnet.infura.io/v3/YOUR_INFURA_KEY"); const contract = new web3.eth.Contract(ABI, CONTRACT_ADDRESS); contract.getPastEvents("YourEventName", { fromBlock: 0, toBlock: "latest" }) .then(events => { console.log(events); });

2)ethers.js 示例

import { ethers } from "ethers"; const provider = new ethers.JsonRpcProvider("https://mainnet.infura.io/v3/YOUR_INFURA_KEY"); const contract = new ethers.Contract(CONTRACT_ADDRESS, ABI, provider); contract.on("YourEventName", (...args) => { console.log("Event fired:", args); });

优点:
  • 可以监听实时事件,或批量获取历史事件。

  • 适合前端/后端集成开发。


✅ 三、使用 Hardhat/Foundry 本地调试日志

当你在本地进行开发和测试时,可以查看合约事件:

示例(Hardhat):
 

solidity

复制编辑

// Solidity 合约中定义事件 event MessageSent(address indexed sender, string message); function send(string calldata msg) public { emit MessageSent(msg.sender, msg); }

在测试文件中:

const tx = await contract.send("hello"); const receipt = await tx.wait(); console.log(receipt.events);


✅ 四、通过区块/交易哈希查看日志

如果你知道某一笔交易的哈希,你可以通过区块链浏览器或 API 查询该交易产生的 logs。

使用 ethers.js 获取 logs:

const txReceipt = await provider.getTransactionReceipt("0x交易哈希"); console.log(txReceipt.logs);

你可以结合 ABI 解码这些 logs。


✅ 五、使用 Graph(TheGraph)建立子图进行日志索引

适合有大量事件的合约做数据分析:

  • 用 GraphQL 查询合约事件。

  • 非常适合做 Dapp 的后台数据查询接口。


总结

方法使用场景是否实时适合人群
区块链浏览器快速查看历史日志非技术人员、运维
web3.js / ethers.js集成开发、监听日志开发者
Hardhat / Foundry本地开发测试开发者
TheGraph高效查询复杂日志支持订阅高级开发者、数据分析


实操:以区块链浏览器为例查看日志

打开你的钱包,查看你的活动,

点击去区块链浏览器查看

进入后可以看到日志信息

http://www.xdnf.cn/news/754597.html

相关文章:

  • vscode编辑器怎么使用提高开发uVision 项目的效率,如何编译Keil MDK项目?
  • AI大模型赋能,aPaaS+iPaaS构建新一代数智化应用|爱分析报告
  • Leetcode 3569. Maximize Count of Distinct Primes After Split
  • 刷leetcode hot100--矩阵6/1
  • Java虚拟机内存区域划分
  • 数据库系统概论(十)SQL 嵌套查询 超详细讲解(附带例题表格对比带你一步步掌握)
  • 【寻找Linux的奥秘】第九章:自定义SHELL
  • 【深度学习】 19. 生成模型:Diffusion Models
  • 爬虫入门:从基础到实战全攻略
  • JavaEE: wait和notify
  • debian12.9或ubuntu,vagrant离线安装插件vagrant-libvirt
  • 网络协议的原理及应用层
  • 聊一聊接口测试中缓存处理策略
  • 【萌笔趣棋】网页五子棋项目测试报告
  • 零基础上手 Cherry Studio:打造专属 AI 助手的第一步
  • 【Vue 3全栈实战】从组合式API到企业级架构设计
  • 内网怎么映射外网ip? 内网的地址快速映射给外网访问用方法
  • uni-app学习笔记二十--pages.json页面路由pages设置
  • Linux 学习-模拟实现【简易版bash】
  • 健康检查:在 .NET 微服务模板中优雅配置 Health Checks
  • Qt OpenGL编程常用类
  • 2,QT-Creator工具创建新项目教程
  • 软件的兼容性如何思考与分析?
  • Docker Compose(容器编排)
  • C/C++ 面试复习笔记(3)
  • mysql核心知识点
  • RabbitMQ-Go 性能分析
  • OpenFeign和Gateway集成Sentinel实现服务降级
  • UE5.4.4+Rider2024.3.7开发环境配置
  • 力扣面试150题--二叉树的锯齿形层序遍历