如何使用solnet获取pda数据



我正在尝试将一些使用solana/a锚点api的js代码转换为microsoft.net,并计划使用solnet.net库。

但我不知道如何获取pda的数据/状态,在js中,对它的调用看起来像-program.account.projectParameter.fetch(projectPDA(

下面的一些示例代码让你知道我正在尝试做什么。

进口React{useState,使用效果}从";反应";;进口{程序AnchorProvider,web3}从"@项目血清/锚

const getProvider=((=>{const provider=新的AnchorProvider(联系window.solana,opts.reflight承诺);退货供应商;};

const getVoters=async(projectId(=>{const program=新程序(project,projectProgramID,provider(;

const [projectPDA, projectBump] =
await anchor.web3.PublicKey.findProgramAddress(
[
Buffer.from("project"),
Buffer.from(projectId.substring(0, 18)),
Buffer.from(projectId.substring(18, 36)),
],
program.programId
);
const state = await program.account.projectParameter.fetch(projectPDA);
let x = state.signatories;
let y = x.map((val, index) => {
console.log(val.key);
return {
key: val.key.toBase58(),
text: val.key.toBase58(),
value: val.key.toBase58(),
};
});
setSigs(y);
console.log(state.transferAmount.reciever.toBase58());

由于Solnet不支持Anchor,因此需要更多的跑腿工作来反序列化数据。您可以看到如何从令牌程序创建反序列化程序的示例:https://github.com/bmresearch/Solnet/blob/master/src/Solnet.Programs/Models/TokenProgram/TokenAccount.cs

一旦你有了它,一般的过程就会进行:

var accountInfo = rpcClient.GetAccountInfo(projectPDA);
var obj = MyProgramAccount.Deserialize(Convert.FromBase64String(accountInfo.Result.Value.Data[0]));

相关内容

  • 没有找到相关文章

最新更新