性能是阻碍公链发展的瓶颈,提升性能则是绝大多数希望超越以太坊的公链的主要设计目标,但当我们站在今天回望时,会发现这些公链选择的方法大多是通过机制的设计来增强一个分布式系统的性能,但受困于分布式系统 CAP 定理(不可能三角),改善性能是要付出代价的,当这个分布式系统的用途是账本时,这些代价甚至可能是难以被接受的。 以太坊也一直在尝试各种方法以提升性能,在 2.0 被推出的前夜,它「试」出了密码学。以太坊 2.0 将是一个以「分布式系统+密码学」为基础来运转的公链,这个密码学不是指被用于签名和隐私的那部分,而是指作为一个高性能系统的核心组件的那部分。 从这个角度而言,或许我们可以说颠覆以太坊的不是别人,而是它自己。它从分布式系统设计的单一思路中跳了出来,走上分布式系统+密码学组合设计的道路。 这篇文章将试着介绍在以太坊 2.0 中,分布式系统设计如何与密码学设计结合,实现公链在性能上突破。 状态分片:从单账本到多账本 区块链是一个分布式账本,出块节点是记账的矿工,它们负责把交易写入账本。除了竞争记账权,出块节点最重要的工作,或者说本职工作就是检查自己打包的这些交易是否合法。完成这个工作并不难,因为出块节点手中握有账本,它去查一下交易发送方有没有这笔钱即可。 对于未分片的公链,所有节点都持有一个相同的账本;而为了防止记账冲突,每次也只允许一个出块节点记账。以太坊提出状态分片,实际上就是把一个账本分成多个账本,这样一来,一些节点在 1 号账本记账,一些节点在 2 号账本记账……(相当于 7-11 从一个收银台增加为多个收银台),多个节点同时记账,整个公链的性能就会得到质的提升。 但如果我们把出块节点与账本 / 分片的关系固定,比如确定由 a、b、c、d 四个节点负责 1 号账本,那坏人只需收买 a、b、c、d 中的一部分就能破坏账本,公链在提升性能的同时,安全性同比例下降。 因此,出块节点需要被随机、动态地分配到不同账本,以此保证分片后的公链与未分片的公链具有相同的安全性。但动态分配会带来新的问题:节点手中该拿哪一个账本?它可能会被分配到 64 个账本(以太坊计划启动 64 个分片)中的任何一个去记账。 以太坊给出的方案是出块节点不拿任何一个账本,或者说,让出块节点不需要账本就能记账。 这会带来两大好处,一是不管节点被分配到哪个分片,它都可以立刻开始记账(出块)工作,几乎不用花费时间来获得以及同步该分片的账本,节点也因此可以在不同分片间轻松跳转;二是出块节点不需要存储账本,也就不需要高硬件配置,任何人抵押 32ETH 就能成为一个验证者,这非常有助于以太坊 PoS 的去中心化以及整个公链的安全。 (责任编辑:admin) |