sol-parser-sdk-nodejs 0.3.0 → 0.4.4

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.
Files changed (114) hide show
  1. package/.env.example +24 -0
  2. package/README.md +100 -352
  3. package/README_CN.md +107 -253
  4. package/dist/accounts/mod.d.ts +3 -0
  5. package/dist/accounts/mod.js +18 -1
  6. package/dist/accounts/pumpfun.d.ts +6 -0
  7. package/dist/accounts/pumpfun.js +157 -0
  8. package/dist/accounts/rpc_wallet.d.ts +5 -0
  9. package/dist/accounts/rpc_wallet.js +18 -0
  10. package/dist/accounts/rust_aliases.d.ts +10 -0
  11. package/dist/accounts/rust_aliases.js +21 -0
  12. package/dist/accounts/wallet_resolve.d.ts +1 -0
  13. package/dist/accounts/wallet_resolve.js +28 -0
  14. package/dist/common/constants.d.ts +10 -0
  15. package/dist/common/constants.js +13 -0
  16. package/dist/core/account_dispatcher_rpc.js +26 -5
  17. package/dist/core/account_fill_meteora.d.ts +4 -2
  18. package/dist/core/account_fill_meteora.js +5 -2
  19. package/dist/core/account_fill_pumpfun.js +17 -0
  20. package/dist/core/account_pubkey_cache.d.ts +12 -0
  21. package/dist/core/account_pubkey_cache.js +26 -0
  22. package/dist/core/clock.d.ts +6 -0
  23. package/dist/core/clock.js +13 -0
  24. package/dist/core/dex_event.d.ts +172 -44
  25. package/dist/core/metadata.d.ts +1 -0
  26. package/dist/core/pumpfun_fee_enrich.d.ts +4 -0
  27. package/dist/core/pumpfun_fee_enrich.js +80 -0
  28. package/dist/core/unified_parser.d.ts +2 -2
  29. package/dist/core/unified_parser.js +8 -6
  30. package/dist/grpc/client.d.ts +32 -1
  31. package/dist/grpc/client.js +400 -64
  32. package/dist/grpc/event_parser.d.ts +6 -0
  33. package/dist/grpc/event_parser.js +15 -0
  34. package/dist/grpc/geyser_connect.d.ts +30 -0
  35. package/dist/grpc/geyser_connect.js +40 -0
  36. package/dist/grpc/log_instr_dedup.d.ts +2 -0
  37. package/dist/grpc/log_instr_dedup.js +330 -0
  38. package/dist/grpc/order_buffer.d.ts +27 -0
  39. package/dist/grpc/order_buffer.js +166 -0
  40. package/dist/grpc/program_ids.d.ts +26 -0
  41. package/dist/grpc/program_ids.js +55 -0
  42. package/dist/grpc/rpc_to_grpc.d.ts +18 -0
  43. package/dist/grpc/rpc_to_grpc.js +127 -0
  44. package/dist/grpc/subscribe_builder.d.ts +13 -0
  45. package/dist/grpc/subscribe_builder.js +66 -0
  46. package/dist/grpc/transaction_meta.d.ts +29 -0
  47. package/dist/grpc/transaction_meta.js +208 -0
  48. package/dist/grpc/types.d.ts +57 -2
  49. package/dist/grpc/types.js +199 -7
  50. package/dist/grpc/yellowstone_parse.d.ts +8 -1
  51. package/dist/grpc/yellowstone_parse.js +27 -11
  52. package/dist/index.d.ts +39 -8
  53. package/dist/index.js +184 -2
  54. package/dist/instr/bonk_ix.d.ts +4 -1
  55. package/dist/instr/bonk_ix.js +106 -27
  56. package/dist/instr/meteora_damm_ix.d.ts +4 -2
  57. package/dist/instr/meteora_damm_ix.js +248 -13
  58. package/dist/instr/mod.d.ts +1 -0
  59. package/dist/instr/mod.js +16 -3
  60. package/dist/instr/orca_whirlpool_ix.d.ts +4 -1
  61. package/dist/instr/orca_whirlpool_ix.js +45 -16
  62. package/dist/instr/program_ids.d.ts +7 -13
  63. package/dist/instr/program_ids.js +20 -15
  64. package/dist/instr/pump_fees_ix.d.ts +2 -0
  65. package/dist/instr/pump_fees_ix.js +166 -0
  66. package/dist/instr/pumpfun_ix.js +57 -0
  67. package/dist/instr/pumpswap_ix.d.ts +1 -1
  68. package/dist/instr/pumpswap_ix.js +78 -57
  69. package/dist/instr/raydium_amm_v4_ix.d.ts +1 -1
  70. package/dist/instr/raydium_amm_v4_ix.js +94 -28
  71. package/dist/instr/raydium_clmm_ix.d.ts +1 -1
  72. package/dist/instr/raydium_clmm_ix.js +84 -30
  73. package/dist/instr/raydium_cpmm_ix.d.ts +1 -1
  74. package/dist/instr/raydium_cpmm_ix.js +46 -12
  75. package/dist/instr/rust_aliases.d.ts +8 -0
  76. package/dist/instr/rust_aliases.js +16 -0
  77. package/dist/instr/utils.d.ts +1 -1
  78. package/dist/instr/utils.js +2 -1
  79. package/dist/logs/discriminator_lut.d.ts +19 -0
  80. package/dist/logs/discriminator_lut.js +62 -0
  81. package/dist/logs/meteora_damm.d.ts +3 -4
  82. package/dist/logs/meteora_damm.js +3 -369
  83. package/dist/logs/optimized_matcher.d.ts +2 -2
  84. package/dist/logs/optimized_matcher.js +123 -23
  85. package/dist/logs/program_log_discriminators.d.ts +10 -0
  86. package/dist/logs/program_log_discriminators.js +10 -0
  87. package/dist/logs/pump.d.ts +2 -0
  88. package/dist/logs/pump.js +51 -4
  89. package/dist/logs/pump_fees.d.ts +23 -0
  90. package/dist/logs/pump_fees.js +364 -0
  91. package/dist/logs/rust_aliases.d.ts +6 -0
  92. package/dist/logs/rust_aliases.js +13 -0
  93. package/dist/rpc_parser.d.ts +1 -0
  94. package/dist/rpc_parser.js +4 -1
  95. package/dist/rpc_transaction.d.ts +2 -0
  96. package/dist/rpc_transaction.js +14 -6
  97. package/dist/shredstream/alt_lookup.d.ts +9 -0
  98. package/dist/shredstream/alt_lookup.js +70 -0
  99. package/dist/shredstream/client.d.ts +62 -0
  100. package/dist/shredstream/client.js +399 -0
  101. package/dist/shredstream/config.d.ts +30 -0
  102. package/dist/shredstream/config.js +34 -0
  103. package/dist/shredstream/entries_decode.d.ts +28 -0
  104. package/dist/shredstream/entries_decode.js +251 -0
  105. package/dist/shredstream/index.d.ts +17 -0
  106. package/dist/shredstream/index.js +33 -0
  107. package/dist/shredstream/instruction_parse.d.ts +34 -0
  108. package/dist/shredstream/instruction_parse.js +49 -0
  109. package/dist/shredstream/proto_types.d.ts +9 -0
  110. package/dist/shredstream/proto_types.js +2 -0
  111. package/dist/shredstream/shredstream.proto +15 -0
  112. package/dist/shredstream/wire_to_shred_tx.d.ts +2 -0
  113. package/dist/shredstream/wire_to_shred_tx.js +59 -0
  114. package/package.json +28 -11
