大家都在聊,你岂能错过?
今天的“SMT遭到与BEC类似的溢出攻击”的新闻想必大家都知道了,
部分币友还没反应过来怎么回事,
对此微博研发副总经理Tim Yang发了一条长评认为“重要的token资产不适合构建在erc20体系基础之上”:
TimYang:
最近的ERC20的转账的安全问题,直接原因都是代码安全漏洞,由程序员背锅,但大家比较少讨论其深层次的原因,为什么以太坊比较容易出安全问题?
以太坊只是一个记录dapp执行结果的区块链,其本身并没有加密货币复式记账所需的utxo模型。以太坊自身的以太币也是由balance来表示账号余额,用余额的区块链有一个明显的缺陷,很容易遭受重放攻击(交易的请求再发送一次)。以太坊用了nonce等tricky的做法避免主链货币重放,但对于基于dapp的代币,就需要依赖开发者自己来保障其安全逻辑。
采用复试记账的utxo则所有的转账需要检查输入来源,如果这个来源已经被使用过一次,则表示这次转账是一个双花尝试,而比特币最主要的架构设计逻辑比如PoW以及长链胜出就是用于防止双花攻击。
以太坊智能合约运行的大致流程是,取得写区块的节点运行dapp并记录运行结果到新的区块,当这个结果被其他节点验证之后这个新区块就被整个网络认可,验证的方法也是执行一遍这个合约脚本,智能合约的设计约束是deterministic,但并无其他机制可保证这个执行的安全性及正确性。即使有bug,只要bug能被其他节点运行出相同结果,记录就会上链,erc20或erc721是一个智能合约接口的约定,方便通用的钱包可以访问这些合约。
从dao到bec,smt这些问题都是程序员的问题吗?在数字货币的时代,重要的token资产本身是需要货币级别的安全程度,以太坊目前的设计更适合游戏积分之类的合约运行结果,我的看法是,重要的token资产不适合构建在erc20基础之上。它没有任何货币安全设计的考虑。
再重复一下,重要的token资产不适合构建在erc20体系基础之上。
随后Tim Yang又发了一条微博表示“比特币看似多余的设计(UTXO)原来是有用的”,
众币圈大佬纷纷转发表示认同:
长铗:这就是为什么Bytom要使用BUTXO[偷笑]
姚远BTCT:论UTXO的重要性。
有网友表示不认可结论:“最安全的代码是no code。uxto能用于token的扩展么?应该是批评solidity语言的一些设计细节吧?”
Tim Yang回复:“再怎么设计细节,再怎么 review, 凭空出 token 的现象都不会停止,如果发行量之外的 token 能够从代码中不小心蹦出来,而且还能被区块链认可,那 token 上这个区块链有何用?”
其实关于UTXO和Account模式孰优孰劣的讨论早已有之,而且也早已有可发行Token的UTXO公链的实现。
早在《Qtum量子链:选择比特币UTXO模型的原因及其优势》一文中,量子链阐述了自己选择比特币UTXO模型的原因及其优势:
“我们选择UTXO仅仅是因为这是最好的技术,有很多文章极力想把Account模式打造成与UTXO模式一样的高性能和安全,然而事实并非如此。不多赘述细节,Account模式过于不成熟也过于简单,并且没有无法进行并发处理。它总是让我想到纸杯连线通话的交易模式。对Qtum而言,使用Hyperledger的混合模式(hybrid model)将是一个错误的选择,因为它无法与比特币和以太坊兼容,而这正是我们在量子链中需要实现的目标。”
比原链也是底层选择使用UTXO模式的公链之一,在《比原链设计思考: 扩展性UTXO模型》一文中,开发者说道了UTXO的优点:
“UTXO 具有天然的匿名效果,一个账户所对应的未花费交易是难以发现的,如门罗币就是采用混币的方式实现隐私的。
在性能方面,由于UTXO是独立的数据记录, 那么就存在极大的并行性可以提升区块链交易验证速度。
以太坊的账户模型很容易的实现了超级电脑模型。然而,性能一直是一道难以逾越的坎。在性能方面,utxo天然的可以并行运行,而基于世界状态的以太坊难以扩展。”
那么以太坊为什么弃用UTXO呢,作者说道:
“正是因为智能合约的考虑,Gavin Wood要基于UTXO去实现图灵完备的智能合约(功能多样性的超级电脑)是困难的。而账户模型是天然的面向对象的,对每一笔交易,都会在相对应账户上进行记录(nonce++)。为了易于管理账户,而引入了世界状态,每一笔交易都会改变这个世界状态。这和现实世界是相对应的,每一个微小的改变,都会改变这个世界。”
你怎么看?欢迎去论坛讨论:8btc.com