非 ERC20 代币流动性证明集成

介绍

用户通常将ERC20凭证代币存入奖励金库来参与流动性证明,以赚取$BGT 。然而,这种方法并不适用于所有协议。

本节将演示如何为无法自动生成质押凭证的ERC20代币,或需要实时跟踪余额的协议集成流动性证明 (PoL) 系统。例如,永续合约交易所可能希望奖励$BGT开仓用户,并在平仓时停止奖励。

通过采用本节方案,上述协议仍可参与PoL系统,同等享有PoL提供的高效率激励。

triangle-exclamation

方案描述

方案涉及创建一个虚拟的StakingToken,虚拟代币由协议代表用户质押在PoL金库中。虚拟代币用于跟踪用户的质押余额,在用户供应或提取流动性时,由协议铸造或销毁 (通过ProtocolContract实现)。

用户质押虚拟代币,赚取$BGT,如同在PoL金库中质押了ERC20凭证代币。此方案由奖励金库合约中的delegateStakedelegateWithdraw实现。

先决条件

开始之前,请确保你的本地设备上满足以下条件:

Forge设置

  1. 初始化Forge并安装依赖项:

forge init pol-smart-stake --no-commit --no-git;
cd pol-smart-stake;
forge install OpenZeppelin/openzeppelin-contracts --no-commit --no-git;
  1. 创建remappings.txt文件,用于导入OpenZeppelin:

合约执行

  1. src/StakingToken.sol中部署虚拟代币合约:

该合约创建了一个虚拟的ERC20代币,用于质押在PoL金库中,只有代币所有者ProtocolContract可以铸造和销毁代币。

  1. src/ProtocolContract.sol中部署虚拟协议合约:

该合约是任意协议合约的简单用例:

  • userActivity表示特定于该协议的内部核算和运作逻辑。

  • addActivityremoveActivity余下功能是用于铸造和销毁虚拟代币StakingTokens,并与相关的奖励金库交互,以体现用户的质押/解除质押操作。

  1. src/interfaces/IRewardVaults.sol中添加PoL接口:

这些接口定义了从Factory合约中启动新的奖励金库,以及与之交互的方法。

测试集成

现在,对所有部署进行整体测试,以确保上述集成操作符合预期。以下是ProtocolContract的测试套件示例。

请检查每项测试,以便更加了解如何应对并成功处理各种情况。

运行测试

最后,运行测试程序,以检查上述集成是否按预期工作:

最后更新于