> For the complete documentation index, see [llms.txt](https://ch-docs.aftermath.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ch-docs.aftermath.finance/liu-dong-xing-zhi-ya-afsui/architecture/packages-and-modules.md).

# 包与模块

## AftermathLSD 包

<figure><img src="https://1936811439-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdKvTsNMHcoUbfcyfXgsE%2Fuploads%2Fgit-blob-0b5b6b38f634c85bc9200541758c819796bac22d%2FScreenshot%202024-02-22%20at%2011.54.14%20AM.png?alt=media" alt=""><figcaption><p>AftermathLSD 包结构图</p></figcaption></figure>

包的功能分布在多个模块中。关键模块如下：

## staked\_sui\_vault 模块

该模块本质上是与协议交互的接口，为协议用户提供主要入口点。可使用以下功能：

1. 请求质押：用户向协议提供 SUI 代币，并按当前 Epoch（纪元）的 SUI <-> AFSUI 汇率立即收到相应数量的 AFSUI。
2. 请求解除质押：用户提供 AFSUI，换回相应数量的 SUI。有两种方式：常规解除质押，用户在下一个 Epoch 开始时收到 SUI；原子解除质押，用户立即收到 SUI。此外还可以对 StakedSui 对象进行再质押。
3. Epoch 切换处理：Sui 质押框架的工作流与 Epoch 切换处理紧密耦合。在每两个 Epoch 之间，Sui 框架会执行若干操作，其中最重要的是收集奖励和激活质押。为了在协议中同步这些变化，需要触发一个 crank 函数。受 Sui 框架限制，该函数很可能需要触发多次。在 Epoch 切换处理完成之前，协议处于未定义状态，暂停运作。触发 crank 函数的一方会获得激励费用。为使 Epoch 切换处理顺畅，Aftermath 运行了一个机器人，监控 Sui 链上状态并及时发起 Epoch 处理。
4. 更新验证者费用：若协议已登记某验证者，该验证者会收到一个 Operation Capability 对象，可用于修改对应验证者的费用。验证者费用从每笔铸造的 AFSUI 中扣取，并直接发送到验证者地址。

<figure><img src="https://1936811439-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FdKvTsNMHcoUbfcyfXgsE%2Fuploads%2Fgit-blob-0c6ad3bdb6ac626ea8ecb66b78025fcc7b4a6442%2FScreenshot%202024-02-22%20at%2011.55.57%20AM.png?alt=media" alt=""><figcaption><p>Aftermath LSD 协议 stake_sui_vault 模块结构图</p></figcaption></figure>

## actions 模块

该模块实现协议的业务逻辑，即前文 staked\_sui\_vault 模块描述中讨论的内容。

## staked\_sui\_vault\_state 模块

该模块提供 staked sui vault 的具体实现，拥有铸造和销毁 AFSUI 的权限，同时负责协议配置。其主要职责是保管全部 StakedSui 对象和 SUI 余额。StakedSui 通过一个 Storage 实体来组织。

## storage 模块

Storage 是一层抽象，用于保管 StakedSui 对象并实现解除质押逻辑。解除质押是 LSD 协议的关键环节，某种意义上决定了协议的表现。为此，Storage 维护一个按验证者表现升序排列的解除质押队列，来自非活跃和低表现验证者的质押会被优先解除。为避免瞬间抽空单个验证者，每笔解除质押会分摊到多个验证者上。

## validator 模块

该模块实现 Operation Capability 对象的逻辑。持有该对象即可修改对应验证者的费用值。

Aftermath LSD 协议还使用了以下附加包。

## Safe 包

该包提供一个名为 Safe 的模块。该实体可存放任意类型的对象，并向被授权的模块提供该对象的可变引用；同一时间只能授权一个模块。LSD 协议用它来存放 AFSUI Treasury，并向 staked sui vault state 模块提供授权访问。

## ReferralVault 包

Aftermath LSD 协议的用户可以使用推荐系统。该模块提供管理推荐人与被推荐人关系以及收取分成的逻辑。

## Treasury 包

协议会收取多种费用。Treasury 实体用于归集费用中的特定部分，供日后不同用途使用。

## Utilities 包

Aftermath 的高性能数学原语与函数集合。

## LinkedSet 包

LinkedSet 基于 Sui 框架的 LinkedTable 实现，用于实现解除质押队列。

## SuiSytemUtils 包

与 Sui System 交互的方法集合。
