节点:区块链节点的作用及其类型

节点:区块链节点的作用及其类型

节点,也称为比特币节点或区块链节点,是一台连接到比特币网络、与其他节点(即其对等节点)交换交易和区块数据的计算机。该网络是点对点(P2P)网络,这意味着这些计算机彼此直接连接,并在彼此之间传递数据。只有全节点才会依据共识规则检查每一个区块。

比特币节点在点对点网络中起什么作用?

比特币节点在计算机上运行比特币软件,并使该计算机与其对等节点保持连接。比特币是一种加密货币,其交易和区块数据正是通过节点之间的这些连接进行传输的。

比特币节点会转发它所接收到的内容。交易是将BTC从一个所有者转移到另一个所有者的记录,而区块则是一批被一同添加到区块链中的交易。当某个节点收到新的交易或新的区块时,它可以将该信息转发给自己的对等节点。

一个比特币节点只连接部分对等节点,而非网络中的所有其他节点。交易和区块在各个对等节点之间传播,因此两个节点在同一时刻所掌握的信息可能并不相同。

区块链是按顺序排列的所有区块的共享记录。每个区块都有一个区块头,即位于区块前部的摘要数据。区块头中保存着上一个区块头的哈希值。哈希是根据数据计算出的固定长度的指纹。该链的设计机制决定了:一旦某笔交易被更改,其所在区块的哈希值也会随之改变,而改变后的哈希值将不再与下一个区块中存储的哈希值相匹配。

存在哪些类型的节点,各自检查什么内容?

不同节点在检查内容的多少以及保存数据量的多少上各有不同。

什么是全节点?

全节点是指这样一种节点:它下载每一个区块,并依据共识规则检查每个区块及其中的每笔交易,然后转发其中有效的部分。共识规则是每个全节点都用来判断交易或区块是否有效的规则,从而使所有全节点彼此保持一致。

全节点维护着属于自己的区块链,其中仅包含它自己验证过的区块,它不会单凭其他节点的说法就认定某个区块有效。保存完整区块链的全节点也被称为存档节点(archival node)。

什么是裁剪节点?

裁剪节点是一种全节点,它会在验证完旧区块数据后将其删除。它和全节点一样检查每个区块及每笔交易。它会保留近期的区块以及未花费交易输出集合(UTXO集合),因为验证新交易时需要用到该集合。未花费交易输出是指区块链上记录的、尚未被花费的一笔BTC金额。

裁剪节点所需的磁盘空间更少,而且由于它不再保存较旧的区块,因此只能向其他节点提供近期的区块数据。

什么是轻客户端(轻节点或SPV客户端)?

轻客户端是一种在不下载和检查每个区块及每笔交易的情况下使用比特币网络的软件。它也被称为SPV客户端(simplified payment verification,简化支付验证)、瘦客户端、轻量级客户端、轻量级节点或轻节点。比特币的开发者文档将其与节点区分开来,因为轻客户端既不转发区块和交易,也不对其逐一进行检查。

轻客户端下载的是区块头(每个80字节)以及验证一笔支付所需的数据。为了验证一笔支付,轻客户端会向全节点请求默克尔分支(Merkle branch),这是一条将某笔交易与包含该交易的区块联系起来的简短哈希链。借助该分支和区块头,轻客户端就能够确认某笔交易确实被包含在某个区块中。

轻客户端无法确认该交易是否遵循了所有规则,因此它依赖全节点提供证明,并依赖工作量最大的链——即重建成本最高的那条链。只要诚实参与者掌握着网络的大部分算力,这种方法就是有效的;而一旦攻击者的算力超过了网络,就有可能欺骗该机制。

节点类型

验证内容

存储内容

依赖对象

全节点

依据共识规则检查每个区块和每笔交易

仅由自己验证过的区块组成的自有链

不依赖其他节点关于区块是否有效的说法

裁剪节点

与全节点相同,检查每个区块和每笔交易

近期区块及UTXO集合;旧区块数据会被删除

不依赖其他节点关于区块是否有效的说法

轻客户端(SPV客户端)

某笔交易是否被包含在某区块中,但不验证所有规则

区块头以及验证一笔支付所需的数据

依赖全节点提供证明,以及工作量最大的那条链

全节点如何处理交易和区块?

全节点从其对等节点接收交易和区块,并通常对每一项数据执行以下操作。

当一笔交易到达时,全节点会经过以下步骤:

  1. 检查输入。每个输入必须指向一个尚未被花费的输出,且其数据(通常是数字签名)必须满足其所使用输出的花费条件。
  2. 检查金额,因为输出总额不得超过输入总额。
  3. 节点可以将有效交易保留在其内存池(mempool)中——即节点用来存放尚未被打包进区块的交易的等待区——并将其转发给对等节点。是否这样做取决于该节点的转发策略,即一组额外的本地规则。未通过检查的交易则会被丢弃。

