以太坊节点所做的工作

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

以上便是以太坊节点常态性的工作内容,正是这些分布在全球的数千个节点们不间断地工作维系了以太坊区块链的正常运作。

然而其实节点有许多不同形式,上述参与所有工作内容(包含接收、验证、挖矿)的节点仅是大众普遍认知的其中一种形式,接着我们将介绍现行各种不同形式的节点。

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

全节点Full Node

全节点是拥有完整区块链帐本资料的节点,具备独立验证的能力来确认交易之有效性。具体来说全节点主要在处理下列四件事:

  1. 储存所有历史交易资讯,资料公开透明
  2. 监测矿工挖出来的新区块,验证其合法性后同步该区块
  3. 监测区块链网络中的新交易资讯,验证每个交易的合法性
  4. 将验证过的「交易/区块资讯」广播给全网络节点

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

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

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

矿工节点

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

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

轻节点Light Node

轻节点顾名思义即是轻量级的节点,具体定义是不储存或维护完整的区块链副本,只储存最小量的状态来作为发送或传递交易讯息的节点。

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

轻节点如何验证交易

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

  1. 向邻近的全节点发起确认请求
  2. 全节点收到请求后提供所需相关资讯供验证

需要向全节点请求的原因是:假设有一个合约执行的交易,那么便必须要有该合约部署时的原始码(位在Contract Created 之交易中)。由于该交易位于某个区块之Body,故轻节点必须要向全节点请求该合约之相关资讯方能进行交易验证。

整体而言,轻节点大致上具备以下几点特色:

  • 只储存每个区块的区块标头Block Header
  • 不一定保持随时在线(获取最新的Block Header 资讯)
  • 根据需求可以只保存与自己相关的交易内容
  • 无法验证大多数交易的合法性,只能验证与自己相关交易的合法性
  • 无法验证新区块的正确性
  • 只能检测到当前的最长链,但无法知道哪条是最长合法链

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

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

归档节点Archive Node

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

归档节点截至2020/05 的资料大小已经超过4 TB,对硬体要求相当庞大。通常只有特殊的服务如「区块链浏览器:Etherscan」或「RPC Endpoint Provider:Infura」等底层服务会有架设归档节点的需求,大多数的情况全节点已非常足够。

说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...