小试牛刀-SpringBoot集成SOL链 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2?PublicKey3.3?Transaction3.4 TransactionInstruction四、示例代码* *Welcome to Code Block’s blog 本篇文章主要介绍了 [小试牛刀-SpringBoot集成SOL链] 博主广交技术好友喜欢文章的可以关注一下一、什么是solanaj------------Solanaj是一个用于与 Solana 区块链交互的 Java 库。它为 Java 开发者提供了一套功能丰富的 API使得在 Java 环境中可以轻松构建与 Solana 区块链交互的应用程序例如钱包、交易、账户管理以及智能合约调用等功能。二、Pom依赖-------solanaj可以很方便的通过pom文件进行导入,这样我们就可以将其集成到Spring/Boot程序中了.Pom依赖如下: com.mmorrell solanaj 1.19.2 三、主要类-----### 3.1 RpcClientRpcClient为调用节点的主要类,该节点在创建时需要设置是在主网、测试网、开发网进行调用,创建方法如下: RpcClient client new RpcClient(“https://palpable-fittest-shadow.solana-devnet.quiknode.pro/ce7fe4c5d9d1dd80eb5aafa6a965af0957526ad4”); 使用client.getApi()可以快速的调用相关远程方法,主要使用sendTransaction()向节点发送事务方法.使用方法如下: String tx client.getApi().sendTransaction(transaction, sendWallet);### 3.2PublicKey在 Solanaj 中PublicKey类是一个核心类用于表示 Solana 区块链中的公钥。公钥是 Solana 系统中的一个基础元素用于标识账户、程序以及其他资源。主要用法如下: PublicKey destWalletnew PublicKey(“B2NmFbKEvEc8nZXzYdCnkrWKXQuTSr6GmWt8jPeaX2zf”);在上述代码中,功能为将字符串地址转换为在代码中可用的公钥账户类. PublicKey destAccount PublicKey.findProgramAddress( Arrays.asList(destWallet.toByteArray(), TokenProgram.PROGRAM_ID.toByteArray(), mintKey.toByteArray()), AssociatedTokenProgram.PROGRAM_ID ).getAddress();在上述代码中,findProgramAddress为查找PDA账户的功能但上述为特殊的PDA账户,该账户根据官方的ATA账户计算方法生成,所以生成的账户为一个ATA账户.该账户用于存储非原生的代币。注:ATA账户{ seeds{拥有者地址,TokenProgram地址,铸造地址}, AssociatedTokenProgram地址 }### 3.3TransactionTransaction为调用时的发送对象,该类可理解为操作的集合,该类中主要有三部分,即:TransactionInstruction:一个或多个,每个TransactionInstruction为一个操作*,可使用addInstruction进行添加. transaction.addInstruction(transactionInstruction);sign签名:一个或多个,该签名数量需要看资源变动的主体是否需要多个签名.可使用以下方法添加: transaction.sign();RecentBlockHash:最近的的区块hash.该设置为了保证链上数据的有效性.可以使用以下方法添加: transaction.setRecentBlockHash();### 3.4 TransactionInstructionTransactionInstruction为一个单独的链上操作.其结构如下: private final PublicKey programId; //调用的programId private final List keys; //需要的Account private final byte[] data; //数据可通过查阅官方programId和调用参数等进行功能调用.也可以通过以下已封装的类进行合约调用:SystemProgram:该类可以方便的生成与原生代币有关的TransactionInstruction,如:要实现转移SOL操作可以用以下实现: TransactionInstruction transactionInstruction SystemProgram.transfer( account.getPublicKey(),//源地址 new PublicKey(“B2NmFbKEvEc8nZXzYdCnkrWKXQuTSr6GmWt8jPeaX2zf”), //目的地址 1000000); //数量TokenProgram:该类可以方便生成与非原生代币(自定义)有关的TransactionInstruction,如:要转移自定义的代币可以用以下实现: TransactionInstruction transactionInstruction TokenProgram.transfer( sendAccount, //发送方 destAccount, //接收方 10000000, //数量 sendWallet.getPublicKey() //发送者);注:这里的sendAccount为ATA账户,因为非原生代币只能通过ATA Account接收。四、示例代码------使用以下代码实现从非原生代币到B2NmFbKEvEc8nZXzYdCnkrWKXQuTSr6GmWt8jPeaX2zf的转移操作: String privateKey“私钥”; //代币mint地址 PublicKey mintKeynew PublicKey(“3ufbMZs57L1qfNPXTR6Nn7WA5pDzPEaLzcFo1aUpj6KE”); //接收方地址 PublicKey destWalletnew PublicKey(“B2NmFbKEvEc8nZXzYdCnkrWKXQuTSr6GmWt8jPeaX2zf”); //发送方地址 Account sendWallet Account.fromBase58PrivateKey(privateKey); //如果接收方没有ATA账号,创建ATA账号 TransactionInstruction idempotent AssociatedTokenProgram.createIdempotent( sendWallet.getPublicKey(), destWallet, mintKey ); //---------------------计算ATA账号地址--------------------- Listbyte[] seedsnew ArrayList(); seeds.add(sendWallet.getPublicKey().toByteArray()); seeds.add(TokenProgram.PROGRAM_ID.toByteArray()); seeds.add(mintKey.toByteArray()); PublicKey sendAccount PublicKey.findProgramAddress( seeds, AssociatedTokenProgram.PROGRAM_ID ).getAddress(); PublicKey destAccount PublicKey.findProgramAddress( Arrays.asList(destWallet.toByteArray(), TokenProgram.PROGRAM_ID.toByteArray(), mintKey.toByteArray()), AssociatedTokenProgram.PROGRAM_ID ).getAddress(); //-------------------------------------------------- //获取TransactionInstruction TransactionInstruction transactionInstruction TokenProgram.transfer( sendAccount, destAccount, 10000000, sendWallet.getPublicKey()); //添加到Transaction Transaction transactionnew Transaction(); transaction.addInstruction(idempotent); transaction.addInstruction(transactionInstruction); //初始化调用环境 RpcClient client new RpcClient(“https://palpable-fittest-shadow.solana-devnet.quiknode.pro/ce7fe4c5d9d1dd80eb5aafa6a965af0957526ad4”); //发送调用并且进行签名 String tx client.getApi().sendTransaction(transaction, sendWallet); System.err.println(tx);* *社区:区块链社区*相关推荐:小试牛刀-SOL链swap程序 * 小试牛刀-SOL链创建Token * 小试牛刀-区块链Solana多签账户 * *在实验环境下进行不涉及任何投资方面的建议*感谢您的关注和收藏!!!