下面用一个假设的数字示例来说明金额检查。在该示例中,两笔交易X和Y各自花费了一个0.5 BTC的输入。交易X向收款人发送0.3 BTC,并向发送方返还0.1999 BTC作为找零(即发送方未用于支付的那部分输入金额)。交易Y向收款人发送0.3 BTC,并返还0.2001 BTC作为找零。

交易(虚构,非真实数据)

输入总额(BTC)

输出总额(BTC)

该项检查的结果

X

0.5

0.4999

输出未超过输入。0.0001 BTC的差额即为交易手续费。节点继续进行其他检查。

Y

0.5

0.5001

输出超出输入0.0001 BTC。节点拒绝该交易。

该示例中的金额为虚构数值,并非手续费建议;实际的全节点还会检查每个输入是否仍未被花费、每个签名是否有效,而该示例并未展示这些步骤。

从对等节点接收到的区块要经过以下检查(以及其他检查):

  1. 检查工作量证明。区块头的哈希值必须等于或低于目标值——这是由网络设定的一个数值,而工作量证明指的是矿工为找到这样一个哈希值所付出的计算努力。
  2. 检查区块结构。默克尔根(Merkle root)是区块头中由该区块所含交易计算得出的一个哈希值,必须与这些交易相匹配;同时,区块的权重(衡量其大小的指标)必须保持在共识规则所设定的限制之内。
  3. 检查交易。除第一笔交易外,其余每笔交易都必须通过上述交易检查。第一笔交易被称为coinbase交易,它没有需要检查的输入,且其金额不得超过区块补贴(即区块奖励中新生成的BTC)加上该区块中的交易手续费之和。
  4. 有效的区块被添加到节点的链上。节点通常会将该区块所包含的交易从其内存池中移除,并向其对等节点宣布该区块。

如果某个区块违反了上述任何一条规则——例如coinbase交易所要求的金额超过了补贴加手续费之和——全节点就会拒绝该区块。

截至2026年10月,区块补贴为每个区块3.125 BTC,该数值自2024年4月起生效,并会在每次减半时减少一半。

为什么每个全节点自行检查规则这一点很重要?

全节点会独立地对每一个区块应用共识规则,不依赖任何对等节点、矿工或公司来判断某个区块是否有效。

只有当节点运营者所运行的软件包含了某项规则变更时,该全节点才会执行这一对共识规则的变更。经历软分叉(一种规则变更方式)后,未升级的节点仍会继续接受与已升级节点相同的区块,只要大多数算力(即矿工为网络贡献的综合计算能力)执行了新规则即可,但该未升级节点自身并不会去检查这条新规则。而经历硬分叉(另一种规则变更方式)后,未升级的节点则可能无法验证依照新规则生成的区块。

全节点被设计为遵循工作量最大的那条链。掌握大部分算力的一方有可能修改近期的区块。但即便如此,全节点所执行的规则依然适用,因此按照设计,任何超发BTC或在没有有效签名的情况下花费BTC的区块,都会被执行检查的节点拒绝。

节点与矿工有何不同?

矿工和节点承担着不同的工作。矿工的区块由矿工本人或其所属矿池从等待中的交易组装而成,矿工则将计算努力投入到工作量证明之中。节点负责检查已组装完成的区块及其中的交易,除非运营者同时运行了挖矿软件,否则节点软件本身并不进行挖矿。

同一个运营者既可以挖矿,也可以运行节点。单人矿工(即独自挖矿、不通过矿池的矿工)通常会使用全节点软件来获取等待中的交易,并广播其所挖出的区块。

运行一个节点需要做什么?

运行全节点意味着运行诸如Bitcoin Core之类的节点软件,该软件会连接到对等节点、下载区块链、对其进行验证,并持续检查每一个新到达的区块和交易。

一个新的全节点首先必须从第一个区块(称为创世区块)开始下载并检查每一个区块,直至最新的区块为止。这一追赶过程被称为初始区块下载,所需时间取决于计算机性能及网络连接状况。

全节点需要磁盘空间来存储区块数据,也需要带宽来下载和转发数据。该软件自身的文档中列出了硬件需求、设置步骤以及端口号,这些内容会随着区块链的增长和软件的更新而发生变化。

发送和接收BTC并不要求运行节点,因为钱包可以作为轻客户端运作,并依赖他人的节点。

节点不做什么?

比特币节点并不持有他人的BTC。区块链记录的是哪些输出存在,而能够花费这些输出的私钥则保存在钱包中。私钥是一个秘密数字,持有者凭借它可以授权一笔花费。

接受或转发某笔交易的节点,并不等于确认了该交易。只有当某个区块将其纳入其中时,该交易才算得到确认;并且按照设计,在该区块之后每新增一个区块,比特币交易被撤销的难度就会进一步增加。在此之前,一笔未确认的交易仍有可能被替换或被丢弃。

在比特币系统中,区块补贴和交易手续费归于将区块添加到链上的那位矿工,而该区块中的第一笔交易正是用来领取这些收益的。

2025年11月27日

GoMining 新闻

您可能会对以下内容感兴趣