chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.5.8rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/__init__.py +8 -4
- chia/_tests/blockchain/blockchain_test_utils.py +6 -8
- chia/_tests/blockchain/test_augmented_chain.py +4 -4
- chia/_tests/blockchain/test_blockchain.py +165 -190
- chia/_tests/blockchain/test_build_chains.py +2 -4
- chia/_tests/blockchain/test_get_block_generator.py +2 -3
- chia/_tests/clvm/coin_store.py +4 -7
- chia/_tests/clvm/test_clvm_step.py +4 -4
- chia/_tests/clvm/test_puzzle_compression.py +2 -1
- chia/_tests/clvm/test_puzzle_drivers.py +2 -2
- chia/_tests/clvm/test_singletons.py +2 -4
- chia/_tests/clvm/test_spend_sim.py +2 -2
- chia/_tests/cmds/cmd_test_utils.py +27 -45
- chia/_tests/cmds/test_cmd_framework.py +6 -6
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_show.py +4 -4
- chia/_tests/cmds/test_tx_config_args.py +1 -2
- chia/_tests/cmds/testing_classes.py +4 -5
- chia/_tests/cmds/wallet/test_did.py +24 -27
- chia/_tests/cmds/wallet/test_nft.py +12 -10
- chia/_tests/cmds/wallet/test_vcs.py +11 -12
- chia/_tests/cmds/wallet/test_wallet.py +134 -89
- chia/_tests/conftest.py +59 -30
- chia/_tests/connection_utils.py +2 -2
- chia/_tests/core/cmds/test_beta.py +4 -4
- chia/_tests/core/cmds/test_keys.py +2 -3
- chia/_tests/core/cmds/test_wallet.py +15 -15
- chia/_tests/core/consensus/test_pot_iterations.py +19 -73
- chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
- chia/_tests/core/daemon/test_daemon.py +11 -11
- chia/_tests/core/data_layer/conftest.py +2 -2
- chia/_tests/core/data_layer/test_data_rpc.py +28 -14
- chia/_tests/core/data_layer/test_data_store.py +10 -10
- chia/_tests/core/data_layer/util.py +11 -11
- chia/_tests/core/farmer/test_farmer_api.py +2 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
- chia/_tests/core/full_node/stores/test_block_store.py +5 -4
- chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
- chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +3 -4
- chia/_tests/core/full_node/test_conditions.py +21 -23
- chia/_tests/core/full_node/test_full_node.py +225 -62
- chia/_tests/core/full_node/test_hint_management.py +2 -4
- chia/_tests/core/full_node/test_performance.py +0 -1
- chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
- chia/_tests/core/full_node/test_transactions.py +1 -2
- chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
- chia/_tests/core/mempool/test_mempool.py +29 -37
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
- chia/_tests/core/mempool/test_mempool_manager.py +963 -839
- chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
- chia/_tests/core/server/serve.py +7 -7
- chia/_tests/core/server/test_dos.py +1 -2
- chia/_tests/core/server/test_event_loop.py +12 -4
- chia/_tests/core/server/test_loop.py +7 -8
- chia/_tests/core/server/test_rate_limits.py +9 -8
- chia/_tests/core/server/test_server.py +61 -1
- chia/_tests/core/services/test_services.py +2 -2
- chia/_tests/core/ssl/test_ssl.py +2 -2
- chia/_tests/core/test_cost_calculation.py +2 -6
- chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
- chia/_tests/core/test_filter.py +0 -1
- chia/_tests/core/test_full_node_rpc.py +2 -2
- chia/_tests/core/test_merkle_set.py +1 -2
- chia/_tests/core/test_seeder.py +4 -4
- chia/_tests/core/util/test_config.py +4 -4
- chia/_tests/core/util/test_jsonify.py +2 -2
- chia/_tests/core/util/test_keychain.py +3 -3
- chia/_tests/core/util/test_lockfile.py +2 -1
- chia/_tests/core/util/test_log_exceptions.py +1 -2
- chia/_tests/core/util/test_streamable.py +17 -17
- chia/_tests/db/test_db_wrapper.py +3 -2
- chia/_tests/environments/wallet.py +14 -14
- chia/_tests/ether.py +4 -3
- chia/_tests/farmer_harvester/test_farmer.py +41 -24
- chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
- chia/_tests/harvester/test_harvester_api.py +11 -4
- chia/_tests/plot_sync/test_plot_sync.py +13 -11
- chia/_tests/plot_sync/test_receiver.py +11 -10
- chia/_tests/plot_sync/test_sync_simulated.py +2 -2
- chia/_tests/plot_sync/util.py +1 -2
- chia/_tests/plotting/test_plot_manager.py +7 -6
- chia/_tests/plotting/test_prover.py +30 -38
- chia/_tests/pools/test_pool_cmdline.py +4 -6
- chia/_tests/pools/test_pool_rpc.py +203 -61
- chia/_tests/pools/test_pool_wallet.py +3 -3
- chia/_tests/pools/test_wallet_pool_store.py +1 -4
- chia/_tests/process_junit.py +2 -2
- chia/_tests/rpc/test_rpc_client.py +4 -4
- chia/_tests/rpc/test_rpc_server.py +3 -3
- chia/_tests/simulation/test_simulation.py +12 -25
- chia/_tests/solver/test_solver_service.py +13 -4
- chia/_tests/testconfig.py +2 -2
- chia/_tests/timelord/test_new_peak.py +22 -11
- chia/_tests/tools/test_run_block.py +0 -2
- chia/_tests/tools/test_virtual_project.py +2 -1
- chia/_tests/util/benchmarks.py +1 -0
- chia/_tests/util/blockchain.py +38 -36
- chia/_tests/util/blockchain_mock.py +11 -11
- chia/_tests/util/build_network_protocol_files.py +2 -1
- chia/_tests/util/coin_store.py +2 -1
- chia/_tests/util/config.py +1 -1
- chia/_tests/util/db_connection.py +2 -3
- chia/_tests/util/full_sync.py +9 -11
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/get_name_puzzle_conditions.py +2 -0
- chia/_tests/util/misc.py +24 -24
- chia/_tests/util/network_protocol_data.py +20 -3
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +292 -3
- chia/_tests/util/setup_nodes.py +62 -47
- chia/_tests/util/spend_sim.py +57 -57
- chia/_tests/util/test_async_pool.py +2 -3
- chia/_tests/util/test_chia_version.py +1 -3
- chia/_tests/util/test_config.py +3 -3
- chia/_tests/util/test_full_block_utils.py +6 -3
- chia/_tests/util/test_limited_semaphore.py +1 -2
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_network.py +1 -2
- chia/_tests/util/test_priority_mutex.py +3 -3
- chia/_tests/util/test_recursive_replace.py +5 -6
- chia/_tests/util/test_replace_str_to_bytes.py +8 -10
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/time_out_assert.py +2 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
- chia/_tests/wallet/conftest.py +6 -6
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
- chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
- chia/_tests/wallet/did_wallet/test_did.py +16 -6
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
- chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
- chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
- chia/_tests/wallet/test_clvm_streamable.py +2 -3
- chia/_tests/wallet/test_coin_management.py +2 -2
- chia/_tests/wallet/test_conditions.py +45 -51
- chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
- chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
- chia/_tests/wallet/test_notifications.py +14 -14
- chia/_tests/wallet/test_signer_protocol.py +5 -5
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
- chia/_tests/wallet/test_transaction_store.py +20 -20
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +380 -228
- chia/_tests/wallet/test_wallet_action_scope.py +4 -4
- chia/_tests/wallet/test_wallet_blockchain.py +12 -12
- chia/_tests/wallet/test_wallet_coin_store.py +3 -4
- chia/_tests/wallet/test_wallet_node.py +14 -14
- chia/_tests/wallet/test_wallet_test_framework.py +2 -1
- chia/_tests/wallet/test_wallet_utils.py +2 -3
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
- chia/_tests/wallet/wallet_block_tools.py +12 -11
- chia/_tests/weight_proof/config.py +1 -0
- chia/_tests/weight_proof/test_weight_proof.py +5 -4
- chia/apis/__init__.py +21 -0
- chia/apis/farmer_stub.py +102 -0
- chia/apis/full_node_stub.py +372 -0
- chia/apis/harvester_stub.py +57 -0
- chia/apis/introducer_stub.py +35 -0
- chia/apis/solver_stub.py +30 -0
- chia/apis/stub_protocol_registry.py +21 -0
- chia/apis/timelord_stub.py +39 -0
- chia/apis/wallet_stub.py +161 -0
- chia/cmds/beta.py +3 -4
- chia/cmds/beta_funcs.py +4 -3
- chia/cmds/check_wallet_db.py +4 -4
- chia/cmds/chia.py +1 -2
- chia/cmds/cmd_classes.py +11 -13
- chia/cmds/cmd_helpers.py +11 -11
- chia/cmds/cmds_util.py +15 -15
- chia/cmds/coin_funcs.py +6 -7
- chia/cmds/coins.py +2 -3
- chia/cmds/configure.py +1 -2
- chia/cmds/data.py +42 -42
- chia/cmds/data_funcs.py +81 -81
- chia/cmds/db.py +4 -5
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev/data.py +4 -4
- chia/cmds/dev/gh.py +5 -5
- chia/cmds/dev/installers.py +2 -3
- chia/cmds/dev/mempool.py +3 -4
- chia/cmds/dev/mempool_funcs.py +4 -4
- chia/cmds/dev/sim.py +8 -8
- chia/cmds/dump_keyring.py +3 -3
- chia/cmds/farm.py +6 -8
- chia/cmds/farm_funcs.py +25 -24
- chia/cmds/init_funcs.py +4 -4
- chia/cmds/keys.py +16 -18
- chia/cmds/keys_funcs.py +36 -36
- chia/cmds/netspace.py +1 -3
- chia/cmds/netspace_funcs.py +1 -2
- chia/cmds/options.py +3 -2
- chia/cmds/param_types.py +17 -16
- chia/cmds/passphrase.py +6 -7
- chia/cmds/passphrase_funcs.py +11 -13
- chia/cmds/peer.py +1 -3
- chia/cmds/peer_funcs.py +3 -3
- chia/cmds/plotnft.py +6 -7
- chia/cmds/plotnft_funcs.py +37 -26
- chia/cmds/rpc.py +3 -3
- chia/cmds/show.py +3 -5
- chia/cmds/show_funcs.py +9 -9
- chia/cmds/sim_funcs.py +25 -26
- chia/cmds/solver.py +1 -3
- chia/cmds/solver_funcs.py +1 -2
- chia/cmds/start_funcs.py +2 -2
- chia/cmds/wallet.py +76 -81
- chia/cmds/wallet_funcs.py +206 -177
- chia/consensus/augmented_chain.py +6 -6
- chia/consensus/block_body_validation.py +19 -15
- chia/consensus/block_creation.py +25 -21
- chia/consensus/block_header_validation.py +27 -13
- chia/consensus/block_height_map.py +3 -6
- chia/consensus/block_height_map_protocol.py +2 -2
- chia/consensus/block_record.py +2 -4
- chia/consensus/blockchain.py +58 -40
- chia/consensus/blockchain_interface.py +7 -7
- chia/consensus/coin_store_protocol.py +5 -6
- chia/consensus/condition_tools.py +4 -4
- chia/consensus/cost_calculator.py +2 -3
- chia/consensus/default_constants.py +16 -13
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +3 -5
- chia/consensus/find_fork_point.py +2 -4
- chia/consensus/full_block_to_block_record.py +11 -13
- chia/consensus/generator_tools.py +2 -3
- chia/consensus/get_block_challenge.py +42 -26
- chia/consensus/get_block_generator.py +2 -3
- chia/consensus/make_sub_epoch_summary.py +8 -7
- chia/consensus/multiprocess_validation.py +31 -20
- chia/consensus/pos_quality.py +6 -23
- chia/consensus/pot_iterations.py +17 -44
- chia/consensus/signage_point.py +4 -5
- chia/consensus/vdf_info_computation.py +2 -4
- chia/daemon/client.py +8 -8
- chia/daemon/keychain_proxy.py +31 -37
- chia/daemon/server.py +32 -33
- chia/daemon/windows_signal.py +4 -3
- chia/data_layer/data_layer.py +86 -77
- chia/data_layer/data_layer_rpc_api.py +9 -9
- chia/data_layer/data_layer_rpc_client.py +13 -15
- chia/data_layer/data_layer_server.py +3 -3
- chia/data_layer/data_layer_util.py +14 -14
- chia/data_layer/data_layer_wallet.py +94 -101
- chia/data_layer/data_store.py +50 -50
- chia/data_layer/dl_wallet_store.py +9 -12
- chia/data_layer/download_data.py +8 -9
- chia/data_layer/s3_plugin_service.py +5 -9
- chia/data_layer/start_data_layer.py +5 -5
- chia/farmer/farmer.py +31 -31
- chia/farmer/farmer_api.py +45 -33
- chia/farmer/farmer_rpc_api.py +5 -4
- chia/farmer/farmer_rpc_client.py +6 -6
- chia/farmer/start_farmer.py +6 -6
- chia/full_node/block_store.py +13 -16
- chia/full_node/check_fork_next_block.py +1 -2
- chia/full_node/coin_store.py +15 -16
- chia/full_node/eligible_coin_spends.py +3 -3
- chia/full_node/fee_estimate_store.py +2 -3
- chia/full_node/fee_tracker.py +1 -2
- chia/full_node/full_block_utils.py +4 -4
- chia/full_node/full_node.py +238 -224
- chia/full_node/full_node_api.py +193 -150
- chia/full_node/full_node_rpc_api.py +53 -31
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hint_management.py +2 -2
- chia/full_node/mempool.py +17 -19
- chia/full_node/mempool_manager.py +89 -42
- chia/full_node/pending_tx_cache.py +2 -3
- chia/full_node/start_full_node.py +5 -5
- chia/full_node/sync_store.py +3 -4
- chia/full_node/tx_processing_queue.py +34 -13
- chia/full_node/weight_proof.py +61 -48
- chia/harvester/harvester.py +25 -24
- chia/harvester/harvester_api.py +61 -38
- chia/harvester/harvester_rpc_api.py +10 -10
- chia/harvester/start_harvester.py +4 -4
- chia/introducer/introducer.py +3 -3
- chia/introducer/introducer_api.py +6 -4
- chia/introducer/start_introducer.py +4 -4
- chia/legacy/keyring.py +3 -3
- chia/plot_sync/delta.py +1 -2
- chia/plot_sync/receiver.py +20 -17
- chia/plot_sync/sender.py +15 -10
- chia/plotters/bladebit.py +7 -7
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +4 -4
- chia/plotters/plotters.py +4 -4
- chia/plotters/plotters_util.py +3 -3
- chia/plotting/cache.py +20 -14
- chia/plotting/check_plots.py +26 -35
- chia/plotting/create_plots.py +22 -23
- chia/plotting/manager.py +21 -14
- chia/plotting/prover.py +59 -42
- chia/plotting/util.py +16 -16
- chia/pools/pool_config.py +2 -1
- chia/pools/pool_puzzles.py +11 -12
- chia/pools/pool_wallet.py +34 -57
- chia/pools/pool_wallet_info.py +39 -10
- chia/protocols/farmer_protocol.py +8 -9
- chia/protocols/fee_estimate.py +3 -4
- chia/protocols/full_node_protocol.py +3 -4
- chia/protocols/harvester_protocol.py +27 -15
- chia/protocols/outbound_message.py +3 -3
- chia/protocols/pool_protocol.py +8 -9
- chia/protocols/shared_protocol.py +1 -2
- chia/protocols/solver_protocol.py +9 -2
- chia/protocols/timelord_protocol.py +4 -7
- chia/protocols/wallet_protocol.py +11 -12
- chia/rpc/rpc_client.py +9 -9
- chia/rpc/rpc_server.py +17 -17
- chia/rpc/util.py +2 -2
- chia/seeder/crawler.py +8 -8
- chia/seeder/crawler_api.py +21 -27
- chia/seeder/crawler_rpc_api.py +2 -2
- chia/seeder/dns_server.py +21 -21
- chia/seeder/start_crawler.py +4 -4
- chia/server/address_manager.py +15 -16
- chia/server/api_protocol.py +11 -11
- chia/server/chia_policy.py +46 -26
- chia/server/introducer_peers.py +2 -3
- chia/server/node_discovery.py +19 -19
- chia/server/rate_limit_numbers.py +4 -5
- chia/server/rate_limits.py +4 -4
- chia/server/resolve_peer_info.py +4 -4
- chia/server/server.py +49 -52
- chia/server/signal_handlers.py +6 -6
- chia/server/start_service.py +17 -17
- chia/server/upnp.py +4 -6
- chia/server/ws_connection.py +52 -37
- chia/simulator/add_blocks_in_batches.py +1 -3
- chia/simulator/block_tools.py +312 -200
- chia/simulator/full_node_simulator.py +56 -35
- chia/simulator/keyring.py +2 -3
- chia/simulator/setup_services.py +15 -15
- chia/simulator/simulator_full_node_rpc_api.py +1 -2
- chia/simulator/simulator_full_node_rpc_client.py +1 -2
- chia/simulator/simulator_protocol.py +1 -2
- chia/simulator/simulator_test_tools.py +3 -3
- chia/simulator/start_simulator.py +7 -7
- chia/simulator/wallet_tools.py +10 -10
- chia/solver/solver.py +10 -10
- chia/solver/solver_api.py +10 -8
- chia/solver/solver_rpc_api.py +2 -2
- chia/solver/start_solver.py +4 -4
- chia/ssl/cacert.pem +148 -90
- chia/ssl/chia_ca.crt +14 -10
- chia/ssl/chia_ca_old.crt +19 -0
- chia/ssl/create_ssl.py +4 -4
- chia/ssl/renewedselfsignedca.conf +4 -0
- chia/ssl/ssl_check.py +1 -2
- chia/timelord/iters_from_block.py +1 -4
- chia/timelord/start_timelord.py +4 -4
- chia/timelord/timelord.py +44 -40
- chia/timelord/timelord_api.py +6 -4
- chia/timelord/timelord_launcher.py +2 -2
- chia/timelord/timelord_rpc_api.py +2 -2
- chia/timelord/timelord_state.py +11 -12
- chia/types/block_protocol.py +1 -3
- chia/types/blockchain_format/coin.py +1 -3
- chia/types/blockchain_format/program.py +11 -8
- chia/types/blockchain_format/proof_of_space.py +123 -76
- chia/types/blockchain_format/tree_hash.py +3 -3
- chia/types/blockchain_format/vdf.py +1 -2
- chia/types/coin_spend.py +3 -3
- chia/types/mempool_item.py +5 -5
- chia/types/mempool_submission_status.py +2 -3
- chia/types/peer_info.py +1 -2
- chia/types/unfinished_header_block.py +3 -4
- chia/types/validation_state.py +1 -2
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +5 -5
- chia/util/bech32m.py +1 -2
- chia/util/beta_metrics.py +2 -2
- chia/util/block_cache.py +4 -4
- chia/util/chia_logging.py +2 -2
- chia/util/chia_version.py +1 -2
- chia/util/config.py +15 -16
- chia/util/db_wrapper.py +26 -27
- chia/util/default_root.py +1 -2
- chia/util/errors.py +3 -3
- chia/util/file_keyring.py +14 -14
- chia/util/files.py +2 -3
- chia/util/hash.py +4 -4
- chia/util/initial-config.yaml +3 -5
- chia/util/inline_executor.py +2 -1
- chia/util/ip_address.py +1 -2
- chia/util/keychain.py +25 -27
- chia/util/keyring_wrapper.py +18 -19
- chia/util/lock.py +3 -4
- chia/util/log_exceptions.py +1 -2
- chia/util/lru_cache.py +2 -2
- chia/util/network.py +6 -6
- chia/util/path.py +2 -3
- chia/util/priority_mutex.py +2 -2
- chia/util/profiler.py +1 -2
- chia/util/safe_cancel_task.py +1 -2
- chia/util/streamable.py +22 -8
- chia/util/task_referencer.py +1 -1
- chia/util/timing.py +3 -3
- chia/util/virtual_project_analysis.py +6 -5
- chia/util/ws_message.py +2 -2
- chia/wallet/cat_wallet/cat_info.py +3 -4
- chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
- chia/wallet/cat_wallet/cat_utils.py +3 -4
- chia/wallet/cat_wallet/cat_wallet.py +61 -83
- chia/wallet/cat_wallet/lineage_store.py +3 -4
- chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
- chia/wallet/coin_selection.py +9 -10
- chia/wallet/conditions.py +120 -105
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
- chia/wallet/derivation_record.py +1 -2
- chia/wallet/derive_keys.py +2 -4
- chia/wallet/did_wallet/did_info.py +10 -11
- chia/wallet/did_wallet/did_wallet.py +36 -82
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
- chia/wallet/driver_protocol.py +5 -7
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
- chia/wallet/nft_wallet/nft_info.py +8 -9
- chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
- chia/wallet/nft_wallet/nft_wallet.py +79 -116
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
- chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
- chia/wallet/nft_wallet/uncurry_nft.py +10 -11
- chia/wallet/notification_manager.py +3 -3
- chia/wallet/notification_store.py +44 -61
- chia/wallet/outer_puzzles.py +6 -7
- chia/wallet/puzzle_drivers.py +34 -6
- chia/wallet/puzzles/clawback/drivers.py +6 -6
- chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
- chia/wallet/puzzles/load_clvm.py +1 -1
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
- chia/wallet/puzzles/singleton_top_layer.py +2 -3
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
- chia/wallet/puzzles/tails.py +3 -3
- chia/wallet/singleton.py +5 -7
- chia/wallet/singleton_record.py +3 -3
- chia/wallet/start_wallet.py +5 -5
- chia/wallet/trade_manager.py +37 -58
- chia/wallet/trade_record.py +4 -4
- chia/wallet/trading/offer.py +59 -46
- chia/wallet/trading/trade_store.py +8 -9
- chia/wallet/transaction_record.py +8 -8
- chia/wallet/uncurried_puzzle.py +1 -2
- chia/wallet/util/clvm_streamable.py +12 -12
- chia/wallet/util/compute_hints.py +4 -5
- chia/wallet/util/curry_and_treehash.py +1 -2
- chia/wallet/util/merkle_tree.py +2 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/wallet/util/signing.py +85 -0
- chia/wallet/util/tx_config.py +15 -6
- chia/wallet/util/wallet_sync_utils.py +14 -16
- chia/wallet/util/wallet_types.py +2 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
- chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
- chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
- chia/wallet/vc_wallet/vc_drivers.py +27 -27
- chia/wallet/vc_wallet/vc_store.py +5 -6
- chia/wallet/vc_wallet/vc_wallet.py +33 -61
- chia/wallet/wallet.py +50 -78
- chia/wallet/wallet_action_scope.py +11 -11
- chia/wallet/wallet_blockchain.py +12 -12
- chia/wallet/wallet_coin_record.py +12 -6
- chia/wallet/wallet_coin_store.py +24 -25
- chia/wallet/wallet_interested_store.py +3 -5
- chia/wallet/wallet_nft_store.py +10 -11
- chia/wallet/wallet_node.py +53 -61
- chia/wallet/wallet_node_api.py +5 -3
- chia/wallet/wallet_protocol.py +23 -23
- chia/wallet/wallet_puzzle_store.py +15 -18
- chia/wallet/wallet_request_types.py +778 -114
- chia/wallet/wallet_retry_store.py +1 -3
- chia/wallet/wallet_rpc_api.py +572 -909
- chia/wallet/wallet_rpc_client.py +87 -279
- chia/wallet/wallet_singleton_store.py +3 -4
- chia/wallet/wallet_state_manager.py +332 -106
- chia/wallet/wallet_transaction_store.py +11 -14
- chia/wallet/wallet_user_store.py +4 -6
- chia/wallet/wallet_weight_proof_handler.py +4 -4
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
- chia/apis.py +0 -21
- chia/consensus/check_time_locks.py +0 -57
- chia/data_layer/puzzles/__init__.py +0 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
- chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
- chia/types/coin_record.py +0 -44
- chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
|
@@ -4,7 +4,6 @@ import asyncio
|
|
|
4
4
|
import dataclasses
|
|
5
5
|
import logging
|
|
6
6
|
import time
|
|
7
|
-
from typing import Optional
|
|
8
7
|
|
|
9
8
|
from chia_rs import BlockRecord, ConsensusConstants, EndOfSubSlotBundle, FullBlock, UnfinishedBlock
|
|
10
9
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -16,6 +15,7 @@ from chia.consensus.make_sub_epoch_summary import make_sub_epoch_summary
|
|
|
16
15
|
from chia.consensus.multiprocess_validation import PreValidationResult
|
|
17
16
|
from chia.consensus.pot_iterations import calculate_sp_interval_iters
|
|
18
17
|
from chia.consensus.signage_point import SignagePoint
|
|
18
|
+
from chia.full_node.tx_processing_queue import PeerWithTx
|
|
19
19
|
from chia.protocols import timelord_protocol
|
|
20
20
|
from chia.protocols.outbound_message import Message
|
|
21
21
|
from chia.types.blockchain_format.classgroup import ClassgroupElement
|
|
@@ -29,7 +29,7 @@ log = logging.getLogger(__name__)
|
|
|
29
29
|
@streamable
|
|
30
30
|
@dataclasses.dataclass(frozen=True)
|
|
31
31
|
class FullNodeStorePeakResult(Streamable):
|
|
32
|
-
added_eos:
|
|
32
|
+
added_eos: EndOfSubSlotBundle | None
|
|
33
33
|
new_signage_points: list[tuple[uint8, SignagePoint]]
|
|
34
34
|
new_infusion_points: list[timelord_protocol.NewInfusionPointVDF]
|
|
35
35
|
|
|
@@ -38,16 +38,16 @@ class FullNodeStorePeakResult(Streamable):
|
|
|
38
38
|
class UnfinishedBlockEntry:
|
|
39
39
|
# if this is None, it means we've requested this block but not yet received
|
|
40
40
|
# it
|
|
41
|
-
unfinished_block:
|
|
41
|
+
unfinished_block: UnfinishedBlock | None
|
|
42
42
|
# If this is None, it means we've initiated validation of this block, but it
|
|
43
43
|
# hasn't completed yet
|
|
44
|
-
result:
|
|
44
|
+
result: PreValidationResult | None
|
|
45
45
|
height: uint32
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
def find_best_block(
|
|
49
|
-
result: dict[
|
|
50
|
-
) -> tuple[
|
|
49
|
+
result: dict[bytes32 | None, UnfinishedBlockEntry],
|
|
50
|
+
) -> tuple[bytes32 | None, UnfinishedBlock | None]:
|
|
51
51
|
"""
|
|
52
52
|
Given a collection of UnfinishedBlocks (all with the same reward block
|
|
53
53
|
hash), return the "best" one. i.e. the one with the smallest foliage hash.
|
|
@@ -64,7 +64,7 @@ def find_best_block(
|
|
|
64
64
|
else:
|
|
65
65
|
return foliage_hash, entry.unfinished_block
|
|
66
66
|
|
|
67
|
-
def include_block(item: tuple[
|
|
67
|
+
def include_block(item: tuple[bytes32 | None, UnfinishedBlockEntry]) -> bool:
|
|
68
68
|
foliage_hash, entry = item
|
|
69
69
|
return foliage_hash is not None and entry.unfinished_block is not None
|
|
70
70
|
|
|
@@ -104,13 +104,13 @@ class FullNodeStore:
|
|
|
104
104
|
# The inner key (the foliage hash) is Optional, where None either means
|
|
105
105
|
# it's not a transaction block, or it's a block we learned about via the old
|
|
106
106
|
# protocol, where all we get is the reward block hash.
|
|
107
|
-
_unfinished_blocks: dict[bytes32, dict[
|
|
107
|
+
_unfinished_blocks: dict[bytes32, dict[bytes32 | None, UnfinishedBlockEntry]]
|
|
108
108
|
|
|
109
109
|
# Finished slots and sps from the peak's slot onwards
|
|
110
110
|
# We store all 32 SPs for each slot, starting as 32 Nones and filling them as we go
|
|
111
111
|
# Also stores the total iters at the end of slot
|
|
112
112
|
# For the first sub-slot, EndOfSlotBundle is None
|
|
113
|
-
finished_sub_slots: list[tuple[
|
|
113
|
+
finished_sub_slots: list[tuple[EndOfSubSlotBundle | None, list[SignagePoint | None], uint128]]
|
|
114
114
|
|
|
115
115
|
# These caches maintain objects which depend on infused blocks in the reward chain, that we
|
|
116
116
|
# might receive before the blocks themselves. The dict keys are the reward chain challenge hashes.
|
|
@@ -132,10 +132,12 @@ class FullNodeStore:
|
|
|
132
132
|
recent_eos: LRUCache[bytes32, tuple[EndOfSubSlotBundle, float]]
|
|
133
133
|
|
|
134
134
|
pending_tx_request: dict[bytes32, bytes32] # tx_id: peer_id
|
|
135
|
-
|
|
135
|
+
# Map of transaction ID to the map of peer ID to its hostname, fee and cost
|
|
136
|
+
# it advertised for that transaction.
|
|
137
|
+
peers_with_tx: dict[bytes32, dict[bytes32, PeerWithTx]]
|
|
136
138
|
tx_fetch_tasks: dict[bytes32, asyncio.Task[None]] # Task id: task
|
|
137
|
-
serialized_wp_message:
|
|
138
|
-
serialized_wp_message_tip:
|
|
139
|
+
serialized_wp_message: Message | None
|
|
140
|
+
serialized_wp_message_tip: bytes32 | None
|
|
139
141
|
|
|
140
142
|
max_seen_unfinished_blocks: int
|
|
141
143
|
|
|
@@ -162,7 +164,7 @@ class FullNodeStore:
|
|
|
162
164
|
self.max_seen_unfinished_blocks = 1000
|
|
163
165
|
|
|
164
166
|
def is_requesting_unfinished_block(
|
|
165
|
-
self, reward_block_hash: bytes32, foliage_hash:
|
|
167
|
+
self, reward_block_hash: bytes32, foliage_hash: bytes32 | None
|
|
166
168
|
) -> tuple[bool, int]:
|
|
167
169
|
"""
|
|
168
170
|
Asks if we are already requesting this specific unfinished block (given
|
|
@@ -180,11 +182,11 @@ class FullNodeStore:
|
|
|
180
182
|
else:
|
|
181
183
|
return (foliage_hash in ents, len(ents))
|
|
182
184
|
|
|
183
|
-
def mark_requesting_unfinished_block(self, reward_block_hash: bytes32, foliage_hash:
|
|
185
|
+
def mark_requesting_unfinished_block(self, reward_block_hash: bytes32, foliage_hash: bytes32 | None) -> None:
|
|
184
186
|
ents = self._unfinished_blocks.setdefault(reward_block_hash, {})
|
|
185
187
|
ents.setdefault(foliage_hash, UnfinishedBlockEntry(None, None, uint32(0)))
|
|
186
188
|
|
|
187
|
-
def remove_requesting_unfinished_block(self, reward_block_hash: bytes32, foliage_hash:
|
|
189
|
+
def remove_requesting_unfinished_block(self, reward_block_hash: bytes32, foliage_hash: bytes32 | None) -> None:
|
|
188
190
|
reward_ents = self._unfinished_blocks.get(reward_block_hash)
|
|
189
191
|
if reward_ents is None:
|
|
190
192
|
return
|
|
@@ -209,7 +211,7 @@ class FullNodeStore:
|
|
|
209
211
|
|
|
210
212
|
def get_candidate_block(
|
|
211
213
|
self, quality_string: bytes32, backup: bool = False
|
|
212
|
-
) ->
|
|
214
|
+
) -> tuple[uint32, UnfinishedBlock] | None:
|
|
213
215
|
if backup:
|
|
214
216
|
return self.candidate_backup_blocks.get(quality_string, None)
|
|
215
217
|
else:
|
|
@@ -254,7 +256,7 @@ class FullNodeStore:
|
|
|
254
256
|
unfinished_block, result, height
|
|
255
257
|
)
|
|
256
258
|
|
|
257
|
-
def get_unfinished_block(self, unfinished_reward_hash: bytes32) ->
|
|
259
|
+
def get_unfinished_block(self, unfinished_reward_hash: bytes32) -> UnfinishedBlock | None:
|
|
258
260
|
result = self._unfinished_blocks.get(unfinished_reward_hash, None)
|
|
259
261
|
if result is None:
|
|
260
262
|
return None
|
|
@@ -269,8 +271,8 @@ class FullNodeStore:
|
|
|
269
271
|
return block
|
|
270
272
|
|
|
271
273
|
def get_unfinished_block2(
|
|
272
|
-
self, unfinished_reward_hash: bytes32, unfinished_foliage_hash:
|
|
273
|
-
) -> tuple[
|
|
274
|
+
self, unfinished_reward_hash: bytes32, unfinished_foliage_hash: bytes32 | None
|
|
275
|
+
) -> tuple[UnfinishedBlock | None, int, bool]:
|
|
274
276
|
"""
|
|
275
277
|
Looks up an UnfinishedBlock by its reward block hash and foliage hash.
|
|
276
278
|
If the foliage hash is None (e.g. it's not a transaction block), we fall
|
|
@@ -304,7 +306,7 @@ class FullNodeStore:
|
|
|
304
306
|
# have a foliage hash. That's why unfinished_foliage_hash is not Optional.
|
|
305
307
|
def get_unfinished_block_result(
|
|
306
308
|
self, unfinished_reward_hash: bytes32, unfinished_foliage_hash: bytes32
|
|
307
|
-
) ->
|
|
309
|
+
) -> UnfinishedBlockEntry | None:
|
|
308
310
|
result = self._unfinished_blocks.get(unfinished_reward_hash, None)
|
|
309
311
|
if result is None:
|
|
310
312
|
return None
|
|
@@ -323,7 +325,7 @@ class FullNodeStore:
|
|
|
323
325
|
def clear_unfinished_blocks_below(self, height: uint32) -> None:
|
|
324
326
|
del_partial: list[bytes32] = []
|
|
325
327
|
for partial_hash, entry in self._unfinished_blocks.items():
|
|
326
|
-
del_foliage: list[
|
|
328
|
+
del_foliage: list[bytes32 | None] = []
|
|
327
329
|
for foliage_hash, ube in entry.items():
|
|
328
330
|
if ube.height < height:
|
|
329
331
|
del_foliage.append(foliage_hash)
|
|
@@ -392,7 +394,7 @@ class FullNodeStore:
|
|
|
392
394
|
def clear_slots(self) -> None:
|
|
393
395
|
self.finished_sub_slots.clear()
|
|
394
396
|
|
|
395
|
-
def get_sub_slot(self, challenge_hash: bytes32) ->
|
|
397
|
+
def get_sub_slot(self, challenge_hash: bytes32) -> tuple[EndOfSubSlotBundle, int, uint128] | None:
|
|
396
398
|
assert len(self.finished_sub_slots) >= 1
|
|
397
399
|
for index, (sub_slot, _, total_iters) in enumerate(self.finished_sub_slots):
|
|
398
400
|
if sub_slot is not None and sub_slot.challenge_chain.get_hash() == challenge_hash:
|
|
@@ -407,11 +409,11 @@ class FullNodeStore:
|
|
|
407
409
|
self,
|
|
408
410
|
eos: EndOfSubSlotBundle,
|
|
409
411
|
blocks: BlockRecordsProtocol,
|
|
410
|
-
peak:
|
|
412
|
+
peak: BlockRecord | None,
|
|
411
413
|
next_sub_slot_iters: uint64,
|
|
412
414
|
next_difficulty: uint64,
|
|
413
|
-
peak_full_block:
|
|
414
|
-
) ->
|
|
415
|
+
peak_full_block: FullBlock | None,
|
|
416
|
+
) -> list[timelord_protocol.NewInfusionPointVDF] | None:
|
|
415
417
|
"""
|
|
416
418
|
Returns false if not added. Returns a list if added. The list contains all infusion points that depended
|
|
417
419
|
on this sub slot
|
|
@@ -427,8 +429,8 @@ class FullNodeStore:
|
|
|
427
429
|
rc_challenge: bytes32 = (
|
|
428
430
|
last_slot.reward_chain.get_hash() if last_slot is not None else self.constants.GENESIS_CHALLENGE
|
|
429
431
|
)
|
|
430
|
-
icc_challenge:
|
|
431
|
-
icc_iters:
|
|
432
|
+
icc_challenge: bytes32 | None = None
|
|
433
|
+
icc_iters: uint64 | None = None
|
|
432
434
|
|
|
433
435
|
# Skip if already present
|
|
434
436
|
for slot, _, _ in self.finished_sub_slots:
|
|
@@ -678,7 +680,7 @@ class FullNodeStore:
|
|
|
678
680
|
self,
|
|
679
681
|
index: uint8,
|
|
680
682
|
blocks: BlockRecordsProtocol,
|
|
681
|
-
peak:
|
|
683
|
+
peak: BlockRecord | None,
|
|
682
684
|
next_sub_slot_iters: uint64,
|
|
683
685
|
signage_point: SignagePoint,
|
|
684
686
|
skip_vdf_validation: bool = False,
|
|
@@ -814,7 +816,7 @@ class FullNodeStore:
|
|
|
814
816
|
self.add_to_future_sp(signage_point, index)
|
|
815
817
|
return False
|
|
816
818
|
|
|
817
|
-
def get_signage_point(self, cc_signage_point: bytes32) ->
|
|
819
|
+
def get_signage_point(self, cc_signage_point: bytes32) -> SignagePoint | None:
|
|
818
820
|
assert len(self.finished_sub_slots) >= 1
|
|
819
821
|
if cc_signage_point == self.constants.GENESIS_CHALLENGE:
|
|
820
822
|
return SignagePoint(None, None, None, None)
|
|
@@ -831,7 +833,7 @@ class FullNodeStore:
|
|
|
831
833
|
|
|
832
834
|
def get_signage_point_by_index_and_cc_output(
|
|
833
835
|
self, cc_signage_point: bytes32, challenge: bytes32, index: uint8
|
|
834
|
-
) ->
|
|
836
|
+
) -> SignagePoint | None:
|
|
835
837
|
assert len(self.finished_sub_slots) >= 1
|
|
836
838
|
for sub_slot, sps, _ in self.finished_sub_slots:
|
|
837
839
|
if sub_slot is not None:
|
|
@@ -842,7 +844,7 @@ class FullNodeStore:
|
|
|
842
844
|
if index == 0:
|
|
843
845
|
# first SP in the sub slot
|
|
844
846
|
return SignagePoint(None, None, None, None)
|
|
845
|
-
sp:
|
|
847
|
+
sp: SignagePoint | None = sps[index]
|
|
846
848
|
if sp is None:
|
|
847
849
|
return None
|
|
848
850
|
assert sp.cc_vdf is not None
|
|
@@ -852,7 +854,7 @@ class FullNodeStore:
|
|
|
852
854
|
|
|
853
855
|
def get_signage_point_by_index(
|
|
854
856
|
self, challenge_hash: bytes32, index: uint8, last_rc_infusion: bytes32
|
|
855
|
-
) ->
|
|
857
|
+
) -> SignagePoint | None:
|
|
856
858
|
assert len(self.finished_sub_slots) >= 1
|
|
857
859
|
for sub_slot, sps, _ in self.finished_sub_slots:
|
|
858
860
|
if sub_slot is not None:
|
|
@@ -863,7 +865,7 @@ class FullNodeStore:
|
|
|
863
865
|
if cc_hash == challenge_hash:
|
|
864
866
|
if index == 0:
|
|
865
867
|
return SignagePoint(None, None, None, None)
|
|
866
|
-
sp:
|
|
868
|
+
sp: SignagePoint | None = sps[index]
|
|
867
869
|
if sp is not None:
|
|
868
870
|
assert sp.rc_vdf is not None
|
|
869
871
|
if sp.rc_vdf.challenge == last_rc_infusion:
|
|
@@ -885,7 +887,7 @@ class FullNodeStore:
|
|
|
885
887
|
if cc_hash == challenge_hash:
|
|
886
888
|
found_rc_hash = False
|
|
887
889
|
for i in range(index):
|
|
888
|
-
sp:
|
|
890
|
+
sp: SignagePoint | None = sps[i]
|
|
889
891
|
if sp is not None and sp.rc_vdf is not None and sp.rc_vdf.challenge == last_rc_infusion:
|
|
890
892
|
found_rc_hash = True
|
|
891
893
|
sp = sps[index]
|
|
@@ -902,9 +904,9 @@ class FullNodeStore:
|
|
|
902
904
|
self,
|
|
903
905
|
peak: BlockRecord,
|
|
904
906
|
peak_full_block: FullBlock,
|
|
905
|
-
sp_sub_slot:
|
|
906
|
-
ip_sub_slot:
|
|
907
|
-
fork_block:
|
|
907
|
+
sp_sub_slot: EndOfSubSlotBundle | None, # None if not overflow, or in first/second slot
|
|
908
|
+
ip_sub_slot: EndOfSubSlotBundle | None, # None if in first slot
|
|
909
|
+
fork_block: BlockRecord | None,
|
|
908
910
|
blocks: BlockRecordsProtocol,
|
|
909
911
|
next_sub_slot_iters: uint64,
|
|
910
912
|
next_difficulty: uint64,
|
|
@@ -922,8 +924,8 @@ class FullNodeStore:
|
|
|
922
924
|
self.initialize_genesis_sub_slot()
|
|
923
925
|
else:
|
|
924
926
|
# This is not the first sub-slot in the chain
|
|
925
|
-
sp_sub_slot_sps: list[
|
|
926
|
-
ip_sub_slot_sps: list[
|
|
927
|
+
sp_sub_slot_sps: list[SignagePoint | None] = [None] * self.constants.NUM_SPS_SUB_SLOT
|
|
928
|
+
ip_sub_slot_sps: list[SignagePoint | None] = [None] * self.constants.NUM_SPS_SUB_SLOT
|
|
927
929
|
|
|
928
930
|
if fork_block is not None and fork_block.sub_slot_iters != peak.sub_slot_iters:
|
|
929
931
|
# If there was a reorg and a difficulty adjustment, just clear all the slots
|
|
@@ -939,7 +941,7 @@ class FullNodeStore:
|
|
|
939
941
|
if fork_block is None:
|
|
940
942
|
# If this is not a reorg, we still want to remove signage points after the new peak
|
|
941
943
|
fork_block = peak
|
|
942
|
-
replaced_sps: list[
|
|
944
|
+
replaced_sps: list[SignagePoint | None] = [] # index 0 is the end of sub slot
|
|
943
945
|
for i, sp in enumerate(sps):
|
|
944
946
|
if (total_iters + i * interval_iters) < fork_block.total_iters:
|
|
945
947
|
# Sps before the fork point as still valid
|
|
@@ -968,7 +970,7 @@ class FullNodeStore:
|
|
|
968
970
|
ip_sub_slot_total_iters = peak.ip_sub_slot_total_iters(self.constants)
|
|
969
971
|
self.finished_sub_slots.append((ip_sub_slot, ip_sub_slot_sps, ip_sub_slot_total_iters))
|
|
970
972
|
|
|
971
|
-
new_eos:
|
|
973
|
+
new_eos: EndOfSubSlotBundle | None = None
|
|
972
974
|
new_sps: list[tuple[uint8, SignagePoint]] = []
|
|
973
975
|
new_ips: list[timelord_protocol.NewInfusionPointVDF] = []
|
|
974
976
|
|
|
@@ -1006,9 +1008,9 @@ class FullNodeStore:
|
|
|
1006
1008
|
def get_finished_sub_slots(
|
|
1007
1009
|
self,
|
|
1008
1010
|
block_records: BlockRecordsProtocol,
|
|
1009
|
-
prev_b:
|
|
1011
|
+
prev_b: BlockRecord | None,
|
|
1010
1012
|
last_challenge_to_add: bytes32,
|
|
1011
|
-
) ->
|
|
1013
|
+
) -> list[EndOfSubSlotBundle] | None:
|
|
1012
1014
|
"""
|
|
1013
1015
|
Retrieves the EndOfSubSlotBundles that are in the store either:
|
|
1014
1016
|
1. From the starting challenge if prev_b is None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from collections.abc import Callable
|
|
4
4
|
|
|
5
5
|
from chia_rs.sized_bytes import bytes32
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ def get_hints_and_subscription_coin_ids(
|
|
|
16
16
|
# Returns the hints that we need to add to the DB, and the coin ids that need to be looked up
|
|
17
17
|
|
|
18
18
|
# Finds the coin IDs that we need to lookup in order to notify wallets of hinted transactions
|
|
19
|
-
hint:
|
|
19
|
+
hint: bytes | None
|
|
20
20
|
hints_to_add: list[tuple[bytes32, bytes]] = []
|
|
21
21
|
|
|
22
22
|
# Goes through additions and removals for each block and flattens to a map and a set
|
chia/full_node/mempool.py
CHANGED
|
@@ -7,11 +7,9 @@ from dataclasses import dataclass
|
|
|
7
7
|
from datetime import datetime
|
|
8
8
|
from enum import Enum
|
|
9
9
|
from time import monotonic
|
|
10
|
-
from typing import Optional
|
|
11
10
|
|
|
12
11
|
from chia_rs import (
|
|
13
12
|
DONT_VALIDATE_SIGNATURE,
|
|
14
|
-
MEMPOOL_MODE,
|
|
15
13
|
AugSchemeMPL,
|
|
16
14
|
BlockBuilder,
|
|
17
15
|
Coin,
|
|
@@ -74,7 +72,7 @@ class MempoolRemoveInfo:
|
|
|
74
72
|
@dataclass
|
|
75
73
|
class MempoolAddInfo:
|
|
76
74
|
removals: list[MempoolRemoveInfo]
|
|
77
|
-
error:
|
|
75
|
+
error: Err | None
|
|
78
76
|
|
|
79
77
|
|
|
80
78
|
class MempoolRemoveReason(Enum):
|
|
@@ -146,7 +144,7 @@ class Mempool:
|
|
|
146
144
|
self.mempool_info: MempoolInfo = mempool_info
|
|
147
145
|
self.fee_estimator: FeeEstimatorInterface = fee_estimator
|
|
148
146
|
|
|
149
|
-
def
|
|
147
|
+
def close(self) -> None:
|
|
150
148
|
self._db_conn.close()
|
|
151
149
|
|
|
152
150
|
def _row_to_item(self, row: sqlite3.Row) -> MempoolItem:
|
|
@@ -255,7 +253,7 @@ class Mempool:
|
|
|
255
253
|
row = cursor.fetchone()
|
|
256
254
|
return int(row[0])
|
|
257
255
|
|
|
258
|
-
def get_item_by_id(self, item_id: bytes32) ->
|
|
256
|
+
def get_item_by_id(self, item_id: bytes32) -> MempoolItem | None:
|
|
259
257
|
with self._db_conn:
|
|
260
258
|
cursor = self._db_conn.execute("SELECT * FROM tx WHERE name=?", (item_id,))
|
|
261
259
|
row = cursor.fetchone()
|
|
@@ -289,7 +287,7 @@ class Mempool:
|
|
|
289
287
|
items.extend(self._row_to_item(row) for row in cursor)
|
|
290
288
|
return items
|
|
291
289
|
|
|
292
|
-
def get_min_fee_rate(self, cost: int) ->
|
|
290
|
+
def get_min_fee_rate(self, cost: int) -> float | None:
|
|
293
291
|
"""
|
|
294
292
|
Gets the minimum fpc rate that a transaction with specified cost will need in order to get included.
|
|
295
293
|
"""
|
|
@@ -505,15 +503,15 @@ class Mempool:
|
|
|
505
503
|
def create_block_generator(
|
|
506
504
|
self,
|
|
507
505
|
constants: ConsensusConstants,
|
|
508
|
-
|
|
506
|
+
prev_tx_height: uint32,
|
|
509
507
|
timeout: float,
|
|
510
|
-
) ->
|
|
508
|
+
) -> NewBlockGenerator | None:
|
|
511
509
|
"""
|
|
512
|
-
|
|
513
|
-
re-run its puzzle.
|
|
510
|
+
prev_tx_height is needed in case we fast-forward a transaction and we
|
|
511
|
+
need to re-run its puzzle.
|
|
514
512
|
"""
|
|
515
513
|
|
|
516
|
-
mempool_bundle = self.create_bundle_from_mempool_items(constants,
|
|
514
|
+
mempool_bundle = self.create_bundle_from_mempool_items(constants, prev_tx_height, timeout)
|
|
517
515
|
if mempool_bundle is None:
|
|
518
516
|
return None
|
|
519
517
|
|
|
@@ -535,7 +533,7 @@ class Mempool:
|
|
|
535
533
|
f"spends: {len(removals)} additions: {len(additions)}",
|
|
536
534
|
)
|
|
537
535
|
|
|
538
|
-
flags = get_flags_for_height_and_constants(
|
|
536
|
+
flags = get_flags_for_height_and_constants(prev_tx_height, constants) | DONT_VALIDATE_SIGNATURE
|
|
539
537
|
|
|
540
538
|
err, conds = run_block_generator2(
|
|
541
539
|
block_program,
|
|
@@ -551,7 +549,7 @@ class Mempool:
|
|
|
551
549
|
if err is not None: # pragma: no cover
|
|
552
550
|
log.error(
|
|
553
551
|
f"Failed to compute block cost during farming: {err} "
|
|
554
|
-
f"height: {
|
|
552
|
+
f"prev-tx-height: {prev_tx_height} "
|
|
555
553
|
f"generator: {bytes(block_program).hex()}"
|
|
556
554
|
)
|
|
557
555
|
return None
|
|
@@ -570,8 +568,8 @@ class Mempool:
|
|
|
570
568
|
)
|
|
571
569
|
|
|
572
570
|
def create_bundle_from_mempool_items(
|
|
573
|
-
self, constants: ConsensusConstants,
|
|
574
|
-
) ->
|
|
571
|
+
self, constants: ConsensusConstants, prev_tx_height: uint32, timeout: float = 1.0
|
|
572
|
+
) -> tuple[SpendBundle, list[Coin]] | None:
|
|
575
573
|
cost_sum = 0 # Checks that total cost does not exceed block maximum
|
|
576
574
|
fee_sum = 0 # Checks that total fees don't exceed 64 bits
|
|
577
575
|
processed_spend_bundles = 0
|
|
@@ -624,7 +622,7 @@ class Mempool:
|
|
|
624
622
|
cost_saving = 0
|
|
625
623
|
else:
|
|
626
624
|
bundle_coin_spends = singleton_ff.process_fast_forward_spends(
|
|
627
|
-
mempool_item=item,
|
|
625
|
+
mempool_item=item, prev_tx_height=prev_tx_height, constants=constants
|
|
628
626
|
)
|
|
629
627
|
unique_coin_spends, cost_saving, unique_additions = dedup_coin_spends.get_deduplication_info(
|
|
630
628
|
bundle_coin_spends=bundle_coin_spends
|
|
@@ -687,8 +685,8 @@ class Mempool:
|
|
|
687
685
|
return agg, additions
|
|
688
686
|
|
|
689
687
|
def create_block_generator2(
|
|
690
|
-
self, constants: ConsensusConstants,
|
|
691
|
-
) ->
|
|
688
|
+
self, constants: ConsensusConstants, prev_tx_height: uint32, timeout: float
|
|
689
|
+
) -> NewBlockGenerator | None:
|
|
692
690
|
fee_sum = 0 # Checks that total fees don't exceed 64 bits
|
|
693
691
|
additions: list[Coin] = []
|
|
694
692
|
removals: list[Coin] = []
|
|
@@ -723,7 +721,7 @@ class Mempool:
|
|
|
723
721
|
assert item.conds is not None
|
|
724
722
|
cost = item.conds.condition_cost + item.conds.execution_cost
|
|
725
723
|
bundle_coin_spends = singleton_ff.process_fast_forward_spends(
|
|
726
|
-
mempool_item=item,
|
|
724
|
+
mempool_item=item, prev_tx_height=prev_tx_height, constants=constants
|
|
727
725
|
)
|
|
728
726
|
unique_coin_spends, cost_saving, unique_additions = dedup_coin_spends.get_deduplication_info(
|
|
729
727
|
bundle_coin_spends=bundle_coin_spends
|