比特币UTXO模型介绍

若是你曾上过BlockExplorer观察本身的比特币收入情况,你是否曾经被搞的一头雾水呢?这正是由于比特币所使用的交易模型并不是咱们直觉上以帐户为基础的,而是一种叫作UTXO的模型 。在个人前一篇文章:《深刻了解NEX:Neon Exchange》中,也提到了比特币所使用UTXO模型与以太坊使用的帐户模型在功能上的一些差别,但究竟这两个模型到底差在哪儿?php

ETH与帐户模型

以太坊所使用的帐户模型比较容易理解,就好像咱们每一个人都拥有一个银行账户同样。在以太坊的世界中,每一个地址就像是一个账户,每一次的扣款,交易事后,都会将账户的余额纪录在区块链当中。所以在认证交易时只要检查账户是否有足够的余额就能够了。这个方法简单,直观,较利于智能合约的开发。若是你曾经上过Etherscan观察你的交易纪录,也会发现一切都简单易懂输入你的交易ID以后你会看到这种画面:java

简单的从A到B,这只要看得懂英文应该就能够理解了。安全

比特币与UTXO模型

UTXO全名是Unspent Transaction Outputs,未花费交易输出,相比于帐户模型来讲没那么直观。架构

在比特币的世界里,并无一个纪录全部账户余额的账本。那么要怎么肯定一个地址如今有多少余额呢?简单的说,你要回顾之前全部的交易,而且找到全部寄给你的比特币,再把他们全都加起来,才会知道。less

交易中的输入与输出

比特币中的一笔「交易」也较为复杂。假设今天,Fred给了Alice 2个BTC,Ted给了Alice 3个BTC,咱们把这两笔寄给Alice,总和为5的BTC称为Unspent Transaction Outputs即未花费交易输出:也就是说如今Alice拥有了两笔Unspent Transcation Outputs,能够看成他将来转钱给别人的input区块链

若是如今Alice想要转5 BTC给Bob,他要将前面两笔总和恰好为5的UTXO看成这笔交易的输入。而矿工要验证的就是并无其余交易在先前的区块当中,已经使用过这笔Unspent Output。若是同一笔输出已经被发送过,那它就不是Unspent了,这就是比特币预防Double Spending的方法。设计

还有一个条件就是,outputinput总数要吻合。实际上在交易的时候,并不可能刚恰好老是找到两笔加起来等于你要转出金额的output,就好像上图中,若是爱丽丝Alice只想转4.5个BTC给鲍勃Bob,那么他就要多加一栏的output,把多出来的0.5个BTC转给本身,这样的交易才是平衡的。code

咱们能够实际来看看比特币的交易长什么样子,咱们如今若是想要观察BlockExplorer上本身的交易纪录,会发现它长的是这付德性:blog

一笔交易包含了大量的inputoutput,这颇有多是一笔交易所转出金额的纪录,因此含有不少的output。而左边的input则多是大量转入金额交易所钱包的交易output教程

有趣的是,咱们实际上在一笔交易之中没法「肯定」真正的交易金额。例以下面这一笔纪录中,右边包含了三个output,咱们没法肯定究竟0.2,0.03以及56.38三个output究竟哪个才是真正的目的地。搞很差Alice只有一笔Unspent Transaction Output未花费交易输出56.61 BTC,所以他在这笔交易中虽然他只想要转0.2BTC,却必需要动用他惟一一笔UTXO,而剩下的56.38再转回给本身。

固然,如今的比特币钱包已经帮咱们照顾这些事情了,因此在使用的时候就好像银行账户同样,咱们只要输出目的地址,钱包就会帮咱们找出合适的未花费输出(UTXO)看成输入来完成交易 。但若是你很闲,或是要干一些不想让你知道的事,就能够本身来打包奇怪的输入输出来增长匿名性。

UTXO的优点与劣势

UTXO由于没有账户的存在,所以允许平行进行多笔交易。假如你有许多的UTXOs,你能够同时进行多笔交易而不会被阻挡。再来就是匿名性,如上面提过得,你能够轻易的隐藏本身的交易目的。除此以外,UTXO也被认为比较安全且有效率,能够透过Simple Payment Verification(SPV)来快速验证检验交易。

但UTXO最大的缺点就在于他是Stateless无状态的,这对于在其上开发应用程序很是的不利。就像有名的Qtum虽然底子是UTXO的交易模式,可是仍然会设计Account Abstraction Layer帐户抽象层来让应用程序的开发变得容易。

小结

如今区块链应用开发当道,UTXO倾向被你们视为一种只能简单处理交易的模型,我以为必定程度上算是时代的产物吧!毕竟离比特币的发明也已经十年了,尽管有一些特性是无可取代,可是你们还是偏好朝向Account Model或是混合式的架构前进。

但不论怎么说,比特币永远都是区块链世界的老大!并且如今你们免不了仍是要用到BTC交易,因此咱们仍是有必要了解UTXO运做方式的!

总之,但愿这篇文章能够对你们对比特币有深一点的理解啦!

安利两个个人教程:java比特币开发php比特币开发,内容主要是区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO、集成比特币支持功能如建立地址、管理钱包、构造裸交易等。但愿对你们有帮助。

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息