查看原文
其他

引介 | 什么是轻客户端,为什么我非得在乎它?

Thibaut Sardan 以太坊爱好者 2019-01-22

轻客户端是区块链生态系统中十分重要的元素。它们可以帮助用户以安全、分散的方式访问区块链并与区块链进行交互而无需同步完整的区块链。我将在本文中用通俗易懂的方式解释什么是轻客户端、什么不是轻客户端及其来由。

-光 —— Markos Mant 作品-


在讨论什么是轻客户端之前,我们先说一下什么是客户端吧!计算机科学中的客户端是一种连接服务器的硬件或软件。例如,网页是一种客户端——它连接到 web 服务器上以请求其内容。在区块链领域,客户端是一种以点对点的方式连接到其他客户端的软件。由于所有客户端相互通信,它们一起组成了一个网络,在该网络中每一个客户端都是一个网络节点。这就是术语“节点”有时候也被用来替代术语“客户端”的原因。

以太坊以前只有一种节点,那就是现在所说的全节点。这种软件负责验证以及转发网络上的交易和区块。由于无需信任的环境(开放的网络)以及区块链本身的性质,每个全节点都需要下载并验证所有的区块,因此所有区块中的所有交易信息都需要经过全节点的验证。

Parity 和 Geth 是两个最受欢迎的以太坊客户端,可以在功能强大的笔记本上运行。然而,下载并验证所有区块信息会消耗大量的时间和资源。例如,完全同步以太坊区块链至少需要 SSD(固态硬盘)。因为 HDD(机械硬盘)跟不上每秒的输入输出需求。

有 两种节点用户


全节点用例


现在,有些组织以及个人运行着全节点是因为他们的工作需求。比如说矿工,区块浏览器以及交易所。个人用户可能会因为全节点是与区块链交互的最安全的方式而运行一个全节点。在规模小很多的情况下,他们也会因为纯粹的利他因素而来帮助维护网络。每时每刻运行着一个全节点需要大量的知识和资源,因此大多数用户不愿意进行投资是可以理解的。虽然全节点对网络至关重要,但是除了矿工之外,没有其他的内置激励机制让大家运行全节点。

因此,与区块链交互的大多数用户将自愿或被迫使用集中式基础设施。最流行的软件钱包默认依赖第三方托管节点。这些客户端连接到某个远程节点并以非加密验证方式完全信任其响应。这种方式的优点是增强的用户体验,因为用户不需要运行自己的节点了,但是,他们需要相信第三方节点。Metamask、MyEtherWallet 以及 MyCrypto 默认连接远程节点,但是根据用户需求允许用户连接到自己的本地节点。但是 Jaxx 以及 Exodus 只能连接到远程节点而不支持连接自己的本地节点。在这里我们并未考虑移动钱包。因为手机不可能运行全节点。

像 Infura 这样的公司致力于运行全节点,并向他们的用户免费提供服务。通过抽象同步全节点的麻烦可以让用户轻松访问区块链。此类解决方案有助于让更多用户访问使用以太坊。虽然这一举措已经是区块链生态系统中一项十分重要的补充,但是它是集中式的,存在单点故障,与区块链的分布式理念相违背。直到几个月前,钱包开发者还没有其他的选择。


我们的目标是创造一种兼容各种“轻度”的协议,从几乎不存储任何东西到存储所有内容都可以。——PIP,Parity light protocal


轻量级替代方案:轻客户端


轻客户端或者轻节点是一种连接全节点以实现与区块链的交互的软件。与全节点不同的是,轻客户端不需要不停运行,也不需要向区块链中读取写入大量信息。实际上,轻客户端不需要直接与区块链交互,它们使用全节点作为中介。轻客户端依赖全节点实现许多操作,从请求最新的区块头到请求账户的余额等等。

轻客户端协议的设计方式允许她们与全节点在最小化信任的情况下进行交互。这是我们理解轻客户端的一个关键,接下来让我们回顾一下以太坊的基础:

  • 普通用户使用全节点、轻节点或者可信的远程节点在网络中发送交易。

  • 全节点在网络中接收交易、检验交易的有效性,并将它们广播到网络中。

  • 矿工是连接到特定软件的全节点。它们跟普通的全节点一样从网络中接收交易、验证交易,但是它们还要投入大量的精力来寻找一个问题的解,这个问题可以让他成为下一个区块创建者。矿工使用的全节点就“应该将哪个区块加入区块链”达成共识并在这基础上继续工作。当一个区块后至少又添加了十个区块时,就被认为是安全的,因为它包含的交易被篡改的可能性极低。

