今天见证历史。知名 DEX协议 CurveFinance遭攻击,多个池子的流动性被薅走。初步查明,竟然是智能合约编译器Vyper的锅!太离谱,令人不禁直呼好家伙。初步统计损失超5000万刀,CRV平台token瞬时价格一度接近归零!

简单给不懂技术的朋友解释一下,我们使用区块链,很多时候是在和运行在区块链上的代码打交道,这些代码被称作“智能合约”。

对于以太坊这样的主打智能合约的公链,它有一套智能合约的标准代码,供那些在上面开发应用(也叫dApp,去中心化App)的人来编写和运行应用。比如Uniswap,Curve这些,都是运行在以太坊上面的dApp应用。

因为要计算机运行起来方便,节省存储空间,存储在链上的标准代码是接近机器语言非常紧凑的二进制数字,人类不太方便直接阅读和书写

为了让应用开放更方便,就发明了很多种人类方便阅读和书写的“高级语言”用来编写程序。在以太坊上曾经有三种,同一种语法类似LISP语言,并没有流行起来,一种语法类似于Python语言,因为是Vitalik(以太坊创始人)力推的,叫Vyper:最后一个语法类似于Javascript语言的,称之为Solidity

程序员用这些高级语言编写了智能合约程序以后,要使用一种叫做“编译器”的工具程序给“翻译”成以太坊区块链能够运行的“机器语言”也就是标准代码

显然,不同的高级语言,都有各自不同的编译器。这个很好理解,日语翻译和英语翻译肯定不一样,坏就坏在这个编译器/翻译官这里。

这次Curve被攻击,就是Curve部分池子用的Vyper编译器的特定版本存在缺陷导致(疑似,还在进一步调查中。) 这就好比你用日语说“我要喝酒”结果翻译官在翻译成中文的时候翻译成了“我要吃螃蟹”。这就离谱

好在这个Vyper的流行程度并不高,目前以太坊及兼容链使用最多的还是Solidity。英语的翻译官比较清晰,没有翻译错误,谢天谢地

DEX龙头Uniswap,在最最最早期的时候,创始人Hayden就是用的Vyper语言写的代码。幸运的是,后来Hayden请了一个专业的CTO,就把代码改成Solidity了。所以这次Vyper编译器问题,Uniswap安然无恙。而大量使用Vyper语言的Curve Finance就遭殃了,

这个缺陷导致的问题是经典的“重入问题”。遥想当年,2015年,The DAO事件直接导致以太坊硬分叉,分裂成了ETH和ETC,就是这个重入问题,真是历史的魔咒!

但当年The DAO的重入问题是发生在高级语言层面,就是说你英语就说错了,本来想喝酒说成了想吃螃蟹,翻译官并没有翻译错

而这一次Curve事件,可怕的是你说对了,翻译官却翻错了,你又看不懂(审计公司也不会去审编译后的二进制代码),结果神不知鬼不觉就引入了致命BUG!这也给今天的整个DeFi行业乃至整个区块链行业敲响了一记警钟!

今天所有,从写代码的,到审核代码的,到第三方审计,都不会去看编译之后的二进制代码。大家都默认了编译器不会有问题,只要看到高级语言写对了就认为没问题了。

中本聪为啥不给BTC脚本扩充太过强大的智能合约功能?就是为了避免复杂度升高引起不可饶恕的错误。有人抨击BTC保守,可是面对动辄百万千万甚至亿万刀的资产,谨慎、保守怎么都不过分。大多数人都还是普通人,几十、几百万美刀的损失,落在谁头上,都是致命一击

这也凸显了墨菲定律的告诫: 凡是可能出错的环节,只要经过足够长的时间,就一定会出错。这次是 Vyper实属万幸。将来呢? 如果Solidity出现致命漏洞呢? 整个DeFi,万千协议,百亿千亿资产,一座座辉煌的大厦竟然是建立在流沙之上,瞬间釜底抽薪,全部轰然倒塌,是不是很可怕呢?

为什么穿越周期难?在追求这个那个梦想的目标之前,还是先审视审视自己能不能“活到那一天吧。很多时候,活到就是赢,剩者为王。