想在五分钟之内把手的一串哈希拆成可读的交易地图?本文教你从区块浏览器到 Dune SQL 一站打通,彻底无障碍浏览 以太坊/EVM 交易、日志 与 追踪。
一、为什么区块浏览器第一眼像天书?
打开 Etherscan、Phalcon 或 Blocksec,常见的界面通常堆满:交易概览、Logs 标签页、Internal Txn 追踪。很多人在这三张屏幕前卡住,原因无非两条:
- 没有区分 交易层、函数层、事件层 三层视角;
- 不清楚十六进制串与真实数据的对应方式。
只要掌握下面六个核心关键词—交易哈希、外部账户(EOA)、合约地址、函数签名、事件日志(Log)、Trace(追踪)—所有“乱码”都会变成可解释的数据流。
二、交易:链上一切动作的根节点
交易编号(tx_hash)就像包裹的快递单号,后面所有 Gas 记录、函数调用、Token 转进转出 都能顺着它找到。
2.1 要看的第一眼:接收者是合约还是普通地址?
to字段是 合约,则必带input,会被浏览器解码为函数及参数。to字段是 EOA,大多是一次纯 ETH 转账,input 为空。
判断方法:
-- Dune 环境示例
SELECT
tx_hash,
to,
CASE
WHEN creation."from" IS NOT NULL THEN 'Contract'
ELSE 'EOA'
END AS to_type
FROM ethereum.transactions t
LEFT JOIN ethereum.creation_traces creation
ON creation.address = t.to
WHERE tx_hash = 0x9d88a9… -- 换成你的 tx_hash2.2 拆解 Input:函数签名+参数
任何 input 前四字节,即 keccak 哈希前缀,映射唯一的函数。例如:
0xa9059cbb000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa... -- transfer将其代入浏览器“Decode”按钮,即出现:
Function: transfer(address _to, uint256 _value)
Params: ...三、日志 Log:智能合约的弹幕
3.1 四个字段速记
| 字段名 | 说明 |
|---|---|
| topic0 | 事件签名哈希,32 字节 |
| topic1~3 | 索引参数(最多 3 个) |
| data | 剩余非索引参数的十六进制拼接 |
| log_index | 事件在区块内的序号 |
3.2 实操:定位 Uniswap V3 的 Swap 事件
在浏览器 Logs 面板 搜 Swap(address,address,int256,int256,uint160,uint128,int24),记下 topic0= 0xc42079f94a6870ff3ebc9...。
SELECT evt_tx_hash, amount0, amount1
FROM uniswap_v3_ethereum.Pair_evt_Swap
WHERE evt_tx_hash = 0x9d88a9…借助 Solidity emit 关键字可回溯源码。点进合约 → Code → 搜索 emit Swap 就能找到事件触发点,精准阅读触发逻辑。
四、追踪 Trace:层层嵌套的执行路径
Trace 区分四种操作类型。只需记口诀:
- CALL—干活的主力;
- STATICCALL—读而不写,像查询币种价格;
- DELEGATECALL—代理转发,先当“透明”即可;
- CREATE—新建合约,留意空
to的特殊交易。
浏览器里 Trace 呈 [0,1,1,1] 路径格式,对应递归访问深度。想理清顺序,可配合 Phalcon 或 Dune table finder 查询模板:
- 粘贴 tx_hash
- 得到函数→事件→Trace 完全顺序表
- 直接跳到 SQL 透视
👉 没有 Phalcon?用这张模板立即层叠展开所有调用路径
五、把浏览器数据搬回 SQL:三步“转码”
场景:一个大 V 拿 tx_hash 问你“这笔 1inch 交换了哪些代币,套利点在哪?”
只需魔法三步:
- 用 table finder 查询 确认对应函数表、事件表;
JOIN对应函数 decoded 表,提取fromToken、toToken、amountIn、amountOut;- 用
timestamp_diff()依次比对 DEX 价格,锁定套利价差。
六、FAQ:新手最常踩的坑
- Q:为什么我查到的 input 完全无法解码?
A:70% 因项目未公开 ABI。可先在 Dune 提交 PR,或在 社区解码 repo 补充。 - Q:同函数名但不同合约,Decode 表名会不会混淆?
A:Dune 按project + contract + call_type + version组合命名,一般用全称即不会冲突。 - Q:Trace_address 能否与事件 log_index 打通?
A:目前不支持一一映射,需自建中间表记录事件对应的 trace_depth,或用官方 Pro 脚本。 - Q:交易失败但 Trace 里头有
CALL,值钱吗?
A:Trace 内的独立 CALL 仍消耗 Gas,需查看status = success/failed字段判断。 - Q:如何批量清洗一年 100 万条交易?
A:使用 Dune 的 Spellbook 中立模型,或自建 Spark + Iceberg 分布式治理,关键词 批量解码。 - Q:静态调用返回值为何浏览器不显示?
A:STATICCALL 不更改状态、不触发 Logs,想拿数据直接eth_call即可,无需上链追踪。
七、把工具链树状拆解,永不过时
- 浏览器层:Etherscan(公开公示)、Phalcon(深度追踪)、Blocksec(安全审计归因)。
- SQL 层:Dune(社区共享)、Footprint(多链)、自建 ClickHouse(实时高频)。
- 代码层:Foundry-cast
trace、Hardhatdebug_traceTransaction,本地离线即跑。
真实作业时,让浏览器作“人肉初步目测”,Dune/自建仓库再做 微博、日报、周报、链上治理透明看板。能熟练切换这 4 层工具者,就是 Crypto 分析师里面最稀缺的那一批人。
读完本文,你已站在 交易—日志—追踪 三层金字塔顶。剩下的只需 持续实战+维护 SQL 模板,任何新协议瞬间可拆,仅剩快感。