# Aleo 的节点类型

By [Yaakov](https://paragraph.com/@yaakov) · 2024-05-17

---

Aleo网络中有三种节点类型，分别是Validator、Prover、Client。

**Validator**

Validator会加入到两个网络中，一个是共识网络，通常监听5000端口，另一个是P2P网络，通常监听4130端口。Validator之间会通过5000端口互相连接，形成一个共识网络，Client和Prover不被允许连接共识网络。

Validator节点的主要职责，是按照AleoBFT的规则产生新的块。

在Aleo P2P Network中，除了Client 和 Prover之间会通过P2P互相连接之外，Client和Prover也会连接一定数量的Validator节点，以获取共识网络中最新块以及状态信息。

**Client**

Client节点的主要职责，是同步来自共识网络产生的块并更新账本信息。用户可以通过Client的RPC来访问当前Aleo网络的最新状态信息，也可以通过RPC来将Transaction广播到网络中。当共识网络产生的新的块包含Transaction，则意味着Transaction被成功的执行了。

**Prover**

Prover节点的主要职责，是同步来自共识网络产生的CoinbasePuzzle，并运行CoinbasePuzzle的算法得到满足要求的Solution，然后通过P2P网络广播给共识网络，当共识网络产生的新的块中包含这个Solution，Solution对应的Prover会获得相应的CoinbaseReward奖励。

下面分别介绍这三种节点类型。

### Validator （验证节点）

**验证者节点在网络中的角色以及作用**

Aleo Validators之间组成一个共识网络，并通过AleoBFT共识协议来决定区块的生成。Validator通过质押Aleo Credits来获得投票权（节点的投票权与质押的Aleo Credits的数量成正比），AleoBFT保证了：当一个新的区块被生成时，这个区块至少获得了超过2/3的投票，这意味着网络中诚实的Validators已经对这个区块达成一致意见，这有效保证了网络的安全，阻止了恶意节点的攻击。区块一旦形成，便认为是达到了最终确定性，区块以及包含的交易将不会被回滚。

**验证者节点的经济激励**

AleoBFT的机制保证了如果一个恶意的节点想要攻击网络，则至少需要获得超过1/3的投票权才能阻止新的区块的产生。这意味着，当网络中中质押的Aleo Credits越多时，共识网络会越安全。为了激励验证者节点质押自己的Aleo Credits，当每个区块被产生时，区块中会包含给验证者节点相应的BlockReward奖励。Validator节点获得BlockReward的奖励占比与它质押的Aleo Credits的占比相等。（TODO: Add Link)

**如何成为验证者节点？**

在Aleo主网上线时，将会拥有10个初始的Validator节点，随后用户可以通过质押至少10,000,000(一百万)的Aleo Credits。当质押的交易请求被共识网络接受之后，新的验证者节点可以立马参与到共识中，并获得BlockReward奖励，这得益于AleoBFT对Narwhal Bullshark所进行的改进。

由于网络中的验证者节点在运行的过程中，会通过相互的通信来获得彼此的状态信息，这意味着网络中的验证者节点越多，需要的网络通信的数量级就越大，通信复杂度为O(n)。通信复杂度的上升会导致区块产生的时间延长，在Aleo网络中限制了验证者节点的最大数量为200，以此来平衡去中心化与网络效率。

当我们只有少量的Aleo Credits时，虽然我们不能成为独立的验证者节点，但是我们可以通过委托质押的方式来获得BlockReward奖励。

**什么是委托质押？**

委托质押是指用户可以通过Program（Aleo的智能合约）将Aleo Credits质押在某个Validator节点上，质押的AleoCredits所得到的投票权也会委托给相应的Validator节点。用户可以获得线性比例的BlockReward奖励，Validator可以通过Program的设置收取一定比例的Fee。XXX（TODO：ADD Link）钱包、浏览器为用户提供了委托质押的功能，用户可以在他们提供的UI界面上看到各个Validator的Fee比例，方便地完成质押。

用户也可以随时取消质押，取消质押后的360个区块之后，用户可以将取消质押返还的Aleo Credits提取到余额中。

5.Transaction和Solution被验证者节点确认的过程

