sol-parser-sdk-python 0.5.5__tar.gz → 0.5.6__tar.gz

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 (82) hide show
  1. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/PKG-INFO +10 -2
  2. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/README.md +9 -1
  3. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/README_CN.md +9 -1
  4. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/pyproject.toml +1 -1
  5. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/__init__.py +8 -0
  6. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/accounts/__init__.py +61 -0
  7. sol_parser_sdk_python-0.5.6/sol_parser/accounts/raydium_orca.py +515 -0
  8. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/dex_parsers.py +186 -0
  9. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/event_types.py +39 -0
  10. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/grpc_client.py +22 -2
  11. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/grpc_instruction_parser.py +7 -17
  12. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/instructions.py +6 -1
  13. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/parser.py +70 -2
  14. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/rpc_parser.py +66 -25
  15. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/shredstream_client.py +19 -1
  16. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/test_filter_and_account_parity.py +321 -2
  17. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/test_shredstream.py +9 -1
  18. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/.env.example +0 -0
  19. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/.gitignore +0 -0
  20. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/examples/meteora_damm_grpc.py +0 -0
  21. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/examples/multi_protocol_grpc.py +0 -0
  22. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/examples/parse_tx_by_signature.py +0 -0
  23. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/examples/pumpfun_quick_test.py +0 -0
  24. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/examples/pumpfun_trade_filter.py +0 -0
  25. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/examples/pumpfun_with_metrics.py +0 -0
  26. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/examples/pumpswap_low_latency.py +0 -0
  27. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/examples/pumpswap_with_metrics.py +0 -0
  28. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/examples/rust_example_utils.py +0 -0
  29. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/scripts/bench_parser.py +0 -0
  30. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/scripts/gen_golden_rust.sh +0 -0
  31. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/account_dispatcher.py +0 -0
  32. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/account_fillers/__init__.py +0 -0
  33. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/account_fillers/meteora.py +0 -0
  34. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/account_fillers/orca.py +0 -0
  35. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/account_fillers/pumpfun.py +0 -0
  36. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/account_fillers/pumpswap.py +0 -0
  37. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/account_fillers/raydium.py +0 -0
  38. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/account_fillers/raydium_launchlab.py +0 -0
  39. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/accounts/rpc_wallet.py +0 -0
  40. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/accounts/utils.py +0 -0
  41. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/check_migration.py +0 -0
  42. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/clock.py +0 -0
  43. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/common/__init__.py +0 -0
  44. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/entries_decode.py +0 -0
  45. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/env_config.py +0 -0
  46. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/geyser_pb2.py +0 -0
  47. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/geyser_pb2_grpc.py +0 -0
  48. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/grpc/__init__.py +0 -0
  49. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/grpc/geyser_connect.py +0 -0
  50. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/grpc/subscribe_builder.py +0 -0
  51. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/grpc/transaction_meta.py +0 -0
  52. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/grpc_types.py +0 -0
  53. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/inner_instruction_parser.py +0 -0
  54. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/instr/__init__.py +0 -0
  55. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/instr_account_utils.py +0 -0
  56. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/json_util.py +0 -0
  57. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/log_instr_dedup.py +0 -0
  58. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/logs/__init__.py +0 -0
  59. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/market.py +0 -0
  60. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/merger.py +0 -0
  61. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/order_buffer.py +0 -0
  62. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/pumpfun_fee_enrich.py +0 -0
  63. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/rust_api_inventory.py +0 -0
  64. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/rust_event_json.py +0 -0
  65. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/shredstream_pb2.py +0 -0
  66. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/shredstream_pb2_grpc.py +0 -0
  67. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/shredstream_pumpfun.py +0 -0
  68. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/solana_storage_pb2.py +0 -0
  69. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/solana_storage_pb2_grpc.py +0 -0
  70. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/u128_parity.py +0 -0
  71. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/sol_parser/verify_discriminators.py +0 -0
  72. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/fixtures/golden_parse_log.json +0 -0
  73. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/test_golden.py +0 -0
  74. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/test_imports_and_inner.py +0 -0
  75. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/test_log_instr_dedup.py +0 -0
  76. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/test_market_helpers.py +0 -0
  77. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/test_order_buffer.py +0 -0
  78. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/test_pumpfun_account_fill.py +0 -0
  79. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/test_pumpfun_trade_tail.py +0 -0
  80. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/test_pumpfun_v2_parity.py +0 -0
  81. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/test_pumpswap_instruction.py +0 -0
  82. {sol_parser_sdk_python-0.5.5 → sol_parser_sdk_python-0.5.6}/tests/test_raydium_clmm_instruction_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sol-parser-sdk-python
