LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > 以太坊节点的运作机制及其分类介绍

以太坊节点的运作机制及其分类介绍

2020-08-10 洁sir 来源:区块链网络

以太坊 2.0 即将来临,本篇文章将针对以太坊节点(Ethereum Nodes)做概论性的介绍,希望你能充分了解节点的运作机制。

以太坊网路 Ethereum Network

以太坊是由分散式节点所组成的网路架构,这些节点称为以太坊节点 Ethereum Nodes或以太坊客户端。任何人只要有规格足够的电脑硬件设备都能够加入到以太坊网路中成为节点,贡献算力赚取区块挖矿奖励。截至 2020年5月,分布在全世界各地的以太坊节点总共约有 5,756 个。


来源:https://www.ethernodes.org/

在当前的以太坊网路中,每个节点都是相互平等的,彼此间即时沟通同步区块资料及打包待出块的交易(挖矿)来维持以太坊区块链的运作,我们可以透过下图浏览节点的主要内容:


以太坊节点所做的工作有:


接收交易:接收来自 DApp、钱包或其它节点的交易信息。
接收区块:从其它节点接收区块信息,同步至最新的区块高度。
验证:验证新的区块之正确性、验证待处理交易之有效性。
执行:处理交易,进行运算并更改状态值,打包成新区块。
挖矿:用电脑算力来计算 nonce 值,最先找到 nonce 值出块并广播的矿工可以获得区块奖励与所有交易之手续费(Gas)。
共识:通过共识机制达成全网帐本之一致性或区块重组(reorg)。

以上便是以太坊节点常态性的工作内容,正是这些分布在全球的数千个节点们不间断地工作维系了以太坊区块链的正常运作。然而其实节点有许多不同形式,上述参与所有工作内容包含接收、验证、挖矿的节点仅是大众普遍认知的其中一种形式,接着我们将介绍现行各种不同形式的节点。

以太坊的节点种类 Ethereum Nodes


在以太坊网路中,节点大致可被分为全节点( Full Node)、轻节点 (Light Node)、归档节点( Archive Node)三大类。

全节点 Full Node

全节点是拥有完整区块链帐本资料的节点,具备独立验证的能力来确认交易之有效性。具体来说全节点主要在处理下列四件事:
1.储存所有历史交易资讯,资料公开透明。
2.监测矿工挖出来的新区块,验证其合法性后同步该区块。
3.监测区块链网路中的新交易信息,验证每个交易的合法性。
4.将验证过的交易或区块信息广播给全网路节点。


一个节点只要下载了完整且最新的区块链资料,稳定运行验证交易和同步区块资讯,那它就是一个全节点了。由于每一个全节点都保有全网资料,所以即使其中部分节点出现问题,例如断网或被骇客攻击,都不会影响整个区块链网路的安全性。这即是去中心化记帐系统的优势所在。


同时,全节点的数量越多,也代表完整的区块链帐本被保存的份数越多,不可篡改性也就越强,整个区块链网路的安全性也随之提升。一但有人企图组织算力叛变,试图改变区块共识或发动双花攻击,其它正常运作的全节点可以即时验证拒绝掉这些交易。


随着持续增加的交易记录与智能合约部署,全节点所需的储存空间也在不断增长。截至 2020年5月,以太坊全节点的资料大小已经超过 360 GB,并以每个月约 30 GB 的速度持续增长中。


图片来源:https://etherscan.io/

矿工节点


挖矿的过程即是将验证过的待处理交易打包成新区块,并以电脑算力来计算nonce 值,最先找到nonce 值成功出块并广播的矿工会获得区块奖励与所有交易之手续费(gas)作为报酬。


矿工必须要运行全节点才能即时浏览区块链历史资料进行交易验证,再将验证通过的交易进行打包。因此,所有矿工必定是全节点;然而全节点未必是矿工,运行全节点的人未必会花费电脑算力去参与新区块 nonce 值的运算来争取区块奖励。

轻节点 Light Node

轻节点顾名思义即是轻量级的节点,具体定义是不储存或维护完整的区块链副本,只储存最小量的状态来作为发送或传递交易讯息的节点。至于轻节点究竟储存了哪些状态,我们得先透过下图了解以太坊的结构:


图片来源:https://blog.ethereum.org/

Block Header and Body


以太坊的每个区块主要分为 Header 和 Body 两个部分存储,Body 即是交易列表;Block Header 则较为复杂,包含了前个区块的 Hash、时间戳及挖矿难度等相关参数。