@@ -2,10 +2,20 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ALL_EVENT_TYPES = void 0;
4
4
  exports.defaultClientConfig = defaultClientConfig;
5
+ exports.lowLatencyClientConfig = lowLatencyClientConfig;
6
+ exports.highThroughputClientConfig = highThroughputClientConfig;
5
7
  exports.newTransactionFilter = newTransactionFilter;
8
+ exports.transactionFilterFromProgramIds = transactionFilterFromProgramIds;
9
+ exports.newAccountFilter = newAccountFilter;
10
+ exports.newSlotFilter = newSlotFilter;
11
+ exports.slotFilterMinSlot = slotFilterMinSlot;
12
+ exports.slotFilterMaxSlot = slotFilterMaxSlot;
13
+ exports.accountFilterFromProgramOwners = accountFilterFromProgramOwners;
14
+ exports.accountFilterMemcmp = accountFilterMemcmp;
6
15
  exports.eventTypeFilterIncludeOnly = eventTypeFilterIncludeOnly;
7
16
  exports.eventTypeFilterExclude = eventTypeFilterExclude;
8
17
  exports.eventTypeFilterIncludesPumpfun = eventTypeFilterIncludesPumpfun;
18
+ exports.eventTypeFilterIncludesPumpFees = eventTypeFilterIncludesPumpFees;
9
19
  exports.eventTypeFilterIncludesPumpswap = eventTypeFilterIncludesPumpswap;
10
20
  exports.eventTypeFilterIncludesMeteoraDammV2 = eventTypeFilterIncludesMeteoraDammV2;
11
21
  exports.eventTypeFilterIncludesRaydiumClmm = eventTypeFilterIncludesRaydiumClmm;
@@ -13,6 +23,7 @@ exports.eventTypeFilterIncludesRaydiumCpmm = eventTypeFilterIncludesRaydiumCpmm;
13
23
  exports.eventTypeFilterIncludesRaydiumAmmV4 = eventTypeFilterIncludesRaydiumAmmV4;
14
24
  exports.eventTypeFilterIncludesOrcaWhirlpool = eventTypeFilterIncludesOrcaWhirlpool;
15
25
  exports.eventTypeFilterIncludesBonk = eventTypeFilterIncludesBonk;
26
+ exports.eventTypeFilterIncludesRaydiumLaunchpad = eventTypeFilterIncludesRaydiumLaunchpad;
16
27
  exports.eventTypeFilterAllowsInstructionParsing = eventTypeFilterAllowsInstructionParsing;
