Skip to content

Commit ee7d3c8

Browse files
committed
feat(rpc): add GetTransaction test for JSON encoding
1 parent aec058e commit ee7d3c8

2 files changed

Lines changed: 51 additions & 1 deletion

File tree

rpc/client_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
26342684
func TestClient_GetTransactionCount(t *testing.T) {
26352685
responseBody := `27293302873`
26362686
server, closer := mockJSONRPC(t, stdjson.RawMessage(wrapIntoRPC(responseBody)))

rpc/getTransaction.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func (cl *Client) GetTransaction(
4646
if !solana.IsAnyOfEncodingType(
4747
opts.Encoding,
4848
// Valid encodings:
49-
// solana.EncodingJSON, // TODO
49+
solana.EncodingJSON,
5050
solana.EncodingJSONParsed, // TODO
5151
solana.EncodingBase58,
5252
solana.EncodingBase64,

0 commit comments

Comments
 (0)