chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5rc2__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 +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 +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 +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.5rc2.dist-info}/METADATA +7 -7
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.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.5rc2.dist-info}/LICENSE +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc2.dist-info}/entry_points.txt +0 -0
chia/plot_sync/receiver.py
CHANGED
|
@@ -32,8 +32,8 @@ from chia.protocols.harvester_protocol import (
|
|
|
32
32
|
PlotSyncResponse,
|
|
33
33
|
PlotSyncStart,
|
|
34
34
|
)
|
|
35
|
+
from chia.protocols.outbound_message import make_msg
|
|
35
36
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
36
|
-
from chia.server.outbound_message import make_msg
|
|
37
37
|
from chia.server.ws_connection import WSChiaConnection
|
|
38
38
|
|
|
39
39
|
log = logging.getLogger(__name__)
|
chia/plot_sync/sender.py
CHANGED
|
@@ -25,8 +25,8 @@ from chia.protocols.harvester_protocol import (
|
|
|
25
25
|
PlotSyncResponse,
|
|
26
26
|
PlotSyncStart,
|
|
27
27
|
)
|
|
28
|
+
from chia.protocols.outbound_message import NodeType, make_msg
|
|
28
29
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
29
|
-
from chia.server.outbound_message import NodeType, make_msg
|
|
30
30
|
from chia.server.ws_connection import WSChiaConnection
|
|
31
31
|
from chia.util.batches import to_batches
|
|
32
32
|
from chia.util.task_referencer import create_referenced_task
|
|
@@ -125,7 +125,7 @@ class Sender:
|
|
|
125
125
|
if not self._plot_manager.initial_refresh() or self._sync_id != 0:
|
|
126
126
|
self._reset()
|
|
127
127
|
else:
|
|
128
|
-
raise AlreadyStartedError
|
|
128
|
+
raise AlreadyStartedError
|
|
129
129
|
|
|
130
130
|
def stop(self) -> None:
|
|
131
131
|
self._stop_requested = True
|
chia/pools/pool_puzzles.py
CHANGED
|
@@ -11,10 +11,9 @@ from chia_puzzles_py.programs import (
|
|
|
11
11
|
POOL_WAITINGROOM_INNERPUZ,
|
|
12
12
|
POOL_WAITINGROOM_INNERPUZ_HASH,
|
|
13
13
|
)
|
|
14
|
-
from chia_rs import G1Element
|
|
14
|
+
from chia_rs import CoinSpend, G1Element
|
|
15
15
|
from chia_rs.sized_bytes import bytes32
|
|
16
16
|
from chia_rs.sized_ints import uint32, uint64
|
|
17
|
-
from clvm.casts import int_to_bytes
|
|
18
17
|
|
|
19
18
|
from chia.consensus.block_rewards import calculate_pool_reward
|
|
20
19
|
from chia.consensus.coinbase import pool_parent_id
|
|
@@ -22,13 +21,15 @@ from chia.pools.pool_wallet_info import LEAVING_POOL, SELF_POOLING, PoolState
|
|
|
22
21
|
from chia.types.blockchain_format.coin import Coin
|
|
23
22
|
from chia.types.blockchain_format.program import Program
|
|
24
23
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
25
|
-
from chia.types.coin_spend import
|
|
24
|
+
from chia.types.coin_spend import make_spend
|
|
25
|
+
from chia.util.casts import int_to_bytes
|
|
26
26
|
from chia.wallet.puzzles.singleton_top_layer import (
|
|
27
27
|
SINGLETON_LAUNCHER_HASH,
|
|
28
28
|
SINGLETON_MOD,
|
|
29
29
|
SINGLETON_MOD_HASH,
|
|
30
30
|
puzzle_for_singleton,
|
|
31
31
|
)
|
|
32
|
+
from chia.wallet.util.compute_additions import compute_additions
|
|
32
33
|
from chia.wallet.util.curry_and_treehash import calculate_hash_of_quoted_mod_hash, curry_and_treehash, shatree_atom
|
|
33
34
|
|
|
34
35
|
log = logging.getLogger(__name__)
|
|
@@ -240,10 +241,10 @@ def create_travel_spend(
|
|
|
240
241
|
full_puzzle: Program = create_full_puzzle(inner_puzzle, launcher_coin.name())
|
|
241
242
|
|
|
242
243
|
return (
|
|
243
|
-
|
|
244
|
+
make_spend(
|
|
244
245
|
current_singleton,
|
|
245
|
-
|
|
246
|
-
|
|
246
|
+
full_puzzle,
|
|
247
|
+
full_solution,
|
|
247
248
|
),
|
|
248
249
|
inner_puzzle,
|
|
249
250
|
)
|
|
@@ -287,22 +288,16 @@ def create_absorb_spend(
|
|
|
287
288
|
last_coin_spend.coin.amount,
|
|
288
289
|
]
|
|
289
290
|
)
|
|
290
|
-
full_solution: SerializedProgram = SerializedProgram.
|
|
291
|
-
|
|
292
|
-
)
|
|
293
|
-
full_puzzle: SerializedProgram = SerializedProgram.from_program(
|
|
294
|
-
create_full_puzzle(inner_puzzle, launcher_coin.name())
|
|
295
|
-
)
|
|
291
|
+
full_solution: SerializedProgram = SerializedProgram.to([parent_info, last_coin_spend.coin.amount, inner_sol])
|
|
292
|
+
full_puzzle: SerializedProgram = create_full_puzzle(inner_puzzle, launcher_coin.name()).to_serialized()
|
|
296
293
|
assert coin.puzzle_hash == full_puzzle.get_tree_hash()
|
|
297
294
|
|
|
298
295
|
reward_parent: bytes32 = pool_parent_id(height, genesis_challenge)
|
|
299
|
-
p2_singleton_puzzle
|
|
300
|
-
|
|
301
|
-
)
|
|
296
|
+
p2_singleton_puzzle = create_p2_singleton_puzzle(
|
|
297
|
+
SINGLETON_MOD_HASH, launcher_coin.name(), delay_time, delay_ph
|
|
298
|
+
).to_serialized()
|
|
302
299
|
reward_coin: Coin = Coin(reward_parent, p2_singleton_puzzle.get_tree_hash(), reward_amount)
|
|
303
|
-
p2_singleton_solution
|
|
304
|
-
Program.to([inner_puzzle.get_tree_hash(), reward_coin.name()])
|
|
305
|
-
)
|
|
300
|
+
p2_singleton_solution = SerializedProgram.to([inner_puzzle.get_tree_hash(), reward_coin.name()])
|
|
306
301
|
assert p2_singleton_puzzle.get_tree_hash() == reward_coin.puzzle_hash
|
|
307
302
|
assert full_puzzle.get_tree_hash() == coin.puzzle_hash
|
|
308
303
|
assert get_inner_puzzle_from_puzzle(Program.from_bytes(bytes(full_puzzle))) is not None
|
chia/pools/pool_wallet.py
CHANGED
|
@@ -5,7 +5,7 @@ import logging
|
|
|
5
5
|
import time
|
|
6
6
|
from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
|
|
7
7
|
|
|
8
|
-
from chia_rs import G1Element, G2Element
|
|
8
|
+
from chia_rs import CoinSpend, G1Element, G2Element
|
|
9
9
|
from chia_rs.sized_bytes import bytes32
|
|
10
10
|
from chia_rs.sized_ints import uint32, uint64, uint128
|
|
11
11
|
from typing_extensions import Unpack, final
|
|
@@ -40,12 +40,11 @@ from chia.protocols.pool_protocol import POOL_PROTOCOL_VERSION
|
|
|
40
40
|
from chia.server.ws_connection import WSChiaConnection
|
|
41
41
|
from chia.types.blockchain_format.coin import Coin
|
|
42
42
|
from chia.types.blockchain_format.program import Program
|
|
43
|
-
from chia.types.
|
|
44
|
-
from chia.types.coin_spend import CoinSpend, compute_additions
|
|
43
|
+
from chia.types.coin_spend import make_spend
|
|
45
44
|
from chia.wallet.conditions import AssertCoinAnnouncement, Condition, ConditionValidTimes
|
|
46
|
-
from chia.wallet.derive_keys import find_owner_sk
|
|
47
45
|
from chia.wallet.puzzles.singleton_top_layer import SINGLETON_LAUNCHER
|
|
48
46
|
from chia.wallet.transaction_record import TransactionRecord
|
|
47
|
+
from chia.wallet.util.compute_additions import compute_additions
|
|
49
48
|
from chia.wallet.util.transaction_type import TransactionType
|
|
50
49
|
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG, TXConfig
|
|
51
50
|
from chia.wallet.util.wallet_types import WalletType
|
|
@@ -68,10 +67,10 @@ class PoolWallet:
|
|
|
68
67
|
|
|
69
68
|
_protocol_check: ClassVar[WalletProtocol[object]] = cast("PoolWallet", None)
|
|
70
69
|
|
|
71
|
-
MINIMUM_INITIAL_BALANCE = 1
|
|
72
|
-
MINIMUM_RELATIVE_LOCK_HEIGHT = 5
|
|
73
|
-
MAXIMUM_RELATIVE_LOCK_HEIGHT = 1000
|
|
74
|
-
DEFAULT_MAX_CLAIM_SPENDS = 100
|
|
70
|
+
MINIMUM_INITIAL_BALANCE: ClassVar[int] = 1
|
|
71
|
+
MINIMUM_RELATIVE_LOCK_HEIGHT: ClassVar[int] = 5
|
|
72
|
+
MAXIMUM_RELATIVE_LOCK_HEIGHT: ClassVar[int] = 1000
|
|
73
|
+
DEFAULT_MAX_CLAIM_SPENDS: ClassVar[int] = 100
|
|
75
74
|
|
|
76
75
|
wallet_state_manager: WalletStateManager
|
|
77
76
|
log: logging.Logger
|
|
@@ -81,7 +80,6 @@ class PoolWallet:
|
|
|
81
80
|
next_transaction_fee: uint64 = uint64(0)
|
|
82
81
|
next_tx_config: TXConfig = DEFAULT_TX_CONFIG
|
|
83
82
|
target_state: Optional[PoolState] = None
|
|
84
|
-
_owner_sk_and_index: Optional[tuple[PrivateKey, uint32]] = None
|
|
85
83
|
|
|
86
84
|
"""
|
|
87
85
|
From the user's perspective, this is not a wallet at all, but a way to control
|
|
@@ -232,7 +230,7 @@ class PoolWallet:
|
|
|
232
230
|
async def get_tip(self) -> tuple[uint32, CoinSpend]:
|
|
233
231
|
return (await self.wallet_state_manager.pool_store.get_spends_for_wallet(self.wallet_id))[-1]
|
|
234
232
|
|
|
235
|
-
async def update_pool_config(self) -> None:
|
|
233
|
+
async def update_pool_config(self, action_scope: WalletActionScope) -> None:
|
|
236
234
|
current_state: PoolWalletInfo = await self.get_current_state()
|
|
237
235
|
pool_config_list: list[PoolWalletConfig] = load_pool_config(self.wallet_state_manager.root_path)
|
|
238
236
|
pool_config_dict: dict[bytes32, PoolWalletConfig] = {c.launcher_id: c for c in pool_config_list}
|
|
@@ -240,15 +238,7 @@ class PoolWallet:
|
|
|
240
238
|
payout_instructions: str = existing_config.payout_instructions if existing_config is not None else ""
|
|
241
239
|
|
|
242
240
|
if len(payout_instructions) == 0:
|
|
243
|
-
|
|
244
|
-
if reuse_puzhash_config is None:
|
|
245
|
-
reuse_puzhash = False
|
|
246
|
-
else:
|
|
247
|
-
reuse_puzhash = reuse_puzhash_config.get(
|
|
248
|
-
str(self.wallet_state_manager.root_pubkey.get_fingerprint()), False
|
|
249
|
-
)
|
|
250
|
-
|
|
251
|
-
payout_instructions = (await self.standard_wallet.get_puzzle_hash(new=not reuse_puzhash)).hex()
|
|
241
|
+
payout_instructions = (await action_scope.get_puzzle_hash(self.wallet_state_manager)).hex()
|
|
252
242
|
self.log.info(f"New config entry. Generated payout_instructions puzzle hash: {payout_instructions}")
|
|
253
243
|
|
|
254
244
|
new_config: PoolWalletConfig = PoolWalletConfig(
|
|
@@ -262,7 +252,9 @@ class PoolWallet:
|
|
|
262
252
|
pool_config_dict[new_config.launcher_id] = new_config
|
|
263
253
|
await update_pool_config(self.wallet_state_manager.root_path, list(pool_config_dict.values()))
|
|
264
254
|
|
|
265
|
-
async def apply_state_transition(
|
|
255
|
+
async def apply_state_transition(
|
|
256
|
+
self, new_state: CoinSpend, block_height: uint32, action_scope: WalletActionScope
|
|
257
|
+
) -> bool:
|
|
266
258
|
"""
|
|
267
259
|
Updates the Pool state (including DB) with new singleton spends.
|
|
268
260
|
The DB must be committed after calling this method. All validation should be done here. Returns True iff
|
|
@@ -301,10 +293,10 @@ class PoolWallet:
|
|
|
301
293
|
self.next_tx_config = DEFAULT_TX_CONFIG
|
|
302
294
|
break
|
|
303
295
|
|
|
304
|
-
await self.update_pool_config()
|
|
296
|
+
await self.update_pool_config(action_scope)
|
|
305
297
|
return True
|
|
306
298
|
|
|
307
|
-
async def rewind(self, block_height: int) -> bool:
|
|
299
|
+
async def rewind(self, block_height: int, action_scope: WalletActionScope) -> bool:
|
|
308
300
|
"""
|
|
309
301
|
Rolls back all transactions after block_height, and if creation was after block_height, deletes the wallet.
|
|
310
302
|
Returns True if the wallet should be removed.
|
|
@@ -320,7 +312,7 @@ class PoolWallet:
|
|
|
320
312
|
return True
|
|
321
313
|
else:
|
|
322
314
|
if await self.get_current_state() != prev_state:
|
|
323
|
-
await self.update_pool_config()
|
|
315
|
+
await self.update_pool_config(action_scope)
|
|
324
316
|
return False
|
|
325
317
|
except Exception as e:
|
|
326
318
|
self.log.error(f"Exception rewinding: {e}")
|
|
@@ -330,6 +322,7 @@ class PoolWallet:
|
|
|
330
322
|
async def create(
|
|
331
323
|
cls,
|
|
332
324
|
wallet_state_manager: Any,
|
|
325
|
+
action_scope: WalletActionScope,
|
|
333
326
|
wallet: Wallet,
|
|
334
327
|
launcher_coin_id: bytes32,
|
|
335
328
|
block_spends: list[CoinSpend],
|
|
@@ -359,7 +352,7 @@ class PoolWallet:
|
|
|
359
352
|
launcher_spend = spend
|
|
360
353
|
assert launcher_spend is not None
|
|
361
354
|
await wallet_state_manager.pool_store.add_spend(pool_wallet.wallet_id, launcher_spend, block_height)
|
|
362
|
-
await pool_wallet.update_pool_config()
|
|
355
|
+
await pool_wallet.update_pool_config(action_scope)
|
|
363
356
|
|
|
364
357
|
p2_puzzle_hash: bytes32 = (await pool_wallet.get_current_state()).p2_singleton_puzzle_hash
|
|
365
358
|
await wallet_state_manager.add_new_wallet(pool_wallet)
|
|
@@ -411,9 +404,7 @@ class PoolWallet:
|
|
|
411
404
|
standard_wallet = main_wallet
|
|
412
405
|
|
|
413
406
|
if p2_singleton_delayed_ph is None:
|
|
414
|
-
p2_singleton_delayed_ph = await
|
|
415
|
-
new=not action_scope.config.tx_config.reuse_puzhash
|
|
416
|
-
)
|
|
407
|
+
p2_singleton_delayed_ph = await action_scope.get_puzzle_hash(wallet_state_manager)
|
|
417
408
|
if p2_singleton_delay_time is None:
|
|
418
409
|
p2_singleton_delay_time = uint64(604800)
|
|
419
410
|
|
|
@@ -445,18 +436,6 @@ class PoolWallet:
|
|
|
445
436
|
|
|
446
437
|
return p2_singleton_puzzle_hash, launcher_coin_id
|
|
447
438
|
|
|
448
|
-
async def _get_owner_key_cache(self) -> tuple[PrivateKey, uint32]:
|
|
449
|
-
if self._owner_sk_and_index is None:
|
|
450
|
-
self._owner_sk_and_index = find_owner_sk(
|
|
451
|
-
[self.wallet_state_manager.get_master_private_key()],
|
|
452
|
-
(await self.get_current_state()).current.owner_pubkey,
|
|
453
|
-
)
|
|
454
|
-
assert self._owner_sk_and_index is not None
|
|
455
|
-
return self._owner_sk_and_index
|
|
456
|
-
|
|
457
|
-
async def get_pool_wallet_index(self) -> uint32:
|
|
458
|
-
return (await self._get_owner_key_cache())[1]
|
|
459
|
-
|
|
460
439
|
async def generate_fee_transaction(
|
|
461
440
|
self,
|
|
462
441
|
fee: uint64,
|
|
@@ -498,9 +477,7 @@ class PoolWallet:
|
|
|
498
477
|
delayed_seconds,
|
|
499
478
|
delayed_puzhash,
|
|
500
479
|
)
|
|
501
|
-
new_full_puzzle
|
|
502
|
-
create_full_puzzle(new_inner_puzzle, pool_wallet_info.launcher_coin.name())
|
|
503
|
-
)
|
|
480
|
+
new_full_puzzle = create_full_puzzle(new_inner_puzzle, pool_wallet_info.launcher_coin.name()).to_serialized()
|
|
504
481
|
|
|
505
482
|
outgoing_coin_spend, inner_puzzle = create_travel_spend(
|
|
506
483
|
last_coin_spend,
|
|
@@ -626,10 +603,10 @@ class PoolWallet:
|
|
|
626
603
|
|
|
627
604
|
genesis_launcher_solution: Program = Program.to([puzzle_hash, amount, pool_state_bytes])
|
|
628
605
|
|
|
629
|
-
launcher_cs: CoinSpend =
|
|
606
|
+
launcher_cs: CoinSpend = make_spend(
|
|
630
607
|
launcher_coin,
|
|
631
|
-
|
|
632
|
-
|
|
608
|
+
genesis_launcher_puz,
|
|
609
|
+
genesis_launcher_solution,
|
|
633
610
|
)
|
|
634
611
|
launcher_sb = WalletSpendBundle([launcher_cs], G2Element())
|
|
635
612
|
|
|
@@ -711,7 +688,7 @@ class PoolWallet:
|
|
|
711
688
|
|
|
712
689
|
# Note the implications of getting owner_puzzlehash from our local wallet right now
|
|
713
690
|
# vs. having pre-arranged the target self-pooling address
|
|
714
|
-
owner_puzzlehash = await self.
|
|
691
|
+
owner_puzzlehash = await action_scope.get_puzzle_hash(self.wallet_state_manager)
|
|
715
692
|
owner_pubkey = pool_wallet_info.current.owner_pubkey
|
|
716
693
|
current_state: PoolWalletInfo = await self.get_current_state()
|
|
717
694
|
total_fee = uint64(fee * 2)
|
|
@@ -3,13 +3,20 @@ from __future__ import annotations
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from typing import Optional
|
|
5
5
|
|
|
6
|
-
from chia_rs import
|
|
6
|
+
from chia_rs import (
|
|
7
|
+
ChallengeChainSubSlot,
|
|
8
|
+
FoliageBlockData,
|
|
9
|
+
FoliageTransactionBlock,
|
|
10
|
+
G2Element,
|
|
11
|
+
PoolTarget,
|
|
12
|
+
ProofOfSpace,
|
|
13
|
+
RewardChainBlockUnfinished,
|
|
14
|
+
RewardChainSubSlot,
|
|
15
|
+
)
|
|
7
16
|
from chia_rs.sized_bytes import bytes32
|
|
8
17
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
9
18
|
|
|
10
19
|
from chia.types.blockchain_format.classgroup import ClassgroupElement
|
|
11
|
-
from chia.types.blockchain_format.proof_of_space import ProofOfSpace
|
|
12
|
-
from chia.types.blockchain_format.slots import ChallengeChainSubSlot, RewardChainSubSlot
|
|
13
20
|
from chia.util.streamable import Streamable, streamable
|
|
14
21
|
|
|
15
22
|
"""
|
|
@@ -49,6 +56,7 @@ class NewSignagePoint(Streamable):
|
|
|
49
56
|
sub_slot_iters: uint64
|
|
50
57
|
signage_point_index: uint8
|
|
51
58
|
peak_height: uint32
|
|
59
|
+
last_tx_height: uint32
|
|
52
60
|
sp_source_data: Optional[SignagePointSourceData] = None
|
|
53
61
|
|
|
54
62
|
|
|
@@ -3,15 +3,12 @@ from __future__ import annotations
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from typing import Optional
|
|
5
5
|
|
|
6
|
+
from chia_rs import EndOfSubSlotBundle, FullBlock, SpendBundle, UnfinishedBlock
|
|
6
7
|
from chia_rs.sized_bytes import bytes32
|
|
7
8
|
from chia_rs.sized_ints import uint8, uint32, uint64, uint128
|
|
8
9
|
|
|
9
10
|
from chia.types.blockchain_format.vdf import VDFInfo, VDFProof
|
|
10
|
-
from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
|
|
11
|
-
from chia.types.full_block import FullBlock
|
|
12
11
|
from chia.types.peer_info import TimestampedPeerInfo
|
|
13
|
-
from chia.types.spend_bundle import SpendBundle
|
|
14
|
-
from chia.types.unfinished_block import UnfinishedBlock
|
|
15
12
|
from chia.types.weight_proof import WeightProof
|
|
16
13
|
from chia.util.streamable import Streamable, streamable
|
|
17
14
|
|
|
@@ -4,11 +4,10 @@ from dataclasses import dataclass
|
|
|
4
4
|
from enum import IntEnum
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
|
-
from chia_rs import G1Element, G2Element, RewardChainBlockUnfinished
|
|
7
|
+
from chia_rs import G1Element, G2Element, ProofOfSpace, RewardChainBlockUnfinished
|
|
8
8
|
from chia_rs.sized_bytes import bytes32
|
|
9
9
|
from chia_rs.sized_ints import int16, uint8, uint32, uint64
|
|
10
10
|
|
|
11
|
-
from chia.types.blockchain_format.proof_of_space import ProofOfSpace
|
|
12
11
|
from chia.util.streamable import Streamable, streamable
|
|
13
12
|
|
|
14
13
|
"""
|
|
@@ -41,7 +40,8 @@ class NewSignagePointHarvester(Streamable):
|
|
|
41
40
|
signage_point_index: uint8
|
|
42
41
|
sp_hash: bytes32
|
|
43
42
|
pool_difficulties: list[PoolDifficulty]
|
|
44
|
-
|
|
43
|
+
peak_height: uint32
|
|
44
|
+
last_tx_height: uint32
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
@streamable
|
chia/protocols/pool_protocol.py
CHANGED
|
@@ -5,11 +5,10 @@ from dataclasses import dataclass
|
|
|
5
5
|
from enum import Enum
|
|
6
6
|
from typing import Optional
|
|
7
7
|
|
|
8
|
-
from chia_rs import G1Element, G2Element
|
|
8
|
+
from chia_rs import G1Element, G2Element, ProofOfSpace
|
|
9
9
|
from chia_rs.sized_bytes import bytes32
|
|
10
10
|
from chia_rs.sized_ints import uint8, uint16, uint32, uint64
|
|
11
11
|
|
|
12
|
-
from chia.types.blockchain_format.proof_of_space import ProofOfSpace
|
|
13
12
|
from chia.util.streamable import Streamable, streamable
|
|
14
13
|
|
|
15
14
|
POOL_PROTOCOL_VERSION = uint8(1)
|
|
@@ -6,13 +6,13 @@ from typing import Optional
|
|
|
6
6
|
|
|
7
7
|
from chia_rs.sized_ints import int16, uint8, uint16
|
|
8
8
|
|
|
9
|
-
from chia.
|
|
9
|
+
from chia.protocols.outbound_message import NodeType
|
|
10
10
|
from chia.util.streamable import Streamable, streamable
|
|
11
11
|
|
|
12
12
|
protocol_version = {
|
|
13
13
|
NodeType.FULL_NODE: "0.0.36",
|
|
14
|
-
NodeType.HARVESTER: "0.0.
|
|
15
|
-
NodeType.FARMER: "0.0.
|
|
14
|
+
NodeType.HARVESTER: "0.0.37",
|
|
15
|
+
NodeType.FARMER: "0.0.37",
|
|
16
16
|
NodeType.TIMELORD: "0.0.36",
|
|
17
17
|
NodeType.INTRODUCER: "0.0.36",
|
|
18
18
|
NodeType.WALLET: "0.0.38",
|
|
@@ -3,13 +3,11 @@ from __future__ import annotations
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
from typing import Optional
|
|
5
5
|
|
|
6
|
-
from chia_rs import Foliage, RewardChainBlock, RewardChainBlockUnfinished
|
|
6
|
+
from chia_rs import EndOfSubSlotBundle, Foliage, RewardChainBlock, RewardChainBlockUnfinished, SubEpochSummary
|
|
7
7
|
from chia_rs.sized_bytes import bytes32
|
|
8
8
|
from chia_rs.sized_ints import uint8, uint32, uint64, uint128
|
|
9
9
|
|
|
10
|
-
from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
|
|
11
10
|
from chia.types.blockchain_format.vdf import VDFInfo, VDFProof
|
|
12
|
-
from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
|
|
13
11
|
from chia.util.streamable import Streamable, streamable
|
|
14
12
|
|
|
15
13
|
"""
|
|
@@ -5,14 +5,13 @@ from enum import IntEnum
|
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
7
|
import chia_rs
|
|
8
|
+
from chia_rs import HeaderBlock, SpendBundle
|
|
8
9
|
from chia_rs.sized_bytes import bytes32
|
|
9
10
|
from chia_rs.sized_ints import uint8, uint32, uint64, uint128
|
|
10
11
|
|
|
11
|
-
from chia.
|
|
12
|
+
from chia.protocols.fee_estimate import FeeEstimateGroup
|
|
12
13
|
from chia.types.blockchain_format.coin import Coin
|
|
13
14
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
14
|
-
from chia.types.header_block import HeaderBlock
|
|
15
|
-
from chia.types.spend_bundle import SpendBundle
|
|
16
15
|
from chia.util.streamable import Streamable, streamable
|
|
17
16
|
|
|
18
17
|
"""
|
|
@@ -21,6 +20,7 @@ Note: When changing this file, also change protocol_message_types.py, and the pr
|
|
|
21
20
|
"""
|
|
22
21
|
|
|
23
22
|
|
|
23
|
+
# NOTE: using this assignment to retain automatic testing of these messages
|
|
24
24
|
CoinState = chia_rs.CoinState
|
|
25
25
|
RespondToPhUpdates = chia_rs.RespondToPhUpdates
|
|
26
26
|
|
chia/rpc/rpc_client.py
CHANGED
|
@@ -7,20 +7,19 @@ from contextlib import asynccontextmanager
|
|
|
7
7
|
from dataclasses import dataclass
|
|
8
8
|
from pathlib import Path
|
|
9
9
|
from ssl import SSLContext
|
|
10
|
-
from typing import Any, Optional
|
|
10
|
+
from typing import Any, Optional
|
|
11
11
|
|
|
12
12
|
import aiohttp
|
|
13
13
|
from chia_rs.sized_bytes import bytes32
|
|
14
14
|
from chia_rs.sized_ints import uint16
|
|
15
|
+
from typing_extensions import Self
|
|
15
16
|
|
|
16
|
-
from chia.
|
|
17
|
+
from chia.protocols.outbound_message import NodeType
|
|
17
18
|
from chia.server.server import ssl_context_for_client
|
|
18
19
|
from chia.server.ssl_context import private_ssl_ca_paths
|
|
19
20
|
from chia.util.byte_types import hexstr_to_bytes
|
|
20
21
|
from chia.util.task_referencer import create_referenced_task
|
|
21
22
|
|
|
22
|
-
_T_RpcClient = TypeVar("_T_RpcClient", bound="RpcClient")
|
|
23
|
-
|
|
24
23
|
|
|
25
24
|
# It would be better to not inherit from ValueError. This is being done to separate
|
|
26
25
|
# the possibility to identify these errors in new code from having to review and
|
|
@@ -50,12 +49,12 @@ class RpcClient:
|
|
|
50
49
|
|
|
51
50
|
@classmethod
|
|
52
51
|
async def create(
|
|
53
|
-
cls
|
|
52
|
+
cls,
|
|
54
53
|
self_hostname: str,
|
|
55
54
|
port: uint16,
|
|
56
55
|
root_path: Optional[Path],
|
|
57
56
|
net_config: Optional[dict[str, Any]],
|
|
58
|
-
) ->
|
|
57
|
+
) -> Self:
|
|
59
58
|
if (root_path is not None) != (net_config is not None):
|
|
60
59
|
raise ValueError("Either both or neither of root_path and net_config must be provided")
|
|
61
60
|
|
|
@@ -89,12 +88,12 @@ class RpcClient:
|
|
|
89
88
|
@classmethod
|
|
90
89
|
@asynccontextmanager
|
|
91
90
|
async def create_as_context(
|
|
92
|
-
cls
|
|
91
|
+
cls,
|
|
93
92
|
self_hostname: str,
|
|
94
93
|
port: uint16,
|
|
95
94
|
root_path: Optional[Path] = None,
|
|
96
95
|
net_config: Optional[dict[str, Any]] = None,
|
|
97
|
-
) -> AsyncIterator[
|
|
96
|
+
) -> AsyncIterator[Self]:
|
|
98
97
|
self = await cls.create(
|
|
99
98
|
self_hostname=self_hostname,
|
|
100
99
|
port=port,
|
chia/rpc/rpc_server.py
CHANGED
|
@@ -24,8 +24,8 @@ from chia_rs.sized_ints import uint16
|
|
|
24
24
|
from typing_extensions import Protocol, final
|
|
25
25
|
|
|
26
26
|
from chia import __version__
|
|
27
|
+
from chia.protocols.outbound_message import NodeType
|
|
27
28
|
from chia.rpc.util import wrap_http_handler
|
|
28
|
-
from chia.server.outbound_message import NodeType
|
|
29
29
|
from chia.server.server import (
|
|
30
30
|
ChiaServer,
|
|
31
31
|
ssl_context_for_client,
|
|
@@ -199,7 +199,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
|
|
|
199
199
|
hostname=self_hostname,
|
|
200
200
|
port=rpc_port,
|
|
201
201
|
max_request_body_size=max_request_body_size,
|
|
202
|
-
routes=[web.post(route, wrap_http_handler(func)) for (route, func) in self._get_routes().items()],
|
|
202
|
+
routes=[web.post(route, wrap_http_handler(func, route)) for (route, func) in self._get_routes().items()],
|
|
203
203
|
ssl_context=self.ssl_context,
|
|
204
204
|
prefer_ipv6=self.prefer_ipv6,
|
|
205
205
|
)
|
|
@@ -303,7 +303,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
|
|
|
303
303
|
async def close_connection(self, request: dict[str, Any]) -> EndpointResult:
|
|
304
304
|
node_id = hexstr_to_bytes(request["node_id"])
|
|
305
305
|
if self.rpc_api.service.server is None:
|
|
306
|
-
raise web.HTTPInternalServerError
|
|
306
|
+
raise web.HTTPInternalServerError
|
|
307
307
|
connections_to_close = [c for c in self.rpc_api.service.server.get_connections() if c.peer_node_id == node_id]
|
|
308
308
|
if len(connections_to_close) == 0:
|
|
309
309
|
raise ValueError(f"Connection with node_id {node_id.hex()} does not exist")
|
chia/rpc/util.py
CHANGED
|
@@ -66,11 +66,13 @@ def marshal(func: MarshallableRpcEndpoint) -> RpcEndpoint:
|
|
|
66
66
|
raise ValueError("Internal Error. Marshalled endpoint was made with clvm_streamable.")
|
|
67
67
|
return response_dict
|
|
68
68
|
|
|
69
|
+
rpc_endpoint.__name__ = func.__name__
|
|
69
70
|
return rpc_endpoint
|
|
70
71
|
|
|
71
72
|
|
|
72
73
|
def wrap_http_handler(
|
|
73
74
|
f: Callable[[dict[str, Any]], Awaitable[EndpointResult]],
|
|
75
|
+
route: str,
|
|
74
76
|
) -> Callable[[aiohttp.web.Request], Awaitable[aiohttp.web.StreamResponse]]:
|
|
75
77
|
async def inner(request: aiohttp.web.Request) -> aiohttp.web.StreamResponse:
|
|
76
78
|
request_data = await request.json()
|
|
@@ -82,7 +84,7 @@ def wrap_http_handler(
|
|
|
82
84
|
res_object["success"] = True
|
|
83
85
|
except Exception as e:
|
|
84
86
|
tb = traceback.format_exc()
|
|
85
|
-
log.warning(f"Error while handling message: {tb}")
|
|
87
|
+
log.warning(f"Error while handling message for {route}: {tb}")
|
|
86
88
|
if len(e.args) > 0:
|
|
87
89
|
res_object = {"success": False, "error": f"{e.args[0]}", "traceback": f"{tb}"}
|
|
88
90
|
else:
|
chia/seeder/crawler.py
CHANGED
|
@@ -19,10 +19,10 @@ from chia_rs.sized_ints import uint32, uint64
|
|
|
19
19
|
from chia.full_node.full_node_api import FullNodeAPI
|
|
20
20
|
from chia.protocols import full_node_protocol
|
|
21
21
|
from chia.protocols.full_node_protocol import RespondPeers
|
|
22
|
+
from chia.protocols.outbound_message import NodeType
|
|
22
23
|
from chia.rpc.rpc_server import StateChangedProtocol, default_get_connections
|
|
23
24
|
from chia.seeder.crawl_store import CrawlStore
|
|
24
25
|
from chia.seeder.peer_record import PeerRecord, PeerReliability
|
|
25
|
-
from chia.server.outbound_message import NodeType
|
|
26
26
|
from chia.server.server import ChiaServer
|
|
27
27
|
from chia.server.ws_connection import WSChiaConnection
|
|
28
28
|
from chia.types.peer_info import PeerInfo
|
chia/seeder/crawler_api.py
CHANGED
|
@@ -4,9 +4,9 @@ import logging
|
|
|
4
4
|
from typing import TYPE_CHECKING, ClassVar, Optional, cast
|
|
5
5
|
|
|
6
6
|
from chia.protocols import full_node_protocol, wallet_protocol
|
|
7
|
+
from chia.protocols.outbound_message import Message
|
|
7
8
|
from chia.seeder.crawler import Crawler
|
|
8
9
|
from chia.server.api_protocol import ApiMetadata
|
|
9
|
-
from chia.server.outbound_message import Message
|
|
10
10
|
from chia.server.server import ChiaServer
|
|
11
11
|
from chia.server.ws_connection import WSChiaConnection
|
|
12
12
|
|
chia/seeder/dns_server.py
CHANGED
chia/seeder/start_crawler.py
CHANGED
|
@@ -11,13 +11,13 @@ from chia_rs import ConsensusConstants
|
|
|
11
11
|
from chia.apis import ApiProtocolRegistry
|
|
12
12
|
from chia.consensus.constants import replace_str_to_bytes
|
|
13
13
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
14
|
-
from chia.
|
|
14
|
+
from chia.protocols.outbound_message import NodeType
|
|
15
15
|
from chia.seeder.crawler import Crawler
|
|
16
16
|
from chia.seeder.crawler_api import CrawlerAPI
|
|
17
|
-
from chia.
|
|
17
|
+
from chia.seeder.crawler_rpc_api import CrawlerRpcApi
|
|
18
|
+
from chia.server.aliases import CrawlerService
|
|
18
19
|
from chia.server.signal_handlers import SignalHandlers
|
|
19
20
|
from chia.server.start_service import RpcInfo, Service, async_run
|
|
20
|
-
from chia.types.aliases import CrawlerService
|
|
21
21
|
from chia.util.chia_logging import initialize_service_logging
|
|
22
22
|
from chia.util.config import load_config, load_config_cli
|
|
23
23
|
from chia.util.default_root import resolve_root_path
|