17
28
  function defaultClientConfig() {
18
29
  return {
@@ -31,9 +42,81 @@ function defaultClientConfig() {
31
42
  micro_batch_us: 100,
32
43
  };
33
44
  }
45
+ /** 与 Rust `ClientConfig::low_latency` 一致 */
46
+ function lowLatencyClientConfig() {
47
+ return {
48
+ enable_metrics: false,
49
+ connection_timeout_ms: 5000,
50
+ request_timeout_ms: 10_000,
51
+ enable_tls: true,
52
+ max_retries: 1,
53
+ retry_delay_ms: 100,
54
+ max_concurrent_streams: 200,
55
+ keep_alive_interval_ms: 10_000,
56
+ keep_alive_timeout_ms: 2000,
57
+ buffer_size: 16384,
58
+ order_mode: "Unordered",
59
+ order_timeout_ms: 50,
60
+ micro_batch_us: 50,
61
+ };
62
+ }
63
+ /** 与 Rust `ClientConfig::high_throughput` 一致 */
64
+ function highThroughputClientConfig() {
65
+ return {
66
+ enable_metrics: true,
67
+ connection_timeout_ms: 10_000,
68
+ request_timeout_ms: 30_000,
69
+ enable_tls: true,
70
+ max_retries: 5,
71
+ retry_delay_ms: 2000,
72
+ max_concurrent_streams: 500,
73
+ keep_alive_interval_ms: 60_000,
74
+ keep_alive_timeout_ms: 10_000,
75
+ buffer_size: 32768,
76
+ order_mode: "Unordered",
77
+ order_timeout_ms: 200,
78
+ micro_batch_us: 200,
79
+ };
80
+ }
34
81
  function newTransactionFilter() {
35
82
  return { account_include: [], account_exclude: [], account_required: [] };
36
83
  }
84
+ /** 与 Rust `TransactionFilter::from_program_ids` 一致 */
85
+ function transactionFilterFromProgramIds(programIds) {
86
+ return {
87
+ account_include: [...programIds],
88
+ account_exclude: [],
89
+ account_required: [],
90
+ };
91
+ }
92
+ function newAccountFilter() {
93
+ return { account: [], owner: [], filters: [] };
94
+ }
95
+ function newSlotFilter() {
96
+ return {};
97
+ }
98
+ function slotFilterMinSlot(filter, slot) {
99
+ return { ...filter, min_slot: slot };
100
+ }
101
+ function slotFilterMaxSlot(filter, slot) {
102
+ return { ...filter, max_slot: slot };
103
+ }
104
+ /** 与 Rust `AccountFilter::from_program_owners` 一致 */
105
+ function accountFilterFromProgramOwners(programIds) {
106
+ return { account: [], owner: [...programIds], filters: [] };
107
+ }
108
+ /**
109
+ * 构造 memcmp 账户过滤器(与 Rust `account_filter_memcmp` 一致)。
110
+ * ATA 常在 offset 0 放 mint;PumpSwap 池子等常在 offset 32。
111
+ */
112
+ function accountFilterMemcmp(offset, bytes) {
113
+ return {
114
+ memcmp: {
115
+ offset: String(offset),
116
+ bytes,
117
+ },
118
+ };
119
+ }
37
120
  /** 所有事件类型列表 */
38
121
  exports.ALL_EVENT_TYPES = [
39
122
  // Block
@@ -47,6 +130,16 @@ exports.ALL_EVENT_TYPES = [
47
130
  "PumpFunCreateV2",
48
131
  "PumpFunComplete",
49
132
  "PumpFunMigrate",
133
+ "PumpFeesCreateFeeSharingConfig",
134
+ "PumpFeesInitializeFeeConfig",
135
+ "PumpFeesResetFeeSharingConfig",
136
+ "PumpFeesRevokeFeeSharingAuthority",
137
+ "PumpFeesTransferFeeSharingAuthority",
138
+ "PumpFeesUpdateAdmin",
139
+ "PumpFeesUpdateFeeConfig",
140
+ "PumpFeesUpdateFeeShares",
141
+ "PumpFeesUpsertFeeTiers",
142
+ "PumpFunMigrateBondingCurveCreator",
50
143
  // PumpSwap
51
144
  "PumpSwapTrade",
52
145
  "PumpSwapBuy",
@@ -90,9 +183,10 @@ exports.ALL_EVENT_TYPES = [
90
183
  "MeteoraDammV2Swap",
91
184
  "MeteoraDammV2AddLiquidity",
92
185
  "MeteoraDammV2RemoveLiquidity",
186
+ "MeteoraDammV2RemoveAllLiquidity",
93
187
  "MeteoraDammV2CreatePosition",
94
- "MeteoraDammV2ClosePosition",
95
188
  "MeteoraDammV2InitializePool",
189
+ "MeteoraDammV2ClosePosition",
96
190
  // Meteora DLMM
97
191
  "MeteoraDlmmSwap",
98
192
  "MeteoraDlmmAddLiquidity",
@@ -110,6 +204,7 @@ exports.ALL_EVENT_TYPES = [
110
204
  "TokenAccount",
111
205
  "TokenInfo",
112
206
  "NonceAccount",
207
+ "AccountPumpFunGlobal",
113
208
  "AccountPumpSwapGlobalConfig",
114
209
  "AccountPumpSwapPool",
115
210
  ];
@@ -148,6 +243,17 @@ function eventTypeFilterIncludesPumpfun(filter) {
148
243
  "PumpFunCreateV2",
149
244
  "PumpFunComplete",
150
245
  "PumpFunMigrate",
246
+ "PumpFeesCreateFeeSharingConfig",
247
+ "PumpFeesInitializeFeeConfig",
248
+ "PumpFeesResetFeeSharingConfig",
249
+ "PumpFeesRevokeFeeSharingAuthority",
250
+ "PumpFeesTransferFeeSharingAuthority",
251
+ "PumpFeesUpdateAdmin",
252
+ "PumpFeesUpdateFeeConfig",
253
+ "PumpFeesUpdateFeeShares",
254
+ "PumpFeesUpsertFeeTiers",
255
+ "PumpFunMigrateBondingCurveCreator",
256
+ "AccountPumpFunGlobal",
151
257
  ].includes(t));
152
258
  }
153
259
  if (filter.exclude_types) {
@@ -160,10 +266,42 @@ function eventTypeFilterIncludesPumpfun(filter) {
160
266
  "PumpFunCreateV2",
161
267
  "PumpFunComplete",
162
268
  "PumpFunMigrate",
269
+ "PumpFeesCreateFeeSharingConfig",
270
+ "PumpFeesInitializeFeeConfig",
271
+ "PumpFeesResetFeeSharingConfig",
272
+ "PumpFeesRevokeFeeSharingAuthority",
273
+ "PumpFeesTransferFeeSharingAuthority",
274
+ "PumpFeesUpdateAdmin",
275
+ "PumpFeesUpdateFeeConfig",
276
+ "PumpFeesUpdateFeeShares",
277
+ "PumpFeesUpsertFeeTiers",
278
+ "PumpFunMigrateBondingCurveCreator",
279
+ "AccountPumpFunGlobal",
163
280
  ].includes(t));
164
281
  }
165
282
  return true;
166
283
  }
