@@ -2631,6 +2631,56 @@ func TestClient_GetParsedTransaction(t *testing.T) {
26312631 }, out.Transaction.Message.Instructions[0].Parsed.asInstructionInfo)
26322632}
26332633
2634+ func TestClient_GetTransaction_EncodingJSON(t *testing.T) {
2635+ responseBody := `{"blockTime":1624821990,"meta":{"err":null,"fee":5000,"innerInstructions":[],"logMessages":[],"postBalances":[199247210749,90459349430703,1,1,1],"postTokenBalances":[],"preBalances":[199247215749,90459349430703,1,1,1],"preTokenBalances":[],"rewards":[],"status":{"Ok":null}},"slot":83311386,"transaction":{"message":{"accountKeys":["2ZZkgKcBfp4tW8qCLj2yjxRYh9CuvEVJWb6e2KKS91Mj","53R9tmVrTQwJAgaUCWEA7SiVf7eWAbaQarZ159ixt2D9","SysvarS1otHashes111111111111111111111111111","SysvarC1ock11111111111111111111111111111111","Vote111111111111111111111111111111111111111"],"header":{"numReadonlySignedAccounts":0,"numReadonlyUnsignedAccounts":3,"numRequiredSignatures":1},"instructions":[{"accounts":[1,2,3,0],"data":"3yZe7d","programIdIndex":4}],"recentBlockhash":"6o9C27iJ5rPi7wEpvQu1cFbB1WnRudtsPnbY8GvFWrgR"},"signatures":["QPzWhnwHnCwk3nj1zVCcjz1VP7EcAKouPg9Joietje3GnQTVQ5XyWxyPC3zHby8K5ahSn9SbQupauDbVRvv5DuL"]}}`
2636+ server, closer := mockJSONRPC(t, stdjson.RawMessage(wrapIntoRPC(responseBody)))
2637+ defer closer()
2638+ client := New(server.URL)
2639+
2640+ txSig := "KBVcTWwgEhVzwywtunhAXRKjXYYEdPcSCpuEkg484tiE3dFGzHDu9LKKH23uBMdfYt3JCPHeaVeDTZWecboyTrd"
2641+
2642+ out, err := client.GetTransaction(
2643+ context.Background(),
2644+ solana.MustSignatureFromBase58(txSig),
2645+ &GetTransactionOpts{
2646+ Encoding: solana.EncodingJSON,
2647+ },
2648+ )
2649+ require.NoError(t, err)
2650+
2651+ // Verify request sent encoding: "json"
2652+ reqBody := server.RequestBody(t)
2653+ assert.NotNil(t, reqBody["id"])
2654+ reqBody["id"] = any(nil)
2655+ assert.Equal(t,
2656+ map[string]any{
2657+ "id": any(nil),
2658+ "jsonrpc": "2.0",
2659+ "method": "getTransaction",
2660+ "params": []any{
2661+ txSig,
2662+ map[string]any{
2663+ "encoding": string(solana.EncodingJSON),
2664+ },
2665+ },
2666+ },
2667+ reqBody,
2668+ )
2669+
2670+ // Verify response is usable: GetTransaction must return a populated transaction.
2671+ require.NotNil(t, out.Transaction)
2672+ tx, err := out.Transaction.GetTransaction()
2673+ require.NoError(t, err)
2674+ require.Len(t, tx.Signatures, 1)
2675+ assert.Equal(t,
2676+ solana.MustSignatureFromBase58("QPzWhnwHnCwk3nj1zVCcjz1VP7EcAKouPg9Joietje3GnQTVQ5XyWxyPC3zHby8K5ahSn9SbQupauDbVRvv5DuL"),
2677+ tx.Signatures[0],
2678+ )
2679+ require.Len(t, tx.Message.AccountKeys, 5)
2680+ assert.Equal(t, solana.MustPublicKeyFromBase58("2ZZkgKcBfp4tW8qCLj2yjxRYh9CuvEVJWb6e2KKS91Mj"), tx.Message.AccountKeys[0])
2681+ assert.Equal(t, uint16(4), tx.Message.Instructions[0].ProgramIDIndex)
2682+ }
2683+
26342684func TestClient_GetTransactionCount(t *testing.T) {
26352685 responseBody := `27293302873`
26362686 server, closer := mockJSONRPC(t, stdjson.RawMessage(wrapIntoRPC(responseBody)))
0 commit comments