0

我已经编写了一个基本的 rpc 客户端,它轮询 Solana 帐户的状态以查找特定条件(即写入的唯一 int64 Id)。当条件出现时,我调用一个智能合约,它采用与可变参数相同的帐户。

在做任何事情之前,程序会检查相同的条件。但是,此检查失败。我知道我们正在处理一个分布式系统,并且该状态可能在一段时间内不一致,但我可以反复调用超过 30 秒,并且每次都失败,然后最终成功。

我已经阅读了承诺级别的概念,但总是假设传递给智能合约的帐户状态将是世界的最新状态(即已处理)?我似乎观察到的是它更像是最终状态。

任何人都可以阐明这里可能发生的事情吗?

我将尝试提出一个最小的代码示例来演示这个问题,但只是想先问这个问题,看看是否有人能指出我正确的方向。

谢谢

4

2 回答 2

1

因此,如果您查看链接的文档,processed请注意:

the block may still be skipped by the cluster

如果您只是在寻找帐户状态更改并且不希望某些可能是错误的,那么这是一个非常重要的注意事项。可以跳过插槽或集群拒绝事务的原因有很多。

如果出现上述任何一种情况,那么集群整体接受的账户状态可能不会反映在processed,而是finalized

于 2022-01-13T21:48:52.777 回答
0

最后,当我轮询帐户的逻辑使用“已确认”时,我的具体问题归结为使用“最终”承诺级别的飞行前检查。修改preflightCommitment论点sendTransaction为我解决了这个问题。

于 2022-01-18T20:18:24.100 回答