在Block Header 中采用一种名为Merkle-Patricia Trie (MPT) 的核心结构来储存区块链信息,可以理解为把帐本分割成无数个小的资料块,每个资料块像是一棵树中的无数叶片,而我们把每两个相邻的叶片合并成一个字串,并算出该字串的Hash 值。如此过程经过无数次后,最终如同所有树枝归向一个树干一般,会得到一个包含了所有区块资料的 Hash 值,称为Merkle Root。

轻节点信息

全节点储存了所有区块的 Block Header 与 Body(交易列表),而轻节点只储存最小量的状态:即区块标头 Block Header,借此大幅降低储存空间的需求。截至 2020年5月,以太坊主网上约有 1017 万个区块,而每个区块标头的大小约为 508 bytes,故轻节点的大小约为 4.8 GB。


轻节点如何验证交易


由于割舍掉区块的 Body,即所有历史的交易列表,因此当轻节点需要验证某个交易的合法性时,具体做法为:


1.向邻近的全节点发起确认请求。
2.全节点收到请求后提供所需相关资讯供验证。
3.需要向全节点请求的原因是:假设有一个合约执行的交易,那么便必须要有该合约部署时的原始码。由于该交易位于某个区块的 Body,故轻节点必须要向全节点请求该合约的相关信息才能进行交易验证。


轻节点的特点


整体而言,轻节点大致上具备以下几点特色:
1.只储存每个区块的区块标头 Block Header。
2.不一定保持随时在线,用于获取最新的 Block Header信息。
3.根据需求可以只保存与自己相关的交易内容。
4.无法验证大多数交易的合法性,只能验证与自己相关交易的合法性。
5.无法验证新区块的正确性。
6.只能检测到当前的最长链,但无法知道哪条是最长合法链。

由于轻节点必须要向全节点请求与交易验证相关的 Block Body信息,那么要怎么知道全节点回传的资讯是正确的呢?


这时就要回到以太坊的结构来谈,前面提到轻节点为了减少储存空间,而割舍掉 Block Body,仅保留作为验证之用的 Block Header。由于存有已经验证合法之 Block Header,因此当未来需要验证相关交易时只要透过跟全节点请求相关的 Block Body 资讯即可进行验证,不需要从头验证整个区块。

Block Header 与交易验证


轻节点能够利用Block Header 验证交易的原因为: Block Header 中的Merkle Root 即是由Block Body 中的交易资讯经由杂凑演算法(Hash Algorithm)生成的数位指纹(Digital Fingerprint),因此Block Header 可以充分代表Block Body 内的信息。


Block Header 中的 Merkle-Patricia Trie 是一个生成 Hash 需要花费大量算力,但验证非常迅速的结构。当轻节点收到全节点提供的资讯时,便能够利用已有的 Block Header 相关讯息迅速验证该资讯是否正确,进一步进行交易验证。

归档节点 Archive Node

归档节点是在全节点的基础之上,额外储存了每个区块高度的区块状态,包括个人帐户与合约帐户之当时余额等信息,即针对每个区块高度当下的状态进行快照并存档。归档节点能让你快速回到某个区块高度去查询当下状态:例如你想要知道某一个帐户在区块高度 #5,000,000 的余额时便会派上用场。


归档节点截至 2020年5月的资料大小已经超过 4 TB,对硬件要求相当庞大。通常只有特殊的服务如区块链浏览器Etherscan或RPC端点提供者Infura等底层服务会有架设归档节点的需求,大多数的情况全节点已非常足够。


归档节点与安全性


归档节点对于区块链的信任模型与整体安全性原则上不会有额外的加成或影响,全节点包含挖矿节点已能充分保障全网路的安全。然而如果没有人继续维护归档节点的话,查询区块链上的历史资料得花费许多的时间。 归档节点保存了区块链上的完整历史纪录与资料,以及所有区块高度的当时全网状态。


截至 2020年5月,以太坊全网的归档节点总数量约为 100 个。


结论


在以太坊网路中,节点大致可被分为全节点 Full Node、轻节点 Light Node、归档节点 Archive Node三大类。


轻节点(Light Node)仅储存了区块标头 Block Header,没有储存 Body。当需要验证交易时会向邻近的全节点发起相关信息请求以进行验证。


归档节点(Archive Node)即在全节点基础之上多储存了每个区块高度的状态(State)快照,供检索相关用途。

原文链接:A Introduction and Framework for Ethereum Nodes

—-

编译者/作者:洁sir

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...