TokenHolder合约

TokenHolder合约用于创建这么一类分红方案:抵押代币即获得分红权重,从而能够领取分红。

TokenHolder合约只是对Profit合约arrow-up-right的一个应用,套了个壳子,几乎所有的接口都间接调用Profit合约,TokenHolder合约里只存储一些自己关心的数据。

创建分红方案 - CreateScheme

需要三个参数:

  1. symbol:这个分红方案要求抵押什么代币;

  2. minimum_lock_minutes:抵押代币的时候,需要锁仓多久;

  3. auto_distribute_threshold:一种自动释放分红的机制,当分红池中的Token攒到了多少,就可以自动释放了。

在TokenHolder中会插入一条TokenHolderProfitScheme信息,以Sender为key。

message TokenHolderProfitScheme {
    // The token symbol.
    string symbol = 1;
    // The scheme id.
    aelf.Hash scheme_id = 2;
    // The current dividend period.
    int64 period = 3;
    // Minimum lock time for holding token.
    int64 minimum_lock_minutes = 4;
    // Threshold setting for releasing dividends.
    map<string, int64> auto_distribute_threshold = 5;
}

在初始化的时候,scheme_id还未空,因为不知道调用Profir合约的CreateScheme创建的分红方案的Id是什么。

这个字段在未来针对该分红方案做任何操作的时候,才会赋值上。其实可以改成调用Profit合约的CreateScheme方法的时候传一个Token进去,预测即将生成的scheme_id是什么。

其他与Profit合约同名的接口的实现,只是对Profit合约的一些封装。Profit合约对TokenHolder合约开了一个口子,Manager能够通过TokenHolder合约操作Profit合约中保存的分红方案。

往分红方案抵押代币 - RegisterForProfits

会把用户的代币通过MultiToken合约的Lock方法锁定到MultiToken合约中(这意味着TokenHolder合约需要在对应代币的Lock White List里),记录一下锁定时间,随后调用Profit合约的AddBeneficiary方法为抵押代币的用户添加分红详情。

其实上述操作就完成用户往分红方案抵押代币的处理了。在这个方法的末尾,判断一下scheme.AutoDistributeThreshold是否为true,如果是的话,检查一下这个分红方案是否该释放了,最终可能会协助释放分红。

Last updated