译者按:在比特币、以太坊1.0、eos等区块链系统中,存在着两种类型的节点概念:即轻节点(又称spv节点)以及负责验证所有交易数据的全节点(或超级节点),而在以太坊接下来的2.0系统规划当中,节点的划分将变得更为复杂,这是因为其引入了分片(Sharding)技术。
根据以太坊官方分片FAQ内容当中提到的,该系统的节点将划分为4类节点,分别是(1)超级全节点(Super-full node),(2)顶级节点(Top-level node),(3)单分片节点(Single-shard node),以及(4)轻节点。那这些节点又是怎么回事呢,本文旨在解释这些节点,同时通过以太坊研究社区(ethresear.ch)成员对该话题的深入讨论,以期让读者更好地了解这些概念。
(图片来自:Hacked)
来自分片FAQ(译者注:关于分片技术的讨论还在继续,因此FAQ会不断更新,以下的内容是最新版本的):
“注意,现在,这样的系统当中可以存在着几个‘级别’的节点:
超级全节点:完全下载每个分片的所有校对规则(collation),以及主链数据,旨在充分验证一切;
顶级节点:处理所有主链区块,使得“轻客户端”可访问所有的分片;
单分片节点:充当一个顶级节点,但它也会完全下载并验证其更为关心的,某些具体分片的每个校对规则(collation);
轻节点:仅下载和验证主链区块的区块头数据,除非在某些特定分片状态下需要读取某些特定条目,否则这类节点不会处理任何校对规则区块头或交易。在这种情况下,它将默克尔分支(Merkle branch)下载到最近的分片校对区块头,并从那里下载状态期望值的默克尔证明。”
而以太坊研究社区成员MihailoBjelic对此存有疑问,他在《以太坊2.0节点类型》一帖中提到:
关于 以太坊 2.0当中存在的这些节点类型,我有几个问题:
1、为什么这些超级全节点必须要验证所有的交易(主链交易+所有分片交易),这会需要很多的资源,我不明白这一点。存储所有的数据的确是有意义的(它确保了所有数据的数据可用性),但这也需要大量的磁盘空间和带宽资源吧?
2、我不知道这些顶级节点是做什么的,以及为什么要有它们?
3、单分片节点会定期重新洗牌。如何将数据“移交”给下一个当选节点?
4、所以,轻客户端只需下载主链区块头(主链= beacon链,是吗?)?
这一切是否都可能会过时(比如当Casper和分片结合在一起时?)
谢谢!
meyer9回答:
1、超级全节点并不是必须要运行的节点。它们只是可能要运行的节点。在具有超级全节点的情况下,一些权益池可能希望这样做,这样,对于每个验证者来说,他们就不必在每个周期都重新同步到不同的分片;
2、顶级节点只验证beacon链,因此,它们只能访问分片的区块头信息,而不会实际验证分片交易,或处理分片区块;
3、单分片节点生成校对规则(collation),并把它们添加到分片链中,这就好比询问比特币矿工如何将数据移交给下一位比特币矿工;
4、是的;
jannikluhn:“MihailoBjelic:单分片节点会定期重新洗牌。”
不一定的,只有验证者是需要被洗牌的,“正常”的单分片节点(例如,来自与该分片上的某个合约进行交互的用户)可以永久地停留在一个分片链上。
MihailoBjelic:
感谢@meyer9 和 @jannikluhn的回答。
“meyer9:超级全节点并不是必须要运行的节点。它们只是可能要运行的节点。在具有超级全节点的情况下,一些权益池可能希望这样做,这样,对于每个验证者来说,他们就不必在每个周期都重新同步到不同的分片;”
如果我们没有这些超级全节点,我们如何保证整个系统的数据可用性(例如,如果单个分片遭到了破坏或攻击,并且我们不再拥有其数据的情况下?)
“meyer9:顶级节点只验证beacon链,因此,它们只能访问分片的区块头,而不会实际验证分片交易,或处理分片区块;”
节点只做这一点的原因是什么?我想每个单独的验证者都需要这样做(验证beacon链,并跟踪所有分片的区块头),无论如何,我认为它是一些默认的基础级功能?
“meyer9:单分片节点生成校对规则(collation),并把它们添加到分片链中,这就好比询问比特币矿工如何将数据移交给下一位比特币矿工;”
我相信这种比较是没有意义的。如果我的想法是对的,“单分片节点”是@JustinDrake在他的演示文稿中提到的运营者,并且很清楚的是,它们会被重新洗牌,例如每周一次(而比特币矿工/节点则不会被洗牌)。也就是说,很明显,当新的验证者组被选出时,则旧的运营者(单分片节点)应该会把(整个分片链)的所有分片数据“移交”给新的运营者(它们没有这些数据,而只有分片的区块头信息)。现在,当我再思考这个问题的时候,我发现这个问题要比我原先想象地还要复杂,我可能会在这个问题上另开一个新的话题。
“jannikluhn:不一定的,只有验证者是需要被洗牌的,“正常”的单分片节点(例如,来自与该分片上的某个合约进行交互的用户)可以永久地停留在一个分片链上。”
你能分享一下你是在哪得到的这些信息吗?只有验证者会被重新洗牌?这将彻底改变系统的模式,并引入全新的挑战和问题(如果这被证实了,我会探讨更多的细节)。当然,我们可以拥有由用户运行的永久性单分片节点,但这些对于分析而言是不相关的(不强制/担保+not staked ->不能依靠。)
此后,这个分片FAQ的原作者之一,以太坊创始人Vitalik Buterin加入了这个话题的探讨。
(图片来自:Filthy Lucre)
vbuterin:“MihailoBjelic:如果我们没有这些超级全节点,我们如何保证整个系统的数据可用性(例如,如果单个分片遭到破坏或攻击,并且我们不再拥有其数据的情况下?)”
由于洗牌的原因,我们就有了一个强大的概率保证,即单个分片不会受到攻击或破坏,而基本上没有一个攻击者拥有整个验证者集接近50%的份额,如果我们添加了欺诈证明和数据可用性证明(译者注,可参考《区块链扩容的关键:欺诈和数据可用性证明》),整个网络将能够拒绝掉坏区块,而不必检查所有的数据;
“MihailoBjelic:你能分享一下你是在哪得到的这些信息吗?只有验证者会被重新洗牌?”
这些信息来自于我这里 ^ _ ^
任何不是验证者的节点,都只是为自身利益而运行的节点,因此,该节点当然可以听取和下载,或者不下载,核查或不核查它想要的东西。因此,协议没有能力强迫其他节点去任何特定的分片,也没有理由这样做。
MihailoBjelic:“vbuterin:这些信息来自于我 ^ _ ^”
这样哈,那我认为这些信息是相当可靠了!^_^ :那这意味着分片FAQ和Justin的报告(或者至少是报告的部分)是有冲突的吗?(译者注:具有刨根问底的精神,很好)
“vbuterin:任何不是验证者的节点,都只是为自身利益而运行的节点,因此,该节点当然可以听取和下载,或者不下载,核查或不核查它想要的东西。因此,协议没有能力强迫其他节点去任何特定的分片,也没有理由这样做。”
我认为,提到这些用户运行的节点,只会带来混乱,它们是无关紧要的,这是因为它们(正如您和我都说过的)根本不会提供任何保证,它们只是无束缚的,并且可能(或可能不)验证及保留分片的数据(或它的任意部分)。验证者必须在任何时刻都不依赖于这些节点,他们需要的是受束缚(bonded )的节点,并且必须验证每个分片校对规则(collation),并保留所有分片的数据(整个最新的分片链)。每个分片会有多少的节点?如果只是一个节点,那么会有几个问题,如果不止一个,还会有其他的问题(同样,如果我有这个答案,我会深入到更多的细节)。如果这些东西还没有完全明确,这也是当然可理解的。
drcode1:
要记住的一个细节是,用于分片的“轻客户端”可能还会负责将数据上传到全节点,而这通常不是轻客户端的职责。引用Vitalik等人最近撰写的轻客户端规范,我假设它会使用和以太坊2.0当中相同的数据可用性机制:“由轻客户端接受到的每个share(译者注:同样是欺诈和数据可用性证明论文当中的一个重要概念)以及有效默克尔证明,会和所有全节点进行沟通,表明这个轻客户端已经连接到了全节点(如果这些全节点没有它们)。”
“MihailoBjelic:我认为,提到这些用户运行的节点,只会带来混乱。”
我不是博弈论领域的专家,我只想指出一点,100%的BitTorrent节点是无束缚的( unbonded),它们没有义务提供数据或验证:软件的默认行为(加上一些利他者)可以导致对分布式软件系统产生有意义影响的强大机制。
MihailoBjelic:感谢 @drcode1!
“drcode1:我只想指出一点,100%的BitTorrent节点是无束缚的( unbonded),它们没有义务提供数据或验证”
没错,BitTorrent就是一个不可靠的分布式网络(每个人都遇到过不可用的torrent链接)。对于IPFS也是一样的,这也是为什么他们要构建Filecoin(如果你希望提供数据可用的保证,则需要有束缚的人员来保存这些数据,即使这样,问题也不是微不足道的。)这就是我为什么会认为,我们根本不应该依赖这些用户/利他主义者运行节点。也就是说,在讨论系统的安全性和保障时,甚至不应该考虑他们。
也就是说,我还是很想知道:
a) 我们将有受束缚的单分片节点(这些节点必须下载并保存单个分片的所有数据)?
b) 这些节点绝对不会被洗牌吗?
c) 他们是和提议者(负责提出区块/校对规则(collation),以及对它们进行表决验证)相同的实体吗?
d) 每个分片会有多少这样的节点?
我刚刚看了Peter Szilagyi和Felix Lange关于以太坊网络的精彩演讲,在这里你可以看到,当时的计划是让校对者(collator)不断切换分片(尽管,目前还是不清楚校对者(collator)是否和提议者/单分片节点相同 :-))
daniel:
非常好的问题!关于这个话题,我已经思考很久了,现在我想提供一些纯粹是自己的观点:
a) 是的!我看不到另一种保证长期数据可用性的方法;
b) 这视情况而定。到目前为止,我认为在实践过程当中,是不需要对它们进行重新洗牌操作的,但我觉得为了保证可证明的活跃性,可能需要重新洗牌操作。否则,贿赂攻击者可能会通过不提出任何校对规则(collation)的方式,而造成一个分片被完全拖延;
C)是的!我认为,可通过将长期状态存储的责任+交易执行+校对规则提议组合到相同的角色当中,从而实现最高的协同效应(因此能够带来效率)。
D)这是一个有趣而开放的问题。如果我们没有“分配”或“洗牌”执行者,那么无论如何,我们对此都没有控制权,这取决于经济激励,以实现对所有分片的合理分配。如果我们分配了他们,我还没有考虑好合理的数字。
译者后记:关于本文探讨的话题,译者将继续跟踪研究者的讨论动态,并将在评论栏中呈现出这些最新讨论。此外,关于分片的话题,译者将通过研究人员的讨论逐个分解探讨。