早上一睁眼,朋友圈都在晒 WomenUniteNFT 的“白嫖”战果,核心秘诀只有一个:通过 MetaMask 手动输入 十六进制 Input Data 直接调用合约「mint」。
下文把整个过程拆到最细,带你从 0 开始复刻这一技巧——看懂它,以后再遇到「零元购」空投或薅羊毛项目就能举一反三。
一、为什么用 Transaction Input Data 就能免费 mint?
很多时候,合约里会留下开发者急于删掉的 payable = 0 的铸币函数,只要传对参数就能 0 ETH 抢 NFT。但因为公开的前端已经下线,普通人无从下手。
解决思路很简单:用 Transaction Input Data 在 MetaMask 里硬切掉前端,直接与合约对话——这就是“十六进制 mint”的由来。
核心关键词:
以太坊 Transaction、Input Data、十六进制 mint、合约调用、MetaMask、WomenUniteNFT
二、以太坊 Transaction 的四个关键字段
| 字段 | 作用说明 |
|---|---|
| from | 你的钱包地址 |
| to | 转账地址 或 调用合约地址 |
| value | 要发送的 ETH 数量 |
| inputData | 这次交易的“附加信”——告诉合约想执行哪个函数、附带什么参数 |
普通转账的 Input Data 为 0x,因为「who、how much、to whom」已经刻在 from/to/value 里;
合约交互必须把函数名和参数压缩进 Input Data,矿工/验证节点读取后才知道你想干什么。
三、实战:把 WomenUniteNFT 合约当成案例
Tx 哈希:0x64c55a520934460ef87a1bd5f0e86c837babae86897ddf285ae4dc2feafa166d
这张链上交易实况可以一眼看出:value 为 0,Input Data 超长,正是 免费铸造 250 个 Token 的证据。
1. 定位要调用的函数
开发者反编译后发现漏洞函数为 def mint(uint256 _wad) payable:
简单说:传任意整数 _wad,就能 一次性铸造 _wad 个 NFT,且无需支付 mint 费用。
2. 如何生成「方法标识」(Method ID)
- 取函数签名文本:
mint(uint256) - 用 Keccak-256 哈希:得到
a0712d68…取前八位 ⇒ 就是 方法标识。
3. 补充参数至 64 位
uint256 类型需要 64 位十六进制(256 bit / 4 = 64 字符)。
我要一次 mint 250 个:
- 十进制 250 → 十六进制 fa
- 左补 0 到 64 位:
00000000000000000000000000000000000000000000000000000000000000fa
4. 合并成完整 Input Data
把「方法标识」+「补零后的参数」黏在一起:
a0712d6800000000000000000000000000000000000000000000000000000000000000fa👆 这就是最终要塞进 MetaMask Input Data 框的一大坨十六进制。
FAQ · 现场解惑
问:是不是所有函数都只要复制字符串就行?
答:错!函数名或参数类型一变,生成的哈希就会变,方法标识随之完全不同,必须重新算。
问:多参数时怎么办?
答:一个参数 = 64 位十六进制。若函数签名为 mint(address,uint256),Input Data 就依次拼接:Method ID + Address(64位) + _wad(64位)。
问:6000 gas limit 够吗?
答:不够。免费铸造通常仍在链上存数据,gas limit 建议设 120,000 起步,实测 WomenUniteNFT 140k 以上更稳。
四、在 MetaMask 里“十六进制 mint”的 30 秒流程
- 找 官方合约地址(Etherscan 打开 → Contract → Code → 复制地址)
- 打开 MetaMask → 发起转账 → 填入合约地址 作为 receiving address
- 在 “Hex Data” 栏粘贴上面生成的 Input Data
- amount 设为 0,叫矿工费后确认即可
示例数值对照
amount: 0 ETH
gas limit: 150000
Hex Data: a0712d6800...00fa👉 现在就打开浏览器验证以上 hex 数据吧,边读边动手,印象更深!
五、安全细节 & 进阶玩法
| 场景 | 注意点 |
|---|---|
| 合约重名 | 先确认字节码里的方法签名完全一致,再去拼十六进制。用 Etherscan 的 Bytecode Decompiler 反编译后对一遍源码。 |
| 前端阻塞 | 若项目方在前端把 mint 按钮藏起,你只能手动 Input 调用。 |
| 限时白名单 | 十六进制也跳不过 merkle 树验证,方法一样,需先拿到 proof,再手动拼接到参数里。 |
| 批量脚本 | 进阶玩家可以用 web3.js / ethers.js 动态生成 byte4 + bytes32 格式,把 10 行 js 变成一次性脚本。 |
👉 如何用 Etherscan 反编译并核实函数,这里有完整实操领进门,10 分钟上手。
六、浏览器工具齐上阵:一条龙算出方法标识
- 打开 https://emn178.github.io/online-tools/keccak_256.html
- 输入
mint(uint256)点计算 → 复制前 8 位 - 用 Windows 计算器或脚本把 250 转十六进制→补零→拼接
- 最终得到 1 行 hex,用任意钱包直接执行
再举一例:动态参数拼接计算
假设你想 mint 1337 个:
- 1337 → 十进制转十六进制 →
0539 - 补零至 64 位 →
0000000000000000000000000000000000000000000000000000000000000539 - 合并 →
a0712d680000000000000000000000000000000000000000000000000000000000000539
FAQ · 常见问题速查
Q1 Input Data 长度必须是 74 位吗?
A:没固定长度。Method ID 8 位 + 64 × 参数个数,三部分加起来就是总长度。
Q2 手动 Gas Price 填多少?
A:看区块浏览器「Gas Tracker」实时 Gas,高于平均值 1–2 Gwei 快速打包最划算。高峰期可翻倍。
Q3 MetaMask 报错“execution reverted”怎么办?
A:99% 是三件事:
- 合约开关还没打开(查看
_mintEnabled状态) - 到达个人或总量上限
- 方法 ID 打错 → 重算哈希 再试。
Q4 如果项目方把函数改名 openMint?
A:把函数签名 openMint(uint256) 重新跑 Keccak-256 即可,只要新的方法标识对,逻辑不变就能继续 mint。
七、小结 & 思维拓展
“十六进制 mint”的本质:
跳过前端,通过 Assembly 级精准指令与合约交流。
掌握后,不仅能薅空投,还能快速验证合约逻辑漏洞、做前端被墙时代下的应急交互,甚至给自己的 DApp 构建更灵活的可组合入口。
当然,链游无风险,入市需谨慎。动钱包前做好这些:
- 核实合约真实地址
- 小额度测试再 All in
- 监控推特、Discord 群真假消息
愿下次一睁眼就是钱包红利的截图,而非 phishing 链接的陷阱。