chia-blockchain 2.5.7rc3__py3-none-any.whl → 2.5.8rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/__init__.py +8 -4
- chia/_tests/blockchain/blockchain_test_utils.py +6 -8
- chia/_tests/blockchain/test_augmented_chain.py +4 -4
- chia/_tests/blockchain/test_blockchain.py +165 -190
- chia/_tests/blockchain/test_build_chains.py +2 -4
- chia/_tests/blockchain/test_get_block_generator.py +2 -3
- chia/_tests/clvm/coin_store.py +4 -7
- chia/_tests/clvm/test_clvm_step.py +4 -4
- chia/_tests/clvm/test_puzzle_compression.py +2 -1
- chia/_tests/clvm/test_puzzle_drivers.py +2 -2
- chia/_tests/clvm/test_singletons.py +2 -4
- chia/_tests/clvm/test_spend_sim.py +2 -2
- chia/_tests/cmds/cmd_test_utils.py +27 -45
- chia/_tests/cmds/test_cmd_framework.py +6 -6
- chia/_tests/cmds/test_daemon.py +3 -3
- chia/_tests/cmds/test_show.py +4 -4
- chia/_tests/cmds/test_tx_config_args.py +1 -2
- chia/_tests/cmds/testing_classes.py +4 -5
- chia/_tests/cmds/wallet/test_did.py +24 -27
- chia/_tests/cmds/wallet/test_nft.py +12 -10
- chia/_tests/cmds/wallet/test_vcs.py +11 -12
- chia/_tests/cmds/wallet/test_wallet.py +134 -89
- chia/_tests/conftest.py +59 -30
- chia/_tests/connection_utils.py +2 -2
- chia/_tests/core/cmds/test_beta.py +4 -4
- chia/_tests/core/cmds/test_keys.py +2 -3
- chia/_tests/core/cmds/test_wallet.py +15 -15
- chia/_tests/core/consensus/test_pot_iterations.py +19 -73
- chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
- chia/_tests/core/daemon/test_daemon.py +11 -11
- chia/_tests/core/data_layer/conftest.py +2 -2
- chia/_tests/core/data_layer/test_data_rpc.py +28 -14
- chia/_tests/core/data_layer/test_data_store.py +10 -10
- chia/_tests/core/data_layer/util.py +11 -11
- chia/_tests/core/farmer/test_farmer_api.py +2 -4
- chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
- chia/_tests/core/full_node/stores/test_block_store.py +5 -4
- chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
- chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
- chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
- chia/_tests/core/full_node/test_block_height_map.py +3 -4
- chia/_tests/core/full_node/test_conditions.py +21 -23
- chia/_tests/core/full_node/test_full_node.py +225 -62
- chia/_tests/core/full_node/test_hint_management.py +2 -4
- chia/_tests/core/full_node/test_performance.py +0 -1
- chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
- chia/_tests/core/full_node/test_transactions.py +1 -2
- chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
- chia/_tests/core/mempool/test_mempool.py +29 -37
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
- chia/_tests/core/mempool/test_mempool_manager.py +963 -839
- chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
- chia/_tests/core/server/serve.py +7 -7
- chia/_tests/core/server/test_dos.py +1 -2
- chia/_tests/core/server/test_event_loop.py +12 -4
- chia/_tests/core/server/test_loop.py +7 -8
- chia/_tests/core/server/test_rate_limits.py +9 -8
- chia/_tests/core/server/test_server.py +61 -1
- chia/_tests/core/services/test_services.py +2 -2
- chia/_tests/core/ssl/test_ssl.py +2 -2
- chia/_tests/core/test_cost_calculation.py +2 -6
- chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
- chia/_tests/core/test_filter.py +0 -1
- chia/_tests/core/test_full_node_rpc.py +2 -2
- chia/_tests/core/test_merkle_set.py +1 -2
- chia/_tests/core/test_seeder.py +4 -4
- chia/_tests/core/util/test_config.py +4 -4
- chia/_tests/core/util/test_jsonify.py +2 -2
- chia/_tests/core/util/test_keychain.py +3 -3
- chia/_tests/core/util/test_lockfile.py +2 -1
- chia/_tests/core/util/test_log_exceptions.py +1 -2
- chia/_tests/core/util/test_streamable.py +17 -17
- chia/_tests/db/test_db_wrapper.py +3 -2
- chia/_tests/environments/wallet.py +14 -14
- chia/_tests/ether.py +4 -3
- chia/_tests/farmer_harvester/test_farmer.py +41 -24
- chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
- chia/_tests/harvester/test_harvester_api.py +11 -4
- chia/_tests/plot_sync/test_plot_sync.py +13 -11
- chia/_tests/plot_sync/test_receiver.py +11 -10
- chia/_tests/plot_sync/test_sync_simulated.py +2 -2
- chia/_tests/plot_sync/util.py +1 -2
- chia/_tests/plotting/test_plot_manager.py +7 -6
- chia/_tests/plotting/test_prover.py +30 -38
- chia/_tests/pools/test_pool_cmdline.py +4 -6
- chia/_tests/pools/test_pool_rpc.py +203 -61
- chia/_tests/pools/test_pool_wallet.py +3 -3
- chia/_tests/pools/test_wallet_pool_store.py +1 -4
- chia/_tests/process_junit.py +2 -2
- chia/_tests/rpc/test_rpc_client.py +4 -4
- chia/_tests/rpc/test_rpc_server.py +3 -3
- chia/_tests/simulation/test_simulation.py +12 -25
- chia/_tests/solver/test_solver_service.py +13 -4
- chia/_tests/testconfig.py +2 -2
- chia/_tests/timelord/test_new_peak.py +22 -11
- chia/_tests/tools/test_run_block.py +0 -2
- chia/_tests/tools/test_virtual_project.py +2 -1
- chia/_tests/util/benchmarks.py +1 -0
- chia/_tests/util/blockchain.py +38 -36
- chia/_tests/util/blockchain_mock.py +11 -11
- chia/_tests/util/build_network_protocol_files.py +2 -1
- chia/_tests/util/coin_store.py +2 -1
- chia/_tests/util/config.py +1 -1
- chia/_tests/util/db_connection.py +2 -3
- chia/_tests/util/full_sync.py +9 -11
- chia/_tests/util/gen_ssl_certs.py +4 -5
- chia/_tests/util/get_name_puzzle_conditions.py +2 -0
- chia/_tests/util/misc.py +24 -24
- chia/_tests/util/network_protocol_data.py +20 -3
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +292 -3
- chia/_tests/util/setup_nodes.py +62 -47
- chia/_tests/util/spend_sim.py +57 -57
- chia/_tests/util/test_async_pool.py +2 -3
- chia/_tests/util/test_chia_version.py +1 -3
- chia/_tests/util/test_config.py +3 -3
- chia/_tests/util/test_full_block_utils.py +6 -3
- chia/_tests/util/test_limited_semaphore.py +1 -2
- chia/_tests/util/test_misc.py +2 -2
- chia/_tests/util/test_network.py +1 -2
- chia/_tests/util/test_priority_mutex.py +3 -3
- chia/_tests/util/test_recursive_replace.py +5 -6
- chia/_tests/util/test_replace_str_to_bytes.py +8 -10
- chia/_tests/util/test_testnet_overrides.py +3 -3
- chia/_tests/util/time_out_assert.py +2 -2
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
- chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
- chia/_tests/wallet/conftest.py +6 -6
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
- chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
- chia/_tests/wallet/did_wallet/test_did.py +16 -6
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
- chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
- chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
- chia/_tests/wallet/test_clvm_streamable.py +2 -3
- chia/_tests/wallet/test_coin_management.py +2 -2
- chia/_tests/wallet/test_conditions.py +45 -51
- chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
- chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
- chia/_tests/wallet/test_notifications.py +14 -14
- chia/_tests/wallet/test_signer_protocol.py +5 -5
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
- chia/_tests/wallet/test_transaction_store.py +20 -20
- chia/_tests/wallet/test_util.py +2 -2
- chia/_tests/wallet/test_wallet.py +380 -228
- chia/_tests/wallet/test_wallet_action_scope.py +4 -4
- chia/_tests/wallet/test_wallet_blockchain.py +12 -12
- chia/_tests/wallet/test_wallet_coin_store.py +3 -4
- chia/_tests/wallet/test_wallet_node.py +14 -14
- chia/_tests/wallet/test_wallet_test_framework.py +2 -1
- chia/_tests/wallet/test_wallet_utils.py +2 -3
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
- chia/_tests/wallet/wallet_block_tools.py +12 -11
- chia/_tests/weight_proof/config.py +1 -0
- chia/_tests/weight_proof/test_weight_proof.py +5 -4
- chia/apis/__init__.py +21 -0
- chia/apis/farmer_stub.py +102 -0
- chia/apis/full_node_stub.py +372 -0
- chia/apis/harvester_stub.py +57 -0
- chia/apis/introducer_stub.py +35 -0
- chia/apis/solver_stub.py +30 -0
- chia/apis/stub_protocol_registry.py +21 -0
- chia/apis/timelord_stub.py +39 -0
- chia/apis/wallet_stub.py +161 -0
- chia/cmds/beta.py +3 -4
- chia/cmds/beta_funcs.py +4 -3
- chia/cmds/check_wallet_db.py +4 -4
- chia/cmds/chia.py +1 -2
- chia/cmds/cmd_classes.py +11 -13
- chia/cmds/cmd_helpers.py +11 -11
- chia/cmds/cmds_util.py +15 -15
- chia/cmds/coin_funcs.py +6 -7
- chia/cmds/coins.py +2 -3
- chia/cmds/configure.py +1 -2
- chia/cmds/data.py +42 -42
- chia/cmds/data_funcs.py +81 -81
- chia/cmds/db.py +4 -5
- chia/cmds/db_backup_func.py +2 -2
- chia/cmds/db_upgrade_func.py +3 -3
- chia/cmds/db_validate_func.py +2 -2
- chia/cmds/dev/data.py +4 -4
- chia/cmds/dev/gh.py +5 -5
- chia/cmds/dev/installers.py +2 -3
- chia/cmds/dev/mempool.py +3 -4
- chia/cmds/dev/mempool_funcs.py +4 -4
- chia/cmds/dev/sim.py +8 -8
- chia/cmds/dump_keyring.py +3 -3
- chia/cmds/farm.py +6 -8
- chia/cmds/farm_funcs.py +25 -24
- chia/cmds/init_funcs.py +4 -4
- chia/cmds/keys.py +16 -18
- chia/cmds/keys_funcs.py +36 -36
- chia/cmds/netspace.py +1 -3
- chia/cmds/netspace_funcs.py +1 -2
- chia/cmds/options.py +3 -2
- chia/cmds/param_types.py +17 -16
- chia/cmds/passphrase.py +6 -7
- chia/cmds/passphrase_funcs.py +11 -13
- chia/cmds/peer.py +1 -3
- chia/cmds/peer_funcs.py +3 -3
- chia/cmds/plotnft.py +6 -7
- chia/cmds/plotnft_funcs.py +37 -26
- chia/cmds/rpc.py +3 -3
- chia/cmds/show.py +3 -5
- chia/cmds/show_funcs.py +9 -9
- chia/cmds/sim_funcs.py +25 -26
- chia/cmds/solver.py +1 -3
- chia/cmds/solver_funcs.py +1 -2
- chia/cmds/start_funcs.py +2 -2
- chia/cmds/wallet.py +76 -81
- chia/cmds/wallet_funcs.py +206 -177
- chia/consensus/augmented_chain.py +6 -6
- chia/consensus/block_body_validation.py +19 -15
- chia/consensus/block_creation.py +25 -21
- chia/consensus/block_header_validation.py +27 -13
- chia/consensus/block_height_map.py +3 -6
- chia/consensus/block_height_map_protocol.py +2 -2
- chia/consensus/block_record.py +2 -4
- chia/consensus/blockchain.py +58 -40
- chia/consensus/blockchain_interface.py +7 -7
- chia/consensus/coin_store_protocol.py +5 -6
- chia/consensus/condition_tools.py +4 -4
- chia/consensus/cost_calculator.py +2 -3
- chia/consensus/default_constants.py +16 -13
- chia/consensus/deficit.py +1 -3
- chia/consensus/difficulty_adjustment.py +3 -5
- chia/consensus/find_fork_point.py +2 -4
- chia/consensus/full_block_to_block_record.py +11 -13
- chia/consensus/generator_tools.py +2 -3
- chia/consensus/get_block_challenge.py +42 -26
- chia/consensus/get_block_generator.py +2 -3
- chia/consensus/make_sub_epoch_summary.py +8 -7
- chia/consensus/multiprocess_validation.py +31 -20
- chia/consensus/pos_quality.py +6 -23
- chia/consensus/pot_iterations.py +17 -44
- chia/consensus/signage_point.py +4 -5
- chia/consensus/vdf_info_computation.py +2 -4
- chia/daemon/client.py +8 -8
- chia/daemon/keychain_proxy.py +31 -37
- chia/daemon/server.py +32 -33
- chia/daemon/windows_signal.py +4 -3
- chia/data_layer/data_layer.py +86 -77
- chia/data_layer/data_layer_rpc_api.py +9 -9
- chia/data_layer/data_layer_rpc_client.py +13 -15
- chia/data_layer/data_layer_server.py +3 -3
- chia/data_layer/data_layer_util.py +14 -14
- chia/data_layer/data_layer_wallet.py +94 -101
- chia/data_layer/data_store.py +50 -50
- chia/data_layer/dl_wallet_store.py +9 -12
- chia/data_layer/download_data.py +8 -9
- chia/data_layer/s3_plugin_service.py +5 -9
- chia/data_layer/start_data_layer.py +5 -5
- chia/farmer/farmer.py +31 -31
- chia/farmer/farmer_api.py +45 -33
- chia/farmer/farmer_rpc_api.py +5 -4
- chia/farmer/farmer_rpc_client.py +6 -6
- chia/farmer/start_farmer.py +12 -7
- chia/full_node/block_store.py +13 -16
- chia/full_node/check_fork_next_block.py +1 -2
- chia/full_node/coin_store.py +15 -16
- chia/full_node/eligible_coin_spends.py +3 -3
- chia/full_node/fee_estimate_store.py +2 -3
- chia/full_node/fee_tracker.py +1 -2
- chia/full_node/full_block_utils.py +4 -4
- chia/full_node/full_node.py +238 -224
- chia/full_node/full_node_api.py +193 -150
- chia/full_node/full_node_rpc_api.py +53 -31
- chia/full_node/full_node_rpc_client.py +18 -19
- chia/full_node/full_node_store.py +45 -43
- chia/full_node/hint_management.py +2 -2
- chia/full_node/mempool.py +17 -19
- chia/full_node/mempool_manager.py +89 -42
- chia/full_node/pending_tx_cache.py +2 -3
- chia/full_node/start_full_node.py +5 -5
- chia/full_node/sync_store.py +3 -4
- chia/full_node/tx_processing_queue.py +34 -13
- chia/full_node/weight_proof.py +61 -48
- chia/harvester/harvester.py +25 -24
- chia/harvester/harvester_api.py +61 -38
- chia/harvester/harvester_rpc_api.py +10 -10
- chia/harvester/start_harvester.py +4 -4
- chia/introducer/introducer.py +3 -3
- chia/introducer/introducer_api.py +6 -4
- chia/introducer/start_introducer.py +4 -4
- chia/legacy/keyring.py +3 -3
- chia/plot_sync/delta.py +1 -2
- chia/plot_sync/receiver.py +20 -17
- chia/plot_sync/sender.py +15 -10
- chia/plotters/bladebit.py +7 -7
- chia/plotters/chiapos.py +2 -2
- chia/plotters/madmax.py +4 -4
- chia/plotters/plotters.py +4 -4
- chia/plotters/plotters_util.py +3 -3
- chia/plotting/cache.py +20 -14
- chia/plotting/check_plots.py +26 -35
- chia/plotting/create_plots.py +22 -23
- chia/plotting/manager.py +21 -14
- chia/plotting/prover.py +59 -42
- chia/plotting/util.py +16 -16
- chia/pools/pool_config.py +2 -1
- chia/pools/pool_puzzles.py +11 -12
- chia/pools/pool_wallet.py +34 -57
- chia/pools/pool_wallet_info.py +39 -10
- chia/protocols/farmer_protocol.py +8 -9
- chia/protocols/fee_estimate.py +3 -4
- chia/protocols/full_node_protocol.py +3 -4
- chia/protocols/harvester_protocol.py +27 -15
- chia/protocols/outbound_message.py +3 -3
- chia/protocols/pool_protocol.py +8 -9
- chia/protocols/shared_protocol.py +1 -2
- chia/protocols/solver_protocol.py +9 -2
- chia/protocols/timelord_protocol.py +4 -7
- chia/protocols/wallet_protocol.py +11 -12
- chia/rpc/rpc_client.py +9 -9
- chia/rpc/rpc_server.py +17 -17
- chia/rpc/util.py +2 -2
- chia/seeder/crawler.py +8 -8
- chia/seeder/crawler_api.py +21 -27
- chia/seeder/crawler_rpc_api.py +2 -2
- chia/seeder/dns_server.py +21 -21
- chia/seeder/start_crawler.py +4 -4
- chia/server/address_manager.py +15 -16
- chia/server/api_protocol.py +11 -11
- chia/server/chia_policy.py +46 -26
- chia/server/introducer_peers.py +2 -3
- chia/server/node_discovery.py +19 -19
- chia/server/rate_limit_numbers.py +4 -5
- chia/server/rate_limits.py +4 -4
- chia/server/resolve_peer_info.py +4 -4
- chia/server/server.py +49 -52
- chia/server/signal_handlers.py +6 -6
- chia/server/start_service.py +17 -17
- chia/server/upnp.py +4 -6
- chia/server/ws_connection.py +52 -37
- chia/simulator/add_blocks_in_batches.py +1 -3
- chia/simulator/block_tools.py +312 -200
- chia/simulator/full_node_simulator.py +56 -35
- chia/simulator/keyring.py +2 -3
- chia/simulator/setup_services.py +16 -15
- chia/simulator/simulator_full_node_rpc_api.py +1 -2
- chia/simulator/simulator_full_node_rpc_client.py +1 -2
- chia/simulator/simulator_protocol.py +1 -2
- chia/simulator/simulator_test_tools.py +3 -3
- chia/simulator/start_simulator.py +7 -7
- chia/simulator/wallet_tools.py +10 -10
- chia/solver/solver.py +10 -10
- chia/solver/solver_api.py +10 -8
- chia/solver/solver_rpc_api.py +2 -2
- chia/solver/start_solver.py +4 -4
- chia/ssl/cacert.pem +148 -90
- chia/ssl/chia_ca.crt +14 -10
- chia/ssl/chia_ca_old.crt +19 -0
- chia/ssl/create_ssl.py +4 -4
- chia/ssl/renewedselfsignedca.conf +4 -0
- chia/ssl/ssl_check.py +1 -2
- chia/timelord/iters_from_block.py +1 -4
- chia/timelord/start_timelord.py +4 -4
- chia/timelord/timelord.py +44 -40
- chia/timelord/timelord_api.py +6 -4
- chia/timelord/timelord_launcher.py +2 -2
- chia/timelord/timelord_rpc_api.py +2 -2
- chia/timelord/timelord_state.py +11 -12
- chia/types/block_protocol.py +1 -3
- chia/types/blockchain_format/coin.py +1 -3
- chia/types/blockchain_format/program.py +11 -8
- chia/types/blockchain_format/proof_of_space.py +123 -76
- chia/types/blockchain_format/tree_hash.py +3 -3
- chia/types/blockchain_format/vdf.py +1 -2
- chia/types/coin_spend.py +3 -3
- chia/types/mempool_item.py +5 -5
- chia/types/mempool_submission_status.py +2 -3
- chia/types/peer_info.py +1 -2
- chia/types/unfinished_header_block.py +3 -4
- chia/types/validation_state.py +1 -2
- chia/util/action_scope.py +8 -8
- chia/util/async_pool.py +5 -5
- chia/util/bech32m.py +1 -2
- chia/util/beta_metrics.py +2 -2
- chia/util/block_cache.py +4 -4
- chia/util/chia_logging.py +2 -2
- chia/util/chia_version.py +1 -2
- chia/util/config.py +15 -16
- chia/util/db_wrapper.py +26 -27
- chia/util/default_root.py +1 -2
- chia/util/errors.py +3 -3
- chia/util/file_keyring.py +14 -14
- chia/util/files.py +2 -3
- chia/util/hash.py +4 -4
- chia/util/initial-config.yaml +3 -5
- chia/util/inline_executor.py +2 -1
- chia/util/ip_address.py +1 -2
- chia/util/keychain.py +25 -27
- chia/util/keyring_wrapper.py +18 -19
- chia/util/lock.py +3 -4
- chia/util/log_exceptions.py +1 -2
- chia/util/lru_cache.py +2 -2
- chia/util/network.py +6 -6
- chia/util/path.py +2 -3
- chia/util/priority_mutex.py +2 -2
- chia/util/profiler.py +1 -2
- chia/util/safe_cancel_task.py +1 -2
- chia/util/streamable.py +22 -8
- chia/util/task_referencer.py +1 -1
- chia/util/timing.py +3 -3
- chia/util/virtual_project_analysis.py +6 -5
- chia/util/ws_message.py +2 -2
- chia/wallet/cat_wallet/cat_info.py +3 -4
- chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
- chia/wallet/cat_wallet/cat_utils.py +3 -4
- chia/wallet/cat_wallet/cat_wallet.py +61 -83
- chia/wallet/cat_wallet/lineage_store.py +3 -4
- chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
- chia/wallet/coin_selection.py +9 -10
- chia/wallet/conditions.py +120 -105
- chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
- chia/wallet/derivation_record.py +1 -2
- chia/wallet/derive_keys.py +2 -4
- chia/wallet/did_wallet/did_info.py +10 -11
- chia/wallet/did_wallet/did_wallet.py +36 -82
- chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
- chia/wallet/driver_protocol.py +5 -7
- chia/wallet/lineage_proof.py +4 -4
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
- chia/wallet/nft_wallet/nft_info.py +8 -9
- chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
- chia/wallet/nft_wallet/nft_wallet.py +79 -116
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
- chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
- chia/wallet/nft_wallet/uncurry_nft.py +10 -11
- chia/wallet/notification_manager.py +3 -3
- chia/wallet/notification_store.py +44 -61
- chia/wallet/outer_puzzles.py +6 -7
- chia/wallet/puzzle_drivers.py +34 -6
- chia/wallet/puzzles/clawback/drivers.py +6 -6
- chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
- chia/wallet/puzzles/load_clvm.py +1 -1
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
- chia/wallet/puzzles/singleton_top_layer.py +2 -3
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
- chia/wallet/puzzles/tails.py +3 -3
- chia/wallet/singleton.py +5 -7
- chia/wallet/singleton_record.py +3 -3
- chia/wallet/start_wallet.py +5 -5
- chia/wallet/trade_manager.py +37 -58
- chia/wallet/trade_record.py +4 -4
- chia/wallet/trading/offer.py +59 -46
- chia/wallet/trading/trade_store.py +8 -9
- chia/wallet/transaction_record.py +8 -8
- chia/wallet/uncurried_puzzle.py +1 -2
- chia/wallet/util/clvm_streamable.py +12 -12
- chia/wallet/util/compute_hints.py +4 -5
- chia/wallet/util/curry_and_treehash.py +1 -2
- chia/wallet/util/merkle_tree.py +2 -3
- chia/wallet/util/peer_request_cache.py +8 -8
- chia/wallet/util/signing.py +85 -0
- chia/wallet/util/tx_config.py +15 -6
- chia/wallet/util/wallet_sync_utils.py +14 -16
- chia/wallet/util/wallet_types.py +2 -2
- chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
- chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
- chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
- chia/wallet/vc_wallet/vc_drivers.py +27 -27
- chia/wallet/vc_wallet/vc_store.py +5 -6
- chia/wallet/vc_wallet/vc_wallet.py +33 -61
- chia/wallet/wallet.py +50 -78
- chia/wallet/wallet_action_scope.py +11 -11
- chia/wallet/wallet_blockchain.py +12 -12
- chia/wallet/wallet_coin_record.py +12 -6
- chia/wallet/wallet_coin_store.py +24 -25
- chia/wallet/wallet_interested_store.py +3 -5
- chia/wallet/wallet_nft_store.py +10 -11
- chia/wallet/wallet_node.py +53 -61
- chia/wallet/wallet_node_api.py +5 -3
- chia/wallet/wallet_protocol.py +23 -23
- chia/wallet/wallet_puzzle_store.py +15 -18
- chia/wallet/wallet_request_types.py +778 -114
- chia/wallet/wallet_retry_store.py +1 -3
- chia/wallet/wallet_rpc_api.py +572 -909
- chia/wallet/wallet_rpc_client.py +87 -279
- chia/wallet/wallet_singleton_store.py +3 -4
- chia/wallet/wallet_state_manager.py +332 -106
- chia/wallet/wallet_transaction_store.py +11 -14
- chia/wallet/wallet_user_store.py +4 -6
- chia/wallet/wallet_weight_proof_handler.py +4 -4
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
- chia/apis.py +0 -21
- chia/consensus/check_time_locks.py +0 -57
- chia/data_layer/puzzles/__init__.py +0 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
- chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
- chia/types/coin_record.py +0 -44
- chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
- {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
|
@@ -4,14 +4,15 @@ import asyncio
|
|
|
4
4
|
import time
|
|
5
5
|
from concurrent.futures import ThreadPoolExecutor
|
|
6
6
|
from datetime import datetime, timezone
|
|
7
|
-
from typing import TYPE_CHECKING, Any, ClassVar,
|
|
7
|
+
from typing import TYPE_CHECKING, Any, ClassVar, cast
|
|
8
8
|
|
|
9
9
|
from chia_rs import (
|
|
10
10
|
MEMPOOL_MODE,
|
|
11
11
|
BlockRecord,
|
|
12
|
+
CoinRecord,
|
|
12
13
|
CoinSpend,
|
|
13
14
|
FullBlock,
|
|
14
|
-
|
|
15
|
+
PlotParam,
|
|
15
16
|
SpendBundle,
|
|
16
17
|
SpendBundleConditions,
|
|
17
18
|
get_flags_for_height_and_constants,
|
|
@@ -24,6 +25,7 @@ from chia_rs.sized_bytes import bytes32
|
|
|
24
25
|
from chia_rs.sized_ints import uint32, uint64, uint128
|
|
25
26
|
|
|
26
27
|
from chia.consensus.blockchain import Blockchain, BlockchainMutexPriority
|
|
28
|
+
from chia.consensus.get_block_challenge import pre_sp_tx_block_height
|
|
27
29
|
from chia.consensus.get_block_generator import get_block_generator
|
|
28
30
|
from chia.consensus.pos_quality import UI_ACTUAL_SPACE_CONSTANT_FACTOR
|
|
29
31
|
from chia.full_node.fee_estimator_interface import FeeEstimatorInterface
|
|
@@ -31,7 +33,6 @@ from chia.full_node.full_node import FullNode
|
|
|
31
33
|
from chia.protocols.outbound_message import NodeType
|
|
32
34
|
from chia.rpc.rpc_server import Endpoint, EndpointResult
|
|
33
35
|
from chia.types.blockchain_format.proof_of_space import calculate_prefix_bits
|
|
34
|
-
from chia.types.coin_record import CoinRecord
|
|
35
36
|
from chia.types.generator_types import BlockGenerator, NewBlockGenerator
|
|
36
37
|
from chia.types.mempool_inclusion_status import MempoolInclusionStatus
|
|
37
38
|
from chia.types.unfinished_header_block import UnfinishedHeaderBlock
|
|
@@ -65,7 +66,7 @@ async def get_average_block_time(
|
|
|
65
66
|
blockchain: Blockchain,
|
|
66
67
|
base_block: BlockRecord,
|
|
67
68
|
height_distance: int,
|
|
68
|
-
) ->
|
|
69
|
+
) -> uint32 | None:
|
|
69
70
|
newer_block = await get_nearest_transaction_block(blockchain, base_block)
|
|
70
71
|
if newer_block.height < 1:
|
|
71
72
|
return None
|
|
@@ -100,7 +101,7 @@ class FullNodeRpcApi:
|
|
|
100
101
|
def __init__(self, service: FullNode) -> None:
|
|
101
102
|
self.service = service
|
|
102
103
|
self.service_name = "chia_full_node"
|
|
103
|
-
self.cached_blockchain_state:
|
|
104
|
+
self.cached_blockchain_state: dict[str, Any] | None = None
|
|
104
105
|
self.executor = ThreadPoolExecutor(max_workers=2, thread_name_prefix="node-rpc-")
|
|
105
106
|
|
|
106
107
|
def get_routes(self) -> dict[str, Endpoint]:
|
|
@@ -139,7 +140,7 @@ class FullNodeRpcApi:
|
|
|
139
140
|
"/get_fee_estimate": self.get_fee_estimate,
|
|
140
141
|
}
|
|
141
142
|
|
|
142
|
-
async def _state_changed(self, change: str, change_data:
|
|
143
|
+
async def _state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> list[WsRpcMessage]:
|
|
143
144
|
if change_data is None:
|
|
144
145
|
change_data = {}
|
|
145
146
|
|
|
@@ -203,7 +204,7 @@ class FullNodeRpcApi:
|
|
|
203
204
|
},
|
|
204
205
|
}
|
|
205
206
|
return res
|
|
206
|
-
peak:
|
|
207
|
+
peak: BlockRecord | None = self.service.blockchain.get_peak()
|
|
207
208
|
|
|
208
209
|
if peak is not None and peak.height > 0:
|
|
209
210
|
difficulty = uint64(peak.weight - self.service.blockchain.block_record(peak.prev_hash).weight)
|
|
@@ -214,7 +215,7 @@ class FullNodeRpcApi:
|
|
|
214
215
|
|
|
215
216
|
sync_mode: bool = self.service.sync_store.get_sync_mode() or self.service.sync_store.get_long_sync()
|
|
216
217
|
|
|
217
|
-
sync_tip_height:
|
|
218
|
+
sync_tip_height: uint32 | None = uint32(0)
|
|
218
219
|
if sync_mode:
|
|
219
220
|
target_peak = self.service.sync_store.target_peak
|
|
220
221
|
if target_peak is not None:
|
|
@@ -230,7 +231,7 @@ class FullNodeRpcApi:
|
|
|
230
231
|
else:
|
|
231
232
|
sync_progress_height = uint32(0)
|
|
232
233
|
|
|
233
|
-
average_block_time:
|
|
234
|
+
average_block_time: uint32 | None = None
|
|
234
235
|
if peak is not None and peak.height > 1:
|
|
235
236
|
newer_block_hex = peak.header_hash.hex()
|
|
236
237
|
# Average over the last day
|
|
@@ -309,7 +310,7 @@ class FullNodeRpcApi:
|
|
|
309
310
|
return {"eos": eos, "time_received": time_received, "reverted": False}
|
|
310
311
|
|
|
311
312
|
# Otherwise we can backtrack from peak to find it in the blockchain
|
|
312
|
-
curr:
|
|
313
|
+
curr: BlockRecord | None = self.service.blockchain.get_peak()
|
|
313
314
|
if curr is None:
|
|
314
315
|
raise ValueError("No blocks in the chain")
|
|
315
316
|
|
|
@@ -345,8 +346,8 @@ class FullNodeRpcApi:
|
|
|
345
346
|
|
|
346
347
|
# Otherwise we can backtrack from peak to find it in the blockchain
|
|
347
348
|
rc_challenge: bytes32 = sp.rc_vdf.challenge
|
|
348
|
-
next_b:
|
|
349
|
-
curr_b_optional:
|
|
349
|
+
next_b: BlockRecord | None = None
|
|
350
|
+
curr_b_optional: BlockRecord | None = self.service.blockchain.get_peak()
|
|
350
351
|
assert curr_b_optional is not None
|
|
351
352
|
curr_b: BlockRecord = curr_b_optional
|
|
352
353
|
|
|
@@ -391,7 +392,7 @@ class FullNodeRpcApi:
|
|
|
391
392
|
raise ValueError("No header_hash in request")
|
|
392
393
|
header_hash = bytes32.from_hexstr(request["header_hash"])
|
|
393
394
|
|
|
394
|
-
block:
|
|
395
|
+
block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
|
|
395
396
|
if block is None:
|
|
396
397
|
raise ValueError(f"Block {header_hash.hex()} not found")
|
|
397
398
|
|
|
@@ -464,10 +465,10 @@ class FullNodeRpcApi:
|
|
|
464
465
|
if peak_height < uint32(a):
|
|
465
466
|
self.service.log.warning("requested block is higher than known peak ")
|
|
466
467
|
break
|
|
467
|
-
header_hash:
|
|
468
|
+
header_hash: bytes32 | None = self.service.blockchain.height_to_hash(uint32(a))
|
|
468
469
|
if header_hash is None:
|
|
469
470
|
raise ValueError(f"Height not in blockchain: {a}")
|
|
470
|
-
record:
|
|
471
|
+
record: BlockRecord | None = self.service.blockchain.try_block_record(header_hash)
|
|
471
472
|
if record is None:
|
|
472
473
|
# Fetch from DB
|
|
473
474
|
record = await self.service.blockchain.block_store.get_block_record(header_hash)
|
|
@@ -481,7 +482,7 @@ class FullNodeRpcApi:
|
|
|
481
482
|
if "header_hash" not in request:
|
|
482
483
|
raise ValueError("No header_hash in request")
|
|
483
484
|
header_hash = bytes32.from_hexstr(request["header_hash"])
|
|
484
|
-
full_block:
|
|
485
|
+
full_block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
|
|
485
486
|
if full_block is None:
|
|
486
487
|
raise ValueError(f"Block {header_hash.hex()} not found")
|
|
487
488
|
|
|
@@ -489,7 +490,14 @@ class FullNodeRpcApi:
|
|
|
489
490
|
if block_generator is None: # if block is not a transaction block.
|
|
490
491
|
return {"block_spends": []}
|
|
491
492
|
|
|
492
|
-
|
|
493
|
+
prev_tx_height = pre_sp_tx_block_height(
|
|
494
|
+
constants=self.service.constants,
|
|
495
|
+
blocks=self.service.blockchain,
|
|
496
|
+
prev_b_hash=full_block.prev_header_hash,
|
|
497
|
+
sp_index=full_block.reward_chain_block.signage_point_index,
|
|
498
|
+
first_in_sub_slot=len(full_block.finished_sub_slots) > 0,
|
|
499
|
+
)
|
|
500
|
+
flags = get_flags_for_height_and_constants(prev_tx_height, self.service.constants)
|
|
493
501
|
spends = await asyncio.get_running_loop().run_in_executor(
|
|
494
502
|
self.executor,
|
|
495
503
|
get_spends_for_trusted_block,
|
|
@@ -505,7 +513,7 @@ class FullNodeRpcApi:
|
|
|
505
513
|
if "header_hash" not in request:
|
|
506
514
|
raise ValueError("No header_hash in request")
|
|
507
515
|
header_hash = bytes32.from_hexstr(request["header_hash"])
|
|
508
|
-
full_block:
|
|
516
|
+
full_block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
|
|
509
517
|
if full_block is None:
|
|
510
518
|
raise ValueError(f"Block {header_hash.hex()} not found")
|
|
511
519
|
|
|
@@ -513,7 +521,14 @@ class FullNodeRpcApi:
|
|
|
513
521
|
if block_generator is None: # if block is not a transaction block.
|
|
514
522
|
return {"block_spends_with_conditions": []}
|
|
515
523
|
|
|
516
|
-
|
|
524
|
+
prev_tx_height = pre_sp_tx_block_height(
|
|
525
|
+
constants=self.service.constants,
|
|
526
|
+
blocks=self.service.blockchain,
|
|
527
|
+
prev_b_hash=full_block.prev_header_hash,
|
|
528
|
+
sp_index=full_block.reward_chain_block.signage_point_index,
|
|
529
|
+
first_in_sub_slot=len(full_block.finished_sub_slots) > 0,
|
|
530
|
+
)
|
|
531
|
+
flags = get_flags_for_height_and_constants(prev_tx_height, self.service.constants)
|
|
517
532
|
spends_with_conditions = await asyncio.get_running_loop().run_in_executor(
|
|
518
533
|
self.executor,
|
|
519
534
|
get_spends_for_trusted_block_with_conditions,
|
|
@@ -532,10 +547,10 @@ class FullNodeRpcApi:
|
|
|
532
547
|
peak_height = self.service.blockchain.get_peak_height()
|
|
533
548
|
if peak_height is None or header_height > peak_height:
|
|
534
549
|
raise ValueError(f"Block height {height} not found in chain")
|
|
535
|
-
header_hash:
|
|
550
|
+
header_hash: bytes32 | None = self.service.blockchain.height_to_hash(header_height)
|
|
536
551
|
if header_hash is None:
|
|
537
552
|
raise ValueError(f"Block hash {height} not found in chain")
|
|
538
|
-
record:
|
|
553
|
+
record: BlockRecord | None = self.service.blockchain.try_block_record(header_hash)
|
|
539
554
|
if record is None:
|
|
540
555
|
# Fetch from DB
|
|
541
556
|
record = await self.service.blockchain.block_store.get_block_record(header_hash)
|
|
@@ -548,7 +563,7 @@ class FullNodeRpcApi:
|
|
|
548
563
|
raise ValueError("header_hash not in request")
|
|
549
564
|
header_hash_str = request["header_hash"]
|
|
550
565
|
header_hash = bytes32.from_hexstr(header_hash_str)
|
|
551
|
-
record:
|
|
566
|
+
record: BlockRecord | None = self.service.blockchain.try_block_record(header_hash)
|
|
552
567
|
if record is None:
|
|
553
568
|
# Fetch from DB
|
|
554
569
|
record = await self.service.blockchain.block_store.get_block_record(header_hash)
|
|
@@ -558,7 +573,7 @@ class FullNodeRpcApi:
|
|
|
558
573
|
return {"block_record": record}
|
|
559
574
|
|
|
560
575
|
async def get_unfinished_block_headers(self, _request: dict[str, Any]) -> EndpointResult:
|
|
561
|
-
peak:
|
|
576
|
+
peak: BlockRecord | None = self.service.blockchain.get_peak()
|
|
562
577
|
if peak is None:
|
|
563
578
|
return {"headers": []}
|
|
564
579
|
|
|
@@ -606,7 +621,7 @@ class FullNodeRpcApi:
|
|
|
606
621
|
|
|
607
622
|
# TODO: todo_v2_plots Update this calculation to take v2 plots into
|
|
608
623
|
# account
|
|
609
|
-
plot_filter_size = calculate_prefix_bits(self.service.constants, newer_block.height,
|
|
624
|
+
plot_filter_size = calculate_prefix_bits(self.service.constants, newer_block.height, PlotParam.make_v1(32))
|
|
610
625
|
delta_iters = newer_block.total_iters - older_block.total_iters
|
|
611
626
|
weight_div_iters = delta_weight / delta_iters
|
|
612
627
|
additional_difficulty_constant = self.service.constants.DIFFICULTY_CONSTANT_FACTOR
|
|
@@ -668,7 +683,7 @@ class FullNodeRpcApi:
|
|
|
668
683
|
raise ValueError("Name not in request")
|
|
669
684
|
name = bytes32.from_hexstr(request["name"])
|
|
670
685
|
|
|
671
|
-
coin_record:
|
|
686
|
+
coin_record: CoinRecord | None = await self.service.blockchain.coin_store.get_coin_record(name)
|
|
672
687
|
if coin_record is None:
|
|
673
688
|
raise ValueError(f"Coin record 0x{name.hex()} not found")
|
|
674
689
|
|
|
@@ -781,23 +796,30 @@ class FullNodeRpcApi:
|
|
|
781
796
|
|
|
782
797
|
header_hash = self.service.blockchain.height_to_hash(height)
|
|
783
798
|
assert header_hash is not None
|
|
784
|
-
block:
|
|
799
|
+
block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
|
|
785
800
|
|
|
786
801
|
if block is None or block.transactions_generator is None:
|
|
787
802
|
raise ValueError("Invalid block or block generator")
|
|
788
803
|
|
|
789
|
-
block_generator:
|
|
804
|
+
block_generator: BlockGenerator | None = await get_block_generator(
|
|
790
805
|
self.service.blockchain.lookup_block_generators, block
|
|
791
806
|
)
|
|
792
807
|
assert block_generator is not None
|
|
793
808
|
|
|
794
809
|
try:
|
|
810
|
+
prev_tx_height = pre_sp_tx_block_height(
|
|
811
|
+
constants=self.service.constants,
|
|
812
|
+
blocks=self.service.blockchain,
|
|
813
|
+
prev_b_hash=block.prev_header_hash,
|
|
814
|
+
sp_index=block.reward_chain_block.signage_point_index,
|
|
815
|
+
first_in_sub_slot=len(block.finished_sub_slots) > 0,
|
|
816
|
+
)
|
|
795
817
|
puzzle, solution = get_puzzle_and_solution_for_coin(
|
|
796
818
|
block_generator.program,
|
|
797
819
|
block_generator.generator_refs,
|
|
798
820
|
self.service.constants.MAX_BLOCK_COST_CLVM,
|
|
799
821
|
coin_record.coin,
|
|
800
|
-
get_flags_for_height_and_constants(
|
|
822
|
+
get_flags_for_height_and_constants(prev_tx_height, self.service.constants),
|
|
801
823
|
)
|
|
802
824
|
return {"coin_solution": CoinSpend(coin_record.coin, puzzle, solution)}
|
|
803
825
|
except Exception as e:
|
|
@@ -808,7 +830,7 @@ class FullNodeRpcApi:
|
|
|
808
830
|
raise ValueError("No header_hash in request")
|
|
809
831
|
header_hash = bytes32.from_hexstr(request["header_hash"])
|
|
810
832
|
|
|
811
|
-
block:
|
|
833
|
+
block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
|
|
812
834
|
if block is None:
|
|
813
835
|
raise ValueError(f"Block {header_hash.hex()} not found")
|
|
814
836
|
|
|
@@ -862,7 +884,7 @@ class FullNodeRpcApi:
|
|
|
862
884
|
|
|
863
885
|
# Grab best transactions from Mempool for given tip target
|
|
864
886
|
async with self.service.blockchain.priority_mutex.acquire(priority=BlockchainMutexPriority.low):
|
|
865
|
-
peak:
|
|
887
|
+
peak: BlockRecord | None = self.service.blockchain.get_peak()
|
|
866
888
|
|
|
867
889
|
if peak is None:
|
|
868
890
|
return {
|
|
@@ -998,7 +1020,7 @@ class FullNodeRpcApi:
|
|
|
998
1020
|
|
|
999
1021
|
if peak is None:
|
|
1000
1022
|
peak_height = uint32(0)
|
|
1001
|
-
last_peak_timestamp:
|
|
1023
|
+
last_peak_timestamp: uint64 | None = uint64(0)
|
|
1002
1024
|
last_block_cost = 0
|
|
1003
1025
|
fee_rate_last_block = 0.0
|
|
1004
1026
|
last_tx_block_fees = uint64(0)
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Any,
|
|
3
|
+
from typing import Any, cast
|
|
4
4
|
|
|
5
|
-
from chia_rs import BlockRecord, CoinSpend, EndOfSubSlotBundle, FullBlock, SpendBundle
|
|
5
|
+
from chia_rs import BlockRecord, CoinRecord, CoinSpend, EndOfSubSlotBundle, FullBlock, SpendBundle
|
|
6
6
|
from chia_rs.sized_bytes import bytes32
|
|
7
7
|
from chia_rs.sized_ints import uint32
|
|
8
8
|
|
|
9
9
|
from chia.consensus.signage_point import SignagePoint
|
|
10
10
|
from chia.rpc.rpc_client import ResponseFailureError, RpcClient
|
|
11
|
-
from chia.types.coin_record import CoinRecord
|
|
12
11
|
from chia.types.coin_spend import CoinSpendWithConditions
|
|
13
12
|
from chia.types.condition_opcodes import ConditionOpcode
|
|
14
13
|
from chia.types.condition_with_args import ConditionWithArgs
|
|
@@ -46,7 +45,7 @@ class FullNodeRpcClient(RpcClient):
|
|
|
46
45
|
)
|
|
47
46
|
return [FullBlock.from_json_dict(block) for block in response["blocks"]]
|
|
48
47
|
|
|
49
|
-
async def get_block_record_by_height(self, height: int) ->
|
|
48
|
+
async def get_block_record_by_height(self, height: int) -> BlockRecord | None:
|
|
50
49
|
try:
|
|
51
50
|
response = await self.fetch("get_block_record_by_height", {"height": height})
|
|
52
51
|
except ResponseFailureError as e: # Block Height not found
|
|
@@ -55,7 +54,7 @@ class FullNodeRpcClient(RpcClient):
|
|
|
55
54
|
raise e
|
|
56
55
|
return BlockRecord.from_json_dict(response["block_record"])
|
|
57
56
|
|
|
58
|
-
async def get_block_record(self, header_hash: bytes32) ->
|
|
57
|
+
async def get_block_record(self, header_hash: bytes32) -> BlockRecord | None:
|
|
59
58
|
response = await self.fetch("get_block_record", {"header_hash": header_hash.hex()})
|
|
60
59
|
if response["block_record"] is None:
|
|
61
60
|
return None
|
|
@@ -88,8 +87,8 @@ class FullNodeRpcClient(RpcClient):
|
|
|
88
87
|
self,
|
|
89
88
|
names: list[bytes32],
|
|
90
89
|
include_spent_coins: bool = True,
|
|
91
|
-
start_height:
|
|
92
|
-
end_height:
|
|
90
|
+
start_height: int | None = None,
|
|
91
|
+
end_height: int | None = None,
|
|
93
92
|
) -> list[CoinRecord]:
|
|
94
93
|
names_hex = [name.hex() for name in names]
|
|
95
94
|
d = {"names": names_hex, "include_spent_coins": include_spent_coins}
|
|
@@ -105,8 +104,8 @@ class FullNodeRpcClient(RpcClient):
|
|
|
105
104
|
self,
|
|
106
105
|
puzzle_hash: bytes32,
|
|
107
106
|
include_spent_coins: bool = True,
|
|
108
|
-
start_height:
|
|
109
|
-
end_height:
|
|
107
|
+
start_height: int | None = None,
|
|
108
|
+
end_height: int | None = None,
|
|
110
109
|
) -> list[CoinRecord]:
|
|
111
110
|
d = {"puzzle_hash": puzzle_hash.hex(), "include_spent_coins": include_spent_coins}
|
|
112
111
|
if start_height is not None:
|
|
@@ -121,8 +120,8 @@ class FullNodeRpcClient(RpcClient):
|
|
|
121
120
|
self,
|
|
122
121
|
puzzle_hashes: list[bytes32],
|
|
123
122
|
include_spent_coins: bool = True,
|
|
124
|
-
start_height:
|
|
125
|
-
end_height:
|
|
123
|
+
start_height: int | None = None,
|
|
124
|
+
end_height: int | None = None,
|
|
126
125
|
) -> list[CoinRecord]:
|
|
127
126
|
puzzle_hashes_hex = [ph.hex() for ph in puzzle_hashes]
|
|
128
127
|
d = {"puzzle_hashes": puzzle_hashes_hex, "include_spent_coins": include_spent_coins}
|
|
@@ -138,8 +137,8 @@ class FullNodeRpcClient(RpcClient):
|
|
|
138
137
|
self,
|
|
139
138
|
parent_ids: list[bytes32],
|
|
140
139
|
include_spent_coins: bool = True,
|
|
141
|
-
start_height:
|
|
142
|
-
end_height:
|
|
140
|
+
start_height: int | None = None,
|
|
141
|
+
end_height: int | None = None,
|
|
143
142
|
) -> list[CoinRecord]:
|
|
144
143
|
parent_ids_hex = [pid.hex() for pid in parent_ids]
|
|
145
144
|
d = {"parent_ids": parent_ids_hex, "include_spent_coins": include_spent_coins}
|
|
@@ -159,8 +158,8 @@ class FullNodeRpcClient(RpcClient):
|
|
|
159
158
|
self,
|
|
160
159
|
hint: bytes32,
|
|
161
160
|
include_spent_coins: bool = True,
|
|
162
|
-
start_height:
|
|
163
|
-
end_height:
|
|
161
|
+
start_height: int | None = None,
|
|
162
|
+
end_height: int | None = None,
|
|
164
163
|
) -> list[CoinRecord]:
|
|
165
164
|
d = {"hint": hint.hex(), "include_spent_coins": include_spent_coins}
|
|
166
165
|
if start_height is not None:
|
|
@@ -247,12 +246,12 @@ class FullNodeRpcClient(RpcClient):
|
|
|
247
246
|
response = await self.fetch("get_mempool_items_by_coin_name", {"coin_name": coin_name.hex()})
|
|
248
247
|
return response
|
|
249
248
|
|
|
250
|
-
async def create_block_generator(self) ->
|
|
249
|
+
async def create_block_generator(self) -> dict[str, Any] | None:
|
|
251
250
|
response = await self.fetch("create_block_generator", {})
|
|
252
251
|
return response
|
|
253
252
|
|
|
254
253
|
async def get_recent_signage_point_or_eos(
|
|
255
|
-
self, sp_hash:
|
|
254
|
+
self, sp_hash: bytes32 | None, challenge_hash: bytes32 | None
|
|
256
255
|
) -> dict[str, Any]:
|
|
257
256
|
if sp_hash is not None and challenge_hash is not None:
|
|
258
257
|
raise ValueError("Either sp_hash or challenge_hash must be provided, not both.")
|
|
@@ -275,8 +274,8 @@ class FullNodeRpcClient(RpcClient):
|
|
|
275
274
|
|
|
276
275
|
async def get_fee_estimate(
|
|
277
276
|
self,
|
|
278
|
-
target_times:
|
|
279
|
-
cost:
|
|
277
|
+
target_times: list[int] | None,
|
|
278
|
+
cost: int | None,
|
|
280
279
|
) -> dict[str, Any]:
|
|
281
280
|
response = await self.fetch("get_fee_estimate", {"cost": cost, "target_times": target_times})
|
|
282
281
|
return response
|