chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5__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/_tests/blockchain/blockchain_test_utils.py +2 -3
- chia/_tests/blockchain/test_augmented_chain.py +2 -3
- chia/_tests/blockchain/test_blockchain.py +261 -44
- chia/_tests/blockchain/test_blockchain_transactions.py +4 -3
- chia/_tests/blockchain/test_build_chains.py +197 -1
- chia/_tests/blockchain/test_get_block_generator.py +1 -1
- chia/_tests/blockchain/test_lookup_fork_chain.py +1 -1
- chia/_tests/clvm/benchmark_costs.py +1 -1
- chia/_tests/clvm/coin_store.py +3 -4
- chia/_tests/clvm/test_message_conditions.py +2 -2
- chia/_tests/clvm/test_puzzle_compression.py +2 -3
- chia/_tests/clvm/test_puzzles.py +1 -2
- chia/_tests/clvm/test_singletons.py +2 -3
- chia/_tests/clvm/test_spend_sim.py +7 -7
- chia/_tests/cmds/cmd_test_utils.py +30 -25
- chia/_tests/cmds/test_dev_gh.py +1 -1
- chia/_tests/cmds/test_farm_cmd.py +1 -1
- chia/_tests/cmds/test_show.py +1 -2
- chia/_tests/cmds/wallet/test_did.py +101 -56
- chia/_tests/cmds/wallet/test_nft.py +109 -84
- chia/_tests/cmds/wallet/test_notifications.py +1 -1
- chia/_tests/cmds/wallet/test_offer.toffer +1 -1
- chia/_tests/cmds/wallet/test_vcs.py +8 -8
- chia/_tests/cmds/wallet/test_wallet.py +100 -46
- chia/_tests/conftest.py +31 -20
- chia/_tests/connection_utils.py +1 -1
- chia/_tests/core/consensus/stores/__init__.py +0 -0
- chia/_tests/core/consensus/stores/test_coin_store_protocol.py +40 -0
- chia/_tests/core/consensus/test_block_creation.py +2 -31
- chia/_tests/core/consensus/test_pot_iterations.py +38 -3
- chia/_tests/core/custom_types/test_proof_of_space.py +154 -26
- chia/_tests/core/custom_types/test_spend_bundle.py +2 -3
- chia/_tests/core/daemon/test_daemon.py +80 -0
- chia/_tests/core/data_layer/test_data_layer.py +1 -1
- chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
- chia/_tests/core/data_layer/test_data_rpc.py +14 -10
- chia/_tests/core/data_layer/test_data_store.py +5 -5
- chia/_tests/core/farmer/test_farmer_api.py +2 -2
- chia/_tests/core/full_node/full_sync/test_full_sync.py +446 -406
- chia/_tests/core/full_node/ram_db.py +3 -1
- chia/_tests/core/full_node/stores/test_block_store.py +28 -16
- chia/_tests/core/full_node/stores/test_coin_store.py +277 -185
- chia/_tests/core/full_node/stores/test_full_node_store.py +11 -4
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_address_manager.py +200 -27
- chia/_tests/core/full_node/test_block_height_map.py +2 -2
- chia/_tests/core/full_node/test_conditions.py +7 -6
- chia/_tests/core/full_node/test_full_node.py +456 -40
- chia/_tests/core/full_node/test_generator_tools.py +32 -2
- chia/_tests/core/full_node/test_hint_management.py +1 -1
- chia/_tests/core/full_node/test_node_load.py +20 -21
- chia/_tests/core/full_node/test_performance.py +3 -4
- chia/_tests/core/full_node/test_prev_tx_block.py +43 -0
- chia/_tests/core/full_node/test_subscriptions.py +1 -2
- chia/_tests/core/full_node/test_transactions.py +9 -5
- chia/_tests/core/full_node/test_tx_processing_queue.py +1 -2
- chia/_tests/core/large_block.py +1 -2
- chia/_tests/core/make_block_generator.py +3 -4
- chia/_tests/core/mempool/test_mempool.py +36 -86
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
- chia/_tests/core/mempool/test_mempool_item_queries.py +1 -3
- chia/_tests/core/mempool/test_mempool_manager.py +529 -69
- chia/_tests/core/mempool/test_mempool_performance.py +3 -2
- chia/_tests/core/mempool/test_singleton_fast_forward.py +61 -132
- chia/_tests/core/server/flood.py +1 -1
- chia/_tests/core/server/test_dos.py +1 -1
- chia/_tests/core/server/test_node_discovery.py +41 -27
- chia/_tests/core/server/test_rate_limits.py +1 -1
- chia/_tests/core/server/test_server.py +1 -1
- chia/_tests/core/services/test_services.py +5 -5
- chia/_tests/core/ssl/test_ssl.py +1 -1
- chia/_tests/core/test_cost_calculation.py +6 -6
- chia/_tests/core/test_crawler.py +2 -2
- chia/_tests/core/test_crawler_rpc.py +1 -1
- chia/_tests/core/test_db_conversion.py +3 -1
- chia/_tests/core/test_db_validation.py +5 -3
- chia/_tests/core/test_farmer_harvester_rpc.py +15 -15
- chia/_tests/core/test_filter.py +4 -1
- chia/_tests/core/test_full_node_rpc.py +99 -82
- chia/_tests/core/test_program.py +2 -2
- chia/_tests/core/util/test_block_cache.py +1 -1
- chia/_tests/core/util/test_keychain.py +2 -2
- chia/_tests/core/util/test_lockfile.py +1 -1
- chia/_tests/core/util/test_log_exceptions.py +5 -5
- chia/_tests/core/util/test_streamable.py +81 -22
- chia/_tests/db/test_db_wrapper.py +1 -3
- chia/_tests/environments/wallet.py +5 -5
- chia/_tests/farmer_harvester/test_farmer.py +9 -7
- chia/_tests/farmer_harvester/test_farmer_harvester.py +11 -4
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +15 -9
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -2
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +7 -5
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
- chia/_tests/generator/test_compression.py +1 -2
- chia/_tests/generator/test_rom.py +8 -4
- chia/_tests/plot_sync/test_plot_sync.py +3 -3
- chia/_tests/plot_sync/test_receiver.py +3 -3
- chia/_tests/plot_sync/test_sender.py +1 -1
- chia/_tests/plot_sync/test_sync_simulated.py +3 -3
- chia/_tests/plot_sync/util.py +2 -2
- chia/_tests/pools/test_pool_cmdline.py +48 -21
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +2 -3
- chia/_tests/pools/test_pool_rpc.py +237 -105
- chia/_tests/pools/test_pool_wallet.py +11 -2
- chia/_tests/pools/test_wallet_pool_store.py +5 -4
- chia/_tests/rpc/test_rpc_client.py +1 -1
- chia/_tests/simulation/test_simulation.py +13 -8
- chia/_tests/simulation/test_simulator.py +2 -2
- chia/_tests/timelord/test_new_peak.py +191 -47
- chia/_tests/timelord/test_timelord.py +1 -1
- chia/_tests/tools/test_full_sync.py +0 -2
- chia/_tests/tools/test_run_block.py +3 -1
- chia/_tests/util/benchmark_cost.py +3 -3
- chia/_tests/util/benchmarks.py +2 -2
- chia/_tests/util/blockchain.py +11 -5
- chia/_tests/util/blockchain_mock.py +1 -4
- chia/_tests/util/coin_store.py +29 -0
- chia/_tests/util/constants.py +2 -18
- chia/_tests/util/full_sync.py +3 -3
- chia/_tests/util/generator_tools_testing.py +2 -3
- chia/_tests/util/key_tool.py +2 -3
- chia/_tests/util/misc.py +33 -31
- chia/_tests/util/network_protocol_data.py +19 -17
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +3 -1
- chia/_tests/util/run_block.py +2 -2
- chia/_tests/util/setup_nodes.py +7 -7
- chia/_tests/util/spend_sim.py +47 -55
- chia/_tests/util/test_condition_tools.py +5 -4
- chia/_tests/util/test_config.py +2 -2
- chia/_tests/util/test_dump_keyring.py +1 -1
- chia/_tests/util/test_full_block_utils.py +12 -14
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_paginator.py +4 -4
- chia/_tests/util/test_priority_mutex.py +2 -2
- chia/_tests/util/test_replace_str_to_bytes.py +15 -5
- chia/_tests/util/test_ssl_check.py +1 -1
- chia/_tests/util/test_testnet_overrides.py +13 -3
- chia/_tests/util/time_out_assert.py +4 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -2
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +352 -432
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +3 -6
- chia/_tests/wallet/cat_wallet/test_trades.py +53 -77
- chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -1
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +3 -3
- chia/_tests/wallet/clawback/test_clawback_metadata.py +4 -2
- chia/_tests/wallet/conftest.py +11 -12
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +11 -4
- chia/_tests/wallet/db_wallet/test_dl_offers.py +433 -130
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +3 -3
- chia/_tests/wallet/did_wallet/test_did.py +2132 -2000
- chia/_tests/wallet/nft_wallet/config.py +1 -1
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1610 -742
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +486 -907
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +4 -4
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +517 -294
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +133 -62
- chia/_tests/wallet/rpc/test_wallet_rpc.py +495 -265
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +10 -6
- chia/_tests/wallet/sync/test_wallet_sync.py +89 -60
- chia/_tests/wallet/test_clvm_casts.py +88 -0
- chia/_tests/wallet/test_coin_management.py +1 -1
- chia/_tests/wallet/test_coin_selection.py +1 -1
- chia/_tests/wallet/test_conditions.py +1 -1
- chia/_tests/wallet/test_new_wallet_protocol.py +13 -11
- chia/_tests/wallet/test_notifications.py +5 -3
- chia/_tests/wallet/test_sign_coin_spends.py +6 -6
- chia/_tests/wallet/test_signer_protocol.py +13 -12
- chia/_tests/wallet/test_singleton.py +1 -1
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +5 -7
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +108 -29
- chia/_tests/wallet/test_wallet_action_scope.py +9 -2
- chia/_tests/wallet/test_wallet_blockchain.py +2 -3
- chia/_tests/wallet/test_wallet_key_val_store.py +1 -2
- chia/_tests/wallet/test_wallet_node.py +2 -4
- chia/_tests/wallet/test_wallet_retry.py +4 -2
- chia/_tests/wallet/test_wallet_state_manager.py +191 -5
- chia/_tests/wallet/test_wallet_test_framework.py +1 -1
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +8 -8
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -12
- chia/_tests/wallet/wallet_block_tools.py +6 -6
- chia/_tests/weight_proof/test_weight_proof.py +10 -48
- chia/apis.py +1 -1
- chia/cmds/beta.py +1 -1
- chia/cmds/chia.py +9 -9
- chia/cmds/cmd_classes.py +12 -11
- chia/cmds/cmd_helpers.py +1 -1
- chia/cmds/cmds_util.py +12 -9
- chia/cmds/coin_funcs.py +2 -2
- chia/cmds/configure.py +2 -2
- chia/cmds/data.py +0 -2
- chia/cmds/data_funcs.py +1 -1
- chia/cmds/db_validate_func.py +1 -2
- chia/cmds/dev/__init__.py +0 -0
- chia/cmds/dev/data.py +273 -0
- chia/cmds/{gh.py → dev/gh.py} +5 -5
- chia/cmds/dev/main.py +22 -0
- chia/cmds/dev/mempool.py +78 -0
- chia/cmds/dev/mempool_funcs.py +63 -0
- chia/cmds/farm_funcs.py +5 -4
- chia/cmds/init_funcs.py +11 -11
- chia/cmds/keys.py +2 -2
- chia/cmds/keys_funcs.py +4 -4
- chia/cmds/netspace_funcs.py +1 -1
- chia/cmds/peer_funcs.py +2 -2
- chia/cmds/plotnft_funcs.py +72 -26
- chia/cmds/rpc.py +1 -1
- chia/cmds/show_funcs.py +5 -5
- chia/cmds/signer.py +8 -7
- chia/cmds/sim_funcs.py +8 -9
- chia/cmds/wallet.py +2 -2
- chia/cmds/wallet_funcs.py +165 -131
- chia/{util → consensus}/augmented_chain.py +1 -2
- chia/consensus/block_body_validation.py +54 -40
- chia/consensus/block_creation.py +42 -76
- chia/consensus/block_header_validation.py +32 -26
- chia/consensus/block_record.py +0 -3
- chia/consensus/blockchain.py +23 -32
- chia/consensus/blockchain_interface.py +1 -5
- chia/consensus/check_time_locks.py +57 -0
- chia/consensus/coin_store_protocol.py +151 -0
- chia/consensus/coinbase.py +0 -6
- chia/consensus/condition_costs.py +4 -0
- chia/{util → consensus}/condition_tools.py +4 -5
- chia/consensus/cost_calculator.py +1 -1
- chia/consensus/default_constants.py +32 -9
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +1 -2
- chia/consensus/find_fork_point.py +1 -3
- chia/consensus/full_block_to_block_record.py +1 -6
- chia/{util → consensus}/generator_tools.py +1 -3
- chia/consensus/get_block_challenge.py +30 -7
- chia/consensus/make_sub_epoch_summary.py +1 -5
- chia/consensus/multiprocess_validation.py +21 -20
- chia/consensus/pot_iterations.py +74 -13
- chia/{util → consensus}/prev_transaction_block.py +1 -1
- chia/consensus/vdf_info_computation.py +1 -3
- chia/daemon/keychain_proxy.py +5 -5
- chia/daemon/server.py +22 -5
- chia/data_layer/data_layer.py +92 -51
- chia/{rpc → data_layer}/data_layer_rpc_api.py +1 -1
- chia/{rpc → data_layer}/data_layer_rpc_util.py +3 -6
- chia/data_layer/data_layer_util.py +4 -6
- chia/data_layer/data_layer_wallet.py +42 -69
- chia/data_layer/dl_wallet_store.py +12 -6
- chia/data_layer/download_data.py +3 -3
- chia/data_layer/s3_plugin_service.py +0 -1
- chia/farmer/farmer.py +3 -4
- chia/farmer/farmer_api.py +11 -7
- chia/{rpc → farmer}/farmer_rpc_client.py +1 -1
- chia/full_node/block_height_map.py +7 -6
- chia/full_node/block_store.py +5 -7
- chia/full_node/bundle_tools.py +1 -2
- chia/full_node/coin_store.py +153 -124
- chia/{types → full_node}/eligible_coin_spends.py +39 -70
- chia/full_node/fee_estimator.py +1 -1
- chia/full_node/fee_estimator_interface.py +0 -8
- chia/full_node/fee_tracker.py +25 -25
- chia/full_node/full_node.py +70 -53
- chia/full_node/full_node_api.py +57 -40
- chia/{rpc → full_node}/full_node_rpc_api.py +87 -8
- chia/{rpc → full_node}/full_node_rpc_client.py +7 -6
- chia/full_node/full_node_store.py +23 -8
- chia/full_node/mempool.py +206 -53
- chia/full_node/mempool_check_conditions.py +20 -63
- chia/full_node/mempool_manager.py +47 -45
- chia/full_node/subscriptions.py +1 -3
- chia/full_node/tx_processing_queue.py +50 -3
- chia/full_node/weight_proof.py +46 -37
- chia/harvester/harvester.py +1 -1
- chia/harvester/harvester_api.py +22 -7
- chia/introducer/introducer.py +1 -1
- chia/introducer/introducer_api.py +1 -1
- chia/plot_sync/exceptions.py +1 -1
- chia/plot_sync/receiver.py +1 -1
- chia/plot_sync/sender.py +2 -2
- chia/pools/pool_puzzles.py +13 -18
- chia/pools/pool_wallet.py +23 -46
- chia/protocols/farmer_protocol.py +11 -3
- chia/protocols/full_node_protocol.py +1 -4
- chia/protocols/harvester_protocol.py +3 -3
- chia/protocols/pool_protocol.py +1 -2
- chia/protocols/shared_protocol.py +3 -3
- chia/protocols/timelord_protocol.py +1 -3
- chia/protocols/wallet_protocol.py +3 -3
- chia/rpc/rpc_client.py +7 -8
- chia/rpc/rpc_server.py +3 -3
- chia/rpc/util.py +3 -1
- chia/seeder/crawler.py +1 -1
- chia/seeder/crawler_api.py +1 -1
- chia/seeder/dns_server.py +2 -0
- chia/seeder/start_crawler.py +3 -3
- chia/server/address_manager.py +286 -38
- chia/server/address_manager_store.py +0 -215
- chia/{types → server}/aliases.py +7 -7
- chia/server/api_protocol.py +1 -1
- chia/server/chia_policy.py +1 -1
- chia/server/node_discovery.py +76 -113
- chia/server/rate_limits.py +1 -1
- chia/server/resolve_peer_info.py +43 -0
- chia/server/server.py +5 -5
- chia/server/start_data_layer.py +4 -4
- chia/server/start_farmer.py +5 -4
- chia/server/start_full_node.py +5 -4
- chia/server/start_harvester.py +7 -5
- chia/server/start_introducer.py +2 -2
- chia/server/start_service.py +1 -1
- chia/server/start_timelord.py +7 -5
- chia/server/start_wallet.py +7 -5
- chia/server/ws_connection.py +1 -1
- chia/simulator/add_blocks_in_batches.py +2 -2
- chia/simulator/block_tools.py +245 -201
- chia/simulator/full_node_simulator.py +38 -10
- chia/simulator/setup_services.py +12 -12
- chia/simulator/simulator_full_node_rpc_api.py +2 -2
- chia/simulator/simulator_full_node_rpc_client.py +2 -2
- chia/simulator/simulator_test_tools.py +2 -2
- chia/simulator/start_simulator.py +1 -1
- chia/simulator/wallet_tools.py +10 -18
- chia/ssl/create_ssl.py +1 -1
- chia/timelord/iters_from_block.py +14 -14
- chia/timelord/timelord.py +15 -11
- chia/timelord/timelord_api.py +14 -2
- chia/timelord/timelord_state.py +20 -14
- chia/types/blockchain_format/program.py +53 -10
- chia/types/blockchain_format/proof_of_space.py +73 -19
- chia/types/coin_spend.py +3 -56
- chia/types/generator_types.py +28 -0
- chia/types/internal_mempool_item.py +1 -2
- chia/types/mempool_item.py +12 -7
- chia/types/unfinished_header_block.py +1 -2
- chia/types/validation_state.py +1 -2
- chia/types/weight_proof.py +1 -3
- chia/util/action_scope.py +3 -3
- chia/util/block_cache.py +1 -2
- chia/util/byte_types.py +1 -1
- chia/util/casts.py +21 -0
- chia/util/config.py +0 -37
- chia/util/db_wrapper.py +8 -1
- chia/util/errors.py +3 -2
- chia/util/initial-config.yaml +21 -5
- chia/util/keychain.py +6 -7
- chia/util/keyring_wrapper.py +5 -5
- chia/util/limited_semaphore.py +1 -1
- chia/util/priority_mutex.py +1 -1
- chia/util/streamable.py +63 -5
- chia/util/task_timing.py +1 -1
- chia/util/virtual_project_analysis.py +1 -1
- chia/wallet/cat_wallet/cat_info.py +7 -3
- chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
- chia/wallet/cat_wallet/cat_utils.py +1 -1
- chia/wallet/cat_wallet/cat_wallet.py +44 -36
- chia/wallet/cat_wallet/lineage_store.py +7 -0
- chia/wallet/cat_wallet/r_cat_wallet.py +274 -0
- chia/wallet/conditions.py +5 -10
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
- chia/wallet/derivation_record.py +33 -0
- chia/wallet/derive_keys.py +3 -3
- chia/wallet/did_wallet/did_info.py +12 -3
- chia/wallet/did_wallet/did_wallet.py +132 -101
- chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
- chia/wallet/driver_protocol.py +3 -1
- chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
- chia/wallet/nft_wallet/nft_wallet.py +69 -112
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
- chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
- chia/wallet/nft_wallet/uncurry_nft.py +4 -6
- chia/wallet/notification_manager.py +2 -3
- chia/wallet/outer_puzzles.py +7 -2
- chia/wallet/puzzle_drivers.py +1 -1
- chia/wallet/puzzles/clawback/drivers.py +5 -4
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
- chia/wallet/puzzles/singleton_top_layer.py +2 -1
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
- chia/wallet/puzzles/tails.py +1 -3
- chia/wallet/signer_protocol.py +5 -6
- chia/wallet/singleton.py +5 -4
- chia/wallet/singleton_record.py +1 -1
- chia/wallet/trade_manager.py +18 -20
- chia/wallet/trade_record.py +3 -6
- chia/wallet/trading/offer.py +12 -13
- chia/wallet/uncurried_puzzle.py +2 -2
- chia/wallet/util/compute_additions.py +58 -0
- chia/wallet/util/compute_hints.py +3 -3
- chia/wallet/util/compute_memos.py +4 -4
- chia/wallet/util/curry_and_treehash.py +2 -1
- chia/wallet/util/debug_spend_bundle.py +1 -1
- chia/wallet/util/merkle_tree.py +1 -1
- chia/wallet/util/peer_request_cache.py +1 -2
- chia/wallet/util/tx_config.py +3 -8
- chia/wallet/util/wallet_sync_utils.py +10 -5
- chia/wallet/util/wallet_types.py +1 -0
- chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
- chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
- chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
- chia/wallet/vc_wallet/vc_drivers.py +50 -8
- chia/wallet/vc_wallet/vc_store.py +3 -5
- chia/wallet/vc_wallet/vc_wallet.py +15 -22
- chia/wallet/wallet.py +36 -46
- chia/wallet/wallet_action_scope.py +73 -4
- chia/wallet/wallet_blockchain.py +1 -3
- chia/wallet/wallet_interested_store.py +1 -1
- chia/wallet/wallet_nft_store.py +3 -3
- chia/wallet/wallet_node.py +17 -16
- chia/wallet/wallet_node_api.py +4 -5
- chia/wallet/wallet_pool_store.py +1 -1
- chia/wallet/wallet_protocol.py +2 -0
- chia/wallet/wallet_puzzle_store.py +1 -1
- chia/{rpc → wallet}/wallet_request_types.py +670 -81
- chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
- chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
- chia/wallet/wallet_singleton_store.py +8 -7
- chia/wallet/wallet_spend_bundle.py +4 -3
- chia/wallet/wallet_state_manager.py +320 -191
- chia/wallet/wallet_weight_proof_handler.py +1 -2
- chia/wallet/wsm_apis.py +98 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/RECORD +443 -436
- mozilla-ca/cacert.pem +3 -165
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
- chia/cmds/dev.py +0 -18
- chia/types/blockchain_format/slots.py +0 -9
- chia/types/blockchain_format/sub_epoch_summary.py +0 -5
- chia/types/end_of_slot_bundle.py +0 -5
- chia/types/full_block.py +0 -5
- chia/types/header_block.py +0 -5
- chia/types/spend_bundle_conditions.py +0 -7
- chia/types/transaction_queue_entry.py +0 -56
- chia/types/unfinished_block.py +0 -5
- /chia/cmds/{installers.py → dev/installers.py} +0 -0
- /chia/cmds/{sim.py → dev/sim.py} +0 -0
- /chia/{util → cmds}/dump_keyring.py +0 -0
- /chia/{full_node → consensus}/signage_point.py +0 -0
- /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
- /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
- /chia/{util → full_node}/full_block_utils.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
- /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
- /chia/{full_node → protocols}/fee_estimate.py +0 -0
- /chia/{server → protocols}/outbound_message.py +0 -0
- /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
- /chia/{util → simulator}/vdf_prover.py +0 -0
- /chia/{util → ssl}/ssl_check.py +0 -0
- /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/entry_points.txt +0 -0
|
@@ -6,20 +6,25 @@ from collections.abc import Awaitable, Collection
|
|
|
6
6
|
from dataclasses import dataclass, field
|
|
7
7
|
from typing import Callable, Optional, Union
|
|
8
8
|
|
|
9
|
-
from chia_rs import
|
|
9
|
+
from chia_rs import (
|
|
10
|
+
BlockRecord,
|
|
11
|
+
ConsensusConstants,
|
|
12
|
+
FullBlock,
|
|
13
|
+
SpendBundleConditions,
|
|
14
|
+
UnfinishedBlock,
|
|
15
|
+
compute_merkle_set_root,
|
|
16
|
+
is_canonical_serialization,
|
|
17
|
+
)
|
|
10
18
|
from chia_rs.sized_bytes import bytes32
|
|
11
19
|
from chia_rs.sized_ints import uint32, uint64
|
|
12
20
|
from chiabip158 import PyBIP158
|
|
13
21
|
|
|
14
|
-
from chia.consensus.block_record import BlockRecord
|
|
15
22
|
from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
|
|
16
23
|
from chia.consensus.blockchain_interface import BlockRecordsProtocol
|
|
24
|
+
from chia.consensus.check_time_locks import check_time_locks
|
|
17
25
|
from chia.consensus.coinbase import create_farmer_coin, create_pool_coin
|
|
18
|
-
from chia.full_node.mempool_check_conditions import mempool_check_time_locks
|
|
19
26
|
from chia.types.blockchain_format.coin import Coin, hash_coin_ids
|
|
20
27
|
from chia.types.coin_record import CoinRecord
|
|
21
|
-
from chia.types.full_block import FullBlock
|
|
22
|
-
from chia.types.unfinished_block import UnfinishedBlock
|
|
23
28
|
from chia.util.errors import Err
|
|
24
29
|
from chia.util.hash import std_hash
|
|
25
30
|
|
|
@@ -44,6 +49,8 @@ class ForkAdd:
|
|
|
44
49
|
timestamp: uint64
|
|
45
50
|
hint: Optional[bytes]
|
|
46
51
|
is_coinbase: bool
|
|
52
|
+
# This means matching parent puzzle hash and amount
|
|
53
|
+
same_as_parent: bool
|
|
47
54
|
|
|
48
55
|
|
|
49
56
|
@dataclass(frozen=True)
|
|
@@ -82,61 +89,64 @@ class ForkInfo:
|
|
|
82
89
|
self.removals_since_fork = {}
|
|
83
90
|
self.block_hashes = []
|
|
84
91
|
|
|
85
|
-
def
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
assert self.peak_height == height - 1
|
|
89
|
-
|
|
92
|
+
def update_fork_peak(self, block: FullBlock, header_hash: bytes32) -> None:
|
|
93
|
+
"""Updates `self` with `block`'s height and `header_hash`."""
|
|
94
|
+
assert self.peak_height == block.height - 1
|
|
90
95
|
assert len(self.block_hashes) == self.peak_height - self.fork_height
|
|
91
96
|
assert block.height == self.fork_height + 1 + len(self.block_hashes)
|
|
92
97
|
self.block_hashes.append(header_hash)
|
|
93
|
-
|
|
94
98
|
self.peak_height = int(block.height)
|
|
95
99
|
self.peak_hash = header_hash
|
|
96
100
|
|
|
101
|
+
def include_reward_coins(self, block: FullBlock) -> None:
|
|
102
|
+
"""Updates `self` with `block`'s reward coins."""
|
|
103
|
+
for coin in block.get_included_reward_coins():
|
|
104
|
+
assert block.foliage_transaction_block is not None
|
|
105
|
+
timestamp = block.foliage_transaction_block.timestamp
|
|
106
|
+
coin_id = coin.name()
|
|
107
|
+
assert coin_id not in self.additions_since_fork
|
|
108
|
+
self.additions_since_fork[coin_id] = ForkAdd(
|
|
109
|
+
coin, block.height, timestamp, hint=None, is_coinbase=True, same_as_parent=False
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
def include_spends(self, conds: Optional[SpendBundleConditions], block: FullBlock, header_hash: bytes32) -> None:
|
|
113
|
+
self.update_fork_peak(block, header_hash)
|
|
97
114
|
if conds is not None:
|
|
98
115
|
assert block.foliage_transaction_block is not None
|
|
99
116
|
timestamp = block.foliage_transaction_block.timestamp
|
|
100
117
|
for spend in conds.spends:
|
|
101
|
-
|
|
118
|
+
spend_coin_id = bytes32(spend.coin_id)
|
|
119
|
+
self.removals_since_fork[spend_coin_id] = ForkRem(bytes32(spend.puzzle_hash), block.height)
|
|
102
120
|
for puzzle_hash, amount, hint in spend.create_coin:
|
|
103
|
-
coin = Coin(
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
self.additions_since_fork[coin.name()] = ForkAdd(coin, block.height, timestamp, None, True)
|
|
121
|
+
coin = Coin(spend_coin_id, bytes32(puzzle_hash), uint64(amount))
|
|
122
|
+
same_as_parent = coin.puzzle_hash == spend.puzzle_hash and amount == spend.coin_amount
|
|
123
|
+
self.additions_since_fork[coin.name()] = ForkAdd(
|
|
124
|
+
coin, block.height, timestamp, hint=hint, is_coinbase=False, same_as_parent=same_as_parent
|
|
125
|
+
)
|
|
126
|
+
self.include_reward_coins(block)
|
|
110
127
|
|
|
111
128
|
def include_block(
|
|
112
129
|
self,
|
|
113
130
|
additions: list[tuple[Coin, Optional[bytes]]],
|
|
114
|
-
removals: list[Coin],
|
|
131
|
+
removals: list[tuple[bytes32, Coin]],
|
|
115
132
|
block: FullBlock,
|
|
116
133
|
header_hash: bytes32,
|
|
117
134
|
) -> None:
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
assert self.peak_height == height - 1
|
|
121
|
-
|
|
122
|
-
assert len(self.block_hashes) == self.peak_height - self.fork_height
|
|
123
|
-
assert block.height == self.fork_height + 1 + len(self.block_hashes)
|
|
124
|
-
self.block_hashes.append(header_hash)
|
|
125
|
-
|
|
126
|
-
self.peak_height = int(block.height)
|
|
127
|
-
self.peak_hash = header_hash
|
|
128
|
-
|
|
135
|
+
self.update_fork_peak(block, header_hash)
|
|
129
136
|
if block.foliage_transaction_block is not None:
|
|
130
137
|
timestamp = block.foliage_transaction_block.timestamp
|
|
131
|
-
|
|
132
|
-
|
|
138
|
+
spent_coins: dict[bytes32, Coin] = {}
|
|
139
|
+
for spend_id, spend in removals:
|
|
140
|
+
spent_coins[bytes32(spend_id)] = spend
|
|
141
|
+
self.removals_since_fork[bytes32(spend_id)] = ForkRem(bytes32(spend.puzzle_hash), block.height)
|
|
133
142
|
for coin, hint in additions:
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
143
|
+
parent = spent_coins.get(coin.parent_coin_info)
|
|
144
|
+
assert parent is not None
|
|
145
|
+
same_as_parent = coin.puzzle_hash == parent.puzzle_hash and coin.amount == parent.amount
|
|
146
|
+
self.additions_since_fork[coin.name()] = ForkAdd(
|
|
147
|
+
coin, block.height, timestamp, hint=hint, is_coinbase=False, same_as_parent=same_as_parent
|
|
148
|
+
)
|
|
149
|
+
self.include_reward_coins(block)
|
|
140
150
|
|
|
141
151
|
def rollback(self, header_hash: bytes32, height: int) -> None:
|
|
142
152
|
assert height <= self.peak_height
|
|
@@ -366,6 +376,10 @@ async def validate_block_body(
|
|
|
366
376
|
assert conds is not None
|
|
367
377
|
assert conds.validated_signature
|
|
368
378
|
|
|
379
|
+
if prev_transaction_block_height >= constants.HARD_FORK2_HEIGHT:
|
|
380
|
+
if not is_canonical_serialization(bytes(block.transactions_generator)):
|
|
381
|
+
return Err.INVALID_TRANSACTIONS_GENERATOR_ENCODING
|
|
382
|
+
|
|
369
383
|
for spend in conds.spends:
|
|
370
384
|
removals.append(bytes32(spend.coin_id))
|
|
371
385
|
removals_puzzle_dic[bytes32(spend.coin_id)] = bytes32(spend.puzzle_hash)
|
|
@@ -545,7 +559,7 @@ async def validate_block_body(
|
|
|
545
559
|
# 21. Verify conditions
|
|
546
560
|
# verify absolute/relative height/time conditions
|
|
547
561
|
if conds is not None:
|
|
548
|
-
error =
|
|
562
|
+
error = check_time_locks(
|
|
549
563
|
removal_coin_records,
|
|
550
564
|
conds,
|
|
551
565
|
prev_transaction_block_height,
|
chia/consensus/block_creation.py
CHANGED
|
@@ -7,67 +7,40 @@ from typing import Callable, Optional
|
|
|
7
7
|
|
|
8
8
|
import chia_rs
|
|
9
9
|
from chia_rs import (
|
|
10
|
-
|
|
11
|
-
MEMPOOL_MODE,
|
|
10
|
+
BlockRecord,
|
|
12
11
|
ConsensusConstants,
|
|
12
|
+
EndOfSubSlotBundle,
|
|
13
13
|
Foliage,
|
|
14
14
|
FoliageBlockData,
|
|
15
15
|
FoliageTransactionBlock,
|
|
16
|
+
FullBlock,
|
|
16
17
|
G1Element,
|
|
17
18
|
G2Element,
|
|
18
19
|
PoolTarget,
|
|
20
|
+
ProofOfSpace,
|
|
19
21
|
RewardChainBlock,
|
|
20
22
|
RewardChainBlockUnfinished,
|
|
21
23
|
TransactionsInfo,
|
|
24
|
+
UnfinishedBlock,
|
|
22
25
|
compute_merkle_set_root,
|
|
23
|
-
get_flags_for_height_and_constants,
|
|
24
|
-
run_block_generator,
|
|
25
|
-
run_block_generator2,
|
|
26
26
|
)
|
|
27
27
|
from chia_rs.sized_bytes import bytes32
|
|
28
28
|
from chia_rs.sized_ints import uint8, uint32, uint64, uint128
|
|
29
29
|
from chiabip158 import PyBIP158
|
|
30
30
|
|
|
31
|
-
from chia.consensus.block_record import BlockRecord
|
|
32
31
|
from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
|
|
33
32
|
from chia.consensus.blockchain_interface import BlockRecordsProtocol
|
|
34
33
|
from chia.consensus.coinbase import create_farmer_coin, create_pool_coin
|
|
35
|
-
from chia.
|
|
34
|
+
from chia.consensus.prev_transaction_block import get_prev_transaction_block
|
|
35
|
+
from chia.consensus.signage_point import SignagePoint
|
|
36
36
|
from chia.types.blockchain_format.coin import Coin, hash_coin_ids
|
|
37
|
-
from chia.types.blockchain_format.proof_of_space import ProofOfSpace
|
|
38
37
|
from chia.types.blockchain_format.vdf import VDFInfo, VDFProof
|
|
39
|
-
from chia.types.
|
|
40
|
-
from chia.types.full_block import FullBlock
|
|
41
|
-
from chia.types.generator_types import BlockGenerator
|
|
42
|
-
from chia.types.unfinished_block import UnfinishedBlock
|
|
38
|
+
from chia.types.generator_types import NewBlockGenerator
|
|
43
39
|
from chia.util.hash import std_hash
|
|
44
|
-
from chia.util.prev_transaction_block import get_prev_transaction_block
|
|
45
40
|
|
|
46
41
|
log = logging.getLogger(__name__)
|
|
47
42
|
|
|
48
43
|
|
|
49
|
-
def compute_block_cost(generator: BlockGenerator, constants: ConsensusConstants, height: uint32) -> uint64:
|
|
50
|
-
flags = get_flags_for_height_and_constants(height, constants) | MEMPOOL_MODE | DONT_VALIDATE_SIGNATURE
|
|
51
|
-
|
|
52
|
-
if height >= constants.HARD_FORK_HEIGHT:
|
|
53
|
-
run_block = run_block_generator2
|
|
54
|
-
else:
|
|
55
|
-
run_block = run_block_generator
|
|
56
|
-
|
|
57
|
-
err, conds = run_block(
|
|
58
|
-
bytes(generator.program),
|
|
59
|
-
generator.generator_refs,
|
|
60
|
-
constants.MAX_BLOCK_COST_CLVM,
|
|
61
|
-
flags,
|
|
62
|
-
G2Element(),
|
|
63
|
-
None,
|
|
64
|
-
constants,
|
|
65
|
-
)
|
|
66
|
-
if conds is None: # pragma: no cover
|
|
67
|
-
log.error(f"unexpected error while computing block cost: {err} height: {height} generator: {generator.program}")
|
|
68
|
-
return uint64(0 if conds is None else conds.cost)
|
|
69
|
-
|
|
70
|
-
|
|
71
44
|
def compute_block_fee(additions: Sequence[Coin], removals: Sequence[Coin]) -> uint64:
|
|
72
45
|
removal_amount = 0
|
|
73
46
|
addition_amount = 0
|
|
@@ -81,10 +54,7 @@ def compute_block_fee(additions: Sequence[Coin], removals: Sequence[Coin]) -> ui
|
|
|
81
54
|
def create_foliage(
|
|
82
55
|
constants: ConsensusConstants,
|
|
83
56
|
reward_block_unfinished: RewardChainBlockUnfinished,
|
|
84
|
-
|
|
85
|
-
aggregate_sig: G2Element,
|
|
86
|
-
additions: list[Coin],
|
|
87
|
-
removals: list[Coin],
|
|
57
|
+
new_block_gen: Optional[NewBlockGenerator],
|
|
88
58
|
prev_block: Optional[BlockRecord],
|
|
89
59
|
blocks: BlockRecordsProtocol,
|
|
90
60
|
total_iters_sp: uint128,
|
|
@@ -94,7 +64,6 @@ def create_foliage(
|
|
|
94
64
|
get_plot_signature: Callable[[bytes32, G1Element], G2Element],
|
|
95
65
|
get_pool_signature: Callable[[PoolTarget, Optional[G1Element]], Optional[G2Element]],
|
|
96
66
|
seed: bytes,
|
|
97
|
-
compute_cost: Callable[[BlockGenerator, ConsensusConstants, uint32], uint64],
|
|
98
67
|
compute_fees: Callable[[Sequence[Coin], Sequence[Coin]], uint64],
|
|
99
68
|
) -> tuple[Foliage, Optional[FoliageTransactionBlock], Optional[TransactionsInfo]]:
|
|
100
69
|
"""
|
|
@@ -105,8 +74,7 @@ def create_foliage(
|
|
|
105
74
|
Args:
|
|
106
75
|
constants: consensus constants being used for this chain
|
|
107
76
|
reward_block_unfinished: the reward block to look at, potentially at the signage point
|
|
108
|
-
|
|
109
|
-
aggregate_sig: aggregate of all transactions (or infinity element)
|
|
77
|
+
new_block_gen: transactions to add to the foliage block, if created, including aggregate signature
|
|
110
78
|
prev_block: the previous block at the signage point
|
|
111
79
|
blocks: dict from header hash to blocks, of all ancestor blocks
|
|
112
80
|
total_iters_sp: total iters at the signage point
|
|
@@ -164,18 +132,21 @@ def create_foliage(
|
|
|
164
132
|
assert prev_block is not None
|
|
165
133
|
prev_block_hash = prev_block.header_hash
|
|
166
134
|
|
|
135
|
+
generator_block_heights_list: list[uint32] = []
|
|
136
|
+
|
|
167
137
|
foliage_transaction_block_hash: Optional[bytes32]
|
|
168
138
|
|
|
169
139
|
if is_transaction_block:
|
|
170
|
-
cost
|
|
140
|
+
cost: uint64
|
|
141
|
+
spend_bundle_fees: uint64
|
|
171
142
|
|
|
172
143
|
# Calculate the cost of transactions
|
|
173
|
-
if
|
|
174
|
-
cost =
|
|
175
|
-
|
|
176
|
-
spend_bundle_fees = compute_fees(additions, removals)
|
|
144
|
+
if new_block_gen is not None:
|
|
145
|
+
cost = new_block_gen.cost
|
|
146
|
+
spend_bundle_fees = compute_fees(new_block_gen.additions, new_block_gen.removals)
|
|
177
147
|
else:
|
|
178
148
|
spend_bundle_fees = uint64(0)
|
|
149
|
+
cost = uint64(0)
|
|
179
150
|
|
|
180
151
|
reward_claims_incorporated = []
|
|
181
152
|
if height > 0:
|
|
@@ -217,14 +188,20 @@ def create_foliage(
|
|
|
217
188
|
)
|
|
218
189
|
reward_claims_incorporated += [pool_coin, farmer_coin]
|
|
219
190
|
curr = blocks.block_record(curr.prev_hash)
|
|
220
|
-
|
|
221
|
-
for coin in
|
|
191
|
+
|
|
192
|
+
for coin in reward_claims_incorporated:
|
|
222
193
|
tx_additions.append(coin)
|
|
223
194
|
byte_array_tx.append(bytearray(coin.puzzle_hash))
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
195
|
+
|
|
196
|
+
if new_block_gen is not None:
|
|
197
|
+
generator_block_heights_list = new_block_gen.block_refs
|
|
198
|
+
for coin in new_block_gen.additions:
|
|
199
|
+
tx_additions.append(coin)
|
|
200
|
+
byte_array_tx.append(bytearray(coin.puzzle_hash))
|
|
201
|
+
for coin in new_block_gen.removals:
|
|
202
|
+
cname = coin.name()
|
|
203
|
+
tx_removals.append(cname)
|
|
204
|
+
byte_array_tx.append(bytearray(cname))
|
|
228
205
|
|
|
229
206
|
bip158: PyBIP158 = PyBIP158(byte_array_tx)
|
|
230
207
|
encoded = bytes(bip158.GetEncoded())
|
|
@@ -249,16 +226,20 @@ def create_foliage(
|
|
|
249
226
|
removals_root = bytes32(compute_merkle_set_root(tx_removals))
|
|
250
227
|
|
|
251
228
|
generator_hash = bytes32.zeros
|
|
252
|
-
if
|
|
253
|
-
generator_hash = std_hash(
|
|
229
|
+
if new_block_gen is not None:
|
|
230
|
+
generator_hash = std_hash(new_block_gen.program)
|
|
254
231
|
|
|
255
232
|
generator_refs_hash = bytes32([1] * 32)
|
|
233
|
+
if generator_block_heights_list not in (None, []):
|
|
234
|
+
generator_ref_list_bytes = b"".join([i.stream_to_bytes() for i in generator_block_heights_list])
|
|
235
|
+
generator_refs_hash = std_hash(generator_ref_list_bytes)
|
|
236
|
+
|
|
256
237
|
filter_hash: bytes32 = std_hash(encoded)
|
|
257
238
|
|
|
258
239
|
transactions_info: Optional[TransactionsInfo] = TransactionsInfo(
|
|
259
240
|
generator_hash,
|
|
260
241
|
generator_refs_hash,
|
|
261
|
-
|
|
242
|
+
new_block_gen.signature if new_block_gen else G2Element(),
|
|
262
243
|
spend_bundle_fees,
|
|
263
244
|
cost,
|
|
264
245
|
reward_claims_incorporated,
|
|
@@ -320,13 +301,9 @@ def create_unfinished_block(
|
|
|
320
301
|
timestamp: uint64,
|
|
321
302
|
blocks: BlockRecordsProtocol,
|
|
322
303
|
seed: bytes = b"",
|
|
323
|
-
|
|
324
|
-
aggregate_sig: G2Element = G2Element(),
|
|
325
|
-
additions: Optional[list[Coin]] = None,
|
|
326
|
-
removals: Optional[list[Coin]] = None,
|
|
304
|
+
new_block_gen: Optional[NewBlockGenerator] = None,
|
|
327
305
|
prev_block: Optional[BlockRecord] = None,
|
|
328
306
|
finished_sub_slots_input: Optional[list[EndOfSubSlotBundle]] = None,
|
|
329
|
-
compute_cost: Callable[[BlockGenerator, ConsensusConstants, uint32], uint64] = compute_block_cost,
|
|
330
307
|
compute_fees: Callable[[Sequence[Coin], Sequence[Coin]], uint64] = compute_block_fee,
|
|
331
308
|
) -> UnfinishedBlock:
|
|
332
309
|
"""
|
|
@@ -349,10 +326,7 @@ def create_unfinished_block(
|
|
|
349
326
|
signage_point: signage point information (VDFs)
|
|
350
327
|
timestamp: timestamp to add to the foliage block, if created
|
|
351
328
|
seed: seed to randomize chain
|
|
352
|
-
|
|
353
|
-
aggregate_sig: aggregate of all transactions (or infinity element)
|
|
354
|
-
additions: Coins added in spend_bundle
|
|
355
|
-
removals: Coins removed in spend_bundle
|
|
329
|
+
new_block_gen: transactions to add to the foliage block, if created, including aggregate signature
|
|
356
330
|
prev_block: previous block (already in chain) from the signage point
|
|
357
331
|
blocks: dictionary from header hash to SBR of all included SBR
|
|
358
332
|
finished_sub_slots_input: finished_sub_slots at the signage point
|
|
@@ -411,17 +385,10 @@ def create_unfinished_block(
|
|
|
411
385
|
signage_point.rc_vdf,
|
|
412
386
|
rc_sp_signature,
|
|
413
387
|
)
|
|
414
|
-
if additions is None:
|
|
415
|
-
additions = []
|
|
416
|
-
if removals is None:
|
|
417
|
-
removals = []
|
|
418
388
|
(foliage, foliage_transaction_block, transactions_info) = create_foliage(
|
|
419
389
|
constants,
|
|
420
390
|
rc_block,
|
|
421
|
-
|
|
422
|
-
aggregate_sig,
|
|
423
|
-
additions,
|
|
424
|
-
removals,
|
|
391
|
+
new_block_gen,
|
|
425
392
|
prev_block,
|
|
426
393
|
blocks,
|
|
427
394
|
total_iters_sp,
|
|
@@ -431,7 +398,6 @@ def create_unfinished_block(
|
|
|
431
398
|
get_plot_signature,
|
|
432
399
|
get_pool_signature,
|
|
433
400
|
seed,
|
|
434
|
-
compute_cost,
|
|
435
401
|
compute_fees,
|
|
436
402
|
)
|
|
437
403
|
return UnfinishedBlock(
|
|
@@ -442,8 +408,8 @@ def create_unfinished_block(
|
|
|
442
408
|
foliage,
|
|
443
409
|
foliage_transaction_block,
|
|
444
410
|
transactions_info,
|
|
445
|
-
|
|
446
|
-
[],
|
|
411
|
+
new_block_gen.program if new_block_gen else None,
|
|
412
|
+
new_block_gen.block_refs if new_block_gen else [],
|
|
447
413
|
)
|
|
448
414
|
|
|
449
415
|
|
|
@@ -4,30 +4,34 @@ import logging
|
|
|
4
4
|
import time
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
|
-
from chia_rs import
|
|
7
|
+
from chia_rs import (
|
|
8
|
+
AugSchemeMPL,
|
|
9
|
+
BlockRecord,
|
|
10
|
+
ChallengeChainSubSlot,
|
|
11
|
+
ConsensusConstants,
|
|
12
|
+
EndOfSubSlotBundle,
|
|
13
|
+
HeaderBlock,
|
|
14
|
+
RewardChainSubSlot,
|
|
15
|
+
SubSlotProofs,
|
|
16
|
+
)
|
|
8
17
|
from chia_rs.sized_bytes import bytes32
|
|
9
18
|
from chia_rs.sized_ints import uint8, uint32, uint64, uint128
|
|
10
19
|
|
|
11
|
-
from chia.consensus.block_record import BlockRecord
|
|
12
20
|
from chia.consensus.blockchain_interface import BlockRecordsProtocol
|
|
13
21
|
from chia.consensus.deficit import calculate_deficit
|
|
14
22
|
from chia.consensus.difficulty_adjustment import can_finish_sub_and_full_epoch
|
|
15
|
-
from chia.consensus.get_block_challenge import final_eos_is_already_included, get_block_challenge
|
|
23
|
+
from chia.consensus.get_block_challenge import final_eos_is_already_included, get_block_challenge, prev_tx_block
|
|
16
24
|
from chia.consensus.make_sub_epoch_summary import make_sub_epoch_summary
|
|
17
25
|
from chia.consensus.pot_iterations import (
|
|
18
26
|
calculate_ip_iters,
|
|
19
|
-
calculate_iterations_quality,
|
|
20
27
|
calculate_sp_interval_iters,
|
|
21
28
|
calculate_sp_iters,
|
|
22
29
|
is_overflow_block,
|
|
30
|
+
validate_pospace_and_get_required_iters,
|
|
23
31
|
)
|
|
24
32
|
from chia.consensus.vdf_info_computation import get_signage_point_vdf_info
|
|
25
33
|
from chia.types.blockchain_format.classgroup import ClassgroupElement
|
|
26
|
-
from chia.types.blockchain_format.proof_of_space import verify_and_get_quality_string
|
|
27
|
-
from chia.types.blockchain_format.slots import ChallengeChainSubSlot, RewardChainSubSlot, SubSlotProofs
|
|
28
34
|
from chia.types.blockchain_format.vdf import VDFInfo, VDFProof, validate_vdf
|
|
29
|
-
from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
|
|
30
|
-
from chia.types.header_block import HeaderBlock
|
|
31
35
|
from chia.types.unfinished_header_block import UnfinishedHeaderBlock
|
|
32
36
|
from chia.types.validation_state import ValidationState
|
|
33
37
|
from chia.util.errors import Err, ValidationError
|
|
@@ -58,6 +62,15 @@ def validate_unfinished_header_block(
|
|
|
58
62
|
skip_overflow_last_ss_validation must be set to True. This will skip validation of end of slots, sub-epochs,
|
|
59
63
|
and lead to other small tweaks in validation.
|
|
60
64
|
"""
|
|
65
|
+
|
|
66
|
+
# some of the checks numbers may be out of order this is because all
|
|
67
|
+
# checks need to be valid regardless of order and the numbers are reflecting the numbers as written in the chia docs
|
|
68
|
+
|
|
69
|
+
# 6. check signage point index
|
|
70
|
+
# no need to check negative values as this is uint 8
|
|
71
|
+
if header_block.reward_chain_block.signage_point_index >= constants.NUM_SPS_SUB_SLOT:
|
|
72
|
+
return None, ValidationError(Err.INVALID_SP_INDEX)
|
|
73
|
+
|
|
61
74
|
# 1. Check that the previous block exists in the blockchain, or that it is correct
|
|
62
75
|
|
|
63
76
|
prev_b = blocks.try_block_record(header_block.prev_header_hash)
|
|
@@ -486,25 +499,18 @@ def validate_unfinished_header_block(
|
|
|
486
499
|
else:
|
|
487
500
|
cc_sp_hash = header_block.reward_chain_block.challenge_chain_sp_vdf.output.get_hash()
|
|
488
501
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
return None, ValidationError(Err.INVALID_POSPACE)
|
|
494
|
-
|
|
495
|
-
# 6. check signage point index
|
|
496
|
-
# no need to check negative values as this is uint 8
|
|
497
|
-
if header_block.reward_chain_block.signage_point_index >= constants.NUM_SPS_SUB_SLOT:
|
|
498
|
-
return None, ValidationError(Err.INVALID_SP_INDEX)
|
|
499
|
-
|
|
500
|
-
# Note that required iters might be from the previous slot (if we are in an overflow block)
|
|
501
|
-
required_iters: uint64 = calculate_iterations_quality(
|
|
502
|
-
constants.DIFFICULTY_CONSTANT_FACTOR,
|
|
503
|
-
q_str,
|
|
504
|
-
header_block.reward_chain_block.proof_of_space.size,
|
|
505
|
-
expected_vs.difficulty,
|
|
502
|
+
required_iters = validate_pospace_and_get_required_iters(
|
|
503
|
+
constants,
|
|
504
|
+
header_block.reward_chain_block.proof_of_space,
|
|
505
|
+
challenge,
|
|
506
506
|
cc_sp_hash,
|
|
507
|
+
height,
|
|
508
|
+
expected_vs.difficulty,
|
|
509
|
+
expected_vs.ssi,
|
|
510
|
+
prev_tx_block(blocks, prev_b),
|
|
507
511
|
)
|
|
512
|
+
if required_iters is None:
|
|
513
|
+
return None, ValidationError(Err.INVALID_POSPACE)
|
|
508
514
|
|
|
509
515
|
# 7. check required iters
|
|
510
516
|
if required_iters >= calculate_sp_interval_iters(constants, expected_vs.ssi):
|
|
@@ -824,7 +830,7 @@ def validate_unfinished_header_block(
|
|
|
824
830
|
assert prev_transaction_b.timestamp is not None
|
|
825
831
|
if header_block.foliage_transaction_block.timestamp <= prev_transaction_b.timestamp:
|
|
826
832
|
return None, ValidationError(Err.TIMESTAMP_TOO_FAR_IN_PAST)
|
|
827
|
-
return required_iters, None
|
|
833
|
+
return required_iters, None
|
|
828
834
|
|
|
829
835
|
|
|
830
836
|
def validate_finished_header_block(
|
chia/consensus/block_record.py
CHANGED
|
@@ -2,13 +2,10 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import Optional
|
|
4
4
|
|
|
5
|
-
import chia_rs
|
|
6
5
|
from chia_rs.sized_bytes import bytes32
|
|
7
6
|
from chia_rs.sized_ints import uint32, uint64
|
|
8
7
|
from typing_extensions import Protocol
|
|
9
8
|
|
|
10
|
-
BlockRecord = chia_rs.BlockRecord
|
|
11
|
-
|
|
12
9
|
|
|
13
10
|
class BlockRecordProtocol(Protocol):
|
|
14
11
|
@property
|