sol-parser-sdk-python 0.5.13__tar.gz → 0.5.15__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.13 → sol_parser_sdk_python-0.5.15}/PKG-INFO +41 -16
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/README.md +39 -14
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/README_CN.md +39 -14
- sol_parser_sdk_python-0.5.15/docs/releases/v0.5.15.md +20 -0
- sol_parser_sdk_python-0.5.15/examples/fixtures/raw_instructions.json +111 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/parse_tx_by_signature.py +2 -2
- sol_parser_sdk_python-0.5.15/examples/pump_execution_replay.py +29 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/pump_shred_routes.py +24 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/pyproject.toml +1 -1
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/__init__.py +2 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/event_type_parity.py +1 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/event_types.py +7 -1
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/grpc_instruction_parser.py +4 -2
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/grpc_types.py +3 -2
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/inner_instruction_parser.py +3 -3
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/instructions.py +9 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/pump_routes.py +8 -1
- sol_parser_sdk_python-0.5.15/sol_parser/raw_instruction.py +15 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/rpc_parser.py +4 -3
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/shredstream_client.py +12 -0
- sol_parser_sdk_python-0.5.15/tests/fixtures/pump_execution_20261019.json +5179 -0
- sol_parser_sdk_python-0.5.15/tests/test_pump_execution.py +46 -0
- sol_parser_sdk_python-0.5.15/tests/test_raw_instruction.py +47 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/.env.example +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/.gitignore +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/docs/USAGE.md +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/block_meta_stream.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/amm_v4_grpc_refresh_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/batch2_cpmm_simulations_20261003.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/block_meta_grpc_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/cached_damm_v2_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/cached_tip_routes_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/cpmm_lp_simulations_20261006.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/damm_v2_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/pump_curve_instruction.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/pump_shred_routes.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/pumpfun_current_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/pumpfun_funded_sell_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/pumpfun_settlement_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/pumpfun_usdc_multihop_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/pumpswap_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/simulation_ata_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/fixtures/simulation_routes_live_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/hot_path_benchmark.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/hot_path_benchmark.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/meteora_damm_grpc.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/multi_protocol_grpc.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/offline_bank/README.md +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/offline_bank/config.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/offline_bank/expected.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/offline_bank/programs.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/offline_bank/snapshot.json.gz +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/pump_offline_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/pumpfun_quick_test.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/pumpfun_trade_filter.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/pumpfun_with_metrics.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/pumpswap_low_latency.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/pumpswap_with_metrics.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/rust_example_utils.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/simulation_routes.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/stonkfun_routes.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/examples/stonkfun_snapshot_refresh.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/scripts/bench_parser.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/scripts/gen_golden_rust.sh +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/account_dispatcher.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/account_fillers/__init__.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/account_fillers/meteora.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/account_fillers/orca.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/account_fillers/pumpfun.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/account_fillers/pumpswap.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/account_fillers/raydium.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/account_fillers/raydium_launchlab.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/accounts/__init__.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/accounts/raydium_orca.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/accounts/rpc_wallet.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/accounts/utils.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/block_meta.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/check_migration.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/clock.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/common/__init__.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/dex_parsers.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/entries_decode.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/env_config.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/geyser_pb2.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/geyser_pb2_grpc.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/grpc/__init__.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/grpc/geyser_connect.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/grpc/subscribe_builder.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/grpc/transaction_meta.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/grpc_client.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/instr/__init__.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/instr_account_utils.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/json_util.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/liquidity_snapshot.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/log_instr_dedup.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/logs/__init__.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/market.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/merger.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/order_buffer.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/parser.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/pump_upgrade.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/pumpfun_fee_enrich.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/rust_api_inventory.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/rust_event_json.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/shredstream_pb2.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/shredstream_pb2_grpc.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/shredstream_pumpfun.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/simulation_route.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/solana_storage_pb2.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/solana_storage_pb2_grpc.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/stonkfun_registry.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/transaction_route.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/u128_parity.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/verify_discriminators.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/sol_parser/wire_transaction.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/account_lifecycle_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/cached_damm_v2_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/cached_tip_routes_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/clmm_fee_rewards_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/clmm_liquidity_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/clmm_one_sided_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/cpmm_liquidity_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/cpmm_lp_simulations_20261006.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_borrow_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_cpi_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_dual_claims_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_reward_admin_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_reward_renewal_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_reward_withdraw_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_upstream_hook_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_v1_config2_instruction_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_v1_live_simulations_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_v2_authority_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_v2_fees_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_v2_liquidity_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_v2_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_v2_rewards_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/damm_v2_vesting_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/dbc_boundary_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/dbc_live_simulations_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/dbc_migration_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/dbc_referral_live_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/dbc_swap2.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/dbc_v1_migration_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/dlmm_fees_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/dlmm_hook_rewards_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/dlmm_rewards_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/golden_parse_log.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/launchlab_migration_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/native_settlement_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pump_compact_simulations_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pump_depth2_20261014.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pump_holder_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pump_routes_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pump_synthetic_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pump_upgrade/account_context.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pump_upgrade/boost_account_context.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pump_upgrade/events.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pump_upgrade/mainnet.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pump_upgrade/pump_trade_account_context.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pump_upgrade/simulation_events.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_concentrated_multihop_mainnet_simulations_20261005.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/2MfmZSU8mWEbskNHAxQGphAyB5x72SC2HYuAkLeSyH6MjttUHqUjm24wPMeH7zrCoQoYFwbLeiFE571mc8WvgZyL.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/2dabmQiykzC1tsNmgtRFbsRJjEKMfUySgScJc2J2uq8CQtoXWZ3YyT99p3nVuCXifEhLkyUe4Sf4nfe2UkFT8AJr.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/2eVpZNvQYPMBVNT5357Qt7HVAUSv9gdwqxKStvdwQ498rcJLLCHVcYPaGfFqVBz44ndYvkA1H4CwjBuDSviAj7jp.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/3GufGVVRrnrH1Yuto57jDeTKXeki6ooE9w6h4qYRvNm5FcCpxwDHNvzHXdpAMbxRmukWJpSPHUKHEjnFTCC979ka.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/3LQK2JHVbVSSfyCYwTwzoYTY9NEN4gZXzqw3TvAvMJHsvPsopCHtsa5ALhj4tFn8xWbmJ5DsYMMcnPukTBkSjtQf.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/3MRWKDUcD5CGn5Xz4qWyGA8Y9udw4SsSr4gcxCjTUqCFt6Zc6uiwHF1wLZXKoqBcGEM2kruBS85ymYxmYk8FLGBk.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/3NBSCgAXpNqg7JBUzp6RsfZYzf2QbbHi6r2wcoBF4Lpuzozae7ExUJUGoqpVCXXs8cbibr6aWySH1bsg86Enuhez.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/3QVpcUq64D4DUV9empFr3G98pCEa1Cp2fAcFJKyiJGsQ2ir2S4yBLhHYXPNmLfCE8KVDgLApfBYTFM7pf9JVPbsb.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/3REXMDkvZsWvgc8czYpfn24avz18APMuzbV2VgQBeymArdJvfQcfcpKr46f3j1H2bAiymFneaNocPH7KzPUPbR1S.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/3ejAydePsZTUfeZaU9eiAM37gV5AYPG9hhyMtUobJLQtSMgroDeiE8njXu2JiwMyX5YJLp3vrfNPy89S7EDdUCAy.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/3zC4bw1osyebZ77KagXYP3b5rEBHvJCgcwCriCLc5gAUp9Ev6Bx5ZMbqnYpkKE2VgZgMFcZN5FYKQfcKL45MWpyu.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/5PgkFgTLSEZPZhxgWNToPzTZct95SycuaH9H3g82YwcKXudtiynEZmiaoQrhGv2gdZLrvsVZ5Wn88KGirbFYpLrt.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_create/661yA5s6uxUsggTcT4cZ6yyMfNmF4mCZzxLnCb1zBrSY3YhAiouYXBitiPvkngBEKxaeGcpXiek6qXDajiRr9wuY.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_current_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_funded_sell_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_settlement_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpfun_usdc_multihop_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpswap_liquidity_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/pumpswap_mainnet_simulations_20261004.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/review10_compiled_bounds.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/review10_prefunded_ata.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/review10_wire_bounds.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/signed_alt_load_rejections_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/signed_clmm_boundaries_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/signed_cpmm_bank_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/signed_dex_replay_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/signed_identical_alt_bank_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/signed_multileg_bank_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/signed_nested_cpi_bank_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/signed_replay_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/signed_wire_boundaries_20261009.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/simulation_alt_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/simulation_ata_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/simulation_routes_live_20261002.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/stonkfun_routes_0_7_7.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/whirlpool_fees_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/whirlpool_hook_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/whirlpool_liquidity_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/fixtures/whirlpool_one_sided_20261008.json +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_amm_v4_v2.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_block_meta.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_clmm_fee_rewards_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_clmm_liquidity_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_clmm_one_sided_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_cpmm_liquidity_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_borrow_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_cpi_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_dual_claims_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_reward_admin_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_reward_renewal_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_reward_withdraw_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_upstream_hook_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_v1_live_simulations.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_v2_authority_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_v2_fees_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_v2_liquidity_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_v2_rewards_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_damm_v2_vesting_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_dbc_boundary_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_dbc_migration_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_dbc_upgrade.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_dbc_v1_migration_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_dex_retry_delay.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_dlmm_fees_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_dlmm_hook_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_dlmm_rewards_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_exact_metadata_json.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_filter_and_account_parity.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_golden.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_grpc_unary_methods.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_hot_path_wire_decoder.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_imports_and_inner.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_launchlab_invocation_anchor.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_launchlab_migration_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_log_instr_dedup.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_market_helpers.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_native_grpc_server.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_native_plan_lifecycle.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_orca_whirlpool_instruction_parity.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_order_buffer.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_ordered_late_regression.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_prefix_prefilter.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_protocol_current_fields.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pump_compact_simulation_routes.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pump_depth2.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pump_fees_instruction_parity.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pump_holder_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pump_offline_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pump_routes_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pump_shred_routes.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pump_synthetic_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pump_trade_account_context.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pump_trade_merge_identity.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pump_upgrade_events.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pump_upgrade_mainnet.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pumpfun_account_fill.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pumpfun_create_regression.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pumpfun_trade_tail.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pumpfun_v2_parity.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pumpswap_account_context.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pumpswap_instruction.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pumpswap_liquidity_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_pumpswap_upgrade.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_raydium_clmm_instruction_parity.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_raydium_current_logs.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_review10.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_review_batch2.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_shred_wire_sanitize.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_shredstream.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_signed_transaction_replay.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_simulation_route.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_snapshot_refresh_example.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_stonkfun_routes.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_whirlpool_fees_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_whirlpool_hook_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_whirlpool_liquidity_bank.py +0 -0
- {sol_parser_sdk_python-0.5.13 → sol_parser_sdk_python-0.5.15}/tests/test_whirlpool_one_sided_bank.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: sol-parser-sdk-python
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.15
|
|
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,25 @@ 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.15 — Pump execution replay
|
|
26
|
+
|
|
27
|
+
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).
|
|
28
|
+
|
|
29
|
+
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.
|
|
30
|
+
|
|
31
|
+
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.
|
|
32
|
+
|
|
33
|
+
## v0.5.15 — raw Shred instructions
|
|
34
|
+
|
|
35
|
+
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`.
|
|
36
|
+
|
|
37
|
+
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.
|
|
38
|
+
|
|
39
|
+
No filter returns unknown third-party instructions. Explicitly including `RawInstruction` returns every outer instruction, including infrastructure. A `PumpFunTrade`-only filter does not include raw events: subscribe to both types when needed. Streamer forwards `DexEvent::RawInstructionEvent` as Common. A Pump address in accounts does not prove a CPI or a particular buy method. Event count is not fill count.
|
|
40
|
+
|
|
41
|
+
Wrapper adapter functions remain explicit compatibility helpers only; default Shred parsing does not call them. The released-version history below describes previous behavior.
|
|
42
|
+
|
|
24
43
|
<h1>⚡ Sol Parser SDK - Python</h1>
|
|
25
44
|
<h3><em>High-performance Solana DEX event parser for Python</em></h3>
|
|
26
45
|
</div>
|
|
@@ -60,15 +79,21 @@ Parser SDK language versions and related Rust SDKs:
|
|
|
60
79
|
|
|
61
80
|
| Language | Repository | Description | Version |
|
|
62
81
|
|----------|------------|-------------|---------|
|
|
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.
|
|
82
|
+
| Rust | [sol-parser-sdk](https://github.com/0xfnzero/sol-parser-sdk) | Solana DEX transaction and account event parsing | `v0.7.16` |
|
|
83
|
+
| Node.js | [sol-parser-sdk-nodejs](https://github.com/0xfnzero/sol-parser-sdk-nodejs) | TypeScript/JavaScript for Node.js | `v0.5.22` |
|
|
84
|
+
| Python | [sol-parser-sdk-python](https://github.com/0xfnzero/sol-parser-sdk-python) | Async/await native support | `v0.5.15` |
|
|
85
|
+
| Go | [sol-parser-sdk-golang](https://github.com/0xfnzero/sol-parser-sdk-golang) | Go transaction and account event parsing | `v0.5.15` |
|
|
86
|
+
| **Rust** | [sol-shred-sdk](https://github.com/0xfnzero/sol-shred-sdk) | Raw Solana shred decoding and ShredStream DEX event parsing | `v4.0.7` |
|
|
68
87
|
| **Rust** | [sol-trade-sdk](https://github.com/0xfnzero/sol-trade-sdk) | Solana DEX trade construction and transaction execution | `v6.0.2` |
|
|
69
88
|
|
|
70
89
|
---
|
|
71
90
|
|
|
91
|
+
## v0.5.14 — Pump route direction and instruction names
|
|
92
|
+
|
|
93
|
+
Route intents now expose `is_buy` and `ix_name`, following existing trade field names and official IDL instruction names. RapidBuy reports a buy intent and `buy_exact_quote_in_v2`; BuyPumpDelta reports only a buy intent. Multi-hop direction and unknown methods remain null. Read currencies from `hops[].base_mint` / `quote_mint`. These hints do not confirm execution, and filters do not convert intents into trades.
|
|
94
|
+
|
|
95
|
+
Older JSON without the fields remains readable as unknown. Rust struct literals must supply the new fields; Go uses pointers and Node.js/Python use null/None for unknown values. Streamer now forwards `DexEvent::PumpRouteIntentEvent` with protocol and event filtering.
|
|
96
|
+
|
|
72
97
|
## v0.5.13 — Pump routes and offline replay
|
|
73
98
|
|
|
74
99
|
Adds native Pump route-intent parsing for official multi-hop instructions and the exact RapidBuy/BuyPumpDelta wrapper layouts captured in reported transactions. Adds locally cached ALT resolution and rejects unresolved account identities by default, with explicit best-effort compatibility APIs where supported. Route intents expose instruction constraints and hop identities; confirmed execution amounts require execution metadata.
|
|
@@ -150,7 +175,7 @@ This is the Python implementation of the FnZero Solana DEX parser SDK for asynci
|
|
|
150
175
|
**From PyPI**
|
|
151
176
|
|
|
152
177
|
```bash
|
|
153
|
-
pip install sol-parser-sdk-python==0.5.
|
|
178
|
+
pip install sol-parser-sdk-python==0.5.15
|
|
154
179
|
```
|
|
155
180
|
|
|
156
181
|
**From source**
|
|
@@ -266,18 +291,18 @@ From the **package root** after `pip install -e .`. Run with `python examples/<f
|
|
|
266
291
|
| Description | Run command | Source |
|
|
267
292
|
|-------------|-------------|--------|
|
|
268
293
|
| **PumpFun** | | |
|
|
269
|
-
| 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.
|
|
270
|
-
| 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.
|
|
271
|
-
| 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.
|
|
294
|
+
| 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.15` |
|
|
295
|
+
| 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.15` |
|
|
296
|
+
| 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.15` |
|
|
272
297
|
| **PumpSwap** | | |
|
|
273
|
-
| 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.
|
|
274
|
-
| 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.
|
|
298
|
+
| 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.15` |
|
|
299
|
+
| 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.15` |
|
|
275
300
|
| **Meteora DAMM** | | |
|
|
276
|
-
| 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.
|
|
301
|
+
| 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.15` |
|
|
277
302
|
| **Multi-protocol** | | |
|
|
278
|
-
| 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.
|
|
303
|
+
| 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.15` |
|
|
279
304
|
| **Utility** | | |
|
|
280
|
-
| 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.
|
|
305
|
+
| 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.15` |
|
|
281
306
|
|
|
282
307
|
**Env:** gRPC examples need **`GRPC_URL`** or **`GRPC_ENDPOINT`**, plus **`GRPC_AUTH_TOKEN`** or **`GRPC_TOKEN`** (or legacy `GEYSER_*`). See **`.env.example`**.
|
|
283
308
|
|
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
+
|
|
3
|
+
## v0.5.15 — Pump execution replay
|
|
4
|
+
|
|
5
|
+
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).
|
|
6
|
+
|
|
7
|
+
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.
|
|
8
|
+
|
|
9
|
+
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.
|
|
10
|
+
|
|
11
|
+
## v0.5.15 — raw Shred instructions
|
|
12
|
+
|
|
13
|
+
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`.
|
|
14
|
+
|
|
15
|
+
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.
|
|
16
|
+
|
|
17
|
+
No filter returns unknown third-party instructions. Explicitly including `RawInstruction` returns every outer instruction, including infrastructure. A `PumpFunTrade`-only filter does not include raw events: subscribe to both types when needed. Streamer forwards `DexEvent::RawInstructionEvent` as Common. A Pump address in accounts does not prove a CPI or a particular buy method. Event count is not fill count.
|
|
18
|
+
|
|
19
|
+
Wrapper adapter functions remain explicit compatibility helpers only; default Shred parsing does not call them. The released-version history below describes previous behavior.
|
|
20
|
+
|
|
2
21
|
<h1>⚡ Sol Parser SDK - Python</h1>
|
|
3
22
|
<h3><em>High-performance Solana DEX event parser for Python</em></h3>
|
|
4
23
|
</div>
|
|
@@ -38,15 +57,21 @@ Parser SDK language versions and related Rust SDKs:
|
|
|
38
57
|
|
|
39
58
|
| Language | Repository | Description | Version |
|
|
40
59
|
|----------|------------|-------------|---------|
|
|
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.
|
|
60
|
+
| Rust | [sol-parser-sdk](https://github.com/0xfnzero/sol-parser-sdk) | Solana DEX transaction and account event parsing | `v0.7.16` |
|
|
61
|
+
| Node.js | [sol-parser-sdk-nodejs](https://github.com/0xfnzero/sol-parser-sdk-nodejs) | TypeScript/JavaScript for Node.js | `v0.5.22` |
|
|
62
|
+
| Python | [sol-parser-sdk-python](https://github.com/0xfnzero/sol-parser-sdk-python) | Async/await native support | `v0.5.15` |
|
|
63
|
+
| Go | [sol-parser-sdk-golang](https://github.com/0xfnzero/sol-parser-sdk-golang) | Go transaction and account event parsing | `v0.5.15` |
|
|
64
|
+
| **Rust** | [sol-shred-sdk](https://github.com/0xfnzero/sol-shred-sdk) | Raw Solana shred decoding and ShredStream DEX event parsing | `v4.0.7` |
|
|
46
65
|
| **Rust** | [sol-trade-sdk](https://github.com/0xfnzero/sol-trade-sdk) | Solana DEX trade construction and transaction execution | `v6.0.2` |
|
|
47
66
|
|
|
48
67
|
---
|
|
49
68
|
|
|
69
|
+
## v0.5.14 — Pump route direction and instruction names
|
|
70
|
+
|
|
71
|
+
Route intents now expose `is_buy` and `ix_name`, following existing trade field names and official IDL instruction names. RapidBuy reports a buy intent and `buy_exact_quote_in_v2`; BuyPumpDelta reports only a buy intent. Multi-hop direction and unknown methods remain null. Read currencies from `hops[].base_mint` / `quote_mint`. These hints do not confirm execution, and filters do not convert intents into trades.
|
|
72
|
+
|
|
73
|
+
Older JSON without the fields remains readable as unknown. Rust struct literals must supply the new fields; Go uses pointers and Node.js/Python use null/None for unknown values. Streamer now forwards `DexEvent::PumpRouteIntentEvent` with protocol and event filtering.
|
|
74
|
+
|
|
50
75
|
## v0.5.13 — Pump routes and offline replay
|
|
51
76
|
|
|
52
77
|
Adds native Pump route-intent parsing for official multi-hop instructions and the exact RapidBuy/BuyPumpDelta wrapper layouts captured in reported transactions. Adds locally cached ALT resolution and rejects unresolved account identities by default, with explicit best-effort compatibility APIs where supported. Route intents expose instruction constraints and hop identities; confirmed execution amounts require execution metadata.
|
|
@@ -128,7 +153,7 @@ This is the Python implementation of the FnZero Solana DEX parser SDK for asynci
|
|
|
128
153
|
**From PyPI**
|
|
129
154
|
|
|
130
155
|
```bash
|
|
131
|
-
pip install sol-parser-sdk-python==0.5.
|
|
156
|
+
pip install sol-parser-sdk-python==0.5.15
|
|
132
157
|
```
|
|
133
158
|
|
|
134
159
|
**From source**
|
|
@@ -244,18 +269,18 @@ From the **package root** after `pip install -e .`. Run with `python examples/<f
|
|
|
244
269
|
| Description | Run command | Source |
|
|
245
270
|
|-------------|-------------|--------|
|
|
246
271
|
| **PumpFun** | | |
|
|
247
|
-
| 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.
|
|
248
|
-
| 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.
|
|
249
|
-
| 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.
|
|
272
|
+
| 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.15` |
|
|
273
|
+
| 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.15` |
|
|
274
|
+
| 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.15` |
|
|
250
275
|
| **PumpSwap** | | |
|
|
251
|
-
| 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.
|
|
252
|
-
| 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.
|
|
276
|
+
| 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.15` |
|
|
277
|
+
| 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.15` |
|
|
253
278
|
| **Meteora DAMM** | | |
|
|
254
|
-
| 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.
|
|
279
|
+
| 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.15` |
|
|
255
280
|
| **Multi-protocol** | | |
|
|
256
|
-
| 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.
|
|
281
|
+
| 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.15` |
|
|
257
282
|
| **Utility** | | |
|
|
258
|
-
| 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.
|
|
283
|
+
| 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.15` |
|
|
259
284
|
|
|
260
285
|
**Env:** gRPC examples need **`GRPC_URL`** or **`GRPC_ENDPOINT`**, plus **`GRPC_AUTH_TOKEN`** or **`GRPC_TOKEN`** (or legacy `GEYSER_*`). See **`.env.example`**.
|
|
261
286
|
|
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
<div align="center">
|
|
2
|
+
|
|
3
|
+
## v0.5.15 — Pump 执行事件与最新回放示例
|
|
4
|
+
|
|
5
|
+
修复官方 Anchor CPI TradeEvent 前缀识别,保留历史编码兼容。RPC/gRPC 的实际 `sol_amount`、`quote_amount`、`token_amount` 只从执行事件合并;预算和最小输出保留在指令参数字段。如果日志及事件 CPI 均缺失,实际金额字段为 0(表示无执行数据,不代表已确认零成交)。非 SOL 报价金额不能当作 SOL。
|
|
6
|
+
|
|
7
|
+
在本仓库运行 `.venv/bin/python examples/pump_execution_replay.py`,离线回放 2026-10-19 重新抓取的真实交易。示例输出完整日志、无日志、截断日志三种结果;命令末尾追加最新签名可在线验证。通过 `SOLANA_RPC_URL` 选择 RPC,支持 transaction v1。
|
|
8
|
+
|
|
9
|
+
新 Delta 卖出样本:`4ARos3Yq1SMNE3izDpy9YdKrRgMmD7UCDxvnVrBRaGCJHiifPHSmQWc4DPfjUaEUcxS7puGmEN64K7EZdeXLJaj2`,slot 458542546。日期样本文件还包含 Rapid 创建后买入、BuyV3 和 PumpSwap 买入的完整签名及 slot。旧的五种双跳组合仅作为回归样本,未冒充本次新抓取交易。
|
|
10
|
+
|
|
11
|
+
## v0.5.15 — Shred 原始指令透传
|
|
12
|
+
|
|
13
|
+
默认 Shred 入口将未适配的第三方程序(包括 Rapid/Delta)作为 `RawInstruction` 返回,不再推断买卖方向、金额或内部 buy 版本。System、Token、ATA、ComputeBudget 等基础程序默认不透传;已支持的官方 DEX 指令继续正常解析,官方 Pump/PumpSwap 多跳仍返回 `PumpRouteIntent`。
|
|
14
|
+
|
|
15
|
+
事件包含 `program_id`、`instruction_index`、`accounts`、`account_indices`、`instruction_data` 和交易 metadata。账户保留原顺序与重复项;未解析 ALT 地址为 null/None,原始索引仍保留。使用缓存 loaded-addresses/resolver 补齐,热路径不请求 RPC。data 是完整原始字节,不要求已知布局。
|
|
16
|
+
|
|
17
|
+
无过滤器时返回未知第三方指令;显式订阅 `RawInstruction` 时返回所有外层指令(含基础程序)。仅订阅 `PumpFunTrade` 不包含原始事件,需要同时订阅 `RawInstruction`。Streamer 对应 `DexEvent::RawInstructionEvent`,协议为 Common。账户包含 Pump 不证明发生 CPI,更不证明具体 buy 方法;事件数量也不是成交数量。
|
|
18
|
+
|
|
19
|
+
已有 wrapper 适配函数仅作为显式调用的兼容接口保留,不参与默认 Shred 解码。以下已发布版本的历史说明描述旧行为。
|
|
20
|
+
|
|
2
21
|
<h1>⚡ Sol Parser SDK - Python</h1>
|
|
3
22
|
<h3><em>高性能 Solana DEX 事件解析(Python / asyncio)</em></h3>
|
|
4
23
|
</div>
|
|
@@ -38,11 +57,11 @@
|
|
|
38
57
|
|
|
39
58
|
| 语言 | 仓库 | 描述 | 版本 |
|
|
40
59
|
|------|------|------|
|
|
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.
|
|
60
|
+
| Rust | [sol-parser-sdk](https://github.com/0xfnzero/sol-parser-sdk) | Solana DEX 交易与账户事件解析 | `v0.7.16` |
|
|
61
|
+
| Node.js | [sol-parser-sdk-nodejs](https://github.com/0xfnzero/sol-parser-sdk-nodejs) | TypeScript/JavaScript,Node.js 支持 | `v0.5.22` |
|
|
62
|
+
| Python | [sol-parser-sdk-python](https://github.com/0xfnzero/sol-parser-sdk-python) | 原生 async/await 支持 | `v0.5.15` |
|
|
63
|
+
| Go | [sol-parser-sdk-golang](https://github.com/0xfnzero/sol-parser-sdk-golang) | Go 交易与账户事件解析 | `v0.5.15` |
|
|
64
|
+
| **Rust** | [sol-shred-sdk](https://github.com/0xfnzero/sol-shred-sdk) | Solana 原始 shred 解码与 ShredStream DEX 事件解析 | `v4.0.7` |
|
|
46
65
|
| **Rust** | [sol-trade-sdk](https://github.com/0xfnzero/sol-trade-sdk) | Solana DEX 交易构建与交易执行 | `v6.0.2` |
|
|
47
66
|
|
|
48
67
|
---
|
|
@@ -62,6 +81,12 @@
|
|
|
62
81
|
|
|
63
82
|
## 发布说明
|
|
64
83
|
|
|
84
|
+
## v0.5.14 — Pump 路由方向与指令名称
|
|
85
|
+
|
|
86
|
+
路由事件沿用 `is_buy`、`ix_name` 命名。RapidBuy 为买入意图,指令名为官方 IDL 的 `buy_exact_quote_in_v2`;BuyPumpDelta 仅确定买入方向。多跳路由方向和无法确定的方法保持为空。币种读取 `hops[].base_mint` / `quote_mint`。这些字段不代表已成交;过滤器不会把路由事件转换为交易事件。
|
|
87
|
+
|
|
88
|
+
旧 JSON 缺少新字段时保持未知。Rust 结构体字面量须补齐新字段;Go 新字段为指针,Node.js/Python 未知值为 null/None。Streamer 新增 `DexEvent::PumpRouteIntentEvent` 并保留路由字段,支持协议与事件过滤。
|
|
89
|
+
|
|
65
90
|
## v0.5.13 — Pump routes and offline replay
|
|
66
91
|
|
|
67
92
|
Adds native Pump route-intent parsing for official multi-hop instructions and the exact RapidBuy/BuyPumpDelta wrapper layouts captured in reported transactions. Adds locally cached ALT resolution and rejects unresolved account identities by default, with explicit best-effort compatibility APIs where supported. Route intents expose instruction constraints and hop identities; confirmed execution amounts require execution metadata.
|
|
@@ -128,7 +153,7 @@ Validation includes local CPU benchmarks and offline signed-bank scenarios. Meas
|
|
|
128
153
|
**PyPI**
|
|
129
154
|
|
|
130
155
|
```bash
|
|
131
|
-
pip install sol-parser-sdk-python==0.5.
|
|
156
|
+
pip install sol-parser-sdk-python==0.5.15
|
|
132
157
|
```
|
|
133
158
|
|
|
134
159
|
**源码**
|
|
@@ -244,18 +269,18 @@ Python ShredStream 热路径默认严格解析静态账户;V0 ALT 指令需传
|
|
|
244
269
|
| 描述 | 运行命令 | 源码 |
|
|
245
270
|
|------|----------|------|
|
|
246
271
|
| **PumpFun** | | |
|
|
247
|
-
| 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.
|
|
248
|
-
| 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.
|
|
249
|
-
| 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.
|
|
272
|
+
| 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.15` |
|
|
273
|
+
| 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.15` |
|
|
274
|
+
| 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.15` |
|
|
250
275
|
| **PumpSwap** | | |
|
|
251
|
-
| 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.
|
|
252
|
-
| 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.
|
|
276
|
+
| 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.15` |
|
|
277
|
+
| 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.15` |
|
|
253
278
|
| **Meteora DAMM** | | |
|
|
254
|
-
| 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.
|
|
279
|
+
| 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.15` |
|
|
255
280
|
| **多协议** | | |
|
|
256
|
-
| 订阅 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.
|
|
281
|
+
| 订阅 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.15` |
|
|
257
282
|
| **工具** | | |
|
|
258
|
-
| 按签名解析交易(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.
|
|
283
|
+
| 按签名解析交易(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.15` |
|
|
259
284
|
|
|
260
285
|
**环境变量:** gRPC 示例需要 **`GRPC_URL`** 或 **`GRPC_ENDPOINT`**,以及 **`GRPC_AUTH_TOKEN`** 或 **`GRPC_TOKEN`**(或旧名 `GEYSER_*`)。详见 **`.env.example`**。
|
|
261
286
|
|
|
@@ -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,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.13 → sol_parser_sdk_python-0.5.15}/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))
|
|
@@ -27,6 +27,23 @@ def run_replay():
|
|
|
27
27
|
w,r=f['loaded_writable'],f['loaded_readonly']
|
|
28
28
|
def parse(filter=None):
|
|
29
29
|
return parse_shred_transaction_with_loaded_addresses(raw,w,r,slot=f['slot'],tx_index=888,recv_us=999,filter=filter)
|
|
30
|
+
if f['expected'][0]['kind'] in ('RapidBuy', 'BuyPumpDelta'):
|
|
31
|
+
events = parse()
|
|
32
|
+
keys = [*m['accountKeys'], *w, *r]
|
|
33
|
+
assert len(events) == len(f['expected'])
|
|
34
|
+
for event in events:
|
|
35
|
+
assert event.type == EventType.RAW_INSTRUCTION
|
|
36
|
+
e = event.data
|
|
37
|
+
ix = m['instructions'][e.instruction_index]
|
|
38
|
+
assert e.program_id == keys[ix['programIdIndex']]
|
|
39
|
+
assert e.accounts == [keys[i] for i in ix['accounts']]
|
|
40
|
+
assert e.account_indices == ix['accounts']
|
|
41
|
+
assert e.instruction_data == list(base58.b58decode(ix['data']))
|
|
42
|
+
assert not hasattr(e, 'is_buy') and not hasattr(e, 'ix_name')
|
|
43
|
+
assert not parse(IncludeOnlyFilter([EventType.PUMP_FUN_TRADE]))
|
|
44
|
+
assert not parse(ExcludeFilter([EventType.RAW_INSTRUCTION]))
|
|
45
|
+
trace.append((f['signature'], [e.type for e in events]))
|
|
46
|
+
continue
|
|
30
47
|
events=parse(IncludeOnlyFilter([EventType.PUMP_FUN_TRADE,EventType.PUMP_FUN_CREATE]))
|
|
31
48
|
assert len(events)==len(f['expected'])
|
|
32
49
|
assert len(parse_shred_transaction(raw))==(0 if w or r else len(events))
|
|
@@ -38,6 +55,12 @@ def run_replay():
|
|
|
38
55
|
encoded=json.loads(dex_event_json_dumps(event))
|
|
39
56
|
assert encoded['data']['instruction_data']==e.instruction_data
|
|
40
57
|
assert to_typed_event({encoded['type']:encoded['data']})==e
|
|
58
|
+
assert e.is_buy is (True if e.kind in ('RapidBuy','BuyPumpDelta') else None)
|
|
59
|
+
assert e.ix_name == ('buy_exact_quote_in_v2' if e.kind == 'RapidBuy' else None)
|
|
60
|
+
legacy = dict(encoded['data'])
|
|
61
|
+
legacy.pop('is_buy'); legacy.pop('ix_name')
|
|
62
|
+
old = to_typed_event({encoded['type']:legacy})
|
|
63
|
+
assert old.is_buy is None and old.ix_name is None
|
|
41
64
|
assert e.kind==want['kind'] and e.user==want['user']
|
|
42
65
|
assert e.input_account==want['input'] and e.output_account==want['output']
|
|
43
66
|
assert e.amount_in==want['amount_in'] and e.min_amount_out==want['min_amount_out']
|
|
@@ -88,6 +111,7 @@ def check_boundaries(fixtures):
|
|
|
88
111
|
tx=VersionedTransaction(MessageV0.try_compile(wallet.pubkey(),[ix],[],Hash.default()),[wallet]);tx.verify_and_hash_message()
|
|
89
112
|
events=parse_shred_transaction(bytes(tx),filter=IncludeOnlyFilter([EventType.PUMP_FUN_TRADE]))
|
|
90
113
|
assert len(events)==1 and events[0].data.kind=='MultiHopCurveSwap' and events[0].data.amount_in==amount
|
|
114
|
+
assert events[0].data.is_buy is None and events[0].data.ix_name is None
|
|
91
115
|
assert parse_route(f['program'],data[:8]+bytes(8)+data[16:],a,EventMetadata(),0) is None
|
|
92
116
|
first=next(f for f in fixtures if f['expected'][0]['kind']=='MultiHopSwap');tx,_=decode_wire_transaction(base64.b64decode(first['wire']));keys=[*tx['message']['accountKeys'],*first['loaded_writable'],*first['loaded_readonly']]
|
|
93
117
|
ix=tx['message']['instructions'][first['expected'][0]['instruction_index']];a=[keys[i] for i in ix['accounts']];data=base58.b58decode(ix['data'])
|
|
@@ -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
|
|
517
|
+
__all__ += ["RawInstructionEvent"]
|
|
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,12 +1816,18 @@ 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
|
|
1821
|
+
return RawInstructionEvent(metadata=meta, 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'],
|
|
1822
1827
|
instruction_index=int(data['instruction_index']),user=data['user'],input_account=data['input_account'],output_account=data['output_account'],
|
|
1823
1828
|
amount_in=None if data.get('amount_in') is None else int(data['amount_in']),min_amount_out=None if data.get('min_amount_out') is None else int(data['min_amount_out']),
|
|
1824
|
-
hops=[PumpRouteHop(**h) for h in data['hops']],instruction_data=list(data['instruction_data'])
|
|
1829
|
+
hops=[PumpRouteHop(**h) for h in data['hops']],instruction_data=list(data['instruction_data']),
|
|
1830
|
+
is_buy=data.get('is_buy'),ix_name=data.get('ix_name'))
|
|
1825
1831
|
|
|
1826
1832
|
# PumpFun events
|
|
1827
1833
|
if event_type in (EventType.PUMP_FUN_TRADE, EventType.PUMP_FUN_BUY,
|