sol-parser-sdk 0.5.17 → 0.5.18

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 (64) hide show
  1. package/README.md +24 -15
  2. package/README_CN.md +23 -14
  3. package/dist/accounts/pumpfun.js +15 -0
  4. package/dist/accounts/pumpswap.js +2 -0
  5. package/dist/core/account_dispatcher_rpc.d.ts +2 -1
  6. package/dist/core/account_dispatcher_rpc.js +94 -9
  7. package/dist/core/account_fill_pumpfun.js +20 -0
  8. package/dist/core/account_fill_pumpswap.d.ts +2 -0
  9. package/dist/core/account_fill_pumpswap.js +55 -6
  10. package/dist/core/account_fill_raydium.js +4 -0
  11. package/dist/core/dex_event.d.ts +149 -0
  12. package/dist/grpc/client.js +2 -0
  13. package/dist/grpc/log_instr_dedup.js +75 -7
  14. package/dist/grpc/order_buffer.d.ts +5 -0
  15. package/dist/grpc/order_buffer.js +53 -17
  16. package/dist/grpc/types.d.ts +4 -1
  17. package/dist/grpc/types.js +23 -0
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.js +1 -0
  20. package/dist/instr/inner.js +28 -1
  21. package/dist/instr/meteora_damm_ix.js +26 -0
  22. package/dist/instr/meteora_pools_ix.js +17 -9
  23. package/dist/instr/orca_whirlpool_ix.js +13 -9
  24. package/dist/instr/pumpfun_ix.js +84 -0
  25. package/dist/instr/pumpswap_ix.js +85 -10
  26. package/dist/instr/raydium_clmm_ix.js +5 -3
  27. package/dist/instr/raydium_cpmm_ix.js +11 -8
  28. package/dist/logs/meteora_damm.d.ts +7 -0
  29. package/dist/logs/meteora_damm.js +211 -0
  30. package/dist/logs/meteora_dbc.d.ts +3 -0
  31. package/dist/logs/meteora_dbc.js +23 -0
  32. package/dist/logs/meteora_dlmm.js +16 -4
  33. package/dist/logs/optimized_matcher.js +93 -10
  34. package/dist/logs/program_log_discriminators.d.ts +11 -0
  35. package/dist/logs/program_log_discriminators.js +11 -0
  36. package/dist/logs/pump.js +6 -3
  37. package/dist/logs/pump_amm.js +8 -2
  38. package/dist/logs/pump_upgrade.d.ts +68 -0
  39. package/dist/logs/pump_upgrade.js +128 -0
  40. package/dist/logs/raydium_cpmm.js +7 -3
  41. package/dist/rpc_transaction.js +84 -7
  42. package/dist/shredstream/alt_cache.d.ts +26 -0
  43. package/dist/shredstream/alt_cache.js +138 -0
  44. package/dist/shredstream/client.d.ts +11 -3
  45. package/dist/shredstream/client.js +76 -72
  46. package/dist/shredstream/config.d.ts +7 -3
  47. package/dist/shredstream/index.d.ts +3 -2
  48. package/dist/shredstream/index.js +5 -3
  49. package/dist/shredstream/instruction_parse.d.ts +1 -1
  50. package/dist/shredstream/instruction_parse.js +1 -0
  51. package/dist/simulation_route.d.ts +1 -1
  52. package/dist/simulation_route.js +17 -4
  53. package/dist/transaction_route.js +20 -1
  54. package/dist/wire_transaction.js +9 -10
  55. package/docs/USAGE.md +161 -0
  56. package/package.json +2 -5
  57. package/NATIVE_ALIGNMENT.md +0 -312
  58. package/NATIVE_DAMM_FACTORY_ALIGNMENT_20261004.md +0 -16
  59. package/NATIVE_DAMM_FACTORY_EVIDENCE_20261004.json +0 -55
  60. package/NATIVE_MIGRATION.md +0 -38
  61. package/NATIVE_PUMPFUN_NATIVE_DEBIT_ALIGNMENT_20261004.md +0 -18
  62. package/NATIVE_PUMPFUN_NATIVE_DEBIT_EVIDENCE_20261004.json +0 -57
  63. package/NATIVE_PUMPFUN_SETTLEMENT_ALIGNMENT_20261004.md +0 -11
  64. package/NATIVE_PUMPFUN_SETTLEMENT_EVIDENCE_20261004.json +0 -70
@@ -7,9 +7,16 @@ exports.parseRemoveLiquidityFromData = parseRemoveLiquidityFromData;
7
7
  exports.parseLiquidityChangeFromData = parseLiquidityChangeFromData;
8
8
  exports.parseUpdateDelegatePermissionFromData = parseUpdateDelegatePermissionFromData;
9
9
  exports.parseWithdrawDeadLiquidityRewardFromData = parseWithdrawDeadLiquidityRewardFromData;
10
+ exports.parseWithdrawIneligibleRewardFromData = parseWithdrawIneligibleRewardFromData;
11
+ exports.parseUpdateRewardFunderFromData = parseUpdateRewardFunderFromData;
12
+ exports.parseUpdateRewardDurationFromData = parseUpdateRewardDurationFromData;
13
+ exports.parseInitializeRewardFromData = parseInitializeRewardFromData;
14
+ exports.parseFundRewardFromData = parseFundRewardFromData;
10
15
  exports.parseCreateConfigFromData = parseCreateConfigFromData;
11
16
  exports.parseCreateDynamicConfigFromData = parseCreateDynamicConfigFromData;
12
17
  exports.parseMeteoraDammLog = parseMeteoraDammLog;
18
+ exports.parseClaimPositionFee = parseClaimPositionFee;
19
+ exports.parseClaimReward = parseClaimReward;
13
20
  const metadata_js_1 = require("../core/metadata.js");
14
21
  const metadata_js_2 = require("../core/metadata.js");
15
22
  const dex_event_js_1 = require("../core/dex_event.js");