284
+ const PUMP_FEES_EVENT_TYPES = [
285
+ "PumpFeesCreateFeeSharingConfig",
286
+ "PumpFeesInitializeFeeConfig",
287
+ "PumpFeesResetFeeSharingConfig",
288
+ "PumpFeesRevokeFeeSharingAuthority",
289
+ "PumpFeesTransferFeeSharingAuthority",
290
+ "PumpFeesUpdateAdmin",
291
+ "PumpFeesUpdateFeeConfig",
292
+ "PumpFeesUpdateFeeShares",
293
+ "PumpFeesUpsertFeeTiers",
294
+ ];
295
+ /** 过滤器是否包含 Pump Fees (`pfeeUx...`) 相关类型 */
296
+ function eventTypeFilterIncludesPumpFees(filter) {
297
+ if (filter.include_only) {
298
+ return filter.include_only.some((t) => PUMP_FEES_EVENT_TYPES.includes(t));
299
+ }
300
+ if (filter.exclude_types) {
301
+ return !filter.exclude_types.some((t) => PUMP_FEES_EVENT_TYPES.includes(t));
302
+ }
303
+ return true;
304
+ }
167
305
  /** 过滤器是否包含 PumpSwap 相关类型 */
168
306
  function eventTypeFilterIncludesPumpswap(filter) {
169
307
  if (filter.include_only) {
@@ -193,9 +331,10 @@ function eventTypeFilterIncludesMeteoraDammV2(filter) {
193
331
  "MeteoraDammV2Swap",
194
332
  "MeteoraDammV2AddLiquidity",
195
333
  "MeteoraDammV2CreatePosition",
196
- "MeteoraDammV2ClosePosition",
197
334
  "MeteoraDammV2InitializePool",
335
+ "MeteoraDammV2ClosePosition",
198
336
  "MeteoraDammV2RemoveLiquidity",
337
+ "MeteoraDammV2RemoveAllLiquidity",
199
338
  ].includes(t));
200
339
  }
201
340
  if (filter.exclude_types) {
@@ -203,9 +342,10 @@ function eventTypeFilterIncludesMeteoraDammV2(filter) {
203
342
  "MeteoraDammV2Swap",
204
343
  "MeteoraDammV2AddLiquidity",
205
344
  "MeteoraDammV2CreatePosition",
206
- "MeteoraDammV2ClosePosition",
207
345
  "MeteoraDammV2InitializePool",
346
+ "MeteoraDammV2ClosePosition",
208
347
  "MeteoraDammV2RemoveLiquidity",
348
+ "MeteoraDammV2RemoveAllLiquidity",
209
349
  ].includes(t));
210
350
  }
211
351
  return true;
@@ -218,6 +358,10 @@ function eventTypeFilterIncludesRaydiumClmm(filter) {
218
358
  "RaydiumClmmIncreaseLiquidity",
219
359
  "RaydiumClmmDecreaseLiquidity",
220
360
  "RaydiumClmmCreatePool",
361
+ "RaydiumClmmOpenPosition",
362
+ "RaydiumClmmOpenPositionWithTokenExtNft",
363
+ "RaydiumClmmClosePosition",
364
+ "RaydiumClmmCollectFee",
221
365
  ].includes(t));
222
366
  }
223
367
  if (filter.exclude_types) {
@@ -226,6 +370,10 @@ function eventTypeFilterIncludesRaydiumClmm(filter) {
226
370
  "RaydiumClmmIncreaseLiquidity",
227
371
  "RaydiumClmmDecreaseLiquidity",
228
372
  "RaydiumClmmCreatePool",
373
+ "RaydiumClmmOpenPosition",
374
+ "RaydiumClmmOpenPositionWithTokenExtNft",
375
+ "RaydiumClmmClosePosition",
376
+ "RaydiumClmmCollectFee",
229
377
  ].includes(t));
230
378
  }
231
379
  return true;
@@ -276,29 +424,73 @@ function eventTypeFilterIncludesOrcaWhirlpool(filter) {
276
424
  }
277
425
  return true;
278
426
  }
279
- /** 过滤器是否包含 Bonk Launchpad 相关类型 */
427
+ /** 过滤器是否包含 Bonk Launchpad 相关类型(与 Rust `includes_raydium_launchpad` / Bonk 集合一致) */
280
428
  function eventTypeFilterIncludesBonk(filter) {
429
+ const bonk = ["BonkTrade", "BonkPoolCreate", "BonkMigrateAmm"];
281
430
  if (filter.include_only) {
282
- return filter.include_only.some((t) => ["BonkTrade", "BonkPoolCreate"].includes(t));
431
+ return filter.include_only.some((t) => bonk.includes(t));
283
432
  }
284
433
  if (filter.exclude_types) {
285
- return !filter.exclude_types.some((t) => ["BonkTrade", "BonkPoolCreate"].includes(t));
434
+ return !filter.exclude_types.some((t) => bonk.includes(t));
286
435
  }
287
436
  return true;
288
437
  }
