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
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
。一个简单的left
和right
的几何平均。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