![image-20240422165659999](https://storage.googleapis.com/papyrus_images/3fdafbf9849da3804dad6f5ddb9f7c7423f674b3ed2569d07105c2e583236936.png)

image-20240422165659999

*   Transaction/Solution通过P2P网络或者RPC进入到验证者节点的的消息池
    
*   验证者节点将从消息池中选出一些Transactions/Solutions放入到BatchPropose（除了Transactions和Solutions，BatchPropose需要包含前一个轮次的2f + 1个BatchCertificate），并广播给其他的验证者节点。
    
*   其他的验证者节点在收到BatchPropose并确保它的合法性之后，会对该BatchPropose进行签名得到BatchSignature，并将BatchSignature返回给该验证者节点。
    
*   当验证者节点收到超过2f + 1的BatchSignature之后，将其聚合成为一个BatchCertificate，并广播给其他的验证者节点。
    
*   所有的节点都会执行并重复这个过程，产生的BatchCertificate构成一个DAG。当DAG被Commit后，新的区块产生，Transaction和Solution都会被包含在新的区块中。
    

### Client（客户端节点）

Client的核心还是同步来自共识网络产生的块并更新账本信息，同时提供RPC访问区块中的网络状态，并且将Transaction广播到网络中。

Client的使用官方已经封装好了完整的SDK，提供了JavaScript和Python版本的SDK供不同的开发者，关于JavaScript的使用前面写过了详细的[教程](https://mirror.xyz/0xaca732e6BA7280D69a4f173B74aA153483d93C8e/EFs5AYcJfsutgElj1CMDO0UZyNLqBhtf7ieSFizLsRc)

### Prover（证明者节点）

**Prover在网络中扮演的角色**

Prover是Aleo网络中的一个重要组成部分，它不参与到Aleo的网络共识中。Prover运行特定的算法，通过求解_CoinbasePuzzle_得到满足_ProofTarget_的_ProverSolution_，然后广播，当_ProverSolution_被验证者节点确认并被打包到区块中时，Prover可以获得相应的_CoinbaseReward_奖励。

**Prover的经济激励**

从长期的角度来看，Prover能够获得的_CoinbaseReward_的奖励与它的算力在整个网络中的占比成正比。Prover的经济激励与Bitcoin中的PoW相类似，不同点在于Aleo网络中并不是赢家通吃的策略，_ProverSolution_只要满足_ProofTarget_就可以被网络接受，这样的方式使得Prover获得的奖励更加公平和稳定。值得注意的是，与Validator的_BlockReward_不同，_CoinbaseReward_会随着时间而递减，每年的产出会缩减10%，直到10年后，将不再有_CoinbaseReward_奖励。

用户可以通过[浏览器](https://testnet3.aleoscan.io/)来查看CoinbaseReward、BlockReward、以及PuzzleReward。

> PuzzleReward = CoinbaseReward \* 2 / 3
> 
> BlockReward = 23.8 + CoinbaseReward \* 1 / 3
> 
> 其中：
> 
> BlockReward的奖励由Validator根据质押占比进行分配
> 
> PuzzleReward的奖励由Prover提交的Solution的ProofTarget的占比进行分配

**CoinbasePuzzle**

Aleo网络中每360个区块组成一个Epoch，当新的Epoch产生时，CoinbasePuzzle也会发生相应的变化，如果Prover依然在计算旧的CoinbasePuzzle，则其计算出的ProverSolution不会再被网络接收。这意味着Prover需要监听共识网络的区块变化，当新的Epoch产生时，更新当前的CoinbasePuzzle信息。

除了要求ProverSolution是合法的之外，网络还要求ProverSolution满足大于等于ProofTarget。ProofTarget是用来衡量Prover的工作量的，类似于PoW，ProofTarget越大，Prover所需要进行的计算的工作就越大。Aleo网络会根据当前参与到网络中Prover的算力来调整ProofTarget，当参与到网络中的算力增加时，网络会增大ProofTarget来保证网络中不会出现过多的ProverSolution，防止网络拥堵和大量的ProverSolution没有办法呗打包的情况。

**如何成为Prover节点**

成为Prover节点不需要质押和授权，任何人都可以启动一个Prover节点。

**Aleo 官方链接：**

> *   _Aleo_ [_Twitter_](https://twitter.com/aleohq)
>     
> *   _Aleo_ [_Discord_](https://discord.gg/aleo)
>     
> *   _Aleo_ [_Website_](https://www.aleo.org/)
>     
> *   Aleo [Github](https://github.com/AleoHQ)
>

---

*Originally published on [Yaakov](https://paragraph.com/@yaakov/aleo)*
