第二节 通过比特币理解区块链
在比特币网络中,人与人之间的关系没有并且不需要类似于银行的中心机构,那么,在一个没有中心化机构的情况下,比特币是如何发行的?如何交易的?同时如何对交易进行记账的呢?
一、比特币的发行机制
首先,规定了比特币的发行机制。可以理解一下,比特币网络是一个巨大的账本,平均每10分钟比特币网络诞生一页的账本,称为“区块”,每个区块被打上时间戳,按照严格的先后次序连接起来形成一个账本,称为“区块链”。比特币网络规定比特币的总量为2100万个,每个比特币的产生伴随着每一个区块的产生,也就是每一个区块的问世和发行。比特币网络还规定,最开始每个区块的比特币奖励是50个,然后每21万个区块减半一次。一直到2140年,所有的比特币发行完毕。
21万个区块,算一算,平均每10分钟出1个区块,出21万个区块需要多久呢?在比特币系统里面,打包一个区块的时间大约是10分钟。21万个区块就是每210万分钟,新币的发行速度就会发生一次减半,换算成年呢,就是大约3.995年,约为4年。计算如下:
根据,每10分钟1个区块计算:
每年产生的区块数量=1年的分钟数/10=(365天×24小时/天×60分钟/小时)/10=52560个/年
比特币网络产生21万个区块所需年数=210000/52560≈3.9954年
前面21万个区块产生的比特币数量=前4年比特币网络产生的比特币数量=210000×50个=1050万个
由此可知,比特币每产生21万个区块区块奖励减半一次,意味着比特币网络每4年的比特币产量减半。2009年第一个区块出现时,随区块产生了50个比特币,2013年每个区块产生25个比特币,2017年每个区块产生12.5个比特币,按照这样的趋势,大约到 2040年,比特币总数2100万个将完全发行完毕,见下表。
二、区块链的区块高度
按照上面的计算可以知道,比特币网络产生21万个区块所需的天数,理论上需要1458.3天,也就是3.99年。这也就是大众说的“比特币每四年减半”的由来。比特币第一次减半发生在2012年12月28日,当日开始,比特币的区块奖励由一开始的50个比特币变为25个比特币,而2016年7月8日开始,比特币第二次减半,也就是每个区块伴随的比特币奖励为12.5个。
怎么去计算现在的区块是第多少个呢?人们是用“区块高度”来计量的。所谓区块高度是从比特币诞生之后,最新的区块是第几个区块。打开任意一个比特币的区块浏览器,可以看到现在出来的最新的区块高度。通过区块高度,可以计算大概还有多久比特币会进行下一次减半、多久会进行难度的调整、多久会进行一次大事件。如下图所示,笔者当前查看到的区块高度是516463,即意味着比特币网络已经产生了516463个区块。
三、比特币价值传递机制
先看看现实生活中人们是怎样转账给朋友的。
回顾一下第一章第一节提到的那个故事,小王给小李通过银行卡转账了1000元,这个时候银行会在小王的银行账号上进行1000元的减法,在小李的银行账号上进行1000元的加法,以完成这笔交易。整体过程大概是这样的:一般小王会先让小李把银行卡号发给他。小王登录银行网银,找到转账菜单,输入小李的银行卡号,然后再输入金额1000元,屏幕上可能会显示若干元的转账手续费,这时候小王点击确定,然后提交给银行后台去处理。银行处理完毕,小王的账户会减少1000元,小李的银行卡账户里会增加1000元。
比特币是如何进行交易和转账的呢?
对于比特币的交易,首先的转账交易会经历一系列的过程。以小王给小李转账1个比特币为例,对其过程进行说明。
1)转账发起人向区块链网络发送交易请求。
在比特币网络中,比特币网络发布交易请求的过程和现实生活进行网银转账的方式比较类似,发布交易请求包含如下步骤:
第一步,登录比特币钱包。比特币钱包类比为银行卡的网银。
第二步,选择转出方的比特币钱包地址。钱包地址相当于银行卡号,选择转出方的比特币钱包地址也就是选择从自己哪个比特币地址进行转账,类似于选择自己转出的银行卡账号。钱包地址就相当于实体钱包里的一张张银行卡,这个地址符号是一长串30位大小写字母和数字组成的字符串,有点像银行卡账号。
第三步,输入对方的比特币钱包地址。对方的钱包地址相当于对方的银行卡号。
第四步,输入转账数额和手续费后提交。输入转账的数额以及转账的交易手续费金额,签上比特币签名,提交给比特币网络,然后就等待这笔交易被打包处理了。
2)参与到比特币网络上的矿工对交易的有效性进行验证,如果验证通过,这笔交易将和其他验证通过的交易一起被共同打包到一个区块中。
这里需要注意的是,和人们使用银行转账所不同的是,转账的手续费不是固定不变的,而是用户可以自行确定转账手续费是多少,甚至可以选择不给转账手续费。如果不给手续费,可能不会被矿工记账确认,或者比较晚或延迟被矿工确认。
3)为了将新的区块连接到区块链的尾部,矿工基于PoW机制,利用算力,竞相解答“数学难题”。最先解答出“数学难题”答案的矿工,如果其工作量被其他矿工确认,则该矿工将获得记账权,同时获得该新生区块所对应的比特币奖励。
当一个用户给比特币网络提交了转账的请求后,需要等着矿工来打包处理。比特币网络规定,竞争计算能获得新生的比特币奖励,谁通过竞争记账获得了记账权,谁就可以获得该交易的手续费。
比特币网络每10分钟有一个区块产生,就类似于每10分钟有一道数学题被丢到网络中,大家比赛看谁算得快,谁最先计算出正确答案,谁就算挖出了这个区块,并获得了区块奖励。它记录本区块也就是本页账单,大家都要以此为准。紧接着,大家在这个区块也就是这一页账单的基础上,争夺下一个区块也就是下一页账单的记账权。通过这种方式,比特币解决了在一个去中心化的体系下账本的唯一性的权益。
他把比特币的发行和竞争记账绑定在了一起,记账的人每获得一次记账权,就会获得系统产生的新的比特币作为奖励。也就是说,算得最快的计算机就会“挖”到一定数量的比特币。在每一轮竞争记账中,谁获得记账权,谁就获得这一个区块里新诞生的比特币奖励和被记录在账单里的交易手续费。所以,矿工有两个收入来源:一个是新生区块奖励;另一个是区块被记录在区块里面的所有交易的交易手续费。
比特币现在的每个区块大小是1MB,大概能容纳1000笔交易。当网络转账的人比较少时,等待矿工确认可能只需要等10分钟,就能被下一个区块确认了。如果当前转账的人比较多,则可能要排队,多等一个10分钟,甚至更长时间。矿工们会不断地从等待记录的转账交易里面去选择手续费比较高的转账信息来进行记账,如果手续费不排在前面,则可能就要排在很后面才能够记账了。
通过这样的设计,中本聪使得比特币的发行、记账和转账等环节环环相扣,使得整个体系能够自发运转起来。
4)新生的区块被确认后,成功连接到区块链网络中,而其他比特币节点对其区块上的交易信息进行同步。
5)转账的收款方最终收到转账发起方的1个比特币。
四、工作量证明机制和最长链机制
下面再来看看,为什么说比特币的区块链账本是无法被篡改呢?这里说的篡改是网络中为了弄虚作假而对账本进行恶意修改。这一点由比特币采用工作量证明机制和最长链机制来保障。
在前面,提到过比特币的共识机制是“PoW机制”,是一种对在差不多时间内发生的事务的先后顺序达成共识的一种算法。PoW简单理解就是一份证明,用来确认你做过一定量的工作。监测工作的整个过程通常效率是非常低的,而通过对工作的结果进行认证来证明完成了一定工作的工作量,是一种非常高效的方式。比如现实生活中的毕业证、驾驶证等,也是通过检验完成了一定知识的学习或者驾驶过一定时间的汽车来证明你的技能的,也就是说通过这个结果证明曾经做过这件事、曾经耗费过所谓的工作量。
PoW的特点,对于执行的一方来说难度是适中的。对于验证方来说是非常容易被验证的。矿工们进行哈希验算时,可以理解为是一种数学的游戏。获得正确答案,就会获得记账权,其他节点经过非常简单的验证之后,就可以同意其记账,并同步账本。打上时间戳后,紧接着进行下一轮算力竞赛。
比特币区块链中有一个“默认设定”,当由于新区块生成或者网络传播延迟等原因造成区块链产生分歧的状况时,因为在比特币的网络里大家认为最长的链才是正确的链,网络上的多数人合意的结果一定会选择最长的那条区块链,这就是比特币的最长链机制。如果这时候有人想把某个区块高度上的某个交易信息进行修改,需要做什么呢?他需要从这个区块开始把之前所有的区块都重新计算一遍,再把账本同步给其他人。而在进行计算的同时,其他矿工们已经在原来的链上继续往前进行计算了。这个恶意篡改的人,需要在很短的时间内赶上现有区块的高度,让自己的这条区块链成为最长的链,让其他矿工误以为这是正确的账本。
最长链机制
由于最长链机制的存在,除非这个恶意篡改的人拥有非常大的算力,至少超过50%,否则基本上没有可能进行这样的篡改。那么算一笔账,现在全网算力是27.38 EH /秒,大概就是每秒进行27.38×1018次计算,现在流行的主流矿机大概按每一台的算力是40TH/秒左右。如果想拥有全网51%的算力,则需要至少40万台最新的矿机,一台矿机价格按照20000元计算,光是设备这一项就需要投入80亿元人民币。况且,最新的矿机生产赶不上销量,经常处于买不到现货的状态。加上老矿机不断被淘汰,算力不断上涨。购置设备的速度很难赶上算力上涨的速度。从投资回报率的角度来说,这项投资的成本需要至少80亿元人民币,如果在没有一定的投资回报的情况下,一般人也不会有这个动力进行算力攻击的。从网络大环境来看,前面也说过,由于去中心化的存在,整个网络非常警惕比特币发生这样的情况。
曾经在网络上出现有一个矿池的算力接近50%,后来大家就逐渐把自己的算力连接到其他矿池上。其实,从经济学的角度来说,这种51%的攻击也是非常不科学的。试想一下,当这个攻击发生时,比特币的区块链得到了篡改,比特币的价格将会变得一文不值。通过这个篡改获得的利益也会受到很大的损失。总之,想篡改比特币账本,简直是比登天还要难,同时也无利可图。
扩展知识
如何查看当下比特币区块链网络中全网的算力?
【提示】:可以通过https://btc.com/stats/pool查看全网算力、平均矿工费、矿工费与区块奖励占比的信息。
知识扩展
比特币是通过什么技术实现不可伪造的?比特币网络的每个节点如何信任自己收到的比特币就是真实的比特币呢?比特币的余额又是如何管理的呢?
【提示】:这都和比特币的UTXO(未花费的交易输出,Unspent Transaction Outputs)结构有关系。
UTXO是比特币交易生成及验证的一个核心概念,先从字面上简单理解,UTXO并不是像传统的银行账户那样去管理和记录账户余额,而是基于交易数据来对未花费的余额进行管理。比特币网络中,比特币用户所拥有的比特币是和UTXO挂钩的,并记录在区块链中的,如何理解呢?
比特币区块链上记录的交易,是由输入和输出构成的。某个交易中消费的比特币数量,可以理解为这个交易的输入,而这个交易中通过交易流转下去的比特币数量,可以理解成为这个交易的输出。在不考虑开工费的情况下,一个交易的输入总数和输出总数应该是一致的。就这样,比特币就在一连串的交易中流转,某个交易中被流转出来的比特币可能谁也还没有消费,就成了该交易中“未花费”的“交易输出”。而这笔交易“已经花费”的输出就成了交易的接收方的输入。交易构成了一组链式结构,所有合法的比特币交易都可以追溯到前向一个或多个交易的输出,这些链条的源头都是挖矿奖励,末尾则是当前未花费的交易输出。通过UTXO的方式,传递每一笔交易的输入和输出,交易数据就在区块链上得以维护。同时一个用户的余额因此并不是作为一个数字存储起来的,而是用他占有的UTXO的总和计算出来的。
挖矿交易(Coinbase交易)
通过UTXO结构,在比特币世界里的每一笔交易都能够追溯到上一笔交易,每一笔付款都可以追溯到上一笔收款。除非直接挖矿所得,提供1个比特币,必须是从上一个交易得到的并且还没有花费的比特币。一笔一笔往上追溯,可以追溯到该比特币诞生时矿工挖出来的那个区块。比特币被矿工挖出来的那一笔交易是作为挖矿奖励发给矿工的,是比特币的源头交易,只记录了输出,没有输入信息。这一个特别的交易叫作挖矿交易。
UTXO实例
UTXO结构在比特币交易中是怎样的结构呢?这里举一个简单的实例。
A拥有20个比特币的UTXO,A的账户余额不是简简单单用一个余额显示出来的,而是分开为若干个UTXO散列开来的。有可能是由1个比特币的UTXO和19个比特币的UTXO组成,也有可能是2个比特币的UTXO、3个比特币的UTXO和15个比特币的UTXO组成等,种种可能性都是存在的。
如下图所示,A所持有的20个比特币的UTXO是由5个比特币的UTXO和15个比特币的UTXO构成的。其中,5个比特币的UTXO中的3个比特币转账给B时,5个比特币的UTXO就转化成为新的UTXO,3个比特币的UTXO与接受方B的比特币地址关联,而剩余的2个比特币的UTXO与持有方A的比特币地址相关联。
比特币的UTXO结构遵守两个规则
1)交易有源头:除了挖矿交易外,所有的交易都必须来自前面某一个或者几个交易的UXTO,该交易必须包含一个有效的签名,来自它所花费的UTXO的拥有者;
2)输入输出持平:任何一笔交易的输入总量必须等于输出总量(实际情况是,一般输出总和会小于输入总和,差额是转账手续费,归矿工所有)。
总之,UTXO模式最大的好处就是,它准确、如实地记录了每一笔交易的来源和去处,这些信息保存在区块链中,任何人都无法对数据进行修改或者删除。只要获取了每个地址的相关交易记录,那么每个地址进行的余额结算就不会出错,也就不存在伪造比特币的可能性,就这样UTXO确保了比特币不能被伪造的特性。同时,每一笔输入都可以找到相应的输出,也就可以避免同一份比特币被同时重复花费两次的可能性,有效地避免了“双花(Double Spend)”问题。