forked from planetarium/Corvette
-
Notifications
You must be signed in to change notification settings - Fork 0
/
EventMessage.ts
66 lines (62 loc) · 1.24 KB
/
EventMessage.ts
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
import { decode, encode } from "bencodex";
export type EventMessage = {
address: Uint8Array;
sigHash: Uint8Array;
abi: string;
topics: Uint8Array[];
data: Uint8Array;
logIndex: bigint;
blockNumber: bigint;
blockHash: Uint8Array;
txHash: Uint8Array;
};
export type MarshaledEventMessage = [
EventMessage["address"],
EventMessage["sigHash"],
EventMessage["abi"],
EventMessage["topics"],
EventMessage["data"],
EventMessage["logIndex"],
EventMessage["blockNumber"],
EventMessage["blockHash"],
EventMessage["txHash"],
];
export function serializeEventMessage(msg: EventMessage): Uint8Array {
return encode(
[
msg.address,
msg.sigHash,
msg.abi,
msg.topics,
msg.data,
msg.logIndex,
msg.blockNumber,
msg.blockHash,
msg.txHash,
] satisfies MarshaledEventMessage,
);
}
export function deserializeEventMessage(msgData: Uint8Array): EventMessage {
const [
address,
sigHash,
abi,
topics,
data,
logIndex,
blockNumber,
blockHash,
txHash,
] = decode(msgData) as MarshaledEventMessage;
return {
address,
sigHash,
abi,
topics,
data,
logIndex,
blockNumber,
blockHash,
txHash,
} satisfies EventMessage;
}