把这些签名合在一起,需要验证集体签名所需要的集体公钥,它跟以前是一模一样的,也就是说集体公钥是没有发生变化的。虽然我们又运行了一次 DKG,虽然我们加入了新的节点,但是我们保证了公钥的不变性。这就解决了刚才谈到的问题,即 Summary Block 需要保持它的历史区块的问题。即只需要一个公钥,就不需要保存历史记录了。 具体到实现上还是有一些新的问题。从节点的角度来说,新节点的加入,它要产生下一个区块的话,就需要知道前一个区块的哈希,所以就需要和其他节点交互,得到前一个区块,比如在 203 的区块高度,我们发现做今后的计算我们不需要高度 200 以前的数据,我们只需要高度 200 以后的数据,假设这中间数据的依赖关系已经可以做到这点,就是说 200 以前我们可以完全丢掉,这时候在 200 这个高度我们就可以对 200 高度的这些区块,这些状态和它一起打个包,把这个包做一个签名,得到了集体签名之后,这个包就可以用来给新加入的节点。 它只需要验证一下这个包是可信的,再跟其它的节点同步一下,我们把从这个包到目前最新的区块重新同步到新的节点上来,这个新的节点就可以加入接下来的计算了。 通过这样一个方式,我们能够对 DKG 的算法进行一些改进,加入零知识证明和 resharing 的方法,我们就可以丢弃历史包袱。 我们来看一下这个技术在 Internet Computer Blockchain 架构里面的具体应用。 首先我们讲公钥。我们只需要一个公钥,这是 48 个字节,就可以验证所有的交易。对照一下以太坊,以太坊 Open Ethereum 的客户端要下载 400 GB 的数据才能够开始进行计算,这完全不是一个维度的事情了。 Internet Computer 的节点我们也是采取了分片的做法,这里为了区分一下我们把它叫做子网,也就是我们没有母网,每个子网相互之间可以交换信息,但是它不需要知道对方子网的历史区块。 这里面有一个子网有一点特殊,我们把它叫做 NNS,它主要的功能就是创建新的子网。它可以为另外的子网运行 DKG,它通过运行 DKG 产生一个新子网所需要的公钥。绿色的公钥是绿色子网所需要的,它最初创世纪的区块是在 NNS 这个子网上面进行计算得到,所以 NNS 就可以创建其它子网所需要的公钥,它在这个基础上再做一个证书,这个证书就是证明子网公钥的正确性。 (责任编辑:admin) |