438
+ /** 与 Rust `EventTypeFilter::includes_raydium_launchpad` 同名语义 */
439
+ function eventTypeFilterIncludesRaydiumLaunchpad(filter) {
440
+ return eventTypeFilterIncludesBonk(filter);
441
+ }
289
442
  /**
290
443
  * `parseInstructionUnified` 前置白名单:仅当 `include_only` 与下列指令相关类型有交集时才解析指令。
291
444
  * 若白名单中不含下列任一类型,则整条指令解析入口返回 null。
292
445
  */
293
446
  function eventTypeFilterAllowsInstructionParsing(includeOnly) {
294
447
  const ix = [
448
+ "PumpFunTrade",
449
+ "PumpFunBuy",
450
+ "PumpFunSell",
451
+ "PumpFunBuyExactSolIn",
452
+ "PumpFunCreate",
453
+ "PumpFunCreateV2",
295
454
  "PumpFunMigrate",
455
+ "PumpFunMigrateBondingCurveCreator",
456
+ "AccountPumpFunGlobal",
457
+ ...PUMP_FEES_EVENT_TYPES,
458
+ "PumpSwapBuy",
459
+ "PumpSwapSell",
460
+ "PumpSwapCreatePool",
461
+ "PumpSwapLiquidityAdded",
462
+ "PumpSwapLiquidityRemoved",
296
463
  "MeteoraDammV2Swap",
297
464
  "MeteoraDammV2AddLiquidity",
298
465
  "MeteoraDammV2CreatePosition",
299
- "MeteoraDammV2ClosePosition",
300
466
  "MeteoraDammV2InitializePool",
467
+ "MeteoraDammV2ClosePosition",
301
468
  "MeteoraDammV2RemoveLiquidity",
469
+ "MeteoraDammV2RemoveAllLiquidity",
470
+ "RaydiumClmmSwap",
471
+ "RaydiumClmmIncreaseLiquidity",
472
+ "RaydiumClmmDecreaseLiquidity",
473
+ "RaydiumClmmCreatePool",
474
+ "RaydiumClmmOpenPosition",
475
+ "RaydiumClmmOpenPositionWithTokenExtNft",
476
+ "RaydiumClmmClosePosition",
477
+ "RaydiumClmmCollectFee",
478
+ "RaydiumCpmmSwap",
479
+ "RaydiumCpmmDeposit",
480
+ "RaydiumCpmmWithdraw",
481
+ "RaydiumCpmmInitialize",
482
+ "RaydiumAmmV4Swap",
483
+ "RaydiumAmmV4Deposit",
484
+ "RaydiumAmmV4Withdraw",
485
+ "RaydiumAmmV4WithdrawPnl",
486
+ "RaydiumAmmV4Initialize2",
487
+ "OrcaWhirlpoolSwap",
488
+ "OrcaWhirlpoolLiquidityIncreased",
489
+ "OrcaWhirlpoolLiquidityDecreased",
490
+ "OrcaWhirlpoolPoolInitialized",
491
+ "BonkTrade",
492
+ "BonkPoolCreate",
493
+ "BonkMigrateAmm",
302
494
  ];
303
495
  return includeOnly.some((t) => ix.includes(t));
304
496
  }
@@ -1,9 +1,16 @@
1
1
  import type { DexEvent } from "../core/dex_event.js";
2
- import type { SubscribeUpdateTransactionInfo } from "./types.js";
2
+ import type { EventTypeFilter, SubscribeUpdateTransactionInfo } from "./types.js";
3
+ /**
4
+ * Yellowstone `SubscribeUpdateTransactionInfo.index` → `EventMetadata.tx_index`。
5
+ * 与 Rust `sol-parser-sdk` gRPC 路径中 `let idx = info.index` 传入 `parse_logs(..., idx, ...)` 一致。
6
+ */
7
+ export declare function grpcTxIndexFromInfo(info: Pick<SubscribeUpdateTransactionInfo, "index">): number;
3
8
  /**
4
9
  * 从 gRPC 回调中的 `SubscribeUpdateTransactionInfo`(须含 `transactionRaw` + `metaRaw` 原始 proto)
5
10
  * 解析 `DexEvent[]`,并对 PumpSwap/PumpFun 等补齐 mint、池子 ATA 等(与 Rust 订阅路径一致)。
6
11
  */
7
12
  export declare function parseDexEventsFromGrpcTransactionInfo(info: SubscribeUpdateTransactionInfo, slot: string | bigint, options?: {
8
13
  blockTimeUs?: number;
14
+ grpcRecvUs?: number;
15
+ eventTypeFilter?: EventTypeFilter;
9
16
  }): DexEvent[];
@@ -3,17 +3,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.grpcTxIndexFromInfo = grpcTxIndexFromInfo;
6
7
  exports.parseDexEventsFromGrpcTransactionInfo = parseDexEventsFromGrpcTransactionInfo;
7
8
  /**
8
- * Yellowstone gRPC 单笔交易:日志解析 + 与 Rust `parse_logs` 相同的账户/数据填充。
9
+ * Yellowstone gRPC 单笔交易:统一交易解析(指令 + 日志 + 与 Rust 相同的账户/数据填充)。
9
10
  * 依赖 `@triton-one/yellowstone-grpc` 的 `txEncode`(Binary)得到与 web3 兼容的 meta + 反序列化交易。
10
11
  */
11
12
  const yellowstone_grpc_1 = require("@triton-one/yellowstone-grpc");
12
13
  const yellowstone_grpc_solana_encoding_wasm_js_1 = require("@triton-one/yellowstone-grpc/dist/encoding/yellowstone_grpc_solana_encoding_wasm.js");
