sol-parser-sdk-python 0.5.14__tar.gz → 0.5.16__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.
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/PKG-INFO +41 -15
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/README.md +40 -14
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/README_CN.md +40 -14
- sol_parser_sdk_python-0.5.16/docs/releases/v0.5.15.md +20 -0
- sol_parser_sdk_python-0.5.16/docs/releases/v0.5.16.md +18 -0
- sol_parser_sdk_python-0.5.16/examples/fixtures/raw_instructions.json +111 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/parse_tx_by_signature.py +2 -2
- sol_parser_sdk_python-0.5.16/examples/pump_execution_replay.py +29 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/pump_shred_routes.py +20 -0
- sol_parser_sdk_python-0.5.16/examples/raw_instruction_filter.py +16 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/pyproject.toml +1 -1
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/__init__.py +2 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/event_type_parity.py +1 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/event_types.py +5 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/grpc_instruction_parser.py +4 -2
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/grpc_types.py +3 -2
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/inner_instruction_parser.py +3 -3
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/instructions.py +9 -0
- sol_parser_sdk_python-0.5.16/sol_parser/raw_instruction.py +77 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/rpc_parser.py +4 -3
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/shredstream_client.py +13 -0
- sol_parser_sdk_python-0.5.16/tests/fixtures/pump_execution_20261019.json +5179 -0
- sol_parser_sdk_python-0.5.16/tests/test_pump_execution.py +46 -0
- sol_parser_sdk_python-0.5.16/tests/test_raw_instruction.py +80 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/.env.example +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/.gitignore +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/docs/USAGE.md +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/block_meta_stream.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/amm_v4_grpc_refresh_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/batch2_cpmm_simulations_20261003.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/block_meta_grpc_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/cached_damm_v2_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/cached_tip_routes_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/cpmm_lp_simulations_20261006.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/damm_v2_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/pump_curve_instruction.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/pump_shred_routes.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/pumpfun_current_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/pumpfun_funded_sell_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/pumpfun_settlement_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/pumpfun_usdc_multihop_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/pumpswap_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/simulation_ata_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/fixtures/simulation_routes_live_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/hot_path_benchmark.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/hot_path_benchmark.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/meteora_damm_grpc.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/multi_protocol_grpc.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/offline_bank/README.md +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/offline_bank/config.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/offline_bank/expected.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/offline_bank/programs.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/offline_bank/snapshot.json.gz +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/pump_offline_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/pumpfun_quick_test.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/pumpfun_trade_filter.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/pumpfun_with_metrics.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/pumpswap_low_latency.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/pumpswap_with_metrics.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/rust_example_utils.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/simulation_routes.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/stonkfun_routes.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/stonkfun_snapshot_refresh.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/scripts/bench_parser.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/scripts/gen_golden_rust.sh +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/account_dispatcher.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/account_fillers/__init__.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/account_fillers/meteora.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/account_fillers/orca.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/account_fillers/pumpfun.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/account_fillers/pumpswap.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/account_fillers/raydium.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/account_fillers/raydium_launchlab.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/accounts/__init__.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/accounts/raydium_orca.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/accounts/rpc_wallet.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/accounts/utils.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/block_meta.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/check_migration.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/clock.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/common/__init__.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/dex_parsers.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/entries_decode.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/env_config.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/geyser_pb2.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/geyser_pb2_grpc.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/grpc/__init__.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/grpc/geyser_connect.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/grpc/subscribe_builder.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/grpc/transaction_meta.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/grpc_client.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/instr/__init__.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/instr_account_utils.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/json_util.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/liquidity_snapshot.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/log_instr_dedup.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/logs/__init__.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/market.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/merger.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/order_buffer.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/parser.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/pump_routes.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/pump_upgrade.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/pumpfun_fee_enrich.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/rust_api_inventory.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/rust_event_json.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/shredstream_pb2.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/shredstream_pb2_grpc.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/shredstream_pumpfun.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/simulation_route.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/solana_storage_pb2.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/solana_storage_pb2_grpc.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/stonkfun_registry.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/transaction_route.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/u128_parity.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/verify_discriminators.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/sol_parser/wire_transaction.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/account_lifecycle_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/cached_damm_v2_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/cached_tip_routes_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/clmm_fee_rewards_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/clmm_liquidity_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/clmm_one_sided_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/cpmm_liquidity_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/cpmm_lp_simulations_20261006.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_borrow_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_cpi_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_dual_claims_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_reward_admin_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_reward_renewal_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_reward_withdraw_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_upstream_hook_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_v1_config2_instruction_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_v1_live_simulations_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_v2_authority_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_v2_fees_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_v2_liquidity_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_v2_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_v2_rewards_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/damm_v2_vesting_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/dbc_boundary_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/dbc_live_simulations_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/dbc_migration_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/dbc_referral_live_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/dbc_swap2.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/dbc_v1_migration_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/dlmm_fees_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/dlmm_hook_rewards_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/dlmm_rewards_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/golden_parse_log.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/launchlab_migration_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/native_settlement_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pump_compact_simulations_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pump_depth2_20261014.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pump_holder_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pump_routes_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pump_synthetic_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pump_upgrade/account_context.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pump_upgrade/boost_account_context.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pump_upgrade/events.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pump_upgrade/mainnet.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pump_upgrade/pump_trade_account_context.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pump_upgrade/simulation_events.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_concentrated_multihop_mainnet_simulations_20261005.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/2MfmZSU8mWEbskNHAxQGphAyB5x72SC2HYuAkLeSyH6MjttUHqUjm24wPMeH7zrCoQoYFwbLeiFE571mc8WvgZyL.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/2dabmQiykzC1tsNmgtRFbsRJjEKMfUySgScJc2J2uq8CQtoXWZ3YyT99p3nVuCXifEhLkyUe4Sf4nfe2UkFT8AJr.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/2eVpZNvQYPMBVNT5357Qt7HVAUSv9gdwqxKStvdwQ498rcJLLCHVcYPaGfFqVBz44ndYvkA1H4CwjBuDSviAj7jp.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/3GufGVVRrnrH1Yuto57jDeTKXeki6ooE9w6h4qYRvNm5FcCpxwDHNvzHXdpAMbxRmukWJpSPHUKHEjnFTCC979ka.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/3LQK2JHVbVSSfyCYwTwzoYTY9NEN4gZXzqw3TvAvMJHsvPsopCHtsa5ALhj4tFn8xWbmJ5DsYMMcnPukTBkSjtQf.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/3MRWKDUcD5CGn5Xz4qWyGA8Y9udw4SsSr4gcxCjTUqCFt6Zc6uiwHF1wLZXKoqBcGEM2kruBS85ymYxmYk8FLGBk.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/3NBSCgAXpNqg7JBUzp6RsfZYzf2QbbHi6r2wcoBF4Lpuzozae7ExUJUGoqpVCXXs8cbibr6aWySH1bsg86Enuhez.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/3QVpcUq64D4DUV9empFr3G98pCEa1Cp2fAcFJKyiJGsQ2ir2S4yBLhHYXPNmLfCE8KVDgLApfBYTFM7pf9JVPbsb.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/3REXMDkvZsWvgc8czYpfn24avz18APMuzbV2VgQBeymArdJvfQcfcpKr46f3j1H2bAiymFneaNocPH7KzPUPbR1S.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/3ejAydePsZTUfeZaU9eiAM37gV5AYPG9hhyMtUobJLQtSMgroDeiE8njXu2JiwMyX5YJLp3vrfNPy89S7EDdUCAy.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/3zC4bw1osyebZ77KagXYP3b5rEBHvJCgcwCriCLc5gAUp9Ev6Bx5ZMbqnYpkKE2VgZgMFcZN5FYKQfcKL45MWpyu.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/5PgkFgTLSEZPZhxgWNToPzTZct95SycuaH9H3g82YwcKXudtiynEZmiaoQrhGv2gdZLrvsVZ5Wn88KGirbFYpLrt.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_create/661yA5s6uxUsggTcT4cZ6yyMfNmF4mCZzxLnCb1zBrSY3YhAiouYXBitiPvkngBEKxaeGcpXiek6qXDajiRr9wuY.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_current_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_funded_sell_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_settlement_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpfun_usdc_multihop_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpswap_liquidity_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/pumpswap_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/review10_compiled_bounds.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/review10_prefunded_ata.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/review10_wire_bounds.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/signed_alt_load_rejections_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/signed_clmm_boundaries_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/signed_cpmm_bank_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/signed_dex_replay_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/signed_identical_alt_bank_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/signed_multileg_bank_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/signed_nested_cpi_bank_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/signed_replay_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/signed_wire_boundaries_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/simulation_alt_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/simulation_ata_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/simulation_routes_live_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/stonkfun_routes_0_7_7.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/whirlpool_fees_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/whirlpool_hook_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/whirlpool_liquidity_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/fixtures/whirlpool_one_sided_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_amm_v4_v2.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_block_meta.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_clmm_fee_rewards_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_clmm_liquidity_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_clmm_one_sided_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_cpmm_liquidity_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_borrow_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_cpi_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_dual_claims_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_reward_admin_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_reward_renewal_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_reward_withdraw_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_upstream_hook_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_v1_live_simulations.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_v2_authority_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_v2_fees_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_v2_liquidity_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_v2_rewards_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_damm_v2_vesting_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_dbc_boundary_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_dbc_migration_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_dbc_upgrade.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_dbc_v1_migration_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_dex_retry_delay.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_dlmm_fees_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_dlmm_hook_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_dlmm_rewards_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_exact_metadata_json.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_filter_and_account_parity.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_golden.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_grpc_unary_methods.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_hot_path_wire_decoder.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_imports_and_inner.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_launchlab_invocation_anchor.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_launchlab_migration_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_log_instr_dedup.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_market_helpers.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_native_grpc_server.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_native_plan_lifecycle.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_orca_whirlpool_instruction_parity.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_order_buffer.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_ordered_late_regression.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_prefix_prefilter.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_protocol_current_fields.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pump_compact_simulation_routes.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pump_depth2.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pump_fees_instruction_parity.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pump_holder_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pump_offline_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pump_routes_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pump_shred_routes.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pump_synthetic_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pump_trade_account_context.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pump_trade_merge_identity.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pump_upgrade_events.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pump_upgrade_mainnet.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pumpfun_account_fill.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pumpfun_create_regression.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pumpfun_trade_tail.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pumpfun_v2_parity.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pumpswap_account_context.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pumpswap_instruction.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pumpswap_liquidity_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_pumpswap_upgrade.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_raydium_clmm_instruction_parity.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_raydium_current_logs.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_review10.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_review_batch2.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_shred_wire_sanitize.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_shredstream.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_signed_transaction_replay.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_simulation_route.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_snapshot_refresh_example.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_stonkfun_routes.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_whirlpool_fees_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_whirlpool_hook_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_whirlpool_liquidity_bank.py +0 -0
- {sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/tests/test_whirlpool_one_sided_bank.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sol-parser-sdk-python
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.16
|
|
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
|
|
@@ -21,6 +21,32 @@ Requires-Dist: solders==0.26.0; extra == 'simulation'
|
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
|
|
23
23
|
<div align="center">
|
|
24
|
+
|
|
25
|
+
## v0.5.16 — DEX-scoped RawInstruction and typed DEX identifiers
|
|
26
|
+
|
|
27
|
+
Raw instructions now respect DEX subscriptions using programs referenced by each instruction. `RawInstructionDexType` provides typed identifiers with unchanged JSON strings. Unknown router layouts do not establish pool addresses, trade direction, or method versions.
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## v0.5.16 — Pump execution replay
|
|
31
|
+
|
|
32
|
+
Current Anchor TradeEvent CPI decoding is supported alongside the historical encoding. RPC/gRPC instruction budgets and minimum outputs remain in instruction fields. Execution fields `sol_amount`, `quote_amount`, and `token_amount` come from execution events; without logs or event CPIs they remain zero (unavailable, not a proven zero fill).
|
|
33
|
+
|
|
34
|
+
Run `.venv/bin/python examples/pump_execution_replay.py` from this repository to replay real transactions fetched on 2026-10-19 offline. The example prints full/no-log/truncated-log results. Append a recent signature for online replay. Set `SOLANA_RPC_URL` for your RPC; transaction v1 is supported.
|
|
35
|
+
|
|
36
|
+
The current Delta sell signature is `4ARos3Yq1SMNE3izDpy9YdKrRgMmD7UCDxvnVrBRaGCJHiifPHSmQWc4DPfjUaEUcxS7puGmEN64K7EZdeXLJaj2` (slot 458542546). The dated fixture also includes Rapid create/buy, BuyV3, and PumpSwap buy with their full signatures and slots. Older five-combination multi-hop fixtures are retained as regression tests, not labeled as new mainnet captures.
|
|
37
|
+
|
|
38
|
+
## v0.5.16 — raw Shred instructions
|
|
39
|
+
|
|
40
|
+
Default Shred parsing emits `RawInstruction` for unsupported third-party programs, including Rapid/Delta, without inferring direction, amounts, or internal buy methods. Infrastructure programs (System, Token, ATA, ComputeBudget, etc.) are omitted by default. Supported official DEX parsers are unchanged; official Pump/PumpSwap multi-hop instructions retain `PumpRouteIntent`.
|
|
41
|
+
|
|
42
|
+
The payload contains `program_id`, `instruction_index`, `accounts`, `account_indices`, `instruction_data`, and transaction metadata. Account order and duplicates are preserved. Unresolved ALT addresses are null/None, with original indices retained; supply cached loaded addresses or a resolver. No hot-path RPC is performed. Data is copied verbatim without requiring a known layout.
|
|
43
|
+
|
|
44
|
+
Run `uv run python examples/raw_instruction_filter.py` to compare PumpFun-only, Raydium CPMM-only, and all-raw subscriptions against signed offline transactions; the output includes `dexes`.
|
|
45
|
+
|
|
46
|
+
Without a filter, unknown third-party instructions are returned. Broad trade/swap filters (for example `PumpFunTrade` or `RaydiumCpmmSwap`) also return raw instructions associated with that DEX; direction-specific filters do not infer a buy or sell. Explicit `RawInstruction` selects all outer instructions only when no protocol restriction is set; streamer protocol restrictions always apply. Excluding `RawInstruction` wins. `dex_type` uses the public `RawInstructionDexType` enum (typed string constants in Go); JSON values remain unchanged, such as `"pumpfun"` and `"raydium_cpmm"`. `dexes` contains `{ dex_type, program_id, pool }` for each recognized DEX program targeted or referenced by this instruction, not other instructions in the transaction. Multi-DEX wrappers retain every association. Unknown or unresolved ALT references cannot satisfy a DEX subscription. `pool` is currently null: an unknown wrapper layout cannot establish the pool account. A program reference is not proof of an executed CPI. Raw callbacks are not fills.
|
|
47
|
+
|
|
48
|
+
Wrapper adapter functions remain explicit compatibility helpers only; default Shred parsing does not call them. The released-version history below describes previous behavior.
|
|
49
|
+
|
|
24
50
|
<h1>⚡ Sol Parser SDK - Python</h1>
|
|
25
51
|
<h3><em>High-performance Solana DEX event parser for Python</em></h3>
|
|
26
52
|
</div>
|
|
@@ -60,11 +86,11 @@ Parser SDK language versions and related Rust SDKs:
|
|
|
60
86
|
|
|
61
87
|
| Language | Repository | Description | Version |
|
|
62
88
|
|----------|------------|-------------|---------|
|
|
63
|
-
| Rust | [sol-parser-sdk](https://github.com/0xfnzero/sol-parser-sdk) | Solana DEX transaction and account event parsing | `v0.7.
|
|
64
|
-
| Node.js | [sol-parser-sdk-nodejs](https://github.com/0xfnzero/sol-parser-sdk-nodejs) | TypeScript/JavaScript for Node.js | `v0.5.
|
|
65
|
-
| Python | [sol-parser-sdk-python](https://github.com/0xfnzero/sol-parser-sdk-python) | Async/await native support | `v0.5.
|
|
66
|
-
| Go | [sol-parser-sdk-golang](https://github.com/0xfnzero/sol-parser-sdk-golang) | Go transaction and account event parsing | `v0.5.
|
|
67
|
-
| **Rust** | [sol-shred-sdk](https://github.com/0xfnzero/sol-shred-sdk) | Raw Solana shred decoding and ShredStream DEX event parsing | `v4.0.
|
|
89
|
+
| Rust | [sol-parser-sdk](https://github.com/0xfnzero/sol-parser-sdk) | Solana DEX transaction and account event parsing | `v0.7.17` |
|
|
90
|
+
| Node.js | [sol-parser-sdk-nodejs](https://github.com/0xfnzero/sol-parser-sdk-nodejs) | TypeScript/JavaScript for Node.js | `v0.5.23` |
|
|
91
|
+
| Python | [sol-parser-sdk-python](https://github.com/0xfnzero/sol-parser-sdk-python) | Async/await native support | `v0.5.16` |
|
|
92
|
+
| Go | [sol-parser-sdk-golang](https://github.com/0xfnzero/sol-parser-sdk-golang) | Go transaction and account event parsing | `v0.5.16` |
|
|
93
|
+
| **Rust** | [sol-shred-sdk](https://github.com/0xfnzero/sol-shred-sdk) | Raw Solana shred decoding and ShredStream DEX event parsing | `v4.0.8` |
|
|
68
94
|
| **Rust** | [sol-trade-sdk](https://github.com/0xfnzero/sol-trade-sdk) | Solana DEX trade construction and transaction execution | `v6.0.2` |
|
|
69
95
|
|
|
70
96
|
---
|
|
@@ -156,7 +182,7 @@ This is the Python implementation of the FnZero Solana DEX parser SDK for asynci
|
|
|
156
182
|
**From PyPI**
|
|
157
183
|
|
|
158
184
|
```bash
|
|
159
|
-
pip install sol-parser-sdk-python==0.5.
|
|
185
|
+
pip install sol-parser-sdk-python==0.5.16
|
|
160
186
|
```
|
|
161
187
|
|
|
162
188
|
**From source**
|
|
@@ -272,18 +298,18 @@ From the **package root** after `pip install -e .`. Run with `python examples/<f
|
|
|
272
298
|
| Description | Run command | Source |
|
|
273
299
|
|-------------|-------------|--------|
|
|
274
300
|
| **PumpFun** | | |
|
|
275
|
-
| PumpFun trade filtering | `python examples/pumpfun_trade_filter.py` | [pumpfun_trade_filter.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_trade_filter.py) | `v0.5.
|
|
276
|
-
| PumpFun events + metrics | `python examples/pumpfun_with_metrics.py` | [pumpfun_with_metrics.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_with_metrics.py) | `v0.5.
|
|
277
|
-
| Quick PumpFun connection test | `python examples/pumpfun_quick_test.py` | [pumpfun_quick_test.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_quick_test.py) | `v0.5.
|
|
301
|
+
| PumpFun trade filtering | `python examples/pumpfun_trade_filter.py` | [pumpfun_trade_filter.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_trade_filter.py) | `v0.5.16` |
|
|
302
|
+
| PumpFun events + metrics | `python examples/pumpfun_with_metrics.py` | [pumpfun_with_metrics.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_with_metrics.py) | `v0.5.16` |
|
|
303
|
+
| Quick PumpFun connection test | `python examples/pumpfun_quick_test.py` | [pumpfun_quick_test.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_quick_test.py) | `v0.5.16` |
|
|
278
304
|
| **PumpSwap** | | |
|
|
279
|
-
| PumpSwap ultra-low latency | `python examples/pumpswap_low_latency.py` | [pumpswap_low_latency.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpswap_low_latency.py) | `v0.5.
|
|
280
|
-
| PumpSwap events + metrics | `python examples/pumpswap_with_metrics.py` | [pumpswap_with_metrics.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpswap_with_metrics.py) | `v0.5.
|
|
305
|
+
| PumpSwap ultra-low latency | `python examples/pumpswap_low_latency.py` | [pumpswap_low_latency.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpswap_low_latency.py) | `v0.5.16` |
|
|
306
|
+
| PumpSwap events + metrics | `python examples/pumpswap_with_metrics.py` | [pumpswap_with_metrics.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpswap_with_metrics.py) | `v0.5.16` |
|
|
281
307
|
| **Meteora DAMM** | | |
|
|
282
|
-
| Meteora DAMM V2 events | `python examples/meteora_damm_grpc.py` | [meteora_damm_grpc.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/meteora_damm_grpc.py) | `v0.5.
|
|
308
|
+
| Meteora DAMM V2 events | `python examples/meteora_damm_grpc.py` | [meteora_damm_grpc.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/meteora_damm_grpc.py) | `v0.5.16` |
|
|
283
309
|
| **Multi-protocol** | | |
|
|
284
|
-
| Subscribe to every program in Rust `Protocol` / `program_ids` | `python examples/multi_protocol_grpc.py` | [multi_protocol_grpc.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/multi_protocol_grpc.py) | `v0.5.
|
|
310
|
+
| Subscribe to every program in Rust `Protocol` / `program_ids` | `python examples/multi_protocol_grpc.py` | [multi_protocol_grpc.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/multi_protocol_grpc.py) | `v0.5.16` |
|
|
285
311
|
| **Utility** | | |
|
|
286
|
-
| Parse tx by signature (HTTP RPC; not gRPC). `TX_SIGNATURE` / `RPC_URL` or `SOLANA_RPC_URL` in `.env` or `--sig` / `--rpc`. | `python examples/parse_tx_by_signature.py` | [parse_tx_by_signature.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/parse_tx_by_signature.py) | `v0.5.
|
|
312
|
+
| Parse tx by signature (HTTP RPC; not gRPC). `TX_SIGNATURE` / `RPC_URL` or `SOLANA_RPC_URL` in `.env` or `--sig` / `--rpc`. | `python examples/parse_tx_by_signature.py` | [parse_tx_by_signature.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/parse_tx_by_signature.py) | `v0.5.16` |
|
|
287
313
|
|
|
288
314
|
**Env:** gRPC examples need **`GRPC_URL`** or **`GRPC_ENDPOINT`**, plus **`GRPC_AUTH_TOKEN`** or **`GRPC_TOKEN`** (or legacy `GEYSER_*`). See **`.env.example`**.
|
|
289
315
|
|
|
@@ -1,4 +1,30 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
+
|
|
3
|
+
## v0.5.16 — DEX-scoped RawInstruction and typed DEX identifiers
|
|
4
|
+
|
|
5
|
+
Raw instructions now respect DEX subscriptions using programs referenced by each instruction. `RawInstructionDexType` provides typed identifiers with unchanged JSON strings. Unknown router layouts do not establish pool addresses, trade direction, or method versions.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## v0.5.16 — Pump execution replay
|
|
9
|
+
|
|
10
|
+
Current Anchor TradeEvent CPI decoding is supported alongside the historical encoding. RPC/gRPC instruction budgets and minimum outputs remain in instruction fields. Execution fields `sol_amount`, `quote_amount`, and `token_amount` come from execution events; without logs or event CPIs they remain zero (unavailable, not a proven zero fill).
|
|
11
|
+
|
|
12
|
+
Run `.venv/bin/python examples/pump_execution_replay.py` from this repository to replay real transactions fetched on 2026-10-19 offline. The example prints full/no-log/truncated-log results. Append a recent signature for online replay. Set `SOLANA_RPC_URL` for your RPC; transaction v1 is supported.
|
|
13
|
+
|
|
14
|
+
The current Delta sell signature is `4ARos3Yq1SMNE3izDpy9YdKrRgMmD7UCDxvnVrBRaGCJHiifPHSmQWc4DPfjUaEUcxS7puGmEN64K7EZdeXLJaj2` (slot 458542546). The dated fixture also includes Rapid create/buy, BuyV3, and PumpSwap buy with their full signatures and slots. Older five-combination multi-hop fixtures are retained as regression tests, not labeled as new mainnet captures.
|
|
15
|
+
|
|
16
|
+
## v0.5.16 — raw Shred instructions
|
|
17
|
+
|
|
18
|
+
Default Shred parsing emits `RawInstruction` for unsupported third-party programs, including Rapid/Delta, without inferring direction, amounts, or internal buy methods. Infrastructure programs (System, Token, ATA, ComputeBudget, etc.) are omitted by default. Supported official DEX parsers are unchanged; official Pump/PumpSwap multi-hop instructions retain `PumpRouteIntent`.
|
|
19
|
+
|
|
20
|
+
The payload contains `program_id`, `instruction_index`, `accounts`, `account_indices`, `instruction_data`, and transaction metadata. Account order and duplicates are preserved. Unresolved ALT addresses are null/None, with original indices retained; supply cached loaded addresses or a resolver. No hot-path RPC is performed. Data is copied verbatim without requiring a known layout.
|
|
21
|
+
|
|
22
|
+
Run `uv run python examples/raw_instruction_filter.py` to compare PumpFun-only, Raydium CPMM-only, and all-raw subscriptions against signed offline transactions; the output includes `dexes`.
|
|
23
|
+
|
|
24
|
+
Without a filter, unknown third-party instructions are returned. Broad trade/swap filters (for example `PumpFunTrade` or `RaydiumCpmmSwap`) also return raw instructions associated with that DEX; direction-specific filters do not infer a buy or sell. Explicit `RawInstruction` selects all outer instructions only when no protocol restriction is set; streamer protocol restrictions always apply. Excluding `RawInstruction` wins. `dex_type` uses the public `RawInstructionDexType` enum (typed string constants in Go); JSON values remain unchanged, such as `"pumpfun"` and `"raydium_cpmm"`. `dexes` contains `{ dex_type, program_id, pool }` for each recognized DEX program targeted or referenced by this instruction, not other instructions in the transaction. Multi-DEX wrappers retain every association. Unknown or unresolved ALT references cannot satisfy a DEX subscription. `pool` is currently null: an unknown wrapper layout cannot establish the pool account. A program reference is not proof of an executed CPI. Raw callbacks are not fills.
|
|
25
|
+
|
|
26
|
+
Wrapper adapter functions remain explicit compatibility helpers only; default Shred parsing does not call them. The released-version history below describes previous behavior.
|
|
27
|
+
|
|
2
28
|
<h1>⚡ Sol Parser SDK - Python</h1>
|
|
3
29
|
<h3><em>High-performance Solana DEX event parser for Python</em></h3>
|
|
4
30
|
</div>
|
|
@@ -38,11 +64,11 @@ Parser SDK language versions and related Rust SDKs:
|
|
|
38
64
|
|
|
39
65
|
| Language | Repository | Description | Version |
|
|
40
66
|
|----------|------------|-------------|---------|
|
|
41
|
-
| Rust | [sol-parser-sdk](https://github.com/0xfnzero/sol-parser-sdk) | Solana DEX transaction and account event parsing | `v0.7.
|
|
42
|
-
| Node.js | [sol-parser-sdk-nodejs](https://github.com/0xfnzero/sol-parser-sdk-nodejs) | TypeScript/JavaScript for Node.js | `v0.5.
|
|
43
|
-
| Python | [sol-parser-sdk-python](https://github.com/0xfnzero/sol-parser-sdk-python) | Async/await native support | `v0.5.
|
|
44
|
-
| Go | [sol-parser-sdk-golang](https://github.com/0xfnzero/sol-parser-sdk-golang) | Go transaction and account event parsing | `v0.5.
|
|
45
|
-
| **Rust** | [sol-shred-sdk](https://github.com/0xfnzero/sol-shred-sdk) | Raw Solana shred decoding and ShredStream DEX event parsing | `v4.0.
|
|
67
|
+
| Rust | [sol-parser-sdk](https://github.com/0xfnzero/sol-parser-sdk) | Solana DEX transaction and account event parsing | `v0.7.17` |
|
|
68
|
+
| Node.js | [sol-parser-sdk-nodejs](https://github.com/0xfnzero/sol-parser-sdk-nodejs) | TypeScript/JavaScript for Node.js | `v0.5.23` |
|
|
69
|
+
| Python | [sol-parser-sdk-python](https://github.com/0xfnzero/sol-parser-sdk-python) | Async/await native support | `v0.5.16` |
|
|
70
|
+
| Go | [sol-parser-sdk-golang](https://github.com/0xfnzero/sol-parser-sdk-golang) | Go transaction and account event parsing | `v0.5.16` |
|
|
71
|
+
| **Rust** | [sol-shred-sdk](https://github.com/0xfnzero/sol-shred-sdk) | Raw Solana shred decoding and ShredStream DEX event parsing | `v4.0.8` |
|
|
46
72
|
| **Rust** | [sol-trade-sdk](https://github.com/0xfnzero/sol-trade-sdk) | Solana DEX trade construction and transaction execution | `v6.0.2` |
|
|
47
73
|
|
|
48
74
|
---
|
|
@@ -134,7 +160,7 @@ This is the Python implementation of the FnZero Solana DEX parser SDK for asynci
|
|
|
134
160
|
**From PyPI**
|
|
135
161
|
|
|
136
162
|
```bash
|
|
137
|
-
pip install sol-parser-sdk-python==0.5.
|
|
163
|
+
pip install sol-parser-sdk-python==0.5.16
|
|
138
164
|
```
|
|
139
165
|
|
|
140
166
|
**From source**
|
|
@@ -250,18 +276,18 @@ From the **package root** after `pip install -e .`. Run with `python examples/<f
|
|
|
250
276
|
| Description | Run command | Source |
|
|
251
277
|
|-------------|-------------|--------|
|
|
252
278
|
| **PumpFun** | | |
|
|
253
|
-
| PumpFun trade filtering | `python examples/pumpfun_trade_filter.py` | [pumpfun_trade_filter.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_trade_filter.py) | `v0.5.
|
|
254
|
-
| PumpFun events + metrics | `python examples/pumpfun_with_metrics.py` | [pumpfun_with_metrics.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_with_metrics.py) | `v0.5.
|
|
255
|
-
| Quick PumpFun connection test | `python examples/pumpfun_quick_test.py` | [pumpfun_quick_test.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_quick_test.py) | `v0.5.
|
|
279
|
+
| PumpFun trade filtering | `python examples/pumpfun_trade_filter.py` | [pumpfun_trade_filter.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_trade_filter.py) | `v0.5.16` |
|
|
280
|
+
| PumpFun events + metrics | `python examples/pumpfun_with_metrics.py` | [pumpfun_with_metrics.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_with_metrics.py) | `v0.5.16` |
|
|
281
|
+
| Quick PumpFun connection test | `python examples/pumpfun_quick_test.py` | [pumpfun_quick_test.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_quick_test.py) | `v0.5.16` |
|
|
256
282
|
| **PumpSwap** | | |
|
|
257
|
-
| PumpSwap ultra-low latency | `python examples/pumpswap_low_latency.py` | [pumpswap_low_latency.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpswap_low_latency.py) | `v0.5.
|
|
258
|
-
| PumpSwap events + metrics | `python examples/pumpswap_with_metrics.py` | [pumpswap_with_metrics.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpswap_with_metrics.py) | `v0.5.
|
|
283
|
+
| PumpSwap ultra-low latency | `python examples/pumpswap_low_latency.py` | [pumpswap_low_latency.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpswap_low_latency.py) | `v0.5.16` |
|
|
284
|
+
| PumpSwap events + metrics | `python examples/pumpswap_with_metrics.py` | [pumpswap_with_metrics.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpswap_with_metrics.py) | `v0.5.16` |
|
|
259
285
|
| **Meteora DAMM** | | |
|
|
260
|
-
| Meteora DAMM V2 events | `python examples/meteora_damm_grpc.py` | [meteora_damm_grpc.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/meteora_damm_grpc.py) | `v0.5.
|
|
286
|
+
| Meteora DAMM V2 events | `python examples/meteora_damm_grpc.py` | [meteora_damm_grpc.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/meteora_damm_grpc.py) | `v0.5.16` |
|
|
261
287
|
| **Multi-protocol** | | |
|
|
262
|
-
| Subscribe to every program in Rust `Protocol` / `program_ids` | `python examples/multi_protocol_grpc.py` | [multi_protocol_grpc.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/multi_protocol_grpc.py) | `v0.5.
|
|
288
|
+
| Subscribe to every program in Rust `Protocol` / `program_ids` | `python examples/multi_protocol_grpc.py` | [multi_protocol_grpc.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/multi_protocol_grpc.py) | `v0.5.16` |
|
|
263
289
|
| **Utility** | | |
|
|
264
|
-
| Parse tx by signature (HTTP RPC; not gRPC). `TX_SIGNATURE` / `RPC_URL` or `SOLANA_RPC_URL` in `.env` or `--sig` / `--rpc`. | `python examples/parse_tx_by_signature.py` | [parse_tx_by_signature.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/parse_tx_by_signature.py) | `v0.5.
|
|
290
|
+
| Parse tx by signature (HTTP RPC; not gRPC). `TX_SIGNATURE` / `RPC_URL` or `SOLANA_RPC_URL` in `.env` or `--sig` / `--rpc`. | `python examples/parse_tx_by_signature.py` | [parse_tx_by_signature.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/parse_tx_by_signature.py) | `v0.5.16` |
|
|
265
291
|
|
|
266
292
|
**Env:** gRPC examples need **`GRPC_URL`** or **`GRPC_ENDPOINT`**, plus **`GRPC_AUTH_TOKEN`** or **`GRPC_TOKEN`** (or legacy `GEYSER_*`). See **`.env.example`**.
|
|
267
293
|
|
|
@@ -1,4 +1,30 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
+
|
|
3
|
+
## v0.5.16 — RawInstruction 协议过滤与 DEX 枚举
|
|
4
|
+
|
|
5
|
+
修复原始指令绕过 DEX 订阅范围的问题。按单条指令引用的官方程序识别 DEX,使用 `RawInstructionDexType` 枚举;JSON 字符串保持不变。未知 router 不推断池子地址、买卖方向或方法版本。
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## v0.5.16 — Pump 执行事件与最新回放示例
|
|
9
|
+
|
|
10
|
+
修复官方 Anchor CPI TradeEvent 前缀识别,保留历史编码兼容。RPC/gRPC 的实际 `sol_amount`、`quote_amount`、`token_amount` 只从执行事件合并;预算和最小输出保留在指令参数字段。如果日志及事件 CPI 均缺失,实际金额字段为 0(表示无执行数据,不代表已确认零成交)。非 SOL 报价金额不能当作 SOL。
|
|
11
|
+
|
|
12
|
+
在本仓库运行 `.venv/bin/python examples/pump_execution_replay.py`,离线回放 2026-10-19 重新抓取的真实交易。示例输出完整日志、无日志、截断日志三种结果;命令末尾追加最新签名可在线验证。通过 `SOLANA_RPC_URL` 选择 RPC,支持 transaction v1。
|
|
13
|
+
|
|
14
|
+
新 Delta 卖出样本:`4ARos3Yq1SMNE3izDpy9YdKrRgMmD7UCDxvnVrBRaGCJHiifPHSmQWc4DPfjUaEUcxS7puGmEN64K7EZdeXLJaj2`,slot 458542546。日期样本文件还包含 Rapid 创建后买入、BuyV3 和 PumpSwap 买入的完整签名及 slot。旧的五种双跳组合仅作为回归样本,未冒充本次新抓取交易。
|
|
15
|
+
|
|
16
|
+
## v0.5.16 — Shred 原始指令透传
|
|
17
|
+
|
|
18
|
+
默认 Shred 入口将未适配的第三方程序(包括 Rapid/Delta)作为 `RawInstruction` 返回,不再推断买卖方向、金额或内部 buy 版本。System、Token、ATA、ComputeBudget 等基础程序默认不透传;已支持的官方 DEX 指令继续正常解析,官方 Pump/PumpSwap 多跳仍返回 `PumpRouteIntent`。
|
|
19
|
+
|
|
20
|
+
事件包含 `program_id`、`instruction_index`、`accounts`、`account_indices`、`instruction_data` 和交易 metadata。账户保留原顺序与重复项;未解析 ALT 地址为 null/None,原始索引仍保留。使用缓存 loaded-addresses/resolver 补齐,热路径不请求 RPC。data 是完整原始字节,不要求已知布局。
|
|
21
|
+
|
|
22
|
+
运行 `uv run python examples/raw_instruction_filter.py` 对比同一组已签名交易的 PumpFun、Raydium CPMM 与全量原始指令订阅;输出包含 `dexes`。
|
|
23
|
+
|
|
24
|
+
无过滤器时返回未知第三方指令。宽泛交易/Swap 订阅(如 `PumpFunTrade`、`RaydiumCpmmSwap`)也返回关联该 DEX 的原始指令;买/卖方向订阅不推测方向。显式 `RawInstruction` 仅在未限制协议时返回全部外层指令,streamer 的协议限制始终生效;显式排除 `RawInstruction` 优先。`dex_type` 使用公开枚举 `RawInstructionDexType`(Go 为命名字符串类型与常量);JSON 仍为 `"pumpfun"`、`"raydium_cpmm"` 等原有字符串。`dexes` 数组包含各关联 DEX 的 `{ dex_type, program_id, pool }`,只识别本条指令直接调用或账户中引用的 DEX 程序,不借用同笔其他指令的账户;多 DEX 包装保留所有关联。未知或未解析 ALT 中的程序不能匹配 DEX 订阅。`pool` 当前为 null:未知包装布局无法确定池子账户。program 引用不证明执行了 CPI,原始回调不是成交。
|
|
25
|
+
|
|
26
|
+
已有 wrapper 适配函数仅作为显式调用的兼容接口保留,不参与默认 Shred 解码。以下已发布版本的历史说明描述旧行为。
|
|
27
|
+
|
|
2
28
|
<h1>⚡ Sol Parser SDK - Python</h1>
|
|
3
29
|
<h3><em>高性能 Solana DEX 事件解析(Python / asyncio)</em></h3>
|
|
4
30
|
</div>
|
|
@@ -38,11 +64,11 @@
|
|
|
38
64
|
|
|
39
65
|
| 语言 | 仓库 | 描述 | 版本 |
|
|
40
66
|
|------|------|------|
|
|
41
|
-
| Rust | [sol-parser-sdk](https://github.com/0xfnzero/sol-parser-sdk) | Solana DEX 交易与账户事件解析 | `v0.7.
|
|
42
|
-
| Node.js | [sol-parser-sdk-nodejs](https://github.com/0xfnzero/sol-parser-sdk-nodejs) | TypeScript/JavaScript,Node.js 支持 | `v0.5.
|
|
43
|
-
| Python | [sol-parser-sdk-python](https://github.com/0xfnzero/sol-parser-sdk-python) | 原生 async/await 支持 | `v0.5.
|
|
44
|
-
| Go | [sol-parser-sdk-golang](https://github.com/0xfnzero/sol-parser-sdk-golang) | Go 交易与账户事件解析 | `v0.5.
|
|
45
|
-
| **Rust** | [sol-shred-sdk](https://github.com/0xfnzero/sol-shred-sdk) | Solana 原始 shred 解码与 ShredStream DEX 事件解析 | `v4.0.
|
|
67
|
+
| Rust | [sol-parser-sdk](https://github.com/0xfnzero/sol-parser-sdk) | Solana DEX 交易与账户事件解析 | `v0.7.17` |
|
|
68
|
+
| Node.js | [sol-parser-sdk-nodejs](https://github.com/0xfnzero/sol-parser-sdk-nodejs) | TypeScript/JavaScript,Node.js 支持 | `v0.5.23` |
|
|
69
|
+
| Python | [sol-parser-sdk-python](https://github.com/0xfnzero/sol-parser-sdk-python) | 原生 async/await 支持 | `v0.5.16` |
|
|
70
|
+
| Go | [sol-parser-sdk-golang](https://github.com/0xfnzero/sol-parser-sdk-golang) | Go 交易与账户事件解析 | `v0.5.16` |
|
|
71
|
+
| **Rust** | [sol-shred-sdk](https://github.com/0xfnzero/sol-shred-sdk) | Solana 原始 shred 解码与 ShredStream DEX 事件解析 | `v4.0.8` |
|
|
46
72
|
| **Rust** | [sol-trade-sdk](https://github.com/0xfnzero/sol-trade-sdk) | Solana DEX 交易构建与交易执行 | `v6.0.2` |
|
|
47
73
|
|
|
48
74
|
---
|
|
@@ -134,7 +160,7 @@ Validation includes local CPU benchmarks and offline signed-bank scenarios. Meas
|
|
|
134
160
|
**PyPI**
|
|
135
161
|
|
|
136
162
|
```bash
|
|
137
|
-
pip install sol-parser-sdk-python==0.5.
|
|
163
|
+
pip install sol-parser-sdk-python==0.5.16
|
|
138
164
|
```
|
|
139
165
|
|
|
140
166
|
**源码**
|
|
@@ -250,18 +276,18 @@ Python ShredStream 热路径默认严格解析静态账户;V0 ALT 指令需传
|
|
|
250
276
|
| 描述 | 运行命令 | 源码 |
|
|
251
277
|
|------|----------|------|
|
|
252
278
|
| **PumpFun** | | |
|
|
253
|
-
| PumpFun 交易过滤 | `python examples/pumpfun_trade_filter.py` | [pumpfun_trade_filter.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_trade_filter.py) | `v0.5.
|
|
254
|
-
| PumpFun 事件 + 性能指标 | `python examples/pumpfun_with_metrics.py` | [pumpfun_with_metrics.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_with_metrics.py) | `v0.5.
|
|
255
|
-
| PumpFun 快速连接测试 | `python examples/pumpfun_quick_test.py` | [pumpfun_quick_test.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_quick_test.py) | `v0.5.
|
|
279
|
+
| PumpFun 交易过滤 | `python examples/pumpfun_trade_filter.py` | [pumpfun_trade_filter.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_trade_filter.py) | `v0.5.16` |
|
|
280
|
+
| PumpFun 事件 + 性能指标 | `python examples/pumpfun_with_metrics.py` | [pumpfun_with_metrics.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_with_metrics.py) | `v0.5.16` |
|
|
281
|
+
| PumpFun 快速连接测试 | `python examples/pumpfun_quick_test.py` | [pumpfun_quick_test.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpfun_quick_test.py) | `v0.5.16` |
|
|
256
282
|
| **PumpSwap** | | |
|
|
257
|
-
| PumpSwap 超低延迟 | `python examples/pumpswap_low_latency.py` | [pumpswap_low_latency.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpswap_low_latency.py) | `v0.5.
|
|
258
|
-
| PumpSwap 事件 + 性能指标 | `python examples/pumpswap_with_metrics.py` | [pumpswap_with_metrics.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpswap_with_metrics.py) | `v0.5.
|
|
283
|
+
| PumpSwap 超低延迟 | `python examples/pumpswap_low_latency.py` | [pumpswap_low_latency.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpswap_low_latency.py) | `v0.5.16` |
|
|
284
|
+
| PumpSwap 事件 + 性能指标 | `python examples/pumpswap_with_metrics.py` | [pumpswap_with_metrics.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/pumpswap_with_metrics.py) | `v0.5.16` |
|
|
259
285
|
| **Meteora DAMM** | | |
|
|
260
|
-
| Meteora DAMM V2 事件 | `python examples/meteora_damm_grpc.py` | [meteora_damm_grpc.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/meteora_damm_grpc.py) | `v0.5.
|
|
286
|
+
| Meteora DAMM V2 事件 | `python examples/meteora_damm_grpc.py` | [meteora_damm_grpc.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/meteora_damm_grpc.py) | `v0.5.16` |
|
|
261
287
|
| **多协议** | | |
|
|
262
|
-
| 订阅 Rust `Protocol` / `program_ids` 中的全部程序 | `python examples/multi_protocol_grpc.py` | [multi_protocol_grpc.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/multi_protocol_grpc.py) | `v0.5.
|
|
288
|
+
| 订阅 Rust `Protocol` / `program_ids` 中的全部程序 | `python examples/multi_protocol_grpc.py` | [multi_protocol_grpc.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/multi_protocol_grpc.py) | `v0.5.16` |
|
|
263
289
|
| **工具** | | |
|
|
264
|
-
| 按签名解析交易(HTTP RPC,非 gRPC)。`.env` 或环境中 `TX_SIGNATURE` / `RPC_URL` 或 `SOLANA_RPC_URL`,或 `--sig` / `--rpc`。 | `python examples/parse_tx_by_signature.py` | [parse_tx_by_signature.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/parse_tx_by_signature.py) | `v0.5.
|
|
290
|
+
| 按签名解析交易(HTTP RPC,非 gRPC)。`.env` 或环境中 `TX_SIGNATURE` / `RPC_URL` 或 `SOLANA_RPC_URL`,或 `--sig` / `--rpc`。 | `python examples/parse_tx_by_signature.py` | [parse_tx_by_signature.py](https://github.com/0xfnzero/sol-parser-sdk-python/blob/main/examples/parse_tx_by_signature.py) | `v0.5.16` |
|
|
265
291
|
|
|
266
292
|
**环境变量:** gRPC 示例需要 **`GRPC_URL`** 或 **`GRPC_ENDPOINT`**,以及 **`GRPC_AUTH_TOKEN`** 或 **`GRPC_TOKEN`**(或旧名 `GEYSER_*`)。详见 **`.env.example`**。
|
|
267
293
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# v0.5.15 — Raw Shred instructions and Pump execution fixes
|
|
2
|
+
|
|
3
|
+
Released 2026-10-19.
|
|
4
|
+
|
|
5
|
+
Unknown third-party Shred instructions emit RawInstruction rather than inferred Pump trades. Payloads preserve the program ID, instruction index, ordered accounts including duplicates/unresolved ALT entries, account indices, original data, and metadata. Default parsing omits infrastructure programs; explicit RawInstruction subscriptions return all outer instructions.
|
|
6
|
+
|
|
7
|
+
Pump CPI TradeEvent decoding accepts both current Anchor and historical encodings. RPC/Yellowstone parsing separates budgets/minimum outputs from actual execution amounts. Event CPIs recover execution data when logs are missing or truncated; without execution evidence, Pump execution amount fields remain zero (unavailable, not a confirmed zero fill).
|
|
8
|
+
|
|
9
|
+
Examples include real transactions captured on 2026-10-19. Historical multi-hop fixtures remain regression cases, not new mainnet captures.
|
|
10
|
+
|
|
11
|
+
## Compatibility
|
|
12
|
+
|
|
13
|
+
- Default third-party Shred callbacks change to RawInstruction; explicit wrapper adapters remain available.
|
|
14
|
+
- Trade-only filters do not include raw instructions.
|
|
15
|
+
- ShredStream gRPC carries pre-execution data, not Yellowstone execution metadata.
|
|
16
|
+
- Existing event/method names are retained; third-party internal buy/sell methods are not guessed.
|
|
17
|
+
|
|
18
|
+
## Validation
|
|
19
|
+
|
|
20
|
+
Raw payload/order and current signed transaction regressions passed. Execution regressions cover full/missing/truncated logs, five two-hop combinations, per-leg identities and amounts, and failed transaction suppression.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# v0.5.16 — DEX-scoped raw instructions and typed DEX identifiers
|
|
2
|
+
|
|
3
|
+
Released 2026-10-19.
|
|
4
|
+
|
|
5
|
+
RawInstruction callbacks now match the subscribed DEX using only the outer instruction's program and referenced accounts. Unrelated instructions in the same transaction no longer inherit a DEX association. Streamer protocol restrictions apply even when RawInstruction is explicitly selected; legacy sol-shred-sdk PumpFun callbacks only forward PumpFun-associated wrappers.
|
|
6
|
+
|
|
7
|
+
The dexes array preserves all detected DEX associations for multi-DEX wrappers. Each entry contains dex_type, program_id and a nullable pool. RawInstructionDexType is a public enum in Rust, TypeScript and Python, and a named string type with constants in Go. JSON identifiers remain pumpfun, raydium_cpmm, etc. Unknown router layouts leave pool null and do not imply CPI execution, trade direction, amounts or buy-method versions. Unresolved ALT references cannot match a DEX subscription.
|
|
8
|
+
|
|
9
|
+
## Compatibility
|
|
10
|
+
|
|
11
|
+
- Broad trade/swap filters now include associated raw instructions. Excluding RawInstruction takes precedence; direction/method-specific subscriptions do not infer unknown router behavior.
|
|
12
|
+
- Without protocol restrictions, explicit RawInstruction still selects all outer instructions.
|
|
13
|
+
- Rust callers constructing RawInstructionEvent must populate dexes; RawInstructionDex.dex_type is now an enum. Historical JSON without dexes remains readable with an empty list.
|
|
14
|
+
- No third-party router payload decoding or guessed pool-account positions were added.
|
|
15
|
+
|
|
16
|
+
## Validation
|
|
17
|
+
|
|
18
|
+
Regression coverage includes instruction-local DEX scope, multi-DEX references, duplicate accounts, unresolved ALT addresses, raw exclusions, streamer protocol gates, enum exports and JSON round trips. Signed replay examples compare PumpFun, Raydium CPMM and all-raw subscriptions across language implementations.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"signature": "3nMXPjA7xRFmCeq3jypeWaXe9bmP5Fkwkvy6u74bBZHe316qMXNaE5aDQwDB1HRVLSkmk3BjgRCKBNcPEMeXrGWj",
|
|
4
|
+
"wire": "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",
|
|
5
|
+
"slot": 458521381,
|
|
6
|
+
"loaded_writable": [],
|
|
7
|
+
"loaded_readonly": []
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"signature": "2r4uXUJtSsphTBuJHJm2T5kKe9c215MCVL4bZ1mUZEZ6cT5698s3xFUfHb4TfU4ZfJ6cuFppQfYZUpMP5QL9pZ1Q",
|
|
11
|
+
"wire": "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",
|
|
12
|
+
"slot": 458122633,
|
|
13
|
+
"loaded_writable": [],
|
|
14
|
+
"loaded_readonly": []
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"signature": "4UwVUyHp9PK17ZpT82onx2x8bH5xZNhaHi7qcSsbrMme4b7pLbgL72mDXcp6ZHs4MqdsS3UJPY8oq2sxo88QPKoF",
|
|
18
|
+
"wire": "Aa4lHCFqsUD/rw2lblPFMwa42hP8IkdumZ8PWha/ygMXxFGcvwMUPll+DY42f/lVJYHyQq1SUOCT9W1xwlS9uAKAAQAKFSrgL9or0NMqBS4vxX0Syj1pUFj7GgB4qMR4k8q8TbhAC3p6445EUi2dvNXHL6LZZAcauDmHJqGAjgjnfsEuWiMUXq9Hqt2VErFvwoM8mrWYpqmGZG6eWe0nnh3WIBeOm0p0D+BtV3zFKtXAlmBI0tEYyAn/XpLuWnj8CcijEgYVYEc3micLA6oRnAnRW/bps7Sz91Wx/RiUcejia3GLzgCNZto/avUr1pvCv1vUnuo5T1X+HbXQTd7nNAwrkBpDOboGpQrZxCzeHy9Tj/lQSgfjTQLEIHk03qtRmbH4U0b3v5qSIR+5VQF2icUnkwY8GKuMsPx11a5UlanW1BfM2Yzj1TSQjmh5lZ36hXoPFLSGJLpsa9vk43vzQ1oGsoxqpvgLkbZ0VFHWIXXoGvxfVd+FPNNW7o3U6/dXygK3rG1S/S43jnXBAtSJYfkqYkBeZ8AnwCc4Hh1I7sZyrzAxhxcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkMFN78gl7GdpQlCBi7ZUBl9CmNMVbVcbTU+AkMGOmoY0Ekbsx9eP6B5BdzpGllQZk3kjoHZEeX328+tRRCYBDLWGVlR91uZ6OSYUe0TNPanNPkjYOxp0k8yhltzKMJMl+JC6ZE/h9VqhnxHNLS7BTTIztuCkvq7vcraYWOIeFw1oyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZz44mPS1yVURBpmkdTTbZV4KQ88dlstnuaLIdxnzHJM/lSnCVKIOfYcC5uGB5iRwTkhbkenG2L7c77HIWlFh0XlqIDNoZgrIne5dIWVZ6dYaCnaCyfL8wSidh9e7tX8ZoCgwABQIgoQcADAAJA0ANAwAAAAAAEgcABQATCxoZAQESBwAJABgLDRkBAQsCAAkMAgAAAAAvaFkAAAAADQEJAREOGgAJBREPChYNGgsUDhcbHB0QGAgDBhMQBAcCGCtkSRPp9m+UAC9oWQAAAAABAAAAAAAAAA0DCQAAAQkLAgAVDAIAAACcEdgBAAAAAAsCAAEMAgAAAKAlJgAAAAAAAQoH91x2BwgszoIZyZt8wiqhKEPv07mcVbllAcKrbibGAi0iBwBAEQsBEwI=",
|
|
19
|
+
"slot": 458109119,
|
|
20
|
+
"loaded_writable": [
|
|
21
|
+
"nozz1yoi1nyjy9Yr4HphDWe9NoJzx1acG25RBYpKhhx",
|
|
22
|
+
"CA7v8gHfbquYXyDnDx6QxWW8hmL1H7X6Y2RYDrGLnuck"
|
|
23
|
+
],
|
|
24
|
+
"loaded_readonly": [
|
|
25
|
+
"6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
|
|
26
|
+
"So11111111111111111111111111111111111111112",
|
|
27
|
+
"SysvarRent111111111111111111111111111111111",
|
|
28
|
+
"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
|
|
29
|
+
"4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf",
|
|
30
|
+
"8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt",
|
|
31
|
+
"Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"signature": "5Nx37a9gnsxjMCAtFKgCcEFG6GfT1WE9FmTaXnWtxMk8cphWAdzruhsusTurgQbYFmLCPQUGMPGt4WsZ9RcRz2WB",
|
|
36
|
+
"wire": "Adr+8v2+c+EUA8icFkfQb3SjiMRiaPnAzpy/h0AZ0NQg0Uh32SG8Y8oMe8PukFtBq0Ez9VB5WWH71bBNWfmbTwiAAQAKFbO9vrbmxAW87GB8CIOSxix6yHmZUh0XoSxSsOZLfB5nABZhzx0lHHYYHnWvqDJcGuZ8ob3+LWeA80+Et0f/jqALenrjjkRSLZ281ccvotlkBxq4OYcmoYCOCOd+wS5aIxRer0eq3ZUSsW/CgzyatZimqYZkbp5Z7SeeHdYgF46bSnQP4G1XfMUq1cCWYEjS0RjICf9eku5aePwJyKMSBhVgRzeaJwsDqhGcCdFb9umztLP3VbH9GJRx6OJrcYvOAJwkrLHgw7xiyZf9A+htzDybNf06i2Puq89BG8//iRaGugalCtnELN4fL1OP+VBKB+NNAsQgeTTeq1GZsfhTRve/mpIhH7lVAXaJxSeTBjwYq4yw/HXVrlSVqdbUF8zZjOPVNJCOaHmVnfqFeg8UtIYkumxr2+Tje/NDWgayjGqm6anRNfuF+p1aHLNYObmfcXs4ZeWGawjPw5eaYbKvrWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkMFN78gl7GdpQlCBi7ZUBl9CmNMVbVcbTU+AkMGOmoY0Ekbsx9eP6B5BdzpGllQZk3kjoHZEeX328+tRRCYBDLWGVlR91uZ6OSYUe0TNPanNPkjYOxp0k8yhltzKMJMl+JC6ZE/h9VqhnxHNLS7BTTIztuCkvq7vcraYWOIeFw1oyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZz44mPS1yVURBpmkdTTbZV4KQ88dlstnuaLIdxnzHJM/lSnCVKIOfYcC5uGB5iRwTkhbkenG2L7c77HIWlFh0XlqIDNoZgrIne5dIWVZ6dYaCnaCyfL8wSidh9e7tX8ZoCgwABQIgoQcADAAJA0ANAwAAAAAAEgcAAQATCxoZAQESBwAKABgLDRkBAQsCAAoMAgAAAAAvaFkAAAAADQEKAREOGgAKAREPBhYNGgsUDhcbHB0QGAkEBxMQBQgDGCtkSRPp9m+UAC9oWQAAAAABAAAAAAAAAA0DCgAAAQkLAgAVDAIAAAA0W50AAAAAAAsCAAIMAgAAAKAlJgAAAAAAAQoH91x2BwgszoIZyZt8wiqhKEPv07mcVbllAcKrbibGAi0jBwBAEQsBEwI=",
|
|
37
|
+
"slot": 458109119,
|
|
38
|
+
"loaded_writable": [
|
|
39
|
+
"nozz1yoi1nyjy9Yr4HphDWe9NoJzx1acG25RBYpKhhx",
|
|
40
|
+
"CASRL2zkwDnppxEFQ4LgdwgR9pdz5Q8R8nEMKVZ9QoLp"
|
|
41
|
+
],
|
|
42
|
+
"loaded_readonly": [
|
|
43
|
+
"6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
|
|
44
|
+
"So11111111111111111111111111111111111111112",
|
|
45
|
+
"SysvarRent111111111111111111111111111111111",
|
|
46
|
+
"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
|
|
47
|
+
"4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf",
|
|
48
|
+
"8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt",
|
|
49
|
+
"Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"signature": "5t1WNzX14pEBRYH4uS5bY3sFGs8woJUqxbPzEU7mk9o7a1AtTXREaKhyUTuHsgrFPgGdxWJraUL1gMZXqSeZm8Wy",
|
|
54
|
+
"wire": "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",
|
|
55
|
+
"slot": 458123028,
|
|
56
|
+
"loaded_writable": [],
|
|
57
|
+
"loaded_readonly": []
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"signature": "6sDY3A6nmA6GVp2hbN5RvgcZqTtp2NiT4nMZL4GYTyuHBRQGi6o5bL7UDrgrVu3hjZUrhshB5ybE3WFhrrFjZnE",
|
|
61
|
+
"wire": "AQUO9d4RQYgYSI2KrOJh5hrMuvTp4V+V+Lj5CyPFFizEvjwSJDzQTaeKRjpSQ7LaXUpX4/trpst445INXyZJeg+AAQAKFYogw7w4ZixDEgda3/LpKWOtjA2OJvELRGEfPmRH46nWC3p62Dful96pNejFYRR3SlBir+1PZn8hUJ2YFDxs4CVKdA/gbVd8xSrVwJZgSNLRGMgJ/16S7lp4/AnIoxIGFWbz66eDPwKJnH0/MEhNk4H6knUO9NMnEu4K37Wnra8XiEVplnyOHZ5PIRxYhsLKmbp/1gNHu96bOFFuWejN2Iu6BqUK2cQs3h8vU4/5UEoH400CxCB5NN6rUZmx+FNG989uIl/D6qpT6r2nSmcn7CwgWN8g7WxsWMvhnUp1nkGA054L8khBPq+kuyY+oz3XWVXtzOF3CdBW5bF38fmKhAHj1TSQjmh5lZ36hXoPFLSGJLpsa9vk43vzQ1oGsoxqpu0J3vsmnzOJO5Hx48A+8PT/nLpvTVJWy7UJK0i3eyTd+X28wjfnjRIqT3s9BfP2qNclycnmwUyRQLd4S6lhAF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkMFN78gl7GdpQlCBi7ZUBl9CmNMVbVcbTU+AkMGOmoY0Ekbsx9eP6B5BdzpGllQZk3kjoHZEeX328+tRRCYBDLTxT7Fyo0GkLLcw8rJt4M0TZawEBYD3zlUbUuroF4uP9YZWVH3W5no5JhR7RM09qc0+SNg7GnSTzKGW3MowkyX4kLpkT+H1WqGfEc0tLsFNMjO24KS+ru9ytphY4h4XDWjJclj04kifG7PRApFI4NgwtaE5na/xCEBI572Nvp+FnlSnCVKIOfYcC5uGB5iRwTkhbkenG2L7c77HIWlFh0XmbbYqIPN6D0cxMS0xfucOVfgzEeW5Lj3z9sl7aP66C7CgwABQIgoQcADAAJA0ANAwAAAAAAEwcABAAQCxoZAQETBwADABgLDRkBAQsCAAMMAgAAAABWIYMAAAAADQEDAREOGgADBBIPCRYNGgsUDhcbHB0RGAgCBRARBgcKGCtkSRPp9m+UAFYhgwAAAAABAAAAAAAAAA0DAwAAAQkLAgAVDAIAAAAYOsABAAAAAAsCAAEMAgAAAKAlJgAAAAAAAQoH91x2BwgszoIZyZt8wiqhKEPv07mcVbllAcKrbibGAjAkBwBAEQsBEwI=",
|
|
62
|
+
"slot": 458109122,
|
|
63
|
+
"loaded_writable": [
|
|
64
|
+
"nozHiMDNDHfuvj31jZN917a3mk2KSR9M8L3K13447eG",
|
|
65
|
+
"qkYdTGRPHbWTWuBMz45bCiU6a23axRqf6sBHm9295WY"
|
|
66
|
+
],
|
|
67
|
+
"loaded_readonly": [
|
|
68
|
+
"6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
|
|
69
|
+
"So11111111111111111111111111111111111111112",
|
|
70
|
+
"SysvarRent111111111111111111111111111111111",
|
|
71
|
+
"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
|
|
72
|
+
"4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf",
|
|
73
|
+
"8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt",
|
|
74
|
+
"Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"signature": "Zu41tiWfvbzaV8jyBQMfGALEYUvN1cUnudRidZ1Sn8Dr4d9jkjukdwEvYpgBJRgf7gm2R2p2YucnzLA5VfN4TXC",
|
|
79
|
+
"wire": "ARxemD0pSDZ4wZISxRHT7Xa4q/B2A5CECqTpJrsS3wRO+AP0q9ETkSVczKV4uweN9WNtcAX1t+vdVO+671RofweAAQAKFcTJSg3HUFHebqb6raVoF5eHy6sCEDGaULQnOPnQaBa+C3p62Dful96pNejFYRR3SlBir+1PZn8hUJ2YFDxs4CUzhmuaTh/KonEPUBIleMcbFvpa8BWXxdyY/oHE2Eo5pj3EHY0ePgND2FZBMbyU9wWnhL/JTUJ1sg07ZyPP5TOqSnQP4G1XfMUq1cCWYEjS0RjICf9eku5aePwJyKMSBhW6BqUK2cQs3h8vU4/5UEoH400CxCB5NN6rUZmx+FNG989uIl/D6qpT6r2nSmcn7CwgWN8g7WxsWMvhnUp1nkGA054L8khBPq+kuyY+oz3XWVXtzOF3CdBW5bF38fmKhAHj1TSQjmh5lZ36hXoPFLSGJLpsa9vk43vzQ1oGsoxqpvhDhwXFAREACeOd7bTt586hXasm+rLAOq+SuQkYmBlA+X28wjfnjRIqT3s9BfP2qNclycnmwUyRQLd4S6lhAF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkMFN78gl7GdpQlCBi7ZUBl9CmNMVbVcbTU+AkMGOmoY0Ekbsx9eP6B5BdzpGllQZk3kjoHZEeX328+tRRCYBDLTxT7Fyo0GkLLcw8rJt4M0TZawEBYD3zlUbUuroF4uP9YZWVH3W5no5JhR7RM09qc0+SNg7GnSTzKGW3MowkyX4kLpkT+H1WqGfEc0tLsFNMjO24KS+ru9ytphY4h4XDWjJclj04kifG7PRApFI4NgwtaE5na/xCEBI572Nvp+FnlSnCVKIOfYcC5uGB5iRwTkhbkenG2L7c77HIWlFh0XmbbYqIPN6D0cxMS0xfucOVfgzEeW5Lj3z9sl7aP66C7CgwABQIgoQcADAAJA0ANAwAAAAAAEwcACQAQCxoZAQETBwADABgLDRkBAQsCAAMMAgAAAABWIYMAAAAADQEDAREOGgADCRIPAhYNGgsUDhcbHB0RGAgEBRARBgcKGCtkSRPp9m+UAFYhgwAAAAABAAAAAAAAAA0DAwAAAQkLAgAVDAIAAADwztEAAAAAAAsCAAEMAgAAAKAlJgAAAAAAAQoH91x2BwgszoIZyZt8wiqhKEPv07mcVbllAcKrbibGAjAdBwBAEQsBEwI=",
|
|
80
|
+
"slot": 458109122,
|
|
81
|
+
"loaded_writable": [
|
|
82
|
+
"nozHiMDNDHfuvj31jZN917a3mk2KSR9M8L3K13447eG",
|
|
83
|
+
"HjQjngTDqoHE6aaGhUqfz9aQ7WZcBRjy5xB8PScLSr8i"
|
|
84
|
+
],
|
|
85
|
+
"loaded_readonly": [
|
|
86
|
+
"6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
|
|
87
|
+
"So11111111111111111111111111111111111111112",
|
|
88
|
+
"SysvarRent111111111111111111111111111111111",
|
|
89
|
+
"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
|
|
90
|
+
"4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf",
|
|
91
|
+
"8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt",
|
|
92
|
+
"Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1"
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"signature": "4A2UJ139R7YRvtDRUuTsbj83EQwkWZehP9mvjc9kgzJEaVLCLRKXPtw6CYwdovduVR8cYcUZ6spxHnKKKfkKhdn2",
|
|
97
|
+
"slot": 458539974,
|
|
98
|
+
"wire": "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",
|
|
99
|
+
"loaded_writable": [],
|
|
100
|
+
"loaded_readonly": [],
|
|
101
|
+
"raw_instruction_count": 1
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"signature": "4ARos3Yq1SMNE3izDpy9YdKrRgMmD7UCDxvnVrBRaGCJHiifPHSmQWc4DPfjUaEUcxS7puGmEN64K7EZdeXLJaj2",
|
|
105
|
+
"slot": 458542546,
|
|
106
|
+
"wire": "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",
|
|
107
|
+
"loaded_writable": [],
|
|
108
|
+
"loaded_readonly": [],
|
|
109
|
+
"raw_instruction_count": 1
|
|
110
|
+
}
|
|
111
|
+
]
|
{sol_parser_sdk_python-0.5.14 → sol_parser_sdk_python-0.5.16}/examples/parse_tx_by_signature.py
RENAMED
|
@@ -30,7 +30,7 @@ from sol_parser.rpc_parser import (
|
|
|
30
30
|
)
|
|
31
31
|
|
|
32
32
|
DEFAULT_SIGNATURE = (
|
|
33
|
-
"
|
|
33
|
+
"4ARos3Yq1SMNE3izDpy9YdKrRgMmD7UCDxvnVrBRaGCJHiifPHSmQWc4DPfjUaEUcxS7puGmEN64K7EZdeXLJaj2"
|
|
34
34
|
)
|
|
35
35
|
|
|
36
36
|
|
|
@@ -42,7 +42,7 @@ def fetch_transaction(signature: str, rpc_url: str) -> dict | None:
|
|
|
42
42
|
"method": "getTransaction",
|
|
43
43
|
"params": [
|
|
44
44
|
signature,
|
|
45
|
-
{"encoding": "json", "maxSupportedTransactionVersion":
|
|
45
|
+
{"encoding": "json", "maxSupportedTransactionVersion": 1},
|
|
46
46
|
],
|
|
47
47
|
}
|
|
48
48
|
).encode()
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""Offline captured executions; optional signature fetch uses SOLANA_RPC_URL."""
|
|
2
|
+
import json
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
|
7
|
+
from sol_parser import format_dex_event_json
|
|
8
|
+
from sol_parser.rpc_parser import parse_rpc_transaction, rpc_get_transaction_result_dict_to_response
|
|
9
|
+
from parse_tx_by_signature import fetch_transaction
|
|
10
|
+
|
|
11
|
+
if len(sys.argv) > 1:
|
|
12
|
+
raw = fetch_transaction(sys.argv[1], os.environ.get('SOLANA_RPC_URL', 'https://api.mainnet-beta.solana.com'))
|
|
13
|
+
if raw is None:
|
|
14
|
+
raise RuntimeError('Transaction not found; use a recent signature or an archive RPC')
|
|
15
|
+
cases = [{'raw': raw}]
|
|
16
|
+
else:
|
|
17
|
+
cases = json.loads((Path(__file__).resolve().parents[1] / 'tests/fixtures/pump_execution_20261019.json').read_text())['cases']
|
|
18
|
+
for case in cases:
|
|
19
|
+
raw = case['raw']
|
|
20
|
+
logs = raw['meta']['logMessages']
|
|
21
|
+
for mode, variant in [('full',logs),('no_logs',[]),('truncated_logs',logs[:len(logs)//2])]:
|
|
22
|
+
raw['meta']['logMessages'] = variant
|
|
23
|
+
signature = raw['transaction']['signatures'][0]
|
|
24
|
+
events, error = parse_rpc_transaction(rpc_get_transaction_result_dict_to_response(raw), signature, None, 0)
|
|
25
|
+
if error:
|
|
26
|
+
raise RuntimeError(error)
|
|
27
|
+
print(f'{mode} slot={raw["slot"]} signature={signature}')
|
|
28
|
+
for event in events:
|
|
29
|
+
print(format_dex_event_json(event))
|
|
@@ -8,6 +8,7 @@ import base58
|
|
|
8
8
|
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
|
|
9
9
|
from sol_parser.shredstream_client import parse_shred_transaction,parse_shred_transaction_with_loaded_addresses
|
|
10
10
|
from sol_parser.wire_transaction import decode_wire_transaction
|
|
11
|
+
from sol_parser import RawInstructionDexType
|
|
11
12
|
from sol_parser.grpc_types import EventType,IncludeOnlyFilter,ExcludeFilter,EventMetadata
|
|
12
13
|
from sol_parser.pump_routes import AMM,parse_route
|
|
13
14
|
|
|
@@ -27,6 +28,25 @@ def run_replay():
|
|
|
27
28
|
w,r=f['loaded_writable'],f['loaded_readonly']
|
|
28
29
|
def parse(filter=None):
|
|
29
30
|
return parse_shred_transaction_with_loaded_addresses(raw,w,r,slot=f['slot'],tx_index=888,recv_us=999,filter=filter)
|
|
31
|
+
if f['expected'][0]['kind'] in ('RapidBuy', 'BuyPumpDelta'):
|
|
32
|
+
events = parse()
|
|
33
|
+
keys = [*m['accountKeys'], *w, *r]
|
|
34
|
+
assert len(events) == len(f['expected'])
|
|
35
|
+
for event in events:
|
|
36
|
+
assert event.type == EventType.RAW_INSTRUCTION
|
|
37
|
+
e = event.data
|
|
38
|
+
ix = m['instructions'][e.instruction_index]
|
|
39
|
+
assert e.program_id == keys[ix['programIdIndex']]
|
|
40
|
+
assert e.accounts == [keys[i] for i in ix['accounts']]
|
|
41
|
+
assert e.account_indices == ix['accounts']
|
|
42
|
+
assert e.instruction_data == list(base58.b58decode(ix['data']))
|
|
43
|
+
assert not hasattr(e, 'is_buy') and not hasattr(e, 'ix_name')
|
|
44
|
+
selected = parse(IncludeOnlyFilter([EventType.PUMP_FUN_TRADE]))
|
|
45
|
+
assert selected
|
|
46
|
+
assert all(e.type == EventType.RAW_INSTRUCTION and any(d.dex_type == RawInstructionDexType.PUMPFUN for d in e.data.dexes) for e in selected)
|
|
47
|
+
assert not parse(ExcludeFilter([EventType.RAW_INSTRUCTION]))
|
|
48
|
+
trace.append((f['signature'], [e.type for e in events]))
|
|
49
|
+
continue
|
|
30
50
|
events=parse(IncludeOnlyFilter([EventType.PUMP_FUN_TRADE,EventType.PUMP_FUN_CREATE]))
|
|
31
51
|
assert len(events)==len(f['expected'])
|
|
32
52
|
assert len(parse_shred_transaction(raw))==(0 if w or r else len(events))
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"""python examples/raw_instruction_filter.py — offline signed transaction replay."""
|
|
2
|
+
import base64
|
|
3
|
+
import json
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from sol_parser.shredstream_client import parse_shred_transaction_with_loaded_addresses
|
|
6
|
+
from sol_parser.grpc_types import EventType, IncludeOnlyFilter
|
|
7
|
+
from sol_parser.json_util import dex_event_json_dumps
|
|
8
|
+
|
|
9
|
+
for case in json.loads((Path(__file__).parent / "fixtures/raw_instructions.json").read_text()):
|
|
10
|
+
for kind in ("PumpFunTrade", "RaydiumCpmmSwap", "RawInstruction"):
|
|
11
|
+
events = parse_shred_transaction_with_loaded_addresses(
|
|
12
|
+
base64.b64decode(case["wire"]), case["loaded_writable"], case["loaded_readonly"],
|
|
13
|
+
filter=IncludeOnlyFilter([EventType(kind)]))
|
|
14
|
+
print(json.dumps({"signature": case["signature"], "filter": kind,
|
|
15
|
+
"raw_instructions": [json.loads(dex_event_json_dumps(e)) for e in events
|
|
16
|
+
if e.type == EventType.RAW_INSTRUCTION]}))
|
|
@@ -513,6 +513,8 @@ from .pump_upgrade import PumpFunPostCompleteBuyEvent, PumpFunSweepBondingCurveF
|
|
|
513
513
|
__all__ += ['decode_pump_multi_hop_intent','PumpFunPostCompleteBuyEvent','PumpFunSweepBondingCurveFeeEvent','PumpFunCompleteEvent','PumpSwapSweepPoolFeeEvent']
|
|
514
514
|
|
|
515
515
|
from .pump_routes import PumpRouteHop, PumpRouteIntentEvent
|
|
516
|
+
from .raw_instruction import RawInstructionEvent, RawInstructionDex, RawInstructionDexType
|
|
517
|
+
__all__ += ["RawInstructionEvent", "RawInstructionDex", "RawInstructionDexType"]
|
|
516
518
|
from .shredstream_client import parse_shred_transaction, parse_shred_transaction_with_loaded_addresses, parse_shred_transaction_best_effort
|
|
517
519
|
|
|
518
520
|
__all__ += ["PumpRouteHop", "PumpRouteIntentEvent", "parse_shred_transaction", "parse_shred_transaction_with_loaded_addresses", "parse_shred_transaction_best_effort"]
|
|
@@ -1816,6 +1816,11 @@ def to_typed_event(event: dict) -> Optional[TypedDexEvent]:
|
|
|
1816
1816
|
values={name:(_get_str(data,name) if typ=='pubkey' else _get_int(data,name)) for name,typ in fields}
|
|
1817
1817
|
return cls(metadata=meta,**values)
|
|
1818
1818
|
|
|
1819
|
+
if event_type == EventType.RAW_INSTRUCTION:
|
|
1820
|
+
from .raw_instruction import RawInstructionEvent, RawInstructionDex
|
|
1821
|
+
return RawInstructionEvent(metadata=meta, dexes=[RawInstructionDex(**d) for d in data.get('dexes', [])], program_id=data['program_id'],
|
|
1822
|
+
instruction_index=int(data['instruction_index']), accounts=list(data['accounts']),
|
|
1823
|
+
account_indices=list(data['account_indices']), instruction_data=list(data['instruction_data']))
|
|
1819
1824
|
if event_type == EventType.PUMP_ROUTE_INTENT:
|
|
1820
1825
|
from .pump_routes import PumpRouteHop, PumpRouteIntentEvent
|
|
1821
1826
|
return PumpRouteIntentEvent(metadata=meta,kind=data['kind'],program=data['program'],
|