@voltr/vault-sdk 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/extensions/events.d.ts +33 -0
- package/dist/extensions/events.d.ts.map +1 -0
- package/dist/extensions/events.js +203 -0
- package/dist/extensions/events.js.map +1 -0
- package/dist/extensions/index.d.ts +1 -0
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +1 -0
- package/dist/extensions/index.js.map +1 -1
- package/package.json +1 -1
- package/src/extensions/events.ts +328 -0
- package/src/extensions/index.ts +1 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type AcceptProtocolAdminEvent, type AcceptVaultAdminEvent, type AddAdaptorEvent, type CalibrateHighWaterMarkEvent, type CalibrateHighWaterMarkUnsafeEvent, type CancelRequestWithdrawVaultEvent, type CloseStrategyEvent, type DepositStrategyEvent, type DepositVaultEvent, type DirectWithdrawStrategyEvent, type HarvestFeeEvent, type InitializeDirectWithdrawStrategyEvent, type InitializeStrategyEvent, type InitializeVaultEvent, type InitProtocolEvent, type InstantWithdrawStrategyEvent, type InstantWithdrawVaultEvent, type RemoveAdaptorEvent, type RequestWithdrawVaultEvent, type UpdateProtocolEvent, type UpdateVaultConfigEvent, type UpdateVaultEvent, type UpdateVaultProtocolFeeEvent, type WithdrawStrategyEvent, type WithdrawVaultEvent } from "../generated/types";
|
|
2
|
+
/**
|
|
3
|
+
* Discriminated union of every Voltr Vault event Codama can decode. The first
|
|
4
|
+
* 8 bytes of each Anchor `emit!` payload identify the variant via
|
|
5
|
+
* `sha256("event:<EventName>")[..8]`; the remainder is the borsh-encoded
|
|
6
|
+
* payload for the named struct.
|
|
7
|
+
*/
|
|
8
|
+
export type ParsedVoltrEvent = ParsedEventOf<"AcceptProtocolAdminEvent", AcceptProtocolAdminEvent> | ParsedEventOf<"AcceptVaultAdminEvent", AcceptVaultAdminEvent> | ParsedEventOf<"AddAdaptorEvent", AddAdaptorEvent> | ParsedEventOf<"CalibrateHighWaterMarkEvent", CalibrateHighWaterMarkEvent> | ParsedEventOf<"CalibrateHighWaterMarkUnsafeEvent", CalibrateHighWaterMarkUnsafeEvent> | ParsedEventOf<"CancelRequestWithdrawVaultEvent", CancelRequestWithdrawVaultEvent> | ParsedEventOf<"CloseStrategyEvent", CloseStrategyEvent> | ParsedEventOf<"DepositStrategyEvent", DepositStrategyEvent> | ParsedEventOf<"DepositVaultEvent", DepositVaultEvent> | ParsedEventOf<"DirectWithdrawStrategyEvent", DirectWithdrawStrategyEvent> | ParsedEventOf<"HarvestFeeEvent", HarvestFeeEvent> | ParsedEventOf<"InitProtocolEvent", InitProtocolEvent> | ParsedEventOf<"InitializeDirectWithdrawStrategyEvent", InitializeDirectWithdrawStrategyEvent> | ParsedEventOf<"InitializeStrategyEvent", InitializeStrategyEvent> | ParsedEventOf<"InitializeVaultEvent", InitializeVaultEvent> | ParsedEventOf<"InstantWithdrawStrategyEvent", InstantWithdrawStrategyEvent> | ParsedEventOf<"InstantWithdrawVaultEvent", InstantWithdrawVaultEvent> | ParsedEventOf<"RemoveAdaptorEvent", RemoveAdaptorEvent> | ParsedEventOf<"RequestWithdrawVaultEvent", RequestWithdrawVaultEvent> | ParsedEventOf<"UpdateProtocolEvent", UpdateProtocolEvent> | ParsedEventOf<"UpdateVaultConfigEvent", UpdateVaultConfigEvent> | ParsedEventOf<"UpdateVaultEvent", UpdateVaultEvent> | ParsedEventOf<"UpdateVaultProtocolFeeEvent", UpdateVaultProtocolFeeEvent> | ParsedEventOf<"WithdrawStrategyEvent", WithdrawStrategyEvent> | ParsedEventOf<"WithdrawVaultEvent", WithdrawVaultEvent>;
|
|
9
|
+
type ParsedEventOf<Name extends string, Payload> = {
|
|
10
|
+
name: Name;
|
|
11
|
+
payload: Payload;
|
|
12
|
+
/** Top-level instruction index this event was emitted under. */
|
|
13
|
+
ixIndex: number;
|
|
14
|
+
/** Sequential index of this event within the transaction (0-based). */
|
|
15
|
+
eventIndex: number;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Minimal structural shape of a transaction `meta` object — narrow enough
|
|
19
|
+
* that callers can pass `meta` from any RPC client (web3.js legacy,
|
|
20
|
+
* @solana/kit, or a hand-rolled fixture) without conversion.
|
|
21
|
+
*/
|
|
22
|
+
export type TransactionMetaForEvents = {
|
|
23
|
+
logMessages?: readonly string[] | null;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Walk a transaction's `meta.logMessages`, decode every Voltr event emitted
|
|
27
|
+
* via Anchor's `emit!`, and return them in emission order. Lines whose
|
|
28
|
+
* discriminator doesn't belong to a Voltr event are skipped, so logs from
|
|
29
|
+
* other programs in the same tx are safe to pass through.
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseTransactionEvents(meta: TransactionMetaForEvents | null | undefined): ParsedVoltrEvent[];
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/extensions/events.ts"],"names":[],"mappings":"AAEA,OAAO,EA0BL,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,+BAA+B,EACpC,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,eAAe,EACpB,KAAK,qCAAqC,EAC1C,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAE5B;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GACxB,aAAa,CAAC,0BAA0B,EAAE,wBAAwB,CAAC,GACnE,aAAa,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,GAC7D,aAAa,CAAC,iBAAiB,EAAE,eAAe,CAAC,GACjD,aAAa,CAAC,6BAA6B,EAAE,2BAA2B,CAAC,GACzE,aAAa,CACX,mCAAmC,EACnC,iCAAiC,CAClC,GACD,aAAa,CACX,iCAAiC,EACjC,+BAA+B,CAChC,GACD,aAAa,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,GACvD,aAAa,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,GAC3D,aAAa,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,GACrD,aAAa,CAAC,6BAA6B,EAAE,2BAA2B,CAAC,GACzE,aAAa,CAAC,iBAAiB,EAAE,eAAe,CAAC,GACjD,aAAa,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,GACrD,aAAa,CACX,uCAAuC,EACvC,qCAAqC,CACtC,GACD,aAAa,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,GACjE,aAAa,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,GAC3D,aAAa,CAAC,8BAA8B,EAAE,4BAA4B,CAAC,GAC3E,aAAa,CAAC,2BAA2B,EAAE,yBAAyB,CAAC,GACrE,aAAa,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,GACvD,aAAa,CAAC,2BAA2B,EAAE,yBAAyB,CAAC,GACrE,aAAa,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,GACzD,aAAa,CAAC,wBAAwB,EAAE,sBAAsB,CAAC,GAC/D,aAAa,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,GACnD,aAAa,CAAC,6BAA6B,EAAE,2BAA2B,CAAC,GACzE,aAAa,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,GAC7D,aAAa,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;AAE5D,KAAK,aAAa,CAAC,IAAI,SAAS,MAAM,EAAE,OAAO,IAAI;IACjD,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CACxC,CAAC;AAwJF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,GAChD,gBAAgB,EAAE,CA6CpB"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseTransactionEvents = parseTransactionEvents;
|
|
4
|
+
const kit_1 = require("@solana/kit");
|
|
5
|
+
const types_1 = require("../generated/types");
|
|
6
|
+
// Discriminators are sha256("event:<EventName>")[..8] — stable, fixed by the
|
|
7
|
+
// Anchor IDL. Hardcoded so this module has no runtime hashing dependency.
|
|
8
|
+
const EVENT_TABLE = [
|
|
9
|
+
[
|
|
10
|
+
"AcceptProtocolAdminEvent",
|
|
11
|
+
[0xc4, 0x5d, 0xad, 0xfd, 0xaf, 0x8c, 0x79, 0x20],
|
|
12
|
+
(0, types_1.getAcceptProtocolAdminEventDecoder)(),
|
|
13
|
+
],
|
|
14
|
+
[
|
|
15
|
+
"AcceptVaultAdminEvent",
|
|
16
|
+
[0x8c, 0xff, 0x1d, 0x44, 0x10, 0xc2, 0xfb, 0x23],
|
|
17
|
+
(0, types_1.getAcceptVaultAdminEventDecoder)(),
|
|
18
|
+
],
|
|
19
|
+
[
|
|
20
|
+
"AddAdaptorEvent",
|
|
21
|
+
[0x18, 0xb5, 0xc9, 0x94, 0xf0, 0xb7, 0xeb, 0x0c],
|
|
22
|
+
(0, types_1.getAddAdaptorEventDecoder)(),
|
|
23
|
+
],
|
|
24
|
+
[
|
|
25
|
+
"CalibrateHighWaterMarkEvent",
|
|
26
|
+
[0x8c, 0x4c, 0xc3, 0x90, 0xb4, 0xb2, 0x00, 0x9b],
|
|
27
|
+
(0, types_1.getCalibrateHighWaterMarkEventDecoder)(),
|
|
28
|
+
],
|
|
29
|
+
[
|
|
30
|
+
"CalibrateHighWaterMarkUnsafeEvent",
|
|
31
|
+
[0xcd, 0x4c, 0xa9, 0xff, 0x25, 0xe4, 0x41, 0x82],
|
|
32
|
+
(0, types_1.getCalibrateHighWaterMarkUnsafeEventDecoder)(),
|
|
33
|
+
],
|
|
34
|
+
[
|
|
35
|
+
"CancelRequestWithdrawVaultEvent",
|
|
36
|
+
[0x2e, 0xa5, 0x18, 0x72, 0x01, 0x50, 0xcd, 0x88],
|
|
37
|
+
(0, types_1.getCancelRequestWithdrawVaultEventDecoder)(),
|
|
38
|
+
],
|
|
39
|
+
[
|
|
40
|
+
"CloseStrategyEvent",
|
|
41
|
+
[0xd5, 0x5f, 0xdb, 0xa1, 0x11, 0xd0, 0x5d, 0xff],
|
|
42
|
+
(0, types_1.getCloseStrategyEventDecoder)(),
|
|
43
|
+
],
|
|
44
|
+
[
|
|
45
|
+
"DepositStrategyEvent",
|
|
46
|
+
[0xca, 0xc9, 0x76, 0x31, 0x1d, 0xb4, 0x74, 0xaa],
|
|
47
|
+
(0, types_1.getDepositStrategyEventDecoder)(),
|
|
48
|
+
],
|
|
49
|
+
[
|
|
50
|
+
"DepositVaultEvent",
|
|
51
|
+
[0x0b, 0x0f, 0x07, 0x5c, 0x96, 0x64, 0xa5, 0xe8],
|
|
52
|
+
(0, types_1.getDepositVaultEventDecoder)(),
|
|
53
|
+
],
|
|
54
|
+
[
|
|
55
|
+
"DirectWithdrawStrategyEvent",
|
|
56
|
+
[0x71, 0xca, 0x97, 0x7c, 0x89, 0xff, 0x99, 0x65],
|
|
57
|
+
(0, types_1.getDirectWithdrawStrategyEventDecoder)(),
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
"HarvestFeeEvent",
|
|
61
|
+
[0x45, 0x30, 0xc0, 0x17, 0xe8, 0x16, 0x17, 0x1e],
|
|
62
|
+
(0, types_1.getHarvestFeeEventDecoder)(),
|
|
63
|
+
],
|
|
64
|
+
[
|
|
65
|
+
"InitProtocolEvent",
|
|
66
|
+
[0x0d, 0x51, 0xb7, 0x84, 0x58, 0x2b, 0xca, 0xd5],
|
|
67
|
+
(0, types_1.getInitProtocolEventDecoder)(),
|
|
68
|
+
],
|
|
69
|
+
[
|
|
70
|
+
"InitializeDirectWithdrawStrategyEvent",
|
|
71
|
+
[0xa9, 0x16, 0x39, 0x08, 0x0f, 0x49, 0xff, 0x73],
|
|
72
|
+
(0, types_1.getInitializeDirectWithdrawStrategyEventDecoder)(),
|
|
73
|
+
],
|
|
74
|
+
[
|
|
75
|
+
"InitializeStrategyEvent",
|
|
76
|
+
[0x1e, 0xe9, 0xd3, 0xf9, 0x53, 0xbc, 0xea, 0x98],
|
|
77
|
+
(0, types_1.getInitializeStrategyEventDecoder)(),
|
|
78
|
+
],
|
|
79
|
+
[
|
|
80
|
+
"InitializeVaultEvent",
|
|
81
|
+
[0xb3, 0x4b, 0x32, 0xa1, 0xbf, 0x1c, 0xf5, 0x6b],
|
|
82
|
+
(0, types_1.getInitializeVaultEventDecoder)(),
|
|
83
|
+
],
|
|
84
|
+
[
|
|
85
|
+
"InstantWithdrawStrategyEvent",
|
|
86
|
+
[0xdd, 0x17, 0x0c, 0xd7, 0x64, 0x2a, 0x61, 0x95],
|
|
87
|
+
(0, types_1.getInstantWithdrawStrategyEventDecoder)(),
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
"InstantWithdrawVaultEvent",
|
|
91
|
+
[0x2e, 0x39, 0x3c, 0x14, 0x06, 0xa0, 0xa4, 0xf7],
|
|
92
|
+
(0, types_1.getInstantWithdrawVaultEventDecoder)(),
|
|
93
|
+
],
|
|
94
|
+
[
|
|
95
|
+
"RemoveAdaptorEvent",
|
|
96
|
+
[0x9b, 0xb2, 0x02, 0x1d, 0xf5, 0x56, 0xf6, 0x99],
|
|
97
|
+
(0, types_1.getRemoveAdaptorEventDecoder)(),
|
|
98
|
+
],
|
|
99
|
+
[
|
|
100
|
+
"RequestWithdrawVaultEvent",
|
|
101
|
+
[0x3b, 0x5e, 0x1a, 0x26, 0x2f, 0x83, 0x9e, 0xa2],
|
|
102
|
+
(0, types_1.getRequestWithdrawVaultEventDecoder)(),
|
|
103
|
+
],
|
|
104
|
+
[
|
|
105
|
+
"UpdateProtocolEvent",
|
|
106
|
+
[0x0e, 0xe3, 0xcc, 0xd9, 0x3e, 0x2e, 0xf1, 0xed],
|
|
107
|
+
(0, types_1.getUpdateProtocolEventDecoder)(),
|
|
108
|
+
],
|
|
109
|
+
[
|
|
110
|
+
"UpdateVaultConfigEvent",
|
|
111
|
+
[0x3d, 0x5c, 0xce, 0x97, 0xa2, 0x28, 0xed, 0x67],
|
|
112
|
+
(0, types_1.getUpdateVaultConfigEventDecoder)(),
|
|
113
|
+
],
|
|
114
|
+
[
|
|
115
|
+
"UpdateVaultEvent",
|
|
116
|
+
[0x7b, 0x1f, 0x1b, 0xbd, 0x66, 0x01, 0x79, 0x39],
|
|
117
|
+
(0, types_1.getUpdateVaultEventDecoder)(),
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
"UpdateVaultProtocolFeeEvent",
|
|
121
|
+
[0xac, 0x01, 0xad, 0xe6, 0xe4, 0x3d, 0x4d, 0xf4],
|
|
122
|
+
(0, types_1.getUpdateVaultProtocolFeeEventDecoder)(),
|
|
123
|
+
],
|
|
124
|
+
[
|
|
125
|
+
"WithdrawStrategyEvent",
|
|
126
|
+
[0x70, 0x2d, 0x10, 0xac, 0xaa, 0x21, 0x16, 0xd4],
|
|
127
|
+
(0, types_1.getWithdrawStrategyEventDecoder)(),
|
|
128
|
+
],
|
|
129
|
+
[
|
|
130
|
+
"WithdrawVaultEvent",
|
|
131
|
+
[0xc4, 0x7b, 0x4f, 0xd7, 0x04, 0xd6, 0x14, 0xc5],
|
|
132
|
+
(0, types_1.getWithdrawVaultEventDecoder)(),
|
|
133
|
+
],
|
|
134
|
+
];
|
|
135
|
+
const DISPATCH = new Map(EVENT_TABLE.map(([name, disc, decoder]) => [
|
|
136
|
+
discriminatorKey(disc),
|
|
137
|
+
{ name, decoder },
|
|
138
|
+
]));
|
|
139
|
+
const PROGRAM_DATA_PREFIX = "Program data: ";
|
|
140
|
+
// Top-level instructions log "Program <id> invoke [1]" — depth >1 is a CPI.
|
|
141
|
+
const TOP_LEVEL_INVOKE_RE = /^Program \S+ invoke \[1\]$/;
|
|
142
|
+
const base64Encoder = (0, kit_1.getBase64Encoder)();
|
|
143
|
+
/**
|
|
144
|
+
* Walk a transaction's `meta.logMessages`, decode every Voltr event emitted
|
|
145
|
+
* via Anchor's `emit!`, and return them in emission order. Lines whose
|
|
146
|
+
* discriminator doesn't belong to a Voltr event are skipped, so logs from
|
|
147
|
+
* other programs in the same tx are safe to pass through.
|
|
148
|
+
*/
|
|
149
|
+
function parseTransactionEvents(meta) {
|
|
150
|
+
const logs = meta?.logMessages;
|
|
151
|
+
if (!logs || logs.length === 0)
|
|
152
|
+
return [];
|
|
153
|
+
const out = [];
|
|
154
|
+
let ixIndex = -1;
|
|
155
|
+
let eventIndex = 0;
|
|
156
|
+
for (const line of logs) {
|
|
157
|
+
if (TOP_LEVEL_INVOKE_RE.test(line)) {
|
|
158
|
+
ixIndex++;
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (!line.startsWith(PROGRAM_DATA_PREFIX))
|
|
162
|
+
continue;
|
|
163
|
+
const b64 = line.slice(PROGRAM_DATA_PREFIX.length);
|
|
164
|
+
let bytes;
|
|
165
|
+
try {
|
|
166
|
+
bytes = base64Encoder.encode(b64);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
if (bytes.length < 8)
|
|
172
|
+
continue;
|
|
173
|
+
const entry = DISPATCH.get(discriminatorKey(bytes.subarray(0, 8)));
|
|
174
|
+
if (!entry)
|
|
175
|
+
continue;
|
|
176
|
+
// The discriminator is 8 bytes of sha256, so spurious matches from other
|
|
177
|
+
// programs are unlikely but possible — and corrupt fixtures happen too.
|
|
178
|
+
// Skip the line rather than aborting the whole parse if borsh decode fails.
|
|
179
|
+
let payload;
|
|
180
|
+
try {
|
|
181
|
+
payload = entry.decoder.decode(bytes, 8);
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
out.push({
|
|
187
|
+
name: entry.name,
|
|
188
|
+
payload,
|
|
189
|
+
ixIndex: ixIndex < 0 ? 0 : ixIndex,
|
|
190
|
+
eventIndex: eventIndex++,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
return out;
|
|
194
|
+
}
|
|
195
|
+
function discriminatorKey(disc) {
|
|
196
|
+
let s = "";
|
|
197
|
+
for (let i = 0; i < disc.length; i++) {
|
|
198
|
+
const b = disc[i] & 0xff;
|
|
199
|
+
s += (b < 16 ? "0" : "") + b.toString(16);
|
|
200
|
+
}
|
|
201
|
+
return s;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/extensions/events.ts"],"names":[],"mappings":";;AA+QA,wDA+CC;AA9TD,qCAA6D;AAE7D,8CAmD4B;AAmE5B,6EAA6E;AAC7E,0EAA0E;AAC1E,MAAM,WAAW,GAEb;IACF;QACE,0BAA0B;QAC1B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,0CAAkC,GAAE;KACrC;IACD;QACE,uBAAuB;QACvB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,uCAA+B,GAAE;KAClC;IACD;QACE,iBAAiB;QACjB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,iCAAyB,GAAE;KAC5B;IACD;QACE,6BAA6B;QAC7B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,6CAAqC,GAAE;KACxC;IACD;QACE,mCAAmC;QACnC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,mDAA2C,GAAE;KAC9C;IACD;QACE,iCAAiC;QACjC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,iDAAyC,GAAE;KAC5C;IACD;QACE,oBAAoB;QACpB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,oCAA4B,GAAE;KAC/B;IACD;QACE,sBAAsB;QACtB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,sCAA8B,GAAE;KACjC;IACD;QACE,mBAAmB;QACnB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,mCAA2B,GAAE;KAC9B;IACD;QACE,6BAA6B;QAC7B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,6CAAqC,GAAE;KACxC;IACD;QACE,iBAAiB;QACjB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,iCAAyB,GAAE;KAC5B;IACD;QACE,mBAAmB;QACnB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,mCAA2B,GAAE;KAC9B;IACD;QACE,uCAAuC;QACvC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,uDAA+C,GAAE;KAClD;IACD;QACE,yBAAyB;QACzB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,yCAAiC,GAAE;KACpC;IACD;QACE,sBAAsB;QACtB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,sCAA8B,GAAE;KACjC;IACD;QACE,8BAA8B;QAC9B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,8CAAsC,GAAE;KACzC;IACD;QACE,2BAA2B;QAC3B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,2CAAmC,GAAE;KACtC;IACD;QACE,oBAAoB;QACpB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,oCAA4B,GAAE;KAC/B;IACD;QACE,2BAA2B;QAC3B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,2CAAmC,GAAE;KACtC;IACD;QACE,qBAAqB;QACrB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,qCAA6B,GAAE;KAChC;IACD;QACE,wBAAwB;QACxB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,wCAAgC,GAAE;KACnC;IACD;QACE,kBAAkB;QAClB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,kCAA0B,GAAE;KAC7B;IACD;QACE,6BAA6B;QAC7B,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,6CAAqC,GAAE;KACxC;IACD;QACE,uBAAuB;QACvB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,uCAA+B,GAAE;KAClC;IACD;QACE,oBAAoB;QACpB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAChD,IAAA,oCAA4B,GAAE;KAC/B;CACF,CAAC;AAEF,MAAM,QAAQ,GAAuC,IAAI,GAAG,CAC1D,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IACzC,gBAAgB,CAAC,IAAI,CAAC;IACtB,EAAE,IAAI,EAAE,OAAO,EAAE;CAClB,CAAC,CACH,CAAC;AAEF,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAC7C,4EAA4E;AAC5E,MAAM,mBAAmB,GAAG,4BAA4B,CAAC;AAEzD,MAAM,aAAa,GAAG,IAAA,sBAAgB,GAAE,CAAC;AAEzC;;;;;GAKG;AACH,SAAgB,sBAAsB,CACpC,IAAiD;IAEjD,MAAM,IAAI,GAAG,IAAI,EAAE,WAAW,CAAC;IAC/B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1C,MAAM,GAAG,GAAuB,EAAE,CAAC;IACnC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IACjB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;YAAE,SAAS;QAEpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,KAAiB,CAAC;QACtB,IAAI,CAAC;YACH,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAe,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAE/B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,yEAAyE;QACzE,wEAAwE;QACxE,4EAA4E;QAC5E,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO;YACP,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;YAClC,UAAU,EAAE,UAAU,EAAE;SACL,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAuB;IAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACzB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,OAAO,CAAC;AACtB,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,OAAO,CAAC;AACtB,cAAc,eAAe,CAAC"}
|
package/dist/extensions/index.js
CHANGED
|
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./batchFetchers"), exports);
|
|
18
18
|
__exportStar(require("./decimal"), exports);
|
|
19
|
+
__exportStar(require("./events"), exports);
|
|
19
20
|
__exportStar(require("./fees"), exports);
|
|
20
21
|
__exportStar(require("./lpEconomics"), exports);
|
|
21
22
|
__exportStar(require("./math"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,4CAA0B;AAC1B,yCAAuB;AACvB,gDAA8B;AAC9B,yCAAuB;AACvB,gDAA8B;AAC9B,6CAA2B;AAC3B,wCAAsB;AACtB,gDAA8B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,4CAA0B;AAC1B,2CAAyB;AACzB,yCAAuB;AACvB,gDAA8B;AAC9B,yCAAuB;AACvB,gDAA8B;AAC9B,6CAA2B;AAC3B,wCAAsB;AACtB,gDAA8B"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { getBase64Encoder, type Decoder } from "@solana/kit";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
getAcceptProtocolAdminEventDecoder,
|
|
5
|
+
getAcceptVaultAdminEventDecoder,
|
|
6
|
+
getAddAdaptorEventDecoder,
|
|
7
|
+
getCalibrateHighWaterMarkEventDecoder,
|
|
8
|
+
getCalibrateHighWaterMarkUnsafeEventDecoder,
|
|
9
|
+
getCancelRequestWithdrawVaultEventDecoder,
|
|
10
|
+
getCloseStrategyEventDecoder,
|
|
11
|
+
getDepositStrategyEventDecoder,
|
|
12
|
+
getDepositVaultEventDecoder,
|
|
13
|
+
getDirectWithdrawStrategyEventDecoder,
|
|
14
|
+
getHarvestFeeEventDecoder,
|
|
15
|
+
getInitializeDirectWithdrawStrategyEventDecoder,
|
|
16
|
+
getInitializeStrategyEventDecoder,
|
|
17
|
+
getInitializeVaultEventDecoder,
|
|
18
|
+
getInitProtocolEventDecoder,
|
|
19
|
+
getInstantWithdrawStrategyEventDecoder,
|
|
20
|
+
getInstantWithdrawVaultEventDecoder,
|
|
21
|
+
getRemoveAdaptorEventDecoder,
|
|
22
|
+
getRequestWithdrawVaultEventDecoder,
|
|
23
|
+
getUpdateProtocolEventDecoder,
|
|
24
|
+
getUpdateVaultConfigEventDecoder,
|
|
25
|
+
getUpdateVaultEventDecoder,
|
|
26
|
+
getUpdateVaultProtocolFeeEventDecoder,
|
|
27
|
+
getWithdrawStrategyEventDecoder,
|
|
28
|
+
getWithdrawVaultEventDecoder,
|
|
29
|
+
type AcceptProtocolAdminEvent,
|
|
30
|
+
type AcceptVaultAdminEvent,
|
|
31
|
+
type AddAdaptorEvent,
|
|
32
|
+
type CalibrateHighWaterMarkEvent,
|
|
33
|
+
type CalibrateHighWaterMarkUnsafeEvent,
|
|
34
|
+
type CancelRequestWithdrawVaultEvent,
|
|
35
|
+
type CloseStrategyEvent,
|
|
36
|
+
type DepositStrategyEvent,
|
|
37
|
+
type DepositVaultEvent,
|
|
38
|
+
type DirectWithdrawStrategyEvent,
|
|
39
|
+
type HarvestFeeEvent,
|
|
40
|
+
type InitializeDirectWithdrawStrategyEvent,
|
|
41
|
+
type InitializeStrategyEvent,
|
|
42
|
+
type InitializeVaultEvent,
|
|
43
|
+
type InitProtocolEvent,
|
|
44
|
+
type InstantWithdrawStrategyEvent,
|
|
45
|
+
type InstantWithdrawVaultEvent,
|
|
46
|
+
type RemoveAdaptorEvent,
|
|
47
|
+
type RequestWithdrawVaultEvent,
|
|
48
|
+
type UpdateProtocolEvent,
|
|
49
|
+
type UpdateVaultConfigEvent,
|
|
50
|
+
type UpdateVaultEvent,
|
|
51
|
+
type UpdateVaultProtocolFeeEvent,
|
|
52
|
+
type WithdrawStrategyEvent,
|
|
53
|
+
type WithdrawVaultEvent,
|
|
54
|
+
} from "../generated/types";
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Discriminated union of every Voltr Vault event Codama can decode. The first
|
|
58
|
+
* 8 bytes of each Anchor `emit!` payload identify the variant via
|
|
59
|
+
* `sha256("event:<EventName>")[..8]`; the remainder is the borsh-encoded
|
|
60
|
+
* payload for the named struct.
|
|
61
|
+
*/
|
|
62
|
+
export type ParsedVoltrEvent =
|
|
63
|
+
| ParsedEventOf<"AcceptProtocolAdminEvent", AcceptProtocolAdminEvent>
|
|
64
|
+
| ParsedEventOf<"AcceptVaultAdminEvent", AcceptVaultAdminEvent>
|
|
65
|
+
| ParsedEventOf<"AddAdaptorEvent", AddAdaptorEvent>
|
|
66
|
+
| ParsedEventOf<"CalibrateHighWaterMarkEvent", CalibrateHighWaterMarkEvent>
|
|
67
|
+
| ParsedEventOf<
|
|
68
|
+
"CalibrateHighWaterMarkUnsafeEvent",
|
|
69
|
+
CalibrateHighWaterMarkUnsafeEvent
|
|
70
|
+
>
|
|
71
|
+
| ParsedEventOf<
|
|
72
|
+
"CancelRequestWithdrawVaultEvent",
|
|
73
|
+
CancelRequestWithdrawVaultEvent
|
|
74
|
+
>
|
|
75
|
+
| ParsedEventOf<"CloseStrategyEvent", CloseStrategyEvent>
|
|
76
|
+
| ParsedEventOf<"DepositStrategyEvent", DepositStrategyEvent>
|
|
77
|
+
| ParsedEventOf<"DepositVaultEvent", DepositVaultEvent>
|
|
78
|
+
| ParsedEventOf<"DirectWithdrawStrategyEvent", DirectWithdrawStrategyEvent>
|
|
79
|
+
| ParsedEventOf<"HarvestFeeEvent", HarvestFeeEvent>
|
|
80
|
+
| ParsedEventOf<"InitProtocolEvent", InitProtocolEvent>
|
|
81
|
+
| ParsedEventOf<
|
|
82
|
+
"InitializeDirectWithdrawStrategyEvent",
|
|
83
|
+
InitializeDirectWithdrawStrategyEvent
|
|
84
|
+
>
|
|
85
|
+
| ParsedEventOf<"InitializeStrategyEvent", InitializeStrategyEvent>
|
|
86
|
+
| ParsedEventOf<"InitializeVaultEvent", InitializeVaultEvent>
|
|
87
|
+
| ParsedEventOf<"InstantWithdrawStrategyEvent", InstantWithdrawStrategyEvent>
|
|
88
|
+
| ParsedEventOf<"InstantWithdrawVaultEvent", InstantWithdrawVaultEvent>
|
|
89
|
+
| ParsedEventOf<"RemoveAdaptorEvent", RemoveAdaptorEvent>
|
|
90
|
+
| ParsedEventOf<"RequestWithdrawVaultEvent", RequestWithdrawVaultEvent>
|
|
91
|
+
| ParsedEventOf<"UpdateProtocolEvent", UpdateProtocolEvent>
|
|
92
|
+
| ParsedEventOf<"UpdateVaultConfigEvent", UpdateVaultConfigEvent>
|
|
93
|
+
| ParsedEventOf<"UpdateVaultEvent", UpdateVaultEvent>
|
|
94
|
+
| ParsedEventOf<"UpdateVaultProtocolFeeEvent", UpdateVaultProtocolFeeEvent>
|
|
95
|
+
| ParsedEventOf<"WithdrawStrategyEvent", WithdrawStrategyEvent>
|
|
96
|
+
| ParsedEventOf<"WithdrawVaultEvent", WithdrawVaultEvent>;
|
|
97
|
+
|
|
98
|
+
type ParsedEventOf<Name extends string, Payload> = {
|
|
99
|
+
name: Name;
|
|
100
|
+
payload: Payload;
|
|
101
|
+
/** Top-level instruction index this event was emitted under. */
|
|
102
|
+
ixIndex: number;
|
|
103
|
+
/** Sequential index of this event within the transaction (0-based). */
|
|
104
|
+
eventIndex: number;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Minimal structural shape of a transaction `meta` object — narrow enough
|
|
109
|
+
* that callers can pass `meta` from any RPC client (web3.js legacy,
|
|
110
|
+
* @solana/kit, or a hand-rolled fixture) without conversion.
|
|
111
|
+
*/
|
|
112
|
+
export type TransactionMetaForEvents = {
|
|
113
|
+
logMessages?: readonly string[] | null;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
type DispatchEntry = {
|
|
117
|
+
name: ParsedVoltrEvent["name"];
|
|
118
|
+
decoder: Decoder<unknown>;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// Discriminators are sha256("event:<EventName>")[..8] — stable, fixed by the
|
|
122
|
+
// Anchor IDL. Hardcoded so this module has no runtime hashing dependency.
|
|
123
|
+
const EVENT_TABLE: ReadonlyArray<
|
|
124
|
+
readonly [ParsedVoltrEvent["name"], readonly number[], Decoder<unknown>]
|
|
125
|
+
> = [
|
|
126
|
+
[
|
|
127
|
+
"AcceptProtocolAdminEvent",
|
|
128
|
+
[0xc4, 0x5d, 0xad, 0xfd, 0xaf, 0x8c, 0x79, 0x20],
|
|
129
|
+
getAcceptProtocolAdminEventDecoder(),
|
|
130
|
+
],
|
|
131
|
+
[
|
|
132
|
+
"AcceptVaultAdminEvent",
|
|
133
|
+
[0x8c, 0xff, 0x1d, 0x44, 0x10, 0xc2, 0xfb, 0x23],
|
|
134
|
+
getAcceptVaultAdminEventDecoder(),
|
|
135
|
+
],
|
|
136
|
+
[
|
|
137
|
+
"AddAdaptorEvent",
|
|
138
|
+
[0x18, 0xb5, 0xc9, 0x94, 0xf0, 0xb7, 0xeb, 0x0c],
|
|
139
|
+
getAddAdaptorEventDecoder(),
|
|
140
|
+
],
|
|
141
|
+
[
|
|
142
|
+
"CalibrateHighWaterMarkEvent",
|
|
143
|
+
[0x8c, 0x4c, 0xc3, 0x90, 0xb4, 0xb2, 0x00, 0x9b],
|
|
144
|
+
getCalibrateHighWaterMarkEventDecoder(),
|
|
145
|
+
],
|
|
146
|
+
[
|
|
147
|
+
"CalibrateHighWaterMarkUnsafeEvent",
|
|
148
|
+
[0xcd, 0x4c, 0xa9, 0xff, 0x25, 0xe4, 0x41, 0x82],
|
|
149
|
+
getCalibrateHighWaterMarkUnsafeEventDecoder(),
|
|
150
|
+
],
|
|
151
|
+
[
|
|
152
|
+
"CancelRequestWithdrawVaultEvent",
|
|
153
|
+
[0x2e, 0xa5, 0x18, 0x72, 0x01, 0x50, 0xcd, 0x88],
|
|
154
|
+
getCancelRequestWithdrawVaultEventDecoder(),
|
|
155
|
+
],
|
|
156
|
+
[
|
|
157
|
+
"CloseStrategyEvent",
|
|
158
|
+
[0xd5, 0x5f, 0xdb, 0xa1, 0x11, 0xd0, 0x5d, 0xff],
|
|
159
|
+
getCloseStrategyEventDecoder(),
|
|
160
|
+
],
|
|
161
|
+
[
|
|
162
|
+
"DepositStrategyEvent",
|
|
163
|
+
[0xca, 0xc9, 0x76, 0x31, 0x1d, 0xb4, 0x74, 0xaa],
|
|
164
|
+
getDepositStrategyEventDecoder(),
|
|
165
|
+
],
|
|
166
|
+
[
|
|
167
|
+
"DepositVaultEvent",
|
|
168
|
+
[0x0b, 0x0f, 0x07, 0x5c, 0x96, 0x64, 0xa5, 0xe8],
|
|
169
|
+
getDepositVaultEventDecoder(),
|
|
170
|
+
],
|
|
171
|
+
[
|
|
172
|
+
"DirectWithdrawStrategyEvent",
|
|
173
|
+
[0x71, 0xca, 0x97, 0x7c, 0x89, 0xff, 0x99, 0x65],
|
|
174
|
+
getDirectWithdrawStrategyEventDecoder(),
|
|
175
|
+
],
|
|
176
|
+
[
|
|
177
|
+
"HarvestFeeEvent",
|
|
178
|
+
[0x45, 0x30, 0xc0, 0x17, 0xe8, 0x16, 0x17, 0x1e],
|
|
179
|
+
getHarvestFeeEventDecoder(),
|
|
180
|
+
],
|
|
181
|
+
[
|
|
182
|
+
"InitProtocolEvent",
|
|
183
|
+
[0x0d, 0x51, 0xb7, 0x84, 0x58, 0x2b, 0xca, 0xd5],
|
|
184
|
+
getInitProtocolEventDecoder(),
|
|
185
|
+
],
|
|
186
|
+
[
|
|
187
|
+
"InitializeDirectWithdrawStrategyEvent",
|
|
188
|
+
[0xa9, 0x16, 0x39, 0x08, 0x0f, 0x49, 0xff, 0x73],
|
|
189
|
+
getInitializeDirectWithdrawStrategyEventDecoder(),
|
|
190
|
+
],
|
|
191
|
+
[
|
|
192
|
+
"InitializeStrategyEvent",
|
|
193
|
+
[0x1e, 0xe9, 0xd3, 0xf9, 0x53, 0xbc, 0xea, 0x98],
|
|
194
|
+
getInitializeStrategyEventDecoder(),
|
|
195
|
+
],
|
|
196
|
+
[
|
|
197
|
+
"InitializeVaultEvent",
|
|
198
|
+
[0xb3, 0x4b, 0x32, 0xa1, 0xbf, 0x1c, 0xf5, 0x6b],
|
|
199
|
+
getInitializeVaultEventDecoder(),
|
|
200
|
+
],
|
|
201
|
+
[
|
|
202
|
+
"InstantWithdrawStrategyEvent",
|
|
203
|
+
[0xdd, 0x17, 0x0c, 0xd7, 0x64, 0x2a, 0x61, 0x95],
|
|
204
|
+
getInstantWithdrawStrategyEventDecoder(),
|
|
205
|
+
],
|
|
206
|
+
[
|
|
207
|
+
"InstantWithdrawVaultEvent",
|
|
208
|
+
[0x2e, 0x39, 0x3c, 0x14, 0x06, 0xa0, 0xa4, 0xf7],
|
|
209
|
+
getInstantWithdrawVaultEventDecoder(),
|
|
210
|
+
],
|
|
211
|
+
[
|
|
212
|
+
"RemoveAdaptorEvent",
|
|
213
|
+
[0x9b, 0xb2, 0x02, 0x1d, 0xf5, 0x56, 0xf6, 0x99],
|
|
214
|
+
getRemoveAdaptorEventDecoder(),
|
|
215
|
+
],
|
|
216
|
+
[
|
|
217
|
+
"RequestWithdrawVaultEvent",
|
|
218
|
+
[0x3b, 0x5e, 0x1a, 0x26, 0x2f, 0x83, 0x9e, 0xa2],
|
|
219
|
+
getRequestWithdrawVaultEventDecoder(),
|
|
220
|
+
],
|
|
221
|
+
[
|
|
222
|
+
"UpdateProtocolEvent",
|
|
223
|
+
[0x0e, 0xe3, 0xcc, 0xd9, 0x3e, 0x2e, 0xf1, 0xed],
|
|
224
|
+
getUpdateProtocolEventDecoder(),
|
|
225
|
+
],
|
|
226
|
+
[
|
|
227
|
+
"UpdateVaultConfigEvent",
|
|
228
|
+
[0x3d, 0x5c, 0xce, 0x97, 0xa2, 0x28, 0xed, 0x67],
|
|
229
|
+
getUpdateVaultConfigEventDecoder(),
|
|
230
|
+
],
|
|
231
|
+
[
|
|
232
|
+
"UpdateVaultEvent",
|
|
233
|
+
[0x7b, 0x1f, 0x1b, 0xbd, 0x66, 0x01, 0x79, 0x39],
|
|
234
|
+
getUpdateVaultEventDecoder(),
|
|
235
|
+
],
|
|
236
|
+
[
|
|
237
|
+
"UpdateVaultProtocolFeeEvent",
|
|
238
|
+
[0xac, 0x01, 0xad, 0xe6, 0xe4, 0x3d, 0x4d, 0xf4],
|
|
239
|
+
getUpdateVaultProtocolFeeEventDecoder(),
|
|
240
|
+
],
|
|
241
|
+
[
|
|
242
|
+
"WithdrawStrategyEvent",
|
|
243
|
+
[0x70, 0x2d, 0x10, 0xac, 0xaa, 0x21, 0x16, 0xd4],
|
|
244
|
+
getWithdrawStrategyEventDecoder(),
|
|
245
|
+
],
|
|
246
|
+
[
|
|
247
|
+
"WithdrawVaultEvent",
|
|
248
|
+
[0xc4, 0x7b, 0x4f, 0xd7, 0x04, 0xd6, 0x14, 0xc5],
|
|
249
|
+
getWithdrawVaultEventDecoder(),
|
|
250
|
+
],
|
|
251
|
+
];
|
|
252
|
+
|
|
253
|
+
const DISPATCH: ReadonlyMap<string, DispatchEntry> = new Map(
|
|
254
|
+
EVENT_TABLE.map(([name, disc, decoder]) => [
|
|
255
|
+
discriminatorKey(disc),
|
|
256
|
+
{ name, decoder },
|
|
257
|
+
])
|
|
258
|
+
);
|
|
259
|
+
|
|
260
|
+
const PROGRAM_DATA_PREFIX = "Program data: ";
|
|
261
|
+
// Top-level instructions log "Program <id> invoke [1]" — depth >1 is a CPI.
|
|
262
|
+
const TOP_LEVEL_INVOKE_RE = /^Program \S+ invoke \[1\]$/;
|
|
263
|
+
|
|
264
|
+
const base64Encoder = getBase64Encoder();
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Walk a transaction's `meta.logMessages`, decode every Voltr event emitted
|
|
268
|
+
* via Anchor's `emit!`, and return them in emission order. Lines whose
|
|
269
|
+
* discriminator doesn't belong to a Voltr event are skipped, so logs from
|
|
270
|
+
* other programs in the same tx are safe to pass through.
|
|
271
|
+
*/
|
|
272
|
+
export function parseTransactionEvents(
|
|
273
|
+
meta: TransactionMetaForEvents | null | undefined
|
|
274
|
+
): ParsedVoltrEvent[] {
|
|
275
|
+
const logs = meta?.logMessages;
|
|
276
|
+
if (!logs || logs.length === 0) return [];
|
|
277
|
+
|
|
278
|
+
const out: ParsedVoltrEvent[] = [];
|
|
279
|
+
let ixIndex = -1;
|
|
280
|
+
let eventIndex = 0;
|
|
281
|
+
|
|
282
|
+
for (const line of logs) {
|
|
283
|
+
if (TOP_LEVEL_INVOKE_RE.test(line)) {
|
|
284
|
+
ixIndex++;
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
if (!line.startsWith(PROGRAM_DATA_PREFIX)) continue;
|
|
288
|
+
|
|
289
|
+
const b64 = line.slice(PROGRAM_DATA_PREFIX.length);
|
|
290
|
+
let bytes: Uint8Array;
|
|
291
|
+
try {
|
|
292
|
+
bytes = base64Encoder.encode(b64) as Uint8Array;
|
|
293
|
+
} catch {
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
if (bytes.length < 8) continue;
|
|
297
|
+
|
|
298
|
+
const entry = DISPATCH.get(discriminatorKey(bytes.subarray(0, 8)));
|
|
299
|
+
if (!entry) continue;
|
|
300
|
+
|
|
301
|
+
// The discriminator is 8 bytes of sha256, so spurious matches from other
|
|
302
|
+
// programs are unlikely but possible — and corrupt fixtures happen too.
|
|
303
|
+
// Skip the line rather than aborting the whole parse if borsh decode fails.
|
|
304
|
+
let payload: unknown;
|
|
305
|
+
try {
|
|
306
|
+
payload = entry.decoder.decode(bytes, 8);
|
|
307
|
+
} catch {
|
|
308
|
+
continue;
|
|
309
|
+
}
|
|
310
|
+
out.push({
|
|
311
|
+
name: entry.name,
|
|
312
|
+
payload,
|
|
313
|
+
ixIndex: ixIndex < 0 ? 0 : ixIndex,
|
|
314
|
+
eventIndex: eventIndex++,
|
|
315
|
+
} as ParsedVoltrEvent);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return out;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
function discriminatorKey(disc: ArrayLike<number>): string {
|
|
322
|
+
let s = "";
|
|
323
|
+
for (let i = 0; i < disc.length; i++) {
|
|
324
|
+
const b = disc[i] & 0xff;
|
|
325
|
+
s += (b < 16 ? "0" : "") + b.toString(16);
|
|
326
|
+
}
|
|
327
|
+
return s;
|
|
328
|
+
}
|