chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5rc1__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 +421 -69
- chia/_tests/core/mempool/test_mempool_performance.py +3 -2
- chia/_tests/core/mempool/test_singleton_fast_forward.py +60 -131
- 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 +305 -184
- 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 +143 -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 +26 -40
- 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 +273 -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.5rc1.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.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.5rc1.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/entry_points.txt +0 -0
|
@@ -1,26 +1,22 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
from chia_puzzles_py.programs import CHIALISP_DESERIALISATION
|
|
7
6
|
from chia_rs import (
|
|
7
|
+
CoinSpend,
|
|
8
8
|
ConsensusConstants,
|
|
9
9
|
get_flags_for_height_and_constants,
|
|
10
10
|
run_chia_program,
|
|
11
11
|
)
|
|
12
12
|
from chia_rs import get_puzzle_and_solution_for_coin2 as get_puzzle_and_solution_for_coin_rust
|
|
13
|
-
from chia_rs.
|
|
14
|
-
from chia_rs.sized_ints import uint32, uint64
|
|
13
|
+
from chia_rs.sized_ints import uint64
|
|
15
14
|
|
|
15
|
+
from chia.consensus.condition_tools import conditions_for_solution
|
|
16
16
|
from chia.types.blockchain_format.coin import Coin
|
|
17
17
|
from chia.types.blockchain_format.program import Program
|
|
18
|
-
from chia.types.
|
|
19
|
-
from chia.types.coin_spend import CoinSpend, CoinSpendWithConditions, SpendInfo, make_spend
|
|
18
|
+
from chia.types.coin_spend import CoinSpendWithConditions, SpendInfo, make_spend
|
|
20
19
|
from chia.types.generator_types import BlockGenerator
|
|
21
|
-
from chia.types.spend_bundle_conditions import SpendBundleConditions
|
|
22
|
-
from chia.util.condition_tools import conditions_for_solution
|
|
23
|
-
from chia.util.errors import Err
|
|
24
20
|
|
|
25
21
|
DESERIALIZE_MOD = Program.from_bytes(CHIALISP_DESERIALISATION)
|
|
26
22
|
|
|
@@ -61,10 +57,13 @@ def get_spends_for_block(generator: BlockGenerator, height: int, constants: Cons
|
|
|
61
57
|
spends: list[CoinSpend] = []
|
|
62
58
|
|
|
63
59
|
for spend in Program.to(ret).first().as_iter():
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
60
|
+
try:
|
|
61
|
+
parent, puzzle, amount, solution = spend.as_iter()
|
|
62
|
+
puzzle_hash = puzzle.get_tree_hash()
|
|
63
|
+
coin = Coin(parent.as_atom(), puzzle_hash, uint64(amount.as_int()))
|
|
64
|
+
spends.append(make_spend(coin, puzzle, solution))
|
|
65
|
+
except ValueError:
|
|
66
|
+
log.warning("get_spends_for_block() encountered a puzzle we couldn't serialize: {e}")
|
|
68
67
|
|
|
69
68
|
return spends
|
|
70
69
|
|
|
@@ -90,56 +89,14 @@ def get_spends_for_block_with_conditions(
|
|
|
90
89
|
spends: list[CoinSpendWithConditions] = []
|
|
91
90
|
|
|
92
91
|
for spend in Program.to(ret).first().as_iter():
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
92
|
+
try:
|
|
93
|
+
parent, puzzle, amount, solution = spend.as_iter()
|
|
94
|
+
puzzle_hash = puzzle.get_tree_hash()
|
|
95
|
+
coin = Coin(parent.as_atom(), puzzle_hash, uint64(amount.as_int()))
|
|
96
|
+
coin_spend = make_spend(coin, puzzle, solution)
|
|
97
|
+
conditions = conditions_for_solution(puzzle, solution, constants.MAX_BLOCK_COST_CLVM)
|
|
98
|
+
spends.append(CoinSpendWithConditions(coin_spend, conditions))
|
|
99
|
+
except ValueError:
|
|
100
|
+
log.warning("get_spends_for_block_with_conditions() encountered a puzzle we couldn't serialize: {e}")
|
|
99
101
|
|
|
100
102
|
return spends
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
def mempool_check_time_locks(
|
|
104
|
-
removal_coin_records: dict[bytes32, CoinRecord],
|
|
105
|
-
bundle_conds: SpendBundleConditions,
|
|
106
|
-
prev_transaction_block_height: uint32,
|
|
107
|
-
timestamp: uint64,
|
|
108
|
-
) -> Optional[Err]:
|
|
109
|
-
"""
|
|
110
|
-
Check all time and height conditions against current state.
|
|
111
|
-
"""
|
|
112
|
-
|
|
113
|
-
if prev_transaction_block_height < bundle_conds.height_absolute:
|
|
114
|
-
return Err.ASSERT_HEIGHT_ABSOLUTE_FAILED
|
|
115
|
-
if timestamp < bundle_conds.seconds_absolute:
|
|
116
|
-
return Err.ASSERT_SECONDS_ABSOLUTE_FAILED
|
|
117
|
-
if bundle_conds.before_height_absolute is not None:
|
|
118
|
-
if prev_transaction_block_height >= bundle_conds.before_height_absolute:
|
|
119
|
-
return Err.ASSERT_BEFORE_HEIGHT_ABSOLUTE_FAILED
|
|
120
|
-
if bundle_conds.before_seconds_absolute is not None:
|
|
121
|
-
if timestamp >= bundle_conds.before_seconds_absolute:
|
|
122
|
-
return Err.ASSERT_BEFORE_SECONDS_ABSOLUTE_FAILED
|
|
123
|
-
|
|
124
|
-
for spend in bundle_conds.spends:
|
|
125
|
-
unspent = removal_coin_records[bytes32(spend.coin_id)]
|
|
126
|
-
if spend.birth_height is not None:
|
|
127
|
-
if spend.birth_height != unspent.confirmed_block_index:
|
|
128
|
-
return Err.ASSERT_MY_BIRTH_HEIGHT_FAILED
|
|
129
|
-
if spend.birth_seconds is not None:
|
|
130
|
-
if spend.birth_seconds != unspent.timestamp:
|
|
131
|
-
return Err.ASSERT_MY_BIRTH_SECONDS_FAILED
|
|
132
|
-
if spend.height_relative is not None:
|
|
133
|
-
if prev_transaction_block_height < unspent.confirmed_block_index + spend.height_relative:
|
|
134
|
-
return Err.ASSERT_HEIGHT_RELATIVE_FAILED
|
|
135
|
-
if spend.seconds_relative is not None:
|
|
136
|
-
if timestamp < unspent.timestamp + spend.seconds_relative:
|
|
137
|
-
return Err.ASSERT_SECONDS_RELATIVE_FAILED
|
|
138
|
-
if spend.before_height_relative is not None:
|
|
139
|
-
if prev_transaction_block_height >= unspent.confirmed_block_index + spend.before_height_relative:
|
|
140
|
-
return Err.ASSERT_BEFORE_HEIGHT_RELATIVE_FAILED
|
|
141
|
-
if spend.before_seconds_relative is not None:
|
|
142
|
-
if timestamp >= unspent.timestamp + spend.before_seconds_relative:
|
|
143
|
-
return Err.ASSERT_BEFORE_SECONDS_RELATIVE_FAILED
|
|
144
|
-
|
|
145
|
-
return None
|
|
@@ -13,7 +13,8 @@ from chia_rs import (
|
|
|
13
13
|
ELIGIBLE_FOR_FF,
|
|
14
14
|
BLSCache,
|
|
15
15
|
ConsensusConstants,
|
|
16
|
-
|
|
16
|
+
SpendBundle,
|
|
17
|
+
SpendBundleConditions,
|
|
17
18
|
supports_fast_forward,
|
|
18
19
|
validate_clvm_and_signature,
|
|
19
20
|
)
|
|
@@ -22,23 +23,21 @@ from chia_rs.sized_ints import uint32, uint64
|
|
|
22
23
|
from chiabip158 import PyBIP158
|
|
23
24
|
|
|
24
25
|
from chia.consensus.block_record import BlockRecordProtocol
|
|
26
|
+
from chia.consensus.check_time_locks import check_time_locks
|
|
25
27
|
from chia.consensus.cost_calculator import NPCResult
|
|
26
28
|
from chia.full_node.bitcoin_fee_estimator import create_bitcoin_fee_estimator
|
|
29
|
+
from chia.full_node.eligible_coin_spends import EligibilityAndAdditions
|
|
27
30
|
from chia.full_node.fee_estimation import FeeBlockInfo, MempoolInfo, MempoolItemInfo
|
|
28
31
|
from chia.full_node.fee_estimator_interface import FeeEstimatorInterface
|
|
29
32
|
from chia.full_node.mempool import MEMPOOL_ITEM_FEE_LIMIT, Mempool, MempoolRemoveInfo, MempoolRemoveReason
|
|
30
|
-
from chia.full_node.mempool_check_conditions import mempool_check_time_locks
|
|
31
33
|
from chia.full_node.pending_tx_cache import ConflictTxCache, PendingTxCache
|
|
32
34
|
from chia.types.blockchain_format.coin import Coin
|
|
33
35
|
from chia.types.clvm_cost import CLVMCost
|
|
34
36
|
from chia.types.coin_record import CoinRecord
|
|
35
|
-
from chia.types.eligible_coin_spends import EligibilityAndAdditions, UnspentLineageInfo
|
|
36
37
|
from chia.types.fee_rate import FeeRate
|
|
37
|
-
from chia.types.generator_types import
|
|
38
|
+
from chia.types.generator_types import NewBlockGenerator
|
|
38
39
|
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
39
|
-
from chia.types.mempool_item import BundleCoinSpend, MempoolItem
|
|
40
|
-
from chia.types.spend_bundle import SpendBundle
|
|
41
|
-
from chia.types.spend_bundle_conditions import SpendBundleConditions
|
|
40
|
+
from chia.types.mempool_item import BundleCoinSpend, MempoolItem, UnspentLineageInfo
|
|
42
41
|
from chia.util.db_wrapper import SQLITE_INT_MAX
|
|
43
42
|
from chia.util.errors import Err, ValidationError
|
|
44
43
|
from chia.util.inline_executor import InlineExecutor
|
|
@@ -362,43 +361,30 @@ class MempoolManager:
|
|
|
362
361
|
self.pool.shutdown(wait=True)
|
|
363
362
|
|
|
364
363
|
# TODO: remove this, use create_generator() instead
|
|
365
|
-
|
|
366
|
-
self,
|
|
367
|
-
last_tb_header_hash: bytes32,
|
|
368
|
-
item_inclusion_filter: Optional[Callable[[bytes32], bool]] = None,
|
|
369
|
-
) -> Optional[tuple[SpendBundle, list[Coin]]]:
|
|
364
|
+
def create_bundle_from_mempool(self, last_tb_header_hash: bytes32) -> Optional[tuple[SpendBundle, list[Coin]]]:
|
|
370
365
|
"""
|
|
371
366
|
Returns aggregated spendbundle that can be used for creating new block,
|
|
372
367
|
additions and removals in that spend_bundle
|
|
373
368
|
"""
|
|
374
|
-
|
|
375
|
-
lineage_cache = LineageInfoCache(self.get_unspent_lineage_info_for_puzzle_hash)
|
|
376
|
-
|
|
377
369
|
if self.peak is None or self.peak.header_hash != last_tb_header_hash:
|
|
378
370
|
return None
|
|
379
|
-
return
|
|
380
|
-
lineage_cache.get_unspent_lineage_info, self.constants, self.peak.height, item_inclusion_filter
|
|
381
|
-
)
|
|
371
|
+
return self.mempool.create_bundle_from_mempool_items(self.constants, self.peak.height)
|
|
382
372
|
|
|
383
|
-
|
|
384
|
-
self,
|
|
385
|
-
last_tb_header_hash: bytes32,
|
|
386
|
-
item_inclusion_filter: Optional[Callable[[bytes32], bool]] = None,
|
|
387
|
-
) -> Optional[tuple[BlockGenerator, G2Element, list[Coin], list[Coin]]]:
|
|
373
|
+
def create_block_generator(self, last_tb_header_hash: bytes32, timeout: float) -> Optional[NewBlockGenerator]:
|
|
388
374
|
"""
|
|
389
375
|
Returns a block generator program, the aggregate signature and all additions and removals, for a new block
|
|
390
376
|
"""
|
|
391
377
|
if self.peak is None or self.peak.header_hash != last_tb_header_hash:
|
|
392
378
|
return None
|
|
379
|
+
return self.mempool.create_block_generator(self.constants, self.peak.height, timeout)
|
|
393
380
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
)
|
|
381
|
+
def create_block_generator2(self, last_tb_header_hash: bytes32, timeout: float) -> Optional[NewBlockGenerator]:
|
|
382
|
+
"""
|
|
383
|
+
Returns a block generator program, the aggregate signature and all additions, for a new block
|
|
384
|
+
"""
|
|
385
|
+
if self.peak is None or self.peak.header_hash != last_tb_header_hash:
|
|
386
|
+
return None
|
|
387
|
+
return self.mempool.create_block_generator2(self.constants, self.peak.height, timeout)
|
|
402
388
|
|
|
403
389
|
def get_filter(self) -> bytes:
|
|
404
390
|
all_transactions: set[bytes32] = set()
|
|
@@ -572,12 +558,13 @@ class MempoolManager:
|
|
|
572
558
|
get_unspent_lineage_info_for_puzzle_hash: Callable[[bytes32], Awaitable[Optional[UnspentLineageInfo]]],
|
|
573
559
|
) -> tuple[Optional[Err], Optional[MempoolItem], list[bytes32]]:
|
|
574
560
|
"""
|
|
575
|
-
Validates new_spend with the given
|
|
561
|
+
Validates new_spend with the given SpendBundleConditions, and
|
|
562
|
+
spend_name, and the current mempool. The mempool should
|
|
576
563
|
be locked during this call (blockchain lock).
|
|
577
564
|
|
|
578
565
|
Args:
|
|
579
566
|
new_spend: spend bundle to validate
|
|
580
|
-
conds: result of running the clvm transaction
|
|
567
|
+
conds: result of running the clvm transaction
|
|
581
568
|
spend_name: hash of the spend bundle data, passed in as an optimization
|
|
582
569
|
first_added_height: The block height that `new_spend` first entered this node's mempool.
|
|
583
570
|
Used to estimate how long a spend has taken to be included on the chain.
|
|
@@ -630,7 +617,7 @@ class MempoolManager:
|
|
|
630
617
|
return Err.INVALID_COIN_SOLUTION, None, []
|
|
631
618
|
|
|
632
619
|
mark_as_fast_forward = eligibility_info.ff_puzzle_hash is not None and supports_fast_forward(coin_spend)
|
|
633
|
-
|
|
620
|
+
lineage_info = None
|
|
634
621
|
if mark_as_fast_forward:
|
|
635
622
|
# Make sure the fast forward spend still has a version that is
|
|
636
623
|
# still unspent, because if the singleton has been melted, the
|
|
@@ -639,13 +626,12 @@ class MempoolManager:
|
|
|
639
626
|
lineage_info = await get_unspent_lineage_info_for_puzzle_hash(eligibility_info.ff_puzzle_hash)
|
|
640
627
|
if lineage_info is None:
|
|
641
628
|
return Err.DOUBLE_SPEND, None, []
|
|
642
|
-
latest_singleton_coin = lineage_info.coin_id
|
|
643
629
|
bundle_coin_spends[coin_id] = BundleCoinSpend(
|
|
644
630
|
coin_spend=coin_spend,
|
|
645
631
|
eligible_for_dedup=supports_dedup,
|
|
646
632
|
eligible_for_fast_forward=mark_as_fast_forward,
|
|
647
633
|
additions=eligibility_info.spend_additions,
|
|
648
|
-
|
|
634
|
+
latest_singleton_lineage=lineage_info,
|
|
649
635
|
)
|
|
650
636
|
|
|
651
637
|
if removal_names != removal_names_from_coin_spends:
|
|
@@ -739,7 +725,7 @@ class MempoolManager:
|
|
|
739
725
|
# point-of-view of the next block to be farmed. Therefore we pass in the
|
|
740
726
|
# current peak's height and timestamp
|
|
741
727
|
assert self.peak.timestamp is not None
|
|
742
|
-
tl_error: Optional[Err] =
|
|
728
|
+
tl_error: Optional[Err] = check_time_locks(
|
|
743
729
|
removal_record_dict,
|
|
744
730
|
conds,
|
|
745
731
|
self.peak.height,
|
|
@@ -872,7 +858,7 @@ class MempoolManager:
|
|
|
872
858
|
continue
|
|
873
859
|
|
|
874
860
|
bcs = item.bundle_coin_spends.get(spend)
|
|
875
|
-
if bcs is not None and bcs.
|
|
861
|
+
if bcs is not None and bcs.latest_singleton_lineage is None:
|
|
876
862
|
# this is a regular coin spend that's now made it into
|
|
877
863
|
# a block and we just evict its mempool item
|
|
878
864
|
included_items.append(MempoolItemInfo(item.cost, item.fee, item.height_added_to_mempool))
|
|
@@ -895,7 +881,7 @@ class MempoolManager:
|
|
|
895
881
|
# item, for the same singleton
|
|
896
882
|
found_matches = 0
|
|
897
883
|
for bcs in item.bundle_coin_spends.values():
|
|
898
|
-
if bcs.
|
|
884
|
+
if bcs.latest_singleton_lineage is None or bcs.latest_singleton_lineage.coin_id != spend:
|
|
899
885
|
continue
|
|
900
886
|
found_matches += 1
|
|
901
887
|
|
|
@@ -911,7 +897,7 @@ class MempoolManager:
|
|
|
911
897
|
break
|
|
912
898
|
|
|
913
899
|
spends_to_update.append((lineage_info.coin_id, spend, item_name))
|
|
914
|
-
bcs.
|
|
900
|
+
bcs.latest_singleton_lineage = lineage_info
|
|
915
901
|
|
|
916
902
|
if found_matches == 0: # pragma: no cover
|
|
917
903
|
# We are not expected to get here. this is all
|
chia/full_node/subscriptions.py
CHANGED
|
@@ -3,12 +3,10 @@ from __future__ import annotations
|
|
|
3
3
|
import logging
|
|
4
4
|
from dataclasses import dataclass, field
|
|
5
5
|
|
|
6
|
-
from chia_rs import Coin
|
|
6
|
+
from chia_rs import Coin, SpendBundleConditions
|
|
7
7
|
from chia_rs.sized_bytes import bytes32
|
|
8
8
|
from chia_rs.sized_ints import uint64
|
|
9
9
|
|
|
10
|
-
from chia.types.spend_bundle_conditions import SpendBundleConditions
|
|
11
|
-
|
|
12
10
|
log = logging.getLogger(__name__)
|
|
13
11
|
|
|
14
12
|
|
|
@@ -1,20 +1,67 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
+
import dataclasses
|
|
4
5
|
import logging
|
|
5
|
-
from dataclasses import dataclass
|
|
6
|
+
from dataclasses import dataclass, field
|
|
6
7
|
from queue import SimpleQueue
|
|
7
|
-
from typing import Optional
|
|
8
|
+
from typing import ClassVar, Generic, Optional, TypeVar, Union
|
|
8
9
|
|
|
10
|
+
from chia_rs import SpendBundle
|
|
9
11
|
from chia_rs.sized_bytes import bytes32
|
|
10
12
|
|
|
11
|
-
from chia.
|
|
13
|
+
from chia.server.ws_connection import WSChiaConnection
|
|
14
|
+
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
15
|
+
from chia.util.errors import Err
|
|
16
|
+
|
|
17
|
+
T = TypeVar("T")
|
|
12
18
|
|
|
13
19
|
|
|
14
20
|
class TransactionQueueFull(Exception):
|
|
15
21
|
pass
|
|
16
22
|
|
|
17
23
|
|
|
24
|
+
class ValuedEventSentinel:
|
|
25
|
+
pass
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclasses.dataclass
|
|
29
|
+
class ValuedEvent(Generic[T]):
|
|
30
|
+
_value_sentinel: ClassVar[ValuedEventSentinel] = ValuedEventSentinel()
|
|
31
|
+
|
|
32
|
+
_event: asyncio.Event = dataclasses.field(default_factory=asyncio.Event)
|
|
33
|
+
_value: Union[ValuedEventSentinel, T] = _value_sentinel
|
|
34
|
+
|
|
35
|
+
def set(self, value: T) -> None:
|
|
36
|
+
if not isinstance(self._value, ValuedEventSentinel):
|
|
37
|
+
raise Exception("Value already set")
|
|
38
|
+
self._value = value
|
|
39
|
+
self._event.set()
|
|
40
|
+
|
|
41
|
+
async def wait(self) -> T:
|
|
42
|
+
await self._event.wait()
|
|
43
|
+
if isinstance(self._value, ValuedEventSentinel):
|
|
44
|
+
raise Exception("Value not set despite event being set")
|
|
45
|
+
return self._value
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@dataclass(frozen=True)
|
|
49
|
+
class TransactionQueueEntry:
|
|
50
|
+
"""
|
|
51
|
+
A transaction received from peer. This is put into a queue, and not yet in the mempool.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
transaction: SpendBundle = field(compare=False)
|
|
55
|
+
transaction_bytes: Optional[bytes] = field(compare=False)
|
|
56
|
+
spend_name: bytes32
|
|
57
|
+
peer: Optional[WSChiaConnection] = field(compare=False)
|
|
58
|
+
test: bool = field(compare=False)
|
|
59
|
+
done: ValuedEvent[tuple[MempoolInclusionStatus, Optional[Err]]] = field(
|
|
60
|
+
default_factory=ValuedEvent,
|
|
61
|
+
compare=False,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
18
65
|
@dataclass
|
|
19
66
|
class TransactionQueue:
|
|
20
67
|
"""
|
chia/full_node/weight_proof.py
CHANGED
|
@@ -10,29 +10,36 @@ from concurrent.futures.process import ProcessPoolExecutor
|
|
|
10
10
|
from multiprocessing.context import BaseContext
|
|
11
11
|
from typing import IO, Optional
|
|
12
12
|
|
|
13
|
-
from chia_rs import
|
|
13
|
+
from chia_rs import (
|
|
14
|
+
BlockRecord,
|
|
15
|
+
ChallengeChainSubSlot,
|
|
16
|
+
ConsensusConstants,
|
|
17
|
+
EndOfSubSlotBundle,
|
|
18
|
+
HeaderBlock,
|
|
19
|
+
RewardChainSubSlot,
|
|
20
|
+
SubEpochChallengeSegment,
|
|
21
|
+
SubEpochData,
|
|
22
|
+
SubEpochSegments,
|
|
23
|
+
SubEpochSummary,
|
|
24
|
+
SubSlotData,
|
|
25
|
+
)
|
|
14
26
|
from chia_rs.sized_bytes import bytes32
|
|
15
27
|
from chia_rs.sized_ints import uint8, uint32, uint64, uint128
|
|
16
28
|
|
|
17
29
|
from chia.consensus.block_header_validation import validate_finished_header_block
|
|
18
|
-
from chia.consensus.block_record import BlockRecord
|
|
19
30
|
from chia.consensus.blockchain_interface import BlockchainInterface
|
|
20
31
|
from chia.consensus.deficit import calculate_deficit
|
|
21
32
|
from chia.consensus.full_block_to_block_record import header_block_to_sub_block_record
|
|
33
|
+
from chia.consensus.get_block_challenge import prev_tx_block
|
|
22
34
|
from chia.consensus.pot_iterations import (
|
|
23
35
|
calculate_ip_iters,
|
|
24
|
-
calculate_iterations_quality,
|
|
25
36
|
calculate_sp_iters,
|
|
26
37
|
is_overflow_block,
|
|
38
|
+
validate_pospace_and_get_required_iters,
|
|
27
39
|
)
|
|
28
40
|
from chia.consensus.vdf_info_computation import get_signage_point_vdf_info
|
|
29
41
|
from chia.types.blockchain_format.classgroup import ClassgroupElement
|
|
30
|
-
from chia.types.blockchain_format.proof_of_space import verify_and_get_quality_string
|
|
31
|
-
from chia.types.blockchain_format.slots import ChallengeChainSubSlot, RewardChainSubSlot
|
|
32
|
-
from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
|
|
33
42
|
from chia.types.blockchain_format.vdf import VDFInfo, VDFProof, validate_vdf
|
|
34
|
-
from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
|
|
35
|
-
from chia.types.header_block import HeaderBlock
|
|
36
43
|
from chia.types.validation_state import ValidationState
|
|
37
44
|
from chia.types.weight_proof import (
|
|
38
45
|
RecentChainData,
|
|
@@ -994,7 +1001,7 @@ def _validate_segment(
|
|
|
994
1001
|
if sampled and sub_slot_data.is_challenge():
|
|
995
1002
|
after_challenge = True
|
|
996
1003
|
required_iters = __validate_pospace(
|
|
997
|
-
constants, segment, idx, curr_difficulty, ses, first_segment_in_se, height
|
|
1004
|
+
constants, segment, idx, curr_difficulty, curr_ssi, ses, first_segment_in_se, height
|
|
998
1005
|
)
|
|
999
1006
|
if required_iters is None:
|
|
1000
1007
|
return False, uint64(0), uint64(0), uint64(0), []
|
|
@@ -1142,7 +1149,7 @@ def sub_slot_data_vdf_input(
|
|
|
1142
1149
|
if is_overflow and new_sub_slot:
|
|
1143
1150
|
if sub_slot_idx >= 2:
|
|
1144
1151
|
if sub_slots[sub_slot_idx - 2].cc_slot_end_info is None:
|
|
1145
|
-
for ssd_idx in reversed(range(
|
|
1152
|
+
for ssd_idx in reversed(range(sub_slot_idx - 1)):
|
|
1146
1153
|
ssd = sub_slots[ssd_idx]
|
|
1147
1154
|
if ssd.cc_slot_end_info is not None:
|
|
1148
1155
|
ssd = sub_slots[ssd_idx + 1]
|
|
@@ -1157,7 +1164,7 @@ def sub_slot_data_vdf_input(
|
|
|
1157
1164
|
return cc_input
|
|
1158
1165
|
|
|
1159
1166
|
elif not is_overflow and not new_sub_slot:
|
|
1160
|
-
for ssd_idx in reversed(range(
|
|
1167
|
+
for ssd_idx in reversed(range(sub_slot_idx)):
|
|
1161
1168
|
ssd = sub_slots[ssd_idx]
|
|
1162
1169
|
if ssd.cc_slot_end_info is not None:
|
|
1163
1170
|
ssd = sub_slots[ssd_idx + 1]
|
|
@@ -1174,7 +1181,7 @@ def sub_slot_data_vdf_input(
|
|
|
1174
1181
|
|
|
1175
1182
|
elif not new_sub_slot and is_overflow:
|
|
1176
1183
|
slots_seen = 0
|
|
1177
|
-
for ssd_idx in reversed(range(
|
|
1184
|
+
for ssd_idx in reversed(range(sub_slot_idx)):
|
|
1178
1185
|
ssd = sub_slots[ssd_idx]
|
|
1179
1186
|
if ssd.cc_slot_end_info is not None:
|
|
1180
1187
|
slots_seen += 1
|
|
@@ -1239,7 +1246,7 @@ def validate_recent_blocks(
|
|
|
1239
1246
|
if sub_slot.challenge_chain.new_difficulty is not None:
|
|
1240
1247
|
diff = sub_slot.challenge_chain.new_difficulty
|
|
1241
1248
|
|
|
1242
|
-
if (challenge is not None) and (prev_challenge is not None):
|
|
1249
|
+
if (challenge is not None) and (prev_challenge is not None) and transaction_blocks > 1:
|
|
1243
1250
|
overflow = is_overflow_block(constants, block.reward_chain_block.signage_point_index)
|
|
1244
1251
|
if not adjusted:
|
|
1245
1252
|
assert prev_block_record is not None
|
|
@@ -1260,7 +1267,9 @@ def validate_recent_blocks(
|
|
|
1260
1267
|
assert caluclated_required_iters is not None
|
|
1261
1268
|
required_iters = caluclated_required_iters
|
|
1262
1269
|
else:
|
|
1263
|
-
ret = _validate_pospace_recent_chain(
|
|
1270
|
+
ret = _validate_pospace_recent_chain(
|
|
1271
|
+
constants, sub_blocks, block, challenge, diff, ssi, overflow, prev_challenge
|
|
1272
|
+
)
|
|
1264
1273
|
if ret is None:
|
|
1265
1274
|
return False, []
|
|
1266
1275
|
required_iters = ret
|
|
@@ -1298,9 +1307,11 @@ def validate_recent_blocks(
|
|
|
1298
1307
|
|
|
1299
1308
|
def _validate_pospace_recent_chain(
|
|
1300
1309
|
constants: ConsensusConstants,
|
|
1310
|
+
blocks: BlockCache,
|
|
1301
1311
|
block: HeaderBlock,
|
|
1302
1312
|
challenge: bytes32,
|
|
1303
1313
|
diff: uint64,
|
|
1314
|
+
ssi: uint64,
|
|
1304
1315
|
overflow: bool,
|
|
1305
1316
|
prev_challenge: bytes32,
|
|
1306
1317
|
) -> Optional[uint64]:
|
|
@@ -1310,23 +1321,21 @@ def _validate_pospace_recent_chain(
|
|
|
1310
1321
|
else:
|
|
1311
1322
|
cc_sp_hash = block.reward_chain_block.challenge_chain_sp_vdf.output.get_hash()
|
|
1312
1323
|
assert cc_sp_hash is not None
|
|
1313
|
-
|
|
1314
|
-
|
|
1324
|
+
|
|
1325
|
+
required_iters = validate_pospace_and_get_required_iters(
|
|
1315
1326
|
constants,
|
|
1327
|
+
block.reward_chain_block.proof_of_space,
|
|
1316
1328
|
challenge if not overflow else prev_challenge,
|
|
1317
1329
|
cc_sp_hash,
|
|
1318
|
-
|
|
1330
|
+
block.height,
|
|
1331
|
+
diff,
|
|
1332
|
+
ssi,
|
|
1333
|
+
prev_tx_block(blocks, blocks.block_record(block.prev_header_hash)),
|
|
1319
1334
|
)
|
|
1320
|
-
if
|
|
1335
|
+
if required_iters is None:
|
|
1321
1336
|
log.error(f"could not verify proof of space block {block.height} {overflow}")
|
|
1322
1337
|
return None
|
|
1323
|
-
|
|
1324
|
-
constants.DIFFICULTY_CONSTANT_FACTOR,
|
|
1325
|
-
q_str,
|
|
1326
|
-
block.reward_chain_block.proof_of_space.size,
|
|
1327
|
-
diff,
|
|
1328
|
-
cc_sp_hash,
|
|
1329
|
-
)
|
|
1338
|
+
|
|
1330
1339
|
return required_iters
|
|
1331
1340
|
|
|
1332
1341
|
|
|
@@ -1335,6 +1344,7 @@ def __validate_pospace(
|
|
|
1335
1344
|
segment: SubEpochChallengeSegment,
|
|
1336
1345
|
idx: int,
|
|
1337
1346
|
curr_diff: uint64,
|
|
1347
|
+
curr_sub_slot_iters: uint64,
|
|
1338
1348
|
ses: Optional[SubEpochSummary],
|
|
1339
1349
|
first_in_sub_epoch: bool,
|
|
1340
1350
|
height: uint32,
|
|
@@ -1360,23 +1370,22 @@ def __validate_pospace(
|
|
|
1360
1370
|
|
|
1361
1371
|
# validate proof of space
|
|
1362
1372
|
assert sub_slot_data.proof_of_space is not None
|
|
1363
|
-
|
|
1364
|
-
|
|
1373
|
+
|
|
1374
|
+
required_iters = validate_pospace_and_get_required_iters(
|
|
1365
1375
|
constants,
|
|
1376
|
+
sub_slot_data.proof_of_space,
|
|
1366
1377
|
challenge,
|
|
1367
1378
|
cc_sp_hash,
|
|
1368
|
-
height
|
|
1379
|
+
height,
|
|
1380
|
+
curr_diff,
|
|
1381
|
+
curr_sub_slot_iters,
|
|
1382
|
+
uint32(0), # prev_tx_block(blocks, prev_b), todo need to get height of prev tx block somehow here
|
|
1369
1383
|
)
|
|
1370
|
-
if
|
|
1384
|
+
if required_iters is None:
|
|
1371
1385
|
log.error("could not verify proof of space")
|
|
1372
1386
|
return None
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
q_str,
|
|
1376
|
-
sub_slot_data.proof_of_space.size,
|
|
1377
|
-
curr_diff,
|
|
1378
|
-
cc_sp_hash,
|
|
1379
|
-
)
|
|
1387
|
+
|
|
1388
|
+
return required_iters
|
|
1380
1389
|
|
|
1381
1390
|
|
|
1382
1391
|
def __get_rc_sub_slot(
|
|
@@ -1465,7 +1474,7 @@ def __get_rc_sub_slot(
|
|
|
1465
1474
|
|
|
1466
1475
|
def __get_cc_sub_slot(sub_slots: list[SubSlotData], idx: int, ses: Optional[SubEpochSummary]) -> ChallengeChainSubSlot:
|
|
1467
1476
|
sub_slot: Optional[SubSlotData] = None
|
|
1468
|
-
for i in reversed(range(
|
|
1477
|
+
for i in reversed(range(idx)):
|
|
1469
1478
|
sub_slot = sub_slots[i]
|
|
1470
1479
|
if sub_slot.cc_slot_end_info is not None:
|
|
1471
1480
|
break
|
chia/harvester/harvester.py
CHANGED
|
@@ -36,8 +36,8 @@ from chia.plotting.util import (
|
|
|
36
36
|
remove_plot_directory,
|
|
37
37
|
update_harvester_config,
|
|
38
38
|
)
|
|
39
|
+
from chia.protocols.outbound_message import NodeType
|
|
39
40
|
from chia.rpc.rpc_server import StateChangedProtocol, default_get_connections
|
|
40
|
-
from chia.server.outbound_message import NodeType
|
|
41
41
|
from chia.server.server import ChiaServer
|
|
42
42
|
from chia.server.ws_connection import WSChiaConnection
|
|
43
43
|
from chia.util.cpu import available_logical_cores
|
chia/harvester/harvester_api.py
CHANGED
|
@@ -6,23 +6,26 @@ import time
|
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from typing import TYPE_CHECKING, ClassVar, Optional, cast
|
|
8
8
|
|
|
9
|
-
from chia_rs import AugSchemeMPL, G1Element, G2Element
|
|
9
|
+
from chia_rs import AugSchemeMPL, G1Element, G2Element, PlotSize, ProofOfSpace
|
|
10
10
|
from chia_rs.sized_bytes import bytes32
|
|
11
11
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
12
12
|
|
|
13
|
-
from chia.consensus.pot_iterations import
|
|
13
|
+
from chia.consensus.pot_iterations import (
|
|
14
|
+
calculate_iterations_quality,
|
|
15
|
+
calculate_sp_interval_iters,
|
|
16
|
+
)
|
|
14
17
|
from chia.harvester.harvester import Harvester
|
|
15
18
|
from chia.plotting.util import PlotInfo, parse_plot_info
|
|
16
19
|
from chia.protocols import harvester_protocol
|
|
17
20
|
from chia.protocols.farmer_protocol import FarmingInfo
|
|
18
21
|
from chia.protocols.harvester_protocol import Plot, PlotSyncResponse
|
|
22
|
+
from chia.protocols.outbound_message import Message, make_msg
|
|
19
23
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
20
24
|
from chia.server.api_protocol import ApiMetadata
|
|
21
|
-
from chia.server.outbound_message import Message, make_msg
|
|
22
25
|
from chia.server.ws_connection import WSChiaConnection
|
|
23
26
|
from chia.types.blockchain_format.proof_of_space import (
|
|
24
|
-
ProofOfSpace,
|
|
25
27
|
calculate_pos_challenge,
|
|
28
|
+
calculate_prefix_bits,
|
|
26
29
|
generate_plot_public_key,
|
|
27
30
|
passes_plot_filter,
|
|
28
31
|
)
|
|
@@ -144,12 +147,15 @@ class HarvesterAPI:
|
|
|
144
147
|
|
|
145
148
|
# Found proofs of space (on average 1 is expected per plot)
|
|
146
149
|
for index, quality_str in enumerate(quality_strings):
|
|
150
|
+
# TODO: todo_v2_plots
|
|
147
151
|
required_iters: uint64 = calculate_iterations_quality(
|
|
148
|
-
self.harvester.constants
|
|
152
|
+
self.harvester.constants,
|
|
149
153
|
quality_str,
|
|
150
|
-
plot_info.prover.get_size(),
|
|
154
|
+
PlotSize.make_v1(plot_info.prover.get_size()),
|
|
151
155
|
difficulty,
|
|
152
156
|
new_challenge.sp_hash,
|
|
157
|
+
sub_slot_iters,
|
|
158
|
+
new_challenge.last_tx_height,
|
|
153
159
|
)
|
|
154
160
|
sp_interval_iters = calculate_sp_interval_iters(self.harvester.constants, sub_slot_iters)
|
|
155
161
|
if required_iters < sp_interval_iters:
|
|
@@ -243,8 +249,17 @@ class HarvesterAPI:
|
|
|
243
249
|
# Passes the plot filter (does not check sp filter yet though, since we have not reached sp)
|
|
244
250
|
# This is being executed at the beginning of the slot
|
|
245
251
|
total += 1
|
|
252
|
+
|
|
253
|
+
# TODO: todo_v2_plots support v2 plots in PlotManager
|
|
254
|
+
filter_prefix_bits = uint8(
|
|
255
|
+
calculate_prefix_bits(
|
|
256
|
+
self.harvester.constants,
|
|
257
|
+
new_challenge.peak_height,
|
|
258
|
+
PlotSize.make_v1(try_plot_info.prover.get_size()),
|
|
259
|
+
)
|
|
260
|
+
)
|
|
246
261
|
if passes_plot_filter(
|
|
247
|
-
|
|
262
|
+
filter_prefix_bits,
|
|
248
263
|
try_plot_info.prover.get_id(),
|
|
249
264
|
new_challenge.challenge_hash,
|
|
250
265
|
new_challenge.sp_hash,
|
chia/introducer/introducer.py
CHANGED
|
@@ -11,9 +11,9 @@ from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
|
|
|
11
11
|
import dns.asyncresolver
|
|
12
12
|
from chia_rs.sized_ints import uint16, uint64
|
|
13
13
|
|
|
14
|
+
from chia.protocols.outbound_message import NodeType
|
|
14
15
|
from chia.rpc.rpc_server import StateChangedProtocol, default_get_connections
|
|
15
16
|
from chia.server.introducer_peers import VettedPeer
|
|
16
|
-
from chia.server.outbound_message import NodeType
|
|
17
17
|
from chia.server.server import ChiaServer
|
|
18
18
|
from chia.server.ws_connection import WSChiaConnection
|
|
19
19
|
from chia.types.peer_info import TimestampedPeerInfo
|
|
@@ -7,10 +7,10 @@ from chia_rs.sized_ints import uint64
|
|
|
7
7
|
|
|
8
8
|
from chia.introducer.introducer import Introducer
|
|
9
9
|
from chia.protocols.introducer_protocol import RequestPeersIntroducer, RespondPeersIntroducer
|
|
10
|
+
from chia.protocols.outbound_message import Message, make_msg
|
|
10
11
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
11
12
|
from chia.rpc.rpc_server import StateChangedProtocol
|
|
12
13
|
from chia.server.api_protocol import ApiMetadata
|
|
13
|
-
from chia.server.outbound_message import Message, make_msg
|
|
14
14
|
from chia.server.ws_connection import WSChiaConnection
|
|
15
15
|
from chia.types.peer_info import TimestampedPeerInfo
|
|
16
16
|
|
chia/plot_sync/exceptions.py
CHANGED
|
@@ -6,7 +6,7 @@ from chia_rs.sized_ints import uint64
|
|
|
6
6
|
|
|
7
7
|
from chia.plot_sync.util import ErrorCodes, State
|
|
8
8
|
from chia.protocols.harvester_protocol import PlotSyncIdentifier
|
|
9
|
-
from chia.
|
|
9
|
+
from chia.protocols.outbound_message import NodeType
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class PlotSyncException(Exception):
|