在區塊鏈中查看合約的日志信息(也叫事件 logs),主要有以下幾種方式,具體方法依賴于你使用的區塊鏈平臺(如 Ethereum、BSC、Polygon 等)和工具(如 Etherscan、web3.js、ethers.js、Hardhat 等)。以下是主流的幾種查看方法:
? 一、使用區塊鏈瀏覽器(如 Etherscan)
這是最直觀的方法:
步驟:
-
打開 Etherscan.io(或其他鏈對應的區塊鏈瀏覽器,如:
-
BSC -> bscscan.com
-
Polygon -> polygonscan.com
-
Arbitrum -> arbiscan.io
-
-
搜索你的合約地址。
-
進入合約頁面后,點擊上方的 "Events" 或 "Logs" 標簽頁。
-
查看合約發出的事件(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 | 高效查詢復雜日志 | 支持訂閱 | 高級開發者、數據分析 |
實操:以區塊鏈瀏覽器為例查看日志
打開你的錢包,查看你的活動,
點擊去區塊鏈瀏覽器查看
進入后可以看到日志信息