山神带你入门区块链第四十三弹:bitcoin的扩展——bitcoin-ng

上次我们讲到bitcoin的可扩展途径是采用侧链的方式。

为了保证链的安全性,Nakamoto(中本聪)在PoW协议(PoW,指比特币协议中的工作量证明机制,即Prof of Work,通过一定的工作量来获得相应的奖励。与PoS(Proof of Stock)相对应。)中,采用一cpu一票制,将block之间的间隔时间设为平均10mins。

这种设置有利有弊。好处是,能够有效预防恶意节点故意产生分叉,这样发起双花攻击就变得困难。那么坏处就是,导致一笔交易的确认时间平均为10mins,10mins什么概念,在某些线下交易中,到账时间按毫秒算,很多情况下,这样长的等待时间我们是接受不了的。这也制约了bitcoin的实际应用范围。

前面我们说Bitcoin-NG针对这一问题,提出了基于bitcoin的可扩展协议,目的是:提高吞吐量的同时,保证链的安全性。

所以我们在设计bitcoin的可扩展性中会涉及到两个参数:一个是block interval(区块间隔),block size(区块规模),对于这两个参数的控制是,减小block interval,增大block size。

减小block interval,可以减小交易的平均确认时间,但同时降低了哈希计算难度,更易导致分叉;增大block size,可以增大系统的吞吐量,相同时间段处理更多的交易,但会导致block在网络中的传输延迟增大,同样更容易发生分叉。

如何减少block internal呢? bitcoin中每个block要参与两种核心工作:记账(交易的序列化)和竞争记账权。我们要使记账和竞争记账权得以并行执行,这样就可以消除bitcoin中两次leader选举之间,长时间的internal系统冻结。

bitcoin-ng的目标是将这两种工作解耦。

解耦是一门技术活。在程序设计过程中,最头痛的不是逻辑的编写过程,更不是算法的设计,最头痛的是如何设计出一个容易维护,扩展性好的东西。而耦合问题是最令人烦躁的,它的存在很多人发现不了,所以往往无从入手。让我们看看什么是耦合, 耦合性是指block之间联系紧密程度的一种度量。block之间联系越紧密,其耦合性就越强,block的独立性则越差。程序开发领域,我们以游戏为例,比方说有很多实体类,通常属于一条相同的生产线,如地形:土地,石块,草地,雪地,沼泽,等,具有相同特征而功能不同的对象,新手们,一般是在程序的某个地方,默默地new出这些应用到的对象,恩,一个,两个,三个,慢慢你会发现程序中不断出现新对象,如果存在10对象实体,而对象的提供了5个接口函数,也就是,读写操作,在程序中出现了几十次,这时,我不要这个对象了,换成其他了,那你是不是要改几十处地方?那么,问题就是这里了,没有一个抽象层面,必然会导致维护困难,当对象扩大化到100个,这是一个维护噩梦,当然,单单一个抽象层面是无法解决new实体对象的事实的,这个是令人头痛的问题,确实是很难用文字来表达,不过以上的例子足够证明它的意义,根源都是为了解耦。

bitcoin-ng将block分为key block和micro-block,key block产生leader,执行下一个时间段的记账工作,micro-block包含交易数据,由上一个leader将其打包并链上bitcoin blockchain。同时,为了证明key block和micro-block的从属关系,使用了公私钥对进行加密,key block记录了公钥,microblock用对应的私钥加密签名,网络中其他节点可通过公钥验证micro-block广播者身份的正确性。

bitcoin-ng通过将leader election和contain transaction entry这两种任务分配到两种block中,实现了挖矿和交易记录的并行执行:每当miner计算出一个key block后,将其广播全网,其他miner验证其正确性后将其链上本地的chain,然后立即基于此key block挖矿,每来一个新的micro-block,节点根据上一个 key block中的公钥验证,通过后链上本地的chain,然后基于此micro-block继续挖矿,直到算出keyblock为止,将其广播全网。

你可能感兴趣的:(山神带你入门区块链第四十三弹:bitcoin的扩展——bitcoin-ng)