3
- Version: 0.5.5
3
+ Version: 0.5.6
4
4
  Summary: Solana DEX program log parsing (pure Python, API aligned with sol-parser-sdk)
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: base58>=2.0
@@ -67,6 +67,14 @@ Description-Content-Type: text/markdown
67
67
 
68
68
  ## Release notes
69
69
 
70
+ ### v0.5.6
71
+
72
+ - Adds Meteora DBC log parsing with program-context routing and filter parity.
73
+ - Adds Raydium CLMM/CPMM and Orca account parsers and exports.
74
+ - Fixes default no-filter RPC/Yellowstone instruction parsing so it no longer behaves like an empty include-only filter.
75
+ - Merges RPC ALT loaded writable/readonly keys into the full instruction account table.
76
+ - Skips ShredStream/RPC instruction parsing early for account-only or empty include-only filters.
77
+
70
78
  ### v0.5.5
71
79
 
72
80
  - Aligns ShredStream parsing with Rust/Node.js/Go for low-latency static-account paths.
@@ -84,7 +92,7 @@ Description-Content-Type: text/markdown
84
92
  **From PyPI**
85
93
 
86
94
  ```bash
87
- pip install sol-parser-sdk-python==0.5.5
95
+ pip install sol-parser-sdk-python==0.5.6
88
96
  ```
89
97
 
90
98
  **From source**
@@ -51,6 +51,14 @@
51
51
 
52
52
  ## Release notes
53
53
 
54
+ ### v0.5.6
55
+
56
+ - Adds Meteora DBC log parsing with program-context routing and filter parity.
57
+ - Adds Raydium CLMM/CPMM and Orca account parsers and exports.
58
+ - Fixes default no-filter RPC/Yellowstone instruction parsing so it no longer behaves like an empty include-only filter.
59
+ - Merges RPC ALT loaded writable/readonly keys into the full instruction account table.
60
+ - Skips ShredStream/RPC instruction parsing early for account-only or empty include-only filters.
61
+
54
62
  ### v0.5.5
55
63
 
56
64
  - Aligns ShredStream parsing with Rust/Node.js/Go for low-latency static-account paths.
@@ -68,7 +76,7 @@
68
76
  **From PyPI**
69
77
 
70
78
  ```bash
71
- pip install sol-parser-sdk-python==0.5.5
79
+ pip install sol-parser-sdk-python==0.5.6
72
80
  ```
73
81
 
74
82
  **From source**
@@ -51,6 +51,14 @@
51
51
 
52
52
  ## 发布说明
53
53
 
54
+ ### v0.5.6
55
+
56
+ - 新增 Meteora DBC 日志解析,并按当前 program context 做路由与过滤。
57
+ - 新增 Raydium CLMM/CPMM、Orca account parser 与导出。
58
+ - 修复默认无 filter 的 RPC/Yellowstone 指令解析,不再被误当作空 include-only filter。
59
+ - RPC 指令账户表合并 ALT loaded writable/readonly keys。
60
+ - ShredStream/RPC 对 account-only 或空 include-only filter 直接跳过指令解析。
61
+
54
62
  ### v0.5.5
55
63
 
56
64
  - ShredStream 低延迟静态账户路径与 Rust/Node.js/Go 对齐。
@@ -68,7 +76,7 @@
68
76
  **PyPI**
69
77
 
70
78
  ```bash
71
- pip install sol-parser-sdk-python==0.5.5
79
+ pip install sol-parser-sdk-python==0.5.6
72
80
  ```