@@ -28,9 +35,16 @@ const REMOVE_LIQUIDITY = discOf([87, 46, 88, 98, 175, 96, 34, 91]);
28
35
  const LIQUIDITY_CHANGE = discOf([197, 171, 78, 127, 224, 211, 87, 13]);
29
36
  const INITIALIZE_POOL = discOf([228, 50, 246, 85, 203, 66, 134, 37]);
30
37
  const CREATE_POSITION = discOf([156, 15, 119, 198, 29, 181, 221, 55]);
38
+ const CLAIM_POSITION_FEE = discOf([198, 182, 183, 52, 97, 12, 49, 56]);
39
+ const CLAIM_REWARD = discOf([218, 86, 147, 200, 235, 188, 215, 231]);
31
40
  const CLOSE_POSITION = discOf([20, 145, 144, 68, 143, 142, 214, 178]);
32
41
  const UPDATE_DELEGATE_PERMISSION = discOf([66, 188, 75, 151, 150, 232, 87, 93]);
33
42
  const WITHDRAW_DEAD_LIQUIDITY_REWARD = discOf([228, 66, 150, 195, 42, 62, 163, 13]);
43
+ const WITHDRAW_INELIGIBLE_REWARD = discOf([248, 215, 184, 78, 31, 180, 179, 168]);
44
+ const UPDATE_REWARD_FUNDER = discOf([76, 154, 208, 13, 40, 115, 246, 146]);
45
+ const UPDATE_REWARD_DURATION = discOf([149, 135, 65, 231, 129, 153, 65, 57]);
46
+ const INITIALIZE_REWARD = discOf([129, 91, 188, 3, 246, 52, 185, 249]);
47
+ const FUND_REWARD = discOf([104, 233, 237, 122, 199, 191, 121, 85]);
34
48
  const CREATE_CONFIG = discOf([131, 207, 180, 174, 180, 73, 165, 54]);
35
49
  const CREATE_DYNAMIC_CONFIG = discOf([231, 197, 13, 164, 248, 213, 133, 152]);
