# 区块链基础

## <mark style="color:orange;">验证者</mark> <mark style="color:orange;"></mark><mark style="color:orange;">**Validators**</mark>

以Ethereum为例，验证者具有以下功能和职责

1. **抵押以太坊**：为成为验证者，用户需要抵押一定数量的以太坊（目前是32 ETH）。这些抵押的币作为诚信的保证，如果验证者行为不端（如验证无效区块），他们可能会失去部分或全部抵押金。
2. **验证交易**：验证者负责检查交易的有效性，确保交易符合以太坊的规则。这包括但不限于检查交易签名的有效性和账户余额是否足够支付交易费用。
3. **提议区块**：在以太坊2.0中，验证者轮流（随机）提议新的区块。这涉及选择在上一个区块后发生的有效交易，并将它们打包进新区块。
4. **投票确认区块**：除了提议区块外，验证者还需要对其他验证者提议的区块进行投票，这是共识机制的一部分。通过这种方式，区块被确认并最终加入到区块链中。
5. **参与共识过程**：验证者通过在提议的区块上投票来参与网络的共识过程。这包括支持有效的区块并拒绝无效或恶意的区块。
6. **维护网络安全和稳定**：验证者的抵押和他们对网络安全的重要性意味着他们在防止任何形式的攻击和滥用中起着关键角色。验证者的诚信行为对保持网络的去中心化和安全性至关重要。
7. **接收奖励和惩罚**：验证者通过参与区块的验证和提议过程获得奖励，包括新发行的以太坊和交易费用。然而，如果他们的行为被认定为恶意的（例如提议无效区块），他们可能会受到惩罚，即失去一部分抵押的以太坊。

<figure><img src="/files/XQSR8ZWHRviZu4DGSyi8" alt=""><figcaption></figcaption></figure>

## <mark style="color:orange;">以太坊客户端</mark>

客户端是节点运行的基础软件，不同的客户端（如Geth、Parity/OpenEthereum、Besu等）可以为不同用户和用例提供服务，但所有客户端都遵循以太坊的核心协议规范。

它们实现了以太坊的协议规则，允许用户发送交易、执行智能合约、挖矿或验证，并与以太坊区块链进行同步。以太坊客户端的存在是为了使网络去中心化和安全。

## <mark style="color:orange;">节点</mark>

以太坊节点的运行对于网络的去中心化和安全至关重要。没有足够的节点，网络将面临中心化的风险，可能导致安全性和透明度的下降。每个节点都通过执行以太坊协议和验证交易来保护网络，确保其不受恶意攻击的影响。此外，节点还使网络能够处理更多的交易，提高整体的性能和效率。

* **全节点（Full Nodes）**- 全节点下载并保存整个区块链的数据，包括所有区块和交易。这些节点验证所有的交易和区块，确保它们遵守以太坊的规则。全节点还参与区块链的共识过程，对网络中的交易和区块进行独立验证。全节点提供了网络安全的最高级别，因为它们不依赖于其他节点就能完全自主地验证网络状态。
* **轻节点（Light Nodes）**- 轻节点不下载整个区块链的所有数据，而是只下载区块头部的数据。区块头部包含关于区块本身及其交易的基本信息，足以验证交易的有效性但不包含详细内容。轻节点依赖于全节点提供额外的信息来完成某些操作。轻节点的优点是它们占用的存储空间少，启动快，适用于计算能力或存储空间有限的设备，如智能手机或轻便型计算机。
* 归档节点（Archive Nodes）- 归档节点类似于全节点，但它们保存了区块链上从创始区块到当前区块的完整状态变更历史。这包括每个账户的余额、合约代码和所有状态变更的历史记录。归档节点需要极大的存储空间，因为它们保存了更多的数据，这些数据对于开发者和大型企业在进行复杂查询和区块链分析时特别有用。

{% hint style="success" %}

* **以太坊客户端** 是运行在节点上的软件，它定义了节点如何与以太坊网络交互。
* **节点** 是部署以太坊客户端的具体实例，它直接参与到区块链网络的维护中。
* **验证者** 是在以太坊2.0中特定功能的节点，负责验证交易和维护区块链的安全。
  {% endhint %}

### 谁会运行全节点

验证者必须运行全节点，这是因为全节点可以存储整个区块链的数据，独立地执行所有交易和智能合约，而这对于执行验证者职责是必要的。

但运行全节点也用于其他用途，比如开发者可能运行全节点以便能够有完整的数据访问，这对于开发和测试智能合约和应用程序是必要的。一些企业或服务提供者，如区块链分析公司、大型交易所等，可能会运行全节点以确保他们可以快速访问和验证区块链数据。

### 谁会运行轻节点

通常，以下类型的用户会选择运行轻节点：

1. **普通用户**：对于只需要进行基本交易和查询余额的普通用户，运行轻节点是一种资源节约的选择。轻节点可以在智能手机或个人电脑上快速运行，不需要大量的硬盘空间和处理能力。
2. **移动应用**：移动端的钱包应用通常运行轻节点，以减少数据使用量和依赖于移动设备的存储限制。

