solana java 转账交易示例

代码示例

首先引入依赖

bash 复制代码
<dependency>
    <groupId>com.mmorrell</groupId>
    <artifactId>solanaj</artifactId>
    <version>1.19.2</version>
</dependency>
java 复制代码
	public static String SECRET_KEY = "";
	public static RpcClient SOL_RPC_CLIENT = null;

	@BeforeAll
	public static void readTradeAccountSecretKey() {
		SOL_RPC_CLIENT = new RpcClient(Cluster.MAINNET);
		String skPath = "/Users/xxx/.config/solana/id.json";
		try (BufferedReader reader = new BufferedReader(new FileReader(skPath))) {
			String line;
			while ((line = reader.readLine()) != null) {
				SECRET_KEY = line;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void testTransfer() throws RpcException {
		PublicKey toPublickKey = new PublicKey("");
		int lamports = 3000;
		Account signer = Account.fromJson(SECRET_KEY);
		
		log.info(signer.getPublicKey().toString());
		Transaction transaction = new Transaction();
		transaction.addInstruction(SystemProgram.transfer(signer.getPublicKey(), toPublickKey, lamports));
		String signature = SOL_RPC_CLIENT.getApi().sendTransaction(transaction, signer);
		log.info(signature);
	}

说明

  1. 这里Account对象的生成可以由json字节数组生成也通过另外一个方法 Account.fromBase58PrivateKey(), 这种适合从Phantom这样的钱包中复制的私钥来生成。

    由私钥可以生成Account对象,Account对象可以获取PublicKey,PublicKey的字符串形式就是solana上的地址。

  2. 要想发送交易,需要先构造一个Transaction对象,对象中包含了要执行的指令。

    比如本例中,我们需要先构造转账交易,即SystemProgram.transfer(), 有三个参数,from地址,to地址,以及要转账的solana数量,SystemProgram.transfer() 得到的就一个TransactionInstruction类型的对象。将构造好的指令加入到transaction对象中。

  3. 接着用rpcClient将构造好的交易发送上链,这里需要说明的是:

    sendTransaction方法中还包含了获取最新交易区块的动作以及使用singer私钥签名的动作:

最后,这里的转账交易仅能转原生token solana, 其他类型的token需要别的指令,这个后面再写一篇。

相关推荐
神仙别闹8 分钟前
基于Python+Neo4j实现新冠信息挖掘系统
开发语言·python·neo4j
木昜先生21 分钟前
知识点:深入理解 JVM 内存管理与垃圾回收
java·jvm·后端
115432031q24 分钟前
基于SpringBoot+Vue实现的旅游景点预约平台功能十三
java·前端·后端
战族狼魂27 分钟前
基于SpringBoot+PostgreSQL+ROS Java库机器人数据可视化管理系统
java·spring boot·postgresql
半个脑袋儿34 分钟前
Java线程控制: sleep、yield、join深度解析
java
猫猫头有亿点炸38 分钟前
C语言大写转小写2.0
c语言·开发语言
小智疯狂敲代码38 分钟前
Spring MVC-DispatcherServlet 的源码解析
java·面试
int0x0339 分钟前
Java中的内存"瘦身术":揭秘String Deduplication
java
半个脑袋儿40 分钟前
Java日期格式化中的“YYYY”陷阱:为什么跨年周会让你的年份突然+1?
java·后端
A达峰绮1 小时前
设计一个新能源汽车控制系统开发框架,并提供一个符合ISO 26262标准的模块化设计方案。
大数据·开发语言·经验分享·新能源汽车