我用锚创建了一个简单的计数器智能合约。我遵循了这个答案中概述的所有步骤:https://stackoverflow.com/a/73862346/1192872
当我将代码部署到 solana devnet 时,部署陷入循环:
如果有帮助,这是我的代码
use anchor_lang::prelude::*;
declare_id!("2QmXMXyMAmZCE92Uqm2YhKgpqH3Teo6vZDNg7CRHYCK7");
#[program]
pub mod counter_program {
use super::*;
pub fn create(ctx: Context<Create>) -> Result<()> {
ctx.accounts.counter.authority = ctx.accounts.authority.key();
ctx.accounts.counter.count = 0;
Ok(())
}
pub fn increment(ctx: Context<Increment>) -> Result<()> {
ctx.accounts.counter.count += 1;
Ok(())
}
pub fn decrement(ctx: Context<Increment>) -> Result<()> {
ctx.accounts.counter.count -= 1;
Ok(())
}
}
#[derive(Accounts)]
pub struct Increment<'info> {
#[account(mut, has_one = authority)]
pub counter: Account<'info, Counter>,
pub authority: Signer<'info>,
}
#[derive(Accounts)]
pub struct Create<'info> {
#[account(init, payer = authority, space = 8 + 40)]
pub counter: Account<'info, Counter>,
#[account(mut)]
pub authority: Signer<'info>,
pub system_program: Program<'info, System>
}
#[account]
pub struct Counter {
pub authority: Pubkey,
pub count: u64,
}
这可能是由于旧版本的 Solana CLI。我能够使用版本 1.10.40 重现此内容。
Devnet 刚刚升级到 1.14,因此您需要将 CLI 至少更新到 1.13,但我建议 1.14:
$ solana-install init 1.14.17