现在,回到轻客户端。首先,轻客户端需要下载区块链的区块头。轻客户端向全节点发起的请求无需每一次都信任全节点。这是因为区块头中包含了一种叫做默克尔树根(Merkle Tree Root)的信息。默克尔树根就像是区块链中的账户余额以及智能合约存储的所有信息的数字指纹。一旦有信息发生变化,指纹也会发生变化。假设大部分的矿工是诚实的,那么区块头以及它们所包含的“指纹”就可以认为是有效的。轻客户端可能需要向全节点请求某些信息,例如:特定账户的余额。由于轻客户端知道所有区块的“指纹”,因此它们可以验证全节点给出的答案是否与它们所拥有的“指纹”相匹配。这是一种强有力的工具,可以用来在事先不了解信息的情况下证明信息的有效性。

由于轻客户端完成简单的操作也需要发送很多请求,因此网络整体的带宽需求要高于全节点的带宽。另一方面,轻客户端在实现高安全性时,其资源以及存储需求比全节点需求小几个数量级。其仅仅需要 100MB 的存储空间以及极低的算力,轻客户端是可以运行在移动设备上的。这意味着手机就可以通过分布式的方式访问区块链。

由于它仅仅需要全节点的一小部分信息,因此轻客户端可以更快的实现与区块链的同步。现在,以太坊主网语轻客户端的同步仅需要大约一个小时,但是对于应用而言,超过几秒钟的同步都太长了。有一些为了轻客户端快速同步区块链而开发的解决方案,但是这些解决方案通常是有弊病的。现在,轻客户端代码中内置了可信的区块链检查点。由于这个原因,客户端只需要下载最新的区块头,就可以在几秒钟内实现同步。轻客户端用户需要信任客户端开发者以继承有效的检查点。这种权衡被认为是可接受的,因为用户需要信任客户端开发者以实现客户端的开发了。为了以分布式的方式实现快速同步,Parity Technologies 目前开发了一种替代解决方案,该方案允许轻客户端用与全节点类似的方式执行 warp-sync。


未来,轻客户端将遍地开花 —— Marty McFly


轻客户端面临的挑战


轻客户端十分适用于主流用途,例如发送交易以及验证账户余额。对于轻客户端的主要负面意见是轻客户端对网络没有直接益处。除了它们自己所需要的信息外,它们不会验证任何其他信息;它们也不提供或从网络中中转信息给其他节点;同时,它们使用全节点的资源而不提供任何交换。

与全节点相比,轻客户端提供了更好的终端用户体验,同时让终端用户以分布式且安全的方式访问区块链。关键是要找到一种激励个体或机构运行全节点的方法,从而让它们给轻客户端提供服务,并惩罚提供错误数据的恶意全节点。让轻客户端可持续发展的一种方法就是让它们为向全节点发起的请求执行小额支付。在不久的将来,轻客户端将在以太坊分片中发挥重要的作用——实现验证者快速同步不同分片。轻客户端同样可以被用来举报恶意行为者(验证者或者 Plasma 中的权威操作者)。轻客户端的全节点激励机制是一个活跃的研究领域,因为该激励是生态系统稳定的关键。

有一些非常有前景的想法能够允许轻客户端实现快速同步还能避免上述弊病。其中一种想法就是允许全节点提供最新区块头的零知识性证明(eg:zk-STARK)轻客户端可以验证并同步区块链顶部而无需预知区块链状态。

总而言之,轻客户端近期将成为分布式应用的支柱,这对用户友好型分布式生态系统而言无疑是一个好消息。




Elisa 按:有技术的同志们赶紧把全节点整起来啊!收轻节点中介费的日子很快就要到来! 

阿剑按:节点层的问题就是我之前曾提到的,如果过度抽象地看区块链会忽略的问题之一。只看共识算法的话,根本意识不到节点层的设计会对整个网络产生怎样的影响。你知道我说的是哪个项目了吗?

(以上言论不代表 EthFans 观点,EthFans 期待听见不同的声音 ~)


原文链接

https://medium.com/paritytech/what-is-a-light-client-and-why-you-should-care-75f813ae2670
作者: Thibaut Sardan
翻译&校对: Aisling & Elisa

本文由作者授权 EthFans 翻译及再出版。


你可能还会喜欢:

干货 | 运行以太坊全节点的一项经济激励措施

通告 | 以太坊 Mist 浏览器的未来:分层节点及其它

引介 | 无状态客户端概念




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存