Repository navigation
Expand file tree
/
Copy pathProgram.cs
More file actions
106 lines (88 loc) · 3.45 KB
/
Copy pathProgram.cs
File metadata and controls
106 lines (88 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Threading.Tasks;
using Casper.Network.SDK;
using Casper.Network.SDK.CES;
using Casper.Network.SDK.SSE;
namespace Casper.NET.SDK.Examples
{
public static class CESParserExample
{
private static string nodeAddress = "http://127.0.0.1:11101/rpc";
private static string sseHost = "127.0.0.1";
private static int ssePort = 18101;
private static NetCasperClient casperSdk;
private static IReadOnlyList<CESContractSchema> watchedSchemas;
public static void ListenEvents(int startFrom)
{
var sse = new ServerEventsClient(sseHost, ssePort);
sse.AddEventCallback(
EventType.TransactionProcessed,
"ces-parser-cb",
(SSEvent evt) =>
{
try
{
var transaction = evt.Parse<TransactionProcessed>();
var events = CESParser.GetEvents(
transaction.ExecutionResult.Effect,
watchedSchemas);
Console.WriteLine("TransactionProcessed: " + transaction.TransactionHash);
if (events.Count == 0)
return;
foreach (var parsedEvent in events)
{
Console.WriteLine("CES event:");
Console.WriteLine(PrettyPrintEvent(parsedEvent));
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
},
startFrom: startFrom);
sse.StartListening();
Console.WriteLine("Listening to TransactionProcessed events.");
Console.WriteLine("Press Enter to stop listening.");
Console.ReadLine();
Console.WriteLine("Terminating...");
sse.StopListening().Wait();
Console.WriteLine("Terminated");
}
public static async Task Main(string[] args)
{
var contractHash = args.Length > 0
? args[0]
: "hash-1262d06e53125ea098187fb4d1d5b10a7afed48e5e5eef182ed992fc5b100349";
try
{
casperSdk = new NetCasperClient(nodeAddress);
Console.WriteLine("Loading CES schema for contract: " + contractHash);
var schema = await CESContractSchema.LoadAsync(casperSdk, contractHash);
watchedSchemas = new List<CESContractSchema> { schema };
Console.WriteLine("Resolved contract hash : " + schema.ContractHash);
Console.WriteLine("Schema events URef : " + schema.EventsURef);
Console.WriteLine("Event types:");
foreach (var eventSchema in schema.Events)
{
Console.WriteLine("- " + eventSchema.Key);
}
ListenEvents(0);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
private static string PrettyPrintEvent(CESEvent evt)
{
var options = new JsonSerializerOptions()
{
WriteIndented = true,
};
return JsonSerializer.Serialize(evt, options);
}
}
}