相关新闻

最新新闻

大疆Mini 3为何成为年轻人第一台“炸鸡”?新手避坑与起飞指南

大疆Mini 3为何成为年轻人第一台“炸鸡”?新手避坑与起飞指南

“年轻人第一台炸鸡”这个说法,在无人机圈子里其实是个又好笑又心疼的梗。它说的不是炸鸡块,而是“炸机”——无人机因为操作失误、环境判断错误或设备故障,从空中摔下来、撞上障碍物,轻则桨叶报废,重则整机损坏无法修…

2026/8/31 4:14:35
Codex为omarchy添加arm64支持:AI编程工具链的ARM生态拼图

Codex为omarchy添加arm64支持:AI编程工具链的ARM生态拼图

1. 为什么“Codex 为 omarchy 添加 arm64 支持”这件事值得关注先问一个实际问题:你手里有一台 M 系列芯片的 Mac、一台骁龙 X Elite 的 Windows 笔记本,或者一块 arm64 架构的 Linux 开发板,然后准备新一代编程助手 Codex 完成日常开发任务。…

2026/8/31 4:14:35
在线考试答题系统架构设计:一套底层支撑考试、刷题、竞赛与活动

在线考试答题系统架构设计:一套底层支撑考试、刷题、竞赛与活动

简介:这是一套面向教育机构、培训平台及知识竞赛组织者的在线考试答题系统源码,适用于考试测评、日常刷题、活动竞答与题库建设等多场景,兼顾教师出题管理与考生作答体验。资源包共2000个文件,主体为10443个PHP后端逻辑文件&#…

2026/8/31 4:14:35
用Qwen3微调Embedding模型,全面提升RAG检索准确率

用Qwen3微调Embedding模型,全面提升RAG检索准确率

RAG 系统上线后,最常被吐槽的是检索不准。明明知识库里有答案,用户换一种口语化问法,向量检索却召回一堆无关段落,大模型只能基于错误上下文硬答,于是“答非所问”“回答不专业”就都来了。问题往往出在 Embedding 模型…

2026/8/31 4:14:35
VLM后训练实战:合成数据到行业推理全流程指南

VLM后训练实战:合成数据到行业推理全流程指南

这次我们来看一条比较完整的 VLM 后训练实战链路:Cosmos 3。项目标题里浓缩了三个关键词:后训练、智慧城市 VLM 推理、农业机器人合成数据生成。拆开看就是——先用 Cosmos 3 这类合成数据工具生成场景数据,再对视觉语言模型做后训练&#xf…

2026/8/31 4:14:35
JavaScript时间函数实战:彻底搞懂Date、时区与时间戳

JavaScript时间函数实战:彻底搞懂Date、时区与时间戳

我们几乎每天都会写时间相关的代码:订单要显示下单时间、列表要按创建时间排序、活动页要做倒计时、会员要判断过期时间。表面看,这些都是"取当前时间、格式化一下、算个差值"的小需求,但真正动手时,问题老是一个接一个…

2026/8/31 4:09:34