Anchor 中的“无效帐户鉴别符”是什么意思?

Eva*_*rad 8 solana anchor-solana

我正在尝试从公钥获取帐户:

await program.account.myAccountType.fetch(somePubkey);
Run Code Online (Sandbox Code Playgroud)

但随后 Anchor 抛出一个错误:

Invalid account discriminator
Run Code Online (Sandbox Code Playgroud)

什么是账户鉴别器?

Eva*_*rad 11

帐户鉴别符是 Anchor 放置在帐户前面的几个字节,就像标头一样。它让锚知道应该将数据反序列化为什么类型的帐户。

如果您尝试获取某些内容myAccountType,但它实际上是其他帐户(例如令牌帐户或程序中的其他帐户)的公钥,则会发生此错误。

您可以尝试以下一些操作:

  • 控制台日志记录somePubkey并将其放入资源管理器中
  • 加倍确认你的意思program.account.myAccountType是不是program.account.someOtherAccountType