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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import TYPE_CHECKING, ClassVar,
|
|
3
|
+
from typing import TYPE_CHECKING, ClassVar, cast
|
|
4
4
|
|
|
5
5
|
from chia_rs import BlockRecord, FullBlock
|
|
6
6
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -34,7 +34,7 @@ class AugmentedBlockchain:
|
|
|
34
34
|
self._extra_blocks = {}
|
|
35
35
|
self._height_to_hash = {}
|
|
36
36
|
|
|
37
|
-
def _get_block_record(self, header_hash: bytes32) ->
|
|
37
|
+
def _get_block_record(self, header_hash: bytes32) -> BlockRecord | None:
|
|
38
38
|
eb = self._extra_blocks.get(header_hash)
|
|
39
39
|
if eb is None:
|
|
40
40
|
return None
|
|
@@ -64,7 +64,7 @@ class AugmentedBlockchain:
|
|
|
64
64
|
# traverse the additional blocks (if any) and resolve heights into
|
|
65
65
|
# generators
|
|
66
66
|
to_remove = []
|
|
67
|
-
curr:
|
|
67
|
+
curr: tuple[FullBlock, BlockRecord] | None = self._extra_blocks.get(header_hash)
|
|
68
68
|
while curr is not None:
|
|
69
69
|
b = curr[0]
|
|
70
70
|
if b.height in generator_refs:
|
|
@@ -81,7 +81,7 @@ class AugmentedBlockchain:
|
|
|
81
81
|
generators.update(await self._underlying.lookup_block_generators(header_hash, generator_refs))
|
|
82
82
|
return generators
|
|
83
83
|
|
|
84
|
-
async def get_block_record_from_db(self, header_hash: bytes32) ->
|
|
84
|
+
async def get_block_record_from_db(self, header_hash: bytes32) -> BlockRecord | None:
|
|
85
85
|
ret = self._get_block_record(header_hash)
|
|
86
86
|
if ret is not None:
|
|
87
87
|
return ret
|
|
@@ -97,7 +97,7 @@ class AugmentedBlockchain:
|
|
|
97
97
|
del self._extra_blocks[hh]
|
|
98
98
|
|
|
99
99
|
# BlockRecordsProtocol
|
|
100
|
-
def try_block_record(self, header_hash: bytes32) ->
|
|
100
|
+
def try_block_record(self, header_hash: bytes32) -> BlockRecord | None:
|
|
101
101
|
ret = self._get_block_record(header_hash)
|
|
102
102
|
if ret is not None:
|
|
103
103
|
return ret
|
|
@@ -118,7 +118,7 @@ class AugmentedBlockchain:
|
|
|
118
118
|
return self._underlying.block_record(header_hash)
|
|
119
119
|
return self._underlying.height_to_block_record(height)
|
|
120
120
|
|
|
121
|
-
def height_to_hash(self, height: uint32) ->
|
|
121
|
+
def height_to_hash(self, height: uint32) -> bytes32 | None:
|
|
122
122
|
ret = self._height_to_hash.get(height)
|
|
123
123
|
if ret is not None:
|
|
124
124
|
return ret
|
|
@@ -2,16 +2,17 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import collections
|
|
4
4
|
import logging
|
|
5
|
-
from collections.abc import Awaitable, Collection
|
|
5
|
+
from collections.abc import Awaitable, Callable, Collection
|
|
6
6
|
from dataclasses import dataclass, field
|
|
7
|
-
from typing import Callable, Optional, Union
|
|
8
7
|
|
|
9
8
|
from chia_rs import (
|
|
10
9
|
BlockRecord,
|
|
10
|
+
CoinRecord,
|
|
11
11
|
ConsensusConstants,
|
|
12
12
|
FullBlock,
|
|
13
13
|
SpendBundleConditions,
|
|
14
14
|
UnfinishedBlock,
|
|
15
|
+
check_time_locks,
|
|
15
16
|
compute_merkle_set_root,
|
|
16
17
|
is_canonical_serialization,
|
|
17
18
|
)
|
|
@@ -21,10 +22,8 @@ from chiabip158 import PyBIP158
|
|
|
21
22
|
|
|
22
23
|
from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
|
|
23
24
|
from chia.consensus.blockchain_interface import BlockRecordsProtocol
|
|
24
|
-
from chia.consensus.check_time_locks import check_time_locks
|
|
25
25
|
from chia.consensus.coinbase import create_farmer_coin, create_pool_coin
|
|
26
26
|
from chia.types.blockchain_format.coin import Coin, hash_coin_ids
|
|
27
|
-
from chia.types.coin_record import CoinRecord
|
|
28
27
|
from chia.util.errors import Err
|
|
29
28
|
from chia.util.hash import std_hash
|
|
30
29
|
|
|
@@ -47,7 +46,7 @@ class ForkAdd:
|
|
|
47
46
|
coin: Coin
|
|
48
47
|
confirmed_height: uint32
|
|
49
48
|
timestamp: uint64
|
|
50
|
-
hint:
|
|
49
|
+
hint: bytes | None
|
|
51
50
|
is_coinbase: bool
|
|
52
51
|
# This means matching parent puzzle hash and amount
|
|
53
52
|
same_as_parent: bool
|
|
@@ -109,7 +108,7 @@ class ForkInfo:
|
|
|
109
108
|
coin, block.height, timestamp, hint=None, is_coinbase=True, same_as_parent=False
|
|
110
109
|
)
|
|
111
110
|
|
|
112
|
-
def include_spends(self, conds:
|
|
111
|
+
def include_spends(self, conds: SpendBundleConditions | None, block: FullBlock, header_hash: bytes32) -> None:
|
|
113
112
|
self.update_fork_peak(block, header_hash)
|
|
114
113
|
if conds is not None:
|
|
115
114
|
assert block.foliage_transaction_block is not None
|
|
@@ -127,7 +126,7 @@ class ForkInfo:
|
|
|
127
126
|
|
|
128
127
|
def include_block(
|
|
129
128
|
self,
|
|
130
|
-
additions: list[tuple[Coin,
|
|
129
|
+
additions: list[tuple[Coin, bytes | None]],
|
|
131
130
|
removals: list[tuple[bytes32, Coin]],
|
|
132
131
|
block: FullBlock,
|
|
133
132
|
header_hash: bytes32,
|
|
@@ -161,7 +160,7 @@ def validate_block_merkle_roots(
|
|
|
161
160
|
block_removals_root: bytes32,
|
|
162
161
|
tx_additions: list[tuple[Coin, bytes32]],
|
|
163
162
|
tx_removals: list[bytes32],
|
|
164
|
-
) ->
|
|
163
|
+
) -> Err | None:
|
|
165
164
|
# Create addition Merkle set
|
|
166
165
|
puzzlehash_coins_map: dict[bytes32, list[bytes32]] = {}
|
|
167
166
|
|
|
@@ -192,13 +191,13 @@ async def validate_block_body(
|
|
|
192
191
|
constants: ConsensusConstants,
|
|
193
192
|
records: BlockRecordsProtocol,
|
|
194
193
|
get_coin_records: Callable[[Collection[bytes32]], Awaitable[list[CoinRecord]]],
|
|
195
|
-
block:
|
|
194
|
+
block: FullBlock | UnfinishedBlock,
|
|
196
195
|
height: uint32,
|
|
197
|
-
conds:
|
|
196
|
+
conds: SpendBundleConditions | None,
|
|
198
197
|
fork_info: ForkInfo,
|
|
199
198
|
*,
|
|
200
199
|
log_coins: bool = False,
|
|
201
|
-
) ->
|
|
200
|
+
) -> Err | None:
|
|
202
201
|
"""
|
|
203
202
|
This assumes the header block has been completely validated.
|
|
204
203
|
Validates the transactions and body of the block.
|
|
@@ -227,7 +226,7 @@ async def validate_block_body(
|
|
|
227
226
|
):
|
|
228
227
|
return Err.NOT_BLOCK_BUT_HAS_DATA
|
|
229
228
|
|
|
230
|
-
prev_tb:
|
|
229
|
+
prev_tb: BlockRecord | None = records.block_record(block.prev_header_hash)
|
|
231
230
|
assert prev_tb is not None
|
|
232
231
|
while not prev_tb.is_transaction_block:
|
|
233
232
|
prev_tb = records.block_record(prev_tb.prev_hash)
|
|
@@ -341,10 +340,14 @@ async def validate_block_body(
|
|
|
341
340
|
# the generator ref list for this block (or 'one' bytes [0x01] if no generator)
|
|
342
341
|
# 8b. The generator ref list length must be less than or equal to MAX_GENERATOR_REF_LIST_SIZE entries
|
|
343
342
|
# 8c. The generator ref list must not point to a height >= this block's height
|
|
344
|
-
if block.transactions_generator_ref_list
|
|
343
|
+
if block.transactions_generator_ref_list == []:
|
|
345
344
|
if block.transactions_info.generator_refs_root != bytes([1] * 32):
|
|
346
345
|
return Err.INVALID_TRANSACTIONS_GENERATOR_REFS_ROOT
|
|
347
346
|
else:
|
|
347
|
+
# With hard fork 2 we ban transactions_generator_ref_list.
|
|
348
|
+
if prev_transaction_block_height >= constants.HARD_FORK2_HEIGHT:
|
|
349
|
+
return Err.TOO_MANY_GENERATOR_REFS
|
|
350
|
+
|
|
348
351
|
# If we have a generator reference list, we must have a generator
|
|
349
352
|
if block.transactions_generator is None:
|
|
350
353
|
return Err.INVALID_TRANSACTIONS_GENERATOR_REFS_ROOT
|
|
@@ -558,14 +561,15 @@ async def validate_block_body(
|
|
|
558
561
|
# 21. Verify conditions
|
|
559
562
|
# verify absolute/relative height/time conditions
|
|
560
563
|
if conds is not None:
|
|
561
|
-
error = check_time_locks(
|
|
564
|
+
error: int | None = check_time_locks(
|
|
562
565
|
removal_coin_records,
|
|
563
566
|
conds,
|
|
564
567
|
prev_transaction_block_height,
|
|
565
568
|
prev_transaction_block_timestamp,
|
|
566
569
|
)
|
|
567
570
|
if error is not None:
|
|
568
|
-
|
|
571
|
+
# TODO: standardise errors across Rust and Python so cast is not necesary here
|
|
572
|
+
return Err(error)
|
|
569
573
|
|
|
570
574
|
# 22. Verify aggregated signature is done in pre-validation
|
|
571
575
|
if not block.transactions_info.aggregated_signature:
|
chia/consensus/block_creation.py
CHANGED
|
@@ -2,8 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
4
|
import random
|
|
5
|
-
from collections.abc import Sequence
|
|
6
|
-
from typing import Callable, Optional
|
|
5
|
+
from collections.abc import Callable, Sequence
|
|
7
6
|
|
|
8
7
|
import chia_rs
|
|
9
8
|
from chia_rs import (
|
|
@@ -54,18 +53,18 @@ def compute_block_fee(additions: Sequence[Coin], removals: Sequence[Coin]) -> ui
|
|
|
54
53
|
def create_foliage(
|
|
55
54
|
constants: ConsensusConstants,
|
|
56
55
|
reward_block_unfinished: RewardChainBlockUnfinished,
|
|
57
|
-
new_block_gen:
|
|
58
|
-
prev_block:
|
|
56
|
+
new_block_gen: NewBlockGenerator | None,
|
|
57
|
+
prev_block: BlockRecord | None,
|
|
59
58
|
blocks: BlockRecordsProtocol,
|
|
60
59
|
total_iters_sp: uint128,
|
|
61
60
|
timestamp: uint64,
|
|
62
61
|
farmer_reward_puzzlehash: bytes32,
|
|
63
62
|
pool_target: PoolTarget,
|
|
64
63
|
get_plot_signature: Callable[[bytes32, G1Element], G2Element],
|
|
65
|
-
get_pool_signature: Callable[[PoolTarget,
|
|
64
|
+
get_pool_signature: Callable[[PoolTarget, G1Element | None], G2Element | None],
|
|
66
65
|
seed: bytes,
|
|
67
66
|
compute_fees: Callable[[Sequence[Coin], Sequence[Coin]], uint64],
|
|
68
|
-
) -> tuple[Foliage,
|
|
67
|
+
) -> tuple[Foliage, FoliageTransactionBlock | None, TransactionsInfo | None]:
|
|
69
68
|
"""
|
|
70
69
|
Creates a foliage for a given reward chain block. This may or may not be a tx block. In the case of a tx block,
|
|
71
70
|
the return values are not None. This is called at the signage point, so some of this information may be
|
|
@@ -90,7 +89,7 @@ def create_foliage(
|
|
|
90
89
|
if prev_block is not None:
|
|
91
90
|
res = get_prev_transaction_block(prev_block, blocks, total_iters_sp)
|
|
92
91
|
is_transaction_block: bool = res[0]
|
|
93
|
-
prev_transaction_block:
|
|
92
|
+
prev_transaction_block: BlockRecord | None = res[1]
|
|
94
93
|
else:
|
|
95
94
|
# Genesis is a transaction block
|
|
96
95
|
prev_transaction_block = None
|
|
@@ -110,7 +109,7 @@ def create_foliage(
|
|
|
110
109
|
tx_additions: list[Coin] = []
|
|
111
110
|
tx_removals: list[bytes32] = []
|
|
112
111
|
|
|
113
|
-
pool_target_signature:
|
|
112
|
+
pool_target_signature: G2Element | None = get_pool_signature(
|
|
114
113
|
pool_target, reward_block_unfinished.proof_of_space.pool_public_key
|
|
115
114
|
)
|
|
116
115
|
|
|
@@ -134,7 +133,7 @@ def create_foliage(
|
|
|
134
133
|
|
|
135
134
|
generator_block_heights_list: list[uint32] = []
|
|
136
135
|
|
|
137
|
-
foliage_transaction_block_hash:
|
|
136
|
+
foliage_transaction_block_hash: bytes32 | None
|
|
138
137
|
|
|
139
138
|
if is_transaction_block:
|
|
140
139
|
cost: uint64
|
|
@@ -236,7 +235,7 @@ def create_foliage(
|
|
|
236
235
|
|
|
237
236
|
filter_hash: bytes32 = std_hash(encoded)
|
|
238
237
|
|
|
239
|
-
transactions_info:
|
|
238
|
+
transactions_info: TransactionsInfo | None = TransactionsInfo(
|
|
240
239
|
generator_hash,
|
|
241
240
|
generator_refs_hash,
|
|
242
241
|
new_block_gen.signature if new_block_gen else G2Element(),
|
|
@@ -250,7 +249,7 @@ def create_foliage(
|
|
|
250
249
|
prev_transaction_block_hash = prev_transaction_block.header_hash
|
|
251
250
|
|
|
252
251
|
assert transactions_info is not None
|
|
253
|
-
foliage_transaction_block:
|
|
252
|
+
foliage_transaction_block: FoliageTransactionBlock | None = FoliageTransactionBlock(
|
|
254
253
|
prev_transaction_block_hash,
|
|
255
254
|
timestamp,
|
|
256
255
|
filter_hash,
|
|
@@ -261,7 +260,7 @@ def create_foliage(
|
|
|
261
260
|
assert foliage_transaction_block is not None
|
|
262
261
|
|
|
263
262
|
foliage_transaction_block_hash = foliage_transaction_block.get_hash()
|
|
264
|
-
foliage_transaction_block_signature:
|
|
263
|
+
foliage_transaction_block_signature: G2Element | None = get_plot_signature(
|
|
265
264
|
foliage_transaction_block_hash, reward_block_unfinished.proof_of_space.plot_public_key
|
|
266
265
|
)
|
|
267
266
|
assert foliage_transaction_block_signature is not None
|
|
@@ -296,14 +295,14 @@ def create_unfinished_block(
|
|
|
296
295
|
farmer_reward_puzzle_hash: bytes32,
|
|
297
296
|
pool_target: PoolTarget,
|
|
298
297
|
get_plot_signature: Callable[[bytes32, G1Element], G2Element],
|
|
299
|
-
get_pool_signature: Callable[[PoolTarget,
|
|
298
|
+
get_pool_signature: Callable[[PoolTarget, G1Element | None], G2Element | None],
|
|
300
299
|
signage_point: SignagePoint,
|
|
301
300
|
timestamp: uint64,
|
|
302
301
|
blocks: BlockRecordsProtocol,
|
|
303
302
|
seed: bytes = b"",
|
|
304
|
-
new_block_gen:
|
|
305
|
-
prev_block:
|
|
306
|
-
finished_sub_slots_input:
|
|
303
|
+
new_block_gen: NewBlockGenerator | None = None,
|
|
304
|
+
prev_block: BlockRecord | None = None,
|
|
305
|
+
finished_sub_slots_input: list[EndOfSubSlotBundle] | None = None,
|
|
307
306
|
compute_fees: Callable[[Sequence[Coin], Sequence[Coin]], uint64] = compute_block_fee,
|
|
308
307
|
) -> UnfinishedBlock:
|
|
309
308
|
"""
|
|
@@ -346,6 +345,10 @@ def create_unfinished_block(
|
|
|
346
345
|
|
|
347
346
|
cc_sp_hash: bytes32 = slot_cc_challenge
|
|
348
347
|
|
|
348
|
+
if proof_of_space.param().strength_v2 is not None:
|
|
349
|
+
# v2 plots don't support pool public key
|
|
350
|
+
assert proof_of_space.pool_public_key is None
|
|
351
|
+
|
|
349
352
|
# Only enters this if statement if we are in testing mode (making VDF proofs here)
|
|
350
353
|
if signage_point.cc_vdf is not None:
|
|
351
354
|
assert signage_point.rc_vdf is not None
|
|
@@ -366,8 +369,8 @@ def create_unfinished_block(
|
|
|
366
369
|
rc_sp_hash = curr.finished_reward_slot_hashes[-1]
|
|
367
370
|
signage_point = SignagePoint(None, None, None, None)
|
|
368
371
|
|
|
369
|
-
cc_sp_signature:
|
|
370
|
-
rc_sp_signature:
|
|
372
|
+
cc_sp_signature: G2Element | None = get_plot_signature(cc_sp_hash, proof_of_space.plot_public_key)
|
|
373
|
+
rc_sp_signature: G2Element | None = get_plot_signature(rc_sp_hash, proof_of_space.plot_public_key)
|
|
371
374
|
assert cc_sp_signature is not None
|
|
372
375
|
assert rc_sp_signature is not None
|
|
373
376
|
assert chia_rs.AugSchemeMPL.verify(proof_of_space.plot_public_key, cc_sp_hash, cc_sp_signature)
|
|
@@ -418,10 +421,10 @@ def unfinished_block_to_full_block(
|
|
|
418
421
|
cc_ip_proof: VDFProof,
|
|
419
422
|
rc_ip_vdf: VDFInfo,
|
|
420
423
|
rc_ip_proof: VDFProof,
|
|
421
|
-
icc_ip_vdf:
|
|
422
|
-
icc_ip_proof:
|
|
424
|
+
icc_ip_vdf: VDFInfo | None,
|
|
425
|
+
icc_ip_proof: VDFProof | None,
|
|
423
426
|
finished_sub_slots: list[EndOfSubSlotBundle],
|
|
424
|
-
prev_block:
|
|
427
|
+
prev_block: BlockRecord | None,
|
|
425
428
|
blocks: BlockRecordsProtocol,
|
|
426
429
|
total_iters_sp: uint128,
|
|
427
430
|
difficulty: uint64,
|
|
@@ -482,6 +485,7 @@ def unfinished_block_to_full_block(
|
|
|
482
485
|
unfinished_block.reward_chain_block.reward_chain_sp_signature,
|
|
483
486
|
rc_ip_vdf,
|
|
484
487
|
icc_ip_vdf,
|
|
488
|
+
None,
|
|
485
489
|
is_transaction_block,
|
|
486
490
|
)
|
|
487
491
|
if prev_block is None:
|
|
@@ -2,7 +2,6 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
4
|
import time
|
|
5
|
-
from typing import Optional
|
|
6
5
|
|
|
7
6
|
from chia_rs import (
|
|
8
7
|
AugSchemeMPL,
|
|
@@ -20,7 +19,11 @@ from chia_rs.sized_ints import uint8, uint32, uint64, uint128
|
|
|
20
19
|
from chia.consensus.blockchain_interface import BlockRecordsProtocol
|
|
21
20
|
from chia.consensus.deficit import calculate_deficit
|
|
22
21
|
from chia.consensus.difficulty_adjustment import can_finish_sub_and_full_epoch
|
|
23
|
-
from chia.consensus.get_block_challenge import
|
|
22
|
+
from chia.consensus.get_block_challenge import (
|
|
23
|
+
final_eos_is_already_included,
|
|
24
|
+
get_block_challenge,
|
|
25
|
+
pre_sp_tx_block_height,
|
|
26
|
+
)
|
|
24
27
|
from chia.consensus.make_sub_epoch_summary import make_sub_epoch_summary
|
|
25
28
|
from chia.consensus.pot_iterations import (
|
|
26
29
|
calculate_ip_iters,
|
|
@@ -50,7 +53,7 @@ def validate_unfinished_header_block(
|
|
|
50
53
|
skip_overflow_last_ss_validation: bool = False,
|
|
51
54
|
skip_vdf_is_valid: bool = False,
|
|
52
55
|
check_sub_epoch_summary: bool = True,
|
|
53
|
-
) -> tuple[
|
|
56
|
+
) -> tuple[uint64 | None, ValidationError | None]:
|
|
54
57
|
"""
|
|
55
58
|
Validates an unfinished header block. This is a block without the infusion VDFs (unfinished)
|
|
56
59
|
and without transactions and transaction info (header). Returns (required_iters, error).
|
|
@@ -114,7 +117,7 @@ def validate_unfinished_header_block(
|
|
|
114
117
|
can_finish_epoch = False
|
|
115
118
|
|
|
116
119
|
# 2. Check finished slots that have been crossed since prev_b
|
|
117
|
-
ses_hash:
|
|
120
|
+
ses_hash: bytes32 | None = None
|
|
118
121
|
if new_sub_slot and not skip_overflow_last_ss_validation:
|
|
119
122
|
# Finished a slot(s) since previous block. The first sub-slot must have at least one block, and all
|
|
120
123
|
# subsequent sub-slots must be empty
|
|
@@ -151,9 +154,9 @@ def validate_unfinished_header_block(
|
|
|
151
154
|
return None, ValidationError(Err.SHOULD_NOT_HAVE_ICC)
|
|
152
155
|
else:
|
|
153
156
|
assert prev_b is not None
|
|
154
|
-
icc_iters_committed:
|
|
155
|
-
icc_iters_proof:
|
|
156
|
-
icc_challenge_hash:
|
|
157
|
+
icc_iters_committed: uint64 | None = None
|
|
158
|
+
icc_iters_proof: uint64 | None = None
|
|
159
|
+
icc_challenge_hash: bytes32 | None = None
|
|
157
160
|
icc_vdf_input = None
|
|
158
161
|
if prev_b.deficit < constants.MIN_BLOCKS_PER_CHALLENGE_BLOCK:
|
|
159
162
|
# There should be no ICC chain if the last block's deficit is 16
|
|
@@ -502,8 +505,13 @@ def validate_unfinished_header_block(
|
|
|
502
505
|
cc_sp_hash,
|
|
503
506
|
height,
|
|
504
507
|
expected_vs.difficulty,
|
|
505
|
-
|
|
506
|
-
|
|
508
|
+
pre_sp_tx_block_height(
|
|
509
|
+
constants=constants,
|
|
510
|
+
blocks=blocks,
|
|
511
|
+
prev_b_hash=header_block.prev_header_hash,
|
|
512
|
+
sp_index=header_block.reward_chain_block.signage_point_index,
|
|
513
|
+
first_in_sub_slot=len(header_block.finished_sub_slots) > 0,
|
|
514
|
+
),
|
|
507
515
|
)
|
|
508
516
|
if required_iters is None:
|
|
509
517
|
return None, ValidationError(Err.INVALID_POSPACE)
|
|
@@ -756,10 +764,16 @@ def validate_unfinished_header_block(
|
|
|
756
764
|
!= constants.GENESIS_PRE_FARM_FARMER_PUZZLE_HASH
|
|
757
765
|
):
|
|
758
766
|
return None, ValidationError(Err.INVALID_PREFARM)
|
|
759
|
-
# 20b. If pospace has a pool pk,
|
|
767
|
+
# 20b. If pospace has a pool pk, check pool target signature. Should not check this for genesis block.
|
|
760
768
|
elif header_block.reward_chain_block.proof_of_space.pool_public_key is not None:
|
|
761
769
|
assert header_block.reward_chain_block.proof_of_space.pool_contract_puzzle_hash is None
|
|
762
770
|
assert header_block.foliage.foliage_block_data.pool_signature is not None
|
|
771
|
+
|
|
772
|
+
# v2 plots require pool contract puzzle hash, not pool pk
|
|
773
|
+
# TODO: todo_v2_plots add test coverage of this check
|
|
774
|
+
if header_block.reward_chain_block.proof_of_space.param().strength_v2 is not None:
|
|
775
|
+
return None, ValidationError(Err.INVALID_POOL_TARGET)
|
|
776
|
+
|
|
763
777
|
if not AugSchemeMPL.verify(
|
|
764
778
|
header_block.reward_chain_block.proof_of_space.pool_public_key,
|
|
765
779
|
bytes(header_block.foliage.foliage_block_data.pool_target),
|
|
@@ -834,7 +848,7 @@ def validate_finished_header_block(
|
|
|
834
848
|
check_filter: bool,
|
|
835
849
|
expected_vs: ValidationState,
|
|
836
850
|
check_sub_epoch_summary: bool = True,
|
|
837
|
-
) -> tuple[
|
|
851
|
+
) -> tuple[uint64 | None, ValidationError | None]:
|
|
838
852
|
"""
|
|
839
853
|
Fully validates the header of a block. A header block is the same as a full block, but
|
|
840
854
|
without transactions and transaction info. Returns (required_iters, error).
|
|
@@ -866,7 +880,7 @@ def validate_finished_header_block(
|
|
|
866
880
|
assert required_iters is not None
|
|
867
881
|
|
|
868
882
|
if header_block.height == 0:
|
|
869
|
-
prev_b:
|
|
883
|
+
prev_b: BlockRecord | None = None
|
|
870
884
|
genesis_block = True
|
|
871
885
|
else:
|
|
872
886
|
prev_b = blocks.block_record(header_block.prev_header_hash)
|
|
@@ -1009,7 +1023,7 @@ def validate_finished_header_block(
|
|
|
1009
1023
|
last_ss = header_block.finished_sub_slots[-1]
|
|
1010
1024
|
assert last_ss.infused_challenge_chain is not None
|
|
1011
1025
|
icc_vdf_challenge: bytes32 = last_ss.infused_challenge_chain.get_hash()
|
|
1012
|
-
icc_vdf_input:
|
|
1026
|
+
icc_vdf_input: ClassgroupElement | None = ClassgroupElement.get_default_element()
|
|
1013
1027
|
else:
|
|
1014
1028
|
assert prev_b is not None
|
|
1015
1029
|
if prev_b.is_challenge_block(constants):
|
|
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
from dataclasses import dataclass
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Optional
|
|
7
6
|
|
|
8
7
|
import aiofiles
|
|
9
8
|
from chia_rs import SubEpochSummary
|
|
@@ -57,9 +56,7 @@ class BlockHeightMap(BlockHeightMapProtocol):
|
|
|
57
56
|
__ses_filename: Path
|
|
58
57
|
|
|
59
58
|
@classmethod
|
|
60
|
-
async def create(
|
|
61
|
-
cls, blockchain_dir: Path, db: DBWrapper2, selected_network: Optional[str] = None
|
|
62
|
-
) -> BlockHeightMap:
|
|
59
|
+
async def create(cls, blockchain_dir: Path, db: DBWrapper2, selected_network: str | None = None) -> BlockHeightMap:
|
|
63
60
|
if db.db_version != 2:
|
|
64
61
|
raise RuntimeError(f"BlockHeightMap does not support database schema v{db.db_version}")
|
|
65
62
|
self = BlockHeightMap()
|
|
@@ -138,7 +135,7 @@ class BlockHeightMap(BlockHeightMapProtocol):
|
|
|
138
135
|
|
|
139
136
|
return self
|
|
140
137
|
|
|
141
|
-
def update_height(self, height: uint32, header_hash: bytes32, ses:
|
|
138
|
+
def update_height(self, height: uint32, header_hash: bytes32, ses: SubEpochSummary | None) -> None:
|
|
142
139
|
# we're only updating the last hash. If we've reorged, we already rolled
|
|
143
140
|
# back, making this the new peak
|
|
144
141
|
assert height * 32 <= len(self.__height_to_hash)
|
|
@@ -196,7 +193,7 @@ class BlockHeightMap(BlockHeightMapProtocol):
|
|
|
196
193
|
async with self.db.reader_no_transaction() as conn:
|
|
197
194
|
async with conn.execute(query, (window_end, height)) as cursor:
|
|
198
195
|
# maps block-hash -> (height, prev-hash, sub-epoch-summary)
|
|
199
|
-
ordered: dict[bytes32, tuple[uint32, bytes32,
|
|
196
|
+
ordered: dict[bytes32, tuple[uint32, bytes32, bytes | None]] = {}
|
|
200
197
|
|
|
201
198
|
for r in await cursor.fetchall():
|
|
202
199
|
ordered[r[0]] = (r[2], r[1], r[3])
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import Protocol
|
|
4
4
|
|
|
5
5
|
from chia_rs import SubEpochSummary
|
|
6
6
|
from chia_rs.sized_bytes import bytes32
|
|
@@ -8,7 +8,7 @@ from chia_rs.sized_ints import uint32
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class BlockHeightMapProtocol(Protocol):
|
|
11
|
-
def update_height(self, height: uint32, header_hash: bytes32, ses:
|
|
11
|
+
def update_height(self, height: uint32, header_hash: bytes32, ses: SubEpochSummary | None) -> None: ...
|
|
12
12
|
|
|
13
13
|
def get_hash(self, height: uint32) -> bytes32: ...
|
|
14
14
|
|
chia/consensus/block_record.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, uint64
|
|
7
5
|
from typing_extensions import Protocol
|
|
@@ -15,13 +13,13 @@ class BlockRecordProtocol(Protocol):
|
|
|
15
13
|
def height(self) -> uint32: ...
|
|
16
14
|
|
|
17
15
|
@property
|
|
18
|
-
def timestamp(self) ->
|
|
16
|
+
def timestamp(self) -> uint64 | None: ...
|
|
19
17
|
|
|
20
18
|
@property
|
|
21
19
|
def prev_transaction_block_height(self) -> uint32: ...
|
|
22
20
|
|
|
23
21
|
@property
|
|
24
|
-
def prev_transaction_block_hash(self) ->
|
|
22
|
+
def prev_transaction_block_hash(self) -> bytes32 | None: ...
|
|
25
23
|
|
|
26
24
|
@property
|
|
27
25
|
def is_transaction_block(self) -> bool: ...
|