当 LOVE20 默认的行动激励方式无法满足行动需求时,可以开发并部署扩展协议,由扩展协议决定行动新的参与方式、验证方式与分配方式,以提升行动激励的公平与效率,并为行动增加新的玩法。
LOVE20 发起行动时,可以对行动设置白名单地址(不设置表示不限制参与地址),只有白名单地址才可以参与行动并获取激励。
扩展协议的工作原理,是将扩展协议的合约地址设置到行动的白名单地址中,让该扩展协议合约参与行动并拿到全部的行动激励,再根据扩展协议合约内部的规则进行激励的二次分配。
ExtensionCenter 是扩展协议系统的用户管理合约,负责维护扩展协议与行动的关联关系,统一管理用户参与列表,并提供跨扩展协议的统一查询接口。所有扩展协议在初始化时都需要通过 ExtensionCenter 的 registerActionIfNeeded 注册行动,并在用户加入/退出时通过 ExtensionCenter 维护用户列表。
前端可以通过 ExtensionCenter 方便查询特定用户参与的所有扩展协议类行动列表。
基于 IExtension 开发具体扩展协议,基于 ILOVE20ExtensionFactory 开发扩展协议工厂合约。扩展协议合约建议至少具备一种“加入/退出”机制(面向用户的参与入口),可选择的相关基类如下:
- 无需代币:ExtensionBaseRewardJoin
- 需要代币:ExtensionBaseRewardTokenJoin
- 自定义(自己实现加入退出机制):ExtensionBaseReward
自己实现时,需注意在行动阶段第一时间调用 initializeIfNeeded,确保扩展协议正常初始化;并在实现加入/退出时,先完成 ExtensionCenter 的 registerActionIfNeeded 调用,以便能够通过 ExtensionCenter 维护行动的用户列表。
前端可以以工厂合约为基准,来支持各种不同类型的扩展协议。
前端维护可信扩展协议工厂合约列表,用于识别和处理不同的扩展协议行动。
使用工厂合约创建具体行动所使用的扩展协议合约。
注意此时需转 1 个代币给扩展协议合约,用于后续 initializeIfNeeded 时作为合约参与行动的代币,以完成扩展协议合约与行动的关联。