chia-blockchain 2.5.1rc1__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 +10 -0
- chia/__main__.py +5 -0
- chia/_tests/README.md +53 -0
- chia/_tests/__init__.py +0 -0
- chia/_tests/blockchain/__init__.py +0 -0
- chia/_tests/blockchain/blockchain_test_utils.py +195 -0
- chia/_tests/blockchain/config.py +4 -0
- chia/_tests/blockchain/test_augmented_chain.py +145 -0
- chia/_tests/blockchain/test_blockchain.py +4202 -0
- chia/_tests/blockchain/test_blockchain_transactions.py +1031 -0
- chia/_tests/blockchain/test_build_chains.py +59 -0
- chia/_tests/blockchain/test_get_block_generator.py +72 -0
- chia/_tests/blockchain/test_lookup_fork_chain.py +194 -0
- chia/_tests/build-init-files.py +92 -0
- chia/_tests/build-job-matrix.py +204 -0
- chia/_tests/check_pytest_monitor_output.py +34 -0
- chia/_tests/check_sql_statements.py +72 -0
- chia/_tests/chia-start-sim +42 -0
- chia/_tests/clvm/__init__.py +0 -0
- chia/_tests/clvm/benchmark_costs.py +23 -0
- chia/_tests/clvm/coin_store.py +149 -0
- chia/_tests/clvm/test_chialisp_deserialization.py +101 -0
- chia/_tests/clvm/test_clvm_step.py +37 -0
- chia/_tests/clvm/test_condition_codes.py +13 -0
- chia/_tests/clvm/test_curry_and_treehash.py +55 -0
- chia/_tests/clvm/test_message_conditions.py +184 -0
- chia/_tests/clvm/test_program.py +150 -0
- chia/_tests/clvm/test_puzzle_compression.py +143 -0
- chia/_tests/clvm/test_puzzle_drivers.py +45 -0
- chia/_tests/clvm/test_puzzles.py +242 -0
- chia/_tests/clvm/test_singletons.py +540 -0
- chia/_tests/clvm/test_spend_sim.py +181 -0
- chia/_tests/cmds/__init__.py +0 -0
- chia/_tests/cmds/cmd_test_utils.py +469 -0
- chia/_tests/cmds/config.py +3 -0
- chia/_tests/cmds/conftest.py +23 -0
- chia/_tests/cmds/test_click_types.py +200 -0
- chia/_tests/cmds/test_cmd_framework.py +620 -0
- chia/_tests/cmds/test_cmds_util.py +97 -0
- chia/_tests/cmds/test_daemon.py +92 -0
- chia/_tests/cmds/test_dev_gh.py +131 -0
- chia/_tests/cmds/test_farm_cmd.py +66 -0
- chia/_tests/cmds/test_show.py +116 -0
- chia/_tests/cmds/test_sim.py +207 -0
- chia/_tests/cmds/test_timelock_args.py +75 -0
- chia/_tests/cmds/test_tx_config_args.py +154 -0
- chia/_tests/cmds/testing_classes.py +59 -0
- chia/_tests/cmds/wallet/__init__.py +0 -0
- chia/_tests/cmds/wallet/test_consts.py +47 -0
- chia/_tests/cmds/wallet/test_dao.py +565 -0
- chia/_tests/cmds/wallet/test_did.py +403 -0
- chia/_tests/cmds/wallet/test_nft.py +471 -0
- chia/_tests/cmds/wallet/test_notifications.py +124 -0
- chia/_tests/cmds/wallet/test_offer.toffer +1 -0
- chia/_tests/cmds/wallet/test_tx_decorators.py +27 -0
- chia/_tests/cmds/wallet/test_vcs.py +400 -0
- chia/_tests/cmds/wallet/test_wallet.py +1125 -0
- chia/_tests/cmds/wallet/test_wallet_check.py +109 -0
- chia/_tests/conftest.py +1419 -0
- chia/_tests/connection_utils.py +125 -0
- chia/_tests/core/__init__.py +0 -0
- chia/_tests/core/cmds/__init__.py +0 -0
- chia/_tests/core/cmds/test_beta.py +382 -0
- chia/_tests/core/cmds/test_keys.py +1734 -0
- chia/_tests/core/cmds/test_wallet.py +126 -0
- chia/_tests/core/config.py +3 -0
- chia/_tests/core/consensus/__init__.py +0 -0
- chia/_tests/core/consensus/test_block_creation.py +54 -0
- chia/_tests/core/consensus/test_pot_iterations.py +117 -0
- chia/_tests/core/custom_types/__init__.py +0 -0
- chia/_tests/core/custom_types/test_coin.py +107 -0
- chia/_tests/core/custom_types/test_proof_of_space.py +144 -0
- chia/_tests/core/custom_types/test_spend_bundle.py +70 -0
- chia/_tests/core/daemon/__init__.py +0 -0
- chia/_tests/core/daemon/config.py +4 -0
- chia/_tests/core/daemon/test_daemon.py +2128 -0
- chia/_tests/core/daemon/test_daemon_register.py +109 -0
- chia/_tests/core/daemon/test_keychain_proxy.py +101 -0
- chia/_tests/core/data_layer/__init__.py +0 -0
- chia/_tests/core/data_layer/config.py +5 -0
- chia/_tests/core/data_layer/conftest.py +106 -0
- chia/_tests/core/data_layer/test_data_cli.py +56 -0
- chia/_tests/core/data_layer/test_data_layer.py +83 -0
- chia/_tests/core/data_layer/test_data_layer_util.py +218 -0
- chia/_tests/core/data_layer/test_data_rpc.py +3847 -0
- chia/_tests/core/data_layer/test_data_store.py +2424 -0
- chia/_tests/core/data_layer/test_data_store_schema.py +381 -0
- chia/_tests/core/data_layer/test_plugin.py +91 -0
- chia/_tests/core/data_layer/util.py +233 -0
- chia/_tests/core/farmer/__init__.py +0 -0
- chia/_tests/core/farmer/config.py +3 -0
- chia/_tests/core/farmer/test_farmer_api.py +103 -0
- chia/_tests/core/full_node/__init__.py +0 -0
- chia/_tests/core/full_node/config.py +4 -0
- chia/_tests/core/full_node/dos/__init__.py +0 -0
- chia/_tests/core/full_node/dos/config.py +3 -0
- chia/_tests/core/full_node/full_sync/__init__.py +0 -0
- chia/_tests/core/full_node/full_sync/config.py +4 -0
- chia/_tests/core/full_node/full_sync/test_full_sync.py +443 -0
- chia/_tests/core/full_node/ram_db.py +27 -0
- chia/_tests/core/full_node/stores/__init__.py +0 -0
- chia/_tests/core/full_node/stores/config.py +4 -0
- chia/_tests/core/full_node/stores/test_block_store.py +590 -0
- chia/_tests/core/full_node/stores/test_coin_store.py +897 -0
- chia/_tests/core/full_node/stores/test_full_node_store.py +1219 -0
- chia/_tests/core/full_node/stores/test_hint_store.py +229 -0
- chia/_tests/core/full_node/stores/test_sync_store.py +135 -0
- chia/_tests/core/full_node/test_address_manager.py +588 -0
- chia/_tests/core/full_node/test_block_height_map.py +556 -0
- chia/_tests/core/full_node/test_conditions.py +556 -0
- chia/_tests/core/full_node/test_full_node.py +2700 -0
- chia/_tests/core/full_node/test_generator_tools.py +82 -0
- chia/_tests/core/full_node/test_hint_management.py +104 -0
- chia/_tests/core/full_node/test_node_load.py +34 -0
- chia/_tests/core/full_node/test_performance.py +179 -0
- chia/_tests/core/full_node/test_subscriptions.py +492 -0
- chia/_tests/core/full_node/test_transactions.py +203 -0
- chia/_tests/core/full_node/test_tx_processing_queue.py +155 -0
- chia/_tests/core/large_block.py +2388 -0
- chia/_tests/core/make_block_generator.py +70 -0
- chia/_tests/core/mempool/__init__.py +0 -0
- chia/_tests/core/mempool/config.py +4 -0
- chia/_tests/core/mempool/test_mempool.py +3255 -0
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +104 -0
- chia/_tests/core/mempool/test_mempool_fee_protocol.py +55 -0
- chia/_tests/core/mempool/test_mempool_item_queries.py +190 -0
- chia/_tests/core/mempool/test_mempool_manager.py +2084 -0
- chia/_tests/core/mempool/test_mempool_performance.py +64 -0
- chia/_tests/core/mempool/test_singleton_fast_forward.py +567 -0
- chia/_tests/core/node_height.py +28 -0
- chia/_tests/core/server/__init__.py +0 -0
- chia/_tests/core/server/config.py +3 -0
- chia/_tests/core/server/flood.py +84 -0
- chia/_tests/core/server/serve.py +135 -0
- chia/_tests/core/server/test_api_protocol.py +21 -0
- chia/_tests/core/server/test_capabilities.py +66 -0
- chia/_tests/core/server/test_dos.py +319 -0
- chia/_tests/core/server/test_event_loop.py +109 -0
- chia/_tests/core/server/test_loop.py +294 -0
- chia/_tests/core/server/test_node_discovery.py +73 -0
- chia/_tests/core/server/test_rate_limits.py +482 -0
- chia/_tests/core/server/test_server.py +226 -0
- chia/_tests/core/server/test_upnp.py +8 -0
- chia/_tests/core/services/__init__.py +0 -0
- chia/_tests/core/services/config.py +3 -0
- chia/_tests/core/services/test_services.py +188 -0
- chia/_tests/core/ssl/__init__.py +0 -0
- chia/_tests/core/ssl/config.py +3 -0
- chia/_tests/core/ssl/test_ssl.py +202 -0
- chia/_tests/core/test_coins.py +33 -0
- chia/_tests/core/test_cost_calculation.py +313 -0
- chia/_tests/core/test_crawler.py +175 -0
- chia/_tests/core/test_crawler_rpc.py +53 -0
- chia/_tests/core/test_daemon_rpc.py +24 -0
- chia/_tests/core/test_db_conversion.py +130 -0
- chia/_tests/core/test_db_validation.py +162 -0
- chia/_tests/core/test_farmer_harvester_rpc.py +505 -0
- chia/_tests/core/test_filter.py +35 -0
- chia/_tests/core/test_full_node_rpc.py +768 -0
- chia/_tests/core/test_merkle_set.py +343 -0
- chia/_tests/core/test_program.py +47 -0
- chia/_tests/core/test_rpc_util.py +86 -0
- chia/_tests/core/test_seeder.py +420 -0
- chia/_tests/core/test_setproctitle.py +13 -0
- chia/_tests/core/util/__init__.py +0 -0
- chia/_tests/core/util/config.py +4 -0
- chia/_tests/core/util/test_block_cache.py +44 -0
- chia/_tests/core/util/test_cached_bls.py +57 -0
- chia/_tests/core/util/test_config.py +337 -0
- chia/_tests/core/util/test_file_keyring_synchronization.py +105 -0
- chia/_tests/core/util/test_files.py +391 -0
- chia/_tests/core/util/test_jsonify.py +146 -0
- chia/_tests/core/util/test_keychain.py +522 -0
- chia/_tests/core/util/test_keyring_wrapper.py +491 -0
- chia/_tests/core/util/test_lockfile.py +380 -0
- chia/_tests/core/util/test_log_exceptions.py +187 -0
- chia/_tests/core/util/test_lru_cache.py +56 -0
- chia/_tests/core/util/test_significant_bits.py +40 -0
- chia/_tests/core/util/test_streamable.py +883 -0
- chia/_tests/db/__init__.py +0 -0
- chia/_tests/db/test_db_wrapper.py +566 -0
- chia/_tests/environments/__init__.py +0 -0
- chia/_tests/environments/common.py +35 -0
- chia/_tests/environments/full_node.py +47 -0
- chia/_tests/environments/wallet.py +429 -0
- chia/_tests/ether.py +19 -0
- chia/_tests/farmer_harvester/__init__.py +0 -0
- chia/_tests/farmer_harvester/config.py +3 -0
- chia/_tests/farmer_harvester/test_farmer.py +1264 -0
- chia/_tests/farmer_harvester/test_farmer_harvester.py +292 -0
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +131 -0
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +528 -0
- chia/_tests/farmer_harvester/test_third_party_harvesters_data.json +29 -0
- chia/_tests/fee_estimation/__init__.py +0 -0
- chia/_tests/fee_estimation/config.py +3 -0
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +262 -0
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +287 -0
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +144 -0
- chia/_tests/fee_estimation/test_mempoolitem_height_added.py +146 -0
- chia/_tests/generator/__init__.py +0 -0
- chia/_tests/generator/puzzles/__init__.py +0 -0
- chia/_tests/generator/puzzles/test_generator_deserialize.clsp +3 -0
- chia/_tests/generator/puzzles/test_generator_deserialize.clsp.hex +1 -0
- chia/_tests/generator/puzzles/test_multiple_generator_input_arguments.clsp +19 -0
- chia/_tests/generator/puzzles/test_multiple_generator_input_arguments.clsp.hex +1 -0
- chia/_tests/generator/test_compression.py +201 -0
- chia/_tests/generator/test_generator_types.py +44 -0
- chia/_tests/generator/test_rom.py +180 -0
- chia/_tests/plot_sync/__init__.py +0 -0
- chia/_tests/plot_sync/config.py +3 -0
- chia/_tests/plot_sync/test_delta.py +101 -0
- chia/_tests/plot_sync/test_plot_sync.py +618 -0
- chia/_tests/plot_sync/test_receiver.py +451 -0
- chia/_tests/plot_sync/test_sender.py +116 -0
- chia/_tests/plot_sync/test_sync_simulated.py +451 -0
- chia/_tests/plot_sync/util.py +68 -0
- chia/_tests/plotting/__init__.py +0 -0
- chia/_tests/plotting/config.py +3 -0
- chia/_tests/plotting/test_plot_manager.py +781 -0
- chia/_tests/plotting/util.py +12 -0
- chia/_tests/pools/__init__.py +0 -0
- chia/_tests/pools/config.py +5 -0
- chia/_tests/pools/test_pool_cli_parsing.py +128 -0
- chia/_tests/pools/test_pool_cmdline.py +1001 -0
- chia/_tests/pools/test_pool_config.py +42 -0
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +397 -0
- chia/_tests/pools/test_pool_rpc.py +1123 -0
- chia/_tests/pools/test_pool_wallet.py +205 -0
- chia/_tests/pools/test_wallet_pool_store.py +161 -0
- chia/_tests/process_junit.py +348 -0
- chia/_tests/rpc/__init__.py +0 -0
- chia/_tests/rpc/test_rpc_client.py +138 -0
- chia/_tests/rpc/test_rpc_server.py +183 -0
- chia/_tests/simulation/__init__.py +0 -0
- chia/_tests/simulation/config.py +6 -0
- chia/_tests/simulation/test_simulation.py +501 -0
- chia/_tests/simulation/test_simulator.py +232 -0
- chia/_tests/simulation/test_start_simulator.py +107 -0
- chia/_tests/testconfig.py +13 -0
- chia/_tests/timelord/__init__.py +0 -0
- chia/_tests/timelord/config.py +3 -0
- chia/_tests/timelord/test_new_peak.py +437 -0
- chia/_tests/timelord/test_timelord.py +11 -0
- chia/_tests/tools/1315537.json +170 -0
- chia/_tests/tools/1315544.json +160 -0
- chia/_tests/tools/1315630.json +150 -0
- chia/_tests/tools/300000.json +105 -0
- chia/_tests/tools/442734.json +140 -0
- chia/_tests/tools/466212.json +130 -0
- chia/_tests/tools/__init__.py +0 -0
- chia/_tests/tools/config.py +5 -0
- chia/_tests/tools/test-blockchain-db.sqlite +0 -0
- chia/_tests/tools/test_full_sync.py +30 -0
- chia/_tests/tools/test_legacy_keyring.py +82 -0
- chia/_tests/tools/test_run_block.py +128 -0
- chia/_tests/tools/test_virtual_project.py +591 -0
- chia/_tests/util/__init__.py +0 -0
- chia/_tests/util/benchmark_cost.py +170 -0
- chia/_tests/util/benchmarks.py +153 -0
- chia/_tests/util/bip39_test_vectors.json +148 -0
- chia/_tests/util/blockchain.py +134 -0
- chia/_tests/util/blockchain_mock.py +132 -0
- chia/_tests/util/build_network_protocol_files.py +302 -0
- chia/_tests/util/clvm_generator.bin +0 -0
- chia/_tests/util/config.py +3 -0
- chia/_tests/util/constants.py +20 -0
- chia/_tests/util/db_connection.py +37 -0
- chia/_tests/util/full_sync.py +253 -0
- chia/_tests/util/gen_ssl_certs.py +114 -0
- chia/_tests/util/generator_tools_testing.py +45 -0
- chia/_tests/util/get_name_puzzle_conditions.py +52 -0
- chia/_tests/util/key_tool.py +36 -0
- chia/_tests/util/misc.py +675 -0
- chia/_tests/util/network_protocol_data.py +1072 -0
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +2701 -0
- chia/_tests/util/rpc.py +26 -0
- chia/_tests/util/run_block.py +163 -0
- chia/_tests/util/setup_nodes.py +481 -0
- chia/_tests/util/spend_sim.py +492 -0
- chia/_tests/util/split_managers.py +102 -0
- chia/_tests/util/temp_file.py +14 -0
- chia/_tests/util/test_action_scope.py +144 -0
- chia/_tests/util/test_async_pool.py +366 -0
- chia/_tests/util/test_build_job_matrix.py +42 -0
- chia/_tests/util/test_build_network_protocol_files.py +7 -0
- chia/_tests/util/test_chia_version.py +50 -0
- chia/_tests/util/test_collection.py +11 -0
- chia/_tests/util/test_condition_tools.py +229 -0
- chia/_tests/util/test_config.py +426 -0
- chia/_tests/util/test_dump_keyring.py +60 -0
- chia/_tests/util/test_errors.py +10 -0
- chia/_tests/util/test_full_block_utils.py +279 -0
- chia/_tests/util/test_installed.py +20 -0
- chia/_tests/util/test_limited_semaphore.py +53 -0
- chia/_tests/util/test_logging_filter.py +42 -0
- chia/_tests/util/test_misc.py +445 -0
- chia/_tests/util/test_network.py +73 -0
- chia/_tests/util/test_network_protocol_files.py +578 -0
- chia/_tests/util/test_network_protocol_json.py +267 -0
- chia/_tests/util/test_network_protocol_test.py +256 -0
- chia/_tests/util/test_paginator.py +71 -0
- chia/_tests/util/test_pprint.py +17 -0
- chia/_tests/util/test_priority_mutex.py +488 -0
- chia/_tests/util/test_recursive_replace.py +116 -0
- chia/_tests/util/test_replace_str_to_bytes.py +137 -0
- chia/_tests/util/test_service_groups.py +15 -0
- chia/_tests/util/test_ssl_check.py +31 -0
- chia/_tests/util/test_testnet_overrides.py +19 -0
- chia/_tests/util/test_tests_misc.py +38 -0
- chia/_tests/util/test_timing.py +37 -0
- chia/_tests/util/test_trusted_peer.py +51 -0
- chia/_tests/util/time_out_assert.py +191 -0
- chia/_tests/wallet/__init__.py +0 -0
- chia/_tests/wallet/cat_wallet/__init__.py +0 -0
- chia/_tests/wallet/cat_wallet/config.py +4 -0
- chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +468 -0
- chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +69 -0
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +1826 -0
- chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +291 -0
- chia/_tests/wallet/cat_wallet/test_trades.py +2600 -0
- chia/_tests/wallet/clawback/__init__.py +0 -0
- chia/_tests/wallet/clawback/config.py +3 -0
- chia/_tests/wallet/clawback/test_clawback_decorator.py +78 -0
- chia/_tests/wallet/clawback/test_clawback_lifecycle.py +292 -0
- chia/_tests/wallet/clawback/test_clawback_metadata.py +50 -0
- chia/_tests/wallet/config.py +4 -0
- chia/_tests/wallet/conftest.py +278 -0
- chia/_tests/wallet/dao_wallet/__init__.py +0 -0
- chia/_tests/wallet/dao_wallet/config.py +3 -0
- chia/_tests/wallet/dao_wallet/test_dao_clvm.py +1330 -0
- chia/_tests/wallet/dao_wallet/test_dao_wallets.py +3488 -0
- chia/_tests/wallet/db_wallet/__init__.py +0 -0
- chia/_tests/wallet/db_wallet/config.py +3 -0
- chia/_tests/wallet/db_wallet/test_db_graftroot.py +141 -0
- chia/_tests/wallet/db_wallet/test_dl_offers.py +491 -0
- chia/_tests/wallet/db_wallet/test_dl_wallet.py +823 -0
- chia/_tests/wallet/did_wallet/__init__.py +0 -0
- chia/_tests/wallet/did_wallet/config.py +4 -0
- chia/_tests/wallet/did_wallet/test_did.py +2284 -0
- chia/_tests/wallet/nft_wallet/__init__.py +0 -0
- chia/_tests/wallet/nft_wallet/config.py +4 -0
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1493 -0
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +1024 -0
- chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +375 -0
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +1209 -0
- chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +172 -0
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +2584 -0
- chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +70 -0
- chia/_tests/wallet/rpc/__init__.py +0 -0
- chia/_tests/wallet/rpc/config.py +4 -0
- chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +285 -0
- chia/_tests/wallet/rpc/test_wallet_rpc.py +3153 -0
- chia/_tests/wallet/simple_sync/__init__.py +0 -0
- chia/_tests/wallet/simple_sync/config.py +3 -0
- chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +718 -0
- chia/_tests/wallet/sync/__init__.py +0 -0
- chia/_tests/wallet/sync/config.py +4 -0
- chia/_tests/wallet/sync/test_wallet_sync.py +1692 -0
- chia/_tests/wallet/test_address_type.py +189 -0
- chia/_tests/wallet/test_bech32m.py +45 -0
- chia/_tests/wallet/test_clvm_streamable.py +244 -0
- chia/_tests/wallet/test_coin_management.py +354 -0
- chia/_tests/wallet/test_coin_selection.py +588 -0
- chia/_tests/wallet/test_conditions.py +400 -0
- chia/_tests/wallet/test_debug_spend_bundle.py +218 -0
- chia/_tests/wallet/test_new_wallet_protocol.py +1174 -0
- chia/_tests/wallet/test_nft_store.py +192 -0
- chia/_tests/wallet/test_notifications.py +196 -0
- chia/_tests/wallet/test_offer_parsing_performance.py +48 -0
- chia/_tests/wallet/test_puzzle_store.py +132 -0
- chia/_tests/wallet/test_sign_coin_spends.py +159 -0
- chia/_tests/wallet/test_signer_protocol.py +947 -0
- chia/_tests/wallet/test_singleton.py +122 -0
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +772 -0
- chia/_tests/wallet/test_singleton_store.py +152 -0
- chia/_tests/wallet/test_taproot.py +19 -0
- chia/_tests/wallet/test_transaction_store.py +945 -0
- chia/_tests/wallet/test_util.py +185 -0
- chia/_tests/wallet/test_wallet.py +2139 -0
- chia/_tests/wallet/test_wallet_action_scope.py +85 -0
- chia/_tests/wallet/test_wallet_blockchain.py +111 -0
- chia/_tests/wallet/test_wallet_coin_store.py +1002 -0
- chia/_tests/wallet/test_wallet_interested_store.py +43 -0
- chia/_tests/wallet/test_wallet_key_val_store.py +40 -0
- chia/_tests/wallet/test_wallet_node.py +780 -0
- chia/_tests/wallet/test_wallet_retry.py +95 -0
- chia/_tests/wallet/test_wallet_state_manager.py +259 -0
- chia/_tests/wallet/test_wallet_test_framework.py +275 -0
- chia/_tests/wallet/test_wallet_trade_store.py +218 -0
- chia/_tests/wallet/test_wallet_user_store.py +34 -0
- chia/_tests/wallet/test_wallet_utils.py +156 -0
- chia/_tests/wallet/vc_wallet/__init__.py +0 -0
- chia/_tests/wallet/vc_wallet/config.py +3 -0
- chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +70 -0
- chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +883 -0
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +830 -0
- chia/_tests/wallet/wallet_block_tools.py +327 -0
- chia/_tests/weight_proof/__init__.py +0 -0
- chia/_tests/weight_proof/config.py +3 -0
- chia/_tests/weight_proof/test_weight_proof.py +528 -0
- chia/apis.py +19 -0
- chia/clvm/__init__.py +0 -0
- chia/cmds/__init__.py +0 -0
- chia/cmds/beta.py +184 -0
- chia/cmds/beta_funcs.py +137 -0
- chia/cmds/check_wallet_db.py +420 -0
- chia/cmds/chia.py +151 -0
- chia/cmds/cmd_classes.py +323 -0
- chia/cmds/cmd_helpers.py +242 -0
- chia/cmds/cmds_util.py +488 -0
- chia/cmds/coin_funcs.py +275 -0
- chia/cmds/coins.py +182 -0
- chia/cmds/completion.py +49 -0
- chia/cmds/configure.py +332 -0
- chia/cmds/dao.py +1064 -0
- chia/cmds/dao_funcs.py +598 -0
- chia/cmds/data.py +708 -0
- chia/cmds/data_funcs.py +385 -0
- chia/cmds/db.py +87 -0
- chia/cmds/db_backup_func.py +77 -0
- chia/cmds/db_upgrade_func.py +452 -0
- chia/cmds/db_validate_func.py +184 -0
- chia/cmds/dev.py +18 -0
- chia/cmds/farm.py +100 -0
- chia/cmds/farm_funcs.py +200 -0
- chia/cmds/gh.py +275 -0
- chia/cmds/init.py +63 -0
- chia/cmds/init_funcs.py +367 -0
- chia/cmds/installers.py +131 -0
- chia/cmds/keys.py +527 -0
- chia/cmds/keys_funcs.py +863 -0
- chia/cmds/netspace.py +50 -0
- chia/cmds/netspace_funcs.py +54 -0
- chia/cmds/options.py +32 -0
- chia/cmds/param_types.py +238 -0
- chia/cmds/passphrase.py +131 -0
- chia/cmds/passphrase_funcs.py +292 -0
- chia/cmds/peer.py +51 -0
- chia/cmds/peer_funcs.py +129 -0
- chia/cmds/plotnft.py +260 -0
- chia/cmds/plotnft_funcs.py +405 -0
- chia/cmds/plots.py +230 -0
- chia/cmds/plotters.py +18 -0
- chia/cmds/rpc.py +208 -0
- chia/cmds/show.py +72 -0
- chia/cmds/show_funcs.py +215 -0
- chia/cmds/signer.py +296 -0
- chia/cmds/sim.py +225 -0
- chia/cmds/sim_funcs.py +509 -0
- chia/cmds/start.py +24 -0
- chia/cmds/start_funcs.py +109 -0
- chia/cmds/stop.py +62 -0
- chia/cmds/units.py +9 -0
- chia/cmds/wallet.py +1901 -0
- chia/cmds/wallet_funcs.py +1874 -0
- chia/consensus/__init__.py +0 -0
- chia/consensus/block_body_validation.py +562 -0
- chia/consensus/block_creation.py +546 -0
- chia/consensus/block_header_validation.py +1059 -0
- chia/consensus/block_record.py +31 -0
- chia/consensus/block_rewards.py +53 -0
- chia/consensus/blockchain.py +1087 -0
- chia/consensus/blockchain_interface.py +56 -0
- chia/consensus/coinbase.py +30 -0
- chia/consensus/condition_costs.py +9 -0
- chia/consensus/constants.py +49 -0
- chia/consensus/cost_calculator.py +15 -0
- chia/consensus/default_constants.py +89 -0
- chia/consensus/deficit.py +55 -0
- chia/consensus/difficulty_adjustment.py +412 -0
- chia/consensus/find_fork_point.py +111 -0
- chia/consensus/full_block_to_block_record.py +167 -0
- chia/consensus/get_block_challenge.py +106 -0
- chia/consensus/get_block_generator.py +27 -0
- chia/consensus/make_sub_epoch_summary.py +210 -0
- chia/consensus/multiprocess_validation.py +268 -0
- chia/consensus/pos_quality.py +19 -0
- chia/consensus/pot_iterations.py +67 -0
- chia/consensus/puzzles/__init__.py +0 -0
- chia/consensus/puzzles/chialisp_deserialisation.clsp +69 -0
- chia/consensus/puzzles/chialisp_deserialisation.clsp.hex +1 -0
- chia/consensus/puzzles/rom_bootstrap_generator.clsp +37 -0
- chia/consensus/puzzles/rom_bootstrap_generator.clsp.hex +1 -0
- chia/consensus/vdf_info_computation.py +156 -0
- chia/daemon/__init__.py +0 -0
- chia/daemon/client.py +252 -0
- chia/daemon/keychain_proxy.py +502 -0
- chia/daemon/keychain_server.py +365 -0
- chia/daemon/server.py +1606 -0
- chia/daemon/windows_signal.py +56 -0
- chia/data_layer/__init__.py +0 -0
- chia/data_layer/data_layer.py +1291 -0
- chia/data_layer/data_layer_api.py +33 -0
- chia/data_layer/data_layer_errors.py +50 -0
- chia/data_layer/data_layer_server.py +170 -0
- chia/data_layer/data_layer_util.py +985 -0
- chia/data_layer/data_layer_wallet.py +1311 -0
- chia/data_layer/data_store.py +2267 -0
- chia/data_layer/dl_wallet_store.py +407 -0
- chia/data_layer/download_data.py +389 -0
- chia/data_layer/puzzles/__init__.py +0 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp +100 -0
- chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +1 -0
- chia/data_layer/s3_plugin_config.yml +33 -0
- chia/data_layer/s3_plugin_service.py +468 -0
- chia/data_layer/util/__init__.py +0 -0
- chia/data_layer/util/benchmark.py +107 -0
- chia/data_layer/util/plugin.py +40 -0
- chia/farmer/__init__.py +0 -0
- chia/farmer/farmer.py +923 -0
- chia/farmer/farmer_api.py +820 -0
- chia/full_node/__init__.py +0 -0
- chia/full_node/bitcoin_fee_estimator.py +85 -0
- chia/full_node/block_height_map.py +271 -0
- chia/full_node/block_store.py +576 -0
- chia/full_node/bundle_tools.py +19 -0
- chia/full_node/coin_store.py +647 -0
- chia/full_node/fee_estimate.py +54 -0
- chia/full_node/fee_estimate_store.py +24 -0
- chia/full_node/fee_estimation.py +92 -0
- chia/full_node/fee_estimator.py +90 -0
- chia/full_node/fee_estimator_constants.py +38 -0
- chia/full_node/fee_estimator_interface.py +42 -0
- chia/full_node/fee_history.py +25 -0
- chia/full_node/fee_tracker.py +564 -0
- chia/full_node/full_node.py +3327 -0
- chia/full_node/full_node_api.py +2025 -0
- chia/full_node/full_node_store.py +1033 -0
- chia/full_node/hint_management.py +56 -0
- chia/full_node/hint_store.py +93 -0
- chia/full_node/mempool.py +589 -0
- chia/full_node/mempool_check_conditions.py +146 -0
- chia/full_node/mempool_manager.py +853 -0
- chia/full_node/pending_tx_cache.py +112 -0
- chia/full_node/puzzles/__init__.py +0 -0
- chia/full_node/puzzles/block_program_zero.clsp +14 -0
- chia/full_node/puzzles/block_program_zero.clsp.hex +1 -0
- chia/full_node/puzzles/decompress_coin_spend_entry.clsp +5 -0
- chia/full_node/puzzles/decompress_coin_spend_entry.clsp.hex +1 -0
- chia/full_node/puzzles/decompress_coin_spend_entry_with_prefix.clsp +7 -0
- chia/full_node/puzzles/decompress_coin_spend_entry_with_prefix.clsp.hex +1 -0
- chia/full_node/puzzles/decompress_puzzle.clsp +6 -0
- chia/full_node/puzzles/decompress_puzzle.clsp.hex +1 -0
- chia/full_node/signage_point.py +16 -0
- chia/full_node/subscriptions.py +247 -0
- chia/full_node/sync_store.py +146 -0
- chia/full_node/tx_processing_queue.py +78 -0
- chia/full_node/util/__init__.py +0 -0
- chia/full_node/weight_proof.py +1720 -0
- chia/harvester/__init__.py +0 -0
- chia/harvester/harvester.py +272 -0
- chia/harvester/harvester_api.py +380 -0
- chia/introducer/__init__.py +0 -0
- chia/introducer/introducer.py +122 -0
- chia/introducer/introducer_api.py +70 -0
- chia/legacy/__init__.py +0 -0
- chia/legacy/keyring.py +155 -0
- chia/plot_sync/__init__.py +0 -0
- chia/plot_sync/delta.py +61 -0
- chia/plot_sync/exceptions.py +56 -0
- chia/plot_sync/receiver.py +386 -0
- chia/plot_sync/sender.py +340 -0
- chia/plot_sync/util.py +43 -0
- chia/plotters/__init__.py +0 -0
- chia/plotters/bladebit.py +388 -0
- chia/plotters/chiapos.py +63 -0
- chia/plotters/madmax.py +224 -0
- chia/plotters/plotters.py +577 -0
- chia/plotters/plotters_util.py +133 -0
- chia/plotting/__init__.py +0 -0
- chia/plotting/cache.py +213 -0
- chia/plotting/check_plots.py +283 -0
- chia/plotting/create_plots.py +278 -0
- chia/plotting/manager.py +436 -0
- chia/plotting/util.py +336 -0
- chia/pools/__init__.py +0 -0
- chia/pools/pool_config.py +110 -0
- chia/pools/pool_puzzles.py +459 -0
- chia/pools/pool_wallet.py +933 -0
- chia/pools/pool_wallet_info.py +118 -0
- chia/pools/puzzles/__init__.py +0 -0
- chia/pools/puzzles/pool_member_innerpuz.clsp +70 -0
- chia/pools/puzzles/pool_member_innerpuz.clsp.hex +1 -0
- chia/pools/puzzles/pool_waitingroom_innerpuz.clsp +69 -0
- chia/pools/puzzles/pool_waitingroom_innerpuz.clsp.hex +1 -0
- chia/protocols/__init__.py +0 -0
- chia/protocols/farmer_protocol.py +102 -0
- chia/protocols/full_node_protocol.py +219 -0
- chia/protocols/harvester_protocol.py +216 -0
- chia/protocols/introducer_protocol.py +25 -0
- chia/protocols/pool_protocol.py +177 -0
- chia/protocols/protocol_message_types.py +139 -0
- chia/protocols/protocol_state_machine.py +87 -0
- chia/protocols/protocol_timing.py +8 -0
- chia/protocols/shared_protocol.py +86 -0
- chia/protocols/timelord_protocol.py +93 -0
- chia/protocols/wallet_protocol.py +401 -0
- chia/py.typed +0 -0
- chia/rpc/__init__.py +0 -0
- chia/rpc/crawler_rpc_api.py +80 -0
- chia/rpc/data_layer_rpc_api.py +644 -0
- chia/rpc/data_layer_rpc_client.py +188 -0
- chia/rpc/data_layer_rpc_util.py +58 -0
- chia/rpc/farmer_rpc_api.py +365 -0
- chia/rpc/farmer_rpc_client.py +86 -0
- chia/rpc/full_node_rpc_api.py +959 -0
- chia/rpc/full_node_rpc_client.py +292 -0
- chia/rpc/harvester_rpc_api.py +141 -0
- chia/rpc/harvester_rpc_client.py +54 -0
- chia/rpc/rpc_client.py +164 -0
- chia/rpc/rpc_server.py +521 -0
- chia/rpc/timelord_rpc_api.py +32 -0
- chia/rpc/util.py +93 -0
- chia/rpc/wallet_request_types.py +904 -0
- chia/rpc/wallet_rpc_api.py +4943 -0
- chia/rpc/wallet_rpc_client.py +1814 -0
- chia/seeder/__init__.py +0 -0
- chia/seeder/crawl_store.py +425 -0
- chia/seeder/crawler.py +410 -0
- chia/seeder/crawler_api.py +135 -0
- chia/seeder/dns_server.py +593 -0
- chia/seeder/peer_record.py +146 -0
- chia/seeder/start_crawler.py +92 -0
- chia/server/__init__.py +0 -0
- chia/server/address_manager.py +658 -0
- chia/server/address_manager_store.py +237 -0
- chia/server/api_protocol.py +116 -0
- chia/server/capabilities.py +24 -0
- chia/server/chia_policy.py +346 -0
- chia/server/introducer_peers.py +76 -0
- chia/server/node_discovery.py +714 -0
- chia/server/outbound_message.py +33 -0
- chia/server/rate_limit_numbers.py +214 -0
- chia/server/rate_limits.py +153 -0
- chia/server/server.py +741 -0
- chia/server/signal_handlers.py +120 -0
- chia/server/ssl_context.py +32 -0
- chia/server/start_data_layer.py +151 -0
- chia/server/start_farmer.py +98 -0
- chia/server/start_full_node.py +112 -0
- chia/server/start_harvester.py +93 -0
- chia/server/start_introducer.py +81 -0
- chia/server/start_service.py +316 -0
- chia/server/start_timelord.py +89 -0
- chia/server/start_wallet.py +113 -0
- chia/server/upnp.py +118 -0
- chia/server/ws_connection.py +766 -0
- chia/simulator/__init__.py +0 -0
- chia/simulator/add_blocks_in_batches.py +54 -0
- chia/simulator/block_tools.py +2054 -0
- chia/simulator/full_node_simulator.py +794 -0
- chia/simulator/keyring.py +128 -0
- chia/simulator/setup_services.py +506 -0
- chia/simulator/simulator_constants.py +13 -0
- chia/simulator/simulator_full_node_rpc_api.py +99 -0
- chia/simulator/simulator_full_node_rpc_client.py +60 -0
- chia/simulator/simulator_protocol.py +29 -0
- chia/simulator/simulator_test_tools.py +164 -0
- chia/simulator/socket.py +24 -0
- chia/simulator/ssl_certs.py +114 -0
- chia/simulator/ssl_certs_1.py +697 -0
- chia/simulator/ssl_certs_10.py +697 -0
- chia/simulator/ssl_certs_2.py +697 -0
- chia/simulator/ssl_certs_3.py +697 -0
- chia/simulator/ssl_certs_4.py +697 -0
- chia/simulator/ssl_certs_5.py +697 -0
- chia/simulator/ssl_certs_6.py +697 -0
- chia/simulator/ssl_certs_7.py +697 -0
- chia/simulator/ssl_certs_8.py +697 -0
- chia/simulator/ssl_certs_9.py +697 -0
- chia/simulator/start_simulator.py +143 -0
- chia/simulator/wallet_tools.py +246 -0
- chia/ssl/__init__.py +0 -0
- chia/ssl/chia_ca.crt +19 -0
- chia/ssl/chia_ca.key +28 -0
- chia/ssl/create_ssl.py +249 -0
- chia/ssl/dst_root_ca.pem +20 -0
- chia/timelord/__init__.py +0 -0
- chia/timelord/iters_from_block.py +50 -0
- chia/timelord/timelord.py +1226 -0
- chia/timelord/timelord_api.py +138 -0
- chia/timelord/timelord_launcher.py +190 -0
- chia/timelord/timelord_state.py +244 -0
- chia/timelord/types.py +22 -0
- chia/types/__init__.py +0 -0
- chia/types/aliases.py +35 -0
- chia/types/block_protocol.py +20 -0
- chia/types/blockchain_format/__init__.py +0 -0
- chia/types/blockchain_format/classgroup.py +5 -0
- chia/types/blockchain_format/coin.py +28 -0
- chia/types/blockchain_format/foliage.py +8 -0
- chia/types/blockchain_format/pool_target.py +5 -0
- chia/types/blockchain_format/program.py +269 -0
- chia/types/blockchain_format/proof_of_space.py +135 -0
- chia/types/blockchain_format/reward_chain_block.py +6 -0
- chia/types/blockchain_format/serialized_program.py +5 -0
- chia/types/blockchain_format/sized_bytes.py +11 -0
- chia/types/blockchain_format/slots.py +9 -0
- chia/types/blockchain_format/sub_epoch_summary.py +5 -0
- chia/types/blockchain_format/tree_hash.py +72 -0
- chia/types/blockchain_format/vdf.py +86 -0
- chia/types/clvm_cost.py +13 -0
- chia/types/coin_record.py +43 -0
- chia/types/coin_spend.py +115 -0
- chia/types/condition_opcodes.py +73 -0
- chia/types/condition_with_args.py +16 -0
- chia/types/eligible_coin_spends.py +365 -0
- chia/types/end_of_slot_bundle.py +5 -0
- chia/types/fee_rate.py +38 -0
- chia/types/full_block.py +5 -0
- chia/types/generator_types.py +13 -0
- chia/types/header_block.py +5 -0
- chia/types/internal_mempool_item.py +18 -0
- chia/types/mempool_inclusion_status.py +9 -0
- chia/types/mempool_item.py +85 -0
- chia/types/mempool_submission_status.py +30 -0
- chia/types/mojos.py +7 -0
- chia/types/peer_info.py +64 -0
- chia/types/signing_mode.py +29 -0
- chia/types/spend_bundle.py +30 -0
- chia/types/spend_bundle_conditions.py +7 -0
- chia/types/transaction_queue_entry.py +55 -0
- chia/types/unfinished_block.py +5 -0
- chia/types/unfinished_header_block.py +37 -0
- chia/types/validation_state.py +14 -0
- chia/types/weight_proof.py +49 -0
- chia/util/__init__.py +0 -0
- chia/util/action_scope.py +168 -0
- chia/util/async_pool.py +226 -0
- chia/util/augmented_chain.py +134 -0
- chia/util/batches.py +42 -0
- chia/util/bech32m.py +126 -0
- chia/util/beta_metrics.py +119 -0
- chia/util/block_cache.py +56 -0
- chia/util/byte_types.py +12 -0
- chia/util/check_fork_next_block.py +33 -0
- chia/util/chia_logging.py +144 -0
- chia/util/chia_version.py +33 -0
- chia/util/collection.py +17 -0
- chia/util/condition_tools.py +201 -0
- chia/util/config.py +367 -0
- chia/util/cpu.py +22 -0
- chia/util/db_synchronous.py +23 -0
- chia/util/db_version.py +32 -0
- chia/util/db_wrapper.py +430 -0
- chia/util/default_root.py +27 -0
- chia/util/dump_keyring.py +93 -0
- chia/util/english.txt +2048 -0
- chia/util/errors.py +353 -0
- chia/util/file_keyring.py +469 -0
- chia/util/files.py +97 -0
- chia/util/full_block_utils.py +345 -0
- chia/util/generator_tools.py +72 -0
- chia/util/hash.py +31 -0
- chia/util/initial-config.yaml +694 -0
- chia/util/inline_executor.py +26 -0
- chia/util/ints.py +19 -0
- chia/util/ip_address.py +39 -0
- chia/util/json_util.py +37 -0
- chia/util/keychain.py +676 -0
- chia/util/keyring_wrapper.py +327 -0
- chia/util/limited_semaphore.py +41 -0
- chia/util/lock.py +49 -0
- chia/util/log_exceptions.py +32 -0
- chia/util/logging.py +36 -0
- chia/util/lru_cache.py +31 -0
- chia/util/math.py +20 -0
- chia/util/network.py +182 -0
- chia/util/paginator.py +48 -0
- chia/util/path.py +31 -0
- chia/util/permissions.py +20 -0
- chia/util/prev_transaction_block.py +21 -0
- chia/util/priority_mutex.py +95 -0
- chia/util/profiler.py +197 -0
- chia/util/recursive_replace.py +24 -0
- chia/util/safe_cancel_task.py +16 -0
- chia/util/service_groups.py +47 -0
- chia/util/setproctitle.py +22 -0
- chia/util/significant_bits.py +32 -0
- chia/util/ssl_check.py +213 -0
- chia/util/streamable.py +642 -0
- chia/util/task_referencer.py +59 -0
- chia/util/task_timing.py +382 -0
- chia/util/timing.py +67 -0
- chia/util/vdf_prover.py +30 -0
- chia/util/virtual_project_analysis.py +540 -0
- chia/util/ws_message.py +66 -0
- chia/wallet/__init__.py +0 -0
- chia/wallet/cat_wallet/__init__.py +0 -0
- chia/wallet/cat_wallet/cat_constants.py +75 -0
- chia/wallet/cat_wallet/cat_info.py +47 -0
- chia/wallet/cat_wallet/cat_outer_puzzle.py +120 -0
- chia/wallet/cat_wallet/cat_utils.py +164 -0
- chia/wallet/cat_wallet/cat_wallet.py +855 -0
- chia/wallet/cat_wallet/dao_cat_info.py +28 -0
- chia/wallet/cat_wallet/dao_cat_wallet.py +669 -0
- chia/wallet/cat_wallet/lineage_store.py +74 -0
- chia/wallet/cat_wallet/puzzles/__init__.py +0 -0
- chia/wallet/cat_wallet/puzzles/cat_truths.clib +31 -0
- chia/wallet/cat_wallet/puzzles/cat_v2.clsp +397 -0
- chia/wallet/cat_wallet/puzzles/cat_v2.clsp.hex +1 -0
- chia/wallet/cat_wallet/puzzles/delegated_tail.clsp +25 -0
- chia/wallet/cat_wallet/puzzles/delegated_tail.clsp.hex +1 -0
- chia/wallet/cat_wallet/puzzles/everything_with_signature.clsp +15 -0
- chia/wallet/cat_wallet/puzzles/everything_with_signature.clsp.hex +1 -0
- chia/wallet/cat_wallet/puzzles/genesis_by_coin_id.clsp +26 -0
- chia/wallet/cat_wallet/puzzles/genesis_by_coin_id.clsp.hex +1 -0
- chia/wallet/cat_wallet/puzzles/genesis_by_coin_id_or_singleton.clsp +42 -0
- chia/wallet/cat_wallet/puzzles/genesis_by_coin_id_or_singleton.clsp.hex +1 -0
- chia/wallet/cat_wallet/puzzles/genesis_by_puzzle_hash.clsp +24 -0
- chia/wallet/cat_wallet/puzzles/genesis_by_puzzle_hash.clsp.hex +1 -0
- chia/wallet/coin_selection.py +188 -0
- chia/wallet/conditions.py +1512 -0
- chia/wallet/dao_wallet/__init__.py +0 -0
- chia/wallet/dao_wallet/dao_info.py +61 -0
- chia/wallet/dao_wallet/dao_utils.py +811 -0
- chia/wallet/dao_wallet/dao_wallet.py +2119 -0
- chia/wallet/db_wallet/__init__.py +0 -0
- chia/wallet/db_wallet/db_wallet_puzzles.py +111 -0
- chia/wallet/derivation_record.py +30 -0
- chia/wallet/derive_keys.py +146 -0
- chia/wallet/did_wallet/__init__.py +0 -0
- chia/wallet/did_wallet/did_info.py +39 -0
- chia/wallet/did_wallet/did_wallet.py +1494 -0
- chia/wallet/did_wallet/did_wallet_puzzles.py +221 -0
- chia/wallet/did_wallet/puzzles/__init__.py +0 -0
- chia/wallet/did_wallet/puzzles/did_innerpuz.clsp +135 -0
- chia/wallet/did_wallet/puzzles/did_innerpuz.clsp.hex +1 -0
- chia/wallet/driver_protocol.py +26 -0
- chia/wallet/key_val_store.py +55 -0
- chia/wallet/lineage_proof.py +58 -0
- chia/wallet/nft_wallet/__init__.py +0 -0
- chia/wallet/nft_wallet/metadata_outer_puzzle.py +92 -0
- chia/wallet/nft_wallet/nft_info.py +120 -0
- chia/wallet/nft_wallet/nft_puzzles.py +305 -0
- chia/wallet/nft_wallet/nft_wallet.py +1687 -0
- chia/wallet/nft_wallet/ownership_outer_puzzle.py +101 -0
- chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +6 -0
- chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +1 -0
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +6 -0
- chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +1 -0
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +30 -0
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +1 -0
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +28 -0
- chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +1 -0
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +100 -0
- chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +1 -0
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +78 -0
- chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +1 -0
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +74 -0
- chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +1 -0
- chia/wallet/nft_wallet/singleton_outer_puzzle.py +101 -0
- chia/wallet/nft_wallet/transfer_program_puzzle.py +82 -0
- chia/wallet/nft_wallet/uncurry_nft.py +217 -0
- chia/wallet/notification_manager.py +117 -0
- chia/wallet/notification_store.py +178 -0
- chia/wallet/outer_puzzles.py +84 -0
- chia/wallet/payment.py +33 -0
- chia/wallet/puzzle_drivers.py +118 -0
- chia/wallet/puzzles/__init__.py +0 -0
- chia/wallet/puzzles/augmented_condition.clsp +13 -0
- chia/wallet/puzzles/augmented_condition.clsp.hex +1 -0
- chia/wallet/puzzles/clawback/__init__.py +0 -0
- chia/wallet/puzzles/clawback/drivers.py +188 -0
- chia/wallet/puzzles/clawback/metadata.py +38 -0
- chia/wallet/puzzles/clawback/puzzle_decorator.py +67 -0
- chia/wallet/puzzles/condition_codes.clib +77 -0
- chia/wallet/puzzles/curry-and-treehash.clib +102 -0
- chia/wallet/puzzles/curry.clib +135 -0
- chia/wallet/puzzles/curry_by_index.clib +16 -0
- chia/wallet/puzzles/dao_cat_eve.clsp +17 -0
- chia/wallet/puzzles/dao_cat_eve.clsp.hex +1 -0
- chia/wallet/puzzles/dao_cat_launcher.clsp +36 -0
- chia/wallet/puzzles/dao_cat_launcher.clsp.hex +1 -0
- chia/wallet/puzzles/dao_finished_state.clsp +35 -0
- chia/wallet/puzzles/dao_finished_state.clsp.hex +1 -0
- chia/wallet/puzzles/dao_finished_state.clsp.hex.sha256tree +1 -0
- chia/wallet/puzzles/dao_lockup.clsp +288 -0
- chia/wallet/puzzles/dao_lockup.clsp.hex +1 -0
- chia/wallet/puzzles/dao_lockup.clsp.hex.sha256tree +1 -0
- chia/wallet/puzzles/dao_proposal.clsp +377 -0
- chia/wallet/puzzles/dao_proposal.clsp.hex +1 -0
- chia/wallet/puzzles/dao_proposal.clsp.hex.sha256tree +1 -0
- chia/wallet/puzzles/dao_proposal_timer.clsp +78 -0
- chia/wallet/puzzles/dao_proposal_timer.clsp.hex +1 -0
- chia/wallet/puzzles/dao_proposal_timer.clsp.hex.sha256tree +1 -0
- chia/wallet/puzzles/dao_proposal_validator.clsp +87 -0
- chia/wallet/puzzles/dao_proposal_validator.clsp.hex +1 -0
- chia/wallet/puzzles/dao_proposal_validator.clsp.hex.sha256tree +1 -0
- chia/wallet/puzzles/dao_spend_p2_singleton_v2.clsp +240 -0
- chia/wallet/puzzles/dao_spend_p2_singleton_v2.clsp.hex +1 -0
- chia/wallet/puzzles/dao_spend_p2_singleton_v2.clsp.hex.sha256tree +1 -0
- chia/wallet/puzzles/dao_treasury.clsp +115 -0
- chia/wallet/puzzles/dao_treasury.clsp.hex +1 -0
- chia/wallet/puzzles/dao_update_proposal.clsp +44 -0
- chia/wallet/puzzles/dao_update_proposal.clsp.hex +1 -0
- chia/wallet/puzzles/deployed_puzzle_hashes.json +67 -0
- chia/wallet/puzzles/json.clib +25 -0
- chia/wallet/puzzles/load_clvm.py +161 -0
- chia/wallet/puzzles/merkle_utils.clib +18 -0
- chia/wallet/puzzles/notification.clsp +7 -0
- chia/wallet/puzzles/notification.clsp.hex +1 -0
- chia/wallet/puzzles/p2_1_of_n.clsp +22 -0
- chia/wallet/puzzles/p2_1_of_n.clsp.hex +1 -0
- chia/wallet/puzzles/p2_conditions.clsp +3 -0
- chia/wallet/puzzles/p2_conditions.clsp.hex +1 -0
- chia/wallet/puzzles/p2_conditions.py +26 -0
- chia/wallet/puzzles/p2_delegated_conditions.clsp +18 -0
- chia/wallet/puzzles/p2_delegated_conditions.clsp.hex +1 -0
- chia/wallet/puzzles/p2_delegated_conditions.py +21 -0
- chia/wallet/puzzles/p2_delegated_puzzle.clsp +19 -0
- chia/wallet/puzzles/p2_delegated_puzzle.clsp.hex +1 -0
- chia/wallet/puzzles/p2_delegated_puzzle.py +34 -0
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.clsp +91 -0
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.clsp.hex +1 -0
- chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +160 -0
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.clsp +108 -0
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.clsp.hex +1 -0
- chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +21 -0
- chia/wallet/puzzles/p2_parent.clsp +19 -0
- chia/wallet/puzzles/p2_parent.clsp.hex +1 -0
- chia/wallet/puzzles/p2_puzzle_hash.clsp +18 -0
- chia/wallet/puzzles/p2_puzzle_hash.clsp.hex +1 -0
- chia/wallet/puzzles/p2_puzzle_hash.py +27 -0
- chia/wallet/puzzles/p2_singleton.clsp +30 -0
- chia/wallet/puzzles/p2_singleton.clsp.hex +1 -0
- chia/wallet/puzzles/p2_singleton_aggregator.clsp +81 -0
- chia/wallet/puzzles/p2_singleton_aggregator.clsp.hex +1 -0
- chia/wallet/puzzles/p2_singleton_or_delayed_puzhash.clsp +50 -0
- chia/wallet/puzzles/p2_singleton_or_delayed_puzhash.clsp.hex +1 -0
- chia/wallet/puzzles/p2_singleton_via_delegated_puzzle.clsp +47 -0
- chia/wallet/puzzles/p2_singleton_via_delegated_puzzle.clsp.hex +1 -0
- chia/wallet/puzzles/puzzle_utils.py +34 -0
- chia/wallet/puzzles/settlement_payments.clsp +49 -0
- chia/wallet/puzzles/settlement_payments.clsp.hex +1 -0
- chia/wallet/puzzles/sha256tree.clib +11 -0
- chia/wallet/puzzles/singleton_launcher.clsp +16 -0
- chia/wallet/puzzles/singleton_launcher.clsp.hex +1 -0
- chia/wallet/puzzles/singleton_top_layer.clsp +177 -0
- chia/wallet/puzzles/singleton_top_layer.clsp.hex +1 -0
- chia/wallet/puzzles/singleton_top_layer.py +296 -0
- chia/wallet/puzzles/singleton_top_layer_v1_1.clsp +107 -0
- chia/wallet/puzzles/singleton_top_layer_v1_1.clsp.hex +1 -0
- chia/wallet/puzzles/singleton_top_layer_v1_1.py +345 -0
- chia/wallet/puzzles/singleton_truths.clib +21 -0
- chia/wallet/puzzles/tails.py +348 -0
- chia/wallet/puzzles/utility_macros.clib +48 -0
- chia/wallet/signer_protocol.py +125 -0
- chia/wallet/singleton.py +106 -0
- chia/wallet/singleton_record.py +30 -0
- chia/wallet/trade_manager.py +1102 -0
- chia/wallet/trade_record.py +67 -0
- chia/wallet/trading/__init__.py +0 -0
- chia/wallet/trading/offer.py +702 -0
- chia/wallet/trading/trade_status.py +13 -0
- chia/wallet/trading/trade_store.py +526 -0
- chia/wallet/transaction_record.py +158 -0
- chia/wallet/transaction_sorting.py +14 -0
- chia/wallet/uncurried_puzzle.py +17 -0
- chia/wallet/util/__init__.py +0 -0
- chia/wallet/util/address_type.py +55 -0
- chia/wallet/util/blind_signer_tl.py +164 -0
- chia/wallet/util/clvm_streamable.py +203 -0
- chia/wallet/util/compute_hints.py +66 -0
- chia/wallet/util/compute_memos.py +43 -0
- chia/wallet/util/curry_and_treehash.py +91 -0
- chia/wallet/util/debug_spend_bundle.py +232 -0
- chia/wallet/util/merkle_tree.py +100 -0
- chia/wallet/util/merkle_utils.py +102 -0
- chia/wallet/util/new_peak_queue.py +82 -0
- chia/wallet/util/notifications.py +12 -0
- chia/wallet/util/peer_request_cache.py +174 -0
- chia/wallet/util/pprint.py +39 -0
- chia/wallet/util/puzzle_compression.py +95 -0
- chia/wallet/util/puzzle_decorator.py +100 -0
- chia/wallet/util/puzzle_decorator_type.py +7 -0
- chia/wallet/util/query_filter.py +59 -0
- chia/wallet/util/transaction_type.py +23 -0
- chia/wallet/util/tx_config.py +158 -0
- chia/wallet/util/wallet_sync_utils.py +351 -0
- chia/wallet/util/wallet_types.py +72 -0
- chia/wallet/vc_wallet/__init__.py +0 -0
- chia/wallet/vc_wallet/cr_cat_drivers.py +664 -0
- chia/wallet/vc_wallet/cr_cat_wallet.py +877 -0
- chia/wallet/vc_wallet/cr_outer_puzzle.py +102 -0
- chia/wallet/vc_wallet/cr_puzzles/__init__.py +0 -0
- chia/wallet/vc_wallet/cr_puzzles/conditions_w_fee_announce.clsp +3 -0
- chia/wallet/vc_wallet/cr_puzzles/conditions_w_fee_announce.clsp.hex +1 -0
- chia/wallet/vc_wallet/cr_puzzles/credential_restriction.clsp +304 -0
- chia/wallet/vc_wallet/cr_puzzles/credential_restriction.clsp.hex +1 -0
- chia/wallet/vc_wallet/cr_puzzles/flag_proofs_checker.clsp +45 -0
- chia/wallet/vc_wallet/cr_puzzles/flag_proofs_checker.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_drivers.py +838 -0
- chia/wallet/vc_wallet/vc_puzzles/__init__.py +0 -0
- chia/wallet/vc_wallet/vc_puzzles/covenant_layer.clsp +30 -0
- chia/wallet/vc_wallet/vc_puzzles/covenant_layer.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/eml_covenant_morpher.clsp +75 -0
- chia/wallet/vc_wallet/vc_puzzles/eml_covenant_morpher.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/eml_transfer_program_covenant_adapter.clsp +32 -0
- chia/wallet/vc_wallet/vc_puzzles/eml_transfer_program_covenant_adapter.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/eml_update_metadata_with_DID.clsp +80 -0
- chia/wallet/vc_wallet/vc_puzzles/eml_update_metadata_with_DID.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/exigent_metadata_layer.clsp +163 -0
- chia/wallet/vc_wallet/vc_puzzles/exigent_metadata_layer.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/p2_announced_delegated_puzzle.clsp +16 -0
- chia/wallet/vc_wallet/vc_puzzles/p2_announced_delegated_puzzle.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/standard_vc_backdoor_puzzle.clsp +74 -0
- chia/wallet/vc_wallet/vc_puzzles/standard_vc_backdoor_puzzle.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/std_parent_morpher.clsp +23 -0
- chia/wallet/vc_wallet/vc_puzzles/std_parent_morpher.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_puzzles/viral_backdoor.clsp +64 -0
- chia/wallet/vc_wallet/vc_puzzles/viral_backdoor.clsp.hex +1 -0
- chia/wallet/vc_wallet/vc_store.py +263 -0
- chia/wallet/vc_wallet/vc_wallet.py +638 -0
- chia/wallet/wallet.py +698 -0
- chia/wallet/wallet_action_scope.py +96 -0
- chia/wallet/wallet_blockchain.py +244 -0
- chia/wallet/wallet_coin_record.py +72 -0
- chia/wallet/wallet_coin_store.py +351 -0
- chia/wallet/wallet_info.py +35 -0
- chia/wallet/wallet_interested_store.py +188 -0
- chia/wallet/wallet_nft_store.py +279 -0
- chia/wallet/wallet_node.py +1765 -0
- chia/wallet/wallet_node_api.py +207 -0
- chia/wallet/wallet_pool_store.py +119 -0
- chia/wallet/wallet_protocol.py +90 -0
- chia/wallet/wallet_puzzle_store.py +396 -0
- chia/wallet/wallet_retry_store.py +70 -0
- chia/wallet/wallet_singleton_store.py +259 -0
- chia/wallet/wallet_spend_bundle.py +25 -0
- chia/wallet/wallet_state_manager.py +2819 -0
- chia/wallet/wallet_transaction_store.py +496 -0
- chia/wallet/wallet_user_store.py +110 -0
- chia/wallet/wallet_weight_proof_handler.py +126 -0
- chia_blockchain-2.5.1rc1.dist-info/LICENSE +201 -0
- chia_blockchain-2.5.1rc1.dist-info/METADATA +156 -0
- chia_blockchain-2.5.1rc1.dist-info/RECORD +1042 -0
- chia_blockchain-2.5.1rc1.dist-info/WHEEL +4 -0
- chia_blockchain-2.5.1rc1.dist-info/entry_points.txt +17 -0
- mozilla-ca/cacert.pem +3611 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import Union
|
|
5
|
+
|
|
6
|
+
from chia.consensus.block_record import BlockRecord
|
|
7
|
+
from chia.consensus.blockchain_interface import BlockRecordsProtocol
|
|
8
|
+
from chia.consensus.constants import ConsensusConstants
|
|
9
|
+
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
10
|
+
from chia.types.full_block import FullBlock
|
|
11
|
+
from chia.types.header_block import HeaderBlock
|
|
12
|
+
from chia.types.unfinished_block import UnfinishedBlock
|
|
13
|
+
from chia.types.unfinished_header_block import UnfinishedHeaderBlock
|
|
14
|
+
from chia.util.ints import uint64
|
|
15
|
+
|
|
16
|
+
log = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def final_eos_is_already_included(
|
|
20
|
+
header_block: Union[UnfinishedHeaderBlock, UnfinishedBlock, HeaderBlock, FullBlock],
|
|
21
|
+
blocks: BlockRecordsProtocol,
|
|
22
|
+
sub_slot_iters: uint64,
|
|
23
|
+
) -> bool:
|
|
24
|
+
"""
|
|
25
|
+
Args:
|
|
26
|
+
header_block: An overflow block, with potentially missing information about the new sub slot
|
|
27
|
+
blocks: all blocks that have been included before header_block
|
|
28
|
+
sub_slot_iters: sub_slot_iters at the header_block
|
|
29
|
+
|
|
30
|
+
Returns: True iff the missing sub slot was already included in a previous block. Returns False if the sub
|
|
31
|
+
slot was not included yet, and therefore it is the responsibility of this block to include it
|
|
32
|
+
|
|
33
|
+
"""
|
|
34
|
+
if len(header_block.finished_sub_slots) > 0:
|
|
35
|
+
# We already have an included empty sub slot, which means the prev block is 2 sub slots behind.
|
|
36
|
+
return False
|
|
37
|
+
curr: BlockRecord = blocks.block_record(header_block.prev_header_hash)
|
|
38
|
+
|
|
39
|
+
# We also check if curr is close to header_block, which means it's in the same sub slot
|
|
40
|
+
seen_overflow_block = curr.overflow and (header_block.total_iters - curr.total_iters < sub_slot_iters // 2)
|
|
41
|
+
while not curr.first_in_sub_slot and not curr.height == 0:
|
|
42
|
+
if curr.overflow and header_block.total_iters - curr.total_iters < sub_slot_iters // 2:
|
|
43
|
+
seen_overflow_block = True
|
|
44
|
+
curr = blocks.block_record(curr.prev_hash)
|
|
45
|
+
|
|
46
|
+
if curr.first_in_sub_slot and seen_overflow_block:
|
|
47
|
+
# We have seen another overflow block in this slot (same as header_block), therefore there are no
|
|
48
|
+
# missing sub slots
|
|
49
|
+
return True
|
|
50
|
+
|
|
51
|
+
# We have not seen any overflow blocks, therefore header_block will have to include the missing sub slot in
|
|
52
|
+
# the future
|
|
53
|
+
return False
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def get_block_challenge(
|
|
57
|
+
constants: ConsensusConstants,
|
|
58
|
+
header_block: Union[UnfinishedHeaderBlock, UnfinishedBlock, HeaderBlock, FullBlock],
|
|
59
|
+
blocks: BlockRecordsProtocol,
|
|
60
|
+
genesis_block: bool,
|
|
61
|
+
overflow: bool,
|
|
62
|
+
skip_overflow_last_ss_validation: bool,
|
|
63
|
+
) -> bytes32:
|
|
64
|
+
if len(header_block.finished_sub_slots) > 0:
|
|
65
|
+
if overflow:
|
|
66
|
+
# New sub-slot with overflow block
|
|
67
|
+
if skip_overflow_last_ss_validation:
|
|
68
|
+
# In this case, we are missing the final sub-slot bundle (it's not finished yet), however
|
|
69
|
+
# There is a whole empty slot before this block is infused
|
|
70
|
+
challenge: bytes32 = header_block.finished_sub_slots[-1].challenge_chain.get_hash()
|
|
71
|
+
else:
|
|
72
|
+
challenge = header_block.finished_sub_slots[
|
|
73
|
+
-1
|
|
74
|
+
].challenge_chain.challenge_chain_end_of_slot_vdf.challenge
|
|
75
|
+
else:
|
|
76
|
+
# No overflow, new slot with a new challenge
|
|
77
|
+
challenge = header_block.finished_sub_slots[-1].challenge_chain.get_hash()
|
|
78
|
+
else:
|
|
79
|
+
if genesis_block:
|
|
80
|
+
challenge = constants.GENESIS_CHALLENGE
|
|
81
|
+
else:
|
|
82
|
+
if overflow:
|
|
83
|
+
if skip_overflow_last_ss_validation:
|
|
84
|
+
# Overflow infusion without the new slot, so get the last challenge
|
|
85
|
+
challenges_to_look_for = 1
|
|
86
|
+
else:
|
|
87
|
+
# Overflow infusion, so get the second to last challenge. skip_overflow_last_ss_validation is False,
|
|
88
|
+
# Which means no sub slots are omitted
|
|
89
|
+
challenges_to_look_for = 2
|
|
90
|
+
else:
|
|
91
|
+
challenges_to_look_for = 1
|
|
92
|
+
reversed_challenge_hashes: list[bytes32] = []
|
|
93
|
+
curr: BlockRecord = blocks.block_record(header_block.prev_header_hash)
|
|
94
|
+
while len(reversed_challenge_hashes) < challenges_to_look_for:
|
|
95
|
+
if curr.first_in_sub_slot:
|
|
96
|
+
assert curr.finished_challenge_slot_hashes is not None
|
|
97
|
+
reversed_challenge_hashes += reversed(curr.finished_challenge_slot_hashes)
|
|
98
|
+
if len(reversed_challenge_hashes) >= challenges_to_look_for:
|
|
99
|
+
break
|
|
100
|
+
if curr.height == 0:
|
|
101
|
+
assert curr.finished_challenge_slot_hashes is not None
|
|
102
|
+
assert len(curr.finished_challenge_slot_hashes) > 0
|
|
103
|
+
break
|
|
104
|
+
curr = blocks.block_record(curr.prev_hash)
|
|
105
|
+
challenge = reversed_challenge_hashes[challenges_to_look_for - 1]
|
|
106
|
+
return challenge
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Awaitable
|
|
4
|
+
from typing import Callable, Optional
|
|
5
|
+
|
|
6
|
+
from chia.types.block_protocol import BlockInfo
|
|
7
|
+
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
8
|
+
from chia.types.generator_types import BlockGenerator
|
|
9
|
+
from chia.util.ints import uint32
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
async def get_block_generator(
|
|
13
|
+
lookup_block_generators: Callable[[bytes32, set[uint32]], Awaitable[dict[uint32, bytes]]],
|
|
14
|
+
block: BlockInfo,
|
|
15
|
+
) -> Optional[BlockGenerator]:
|
|
16
|
+
ref_list = block.transactions_generator_ref_list
|
|
17
|
+
if block.transactions_generator is None:
|
|
18
|
+
assert len(ref_list) == 0
|
|
19
|
+
return None
|
|
20
|
+
if len(ref_list) == 0:
|
|
21
|
+
return BlockGenerator(block.transactions_generator, [])
|
|
22
|
+
|
|
23
|
+
generator_refs = set(ref_list)
|
|
24
|
+
generators: dict[uint32, bytes] = await lookup_block_generators(block.prev_header_hash, generator_refs)
|
|
25
|
+
|
|
26
|
+
result = [generators[height] for height in block.transactions_generator_ref_list]
|
|
27
|
+
return BlockGenerator(block.transactions_generator, result)
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import Optional, Union
|
|
5
|
+
|
|
6
|
+
from chia.consensus.block_record import BlockRecord
|
|
7
|
+
from chia.consensus.blockchain_interface import BlockRecordsProtocol
|
|
8
|
+
from chia.consensus.constants import ConsensusConstants
|
|
9
|
+
from chia.consensus.deficit import calculate_deficit
|
|
10
|
+
from chia.consensus.difficulty_adjustment import (
|
|
11
|
+
_get_next_difficulty,
|
|
12
|
+
_get_next_sub_slot_iters,
|
|
13
|
+
can_finish_sub_and_full_epoch,
|
|
14
|
+
get_next_sub_slot_iters_and_difficulty,
|
|
15
|
+
height_can_be_first_in_epoch,
|
|
16
|
+
)
|
|
17
|
+
from chia.consensus.pot_iterations import calculate_ip_iters, calculate_sp_iters, is_overflow_block
|
|
18
|
+
from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
|
|
19
|
+
from chia.types.full_block import FullBlock
|
|
20
|
+
from chia.types.unfinished_block import UnfinishedBlock
|
|
21
|
+
from chia.util.ints import uint8, uint32, uint64, uint128
|
|
22
|
+
|
|
23
|
+
log = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def make_sub_epoch_summary(
|
|
27
|
+
constants: ConsensusConstants,
|
|
28
|
+
blocks: BlockRecordsProtocol,
|
|
29
|
+
blocks_included_height: uint32,
|
|
30
|
+
prev_prev_block: BlockRecord,
|
|
31
|
+
new_difficulty: Optional[uint64],
|
|
32
|
+
new_sub_slot_iters: Optional[uint64],
|
|
33
|
+
prev_ses_block: Optional[BlockRecord] = None,
|
|
34
|
+
) -> SubEpochSummary:
|
|
35
|
+
"""
|
|
36
|
+
Creates a sub-epoch-summary object, assuming that the first block in the new sub-epoch is at height
|
|
37
|
+
"blocks_included_height". Prev_prev_b is the second to last block in the previous sub-epoch. On a new epoch,
|
|
38
|
+
new_difficulty and new_sub_slot_iters are also added.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
constants: consensus constants being used for this chain
|
|
42
|
+
blocks: dictionary from header hash to SBR of all included SBR
|
|
43
|
+
blocks_included_height: block height in which the SES will be included
|
|
44
|
+
prev_prev_block: second to last block in epoch
|
|
45
|
+
new_difficulty: difficulty in new epoch
|
|
46
|
+
new_sub_slot_iters: sub slot iters in new epoch
|
|
47
|
+
"""
|
|
48
|
+
assert prev_prev_block.height == blocks_included_height - 2
|
|
49
|
+
# First sub_epoch
|
|
50
|
+
# This is not technically because more blocks can potentially be included than 2*MAX_SUB_SLOT_BLOCKS,
|
|
51
|
+
# But assuming less than 128 overflow blocks get infused in the first 2 slots, it's not an issue
|
|
52
|
+
if (blocks_included_height + constants.MAX_SUB_SLOT_BLOCKS) // constants.SUB_EPOCH_BLOCKS <= 1:
|
|
53
|
+
return SubEpochSummary(
|
|
54
|
+
constants.GENESIS_CHALLENGE,
|
|
55
|
+
constants.GENESIS_CHALLENGE,
|
|
56
|
+
uint8(0),
|
|
57
|
+
None,
|
|
58
|
+
None,
|
|
59
|
+
)
|
|
60
|
+
if prev_ses_block is None:
|
|
61
|
+
curr: BlockRecord = prev_prev_block
|
|
62
|
+
while curr.sub_epoch_summary_included is None:
|
|
63
|
+
curr = blocks.block_record(curr.prev_hash)
|
|
64
|
+
prev_ses_block = curr
|
|
65
|
+
assert prev_ses_block is not None
|
|
66
|
+
assert prev_ses_block.sub_epoch_summary_included is not None
|
|
67
|
+
assert prev_ses_block.finished_reward_slot_hashes is not None
|
|
68
|
+
|
|
69
|
+
prev_ses = prev_ses_block.sub_epoch_summary_included.get_hash()
|
|
70
|
+
return SubEpochSummary(
|
|
71
|
+
prev_ses,
|
|
72
|
+
prev_ses_block.finished_reward_slot_hashes[-1],
|
|
73
|
+
uint8(prev_ses_block.height % constants.SUB_EPOCH_BLOCKS),
|
|
74
|
+
new_difficulty,
|
|
75
|
+
new_sub_slot_iters,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def next_sub_epoch_summary(
|
|
80
|
+
constants: ConsensusConstants,
|
|
81
|
+
blocks: BlockRecordsProtocol,
|
|
82
|
+
required_iters: uint64,
|
|
83
|
+
block: Union[UnfinishedBlock, FullBlock],
|
|
84
|
+
can_finish_soon: bool = False,
|
|
85
|
+
) -> Optional[SubEpochSummary]:
|
|
86
|
+
"""
|
|
87
|
+
Returns the sub-epoch summary that can be included in the block after block. If it should include one. Block
|
|
88
|
+
must be eligible to be the last block in the epoch. If not, returns None. Assumes that there is a new slot
|
|
89
|
+
ending after block.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
constants: consensus constants being used for this chain
|
|
93
|
+
blocks: interface to cached SBR
|
|
94
|
+
required_iters: required iters of the proof of space in block
|
|
95
|
+
block: the (potentially) last block in the new epoch
|
|
96
|
+
can_finish_soon: this is useful when sending SES to timelords. We might not be able to finish it, but we will
|
|
97
|
+
soon (within MAX_SUB_SLOT_BLOCKS)
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
object: the new sub-epoch summary
|
|
101
|
+
"""
|
|
102
|
+
signage_point_index = block.reward_chain_block.signage_point_index
|
|
103
|
+
prev_b: Optional[BlockRecord] = blocks.try_block_record(block.prev_header_hash)
|
|
104
|
+
if prev_b is None or prev_b.height == 0:
|
|
105
|
+
return None
|
|
106
|
+
|
|
107
|
+
if len(block.finished_sub_slots) > 0 and block.finished_sub_slots[0].challenge_chain.new_difficulty is not None:
|
|
108
|
+
# We just included a sub-epoch summary
|
|
109
|
+
return None
|
|
110
|
+
|
|
111
|
+
assert prev_b is not None
|
|
112
|
+
# This is the ssi of the current block
|
|
113
|
+
|
|
114
|
+
sub_slot_iters = get_next_sub_slot_iters_and_difficulty(
|
|
115
|
+
constants, len(block.finished_sub_slots) > 0, prev_b, blocks
|
|
116
|
+
)[0]
|
|
117
|
+
overflow = is_overflow_block(constants, signage_point_index)
|
|
118
|
+
|
|
119
|
+
if (
|
|
120
|
+
len(block.finished_sub_slots) > 0
|
|
121
|
+
and block.finished_sub_slots[0].challenge_chain.subepoch_summary_hash is not None
|
|
122
|
+
):
|
|
123
|
+
return None
|
|
124
|
+
|
|
125
|
+
if can_finish_soon:
|
|
126
|
+
deficit: uint8 = uint8(0) # Assume that our deficit will go to zero soon
|
|
127
|
+
can_finish_se = True
|
|
128
|
+
if height_can_be_first_in_epoch(constants, uint32(prev_b.height + 2)):
|
|
129
|
+
can_finish_epoch = True
|
|
130
|
+
if (prev_b.height + 2) % constants.SUB_EPOCH_BLOCKS > 1:
|
|
131
|
+
curr: BlockRecord = prev_b
|
|
132
|
+
while curr.height % constants.SUB_EPOCH_BLOCKS > 0:
|
|
133
|
+
if (
|
|
134
|
+
curr.sub_epoch_summary_included is not None
|
|
135
|
+
and curr.sub_epoch_summary_included.new_difficulty is not None
|
|
136
|
+
):
|
|
137
|
+
can_finish_epoch = False
|
|
138
|
+
curr = blocks.block_record(curr.prev_hash)
|
|
139
|
+
|
|
140
|
+
if (
|
|
141
|
+
curr.sub_epoch_summary_included is not None
|
|
142
|
+
and curr.sub_epoch_summary_included.new_difficulty is not None
|
|
143
|
+
):
|
|
144
|
+
can_finish_epoch = False
|
|
145
|
+
elif height_can_be_first_in_epoch(constants, uint32(prev_b.height + constants.MAX_SUB_SLOT_BLOCKS + 2)):
|
|
146
|
+
can_finish_epoch = True
|
|
147
|
+
else:
|
|
148
|
+
can_finish_epoch = False
|
|
149
|
+
else:
|
|
150
|
+
deficit = calculate_deficit(
|
|
151
|
+
constants,
|
|
152
|
+
uint32(prev_b.height + 1),
|
|
153
|
+
prev_b,
|
|
154
|
+
overflow,
|
|
155
|
+
len(block.finished_sub_slots),
|
|
156
|
+
)
|
|
157
|
+
can_finish_se, can_finish_epoch = can_finish_sub_and_full_epoch(
|
|
158
|
+
constants,
|
|
159
|
+
blocks,
|
|
160
|
+
uint32(prev_b.height + 1),
|
|
161
|
+
prev_b.header_hash if prev_b is not None else None,
|
|
162
|
+
deficit,
|
|
163
|
+
False,
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
# can't finish se, no summary
|
|
167
|
+
if not can_finish_se:
|
|
168
|
+
return None
|
|
169
|
+
|
|
170
|
+
next_difficulty = None
|
|
171
|
+
next_sub_slot_iters = None
|
|
172
|
+
|
|
173
|
+
# if can finish epoch, new difficulty and ssi
|
|
174
|
+
if can_finish_epoch:
|
|
175
|
+
sp_iters = calculate_sp_iters(constants, sub_slot_iters, signage_point_index)
|
|
176
|
+
ip_iters = calculate_ip_iters(constants, sub_slot_iters, signage_point_index, required_iters)
|
|
177
|
+
|
|
178
|
+
next_difficulty = _get_next_difficulty(
|
|
179
|
+
constants,
|
|
180
|
+
blocks,
|
|
181
|
+
block.prev_header_hash,
|
|
182
|
+
uint32(prev_b.height + 1),
|
|
183
|
+
uint64(prev_b.weight - blocks.block_record(prev_b.prev_hash).weight),
|
|
184
|
+
deficit,
|
|
185
|
+
False, # Already checked above
|
|
186
|
+
True,
|
|
187
|
+
uint128(block.total_iters - ip_iters + sp_iters - (sub_slot_iters if overflow else 0)),
|
|
188
|
+
True,
|
|
189
|
+
)
|
|
190
|
+
next_sub_slot_iters = _get_next_sub_slot_iters(
|
|
191
|
+
constants,
|
|
192
|
+
blocks,
|
|
193
|
+
block.prev_header_hash,
|
|
194
|
+
uint32(prev_b.height + 1),
|
|
195
|
+
sub_slot_iters,
|
|
196
|
+
deficit,
|
|
197
|
+
False, # Already checked above
|
|
198
|
+
True,
|
|
199
|
+
uint128(block.total_iters - ip_iters + sp_iters - (sub_slot_iters if overflow else 0)),
|
|
200
|
+
True,
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
return make_sub_epoch_summary(
|
|
204
|
+
constants,
|
|
205
|
+
blocks,
|
|
206
|
+
uint32(prev_b.height + 2),
|
|
207
|
+
prev_b,
|
|
208
|
+
next_difficulty,
|
|
209
|
+
next_sub_slot_iters,
|
|
210
|
+
)
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
import copy
|
|
5
|
+
import logging
|
|
6
|
+
import time
|
|
7
|
+
import traceback
|
|
8
|
+
from collections.abc import Awaitable, Collection
|
|
9
|
+
from concurrent.futures import Executor
|
|
10
|
+
from dataclasses import dataclass
|
|
11
|
+
from typing import Optional
|
|
12
|
+
|
|
13
|
+
from chia_rs import SpendBundleConditions, get_flags_for_height_and_constants, run_block_generator, run_block_generator2
|
|
14
|
+
|
|
15
|
+
from chia.consensus.block_header_validation import validate_finished_header_block
|
|
16
|
+
from chia.consensus.block_record import BlockRecord
|
|
17
|
+
from chia.consensus.blockchain_interface import BlockRecordsProtocol
|
|
18
|
+
from chia.consensus.constants import ConsensusConstants
|
|
19
|
+
from chia.consensus.full_block_to_block_record import block_to_block_record
|
|
20
|
+
from chia.consensus.get_block_challenge import get_block_challenge
|
|
21
|
+
from chia.consensus.get_block_generator import get_block_generator
|
|
22
|
+
from chia.consensus.pot_iterations import calculate_iterations_quality, is_overflow_block
|
|
23
|
+
from chia.types.blockchain_format.coin import Coin
|
|
24
|
+
from chia.types.blockchain_format.proof_of_space import verify_and_get_quality_string
|
|
25
|
+
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
26
|
+
from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
|
|
27
|
+
from chia.types.full_block import FullBlock
|
|
28
|
+
from chia.types.generator_types import BlockGenerator
|
|
29
|
+
from chia.types.validation_state import ValidationState
|
|
30
|
+
from chia.util.augmented_chain import AugmentedBlockchain
|
|
31
|
+
from chia.util.errors import Err
|
|
32
|
+
from chia.util.generator_tools import get_block_header, tx_removals_and_additions
|
|
33
|
+
from chia.util.ints import uint16, uint32, uint64
|
|
34
|
+
from chia.util.streamable import Streamable, streamable
|
|
35
|
+
|
|
36
|
+
log = logging.getLogger(__name__)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@streamable
|
|
40
|
+
@dataclass(frozen=True)
|
|
41
|
+
class PreValidationResult(Streamable):
|
|
42
|
+
error: Optional[uint16]
|
|
43
|
+
required_iters: Optional[uint64] # Iff error is None
|
|
44
|
+
conds: Optional[SpendBundleConditions] # Iff error is None and block is a transaction block
|
|
45
|
+
timing: uint32 # the time (in milliseconds) it took to pre-validate the block
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def validated_signature(self) -> bool:
|
|
49
|
+
if self.conds is None:
|
|
50
|
+
return False
|
|
51
|
+
return self.conds.validated_signature
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# this layer of abstraction is here to let wallet tests monkeypatch it
|
|
55
|
+
def _run_block(
|
|
56
|
+
block: FullBlock, prev_generators: list[bytes], constants: ConsensusConstants
|
|
57
|
+
) -> tuple[Optional[int], Optional[SpendBundleConditions]]:
|
|
58
|
+
assert block.transactions_generator is not None
|
|
59
|
+
assert block.transactions_info is not None
|
|
60
|
+
flags = get_flags_for_height_and_constants(block.height, constants)
|
|
61
|
+
if block.height >= constants.HARD_FORK_HEIGHT:
|
|
62
|
+
run_block = run_block_generator2
|
|
63
|
+
else:
|
|
64
|
+
run_block = run_block_generator
|
|
65
|
+
return run_block(
|
|
66
|
+
bytes(block.transactions_generator),
|
|
67
|
+
prev_generators,
|
|
68
|
+
block.transactions_info.cost,
|
|
69
|
+
flags,
|
|
70
|
+
block.transactions_info.aggregated_signature,
|
|
71
|
+
None,
|
|
72
|
+
constants,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _pre_validate_block(
|
|
77
|
+
constants: ConsensusConstants,
|
|
78
|
+
blockchain: BlockRecordsProtocol,
|
|
79
|
+
block: FullBlock,
|
|
80
|
+
prev_generators: Optional[list[bytes]],
|
|
81
|
+
conds: Optional[SpendBundleConditions],
|
|
82
|
+
expected_vs: ValidationState,
|
|
83
|
+
) -> PreValidationResult:
|
|
84
|
+
"""
|
|
85
|
+
Args:
|
|
86
|
+
constants:
|
|
87
|
+
blockchain:
|
|
88
|
+
block:
|
|
89
|
+
prev_generators:
|
|
90
|
+
conds:
|
|
91
|
+
expected_vs: The validation state that we calculate for the next block
|
|
92
|
+
if it's validated.
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
try:
|
|
96
|
+
validation_start = time.monotonic()
|
|
97
|
+
removals_and_additions: Optional[tuple[Collection[bytes32], Collection[Coin]]] = None
|
|
98
|
+
if conds is not None:
|
|
99
|
+
assert conds.validated_signature is True
|
|
100
|
+
assert block.transactions_generator is not None
|
|
101
|
+
removals_and_additions = tx_removals_and_additions(conds)
|
|
102
|
+
elif block.transactions_generator is not None:
|
|
103
|
+
assert prev_generators is not None
|
|
104
|
+
assert block.transactions_info is not None
|
|
105
|
+
|
|
106
|
+
if block.transactions_info.cost > constants.MAX_BLOCK_COST_CLVM:
|
|
107
|
+
validation_time = time.monotonic() - validation_start
|
|
108
|
+
return PreValidationResult(
|
|
109
|
+
uint16(Err.BLOCK_COST_EXCEEDS_MAX.value), None, None, uint32(validation_time * 1000)
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
err, conds = _run_block(block, prev_generators, constants)
|
|
113
|
+
|
|
114
|
+
assert (err is None) != (conds is None)
|
|
115
|
+
if err is not None:
|
|
116
|
+
validation_time = time.monotonic() - validation_start
|
|
117
|
+
return PreValidationResult(uint16(err), None, None, uint32(validation_time * 1000))
|
|
118
|
+
assert conds is not None
|
|
119
|
+
assert conds.validated_signature is True
|
|
120
|
+
removals_and_additions = tx_removals_and_additions(conds)
|
|
121
|
+
elif block.is_transaction_block():
|
|
122
|
+
# This is a transaction block with just reward coins.
|
|
123
|
+
removals_and_additions = ([], [])
|
|
124
|
+
|
|
125
|
+
assert conds is None or conds.validated_signature is True
|
|
126
|
+
header_block = get_block_header(block, removals_and_additions)
|
|
127
|
+
required_iters, error = validate_finished_header_block(
|
|
128
|
+
constants,
|
|
129
|
+
blockchain,
|
|
130
|
+
header_block,
|
|
131
|
+
True, # check_filter
|
|
132
|
+
expected_vs,
|
|
133
|
+
)
|
|
134
|
+
error_int: Optional[uint16] = None
|
|
135
|
+
if error is not None:
|
|
136
|
+
error_int = uint16(error.code.value)
|
|
137
|
+
|
|
138
|
+
validation_time = time.monotonic() - validation_start
|
|
139
|
+
return PreValidationResult(
|
|
140
|
+
error_int,
|
|
141
|
+
required_iters,
|
|
142
|
+
conds,
|
|
143
|
+
uint32(validation_time * 1000),
|
|
144
|
+
)
|
|
145
|
+
except Exception:
|
|
146
|
+
error_stack = traceback.format_exc()
|
|
147
|
+
log.error(f"Exception: {error_stack}")
|
|
148
|
+
validation_time = time.monotonic() - validation_start
|
|
149
|
+
return PreValidationResult(uint16(Err.UNKNOWN.value), None, None, uint32(validation_time * 1000))
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
async def pre_validate_block(
|
|
153
|
+
constants: ConsensusConstants,
|
|
154
|
+
blockchain: AugmentedBlockchain,
|
|
155
|
+
block: FullBlock,
|
|
156
|
+
pool: Executor,
|
|
157
|
+
conds: Optional[SpendBundleConditions],
|
|
158
|
+
vs: ValidationState,
|
|
159
|
+
*,
|
|
160
|
+
wp_summaries: Optional[list[SubEpochSummary]] = None,
|
|
161
|
+
) -> Awaitable[PreValidationResult]:
|
|
162
|
+
"""
|
|
163
|
+
This method must be called under the blockchain lock
|
|
164
|
+
The block passed to this function is submitted to be validated in the
|
|
165
|
+
executor passed in as "pool". The future for the job is then returned.
|
|
166
|
+
When awaited, the return value is the PreValidationResult for the block.
|
|
167
|
+
The PreValidationResult indicates whether the block was valid or not.
|
|
168
|
+
|
|
169
|
+
Args:
|
|
170
|
+
constants:
|
|
171
|
+
blockchain: The blockchain object to validate these blocks with respect to.
|
|
172
|
+
It's an AugmentedBlockchain to allow for previous batches of blocks to
|
|
173
|
+
be included, even if they haven't been added to the underlying blockchain
|
|
174
|
+
database yet. The blocks passed in will be added/augmented onto this blockchain.
|
|
175
|
+
pool: The executor to submit the validation jobs to
|
|
176
|
+
block: The full block to validate (must be connected to current chain)
|
|
177
|
+
conds: The SpendBundleConditions for transaction blocks, if we have one.
|
|
178
|
+
This will be computed if None is passed.
|
|
179
|
+
vs: The ValidationState refers to the state for the block.
|
|
180
|
+
This is an in-out parameter that will be updated to the validation state
|
|
181
|
+
for the next block. It includes subslot iterators, difficulty and
|
|
182
|
+
the previous sub epoch summary (ses) block.
|
|
183
|
+
wp_summaries:
|
|
184
|
+
validate_signatures:
|
|
185
|
+
"""
|
|
186
|
+
prev_b: Optional[BlockRecord] = None
|
|
187
|
+
|
|
188
|
+
async def return_error(error_code: Err) -> PreValidationResult:
|
|
189
|
+
return PreValidationResult(uint16(error_code.value), None, None, uint32(0))
|
|
190
|
+
|
|
191
|
+
if block.height > 0:
|
|
192
|
+
curr = blockchain.try_block_record(block.prev_header_hash)
|
|
193
|
+
if curr is None:
|
|
194
|
+
return return_error(Err.INVALID_PREV_BLOCK_HASH)
|
|
195
|
+
prev_b = curr
|
|
196
|
+
|
|
197
|
+
assert isinstance(block, FullBlock)
|
|
198
|
+
if len(block.finished_sub_slots) > 0:
|
|
199
|
+
if block.finished_sub_slots[0].challenge_chain.new_difficulty is not None:
|
|
200
|
+
vs.difficulty = block.finished_sub_slots[0].challenge_chain.new_difficulty
|
|
201
|
+
if block.finished_sub_slots[0].challenge_chain.new_sub_slot_iters is not None:
|
|
202
|
+
vs.ssi = block.finished_sub_slots[0].challenge_chain.new_sub_slot_iters
|
|
203
|
+
overflow = is_overflow_block(constants, block.reward_chain_block.signage_point_index)
|
|
204
|
+
challenge = get_block_challenge(constants, block, blockchain, prev_b is None, overflow, False)
|
|
205
|
+
if block.reward_chain_block.challenge_chain_sp_vdf is None:
|
|
206
|
+
cc_sp_hash: bytes32 = challenge
|
|
207
|
+
else:
|
|
208
|
+
cc_sp_hash = block.reward_chain_block.challenge_chain_sp_vdf.output.get_hash()
|
|
209
|
+
q_str: Optional[bytes32] = verify_and_get_quality_string(
|
|
210
|
+
block.reward_chain_block.proof_of_space, constants, challenge, cc_sp_hash, height=block.height
|
|
211
|
+
)
|
|
212
|
+
if q_str is None:
|
|
213
|
+
return return_error(Err.INVALID_POSPACE)
|
|
214
|
+
|
|
215
|
+
required_iters: uint64 = calculate_iterations_quality(
|
|
216
|
+
constants.DIFFICULTY_CONSTANT_FACTOR,
|
|
217
|
+
q_str,
|
|
218
|
+
block.reward_chain_block.proof_of_space.size,
|
|
219
|
+
vs.difficulty,
|
|
220
|
+
cc_sp_hash,
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
try:
|
|
224
|
+
block_rec = block_to_block_record(
|
|
225
|
+
constants,
|
|
226
|
+
blockchain,
|
|
227
|
+
required_iters,
|
|
228
|
+
block,
|
|
229
|
+
sub_slot_iters=vs.ssi,
|
|
230
|
+
prev_ses_block=vs.prev_ses_block,
|
|
231
|
+
)
|
|
232
|
+
except ValueError:
|
|
233
|
+
log.exception("block_to_block_record()")
|
|
234
|
+
return return_error(Err.INVALID_SUB_EPOCH_SUMMARY)
|
|
235
|
+
|
|
236
|
+
if block_rec.sub_epoch_summary_included is not None and wp_summaries is not None:
|
|
237
|
+
next_ses = wp_summaries[int(block.height / constants.SUB_EPOCH_BLOCKS) - 1]
|
|
238
|
+
if not block_rec.sub_epoch_summary_included.get_hash() == next_ses.get_hash():
|
|
239
|
+
log.error("sub_epoch_summary does not match wp sub_epoch_summary list")
|
|
240
|
+
return return_error(Err.INVALID_SUB_EPOCH_SUMMARY)
|
|
241
|
+
|
|
242
|
+
blockchain.add_extra_block(block, block_rec) # Temporarily add block to chain
|
|
243
|
+
prev_b = block_rec
|
|
244
|
+
|
|
245
|
+
previous_generators: Optional[list[bytes]] = None
|
|
246
|
+
|
|
247
|
+
try:
|
|
248
|
+
block_generator: Optional[BlockGenerator] = await get_block_generator(blockchain.lookup_block_generators, block)
|
|
249
|
+
if block_generator is not None:
|
|
250
|
+
previous_generators = block_generator.generator_refs
|
|
251
|
+
except ValueError:
|
|
252
|
+
return return_error(Err.FAILED_GETTING_GENERATOR_MULTIPROCESSING)
|
|
253
|
+
|
|
254
|
+
future = asyncio.get_running_loop().run_in_executor(
|
|
255
|
+
pool,
|
|
256
|
+
_pre_validate_block,
|
|
257
|
+
constants,
|
|
258
|
+
blockchain,
|
|
259
|
+
block,
|
|
260
|
+
previous_generators,
|
|
261
|
+
conds,
|
|
262
|
+
copy.copy(vs),
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
if block_rec.sub_epoch_summary_included is not None:
|
|
266
|
+
vs.prev_ses_block = block_rec
|
|
267
|
+
|
|
268
|
+
return future
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from chia.util.ints import uint64
|
|
4
|
+
|
|
5
|
+
# The actual space in bytes of a plot, is _expected_plot_size(k) * UI_ACTUAL_SPACE_CONSTANT_FACTO
|
|
6
|
+
# This is not used in consensus, only for display purposes
|
|
7
|
+
UI_ACTUAL_SPACE_CONSTANT_FACTOR = 0.78
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _expected_plot_size(k: int) -> uint64:
|
|
11
|
+
"""
|
|
12
|
+
Given the plot size parameter k (which is between 32 and 59), computes the
|
|
13
|
+
expected size of the plot in bytes (times a constant factor). This is based on efficient encoding
|
|
14
|
+
of the plot, and aims to be scale agnostic, so larger plots don't
|
|
15
|
+
necessarily get more rewards per byte. The +1 is added to give half a bit more space per entry, which
|
|
16
|
+
is necessary to store the entries in the plot.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
return uint64(((2 * k) + 1) * (2 ** (k - 1)))
|