36
50
  /**
@@ -554,6 +568,155 @@ function parseWithdrawDeadLiquidityRewardFromData(data, meta) {
554
568
  };
555
569
  return { MeteoraDammV2WithdrawDeadLiquidityReward: ev };
556
570
  }
571
+ function parseWithdrawIneligibleRewardFromData(data, meta) {
572
+ let o = 0;
573
+ const pool = (0, binary_js_1.readPubkey)(data, o);
574
+ if (!pool)
575
+ return null;
576
+ o += 32;
577
+ const reward_mint = (0, binary_js_1.readPubkey)(data, o);
578
+ if (!reward_mint)
579
+ return null;
580
+ o += 32;
581
+ const amount = (0, binary_js_1.readU64LE)(data, o);
582
+ if (amount === null)
583
+ return null;
584
+ const ev = {
585
+ metadata: meta,
586
+ pool,
587
+ reward_mint,
588
+ amount,
589
+ };
590
+ return { MeteoraDammV2WithdrawIneligibleReward: ev };
591
+ }
592
+ function parseUpdateRewardFunderFromData(data, meta) {
593
+ if (data.length < 97)
594
+ return null;
595
+ const pool = (0, binary_js_1.readPubkey)(data, 0);
596
+ if (pool === null)
597
+ return null;
598
+ const reward_index = (0, binary_js_1.readU8)(data, 32);
599
+ if (reward_index === null)
600
+ return null;
601
+ const old_funder = (0, binary_js_1.readPubkey)(data, 33);
602
+ if (old_funder === null)
603
+ return null;
604
+ const new_funder = (0, binary_js_1.readPubkey)(data, 65);
605
+ if (new_funder === null)
606
+ return null;
607
+ return {
608
+ MeteoraDammV2UpdateRewardFunder: {
609
+ metadata: meta,
610
+ pool,
611
+ reward_index,
612
+ old_funder,
613
+ new_funder,
614
+ },
615
+ };
616
+ }
617
+ function parseUpdateRewardDurationFromData(data, meta) {
618
+ if (data.length < 49)
619
+ return null;
620
+ const pool = (0, binary_js_1.readPubkey)(data, 0);
621
+ if (pool === null)
622
+ return null;
623
+ const reward_index = (0, binary_js_1.readU8)(data, 32);
624
+ if (reward_index === null)
625
+ return null;
626
+ const old_reward_duration = (0, binary_js_1.readU64LE)(data, 33);
627
+ if (old_reward_duration === null)
628
+ return null;
629
+ const new_reward_duration = (0, binary_js_1.readU64LE)(data, 41);
630
+ if (new_reward_duration === null)
631
+ return null;
632
+ return {
633
+ MeteoraDammV2UpdateRewardDuration: {
634
+ metadata: meta,
635
+ pool,
636
+ reward_index,
637
+ old_reward_duration,
638
+ new_reward_duration,
639
+ },
640
+ };
641
+ }
642
+ function parseInitializeRewardFromData(data, meta) {
643
+ if (data.length < 137)
644
+ return null;
645
+ const pool = (0, binary_js_1.readPubkey)(data, 0);
646
+ if (pool === null)
647
+ return null;
648
+ const reward_mint = (0, binary_js_1.readPubkey)(data, 32);
649
+ if (reward_mint === null)
650
+ return null;
651
+ const funder = (0, binary_js_1.readPubkey)(data, 64);
652
+ if (funder === null)
653
+ return null;
654
+ const creator = (0, binary_js_1.readPubkey)(data, 96);
655
+ if (creator === null)
656
+ return null;
657
+ const reward_index = (0, binary_js_1.readU8)(data, 128);
658
+ if (reward_index === null)
659
+ return null;
660
+ const reward_duration = (0, binary_js_1.readU64LE)(data, 129);
661
+ if (reward_duration === null)
662
+ return null;
663
+ return {
664
+ MeteoraDammV2InitializeReward: {
665
+ metadata: meta,
666
+ pool,
667
+ reward_mint,
668
+ funder,
669
+ creator,
670
+ reward_index,
671
+ reward_duration,
672
+ },
673
+ };
674
+ }
675
+ function parseFundRewardFromData(data, meta) {
676
+ if (data.length < 153)
677
+ return null;
678
+ const pool = (0, binary_js_1.readPubkey)(data, 0);
679
+ if (pool === null)
680
+ return null;
681
+ const funder = (0, binary_js_1.readPubkey)(data, 32);
682
+ if (funder === null)
683
+ return null;
684
+ const mint_reward = (0, binary_js_1.readPubkey)(data, 64);
685
+ if (mint_reward === null)
686
+ return null;
687
+ const reward_index = (0, binary_js_1.readU8)(data, 96);
688
+ if (reward_index === null)
689
+ return null;
690
+ const amount = (0, binary_js_1.readU64LE)(data, 97);
691
+ if (amount === null)
692
+ return null;
693
+ const transfer_fee_excluded_amount_in = (0, binary_js_1.readU64LE)(data, 105);
694
+ if (transfer_fee_excluded_amount_in === null)
695
+ return null;
696
+ const reward_duration_end = (0, binary_js_1.readU64LE)(data, 113);
697
+ if (reward_duration_end === null)
698
+ return null;
699
+ const pre_reward_rate = (0, binary_js_1.readU128LE)(data, 121);
700
+ if (pre_reward_rate === null)
701
+ return null;
702
+ const post_reward_rate = (0, binary_js_1.readU128LE)(data, 137);
703
+ if (post_reward_rate === null)
704
+ return null;
705
+ return {
706
+ MeteoraDammV2FundReward: {
707
+ metadata: meta,
708
+ pool,
709
+ funder,
710
+ mint_reward,
711
+ reward_index,
712
+ amount,
713
+ transfer_fee_excluded_amount_in,
714
+ reward_duration_end,
715
+ pre_reward_rate,
716
+ post_reward_rate,
717
+ },
718
+ };
719
+ }
557
720
  function parseDynamicFeeParameters(data, offset) {
558
721
  let o = offset;
559
722
  const bin_step = (0, binary_js_1.readU16LE)(data, o);
@@ -724,6 +887,10 @@ function parseMeteoraDammLog(log, signature, slot, txIndex, blockTimeUs, grpcRec
724
887
  return parseLiquidityChangeFromData(data, meta);
725
888
  if (disc === INITIALIZE_POOL)
726
889
  return parseInitializePoolEvent(data, meta);
890
+ if (disc === CLAIM_POSITION_FEE)
891
+ return parseClaimPositionFee(data, meta);
892
+ if (disc === CLAIM_REWARD)
893
+ return parseClaimReward(data, meta);
727
894
  if (disc === CREATE_POSITION)
728
895
  return parseCreatePositionEvent(data, meta);
729
896
  if (disc === CLOSE_POSITION)
@@ -733,9 +900,53 @@ function parseMeteoraDammLog(log, signature, slot, txIndex, blockTimeUs, grpcRec
733
900
  if (disc === WITHDRAW_DEAD_LIQUIDITY_REWARD) {
734
901
  return parseWithdrawDeadLiquidityRewardFromData(data, meta);
735
902
  }
903
+ if (disc === WITHDRAW_INELIGIBLE_REWARD) {
904
+ return parseWithdrawIneligibleRewardFromData(data, meta);
905
+ }
906
+ if (disc === UPDATE_REWARD_FUNDER) {
907
+ return parseUpdateRewardFunderFromData(data, meta);
908
+ }
909
+ if (disc === UPDATE_REWARD_DURATION) {
910
+ return parseUpdateRewardDurationFromData(data, meta);
911
+ }
912
+ if (disc === INITIALIZE_REWARD) {
913
+ return parseInitializeRewardFromData(data, meta);
914
+ }
915
+ if (disc === FUND_REWARD) {
916
+ return parseFundRewardFromData(data, meta);
917
+ }
736
918
  if (disc === CREATE_CONFIG)
737
919
  return parseCreateConfigFromData(data, meta);
738
920
  if (disc === CREATE_DYNAMIC_CONFIG)
739
921
  return parseCreateDynamicConfigFromData(data, meta);
740
922
  return null;
741
923
  }
924
+ function parseClaimPositionFee(data, meta) {
925
+ if (data.length < 112)
926
+ return null;
927
+ return {
928
+ MeteoraDammV2ClaimPositionFee: {
929
+ metadata: meta,
930
+ pool: (0, binary_js_1.readPubkey)(data, 0),
931
+ position: (0, binary_js_1.readPubkey)(data, 32),
932
+ owner: (0, binary_js_1.readPubkey)(data, 64),
933
+ fee_a_claimed: (0, binary_js_1.readU64LE)(data, 96),
934
+ fee_b_claimed: (0, binary_js_1.readU64LE)(data, 104),
935
+ },
936
+ };
937
+ }
938
+ function parseClaimReward(data, meta) {
939
+ if (data.length < 137)
940
+ return null;
941
+ return {
942
+ MeteoraDammV2ClaimReward: {
943
+ metadata: meta,
944
+ pool: (0, binary_js_1.readPubkey)(data, 0),
945
+ position: (0, binary_js_1.readPubkey)(data, 32),
946
+ owner: (0, binary_js_1.readPubkey)(data, 64),
947
+ mint_reward: (0, binary_js_1.readPubkey)(data, 96),
948
+ reward_index: data[128],
949
+ total_reward: (0, binary_js_1.readU64LE)(data, 129),
950
+ },
951
+ };
952
+ }
@@ -1,6 +1,8 @@
1
1
  import type { DexEvent } from "../core/dex_event.js";
2
2
  import type { EventMetadata } from "../core/metadata.js";
3
3
  export declare const METEORA_DBC_DISC: {
4
+ readonly SWAP2: bigint;
5
+ readonly SWAP2_TRANSFER_HOOK: bigint;
4
6
  readonly SWAP: bigint;
5
7
  readonly INITIALIZE_POOL: bigint;
6
8
  readonly CURVE_COMPLETE: bigint;
@@ -9,3 +11,4 @@ export declare function parseMeteoraDbcSwapFromData(data: Uint8Array, metadata:
9
11
  export declare function parseMeteoraDbcInitializePoolFromData(data: Uint8Array, metadata: EventMetadata): DexEvent | null;
10
12
  export declare function parseMeteoraDbcCurveCompleteFromData(data: Uint8Array, metadata: EventMetadata): DexEvent | null;
11
13
  export declare function parseMeteoraDbcFromDiscriminator(discriminator: bigint, data: Uint8Array, metadata: EventMetadata): DexEvent | null;
14
+ export declare function parseMeteoraDbcSwap2FromData(data: Uint8Array, metadata: EventMetadata, has_transfer_hook: boolean): DexEvent | null;
@@ -5,6 +5,7 @@ exports.parseMeteoraDbcSwapFromData = parseMeteoraDbcSwapFromData;
5
5
  exports.parseMeteoraDbcInitializePoolFromData = parseMeteoraDbcInitializePoolFromData;
6
6
  exports.parseMeteoraDbcCurveCompleteFromData = parseMeteoraDbcCurveCompleteFromData;
7
7
  exports.parseMeteoraDbcFromDiscriminator = parseMeteoraDbcFromDiscriminator;
8
+ exports.parseMeteoraDbcSwap2FromData = parseMeteoraDbcSwap2FromData;
8
9
  const binary_js_1 = require("../util/binary.js");
9
10
  function disc(bytes) {
10
11
  const u8 = new Uint8Array(8);
@@ -13,6 +14,8 @@ function disc(bytes) {
13
14
  return new DataView(u8.buffer).getBigUint64(0, true);
14
15
  }
15
16
  exports.METEORA_DBC_DISC = {
17
+ SWAP2: disc([189, 66, 51, 168, 38, 80, 117, 153]),
18
+ SWAP2_TRANSFER_HOOK: disc([134, 59, 168, 120, 94, 51, 114, 231]),
16
19
  SWAP: disc([27, 60, 21, 213, 138, 170, 187, 147]),
17
20
  INITIALIZE_POOL: disc([228, 50, 246, 85, 203, 66, 134, 37]),
18
21
  CURVE_COMPLETE: disc([229, 231, 86, 84, 156, 134, 75, 24]),
@@ -130,6 +133,8 @@ function parseMeteoraDbcCurveCompleteFromData(data, metadata) {
130
133
  return { MeteoraDbcCurveComplete: ev };
131
134
  }
132
135
  function parseMeteoraDbcFromDiscriminator(discriminator, data, metadata) {
136
+ if (discriminator === exports.METEORA_DBC_DISC.SWAP2 || discriminator === exports.METEORA_DBC_DISC.SWAP2_TRANSFER_HOOK)
137
+ return parseMeteoraDbcSwap2FromData(data, metadata, discriminator === exports.METEORA_DBC_DISC.SWAP2_TRANSFER_HOOK);
133
138
  if (discriminator === exports.METEORA_DBC_DISC.SWAP)
134
139
  return parseMeteoraDbcSwapFromData(data, metadata);
135
140
  if (discriminator === exports.METEORA_DBC_DISC.INITIALIZE_POOL) {
@@ -140,3 +145,21 @@ function parseMeteoraDbcFromDiscriminator(discriminator, data, metadata) {
140
145
  }
141
146
  return null;
142
147
  }
148
+ function parseMeteoraDbcSwap2FromData(data, metadata, has_transfer_hook) {
149
+ if (data.length < 179 || data[82] > 2 || data[64] > 1 || data[65] > 1)
150
+ return null;
151
+ const swap_mode = data[82];
152
+ const u64 = (offset) => (0, binary_js_1.readU64LE)(data, offset);
153
+ const amount_0 = u64(66), amount_1 = u64(74), included_fee_input_amount = u64(83);
154
+ return { MeteoraDbcSwap: {
155
+ metadata, pool: (0, binary_js_1.readPubkey)(data, 0), config: (0, binary_js_1.readPubkey)(data, 32),
156
+ trade_direction: data[64], has_referral: Boolean(data[65]), event_version: 2,
157
+ swap_mode, amount_0, amount_1, has_transfer_hook,
158
+ amount_in: included_fee_input_amount, minimum_amount_out: swap_mode === 2 ? 0n : amount_1,
159
+ maximum_amount_in: swap_mode === 2 ? amount_1 : 0n,
160
+ included_fee_input_amount, actual_input_amount: u64(91), amount_left: u64(99),
161
+ output_amount: u64(107), next_sqrt_price: (0, binary_js_1.readU128LE)(data, 115),
162
+ trading_fee: u64(131), protocol_fee: u64(139), referral_fee: u64(147),
163
+ quote_reserve_amount: u64(155), migration_threshold: u64(163), current_timestamp: u64(171),
164
+ } };
165
+ }
@@ -92,7 +92,7 @@ function parseDlmmEventFromData(discriminator, data, metadata) {
92
92
  return { MeteoraDlmmSwap: ev };
93
93
  }
94
94
  if (discriminator === DLMM.SWAP2) {
95
- if (data.length < 147)
95
+ if (data.length < 147 || data[72] > 1 || data[145] > 1 || data[146] > 1)
96
96
  return null;
97
97
  let o = 0;
98
98
  const pool = (0, binary_js_1.readPubkey)(data, o);
@@ -109,17 +109,24 @@ function parseDlmmEventFromData(discriminator, data, metadata) {
109
109
  o += 16;
110
110
  const amount_in = bn64((0, binary_js_1.readU64LE)(data, o));
111
111
  o += 8;
112
- o += 8; // amount_left
112
+ const amount_left = bn64((0, binary_js_1.readU64LE)(data, o));
113
+ o += 8;
113
114
  const amount_out = bn64((0, binary_js_1.readU64LE)(data, o));
114
115
  o += 8;
115
- const fee = bn64((0, binary_js_1.readU64LE)(data, o));
116
+ const mm_fee = bn64((0, binary_js_1.readU64LE)(data, o));
116
117
  o += 8;
117
118
  const protocol_fee = bn64((0, binary_js_1.readU64LE)(data, o));
118
119
  o += 8;
119
- o += 8; // limit_order_fee
120
+ const limit_order_fee = bn64((0, binary_js_1.readU64LE)(data, o));
121
+ o += 8;
120
122
  const host_fee = bn64((0, binary_js_1.readU64LE)(data, o));
123
+ const fee = mm_fee + protocol_fee + limit_order_fee;
124
+ if (fee > 0xffffffffffffffffn)
125
+ return null;
121
126
  const ev = {
122
127
  metadata,
128
+ event_version: 2, amount_left, mm_fee, limit_order_fee,
129
+ fees_on_input: data[145] !== 0, fees_on_token_x: data[146] !== 0,
123
130
  token_x_mint: (0, dex_event_js_1.defaultPubkey)(),
124
131
  token_y_mint: (0, dex_event_js_1.defaultPubkey)(),
125
132
  user_token_in: (0, dex_event_js_1.defaultPubkey)(),
@@ -306,6 +313,11 @@ function parseDlmmEventFromData(discriminator, data, metadata) {
306
313
  const ev = { metadata, pool, position, owner };
307
314
  return { MeteoraDlmmClosePosition: ev };
308
315
  }
316
+ if (discriminator === disc([27, 143, 244, 33, 80, 43, 110, 146])) {
317
+ if (data.length < 116)
318
+ return null;
319
+ return { MeteoraDlmmClaimReward: { metadata, pool: (0, binary_js_1.readPubkey)(data, 0), position: (0, binary_js_1.readPubkey)(data, 32), owner: (0, binary_js_1.readPubkey)(data, 64), reward_index: (0, binary_js_1.readU64LE)(data, 96), total_reward: (0, binary_js_1.readU64LE)(data, 104), active_bin_id: new DataView(data.buffer, data.byteOffset, data.byteLength).getInt32(112, true) } };
320
+ }
309
321
  if (discriminator === DLMM.CLAIM_FEE || discriminator === DLMM.CLAIM_FEE2 || discriminator === DLMM.LEGACY_CLAIM_FEE) {
310
322
  const requiredLength = discriminator === DLMM.CLAIM_FEE2 ? 116 : 112;
311
323
  if (data.length < requiredLength)
@@ -8,6 +8,7 @@ exports.parseLogUnified = parseLogUnified;
8
8
  exports.parseLogOptimizedWithProgramId = parseLogOptimizedWithProgramId;
9
9
  exports.parseInvokeInfo = parseInvokeInfo;
10
10
  exports.parseProgramCompleteInfo = parseProgramCompleteInfo;
11
+ const pump_upgrade_js_1 = require("./pump_upgrade.js");
11
12
  const metadata_js_1 = require("../core/metadata.js");
12
13
  const program_data_js_1 = require("./program_data.js");
13
14
  const clock_js_1 = require("../core/clock.js");
@@ -37,9 +38,15 @@ const DLMM_DISC = {
37
38
  CREATE_POSITION: (0, program_log_discriminators_js_1.u64leDiscriminator)([144, 142, 252, 84, 157, 53, 37, 121]),
38
39
  CLOSE_POSITION: (0, program_log_discriminators_js_1.u64leDiscriminator)([255, 196, 16, 107, 28, 202, 53, 128]),
39
40
  CLAIM_FEE: (0, program_log_discriminators_js_1.u64leDiscriminator)([75, 122, 154, 48, 140, 74, 123, 163]),
41
+ CLAIM_REWARD2: (0, program_log_discriminators_js_1.u64leDiscriminator)([27, 143, 244, 33, 80, 43, 110, 146]),
40
42
  CLAIM_FEE2: (0, program_log_discriminators_js_1.u64leDiscriminator)([232, 171, 242, 97, 58, 77, 35, 45]),
41
43
  };
42
44
  function discriminatorToEventType(disc) {
45
+ if (disc === DLMM_DISC.CLAIM_REWARD2)
46
+ return "MeteoraDlmmClaimReward";
47
+ const upgrade = (0, pump_upgrade_js_1.pumpUpgradeEventType)(disc);
48
+ if (upgrade)
49
+ return upgrade;
43
50
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.PUMPFUN_CREATE)
44
51
  return "PumpFunCreate";
45
52
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.PUMPFUN_TRADE)
@@ -162,6 +169,10 @@ function discriminatorToEventType(disc) {
162
169
  return "MeteoraDammV2InitializePool";
163
170
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CREATE_POSITION)
164
171
  return "MeteoraDammV2CreatePosition";
172
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CLAIM_POSITION_FEE)
173
+ return "MeteoraDammV2ClaimPositionFee";
174
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CLAIM_REWARD)
175
+ return "MeteoraDammV2ClaimReward";
165
176
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CLOSE_POSITION)
166
177
  return "MeteoraDammV2ClosePosition";
167
178
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_UPDATE_DELEGATE_PERMISSION) {
@@ -170,6 +181,21 @@ function discriminatorToEventType(disc) {
170
181
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_WITHDRAW_DEAD_LIQUIDITY_REWARD) {
171
182
  return "MeteoraDammV2WithdrawDeadLiquidityReward";
172
183
  }
184
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_WITHDRAW_INELIGIBLE_REWARD) {
185
+ return "MeteoraDammV2WithdrawIneligibleReward";
186
+ }
187
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_UPDATE_REWARD_FUNDER) {
188
+ return "MeteoraDammV2UpdateRewardFunder";
189
+ }
190
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_UPDATE_REWARD_DURATION) {
191
+ return "MeteoraDammV2UpdateRewardDuration";
192
+ }
193
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_INITIALIZE_REWARD) {
194
+ return "MeteoraDammV2InitializeReward";
195
+ }
196
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_FUND_REWARD) {
197
+ return "MeteoraDammV2FundReward";
198
+ }
173
199
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CREATE_CONFIG)
174
200
  return "MeteoraDammV2CreateConfig";
175
201
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CREATE_DYNAMIC_CONFIG)
@@ -177,6 +203,9 @@ function discriminatorToEventType(disc) {
177
203
  return null;
178
204
  }
179
205
  function programScopedDiscriminatorToEventType(programId, disc) {
206
+ const upgrade = (0, pump_upgrade_js_1.pumpUpgradeEventType)(disc, programId);
207
+ if (upgrade)
208
+ return upgrade;
180
209
  if (programId === program_ids_js_1.PUMPFUN_PROGRAM_ID) {
181
210
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.PUMPFUN_CREATE)
182
211
  return "PumpFunCreate";
@@ -326,6 +355,10 @@ function programScopedDiscriminatorToEventType(programId, disc) {
326
355
  return "MeteoraDammV2InitializePool";
327
356
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CREATE_POSITION)
328
357
  return "MeteoraDammV2CreatePosition";
358
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CLAIM_POSITION_FEE)
359
+ return "MeteoraDammV2ClaimPositionFee";
360
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CLAIM_REWARD)
361
+ return "MeteoraDammV2ClaimReward";
329
362
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CLOSE_POSITION)
330
363
  return "MeteoraDammV2ClosePosition";
331
364
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_UPDATE_DELEGATE_PERMISSION) {
@@ -334,6 +367,21 @@ function programScopedDiscriminatorToEventType(programId, disc) {
334
367
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_WITHDRAW_DEAD_LIQUIDITY_REWARD) {
335
368
  return "MeteoraDammV2WithdrawDeadLiquidityReward";
336
369
  }
370
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_WITHDRAW_INELIGIBLE_REWARD) {
371
+ return "MeteoraDammV2WithdrawIneligibleReward";
372
+ }
373
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_UPDATE_REWARD_FUNDER) {
374
+ return "MeteoraDammV2UpdateRewardFunder";
375
+ }
376
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_UPDATE_REWARD_DURATION) {
377
+ return "MeteoraDammV2UpdateRewardDuration";
378
+ }
379
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_INITIALIZE_REWARD) {
380
+ return "MeteoraDammV2InitializeReward";
381
+ }
382
+ if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_FUND_REWARD) {
383
+ return "MeteoraDammV2FundReward";
384
+ }
337
385
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CREATE_CONFIG)
338
386
  return "MeteoraDammV2CreateConfig";
339
387
  if (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CREATE_DYNAMIC_CONFIG)
@@ -341,7 +389,7 @@ function programScopedDiscriminatorToEventType(programId, disc) {
341
389
  return null;
342
390
  }
343
391
  if (programId === program_ids_js_1.METEORA_DBC_PROGRAM_ID) {
344
- if (disc === meteora_dbc_js_1.METEORA_DBC_DISC.SWAP)
392
+ if (disc === meteora_dbc_js_1.METEORA_DBC_DISC.SWAP || disc === meteora_dbc_js_1.METEORA_DBC_DISC.SWAP2 || disc === meteora_dbc_js_1.METEORA_DBC_DISC.SWAP2_TRANSFER_HOOK)
345
393
  return "MeteoraDbcSwap";
346
394
  if (disc === meteora_dbc_js_1.METEORA_DBC_DISC.INITIALIZE_POOL)
347
395
  return "MeteoraDbcInitializePool";
@@ -364,6 +412,8 @@ function programScopedDiscriminatorToEventType(programId, disc) {
364
412
  return "MeteoraDlmmCreatePosition";
365
413
  if (disc === DLMM_DISC.CLOSE_POSITION)
366
414
  return "MeteoraDlmmClosePosition";
415
+ if (disc === DLMM_DISC.CLAIM_REWARD2)
416
+ return "MeteoraDlmmClaimReward";
367
417
  if (disc === DLMM_DISC.CLAIM_FEE || disc === DLMM_DISC.CLAIM_FEE2)
368
418
  return "MeteoraDlmmClaimFee";
369
419
  return null;
@@ -503,6 +553,11 @@ function filterIncludesProgram(programId, filter) {
503
553
  "MeteoraDammV2ClosePosition",
504
554
  "MeteoraDammV2UpdateDelegatePermission",
505
555
  "MeteoraDammV2WithdrawDeadLiquidityReward",
556
+ "MeteoraDammV2WithdrawIneligibleReward",
557
+ "MeteoraDammV2UpdateRewardFunder",
558
+ "MeteoraDammV2UpdateRewardDuration",
559
+ "MeteoraDammV2InitializeReward",
560
+ "MeteoraDammV2FundReward",
506
561
  "MeteoraDammV2CreateConfig",
507
562
  "MeteoraDammV2CreateDynamicConfig",
508
563
  ]);
@@ -610,15 +665,27 @@ function parseLogOptimized(log, signature, slot, txIndex, blockTimeUs, grpcRecvU
610
665
  const metadata = (0, metadata_js_1.makeMetadata)(signature, slot, txIndex, blockTimeUs, grpcRecvUs, rb);
611
666
  return (0, raydium_amm_js_1.parseRayLogSwap)(log, metadata);
612
667
  }
613
- const buf = (0, program_data_js_1.decodeProgramDataLine)(log);
614
- if (!buf)
615
- return null;
616
- const disc = (0, binary_js_1.readDiscriminatorU64)(buf);
617
- if (disc === null)
618
- return null;
619
- const data = buf.subarray(8);
620
- const rb = recentBlockhash && recentBlockhash.length > 0 ? bs58_1.default.encode(recentBlockhash) : undefined;
621
- const metadata = (0, metadata_js_1.makeMetadata)(signature, slot, txIndex, blockTimeUs, grpcRecvUs, rb);
668
+ // Canonical base64 exposes eight discriminator bytes in its first twelve characters.
669
+ // Fall back to the original decoder for permissive/noncanonical encodings.
670
+ let buf = null;
671
+ let disc = null;
672
+ if (eventTypeFilter) {
673
+ const start = log.indexOf("Program data: ");
674
+ if (start < 0)
675
+ return null;
676
+ const prefix = log.slice(start + 14, start + 26);
677
+ if (/^[A-Za-z0-9+/]{12}$/.test(prefix)) {
678
+ disc = (0, binary_js_1.readDiscriminatorU64)(Buffer.from(prefix, "base64"));
679
+ }
680
+ }
681
+ if (disc === null) {
682
+ buf = (0, program_data_js_1.decodeProgramDataLine)(log);
683
+ if (!buf)
684
+ return null;
685
+ disc = (0, binary_js_1.readDiscriminatorU64)(buf);
686
+ if (disc === null)
687
+ return null;
688
+ }
622
689
  const isUnscopedSharedDiscriminator = !programId &&
623
690
  (disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.PUMPFUN_TRADE || disc === program_log_discriminators_js_1.PROGRAM_LOG_DISC.RAYDIUM_CPMM_SWAP_BASE_IN);
624
691
  const et = programScopedDiscriminatorToEventType(programId, disc);
@@ -642,6 +709,15 @@ function parseLogOptimized(log, signature, slot, txIndex, blockTimeUs, grpcRecvU
642
709
  else if (!filterAllowsUnscopedDiscriminator(eventTypeFilter, disc))
643
710
  return null;
644
711
  }
712
+ buf ??= (0, program_data_js_1.decodeProgramDataLine)(log);
713
+ if (!buf)
714
+ return null;
715
+ const data = buf.subarray(8);
716
+ const rb = recentBlockhash && recentBlockhash.length > 0 ? bs58_1.default.encode(recentBlockhash) : undefined;
717
+ const metadata = (0, metadata_js_1.makeMetadata)(signature, slot, txIndex, blockTimeUs, grpcRecvUs, rb);
718
+ if ((0, pump_upgrade_js_1.pumpUpgradeEventType)(disc, programId)) {
719
+ return applyActualEventTypeFilter((0, pump_upgrade_js_1.parsePumpUpgradeEvent)(disc, data, metadata, programId), eventTypeFilter);
720
+ }
645
721
  if (programId === program_ids_js_1.RAYDIUM_LAUNCHLAB_PROGRAM_ID) {
646
722
  const ev = (0, raydium_launchlab_js_1.parseRaydiumLaunchlabFromDiscriminator)(disc, data, metadata);
647
723
  return applyActualEventTypeFilter(ev, eventTypeFilter);
@@ -929,9 +1005,16 @@ function parseLogOptimized(log, signature, slot, txIndex, blockTimeUs, grpcRecvU
929
1005
  case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_LIQUIDITY_CHANGE:
930
1006
  case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_INITIALIZE_POOL:
931
1007
  case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CREATE_POSITION:
1008
+ case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CLAIM_POSITION_FEE:
1009
+ case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CLAIM_REWARD:
932
1010
  case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CLOSE_POSITION:
933
1011
  case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_UPDATE_DELEGATE_PERMISSION:
934
1012
  case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_WITHDRAW_DEAD_LIQUIDITY_REWARD:
1013
+ case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_WITHDRAW_INELIGIBLE_REWARD:
1014
+ case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_UPDATE_REWARD_FUNDER:
1015
+ case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_UPDATE_REWARD_DURATION:
1016
+ case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_INITIALIZE_REWARD:
1017
+ case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_FUND_REWARD:
935
1018
  case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CREATE_CONFIG:
936
1019
  case program_log_discriminators_js_1.PROGRAM_LOG_DISC.METEORA_DAMM_CREATE_DYNAMIC_CONFIG:
937
1020
  return applyActualEventTypeFilter((0, meteora_damm_js_1.parseMeteoraDammLog)(log, signature, slot, txIndex, blockTimeUs, grpcRecvUs), eventTypeFilter);
@@ -15,6 +15,10 @@ export declare const PUMPSWAP_DISC: {
15
15
  * `parseLogOptimized` 使用的全部分支 discriminator(含 PumpSwap 引用上表)。
16
16
  */