13
14
  const bs58_1 = __importDefault(require("bs58"));
14
15
  const web3_js_1 = require("@solana/web3.js");
15
- const unified_parser_js_1 = require("../core/unified_parser.js");
16
16
  const rpc_transaction_js_1 = require("../rpc_transaction.js");
17
+ /**
18
+ * Yellowstone `SubscribeUpdateTransactionInfo.index` → `EventMetadata.tx_index`。
19
+ * 与 Rust `sol-parser-sdk` gRPC 路径中 `let idx = info.index` 传入 `parse_logs(..., idx, ...)` 一致。
20
+ */
21
+ function grpcTxIndexFromInfo(info) {
22
+ const index = info.index;
23
+ if (index === undefined)
24
+ return 0;
25
+ const n = typeof index === "bigint" ? Number(index) : Number(index);
26
+ return Number.isFinite(n) && n >= 0 ? Math.floor(n) : 0;
27
+ }
17
28
  /**
18
29
  * 从 gRPC 回调中的 `SubscribeUpdateTransactionInfo`(须含 `transactionRaw` + `metaRaw` 原始 proto)
19
30
  * 解析 `DexEvent[]`,并对 PumpSwap/PumpFun 等补齐 mint、池子 ATA 等(与 Rust 订阅路径一致)。
@@ -33,14 +44,19 @@ function parseDexEventsFromGrpcTransactionInfo(info, slot, options) {
33
44
  const enc = yellowstone_grpc_1.txEncode.encode(y, yellowstone_grpc_solana_encoding_wasm_js_1.WasmUiTransactionEncoding.Binary, 0, false);
34
45
  const vt = web3_js_1.VersionedTransaction.deserialize(bs58_1.default.decode(enc.transaction));
35
46
  const meta = enc.meta;
36
- const logs = meta?.logMessages;
37
- if (!Array.isArray(logs) || logs.length === 0)
38
- return [];
39
47
  const slotNum = typeof slot === "bigint" ? Number(slot) : Number(slot);
40
- const sigHint = bs58_1.default.encode(Uint8Array.from(info.signature)) + "...";
41
- const events = (0, unified_parser_js_1.parseLogsOnly)(logs, sigHint, slotNum, options?.blockTimeUs);
42
- if (events.length === 0)
43
- return [];
44
- (0, rpc_transaction_js_1.applyAccountFillsToLogEvents)(events, vt.message, meta);
45
- return events;
48
+ const signatureBase58 = bs58_1.default.encode(Uint8Array.from(info.signature));
49
+ const txIndex = grpcTxIndexFromInfo(info);
50
+ const blockTime = options?.blockTimeUs == null ? null : Math.floor(options.blockTimeUs / 1_000_000);
51
+ const parsed = (0, rpc_transaction_js_1.parseRpcTransaction)({
52
+ slot: slotNum,
53
+ blockTime,
54
+ meta,
55
+ transaction: vt,
56
+ }, signatureBase58, options?.eventTypeFilter, {
57
+ blockTimeUs: options?.blockTimeUs,
58
+ grpcRecvUs: options?.grpcRecvUs,
59
+ txIndex,
60
+ });
61
+ return parsed.ok ? parsed.events : [];
46
62
  }
package/dist/index.d.ts CHANGED
@@ -1,18 +1,49 @@
1
+ export { DEFAULT_CHANNEL_SIZE, DEFAULT_CONNECT_TIMEOUT, DEFAULT_MAX_DECODING_MESSAGE_SIZE, DEFAULT_METRICS_PRINT_INTERVAL_SECONDS, DEFAULT_METRICS_WINDOW_SECONDS, DEFAULT_REQUEST_TIMEOUT, SLOW_PROCESSING_THRESHOLD_US, } from "./common/constants.js";
1
2
  export type { DexEvent } from "./core/dex_event.js";
3
+ export { metadataForDexEvent, defaultPubkey } from "./core/dex_event.js";
2
4
  export { bigintToJsonReplacer, dexEventToJsonString } from "./core/json_utils.js";
3
5
  export type { EventMetadata } from "./core/metadata.js";
4
6
  export type { ParseError } from "./core/error.js";
5
7
  export { formatParseError } from "./core/error.js";
6
- export { parseTransactionEvents, parseLogsOnly, parseTransactionWithListener, parseTransactionEventsStreaming, parseLogsStreaming, parseTransactionWithStreamingListener, parseLog, nowUs, type EventListener, type StreamingEventListener, } from "./core/unified_parser.js";
8
+ export { enrichCreateV2ObservedFeeRecipient, enrichPumpfunTradesFromCreateInstructions, enrichPumpfunSameTxPostMerge, } from "./core/pumpfun_fee_enrich.js";
9
+ export { parseTransactionEvents, parseLogsOnly, parseTransactionWithListener, parseTransactionEventsStreaming, parseLogsStreaming, parseTransactionWithStreamingListener, parseLog, parseLog as parse_log, nowUs, type EventListener, type StreamingEventListener, } from "./core/unified_parser.js";
10
+ export { nowMicros, nowNanos, elapsedMicrosSince } from "./core/clock.js";
11
+ export { AccountPubkeyCache, buildAccountPubkeysWithCache, buildAccountPubkeysWithCache as build_account_pubkeys_with_cache, } from "./core/account_pubkey_cache.js";
7
12
  export { warmupParser, isWarmedUp } from "./warmup.js";
8
- export { parseTransactionFromRpc, parseRpcTransaction, fillAccountsFromTransactionDataRpc, fillDataRpc, applyAccountFillsToLogEvents, } from "./rpc_parser.js";
9
- export { parseDexEventsFromGrpcTransactionInfo } from "./grpc/yellowstone_parse.js";
10
- export { type OrderMode, type ClientConfig, type TransactionFilter, type EventType, type EventTypeFilter, defaultClientConfig, newTransactionFilter, eventTypeFilterIncludeOnly, eventTypeFilterExclude, eventTypeFilterIncludesPumpfun, eventTypeFilterIncludesPumpswap, eventTypeFilterIncludesMeteoraDammV2, eventTypeFilterAllowsInstructionParsing, } from "./grpc/types.js";
13
+ export { parseTransactionFromRpc, parseRpcTransaction, fillAccountsFromTransactionDataRpc, fillDataRpc, applyAccountFillsToLogEvents, convertRpcToGrpc, convert_rpc_to_grpc, type ConvertRpcToGrpcOk, type ConvertRpcToGrpcErr, } from "./rpc_parser.js";
14
+ export { parseDexEventsFromGrpcTransactionInfo, grpcTxIndexFromInfo, } from "./grpc/yellowstone_parse.js";
15
+ export { pubkeyBytesToBs58, collectAccountKeysBs58, lamportBalanceDeltas, heuristicSolCounterpartiesForWatchedKeys, tokenBalanceRawAmount, splTokenCounterpartyByOwner, collectWatchTransferCounterpartyPairs, tryYellowstoneSignature, } from "./grpc/transaction_meta.js";
16
+ /** Rust `grpc::transaction_meta` 蛇形命名别名(便于从 Rust 迁移) */
17
+ export { pubkeyBytesToBs58 as pubkey_bytes_to_bs58, collectAccountKeysBs58 as collect_account_keys_bs58, lamportBalanceDeltas as lamport_balance_deltas, heuristicSolCounterpartiesForWatchedKeys as heuristic_sol_counterparties_for_watched_keys, tokenBalanceRawAmount as token_balance_raw_amount, splTokenCounterpartyByOwner as spl_token_counterparty_by_owner, collectWatchTransferCounterpartyPairs as collect_watch_transfer_counterparty_pairs, tryYellowstoneSignature as try_yellowstone_signature, } from "./grpc/transaction_meta.js";
18
+ export { type OrderMode, type Protocol, type ClientConfig, type StreamingConfig, type TransactionFilter, type AccountFilter, type AccountFilterData, type AccountFilterMemcmp, type SlotFilter, type EventType, type StreamingEventType, type EventTypeFilter, defaultClientConfig, lowLatencyClientConfig, highThroughputClientConfig, newTransactionFilter, transactionFilterFromProgramIds, newAccountFilter, newSlotFilter, slotFilterMinSlot, slotFilterMaxSlot, accountFilterFromProgramOwners, accountFilterMemcmp, eventTypeFilterIncludeOnly, eventTypeFilterExclude, eventTypeFilterIncludesPumpfun, eventTypeFilterIncludesPumpswap, eventTypeFilterIncludesMeteoraDammV2, eventTypeFilterIncludesRaydiumClmm, eventTypeFilterIncludesRaydiumCpmm, eventTypeFilterIncludesRaydiumAmmV4, eventTypeFilterIncludesOrcaWhirlpool, eventTypeFilterIncludesBonk, eventTypeFilterIncludesRaydiumLaunchpad, eventTypeFilterIncludesPumpFees, eventTypeFilterAllowsInstructionParsing, ALL_EVENT_TYPES, } from "./grpc/types.js";
19
+ export { ALL_EVENT_TYPES as all_event_types } from "./grpc/types.js";
20
+ export type { StreamingConfig as streaming_config } from "./grpc/types.js";
21
+ export { PROTOCOL_PROGRAM_IDS, PUMPFUN_PROGRAM_ID, PUMPSWAP_PROGRAM_ID, PUMPSWAP_FEES_PROGRAM_ID, PUMP_FEES_PROGRAM_ID, BONK_PROGRAM_ID, RAYDIUM_CPMM_PROGRAM_ID, RAYDIUM_CLMM_PROGRAM_ID, RAYDIUM_AMM_V4_PROGRAM_ID, ORCA_WHIRLPOOL_PROGRAM_ID, METEORA_POOLS_PROGRAM_ID, METEORA_DAMM_V2_PROGRAM_ID, METEORA_DLMM_PROGRAM_ID, getProgramIdsForProtocols, transactionFilterForProtocols, accountFilterForProtocols, } from "./grpc/program_ids.js";
22
+ export { PROTOCOL_PROGRAM_IDS as protocol_program_ids, getProgramIdsForProtocols as get_program_ids_for_protocols, transactionFilterForProtocols as transaction_filter_for_protocols, accountFilterForProtocols as account_filter_for_protocols, } from "./grpc/program_ids.js";
23
+ /** Rust `grpc::types` 蛇形命名别名 */
24
+ export { defaultClientConfig as default_client_config, lowLatencyClientConfig as low_latency_client_config, highThroughputClientConfig as high_throughput_client_config, newTransactionFilter as new_transaction_filter, transactionFilterFromProgramIds as transaction_filter_from_program_ids, newAccountFilter as new_account_filter, newSlotFilter as new_slot_filter, slotFilterMinSlot as slot_filter_min_slot, slotFilterMaxSlot as slot_filter_max_slot, accountFilterFromProgramOwners as account_filter_from_program_owners, accountFilterMemcmp as account_filter_memcmp, eventTypeFilterIncludeOnly as event_type_filter_include_only, eventTypeFilterExclude as event_type_filter_exclude, eventTypeFilterIncludeOnly as include_only, eventTypeFilterExclude as exclude_types, } from "./grpc/types.js";
25
+ export { buildSubscribeRequest, buildSubscribeRequestWithCommitment, buildSubscribeTransactionFiltersNamed, CommitmentLevel, } from "./grpc/subscribe_builder.js";
26
+ /** Rust `grpc::subscribe_builder` 蛇形命名 */
27
+ export { buildSubscribeRequest as build_subscribe_request, buildSubscribeRequestWithCommitment as build_subscribe_request_with_commitment, buildSubscribeTransactionFiltersNamed as build_subscribe_transaction_filters_named, } from "./grpc/subscribe_builder.js";
11
28
  export { parseLogUnified, parseLogOptimized } from "./logs/optimized_matcher.js";
