学习
实践
活动
工具
TVP
写文章
专栏首页极客编程比特币UTXO模型介绍 原

比特币UTXO模型介绍 原

如果你曾上过BlockExplorer观察自己的比特币收入状况,你是否曾经被搞的一头雾水呢?这正是因为比特币所使用的交易模型并非我们直觉上以账户为基础的,而是一种叫做UTXO的模型 。在我的前一篇文章:《深入了解NEX:Neon Exchange》中,也提到了比特币所使用UTXO模型与乙太坊使用的账户模型在功能上的一些差异,但究竟这两个模型到底差在哪儿?

ETH与账户模型

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

简单的从A到B,这只要看得懂英文应该就可以理解了。

比特币与UTXO模型

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

在比特币的世界里,并没有一个纪录所有帐户余额的帐本。那么要怎么确定一个地址现在有多少余额呢?简单的说,你要回顾以前所有的交易,并且找到所有寄给你的比特币,再把他们全都加起来,才会知道。

交易中的输入与输出

比特币中的一笔「交易」也较为复杂。假设今天,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转给自己,这样的交易才是平衡的。

我们可以实际来看看比特币的交易长什么样子,我们现在如果想要观察BlockExplorer上自己的交易纪录,会发现它长的是这付德性:

一笔交易包含了大量的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运作方式的!

总之,希望这篇文章可以对大家对比特币有深一点的理解啦!如果喜欢我的文章,可以按照我@antonsteemit,我会努力产出一些区块链相关的文章。

建议你浏览我们汇智网的各种编程语言的区块链教程和区块链技术博客,深入了解区块链,比特币,加密货币,以太坊,和智能合约。

  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS入门教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。

汇智网原创翻译,转载请标明出处。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://my.oschina.net/u/2275217复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 比特币支付协议 原

    支付协议被视为已弃用,将在更高版本的比特币核心中删除。该协议在一些钱包中存在多个安全设计缺陷和实现缺陷。当使用BIP70 URI时,用户将开始在比特币核心版本0...

    笔阁
  • 比原链设计思考: 扩展性UTXO模型

    用户模型是比原链在最初就需要确定的重要数据结构, 团队的选择还是聚焦在两种典型的模型系统中,Account模型和UTXO模型,和其他大多数区块链设计一样, 选择...

    比原链Bytom
  • 比特币钱包开发【C#】 原

    在这个教程中,们将使用C#来开发一个比特币钱包,我们使用NBitcoin这个库。教程中的代码实现了比特币的存储、接收和支付功能,可以很容易地移植到其他应用中。

    用户1408045
  • 比原链设计思考: 扩展性UTXO模型

    用户模型是比原链在最初就需要确定的重要数据结构, 团队的选择还是聚焦在两种典型的模型系统中,Account模型和UTXO模型,和其他大多数区块链设计一样, 选择...

    比原链Bytom
  • 温柔地介绍比特币挖掘

    最近在吃晚饭时,我被要求解释比特币挖掘,而我挣扎着,因为它与许多其他概念纠缠在一起。这是我的尝试,把它分解成一口大小的小块。

    天空
  • 比特币钱包隔离认证开发指南 原

    本文件的大部分内容可以在与隔离认证相关的BIP中找到,包括BIP141,BIP143,BIP144和BIP145。请将此视为阅读其他相关文件的第一个参考点,并作...

    笔阁
  • 比特币的合作优化挖掘模型

    我们从博弈的角度分析了比特币挖矿,并提出了一个最佳挖矿模型,使矿池和矿工的利润最大化。该模型是一个两阶段的Stackelberg博弈,每个阶段形成一个子博弈。在...

    随便起个名
  • 比特币:如何用地址查询交易? 原

    在比特币应用开发中,一个常见的问题就是,在知道比特币地址的情况下,如何查询这个地址上发生的所有交易?或者类似的说法,如何查询一个指定的比特币地址发生的所有交易?...

    用户1408045
  • 比特币的合作最优挖掘模型

    我们从游戏的角度分析了比特币挖矿,并提出了一个最优的挖矿模型,使池和挖矿者的利润最大化。该模型是一个两阶段的Stackelberg博弈,每个阶段形成一个子博弈。...

    用户8789655
  • 窥探比特币核心机制如何运转 原

    比特币真的很酷。当然,有人在想它是否是一种有用的技术,无论我们目前是否处于加密货币泡沫中,或者它目前面临的治理问题是否会得到解决......但在纯粹的技术层面上...

    笔阁
  • 比特币多种输出脚本(outputScript,scriptPubKey)介绍

    目前可见outputScript(scriptPubKey)格式:(参考https://bitcoin.stackexchange.com/questions/...

    sickworm
  • UTXO和Account模型一个都不能少

    UTXO对于非区块链从业人员来说可能比较陌生,UTXO的全称是Unspent Transaction Output,这中本聪在比特币中的一个天才设计。而Acco...

    深蓝studyzy
  • Python比特币公链技术架构介绍

    作者:csunny,具有多年开发经验,有前后端开发经验,熟悉python、go、nodejs等多种语言,目前在国内某一线互联网大厂工作,主要从事devops以及...

    Python中文社区
  • 比特币第三方API大全 原

    在开发比特币应用时,除了使用自己搭建的节点,也可以利用第三方提供的比特币api,来获取市场行情、进行交易支付、查询账户余额等。这些第三方api不一定遵循标准的比...

    用户1408045
  • 比特币应用开发10大必备NuGet包 原

    如果要在.NET环境下开发比特币应用,本文列出的10个NuGet开发包是你不可或缺的利器。

    用户1408045
  • 区块链基础:交易模型解读

    UTXO(unspent transaction output)未花费的交易输出,这是比特币交易中核心概念。

    程裕强
  • 简明介绍比特币钱包及其安全性

    前两天介绍了TEE与区块链、比特币钱包的一些东西!也许不是很明白比特币钱包这个东西,(本文来自于知乎内容、整理、编辑) TEE与比特币硬件钱包应用之Ledger...

    安智客

扫码关注腾讯云开发者

领取腾讯云代金券