比特币如何实现去中心化——区块链技术原理介绍

       比特币的最大特点就是去中心化,而去中心化引发的最大问题就是“共识问题”,一个更具体的问题就是“双花问题(double spending)”,而这些问题比特币都是通过区块链技术去解决的,本文将主要以这些问题为导向,去解释区块链技术到底是什么。由于区块链本身比较复杂,本文先不给区块链下定义,但会在文末给出百度百科的定义,然后希望读者先通过本文对比特币中区块链技术的介绍,再去理解区块链的定义。

       所谓去中心化就是货币支付不经过一个中心机构,直接点对点的进行,但是细想一下,这里就有一个很大的问题,即如何保证这笔支付的可靠性。更具体的说,被支付方如何保证支付方的这笔支付是有效的,如何相信支付方确实支付了这笔交易而使得被支付方的账户的有效额度增加了?如何在去中心化的前提下避免“双花问题”?这几个问题的难点在于,支付交易是发生在去中心化的前提下的,这也是区块链技术不好理解的关键所在。

       我们可以先看一下在有中心机构的情况下,这些问题如何解决。其实在有中心机构的情况下,这些问题很简单,中心机构之所以称为中心机构,就是因为所有的支付交易都要先经过中心机构的处理,在网络支付时代,这个中心机构的本质实际上就是中央数据库,所有的交易指令发出后都是先经过以中央数据库为基础的分析处理后再传出,因为有中央数据库的存在以及我们对这个中央数据库的信任,这笔交易的有效性由中央数据库保证,因此,在有中央数据库的基础上,不存在共识问题,因为这个中央数据库就是共识,从而也就不存在双花问题,因为每个人的账户余额和交易记录都被保存在了中央数据库里,而中央数据库只有一个(这里的一个指的是内容上的,而不是物理意义上的,因为物理意义上肯定会有多个数据库作为安全备份,但是所有备份的数据内容是一致的),这样就不存在一笔钱花了之后还会再次被花的可能,因为只有一个数据库,这笔钱被花了之后,余额就会被相应的扣除,再次花费这笔钱将会被系统拒绝。可能读者读到这里会感觉有点奇怪,那是因为我们的认知都是停留在传统的支付结构上的,试想一下,如果没有了这个中央数据库,而是有很多的数据库,而且这些数据库的内容又不一致,那支付交易以哪一个数据库为准?既然是去中心化,肯定是每个数据库都将会作为交易的验证基础,那么如果数据库不一致,岂不是就可能存在双花?因为如果数据库是不一致的,一个人的这笔花费可能在A数据库被记录了,但是可能还没有在B中被记录,那么这个人就有可能在B为验证基础的交易上再进行一次支付,这就形成了双花。所以很明显,去中心化的引起的最大也是最本质的问题就是如何保持这些数据库的一致性,这就是所谓的“共识问题”。

       在比特币网络中,去中心化的关键是分布式账本,我们可以把这些分布式账本看成是分布在不同节点上的数据库,储存着比特币网络的交易记录,那么如何保证这些分布式账本的一致性就是最为核心的一个问题。下面,我们将详细介绍比特币网络中,如何通过其区块链技术实现分布式账本一致性的工作原理。

       比特币网络中的交易完全以区块链中记录的历史交易为准,当我们有了一个账户的全部历史交易记录,那么这个账户的余额就可以算出来,比特币就是利用历史交易记录来判断账户余额的,从而判断交易是否有效的。这个区块链会保存在所有的具有验证功能的节点中,当你电脑要发出一笔交易时,这笔交易会自动的向比特币网络的其他节点广播,当具有验证功能的节点接收到这笔交易时,会对这笔交易进行验证,而这个验证就是基于保存在其节点中的区块链的历史交易记录进行的,这个验证会验证这笔交易的数字签名是否和原始交易内容一致、公钥是否对应付款方、付款方的余额是否足够等,当这笔交易被验证为有效,那么这笔交易会被打包到区块中。但是只有当包含这笔交易的区块被添加到区块链上后,这笔交易才会得到确认,一般的,交易得到了确认是被付款方认可这笔交易的必要条件,因为零确认的交易风险很大。在区块被添加到区块链上之前,还需要有一个额外的工作就是找到一个随机数,只有找到了这个随机数,这个区块才能被成功的添加到区块链的末端,这个额外工作是比特币网络解决共识问题的关键,下文会再详细说明,这个过程也叫做挖矿。

       以上我们讲的是在比特币网络中,一笔交易从发出到被添加到区块链中的过程,在这个过程中,存在的最大的一个问题就是分布式账本的一致性问题,我们之前也讲过,账本的不一致会造成双花,这是个很大的bug,在比特币中,是通过工作量证明(PoW-Proof of Work)这样一个共识机制实现一致性的,这个就是前文提到的“额外工作”。具体来讲,当矿工打包好一个区块后,需要强制完成这样一个找随机数的工作后才能把区块添加到区块链上,从而得到奖励。这个额外工作的作用是给区块链在全网节点的复制传播提供充足的时间,因为当上一个区块被添加到区块链后,首先增长的区块链只存在成功添加区块的这个矿工的节点上,之后这条更长的区块链会在全网进行复制传播,以实现全网节点保存的区块链内容是一致的,这里我们可以发现,实现一致性的最关键的地方就是“时间”,那么如何给比特币网络提供时间——在这段时间里,只让最长的区块链在全网节点上传播,而不再进行区块添加工作。这个额外的工作就是为了给区块链传播提供充足的时间,所以比特币系统会把每次完成这个额外的工作时间控制在10分钟左右,这个10分钟就是用来给区块链进行传播的,其实也就是用来实现全网节点账本一致的。

       现在我们知道,为何比特币需要挖矿,其实这个挖矿是比特币实现去中心化的最为重要的环节之一。随着越来越多的人加入挖矿,全网算力不断地提升,比特币会通过调整这个额外工作的难度来把时间相对稳定在10分钟左右。但是要注意的是,10分钟完成一次工作只是统计意义上的,不是绝对的,也就是说,10分钟内有可能有两个或两个以上的节点成功的完成了工作,并把其各自的区块添加到区块链上,在这种情况下,比特币网络允许那两个区块同时被添加,即比特币网络同时承认这两个区块,那么这时区块链就出现了分叉,如图一。

