一个程序员怎么会上当
2025 年 4 月 12 日深圳的小林在 YouTube 看到一个 28 万播放的视频:「Build Your Own MEV Arbitrage Bot in 15 Minutes · Earn $300/day Passively」。英文口音不错的「开发者」逐步演示部署。小林懂 Solidity,自我设定是「我能读懂代码所以不会被骗」—— 然后他被骗了 2.5 万 U。
怎么会?他跟着视频走:Remix 里打开教程给的 Pastebin 合约源码、用自己钱包部署到主网(gas 18 美元)、视频说「为让 bot 有套利本金,请向合约 deposit 0.5-1 ETH」,他转了 1 ETH。视频接下来说「点击 Start 即可开始套利」。他点 Start,几秒后合约里的 1 ETH 不见了。
哪里不对
第一个不对是「合约 owner 字段不是 msg.sender」。真套利策略是无状态的合约逻辑,不需要 owner —— 因为执行者就是部署者。这个视频教程里的合约 owner 是硬编码的视频作者地址(hex 字面量写在源码里)。小林部署时 gas 用的是自己钱包,但合约里的「老板」是别人。
第二个不对是「Start() 函数实际逻辑」。Solidity 代码可以通过命名误导让人读不懂。Start() 函数里调用一个名字像 _executeStrategy() 的内部函数 —— 实际写的是 owner.transfer(address(this).balance)。小林作为开发者读源码时跳过了内部函数体(默认相信函数名描述的语义)—— 这是程序员审外部代码的典型盲点。
第三个不对是「合约要求 deposit 本金」。真套利合约从来不要求用户 deposit 本金,因为现代套利全部用 flashloan —— 借进借出在一笔交易内完成,本金归 0。任何让你「先充钱给合约才能开始套利」的逻辑都是假的。
你能学到什么
最戏剧性的是接下来这一段:小林转进去的 1 ETH 没回来时他归咎于「我的 Solidity 理解不到位」,又转了 1 ETH 试不同参数 —— 反复直到 2.5 万 U 才意识到。这种「我是聪明人不会被骗」的自信反而让程序员群体在加密钓鱼里损失率不比新人低。
能学到的第一条:自信不是核验。能读 Solidity 代码不等于已经核验了一份代码。真核验要逐行读、要做单元测试、要在测试网部署、要 fuzz —— 这些步骤一个不少,否则就是没核。
能学到的第二条:辨别假套利 / 假 MEV 教程的三条硬指标,所有正经教程都该全过:
- 真套利合约不要求 deposit 本金(用 flashloan 就够)
- 真套利策略无状态、不需要 owner 字段
- 真套利 repo 在 GitHub publicly accessible(不是 Pastebin / Anonfiles)
- 教程要求你 deposit 启动资金到 bot 合约 —— 真套利 bot 用 flashloan 不需要你的本金
- 教程提供 Pastebin / Anonfiles 源码下载链接 —— 而不是 GitHub 公开 repo
- 合约 owner 是视频作者,而非 msg.sender —— 一行代码差别但你的钱直接归他
- 视频评论区清一色已赚到 / 感谢老师 —— 水军特征
- 教程要求你「赋予合约 unlimited 授权」—— 这是榨干所有 token 的标配后门
钱进了合约就是丢了 —— 合约部署是不可逆的,attacker 提走的 transaction 也是不可逆的。按《私钥泄露应急 · 五步抢救流程》后半:保留视频链接、合约地址、部署 / 调用哈希作证。举报 YouTube 视频 → Spam or misleading → Scams or fraud。小林后续帮一位朋友审了一份类似教程,发现同样的 owner 后门 —— 这类钓鱼合约源码可以批量生成,只换函数名和注释。他把样本提交到 GitHub awesome-evm-honeypots 库做反向教材。
这个案例的真正用法不是看完点个收藏,而是把识别要点那几条记进脑子里。下次类似场景出现时,让你 3 秒内识破。