我正在开发一款游戏,它可以猜测数字,如果成功,就会获得奖励。这是我的课程总结。首先,用户发送sol的数量和他的猜测数字。第二,程序获取随机数并将用户的sol存储到vault中。第三,程序做随机数,如果用户是对的,给他奖励。
在这里,我如何检查用户在程序中发送的溶胶量是否正确?
这是用于调用程序的测试代码。
const result = await program.rpc.play(
new anchor.BN(40),
new anchor.BN(0),
new anchor.BN(20000000),
_nonce, {
accounts: {
vault: vaultPDA,
user: provider.wallet.publicKey, // User wallet
storage: storageAccount.publicKey,
systemProgram: systemProgram
},
instructions: [
SystemProgram.transfer({
fromPubkey: provider.wallet.publicKey,
toPubkey: vaultPDA,`enter code here`
lamports: 20000000`enter code here`
})
],
signers: [storageAccount]`enter code here`
}
)
最好的解决方案是使用跨程序调用直接在程序内部传输lamports,如以下程序:使用未经授权的签名者或可写帐户进行跨程序调用
否则,在程序中,您可以检查通过的AccountInfo
上的lamports
,并确保它是正确的数字,类似于此示例:https://solanacookbook.com/references/programs.html#transferring-lamports
不同的是,你不需要移动灯柱。