点确认前的一串乱码:交易输入数据字段到底写了什么 图 1
点确认前的一串乱码:交易输入数据字段到底写了什么 · 图 1

签名前钱包弹出一页提示,除了金额和手续费,还有一长串十六进制的输入数据。绝大多数人从没读过它,但它恰恰是这笔交易的正文:收款地址之外的所有信息——你要调用哪个函数的哪个动作、参数是什么——全部编码在这里面。看懂它的骨架不需要编程能力,只需要理解一个结构。

这串数据的骨架是「函数选择器加参数列表」。最前面四个字节是选择器,由函数签名的哈希前缀生成,相当于动作的编号:转出代币、授权额度、提取收益,各是不同编号。后面按三十二字节一格排参数:地址放在格的右端,数字按原始精度展开。也就是说,一串看起来随机的十六进制,实际是一份格式极其严格的表格,任何一个格错位,交易要么失败要么执行出完全不同的含义。钓鱼合约常利用的就是「你只看金额那格,不看动作那格」。

实操上没有人手解码,核验靠三类工具。第一类是钱包自带的解码显示,能显示函数名与参数的钱包让风险下降一档,但注意解码依据是本地合约数据库,遇到未收录的合约它可能显示成空白或乱码——空白不等于危险,收录了也不等于安全,因为合约名字可以随便注册。第二类是区块浏览器:把选择器贴进其查询页能查到公开签名的函数,再对照已验证源码页看这个合约的该函数做了什么。第三步是最有价值也最少人做的一步:核对接收地址的合约是否经过源码验证、验证时间与部署时间是否合理,未验证合约的「看不懂的复杂交易」应默认按最高风险处理。

有三个高频陷阱值得单独点名。授权类调用:输入数据解码出授权函数时,受益人和额度参数才是重点,受益人是一个陌生合约地址,意味着它可以在额度内替你转走代币。批量调用:一段数据里嵌套多个调用时,钱包只显示第一层,内层的目标地址要展开核对。签名类请求:链下签名的数据不在输入数据里,而在 EIP-712 的结构化消息中,它同样包含到期时间和授权对象,页面「无需 gas」恰恰不该让你放松检查。

养成一个三十秒的习惯:任何签名请求先看三件事——动作名是不是你要做的动作、合约地址是不是官方那个(从官方文档逐项比对而不是搜索)、金额和受益人有没有多出你没填过的字段。三者任一不符就停止,DeFi 里没有撤回键,签名确认页是最后一道免费保险。

再补一层纵深:大额操作在测试环境或小额先走一遍,把钱包显示与区块浏览器解码对一遍账,确认这个前端在这个版本里到底会发出什么调用。输入数据字段是链上世界写给每个人的明牌,读不读是你的选择,它是签名前唯一不会说谎的信息。

三十秒检查之外,还有两个进阶习惯能把误签率再压一档。第一个是给常用协议建个人白名单:把官方文档里的合约地址抄进自己维护的一份对照表,每次核对时比对全地址而不是搜索跳转,浏览器标签页与前端界面上的地址只能当线索不能当依据,地址相似攻击正是利用了人只扫头尾几位的习惯。第二个是把解码当作翻译而不是背书:工具显示的函数名来自合约数据库注册信息,恶意合约可以注册一个人畜无害的名字,真正的事实永远在已验证源码的那段逻辑里——如果这笔交易将动用你的授权额度或跨合约搬运资产,值得花几分钟读一眼被调用函数的实现,尤其是它是否把资产转入可配置地址。签名工具层面也有纵深可做:选择支持交易预览与撤销记录管理的钱包,定期复核哪些合约仍持有历史授权,把不用的额度归零,等于把过往签字从抽屉里一页页销毁。核验的成本永远低于被盗的零头。

以上为教程说明,工具清单以当前版本为准,不构成投资建议。

点确认前的一串乱码:交易输入数据字段到底写了什么 图 2
点确认前的一串乱码:交易输入数据字段到底写了什么 · 图 2