solana app 交易指令设计

package org.p2p.solanaj.programs;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import org.p2p.solanaj.core.PublicKey;
import org.p2p.solanaj.core.TransactionInstruction;
import org.p2p.solanaj.core.AccountMeta;
import static org.bitcoinj.core.Utils.*;

public class SystemProgram {
    public static void main(String[]args)
    {
       System.out.println("solana app transfer");
       System.out.println("http://www.kikenn.com");
    }
    public static  PublicKey PROGRAM_ID = new PublicKey("11111111111111111111111111111111");
    public static final int PROGRAM_INDEX_CREATE_ACCOUNT = 0;
    public static final int PROGRAM_INDEX_CREATE_ASSOCIATED_ACCOUNT = 2;
    public static  int PROGRAM_INDEX_TRANSFER =3;

    public static TransactionInstruction transfer(PublicKey fromPublicKey, PublicKey toPublickKey, long lamports,boolean isSPLToken) {
        ArrayList<AccountMeta> keys = new ArrayList<AccountMeta>();
        keys.add(new AccountMeta(fromPublicKey, false, true));
        keys.add(new AccountMeta(toPublickKey, false, true));
        if(isSPLToken)
        {
            PROGRAM_ID = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
            byte[] data = new byte[1 + 8];
            data[0] = (byte)((int)(255L & PROGRAM_INDEX_TRANSFER));
            int64ToByteArrayLE(lamports, data, 1);
            return new TransactionInstruction(PROGRAM_ID, keys, data);
        } else {
            PROGRAM_INDEX_TRANSFER=2;
            byte[] data = new byte[4 + 8];
            uint32ToByteArrayLE(PROGRAM_INDEX_TRANSFER, data, 0);
            int64ToByteArrayLE(lamports, data, 4);
            return new TransactionInstruction(PROGRAM_ID, keys, data);
        }
    }
    public static TransactionInstruction createAssociatedTokenAccount(PublicKey address, PublicKey owner, PublicKey mint) {
        ArrayList<AccountMeta> keys = new ArrayList<AccountMeta>();
        keys.add(new AccountMeta(address, false, true));
        keys.add(new AccountMeta(owner, false, false));
        keys.add(new AccountMeta(mint, false, false));
        keys.add(new AccountMeta(new PublicKey("11111111111111111111111111111111"), false, false));
        keys.add(new AccountMeta(new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"), false, false));
        keys.add(new AccountMeta(new PublicKey("SysvarRent111111111111111111111111111111111"), false, false));
        PROGRAM_ID = new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
        byte[] data = new byte[1];
        data[0]=0;
        return new TransactionInstruction(PROGRAM_ID, keys, data);
    }

    public static TransactionInstruction createMemo(String memoString)
    {
        ArrayList<AccountMeta> keys = new ArrayList<AccountMeta>();
        PROGRAM_ID = new PublicKey("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr");
        byte[] data = memoString.getBytes(StandardCharsets.UTF_8);
        return new TransactionInstruction(PROGRAM_ID, keys, data);
    }
    public static TransactionInstruction createAccount(PublicKey fromPublicKey, PublicKey newAccountPublikkey,
            long lamports, long space, PublicKey programId) {
        ArrayList<AccountMeta> keys = new ArrayList<AccountMeta>();
        keys.add(new AccountMeta(fromPublicKey, true, true));
        keys.add(new AccountMeta(newAccountPublikkey, true, true));
        byte[] data = new byte[4 + 8 + 8 + 32];
        uint32ToByteArrayLE(PROGRAM_INDEX_CREATE_ACCOUNT, data, 0);
        int64ToByteArrayLE(lamports, data, 4);
        int64ToByteArrayLE(space, data, 12);
        System.arraycopy(programId.toByteArray(), 0, data, 20, 32);
        return new TransactionInstruction(PROGRAM_ID, keys, data);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值