支付链接里到底写了什么?EIP-681 请求的地址、链标识与金额逐项拆 图 1
支付链接里到底写了什么?EIP-681 请求的地址、链标识与金额逐项拆 · 图 1

钱包“扫码转账”的体验,常常从一行文本开始:一个以 ethereum: 开头的链接被解码后,钱包替你把转账表单预填好。这类文本在 EIP-681 规范里叫支付请求链接,地位相当于比特币世界的 BIP-21 对比特币 URI。看懂它不难,难的是守住那个问题:对方到底想让你的钱包做什么。

三段加参数:ethereum 链接怎么拆

语法分四块。第一块是地址,必填,可以是 0x 开头的 40 位十六进制串,也可以是 .eth 这类 ENS 域名。第二块跟在 @ 后面,是可选的链标识,用十进制数字写明这条请求要在哪条链上完成。第三块跟在 / 后面,是可选的函数名——没有它,就表示请求支付的是链的原生以太币。第四块跟在 ? 后面,携带金额、燃料上限等参数。四个位置的分工可以记成一句话:地址说“跟谁打交道”,@ 说“在哪条链”,/ 说“做什么动作”,? 说“带多少参数”。

官方文档给了一个标准例子:ethereum:0xfb6916095ca1df60bb79Ce92ce3ea74c37c5d359?value=2.014e18,意思是请求支付 2.014 个 ETH,数值以 wei 的科学计数法书写。钱包界面会把它换算成 ETH 显示,链上落地的却是最小单位,读大额时别按屏幕数字数零。参数里还能出现 gasLimitgasPrice 之类的键,作用是预填燃料字段;对这类代付条件的正确态度是“当参考、由自己确认”:钱包弹窗里显示的最终费用才是你要付的,预填值偏低会导致交易长期排不上队,偏高则白白多付。

顺带一提,同一套 ethereum: 前缀不只用于支付:WalletConnect 的连接请求等也借用这个命名空间。扫码后钱包可能弹出发起连接的邀请,而不是转账表单——这两件事的授权后果完全不同,连接只开放查看与签名请求通道,转账才动资产。看清弹窗标题再操作,别让“都是扫码”的惯性替你按确认。

链标识缺失时,用的是你当前选中的网络

最容易踩的坑是 @chain_id 这一段。带上了,支持该标准的钱包会引导你到指定链上完成操作;没带上,规范的处理方式是沿用钱包当前选中的网络。也就是说,同一条链接在不同人手里可能被执行到不同的链上。签名前把弹窗里的网络字段和对方的书面说明对一遍,如果对方和链接都没写链,先问清楚再确认。跨链资产各自独立的背景,可以在 同一个地址,不同的世界:多条EVM链余额为何各自独立,转资产前查什么 里回看。

代币支付其实是合约调用

如果链接带着 /transfer?address=收款人&uint256=数量 这样的尾巴,那它请求的是对 ERC-20 合约调用 transfer 函数。此时冒号后面的地址不再是收款人,而是代币合约本身;真正的收款人在查询参数里,数量同样按代币最小单位计。读这类链接要先核冒号后的合约地址:在浏览器查到的官方合约地址与它一致,才继续看参数里的收款人和数量。两处要分开核对,把合约地址当收款人读是最常见的误读。

可信性只能由你的核对动作提供

支付请求链接没有签名、没有背书,任何人都能拼一条出来。防御动作就那几样:地址做整串核对而不是只看首尾,借助 EIP-55 大小写校验和拦下大部分替换;金额以弹窗换算为准,再让对方用另一渠道报一遍数量;ENS 名字要多看一步链上解析:名字到地址的记录存在注册表合约里,改名、设置多重地址记录或委托自定义解析器,都可能让同一个名字指向不同目标,核对时在浏览器打开该名字的解析记录,与对方口头报出的完整地址一字不差再动;首次付款先小额试转。扫码环节更多的风险面貌,可查 扫码转账安全吗?收款二维码里的地址、金额和跳转怎么读,转账前置清单见 链上转账前必查清单:网络选择、最小单位与 Memo 注意事项

链上转账不可撤销,支付链接内容不具备内在可信性,请在自己设备上完成全部核对。本文为机制解释,不构成投资建议。