@helium/spl-utils 0.0.27 → 0.0.28

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.
@@ -1,397 +0,0 @@
1
- // Taken from https://raw.githubusercontent.com/lmvdz/tpu-client/main/src/index.ts bec of supply chain risk
2
- import { Connection, Transaction, } from "@solana/web3.js";
3
- import { default as Denque } from "denque";
4
- import dgram from "dgram";
5
- import bs58 from "bs58";
6
- export class LeaderTpuCache {
7
- leaderTpuMap;
8
- connection;
9
- first_slot;
10
- slots_in_epoch;
11
- last_epoch_info_slot;
12
- leaders;
13
- constructor(connection, startSlot) {
14
- this.connection = connection;
15
- this.first_slot = startSlot;
16
- }
17
- static load(connection, startSlot) {
18
- return new Promise((resolve) => {
19
- const leaderTpuCache = new LeaderTpuCache(connection, startSlot);
20
- leaderTpuCache.connection.getEpochInfo().then((epochInfo) => {
21
- leaderTpuCache.slots_in_epoch = epochInfo.slotsInEpoch;
22
- leaderTpuCache
23
- .fetchSlotLeaders(leaderTpuCache.first_slot, leaderTpuCache.slots_in_epoch)
24
- .then((leaders) => {
25
- leaderTpuCache.leaders = leaders;
26
- leaderTpuCache.fetchClusterTpuSockets().then((leaderTpuMap) => {
27
- leaderTpuCache.leaderTpuMap = leaderTpuMap;
28
- resolve(leaderTpuCache);
29
- });
30
- });
31
- });
32
- });
33
- }
34
- fetchClusterTpuSockets() {
35
- return new Promise((resolve, reject) => {
36
- const map = new Map();
37
- this.connection
38
- .getClusterNodes()
39
- .then((contactInfo) => {
40
- contactInfo.forEach((contactInfo) => {
41
- map.set(contactInfo.pubkey, contactInfo.tpu);
42
- });
43
- resolve(map);
44
- })
45
- .catch((error) => {
46
- reject(error);
47
- });
48
- });
49
- }
50
- fetchSlotLeaders(start_slot, slots_in_epoch) {
51
- const fanout = Math.min(2 * MAX_FANOUT_SLOTS, slots_in_epoch);
52
- return this.connection.getSlotLeaders(start_slot, fanout);
53
- }
54
- lastSlot() {
55
- return this.first_slot + this.leaders.length - 1;
56
- }
57
- getSlotLeader(slot) {
58
- if (slot >= this.first_slot) {
59
- const index = slot - this.first_slot;
60
- return this.leaders[index];
61
- }
62
- else {
63
- return null;
64
- }
65
- }
66
- getLeaderSockets(fanout_slots) {
67
- return new Promise((resolve) => {
68
- const leaderSet = new Set();
69
- const leaderSockets = new Array();
70
- let checkedSlots = 0;
71
- this.leaders.forEach((leader) => {
72
- const tpu_socket = this.leaderTpuMap.get(leader.toBase58());
73
- if (tpu_socket !== undefined && tpu_socket !== null) {
74
- if (!leaderSet.has(leader.toBase58())) {
75
- leaderSet.add(leader.toBase58());
76
- leaderSockets.push(tpu_socket);
77
- }
78
- }
79
- else {
80
- console.log("TPU not available for leader: ", leader.toBase58());
81
- }
82
- checkedSlots++;
83
- if (checkedSlots === fanout_slots) {
84
- resolve(leaderSockets);
85
- }
86
- });
87
- });
88
- }
89
- }
90
- export const MAX_SLOT_SKIP_DISTANCE = 48;
91
- export const DEFAULT_FANOUT_SLOTS = 12;
92
- export const MAX_FANOUT_SLOTS = 100;
93
- export class RecentLeaderSlots {
94
- recent_slots;
95
- //@ts-check
96
- /**
97
- *
98
- * @param current_slot {number}
99
- */
100
- constructor(current_slot) {
101
- this.recent_slots = new Denque();
102
- this.recent_slots.push(current_slot);
103
- }
104
- //@ts-check
105
- /**
106
- *
107
- * @param current_slot {number}
108
- */
109
- recordSlot(current_slot) {
110
- this.recent_slots.push(current_slot);
111
- while (this.recent_slots.length > 12) {
112
- this.recent_slots.pop();
113
- }
114
- }
115
- //@ts-check
116
- /**
117
- *
118
- * @returns {number}
119
- */
120
- estimatedCurrentSlot() {
121
- if (this.recent_slots.isEmpty()) {
122
- throw new Error("recent slots is empty");
123
- }
124
- const sortedRecentSlots = this.recent_slots.toArray().sort((a, b) => a - b);
125
- const max_index = sortedRecentSlots.length - 1;
126
- const median_index = max_index / 2;
127
- const median_recent_slot = sortedRecentSlots[median_index];
128
- const expected_current_slot = median_recent_slot + (max_index - median_index);
129
- const max_reasonable_current_slot = expected_current_slot + MAX_SLOT_SKIP_DISTANCE;
130
- return sortedRecentSlots
131
- .reverse()
132
- .find((slot) => slot <= max_reasonable_current_slot);
133
- }
134
- }
135
- export class TpuClient {
136
- sendSocket;
137
- fanoutSlots;
138
- leaderTpuService;
139
- exit;
140
- connection;
141
- //@ts-check
142
- /**
143
- *
144
- * @param connection {Connection}
145
- * @param config {TpuClientConfig}
146
- */
147
- constructor(connection, config = { fanoutSlots: DEFAULT_FANOUT_SLOTS }) {
148
- this.connection = connection;
149
- this.exit = false;
150
- this.sendSocket = dgram.createSocket("udp4");
151
- this.fanoutSlots = Math.max(Math.min(config.fanoutSlots, MAX_FANOUT_SLOTS), 1);
152
- }
153
- //@ts-check
154
- /**
155
- *
156
- * @param connection {Connection}
157
- * @param websocketUrl {string}
158
- * @param config {TpuClientConfig}
159
- * @returns {Promise<TpuClient>}
160
- */
161
- static load(connection, websocketUrl = "", config = { fanoutSlots: DEFAULT_FANOUT_SLOTS }) {
162
- return new Promise((resolve) => {
163
- const tpuClient = new TpuClient(connection, config);
164
- LeaderTpuService.load(tpuClient.connection, websocketUrl).then((leaderTpuService) => {
165
- tpuClient.leaderTpuService = leaderTpuService;
166
- resolve(tpuClient);
167
- });
168
- });
169
- }
170
- //@ts-check
171
- /**
172
- *
173
- * @param transaction {Transaction}
174
- * @param signers {Array<Signer>}
175
- * @returns {Promise<string>}
176
- */
177
- async sendTransaction(transaction, signers) {
178
- if (transaction.nonceInfo) {
179
- transaction.sign(...signers);
180
- }
181
- else {
182
- transaction.recentBlockhash = (await this.connection.getRecentBlockhash()).blockhash;
183
- transaction.sign(...signers);
184
- }
185
- const rawTransaction = transaction.serialize();
186
- return this.sendRawTransaction(rawTransaction);
187
- }
188
- //@ts-check
189
- /**
190
- *
191
- * @param rawTransaction {Buffer | number[] | Uint8ARray}
192
- * @returns {Promise<string>}
193
- */
194
- async sendRawTransaction(rawTransaction) {
195
- return new Promise((resolve, reject) => {
196
- this.leaderTpuService
197
- .leaderTpuSockets(this.fanoutSlots)
198
- .then((tpu_addresses) => {
199
- tpu_addresses.forEach((tpu_address) => {
200
- this.sendSocket.send(rawTransaction, parseInt(tpu_address.split(":")[1]), tpu_address.split(":")[0], (error) => {
201
- if (!error) {
202
- const message = Transaction.from(rawTransaction);
203
- resolve(bs58.encode(message.signature));
204
- }
205
- else {
206
- console.error(error);
207
- reject(error);
208
- }
209
- });
210
- });
211
- });
212
- });
213
- }
214
- }
215
- export class LeaderTpuService {
216
- recentSlots;
217
- leaderTpuCache;
218
- subscription;
219
- connection;
220
- //@ts-check
221
- /**
222
- *
223
- * @param connection {Connection}
224
- */
225
- constructor(connection) {
226
- this.connection = connection;
227
- }
228
- //@ts-check
229
- /**
230
- *
231
- * @param connection {Connection}
232
- * @param websocket_url {string}
233
- * @returns {Promise<LeaderTpuService}
234
- */
235
- static load(connection, websocket_url = "") {
236
- return new Promise((resolve) => {
237
- const leaderTpuService = new LeaderTpuService(connection);
238
- leaderTpuService.connection.getSlot("processed").then((start_slot) => {
239
- leaderTpuService.recentSlots = new RecentLeaderSlots(start_slot);
240
- LeaderTpuCache.load(connection, start_slot).then((leaderTpuCache) => {
241
- leaderTpuService.leaderTpuCache = leaderTpuCache;
242
- if (websocket_url !== "") {
243
- leaderTpuService.subscription = connection.onSlotUpdate((slotUpdate) => {
244
- if (slotUpdate.type === "completed") {
245
- slotUpdate.slot++;
246
- }
247
- leaderTpuService.recentSlots.recordSlot(slotUpdate.slot);
248
- });
249
- }
250
- else {
251
- leaderTpuService.subscription = null;
252
- }
253
- leaderTpuService.run();
254
- resolve(leaderTpuService);
255
- });
256
- });
257
- });
258
- }
259
- //@ts-check
260
- /**
261
- *
262
- * @param fanout_slots {number}
263
- * @returns {Promise<string[]>}
264
- */
265
- leaderTpuSockets(fanout_slots) {
266
- return this.leaderTpuCache.getLeaderSockets(fanout_slots);
267
- }
268
- //@ts-check
269
- /**
270
- * @returns {void}
271
- */
272
- async run() {
273
- const last_cluster_refresh = Date.now();
274
- let sleep_ms = 1000;
275
- setTimeout(async () => {
276
- sleep_ms = 1000;
277
- if (Date.now() - last_cluster_refresh > 1000 * 5 * 60) {
278
- try {
279
- this.leaderTpuCache.leaderTpuMap =
280
- await this.leaderTpuCache.fetchClusterTpuSockets();
281
- }
282
- catch (error) {
283
- console.warn("Failed to fetch cluster tpu sockets", error);
284
- sleep_ms = 1000;
285
- }
286
- }
287
- const estimatedCurrentSlot = this.recentSlots.estimatedCurrentSlot();
288
- if (estimatedCurrentSlot >=
289
- this.leaderTpuCache.last_epoch_info_slot -
290
- this.leaderTpuCache.slots_in_epoch) {
291
- try {
292
- const epochInfo = await this.connection.getEpochInfo("recent");
293
- this.leaderTpuCache.slots_in_epoch = epochInfo.slotsInEpoch;
294
- this.leaderTpuCache.last_epoch_info_slot = estimatedCurrentSlot;
295
- }
296
- catch (error) {
297
- console.warn("failed to get epoch info");
298
- }
299
- }
300
- if (estimatedCurrentSlot >=
301
- this.leaderTpuCache.lastSlot() - MAX_FANOUT_SLOTS) {
302
- try {
303
- const slot_leaders = await this.leaderTpuCache.fetchSlotLeaders(estimatedCurrentSlot, this.leaderTpuCache.slots_in_epoch);
304
- this.leaderTpuCache.first_slot = estimatedCurrentSlot;
305
- this.leaderTpuCache.leaders = slot_leaders;
306
- }
307
- catch (error) {
308
- console.warn(`Failed to fetch slot leaders (current estimated slot: ${estimatedCurrentSlot})`, error);
309
- sleep_ms = 1000;
310
- }
311
- }
312
- this.run();
313
- }, sleep_ms);
314
- }
315
- }
316
- export class TpuConnection extends Connection {
317
- tpuClient;
318
- //@ts-check
319
- /**
320
- *
321
- * @param endpoint {string}
322
- * @param commitmentOrConfig {Commitment | ConnectionConfig}
323
- */
324
- constructor(endpoint, commitmentOrConfig) {
325
- super(endpoint, commitmentOrConfig);
326
- }
327
- /**
328
- *
329
- * @param transaction {Transaction}
330
- * @param signers {Array<Signer>}
331
- * @returns {Promise<string>}
332
- */
333
- //@ts-ignore
334
- sendTransaction(transaction, signers) {
335
- return this.tpuClient.sendTransaction(transaction, signers);
336
- }
337
- /**
338
- *
339
- * @param rawTransaction {Buffer | Array<number> | Uint8Array}
340
- * @returns {Promise<string>}
341
- */
342
- //@ts-ignore
343
- sendRawTransaction(rawTransaction) {
344
- return this.tpuClient.sendRawTransaction(rawTransaction);
345
- }
346
- ///@ts-check
347
- /**
348
- *
349
- * @param connection {TpuConnection}
350
- * @param transaction {Transaction}
351
- * @param signers {Array<Signer>}
352
- * @param options {ConfirmOptions}
353
- * @returns {Promise<TransactionSignature>}
354
- */
355
- async sendAndConfirmTransaction(connection, transaction, signers, options) {
356
- const signature = await this.sendTransaction(transaction, signers);
357
- const status = (await connection.confirmTransaction(signature, options.commitment)).value;
358
- if (status.err) {
359
- throw new Error(`Transaction ${signature} failed (${JSON.stringify(status)})`);
360
- }
361
- return signature;
362
- }
363
- //@ts-check
364
- /**
365
- *
366
- * @param connection {TpuConnection}
367
- * @param rawTransaction {Buffer | Array<number> | Uint8Array}
368
- * @param options {ConfirmOptions}
369
- * @returns {Promise<string>}
370
- */
371
- async sendAndConfirmRawTransaction(connection, rawTransaction, options) {
372
- const signature = await this.sendRawTransaction(rawTransaction);
373
- const status = (await connection.confirmTransaction(signature, options.commitment)).value;
374
- if (status.err) {
375
- throw new Error(`Transaction ${signature} failed (${JSON.stringify(status)})`);
376
- }
377
- return signature;
378
- }
379
- //@ts-check
380
- /**
381
- *
382
- * @param endpoint {string}
383
- * @param commitmentOrConfig {Commitment | ConnectionConfig}
384
- * @returns {Promise<TpuConnection>}
385
- */
386
- static load(endpoint, commitmentOrConfig) {
387
- return new Promise((resolve) => {
388
- const tpuConnection = new TpuConnection(endpoint, commitmentOrConfig);
389
- //@ts-ignore
390
- TpuClient.load(tpuConnection).then((tpuClient) => {
391
- tpuConnection.tpuClient = tpuClient;
392
- resolve(tpuConnection);
393
- });
394
- });
395
- }
396
- }
397
- //# sourceMappingURL=TpuClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TpuClient.js","sourceRoot":"","sources":["../../../src/TpuClient.ts"],"names":[],"mappings":"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"}
@@ -1,153 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { Commitment, ConfirmOptions, Connection, ConnectionConfig, PublicKey, Signer, Transaction, TransactionSignature } from "@solana/web3.js";
4
- import { default as Denque } from "denque";
5
- import dgram from "dgram";
6
- export declare class LeaderTpuCache {
7
- leaderTpuMap: Map<string, string>;
8
- connection: Connection;
9
- first_slot: number;
10
- slots_in_epoch: number;
11
- last_epoch_info_slot: number;
12
- leaders: Array<PublicKey>;
13
- private constructor();
14
- static load(connection: Connection, startSlot: number): Promise<LeaderTpuCache>;
15
- fetchClusterTpuSockets(): Promise<Map<string, string>>;
16
- fetchSlotLeaders(start_slot: number, slots_in_epoch: number): Promise<Array<PublicKey>>;
17
- lastSlot(): number;
18
- getSlotLeader(slot: number): PublicKey | null;
19
- getLeaderSockets(fanout_slots: number): Promise<Array<string>>;
20
- }
21
- export declare const MAX_SLOT_SKIP_DISTANCE = 48;
22
- export declare const DEFAULT_FANOUT_SLOTS = 12;
23
- export declare const MAX_FANOUT_SLOTS = 100;
24
- export declare class RecentLeaderSlots {
25
- recent_slots: Denque;
26
- /**
27
- *
28
- * @param current_slot {number}
29
- */
30
- constructor(current_slot: number);
31
- /**
32
- *
33
- * @param current_slot {number}
34
- */
35
- recordSlot(current_slot: number): void;
36
- /**
37
- *
38
- * @returns {number}
39
- */
40
- estimatedCurrentSlot(): number;
41
- }
42
- export interface TpuClientConfig {
43
- fanoutSlots: number;
44
- }
45
- export declare class TpuClient {
46
- sendSocket: dgram.Socket;
47
- fanoutSlots: number;
48
- leaderTpuService: LeaderTpuService;
49
- exit: boolean;
50
- connection: Connection;
51
- /**
52
- *
53
- * @param connection {Connection}
54
- * @param config {TpuClientConfig}
55
- */
56
- private constructor();
57
- /**
58
- *
59
- * @param connection {Connection}
60
- * @param websocketUrl {string}
61
- * @param config {TpuClientConfig}
62
- * @returns {Promise<TpuClient>}
63
- */
64
- static load(connection: Connection, websocketUrl?: string, config?: TpuClientConfig): Promise<TpuClient>;
65
- /**
66
- *
67
- * @param transaction {Transaction}
68
- * @param signers {Array<Signer>}
69
- * @returns {Promise<string>}
70
- */
71
- sendTransaction(transaction: Transaction, signers: Array<Signer>): Promise<string>;
72
- /**
73
- *
74
- * @param rawTransaction {Buffer | number[] | Uint8ARray}
75
- * @returns {Promise<string>}
76
- */
77
- sendRawTransaction(rawTransaction: Buffer | number[] | Uint8Array): Promise<string>;
78
- }
79
- export declare class LeaderTpuService {
80
- recentSlots: RecentLeaderSlots;
81
- leaderTpuCache: LeaderTpuCache;
82
- subscription: number | null;
83
- connection: Connection;
84
- /**
85
- *
86
- * @param connection {Connection}
87
- */
88
- private constructor();
89
- /**
90
- *
91
- * @param connection {Connection}
92
- * @param websocket_url {string}
93
- * @returns {Promise<LeaderTpuService}
94
- */
95
- static load(connection: Connection, websocket_url?: string): Promise<LeaderTpuService>;
96
- /**
97
- *
98
- * @param fanout_slots {number}
99
- * @returns {Promise<string[]>}
100
- */
101
- leaderTpuSockets(fanout_slots: number): Promise<string[]>;
102
- /**
103
- * @returns {void}
104
- */
105
- run(): Promise<void>;
106
- }
107
- export declare class TpuConnection extends Connection {
108
- tpuClient: TpuClient;
109
- /**
110
- *
111
- * @param endpoint {string}
112
- * @param commitmentOrConfig {Commitment | ConnectionConfig}
113
- */
114
- private constructor();
115
- /**
116
- *
117
- * @param transaction {Transaction}
118
- * @param signers {Array<Signer>}
119
- * @returns {Promise<string>}
120
- */
121
- sendTransaction(transaction: Transaction, signers: Array<Signer>): Promise<string>;
122
- /**
123
- *
124
- * @param rawTransaction {Buffer | Array<number> | Uint8Array}
125
- * @returns {Promise<string>}
126
- */
127
- sendRawTransaction(rawTransaction: Buffer | Array<number> | Uint8Array): Promise<string>;
128
- /**
129
- *
130
- * @param connection {TpuConnection}
131
- * @param transaction {Transaction}
132
- * @param signers {Array<Signer>}
133
- * @param options {ConfirmOptions}
134
- * @returns {Promise<TransactionSignature>}
135
- */
136
- sendAndConfirmTransaction(connection: TpuConnection, transaction: Transaction, signers: Array<Signer>, options?: ConfirmOptions): Promise<TransactionSignature>;
137
- /**
138
- *
139
- * @param connection {TpuConnection}
140
- * @param rawTransaction {Buffer | Array<number> | Uint8Array}
141
- * @param options {ConfirmOptions}
142
- * @returns {Promise<string>}
143
- */
144
- sendAndConfirmRawTransaction(connection: TpuConnection, rawTransaction: Buffer | Array<number> | Uint8Array, options?: ConfirmOptions): Promise<string>;
145
- /**
146
- *
147
- * @param endpoint {string}
148
- * @param commitmentOrConfig {Commitment | ConnectionConfig}
149
- * @returns {Promise<TpuConnection>}
150
- */
151
- static load(endpoint: string, commitmentOrConfig?: Commitment | ConnectionConfig): Promise<TpuConnection>;
152
- }
153
- //# sourceMappingURL=TpuClient.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TpuClient.d.ts","sourceRoot":"","sources":["../../../src/TpuClient.ts"],"names":[],"mappings":"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"}