> 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/nong-chang/architecture/stake-position.md).

# 质押仓位

## Staked position 包

该包提供操作质押仓位的接口。主要入口是 StakedPosition 结构体。

## 开立仓位

用户可使用 stake 函数开立仓位。开立时需以毫秒为单位指定锁定期限，且锁定期限必须在 Afterburner 金库配置所设的范围之内。

锁定的仓位将按所配置的 Afterburner 金库乘数获得额外奖励。

## 收取奖励

奖励收取分三个阶段：

* 用户先调用 begin\_harvest\<STAKE> 函数；
* 针对每种奖励，用户调用 harvest\_rewards\<STAKE, REWARD> 函数，以获取按类型 \`Coin\<REWARD>\` 累计的奖励；
* 最后调用 end\_harvest 函数完成流程，该函数会发出相应事件。

Strict 实现下，用户可随时领取奖励。

Relaxed 实现下，用户只有在仓位解锁后才能领取奖励。

## 追加质押

用户可随时使用 deposit\_principal 函数增加仓位的质押数量。为锁定中的仓位追加质押后，锁定期会重新计算。

## 提取质押

用户可使用 withdraw\_principal\<STAKE> 函数提取质押本金。仓位必须处于解锁状态才能提取。

质押在 Strict Afterburner 金库中的仓位，无法在锁定期结束前解锁。

## 延长仓位锁定

用户可使用 renew\_lock 函数延长锁定期。

## 合并仓位

用户可使用 join 函数将两个仓位合并。合并后的仓位取两者中较晚的锁定开始时间和较长的锁定期限。

## 拆分仓位

用户可使用 split 函数将一个仓位一分为二。累计奖励按拆分数量占质押总量的比例在两个仓位之间分配。其余参数与原仓位保持一致。

## 关闭仓位

用户可使用 destroy 函数删除不再活跃的仓位。被销毁的仓位不得残留任何本金或奖励。
