扩容方面我们通常的方案是做分片,我们把整个区块链的状态分成好多个片,然后每一个片实际上通过自己的区块链在运行。如果一个交易需要跨片的话,从一个区块链发起的交易到另外一个区块链上去接收,发起方和接收方势必要验证对方区块链上面的区块,每个分片就需要知道所有其它分片过去的历史区块,这样相对于单链来说其实负担更大了。可能有一些删除优化算法,但这些优化算法实际上也就是提高了一些效率,并没有达到质的飞跃。 我们看看以太坊 2.0 是怎么解决分片的问题? 它采取分层的结构,在最上面一层有一个叫 Beacon Chain,它是对其它的 Chain 做一个快照,其它的 Chain 只需要知道 Beacon Chain 是经过确认的,然后它就可以验证另外的 Chain。这个实际上还是隐含着一个条件,你要能够验证 Beacon Chain,就要知道 Beacon Chain 所有的历史区块。虽然对不分层的结构而言它有一定的进步,但实际上跟单链来说它也没有特别大的差异。所需要的难度,就是保持历史区块所需要的挑战基本上是一样的。 所以,我们可以看到历史区块实际上是有包袱的。有没有一种办法能够把这个包袱完全抛弃掉,这是今天所要探讨的一个问题。 BLS 门限签名我们考虑一个简单的例子,跟刚才我们提到的 Beacon Chain 目的有点相关,它主要是作为随机数的序列,公众能够验证的公平的随机数。它必须满足几个条件:
所以要满足这三点才能够做一个安全的随机数的序列区块。 有一个算法叫做「门限签名」,它的基本原理如上图所示。 我们可以看到这个例子里面有四个节点,每个节点有各自的私钥,然后每个节点单独对数据进行签名,对同一个数据进行签名。如果我们能够收集到三个签名,将这三个签名合在一起,就能够合成为一个签名,叫做「集体签名」。集体签名有一个有意思的地方,无论是哪三个你收集起来的单独签名,你把它们合成起来合成一个集体,都可以成为一个集体签名。 (责任编辑:admin) |