我在学习使用solana官方推荐的java SDK solanaj进行开发 碰到了如下问题:
Maven:
<dependency>
    <groupId>com.mmorrell</groupId>
    <artifactId>solanaj</artifactId>
    <version>1.19.2</version>
</dependency>@Test
void testCreateAccount() throws Exception {
    OkHttpClient customHttpClient = new OkHttpClient.Builder()
            .proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 7890))) 
            .readTimeout(20, TimeUnit.SECONDS)
            .build();
    RpcClient client = new RpcClient(Cluster.DEVNET.getEndpoint(),customHttpClient);
    Account payer = getAccount();
    System.out.println("payer: " + payer.getPublicKey());
    Account mintKeypair = new Account();
    PublicKey mintPubkey = mintKeypair.getPublicKey();
    // 82
    Object value = SolCommonEnum.MINT_SIZE.getValue();
    Long space = Long.valueOf(value.toString());
    long lamports = getLamports(client, space);
    System.out.println("lamports value: " + lamports);
    // create mint
    TransactionInstruction createMintAccountInstruction = SystemProgram.createAccount(
            payer.getPublicKey(),
            mintPubkey,
            lamports,
            space,
            PublicKey.valueOf("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb")
    );
    // init mint
    TransactionInstruction initializeMintInstruction = TokenProgram.initializeMint(
            mintPubkey,
            2,
            payer.getPublicKey(),
            payer.getPublicKey()
    );
    Transaction transaction = new Transaction();
    String recentBlockHash = getRecentBlockHash(client);
    ArrayList<Account> accounts = new ArrayList<>();
    accounts.add(payer);
    accounts.add(mintKeypair);
    // add
    transaction.addInstruction(createMintAccountInstruction);
    transaction.addInstruction(initializeMintInstruction);
    String res = client.gatApi().sendTransaction(transaction, accounts, recentBlockHash, new RpcSendTransactionConfig());
    System.out.println("Transaction Signature: " +res);
}如果像上述写法,进行执行,会得到交易的base64地址,但是去solana的开发环境进行查询未查询到对应操作。 于是我将"sendTransaction"方法中的base64码拿出借用其中的call方法使用method值替换为simulateTransaction,得到的返回结果尽然是:
{
  "jsonrpc" : "2.0",
  "result" : {
    "context" : {
      "apiVersion" : "2.0.13",
      "slot" : 333797603
    },
    "value" : {
      "accounts" : null,
      "err" : {
        "InstructionError" : [ 0, "MissingRequiredSignature" ]
      },
      "innerInstructions" : null,
      "logs" : [ "Program 11111111111111111111111111111111 invoke [1]", "Allocate: 'to' account Address { address: 4ciycXCoFo5SveW8jGsks5TKqGs7ProV8ut21V6U6Unw, base: None } must sign", "Program 11111111111111111111111111111111 failed: missing required signature for instruction" ],
      "replacementBlockhash" : null,
      "returnData" : null,
      "unitsConsumed" : 150
    }
  },
  "id" : "afb5c3d5-2dde-4ba9-86d9-89db774f5949"
}错误信息表明在执行Solana的指令时缺少必要的签名。可我上述测试用例中名且添加了我的两个账户到List中。不知道为什么