谈谈区块链:以太坊的UTXO

本来并没有计划写这篇文章,只是这两天微信里有一篇文章传播的比较厉害,叫:《其实并没有什么比特币,只有UTXO》。其中有这么一句话:HyperLedger 和Ethereum 一开始并没有采用 UTXO,现在前者已经切换回 UTXO,后者打算增加这个选项。很多朋友过来问我有没有这么回事,所以专门写一篇文章来阐述我的观点。

图片描述

这篇文章给大家造成很大的困扰,是因为大家都知道以太坊和Hyperledger当前都是基于账户模型的,没有任何UXTO的概念。而作者在文章中指出Hyperledger已切换到UTXO,以太坊也在考虑增加,究竟是怎么回事。

首先说Hyperledger fabric,fabric里连代币都没有(比特币里有比特币,以太坊里有以太币),说什么UTXO就没头没脑了。遍查fabric1.0的整个代码,只在chaincode example里找到一些关于UTXO的内容,那只是用chaincode实现对比特币UTXO的一个存储功能,而且只是一个智能合约的示例。

那作者为什么说fabric已经切换到UTXO了呢?遍查网络,的确发现了相关的内容。一篇是ConsenSys的文章,开头第一句话就是:Recently there has been a proposal to have UTXO based architecture as the fabric of the Hyperledger project.(网址:https://medium.com/@ConsenSys/thoughts-on-utxo-by-vitalik-buterin-2bb782c67e53#.sttqvpfqe)。另一篇是数字资产公司(Digital Asset Holdings)的文章,里面说到:We are also switching from our simplistic notion of accounts and balances to adopt to de facto standard of the Bitcoin UTXO model, lightly modified.(网址:https://digitalasset.com/press/hyperledger-beta-retired.html

这些似乎印证了作者的观点。但实际不然,因为这两篇文章都是时间比较老(2016年3月份),在那个时间点的确有那样的建议和讨论。并且很显然当前代码里没有任何UTXO,所有的代码和工作模式仍然是账户模型。我们在网络上继续寻找,在Reddit的帖子上找到了关于这方面的讨论:Both Vitalik and ConsenSys do indeed believe that UTXO is unnecessarily complicated to serve as the Hyperledger fabric.

图片描述

所以结论是:fabric的UTXO只是曾经的一个讨论,目前并没有在fabric 1.0中实现。而且以后如果要增加的话首先得为fabric引进自己的代币。我个人的观点认为,fabric为商用智能合约系统设计,基于账户模型更加合适。

下面我们说以太坊的UTXO。以太坊的确是在考虑引进UTXO,但是此UTXO非彼UTXO。并不是像大家想象的那样,用UTXO来替换现有的账户模型。首先以太坊为智能合约而设计,其账户模型里除了有余额(balance),还有智能合约代码,还有nonce(为防止重放攻击),以及自定义的存储。把这些换成UTXO显然不合适,因为UTXO胜任不了。比特币的UTXO里只有一个简单的属性:余额(balance)。

那么以太坊的UTXO是指什么呢?这就是以太坊的另一个话题了:分片(Sharding)。分片是扩展以太坊、增加TPS的有效方法,目前正在社区里被广泛讨论和研究。目前的以太坊的工作模式是所有节点(比如共16万个)同时验证所有交易,实际上这是极度低效和没有必要的一种模式。为了保证一致性,如果我们按照地址的前4位来分片,可以把所有地址分成16片。这样每个交易只需要其中1万台节点验证便可通过。如果一个交易涉及的账户都在同一片区并没有什么问题,但如果涉及到不同片区问题就来了。

为了解决不同片区之间的交易问题,以太坊设计出了称为收据(receipt)的工作模式。而这个收据的模式和UTXO类似,故而也称为以太坊的UTXO。

既然此UTXO并不是指替换当前账户模型,变成比特币模式的UTXO,那么是不是说明当前账户模型就没有问题呢?也不是!当前账户模型的确存在一些弊端。

以太坊中以太币的转移安全性不如比特币高。下面是一个真实的例子。一个网友请我帮忙,让我帮助从Yobit.net追讨258个ETH。原因是他从Yobit.net转移币到云币网账户时,发生了out of gas错误。云币网给出的目标地址是一个合约地址,而Yobit.net以为是个外部地址,交易设置的gasLimit为21000(这对于合约账户就不够了),因此发生了out of gas的异常。币的转移被取消,但是这个交易(Transaction)却是完成的。

图片描述

Yobit.net系统以交易成功作为币转移成功的依据,所以出现了问题。而这些问题是在UTXO模型里不会发生的。

所以针对这些问题,以太坊社区为提高转移以太币的安全性,也在考虑设置更加抽象的账户模型,把控制权交给EVM(智能合约层面),这样每个用户可以自定义自己的账户模型。通过智能合约能够实现任意的账户模型,比如UTXO。

这些都还没有发生,但是我相信UTXO也将在未来的以太坊中扮演重要的角色!

作者:谈国鹏 比特宝(bitbill.com)创始人,现任**集团区块链研发负责人。
文章选自作者微信公众号《谈谈区块链》中的一篇,作者已授权转载发布。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值