17
17
  export declare const PROGRAM_LOG_DISC: {
18
+ readonly PUMPSWAP_SWEEP_POOL_FEE: bigint;
19
+ readonly PUMPFUN_COMPLETE: bigint;
20
+ readonly PUMPFUN_SWEEP_BONDING_CURVE_FEE: bigint;
21
+ readonly PUMPFUN_POST_COMPLETE_BUY: bigint;
18
22
  readonly PUMPFUN_CREATE: bigint;
19
23
  readonly PUMPFUN_TRADE: bigint;
20
24
  readonly PUMPFUN_MIGRATE: bigint;
@@ -78,8 +82,15 @@ export declare const PROGRAM_LOG_DISC: {
78
82
  readonly METEORA_DAMM_INITIALIZE_POOL: bigint;
79
83
  readonly METEORA_DAMM_CREATE_POSITION: bigint;
80
84
  readonly METEORA_DAMM_CLOSE_POSITION: bigint;
85
+ readonly METEORA_DAMM_CLAIM_POSITION_FEE: bigint;
86
+ readonly METEORA_DAMM_CLAIM_REWARD: bigint;
81
87
  readonly METEORA_DAMM_UPDATE_DELEGATE_PERMISSION: bigint;
82
88
  readonly METEORA_DAMM_WITHDRAW_DEAD_LIQUIDITY_REWARD: bigint;
89
+ readonly METEORA_DAMM_WITHDRAW_INELIGIBLE_REWARD: bigint;
90
+ readonly METEORA_DAMM_UPDATE_REWARD_FUNDER: bigint;
91
+ readonly METEORA_DAMM_UPDATE_REWARD_DURATION: bigint;
92
+ readonly METEORA_DAMM_INITIALIZE_REWARD: bigint;
93
+ readonly METEORA_DAMM_FUND_REWARD: bigint;
83
94
  readonly METEORA_DAMM_CREATE_CONFIG: bigint;
84
95
  readonly METEORA_DAMM_CREATE_DYNAMIC_CONFIG: bigint;
85
96
  };
@@ -24,6 +24,10 @@ exports.PUMPSWAP_DISC = {
24
24
  * `parseLogOptimized` 使用的全部分支 discriminator(含 PumpSwap 引用上表)。
25
25
  */
26
26
  exports.PROGRAM_LOG_DISC = {
27
+ PUMPSWAP_SWEEP_POOL_FEE: u64leDiscriminator([130, 164, 36, 97, 228, 130, 135, 165]),
28
+ PUMPFUN_COMPLETE: u64leDiscriminator([95, 114, 97, 156, 212, 46, 152, 8]),
29
+ PUMPFUN_SWEEP_BONDING_CURVE_FEE: u64leDiscriminator([116, 43, 77, 189, 17, 122, 72, 43]),
30
+ PUMPFUN_POST_COMPLETE_BUY: u64leDiscriminator([111, 176, 109, 139, 49, 108, 213, 251]),
27
31
  PUMPFUN_CREATE: u64leDiscriminator([27, 114, 169, 77, 222, 235, 99, 118]),
28
32
  PUMPFUN_TRADE: u64leDiscriminator([189, 219, 127, 211, 78, 230, 97, 238]),
29
33
  PUMPFUN_MIGRATE: u64leDiscriminator([189, 233, 93, 185, 92, 148, 234, 148]),
@@ -88,8 +92,15 @@ exports.PROGRAM_LOG_DISC = {
88
92
  METEORA_DAMM_INITIALIZE_POOL: u64leDiscriminator([228, 50, 246, 85, 203, 66, 134, 37]),
89
93
  METEORA_DAMM_CREATE_POSITION: u64leDiscriminator([156, 15, 119, 198, 29, 181, 221, 55]),
90
94
  METEORA_DAMM_CLOSE_POSITION: u64leDiscriminator([20, 145, 144, 68, 143, 142, 214, 178]),
95
+ METEORA_DAMM_CLAIM_POSITION_FEE: u64leDiscriminator([198, 182, 183, 52, 97, 12, 49, 56]),
96
+ METEORA_DAMM_CLAIM_REWARD: u64leDiscriminator([218, 86, 147, 200, 235, 188, 215, 231]),
91
97
  METEORA_DAMM_UPDATE_DELEGATE_PERMISSION: u64leDiscriminator([66, 188, 75, 151, 150, 232, 87, 93]),
92
98
  METEORA_DAMM_WITHDRAW_DEAD_LIQUIDITY_REWARD: u64leDiscriminator([228, 66, 150, 195, 42, 62, 163, 13]),
99
+ METEORA_DAMM_WITHDRAW_INELIGIBLE_REWARD: u64leDiscriminator([248, 215, 184, 78, 31, 180, 179, 168]),
100
+ METEORA_DAMM_UPDATE_REWARD_FUNDER: u64leDiscriminator([76, 154, 208, 13, 40, 115, 246, 146]),
101
+ METEORA_DAMM_UPDATE_REWARD_DURATION: u64leDiscriminator([149, 135, 65, 231, 129, 153, 65, 57]),
102
+ METEORA_DAMM_INITIALIZE_REWARD: u64leDiscriminator([129, 91, 188, 3, 246, 52, 185, 249]),
103
+ METEORA_DAMM_FUND_REWARD: u64leDiscriminator([104, 233, 237, 122, 199, 191, 121, 85]),
93
104
  METEORA_DAMM_CREATE_CONFIG: u64leDiscriminator([131, 207, 180, 174, 180, 73, 165, 54]),
94
105
  METEORA_DAMM_CREATE_DYNAMIC_CONFIG: u64leDiscriminator([231, 197, 13, 164, 248, 213, 133, 152]),
95
106
  };
package/dist/logs/pump.js CHANGED
@@ -173,7 +173,9 @@ function parseTradeFromData(data, metadata, isCreatedBuy) {
173
173
  const real_quote_reserves = readOptionalU64(data, tail);
174
174
  const holder_rewards_bps = readOptionalU64(data, tail);
175
175
  const holder_rewards = readOptionalU64(data, tail);
176
+ const creator_fee_unclaimed = readOptionalU64(data, tail);
176
177
  const trade = {
178
+ creator_fee_unclaimed,
177
179
  metadata,
178
180
  mint,
179
181
  sol_amount,
@@ -216,14 +218,14 @@ function parseTradeFromData(data, metadata, isCreatedBuy) {
216
218
  token_program: (0, dex_event_js_1.defaultPubkey)(),
217
219
  creator_vault: (0, dex_event_js_1.defaultPubkey)(),
218
220
  };
219
- if (ix_name === "buy")
221
+ if (ix_name === "buy" || ix_name === "buy_v3")
220
222
  return { PumpFunBuy: trade };
221
- if (ix_name === "sell")
223
+ if (ix_name === "sell" || ix_name === "sell_v3")
222
224
  return { PumpFunSell: trade };
223
225
  if (ix_name === "buy_exact_sol_in") {
224
226
  return { PumpFunBuyExactSolIn: trade };
225
227
  }
226
- if (ix_name === "buy_exact_quote_in")
228
+ if (ix_name === "buy_exact_quote_in" || ix_name === "buy_exact_quote_in_v3")
227
229
  return { PumpFunBuy: trade };
228
230
  return { PumpFunTrade: trade };
229
231
  }
@@ -316,6 +318,7 @@ function parseCreateFromData(data, metadata) {
316
318
  virtual_quote_reserves,
317
319
  creator_fee_bps,
318
320
  is_holder_reward,
321
+ depth: data[o + 1] ?? 0,
319
322
  ix_name: "create",
320
323
  };
321
324
  return { PumpFunCreate: ev };