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
chia/timelord/timelord.py
CHANGED
|
@@ -13,7 +13,7 @@ import traceback
|
|
|
13
13
|
from collections.abc import AsyncIterator
|
|
14
14
|
from concurrent.futures import ThreadPoolExecutor
|
|
15
15
|
from pathlib import Path
|
|
16
|
-
from typing import IO, TYPE_CHECKING, Any, ClassVar,
|
|
16
|
+
from typing import IO, TYPE_CHECKING, Any, ClassVar, cast
|
|
17
17
|
|
|
18
18
|
from chia_rs import (
|
|
19
19
|
ChallengeChainSubSlot,
|
|
@@ -80,6 +80,9 @@ class Timelord:
|
|
|
80
80
|
|
|
81
81
|
_protocol_check: ClassVar[RpcServiceProtocol] = cast("Timelord", None)
|
|
82
82
|
|
|
83
|
+
unfinished_blocks: list[timelord_protocol.NewUnfinishedBlockTimelord]
|
|
84
|
+
overflow_blocks: list[timelord_protocol.NewUnfinishedBlockTimelord]
|
|
85
|
+
|
|
83
86
|
@property
|
|
84
87
|
def server(self) -> ChiaServer:
|
|
85
88
|
# This is a stop gap until the class usage is refactored such the values of
|
|
@@ -96,7 +99,7 @@ class Timelord:
|
|
|
96
99
|
self._shut_down = False
|
|
97
100
|
self.free_clients: list[tuple[str, asyncio.StreamReader, asyncio.StreamWriter]] = []
|
|
98
101
|
self.ip_whitelist = self.config["vdf_clients"]["ip"]
|
|
99
|
-
self._server:
|
|
102
|
+
self._server: ChiaServer | None = None
|
|
100
103
|
self.chain_type_to_stream: dict[Chain, tuple[str, asyncio.StreamReader, asyncio.StreamWriter]] = {}
|
|
101
104
|
self.chain_start_time: dict[Chain, float] = {}
|
|
102
105
|
# Chains that currently don't have a vdf_client.
|
|
@@ -108,7 +111,7 @@ class Timelord:
|
|
|
108
111
|
# Chains that currently accept iterations.
|
|
109
112
|
self.allows_iters: list[Chain] = []
|
|
110
113
|
# Last peak received, None if it's already processed.
|
|
111
|
-
self.new_peak:
|
|
114
|
+
self.new_peak: timelord_protocol.NewPeakTimelord | None = None
|
|
112
115
|
# Last state received. Can either be a new peak or a new EndOfSubslotBundle.
|
|
113
116
|
# Unfinished block info, iters adjusted to the last peak.
|
|
114
117
|
self.unfinished_blocks: list[timelord_protocol.NewUnfinishedBlockTimelord] = []
|
|
@@ -129,15 +132,15 @@ class Timelord:
|
|
|
129
132
|
self.num_resets: int = 0
|
|
130
133
|
|
|
131
134
|
self.process_communication_tasks: list[asyncio.Task[None]] = []
|
|
132
|
-
self.main_loop:
|
|
133
|
-
self.vdf_server:
|
|
135
|
+
self.main_loop: asyncio.Task[None] | None = None
|
|
136
|
+
self.vdf_server: asyncio.base_events.Server | None = None
|
|
134
137
|
self._shut_down = False
|
|
135
|
-
self.vdf_failures: list[tuple[Chain,
|
|
138
|
+
self.vdf_failures: list[tuple[Chain, int | None]] = []
|
|
136
139
|
self.vdf_failures_count: int = 0
|
|
137
140
|
self.vdf_failure_time: float = 0
|
|
138
141
|
self.total_unfinished: int = 0
|
|
139
142
|
self.total_infused: int = 0
|
|
140
|
-
self.state_changed_callback:
|
|
143
|
+
self.state_changed_callback: StateChangedProtocol | None = None
|
|
141
144
|
self.bluebox_mode = self.config.get("bluebox_mode", False)
|
|
142
145
|
# Support backwards compatibility for the old `config.yaml` that has field `sanitizer_mode`.
|
|
143
146
|
if not self.bluebox_mode:
|
|
@@ -145,8 +148,8 @@ class Timelord:
|
|
|
145
148
|
self.pending_bluebox_info: list[tuple[float, timelord_protocol.RequestCompactProofOfTime]] = []
|
|
146
149
|
self.last_active_time = time.time()
|
|
147
150
|
self.max_allowed_inactivity_time = 60
|
|
148
|
-
self._executor_shutdown_tempfile:
|
|
149
|
-
self.bluebox_pool:
|
|
151
|
+
self._executor_shutdown_tempfile: IO[bytes] | None = None
|
|
152
|
+
self.bluebox_pool: ThreadPoolExecutor | None = None
|
|
150
153
|
|
|
151
154
|
@contextlib.asynccontextmanager
|
|
152
155
|
async def manage(self) -> AsyncIterator[None]:
|
|
@@ -187,13 +190,13 @@ class Timelord:
|
|
|
187
190
|
if self.bluebox_pool is not None:
|
|
188
191
|
self.bluebox_pool.shutdown()
|
|
189
192
|
|
|
190
|
-
def get_connections(self, request_node_type:
|
|
193
|
+
def get_connections(self, request_node_type: NodeType | None) -> list[dict[str, Any]]:
|
|
191
194
|
return default_get_connections(server=self.server, request_node_type=request_node_type)
|
|
192
195
|
|
|
193
196
|
async def on_connect(self, connection: WSChiaConnection) -> None:
|
|
194
197
|
pass
|
|
195
198
|
|
|
196
|
-
def get_vdf_server_port(self) ->
|
|
199
|
+
def get_vdf_server_port(self) -> uint16 | None:
|
|
197
200
|
if self.vdf_server is not None:
|
|
198
201
|
return uint16(self.vdf_server.sockets[0].getsockname()[1])
|
|
199
202
|
return None
|
|
@@ -201,7 +204,7 @@ class Timelord:
|
|
|
201
204
|
def _set_state_changed_callback(self, callback: StateChangedProtocol) -> None:
|
|
202
205
|
self.state_changed_callback = callback
|
|
203
206
|
|
|
204
|
-
def state_changed(self, change: str, change_data:
|
|
207
|
+
def state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> None:
|
|
205
208
|
if self.state_changed_callback is not None:
|
|
206
209
|
self.state_changed_callback(change, change_data)
|
|
207
210
|
|
|
@@ -240,7 +243,7 @@ class Timelord:
|
|
|
240
243
|
else:
|
|
241
244
|
return uint32(self.last_state.get_height() + 1)
|
|
242
245
|
|
|
243
|
-
def _can_infuse_unfinished_block(self, block: timelord_protocol.NewUnfinishedBlockTimelord) ->
|
|
246
|
+
def _can_infuse_unfinished_block(self, block: timelord_protocol.NewUnfinishedBlockTimelord) -> uint64 | None:
|
|
244
247
|
assert self.last_state is not None
|
|
245
248
|
sub_slot_iters = self.last_state.get_sub_slot_iters()
|
|
246
249
|
difficulty = self.last_state.get_difficulty()
|
|
@@ -325,7 +328,7 @@ class Timelord:
|
|
|
325
328
|
self.iteration_to_proof_type = {}
|
|
326
329
|
if not only_eos:
|
|
327
330
|
for block in self.unfinished_blocks + self.overflow_blocks:
|
|
328
|
-
new_block_iters:
|
|
331
|
+
new_block_iters: uint64 | None = self._can_infuse_unfinished_block(block)
|
|
329
332
|
# Does not add duplicates, or blocks that we cannot infuse
|
|
330
333
|
if new_block_iters and new_block_iters not in self.iters_to_submit[Chain.CHALLENGE_CHAIN]:
|
|
331
334
|
if block not in self.unfinished_blocks:
|
|
@@ -473,10 +476,10 @@ class Timelord:
|
|
|
473
476
|
]
|
|
474
477
|
# Wait for both cc and rc to have the signage point.
|
|
475
478
|
if len(proofs_with_iter) == 2:
|
|
476
|
-
cc_info:
|
|
477
|
-
cc_proof:
|
|
478
|
-
rc_info:
|
|
479
|
-
rc_proof:
|
|
479
|
+
cc_info: VDFInfo | None = None
|
|
480
|
+
cc_proof: VDFProof | None = None
|
|
481
|
+
rc_info: VDFInfo | None = None
|
|
482
|
+
rc_proof: VDFProof | None = None
|
|
480
483
|
for chain, info, proof in proofs_with_iter:
|
|
481
484
|
if chain == Chain.CHALLENGE_CHAIN:
|
|
482
485
|
cc_info = info
|
|
@@ -511,7 +514,7 @@ class Timelord:
|
|
|
511
514
|
to_remove.append((signage_iter, signage_point_index))
|
|
512
515
|
|
|
513
516
|
self.proofs_finished = self._clear_proof_list(signage_iter)
|
|
514
|
-
# Send the next
|
|
517
|
+
# Send the next 10 signage point to the chains.
|
|
515
518
|
next_iters_count = 0
|
|
516
519
|
for next_sp, k in self.signage_point_iters:
|
|
517
520
|
for chain in [Chain.CHALLENGE_CHAIN, Chain.REWARD_CHAIN]:
|
|
@@ -568,12 +571,12 @@ class Timelord:
|
|
|
568
571
|
if block is not None:
|
|
569
572
|
ip_total_iters = self.last_state.get_total_iters() + iteration
|
|
570
573
|
challenge = block.reward_chain_block.get_hash()
|
|
571
|
-
icc_info:
|
|
572
|
-
icc_proof:
|
|
573
|
-
cc_info:
|
|
574
|
-
cc_proof:
|
|
575
|
-
rc_info:
|
|
576
|
-
rc_proof:
|
|
574
|
+
icc_info: VDFInfo | None = None
|
|
575
|
+
icc_proof: VDFProof | None = None
|
|
576
|
+
cc_info: VDFInfo | None = None
|
|
577
|
+
cc_proof: VDFProof | None = None
|
|
578
|
+
rc_info: VDFInfo | None = None
|
|
579
|
+
rc_proof: VDFProof | None = None
|
|
577
580
|
for chain, info, proof in proofs_with_iter:
|
|
578
581
|
if chain == Chain.CHALLENGE_CHAIN:
|
|
579
582
|
cc_info = info
|
|
@@ -669,6 +672,7 @@ class Timelord:
|
|
|
669
672
|
block.reward_chain_block.reward_chain_sp_signature,
|
|
670
673
|
rc_info,
|
|
671
674
|
icc_info,
|
|
675
|
+
None, # header_mmr_root
|
|
672
676
|
is_transaction_block,
|
|
673
677
|
)
|
|
674
678
|
if self.last_state.state_type == StateType.FIRST_SUB_SLOT:
|
|
@@ -743,12 +747,12 @@ class Timelord:
|
|
|
743
747
|
else:
|
|
744
748
|
chain_count = 2
|
|
745
749
|
if len(chains_finished) == chain_count:
|
|
746
|
-
icc_ip_vdf:
|
|
747
|
-
icc_ip_proof:
|
|
748
|
-
cc_vdf:
|
|
749
|
-
cc_proof:
|
|
750
|
-
rc_vdf:
|
|
751
|
-
rc_proof:
|
|
750
|
+
icc_ip_vdf: VDFInfo | None = None
|
|
751
|
+
icc_ip_proof: VDFProof | None = None
|
|
752
|
+
cc_vdf: VDFInfo | None = None
|
|
753
|
+
cc_proof: VDFProof | None = None
|
|
754
|
+
rc_vdf: VDFInfo | None = None
|
|
755
|
+
rc_proof: VDFProof | None = None
|
|
752
756
|
for chain, info, proof in chains_finished:
|
|
753
757
|
if chain == Chain.CHALLENGE_CHAIN:
|
|
754
758
|
cc_vdf = info
|
|
@@ -789,17 +793,17 @@ class Timelord:
|
|
|
789
793
|
assert iters_from_cb <= self.last_state.sub_slot_iters
|
|
790
794
|
icc_ip_vdf = icc_ip_vdf.replace(number_of_iterations=iters_from_cb)
|
|
791
795
|
|
|
792
|
-
icc_sub_slot:
|
|
796
|
+
icc_sub_slot: InfusedChallengeChainSubSlot | None = (
|
|
793
797
|
None if icc_ip_vdf is None else InfusedChallengeChainSubSlot(icc_ip_vdf)
|
|
794
798
|
)
|
|
795
|
-
icc_sub_slot_hash:
|
|
799
|
+
icc_sub_slot_hash: bytes32 | None
|
|
796
800
|
if self.last_state.get_deficit() == 0:
|
|
797
801
|
assert icc_sub_slot is not None
|
|
798
802
|
icc_sub_slot_hash = icc_sub_slot.get_hash()
|
|
799
803
|
else:
|
|
800
804
|
icc_sub_slot_hash = None
|
|
801
|
-
next_ses:
|
|
802
|
-
ses_hash:
|
|
805
|
+
next_ses: SubEpochSummary | None = self.last_state.get_next_sub_epoch_summary()
|
|
806
|
+
ses_hash: bytes32 | None
|
|
803
807
|
if next_ses is not None:
|
|
804
808
|
log.info(f"Including sub epoch summary{next_ses}")
|
|
805
809
|
ses_hash = next_ses.get_hash()
|
|
@@ -929,12 +933,12 @@ class Timelord:
|
|
|
929
933
|
reader: asyncio.StreamReader,
|
|
930
934
|
writer: asyncio.StreamWriter,
|
|
931
935
|
# Data specific only when running in bluebox mode.
|
|
932
|
-
bluebox_iteration:
|
|
933
|
-
header_hash:
|
|
934
|
-
height:
|
|
935
|
-
field_vdf:
|
|
936
|
+
bluebox_iteration: uint64 | None = None,
|
|
937
|
+
header_hash: bytes32 | None = None,
|
|
938
|
+
height: uint32 | None = None,
|
|
939
|
+
field_vdf: uint8 | None = None,
|
|
936
940
|
# Labels a proof to the current state only
|
|
937
|
-
proof_label:
|
|
941
|
+
proof_label: int | None = None,
|
|
938
942
|
) -> None:
|
|
939
943
|
disc: int = create_discriminant(challenge, self.constants.DISCRIMINANT_SIZE_BITS)
|
|
940
944
|
|
chia/timelord/timelord_api.py
CHANGED
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
4
|
import time
|
|
5
|
-
from typing import TYPE_CHECKING, ClassVar
|
|
5
|
+
from typing import TYPE_CHECKING, ClassVar
|
|
6
6
|
|
|
7
7
|
from chia_rs.sized_ints import uint64
|
|
8
8
|
|
|
@@ -19,9 +19,11 @@ log = logging.getLogger(__name__)
|
|
|
19
19
|
|
|
20
20
|
class TimelordAPI:
|
|
21
21
|
if TYPE_CHECKING:
|
|
22
|
-
from chia.
|
|
22
|
+
from chia.apis.timelord_stub import TimelordApiStub
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
# Verify this class implements the TimelordApiStub protocol
|
|
25
|
+
def _protocol_check(self: TimelordAPI) -> TimelordApiStub:
|
|
26
|
+
return self
|
|
25
27
|
|
|
26
28
|
log: logging.Logger
|
|
27
29
|
timelord: Timelord
|
|
@@ -143,7 +145,7 @@ class TimelordAPI:
|
|
|
143
145
|
self.timelord.overflow_blocks.append(new_unfinished_block)
|
|
144
146
|
log.debug(f"Overflow unfinished block, total {self.timelord.total_unfinished}")
|
|
145
147
|
elif ip_iters > last_ip_iters:
|
|
146
|
-
new_block_iters:
|
|
148
|
+
new_block_iters: uint64 | None = self.timelord._can_infuse_unfinished_block(new_unfinished_block)
|
|
147
149
|
if new_block_iters:
|
|
148
150
|
self.timelord.unfinished_blocks.append(new_unfinished_block)
|
|
149
151
|
for chain in [Chain.REWARD_CHAIN, Chain.CHALLENGE_CHAIN]:
|
|
@@ -11,7 +11,7 @@ from collections.abc import AsyncIterator
|
|
|
11
11
|
from contextlib import asynccontextmanager
|
|
12
12
|
from dataclasses import dataclass, field
|
|
13
13
|
from types import FrameType
|
|
14
|
-
from typing import Any
|
|
14
|
+
from typing import Any
|
|
15
15
|
|
|
16
16
|
from chia.server.signal_handlers import SignalHandlers
|
|
17
17
|
from chia.util.chia_logging import initialize_logging
|
|
@@ -158,7 +158,7 @@ async def async_main(config: dict[str, Any], net_config: dict[str, Any]) -> None
|
|
|
158
158
|
|
|
159
159
|
async def stop(
|
|
160
160
|
signal_: signal.Signals,
|
|
161
|
-
stack_frame:
|
|
161
|
+
stack_frame: FrameType | None,
|
|
162
162
|
loop: asyncio.AbstractEventLoop,
|
|
163
163
|
) -> None:
|
|
164
164
|
await process_mgr.kill_processes()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import TYPE_CHECKING, Any, ClassVar,
|
|
3
|
+
from typing import TYPE_CHECKING, Any, ClassVar, cast
|
|
4
4
|
|
|
5
5
|
from chia.rpc.rpc_server import Endpoint
|
|
6
6
|
from chia.timelord.timelord import Timelord
|
|
@@ -20,7 +20,7 @@ class TimelordRpcApi:
|
|
|
20
20
|
def get_routes(self) -> dict[str, Endpoint]:
|
|
21
21
|
return {}
|
|
22
22
|
|
|
23
|
-
async def _state_changed(self, change: str, change_data:
|
|
23
|
+
async def _state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> list[WsRpcMessage]:
|
|
24
24
|
payloads = []
|
|
25
25
|
|
|
26
26
|
if change_data is None:
|
chia/timelord/timelord_state.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import Optional, Union
|
|
5
4
|
|
|
6
5
|
from chia_rs import ChallengeBlockInfo, ConsensusConstants, EndOfSubSlotBundle, SubEpochSummary
|
|
7
6
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -28,17 +27,17 @@ class LastState:
|
|
|
28
27
|
|
|
29
28
|
def __init__(self, constants: ConsensusConstants):
|
|
30
29
|
self.state_type: StateType = StateType.FIRST_SUB_SLOT
|
|
31
|
-
self.peak:
|
|
32
|
-
self.subslot_end:
|
|
30
|
+
self.peak: timelord_protocol.NewPeakTimelord | None = None
|
|
31
|
+
self.subslot_end: EndOfSubSlotBundle | None = None
|
|
33
32
|
self.last_ip: uint64 = uint64(0)
|
|
34
33
|
self.deficit: uint8 = constants.MIN_BLOCKS_PER_CHALLENGE_BLOCK
|
|
35
|
-
self.sub_epoch_summary:
|
|
34
|
+
self.sub_epoch_summary: SubEpochSummary | None = None
|
|
36
35
|
self.constants: ConsensusConstants = constants
|
|
37
36
|
self.last_weight: uint128 = uint128(0)
|
|
38
37
|
self.last_height: uint32 = uint32(0)
|
|
39
38
|
self.total_iters: uint128 = uint128(0)
|
|
40
39
|
self.last_challenge_sb_or_eos_total_iters = uint128(0)
|
|
41
|
-
self.last_tx_block_total_iters:
|
|
40
|
+
self.last_tx_block_total_iters: uint128 | None = None
|
|
42
41
|
self.last_tx_block_block_height: uint32 = uint32(0)
|
|
43
42
|
self.last_tx_block_sp_index: uint8 = uint8(0)
|
|
44
43
|
self.last_peak_challenge: bytes32 = constants.GENESIS_CHALLENGE
|
|
@@ -49,7 +48,7 @@ class LastState:
|
|
|
49
48
|
self.passed_ses_height_but_not_yet_included = False
|
|
50
49
|
self.infused_ses = False
|
|
51
50
|
|
|
52
|
-
def set_state(self, state:
|
|
51
|
+
def set_state(self, state: timelord_protocol.NewPeakTimelord | EndOfSubSlotBundle) -> None:
|
|
53
52
|
if isinstance(state, timelord_protocol.NewPeakTimelord):
|
|
54
53
|
self.state_type = StateType.PEAK
|
|
55
54
|
self.peak = state
|
|
@@ -111,7 +110,7 @@ class LastState:
|
|
|
111
110
|
else:
|
|
112
111
|
assert False
|
|
113
112
|
|
|
114
|
-
reward_challenge:
|
|
113
|
+
reward_challenge: bytes32 | None = self.get_challenge(Chain.REWARD_CHAIN)
|
|
115
114
|
assert reward_challenge is not None # Reward chain always has VDFs
|
|
116
115
|
self.reward_challenge_cache.append((reward_challenge, self.total_iters))
|
|
117
116
|
log.info(f"Updated timelord peak to {reward_challenge.hex()}, total iters: {self.total_iters}")
|
|
@@ -145,7 +144,7 @@ class LastState:
|
|
|
145
144
|
def get_total_iters(self) -> uint128:
|
|
146
145
|
return self.total_iters
|
|
147
146
|
|
|
148
|
-
def get_last_peak_challenge(self) ->
|
|
147
|
+
def get_last_peak_challenge(self) -> bytes32 | None:
|
|
149
148
|
return self.last_peak_challenge
|
|
150
149
|
|
|
151
150
|
def get_difficulty(self) -> uint64:
|
|
@@ -163,7 +162,7 @@ class LastState:
|
|
|
163
162
|
"""
|
|
164
163
|
return self.state_type == StateType.END_OF_SUB_SLOT and self.infused_ses
|
|
165
164
|
|
|
166
|
-
def get_next_sub_epoch_summary(self) ->
|
|
165
|
+
def get_next_sub_epoch_summary(self) -> SubEpochSummary | None:
|
|
167
166
|
if self.state_type in {StateType.FIRST_SUB_SLOT, StateType.END_OF_SUB_SLOT}:
|
|
168
167
|
# Can only infuse SES after a peak (in an end of sub slot)
|
|
169
168
|
return None
|
|
@@ -173,7 +172,7 @@ class LastState:
|
|
|
173
172
|
return self.sub_epoch_summary
|
|
174
173
|
return None
|
|
175
174
|
|
|
176
|
-
def get_last_block_total_iters(self) ->
|
|
175
|
+
def get_last_block_total_iters(self) -> uint128 | None:
|
|
177
176
|
return self.last_tx_block_total_iters
|
|
178
177
|
|
|
179
178
|
def get_last_tx_height(self) -> uint32:
|
|
@@ -182,7 +181,7 @@ class LastState:
|
|
|
182
181
|
def get_passed_ses_height_but_not_yet_included(self) -> bool:
|
|
183
182
|
return self.passed_ses_height_but_not_yet_included
|
|
184
183
|
|
|
185
|
-
def get_challenge(self, chain: Chain) ->
|
|
184
|
+
def get_challenge(self, chain: Chain) -> bytes32 | None:
|
|
186
185
|
if self.state_type == StateType.FIRST_SUB_SLOT:
|
|
187
186
|
assert self.peak is None and self.subslot_end is None
|
|
188
187
|
if chain == Chain.CHALLENGE_CHAIN:
|
|
@@ -222,7 +221,7 @@ class LastState:
|
|
|
222
221
|
return None
|
|
223
222
|
return None
|
|
224
223
|
|
|
225
|
-
def get_initial_form(self, chain: Chain) ->
|
|
224
|
+
def get_initial_form(self, chain: Chain) -> ClassgroupElement | None:
|
|
226
225
|
if self.state_type == StateType.FIRST_SUB_SLOT:
|
|
227
226
|
return ClassgroupElement.get_default_element()
|
|
228
227
|
elif self.state_type == StateType.PEAK:
|
chia/types/block_protocol.py
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Optional
|
|
4
|
-
|
|
5
3
|
from chia_rs.sized_bytes import bytes32
|
|
6
4
|
from chia_rs.sized_ints import uint32
|
|
7
5
|
from typing_extensions import Protocol
|
|
@@ -14,7 +12,7 @@ class BlockInfo(Protocol):
|
|
|
14
12
|
def prev_header_hash(self) -> bytes32: ...
|
|
15
13
|
|
|
16
14
|
@property
|
|
17
|
-
def transactions_generator(self) ->
|
|
15
|
+
def transactions_generator(self) -> SerializedProgram | None: ...
|
|
18
16
|
|
|
19
17
|
@property
|
|
20
18
|
def transactions_generator_ref_list(self) -> list[uint32]: ...
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Union
|
|
4
|
-
|
|
5
3
|
from chia_rs import Coin
|
|
6
4
|
from chia_rs.sized_bytes import bytes32
|
|
7
5
|
from chia_rs.sized_ints import uint64
|
|
@@ -11,7 +9,7 @@ from chia.util.hash import std_hash
|
|
|
11
9
|
__all__ = ["Coin", "coin_as_list", "hash_coin_ids"]
|
|
12
10
|
|
|
13
11
|
|
|
14
|
-
def coin_as_list(c: Coin) -> list[
|
|
12
|
+
def coin_as_list(c: Coin) -> list[bytes32 | uint64]:
|
|
15
13
|
return [c.parent_coin_info, c.puzzle_hash, uint64(c.amount)]
|
|
16
14
|
|
|
17
15
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import io
|
|
4
|
-
from
|
|
4
|
+
from collections.abc import Callable
|
|
5
|
+
from typing import TYPE_CHECKING, Any, ClassVar, TypeVar
|
|
5
6
|
|
|
6
7
|
from chia_rs import MEMPOOL_MODE, run_chia_program, tree_hash
|
|
7
8
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -30,6 +31,8 @@ class Program(SExp):
|
|
|
30
31
|
A thin wrapper around s-expression data intended to be invoked with "eval".
|
|
31
32
|
"""
|
|
32
33
|
|
|
34
|
+
NIL: ClassVar[Program]
|
|
35
|
+
|
|
33
36
|
@classmethod
|
|
34
37
|
def parse(cls, f) -> Self:
|
|
35
38
|
return sexp_from_stream(f, cls.to)
|
|
@@ -219,7 +222,7 @@ class Program(SExp):
|
|
|
219
222
|
return int_from_bytes(self.as_atom())
|
|
220
223
|
|
|
221
224
|
def as_atom(self) -> bytes:
|
|
222
|
-
ret:
|
|
225
|
+
ret: bytes | None = self.atom
|
|
223
226
|
if ret is None:
|
|
224
227
|
raise ValueError("expected atom")
|
|
225
228
|
return ret
|
|
@@ -247,7 +250,7 @@ def _tree_hash(node: SExp, precalculated: set[bytes32]) -> bytes32:
|
|
|
247
250
|
return bytes32(std_hash(s))
|
|
248
251
|
|
|
249
252
|
|
|
250
|
-
NIL = Program.
|
|
253
|
+
Program.NIL = Program.to(None)
|
|
251
254
|
|
|
252
255
|
|
|
253
256
|
# real return type is more like Union[T_Program, CastableType] when considering corner and terminal cases
|
|
@@ -284,7 +287,7 @@ def _sexp_replace(sexp: T_CLVMStorage, to_sexp: Callable[[Any], T_Program], **kw
|
|
|
284
287
|
return to_sexp((new_f, new_r))
|
|
285
288
|
|
|
286
289
|
|
|
287
|
-
def _run(prg:
|
|
290
|
+
def _run(prg: SerializedProgram | Program, max_cost: int, flags: int, args: Any) -> tuple[int, Program]:
|
|
288
291
|
if isinstance(prg, SerializedProgram):
|
|
289
292
|
result = prg.run_rust(max_cost, flags, args)
|
|
290
293
|
return result[0], Program(result[1]) # type: ignore[arg-type]
|
|
@@ -292,7 +295,7 @@ def _run(prg: Union[SerializedProgram, Program], max_cost: int, flags: int, args
|
|
|
292
295
|
return prg._run(max_cost, flags, args)
|
|
293
296
|
|
|
294
297
|
|
|
295
|
-
def uncurry(prg:
|
|
298
|
+
def uncurry(prg: SerializedProgram | Program) -> tuple[Program, Program]:
|
|
296
299
|
if isinstance(prg, SerializedProgram):
|
|
297
300
|
result = prg.uncurry_rust()
|
|
298
301
|
return Program(result[0]), Program(result[1]) # type: ignore[arg-type]
|
|
@@ -300,13 +303,13 @@ def uncurry(prg: Union[SerializedProgram, Program]) -> tuple[Program, Program]:
|
|
|
300
303
|
return prg.uncurry()
|
|
301
304
|
|
|
302
305
|
|
|
303
|
-
def run(prg:
|
|
306
|
+
def run(prg: SerializedProgram | Program, args: Any) -> Program:
|
|
304
307
|
return _run(prg, INFINITE_COST, 0, args)[1]
|
|
305
308
|
|
|
306
309
|
|
|
307
|
-
def run_with_cost(prg:
|
|
310
|
+
def run_with_cost(prg: SerializedProgram | Program, max_cost: int, args: Any) -> tuple[int, Program]:
|
|
308
311
|
return _run(prg, max_cost, 0, args)
|
|
309
312
|
|
|
310
313
|
|
|
311
|
-
def run_mempool_with_cost(prg:
|
|
314
|
+
def run_mempool_with_cost(prg: SerializedProgram | Program, max_cost: int, args: Any) -> tuple[int, Program]:
|
|
312
315
|
return _run(prg, max_cost, MEMPOOL_MODE, args)
|