chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__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_blockchain_transactions.py +5 -2
- 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 +66 -31
- 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 +273 -70
- chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
- 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 +198 -30
- chia/_tests/core/mempool/test_mempool.py +54 -50
- 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 +988 -854
- 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 +9 -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 +63 -60
- 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 +17 -17
- 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 +16 -15
- 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 +374 -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 +19 -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 +50 -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 +239 -223
- chia/full_node/full_node_api.py +197 -152
- chia/full_node/full_node_rpc_api.py +34 -32
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hard_fork_utils.py +44 -0
- 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 +120 -36
- 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 +4 -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 +24 -10
- 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 +142 -106
- 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.6.0rc2.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
- 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.6.0rc2.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import time
|
|
4
|
-
from typing import Any
|
|
4
|
+
from typing import Any
|
|
5
5
|
|
|
6
6
|
from chia_rs import (
|
|
7
7
|
BlockRecord,
|
|
@@ -58,12 +58,12 @@ class WalletBlockTools(BlockTools):
|
|
|
58
58
|
def get_consecutive_blocks(
|
|
59
59
|
self,
|
|
60
60
|
num_blocks: int,
|
|
61
|
-
block_list_input:
|
|
61
|
+
block_list_input: list[FullBlock] | None = None,
|
|
62
62
|
*,
|
|
63
|
-
farmer_reward_puzzle_hash:
|
|
64
|
-
pool_reward_puzzle_hash:
|
|
65
|
-
transaction_data:
|
|
66
|
-
genesis_timestamp:
|
|
63
|
+
farmer_reward_puzzle_hash: bytes32 | None = None,
|
|
64
|
+
pool_reward_puzzle_hash: bytes32 | None = None,
|
|
65
|
+
transaction_data: SpendBundle | None = None,
|
|
66
|
+
genesis_timestamp: uint64 | None = None,
|
|
67
67
|
**kwargs: Any, # We're overriding so there's many arguments no longer used.
|
|
68
68
|
) -> list[FullBlock]:
|
|
69
69
|
assert num_blocks > 0
|
|
@@ -86,7 +86,7 @@ class WalletBlockTools(BlockTools):
|
|
|
86
86
|
height_to_hash, _, blocks = load_block_list(block_list_input, constants)
|
|
87
87
|
|
|
88
88
|
if len(block_list_input) > 0:
|
|
89
|
-
latest_block:
|
|
89
|
+
latest_block: BlockRecord | None = blocks[block_list_input[-1].header_hash]
|
|
90
90
|
assert latest_block is not None
|
|
91
91
|
assert latest_block.timestamp is not None
|
|
92
92
|
last_timestamp = latest_block.timestamp
|
|
@@ -97,7 +97,7 @@ class WalletBlockTools(BlockTools):
|
|
|
97
97
|
for _ in range(num_blocks):
|
|
98
98
|
additions = []
|
|
99
99
|
removals = []
|
|
100
|
-
block_generator:
|
|
100
|
+
block_generator: BlockGenerator | None = None
|
|
101
101
|
if transaction_data is not None and len(block_list_input) > 0:
|
|
102
102
|
additions = compute_additions_unchecked(transaction_data)
|
|
103
103
|
removals = transaction_data.removals()
|
|
@@ -161,7 +161,7 @@ def load_block_list(
|
|
|
161
161
|
def finish_block(
|
|
162
162
|
constants: ConsensusConstants,
|
|
163
163
|
unfinished_block: UnfinishedBlock,
|
|
164
|
-
prev_block:
|
|
164
|
+
prev_block: BlockRecord | None,
|
|
165
165
|
blocks: dict[bytes32, BlockRecord],
|
|
166
166
|
) -> tuple[FullBlock, BlockRecord]:
|
|
167
167
|
if prev_block is None:
|
|
@@ -187,6 +187,7 @@ def finish_block(
|
|
|
187
187
|
G2Element(),
|
|
188
188
|
DEFAULT_VDF_INFO,
|
|
189
189
|
DEFAULT_VDF_INFO,
|
|
190
|
+
None, # header_mmr_root
|
|
190
191
|
prev_block is not None,
|
|
191
192
|
),
|
|
192
193
|
DEFAULT_VDF_PROOF,
|
|
@@ -211,8 +212,8 @@ def get_full_block_and_block_record(
|
|
|
211
212
|
last_timestamp: uint64,
|
|
212
213
|
farmer_reward_puzzlehash: bytes32,
|
|
213
214
|
pool_target: PoolTarget,
|
|
214
|
-
prev_block:
|
|
215
|
-
block_generator:
|
|
215
|
+
prev_block: BlockRecord | None,
|
|
216
|
+
block_generator: BlockGenerator | None,
|
|
216
217
|
additions: list[Coin],
|
|
217
218
|
removals: list[Coin],
|
|
218
219
|
) -> tuple[FullBlock, BlockRecord, float]:
|
|
@@ -47,7 +47,6 @@ async def load_blocks_dont_validate(
|
|
|
47
47
|
cc_sp,
|
|
48
48
|
block.height,
|
|
49
49
|
difficulty,
|
|
50
|
-
sub_slot_iters,
|
|
51
50
|
uint32(0), # prev_tx_block(blocks, prev_b), todo need to get height of prev tx block somehow here
|
|
52
51
|
)
|
|
53
52
|
assert required_iters is not None
|
|
@@ -99,15 +98,17 @@ async def _test_map_summaries(
|
|
|
99
98
|
|
|
100
99
|
|
|
101
100
|
class TestWeightProof:
|
|
101
|
+
# This test requires at least two sub epoch summaries in the block chain,
|
|
102
|
+
# for some test chains, 400 blocks is not enough
|
|
102
103
|
@pytest.mark.anyio
|
|
103
104
|
async def test_weight_proof_map_summaries_1(
|
|
104
|
-
self,
|
|
105
|
+
self, default_1000_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
|
|
105
106
|
) -> None:
|
|
106
107
|
header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
|
|
107
|
-
|
|
108
|
+
default_1000_blocks, blockchain_constants
|
|
108
109
|
)
|
|
109
110
|
await _test_map_summaries(
|
|
110
|
-
|
|
111
|
+
default_1000_blocks, header_cache, height_to_hash, sub_blocks, summaries, blockchain_constants
|
|
111
112
|
)
|
|
112
113
|
|
|
113
114
|
@pytest.mark.anyio
|
chia/apis/__init__.py
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from chia.apis.farmer_stub import FarmerApiStub
|
|
4
|
+
from chia.apis.full_node_stub import FullNodeApiStub
|
|
5
|
+
from chia.apis.harvester_stub import HarvesterApiStub
|
|
6
|
+
from chia.apis.introducer_stub import IntroducerApiStub
|
|
7
|
+
from chia.apis.solver_stub import SolverApiStub
|
|
8
|
+
from chia.apis.stub_protocol_registry import StubMetadataRegistry
|
|
9
|
+
from chia.apis.timelord_stub import TimelordApiStub
|
|
10
|
+
from chia.apis.wallet_stub import WalletNodeApiStub
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"FarmerApiStub",
|
|
14
|
+
"FullNodeApiStub",
|
|
15
|
+
"HarvesterApiStub",
|
|
16
|
+
"IntroducerApiStub",
|
|
17
|
+
"SolverApiStub",
|
|
18
|
+
"StubMetadataRegistry",
|
|
19
|
+
"TimelordApiStub",
|
|
20
|
+
"WalletNodeApiStub",
|
|
21
|
+
]
|
chia/apis/farmer_stub.py
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import ClassVar
|
|
5
|
+
|
|
6
|
+
from typing_extensions import Protocol
|
|
7
|
+
|
|
8
|
+
from chia.protocols import farmer_protocol, harvester_protocol
|
|
9
|
+
from chia.protocols.harvester_protocol import (
|
|
10
|
+
PlotSyncDone,
|
|
11
|
+
PlotSyncPathList,
|
|
12
|
+
PlotSyncPlotList,
|
|
13
|
+
PlotSyncStart,
|
|
14
|
+
RespondPlots,
|
|
15
|
+
RespondSignatures,
|
|
16
|
+
)
|
|
17
|
+
from chia.protocols.outbound_message import Message
|
|
18
|
+
from chia.server.api_protocol import ApiMetadata, ApiProtocol
|
|
19
|
+
from chia.server.ws_connection import WSChiaConnection
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class FarmerApiStub(ApiProtocol, Protocol):
|
|
23
|
+
"""Non-functional API stub for FarmerAPI
|
|
24
|
+
|
|
25
|
+
This is a protocol definition only - methods are not implemented and should
|
|
26
|
+
never be called. Use the actual FarmerAPI implementation at runtime.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
log: logging.Logger
|
|
30
|
+
# Create a concrete instance for decorators while keeping the ClassVar type hint for mypy
|
|
31
|
+
metadata: ClassVar[ApiMetadata] = ApiMetadata()
|
|
32
|
+
|
|
33
|
+
def ready(self) -> bool:
|
|
34
|
+
"""Check if the farmer is ready."""
|
|
35
|
+
...
|
|
36
|
+
|
|
37
|
+
@metadata.request(peer_required=True)
|
|
38
|
+
async def new_proof_of_space(
|
|
39
|
+
self, new_proof_of_space: harvester_protocol.NewProofOfSpace, peer: WSChiaConnection
|
|
40
|
+
) -> None:
|
|
41
|
+
"""Handle new proof of space from harvester."""
|
|
42
|
+
...
|
|
43
|
+
|
|
44
|
+
@metadata.request()
|
|
45
|
+
async def respond_signatures(self, response: RespondSignatures) -> None:
|
|
46
|
+
"""Handle signature response from harvester."""
|
|
47
|
+
...
|
|
48
|
+
|
|
49
|
+
@metadata.request()
|
|
50
|
+
async def new_signage_point(self, new_signage_point: farmer_protocol.NewSignagePoint) -> None:
|
|
51
|
+
"""Handle new signage point from full node."""
|
|
52
|
+
...
|
|
53
|
+
|
|
54
|
+
@metadata.request()
|
|
55
|
+
async def request_signed_values(self, full_node_request: farmer_protocol.RequestSignedValues) -> Message | None:
|
|
56
|
+
"""Handle request for signed values from full node."""
|
|
57
|
+
...
|
|
58
|
+
|
|
59
|
+
@metadata.request(peer_required=True)
|
|
60
|
+
async def farming_info(self, request: farmer_protocol.FarmingInfo, peer: WSChiaConnection) -> None:
|
|
61
|
+
"""Handle farming info from full node."""
|
|
62
|
+
...
|
|
63
|
+
|
|
64
|
+
@metadata.request(peer_required=True)
|
|
65
|
+
async def respond_plots(self, _: RespondPlots, peer: WSChiaConnection) -> None:
|
|
66
|
+
"""Handle respond plots from harvester."""
|
|
67
|
+
...
|
|
68
|
+
|
|
69
|
+
@metadata.request(peer_required=True)
|
|
70
|
+
async def plot_sync_start(self, message: PlotSyncStart, peer: WSChiaConnection) -> None:
|
|
71
|
+
"""Handle plot sync start."""
|
|
72
|
+
...
|
|
73
|
+
|
|
74
|
+
@metadata.request(peer_required=True)
|
|
75
|
+
async def plot_sync_loaded(self, message: PlotSyncPlotList, peer: WSChiaConnection) -> None:
|
|
76
|
+
"""Handle plot sync loaded."""
|
|
77
|
+
...
|
|
78
|
+
|
|
79
|
+
@metadata.request(peer_required=True)
|
|
80
|
+
async def plot_sync_removed(self, message: PlotSyncPathList, peer: WSChiaConnection) -> None:
|
|
81
|
+
"""Handle plot sync removed."""
|
|
82
|
+
...
|
|
83
|
+
|
|
84
|
+
@metadata.request(peer_required=True)
|
|
85
|
+
async def plot_sync_invalid(self, message: PlotSyncPathList, peer: WSChiaConnection) -> None:
|
|
86
|
+
"""Handle plot sync invalid."""
|
|
87
|
+
...
|
|
88
|
+
|
|
89
|
+
@metadata.request(peer_required=True)
|
|
90
|
+
async def plot_sync_keys_missing(self, message: PlotSyncPathList, peer: WSChiaConnection) -> None:
|
|
91
|
+
"""Handle plot sync keys missing."""
|
|
92
|
+
...
|
|
93
|
+
|
|
94
|
+
@metadata.request(peer_required=True)
|
|
95
|
+
async def plot_sync_duplicates(self, message: PlotSyncPathList, peer: WSChiaConnection) -> None:
|
|
96
|
+
"""Handle plot sync duplicates."""
|
|
97
|
+
...
|
|
98
|
+
|
|
99
|
+
@metadata.request(peer_required=True)
|
|
100
|
+
async def plot_sync_done(self, message: PlotSyncDone, peer: WSChiaConnection) -> None:
|
|
101
|
+
"""Handle plot sync done."""
|
|
102
|
+
...
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import ClassVar
|
|
5
|
+
|
|
6
|
+
from typing_extensions import Protocol
|
|
7
|
+
|
|
8
|
+
from chia.protocols import (
|
|
9
|
+
farmer_protocol,
|
|
10
|
+
full_node_protocol,
|
|
11
|
+
introducer_protocol,
|
|
12
|
+
timelord_protocol,
|
|
13
|
+
wallet_protocol,
|
|
14
|
+
)
|
|
15
|
+
from chia.protocols.outbound_message import Message
|
|
16
|
+
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
17
|
+
from chia.server.api_protocol import ApiMetadata, ApiProtocol
|
|
18
|
+
from chia.server.ws_connection import WSChiaConnection
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class FullNodeApiStub(ApiProtocol, Protocol):
|
|
22
|
+
"""Non-functional API stub for FullNodeAPI
|
|
23
|
+
|
|
24
|
+
This is a protocol definition only - methods are not implemented and should
|
|
25
|
+
never be called. Use the actual FullNodeAPI implementation at runtime.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
log: logging.Logger
|
|
29
|
+
metadata: ClassVar[ApiMetadata] = ApiMetadata()
|
|
30
|
+
|
|
31
|
+
def ready(self) -> bool:
|
|
32
|
+
"""Check if the full node is ready."""
|
|
33
|
+
...
|
|
34
|
+
|
|
35
|
+
# PEER PROTOCOL
|
|
36
|
+
@metadata.request(peer_required=True, reply_types=[ProtocolMessageTypes.respond_peers])
|
|
37
|
+
async def request_peers(self, _request: full_node_protocol.RequestPeers, peer: WSChiaConnection) -> Message | None:
|
|
38
|
+
"""Handle peer request."""
|
|
39
|
+
...
|
|
40
|
+
|
|
41
|
+
@metadata.request(peer_required=True)
|
|
42
|
+
async def respond_peers(self, request: full_node_protocol.RespondPeers, peer: WSChiaConnection) -> Message | None:
|
|
43
|
+
"""Handle peers response."""
|
|
44
|
+
...
|
|
45
|
+
|
|
46
|
+
@metadata.request(peer_required=True)
|
|
47
|
+
async def respond_peers_introducer(
|
|
48
|
+
self, request: introducer_protocol.RespondPeersIntroducer, peer: WSChiaConnection
|
|
49
|
+
) -> Message | None:
|
|
50
|
+
"""Handle peers response from introducer."""
|
|
51
|
+
...
|
|
52
|
+
|
|
53
|
+
# FULL NODE PROTOCOL
|
|
54
|
+
@metadata.request(peer_required=True, execute_task=True)
|
|
55
|
+
async def new_peak(self, request: full_node_protocol.NewPeak, peer: WSChiaConnection) -> None:
|
|
56
|
+
"""Handle new peak from peer."""
|
|
57
|
+
...
|
|
58
|
+
|
|
59
|
+
@metadata.request(peer_required=True)
|
|
60
|
+
async def new_transaction(
|
|
61
|
+
self, transaction: full_node_protocol.NewTransaction, peer: WSChiaConnection
|
|
62
|
+
) -> Message | None:
|
|
63
|
+
"""Handle new transaction from peer."""
|
|
64
|
+
...
|
|
65
|
+
|
|
66
|
+
@metadata.request(reply_types=[ProtocolMessageTypes.respond_transaction])
|
|
67
|
+
async def request_transaction(self, request: full_node_protocol.RequestTransaction) -> Message | None:
|
|
68
|
+
"""Handle transaction request."""
|
|
69
|
+
...
|
|
70
|
+
|
|
71
|
+
@metadata.request(peer_required=True, bytes_required=True)
|
|
72
|
+
async def respond_transaction(
|
|
73
|
+
self,
|
|
74
|
+
tx: full_node_protocol.RespondTransaction,
|
|
75
|
+
peer: WSChiaConnection,
|
|
76
|
+
tx_bytes: bytes = b"",
|
|
77
|
+
test: bool = False,
|
|
78
|
+
) -> Message | None:
|
|
79
|
+
"""Handle transaction response from peer."""
|
|
80
|
+
...
|
|
81
|
+
|
|
82
|
+
@metadata.request(reply_types=[ProtocolMessageTypes.respond_proof_of_weight])
|
|
83
|
+
async def request_proof_of_weight(self, request: full_node_protocol.RequestProofOfWeight) -> Message | None:
|
|
84
|
+
"""Handle proof of weight request."""
|
|
85
|
+
...
|
|
86
|
+
|
|
87
|
+
@metadata.request()
|
|
88
|
+
async def respond_proof_of_weight(self, request: full_node_protocol.RespondProofOfWeight) -> Message | None:
|
|
89
|
+
"""Handle proof of weight response."""
|
|
90
|
+
...
|
|
91
|
+
|
|
92
|
+
@metadata.request(reply_types=[ProtocolMessageTypes.respond_block, ProtocolMessageTypes.reject_block])
|
|
93
|
+
async def request_block(self, request: full_node_protocol.RequestBlock) -> Message | None:
|
|
94
|
+
"""Handle block request."""
|
|
95
|
+
...
|
|
96
|
+
|
|
97
|
+
@metadata.request(reply_types=[ProtocolMessageTypes.respond_blocks, ProtocolMessageTypes.reject_blocks])
|
|
98
|
+
async def request_blocks(self, request: full_node_protocol.RequestBlocks) -> Message | None:
|
|
99
|
+
"""Handle blocks request."""
|
|
100
|
+
...
|
|
101
|
+
|
|
102
|
+
@metadata.request(peer_required=True)
|
|
103
|
+
async def reject_block(
|
|
104
|
+
self,
|
|
105
|
+
request: full_node_protocol.RejectBlock,
|
|
106
|
+
peer: WSChiaConnection,
|
|
107
|
+
) -> None:
|
|
108
|
+
"""Handle block rejection."""
|
|
109
|
+
...
|
|
110
|
+
|
|
111
|
+
@metadata.request(peer_required=True)
|
|
112
|
+
async def reject_blocks(
|
|
113
|
+
self,
|
|
114
|
+
request: full_node_protocol.RejectBlocks,
|
|
115
|
+
peer: WSChiaConnection,
|
|
116
|
+
) -> None:
|
|
117
|
+
"""Handle blocks rejection."""
|
|
118
|
+
...
|
|
119
|
+
|
|
120
|
+
@metadata.request(peer_required=True)
|
|
121
|
+
async def respond_blocks(
|
|
122
|
+
self,
|
|
123
|
+
request: full_node_protocol.RespondBlocks,
|
|
124
|
+
peer: WSChiaConnection,
|
|
125
|
+
) -> None:
|
|
126
|
+
"""Handle blocks response."""
|
|
127
|
+
...
|
|
128
|
+
|
|
129
|
+
@metadata.request(peer_required=True)
|
|
130
|
+
async def respond_block(
|
|
131
|
+
self,
|
|
132
|
+
respond_block: full_node_protocol.RespondBlock,
|
|
133
|
+
peer: WSChiaConnection,
|
|
134
|
+
) -> Message | None:
|
|
135
|
+
"""Handle block response."""
|
|
136
|
+
...
|
|
137
|
+
|
|
138
|
+
@metadata.request()
|
|
139
|
+
async def new_unfinished_block(self, new_unfinished_block: full_node_protocol.NewUnfinishedBlock) -> Message | None:
|
|
140
|
+
"""Handle new unfinished block."""
|
|
141
|
+
...
|
|
142
|
+
|
|
143
|
+
@metadata.request(reply_types=[ProtocolMessageTypes.respond_unfinished_block])
|
|
144
|
+
async def request_unfinished_block(
|
|
145
|
+
self, request_unfinished_block: full_node_protocol.RequestUnfinishedBlock
|
|
146
|
+
) -> Message | None:
|
|
147
|
+
"""Handle unfinished block request."""
|
|
148
|
+
...
|
|
149
|
+
|
|
150
|
+
@metadata.request()
|
|
151
|
+
async def new_unfinished_block2(
|
|
152
|
+
self, new_unfinished_block: full_node_protocol.NewUnfinishedBlock2
|
|
153
|
+
) -> Message | None:
|
|
154
|
+
"""Handle new unfinished block v2."""
|
|
155
|
+
...
|
|
156
|
+
|
|
157
|
+
@metadata.request(reply_types=[ProtocolMessageTypes.respond_unfinished_block])
|
|
158
|
+
async def request_unfinished_block2(
|
|
159
|
+
self, request_unfinished_block: full_node_protocol.RequestUnfinishedBlock2
|
|
160
|
+
) -> Message | None:
|
|
161
|
+
"""Handle unfinished block v2 request."""
|
|
162
|
+
...
|
|
163
|
+
|
|
164
|
+
@metadata.request(peer_required=True)
|
|
165
|
+
async def respond_unfinished_block(
|
|
166
|
+
self,
|
|
167
|
+
respond_unfinished_block: full_node_protocol.RespondUnfinishedBlock,
|
|
168
|
+
peer: WSChiaConnection,
|
|
169
|
+
) -> Message | None:
|
|
170
|
+
"""Handle unfinished block response."""
|
|
171
|
+
...
|
|
172
|
+
|
|
173
|
+
@metadata.request(peer_required=True)
|
|
174
|
+
async def new_signage_point_or_end_of_sub_slot(
|
|
175
|
+
self, new_sp: full_node_protocol.NewSignagePointOrEndOfSubSlot, peer: WSChiaConnection
|
|
176
|
+
) -> Message | None:
|
|
177
|
+
"""Handle new signage point or end of sub slot."""
|
|
178
|
+
...
|
|
179
|
+
|
|
180
|
+
@metadata.request(
|
|
181
|
+
reply_types=[ProtocolMessageTypes.respond_signage_point, ProtocolMessageTypes.respond_end_of_sub_slot]
|
|
182
|
+
)
|
|
183
|
+
async def request_signage_point_or_end_of_sub_slot(
|
|
184
|
+
self, request: full_node_protocol.RequestSignagePointOrEndOfSubSlot
|
|
185
|
+
) -> Message | None:
|
|
186
|
+
"""Handle signage point or end of sub slot request."""
|
|
187
|
+
...
|
|
188
|
+
|
|
189
|
+
@metadata.request(peer_required=True)
|
|
190
|
+
async def respond_signage_point(
|
|
191
|
+
self, request: full_node_protocol.RespondSignagePoint, peer: WSChiaConnection
|
|
192
|
+
) -> Message | None:
|
|
193
|
+
"""Handle signage point response."""
|
|
194
|
+
...
|
|
195
|
+
|
|
196
|
+
@metadata.request(peer_required=True)
|
|
197
|
+
async def respond_end_of_sub_slot(
|
|
198
|
+
self, request: full_node_protocol.RespondEndOfSubSlot, peer: WSChiaConnection
|
|
199
|
+
) -> Message | None:
|
|
200
|
+
"""Handle end of sub slot response."""
|
|
201
|
+
...
|
|
202
|
+
|
|
203
|
+
@metadata.request(peer_required=True)
|
|
204
|
+
async def request_mempool_transactions(
|
|
205
|
+
self,
|
|
206
|
+
request: full_node_protocol.RequestMempoolTransactions,
|
|
207
|
+
peer: WSChiaConnection,
|
|
208
|
+
) -> Message | None:
|
|
209
|
+
"""Handle mempool transactions request."""
|
|
210
|
+
...
|
|
211
|
+
|
|
212
|
+
# FARMER PROTOCOL
|
|
213
|
+
@metadata.request(peer_required=True)
|
|
214
|
+
async def declare_proof_of_space(
|
|
215
|
+
self, request: farmer_protocol.DeclareProofOfSpace, peer: WSChiaConnection
|
|
216
|
+
) -> Message | None:
|
|
217
|
+
"""Handle proof of space declaration from farmer."""
|
|
218
|
+
...
|
|
219
|
+
|
|
220
|
+
@metadata.request(peer_required=True)
|
|
221
|
+
async def signed_values(
|
|
222
|
+
self, farmer_request: farmer_protocol.SignedValues, peer: WSChiaConnection
|
|
223
|
+
) -> Message | None:
|
|
224
|
+
"""Handle signed values from farmer."""
|
|
225
|
+
...
|
|
226
|
+
|
|
227
|
+
# TIMELORD PROTOCOL
|
|
228
|
+
@metadata.request(peer_required=True)
|
|
229
|
+
async def new_infusion_point_vdf(
|
|
230
|
+
self, request: timelord_protocol.NewInfusionPointVDF, peer: WSChiaConnection
|
|
231
|
+
) -> Message | None:
|
|
232
|
+
"""Handle new infusion point VDF from timelord."""
|
|
233
|
+
...
|
|
234
|
+
|
|
235
|
+
@metadata.request(peer_required=True)
|
|
236
|
+
async def new_signage_point_vdf(
|
|
237
|
+
self, request: timelord_protocol.NewSignagePointVDF, peer: WSChiaConnection
|
|
238
|
+
) -> None:
|
|
239
|
+
"""Handle new signage point VDF from timelord."""
|
|
240
|
+
...
|
|
241
|
+
|
|
242
|
+
@metadata.request(peer_required=True)
|
|
243
|
+
async def new_end_of_sub_slot_vdf(
|
|
244
|
+
self, request: timelord_protocol.NewEndOfSubSlotVDF, peer: WSChiaConnection
|
|
245
|
+
) -> Message | None:
|
|
246
|
+
"""Handle new end of sub slot VDF from timelord."""
|
|
247
|
+
...
|
|
248
|
+
|
|
249
|
+
@metadata.request(bytes_required=True, execute_task=True)
|
|
250
|
+
async def respond_compact_proof_of_time(
|
|
251
|
+
self, request: timelord_protocol.RespondCompactProofOfTime, request_bytes: bytes = b""
|
|
252
|
+
) -> None:
|
|
253
|
+
"""Handle compact proof of time response from timelord."""
|
|
254
|
+
|
|
255
|
+
@metadata.request(peer_required=True, bytes_required=True, execute_task=True)
|
|
256
|
+
async def new_compact_vdf(
|
|
257
|
+
self, request: full_node_protocol.NewCompactVDF, peer: WSChiaConnection, request_bytes: bytes = b""
|
|
258
|
+
) -> None:
|
|
259
|
+
"""Handle new compact VDF."""
|
|
260
|
+
...
|
|
261
|
+
|
|
262
|
+
@metadata.request(peer_required=True, reply_types=[ProtocolMessageTypes.respond_compact_vdf])
|
|
263
|
+
async def request_compact_vdf(self, request: full_node_protocol.RequestCompactVDF, peer: WSChiaConnection) -> None:
|
|
264
|
+
"""Handle compact VDF request."""
|
|
265
|
+
...
|
|
266
|
+
|
|
267
|
+
@metadata.request(peer_required=True)
|
|
268
|
+
async def respond_compact_vdf(self, request: full_node_protocol.RespondCompactVDF, peer: WSChiaConnection) -> None:
|
|
269
|
+
"""Handle compact VDF response."""
|
|
270
|
+
...
|
|
271
|
+
|
|
272
|
+
# WALLET PROTOCOL
|
|
273
|
+
@metadata.request()
|
|
274
|
+
async def request_block_header(self, request: wallet_protocol.RequestBlockHeader) -> Message | None:
|
|
275
|
+
"""Handle block header request from wallet."""
|
|
276
|
+
...
|
|
277
|
+
|
|
278
|
+
@metadata.request()
|
|
279
|
+
async def request_additions(self, request: wallet_protocol.RequestAdditions) -> Message | None:
|
|
280
|
+
"""Handle additions request from wallet."""
|
|
281
|
+
...
|
|
282
|
+
|
|
283
|
+
@metadata.request()
|
|
284
|
+
async def request_removals(self, request: wallet_protocol.RequestRemovals) -> Message | None:
|
|
285
|
+
"""Handle removals request from wallet."""
|
|
286
|
+
...
|
|
287
|
+
|
|
288
|
+
@metadata.request(peer_required=True)
|
|
289
|
+
async def send_transaction(
|
|
290
|
+
self, request: wallet_protocol.SendTransaction, peer: WSChiaConnection, *, test: bool = False
|
|
291
|
+
) -> Message | None:
|
|
292
|
+
"""Handle transaction send from wallet."""
|
|
293
|
+
...
|
|
294
|
+
|
|
295
|
+
@metadata.request()
|
|
296
|
+
async def request_puzzle_solution(self, request: wallet_protocol.RequestPuzzleSolution) -> Message | None:
|
|
297
|
+
"""Handle puzzle solution request from wallet."""
|
|
298
|
+
...
|
|
299
|
+
|
|
300
|
+
@metadata.request()
|
|
301
|
+
async def request_block_headers(self, request: wallet_protocol.RequestBlockHeaders) -> Message | None:
|
|
302
|
+
"""Handle block headers request from wallet."""
|
|
303
|
+
...
|
|
304
|
+
|
|
305
|
+
@metadata.request()
|
|
306
|
+
async def request_header_blocks(self, request: wallet_protocol.RequestHeaderBlocks) -> Message | None:
|
|
307
|
+
"""Handle header blocks request from wallet (deprecated)."""
|
|
308
|
+
...
|
|
309
|
+
|
|
310
|
+
@metadata.request(peer_required=True)
|
|
311
|
+
async def register_for_ph_updates(
|
|
312
|
+
self, request: wallet_protocol.RegisterForPhUpdates, peer: WSChiaConnection
|
|
313
|
+
) -> Message:
|
|
314
|
+
"""Handle puzzle hash updates registration from wallet."""
|
|
315
|
+
...
|
|
316
|
+
|
|
317
|
+
@metadata.request(peer_required=True)
|
|
318
|
+
async def register_for_coin_updates(
|
|
319
|
+
self, request: wallet_protocol.RegisterForCoinUpdates, peer: WSChiaConnection
|
|
320
|
+
) -> Message:
|
|
321
|
+
"""Handle coin updates registration from wallet."""
|
|
322
|
+
...
|
|
323
|
+
|
|
324
|
+
@metadata.request()
|
|
325
|
+
async def request_children(self, request: wallet_protocol.RequestChildren) -> Message | None:
|
|
326
|
+
"""Handle children request from wallet."""
|
|
327
|
+
...
|
|
328
|
+
|
|
329
|
+
@metadata.request()
|
|
330
|
+
async def request_ses_hashes(self, request: wallet_protocol.RequestSESInfo) -> Message:
|
|
331
|
+
"""Handle SES hashes request from wallet."""
|
|
332
|
+
...
|
|
333
|
+
|
|
334
|
+
@metadata.request(reply_types=[ProtocolMessageTypes.respond_fee_estimates])
|
|
335
|
+
async def request_fee_estimates(self, request: wallet_protocol.RequestFeeEstimates) -> Message:
|
|
336
|
+
"""Handle fee estimates request from wallet."""
|
|
337
|
+
...
|
|
338
|
+
|
|
339
|
+
@metadata.request(
|
|
340
|
+
peer_required=True,
|
|
341
|
+
reply_types=[ProtocolMessageTypes.respond_remove_puzzle_subscriptions],
|
|
342
|
+
)
|
|
343
|
+
async def request_remove_puzzle_subscriptions(
|
|
344
|
+
self, request: wallet_protocol.RequestRemovePuzzleSubscriptions, peer: WSChiaConnection
|
|
345
|
+
) -> Message:
|
|
346
|
+
"""Handle remove puzzle subscriptions request from wallet."""
|
|
347
|
+
...
|
|
348
|
+
|
|
349
|
+
@metadata.request(
|
|
350
|
+
peer_required=True,
|
|
351
|
+
reply_types=[ProtocolMessageTypes.respond_remove_coin_subscriptions],
|
|
352
|
+
)
|
|
353
|
+
async def request_remove_coin_subscriptions(
|
|
354
|
+
self, request: wallet_protocol.RequestRemoveCoinSubscriptions, peer: WSChiaConnection
|
|
355
|
+
) -> Message:
|
|
356
|
+
"""Handle remove coin subscriptions request from wallet."""
|
|
357
|
+
...
|
|
358
|
+
|
|
359
|
+
@metadata.request(peer_required=True, reply_types=[ProtocolMessageTypes.respond_puzzle_state])
|
|
360
|
+
async def request_puzzle_state(
|
|
361
|
+
self, request: wallet_protocol.RequestPuzzleState, peer: WSChiaConnection
|
|
362
|
+
) -> Message:
|
|
363
|
+
"""Handle puzzle state request from wallet."""
|
|
364
|
+
...
|
|
365
|
+
|
|
366
|
+
@metadata.request(peer_required=True, reply_types=[ProtocolMessageTypes.respond_coin_state])
|
|
367
|
+
async def request_coin_state(self, request: wallet_protocol.RequestCoinState, peer: WSChiaConnection) -> Message:
|
|
368
|
+
"""Handle coin state request from wallet."""
|
|
369
|
+
...
|
|
370
|
+
|
|
371
|
+
@metadata.request(reply_types=[ProtocolMessageTypes.respond_cost_info])
|
|
372
|
+
async def request_cost_info(self, _request: wallet_protocol.RequestCostInfo) -> Message | None:
|
|
373
|
+
"""Handle cost info request from wallet."""
|
|
374
|
+
...
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import ClassVar
|
|
5
|
+
|
|
6
|
+
from typing_extensions import Protocol
|
|
7
|
+
|
|
8
|
+
from chia.protocols import harvester_protocol
|
|
9
|
+
from chia.protocols.harvester_protocol import PlotSyncResponse
|
|
10
|
+
from chia.protocols.outbound_message import Message
|
|
11
|
+
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
12
|
+
from chia.server.api_protocol import ApiMetadata, ApiProtocol
|
|
13
|
+
from chia.server.ws_connection import WSChiaConnection
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class HarvesterApiStub(ApiProtocol, Protocol):
|
|
17
|
+
"""Non-functional API stub for HarvesterAPI
|
|
18
|
+
|
|
19
|
+
This is a protocol definition only - methods are not implemented and should
|
|
20
|
+
never be called. Use the actual HarvesterAPI implementation at runtime.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
log: logging.Logger
|
|
24
|
+
metadata: ClassVar[ApiMetadata] = ApiMetadata()
|
|
25
|
+
|
|
26
|
+
def ready(self) -> bool:
|
|
27
|
+
"""Check if the harvester is ready."""
|
|
28
|
+
...
|
|
29
|
+
|
|
30
|
+
@metadata.request(peer_required=True)
|
|
31
|
+
async def harvester_handshake(
|
|
32
|
+
self, harvester_handshake: harvester_protocol.HarvesterHandshake, peer: WSChiaConnection
|
|
33
|
+
) -> None:
|
|
34
|
+
"""Handshake between the harvester and farmer."""
|
|
35
|
+
...
|
|
36
|
+
|
|
37
|
+
@metadata.request(peer_required=True)
|
|
38
|
+
async def new_signage_point_harvester(
|
|
39
|
+
self, new_challenge: harvester_protocol.NewSignagePointHarvester2, peer: WSChiaConnection
|
|
40
|
+
) -> None:
|
|
41
|
+
"""Handle new signage point from farmer."""
|
|
42
|
+
...
|
|
43
|
+
|
|
44
|
+
@metadata.request(reply_types=[ProtocolMessageTypes.respond_signatures])
|
|
45
|
+
async def request_signatures(self, request: harvester_protocol.RequestSignatures) -> Message | None:
|
|
46
|
+
"""Handle signature request from farmer."""
|
|
47
|
+
...
|
|
48
|
+
|
|
49
|
+
@metadata.request()
|
|
50
|
+
async def request_plots(self, _: harvester_protocol.RequestPlots) -> Message:
|
|
51
|
+
"""Handle request for plot information."""
|
|
52
|
+
...
|
|
53
|
+
|
|
54
|
+
@metadata.request()
|
|
55
|
+
async def plot_sync_response(self, response: PlotSyncResponse) -> None:
|
|
56
|
+
"""Handle plot sync response."""
|
|
57
|
+
...
|