sol-parser-sdk-python 0.5.6__py3-none-any.whl → 0.5.7__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
@@ -27,8 +27,14 @@ from .event_types import (
27
27
  RaydiumAmmV4WithdrawPnlEvent, RaydiumAmmV4Initialize2Event,
28
28
  RaydiumClmmSwapEvent, RaydiumClmmIncreaseLiquidityEvent,
29
29
  RaydiumClmmDecreaseLiquidityEvent, RaydiumClmmCreatePoolEvent,
30
- RaydiumClmmCollectFeeEvent, RaydiumCpmmSwapEvent, RaydiumCpmmDepositEvent,
31
- RaydiumCpmmWithdrawEvent, OrcaWhirlpoolSwapEvent, OrcaWhirlpoolLiquidityIncreasedEvent,
30
+ RaydiumClmmCollectFeeEvent, RaydiumClmmLiquidityChangeEvent,
31
+ RaydiumClmmConfigChangeEvent, RaydiumClmmCreatePersonalPositionEvent,
32
+ RaydiumClmmLiquidityCalculateEvent, RaydiumClmmOpenLimitOrderEvent,
33
+ RaydiumClmmIncreaseLimitOrderEvent, RaydiumClmmDecreaseLimitOrderEvent,
34
+ RaydiumClmmSettleLimitOrderEvent, RaydiumClmmUpdateRewardInfosEvent,
35
+ RaydiumCpmmSwapEvent, RaydiumCpmmDepositEvent,
36
+ RaydiumCpmmWithdrawEvent, RaydiumCpmmInitializeEvent,
37
+ OrcaWhirlpoolSwapEvent, OrcaWhirlpoolLiquidityIncreasedEvent,
32
38
  OrcaWhirlpoolLiquidityDecreasedEvent, OrcaWhirlpoolPoolInitializedEvent,
33
39
  MeteoraDlmmSwapEvent, MeteoraDlmmAddLiquidityEvent, MeteoraDlmmRemoveLiquidityEvent,
34
40
  MeteoraDlmmInitializePoolEvent, MeteoraDlmmInitializeBinArrayEvent,
@@ -752,129 +758,179 @@ def parse_pump_fees_upsert_fee_tiers_from_data(data: bytes, meta: dict) -> DexEv
752
758
 
753
759
 
754
760
  def parse_clmm_swap_from_data(data: bytes, meta: dict) -> DexEvent:
755
- if len(data) < 32 + 32 + 8 + 8 + 16 + 1:
761
+ if len(data) < 32 + 32 + 32 + 32 + 8 + 8 + 8 + 8 + 1 + 16 + 16 + 4:
756
762
  return DexEvent()
757
763
  o = 0
758
764
  ps = _pub(data, o)
759
765
  o += 32
760
- user = _pub(data, o)
761
- o += 32 + 8 + 8
766
+ sender = _pub(data, o)
767
+ o += 32
768
+ token_account_0 = _pub(data, o)
769
+ o += 32
770
+ token_account_1 = _pub(data, o)
771
+ o += 32
772
+ amount_0 = _u64le(data, o)
773
+ o += 8
774
+ transfer_fee_0 = _u64le(data, o)
775
+ o += 8
776
+ amount_1 = _u64le(data, o)
777
+ o += 8
778
+ transfer_fee_1 = _u64le(data, o)
779
+ o += 8
780
+ zfo = _bool(data, o)
781
+ o += 1
762
782
  sqrt = str(_u128le_int(data, o))
763
783
  o += 16
764
- zfo = _bool(data, o)
784
+ liq = str(_u128le_int(data, o))
785
+ o += 16
786
+ tick = _i32le(data, o)
765
787
 
766
788
  return DexEvent(
767
789
  type=EventType.RAYDIUM_CLMM_SWAP,
768
790
  data=RaydiumClmmSwapEvent(
769
791
  metadata=_make_meta(meta),
770
792
  pool_state=ps,
771
- sender=user,
772
- token_account_0=Z,
773
- token_account_1=Z,
774
- amount_0=0,
775
- amount_1=0,
793
+ sender=sender,
794
+ token_account_0=token_account_0,
795
+ token_account_1=token_account_1,
796
+ amount_0=amount_0,
797
+ amount_1=amount_1,
776
798
  zero_for_one=zfo,
777
799
  sqrt_price_x64=sqrt,
778
- liquidity="0",
779
- transfer_fee_0=0,
780
- transfer_fee_1=0,
781
- tick=0,
800
+ liquidity=liq,
801
+ transfer_fee_0=transfer_fee_0,
802
+ transfer_fee_1=transfer_fee_1,
803
+ tick=tick,
782
804
  ),
783
805
  )
784
806
 
785
807
 
786
808
  def parse_clmm_inc_from_data(data: bytes, meta: dict) -> DexEvent:
787
- if len(data) < 32 + 32 + 16 + 8 + 8:
809
+ if len(data) < 32 + 16 + 8 + 8 + 8 + 8:
788
810
  return DexEvent()
789
811
  o = 0
790
- pool = _pub(data, o)
791
- o += 32
792
- user = _pub(data, o)
812
+ position_nft_mint = _pub(data, o)
793
813
  o += 32
794
814
  liq = str(_u128le_int(data, o))
795
815
  o += 16
796
- a0 = _u64le(data, o)
816
+ amount_0 = _u64le(data, o)
797
817
  o += 8
798
- a1 = _u64le(data, o)
818
+ amount_1 = _u64le(data, o)
819
+ o += 8
820
+ amount_0_transfer_fee = _u64le(data, o)
821
+ o += 8
822
+ amount_1_transfer_fee = _u64le(data, o)
799
823
 
800
824
  return DexEvent(
801
825
  type=EventType.RAYDIUM_CLMM_INCREASE_LIQUIDITY,
802
826
  data=RaydiumClmmIncreaseLiquidityEvent(
803
827
  metadata=_make_meta(meta),
804
- pool=pool,
805
- position_nft_mint=Z,
806
- user=user,
828
+ pool=Z,
829
+ position_nft_mint=position_nft_mint,
830
+ user=Z,
807
831
  liquidity=liq,
808
- amount0_max=a0,
809
- amount1_max=a1,
832
+ amount_0=amount_0,
833
+ amount_1=amount_1,
834
+ amount_0_transfer_fee=amount_0_transfer_fee,
835
+ amount_1_transfer_fee=amount_1_transfer_fee,
836
+ amount0_max=0,
837
+ amount1_max=0,
810
838
  ),
811
839
  )
812
840
 
813
841
 
814
842
  def parse_clmm_dec_from_data(data: bytes, meta: dict) -> DexEvent:
815
- if len(data) < 32 + 32 + 16 + 8 + 8:
843
+ if len(data) < 32 + 16 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8:
816
844
  return DexEvent()
817
845
  o = 0
818
- pool = _pub(data, o)
819
- o += 32
820
- user = _pub(data, o)
846
+ position_nft_mint = _pub(data, o)
821
847
  o += 32
822
848
  liq = str(_u128le_int(data, o))
823
849
  o += 16
824
- a0 = _u64le(data, o)
850
+ decrease_amount_0 = _u64le(data, o)
825
851
  o += 8
826
- a1 = _u64le(data, o)
852
+ decrease_amount_1 = _u64le(data, o)
853
+ o += 8
854
+ fee_amount_0 = _u64le(data, o)
855
+ o += 8
856
+ fee_amount_1 = _u64le(data, o)
857
+ o += 8
858
+ reward_amounts = [_u64le(data, o), _u64le(data, o + 8), _u64le(data, o + 16)]
859
+ o += 24
860
+ transfer_fee_0 = _u64le(data, o)
861
+ o += 8
862
+ transfer_fee_1 = _u64le(data, o)
827
863
 
828
864
  return DexEvent(
829
865
  type=EventType.RAYDIUM_CLMM_DECREASE_LIQUIDITY,
830
866
  data=RaydiumClmmDecreaseLiquidityEvent(
831
867
  metadata=_make_meta(meta),
832
- pool=pool,
833
- position_nft_mint=Z,
834
- user=user,
868
+ pool=Z,
869
+ position_nft_mint=position_nft_mint,
870
+ user=Z,
835
871
  liquidity=liq,
836
- amount0_min=a0,
837
- amount1_min=a1,
872
+ decrease_amount_0=decrease_amount_0,
873
+ decrease_amount_1=decrease_amount_1,
874
+ fee_amount_0=fee_amount_0,
875
+ fee_amount_1=fee_amount_1,
876
+ reward_amounts=reward_amounts,
877
+ transfer_fee_0=transfer_fee_0,
878
+ transfer_fee_1=transfer_fee_1,
879
+ amount0_min=0,
880
+ amount1_min=0,
838
881
  ),
839
882
  )
840
883
 
841
884
 
842
885
  def parse_clmm_create_from_data(data: bytes, meta: dict) -> DexEvent:
843
- if len(data) < 32 + 32 + 16 + 8:
886
+ if len(data) < 32 + 32 + 2 + 32 + 16 + 4 + 32 + 32:
844
887
  return DexEvent()
845
888
  o = 0
846
- pool = _pub(data, o)
889
+ token_0_mint = _pub(data, o)
847
890
  o += 32
848
- cr = _pub(data, o)
891
+ token_1_mint = _pub(data, o)
892
+ o += 32
893
+ tick_spacing = _u16le(data, o)
894
+ o += 2
895
+ pool = _pub(data, o)
849
896
  o += 32
850
897
  sqrt = str(_u128le_int(data, o))
851
898
  o += 16
852
- ot = _u64le(data, o)
899
+ tick = _i32le(data, o)
900
+ o += 4
901
+ token_vault_0 = _pub(data, o)
902
+ o += 32
903
+ token_vault_1 = _pub(data, o)
853
904
 
854
905
  return DexEvent(
855
906
  type=EventType.RAYDIUM_CLMM_CREATE_POOL,
856
907
  data=RaydiumClmmCreatePoolEvent(
857
908
  metadata=_make_meta(meta),
858
909
  pool=pool,
859
- creator=cr,
860
- token_0_mint=Z,
861
- token_1_mint=Z,
862
- tick_spacing=0,
910
+ creator=Z,
911
+ token_0_mint=token_0_mint,
912
+ token_1_mint=token_1_mint,
913
+ tick_spacing=tick_spacing,
863
914
  fee_rate=0,
864
915
  sqrt_price_x64=sqrt,
865
- open_time=ot,
916
+ tick=tick,
917
+ token_vault_0=token_vault_0,
918
+ token_vault_1=token_vault_1,
919
+ open_time=0,
866
920
  ),
867
921
  )
868
922
 
869
923
 
870
- def parse_clmm_collect_from_data(data: bytes, meta: dict) -> DexEvent:
871
- if len(data) < 32 + 32 + 8 + 8:
924
+ def parse_clmm_collect_personal_from_data(data: bytes, meta: dict) -> DexEvent:
925
+ if len(data) < 32 + 32 + 32 + 8 + 8:
872
926
  return DexEvent()
873
927
  o = 0
874
- ps = _pub(data, o)
875
- o += 32
876
928
  pn = _pub(data, o)
877
929
  o += 32
930
+ recipient_0 = _pub(data, o)
931
+ o += 32
932
+ recipient_1 = _pub(data, o)
933
+ o += 32
878
934
  a0 = _u64le(data, o)
879
935
  o += 8
880
936
  a1 = _u64le(data, o)
@@ -883,14 +939,325 @@ def parse_clmm_collect_from_data(data: bytes, meta: dict) -> DexEvent:
883
939
  type=EventType.RAYDIUM_CLMM_COLLECT_FEE,
884
940
  data=RaydiumClmmCollectFeeEvent(
885
941
  metadata=_make_meta(meta),
886
- pool_state=ps,
942
+ pool_state=Z,
887
943
  position_nft_mint=pn,
944
+ recipient_token_account_0=recipient_0,
945
+ recipient_token_account_1=recipient_1,
888
946
  amount_0=a0,
889
947
  amount_1=a1,
890
948
  ),
891
949
  )
