sol-parser-sdk-python 0.5.9__py3-none-any.whl → 0.5.11__py3-none-any.whl

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.
sol_parser/dex_parsers.py CHANGED
@@ -43,12 +43,20 @@ from .event_types import (
43
43
  MeteoraDlmmClaimFeeEvent, MeteoraPoolsSetPoolFeesEvent, MeteoraPoolsSwapEvent,
44
44
  MeteoraPoolsAddLiquidityEvent, MeteoraPoolsRemoveLiquidityEvent,
45
45
  MeteoraPoolsBootstrapLiquidityEvent, MeteoraPoolsPoolCreatedEvent, MeteoraDammV2SwapEvent,
46
+ MeteoraDammV2ClaimPositionFeeEvent,
47
+ MeteoraDammV2ClaimRewardEvent,
48
+ MeteoraDlmmClaimRewardEvent,
46
49
  MeteoraDammV2CreatePositionEvent, MeteoraDammV2ClosePositionEvent,
47
50
  MeteoraDammV2AddLiquidityEvent, MeteoraDammV2RemoveLiquidityEvent,
48
51
  MeteoraDammV2InitializePoolEvent,
49
52
  MeteoraDammV2DynamicFeeParameters,
50
53
  MeteoraDammV2UpdateDelegatePermissionEvent,
51
54
  MeteoraDammV2WithdrawDeadLiquidityRewardEvent,
55
+ MeteoraDammV2WithdrawIneligibleRewardEvent,
56
+ MeteoraDammV2UpdateRewardFunderEvent,
57
+ MeteoraDammV2UpdateRewardDurationEvent,
58
+ MeteoraDammV2InitializeRewardEvent,
59
+ MeteoraDammV2FundRewardEvent,
52
60
  MeteoraDammV2CreateConfigEvent,
53
61
  MeteoraDammV2CreateDynamicConfigEvent,
54
62
  MeteoraDbcCurveCompleteEvent, MeteoraDbcInitializePoolEvent, MeteoraDbcSwapEvent,
@@ -260,8 +268,10 @@ def parse_trade_from_data(data: bytes, meta: dict, is_created_buy: bool) -> DexE
260
268
  real_quote_reserves = _optional_u64(data, tail)
261
269
  holder_rewards_bps = _optional_u64(data, tail)
262
270
  holder_rewards = _optional_u64(data, tail)
271
+ creator_fee_unclaimed=_optional_u64(data,tail)
263
272
 
264
273
  event_data = PumpFunTradeEvent(
274
+ creator_fee_unclaimed=creator_fee_unclaimed,
265
275
  metadata=_make_meta(meta),
266
276
  mint=mint,
267
277
  sol_amount=sol_amount,
@@ -324,6 +334,10 @@ def parse_create_from_data(data: bytes, meta: dict) -> DexEvent:
324
334
  uri, o = _borsh_str(data, o)
325
335
  except Exception:
326
336
  return DexEvent()
337
+ if len(data) - o == 96:
338
+ return DexEvent(type=EventType.PUMP_FUN_CREATE, data=PumpFunCreateEvent(
339
+ metadata=_make_meta(meta), name=name, symbol=sym, uri=uri,
340
+ mint=_pub(data, o), bonding_curve=_pub(data, o + 32), user=_pub(data, o + 64)))
327
341
  if len(data) < o + 32 * 4 + 8 * 5 + 32 + 1:
328
342
  return DexEvent()
329
343
  mint = _pub(data, o)
@@ -381,6 +395,7 @@ def parse_create_from_data(data: bytes, meta: dict) -> DexEvent:
381
395
  virtual_quote_reserves=virtual_quote_reserves,
382
396
  creator_fee_bps=creator_fee_bps,
383
397
  is_holder_reward=is_holder_reward,
398
+ depth=data[o+1] if o+1<len(data) else 0,
384
399
  ),
385
400
  )
386
401
 
@@ -1442,7 +1457,7 @@ def parse_amm_init2_from_data(data: bytes, meta: dict) -> Optional[DexEvent]:
1442
1457
 
1443
1458
 
1444
1459
  def parse_cpmm_swap_event_from_data(data: bytes, meta: dict) -> Optional[DexEvent]:
1445
- if len(data) < 32 + 6 * 8 + 1:
1460
+ if len(data) < 81 or (81 < len(data) < 162) or data[80] > 1 or (len(data) >= 162 and data[161] > 1):
1446
1461
  return None
1447
1462
  o = 0
1448
1463
  pool = _pub(data, o)