12
- export { parseMeteoraDammLog, parseInitializePoolEvent } from "./logs/meteora_damm.js";
29
+ /** Rust `logs` 蛇形命名别名(`parse_meteora_damm_log` 等) */
30
+ export { parse_meteora_damm_log, parse_meteora_dlmm_log, parse_log_optimized, parse_log_unified, } from "./logs/rust_aliases.js";
31
+ /** 与 Rust `logs::discriminator_lut` 名称 / 协议查询对齐 */
32
+ export { discriminatorToName, discriminator_to_name, discriminatorToProtocol, discriminator_to_protocol, lookupDiscriminator, lookup_discriminator, type LogProtocol, type LutDiscriminatorInfo, } from "./logs/discriminator_lut.js";
33
+ export { parseMeteoraDammLog } from "./logs/meteora_damm.js";
13
34
  export { PROGRAM_LOG_DISC, PUMPSWAP_DISC, u64leDiscriminator, type ProgramLogDiscriminatorKey, } from "./logs/program_log_discriminators.js";
14
35
  export type { ParsedEvent } from "./parser_alias.js";
15
- export { parseAccountUnified, type AccountData, parseNonceAccount, isNonceAccount, parseTokenAccount, parsePumpswapGlobalConfig, parsePumpswapPool, parsePumpswapAccount, isGlobalConfigAccount, isPoolAccount, hasDiscriminator, } from "./accounts/mod.js";
16
- export { parseInstructionUnified, parsePumpfunInstruction, parsePumpswapInstruction, parseMeteoraDammInstruction, } from "./instr/mod.js";
36
+ export { parseAccountUnified, type AccountData, parseNonceAccount, isNonceAccount, parseTokenAccount, parsePumpfunGlobal, parsePumpfunAccount, isPumpfunGlobalAccount, parsePumpswapGlobalConfig, parsePumpswapPool, parsePumpswapAccount, isGlobalConfigAccount, isPoolAccount, hasDiscriminator, userWalletPubkeyForOnchainAccount, rpcResolveUserWalletPubkey, } from "./accounts/mod.js";
37
+ /** Rust `accounts` 蛇形命名别名 */
38
+ export { parse_account_unified, parse_nonce_account, parse_token_account, parse_pumpfun_global, parse_pumpswap_global_config, parse_pumpswap_pool, rpc_resolve_user_wallet_pubkey, user_wallet_pubkey_for_onchain_account, } from "./accounts/rust_aliases.js";
39
+ export { parseInstructionUnified, parsePumpfunInstruction, parsePumpswapInstruction, parseMeteoraDammInstruction, parsePumpFeesInstruction, } from "./instr/mod.js";
40
+ /** Rust `instr` 根模块蛇形命名别名 */
41
+ export { parse_instruction_unified, parse_pumpfun_instruction, parse_pumpswap_instruction, parse_meteora_damm_instruction, parse_pump_fees_instruction, } from "./instr/rust_aliases.js";
17
42
  export * as programIds from "./instr/program_ids.js";
