首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

比特币如何解决“双花”问题

什么是“双花”

所谓“双花”,是指在区块链加密技术出现之前,加密数字货币和其他数字资产一样,具有无限可复制性,如果没有一个中心化的媒介机构,人们没有办法确认一笔数字现金是否已经被花掉。因此,在交易中必须有一个可以信贷的第三方来保留交易总账,从而保证每笔数字现金只会被花掉一次。

简单来讲就是同样一笔数字资产被重复支付,即同样一笔钱被花掉两次或多次。

由于数字资产是以互联网为基础的虚拟数字,白话说就是一窜字符而已。既然是一窜字符那么就很容易被复制或者多次发送使用。也就存在支付或者转移数字资产时双花或多花的问题。这个问题在最早的电子货币支付使用过程中是一个长期存在的问题。

比特币系统如何解决“双花”问题

想搞懂如何解决双花就得先搞懂比特币系统。在比特币系统中本聪使用UTXO技术防止双重支付。

先翻译UTXO是什么意思:

TX : Transaction翻译为:交易

O:Output翻译为:输出

TXO : TX output翻译为:交易输出比特币系统中TXO包含一个value(价值)值和一段脚本,该脚本规定了谁有权使用这笔交易(比如需要私钥签名)。

UTXO:Unspent TXO翻译为:未花费的交易输出比特币系统规定:只有对“尚未使用过”的交易签名才能是有效签名。

我们通过之前的文章知道,比特币系统中所有的每一笔交易信息都以统一固定的机制以固定的时间戳被写在区块上。

我们把每一笔交易理解为一张汇款单,把比特币系统上每个区块比如成一本账簿。那么账簿上就会贴满所有每一笔交易的汇款单。每一笔交易的汇款单简单理解就是UTXO。

说白了,UTXO就是一个数据结构,包含交易数据和执行脚本(Pubkey scripts)。这个数据结构包含每一笔的交易信息和未花费的交易输出。

以现实的钱包举例,一个钱包中有一个10元、1个5元,1个1元,一共16元。比特币一个账户的余额,也是根据这个账户UTXO计算的。

当花12元买东西时,可以把10元和5元拿出去,然后得到找零的3元,那这个时候之前的10元和5元因为已经花出去了就不再是UTXO了,新找零的3元成为新的UTXO,再加上之前未动的1元UTXO,目前的余额是4元。这次新的交易记录在了新的区块上,但没有改变历史区块的数据。

比特币使用前后链接的区块链记录所有交易记录,当之前的UTXO出现在后续交易的输入时,就会被检查这笔交易的来源已经不在UTXO列表中,也就是说这笔钱已经被花过,这个UTXO已花费掉,不再是UTXO了。

如果你用同一笔UTXO构造了两笔分别付给A和B的交易。那么bitcoin-core客户端(比特币系统节点)的规则是只转发先侦听到的那个。但至于哪笔交易会被包含进未来的区块,则取决于矿工。

矿工的挖矿程序一般是定制开发的,矿工可以自主任意选择这两笔交易里的一笔。比如有的矿工会选择先看到的交易,有的矿工会选择交易手续费更高的那个。

当这两笔相矛盾的交易中的一笔被写入区块链,并且深度达到6后(6个确认后),可以认为这笔交易获得了最终的确认。等待6个确认的情况下,比特币是几乎绝对不可能被双花的。

每笔交易都有若干交易输入,也就是资金来源,也都有若干笔交易输出,也就是资金去向。一般来说,每一笔交易都要花费(spend)一笔输入,产生一笔输出,而其所产生的输出,就是“未花费过的交易输出”,也就是UTXO。所有的资金来源都必须来自前面某一个或者几个交易的UTXO,就像接水管一样,一个接一个,此出彼入,此入彼出,生生不息,钱就在交易之间流动起来了。

如果你单单通过文章来搞懂比特币系统或者区块链可能有一定难度,或者会有很多没法搞懂的点。那么在学习和搞懂这些技术理论的同时可以结合挖矿与钱包使用来体验。这样更利于深入了解区块链。

文章只为搞懂区块链学习之笔记,有纰漏或未详尽的欢迎指正交易,共同探索学习。本公众号文章若转载需取得允许。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180203G09X3H00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券