我是智能合约的新手,但想在索拉纳创建一个简单的股权合约。但我不明白什么时候我需要更新每个用户的奖励计数器?因为只有当用户为此付费时,合同才会与写入帐户交互。但在所有的下注协议中,我们可以看到下注后的奖励计数。这是怎么回事?我如何在一段时间内改变APY?
我只发明了一种方法——在链下程序中保存计数器,但认为这不是的正确方法
这在很大程度上取决于设计,但也有一些建议:
但无法理解何时需要更新每个用户的奖励计数器?
您不一定需要一直更新。事实上,许多赌注协议都会记录用户最后一次支付奖励的时间,但在用户尝试退出之前,不会实际改变价值。对于前端,您只需要根据用户的位置进行动态计算。
通过查看协议的源代码,您可能会发现更多有趣的信息。例如,Orca的合同基于SPL的代币交换:https://github.com/solana-labs/solana-program-library/tree/master/token-swap
否则,在https://github.com/solana-labs/solana-program-library/tree/master/farms
智能合约没有这样的计时器,因此无法自动更新状态。换句话说,应该通过手动触发功能来更新奖励状态。在质押合同中,用户可以通过使用自己的私钥签名来调用更新或领取奖励的函数。最好的例子是orca.so github回购(https://github.com/orgs/orca-so)。Orca是solana上成功的AMM交换之一,您可以在那里获得所有必要的代码片段。