solana项目counter,测试过程中执行报错记录分享
跟随HackQuest部署counter项目,使用 Solana 官方提供的 playgroud 。这个平台让我们的部署和测试过程变得更加简便高效。
合约代码
lib.rs中复制以下代码
use anchor_lang::prelude::*;
use std::ops::DerefMut;declare_id!("CVQCRMyzWNr8MbNhzjbfPu9YVvr97onF48Lc9ZwXotpW");#[program]
pub mod counter {use super::*;pub fn initialize(ctx: Context<Initialize>) -> Result<()> {let counter = ctx.accounts.counter.deref_mut();let bump = ctx.bumps.counter;*counter = Counter {authority: *ctx.accounts.authority.key,count: 0,bump,};Ok(())}pub fn increment(ctx: Context<Increment>) -> Result<()> {require_keys_eq!(ctx.accounts.authority.key(),ctx.accounts.counter.authority,ErrorCode::Unauthorized);ctx.accounts.counter.count += 1;Ok(())}
}#[derive(Accounts)]
pub struct Initialize<'info> {#[account(init,payer = authority,space = Counter::SIZE,seeds = [b"counter"],bump)]counter: Account<'info, Counter>,#[account(mut)]authority: Signer<'info>,system_program: Program<'info, System>,
}#[derive(Accounts)]
pub struct Increment<'info> {#[account(mut,seeds = [b"counter"],bump = counter.bump)]counter: Account<'info, Counter>,authority: Signer<'info>,
}#[account]
pub struct Counter {pub authority: Pubkey,pub count: u64,pub bump: u8,
}impl Counter {pub const SIZE: usize = 8 + 32 + 8 + 1;
}#[error_code]
pub enum ErrorCode {#[msg("You are not authorized to perform this action.")]Unauthorized,
}
交换代码
client.ts中复制以下代码
const wallet = pg.wallet;
const program = pg.program;
const counterSeed = Buffer.from("counter");const counterPubkey = await web3.PublicKey.findProgramAddressSync([counterSeed],pg.PROGRAM_ID
);const initializeTx = await pg.program.methods.initialize().accounts({counter: counterPubkey[0],authority: pg.wallet.publicKey,systemProgram: web3.SystemProgram.programId,}).rpc();let counterAccount = await program.account.counter.fetch(counterPubkey[0]);
console.log("account after initializing ==> ", Number(counterAccount.count));const incrementTx = await pg.program.methods.increment().accounts({counter: counterPubkey[0],authority: pg.wallet.publicKey,}).rpc();counterAccount = await program.account.counter.fetch(counterPubkey[0]);
console.log("account after increasing ==>", Number(counterAccount.count));
部署和发布
- 切换到左侧工具栏第二个按钮并点击 build
- 点击deploy, 终端出现 “Deployment successful.” 即为部署成功。(这大约会消耗2~3个sol)
测试交互
切换到左侧第一个文件按钮并点击 Run ,运行client.ts文件,输出如图

