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
区别在于您不需要移动灯孔。
我正在开发游戏,猜数字,猜对了可以获得奖励。 这是我的程序的摘要。 首先,用户发送 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
区别在于您不需要移动灯孔。