Skip to content

Commit ab11a4c

Browse files
committed
Updated examples & instruction decoder to cast to TransactionInfo.
Updated examples & instruction decoder to cast to TransactionInfo. Added dynamic type conversion for rewardtype
1 parent 603a7e5 commit ab11a4c

File tree

5 files changed

+45
-41
lines changed

5 files changed

+45
-41
lines changed

src/Solnet.Examples/InstructionDecoderExample.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,11 @@ public void Run()
7272

7373
foreach (TransactionMetaInfo txMeta in block.Result.Transactions)
7474
{
75-
if (txMeta.Transaction.Message.Instructions.Length == 1 && "Vote111111111111111111111111111111111111111" == txMeta.Transaction.Message.AccountKeys[txMeta.Transaction.Message.Instructions[0].ProgramIdIndex]) continue;
76-
if (txMeta.Transaction.Message.Instructions.Length < 2) continue;
77-
Console.WriteLine($"\n\t\tDECODING INSTRUCTIONS FROM TRANSACTION {txMeta.Transaction.Signatures[0]}");
75+
if (((TransactionInfo)txMeta.Transaction).Message.Instructions.Length == 1 && "Vote111111111111111111111111111111111111111" == ((TransactionInfo)txMeta.Transaction).Message.AccountKeys[((TransactionInfo)txMeta.Transaction).Message.Instructions[0].ProgramIdIndex]) continue;
76+
if (((TransactionInfo)txMeta.Transaction).Message.Instructions.Length < 2) continue;
77+
Console.WriteLine($"\n\t\tDECODING INSTRUCTIONS FROM TRANSACTION {((TransactionInfo)txMeta.Transaction).Signatures[0]}");
7878

79-
Console.WriteLine($"Instructions: {txMeta.Transaction.Message.Instructions.Length}");
79+
Console.WriteLine($"Instructions: {((TransactionInfo)txMeta.Transaction).Message.Instructions.Length}");
8080
Console.WriteLine($"InnerInstructions: {txMeta.Meta.InnerInstructions.Length}");
8181
var decodedInstructions = InstructionDecoder.DecodeInstructions(txMeta);
8282

src/Solnet.Programs/InstructionDecoder.cs

+10-10
Original file line numberDiff line numberDiff line change
@@ -73,24 +73,24 @@ public static List<DecodedInstruction> DecodeInstructions(TransactionMetaInfo tx
7373
{
7474
List<DecodedInstruction> decodedInstructions = new();
7575

76-
for (int i = 0; i < txMetaInfo.Transaction.Message.Instructions.Length; i++)
76+
for (int i = 0; i < ((TransactionInfo)txMetaInfo.Transaction).Message.Instructions.Length; i++)
7777
{
7878
DecodedInstruction decodedInstruction = null;
79-
InstructionInfo instructionInfo = txMetaInfo.Transaction.Message.Instructions[i];
80-
string programKey = txMetaInfo.Transaction.Message.AccountKeys[instructionInfo.ProgramIdIndex];
79+
InstructionInfo instructionInfo = ((TransactionInfo)txMetaInfo.Transaction).Message.Instructions[i];
80+
string programKey = ((TransactionInfo)txMetaInfo.Transaction).Message.AccountKeys[instructionInfo.ProgramIdIndex];
8181
bool registered = InstructionDictionary.TryGetValue(programKey, out DecodeMethodType method);
8282

8383
if (!registered)
8484
{
8585
decodedInstruction = AddUnknownInstruction(
86-
instructionInfo, programKey, txMetaInfo.Transaction.Message.AccountKeys,
87-
txMetaInfo.Transaction.Message.Instructions[i].Accounts);
86+
instructionInfo, programKey, ((TransactionInfo)txMetaInfo.Transaction).Message.AccountKeys,
87+
((TransactionInfo)txMetaInfo.Transaction).Message.Instructions[i].Accounts);
8888
}
8989
else
9090
{
9191
decodedInstruction = method.Invoke(
9292
Encoders.Base58.DecodeData(instructionInfo.Data),
93-
txMetaInfo.Transaction.Message.AccountKeys.Select(a => new PublicKey(a)).ToList(),
93+
((TransactionInfo)txMetaInfo.Transaction).Message.AccountKeys.Select(a => new PublicKey(a)).ToList(),
9494
instructionInfo.Accounts.Select(instr => (byte)instr).ToArray());
9595
}
9696
if (txMetaInfo.Meta.InnerInstructions != null)
@@ -102,20 +102,20 @@ public static List<DecodedInstruction> DecodeInstructions(TransactionMetaInfo tx
102102
foreach (InstructionInfo innerInstructionInfo in innerInstruction.Instructions)
103103
{
104104
DecodedInstruction innerDecodedInstruction = null;
105-
programKey = txMetaInfo.Transaction.Message.AccountKeys[innerInstructionInfo.ProgramIdIndex];
105+
programKey = ((TransactionInfo)txMetaInfo.Transaction).Message.AccountKeys[innerInstructionInfo.ProgramIdIndex];
106106
registered = InstructionDictionary.TryGetValue(programKey, out method);
107107

108108
if (!registered)
109109
{
110110
innerDecodedInstruction = AddUnknownInstruction(
111-
innerInstructionInfo, programKey, txMetaInfo.Transaction.Message.AccountKeys,
112-
txMetaInfo.Transaction.Message.Instructions[i].Accounts);
111+
innerInstructionInfo, programKey, ((TransactionInfo)txMetaInfo.Transaction).Message.AccountKeys,
112+
((TransactionInfo)txMetaInfo.Transaction).Message.Instructions[i].Accounts);
113113
}
114114
else
115115
{
116116
innerDecodedInstruction = method.Invoke(
117117
Encoders.Base58.DecodeData(innerInstructionInfo.Data),
118-
txMetaInfo.Transaction.Message.AccountKeys.Select(a => new PublicKey(a)).ToList(),
118+
((TransactionInfo)txMetaInfo.Transaction).Message.AccountKeys.Select(a => new PublicKey(a)).ToList(),
119119
innerInstructionInfo.Accounts.Select(instr => (byte)instr).ToArray());
120120
}
121121
if (innerDecodedInstruction != null)

src/Solnet.Rpc/Models/RewardInfo.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace Solnet.Rpc.Models
1+
using System.Text.Json.Serialization;
2+
3+
namespace Solnet.Rpc.Models
24
{
35
/// <summary>
46
/// Represents the reward information related to a given account.
@@ -19,6 +21,8 @@ public class RewardInfo
1921
/// </summary>
2022
public ulong PostBalance { get; set; }
2123

24+
[JsonConverter(typeof(DynamicTypeConverter))]
25+
public object RewardType { get; set; }
2226
}
2327

2428
/// <summary>

src/Solnet.Rpc/Models/TransactionData.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class TransactionMetaInfo
4242
/// Transaction Version
4343
/// </summary>
4444
/// [JsonPropertyName("value")]
45-
[JsonConverter(typeof(VersionConverter))]
45+
[JsonConverter(typeof(DynamicTypeConverter))]
4646
public object Version { get; set; }
4747
}
4848
/// <summary>
@@ -104,7 +104,7 @@ public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOp
104104
/// <summary>
105105
/// Json Converter for handling string and integer version types
106106
/// </summary>
107-
public class VersionConverter : JsonConverter<object>
107+
public class DynamicTypeConverter : JsonConverter<object>
108108
{
109109

110110
/// <summary>

test/Solnet.Rpc.Test/SolanaRpcClientBlockTests.cs

+24-24
Original file line numberDiff line numberDiff line change
@@ -68,22 +68,22 @@ public void TestGetBlock()
6868
Assert.AreEqual(0, first.Meta.PostTokenBalances.Length);
6969
Assert.AreEqual(0, first.Meta.PreTokenBalances.Length);
7070

71-
Assert.AreEqual(1, first.Transaction.Signatures.Length);
72-
Assert.AreEqual("2Hh35eZPP1wZLYQ1HHv8PqGoRo73XirJeKFpBVc19msi6qeJHk3yUKqS1viRtqkdb545CerTWeywPFXxjKEhDWTK", first.Transaction.Signatures[0]);
71+
Assert.AreEqual(1, ((TransactionInfo)first.Transaction).Signatures.Length);
72+
Assert.AreEqual("2Hh35eZPP1wZLYQ1HHv8PqGoRo73XirJeKFpBVc19msi6qeJHk3yUKqS1viRtqkdb545CerTWeywPFXxjKEhDWTK", ((TransactionInfo)first.Transaction).Signatures[0]);
7373

74-
Assert.AreEqual(5, first.Transaction.Message.AccountKeys.Length);
75-
Assert.AreEqual("DjuMPGThkGdyk2vDvDDYjTFSyxzTumdapnDNbvVZbYQE", first.Transaction.Message.AccountKeys[0]);
74+
Assert.AreEqual(5,((TransactionInfo)first.Transaction).Message.AccountKeys.Length);
75+
Assert.AreEqual("DjuMPGThkGdyk2vDvDDYjTFSyxzTumdapnDNbvVZbYQE",((TransactionInfo)first.Transaction).Message.AccountKeys[0]);
7676

77-
Assert.AreEqual(0, first.Transaction.Message.Header.NumReadonlySignedAccounts);
78-
Assert.AreEqual(3, first.Transaction.Message.Header.NumReadonlyUnsignedAccounts);
79-
Assert.AreEqual(1, first.Transaction.Message.Header.NumRequiredSignatures);
77+
Assert.AreEqual(0,((TransactionInfo)first.Transaction).Message.Header.NumReadonlySignedAccounts);
78+
Assert.AreEqual(3,((TransactionInfo)first.Transaction).Message.Header.NumReadonlyUnsignedAccounts);
79+
Assert.AreEqual(1,((TransactionInfo)first.Transaction).Message.Header.NumRequiredSignatures);
8080

81-
Assert.AreEqual(1, first.Transaction.Message.Instructions.Length);
82-
Assert.AreEqual(4, first.Transaction.Message.Instructions[0].Accounts.Length);
83-
Assert.AreEqual("2ZjTR1vUs2pHXyTLxtFDhN2tsm2HbaH36cAxzJcwaXf8y5jdTESsGNBLFaxGuWENxLa2ZL3cX9foNJcWbRq", first.Transaction.Message.Instructions[0].Data);
84-
Assert.AreEqual(4, first.Transaction.Message.Instructions[0].ProgramIdIndex);
81+
Assert.AreEqual(1,((TransactionInfo)first.Transaction).Message.Instructions.Length);
82+
Assert.AreEqual(4,((TransactionInfo)first.Transaction).Message.Instructions[0].Accounts.Length);
83+
Assert.AreEqual("2ZjTR1vUs2pHXyTLxtFDhN2tsm2HbaH36cAxzJcwaXf8y5jdTESsGNBLFaxGuWENxLa2ZL3cX9foNJcWbRq",((TransactionInfo)first.Transaction).Message.Instructions[0].Data);
84+
Assert.AreEqual(4,((TransactionInfo)first.Transaction).Message.Instructions[0].ProgramIdIndex);
8585

86-
Assert.AreEqual("D8qh6AeX4KaTe6ZBpsZDdntTQUyPy7x6Xjp7NnEigCWH", first.Transaction.Message.RecentBlockhash);
86+
Assert.AreEqual("D8qh6AeX4KaTe6ZBpsZDdntTQUyPy7x6Xjp7NnEigCWH",((TransactionInfo)first.Transaction).Message.RecentBlockhash);
8787
FinishTest(messageHandlerMock, TestnetUri);
8888
}
8989

@@ -282,25 +282,25 @@ public void TestGetTransaction()
282282
Assert.AreEqual(0, first.Meta.PostTokenBalances.Length);
283283
Assert.AreEqual(0, first.Meta.PreTokenBalances.Length);
284284

285-
Assert.AreEqual(1, first.Transaction.Signatures.Length);
286-
Assert.AreEqual("5as3w4KMpY23MP5T1nkPVksjXjN7hnjHKqiDxRMxUNcw5XsCGtStayZib1kQdyR2D9w8dR11Ha9Xk38KP3kbAwM1", first.Transaction.Signatures[0]);
285+
Assert.AreEqual(1, ((TransactionInfo)first.Transaction).Signatures.Length);
286+
Assert.AreEqual("5as3w4KMpY23MP5T1nkPVksjXjN7hnjHKqiDxRMxUNcw5XsCGtStayZib1kQdyR2D9w8dR11Ha9Xk38KP3kbAwM1", ((TransactionInfo)first.Transaction).Signatures[0]);
287287

288-
Assert.AreEqual(5, first.Transaction.Message.AccountKeys.Length);
289-
Assert.AreEqual("EvVrzsxoj118sxxSTrcnc9u3fRdQfCc7d4gRzzX6TSqj", first.Transaction.Message.AccountKeys[0]);
288+
Assert.AreEqual(5, ((TransactionInfo)first.Transaction).Message.AccountKeys.Length);
289+
Assert.AreEqual("EvVrzsxoj118sxxSTrcnc9u3fRdQfCc7d4gRzzX6TSqj",((TransactionInfo)first.Transaction).Message.AccountKeys[0]);
290290

291-
Assert.AreEqual(0, first.Transaction.Message.Header.NumReadonlySignedAccounts);
292-
Assert.AreEqual(3, first.Transaction.Message.Header.NumReadonlyUnsignedAccounts);
293-
Assert.AreEqual(1, first.Transaction.Message.Header.NumRequiredSignatures);
291+
Assert.AreEqual(0, ((TransactionInfo)first.Transaction).Message.Header.NumReadonlySignedAccounts);
292+
Assert.AreEqual(3, ((TransactionInfo)first.Transaction).Message.Header.NumReadonlyUnsignedAccounts);
293+
Assert.AreEqual(1, ((TransactionInfo)first.Transaction).Message.Header.NumRequiredSignatures);
294294

295-
Assert.AreEqual(1, first.Transaction.Message.Instructions.Length);
296-
Assert.AreEqual(4, first.Transaction.Message.Instructions[0].Accounts.Length);
295+
Assert.AreEqual(1, ((TransactionInfo)first.Transaction).Message.Instructions.Length);
296+
Assert.AreEqual(4, ((TransactionInfo)first.Transaction).Message.Instructions[0].Accounts.Length);
297297
Assert.AreEqual("2kr3BYaDkghC7rvHsQYnBNoB4dhXrUmzgYMM4kbHSG7ALa3qsMPxfC9cJTFDKyJaC8VYSjrey9pvyRivtESUJrC3qzr89pvS2o6MQ"
298298
+ "hyRVxmh3raQStxFFYwZ6WyKFNoQXvcchBwy8uQGfhhUqzuLNREwRmZ5U2VgTjFWX8Vikqya6iyzvALQNZEvqz7ZoGEyRtJ6AzNyWbkUyEo63rZ5w3wnxmhr3Uood",
299-
first.Transaction.Message.Instructions[0].Data);
299+
((TransactionInfo)first.Transaction).Message.Instructions[0].Data);
300300

301-
Assert.AreEqual(4, first.Transaction.Message.Instructions[0].ProgramIdIndex);
301+
Assert.AreEqual(4, ((TransactionInfo)first.Transaction).Message.Instructions[0].ProgramIdIndex);
302302

303-
Assert.AreEqual("6XGYfEJ5CGGBA5E8E7Gw4ToyDLDNNAyUCb7CJj1rLk21", first.Transaction.Message.RecentBlockhash);
303+
Assert.AreEqual("6XGYfEJ5CGGBA5E8E7Gw4ToyDLDNNAyUCb7CJj1rLk21",((TransactionInfo)first.Transaction).Message.RecentBlockhash);
304304
FinishTest(messageHandlerMock, TestnetUri);
305305
}
306306

0 commit comments

Comments
 (0)