看懂交易 Input Data 字段|从 4byte selector 到参数解码
交易页 Input Data 字段是与合约交互的原始 calldata——前 4 字节是 function selector,后续是 ABI 编码的参数。本文按 6 步教你解码:识别 0x 字符串结构→4byte 查 function 名→参数解码→对照预期。
交易 Input Data 怎么读?直接答:Input Data 是与合约交互的原始 calldata 0x... 字符串——前 4 字节(8 hex)是 function selector(keccak256 哈希前 4 字节),后续每 32 字节(64 hex)是一个 ABI 编码的参数 → 用 4byte.directory 或 OpenChain 反查 function 名 → 用 Etherscan Decode Input Data 按钮一键解码参数 → 对照你预期的操作。整套流程让你看懂一笔交易到底调用了什么合约方法、传了什么参数。
如果你解码完发现交易符合预期想出金,可顺路准备 币安官网 的实名账号,并用 币安官方App 看充币地址。下载入口在 下载页。
Input Data 的结构
A:Input Data = function selector(4 字节)+ 参数数据(每 32 字节 + padding)。
| 部分 | 长度 | 说明 |
|---|---|---|
| 0x | 2 字符 | hex 前缀 |
| function selector | 8 hex(4 字节) | keccak256(function signature) 前 4 字节 |
| 参数 1 | 64 hex(32 字节) | ABI 编码 |
| 参数 2 | 64 hex(32 字节) | ABI 编码 |
| ...更多参数 | 同上 |
例:0xa9059cbb000000000000000000000000abc...0000000000000000000000000000000000000000000000000000000005f5e100
| 段 | 解码 |
|---|---|
| 0xa9059cbb | function selector = transfer(address,uint256) |
| 第 2 段(abc... 64 hex) | 接收方地址 |
| 第 3 段(5f5e100 = 1e8) | 转账数量 = 100 USDT(如 6 位小数) |
第 1 步:在 Etherscan 看 Input Data
复制 TxHash → etherscan.io → 交易页底部「Input Data」字段 → 点「Click to see More」展开。
第 2 步:用 Decode Input Data 按钮
Etherscan 在 Input Data 旁边有「Decode Input Data」按钮(仅当目标合约 Verified 时可用)——点击后自动解码 function 名 + 参数。
例显示:
Function: transfer(address recipient, uint256 amount)
# Input Data
recipient : 0xAbc...
amount : 100000000 // 100 USDT (6 decimals)
第 3 步:未 Verified 合约怎么解码
如果合约未 Verified,Etherscan 不会自动解码。手动方法:
| 步骤 | 操作 |
|---|---|
| 1 | 复制 Input Data 前 8 hex(4byte selector) |
| 2 | 去 4byte.directory 或 OpenChain Signature DB |
| 3 | 输入 selector 查 function 名 |
| 4 | 用 ethers.js 或 hashex.org 按 ABI 解码后续参数 |
第 4 步:常见 4byte selectors 速查
| selector | function |
|---|---|
| 0xa9059cbb | transfer(address, uint256) |
| 0x23b872dd | transferFrom(address, address, uint256) |
| 0x095ea7b3 | approve(address, uint256) |
| 0xa22cb465 | setApprovalForAll(address, bool) |
| 0x42842e0e | safeTransferFrom(address, address, uint256) |
| 0x38ed1739 | swapExactTokensForTokens(Uniswap V2) |
| 0x7ff36ab5 | swapExactETHForTokens(Uniswap V2) |
A:这几个 selector 覆盖 80% 日常 ERC20 / DEX 操作——记熟了一眼就能识别。
第 5 步:用 Tenderly Debugger 单步看
Tenderly 的 Debugger 不仅解码 Input Data,还能单步执行 EVM 看每一步 stack / memory / storage 变化——是分析复杂合约交互的最强工具。详见 查交易 分类的 Trace 入门篇。
第 6 步:实战——识别钓鱼 Permit 签名
钓鱼场景:你在某个网站连钱包后被要求「签个名」,弹窗显示 0xd505accf 开头的 Input Data——
| selector | 解码 |
|---|---|
| 0xd505accf | permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) |
A:这是 EIP-2612 Permit 签名! 看到 0xd505accf 立即警觉——Permit 是离线授权,签了等于把代币 approve 给 spender。永远不在不熟悉网站签 Permit。
实战 2:看 Uniswap 真实兑换参数
例 selector 0x38ed1739 = swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] path, address to, uint deadline)。
| 参数 | 解码 |
|---|---|
| amountIn | 你输入多少 |
| amountOutMin | 最少接受多少(滑点保护) |
| path | 兑换路径([USDC, ETH, USDT]) |
| to | 接收地址(应该是你) |
| deadline | 截止时间戳 |
A:最关键的是 to 字段——如果 to 不是你自己,这是钓鱼合约把兑换结果发给攻击者。
第 7 步:Decode 工具汇总
| 工具 | 用途 | 价格 |
|---|---|---|
| Etherscan Decode Input | 自动解码(要 Verified) | 免费 |
| 4byte.directory | selector 反查 function | 免费 |
| OpenChain Signature | selector 反查(更新更快) | 免费 |
| abi.hashex.org | 手动 ABI 编码/解码 | 免费 |
| Tenderly Debugger | 单步 EVM 调试 | 部分免费 |
风险提示
签名前看清 Input Data 是防钓鱼最关键技能——MetaMask 弹窗里的 Input Data 永远显示真实将执行的内容。不看清就签等于盲签。
如果链上资产想出金,可借助 币安官网 走 C2C。
实操核对清单
- [ ] 已了解 Input Data 结构(selector + 参数)
- [ ] 已用 Etherscan Decode Input Data 按钮
- [ ] 已记熟 5-7 个常见 4byte selectors
- [ ] 看到陌生 selector 用 OpenChain 查
- [ ] 钓鱼防御:Permit (0xd505accf) 立即警觉
- [ ] 大额操作前 Tenderly 模拟看完整 Input Data
一站式回顾
A:Input Data = function selector(4byte)+ ABI 编码参数。核心 3 个动作:看 selector 识别 function、用 Decode 按钮解码参数、对照预期。核心 1 个安全点:Permit (0xd505accf) 是钓鱼常见手法——没必要永远不签。
如果想了解交易 Logs / Events 的解读,下一步建议看 Logs 字段解读篇。
常见问题
Input Data 为空(0x)是什么意思?
A:纯 ETH/BNB 转账——没有合约交互,只有原生币转移。普通转账 Input Data = 0x。
4byte selector 会不会撞?
A:极少。4byte 空间 2^32 ≈ 43 亿——主流 function 几乎不冲突。OpenChain 与 4byte.directory 收录了几百万真实 function。
Etherscan Decode 不工作怎么办?
A:通常是合约未 Verified。用 4byte 查 selector + 自己 ABI 解码——或者去 OpenChain Trace 自动解码。
Permit 签名为什么这么危险?
A:Permit 是「离线签名」——不上链不花 Gas,但对方拿到签名就能调用 transferFrom。钓鱼网站常诱导用户签 Permit 后把代币偷走。
我自己编程发交易要不要管 Input Data?
A:要。ethers.js / web3.py 等库会自动 ABI 编码——你只要传 function 名 + 参数。手动构造时用 abi.hashex.org。
MetaMask 弹窗里的 Input Data 我看不懂怎么办?
A:慢一点,用 4byte 查 selector 是不是熟悉的 function。陌生 selector 永远不签——这是防钓鱼最重要的习惯。
一笔交易能调用多个 function 吗?
A:通过 Multicall 合约可以——一笔主交易里包多个内部 call。Multicall3 是行业标准实现。详见 查交易 分类的 Trace 篇。
文档发布于 2026-05-08,下次复测计划 2026-08-08(约每 90 天回访一次,确认 Etherscan Decode Input Data 与 4byte 查询服务未变)。