图文详述以太坊的节点和分片(二)

在该系列(一)中我们定义了节点,对比了中心化和点对点网络的区别,提到了点对点网络在加密货币中的重要意义。这一讲我们将进一步探讨以太坊网络。

以太坊的网络结构

以太坊是点到点的网络结构。网络中的参与者,又称节点,不享有任何特殊权利,人人平等。虽然节点并不享有特权,但是他们在网络中的功能和参与程度不同。以太坊网络中不存在中心服务器,或者独裁者,而是一个扁平拓扑结构。

所有去中心化的加密货币都是这种网络结构,目的就是为了真正践行这样一种理念:创造一种货币体系。在这个体系中人人平等,不存在管理部门可以随意定义货币的价值。比特币或者以太坊都是如此。

那么问题来了。没有中心系统,这个系统中的人怎么会知道某笔特定的交易发生了呢?具体的网络运作原理有点类似八卦传播协议。我们来回想下八卦都是怎么传播的。假设Alice给Bob转了3个ETH,最靠近Alice的节点知道了这个消息,然后转告他们身边的人,这些人又告诉就近的人,然后一传十,十传百,直到所有人都知情了。节点就是你隔壁的王大爷,就是你的七大姑,八大姨,你们村的大喇叭。

以太坊的节点是什么呢?一个节点就是参与以太坊网络中的一台电脑。参与方式有三种:

保存部分区块链信息,即轻客户端。

保存一份完整的区块链信息,即全节点。

确认交易,即挖矿。

什么是轻客户端?

我们之前提到过,点到点的系统就是把维护网络的责任分布给节点。要是有人想参与这个网络却没有资源下载并维护这个系统的完整区块链呢,就可以选择轻客户端。作为轻客户端,同样可以保障以太坊网络的高度安全,并且有权利确认一笔交易。

什么是全节点?

所有连接以太坊网络的电脑,只要完全执行以太坊的共识规则就叫做全节点。全节点要在电脑桌面上下载整个区块链,保证整个网络的可信。全节点需要遵从的部分共识规则包括:

确保每个区块中的挖矿奖励准确无误,为5个ETH。

交易有正确的签名。

交易和区块存储在正确的数据结构中。

任何区块中都不能出现双花现象。

全节点确认其他节点和交易,并且依赖其他节点的信息(想想八卦是咋回事,你也是从别人那里听来的)。

矿工 vs 节点

简单说,所有的矿工都是全节点,但并不是所有的全节点都是矿工。矿工需要运行所有连接区块链的节点。但是并不是所有下载了全节点的都必须挖矿。

以太坊问题面临的扩容问题

以太坊网络的共识是怎么一回事?这个网络的每一个节点都在做计算,当他们达成共识的时候,一笔交易就被认定不存在问题了。最初这种达成共识的过程不存在问题,但是随着以太坊的普及,交易数量在稳步提升,问题就来了。如下图所示:

图片来源:Etherscan

虽然交易量上去了这是个好事情(你看BCH就在各种想办法提高交易量),但是网络在达成共识前所需要的计算量也大幅上升。此外,由于某些大公司的加入和ICO狂潮,以太坊愈发普及,以太坊网络上的节点也出现爆炸式的增长。事实上,以太坊的节点是所有加密货币中最多的,因而也是最去中心化的。

截止到2017年5月,以太坊的节点数为25000,而比特币只有7000个节点。单就4月份到5月份,节点数量就增加了81%。

图片来源:Trust Nodes

你或许认为网络节点越多处理交易的速度就越快。事实并非如此。

共识是以线性方式实现的。也就是说,假如有3个节点:A, B, C,为了达成共识,A先要做计算并确认结果,B继续做同样的事情,最后轮到C重复同一过程。

然而,如果出现一个新的节点D,共识需要的时间就更久了。随着以太坊的普及,交易确认时间变慢了。

在一次速度测试中,以太坊每秒也就处理20笔交易,但是PayPal每秒能处理193笔交易,Visa更劲爆,一秒1667笔!

我们得明白以太坊的目标不是单纯的做货币,终极目标是演化成新型的互联网,希望开发者能在上面运行Facebook和YouTube这种规模的各种DAPP。不进行扩容,这不扯淡吗?

为了解决扩容问题,社区有三种解决方案:

增加区块大小

让用户使用其他竞争币

分片

增加区块大小

增加区块大小意味着每个区块能容纳的交易数增大,即提高性能,但是也存在相应的问题:

首先,简单扩大区块并没有解决节点达成共识速度低的问题。而且因为每个区块里的交易数增加了,单个节点要计算和确认的工作量也随之加大了。

为了容纳更多的交易,区块大小需要定期增大,这最终会导致网络的中心化。因为普通的电脑和用户无法承担下载并维护如此巨大的区块链。这违反了区块链中人人平等的理念。

最后,区块大小只能通过硬分叉来提升,这会导致社区分裂。上次以太坊硬分叉,诞生了两种货币。想必大家都不想再看到这种情况了。(CD:其实自从BCH分叉后,感觉好像大家巴不得天天分叉领糖果。。。)

让用户使用其他竞争币

另一种解决方案是运行平行的双层链,而非单一的区块链。换句话说,网络上如果运行了50个DAPP,就每条链上各运行25个。这会导致两大问题:

分散一条链上的算力非常不明智。算力决定了一条链有多安全,决定了这条链能不能抵挡外部黑客的攻击,决定了这个系统的运行速度。

如果分散算力到两条链上,恶势力矿工更容易对算力小的链发动51%攻击。

分片

最后一种方案就是以太坊要采用的分片技术。在深入剖析这个技术之前,我们先简单铺垫一下。假设三个节点A, B, C需要确认数据T。我们不让这三个节点各自都确认一遍T,而是把T分成3片:T1, T2, T3。然后A, B, C各负责一片。这样就节约了很多计算时间。

现在对分片有一点模糊的概念了吧。下一讲我们再详细阐述分片技术。再会!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180518G1QAVT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券