使用 Anchor 时系统程序账号需要传入啥?
Posted
技术标签:
【中文标题】使用 Anchor 时系统程序账号需要传入啥?【英文标题】:What to pass in for system program account when using Anchor?使用 Anchor 时系统程序账号需要传入什么? 【发布时间】:2022-01-05 21:56:50 【问题描述】:我在 Solana 中使用 Anchor 框架。
我在 Rust 中有以下一组帐户:
但我正试图弄清楚如何在 javascript 中传递这些帐户。
我有以下测试代码:
const admin = anchor.web3.Keypair.generate();
const [gameAccount, bump] = await anchor.web3.PublicKey.findProgramAddress(
[],
program.programId
);
const tx = await program.rpc.createGameState(bump,
accounts:
gameAccount: gameAccount,
user: admin,
systemProgram: anchor.web3.SystemProgram.programId,
,
);
但是,Anchor 抱怨:
TypeError: x.pubkey.equals is not a function
at findIndex (node_modules/@solana/web3.js/src/transaction.ts:285:23)
at Array.findIndex (<anonymous>)
at Transaction.compileMessage (node_modules/@solana/web3.js/src/transaction.ts:284:39)
at Transaction._compile (node_modules/@solana/web3.js/src/transaction.ts:376:26)
at Transaction.partialSign (node_modules/@solana/web3.js/src/transaction.ts:501:26)
at NodeWallet.signTransaction (node_modules/@project-serum/anchor/src/provider.ts:246:8)
at Provider.send (node_modules/@project-serum/anchor/src/provider.ts:105:23)
at processTicksAndRejections (node:internal/process/task_queues:94:5)
at Object.rpc [as createGameState] (node_modules/@project-serum/anchor/src/program/namespace/rpc.ts:24:23)
我很确定这正在发生 b/c 我在 anchor.web3.SystemProgram.programId
中传递 systemProgram
,而它需要 anchor.Address
。有人有解决办法吗?
【问题讨论】:
【参考方案1】:这可能来自admin
参数。我不是锚方面的专家,但似乎将PublicKey
s 和Keypair
s 传递到同一个函数中存在问题。你可以试试通过吗:
const tx = await program.rpc.createGameState(bump,
accounts:
gameAccount: gameAccount,
user: admin.publicKey,
systemProgram: anchor.web3.SystemProgram.programId,
,
);
您还必须从管理员那里获得签名,不幸的是我不确定这是如何通过的。
【讨论】:
以上是关于使用 Anchor 时系统程序账号需要传入啥?的主要内容,如果未能解决你的问题,请参考以下文章
Linux中root账号和普通账号有啥区别,root账号为啥不能删除?