892
950
 
893
951
 
952
+ def parse_clmm_collect_protocol_from_data(data: bytes, meta: dict) -> DexEvent:
953
+ if len(data) < 32 + 32 + 32 + 8 + 8:
954
+ return DexEvent()
955
+ o = 0
956
+ ps = _pub(data, o)
957
+ o += 32
958
+ recipient_0 = _pub(data, o)
959
+ o += 32
960
+ recipient_1 = _pub(data, o)
961
+ o += 32
962
+ a0 = _u64le(data, o)
963
+ o += 8
964
+ a1 = _u64le(data, o)
965
+
966
+ return DexEvent(
967
+ type=EventType.RAYDIUM_CLMM_COLLECT_FEE,
968
+ data=RaydiumClmmCollectFeeEvent(
969
+ metadata=_make_meta(meta),
970
+ pool_state=ps,
971
+ position_nft_mint=Z,
972
+ recipient_token_account_0=recipient_0,
973
+ recipient_token_account_1=recipient_1,
974
+ amount_0=a0,
975
+ amount_1=a1,
976
+ ),
977
+ )
978
+
979
+
980
+ def parse_clmm_liquidity_change_from_data(data: bytes, meta: dict) -> DexEvent:
981
+ if len(data) < 32 + 4 + 4 + 4 + 16 + 16:
982
+ return DexEvent()
983
+ o = 0
984
+ pool_state = _pub(data, o)
985
+ o += 32
986
+ tick = _i32le(data, o)
987
+ o += 4
988
+ tick_lower = _i32le(data, o)
989
+ o += 4
990
+ tick_upper = _i32le(data, o)
991
+ o += 4
992
+ before = str(_u128le_int(data, o))
993
+ o += 16
994
+ after = str(_u128le_int(data, o))
995
+ return DexEvent(
996
+ type=EventType.RAYDIUM_CLMM_LIQUIDITY_CHANGE,
997
+ data=RaydiumClmmLiquidityChangeEvent(
998
+ metadata=_make_meta(meta),
999
+ pool_state=pool_state,
1000
+ tick=tick,
1001
+ tick_lower=tick_lower,
1002
+ tick_upper=tick_upper,
1003
+ liquidity_before=before,
1004
+ liquidity_after=after,
1005
+ ),
1006
+ )
1007
+
1008
+
1009
+ def parse_clmm_config_change_from_data(data: bytes, meta: dict) -> DexEvent:
1010
+ if len(data) < 2 + 32 + 4 + 4 + 2 + 4 + 32:
1011
+ return DexEvent()
1012
+ o = 0
1013
+ index = _u16le(data, o)
1014
+ o += 2
1015
+ owner = _pub(data, o)
1016
+ o += 32
1017
+ protocol_fee_rate = _u32le(data, o)
1018
+ o += 4
1019
+ trade_fee_rate = _u32le(data, o)
1020
+ o += 4
1021
+ tick_spacing = _u16le(data, o)
1022
+ o += 2
1023
+ fund_fee_rate = _u32le(data, o)
1024
+ o += 4
1025
+ fund_owner = _pub(data, o)
1026
+ return DexEvent(
1027
+ type=EventType.RAYDIUM_CLMM_CONFIG_CHANGE,
1028
+ data=RaydiumClmmConfigChangeEvent(
1029
+ metadata=_make_meta(meta),
1030
+ index=index,
1031
+ owner=owner,
1032
+ protocol_fee_rate=protocol_fee_rate,
1033
+ trade_fee_rate=trade_fee_rate,
1034
+ tick_spacing=tick_spacing,
1035
+ fund_fee_rate=fund_fee_rate,
1036
+ fund_owner=fund_owner,
1037
+ ),
1038
+ )
1039
+
1040
+
1041
+ def parse_clmm_create_personal_position_from_data(data: bytes, meta: dict) -> DexEvent:
1042
+ if len(data) < 32 + 32 + 32 + 4 + 4 + 16 + 8 + 8 + 8 + 8:
1043
+ return DexEvent()
1044
+ o = 0
1045
+ pool_state = _pub(data, o)
1046
+ o += 32
1047
+ minter = _pub(data, o)
1048
+ o += 32
1049
+ nft_owner = _pub(data, o)
1050
+ o += 32
1051
+ tick_lower_index = _i32le(data, o)
1052
+ o += 4
1053
+ tick_upper_index = _i32le(data, o)
1054
+ o += 4
1055
+ liquidity = str(_u128le_int(data, o))
1056
+ o += 16
1057
+ deposit_amount_0 = _u64le(data, o)
1058
+ o += 8
1059
+ deposit_amount_1 = _u64le(data, o)
1060
+ o += 8
1061
+ deposit_amount_0_transfer_fee = _u64le(data, o)
1062
+ o += 8
1063
+ deposit_amount_1_transfer_fee = _u64le(data, o)
1064
+ return DexEvent(
1065
+ type=EventType.RAYDIUM_CLMM_CREATE_PERSONAL_POSITION,
1066
+ data=RaydiumClmmCreatePersonalPositionEvent(
1067
+ metadata=_make_meta(meta),
1068
+ pool_state=pool_state,
1069
+ minter=minter,
1070
+ nft_owner=nft_owner,
1071
+ tick_lower_index=tick_lower_index,
1072
+ tick_upper_index=tick_upper_index,
1073
+ liquidity=liquidity,
1074
+ deposit_amount_0=deposit_amount_0,
1075
+ deposit_amount_1=deposit_amount_1,
1076
+ deposit_amount_0_transfer_fee=deposit_amount_0_transfer_fee,
1077
+ deposit_amount_1_transfer_fee=deposit_amount_1_transfer_fee,
1078
+ ),
1079
+ )
1080
+
1081
+
1082
+ def parse_clmm_liquidity_calculate_from_data(data: bytes, meta: dict) -> DexEvent:
1083
+ if len(data) < 16 + 16 + 4 + 8 + 8 + 8 + 8 + 8 + 8:
1084
+ return DexEvent()
1085
+ o = 0
1086
+ pool_liquidity = str(_u128le_int(data, o))
1087
+ o += 16
1088
+ pool_sqrt_price_x64 = str(_u128le_int(data, o))
1089
+ o += 16
1090
+ pool_tick = _i32le(data, o)
1091
+ o += 4
1092
+ calc_amount_0 = _u64le(data, o)
1093
+ o += 8
1094
+ calc_amount_1 = _u64le(data, o)
1095
+ o += 8
1096
+ trade_fee_owed_0 = _u64le(data, o)
1097
+ o += 8
1098
+ trade_fee_owed_1 = _u64le(data, o)
1099
+ o += 8
1100
+ transfer_fee_0 = _u64le(data, o)
1101
+ o += 8
1102
+ transfer_fee_1 = _u64le(data, o)
1103
+ return DexEvent(
1104
+ type=EventType.RAYDIUM_CLMM_LIQUIDITY_CALCULATE,
1105
+ data=RaydiumClmmLiquidityCalculateEvent(
1106
+ metadata=_make_meta(meta),
1107
+ pool_liquidity=pool_liquidity,
1108
+ pool_sqrt_price_x64=pool_sqrt_price_x64,
1109
+ pool_tick=pool_tick,
1110
+ calc_amount_0=calc_amount_0,
1111
+ calc_amount_1=calc_amount_1,
1112
+ trade_fee_owed_0=trade_fee_owed_0,
1113
+ trade_fee_owed_1=trade_fee_owed_1,
1114
+ transfer_fee_0=transfer_fee_0,
1115
+ transfer_fee_1=transfer_fee_1,
1116
+ ),
1117
+ )
1118
+
1119
+
1120
+ def parse_clmm_open_limit_order_from_data(data: bytes, meta: dict) -> DexEvent:
1121
+ if len(data) < 32 + 32 + 1 + 4 + 8 + 8:
1122
+ return DexEvent()
1123
+ o = 0
1124
+ pool_id = _pub(data, o)
1125
+ o += 32
1126
+ limit_order = _pub(data, o)
1127
+ o += 32
1128
+ zero_for_one = _bool(data, o)
1129
+ o += 1
1130
+ tick_index = _i32le(data, o)
1131
+ o += 4
1132
+ total_amount = _u64le(data, o)
1133
+ o += 8
1134
+ transfer_fee = _u64le(data, o)
1135
+ return DexEvent(
1136
+ type=EventType.RAYDIUM_CLMM_OPEN_LIMIT_ORDER,
1137
+ data=RaydiumClmmOpenLimitOrderEvent(
1138
+ metadata=_make_meta(meta),
1139
+ pool_id=pool_id,
1140
+ limit_order=limit_order,
1141
+ zero_for_one=zero_for_one,
1142
+ tick_index=tick_index,
1143
+ total_amount=total_amount,
1144
+ transfer_fee=transfer_fee,
1145
+ ),
1146
+ )
1147
+
1148
+
1149
+ def parse_clmm_increase_limit_order_from_data(data: bytes, meta: dict) -> DexEvent:
1150
+ if len(data) < 32 + 32 + 1 + 4 + 8 + 8 + 8:
1151
+ return DexEvent()
1152
+ o = 0
1153
+ pool_id = _pub(data, o)
1154
+ o += 32
1155
+ limit_order = _pub(data, o)
1156
+ o += 32
1157
+ zero_for_one = _bool(data, o)
1158
+ o += 1
1159
+ tick_index = _i32le(data, o)
1160
+ o += 4
1161
+ total_amount = _u64le(data, o)
1162
+ o += 8
1163
+ increased_amount = _u64le(data, o)
1164
+ o += 8
1165
+ transfer_fee = _u64le(data, o)
1166
+ return DexEvent(
1167
+ type=EventType.RAYDIUM_CLMM_INCREASE_LIMIT_ORDER,
1168
+ data=RaydiumClmmIncreaseLimitOrderEvent(
1169
+ metadata=_make_meta(meta),
1170
+ pool_id=pool_id,
1171
+ limit_order=limit_order,
1172
+ zero_for_one=zero_for_one,
1173
+ tick_index=tick_index,
1174
+ total_amount=total_amount,
1175
+ increased_amount=increased_amount,
1176
+ transfer_fee=transfer_fee,
1177
+ ),
1178
+ )
1179
+
1180
+
1181
+ def parse_clmm_decrease_limit_order_from_data(data: bytes, meta: dict) -> DexEvent:
1182
+ if len(data) < 32 + 32 + 1 + 4 + 8 + 8 + 8 + 8:
1183
+ return DexEvent()
1184
+ o = 0
1185
+ pool_id = _pub(data, o)
1186
+ o += 32
1187
+ limit_order = _pub(data, o)
1188
+ o += 32
1189
+ zero_for_one = _bool(data, o)
1190
+ o += 1
1191
+ tick_index = _i32le(data, o)
1192
+ o += 4
1193
+ total_amount = _u64le(data, o)
1194
+ o += 8
1195
+ filled_amount = _u64le(data, o)
1196
+ o += 8
1197
+ settled_output_amount = _u64le(data, o)
1198
+ o += 8
1199
+ decreased_amount = _u64le(data, o)
1200
+ return DexEvent(
1201
+ type=EventType.RAYDIUM_CLMM_DECREASE_LIMIT_ORDER,
1202
+ data=RaydiumClmmDecreaseLimitOrderEvent(
1203
+ metadata=_make_meta(meta),
1204
+ pool_id=pool_id,
1205
+ limit_order=limit_order,
1206
+ zero_for_one=zero_for_one,
1207
+ tick_index=tick_index,
1208
+ total_amount=total_amount,
1209
+ filled_amount=filled_amount,
1210
+ settled_output_amount=settled_output_amount,
1211
+ decreased_amount=decreased_amount,
1212
+ ),
1213
+ )
1214
+
1215
+
1216
+ def parse_clmm_settle_limit_order_from_data(data: bytes, meta: dict) -> DexEvent:
1217
+ if len(data) < 32 + 32 + 1 + 4 + 8 + 8 + 8:
1218
+ return DexEvent()
1219
+ o = 0
1220
+ pool_id = _pub(data, o)
1221
+ o += 32
1222
+ limit_order = _pub(data, o)
1223
+ o += 32
1224
+ zero_for_one = _bool(data, o)
1225
+ o += 1
1226
+ tick_index = _i32le(data, o)
1227
+ o += 4
1228
+ total_amount = _u64le(data, o)
1229
+ o += 8
1230
+ filled_amount = _u64le(data, o)
1231
+ o += 8
1232
+ settled_amount_out = _u64le(data, o)
1233
+ return DexEvent(
1234
+ type=EventType.RAYDIUM_CLMM_SETTLE_LIMIT_ORDER,
1235
+ data=RaydiumClmmSettleLimitOrderEvent(
1236
+ metadata=_make_meta(meta),
1237
+ pool_id=pool_id,
1238
+ limit_order=limit_order,
1239
+ zero_for_one=zero_for_one,
1240
+ tick_index=tick_index,
1241
+ total_amount=total_amount,
1242
+ filled_amount=filled_amount,
1243
+ settled_amount_out=settled_amount_out,
1244
+ ),
1245
+ )
1246
+
1247
+
1248
+ def parse_clmm_update_reward_infos_from_data(data: bytes, meta: dict) -> DexEvent:
1249
+ if len(data) < 16 * 3:
1250
+ return DexEvent()
1251
+ rewards = [str(_u128le_int(data, i * 16)) for i in range(3)]
1252
+ return DexEvent(
1253
+ type=EventType.RAYDIUM_CLMM_UPDATE_REWARD_INFOS,
1254
+ data=RaydiumClmmUpdateRewardInfosEvent(
1255
+ metadata=_make_meta(meta),
1256
+ reward_growth_global_x64=rewards,
1257
+ ),
1258
+ )
1259
+
1260
+
894
1261
  # --- Raydium AMM ---