@@ -1463,6 +1478,11 @@ def parse_cpmm_swap_event_from_data(data: bytes, meta: dict) -> Optional[DexEven
1463
1478
  return DexEvent(
1464
1479
  type=EventType.RAYDIUM_CPMM_SWAP,
1465
1480
  data=RaydiumCpmmSwapEvent(
1481
+ input_mint=_pub(data,81) if len(data)>=162 else "",
1482
+ output_mint=_pub(data,113) if len(data)>=162 else "",
1483
+ trade_fee=_u64le(data,145) if len(data)>=162 else 0,
1484
+ creator_fee=_u64le(data,153) if len(data)>=162 else 0,
1485
+ creator_fee_on_input=len(data)>=162 and bool(data[161]),
1466
1486
  metadata=_make_meta(meta),
1467
1487
  pool_id=pool,
1468
1488
  input_vault_before=input_vault_before,
@@ -1888,6 +1908,8 @@ def parse_meteora_pools_set_pool_fees_from_data(data: bytes, meta: dict) -> Opti
1888
1908
  DAMM_SWAP = _d(27, 60, 21, 213, 138, 170, 187, 147)
1889
1909
  DAMM_SWAP2 = _d(189, 66, 51, 168, 38, 80, 117, 153)
1890
1910
  DAMM_CREATE_POSITION = _d(156, 15, 119, 198, 29, 181, 221, 55)
1911
+ DAMM_CLAIM_POSITION_FEE = _d(198, 182, 183, 52, 97, 12, 49, 56)
1912
+ DAMM_CLAIM_REWARD = _d(218, 86, 147, 200, 235, 188, 215, 231)
1891
1913
  DAMM_CLOSE_POSITION = _d(20, 145, 144, 68, 143, 142, 214, 178)
1892
1914
  DAMM_ADD_LIQUIDITY = _d(175, 242, 8, 157, 30, 247, 185, 169)
1893
1915
  DAMM_REMOVE_LIQUIDITY = _d(87, 46, 88, 98, 175, 96, 34, 91)
@@ -1895,10 +1917,17 @@ DAMM_LIQUIDITY_CHANGE = _d(197, 171, 78, 127, 224, 211, 87, 13)
1895
1917
  DAMM_INIT_POOL = _d(228, 50, 246, 85, 203, 66, 134, 37)
1896
1918
  DAMM_UPDATE_DELEGATE_PERMISSION = _d(66, 188, 75, 151, 150, 232, 87, 93)
1897
1919
  DAMM_WITHDRAW_DEAD_LIQUIDITY_REWARD = _d(228, 66, 150, 195, 42, 62, 163, 13)
1920
+ DAMM_WITHDRAW_INELIGIBLE_REWARD = _d(248, 215, 184, 78, 31, 180, 179, 168)
1921
+ DAMM_UPDATE_REWARD_FUNDER = _d(76, 154, 208, 13, 40, 115, 246, 146)
1922
+ DAMM_UPDATE_REWARD_DURATION = _d(149, 135, 65, 231, 129, 153, 65, 57)
1923
+ DAMM_INITIALIZE_REWARD = _d(129, 91, 188, 3, 246, 52, 185, 249)
1924
+ DAMM_FUND_REWARD = _d(104, 233, 237, 122, 199, 191, 121, 85)
1898
1925
  DAMM_CREATE_CONFIG = _d(131, 207, 180, 174, 180, 73, 165, 54)
1899
1926
  DAMM_CREATE_DYNAMIC_CONFIG = _d(231, 197, 13, 164, 248, 213, 133, 152)
1900
1927
  # Mainnet upgrade: trading_fee/partner_fee → claiming_fee/compounding_fee in EvtSwap2
1901
1928
  COMPOUNDING_FEE_LAYOUT_ACTIVATION_SLOT = 406_048_752
1929
+ DBC_SWAP2 = _d(189, 66, 51, 168, 38, 80, 117, 153)
1930
+ DBC_SWAP2_TRANSFER_HOOK = _d(134, 59, 168, 120, 94, 51, 114, 231)
1902
1931
  DBC_SWAP = DAMM_SWAP
1903
1932
  DBC_INIT_POOL = DAMM_INIT_POOL
1904
1933
  DBC_CURVE_COMPLETE = _d(229, 231, 86, 84, 156, 134, 75, 24)
@@ -1925,6 +1954,10 @@ def parse_meteora_damm_from_buf(buf: bytes, meta: dict) -> Optional[DexEvent]:
1925
1954
  return _parse_damm_swap(data, meta)
1926
1955
  if d == DAMM_SWAP2:
1927
1956
  return _parse_damm_swap2(data, meta)
1957
+ if d == DAMM_CLAIM_POSITION_FEE:
1958
+ return _parse_damm_claim_position_fee(data, meta)
1959
+ if d == DAMM_CLAIM_REWARD:
1960
+ return _parse_damm_claim_reward(data, meta)
1928
1961
  if d == DAMM_CREATE_POSITION:
1929
1962
  return _parse_damm_create_position(data, meta)
1930
1963
  if d == DAMM_CLOSE_POSITION:
@@ -1941,6 +1974,16 @@ def parse_meteora_damm_from_buf(buf: bytes, meta: dict) -> Optional[DexEvent]:
1941
1974
  return _parse_damm_update_delegate_permission(data, meta)
1942
1975
  if d == DAMM_WITHDRAW_DEAD_LIQUIDITY_REWARD:
1943
1976
  return _parse_damm_withdraw_dead_liquidity_reward(data, meta)
1977
+ if d == DAMM_WITHDRAW_INELIGIBLE_REWARD:
1978
+ return _parse_damm_withdraw_ineligible_reward(data, meta)
1979
+ if d == DAMM_UPDATE_REWARD_FUNDER:
1980
+ return _parse_damm_update_reward_funder(data, meta)
1981
+ if d == DAMM_UPDATE_REWARD_DURATION:
1982
+ return _parse_damm_update_reward_duration(data, meta)
1983
+ if d == DAMM_INITIALIZE_REWARD:
1984
+ return _parse_damm_initialize_reward(data, meta)
1985
+ if d == DAMM_FUND_REWARD:
1986
+ return _parse_damm_fund_reward(data, meta)
1944
1987
  if d == DAMM_CREATE_CONFIG:
1945
1988
  return _parse_damm_create_config(data, meta)
1946
1989
  if d == DAMM_CREATE_DYNAMIC_CONFIG:
@@ -1949,6 +1992,8 @@ def parse_meteora_damm_from_buf(buf: bytes, meta: dict) -> Optional[DexEvent]:
1949
1992
 
1950
1993
 
1951
1994
  def parse_meteora_dbc_from_discriminator(disc: int, data: bytes, meta: dict) -> Optional[DexEvent]:
1995
+ if disc in (DBC_SWAP2, DBC_SWAP2_TRANSFER_HOOK):
1996
+ return _parse_dbc_swap2(data, meta, disc == DBC_SWAP2_TRANSFER_HOOK)
1952
1997
  if disc == DBC_SWAP:
1953
1998
  return _parse_dbc_swap(data, meta)
1954
1999
  if disc == DBC_INIT_POOL:
@@ -2595,6 +2640,90 @@ def _parse_damm_withdraw_dead_liquidity_reward(data: bytes, meta: dict) -> Optio
2595
2640
  )
2596
2641
 
2597
2642
 
2643
+ def _parse_damm_withdraw_ineligible_reward(data: bytes, meta: dict) -> Optional[DexEvent]:
2644
+ if len(data) < 32 + 32 + 8:
2645
+ return None
2646
+ o = 0
2647
+ pool = _pub(data, o)
2648
+ o += 32
2649
+ reward_mint = _pub(data, o)
2650
+ o += 32
2651
+ amount = _u64le(data, o)
2652
+ return DexEvent(
2653
+ type=EventType.METEORA_DAMM_V2_WITHDRAW_INELIGIBLE_REWARD,
2654
+ data=MeteoraDammV2WithdrawIneligibleRewardEvent(
2655
+ metadata=_make_meta(meta),
2656
+ pool=pool,
2657
+ reward_mint=reward_mint,
2658
+ amount=amount,
2659
+ ),
2660
+ )
2661
+
2662
+
2663
+ def _parse_damm_update_reward_funder(data: bytes, meta: dict) -> Optional[DexEvent]:
2664
+ if len(data) < 97:
2665
+ return None
2666
+ return DexEvent(
2667
+ type=EventType.METEORA_DAMM_V2_UPDATE_REWARD_FUNDER,
2668
+ data=MeteoraDammV2UpdateRewardFunderEvent(
2669
+ metadata=_make_meta(meta),
2670
+ pool=_pub(data, 0),
2671
+ reward_index=data[32],
2672
+ old_funder=_pub(data, 33),
2673
+ new_funder=_pub(data, 65),
2674
+ ),
2675
+ )
2676
+
2677
+ def _parse_damm_update_reward_duration(data: bytes, meta: dict) -> Optional[DexEvent]:
2678
+ if len(data) < 49:
2679
+ return None
2680
+ return DexEvent(
2681
+ type=EventType.METEORA_DAMM_V2_UPDATE_REWARD_DURATION,
2682
+ data=MeteoraDammV2UpdateRewardDurationEvent(
2683
+ metadata=_make_meta(meta),
2684
+ pool=_pub(data, 0),
2685
+ reward_index=data[32],
2686
+ old_reward_duration=_u64le(data, 33),
2687
+ new_reward_duration=_u64le(data, 41),
2688
+ ),
2689
+ )
2690
+
2691
+ def _parse_damm_initialize_reward(data: bytes, meta: dict) -> Optional[DexEvent]:
2692
+ if len(data) < 137:
2693
+ return None
2694
+ return DexEvent(
2695
+ type=EventType.METEORA_DAMM_V2_INITIALIZE_REWARD,
2696
+ data=MeteoraDammV2InitializeRewardEvent(
2697
+ metadata=_make_meta(meta),
2698
+ pool=_pub(data, 0),
2699
+ reward_mint=_pub(data, 32),
2700
+ funder=_pub(data, 64),
2701
+ creator=_pub(data, 96),
2702
+ reward_index=data[128],
2703
+ reward_duration=_u64le(data, 129),
2704
+ ),
2705
+ )
2706
+
2707
+ def _parse_damm_fund_reward(data: bytes, meta: dict) -> Optional[DexEvent]:
2708
+ if len(data) < 153:
2709
+ return None
2710
+ return DexEvent(
2711
+ type=EventType.METEORA_DAMM_V2_FUND_REWARD,
2712
+ data=MeteoraDammV2FundRewardEvent(
2713
+ metadata=_make_meta(meta),
2714
+ pool=_pub(data, 0),
2715
+ funder=_pub(data, 32),
2716
+ mint_reward=_pub(data, 64),
2717
+ reward_index=data[96],
2718
+ amount=_u64le(data, 97),
2719
+ transfer_fee_excluded_amount_in=_u64le(data, 105),
2720
+ reward_duration_end=_u64le(data, 113),
2721
+ pre_reward_rate=_u128le_int(data, 121),
2722
+ post_reward_rate=_u128le_int(data, 137),
2723
+ ),
2724
+ )
2725
+
2726
+
2598
2727
  def _parse_damm_create_config_dynamic_fee(
2599
2728
  data: bytes, o: int
2600
2729
  ) -> Optional[tuple[MeteoraDammV2DynamicFeeParameters, int]]:
@@ -2802,6 +2931,7 @@ def _parse_pumpswap_trade_tail(data: bytes) -> Optional[Dict[str, Any]]:
2802
2931
  "base_supply": 0,
2803
2932
  "holder_rewards_bps": 0,
2804
2933
  "holder_rewards": 0,
2934
+ "creator_fee_unclaimed":0,
2805
2935
  }
2806
2936
  if not data:
2807
2937
  return tail
@@ -2832,6 +2962,9 @@ def _parse_pumpswap_trade_tail(data: bytes) -> Optional[Dict[str, Any]]:
2832
2962
  if len(data) >= 73:
2833
2963
  tail["holder_rewards_bps"] = _u64le(data, 57)
2834
2964
  tail["holder_rewards"] = _u64le(data, 65)
2965
+ if 73<len(data)<81:
2966
+ return None
2967
+ tail["creator_fee_unclaimed"]=_u64le(data,73) if len(data)>=81 else 0
2835
2968
  return tail
2836
2969
 
2837
2970
 
@@ -3061,7 +3194,7 @@ def parse_ps_create_pool_from_data(data: bytes, meta: dict) -> Optional[DexEvent
3061
3194
 
3062
3195
 
3063
3196
  def parse_ps_add_liq_from_data(data: bytes, meta: dict) -> Optional[DexEvent]:
3064
- if len(data) < 10 * 8 + 5 * 32:
3197
+ if len(data) < 11 * 8 + 5 * 32:
3065
3198
  return None
3066
3199
  o = 0
3067
3200
 
@@ -3108,7 +3241,7 @@ def parse_ps_add_liq_from_data(data: bytes, meta: dict) -> Optional[DexEvent]:
3108
3241
 
3109
3242
 
3110
3243
  def parse_ps_remove_liq_from_data(data: bytes, meta: dict) -> Optional[DexEvent]:
3111
- if len(data) < 10 * 8 + 5 * 32:
3244
+ if len(data) < 11 * 8 + 5 * 32:
3112
3245
  return None
3113
3246
  o = 0
3114
3247
 
@@ -3164,6 +3297,7 @@ DLMM_INIT_POOL = _d(185, 74, 252, 125, 27, 215, 188, 111)
3164
3297
  DLMM_INIT_BIN = _d(11, 18, 155, 194, 33, 115, 238, 119)
3165
3298
  DLMM_CREATE_POS = _d(144, 142, 252, 84, 157, 53, 37, 121)
3166
3299
  DLMM_CLOSE_POS = _d(255, 196, 16, 107, 28, 202, 53, 128)
3300
+ DLMM_CLAIM_REWARD2 = _d(27, 143, 244, 33, 80, 43, 110, 146)
3167
3301
  DLMM_CLAIM_FEE = _d(75, 122, 154, 48, 140, 74, 123, 163)
3168
3302
  DLMM_CLAIM_FEE2 = _d(232, 171, 242, 97, 58, 77, 35, 45)
3169
3303
 
@@ -3230,6 +3364,8 @@ def parse_dlmm_event_from_data(d: int, data: bytes, meta: dict) -> Optional[DexE
3230
3364
  if d == DLMM_SWAP2:
3231
3365
  if len(data) < 32 + 32 + 4 + 4 + 1 + 16 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 1 + 1:
3232
3366
  return None
3367
+ if any(data[x] > 1 for x in (72, 145, 146)):
3368
+ return None
3233
3369
  o = 0
3234
3370
  pool = _pub(data, o)
3235
3371
  o += 32
@@ -3245,19 +3381,26 @@ def parse_dlmm_event_from_data(d: int, data: bytes, meta: dict) -> Optional[DexE
3245
3381
  o += 16
3246
3382
  ai = _u64le(data, o)
3247
3383
  o += 8
3384
+ amount_left = _u64le(data, o)
3248
3385
  o += 8
3249
3386
  ao = _u64le(data, o)
3250
3387
  o += 8
3251
- fee = _u64le(data, o)
3388
+ mm_fee = _u64le(data, o)
3252
3389
  o += 8
3253
3390
  pf = _u64le(data, o)
3254
3391
  o += 8
3392
+ limit_order_fee = _u64le(data, o)
3255
3393
  o += 8
3256
3394
  hf = _u64le(data, o)
3395
+ fee = mm_fee + pf + limit_order_fee
3396
+ if fee > (1 << 64) - 1:
3397
+ return None
3257
3398
  return DexEvent(
3258
3399
  type=EventType.METEORA_DLMM_SWAP,
3259
3400
  data=MeteoraDlmmSwapEvent(
3260
3401
  metadata=_make_meta(meta),
3402
+ event_version=2, amount_left=amount_left, mm_fee=mm_fee, limit_order_fee=limit_order_fee,
3403
+ fees_on_input=bool(data[145]), fees_on_token_x=bool(data[146]),
3261
3404
  pool=pool,
3262
3405
  from_addr=frm,
3263
3406
  start_bin_id=sb,
@@ -3457,6 +3600,11 @@ def parse_dlmm_event_from_data(d: int, data: bytes, meta: dict) -> Optional[DexE
3457
3600
  owner=owner,
3458
3601
  ),
3459
3602
  )
3603
+ if d == DLMM_CLAIM_REWARD2:
3604
+ if len(data) < 116:
3605
+ return None
3606
+ return DexEvent(type=EventType.METEORA_DLMM_CLAIM_REWARD,
3607
+ data=MeteoraDlmmClaimRewardEvent(metadata=_make_meta(meta),pool=_pub(data,0),position=_pub(data,32),owner=_pub(data,64),reward_index=_u64le(data,96),total_reward=_u64le(data,104),active_bin_id=int.from_bytes(data[112:116],"little",signed=True)))
3460
3608
  if d in (DLMM_CLAIM_FEE, DLMM_LEGACY_CLAIM_FEE):
3461
3609
  if len(data) < 32 + 32 + 32 + 8 + 8:
3462
3610
  return None
@@ -3572,9 +3720,16 @@ _LOG_DISCRIMINATOR_EVENT_TYPES = {
3572
3720
  DAMM_LIQUIDITY_CHANGE: EventType.METEORA_DAMM_V2_ADD_LIQUIDITY, # routed by change_type in parser
3573
3721
  DAMM_INIT_POOL: EventType.METEORA_DAMM_V2_INITIALIZE_POOL,
3574
3722
  DAMM_CREATE_POSITION: EventType.METEORA_DAMM_V2_CREATE_POSITION,
3723
+ DAMM_CLAIM_POSITION_FEE: EventType.METEORA_DAMM_V2_CLAIM_POSITION_FEE,
3724
+ DAMM_CLAIM_REWARD: EventType.METEORA_DAMM_V2_CLAIM_REWARD,
3575
3725
  DAMM_CLOSE_POSITION: EventType.METEORA_DAMM_V2_CLOSE_POSITION,
3576
3726
  DAMM_UPDATE_DELEGATE_PERMISSION: EventType.METEORA_DAMM_V2_UPDATE_DELEGATE_PERMISSION,
3577
3727
  DAMM_WITHDRAW_DEAD_LIQUIDITY_REWARD: EventType.METEORA_DAMM_V2_WITHDRAW_DEAD_LIQUIDITY_REWARD,
3728
+ DAMM_WITHDRAW_INELIGIBLE_REWARD: EventType.METEORA_DAMM_V2_WITHDRAW_INELIGIBLE_REWARD,
3729
+ DAMM_UPDATE_REWARD_FUNDER: EventType.METEORA_DAMM_V2_UPDATE_REWARD_FUNDER,
3730
+ DAMM_UPDATE_REWARD_DURATION: EventType.METEORA_DAMM_V2_UPDATE_REWARD_DURATION,
3731
+ DAMM_INITIALIZE_REWARD: EventType.METEORA_DAMM_V2_INITIALIZE_REWARD,
3732
+ DAMM_FUND_REWARD: EventType.METEORA_DAMM_V2_FUND_REWARD,
3578
3733
  DAMM_CREATE_CONFIG: EventType.METEORA_DAMM_V2_CREATE_CONFIG,
3579
3734
  DAMM_CREATE_DYNAMIC_CONFIG: EventType.METEORA_DAMM_V2_CREATE_DYNAMIC_CONFIG,
3580
3735
  DISC_RAYDIUM_LAUNCHLAB_POOL_CREATE: EventType.RAYDIUM_LAUNCHLAB_POOL_CREATE,
@@ -3585,6 +3740,7 @@ _LOG_DISCRIMINATOR_EVENT_TYPES = {
3585
3740
  DLMM_CREATE_POS: EventType.METEORA_DLMM_CREATE_POSITION,
3586
3741
  DLMM_CLOSE_POS: EventType.METEORA_DLMM_CLOSE_POSITION,
3587
3742
  DLMM_CLAIM_FEE: EventType.METEORA_DLMM_CLAIM_FEE,
3743
+ DLMM_CLAIM_REWARD2: EventType.METEORA_DLMM_CLAIM_REWARD,
3588
3744
  }
3589
3745
 
3590
3746
 
@@ -3607,6 +3763,10 @@ METEORA_DLMM_PROGRAM_ID = "LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"
3607
3763
 
3608
3764
 
3609
3765
  def event_type_for_program_discriminator(program_id: Optional[str], disc: int) -> Optional[EventType]:
3766
+ from .pump_upgrade import pump_upgrade_event_type
3767
+ upgrade=pump_upgrade_event_type(disc,program_id)
3768
+ if upgrade is not None:
3769
+ return upgrade
3610
3770
  if program_id == PUMPFUN_PROGRAM_ID:
3611
3771
  if disc == PUMP_CREATE:
3612
3772
  return EventType.PUMP_FUN_CREATE
@@ -3713,6 +3873,10 @@ def event_type_for_program_discriminator(program_id: Optional[str], disc: int) -
3713
3873
  return EventType.METEORA_DAMM_V2_ADD_LIQUIDITY
3714
3874
  if disc == DAMM_INIT_POOL:
3715
3875
  return EventType.METEORA_DAMM_V2_INITIALIZE_POOL
3876
+ if disc == DAMM_CLAIM_POSITION_FEE:
3877
+ return EventType.METEORA_DAMM_V2_CLAIM_POSITION_FEE
3878
+ if disc == DAMM_CLAIM_REWARD:
3879
+ return EventType.METEORA_DAMM_V2_CLAIM_REWARD
3716
3880
  if disc == DAMM_CREATE_POSITION:
3717
3881
  return EventType.METEORA_DAMM_V2_CREATE_POSITION
3718
3882
  if disc == DAMM_CLOSE_POSITION:
@@ -3721,13 +3885,23 @@ def event_type_for_program_discriminator(program_id: Optional[str], disc: int) -
3721
3885
  return EventType.METEORA_DAMM_V2_UPDATE_DELEGATE_PERMISSION
3722
3886
  if disc == DAMM_WITHDRAW_DEAD_LIQUIDITY_REWARD:
3723
3887
  return EventType.METEORA_DAMM_V2_WITHDRAW_DEAD_LIQUIDITY_REWARD
3888
+ if disc == DAMM_WITHDRAW_INELIGIBLE_REWARD:
3889
+ return EventType.METEORA_DAMM_V2_WITHDRAW_INELIGIBLE_REWARD
3890
+ if disc == DAMM_UPDATE_REWARD_FUNDER:
3891
+ return EventType.METEORA_DAMM_V2_UPDATE_REWARD_FUNDER
3892
+ if disc == DAMM_UPDATE_REWARD_DURATION:
3893
+ return EventType.METEORA_DAMM_V2_UPDATE_REWARD_DURATION
3894
+ if disc == DAMM_INITIALIZE_REWARD:
3895
+ return EventType.METEORA_DAMM_V2_INITIALIZE_REWARD
3896
+ if disc == DAMM_FUND_REWARD:
3897
+ return EventType.METEORA_DAMM_V2_FUND_REWARD
3724
3898
  if disc == DAMM_CREATE_CONFIG:
3725
3899
  return EventType.METEORA_DAMM_V2_CREATE_CONFIG
3726
3900
  if disc == DAMM_CREATE_DYNAMIC_CONFIG:
3727
3901
  return EventType.METEORA_DAMM_V2_CREATE_DYNAMIC_CONFIG
3728
3902
  return None
3729
3903
  if program_id == METEORA_DBC_PROGRAM_ID:
3730
- if disc == DBC_SWAP:
3904
+ if disc in (DBC_SWAP, DBC_SWAP2, DBC_SWAP2_TRANSFER_HOOK):
3731
3905
  return EventType.METEORA_DBC_SWAP
3732
3906
  if disc == DBC_INIT_POOL:
3733
3907
  return EventType.METEORA_DBC_INITIALIZE_POOL
@@ -3749,6 +3923,8 @@ def event_type_for_program_discriminator(program_id: Optional[str], disc: int) -
3749
3923
  return EventType.METEORA_DLMM_CREATE_POSITION
3750
3924
  if disc in (DLMM_CLOSE_POS, DLMM_LEGACY_CLOSE_POS):
3751
3925
  return EventType.METEORA_DLMM_CLOSE_POSITION
3926
+ if disc == DLMM_CLAIM_REWARD2:
3927
+ return EventType.METEORA_DLMM_CLAIM_REWARD
3752
3928
  if disc in (DLMM_CLAIM_FEE, DLMM_CLAIM_FEE2, DLMM_LEGACY_CLAIM_FEE):
3753
3929
  return EventType.METEORA_DLMM_CLAIM_FEE
3754
3930
  return None
@@ -3986,6 +4162,9 @@ def dispatch_program_data(
3986
4162
  program_id: Optional[str] = None,
3987
4163
  event_type_filter: Any = None,
3988
4164
  ) -> Optional[DexEvent]:
4165
+ from .pump_upgrade import pump_upgrade_event_type,parse_pump_upgrade_event
4166
+ if pump_upgrade_event_type(disc,program_id) is not None:
4167
+ return apply_event_type_filter(parse_pump_upgrade_event(disc,data,_make_meta(meta),program_id),event_type_filter)
3989
4168
  if program_id == PUMPFUN_PROGRAM_ID:
3990
4169
  return dispatch_scoped_pumpfun_data(disc, data, meta, is_created_buy, event_type_filter)
3991
4170
  if program_id == PUMP_FEES_PROGRAM_ID:
@@ -4203,9 +4382,16 @@ def dispatch_program_data(
4203
4382
  DAMM_LIQUIDITY_CHANGE,
4204
4383
  DAMM_INIT_POOL,
4205
4384
  DAMM_CREATE_POSITION,
4385
+ DAMM_CLAIM_POSITION_FEE,
4386
+ DAMM_CLAIM_REWARD,
4206
4387
  DAMM_CLOSE_POSITION,
4207
4388
  DAMM_UPDATE_DELEGATE_PERMISSION,
4208
4389
  DAMM_WITHDRAW_DEAD_LIQUIDITY_REWARD,
4390
+ DAMM_WITHDRAW_INELIGIBLE_REWARD,
4391
+ DAMM_UPDATE_REWARD_FUNDER,
4392
+ DAMM_UPDATE_REWARD_DURATION,
4393
+ DAMM_INITIALIZE_REWARD,
4394
+ DAMM_FUND_REWARD,
4209
4395
  DAMM_CREATE_CONFIG,
4210
4396
  DAMM_CREATE_DYNAMIC_CONFIG,
4211
4397
  ):
@@ -4214,3 +4400,54 @@ def dispatch_program_data(
4214
4400
  if raydium_launchlab:
4215
4401
  return raydium_launchlab
4216
4402
  return parse_dlmm_from_program_data(buf, meta)
4403
+
4404
+
4405
+ def _parse_dbc_swap2(data: bytes, meta: dict, has_transfer_hook: bool) -> Optional[DexEvent]:
4406
+ if len(data) < 179 or data[82] > 2 or data[64] > 1 or data[65] > 1:
4407
+ return None
4408
+ mode = data[82]
4409
+ amount_0, amount_1 = _u64le(data,66), _u64le(data,74)
4410
+ included = _u64le(data,83)
4411
+ return DexEvent(EventType.METEORA_DBC_SWAP, MeteoraDbcSwapEvent(
4412
+ metadata=_make_meta(meta), pool=_pub(data,0), config=_pub(data,32),
4413
+ trade_direction=data[64], has_referral=bool(data[65]), event_version=2,
4414
+ swap_mode=mode, amount_0=amount_0, amount_1=amount_1, has_transfer_hook=has_transfer_hook,
4415
+ amount_in=included, minimum_amount_out=0 if mode == 2 else amount_1,
4416
+ maximum_amount_in=amount_1 if mode == 2 else 0,
4417
+ included_fee_input_amount=included, actual_input_amount=_u64le(data,91),
4418
+ amount_left=_u64le(data,99), output_amount=_u64le(data,107), next_sqrt_price=_u128le_int(data,115),
4419
+ trading_fee=_u64le(data,131), protocol_fee=_u64le(data,139), referral_fee=_u64le(data,147),
4420
+ quote_reserve_amount=_u64le(data,155), migration_threshold=_u64le(data,163), current_timestamp=_u64le(data,171)))
4421
+
4422
+
4423
+ def _parse_damm_claim_position_fee(data: bytes, meta: dict) -> Optional[DexEvent]:
4424
+ if len(data) < 112:
4425
+ return None
4426
+ return DexEvent(
4427
+ type=EventType.METEORA_DAMM_V2_CLAIM_POSITION_FEE,
4428
+ data=MeteoraDammV2ClaimPositionFeeEvent(
4429
+ metadata=_make_meta(meta),
4430
+ pool=_pub(data, 0),
4431
+ position=_pub(data, 32),
4432
+ owner=_pub(data, 64),
4433
+ fee_a_claimed=int.from_bytes(data[96:104], "little"),
4434
+ fee_b_claimed=int.from_bytes(data[104:112], "little"),
4435
+ ),
4436
+ )
4437
+
4438
+
4439
+ def _parse_damm_claim_reward(data: bytes, meta: dict) -> Optional[DexEvent]:
4440
+ if len(data) < 137:
4441
+ return None
4442
+ return DexEvent(
4443
+ type=EventType.METEORA_DAMM_V2_CLAIM_REWARD,
4444
+ data=MeteoraDammV2ClaimRewardEvent(
4445
+ metadata=_make_meta(meta),
4446
+ pool=_pub(data, 0),
4447
+ position=_pub(data, 32),
4448
+ owner=_pub(data, 64),
4449
+ mint_reward=_pub(data, 96),
4450
+ reward_index=data[128],
4451
+ total_reward=int.from_bytes(data[129:137], "little"),
4452
+ ),
4453
+ )
@@ -74,9 +74,17 @@ RUST_EVENT_TYPES = [
74
74
  "MeteoraDammV2RemoveLiquidity",
75
75
  "MeteoraDammV2InitializePool",
76
76
  "MeteoraDammV2CreatePosition",
77
+ "MeteoraDammV2ClaimPositionFee",
78
+ "MeteoraDammV2ClaimReward",
79
+ "MeteoraDlmmClaimReward",
77
80
  "MeteoraDammV2ClosePosition",
78
81
  "MeteoraDammV2UpdateDelegatePermission",
79
82
  "MeteoraDammV2WithdrawDeadLiquidityReward",
83
+ "MeteoraDammV2WithdrawIneligibleReward",
84
+ "MeteoraDammV2UpdateRewardFunder",
85
+ "MeteoraDammV2UpdateRewardDuration",
86
+ "MeteoraDammV2InitializeReward",
87
+ "MeteoraDammV2FundReward",
80
88
  "MeteoraDammV2CreateConfig",
81
89
  "MeteoraDammV2CreateDynamicConfig",
82
90
  "MeteoraDbcSwap",