@atomiqlabs/chain-solana 12.0.13 → 12.0.15
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/LICENSE +201 -201
- package/dist/index.d.ts +29 -29
- package/dist/index.js +45 -45
- package/dist/solana/SolanaChainType.d.ts +11 -11
- package/dist/solana/SolanaChainType.js +2 -2
- package/dist/solana/SolanaChains.d.ts +20 -20
- package/dist/solana/SolanaChains.js +25 -25
- package/dist/solana/SolanaInitializer.d.ts +18 -18
- package/dist/solana/SolanaInitializer.js +63 -63
- package/dist/solana/btcrelay/SolanaBtcRelay.d.ts +228 -228
- package/dist/solana/btcrelay/SolanaBtcRelay.js +441 -441
- package/dist/solana/btcrelay/headers/SolanaBtcHeader.d.ts +29 -29
- package/dist/solana/btcrelay/headers/SolanaBtcHeader.js +34 -34
- package/dist/solana/btcrelay/headers/SolanaBtcStoredHeader.d.ts +46 -46
- package/dist/solana/btcrelay/headers/SolanaBtcStoredHeader.js +78 -78
- package/dist/solana/btcrelay/program/programIdl.json +671 -671
- package/dist/solana/chain/SolanaAction.d.ts +26 -26
- package/dist/solana/chain/SolanaAction.js +86 -86
- package/dist/solana/chain/SolanaChainInterface.d.ts +65 -65
- package/dist/solana/chain/SolanaChainInterface.js +125 -125
- package/dist/solana/chain/SolanaModule.d.ts +14 -14
- package/dist/solana/chain/SolanaModule.js +13 -13
- package/dist/solana/chain/modules/SolanaAddresses.d.ts +8 -8
- package/dist/solana/chain/modules/SolanaAddresses.js +22 -22
- package/dist/solana/chain/modules/SolanaBlocks.d.ts +28 -28
- package/dist/solana/chain/modules/SolanaBlocks.js +72 -72
- package/dist/solana/chain/modules/SolanaEvents.d.ts +68 -68
- package/dist/solana/chain/modules/SolanaEvents.js +238 -225
- package/dist/solana/chain/modules/SolanaFees.d.ts +121 -121
- package/dist/solana/chain/modules/SolanaFees.js +379 -379
- package/dist/solana/chain/modules/SolanaSignatures.d.ts +23 -23
- package/dist/solana/chain/modules/SolanaSignatures.js +39 -39
- package/dist/solana/chain/modules/SolanaSlots.d.ts +31 -31
- package/dist/solana/chain/modules/SolanaSlots.js +68 -68
- package/dist/solana/chain/modules/SolanaTokens.d.ts +136 -136
- package/dist/solana/chain/modules/SolanaTokens.js +248 -248
- package/dist/solana/chain/modules/SolanaTransactions.d.ts +124 -124
- package/dist/solana/chain/modules/SolanaTransactions.js +323 -323
- package/dist/solana/events/SolanaChainEvents.d.ts +88 -88
- package/dist/solana/events/SolanaChainEvents.js +256 -256
- package/dist/solana/events/SolanaChainEventsBrowser.d.ts +75 -75
- package/dist/solana/events/SolanaChainEventsBrowser.js +172 -172
- package/dist/solana/program/SolanaProgramBase.d.ts +40 -40
- package/dist/solana/program/SolanaProgramBase.js +43 -43
- package/dist/solana/program/SolanaProgramModule.d.ts +8 -8
- package/dist/solana/program/SolanaProgramModule.js +11 -11
- package/dist/solana/program/modules/SolanaProgramEvents.d.ts +53 -53
- package/dist/solana/program/modules/SolanaProgramEvents.js +114 -114
- package/dist/solana/swaps/SolanaSwapData.d.ts +71 -71
- package/dist/solana/swaps/SolanaSwapData.js +292 -292
- package/dist/solana/swaps/SolanaSwapModule.d.ts +10 -10
- package/dist/solana/swaps/SolanaSwapModule.js +11 -11
- package/dist/solana/swaps/SolanaSwapProgram.d.ts +224 -224
- package/dist/solana/swaps/SolanaSwapProgram.js +570 -570
- package/dist/solana/swaps/SwapTypeEnum.d.ts +11 -11
- package/dist/solana/swaps/SwapTypeEnum.js +42 -42
- package/dist/solana/swaps/modules/SolanaDataAccount.d.ts +94 -94
- package/dist/solana/swaps/modules/SolanaDataAccount.js +231 -231
- package/dist/solana/swaps/modules/SolanaLpVault.d.ts +71 -71
- package/dist/solana/swaps/modules/SolanaLpVault.js +173 -173
- package/dist/solana/swaps/modules/SwapClaim.d.ts +129 -129
- package/dist/solana/swaps/modules/SwapClaim.js +291 -291
- package/dist/solana/swaps/modules/SwapInit.d.ts +217 -217
- package/dist/solana/swaps/modules/SwapInit.js +519 -519
- package/dist/solana/swaps/modules/SwapRefund.d.ts +82 -82
- package/dist/solana/swaps/modules/SwapRefund.js +262 -262
- package/dist/solana/swaps/programIdl.json +945 -945
- package/dist/solana/swaps/programTypes.d.ts +943 -943
- package/dist/solana/swaps/programTypes.js +945 -945
- package/dist/solana/wallet/SolanaKeypairWallet.d.ts +9 -9
- package/dist/solana/wallet/SolanaKeypairWallet.js +33 -33
- package/dist/solana/wallet/SolanaSigner.d.ts +11 -11
- package/dist/solana/wallet/SolanaSigner.js +17 -17
- package/dist/utils/Utils.d.ts +53 -53
- package/dist/utils/Utils.js +170 -170
- package/package.json +41 -41
- package/src/index.ts +36 -36
- package/src/solana/SolanaChainType.ts +27 -27
- package/src/solana/SolanaChains.ts +23 -23
- package/src/solana/SolanaInitializer.ts +102 -102
- package/src/solana/btcrelay/SolanaBtcRelay.ts +589 -589
- package/src/solana/btcrelay/headers/SolanaBtcHeader.ts +57 -57
- package/src/solana/btcrelay/headers/SolanaBtcStoredHeader.ts +102 -102
- package/src/solana/btcrelay/program/programIdl.json +670 -670
- package/src/solana/chain/SolanaAction.ts +108 -108
- package/src/solana/chain/SolanaChainInterface.ts +192 -192
- package/src/solana/chain/SolanaModule.ts +20 -20
- package/src/solana/chain/modules/SolanaAddresses.ts +20 -20
- package/src/solana/chain/modules/SolanaBlocks.ts +78 -78
- package/src/solana/chain/modules/SolanaEvents.ts +270 -256
- package/src/solana/chain/modules/SolanaFees.ts +450 -450
- package/src/solana/chain/modules/SolanaSignatures.ts +39 -39
- package/src/solana/chain/modules/SolanaSlots.ts +82 -82
- package/src/solana/chain/modules/SolanaTokens.ts +307 -307
- package/src/solana/chain/modules/SolanaTransactions.ts +365 -365
- package/src/solana/events/SolanaChainEvents.ts +299 -299
- package/src/solana/events/SolanaChainEventsBrowser.ts +209 -209
- package/src/solana/program/SolanaProgramBase.ts +79 -79
- package/src/solana/program/SolanaProgramModule.ts +15 -15
- package/src/solana/program/modules/SolanaProgramEvents.ts +155 -155
- package/src/solana/swaps/SolanaSwapData.ts +430 -430
- package/src/solana/swaps/SolanaSwapModule.ts +16 -16
- package/src/solana/swaps/SolanaSwapProgram.ts +854 -854
- package/src/solana/swaps/SwapTypeEnum.ts +29 -29
- package/src/solana/swaps/modules/SolanaDataAccount.ts +307 -307
- package/src/solana/swaps/modules/SolanaLpVault.ts +215 -215
- package/src/solana/swaps/modules/SwapClaim.ts +389 -389
- package/src/solana/swaps/modules/SwapInit.ts +663 -663
- package/src/solana/swaps/modules/SwapRefund.ts +323 -323
- package/src/solana/swaps/programIdl.json +944 -944
- package/src/solana/swaps/programTypes.ts +1885 -1885
- package/src/solana/wallet/SolanaKeypairWallet.ts +36 -36
- package/src/solana/wallet/SolanaSigner.ts +24 -24
- package/src/utils/Utils.ts +180 -180
|
@@ -1,225 +1,238 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SolanaEvents = void 0;
|
|
4
|
-
const SolanaModule_1 = require("../SolanaModule");
|
|
5
|
-
const web3_js_1 = require("@solana/web3.js");
|
|
6
|
-
const Utils_1 = require("../../../utils/Utils");
|
|
7
|
-
class SolanaEvents extends SolanaModule_1.SolanaModule {
|
|
8
|
-
constructor() {
|
|
9
|
-
super(...arguments);
|
|
10
|
-
this.LOG_FETCH_LIMIT = 500;
|
|
11
|
-
this.usingHeliusTFA = "auto";
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Gets the signatures for a given topicKey public key, if lastProcessedSignature is specified, it fetches only
|
|
15
|
-
* the signatures before this signature
|
|
16
|
-
*
|
|
17
|
-
* @param topicKey
|
|
18
|
-
* @param logFetchLimit
|
|
19
|
-
* @param lastProcessedSignature
|
|
20
|
-
* @private
|
|
21
|
-
*/
|
|
22
|
-
getSignatures(topicKey, logFetchLimit, lastProcessedSignature) {
|
|
23
|
-
if (lastProcessedSignature == null) {
|
|
24
|
-
return this.connection.getSignaturesForAddress(topicKey, {
|
|
25
|
-
limit: logFetchLimit,
|
|
26
|
-
}, "confirmed");
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
return this.connection.getSignaturesForAddress(topicKey, {
|
|
30
|
-
before: lastProcessedSignature,
|
|
31
|
-
limit: logFetchLimit
|
|
32
|
-
}, "confirmed");
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Implements Helius getTransactionsForAddress RPC API
|
|
37
|
-
*
|
|
38
|
-
* @param account
|
|
39
|
-
* @param options
|
|
40
|
-
* @param commitment
|
|
41
|
-
*/
|
|
42
|
-
async getTransactionsForAddress(account, options, commitment) {
|
|
43
|
-
const limit = 100;
|
|
44
|
-
//Try to use getPriorityFeeEstimate api of Helius
|
|
45
|
-
const response = await this.connection._rpcRequest("getTransactionsForAddress", [
|
|
46
|
-
account.toString(),
|
|
47
|
-
{
|
|
48
|
-
...options,
|
|
49
|
-
transactionDetails: "full",
|
|
50
|
-
sortOrder: "desc",
|
|
51
|
-
limit,
|
|
52
|
-
commitment: commitment ?? "confirmed",
|
|
53
|
-
encoding: "jsonParsed",
|
|
54
|
-
maxSupportedTransactionVersion: 0
|
|
55
|
-
}
|
|
56
|
-
]).catch(e => {
|
|
57
|
-
//Catching not supported errors
|
|
58
|
-
if (e.message != null && (e.message.includes("-32601") || e.message.includes("-32600") || e.message.includes("-32403"))) {
|
|
59
|
-
return {
|
|
60
|
-
error: {
|
|
61
|
-
code: -32601,
|
|
62
|
-
message: e.message
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
throw e;
|
|
67
|
-
});
|
|
68
|
-
if (response.error != null) {
|
|
69
|
-
//Catching not supported errors
|
|
70
|
-
if (response.error.code !== -32601 && response.error.code !== -32600 && response.error.code !== -32403)
|
|
71
|
-
throw new Error(response.error.message);
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
return {
|
|
75
|
-
data: response.result.data.map(val => {
|
|
76
|
-
return {
|
|
77
|
-
...val,
|
|
78
|
-
meta: val.meta == null ? undefined : {
|
|
79
|
-
//ParsedTransactionMeta
|
|
80
|
-
...val.meta,
|
|
81
|
-
innerInstructions: val.meta.innerInstructions == null ? undefined : val.meta.innerInstructions.map(innerIx => ({
|
|
82
|
-
//ParsedInnerInstruction
|
|
83
|
-
...innerIx,
|
|
84
|
-
instructions: innerIx.instructions.map(ix => {
|
|
85
|
-
if (ix.program != null && ix.programId != null) {
|
|
86
|
-
return {
|
|
87
|
-
//ParsedInstruction
|
|
88
|
-
...ix,
|
|
89
|
-
programId: new web3_js_1.PublicKey(ix.programId)
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
return {
|
|
94
|
-
//PartiallyDecodedInstruction
|
|
95
|
-
data: ix.data,
|
|
96
|
-
programId: new web3_js_1.PublicKey(ix.programId),
|
|
97
|
-
accounts: ix.accounts.map(pubkey => new web3_js_1.PublicKey(pubkey))
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
})
|
|
101
|
-
})),
|
|
102
|
-
loadedAddresses: val.meta.loadedAddresses == null ? undefined : {
|
|
103
|
-
writable: val.meta.loadedAddresses.writable.map(pubkey => new web3_js_1.PublicKey(pubkey)),
|
|
104
|
-
readonly: val.meta.loadedAddresses.readonly.map(pubkey => new web3_js_1.PublicKey(pubkey)),
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
transaction: {
|
|
108
|
-
//ParsedTransaction
|
|
109
|
-
...val.transaction,
|
|
110
|
-
message: {
|
|
111
|
-
//ParsedMessage
|
|
112
|
-
...val.transaction.message,
|
|
113
|
-
accountKeys: val.transaction.message.accountKeys.map(accountKey => ({
|
|
114
|
-
//ParsedMessageAccount
|
|
115
|
-
...accountKey,
|
|
116
|
-
pubkey: new web3_js_1.PublicKey(accountKey.pubkey)
|
|
117
|
-
})),
|
|
118
|
-
instructions: val.transaction.message.instructions.map(ix => {
|
|
119
|
-
if (ix.program != null && ix.programId != null) {
|
|
120
|
-
return {
|
|
121
|
-
//ParsedInstruction
|
|
122
|
-
...ix,
|
|
123
|
-
programId: new web3_js_1.PublicKey(ix.programId)
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
return {
|
|
128
|
-
//PartiallyDecodedInstruction
|
|
129
|
-
data: ix.data,
|
|
130
|
-
programId: new web3_js_1.PublicKey(ix.programId),
|
|
131
|
-
accounts: ix.accounts.map(pubkey => new web3_js_1.PublicKey(pubkey))
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
}),
|
|
135
|
-
addressTableLookups: val.transaction.message.addressTableLookups == null ? undefined : val.transaction.message.addressTableLookups.map(addressTableLookup => ({
|
|
136
|
-
//ParsedAddressTableLookup
|
|
137
|
-
...addressTableLookup,
|
|
138
|
-
accountKey: new web3_js_1.PublicKey(addressTableLookup.accountKey)
|
|
139
|
-
}))
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
}),
|
|
144
|
-
paginationToken: response.result.
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
async _findInTxsTFA(topicKey, processor, abortSignal, startBlockheight) {
|
|
148
|
-
let paginationToken;
|
|
149
|
-
let txs = null;
|
|
150
|
-
while (txs == null || txs.length > 0) {
|
|
151
|
-
let filters = startBlockheight != null ? {
|
|
152
|
-
slot: { gte: startBlockheight }
|
|
153
|
-
} : {};
|
|
154
|
-
const tfaResult = await (0, Utils_1.tryWithRetries)(() => this.getTransactionsForAddress(topicKey, {
|
|
155
|
-
paginationToken,
|
|
156
|
-
filters: {
|
|
157
|
-
...filters,
|
|
158
|
-
status: "succeeded"
|
|
159
|
-
}
|
|
160
|
-
}, "confirmed"), undefined, undefined, abortSignal);
|
|
161
|
-
if (tfaResult == null) {
|
|
162
|
-
//Not supported
|
|
163
|
-
return undefined;
|
|
164
|
-
}
|
|
165
|
-
txs = tfaResult.data;
|
|
166
|
-
paginationToken = tfaResult.paginationToken;
|
|
167
|
-
if (
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
if (
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SolanaEvents = void 0;
|
|
4
|
+
const SolanaModule_1 = require("../SolanaModule");
|
|
5
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
6
|
+
const Utils_1 = require("../../../utils/Utils");
|
|
7
|
+
class SolanaEvents extends SolanaModule_1.SolanaModule {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.LOG_FETCH_LIMIT = 500;
|
|
11
|
+
this.usingHeliusTFA = "auto";
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Gets the signatures for a given topicKey public key, if lastProcessedSignature is specified, it fetches only
|
|
15
|
+
* the signatures before this signature
|
|
16
|
+
*
|
|
17
|
+
* @param topicKey
|
|
18
|
+
* @param logFetchLimit
|
|
19
|
+
* @param lastProcessedSignature
|
|
20
|
+
* @private
|
|
21
|
+
*/
|
|
22
|
+
getSignatures(topicKey, logFetchLimit, lastProcessedSignature) {
|
|
23
|
+
if (lastProcessedSignature == null) {
|
|
24
|
+
return this.connection.getSignaturesForAddress(topicKey, {
|
|
25
|
+
limit: logFetchLimit,
|
|
26
|
+
}, "confirmed");
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
return this.connection.getSignaturesForAddress(topicKey, {
|
|
30
|
+
before: lastProcessedSignature,
|
|
31
|
+
limit: logFetchLimit
|
|
32
|
+
}, "confirmed");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Implements Helius getTransactionsForAddress RPC API
|
|
37
|
+
*
|
|
38
|
+
* @param account
|
|
39
|
+
* @param options
|
|
40
|
+
* @param commitment
|
|
41
|
+
*/
|
|
42
|
+
async getTransactionsForAddress(account, options, commitment) {
|
|
43
|
+
const limit = 100;
|
|
44
|
+
//Try to use getPriorityFeeEstimate api of Helius
|
|
45
|
+
const response = await this.connection._rpcRequest("getTransactionsForAddress", [
|
|
46
|
+
account.toString(),
|
|
47
|
+
{
|
|
48
|
+
...options,
|
|
49
|
+
transactionDetails: "full",
|
|
50
|
+
sortOrder: "desc",
|
|
51
|
+
limit,
|
|
52
|
+
commitment: commitment ?? "confirmed",
|
|
53
|
+
encoding: "jsonParsed",
|
|
54
|
+
maxSupportedTransactionVersion: 0
|
|
55
|
+
}
|
|
56
|
+
]).catch(e => {
|
|
57
|
+
//Catching not supported errors
|
|
58
|
+
if (e.message != null && (e.message.includes("-32601") || e.message.includes("-32600") || e.message.includes("-32403"))) {
|
|
59
|
+
return {
|
|
60
|
+
error: {
|
|
61
|
+
code: -32601,
|
|
62
|
+
message: e.message
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
throw e;
|
|
67
|
+
});
|
|
68
|
+
if (response.error != null) {
|
|
69
|
+
//Catching not supported errors
|
|
70
|
+
if (response.error.code !== -32601 && response.error.code !== -32600 && response.error.code !== -32403)
|
|
71
|
+
throw new Error(response.error.message);
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
data: response.result.data.map(val => {
|
|
76
|
+
return {
|
|
77
|
+
...val,
|
|
78
|
+
meta: val.meta == null ? undefined : {
|
|
79
|
+
//ParsedTransactionMeta
|
|
80
|
+
...val.meta,
|
|
81
|
+
innerInstructions: val.meta.innerInstructions == null ? undefined : val.meta.innerInstructions.map(innerIx => ({
|
|
82
|
+
//ParsedInnerInstruction
|
|
83
|
+
...innerIx,
|
|
84
|
+
instructions: innerIx.instructions.map(ix => {
|
|
85
|
+
if (ix.program != null && ix.programId != null) {
|
|
86
|
+
return {
|
|
87
|
+
//ParsedInstruction
|
|
88
|
+
...ix,
|
|
89
|
+
programId: new web3_js_1.PublicKey(ix.programId)
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
return {
|
|
94
|
+
//PartiallyDecodedInstruction
|
|
95
|
+
data: ix.data,
|
|
96
|
+
programId: new web3_js_1.PublicKey(ix.programId),
|
|
97
|
+
accounts: ix.accounts.map(pubkey => new web3_js_1.PublicKey(pubkey))
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
})
|
|
101
|
+
})),
|
|
102
|
+
loadedAddresses: val.meta.loadedAddresses == null ? undefined : {
|
|
103
|
+
writable: val.meta.loadedAddresses.writable.map(pubkey => new web3_js_1.PublicKey(pubkey)),
|
|
104
|
+
readonly: val.meta.loadedAddresses.readonly.map(pubkey => new web3_js_1.PublicKey(pubkey)),
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
transaction: {
|
|
108
|
+
//ParsedTransaction
|
|
109
|
+
...val.transaction,
|
|
110
|
+
message: {
|
|
111
|
+
//ParsedMessage
|
|
112
|
+
...val.transaction.message,
|
|
113
|
+
accountKeys: val.transaction.message.accountKeys.map(accountKey => ({
|
|
114
|
+
//ParsedMessageAccount
|
|
115
|
+
...accountKey,
|
|
116
|
+
pubkey: new web3_js_1.PublicKey(accountKey.pubkey)
|
|
117
|
+
})),
|
|
118
|
+
instructions: val.transaction.message.instructions.map(ix => {
|
|
119
|
+
if (ix.program != null && ix.programId != null) {
|
|
120
|
+
return {
|
|
121
|
+
//ParsedInstruction
|
|
122
|
+
...ix,
|
|
123
|
+
programId: new web3_js_1.PublicKey(ix.programId)
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
return {
|
|
128
|
+
//PartiallyDecodedInstruction
|
|
129
|
+
data: ix.data,
|
|
130
|
+
programId: new web3_js_1.PublicKey(ix.programId),
|
|
131
|
+
accounts: ix.accounts.map(pubkey => new web3_js_1.PublicKey(pubkey))
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}),
|
|
135
|
+
addressTableLookups: val.transaction.message.addressTableLookups == null ? undefined : val.transaction.message.addressTableLookups.map(addressTableLookup => ({
|
|
136
|
+
//ParsedAddressTableLookup
|
|
137
|
+
...addressTableLookup,
|
|
138
|
+
accountKey: new web3_js_1.PublicKey(addressTableLookup.accountKey)
|
|
139
|
+
}))
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
}),
|
|
144
|
+
paginationToken: response.result.paginationToken
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
async _findInTxsTFA(topicKey, processor, abortSignal, startBlockheight) {
|
|
148
|
+
let paginationToken;
|
|
149
|
+
let txs = null;
|
|
150
|
+
while (txs == null || txs.length > 0) {
|
|
151
|
+
let filters = startBlockheight != null ? {
|
|
152
|
+
slot: { gte: startBlockheight }
|
|
153
|
+
} : {};
|
|
154
|
+
const tfaResult = await (0, Utils_1.tryWithRetries)(() => this.getTransactionsForAddress(topicKey, {
|
|
155
|
+
paginationToken,
|
|
156
|
+
filters: {
|
|
157
|
+
...filters,
|
|
158
|
+
status: "succeeded"
|
|
159
|
+
}
|
|
160
|
+
}, "confirmed"), undefined, undefined, abortSignal);
|
|
161
|
+
if (tfaResult == null) {
|
|
162
|
+
//Not supported
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
txs = tfaResult.data;
|
|
166
|
+
paginationToken = tfaResult.paginationToken;
|
|
167
|
+
if (txs.length === 0) {
|
|
168
|
+
this.logger.debug(`_findInTxsTFA(): Got ${txs.length} txns (empty response), paginationToken: ${paginationToken}`);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
this.logger.debug(`_findInTxsTFA(): Got ${txs.length} txns (${txs[0].transaction.signatures[0]}..${txs[txs.length - 1].transaction.signatures[0]}), paginationToken: ${paginationToken}`);
|
|
172
|
+
}
|
|
173
|
+
if (abortSignal != null)
|
|
174
|
+
abortSignal.throwIfAborted();
|
|
175
|
+
const result = await processor({ txs });
|
|
176
|
+
if (result != null)
|
|
177
|
+
return result;
|
|
178
|
+
if (paginationToken == null)
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Runs a search backwards in time, processing transaction signatures for a specific topic public key
|
|
185
|
+
*
|
|
186
|
+
* @param topicKey
|
|
187
|
+
* @param processor called for every batch of returned signatures, should return a value if the correct signature
|
|
188
|
+
* was found, or null if the search should continue
|
|
189
|
+
* @param abortSignal
|
|
190
|
+
* @param logFetchLimit
|
|
191
|
+
* @param startBlockheight
|
|
192
|
+
*/
|
|
193
|
+
async _findInSignatures(topicKey, processor, abortSignal, logFetchLimit, startBlockheight) {
|
|
194
|
+
if (logFetchLimit == null || logFetchLimit > this.LOG_FETCH_LIMIT)
|
|
195
|
+
logFetchLimit = this.LOG_FETCH_LIMIT;
|
|
196
|
+
let signatures = null;
|
|
197
|
+
while (signatures == null || signatures.length > 0) {
|
|
198
|
+
signatures = await this.getSignatures(topicKey, logFetchLimit, signatures != null ? signatures[signatures.length - 1].signature : null);
|
|
199
|
+
if (startBlockheight != null) {
|
|
200
|
+
const endIndex = signatures.findIndex(val => val.slot < startBlockheight);
|
|
201
|
+
if (endIndex === 0)
|
|
202
|
+
return null;
|
|
203
|
+
if (endIndex !== -1)
|
|
204
|
+
signatures = signatures.slice(0, endIndex - 1);
|
|
205
|
+
}
|
|
206
|
+
if (signatures.length === 0) {
|
|
207
|
+
this.logger.debug(`_findInSignatures(): Got ${signatures.length} txns (empty response)`);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
this.logger.debug(`_findInSignatures(): Got ${signatures.length} txns (${signatures[0].signature}..${signatures[signatures.length - 1].signature})`);
|
|
211
|
+
}
|
|
212
|
+
if (abortSignal != null)
|
|
213
|
+
abortSignal.throwIfAborted();
|
|
214
|
+
const result = await processor({ signatures });
|
|
215
|
+
if (result != null)
|
|
216
|
+
return result;
|
|
217
|
+
if (signatures.length < logFetchLimit)
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
async findInSignatures(topicKey, processor, abortSignal, logFetchLimit, startBlockheight) {
|
|
223
|
+
if (this.usingHeliusTFA !== "no") {
|
|
224
|
+
//Attempt to use Helius's gTFA
|
|
225
|
+
const result = await this._findInTxsTFA(topicKey, processor, abortSignal, startBlockheight);
|
|
226
|
+
if (result !== undefined)
|
|
227
|
+
return result;
|
|
228
|
+
//Not supported
|
|
229
|
+
if (this.usingHeliusTFA === "yes")
|
|
230
|
+
throw new Error("Helius gTFA is not supported with current provider!");
|
|
231
|
+
//If set to auto, we can manually set to "no"
|
|
232
|
+
this.usingHeliusTFA = "no";
|
|
233
|
+
this.logger.warn("findInSignatures(): Helius gTFA is not supported, switching back to using gSFA!");
|
|
234
|
+
}
|
|
235
|
+
return await this._findInSignatures(topicKey, processor, abortSignal, logFetchLimit, startBlockheight);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
exports.SolanaEvents = SolanaEvents;
|