#group #contracts #points #poe #hook #mixer #tg4

tg4-mixer

TG4实现,结合两个不同的组并使用合并函数

26个版本 (12个破坏性)

0.17.1 2023年1月26日
0.16.0 2022年12月16日
0.15.1 2022年9月22日
0.13.0 2022年7月26日
0.8.1 2022年3月29日

#7 in #poe

Apache-2.0

135KB
2.5K SLoC

TG4混合器

此混合器混合两个tg4合约。在初始化时,您需要传递两个tg4合约的地址,并且这个混合器将在两个合约上注册一个监听钩子。之后,它将查询两个合约的当前状态,并使用混合函数来计算组合值。(我们目前根据假设实现/优化了它,即上游组中的任何None点表示此组中的任何None点)

每当上游合约之一发生变化时,它将再次使用混合函数来重新计算受影响地址的组合点。

除了tg4之外,上游合约还需要实现slash API。

初始化

要创建它,您必须传递要监听的两个组。我们必须在它们两个上预先授权作为钩子监听器进行自我注册。

pub struct InitMsg {
    pub left_group: String,
    pub right_group: String,
}

混合函数

如上所述,我们优化了在任一合约上None导致组合组中None的情况。这主要用于初始化。

实现了多种混合函数

  • GeometricMean。一个简单的leftright的几何平均。
  • Sigmoid。类似于PoE白皮书中讨论的sigmoid函数。
  • SigmoidSqrt。上述方法的变体,其中p = 0.5,并使用GeometricSigmoid实现。
  • AlgebraicSigmoid。一个基于Sigmoid的代数sigmoid模型。

更新

基本消息、查询和钩子由tg4规范定义。请参阅它以获取更多信息。

我们添加了ExecuteMsg::MemberChangedHook来监听上游合约的变化。

基准测试

cd contracts/tg4-mixer
cargo bench --features benches

依赖关系

~4.5–6.5MB
~137K SLoC