区块链
挖矿,比特币,EOS,以太坊

eos值得投资吗 思考EOS全节点缺失以及应对

遍寻全网,难有真知灼见。很多人说一个项目不好,难以有深刻的理解。突然有一天在简书上看到一篇文章,发现了对eos一些深度的思考。作为一个投资人,必须理性的冷血,不能你投了一个项目就只是在不断的自我麻痹,就如比特币社区的古典投资者。虽然我持有不少的EOS,但我无时无刻不在EOS的不足,以及区块链演进的历史规律。我将ETHcasper核心开发者jan(他自己现在在做公链nervos)的文章缩减给大家看,希望大家可以留言讨论。

还有一句话,曲高和寡,像这种顶级文章,竟然看的人这么少。

Jan的文章首先为大家解释了区块链不同的角色。各位都知道,区块链的就是共识的形成器,出块节点打包交易,全节点验证,轻节点跟随。类比而言就如议会一般,精英议员形成提案,众多议员表决,人民跟随。

角色

我们都知道,区块链网络中的节点有不同的角色。例如:

出块节点

出块节点负责打包交易,生产区块。出块节点在不同的地方有不同的名字,例如比特币和以太坊中的矿工/矿池,Bitshares的Delegator,EOS的Producer, Cardarno的Stakeholder,Tendermint和Casper中的Validator,以及CITA中的共识节点等等。 在这些网络中,出块节点的角色往往与全节点角色重合。最接近纯粹出块节点的例子应该是使用getblocktemplate协议参与挖矿的比特币矿机,他们不验证区块,但是拥有选择交易打包和封装完整区块的权力。

出块节点相对于其他节点往往需要付出更多的资源,包括算力(无论是用于PoW还是用于交易计算),磁盘,网络带宽等等。这些资源要求抬高了出块节点的门槛,容易造成出块节点分布的中心化。

全节点

区块链中的区块由两个部分组成,区块头和区块体。区块头中存放包括区块见证(例如工作量证明或是投票)在内的元数据,区块体中包含交易数据。区块的验证由此也可以分为两部分,对区块头的验证和对区块体的验证。对区块头的验证主要是出块权的检查,例如区块头中包含的工作量证明是否有效;对区块体的验证主要是对交易有效性的检查,确保区块体中每一笔交易都是有效的。

全节点同步交易和区块,对其进行验证,并转发有效的交易和区块。为了能够进行验证,全节点必须有完整的当前世界状态(例如UTXO集合)。由于全节点自行进行所有的验证,因此不需要信任其他第三方。

通常情况下,出块节点构造新区块时需要引用前一个有效区块,为了确认父块的有效性必须对其进行验证。此时出块节点也做了全节点的事情,也是一种全节点。这种角色上的重合不是必然的,不影响后面的讨论。

轻节点

轻节点与全节点不同:轻节点只同步和验证区块头,不会同步和验证区块体以及其中的交易。因此,轻节点只能验证区块头的有效性,无法验证该区块头对应的区块体中交易的有效性,只能相信构造这个区块的出块节点没有打包无效的交易,并且相信将这个看起来合理的区块头发送给自己的全节点对其进行了完整的检查。轻节点是信任其它节点的节点。由于不同步交易,轻节点也无法得知交易处理之后的世界状态,自然也无法验证交易双花或是世界状态的变更。轻节点的验证能力大大弱于全节点。

相信其它节点的好处是,轻节点的开销很小:区块头的体积只占区块的很小一部分,很容易同步和存储。因此轻节点可以运行在笔记本甚至手机等各种有限硬件环境中。

而在jan的心中,全节点于网络是守护者已经监督者的角色。他们自己做的公链是将pow共识层作为监督层, CKB是法院的档案室,所有的卷宗都在那里,大概这个感觉。因为之前没有技术手段可以把大量的共同知识保存下来,所以这可能是一个比较抽象的新概念。其实所有的法律法规都是共同知识。因为你知道我也知道,然后我觉得你会遵守它,你也觉得我也会遵守它。所以我们可以合作。为什么跨国的合作比较难呢?因为我不知道你会遵守的法律法规是什么样的,你也不知道我是怎样的。但是在虚拟空间里,我们能构建出一个全球都遵守的一个东西,合约也是这样。这样我们就能合作。如果建立全球共同可以遵守的商业业态,将极大促进商业效率,变革因此而起。

大家从这句话有没有受到根本性的启发。当年看过张首晟院士一段话,里面提高了区块链根本意义就是通过数学这个人类公约数建立普遍信任,我们过往因为人类形式不同,生产关系不同因此不能建立广泛信任,商业交流缓慢而充满摩擦,区块链具有划时代意义。在全球不同人种、不同国家建立全球商业交易生态是必然,全球链上价值存储生态,比特币已经存在于世界。

 

出块节点是Proposer,全节点是Acceptor。出块节点持续打包交易,提交新的区块,全节点验证新的区块提案,保证新区块和其中交易的正确性。从这个角度看,作为验证者的全节点更应该被称作守护者(Keeper)。

人们通常认为出块节点是守护者(Keeper)一个区块链网络的守护者,这样的观点不无道理。毕竟是出块节点验证交易,生产新的区块,为用户提供服务,这也是为什么人们会把出块节点/矿工画在网络拓扑的中心。看上去,他们已经拥有了定义区块链的权力。然而,如果我们将注意力再下降一层,从P2P网络的观点来看,结果却不是这样。

一般的P2P网络,例如BitTorrent或是Kad Network,目的在于更快的分享数据,这些网络中的节点并不关心自己转发的数据包包含的是什么样的数据。这些节点不需要理解数据,只需要转发数据,帮助数据从网络中的一点流动到另外一个点。它们只是数据的搬运工。

