Solana链上程序如何查看指令?

How to check instruction in Solana on-chain program?

我正在开发游戏,猜数字,猜对了可以获得奖励。 这是我的程序的摘要。 首先,用户发送 sol 的数量和他的猜测数字。 其次,程序获取随机数并将用户的 sol 存储到保险库中。 三、程序生成随机数,如果用户答对了,给予奖励。

这里,如何检查用户在程序中发送的 sol 数量是否正确?

这是调用程序的测试代码

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,例如这个程序:Cross-program invocation with unauthorized signer or writable account

否则,在您的程序中,您可以检查 AccountInfo 传递的 lamports,并确保它是正确的数字,类似于此示例:https://solanacookbook.com/references/programs.html#transferring-lamports

区别在于您不需要移动灯孔。