18
- export { YellowstoneGrpc, type SubscribeCallbacks } from "./grpc/client.js";
43
+ export { YellowstoneGrpc, type SubscribeCallbacks, type DexEventSubscription } from "./grpc/client.js";
44
+ export { connectYellowstoneGeyser, defaultGeyserConnectConfig, geyserGrpcChannelOptions, type GeyserConnectConfig, } from "./grpc/geyser_connect.js";
45
+ /** 与 Rust `sol_parser_sdk::grpc::event_parser` 模块对应 */
46
+ export * as event_parser from "./grpc/event_parser.js";
47
+ export { connectYellowstoneGeyser as connect_yellowstone_geyser, defaultGeyserConnectConfig as default_geyser_connect_config, geyserGrpcChannelOptions as geyser_grpc_channel_options, } from "./grpc/geyser_connect.js";
48
+ export { ShredStreamClient, ShredEventQueue, dexEventsFromShredWasmTx, dexEventsFromShredWasmTxWithFullKeys, fullAccountKeyStringsFromShredTx, loadAddressLookupTableAccounts, bincodeVecEntryCount, decodeEntriesBincodeFlat, decodeEntriesBincodeNested, decodeShredstreamEntriesBincode, wireBytesToShredWasmTx, type ShredStreamReceiveStats, type ShredWasmTx, type ShredWasmCompiledIx, type ShredStreamConfig, type DecodedWireTransaction, defaultShredStreamConfig, lowLatencyShredStreamConfig, highThroughputShredStreamConfig, type SubscribeEntriesRequest, type ShredstreamEntryMessage, } from "./shredstream/index.js";
49
+ export { defaultShredStreamConfig as default_shred_stream_config, lowLatencyShredStreamConfig as low_latency_shred_stream_config, highThroughputShredStreamConfig as high_throughput_shred_stream_config, } from "./shredstream/index.js";