## <mark style="color:orange;">RPC</mark>

Remote Procedure Call，是一种用于在分布式系统中进行通信的技术。在以太坊钱包中，RPC通常用于连接到以太坊网络的节点。节点会公开一组RPC接口，允许钱包应用程序通过RPC调用与节点进行通信。例如，钱包可以通过RPC调用来获取区块链数据、发送交易、执行智能合约等操作。

如果把区块链比喻为互联网，那么RPC就是你上网的网线。

<figure><img src="/files/dtmVlt0HWUtP4qS5P5mc" alt=""><figcaption></figcaption></figure>

### 为什么用户/开发者在参与区块链项目的时候，表面上不需要运行节点？

在区块链的网络世界中，我们需要有跟传统互联网世界类似的需求，就是获取、发送、交互数据，理论上这就需要我们自己部署节点并且运行以太坊客户端，但是有了RPC技术我们就可以像访问API一样与区块链世界交互。

像 Infura 这样的服务提供商，将 RPC 技术包装成了服务，使得用户可以方便地通过网络请求与以太坊区块链进行交互，提供了稳定且易于使用的 RPC 接口，开发者也可以通过这些接口与以太坊网络进行通信，而不需要自己维护节点。

{% hint style="info" %}
在传统互联网中，RPC可以类比为API（应用程序编程接口）。API是一种技术，允许不同软件之间进行交互，例如，一个网站可能会使用天气服务的API来获取和显示最新的天气信息。类似地，RPC允许一段程序请求另一台服务器上的程序进行操作，并返回结果。

而像Infura这样的服务提供商，则可以比喻为云服务提供商，如Amazon Web Services (AWS)或Google Cloud。这些云服务提供商管理着强大的服务器资源，并为开发者提供API访问这些资源，从而免去了他们自己维护物理服务器的需要。类似地，Infura管理着连接到以太坊网络的节点，并为开发者提供API（通过RPC实现），使他们可以轻松地与以太坊区块链互动而无需自行运行和维护一个完整的节点。
{% endhint %}

## <mark style="color:orange;">共识机制与区块生成</mark>

### 以太坊 PoS

在以太坊网络中，负责打包区块的是称为验证者（Validators）的参与者。在以太坊2.0的权益证明（Proof of Stake, PoS）机制中，这一过程尤为关键。以下是以太坊中区块打包的步骤：

1. **验证者的选举**：在以太坊2.0中，验证者需要抵押一定数量的以太币（ETH），目前至少需要32 ETH。通过抵押，他们表明愿意参与网络的维护。
2. **提议区块**：通过一个随机的选择过程，一个验证者会被选中来提议一个新的区块。这个过程是自动的，系统会基于多种因素决定哪个验证者有资格在特定时间提议区块。
3. **打包交易**：一旦被选为提议者，验证者会从交易池（mempool）中选择交易来打包入新的区块。他们通常会选择手续费较高的交易，以最大化自己的收益。
4. **区块验证**：提议的区块需要被网络中的其他验证者验证。这些验证者会检查区块中的每一笔交易是否有效，确保没有双重支付或其他类型的欺诈行为。
5. **区块确认**：一旦多数验证者同意新区块的有效性，该区块就会被加入到区块链中。这一过程涉及到网络中大多数节点的共识，确保了区块链的安全和去中心化。

在整个过程中，验证者不仅负责打包和提议区块，还参与到网络的安全和共识机制中，通过他们的抵押和验证行为维护网络的正常运行。

### 比特币 PoW

在比特币网络中，负责打包区块的是矿工（Miners）。这个过程是通过所谓的“工作量证明”（Proof of Work, PoW）机制实现的。以下是比特币网络中区块打包的基本步骤：

1. **交易收集**：矿工从网络中收集未确认的交易。这些交易通常存储在矿工本地的交易池中，等待被加入到新的区块中。
2. **开始挖矿**：矿工选取交易，并开始尝试创建一个新的区块。矿工通过计算一个符合特定条件的哈希值来证明其工作量。这个过程涉及到对数据进行重复的哈希计算，每次计算都包括一个随机的数（称为nonce）。
3. **找到有效的区块**：一旦矿工找到一个有效的哈希值，即一个符合网络当前难度条件的哈希值，这个区块就被认为是有效的。有效的区块包含了所选择的交易、前一个区块的哈希值、以及其他一些关键信息。
4. **区块广播**：矿工将这个新的区块广播到比特币网络中，其他节点（全节点）接收到新区块后会进行验证。如果区块有效，其他节点将这个区块添加到他们的区块链副本中，并开始在这个新的区块之上构建下一个区块。
5. **获得奖励**：成功打包并被网络确认的区块使矿工能够获得区块奖励。这包括新生成的比特币（区块奖励）和该区块内所有交易的交易费。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://cmdefi.gitbook.io/cmdefi/home/crypto-jing-dian-li-lun/qu-kuai-lian-ji-chu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
