先简单说,双花问题是一笔钱被重复花了两次。
双花问题包含两个子问题,一种是同一笔钱被多次使用,另一种是一笔钱只被使用过一次,但是通过黑客攻击或者造假钱的方式,将这笔钱复制了一份,再次使用,双花问题主要通过第三方机构来解决,区块链在共识机制的基础上,引入了时间戳和utxo模型,通过共识机制来解决问题。
在数字化货币系统中,由于数据的可复制性,使得系统可能存在同一笔数字资产因不当操作被重复使用的情况,这也称之为双花。
为了解决双花问题,我们日常的数字资产使用依赖于第三方信任机构进行。这类机构对数据进行中心化管理,并通过实时修改账户余额的方法来防止双重支付的出现。而作为去中心化的点对点价值传输系统,比特币通过UTXO、时间戳等技术的整合来解决双花问题。
具体来说,当一笔交易被广播到区块链网络之后,接收到交易的节点会对交易进行验证,检查其是否被花费过,即是否存在于UTXO中。如果交易输出已不存在于未花费交易列表中,则验证失败。
另一方面,为了防止一个UTXO被重复使用的情况,比特币网络中还引入了时间戳的概念。假设用户A将被认证为UTXO的1 BTC同时转账给B1、B2,两笔交易仅有一笔会成功完成,因为挖矿节点会选择性的记录优先接收到的或交付手续费更高的那笔交易。当交易被挖矿节点先后记录,根据时间戳的数据,最先被记录的交易才能成功验证。
即使两个挖矿节点分别记录并验证“从A到B1”以及“从A到B2”为有效交易,且将各自挖出包含相关交易的新区块同时广播到比特币网络中;双花现象也不会产生。根据比特币协议,当两个节点同时生成新区块时,区块链会出现分叉;只有最先生成新区块并成为当前最长链上的交易,才能被认证。通常有超过六个区块对交易进行确认之后,该转账过程才算成功。
当然比特币区块链中也不是绝对不可能出现双花现象的,比如遭受“51%算力攻击”的时候。不过这个事情发生的概率小到基本可以忽略。
请点击输入图片描述(最多18字)
2008年,有个叫中本聪的人发表了一篇论文《比特币:一个点对点的电子现金系统》,这篇论文描述了比特币的详细操作方案,标志着“比特币”的诞生。
比特币白皮书,也就是中本聪写的那篇论文《比特币:一个点对点的电子现金系统》,看似非常复杂,其实通过白皮书的简介,我们可以发现,中本聪想要解决的终极问题是“去中心化问题”,去中心化是他的终极理想。但是,想要实现去中心化,要面很多,对现在中心化体系来说,不是问题的问题。在中本聪看来,其中最大的问题就是“双重支付”的问题,就是我们说的“双花问题”。
“双花问题”是怎么回事?
双花问题,简单讲就是一笔钱能被花两次三次很多次。为什么双花问题会成为比特币系统里面一个这么重要的问题呢?原因就在于,比特币,是虚拟货币,它是虚拟的,通过代码形式呈现出来的,是可以被复制下来的。一旦被攻破了代码漏洞,那么就可以循环使用同一笔比特币,这样一来,比特币就失去了货币的价值了。我们想一下,要是一笔钱可以花很多次,你有500块钱,你去买一件500块钱的衣服,还能循环使用,再去买一双500块钱的鞋,这样一来,钱的价值在哪里呢?它就没有价值了啊!
所以,中本聪在设定比特币系统的时候,他所有的技术手段基本上都是围绕着解决双花问题的,来保护比特币作为一种货币,它自身的一个价值。
其实,这个双花问题在我们现在的中心化世界里面根本不是问题,因为有银行啊!钱的交易结算都是通过银行,很安全,有问题直接找银行。但是在去中心化世界里面呢,没有银行这样一个中心机构,还必须保证一笔钱只能花一次,怎么样实现在去中心化的前提下,杜绝“双花问题”呢,这是一个难题。
这里插一句,中本聪为什么如此执着的追求“去中心化”呢,自找烦恼吗?不是,他希望能够通过去中心化,来解决一些社会问题,其中最主要的问题就是因为权力机构过量发行货币造成的通货膨胀。
所以总结一下他的逻辑:中心化的货币增发导致通货膨胀——所以我们要实现去中心化——去中心化要面临很多问题,最大的问题是双花问题——所以我们要解决双花问题——怎么解决双花问题?
这里,中本聪就引入了UTXO和“时间戳”概念,依靠这两种手段来解决双花问题。
UTXO
UTXO的中文意思叫作“未花费的交易输出”。UTXO是数字货币中的账户模型,这个模型和我们现在银行的账户模型是不一样的。
拿转账来说,现在的情况是:我要给小赵转2000块钱,我要从我的招商银行卡里面给她转账,我的卡里面有5000块钱,转给她2000块钱以后,我的招商银行账户就被扣除了2000块钱,还剩下3000块钱。
那么如果是基于比特币的UTXO,我有5000比特币,我给小赵转2000比特币,2000比特币消耗掉了对不对?注意,这2000不是从我这5000总数里面扣除的,而是:我的比特币总额会分成两份(一份2000,一份3000),这就是所谓“生成两个新的UTXO”:小赵收下2000比特币,我自己收下3000比特币,3000算是给我的找零。
转账成功以后,我给小赵的2000比特币目前已经使用过了,被消耗掉了,就不能再叫UTXO了,而找零给我的3000比特币目前我还没有使用,所以它还能称作UTXO ,也就是未花费的交易输出。
那么,如果我总共有5000比特币,我全部转给小赵,那么就只需要生成一个新的UTXO给小赵就可以了,不需要找零了。
基于UTXO,每笔交易出现,都要确认比特币之前的情况,检验比特币是不是存在于我的UTXO中,如果不存在,那么系统就会拒绝你的交易行为。这样一来,每笔交易的输入和输出都是有关系的,可以通过UTXO不断向前追溯,一直追溯到比特币诞生的时候,也就是挖矿的源头。
如果我想用同一笔UTXO发送给两个人,那么系统只确认先接受到的那一笔,一旦确认UTXO已经被消耗了,那么你就不可以再把它转给下一个人,这样就避免了双重支付的问题。
时间戳
为了防止双花问题,系统会给每一个区块的交易信息都自动加上时间戳,给它打上时间烙印,这个时间你花了多少钱,花了就是花了,已经记录上了,不能再用它买别的东西了。
具体怎么记录的呢?其实还是通过计算,把时间戳和区块上的其他交易信息,通过复杂的计算,得出一个加密数值,这个加密数值叫作“哈希值”,每一个新区块都包含前一个区块的哈希值,由此形成一条区块链。
所以我们说:比特币系统,实际上是一个层层嵌套、永不停歇的、非常强大的时间戳系统,它利用的是时间戳保证每一个区块按照时间顺序链接成“链”(也就是区块链)。
从这里我们这样理解,时间戳,字面意思是给区块打上时间印记,它的实际作用在于:为之后计算哈希值提供一个重要参数,是计算和核对过程中一个必不可少、非常重要的信息。
最后,我们总结一下今天的内容。今天主要介绍了两个名词:UTXO和时间戳,这两个名词呢,是解决双花问题的重要手段,能够保证比特币可以在没有第三方机构的情况下,不被多次使用。