895
1262
 
896
1263
 
@@ -1084,6 +1451,31 @@ def parse_cpmm_swap_out_from_data(data: bytes, meta: dict) -> Optional[DexEvent]
1084
1451
  )
1085
1452
 
1086
1453
 
1454
+ def parse_cpmm_create_from_data(data: bytes, meta: dict) -> Optional[DexEvent]:
1455
+ if len(data) < 32 + 32 + 32 + 32 + 8 + 8:
1456
+ return None
1457
+ o = 0
1458
+ pool = _pub(data, o)
1459
+ o += 32
1460
+ o += 32
1461
+ o += 32
1462
+ creator = _pub(data, o)
1463
+ o += 32
1464
+ init_amount0 = _u64le(data, o)
1465
+ o += 8
1466
+ init_amount1 = _u64le(data, o)
1467
+ return DexEvent(
1468
+ type=EventType.RAYDIUM_CPMM_INITIALIZE,
1469
+ data=RaydiumCpmmInitializeEvent(
1470
+ metadata=_make_meta(meta),
1471
+ pool=pool,
1472
+ creator=creator,
1473
+ init_amount0=init_amount0,
1474
+ init_amount1=init_amount1,
1475
+ ),
1476
+ )
1477
+
1478
+
1087
1479
  def parse_cpmm_deposit_from_data(data: bytes, meta: dict) -> Optional[DexEvent]:
1088
1480
  if len(data) < 32 + 32 + 8 + 8 + 8:
1089
1481
  return None
@@ -2567,13 +2959,24 @@ _LOG_DISCRIMINATOR_EVENT_TYPES = {
2567
2959
  _d(177, 49, 12, 210, 160, 118, 167, 116): EventType.PUMP_SWAP_CREATE_POOL,
2568
2960
  _d(120, 248, 61, 83, 31, 142, 107, 144): EventType.PUMP_SWAP_LIQUIDITY_ADDED,
2569
2961
  _d(22, 9, 133, 26, 160, 44, 71, 192): EventType.PUMP_SWAP_LIQUIDITY_REMOVED,
2570
- _d(248, 198, 158, 145, 225, 117, 135, 200): EventType.RAYDIUM_CLMM_SWAP,
2571
- _d(133, 29, 89, 223, 69, 238, 176, 10): EventType.RAYDIUM_CLMM_INCREASE_LIQUIDITY,
2572
- _d(160, 38, 208, 111, 104, 91, 44, 1): EventType.RAYDIUM_CLMM_DECREASE_LIQUIDITY,
2573
- _d(233, 146, 209, 142, 207, 104, 64, 188): EventType.RAYDIUM_CLMM_CREATE_POOL,
2574
- _d(164, 152, 207, 99, 187, 104, 171, 119): EventType.RAYDIUM_CLMM_COLLECT_FEE,
2962
+ _d(64, 198, 205, 232, 38, 8, 113, 226): EventType.RAYDIUM_CLMM_SWAP,
2963
+ _d(49, 79, 105, 212, 32, 34, 30, 84): EventType.RAYDIUM_CLMM_INCREASE_LIQUIDITY,
2964
+ _d(58, 222, 86, 58, 68, 50, 85, 56): EventType.RAYDIUM_CLMM_DECREASE_LIQUIDITY,
2965
+ _d(126, 240, 175, 206, 158, 88, 153, 107): EventType.RAYDIUM_CLMM_LIQUIDITY_CHANGE,
2966
+ _d(247, 189, 7, 119, 106, 112, 95, 151): EventType.RAYDIUM_CLMM_CONFIG_CHANGE,
2967
+ _d(100, 30, 87, 249, 196, 223, 154, 206): EventType.RAYDIUM_CLMM_CREATE_PERSONAL_POSITION,
2968
+ _d(237, 112, 148, 230, 57, 84, 180, 162): EventType.RAYDIUM_CLMM_LIQUIDITY_CALCULATE,
2969
+ _d(106, 24, 71, 85, 57, 169, 158, 216): EventType.RAYDIUM_CLMM_OPEN_LIMIT_ORDER,
2970
+ _d(11, 120, 13, 204, 199, 87, 19, 200): EventType.RAYDIUM_CLMM_INCREASE_LIMIT_ORDER,
2971
+ _d(70, 48, 40, 221, 219, 237, 212, 163): EventType.RAYDIUM_CLMM_DECREASE_LIMIT_ORDER,
2972
+ _d(88, 119, 77, 164, 125, 124, 10, 194): EventType.RAYDIUM_CLMM_SETTLE_LIMIT_ORDER,
2973
+ _d(109, 127, 186, 78, 114, 65, 37, 236): EventType.RAYDIUM_CLMM_UPDATE_REWARD_INFOS,
2974
+ _d(25, 94, 75, 47, 112, 99, 53, 63): EventType.RAYDIUM_CLMM_CREATE_POOL,
2975
+ _d(166, 174, 105, 192, 81, 161, 83, 105): EventType.RAYDIUM_CLMM_COLLECT_FEE,
2976
+ _d(206, 87, 17, 79, 45, 41, 213, 61): EventType.RAYDIUM_CLMM_COLLECT_FEE,
2575
2977
  _d(143, 190, 90, 218, 196, 30, 51, 222): EventType.RAYDIUM_CPMM_SWAP,
2576
2978
  _d(55, 217, 98, 86, 163, 74, 180, 173): EventType.RAYDIUM_CPMM_SWAP,
2979
+ _d(233, 146, 209, 142, 207, 104, 64, 188): EventType.RAYDIUM_CPMM_INITIALIZE,
2577
2980
  _d(242, 35, 198, 137, 82, 225, 242, 182): EventType.RAYDIUM_CPMM_DEPOSIT,
2578
2981
  _d(183, 18, 70, 156, 148, 109, 161, 34): EventType.RAYDIUM_CPMM_WITHDRAW,
2579
2982
  _d(0, 0, 0, 0, 0, 0, 0, 9): EventType.RAYDIUM_AMM_V4_SWAP,
@@ -2615,18 +3018,114 @@ def event_type_for_discriminator(disc: int) -> Optional[EventType]:
2615
3018
 
2616
3019
 
2617
3020
  RAYDIUM_LAUNCHLAB_PROGRAM_ID = "LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"
3021
+ PUMPFUN_PROGRAM_ID = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"
3022
+ PUMP_FEES_PROGRAM_ID = "pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ"
3023
+ PUMPSWAP_PROGRAM_ID = "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA"
3024
+ RAYDIUM_CLMM_PROGRAM_ID = "CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"
3025
+ RAYDIUM_CPMM_PROGRAM_ID = "CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"
3026
+ RAYDIUM_AMM_V4_PROGRAM_ID = "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"
3027
+ ORCA_WHIRLPOOL_PROGRAM_ID = "whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"
3028
+ METEORA_POOLS_PROGRAM_ID = "Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB"
2618
3029
  METEORA_DAMM_V2_PROGRAM_ID = "cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG"
2619
3030
  METEORA_DBC_PROGRAM_ID = "dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN"
2620
3031
  METEORA_DLMM_PROGRAM_ID = "LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo"
2621
3032
 
2622
3033
 
2623
3034
  def event_type_for_program_discriminator(program_id: Optional[str], disc: int) -> Optional[EventType]:
3035
+ if program_id == PUMPFUN_PROGRAM_ID:
3036
+ if disc == PUMP_CREATE:
3037
+ return EventType.PUMP_FUN_CREATE
3038
+ if disc == PUMP_TRADE:
3039
+ return EventType.PUMP_FUN_TRADE
3040
+ if disc == PUMP_MIGRATE:
3041
+ return EventType.PUMP_FUN_MIGRATE
3042
+ if disc == PUMP_MIGRATE_BONDING_CURVE_CREATOR:
3043
+ return EventType.PUMP_FUN_MIGRATE_BONDING_CURVE_CREATOR
3044
+ return None
3045
+ if program_id == PUMP_FEES_PROGRAM_ID:
3046
+ mapping = {
3047
+ PUMP_FEES_CREATE_FEE_SHARING_CONFIG: EventType.PUMP_FEES_CREATE_FEE_SHARING_CONFIG,
3048
+ PUMP_FEES_INITIALIZE_FEE_CONFIG: EventType.PUMP_FEES_INITIALIZE_FEE_CONFIG,
3049
+ PUMP_FEES_RESET_FEE_SHARING_CONFIG: EventType.PUMP_FEES_RESET_FEE_SHARING_CONFIG,
3050
+ PUMP_FEES_REVOKE_FEE_SHARING_AUTHORITY: EventType.PUMP_FEES_REVOKE_FEE_SHARING_AUTHORITY,
3051
+ PUMP_FEES_TRANSFER_FEE_SHARING_AUTHORITY: EventType.PUMP_FEES_TRANSFER_FEE_SHARING_AUTHORITY,
3052
+ PUMP_FEES_UPDATE_ADMIN: EventType.PUMP_FEES_UPDATE_ADMIN,
3053
+ PUMP_FEES_UPDATE_FEE_CONFIG: EventType.PUMP_FEES_UPDATE_FEE_CONFIG,
3054
+ PUMP_FEES_UPDATE_FEE_SHARES: EventType.PUMP_FEES_UPDATE_FEE_SHARES,
3055
+ PUMP_FEES_UPSERT_FEE_TIERS: EventType.PUMP_FEES_UPSERT_FEE_TIERS,
3056
+ }
3057
+ return mapping.get(disc)
3058
+ if program_id == PUMPSWAP_PROGRAM_ID:
3059
+ mapping = {
3060
+ _d(103, 244, 82, 31, 44, 245, 119, 119): EventType.PUMP_SWAP_BUY,
3061
+ _d(62, 47, 55, 10, 165, 3, 220, 42): EventType.PUMP_SWAP_SELL,
3062
+ _d(177, 49, 12, 210, 160, 118, 167, 116): EventType.PUMP_SWAP_CREATE_POOL,
3063
+ _d(120, 248, 61, 83, 31, 142, 107, 144): EventType.PUMP_SWAP_LIQUIDITY_ADDED,
3064
+ _d(22, 9, 133, 26, 160, 44, 71, 192): EventType.PUMP_SWAP_LIQUIDITY_REMOVED,
3065
+ }
3066
+ return mapping.get(disc)
2624
3067
  if program_id == RAYDIUM_LAUNCHLAB_PROGRAM_ID:
2625
3068
  if disc == DISC_RAYDIUM_LAUNCHLAB_TRADE:
2626
3069
  return EventType.RAYDIUM_LAUNCHLAB_TRADE
2627
3070
  if disc == DISC_RAYDIUM_LAUNCHLAB_POOL_CREATE:
2628
3071
  return EventType.RAYDIUM_LAUNCHLAB_POOL_CREATE
2629
3072
  return None
3073
+ if program_id == RAYDIUM_CLMM_PROGRAM_ID:
3074
+ mapping = {
3075
+ _d(64, 198, 205, 232, 38, 8, 113, 226): EventType.RAYDIUM_CLMM_SWAP,
3076
+ _d(49, 79, 105, 212, 32, 34, 30, 84): EventType.RAYDIUM_CLMM_INCREASE_LIQUIDITY,
3077
+ _d(58, 222, 86, 58, 68, 50, 85, 56): EventType.RAYDIUM_CLMM_DECREASE_LIQUIDITY,
3078
+ _d(126, 240, 175, 206, 158, 88, 153, 107): EventType.RAYDIUM_CLMM_LIQUIDITY_CHANGE,
3079
+ _d(247, 189, 7, 119, 106, 112, 95, 151): EventType.RAYDIUM_CLMM_CONFIG_CHANGE,
3080
+ _d(100, 30, 87, 249, 196, 223, 154, 206): EventType.RAYDIUM_CLMM_CREATE_PERSONAL_POSITION,
3081
+ _d(237, 112, 148, 230, 57, 84, 180, 162): EventType.RAYDIUM_CLMM_LIQUIDITY_CALCULATE,
3082
+ _d(106, 24, 71, 85, 57, 169, 158, 216): EventType.RAYDIUM_CLMM_OPEN_LIMIT_ORDER,
3083
+ _d(11, 120, 13, 204, 199, 87, 19, 200): EventType.RAYDIUM_CLMM_INCREASE_LIMIT_ORDER,
3084
+ _d(70, 48, 40, 221, 219, 237, 212, 163): EventType.RAYDIUM_CLMM_DECREASE_LIMIT_ORDER,
3085
+ _d(88, 119, 77, 164, 125, 124, 10, 194): EventType.RAYDIUM_CLMM_SETTLE_LIMIT_ORDER,
3086
+ _d(109, 127, 186, 78, 114, 65, 37, 236): EventType.RAYDIUM_CLMM_UPDATE_REWARD_INFOS,
3087
+ _d(25, 94, 75, 47, 112, 99, 53, 63): EventType.RAYDIUM_CLMM_CREATE_POOL,
3088
+ _d(166, 174, 105, 192, 81, 161, 83, 105): EventType.RAYDIUM_CLMM_COLLECT_FEE,
3089
+ _d(206, 87, 17, 79, 45, 41, 213, 61): EventType.RAYDIUM_CLMM_COLLECT_FEE,
3090
+ }
3091
+ return mapping.get(disc)
3092
+ if program_id == RAYDIUM_CPMM_PROGRAM_ID:
3093
+ mapping = {
3094
+ _d(143, 190, 90, 218, 196, 30, 51, 222): EventType.RAYDIUM_CPMM_SWAP,
3095
+ _d(55, 217, 98, 86, 163, 74, 180, 173): EventType.RAYDIUM_CPMM_SWAP,
3096
+ _d(233, 146, 209, 142, 207, 104, 64, 188): EventType.RAYDIUM_CPMM_INITIALIZE,
3097
+ _d(242, 35, 198, 137, 82, 225, 242, 182): EventType.RAYDIUM_CPMM_DEPOSIT,
3098
+ _d(183, 18, 70, 156, 148, 109, 161, 34): EventType.RAYDIUM_CPMM_WITHDRAW,
3099
+ }
3100
+ return mapping.get(disc)
3101
+ if program_id == RAYDIUM_AMM_V4_PROGRAM_ID:
3102
+ mapping = {
3103
+ _d(0, 0, 0, 0, 0, 0, 0, 9): EventType.RAYDIUM_AMM_V4_SWAP,
3104
+ _d(0, 0, 0, 0, 0, 0, 0, 11): EventType.RAYDIUM_AMM_V4_SWAP,
3105
+ _d(0, 0, 0, 0, 0, 0, 0, 3): EventType.RAYDIUM_AMM_V4_DEPOSIT,
3106
+ _d(0, 0, 0, 0, 0, 0, 0, 4): EventType.RAYDIUM_AMM_V4_WITHDRAW,
3107
+ _d(0, 0, 0, 0, 0, 0, 0, 1): EventType.RAYDIUM_AMM_V4_INITIALIZE2,
3108
+ _d(0, 0, 0, 0, 0, 0, 0, 7): EventType.RAYDIUM_AMM_V4_WITHDRAW_PNL,
3109
+ }
3110
+ return mapping.get(disc)
3111
+ if program_id == ORCA_WHIRLPOOL_PROGRAM_ID:
3112
+ mapping = {
3113
+ _d(225, 202, 73, 175, 147, 43, 160, 150): EventType.ORCA_WHIRLPOOL_SWAP,
3114
+ _d(30, 7, 144, 181, 102, 254, 155, 161): EventType.ORCA_WHIRLPOOL_LIQUIDITY_INCREASED,
3115
+ _d(166, 1, 36, 71, 112, 202, 181, 171): EventType.ORCA_WHIRLPOOL_LIQUIDITY_DECREASED,
3116
+ _d(100, 118, 173, 87, 12, 198, 254, 229): EventType.ORCA_WHIRLPOOL_POOL_INITIALIZED,
3117
+ }
3118
+ return mapping.get(disc)
3119
+ if program_id == METEORA_POOLS_PROGRAM_ID:
3120
+ mapping = {
3121
+ _d(81, 108, 227, 190, 205, 208, 10, 196): EventType.METEORA_POOLS_SWAP,
3122
+ _d(31, 94, 125, 90, 227, 52, 61, 186): EventType.METEORA_POOLS_ADD_LIQUIDITY,
3123
+ _d(116, 244, 97, 232, 103, 31, 152, 58): EventType.METEORA_POOLS_REMOVE_LIQUIDITY,
3124
+ _d(121, 127, 38, 136, 92, 55, 14, 247): EventType.METEORA_POOLS_BOOTSTRAP_LIQUIDITY,
3125
+ _d(202, 44, 41, 88, 104, 220, 157, 82): EventType.METEORA_POOLS_POOL_CREATED,
3126
+ _d(245, 26, 198, 164, 88, 18, 75, 9): EventType.METEORA_POOLS_SET_POOL_FEES,
3127
+ }
3128
+ return mapping.get(disc)
2630
3129
  if program_id == METEORA_DAMM_V2_PROGRAM_ID:
2631
3130
  if disc in (DAMM_SWAP, DAMM_SWAP2):
2632
3131
  return EventType.METEORA_DAMM_V2_SWAP
@@ -2649,19 +3148,221 @@ def event_type_for_program_discriminator(program_id: Optional[str], disc: int) -
2649
3148
  if disc == DBC_CURVE_COMPLETE:
2650
3149
  return EventType.METEORA_DBC_CURVE_COMPLETE
2651
3150
  return None
3151
+ if program_id == METEORA_DLMM_PROGRAM_ID:
3152
+ if disc == DLMM_SWAP:
3153
+ return EventType.METEORA_DLMM_SWAP
3154
+ if disc == DLMM_ADD_LIQ:
3155
+ return EventType.METEORA_DLMM_ADD_LIQUIDITY
3156
+ if disc == DLMM_REMOVE_LIQ:
3157
+ return EventType.METEORA_DLMM_REMOVE_LIQUIDITY
3158
+ if disc == DLMM_INIT_POOL:
3159
+ return EventType.METEORA_DLMM_INITIALIZE_POOL
3160
+ if disc == DLMM_INIT_BIN:
3161
+ return EventType.METEORA_DLMM_INITIALIZE_BIN_ARRAY
3162
+ if disc == DLMM_CREATE_POS:
3163
+ return EventType.METEORA_DLMM_CREATE_POSITION
3164
+ if disc == DLMM_CLOSE_POS:
3165
+ return EventType.METEORA_DLMM_CLOSE_POSITION
3166
+ if disc == DLMM_CLAIM_FEE:
3167
+ return EventType.METEORA_DLMM_CLAIM_FEE
3168
+ return None
2652
3169
  return event_type_for_discriminator(disc)
2653
3170
 
2654
3171
 
3172
+ def filter_wants_pumpfun_trade(event_type_filter: Any) -> bool:
3173
+ return event_type_filter is None or any(
3174
+ event_type_filter.should_include(t)
3175
+ for t in (
3176
+ EventType.PUMP_FUN_TRADE,
3177
+ EventType.PUMP_FUN_BUY,
3178
+ EventType.PUMP_FUN_SELL,
3179
+ EventType.PUMP_FUN_BUY_EXACT_SOL_IN,
3180
+ )
3181
+ )
3182
+
3183
+
3184
+ def filter_wants_raydium_launchlab_trade(event_type_filter: Any) -> bool:
3185
+ return event_type_filter is None or event_type_filter.should_include(
3186
+ EventType.RAYDIUM_LAUNCHLAB_TRADE
3187
+ )
3188
+
3189
+
3190
+ def filter_allows_unscoped_discriminator(event_type_filter: Any, disc: int) -> bool:
3191
+ if event_type_filter is None:
3192
+ return True
3193
+ if disc == PUMP_TRADE:
3194
+ return filter_wants_pumpfun_trade(event_type_filter) or filter_wants_raydium_launchlab_trade(
3195
+ event_type_filter
3196
+ )
3197
+ if disc == DLMM_SWAP:
3198
+ return event_type_filter.should_include(EventType.RAYDIUM_CPMM_SWAP) or event_type_filter.should_include(
3199
+ EventType.METEORA_DLMM_SWAP
3200
+ )
3201
+ event_type = event_type_for_discriminator(disc)
3202
+ if event_type is not None:
3203
+ return event_type_filter.should_include(event_type)
3204
+ return filter_wants_supported_logs(event_type_filter)
3205
+
3206
+
3207
+ def filter_wants_supported_logs(event_type_filter: Any) -> bool:
3208
+ return any(
3209
+ filter_includes_program(event_type_filter, program_id)
3210
+ for program_id in (
3211
+ PUMPFUN_PROGRAM_ID,
3212
+ PUMP_FEES_PROGRAM_ID,
3213
+ PUMPSWAP_PROGRAM_ID,
3214
+ RAYDIUM_LAUNCHLAB_PROGRAM_ID,
3215
+ RAYDIUM_CLMM_PROGRAM_ID,
3216
+ RAYDIUM_CPMM_PROGRAM_ID,
3217
+ RAYDIUM_AMM_V4_PROGRAM_ID,
3218
+ ORCA_WHIRLPOOL_PROGRAM_ID,
3219
+ METEORA_POOLS_PROGRAM_ID,
3220
+ METEORA_DAMM_V2_PROGRAM_ID,
3221
+ METEORA_DLMM_PROGRAM_ID,
3222
+ METEORA_DBC_PROGRAM_ID,
3223
+ )
3224
+ )
3225
+
3226
+
3227
+ def dispatch_unscoped_pumpfun_launchlab_trade(
3228
+ data: bytes,
3229
+ meta: dict,
3230
+ is_created_buy: bool,
3231
+ event_type_filter: Any = None,
3232
+ ) -> Optional[DexEvent]:
3233
+ if filter_wants_pumpfun_trade(event_type_filter):
3234
+ pumpfun = apply_event_type_filter(
3235
+ parse_trade_from_data(data, meta, is_created_buy),
3236
+ event_type_filter,
3237
+ )
3238
+ if pumpfun is not None:
3239
+ return pumpfun
3240
+ if filter_wants_raydium_launchlab_trade(event_type_filter):
3241
+ return apply_event_type_filter(
3242
+ parse_raydium_launchlab_from_discriminator(PUMP_TRADE, data, meta),
3243
+ event_type_filter,
3244
+ )
3245
+ return None
3246
+
3247
+
3248
+ def _pumpfun_trade_matches_include_only(ev: DexEvent, include_only: List[EventType]) -> bool:
3249
+ if ev.type == EventType.PUMP_FUN_BUY:
3250
+ return EventType.PUMP_FUN_BUY in include_only or EventType.PUMP_FUN_BUY_EXACT_SOL_IN in include_only
3251
+ if ev.type == EventType.PUMP_FUN_SELL:
3252
+ return EventType.PUMP_FUN_SELL in include_only
3253
+ if ev.type == EventType.PUMP_FUN_BUY_EXACT_SOL_IN:
3254
+ return EventType.PUMP_FUN_BUY in include_only or EventType.PUMP_FUN_BUY_EXACT_SOL_IN in include_only
3255
+ if ev.type == EventType.PUMP_FUN_TRADE:
3256
+ return EventType.PUMP_FUN_TRADE in include_only
3257
+ if ev.type in (EventType.PUMP_FUN_CREATE, EventType.PUMP_FUN_CREATE_V2):
3258
+ return EventType.PUMP_FUN_CREATE in include_only or EventType.PUMP_FUN_CREATE_V2 in include_only
3259
+ return False
3260
+
3261
+
3262
+ def apply_pumpfun_secondary_filter(ev: Optional[DexEvent], event_type_filter: Any) -> Optional[DexEvent]:
3263
+ if ev is None or not ev.is_valid():
3264
+ return None
3265
+ include_only = getattr(event_type_filter, "include_only", None)
3266
+ if include_only:
3267
+ has_specific = any(
3268
+ t
3269
+ in (
3270
+ EventType.PUMP_FUN_BUY,
3271
+ EventType.PUMP_FUN_SELL,
3272
+ EventType.PUMP_FUN_BUY_EXACT_SOL_IN,
3273
+ EventType.PUMP_FUN_CREATE,
3274
+ EventType.PUMP_FUN_CREATE_V2,
3275
+ )
3276
+ for t in include_only
3277
+ )
3278
+ if has_specific and not _pumpfun_trade_matches_include_only(ev, include_only):
3279
+ return None
3280
+ return apply_event_type_filter(ev, event_type_filter)
3281
+
3282
+
3283
+ def dispatch_scoped_pumpfun_data(
3284
+ disc: int,
3285
+ data: bytes,
3286
+ meta: dict,
3287
+ is_created_buy: bool,
3288
+ event_type_filter: Any = None,
3289
+ ) -> Optional[DexEvent]:
3290
+ if disc == PUMP_TRADE:
3291
+ return apply_pumpfun_secondary_filter(
3292
+ parse_trade_from_data(data, meta, is_created_buy),
3293
+ event_type_filter,
3294
+ )
3295
+ if disc == PUMP_CREATE:
3296
+ return parse_create_from_data(data, meta)
3297
+ if disc == PUMP_MIGRATE:
3298
+ return parse_migrate_from_data(data, meta)
3299
+ if disc == PUMP_MIGRATE_BONDING_CURVE_CREATOR:
3300
+ return parse_migrate_bonding_curve_creator_from_data(data, meta)
3301
+ return None
3302
+
3303
+
3304
+ def dispatch_scoped_pump_fees_data(disc: int, data: bytes, meta: dict) -> Optional[DexEvent]:
3305
+ if disc == PUMP_FEES_CREATE_FEE_SHARING_CONFIG:
3306
+ return parse_pump_fees_create_fee_sharing_config_from_data(data, meta)
3307
+ if disc == PUMP_FEES_INITIALIZE_FEE_CONFIG:
3308
+ return parse_pump_fees_initialize_fee_config_from_data(data, meta)
3309
+ if disc == PUMP_FEES_RESET_FEE_SHARING_CONFIG:
3310
+ return parse_pump_fees_reset_fee_sharing_config_from_data(data, meta)
3311
+ if disc == PUMP_FEES_REVOKE_FEE_SHARING_AUTHORITY:
3312
+ return parse_pump_fees_revoke_fee_sharing_authority_from_data(data, meta)
3313
+ if disc == PUMP_FEES_TRANSFER_FEE_SHARING_AUTHORITY:
3314
+ return parse_pump_fees_transfer_fee_sharing_authority_from_data(data, meta)
3315
+ if disc == PUMP_FEES_UPDATE_ADMIN:
3316
+ return parse_pump_fees_update_admin_from_data(data, meta)
3317
+ if disc == PUMP_FEES_UPDATE_FEE_CONFIG:
3318
+ return parse_pump_fees_update_fee_config_from_data(data, meta)
3319
+ if disc == PUMP_FEES_UPDATE_FEE_SHARES:
3320
+ return parse_pump_fees_update_fee_shares_from_data(data, meta)
3321
+ if disc == PUMP_FEES_UPSERT_FEE_TIERS:
3322
+ return parse_pump_fees_upsert_fee_tiers_from_data(data, meta)
3323
+ return None
3324
+
3325
+
3326
+ def dispatch_scoped_pumpswap_data(disc: int, data: bytes, meta: dict) -> Optional[DexEvent]:
3327
+ if disc == _d(103, 244, 82, 31, 44, 245, 119, 119):
3328
+ return parse_ps_buy_from_data(data, meta)
3329
+ if disc == _d(62, 47, 55, 10, 165, 3, 220, 42):
3330
+ return parse_ps_sell_from_data(data, meta)
3331
+ if disc == _d(177, 49, 12, 210, 160, 118, 167, 116):
3332
+ return parse_ps_create_pool_from_data(data, meta)
3333
+ if disc == _d(120, 248, 61, 83, 31, 142, 107, 144):
3334
+ return parse_ps_add_liq_from_data(data, meta)
3335
+ if disc == _d(22, 9, 133, 26, 160, 44, 71, 192):
3336
+ return parse_ps_remove_liq_from_data(data, meta)
3337
+ return None
3338
+
3339
+
2655
3340
  def filter_includes_program(event_type_filter: Any, program_id: Optional[str]) -> bool:
2656
3341
  from .grpc_types import (
2657
3342
  METEORA_DAMM_V2_FILTER_TYPES,
2658
3343
  METEORA_DBC_FILTER_TYPES,
2659
3344
  METEORA_DLMM_FILTER_TYPES,
3345
+ METEORA_POOLS_FILTER_TYPES,
3346
+ ORCA_WHIRLPOOL_FILTER_TYPES,
3347
+ PUMP_FEES_EVENT_TYPES,
3348
+ PUMPFUN_FILTER_TYPES,
3349
+ PUMPSWAP_FILTER_TYPES,
3350
+ RAYDIUM_AMM_V4_FILTER_TYPES,
3351
+ RAYDIUM_CLMM_FILTER_TYPES,
3352
+ RAYDIUM_CPMM_FILTER_TYPES,
2660
3353
  RAYDIUM_LAUNCHLAB_FILTER_TYPES,
2661
3354
  )
2662
3355
 
2663
3356
  groups = {
3357
+ PUMPFUN_PROGRAM_ID: PUMPFUN_FILTER_TYPES,
3358
+ PUMP_FEES_PROGRAM_ID: PUMP_FEES_EVENT_TYPES,
3359
+ PUMPSWAP_PROGRAM_ID: PUMPSWAP_FILTER_TYPES,
2664
3360
  RAYDIUM_LAUNCHLAB_PROGRAM_ID: RAYDIUM_LAUNCHLAB_FILTER_TYPES,
3361
+ RAYDIUM_CLMM_PROGRAM_ID: RAYDIUM_CLMM_FILTER_TYPES,
3362
+ RAYDIUM_CPMM_PROGRAM_ID: RAYDIUM_CPMM_FILTER_TYPES,
3363
+ RAYDIUM_AMM_V4_PROGRAM_ID: RAYDIUM_AMM_V4_FILTER_TYPES,
3364
+ ORCA_WHIRLPOOL_PROGRAM_ID: ORCA_WHIRLPOOL_FILTER_TYPES,
3365
+ METEORA_POOLS_PROGRAM_ID: METEORA_POOLS_FILTER_TYPES,
2665
3366
  METEORA_DAMM_V2_PROGRAM_ID: METEORA_DAMM_V2_FILTER_TYPES,
2666
3367
  METEORA_DBC_PROGRAM_ID: METEORA_DBC_FILTER_TYPES,
2667
3368
  METEORA_DLMM_PROGRAM_ID: METEORA_DLMM_FILTER_TYPES,
@@ -2697,16 +3398,112 @@ def dispatch_program_data(
2697
3398
  meta: dict,
2698
3399
  is_created_buy: bool,
2699
3400
  program_id: Optional[str] = None,
3401
+ event_type_filter: Any = None,
2700
3402
  ) -> Optional[DexEvent]:
3403
+ if program_id == PUMPFUN_PROGRAM_ID:
3404
+ return dispatch_scoped_pumpfun_data(disc, data, meta, is_created_buy, event_type_filter)
3405
+ if program_id == PUMP_FEES_PROGRAM_ID:
3406
+ return dispatch_scoped_pump_fees_data(disc, data, meta)
3407
+ if program_id == PUMPSWAP_PROGRAM_ID:
3408
+ return dispatch_scoped_pumpswap_data(disc, data, meta)
2701
3409
  if program_id == RAYDIUM_LAUNCHLAB_PROGRAM_ID:
2702
3410
  return parse_raydium_launchlab_from_discriminator(disc, data, meta)
3411
+ if program_id == RAYDIUM_CLMM_PROGRAM_ID:
3412
+ if disc == _d(64, 198, 205, 232, 38, 8, 113, 226):
3413
+ return parse_clmm_swap_from_data(data, meta)
3414
+ if disc == _d(49, 79, 105, 212, 32, 34, 30, 84):
3415
+ return parse_clmm_inc_from_data(data, meta)
3416
+ if disc == _d(58, 222, 86, 58, 68, 50, 85, 56):
3417
+ return parse_clmm_dec_from_data(data, meta)
3418
+ if disc == _d(126, 240, 175, 206, 158, 88, 153, 107):
3419
+ return parse_clmm_liquidity_change_from_data(data, meta)
3420
+ if disc == _d(247, 189, 7, 119, 106, 112, 95, 151):
3421
+ return parse_clmm_config_change_from_data(data, meta)
3422
+ if disc == _d(100, 30, 87, 249, 196, 223, 154, 206):
3423
+ return parse_clmm_create_personal_position_from_data(data, meta)
3424
+ if disc == _d(237, 112, 148, 230, 57, 84, 180, 162):
3425
+ return parse_clmm_liquidity_calculate_from_data(data, meta)
3426
+ if disc == _d(106, 24, 71, 85, 57, 169, 158, 216):
3427
+ return parse_clmm_open_limit_order_from_data(data, meta)
3428
+ if disc == _d(11, 120, 13, 204, 199, 87, 19, 200):
3429
+ return parse_clmm_increase_limit_order_from_data(data, meta)
3430
+ if disc == _d(70, 48, 40, 221, 219, 237, 212, 163):
3431
+ return parse_clmm_decrease_limit_order_from_data(data, meta)
3432
+ if disc == _d(88, 119, 77, 164, 125, 124, 10, 194):
3433
+ return parse_clmm_settle_limit_order_from_data(data, meta)
3434
+ if disc == _d(109, 127, 186, 78, 114, 65, 37, 236):
3435
+ return parse_clmm_update_reward_infos_from_data(data, meta)
3436
+ if disc == _d(25, 94, 75, 47, 112, 99, 53, 63):
3437
+ return parse_clmm_create_from_data(data, meta)
3438
+ if disc == _d(166, 174, 105, 192, 81, 161, 83, 105):
3439
+ return parse_clmm_collect_personal_from_data(data, meta)
3440
+ if disc == _d(206, 87, 17, 79, 45, 41, 213, 61):
3441
+ return parse_clmm_collect_protocol_from_data(data, meta)
3442
+ return None
3443
+ if program_id == RAYDIUM_CPMM_PROGRAM_ID:
3444
+ if disc == _d(143, 190, 90, 218, 196, 30, 51, 222):
3445
+ return parse_cpmm_swap_in_from_data(data, meta)
3446
+ if disc == _d(55, 217, 98, 86, 163, 74, 180, 173):
3447
+ return parse_cpmm_swap_out_from_data(data, meta)
3448
+ if disc == _d(233, 146, 209, 142, 207, 104, 64, 188):
3449
+ return parse_cpmm_create_from_data(data, meta)
3450
+ if disc == _d(242, 35, 198, 137, 82, 225, 242, 182):
3451
+ return parse_cpmm_deposit_from_data(data, meta)
3452
+ if disc == _d(183, 18, 70, 156, 148, 109, 161, 34):
3453
+ return parse_cpmm_withdraw_from_data(data, meta)
3454
+ return None
3455
+ if program_id == RAYDIUM_AMM_V4_PROGRAM_ID:
3456
+ if disc == _d(0, 0, 0, 0, 0, 0, 0, 9):
3457
+ return parse_amm_swap_in_from_data(data, meta)
3458
+ if disc == _d(0, 0, 0, 0, 0, 0, 0, 11):
3459
+ return parse_amm_swap_out_from_data(data, meta)
3460
+ if disc == _d(0, 0, 0, 0, 0, 0, 0, 3):
3461
+ return parse_amm_deposit_from_data(data, meta)
3462
+ if disc == _d(0, 0, 0, 0, 0, 0, 0, 4):
3463
+ return parse_amm_withdraw_from_data(data, meta)
3464
+ if disc == _d(0, 0, 0, 0, 0, 0, 0, 1):
3465
+ return parse_amm_init2_from_data(data, meta)
3466
+ if disc == _d(0, 0, 0, 0, 0, 0, 0, 7):
3467
+ return parse_amm_withdraw_pnl_from_data(data, meta)
3468
+ return None
3469
+ if program_id == ORCA_WHIRLPOOL_PROGRAM_ID:
3470
+ if disc == _d(225, 202, 73, 175, 147, 43, 160, 150):
3471
+ return parse_orca_traded_from_data(data, meta)
3472
+ if disc == _d(30, 7, 144, 181, 102, 254, 155, 161):
3473
+ return parse_orca_liq_inc_from_data(data, meta)
3474
+ if disc == _d(166, 1, 36, 71, 112, 202, 181, 171):
3475
+ return parse_orca_liq_dec_from_data(data, meta)
3476
+ if disc == _d(100, 118, 173, 87, 12, 198, 254, 229):
3477
+ return parse_orca_pool_init_from_data(data, meta)
3478
+ return None
3479
+ if program_id == METEORA_POOLS_PROGRAM_ID:
3480
+ if disc == _d(81, 108, 227, 190, 205, 208, 10, 196):
3481
+ return parse_meteora_swap_from_data(data, meta)
3482
+ if disc == _d(31, 94, 125, 90, 227, 52, 61, 186):
3483
+ return parse_meteora_add_from_data(data, meta)
3484
+ if disc == _d(116, 244, 97, 232, 103, 31, 152, 58):
3485
+ return parse_meteora_remove_from_data(data, meta)
3486
+ if disc == _d(121, 127, 38, 136, 92, 55, 14, 247):
3487
+ return parse_meteora_bootstrap_from_data(data, meta)
3488
+ if disc == _d(202, 44, 41, 88, 104, 220, 157, 82):
3489
+ return parse_meteora_pool_created_from_data(data, meta)
3490
+ if disc == _d(245, 26, 198, 164, 88, 18, 75, 9):
3491
+ return parse_meteora_pools_set_pool_fees_from_data(data, meta)
3492
+ return None
3493
+ if program_id == METEORA_DAMM_V2_PROGRAM_ID:
3494
+ return parse_meteora_damm_from_buf(buf, meta)
2703
3495
  if program_id == METEORA_DBC_PROGRAM_ID:
2704
3496
  return parse_meteora_dbc_from_discriminator(disc, data, meta)
2705
3497
  if program_id == METEORA_DLMM_PROGRAM_ID:
2706
3498
  return parse_dlmm_from_program_data(buf, meta)
2707
3499
  if disc == PUMP_TRADE:
2708
- return parse_trade_from_data(data, meta, is_created_buy)
2709
- if disc == _d(248, 198, 158, 145, 225, 117, 135, 200):
3500
+ return dispatch_unscoped_pumpfun_launchlab_trade(
3501
+ data,
3502
+ meta,
3503
+ is_created_buy,
3504
+ event_type_filter,
3505
+ )
3506
+ if disc == _d(64, 198, 205, 232, 38, 8, 113, 226):
2710
3507
  return parse_clmm_swap_from_data(data, meta)
2711
3508
  if disc == _d(0, 0, 0, 0, 0, 0, 0, 9):
2712
3509
  return parse_amm_swap_in_from_data(data, meta)
@@ -2744,16 +3541,36 @@ def dispatch_program_data(
2744
3541
  return parse_ps_add_liq_from_data(data, meta)
2745
3542
  if disc == _d(22, 9, 133, 26, 160, 44, 71, 192):
2746
3543
  return parse_ps_remove_liq_from_data(data, meta)
2747
- if disc == _d(133, 29, 89, 223, 69, 238, 176, 10):
3544
+ if disc == _d(49, 79, 105, 212, 32, 34, 30, 84):
2748
3545
  return parse_clmm_inc_from_data(data, meta)
2749
- if disc == _d(160, 38, 208, 111, 104, 91, 44, 1):
3546
+ if disc == _d(58, 222, 86, 58, 68, 50, 85, 56):
2750
3547
  return parse_clmm_dec_from_data(data, meta)
2751
- if disc == _d(233, 146, 209, 142, 207, 104, 64, 188):
3548
+ if disc == _d(126, 240, 175, 206, 158, 88, 153, 107):
3549
+ return parse_clmm_liquidity_change_from_data(data, meta)
3550
+ if disc == _d(247, 189, 7, 119, 106, 112, 95, 151):
3551
+ return parse_clmm_config_change_from_data(data, meta)
3552
+ if disc == _d(100, 30, 87, 249, 196, 223, 154, 206):
3553
+ return parse_clmm_create_personal_position_from_data(data, meta)
3554
+ if disc == _d(237, 112, 148, 230, 57, 84, 180, 162):
3555
+ return parse_clmm_liquidity_calculate_from_data(data, meta)
3556
+ if disc == _d(106, 24, 71, 85, 57, 169, 158, 216):
3557
+ return parse_clmm_open_limit_order_from_data(data, meta)
3558
+ if disc == _d(11, 120, 13, 204, 199, 87, 19, 200):
3559
+ return parse_clmm_increase_limit_order_from_data(data, meta)
3560
+ if disc == _d(70, 48, 40, 221, 219, 237, 212, 163):
3561
+ return parse_clmm_decrease_limit_order_from_data(data, meta)
3562
+ if disc == _d(88, 119, 77, 164, 125, 124, 10, 194):
3563
+ return parse_clmm_settle_limit_order_from_data(data, meta)
3564
+ if disc == _d(109, 127, 186, 78, 114, 65, 37, 236):
3565
+ return parse_clmm_update_reward_infos_from_data(data, meta)
3566
+ if disc == _d(25, 94, 75, 47, 112, 99, 53, 63):
2752
3567
  return parse_clmm_create_from_data(data, meta)
2753
- if disc == _d(164, 152, 207, 99, 187, 104, 171, 119):
2754
- return parse_clmm_collect_from_data(data, meta)
3568
+ if disc == _d(166, 174, 105, 192, 81, 161, 83, 105):
3569
+ return parse_clmm_collect_personal_from_data(data, meta)
3570
+ if disc == _d(206, 87, 17, 79, 45, 41, 213, 61):
3571
+ return parse_clmm_collect_protocol_from_data(data, meta)
2755
3572
  if disc == _d(143, 190, 90, 218, 196, 30, 51, 222):
2756
- return parse_cpmm_swap_in_from_data(data, meta)
3573
+ return apply_event_type_filter(parse_cpmm_swap_in_from_data(data, meta), event_type_filter)
2757
3574
  if disc == _d(55, 217, 98, 86, 163, 74, 180, 173):
2758
3575
  return parse_cpmm_swap_out_from_data(data, meta)
2759
3576
  if disc == _d(242, 35, 198, 137, 82, 225, 242, 182):