73
81
 
74
82
  **源码**
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sol-parser-sdk-python"
3
- version = "0.5.5"
3
+ version = "0.5.6"
4
4
  description = "Solana DEX program log parsing (pure Python, API aligned with sol-parser-sdk)"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -6,6 +6,7 @@ from .parser import (
6
6
  StreamingEventListener,
7
7
  parse_log,
8
8
  parse_log_optimized,
9
+ parse_log_optimized_with_program_id,
9
10
  parse_log_unified,
10
11
  parse_logs_only,
11
12
  parse_logs_streaming,
@@ -142,6 +143,9 @@ from .event_types import (
142
143
  MeteoraDammV2AddLiquidityEvent,
143
144
  MeteoraDammV2RemoveLiquidityEvent,
144
145
  MeteoraDammV2InitializePoolEvent,
146
+ MeteoraDbcCurveCompleteEvent,
147
+ MeteoraDbcInitializePoolEvent,
148
+ MeteoraDbcSwapEvent,
145
149
  # RaydiumLaunchlab events
146
150
  RaydiumLaunchlabTradeEvent,
147
151
  RaydiumLaunchlabPoolCreateEvent,
@@ -235,6 +239,7 @@ __all__ = [
235
239
  "enrich_dex_events_with_subscribe_tx_info",
236
240
  "parse_log_unified",
237
241
  "parse_log_optimized",
242
+ "parse_log_optimized_with_program_id",
238
243
  "parse_log",
239
244
  "parse_logs_only",
240
245
  "parse_logs_streaming",
@@ -409,6 +414,9 @@ __all__ = [
409
414
  "MeteoraDammV2AddLiquidityEvent",
410
415
  "MeteoraDammV2RemoveLiquidityEvent",
411
416
  "MeteoraDammV2InitializePoolEvent",
417
+ "MeteoraDbcCurveCompleteEvent",
418
+ "MeteoraDbcInitializePoolEvent",
419
+ "MeteoraDbcSwapEvent",
412
420
  "RaydiumLaunchlabTradeEvent",
413
421
  "RaydiumLaunchlabPoolCreateEvent",
414
422
  "RaydiumLaunchlabMigrateAmmEvent",
@@ -13,6 +13,14 @@ from ..dex_parsers import DexEvent
13
13
 
14
14
  from . import rpc_wallet
15
15
  from . import utils as acc_utils
16
+ from .raydium_orca import (
17
+ ORCA_WHIRLPOOL_PROGRAM_ID,
18
+ RAYDIUM_CLMM_PROGRAM_ID,
19
+ RAYDIUM_CPMM_PROGRAM_ID,
20
+ parse_orca_whirlpool_account,
21
+ parse_raydium_clmm_account,
22
+ parse_raydium_cpmm_account,
23
+ )
16
24
 
17
25
  # 程序 ID(与 Rust ``accounts/program_ids`` / ``instr/program_ids`` 一致)
18
26
  PUMPFUN_PROGRAM_ID = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"
@@ -173,6 +181,16 @@ ACCOUNT_EVENT_TYPES = frozenset(
173
181
  EventType.ACCOUNT_PUMP_FUN_USER_VOLUME_ACCUMULATOR,
174
182
  EventType.ACCOUNT_PUMP_SWAP_GLOBAL_CONFIG,
175
183
  EventType.ACCOUNT_PUMP_SWAP_POOL,
184
+ EventType.ACCOUNT_RAYDIUM_CLMM_AMM_CONFIG,
185
+ EventType.ACCOUNT_RAYDIUM_CLMM_POOL_STATE,
186
+ EventType.ACCOUNT_RAYDIUM_CLMM_TICK_ARRAY_STATE,
187
+ EventType.ACCOUNT_RAYDIUM_CPMM_AMM_CONFIG,
188
+ EventType.ACCOUNT_RAYDIUM_CPMM_POOL_STATE,
189
+ EventType.ACCOUNT_ORCA_WHIRLPOOL,
190
+ EventType.ACCOUNT_ORCA_POSITION,
191
+ EventType.ACCOUNT_ORCA_TICK_ARRAY,
192
+ EventType.ACCOUNT_ORCA_FEE_TIER,
193
+ EventType.ACCOUNT_ORCA_WHIRLPOOLS_CONFIG,
176
194
  )
177
195
  )
178
196
 
@@ -219,6 +237,43 @@ def parse_account_unified(
219
237
  return _filter_account_event(ev, event_type_filter)
220
238
  return None
221
239
 
240
+ if account.owner == RAYDIUM_CLMM_PROGRAM_ID:
241
+ should_parse_clmm = event_type_filter is None or (
242
+ event_type_filter.should_include(EventType.ACCOUNT_RAYDIUM_CLMM_AMM_CONFIG)
243
+ or event_type_filter.should_include(EventType.ACCOUNT_RAYDIUM_CLMM_POOL_STATE)
244
+ or event_type_filter.should_include(EventType.ACCOUNT_RAYDIUM_CLMM_TICK_ARRAY_STATE)
245
+ )
246
+ if should_parse_clmm:
247
+ ev = parse_raydium_clmm_account(account, metadata)
248
+ if ev is not None:
249
+ return _filter_account_event(ev, event_type_filter)
250
+ return None
251
+
252
+ if account.owner == RAYDIUM_CPMM_PROGRAM_ID:
253
+ should_parse_cpmm = event_type_filter is None or (
254
+ event_type_filter.should_include(EventType.ACCOUNT_RAYDIUM_CPMM_AMM_CONFIG)
255
+ or event_type_filter.should_include(EventType.ACCOUNT_RAYDIUM_CPMM_POOL_STATE)
256
+ )
257
+ if should_parse_cpmm:
258
+ ev = parse_raydium_cpmm_account(account, metadata)
259
+ if ev is not None:
260
+ return _filter_account_event(ev, event_type_filter)
261
+ return None
262
+
263
+ if account.owner == ORCA_WHIRLPOOL_PROGRAM_ID:
264
+ should_parse_orca = event_type_filter is None or (
265
+ event_type_filter.should_include(EventType.ACCOUNT_ORCA_WHIRLPOOL)
266
+ or event_type_filter.should_include(EventType.ACCOUNT_ORCA_POSITION)
267
+ or event_type_filter.should_include(EventType.ACCOUNT_ORCA_TICK_ARRAY)
268
+ or event_type_filter.should_include(EventType.ACCOUNT_ORCA_FEE_TIER)
269
+ or event_type_filter.should_include(EventType.ACCOUNT_ORCA_WHIRLPOOLS_CONFIG)
270
+ )
271
+ if should_parse_orca:
272
+ ev = parse_orca_whirlpool_account(account, metadata)
273
+ if ev is not None:
274
+ return _filter_account_event(ev, event_type_filter)
275
+ return None
276
+
222
277
  if acc_utils.is_nonce_account(data):
223
278
  if event_type_filter is not None:
224
279
  if not event_type_filter.should_include(EventType.NONCE_ACCOUNT):
@@ -848,12 +903,18 @@ __all__ = [
848
903
  "is_pumpfun_global_account",
849
904
  "parse_pumpswap_global_config",
850
905
  "parse_pumpswap_pool",
906
+ "parse_raydium_clmm_account",
907
+ "parse_raydium_cpmm_account",
908
+ "parse_orca_whirlpool_account",
851
909
  "is_global_config_account",
852
910
  "is_pool_account",
853
911
  "has_discriminator",
854
912
  "PUMPFUN_PROGRAM_ID",
855
913
  "PUMP_FEES_PROGRAM_ID",
856
914
  "PUMPSWAP_PROGRAM_ID",
915
+ "RAYDIUM_CLMM_PROGRAM_ID",
916
+ "RAYDIUM_CPMM_PROGRAM_ID",
917
+ "ORCA_WHIRLPOOL_PROGRAM_ID",
857
918
  "rpc_resolve_user_wallet_pubkey",
858
919
  "user_wallet_pubkey_for_onchain_account",
859
920
  "rpc_wallet",