如何创建质押智能合约?

How to create a staking smart contract?

我是智能合约的新手,但想在 Solana 中创建一个简单的股权合约。 但是不明白我什么时候需要更新每个用户的奖励计数器?因为合约与写入帐户交互,只有当用户为此付费时。但在所有质押协议中,我们都可以看到质押后的奖励计数。这怎么行? 以及如何一次更改 APY?

我只发明了一种方法——在链下程序中保存计数器,但我认为这种方法不对

很多这更多的是设计,但有一些建议:

But can't understand when I need to update a reward counter per user?

您不一定需要一直更新。事实上,许多质押协议会跟踪用户上次支付奖励的时间,但在用户尝试退出之前不会实际更改值。对于前端,你只需要根据用户的位置进行动态计算。

您可以通过查看协议的源代码找到更多有趣的信息。例如,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 repo(https://github.com/orgs/orca-so)。 Orca 是 solana 上成功的 AMM 交易所之一,您可以在那里获得所有必要的代码片段。