2018-05-26 袁梦 以太坊智能合约漏洞频出 基于UTXO的公链是否是更安全的区块链平台?
今年以来,多个基于ERC20的智能合约被曝存在安全漏洞,除了已经造成巨大影响的BEC、SMT、BAI等,仍有多个存在安全隐患的智能合约代币依然在交易。巴比特此前也做过特别报道,详情请戳 BEC、SMT现重大漏洞,这8个智能合约也可能凉凉
虽然事后交易所立刻暂停交易和提币,项目方立马升级智能合约,造成的损失和市场恐慌等一系列反应却不可追回,在程序员小哥背锅的同时,我们也可以思考频出的漏洞是否有其深层次的原因?以太坊智能合约是否本身就存在着风险?重要的token资产是否适合建立在ERC20体系基础之上?
目前基于以太坊的Token合约风险主要有两种:
一是自己写的智能合约出现漏洞, 被人攻击。以太坊作为一个记录DAPP执行结果的区块链, 对于基于合约层的智能合约,需要依赖开发者自己来保障其安全逻辑,一旦合约编写者一时粗心,便可能造成一失足成千古恨的后果。
例如:2018年4月22日BeautyChain出现重大安全漏洞,价值几乎归零,BEC凭空蒸发了10亿美元,事后证明是程序员忘记做溢出检查。
二是合约调用的底层合约出问题,间接产生风险。合约层是一台封装了可以执行图灵完备脚本语言的虚拟机,可以通过编写脚本语言作为智能合约部署到以太坊区块链中。
例如:去年,一个叫做“devops199”的开发者触发了以太坊Parity钱包漏洞,漏洞出在钱包调用的一个library(以太坊的底层库函数,可以理解成公用合约)上。因为以太坊的合约调用是把地址当指针使用,每次执行用户编写的智能合约都要调用library。“devops199”把底层库函数破坏的同时相当于把所有合约的指针都破坏了,从而使得所有钱包里的资金被永久冻结。
微博研发副总经理Tim Yang曾表示,
“为什么以太坊比较容易出安全问题?以太坊只是一个记录DAPP执行结果的区块链,其本身并没有加密货币复式记账所需的UTXO模型。重要的TOKEN资产本身是需要货币级别的安全程度,以太坊目前的设计更适合游戏积分之类的合约运行结果。” 他还强调,重要的TOKEN资产不适合构建在ERC20体系基础之上。
那加密货币复式记账所需的UTXO模型的区块链项目有哪些,在安全性上又有哪些优势?
比特币的UTXO模型经过了多年较为稳定的运行和测试,性能和安全性都有较大的优势。而以太坊的账户模型理解起来比较容易,但是需要考虑更多复杂的临界情况来防止双花攻击和重播攻击。
另外做资产交易的量子链和比原链也采用了UTXO模型。其中使用扩展UTXO模型BUTXO的比原链,把资产作为新的UTXO形式进行交互,不仅支持无限种类的资产,而且拥有了图灵完备的智能合约。同时杜绝了以太坊帐户模型所存在的数据溢出,或者各种其它漏洞的出现,兼具灵活性和可控性。
对比以太坊,比原链的优势有三点:
第一,比原链天然支持多资产,在比原链上的每一笔资产都是一个UTXO, 而不是用智能合约来模拟的。据比原链开发团队朱益祺表示,比原链交易的设计思路其实更接近比特币,即一切都基于UTXO。每一笔比原链上的资产UTXO都是由图灵完备的智能合约守护。在比原链的设计中账户只驻留在本地,唯一上链的就是智能合约,而且每一笔交易都会自动生成一个新的智能合约。
第二,比原链的发型资产的职能合约是天生自带的,不像以太坊上都是由开发者编写的,水平参差不齐的话,则会有安全风险。比原链的合约调用是创建智能合约的时候就将调用合约作为子合约加入进来,以后不管调用的合约模版是否更改或出现漏洞,都不会影响所有已经完成的智能合约。
第三,比原链的合约调用更安全,调用以太坊的智能合约更像是调用一个镜像,而不是调用一个底层合约的最新状态。
- 由于以太坊的合约调用是把地址当指针使用,一旦以太坊的底层库函数即公用合约调用出错,所有合约的指针都将被破坏。
- 作为管理成千上万种资产的公链,比原链在合约调用的设计中对指针合约的使用进行了规避。比原链的合约调用是创建智能合约的时候就将调用合约作为子合约加入进来,当被调用的智能合约的底层模板没有漏洞时,则不会影响已经完成的智能合约。
比原链的目标是做资产管理的专用型公链,比起近期漏洞频出的以太坊智能合约,比原链有希望在打造世界级的安全区块链平台的路上走得更远,同时也需要时间的验证。