chia-blockchain 2.5.7rc3__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 +12 -7
- 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 +16 -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.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc3.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.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from collections.abc import Collection
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
from chia_rs import FullBlock, HeaderBlock, SpendBundleConditions
|
|
7
6
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -12,7 +11,7 @@ from chia.types.blockchain_format.coin import Coin
|
|
|
12
11
|
|
|
13
12
|
|
|
14
13
|
def get_block_header(
|
|
15
|
-
block: FullBlock, removals_and_additions:
|
|
14
|
+
block: FullBlock, removals_and_additions: tuple[Collection[bytes32], Collection[Coin]] | None = None
|
|
16
15
|
) -> HeaderBlock:
|
|
17
16
|
"""
|
|
18
17
|
Returns a HeaderBlock from a FullBlock.
|
|
@@ -51,7 +50,7 @@ def get_block_header(
|
|
|
51
50
|
)
|
|
52
51
|
|
|
53
52
|
|
|
54
|
-
def tx_removals_and_additions(results:
|
|
53
|
+
def tx_removals_and_additions(results: SpendBundleConditions | None) -> tuple[list[bytes32], list[Coin]]:
|
|
55
54
|
"""
|
|
56
55
|
Doesn't return farmer and pool reward.
|
|
57
56
|
"""
|
|
@@ -1,11 +1,10 @@
|
|
|
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 BlockRecord, ConsensusConstants, FullBlock, HeaderBlock, UnfinishedBlock
|
|
7
6
|
from chia_rs.sized_bytes import bytes32
|
|
8
|
-
from chia_rs.sized_ints import uint32, uint64
|
|
7
|
+
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
9
8
|
|
|
10
9
|
from chia.consensus.blockchain_interface import BlockRecordsProtocol
|
|
11
10
|
from chia.types.unfinished_header_block import UnfinishedHeaderBlock
|
|
@@ -14,7 +13,7 @@ log = logging.getLogger(__name__)
|
|
|
14
13
|
|
|
15
14
|
|
|
16
15
|
def final_eos_is_already_included(
|
|
17
|
-
header_block:
|
|
16
|
+
header_block: UnfinishedHeaderBlock | UnfinishedBlock | HeaderBlock | FullBlock,
|
|
18
17
|
blocks: BlockRecordsProtocol,
|
|
19
18
|
sub_slot_iters: uint64,
|
|
20
19
|
) -> bool:
|
|
@@ -52,7 +51,7 @@ def final_eos_is_already_included(
|
|
|
52
51
|
|
|
53
52
|
def get_block_challenge(
|
|
54
53
|
constants: ConsensusConstants,
|
|
55
|
-
header_block:
|
|
54
|
+
header_block: UnfinishedHeaderBlock | UnfinishedBlock | HeaderBlock | FullBlock,
|
|
56
55
|
blocks: BlockRecordsProtocol,
|
|
57
56
|
genesis_block: bool,
|
|
58
57
|
overflow: bool,
|
|
@@ -102,28 +101,45 @@ def get_block_challenge(
|
|
|
102
101
|
return challenge
|
|
103
102
|
|
|
104
103
|
|
|
105
|
-
|
|
104
|
+
# Returns the previous transaction block up to the blocks signage point
|
|
105
|
+
# we use this for block validation since when the block is farmed we do not know the latest transaction block
|
|
106
|
+
# since a new one might be infused by the time the block is infused
|
|
107
|
+
def pre_sp_tx_block(
|
|
108
|
+
constants: ConsensusConstants,
|
|
109
|
+
blocks: BlockRecordsProtocol,
|
|
110
|
+
*,
|
|
111
|
+
prev_b_hash: bytes32,
|
|
112
|
+
sp_index: uint8,
|
|
113
|
+
first_in_sub_slot: bool,
|
|
114
|
+
) -> BlockRecord | None:
|
|
115
|
+
if prev_b_hash == constants.GENESIS_CHALLENGE:
|
|
116
|
+
return None
|
|
117
|
+
curr = blocks.block_record(prev_b_hash)
|
|
118
|
+
before_slot = first_in_sub_slot
|
|
119
|
+
while curr.height > 0:
|
|
120
|
+
if curr.is_transaction_block and (before_slot or curr.signage_point_index < sp_index):
|
|
121
|
+
break
|
|
122
|
+
if curr.first_in_sub_slot:
|
|
123
|
+
before_slot = True
|
|
124
|
+
curr = blocks.block_record(curr.prev_hash)
|
|
125
|
+
return curr
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def pre_sp_tx_block_height(
|
|
129
|
+
constants: ConsensusConstants,
|
|
106
130
|
blocks: BlockRecordsProtocol,
|
|
107
|
-
|
|
131
|
+
*,
|
|
132
|
+
prev_b_hash: bytes32,
|
|
133
|
+
sp_index: uint8,
|
|
134
|
+
first_in_sub_slot: bool,
|
|
108
135
|
) -> uint32:
|
|
109
|
-
|
|
110
|
-
|
|
136
|
+
latest_tx_block = pre_sp_tx_block(
|
|
137
|
+
constants=constants,
|
|
138
|
+
blocks=blocks,
|
|
139
|
+
prev_b_hash=prev_b_hash,
|
|
140
|
+
sp_index=sp_index,
|
|
141
|
+
first_in_sub_slot=first_in_sub_slot,
|
|
142
|
+
)
|
|
143
|
+
if latest_tx_block is None:
|
|
111
144
|
return uint32(0)
|
|
112
|
-
|
|
113
|
-
if prev_b.prev_transaction_block_hash is not None:
|
|
114
|
-
return prev_b.height
|
|
115
|
-
else:
|
|
116
|
-
curr = prev_b
|
|
117
|
-
elif isinstance(prev_b, FullBlock):
|
|
118
|
-
if prev_b.foliage_transaction_block is not None:
|
|
119
|
-
return prev_b.height
|
|
120
|
-
else:
|
|
121
|
-
curr = blocks.block_record(prev_b.header_hash)
|
|
122
|
-
elif isinstance(prev_b, HeaderBlock):
|
|
123
|
-
if prev_b.foliage_transaction_block is not None:
|
|
124
|
-
return prev_b.height
|
|
125
|
-
else:
|
|
126
|
-
curr = blocks.block_record(prev_b.header_hash)
|
|
127
|
-
while curr.is_transaction_block is False and curr.height > 0:
|
|
128
|
-
curr = blocks.block_record(curr.prev_hash)
|
|
129
|
-
return curr.height
|
|
145
|
+
return latest_tx_block.height
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from collections.abc import Awaitable
|
|
4
|
-
from typing import Callable, Optional
|
|
3
|
+
from collections.abc import Awaitable, Callable
|
|
5
4
|
|
|
6
5
|
from chia_rs.sized_bytes import bytes32
|
|
7
6
|
from chia_rs.sized_ints import uint32
|
|
@@ -13,7 +12,7 @@ from chia.types.generator_types import BlockGenerator
|
|
|
13
12
|
async def get_block_generator(
|
|
14
13
|
lookup_block_generators: Callable[[bytes32, set[uint32]], Awaitable[dict[uint32, bytes]]],
|
|
15
14
|
block: BlockInfo,
|
|
16
|
-
) ->
|
|
15
|
+
) -> BlockGenerator | None:
|
|
17
16
|
ref_list = block.transactions_generator_ref_list
|
|
18
17
|
if block.transactions_generator is None:
|
|
19
18
|
assert len(ref_list) == 0
|
|
@@ -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 BlockRecord, ConsensusConstants, FullBlock, SubEpochSummary, UnfinishedBlock
|
|
7
6
|
from chia_rs.sized_ints import uint8, uint32, uint64, uint128
|
|
@@ -25,9 +24,9 @@ def make_sub_epoch_summary(
|
|
|
25
24
|
blocks: BlockRecordsProtocol,
|
|
26
25
|
blocks_included_height: uint32,
|
|
27
26
|
prev_prev_block: BlockRecord,
|
|
28
|
-
new_difficulty:
|
|
29
|
-
new_sub_slot_iters:
|
|
30
|
-
prev_ses_block:
|
|
27
|
+
new_difficulty: uint64 | None,
|
|
28
|
+
new_sub_slot_iters: uint64 | None,
|
|
29
|
+
prev_ses_block: BlockRecord | None = None,
|
|
31
30
|
) -> SubEpochSummary:
|
|
32
31
|
"""
|
|
33
32
|
Creates a sub-epoch-summary object, assuming that the first block in the new sub-epoch is at height
|
|
@@ -53,6 +52,7 @@ def make_sub_epoch_summary(
|
|
|
53
52
|
uint8(0),
|
|
54
53
|
None,
|
|
55
54
|
None,
|
|
55
|
+
None,
|
|
56
56
|
)
|
|
57
57
|
if prev_ses_block is None:
|
|
58
58
|
curr: BlockRecord = prev_prev_block
|
|
@@ -70,6 +70,7 @@ def make_sub_epoch_summary(
|
|
|
70
70
|
uint8(prev_ses_block.height % constants.SUB_EPOCH_BLOCKS),
|
|
71
71
|
new_difficulty,
|
|
72
72
|
new_sub_slot_iters,
|
|
73
|
+
None, # challenge_merkle_root
|
|
73
74
|
)
|
|
74
75
|
|
|
75
76
|
|
|
@@ -77,9 +78,9 @@ def next_sub_epoch_summary(
|
|
|
77
78
|
constants: ConsensusConstants,
|
|
78
79
|
blocks: BlockRecordsProtocol,
|
|
79
80
|
required_iters: uint64,
|
|
80
|
-
block:
|
|
81
|
+
block: UnfinishedBlock | FullBlock,
|
|
81
82
|
can_finish_soon: bool = False,
|
|
82
|
-
) ->
|
|
83
|
+
) -> SubEpochSummary | None:
|
|
83
84
|
"""
|
|
84
85
|
Returns the sub-epoch summary that can be included in the block after block. If it should include one. Block
|
|
85
86
|
must be eligible to be the last block in the epoch. If not, returns None. Assumes that there is a new slot
|
|
@@ -97,7 +98,7 @@ def next_sub_epoch_summary(
|
|
|
97
98
|
object: the new sub-epoch summary
|
|
98
99
|
"""
|
|
99
100
|
signage_point_index = block.reward_chain_block.signage_point_index
|
|
100
|
-
prev_b:
|
|
101
|
+
prev_b: BlockRecord | None = blocks.try_block_record(block.prev_header_hash)
|
|
101
102
|
if prev_b is None or prev_b.height == 0:
|
|
102
103
|
return None
|
|
103
104
|
|
|
@@ -8,7 +8,6 @@ import traceback
|
|
|
8
8
|
from collections.abc import Awaitable, Collection
|
|
9
9
|
from concurrent.futures import Executor
|
|
10
10
|
from dataclasses import dataclass
|
|
11
|
-
from typing import Optional
|
|
12
11
|
|
|
13
12
|
from chia_rs import (
|
|
14
13
|
BlockRecord,
|
|
@@ -28,7 +27,7 @@ from chia.consensus.block_header_validation import validate_finished_header_bloc
|
|
|
28
27
|
from chia.consensus.blockchain_interface import BlockRecordsProtocol
|
|
29
28
|
from chia.consensus.full_block_to_block_record import block_to_block_record
|
|
30
29
|
from chia.consensus.generator_tools import get_block_header, tx_removals_and_additions
|
|
31
|
-
from chia.consensus.get_block_challenge import get_block_challenge,
|
|
30
|
+
from chia.consensus.get_block_challenge import get_block_challenge, pre_sp_tx_block_height
|
|
32
31
|
from chia.consensus.get_block_generator import get_block_generator
|
|
33
32
|
from chia.consensus.pot_iterations import (
|
|
34
33
|
is_overflow_block,
|
|
@@ -46,9 +45,9 @@ log = logging.getLogger(__name__)
|
|
|
46
45
|
@streamable
|
|
47
46
|
@dataclass(frozen=True)
|
|
48
47
|
class PreValidationResult(Streamable):
|
|
49
|
-
error:
|
|
50
|
-
required_iters:
|
|
51
|
-
conds:
|
|
48
|
+
error: uint16 | None
|
|
49
|
+
required_iters: uint64 | None # Iff error is None
|
|
50
|
+
conds: SpendBundleConditions | None # Iff error is None and block is a transaction block
|
|
52
51
|
timing: uint32 # the time (in milliseconds) it took to pre-validate the block
|
|
53
52
|
|
|
54
53
|
@property
|
|
@@ -60,11 +59,11 @@ class PreValidationResult(Streamable):
|
|
|
60
59
|
|
|
61
60
|
# this layer of abstraction is here to let wallet tests monkeypatch it
|
|
62
61
|
def _run_block(
|
|
63
|
-
block: FullBlock, prev_generators: list[bytes], constants: ConsensusConstants
|
|
64
|
-
) -> tuple[
|
|
62
|
+
block: FullBlock, prev_generators: list[bytes], prev_tx_height: uint32, constants: ConsensusConstants
|
|
63
|
+
) -> tuple[int | None, SpendBundleConditions | None]:
|
|
65
64
|
assert block.transactions_generator is not None
|
|
66
65
|
assert block.transactions_info is not None
|
|
67
|
-
flags = get_flags_for_height_and_constants(
|
|
66
|
+
flags = get_flags_for_height_and_constants(prev_tx_height, constants)
|
|
68
67
|
if block.height >= constants.HARD_FORK_HEIGHT:
|
|
69
68
|
run_block = run_block_generator2
|
|
70
69
|
else:
|
|
@@ -84,8 +83,8 @@ def _pre_validate_block(
|
|
|
84
83
|
constants: ConsensusConstants,
|
|
85
84
|
blockchain: BlockRecordsProtocol,
|
|
86
85
|
block: FullBlock,
|
|
87
|
-
prev_generators:
|
|
88
|
-
conds:
|
|
86
|
+
prev_generators: list[bytes] | None,
|
|
87
|
+
conds: SpendBundleConditions | None,
|
|
89
88
|
expected_vs: ValidationState,
|
|
90
89
|
) -> PreValidationResult:
|
|
91
90
|
"""
|
|
@@ -101,7 +100,7 @@ def _pre_validate_block(
|
|
|
101
100
|
|
|
102
101
|
try:
|
|
103
102
|
validation_start = time.monotonic()
|
|
104
|
-
removals_and_additions:
|
|
103
|
+
removals_and_additions: tuple[Collection[bytes32], Collection[Coin]] | None = None
|
|
105
104
|
if conds is not None:
|
|
106
105
|
assert conds.validated_signature is True
|
|
107
106
|
assert block.transactions_generator is not None
|
|
@@ -116,7 +115,14 @@ def _pre_validate_block(
|
|
|
116
115
|
uint16(Err.BLOCK_COST_EXCEEDS_MAX.value), None, None, uint32(validation_time * 1000)
|
|
117
116
|
)
|
|
118
117
|
|
|
119
|
-
|
|
118
|
+
prev_tx_height = pre_sp_tx_block_height(
|
|
119
|
+
constants=constants,
|
|
120
|
+
blocks=blockchain,
|
|
121
|
+
prev_b_hash=block.prev_header_hash,
|
|
122
|
+
sp_index=block.reward_chain_block.signage_point_index,
|
|
123
|
+
first_in_sub_slot=len(block.finished_sub_slots) > 0,
|
|
124
|
+
)
|
|
125
|
+
err, conds = _run_block(block, prev_generators, prev_tx_height, constants)
|
|
120
126
|
|
|
121
127
|
assert (err is None) != (conds is None)
|
|
122
128
|
if err is not None:
|
|
@@ -137,7 +143,7 @@ def _pre_validate_block(
|
|
|
137
143
|
True, # check_filter
|
|
138
144
|
expected_vs,
|
|
139
145
|
)
|
|
140
|
-
error_int:
|
|
146
|
+
error_int: uint16 | None = None
|
|
141
147
|
if error is not None:
|
|
142
148
|
error_int = uint16(error.code.value)
|
|
143
149
|
|
|
@@ -160,10 +166,10 @@ async def pre_validate_block(
|
|
|
160
166
|
blockchain: AugmentedBlockchain,
|
|
161
167
|
block: FullBlock,
|
|
162
168
|
pool: Executor,
|
|
163
|
-
conds:
|
|
169
|
+
conds: SpendBundleConditions | None,
|
|
164
170
|
vs: ValidationState,
|
|
165
171
|
*,
|
|
166
|
-
wp_summaries:
|
|
172
|
+
wp_summaries: list[SubEpochSummary] | None = None,
|
|
167
173
|
) -> Awaitable[PreValidationResult]:
|
|
168
174
|
"""
|
|
169
175
|
This method must be called under the blockchain lock
|
|
@@ -189,7 +195,7 @@ async def pre_validate_block(
|
|
|
189
195
|
wp_summaries:
|
|
190
196
|
validate_signatures:
|
|
191
197
|
"""
|
|
192
|
-
prev_b:
|
|
198
|
+
prev_b: BlockRecord | None = None
|
|
193
199
|
|
|
194
200
|
async def return_error(error_code: Err) -> PreValidationResult:
|
|
195
201
|
return PreValidationResult(uint16(error_code.value), None, None, uint32(0))
|
|
@@ -220,8 +226,13 @@ async def pre_validate_block(
|
|
|
220
226
|
cc_sp_hash,
|
|
221
227
|
block.height,
|
|
222
228
|
vs.difficulty,
|
|
223
|
-
|
|
224
|
-
|
|
229
|
+
pre_sp_tx_block_height(
|
|
230
|
+
constants=constants,
|
|
231
|
+
blocks=blockchain,
|
|
232
|
+
prev_b_hash=block.prev_header_hash,
|
|
233
|
+
sp_index=block.reward_chain_block.signage_point_index,
|
|
234
|
+
first_in_sub_slot=len(block.finished_sub_slots) > 0,
|
|
235
|
+
),
|
|
225
236
|
)
|
|
226
237
|
if required_iters is None:
|
|
227
238
|
return return_error(Err.INVALID_POSPACE)
|
|
@@ -248,10 +259,10 @@ async def pre_validate_block(
|
|
|
248
259
|
blockchain.add_extra_block(block, block_rec) # Temporarily add block to chain
|
|
249
260
|
prev_b = block_rec
|
|
250
261
|
|
|
251
|
-
previous_generators:
|
|
262
|
+
previous_generators: list[bytes] | None = None
|
|
252
263
|
|
|
253
264
|
try:
|
|
254
|
-
block_generator:
|
|
265
|
+
block_generator: BlockGenerator | None = await get_block_generator(blockchain.lookup_block_generators, block)
|
|
255
266
|
if block_generator is not None:
|
|
256
267
|
previous_generators = block_generator.generator_refs
|
|
257
268
|
except ValueError:
|
chia/consensus/pos_quality.py
CHANGED
|
@@ -1,28 +1,14 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from chia_rs import
|
|
3
|
+
from chia_rs import ConsensusConstants, PlotParam
|
|
4
4
|
from chia_rs.sized_ints import uint64
|
|
5
5
|
|
|
6
6
|
# The actual space in bytes of a plot, is _expected_plot_size(k) * UI_ACTUAL_SPACE_CONSTANT_FACTO
|
|
7
7
|
# This is not used in consensus, only for display purposes
|
|
8
8
|
UI_ACTUAL_SPACE_CONSTANT_FACTOR = 0.78
|
|
9
9
|
|
|
10
|
-
# TODO: todo_v2_plots these values prelimenary. When the plotter is complete,
|
|
11
|
-
# replace this table with a closed form formula
|
|
12
|
-
v2_plot_sizes: dict[int, uint64] = {
|
|
13
|
-
16: uint64(222_863),
|
|
14
|
-
18: uint64(1_048_737),
|
|
15
|
-
20: uint64(4_824_084),
|
|
16
|
-
22: uint64(21_812_958),
|
|
17
|
-
24: uint64(97_318_160),
|
|
18
|
-
26: uint64(429_539_960),
|
|
19
|
-
28: uint64(1_879_213_114),
|
|
20
|
-
30: uint64(8_161_097_549),
|
|
21
|
-
32: uint64(35_221_370_574),
|
|
22
|
-
}
|
|
23
10
|
|
|
24
|
-
|
|
25
|
-
def _expected_plot_size(size: PlotSize) -> uint64:
|
|
11
|
+
def _expected_plot_size(size: PlotParam, constants: ConsensusConstants) -> uint64:
|
|
26
12
|
"""
|
|
27
13
|
Given the plot size parameter k (which is between 32 and 59), computes the
|
|
28
14
|
expected size of the plot in bytes (times a constant factor). This is based on efficient encoding
|
|
@@ -36,10 +22,7 @@ def _expected_plot_size(size: PlotSize) -> uint64:
|
|
|
36
22
|
k = size.size_v1
|
|
37
23
|
return uint64(((2 * k) + 1) * (2 ** (k - 1)))
|
|
38
24
|
else:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
else:
|
|
44
|
-
# TODO: todo_v2_plots support test plots with lower k-values
|
|
45
|
-
return uint64(0)
|
|
25
|
+
k = constants.PLOT_SIZE_V2
|
|
26
|
+
# TODO: todo_v2_plots this formula may change slightly before the
|
|
27
|
+
# final version of the plotter. Revisit this when the plotter is complete
|
|
28
|
+
return uint64((2**k) * (k + 1.46) / 8)
|
chia/consensus/pot_iterations.py
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
4
|
-
|
|
5
|
-
from chia_rs import ConsensusConstants, PlotSize, ProofOfSpace
|
|
3
|
+
from chia_rs import ConsensusConstants, PlotParam, ProofOfSpace
|
|
6
4
|
from chia_rs.sized_bytes import bytes32
|
|
7
5
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
8
6
|
|
|
@@ -28,25 +26,6 @@ def calculate_sp_iters(constants: ConsensusConstants, sub_slot_iters: uint64, si
|
|
|
28
26
|
return uint64(calculate_sp_interval_iters(constants, sub_slot_iters) * signage_point_index)
|
|
29
27
|
|
|
30
28
|
|
|
31
|
-
def calculate_phase_out(
|
|
32
|
-
constants: ConsensusConstants,
|
|
33
|
-
sub_slot_iters: uint64,
|
|
34
|
-
prev_transaction_block_height: uint32,
|
|
35
|
-
) -> uint64:
|
|
36
|
-
if prev_transaction_block_height <= constants.HARD_FORK2_HEIGHT:
|
|
37
|
-
return uint64(0)
|
|
38
|
-
elif uint32(prev_transaction_block_height - constants.HARD_FORK2_HEIGHT) >= constants.PLOT_V1_PHASE_OUT:
|
|
39
|
-
return uint64(calculate_sp_interval_iters(constants, sub_slot_iters))
|
|
40
|
-
|
|
41
|
-
return uint64(
|
|
42
|
-
(
|
|
43
|
-
uint32(prev_transaction_block_height - constants.HARD_FORK2_HEIGHT)
|
|
44
|
-
* calculate_sp_interval_iters(constants, sub_slot_iters)
|
|
45
|
-
)
|
|
46
|
-
// constants.PLOT_V1_PHASE_OUT
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
|
|
50
29
|
def calculate_ip_iters(
|
|
51
30
|
constants: ConsensusConstants,
|
|
52
31
|
sub_slot_iters: uint64,
|
|
@@ -75,11 +54,17 @@ def validate_pospace_and_get_required_iters(
|
|
|
75
54
|
cc_sp_hash: bytes32,
|
|
76
55
|
height: uint32,
|
|
77
56
|
difficulty: uint64,
|
|
78
|
-
sub_slot_iters: uint64,
|
|
79
57
|
prev_transaction_block_height: uint32, # this is the height of the last tx block before the current block SP
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
58
|
+
height_agnostic: bool = False,
|
|
59
|
+
) -> uint64 | None:
|
|
60
|
+
q_str: bytes32 | None = verify_and_get_quality_string(
|
|
61
|
+
proof_of_space,
|
|
62
|
+
constants,
|
|
63
|
+
challenge,
|
|
64
|
+
cc_sp_hash,
|
|
65
|
+
height=height,
|
|
66
|
+
prev_transaction_block_height=prev_transaction_block_height,
|
|
67
|
+
height_agnostic=height_agnostic,
|
|
83
68
|
)
|
|
84
69
|
if q_str is None:
|
|
85
70
|
return None
|
|
@@ -87,41 +72,29 @@ def validate_pospace_and_get_required_iters(
|
|
|
87
72
|
return calculate_iterations_quality(
|
|
88
73
|
constants,
|
|
89
74
|
q_str,
|
|
90
|
-
proof_of_space.
|
|
75
|
+
proof_of_space.param(),
|
|
91
76
|
difficulty,
|
|
92
77
|
cc_sp_hash,
|
|
93
|
-
sub_slot_iters,
|
|
94
|
-
prev_transaction_block_height,
|
|
95
78
|
)
|
|
96
79
|
|
|
97
80
|
|
|
98
81
|
def calculate_iterations_quality(
|
|
99
82
|
constants: ConsensusConstants,
|
|
100
83
|
quality_string: bytes32,
|
|
101
|
-
size:
|
|
84
|
+
size: PlotParam,
|
|
102
85
|
difficulty: uint64,
|
|
103
86
|
cc_sp_output_hash: bytes32,
|
|
104
|
-
ssi: uint64,
|
|
105
|
-
prev_transaction_block_height: uint32, # this is the height of the last tx block before the current block SP
|
|
106
87
|
) -> uint64:
|
|
107
88
|
"""
|
|
108
89
|
Calculates the number of iterations from the quality. This is derives as the difficulty times the constant factor
|
|
109
90
|
times a random number between 0 and 1 (based on quality string), divided by plot size.
|
|
110
91
|
"""
|
|
111
|
-
if size.size_v1 is not None:
|
|
112
|
-
assert size.size_v2 is None
|
|
113
|
-
phase_out = calculate_phase_out(constants, ssi, prev_transaction_block_height)
|
|
114
|
-
else:
|
|
115
|
-
phase_out = uint64(0)
|
|
116
92
|
|
|
117
93
|
sp_quality_string: bytes32 = std_hash(quality_string + cc_sp_output_hash)
|
|
118
94
|
iters = uint64(
|
|
119
|
-
(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
// (int(pow(2, 256)) * int(_expected_plot_size(size)))
|
|
124
|
-
)
|
|
125
|
-
+ phase_out
|
|
95
|
+
int(difficulty)
|
|
96
|
+
* int(constants.DIFFICULTY_CONSTANT_FACTOR)
|
|
97
|
+
* int.from_bytes(sp_quality_string, "big", signed=False)
|
|
98
|
+
// (int(pow(2, 256)) * int(_expected_plot_size(size, constants)))
|
|
126
99
|
)
|
|
127
100
|
return max(iters, uint64(1))
|
chia/consensus/signage_point.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
from chia.types.blockchain_format.vdf import VDFInfo, VDFProof
|
|
7
6
|
from chia.util.streamable import Streamable, streamable
|
|
@@ -10,7 +9,7 @@ from chia.util.streamable import Streamable, streamable
|
|
|
10
9
|
@streamable
|
|
11
10
|
@dataclass(frozen=True)
|
|
12
11
|
class SignagePoint(Streamable):
|
|
13
|
-
cc_vdf:
|
|
14
|
-
cc_proof:
|
|
15
|
-
rc_vdf:
|
|
16
|
-
rc_proof:
|
|
12
|
+
cc_vdf: VDFInfo | None
|
|
13
|
+
cc_proof: VDFProof | None
|
|
14
|
+
rc_vdf: VDFInfo | None
|
|
15
|
+
rc_proof: VDFProof | None
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Optional
|
|
4
|
-
|
|
5
3
|
from chia_rs import BlockRecord, ConsensusConstants, EndOfSubSlotBundle
|
|
6
4
|
from chia_rs.sized_bytes import bytes32
|
|
7
5
|
from chia_rs.sized_ints import uint64, uint128
|
|
@@ -14,7 +12,7 @@ def get_signage_point_vdf_info(
|
|
|
14
12
|
constants: ConsensusConstants,
|
|
15
13
|
finished_sub_slots: list[EndOfSubSlotBundle],
|
|
16
14
|
overflow: bool,
|
|
17
|
-
prev_b:
|
|
15
|
+
prev_b: BlockRecord | None,
|
|
18
16
|
blocks: BlockRecordsProtocol,
|
|
19
17
|
sp_total_iters: uint128,
|
|
20
18
|
sp_iters: uint64,
|
|
@@ -90,7 +88,7 @@ def get_signage_point_vdf_info(
|
|
|
90
88
|
)
|
|
91
89
|
else:
|
|
92
90
|
found_sub_slots = []
|
|
93
|
-
sp_pre_sb:
|
|
91
|
+
sp_pre_sb: BlockRecord | None = None
|
|
94
92
|
while len(found_sub_slots) < 2 and curr.height > 0:
|
|
95
93
|
if sp_pre_sb is None and curr.total_iters < sp_total_iters:
|
|
96
94
|
sp_pre_sb = curr
|
chia/daemon/client.py
CHANGED
|
@@ -6,7 +6,7 @@ import ssl
|
|
|
6
6
|
from collections.abc import AsyncIterator
|
|
7
7
|
from contextlib import asynccontextmanager
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import Any
|
|
9
|
+
from typing import Any
|
|
10
10
|
|
|
11
11
|
import aiohttp
|
|
12
12
|
from chia_rs.sized_ints import uint32
|
|
@@ -20,7 +20,7 @@ class DaemonProxy:
|
|
|
20
20
|
def __init__(
|
|
21
21
|
self,
|
|
22
22
|
uri: str,
|
|
23
|
-
ssl_context:
|
|
23
|
+
ssl_context: ssl.SSLContext | None,
|
|
24
24
|
heartbeat: int,
|
|
25
25
|
max_message_size: int = 50 * 1000 * 1000,
|
|
26
26
|
):
|
|
@@ -29,8 +29,8 @@ class DaemonProxy:
|
|
|
29
29
|
self.response_dict: dict[str, WsRpcMessage] = {}
|
|
30
30
|
self.ssl_context = ssl_context
|
|
31
31
|
self.heartbeat = heartbeat
|
|
32
|
-
self.client_session:
|
|
33
|
-
self.websocket:
|
|
32
|
+
self.client_session: aiohttp.ClientSession | None = None
|
|
33
|
+
self.websocket: aiohttp.ClientWebSocketResponse | None = None
|
|
34
34
|
self.max_message_size = max_message_size
|
|
35
35
|
|
|
36
36
|
def format_request(self, command: str, data: dict[str, Any]) -> WsRpcMessage:
|
|
@@ -164,7 +164,7 @@ class DaemonProxy:
|
|
|
164
164
|
request = self.format_request("exit", {})
|
|
165
165
|
return await self._get(request)
|
|
166
166
|
|
|
167
|
-
async def get_keys_for_plotting(self, fingerprints:
|
|
167
|
+
async def get_keys_for_plotting(self, fingerprints: list[uint32] | None = None) -> WsRpcMessage:
|
|
168
168
|
data = {"fingerprints": fingerprints} if fingerprints else {}
|
|
169
169
|
request = self.format_request("get_keys_for_plotting", data)
|
|
170
170
|
response = await self._get(request)
|
|
@@ -196,7 +196,7 @@ async def connect_to_daemon(
|
|
|
196
196
|
|
|
197
197
|
async def connect_to_daemon_and_validate(
|
|
198
198
|
root_path: Path, config: dict[str, Any], quiet: bool = False, wait_for_start: bool = False
|
|
199
|
-
) ->
|
|
199
|
+
) -> DaemonProxy | None:
|
|
200
200
|
"""
|
|
201
201
|
Connect to the local daemon and do a ping to ensure that something is really
|
|
202
202
|
there and running.
|
|
@@ -233,7 +233,7 @@ async def connect_to_daemon_and_validate(
|
|
|
233
233
|
@asynccontextmanager
|
|
234
234
|
async def acquire_connection_to_daemon(
|
|
235
235
|
root_path: Path, config: dict[str, Any], quiet: bool = False
|
|
236
|
-
) -> AsyncIterator[
|
|
236
|
+
) -> AsyncIterator[DaemonProxy | None]:
|
|
237
237
|
"""
|
|
238
238
|
Asynchronous context manager which attempts to create a connection to the daemon.
|
|
239
239
|
The connection object (DaemonProxy) is yielded to the caller. After the caller's
|
|
@@ -241,7 +241,7 @@ async def acquire_connection_to_daemon(
|
|
|
241
241
|
closed.
|
|
242
242
|
"""
|
|
243
243
|
|
|
244
|
-
daemon:
|
|
244
|
+
daemon: DaemonProxy | None = None
|
|
245
245
|
try:
|
|
246
246
|
daemon = await connect_to_daemon_and_validate(root_path, config, quiet=quiet)
|
|
247
247
|
yield daemon # <----
|