@carrot-protocol/clend-vaults-rpc 0.0.7 → 0.0.8-events-dev-89f0e04

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.
@@ -0,0 +1,150 @@
1
+ import { web3, BN } from "@coral-xyz/anchor";
2
+ import { AssetStatus, VaultStatus, ClendAccountStatus } from "./state";
3
+ export declare class ClendVaultsEvents {
4
+ private connection;
5
+ private eventParser;
6
+ constructor(connection: web3.Connection);
7
+ /**
8
+ * Fetch txns from chain from tx sigs and parse events
9
+ */
10
+ getClendVaultsEventsFromTxns(txSigs: string[]): Promise<ClendVaultsEvent[]>;
11
+ /**
12
+ * Get events from a single transaction signature
13
+ */
14
+ getClendVaultsEventsFromTxn(txSig: string): Promise<ClendVaultsEvent[]>;
15
+ /**
16
+ * Expect already fetched logs and tx sig and block time
17
+ */
18
+ getClendVaultsEventsFromLogs(logs: string[], txSig: string, blockTime: number): Promise<ClendVaultsEvent[]>;
19
+ /**
20
+ * Parses raw Anchor events into strongly-typed ClendVaults event objects.
21
+ * @param events Raw Anchor events paired with their tx
22
+ * @returns An array of parsed ClendVaults event objects.
23
+ */
24
+ private parseClendVaultsEvents;
25
+ }
26
+ export interface ClendVaultsEventMetadata {
27
+ name: string;
28
+ eventIndex: number;
29
+ txSig: string;
30
+ blockTime: Date;
31
+ }
32
+ export interface InitVaultEvent {
33
+ metadata: ClendVaultsEventMetadata;
34
+ vault: web3.PublicKey;
35
+ sharesMint: web3.PublicKey;
36
+ manager: web3.PublicKey;
37
+ }
38
+ export interface AddAssetEvent {
39
+ metadata: ClendVaultsEventMetadata;
40
+ vault: web3.PublicKey;
41
+ mint: web3.PublicKey;
42
+ oracle: web3.PublicKey;
43
+ reserve: web3.PublicKey;
44
+ }
45
+ export interface AddClendAccountEvent {
46
+ metadata: ClendVaultsEventMetadata;
47
+ vault: web3.PublicKey;
48
+ clendAccount: web3.PublicKey;
49
+ }
50
+ export interface ClendAccountBorrowEvent {
51
+ metadata: ClendVaultsEventMetadata;
52
+ vault: web3.PublicKey;
53
+ clendAccount: web3.PublicKey;
54
+ assetMint: web3.PublicKey;
55
+ amount: BN;
56
+ }
57
+ export interface ClendAccountDepositEvent {
58
+ metadata: ClendVaultsEventMetadata;
59
+ vault: web3.PublicKey;
60
+ clendAccount: web3.PublicKey;
61
+ assetMint: web3.PublicKey;
62
+ amount: BN;
63
+ }
64
+ export interface ClendAccountRepayEvent {
65
+ metadata: ClendVaultsEventMetadata;
66
+ vault: web3.PublicKey;
67
+ clendAccount: web3.PublicKey;
68
+ assetMint: web3.PublicKey;
69
+ amount: BN;
70
+ }
71
+ export interface ClendAccountWithdrawEvent {
72
+ metadata: ClendVaultsEventMetadata;
73
+ vault: web3.PublicKey;
74
+ clendAccount: web3.PublicKey;
75
+ assetMint: web3.PublicKey;
76
+ amount: BN;
77
+ }
78
+ export interface ClendAccountWithdrawEmissionsEvent {
79
+ metadata: ClendVaultsEventMetadata;
80
+ vault: web3.PublicKey;
81
+ clendAccount: web3.PublicKey;
82
+ emissionsMint: web3.PublicKey;
83
+ }
84
+ export interface DistributeFeesEvent {
85
+ metadata: ClendVaultsEventMetadata;
86
+ vault: web3.PublicKey;
87
+ issueFeeDistributed: BN;
88
+ redemptionFeeDistributed: BN;
89
+ managementFeeDistributed: BN;
90
+ }
91
+ export interface IssueEvent {
92
+ metadata: ClendVaultsEventMetadata;
93
+ vault: web3.PublicKey;
94
+ user: web3.PublicKey;
95
+ assetMint: web3.PublicKey;
96
+ assetAmountIn: BN;
97
+ sharesAmountMinted: BN;
98
+ }
99
+ export interface RedeemEvent {
100
+ metadata: ClendVaultsEventMetadata;
101
+ vault: web3.PublicKey;
102
+ user: web3.PublicKey;
103
+ assetMint: web3.PublicKey;
104
+ assetAmountOut: BN;
105
+ sharesAmountBurned: BN;
106
+ }
107
+ export interface SwapEvent {
108
+ metadata: ClendVaultsEventMetadata;
109
+ vault: web3.PublicKey;
110
+ assetInMint: web3.PublicKey;
111
+ assetOutMint: web3.PublicKey;
112
+ }
113
+ export interface UpdateAssetFeesEvent {
114
+ metadata: ClendVaultsEventMetadata;
115
+ vault: web3.PublicKey;
116
+ assetMint: web3.PublicKey;
117
+ newIssueFeeBps: number | null;
118
+ newRedemptionFeeBps: number | null;
119
+ }
120
+ export interface UpdateAssetStatusEvent {
121
+ metadata: ClendVaultsEventMetadata;
122
+ vault: web3.PublicKey;
123
+ assetMint: web3.PublicKey;
124
+ newStatus: AssetStatus;
125
+ }
126
+ export interface UpdateClendAccountStatusEvent {
127
+ metadata: ClendVaultsEventMetadata;
128
+ vault: web3.PublicKey;
129
+ clendAccount: web3.PublicKey;
130
+ newStatus: ClendAccountStatus;
131
+ }
132
+ export interface UpdateVaultFeesEvent {
133
+ metadata: ClendVaultsEventMetadata;
134
+ vault: web3.PublicKey;
135
+ newManagementFeeBps: number;
136
+ }
137
+ export interface UpdateVaultManagerEvent {
138
+ metadata: ClendVaultsEventMetadata;
139
+ vault: web3.PublicKey;
140
+ newManager: web3.PublicKey;
141
+ }
142
+ export interface UpdateVaultStatusEvent {
143
+ metadata: ClendVaultsEventMetadata;
144
+ vault: web3.PublicKey;
145
+ newStatus: VaultStatus;
146
+ }
147
+ /**
148
+ * Union type for all parsed ClendVaults event interfaces.
149
+ */
150
+ export type ClendVaultsEvent = InitVaultEvent | AddAssetEvent | AddClendAccountEvent | ClendAccountBorrowEvent | ClendAccountDepositEvent | ClendAccountRepayEvent | ClendAccountWithdrawEvent | ClendAccountWithdrawEmissionsEvent | DistributeFeesEvent | IssueEvent | RedeemEvent | SwapEvent | UpdateAssetFeesEvent | UpdateAssetStatusEvent | UpdateClendAccountStatusEvent | UpdateVaultFeesEvent | UpdateVaultManagerEvent | UpdateVaultStatusEvent;
package/dist/events.js ADDED
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ClendVaultsEvents = void 0;
7
+ const anchor_1 = require("@coral-xyz/anchor");
8
+ const clend_vaults_json_1 = __importDefault(require("./idl/clend_vaults.json"));
9
+ const utils_1 = require("./utils");
10
+ class ClendVaultsEvents {
11
+ constructor(connection) {
12
+ this.connection = connection;
13
+ // create events parser
14
+ const dummyProvider = new anchor_1.AnchorProvider(this.connection, new anchor_1.Wallet(anchor_1.web3.Keypair.generate()), {});
15
+ const program = new anchor_1.Program(clend_vaults_json_1.default, dummyProvider);
16
+ this.eventParser = new anchor_1.EventParser(program.programId, new anchor_1.BorshCoder(program.idl));
17
+ }
18
+ /**
19
+ * Fetch txns from chain from tx sigs and parse events
20
+ */
21
+ async getClendVaultsEventsFromTxns(txSigs) {
22
+ const allEvents = [];
23
+ for (const txSig of txSigs) {
24
+ const events = await this.getClendVaultsEventsFromTxn(txSig);
25
+ allEvents.push(...events);
26
+ }
27
+ return allEvents;
28
+ }
29
+ /**
30
+ * Get events from a single transaction signature
31
+ */
32
+ async getClendVaultsEventsFromTxn(txSig) {
33
+ // fetch transaction data
34
+ const result = await this.connection.getTransaction(txSig, {
35
+ commitment: "confirmed",
36
+ maxSupportedTransactionVersion: 0,
37
+ });
38
+ if (result === null || result.meta === null || !result.meta.logMessages) {
39
+ return [];
40
+ }
41
+ return this.getClendVaultsEventsFromLogs(result.meta.logMessages, txSig, result.blockTime);
42
+ }
43
+ /**
44
+ * Expect already fetched logs and tx sig and block time
45
+ */
46
+ async getClendVaultsEventsFromLogs(logs, txSig, blockTime) {
47
+ const anchorEvents = Array.from(this.eventParser.parseLogs(logs));
48
+ return this.parseClendVaultsEvents([
49
+ { events: anchorEvents, txSig, blockTime: new Date(blockTime * 1000) },
50
+ ]);
51
+ }
52
+ /**
53
+ * Parses raw Anchor events into strongly-typed ClendVaults event objects.
54
+ * @param events Raw Anchor events paired with their tx
55
+ * @returns An array of parsed ClendVaults event objects.
56
+ */
57
+ parseClendVaultsEvents(txData) {
58
+ const clendVaultsEvents = [];
59
+ for (const { events, txSig, blockTime } of txData) {
60
+ // parse events
61
+ let eventIndex = 0;
62
+ for (const event of events) {
63
+ // Use 'any' for easier access, but ensure data exists
64
+ const data = event.data;
65
+ if (!data) {
66
+ console.warn("Event data missing", {
67
+ eventName: event.name,
68
+ });
69
+ continue;
70
+ }
71
+ // Define common metadata parts first
72
+ const commonMetadata = {
73
+ name: event.name,
74
+ eventIndex,
75
+ txSig,
76
+ blockTime,
77
+ };
78
+ try {
79
+ const metadata = commonMetadata;
80
+ switch (event.name) {
81
+ case "initVaultEvent": {
82
+ const initEvent = {
83
+ metadata,
84
+ vault: (0, utils_1.parsePk)(data.vault),
85
+ sharesMint: (0, utils_1.parsePk)(data.sharesMint),
86
+ manager: (0, utils_1.parsePk)(data.manager),
87
+ };
88
+ clendVaultsEvents.push(initEvent);
89
+ break;
90
+ }
91
+ case "addAssetEvent": {
92
+ const addAssetEvent = {
93
+ metadata,
94
+ vault: (0, utils_1.parsePk)(data.vault),
95
+ mint: (0, utils_1.parsePk)(data.mint),
96
+ oracle: (0, utils_1.parsePk)(data.oracle),
97
+ reserve: (0, utils_1.parsePk)(data.reserve),
98
+ };
99
+ clendVaultsEvents.push(addAssetEvent);
100
+ break;
101
+ }
102
+ case "addClendAccountEvent": {
103
+ const addClendAccountEvent = {
104
+ metadata,
105
+ vault: (0, utils_1.parsePk)(data.vault),
106
+ clendAccount: (0, utils_1.parsePk)(data.clendAccount),
107
+ };
108
+ clendVaultsEvents.push(addClendAccountEvent);
109
+ break;
110
+ }
111
+ case "clendAccountBorrowEvent": {
112
+ const borrowEvent = {
113
+ metadata,
114
+ vault: (0, utils_1.parsePk)(data.vault),
115
+ clendAccount: (0, utils_1.parsePk)(data.clendAccount),
116
+ assetMint: (0, utils_1.parsePk)(data.assetMint),
117
+ amount: (0, utils_1.parseBN)(data.amount),
118
+ };
119
+ clendVaultsEvents.push(borrowEvent);
120
+ break;
121
+ }
122
+ case "clendAccountDepositEvent": {
123
+ const depositEvent = {
124
+ metadata,
125
+ vault: (0, utils_1.parsePk)(data.vault),
126
+ clendAccount: (0, utils_1.parsePk)(data.clendAccount),
127
+ assetMint: (0, utils_1.parsePk)(data.assetMint),
128
+ amount: (0, utils_1.parseBN)(data.amount),
129
+ };
130
+ clendVaultsEvents.push(depositEvent);
131
+ break;
132
+ }
133
+ case "clendAccountRepayEvent": {
134
+ const repayEvent = {
135
+ metadata,
136
+ vault: (0, utils_1.parsePk)(data.vault),
137
+ clendAccount: (0, utils_1.parsePk)(data.clendAccount),
138
+ assetMint: (0, utils_1.parsePk)(data.assetMint),
139
+ amount: (0, utils_1.parseBN)(data.amount),
140
+ };
141
+ clendVaultsEvents.push(repayEvent);
142
+ break;
143
+ }
144
+ case "clendAccountWithdrawEvent": {
145
+ const withdrawEvent = {
146
+ metadata,
147
+ vault: (0, utils_1.parsePk)(data.vault),
148
+ clendAccount: (0, utils_1.parsePk)(data.clendAccount),
149
+ assetMint: (0, utils_1.parsePk)(data.assetMint),
150
+ amount: (0, utils_1.parseBN)(data.amount),
151
+ };
152
+ clendVaultsEvents.push(withdrawEvent);
153
+ break;
154
+ }
155
+ case "clendAccountWithdrawEmissionsEvent": {
156
+ const withdrawEmissionsEvent = {
157
+ metadata,
158
+ vault: (0, utils_1.parsePk)(data.vault),
159
+ clendAccount: (0, utils_1.parsePk)(data.clendAccount),
160
+ emissionsMint: (0, utils_1.parsePk)(data.emissionsMint),
161
+ };
162
+ clendVaultsEvents.push(withdrawEmissionsEvent);
163
+ break;
164
+ }
165
+ case "distributeFeesEvent": {
166
+ const distributeFeesEvent = {
167
+ metadata,
168
+ vault: (0, utils_1.parsePk)(data.vault),
169
+ issueFeeDistributed: (0, utils_1.parseBN)(data.issueFeeDistributed),
170
+ redemptionFeeDistributed: (0, utils_1.parseBN)(data.redemptionFeeDistributed),
171
+ managementFeeDistributed: (0, utils_1.parseBN)(data.managementFeeDistributed),
172
+ };
173
+ clendVaultsEvents.push(distributeFeesEvent);
174
+ break;
175
+ }
176
+ case "issueEvent": {
177
+ const issueEvent = {
178
+ metadata,
179
+ vault: (0, utils_1.parsePk)(data.vault),
180
+ user: (0, utils_1.parsePk)(data.user),
181
+ assetMint: (0, utils_1.parsePk)(data.assetMint),
182
+ assetAmountIn: (0, utils_1.parseBN)(data.assetAmountIn),
183
+ sharesAmountMinted: (0, utils_1.parseBN)(data.sharesAmountMinted),
184
+ };
185
+ clendVaultsEvents.push(issueEvent);
186
+ break;
187
+ }
188
+ case "redeemEvent": {
189
+ const redeemEvent = {
190
+ metadata,
191
+ vault: (0, utils_1.parsePk)(data.vault),
192
+ user: (0, utils_1.parsePk)(data.user),
193
+ assetMint: (0, utils_1.parsePk)(data.assetMint),
194
+ assetAmountOut: (0, utils_1.parseBN)(data.assetAmountOut),
195
+ sharesAmountBurned: (0, utils_1.parseBN)(data.sharesAmountBurned),
196
+ };
197
+ clendVaultsEvents.push(redeemEvent);
198
+ break;
199
+ }
200
+ case "swapEvent": {
201
+ const swapEvent = {
202
+ metadata,
203
+ vault: (0, utils_1.parsePk)(data.vault),
204
+ assetInMint: (0, utils_1.parsePk)(data.assetInMint),
205
+ assetOutMint: (0, utils_1.parsePk)(data.assetOutMint),
206
+ };
207
+ clendVaultsEvents.push(swapEvent);
208
+ break;
209
+ }
210
+ case "updateAssetFeesEvent": {
211
+ const updateAssetFeesEvent = {
212
+ metadata,
213
+ vault: (0, utils_1.parsePk)(data.vault),
214
+ assetMint: (0, utils_1.parsePk)(data.assetMint),
215
+ newIssueFeeBps: data.newIssueFeeBps,
216
+ newRedemptionFeeBps: data.newRedemptionFeeBps,
217
+ };
218
+ clendVaultsEvents.push(updateAssetFeesEvent);
219
+ break;
220
+ }
221
+ case "updateAssetStatusEvent": {
222
+ const updateAssetStatusEvent = {
223
+ metadata,
224
+ vault: (0, utils_1.parsePk)(data.vault),
225
+ assetMint: (0, utils_1.parsePk)(data.assetMint),
226
+ newStatus: (0, utils_1.parseAssetStatus)(data.newStatus),
227
+ };
228
+ clendVaultsEvents.push(updateAssetStatusEvent);
229
+ break;
230
+ }
231
+ case "updateClendAccountStatusEvent": {
232
+ const updateClendAccountStatusEvent = {
233
+ metadata,
234
+ vault: (0, utils_1.parsePk)(data.vault),
235
+ clendAccount: (0, utils_1.parsePk)(data.clendAccount),
236
+ newStatus: (0, utils_1.parseClendAccountStatus)(data.newStatus),
237
+ };
238
+ clendVaultsEvents.push(updateClendAccountStatusEvent);
239
+ break;
240
+ }
241
+ case "updateVaultFeesEvent": {
242
+ const updateVaultFeesEvent = {
243
+ metadata,
244
+ vault: (0, utils_1.parsePk)(data.vault),
245
+ newManagementFeeBps: data.newManagementFeeBps,
246
+ };
247
+ clendVaultsEvents.push(updateVaultFeesEvent);
248
+ break;
249
+ }
250
+ case "updateVaultManagerEvent": {
251
+ const updateVaultManagerEvent = {
252
+ metadata,
253
+ vault: (0, utils_1.parsePk)(data.vault),
254
+ newManager: (0, utils_1.parsePk)(data.newManager),
255
+ };
256
+ clendVaultsEvents.push(updateVaultManagerEvent);
257
+ break;
258
+ }
259
+ case "updateVaultStatusEvent": {
260
+ const updateVaultStatusEvent = {
261
+ metadata,
262
+ vault: (0, utils_1.parsePk)(data.vault),
263
+ newStatus: (0, utils_1.parseVaultStatus)(data.newStatus),
264
+ };
265
+ clendVaultsEvents.push(updateVaultStatusEvent);
266
+ break;
267
+ }
268
+ default:
269
+ console.warn("Unhandled ClendVaults event type", {
270
+ eventName: event.name,
271
+ });
272
+ }
273
+ }
274
+ catch (error) {
275
+ console.error("Error parsing event", {
276
+ eventName: event.name,
277
+ error: error,
278
+ rawData: data,
279
+ });
280
+ }
281
+ // increment event index if parse was successful
282
+ eventIndex++;
283
+ }
284
+ }
285
+ return clendVaultsEvents;
286
+ }
287
+ }
288
+ exports.ClendVaultsEvents = ClendVaultsEvents;
289
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}