区块链的P2P网络则不仅仅是数据的搬运工,还是数据的验证者。P2P网络由全节点构成,全节点在接收到新的交易或者新的区块时,首先做的事情是验证。这里的验证不仅仅是验证数据本身的完整性(Integrity),还要验证数据在业务逻辑中的有效性,例如这笔交易是否和账本中已经有的交易冲突(双花),或者这个新区块是否包含了无效的交易。验证交易是否双花是业务层(账本)的逻辑,不是网络层的逻辑。在区块链的P2P网络中,节点不仅仅要转发数据,还需要理解数据。数据转发在区块链节点中是一个提升到业务层的概念,而不只是一个网络层的概念。

这种设计所导致的结果就是,全节点组成的网络形成了一道“防火墙”,有效阻止了无效交易和区块的传播。出块节点如果产生一个包含无效交易的区块,这个区块只能够传播到与其相邻的全节点,无法穿透这些相邻节点形成的防火墙传播到更远的地方,无法进入全节点网络维护的区块链主分叉,无效交易也就无法被依赖全节点的轻节点或是钱包接受。

因此,出块节点只是新的区块的提议者,并不能让全节点网络接受无效的区块或是交易。挖出一个新的区块并不是共识的结束,而是共识的开始。如果套用Paxos共识里面的词汇,出块节点是Proposer,全节点是Acceptor。出块节点持续打包交易,提交新的区块,全节点验证新的区块提案,保证新区块和其中交易的正确性。从这个角度看,作为验证者的全节点更应该被称作守护者(Keeper)。

按照这样的理解,我们可以画出这样一个图:

图3. 以全节点为屏障的节点拓扑

在图3中,全节点网络位于中心,形成一个相互验证的去中心化网络,一道安全屏障。轻节点连接这个网络中的全节点,使用全节点提供的服务。轻节点之间也可以形成自己的网络,但需要注意的是,轻节点网络没有验证功能,转发在这里更多的是网络层的概念。轻节点网络和全节点网络是不同的网络。出块节点连接全节点提交新的区块,出块节点之间也可以形成自己的网络,以更好的提供服务。

EOS

EOS的目标是百万级的TPS,为了实现这个目标,EOS使用投票的方式由全网选出21个出块节点(以及一定数量的候选节点),并要求出块节点使用最好的硬件来支撑高性能。EOS是否真的实现了百万级TPS并不重要,重要的是,通过这种方式来提升性能不仅仅要求出块节点付出不菲的成本,也要求全节点付出同样的成本。然而与出块节点不同,EOS网络中的全节点并没有得到网络的补贴,因此用户很难有足够的动力真的去支付几乎与出块节点相同的成本去运行一个节点。在这种情况下,网络最终会演化成一个没有全节点的结构:

 

图5. 没有全节点的网络

ByteMaster对21个节点合理性的论证是,比特币的算力也是集中在<10个矿池手中,21个节点其实比10个矿池更加去中心化。我们通过比较网络拓扑应该容易看出,这个辩护并不成立,因为两者的网络结构有很大区别,无法这样直接比较。在EOS网络中,由于去中心化全节点网络的缺失,出块节点缺乏监督,用户只能完全相信出块节点不会作恶。出块和验证的工作最终都集中到出块节点的角色上,出块节点既是运动员,又是裁判。而在比特币的网络中,大量的全节点承担了裁判的角色,矿池仅仅是运动员。用户可以相信大量的全节点,不需要相信矿池。

需要指出的是,这个问题实际上不仅仅是EOS的问题,也是其他要在Layer 1扩容的项目会遇到的问题。

 

对我们的启示

出块节点,全节点,轻节点形成了一个动态的网络,网络中的各类角色都可以自由进出(额,出块节点实际上在很多区块链中无法自由进出,这个也不展开了,以后有时间再写文章讨论…),这些角色形成的拓扑结构(例如节点比例、谁和谁连接等等等等)决定了网络的性质,包括性能、安全、中心化程度等各个方面。不同的设计可能会导致网络最终形成不同的结构,而这个最终结构所展现的性质有可能和设计初衷是相违背的。

全节点为了能够不信任任何第三方,选择自行验证所有交易历史。这种做法使全节点不仅仅满足了自己的需求,也为网络安全贡献了力量,体现出一种正外部性。区块链需要这种安全保证,因此全节点对于一个去中心化的网络至关重要。如何内部化这种正外部性是一个需要重视的课题,在这个课题还没有解决的情况下,我们能做的只能是保证全节点可以运行在一个较低的成本,以促进网络保有尽可能多的全节点。

EOS这套体系在应用层上的运行并没有很大的问题,在EOS的进化逻辑上,人治和代码治理是并行,为了解决并无全节点接受交易,监督出块节点的目的,其链上投票治理也在开发之中,而jan认为既然区块链的公约数是数学,我们应该用数学来建立信任,而不是通过协调人与人之间来进行人为监督,走回到人类物理社会治理的老路。因此jan自己在lay2之上建立的ckb层,就是共识层,来保证结合构想安全,实现性能、安全、去中心化。因此EOS和nervos团队实质上是对技术路线有着不同的思考,一个通过投票监督,一个通过建立lay1监督层来形成安全和去中心化。当时在上海的碰见一个cto的时候,我们在吃饭,他跟我说,eos和eth是技术思路上有较大的区别,路线不同,并无网上所言公链和联盟琏之分。未来eos的dapp发展呢速度也许决定了正确和错误,就如互联网协议一样,资源会聚集、会沉淀,到底有多少机会留给这些未来的挑战者,也许未来eos的价值能给我们历史的答案。有时候,理想很丰满,现实很骨感,完全的代码治理是否能够符合分布式商业的规律,也将得到验证。

赞(0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址