02|动作的本质:“签名”不是点确认,授权(Approve)绝不是普通登录

这一篇要解决的问题

上一篇我们明白了“钱包只装钥匙(私钥),资产都在链上”。既然如此,我们在 DApp(去中心化应用)页面上经常弹出的那个“签名”或者“授权”弹窗,到底是在干什么?为什么 Web3 老兵总是警告新手“不要乱点授权”?

在 Web2,点击“确认”或“登录”,最多只是产生一条访问日志或一个会话 token;但在 Web3,每一次“签名”,都可能是你在签署一张没有限额的空白支票。本篇就是要帮你理清:签名、授权和交易的真实含义。

正文

签名(Signature):数字世界的不可抵赖印章

在物理世界,你在合同上按个手印,代表“本人同意上述条款”。 在 Web3,签名(Sign)就是用你的私钥,对一段特定的数据(比如“我要转 10 个 USDT 给张三”)进行一次数学加密运算,生成一串乱码。

任何人拿到这串乱码,用你的“地址(公钥)”去解密,就能得出一个确定的结论:这句话确实是你说的,且内容没有被篡改。

签名的几个核心特点: 1. 脱机可完成: 签名是一个纯本地的数学运算,不需要联网,不需要消耗 Gas 费(手续费)。 2. 不可伪造: 没有私钥,无论如何算不出正确的签名结果。 3. 不可抵赖: 只要是用你私钥签出的名,在区块链的规则里,就 100% 认定是你的意愿。

签名和交易有什么区别?

很多人把“签名”和“交易”(Transaction)混为一谈,其实它们是先后关系。

- 签名: 你把填好的转账支票装进信封,在封口处盖上你的私钥印章。此时,这封信还在你手里。 - 交易(执行): 你把这封信扔进邮筒(广播到区块链网络中),邮递员(矿工/验证节点)把信送达,并把结果记录在公开的账本上。这个把信送达并记录的过程,需要消耗 Gas 费。

这就能解释为什么有时候你在钱包里点了一下“签名”,但不用付 Gas,链上也没有记录(比如在 OpenSea 上登录、或者把 NFT 挂单出售)。因为你只是“签了字”,平台把你的字据存在了它的中心化服务器里,并没有真的“上链执行”。

授权(Approve):为什么它不是“普通登录”?

这里来到了 Web3 最容易让人倾家荡产的一个概念:授权(Approve)

当你想在一个去中心化交易所(DEX)把你的 USDT 换成 ETH 时,DEX 会弹出一个弹窗,请求你进行一次“Approve”。 很多习惯了 Web2 的人,以为这就像是微信授权登录,随便点一下“允许”就行了。

大错特错。

在以太坊(及 EVM 兼容链)的规则里,智能合约(比如那个 DEX)是没有权限直接扣你钱包里的钱的。它必须先得到你的明确授权

当你点击“Approve”并签名发送上链后,你真正在做的事情是:你告诉 USDT 的账本程序(智能合约),允许这个 DEX 合约,在未来的任何时候,从你的地址里扣除指定数量的 USDT。

这里有三个致命的坑:

1. 默认无限授权(Infinite Approve): 为了省去你每次交易都要重新授权的麻烦(每次授权都要交 Gas 费),大多数 DApp 默认请求的是一个“极其巨大的天文数字(比如 2 的 256 次方)”。 翻译过来就是:你允许这个合约把你的 USDT 全部扣光。

2. 授权是长期的,不会自动过期: 只要你不主动发送另一笔交易去把这个额度改为 0,这个授权就永远有效。

3. 如果合约有漏洞或者作恶,你的钱就不归你了: 如果那个 DEX 的代码有后门,或者被黑客攻破了。黑客就可以直接调用你的授权额度,把你钱包里的 USDT 瞬间全部转走。哪怕你的私钥保管得严严实实,没有任何泄露。 因为你已经提前给过“空白支票”了。

钓鱼网站的终极武器:盲签(Blind Signing)

既然授权这么危险,钱包软件难道不提醒吗? 现在的 MetaMask 等钱包已经做得很好了,会提醒你“正在授权多少额度”。

但是,黑客的手段也升级了。他们会构造一些非常复杂的十六进制代码让你签名。你的钱包可能解析不出来这段代码具体是什么意思,只显示一堆乱码,你需要强制勾选同意才能继续。这就叫盲签

比如,有一个很常见的骗局叫 `eth_sign` 钓鱼: 黑客在假的空投网站上,放一个按钮叫“领取空投”。你点击后弹出一个签名请求。如果你没看懂就签了字,你可能签下的是“把我所有的 ETH 都转给黑客”的完整交易。黑客拿到你的签名后,直接广播上链,你的钱就没了。

面向 AI 构建者的启示

理解了签名和授权,你就会明白为什么我们不能轻易把链上操作权交给 AI Agent:

1. 如果 AI 不懂什么是“无限授权”,它可能会为了完成一笔小额代币交换,向一个来路不明的恶意合约给出无上限的 Approve,直接导致你的金库归零。 2. 如果 AI 无法解析钓鱼网站的复杂 payload,它可能会盲目签下致命的恶意交易。

因此,在架构上: AI 可以替你寻找最便宜的 DEX 路由,可以替你拼接好包含最佳参数的交易数据(Data Payload),但“读取并确认这笔交易究竟在干什么”、“最终用私钥签名”的这一步,必须交由人类(或者经过严密形式化验证的独立安全沙盒)来把关。

小结

1. 签名(Sign): 用私钥证明“这确实是我说的”,脱机完成,不耗 Gas。 2. 交易(Tx): 把签好名的指令广播到网络并打包上链,需要消耗 Gas。 3. 授权(Approve): 给智能合约开具的“划款支票”。默认往往是无限额度,且永久有效。被盗的重灾区。 4. 安全习惯: 绝不盲签看不懂的数据;定期取消不常用合约的授权。

下一篇预告

既然我们在这一篇里提到了“交易广播”和“消耗 Gas”。那么下一篇,我们将直面区块链执行层面的核心机制:Gas。 为什么在区块链上运行代码要交钱?为什么有时候交易会失败钱却扣了?Layer 1 和 Layer 2 的成本差异究竟来源于哪里?

---


学习反馈

请在下方提交你的学习反馈:



← 上一篇下一篇 →