(图一,图片来自群蜂社)

       出现分叉后,这些支链上的区块中的交易记录都是被区块链确认的,经过十分钟后,这样的分叉的区块链会被复制传播到每个相应的节点上,接下来,不同的矿工可能会根据不同的支链进行挖矿,看下一个10分钟是哪条支链被添加新区快,如果下一个10分钟只有一条支链被添加了新的区块,那么比特币网络将只承认最长的那条支链,更短的支链会被比特币系统放弃;如果下一个十分钟又产生了两个新区块,又形成了新的分叉,或者两条支链同时增长,那么比特币网络也会都承认相应的支链,直到产生最长的支链为止,此时其他的短的支链会被放弃,以此类推。当其他短的支链被放弃后,这些支链区块包含的交易会重新被视为未确认交易,会在比特币网络中等待被重新添加到区块中被确认。细想一下,如果一笔交易被一次确认后,被付款方就认可这次交易的话,那么依然存在双花的可能性,怎么理解?举个例子,比如A现在其实只有10比特币,现在A向B支付10比特币,并且这笔支付得到了一个确认,如果B看到了这笔交易得到了区块链的一个确认后就认可这次交易,并提供相应的服务了的话,那么如果这笔交易是被添加到支链上的,并且另一条支链不包含A向B支付10比特币的交易记录,那么A可以再次发出向C支付10比特币的交易,如果这笔交易是被打包添加到另一条支链上的话,因为另一条支链是不包含向B支付的交易记录,所以是可以成功被打包添加到另一个支链上的,这样子,相当于两条支链分别包含了“A向B支付10比特币”和“A向C支付10比特币”这样的交易记录,如果B和C一看到交易得到了区块链的一次确认就认可这次交易的话,那么就让A的10比特币花了两次,当做20比特币来用了,这也形成了双花问题。但是呢,由于最终只有一条支链会被认可,所有B和C之间总有一笔交易会被再次视为未确认交易,但是由于A账户只有10比特币,这样被再次视为未确认交易的那笔交易将不会再得到区块链认可,因为A的余额已经不足了,那么B和C之间必有一个要承受10比特币的损失。当然,本来一个十分钟内产生的两个新区块的概率就很小,连续这样的情况发生的概率就更小了,一般的,当一笔交易得到6个确认后,即这个区块后面又连上了5个区块后,就可以认为这条链是最长链了,会被区块链永久确认了,因为要连续6次发生两条支链上同时生成新区块的概率几乎为0,此时,被付款方可以放心的认可这次支付,这就是为什么常说比特币支付中,一笔支付交易要得到6个确认后被付款方才可以完全放心。

(图二,图片来自群蜂社)

       最后我们讲一下区块链中交易记录的另一个特性——不可篡改。实际上这里并不是真的不可篡改,事实上,恶意节点可以篡改区块链上的交易记录,但是这种篡改只限于删除别人的交易记录或者增加自己的交易记录,而不能增加别人的交易记录,除非有别人的秘钥,而盗取别人秘钥这件事就不是区块链中要考虑的了。但是为什么说不可篡改呢?是因为一旦篡改了某个区块的内容,那么这个区块的哈希值就变了,由于区块之间的连接是通过前后区块的哈希值的一致性验证实现的,这里的细节不必深究,但是要知道的是,一旦一个区块被篡改,那么这个区块以及其后面的区块将会全部断掉,此时这个恶意节点上的区块链就变成了短链,而这不是会受到比特币系统认可的,当比特币系统检测到长链的时候,这个节点上的短链也就没用了。除非,这个恶意节点故意孤立自己,使其无法检测到其他节点上的长链,然后这个恶意节点再默默的根据自己的短链不断的挖矿,增加新区块,直到自己的这个链条变为比特币网络中的最长链,然后再让自己的节点不孤立,以把自己的长链传播到整个比特币网络,让自己的长链作为比特币网络中唯一被认可的区块链。这个想法很美好,但是实际上,除非这个恶意节点掌握了全网51%以上的算力,这样恶意节点上的链的增长速度才有可能超过比特币网络上的链,而一个人掌握全网51%算力这样的事情发生的概率有多大呢?随着算力的不断提升,概率会越来越小,但是如果之后矿工减少,算力减少,51%算力也不是没有可能,只是这样做的成本会很大,而且,也只是一个概率而已。这就是常说的的51%算力攻击。

       以上基本就是比特币中的区块链技术的说明,现在我们可以给出百度百科中的关于区块链的定义:区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain)是比特币的一个重要概念,它本质上是一个去中介化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。希望通过本文的说明,读者会对这个定义有更好的理解和认识。

猜你喜欢

转载自blog.csdn.net/S_o_l_o_n/article/details/82950652