主播solana错误 签名验证失败

问题描述 投票:0回答:1

我是一个新手,玩了一下,但不知道如何解决这个错误。 我的计数器程序在操场上正常工作,我可以从我的应用程序中调用增加和减少函数,但由于某种原因无法初始化。

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,
}

initialization anchor signature account
1个回答
0
投票

请使用种子来初始化 PDA 这比初始化一些随机公钥更好

https://book.anchor-lang.com/anchor_in_depth/PDAs.html

© www.soinside.com 2019 - 2024. All rights reserved.