再次执行就会开始报错
Running client…
client.ts:
Uncaught error: failed to send transaction: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x0
各种求助之后,修改初始化代码,输出报错日志
try {// Initialize accountconst initializeTx = await pg.program.methods.initialize().accounts({counter: counterPubkey,authority: pg.wallet.publicKey,systemProgram: web3.SystemProgram.programId,}).rpc();} catch (error) {console.error("Error fetching counter account:", error);}
报错日志如下:
logs: [ 'Program CVQCRMyzWNr8MbNhzjbfPu9YVvr97onF48Lc9ZwXotpW invoke [1]','Program log: Instruction: Initialize','Program 11111111111111111111111111111111 invoke [2]','Allocate: account Address { address: 8sKt2NcKbN9E2SUE6E3NgfzwGi5ByBZxHQdCw27bMef1, base: None } already in use','Program 11111111111111111111111111111111 failed: custom program error: 0x0','Program CVQCRMyzWNr8MbNhzjbfPu9YVvr97onF48Lc9ZwXotpW consumed 4867 of 200000 compute units','Program CVQCRMyzWNr8MbNhzjbfPu9YVvr97onF48Lc9ZwXotpW failed: custom program error: 0x0' ],programErrorStack: { stack: [ [Object], [Object] ] } }
根据日志信息,关键的错误是:
'Allocate: account Address { address: 8sKt2NcKbN9E2SUE6E3NgfzwGi5ByBZxHQdCw27bMef1, base: None } already in use'
这表示你尝试分配的账户地址 8sKt2NcKbN9E2SUE6E3NgfzwGi5ByBZxHQdCw27bMef1 已经被使用,因此无法进行新的初始化。这通常发生在你已经为该地址创建了账户,但可能在再次执行时未考虑到这一点。
修改initializeTx代码
let counterAccount;
try {counterAccount = await program.account.counter.fetch(counterPubkey);console.log("Counter account already exists:", counterAccount);
} catch (error) {if (error.message.includes("Account does not exist")) {console.log("Counter account does not exist, proceeding with initialization...");// Initialize accountconst initializeTx = await pg.program.methods.initialize().accounts({counter: counterPubkey,authority: pg.wallet.publicKey,systemProgram: web3.SystemProgram.programId,}).rpc();} else {console.error("Error fetching counter account:", error);}
}
执行结果:

修复后完整client.ts代码
const wallet = pg.wallet;
const program = pg.program;
const counterSeed = Buffer.from("counter");const [counterPubkey, bump] = web3.PublicKey.findProgramAddressSync([counterSeed],pg.PROGRAM_ID
);let counterAccount;
try {counterAccount = await program.account.counter.fetch(counterPubkey);console.log("Counter account already exists:", counterAccount);
} catch (error) {if (error.message.includes("Account does not exist")) {console.log("Counter account does not exist, proceeding with initialization...");// Initialize accountconst initializeTx = await pg.program.methods.initialize().accounts({counter: counterPubkey,authority: pg.wallet.publicKey,systemProgram: web3.SystemProgram.programId,}).rpc();} else {console.error("Error fetching counter account:", error);}
}const incrementTx = await pg.program.methods.increment().accounts({counter: counterPubkey,authority: pg.wallet.publicKey,}).rpc();counterAccount = await program.account.counter.fetch(counterPubkey);
console.log("account after increasing ==>", Number(counterAccount.count));相关文章:
solana项目counter,测试过程中执行报错记录分享
跟随HackQuest部署counter项目,使用 Solana 官方提供的 playgroud 。这个平台让我们的部署和测试过程变得更加简便高效。 合约代码 lib.rs中复制以下代码 use anchor_lang::prelude::*; use std::ops::DerefMut;declare_id!("CVQCRMyzWNr8MbNhzjbfPu9YVvr97…...
[Unity Demo]重启项目之从零开始制作空洞骑士Hollow Knight第一集:导入素材以及建立并远程连接git仓库
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、导入素材二、使用步骤 1.建立并远程连接git2.github和仓库连接总结 前言 好久没来CSDN看看,突然看到前两年自己写的文章从零开始制作空洞骑士只…...
单链表(c语言简单实现)
单链表是一种常见的数据结构 一、结构特点 1. 由一系列节点组成,每个节点包含数据域和指向下一个节点的指针域。 2. 最后一个节点的指针域为 null,表示链表的结尾。 二、主要操作 1. 插入节点:可以在链表的头部、尾部或特定位置插入新节点。…...
三菱变频器Modbus-RTU 通讯规格
能够从变频器的 RS-485 端子使用 Modbus-RTU 通讯协议,进行通讯运行和参数设定。 NOTE: 1、使用 Modbus-RTU 通讯协议时,请设定Pr.549 协议选择 “1” 2、从主机按地址0(站号0)进行hodbus-RTU通讯时,为广播通讯,变频器不向主机发…...
PyQt5库学习之QFileDialog.getOpenFileName函数
PyQt5库学习之QFileDialog.getOpenFileName函数 一、简介 QFileDialog.getOpenFileName 是 PyQt5 中的一个函数,它提供了一个标准的文件选择对话框,允许用户选择一个文件。这个函数是 QFileDialog 类的一部分,通常用于打开文件时让用户选择文…...
如何理解变量提升和函数提升
在 JavaScript 中,变量提升和函数提升是指在代码执行之前,变量和函数声明会被提升到其所在作用域的顶部。这意味着你可以在声明之前使用它们,但它们的行为有所不同。 变量提升 变量提升是指变量声明(使用 var)会被提…...
monorepo基础搭建教程(从0到1 pnpm+monorepo+vue)
monorepo 前言1、搭建空项目并配置pnpm-workspace.yamlpnpm initpnpm-workspace.yaml 2.配置packages测试文件配置相关内容 3.引入packages内容至公共package.json4.创建测试项目,并引入公共包结语 前言 有个项目要引入一个第三方库,但是第三方库下载下…...
使用Docker Compose一键部署
文章目录 使用Docker Compose一键部署一、引言二、环境准备1、安装Docker和Docker Compose1.1、安装Docker1.2、安装Docker Compose 2、验证安装 三、编写Docker Compose文件1、创建目录结构2、编写Dockerfile3、编写docker-compose.yml 四、部署项目1、构建镜像2、启动服务3、…...
【GVINS】
【GVINS】 1. GVINS的系统特点2. GVINS的融合导航存在问题3. GVINS的信号的组成4. GVINS的信号的组成 原理推导知乎 1. GVINS的系统特点 概述了一种名为GVINS的系统,它旨在解决视觉-惯性里程计(VIO)在长时间运行时出现的漂移问题。GVINS通过…...
Linux 给 vmlinux 添加符号
文章目录 前言一、centos7 给 vmlinux 添加符号二、ubuntu22.04 给 vmlinux 添加符号 前言 使用内核源码下的script文件:scripts/extract-vmlinux 可以从/boot/vmlinuz 提取出来 内核镜像文件vmlinux: # ./extract-vmlinux vmlinuz-3.10.0-693.el7.x86…...
【mac】MacOS无法打开XXX文件,因为无法验证开发者的问题解决
博主介绍: 大家好,我是想成为Super的Yuperman,互联网宇宙厂经验,17年医疗健康行业的码拉松奔跑者,曾担任技术专家、架构师、研发总监负责和主导多个应用架构。 技术范围: 目前专注java体系,以及…...
Docker 无法拉取雷池 WAF 的解决方法
引言: 近日,许多用户反映在使用 Docker 命令拉取雷池 WAF 镜像时遇到了困难,主要表现为连接超时错误。本文将为大家提供解决此问题的有效方法。 问题描述: 当尝试通过 Docker 命令拉取雷池 WAF 镜像时,部分用户遇到…...
进制转换,原码,反码,补码,二进制位运算及应用
进制转换 2B(0--1),8O(0--7),10D,16H(0——9,A——F) 8位二进制数,左边高位,右边低位 2,8,16 -> 10进制整数,小数 整数:从后往…...
node.js居家养老服务系统—计算机毕业设计源码35247
目 录 摘要 1 绪论 1.1选题的背景 1.2研究的意义 1.3国内外居家养老信息化管理现状分析 1.4 express框架介绍 1.5node.js功能模块 1.6论文结构与章节安排 2 居家养老服务系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.…...
OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(二)
往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(一) Op…...
Live800:从心出发,以情动人:构建深度客户服务文化
在当今这个竞争激烈的市场环境中,企业之间的较量已不仅仅局限于产品质量的比拼,更在于谁能提供更优质、更贴心的客户服务。在这个背景下,“从心出发,以情动人”成为了构建深度客户服务文化的核心理念,它要求企业不仅要…...
分布式事务一致性:本地消息表设计与实践
概念 本地消息表是一种常见的解决分布式事务问题的方法。其核心思想是将分布式事务拆分成本地事务来处理,通过消息队列来保证各个本地事务的最终一致性。 实现步骤 创建本地消息表:在数据库中创建一个本地消息表,用于存储待发送的消息以及消…...
深入浅出Docker
1. Docker引擎 Docker引擎是用来运行和管理容器的核心软件。通常人们会简单的将其指代为Docker或Docker平台。 基于开放容器计划(OCI)相关的标准要求,Docker引擎采用了模块化的设计原则,其组件是可替换的。 Docker引擎由如下主…...
Flink 与 Kubernetes (K8s)、YARN 和 Mesos集成对比
Flink 与 Kubernetes (K8s)、YARN 和 Mesos 的紧密集成,是 Flink 能够在不同分布式环境中高效运行的关键特性。 Flink 提供了与这些资源管理系统的深度集成,以便在多种集群管理环境下提交、运行和管理 Flink 作业。Flink 与 K8s、YARN 和 Mesos 集成的详…...
Python 集合的魔法:解锁高效数据处理的秘密
引言 集合作为 Python 的一种内置数据类型,其本质是一个无序且不重复的元素序列。虽然表面上看它似乎只是列表或元组的一种变体,但实际上,集合背后有着更为高效的查找机制。通过学习和掌握集合的高级操作,我们不仅能更好地理解 P…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
