我是一个新手,玩了一下,但不知道如何解决这个错误。 我的计数器程序在操场上正常工作,我可以从我的应用程序中调用增加和减少函数,但由于某种原因无法初始化。
const callProgram = useCallback(async () => {
if (!publicKey) throw new WalletNotConnectedError();
if (!wallet) throw new WalletNotConnectedError();
const program = await getProgram(connection, wallet)
const counterKey = Keypair.generate().publicKey
const init = await program.methods
.initalize()
.accounts({
set: counterKey,
user: publicKey,
systemProgram: anchor.web3.SystemProgram.programId,
})
.rpc()
.catch((err) => {
console.log('err', err)
})
console.log('initalizeAcc called', { init })
//works
const increase = await program.methods
.increaseCounter(new BN(2, undefined, "le"))
.accounts({
set: new PublicKey('6uzQe1NzrZ7NmeM9qz5pkYD8ViKeobmdM5VAPaV6pBHB'),
})
.rpc()
console.log('increaseCounter called', { increase })
const decrease = await program.methods
.decreaseCounter(new BN(6, undefined, "le"))
.accounts({
set: new PublicKey('6uzQe1NzrZ7NmeM9qz5pkYD8ViKeobmdM5VAPaV6pBHB'),
})
.rpc()
console.log('decreaseCounter called', { decrease })
}, [publicKey, sendTransaction, connection])
初始化调用总是失败并出现签名验证错误。
我的程序看起来像这样
// Import anchor
use anchor_lang::prelude::*;
declare_id!("53fUjUVA7GCU2r279UD43NjCXRaR2dnocwwDZQKvAf1w");
#[account]
pub struct Counter {
count: u8,
}
#[derive(Accounts)]
pub struct Initalize<'info> {
#[account(init, payer = user, space = 8 + 1)]
pub set: Account<'info, Counter>,
#[account(mut)]
pub user: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[derive(Accounts)]
pub struct UpdateCounter<'info> {
#[account(mut)]
pub set: Account<'info, Counter>,
}
#[program]
mod my_counter {
use super::*;
pub fn initalize(ctx: Context<Initalize>) -> Result<()> {
ctx.accounts.set.count = 0;
msg!("Initalize account");
Ok(())
}
pub fn decrease_counter(ctx: Context<UpdateCounter>, number: u8) -> Result<()> {
ctx.accounts.set.count -= number;
msg!("Decrease counter");
Ok(())
}
pub fn increase_counter(ctx: Context<UpdateCounter>, number: u8) -> Result<()> {
if number >= 5 {
return err!(MyError::MaxStepSize);
}
ctx.accounts.set.count += number;
msg!("Increased counter");
Ok(())
}
}
#[error_code]
pub enum MyError {
#[msg("Only positive numbers supported")]
DataInputInvalid,
#[msg("Max step size is 5")]
MaxStepSize,
}
请使用种子来初始化 PDA 这比初始化一些随机公钥更好