在以太坊 NFT 市场下过出价的人都会遇到同一个弹窗:要把 ETH 转换成 WETH 才能出价。很多人把它当成”平台麻烦”,其实这是订单协议层的硬规则:以太坊的订单系统对”买家承诺付的钱”有一个统一格式要求,而原生 ETH 不符合这个格式。这篇文章讲清楚 WETH 是什么、为什么出价非它不可、以及出价用其他代币时容易踩的坑。
WETH:给原生币套上代币外壳
ETH 是原生资产,转账走账户余额划转,不经过任何代币合约;而 ERC-20 是一套合约接口标准,有 transfer、transferFrom、approve 这些函数,有 decimals 元数据。WETH 的作用就是把 ETH 装进一个 ERC-20 合约:存进 1 ETH 得到 1 WETH(调用存款函数 deposit),随时可以反向取出(withdraw),兑换比例恒为 1 比 1,没有价格风险,只有操作成本(两笔链上交易的 Gas)。

为什么出价必须用 ERC-20 形式
市场订单的核心诉求是:买家先承诺一笔钱,等任意卖家来接单。这要求订单系统能够”以标准方式锁定和划转买家的支付资产”——ERC-20 的 transferFrom 允许合约在买家授权后代为划转,金额、精度、余额校验都有统一接口可循。原生 ETH 没有 transferFrom,在订单撮合里就得写特例,历史上主流订单协议(如 Seaport 的早期版本与各市场 SDK)干脆规定:出价(offer)的支付资产必须是 WETH 或其他受支持 ERC-20,原生 ETH 只能用于购买(买家直接随交易附款)。OpenSea 官方 SDK 文档明确列出了这条约束:创建出价时若指定原生币会报错,未指定支付代币则默认用 WETH;当合集配置了指定计价代币时,SDK 会自动改用该代币出价。
理解到这一层,弹窗就不再是”平台要你折腾”,而是”你的承诺必须以协议能识别的凭证形式存在”。
坑一:不同代币的小数位不通用
每个 ERC-20 自报 decimals(小数位数),USDC 是 6 位、ETH 与 WETH 是 18 位。同一个数字”1.5”,在 18 位精度下是 1.5 枚,在 6 位精度下是 1,500,000 个最小单位。开发者拼订单参数时按错的精度换算,出价能直接差一百万倍;官方 SDK 会先查询支付代币的 decimals 再换算,这也是”别手搓订单参数”的最好理由。
坑二:钱包里的 WETH 残渣与误解价
出过价又没全额成交的账户,常会留下数量怪异的 WETH 余额(部分成交、取消后回款都以 WETH 形式回来),新手容易”看不见这笔钱”或忘记可以随时无损失换回 ETH。此外用非主流代币出价时,你的出价金额会被市场按某个汇率折算成”等效 ETH”展示与比较,成交时以代币原额结算——展示汇率与结算时点汇率不是一回事,这是汇率风险的真实来源。
三条实用习惯
第一,大额出价前,用小额测试一次完整链路(封装、出价、部分成交、取消),观察每种情况下资产回到钱包的形式。第二,钱包自定义代币时,只添加合约地址与官方文档核对过的 ERC-20,WETH 有固定且公开的官方地址,任何”新出的包装 ETH”都不默认等价。第三,长期不玩的账户,把 WETH 余额提回 ETH,少一种资产形态就少一处出错的地方。
把机制倒过来读一遍
最后把链条完整倒序走一遍,方便核对:你想出价,订单协议要求支付资产是 ERC-20,钱包提示把 ETH 存款进封装合约换 WETH,出价交易把 WETH 额度授权给市场,成交时协议从你账户划走授权额度,部分成交或取消时余额以 WETH 回到钱包,你随时可以反向取回成 ETH。每一步都对应一笔可在区块浏览器查询的公开交易,任何一步被第三方代持、代签、“帮你封装”,都意味着链条被剪短了一截,剪短的那截就是信任成本。新手常见的困惑”为什么我的余额明明够却出价失败”,九成出在链条第 2 步与第 3 步:要么钱包里躺的是 ETH 而非 WETH,要么授权额度还没上链就点了出价。
涉及资产划转与授权签名,操作前核对官方文档与合约地址,本文不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。