# 质押

## 概念

{% hint style="info" %}
💡 我们强烈建议您在下一步动作前先行阅读[交易生命周期](https://gushi10546.gitbook.io/aptos-kai-fa-zhe-wen-dang/guides-zhi-nan/jiao-yi-de-sheng-ming-zhou-qi)的共识部分。
{% endhint %}

在像区块链这样的分布式系统中，执行交易不同于更新分布式账本的状态和将结果保存在存储中。在结果保存在存储中并更新分布式账本状态之前，必须由一定数量的验证者就交易的顺序及其执行结果达成一致，即共识。

验证者可以参与共识过程。然而，验证者只有在他们将可用代币进行托管，即质押时才能获得投票权。为了鼓励验证者参与共识过程，每个验证者的投票权重与验证者的质押数量成正比。作为交换，验证者将根据验证者的质押数量获得奖励。因此，网络的性能（即共识）与验证者的利息（即奖励）是一致的。

然而，当验证者质押了很大数额的可用代币，同时也赋予验证者很大的投票权重甚至可以控制共识结果。验证者权利过大会威胁区块链网络的安全，例如，授权一个欺诈交易。在 Aptos 区块链中，为防止任何单个验证者变成流氓验证者，对可质押的代币数额设置了上限。此外，质押缓解了此类安全攻击，因为欺诈的验证者必须愿意放弃奖励甚至资产估值才能攻击网络。

通过这种方式，在 Aptos 区块链中质押形成的共识同时可以保护区块链网络。

本文档的其余部分介绍了在 Aptos 区块链上质押的具体方式。

## 在 Aptos 区块链上进行质押

{% hint style="info" %}
💡 在 AIT-3 中质押与治理 有关质押和投票的分步介绍，请参阅 [AIT-3](https://gushi10546.gitbook.io/aptos-kai-fa-zhe-wen-dang/jie-dian/ait-3) 中的步骤。
{% endhint %}

### 托管人如何在 Aptos 上质押

Aptos 质押模块定义了所有权的含义。

请阅读 <https://github.com/aptos-labs/aptos-core/blob/0daade4f734d1ba29a896b00d7ddde2249e87970/aptos-move/framework/aptos-framework/sources/configs/stake.move#L85>.

此 `OwnerCapability` 资源可用于控制质押池。支持三种角色：所有者、操作者和投票者。在所有者-运营者-投票者模型中，托管人以所有者身份在 Aptos 区块链上进行质押，并参与 Aptos 治理。该模型允许建立委托和质押服务，因为所有者可以向验证者和投票者提供资金。

本节描述了它是如何工作的，在示例中使用 Bob 和 Alice。

### 所有者

所有者是资金的所有者。例如，Bob 在 Aptos 区块链上创建了一个帐户。现在 Bob 拥有了`OwnerCapability` 资源。 Bob 可以将其账户的运营者地址分配给受信任节点运营者 Alice 的账户，以指定 Alice 为验证人。

作为所有者：

* Bob 拥有将用于质押的资金。
* 只有 Bob 可以添加或解锁或提取资金。
* 只有 Bob 可以延长锁定期。
* Bob 可以随时将节点操作员 Alice 更改为其他节点操作员。
* 奖励将存入 Bob（所有者）的账户。

### 运营者

资金所有者指派一个节点运营者来运行验证者节点。所有者和运营商这两个角色可以是两个独立的实体，也可以是相同的。例如，Alice（操作员）运行验证器节点，按照基金所有者 Bob 的要求运行。

作为运营者：

* Alice 只有加入或离开验证者集的权限。
* 作为验证者，Alice 将执行验证功能。
* Alice 有权更改共识密钥和网络地址。 Alice 使用共识密钥参与验证者共识过程，即投票和提议一个区块。允许 Alice 更改（“轮换”）这个密钥，以防这个密钥被泄露。
* 但是，Alice 不能转移资金（除非 Alice 是所有者，即 Alice 拥有`OwnerCapability`资源。

### 投票者

所有者可以指定选民。这使选民能够参与治理。投票者将使用投票者密钥签署交易中的治理投票。

{% hint style="info" %}
💡 治理 本文档描述了质押。请参阅[治理](https://gushi10546.gitbook.io/aptos-kai-fa-zhe-wen-dang/gai-nian/zhi-li)，了解如何使用所有者-投票者模型参与 Aptos 链上治理。
{% endhint %}

## Aptos 区块链上的验证过程

以下是验证如何在 Aptos 区块链上工作的高级描述：

* 在一个纪元的持续时间内，以下事件流会发生数次（数千次）：
  * 验证者领导者是根据验证者的表现（包括验证者过去是否投票）生成的验证者声誉，通过确定性公式选择的。 **此领导者选择不是通过投票完成的。**
  * 选定的领导者发送一个提案，其中包含前一个提案的有效投票人数以及领导者为新区块提出的交易顺序。
  * 验证人集中的所有验证者将对领导者对新区块的提议进行投票。一旦达到法定人数共识，就可以最终确定区块。因此，实现法定人数共识的实际投票列表是验证者集中所有验证者的子集。这个领导验证者会得到奖励。 **奖励仅提供给领导验证者，而不是投票者。**
  * 重复上述流程，选择另一个验证者领导者并为下一个新块重复这些步骤。奖励在时代结束时给予。

##

## 加入验证者集合

作为验证者节点参与 Aptos 网络的工作方式如下：

1. 运行验证者节点并配置适当的链上设置。
2. 将您的 Aptos 代币资金存入质押或由质押服务分配资金。质押必须至少是所需的最低金额。
3. 验证并获得奖励。
4. 您的质押将自动锁定一段固定期限（由 Aptos 治理设置），并在到期时自动更新。在锁定期到期之前，您不能提取任何质押金额。请参阅 \[<https://github.com/aptos-labs/aptos-core/blob/00a234cc233b01f1a7e1680f81b72214a7af91a9/aptos-move/framework/aptos-framework/sources/stake.move#L728>]\(<https://github.com/aptos> -labs/aptos-core/blob/00a234cc233b01f1a7e1680f81b72214a7af91a9/aptos-move/framework/aptos-framework/sources/stake.move#L728）。

💡 加入验证者集合 有关如何加入验证者集合的分步说明，请参阅：\[加入验证者集合]\(<https://aptos.dev/nodes/ait/connect-to-testnet#joining-validator-set)。>

### 最小和最大质押金额

您必须质押所需的最低金额才能加入验证者集合。此外，您能够质押的上限是最高质押金额。

如果在加入验证者集合后的任何时间，您当前的质押量超过了允许的最大质押量（例如，当奖励添加到您的质押量时），那么您的投票权和奖励将仅使用最大允许的质押量计算，而不是您当前的质押金额。

所有者可以撤回部分质押并将其余额保持在所需的最低限度以下。在这种情况下，他们的质押池将在下一个时代开始时从验证者集合中移除。

### 自动锁定持续时间

当您加入验证者集合时，您的质押将自动锁定一段由 Aptos 治理设置的固定期限。

### 自动锁定更新

当您的锁定期到期时，将自动更新，以便您继续验证并获得奖励。

### 解锁您的质押

您可以随时请求解锁您的质押。但是，只有当您当前的锁定期满时，您的质押才会被撤回。这最多可以与固定锁定持续时间一样长。

### 重置锁定

当锁定期到期时，由网络自动更新。但是，所有者可以显式重置锁定。

💡 由治理制定 锁定期限由 Aptos 治理决定，即由 Aptos 社区成员投票决定，而不是由 Aptos Labs 等任何特殊实体决定。

## 时代

Aptos 区块链中的一个时代被定义为一段时间（以秒为单位），在此期间，验证者对多个区块进行投票，更新验证者集合，并将奖励分配给验证者。

💡 对于 AIT-3，Aptos 区块链上的一个时代被定义为 7200 秒（两小时）。

### 时代开始时的触发器

💡 请参阅 \[<https://github.com/aptos-labs/aptos-core/blob/0daade4f734d1ba29a896b00d7ddde2249e87970/aptos-move/framework/aptos-framework/sources/configs/stake.move#L862]\\(https://github.com/aptos-labs/aptos-core/blob/0daade4f734d1ba29a896b00d7ddde2249e87970/aptos-move/framework/aptos-framework/sources/configs/stake.move#L862)> 查看完整代码。

在每个时代开始时，会触发以下关键事件：

* 将加载中的活跃的验证者添加到活跃的验证者集合中，并将其中的不活跃验证者删除来更新验证者集合。
* 将任何加载中的活跃质押移动到活跃质押中，并将任何加载中的非活跃质押移动到非活跃质押中。
* 质押池在这个新时代的投票权由总活跃质押确定。
* 自动为下一个时代中仍处于验证者集合中的验证者更新验证者锁定。
* 验证者集合中每个验证者的投票权更新为对应的权益池的投票权。
* 奖励分配给参与前一时代的验证者。

## Rewards

## 奖励

质押的奖励通过以下方式计算：

1. `rewards_rate`，年收益率（APY），作为您当前质押金额的复利增加的奖励。
2. 您的质押金额，以及
3. 您在 Aptos 治理中的提议表现。

💡 由治理制定 奖励率由 Aptos 治理设置。

另请参阅 [Aptos 区块链上的验证](https://aptos.dev/concepts/staking#validation-on-the-aptos-blockchain)。

### 奖励公式

请参阅下面用于计算验证者奖励的公式：

```
Reward = staked_amount * rewards_rate per epoch * (Number of successful proposals by the validator / Total number of proposals made by the validator)
```

### 每个时代支付的奖励

每个时代都会支付奖励。您（即验证者）在当前时代结束时获得的任何奖励都会添加到您的质押金额中。下一个时代结束时的奖励是根据您增加的质押量（即原始质押量加上增加的奖励）计算，依此类推。

### 基于提议表现的奖励

验证者奖励计算使用验证者的提议性能。一旦您进入验证者集合，你就可以在每个时代中提出建议。您提议的越成功，即您的提议通过，您将获得的奖励越多。

💡 所有验证者奖励也受锁定期的约束，因为它们被添加到原始质押金额中。

## 离开验证者集合

💡 在此处以 Move 语言查看 Aptos Stake 模块：\[<https://github.com/aptos-labs/aptos-core/blob/00a234cc233b01f1a7e1680f81b72214a7af91a9/aptos-move/framework/aptos-framework/sources/stake.move]\\(https://github.com/aptos-labs/aptos-core/blob/00a234cc233b01f1a7e1680f81b72214a7af91a9/aptos-move/framework/aptos-framework/sources/stake.move)>

* 您可以随时调用以下函数序列来保留验证者集合：
  * 调用 `Stake::unlock`以解锁您的质押金额，以及
  * 要么调用 `Stake::withdraw` 以在下一个时期提取您的质押量，要么调用 `Stake::leave_validator_set`。

💡 离开验证者集合 有关如何离开验证器集的分步说明，请参阅：\[离开验证者集合]\(<https://aptos.dev/nodes/ait/connect-to-testnet#leaving-validator-set)。>

## 重新加入验证器者集合

当您离开验证者集合时，您可以通过存入所需的最低质押金额重新加入。
