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,138 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import time
|
|
5
|
+
from typing import TYPE_CHECKING, ClassVar, Optional, cast
|
|
6
|
+
|
|
7
|
+
from chia.protocols import timelord_protocol
|
|
8
|
+
from chia.protocols.timelord_protocol import NewPeakTimelord
|
|
9
|
+
from chia.rpc.rpc_server import StateChangedProtocol
|
|
10
|
+
from chia.server.api_protocol import ApiMetadata
|
|
11
|
+
from chia.timelord.iters_from_block import iters_from_block
|
|
12
|
+
from chia.timelord.timelord import Timelord
|
|
13
|
+
from chia.timelord.types import Chain, IterationType
|
|
14
|
+
from chia.util.ints import uint64
|
|
15
|
+
|
|
16
|
+
log = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class TimelordAPI:
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
from chia.server.api_protocol import ApiProtocol
|
|
22
|
+
|
|
23
|
+
_protocol_check: ClassVar[ApiProtocol] = cast("TimelordAPI", None)
|
|
24
|
+
|
|
25
|
+
log: logging.Logger
|
|
26
|
+
timelord: Timelord
|
|
27
|
+
metadata: ClassVar[ApiMetadata] = ApiMetadata()
|
|
28
|
+
|
|
29
|
+
def __init__(self, timelord) -> None:
|
|
30
|
+
self.log = logging.getLogger(__name__)
|
|
31
|
+
self.timelord = timelord
|
|
32
|
+
|
|
33
|
+
def ready(self) -> bool:
|
|
34
|
+
return True
|
|
35
|
+
|
|
36
|
+
def _set_state_changed_callback(self, callback: StateChangedProtocol) -> None:
|
|
37
|
+
self.timelord.state_changed_callback = callback
|
|
38
|
+
|
|
39
|
+
@metadata.request()
|
|
40
|
+
async def new_peak_timelord(self, new_peak: timelord_protocol.NewPeakTimelord) -> None:
|
|
41
|
+
if self.timelord.last_state is None:
|
|
42
|
+
return None
|
|
43
|
+
async with self.timelord.lock:
|
|
44
|
+
if self.timelord.bluebox_mode:
|
|
45
|
+
return None
|
|
46
|
+
self.timelord.max_allowed_inactivity_time = 60
|
|
47
|
+
|
|
48
|
+
if self.timelord.last_state.peak is None:
|
|
49
|
+
# no known peak
|
|
50
|
+
log.info("no last known peak, switching to new peak")
|
|
51
|
+
self.timelord.new_peak = new_peak
|
|
52
|
+
self.timelord.state_changed("new_peak", {"height": new_peak.reward_chain_block.height})
|
|
53
|
+
return
|
|
54
|
+
|
|
55
|
+
if self.timelord.last_state.get_weight() < new_peak.reward_chain_block.weight:
|
|
56
|
+
# if there is an unfinished block with less iterations, skip so we dont orphan it
|
|
57
|
+
if (
|
|
58
|
+
new_peak.reward_chain_block.height == self.timelord.last_state.last_height + 1
|
|
59
|
+
and self.check_orphaned_unfinished_block(new_peak) is True
|
|
60
|
+
):
|
|
61
|
+
log.info("there is an unfinished block that this peak would orphan - skip peak")
|
|
62
|
+
self.timelord.state_changed("skipping_peak", {"height": new_peak.reward_chain_block.height})
|
|
63
|
+
return
|
|
64
|
+
|
|
65
|
+
log.info("Not skipping peak, don't have. Maybe we are not the fastest timelord")
|
|
66
|
+
log.info(
|
|
67
|
+
f"New peak: height: {new_peak.reward_chain_block.height} weight: "
|
|
68
|
+
f"{new_peak.reward_chain_block.weight} "
|
|
69
|
+
)
|
|
70
|
+
self.timelord.new_peak = new_peak
|
|
71
|
+
self.timelord.state_changed("new_peak", {"height": new_peak.reward_chain_block.height})
|
|
72
|
+
return
|
|
73
|
+
|
|
74
|
+
if self.timelord.last_state.peak.reward_chain_block.get_hash() == new_peak.reward_chain_block.get_hash():
|
|
75
|
+
log.info("Skipping peak, already have.")
|
|
76
|
+
else:
|
|
77
|
+
log.info("Skipping peak, block has equal or lower weight then our peak.")
|
|
78
|
+
log.debug(
|
|
79
|
+
f"new peak height {new_peak.reward_chain_block.height} "
|
|
80
|
+
f"weight {new_peak.reward_chain_block.weight}"
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
self.timelord.state_changed("skipping_peak", {"height": new_peak.reward_chain_block.height})
|
|
84
|
+
|
|
85
|
+
def check_orphaned_unfinished_block(self, new_peak: NewPeakTimelord):
|
|
86
|
+
for unf_block in self.timelord.unfinished_blocks:
|
|
87
|
+
if unf_block.reward_chain_block.total_iters <= new_peak.reward_chain_block.total_iters:
|
|
88
|
+
# there is an unfinished block that would be orphaned by this peak
|
|
89
|
+
return True
|
|
90
|
+
for unf_block in self.timelord.overflow_blocks:
|
|
91
|
+
if unf_block.reward_chain_block.total_iters <= new_peak.reward_chain_block.total_iters:
|
|
92
|
+
# there is an unfinished block (overflow) that would be orphaned by this peak
|
|
93
|
+
return True
|
|
94
|
+
return False
|
|
95
|
+
|
|
96
|
+
@metadata.request()
|
|
97
|
+
async def new_unfinished_block_timelord(self, new_unfinished_block: timelord_protocol.NewUnfinishedBlockTimelord):
|
|
98
|
+
if self.timelord.last_state is None:
|
|
99
|
+
return None
|
|
100
|
+
async with self.timelord.lock:
|
|
101
|
+
if self.timelord.bluebox_mode:
|
|
102
|
+
return None
|
|
103
|
+
try:
|
|
104
|
+
sp_iters, ip_iters = iters_from_block(
|
|
105
|
+
self.timelord.constants,
|
|
106
|
+
new_unfinished_block.reward_chain_block,
|
|
107
|
+
self.timelord.last_state.get_sub_slot_iters(),
|
|
108
|
+
self.timelord.last_state.get_difficulty(),
|
|
109
|
+
self.timelord.get_height(),
|
|
110
|
+
)
|
|
111
|
+
except Exception:
|
|
112
|
+
return None
|
|
113
|
+
last_ip_iters = self.timelord.last_state.get_last_ip()
|
|
114
|
+
if sp_iters > ip_iters:
|
|
115
|
+
self.timelord.overflow_blocks.append(new_unfinished_block)
|
|
116
|
+
log.debug(f"Overflow unfinished block, total {self.timelord.total_unfinished}")
|
|
117
|
+
elif ip_iters > last_ip_iters:
|
|
118
|
+
new_block_iters: Optional[uint64] = self.timelord._can_infuse_unfinished_block(new_unfinished_block)
|
|
119
|
+
if new_block_iters:
|
|
120
|
+
self.timelord.unfinished_blocks.append(new_unfinished_block)
|
|
121
|
+
for chain in [Chain.REWARD_CHAIN, Chain.CHALLENGE_CHAIN]:
|
|
122
|
+
self.timelord.iters_to_submit[chain].append(new_block_iters)
|
|
123
|
+
if self.timelord.last_state.get_deficit() < self.timelord.constants.MIN_BLOCKS_PER_CHALLENGE_BLOCK:
|
|
124
|
+
self.timelord.iters_to_submit[Chain.INFUSED_CHALLENGE_CHAIN].append(new_block_iters)
|
|
125
|
+
self.timelord.iteration_to_proof_type[new_block_iters] = IterationType.INFUSION_POINT
|
|
126
|
+
self.timelord.total_unfinished += 1
|
|
127
|
+
log.debug(f"Non-overflow unfinished block, total {self.timelord.total_unfinished}")
|
|
128
|
+
|
|
129
|
+
@metadata.request()
|
|
130
|
+
async def request_compact_proof_of_time(self, vdf_info: timelord_protocol.RequestCompactProofOfTime):
|
|
131
|
+
async with self.timelord.lock:
|
|
132
|
+
if not self.timelord.bluebox_mode:
|
|
133
|
+
return None
|
|
134
|
+
now = time.time()
|
|
135
|
+
# work older than 5s can safely be assumed to be from the previous batch, and needs to be cleared
|
|
136
|
+
while self.timelord.pending_bluebox_info and (now - self.timelord.pending_bluebox_info[0][0] > 5):
|
|
137
|
+
del self.timelord.pending_bluebox_info[0]
|
|
138
|
+
self.timelord.pending_bluebox_info.append((now, vdf_info))
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
import logging
|
|
5
|
+
import os
|
|
6
|
+
import pathlib
|
|
7
|
+
import signal
|
|
8
|
+
import sys
|
|
9
|
+
import time
|
|
10
|
+
from collections.abc import AsyncIterator
|
|
11
|
+
from contextlib import asynccontextmanager
|
|
12
|
+
from dataclasses import dataclass, field
|
|
13
|
+
from types import FrameType
|
|
14
|
+
from typing import Any, Optional
|
|
15
|
+
|
|
16
|
+
from chia.server.signal_handlers import SignalHandlers
|
|
17
|
+
from chia.util.chia_logging import initialize_logging
|
|
18
|
+
from chia.util.config import load_config
|
|
19
|
+
from chia.util.default_root import resolve_root_path
|
|
20
|
+
from chia.util.network import resolve
|
|
21
|
+
from chia.util.setproctitle import setproctitle
|
|
22
|
+
|
|
23
|
+
log = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@dataclass
|
|
27
|
+
class VDFClientProcessMgr:
|
|
28
|
+
lock: asyncio.Lock = field(default_factory=asyncio.Lock)
|
|
29
|
+
stopped: bool = False
|
|
30
|
+
active_processes: list[asyncio.subprocess.Process] = field(default_factory=list)
|
|
31
|
+
|
|
32
|
+
async def remove_process(self, proc: asyncio.subprocess.Process) -> None:
|
|
33
|
+
async with self.lock:
|
|
34
|
+
try:
|
|
35
|
+
self.active_processes.remove(proc)
|
|
36
|
+
except ValueError:
|
|
37
|
+
pass
|
|
38
|
+
|
|
39
|
+
async def add_process(self, proc: asyncio.subprocess.Process) -> None:
|
|
40
|
+
async with self.lock:
|
|
41
|
+
self.active_processes.append(proc)
|
|
42
|
+
|
|
43
|
+
async def kill_processes(self) -> None:
|
|
44
|
+
async with self.lock:
|
|
45
|
+
self.stopped = True
|
|
46
|
+
for process in self.active_processes:
|
|
47
|
+
try:
|
|
48
|
+
process.kill()
|
|
49
|
+
await process.wait()
|
|
50
|
+
if sys.version_info < (3, 11, 1):
|
|
51
|
+
# hack to avoid `Event loop is closed` errors (fixed in python 3.11.1)
|
|
52
|
+
# https://github.com/python/cpython/issues/88050
|
|
53
|
+
process._transport.close() # type: ignore [attr-defined]
|
|
54
|
+
except (ProcessLookupError, AttributeError):
|
|
55
|
+
pass
|
|
56
|
+
self.active_processes.clear()
|
|
57
|
+
|
|
58
|
+
@asynccontextmanager
|
|
59
|
+
async def manage_proc(self, proc: asyncio.subprocess.Process) -> AsyncIterator[None]:
|
|
60
|
+
await self.add_process(proc)
|
|
61
|
+
try:
|
|
62
|
+
yield
|
|
63
|
+
finally:
|
|
64
|
+
await self.remove_process(proc)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def find_vdf_client() -> pathlib.Path:
|
|
68
|
+
try:
|
|
69
|
+
import chiavdf
|
|
70
|
+
except ImportError:
|
|
71
|
+
raise Exception("Cannot import chiavdf package")
|
|
72
|
+
|
|
73
|
+
file_string = getattr(chiavdf, "__file__", None)
|
|
74
|
+
if file_string is None:
|
|
75
|
+
raise Exception("Cannot find chiavdf package location")
|
|
76
|
+
|
|
77
|
+
location = pathlib.Path(file_string).parent
|
|
78
|
+
p = location.joinpath("vdf_client")
|
|
79
|
+
if p.is_file():
|
|
80
|
+
return p
|
|
81
|
+
raise FileNotFoundError("Cannot find vdf_client binary. Is Timelord installed? See install-timelord.sh")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
async def spawn_process(
|
|
85
|
+
host: str,
|
|
86
|
+
port: int,
|
|
87
|
+
counter: int,
|
|
88
|
+
process_mgr: VDFClientProcessMgr,
|
|
89
|
+
*,
|
|
90
|
+
prefer_ipv6: bool,
|
|
91
|
+
) -> None:
|
|
92
|
+
path_to_vdf_client = find_vdf_client()
|
|
93
|
+
first_10_seconds = True
|
|
94
|
+
start_time = time.time()
|
|
95
|
+
while not process_mgr.stopped:
|
|
96
|
+
try:
|
|
97
|
+
dirname = path_to_vdf_client.parent
|
|
98
|
+
basename = path_to_vdf_client.name
|
|
99
|
+
resolved = await resolve(host, prefer_ipv6=prefer_ipv6)
|
|
100
|
+
proc = await asyncio.create_subprocess_exec(
|
|
101
|
+
os.fspath(basename),
|
|
102
|
+
str(resolved),
|
|
103
|
+
str(port),
|
|
104
|
+
str(counter),
|
|
105
|
+
stdout=asyncio.subprocess.PIPE,
|
|
106
|
+
stderr=asyncio.subprocess.PIPE,
|
|
107
|
+
env={"PATH": os.fspath(dirname)},
|
|
108
|
+
)
|
|
109
|
+
except Exception as e:
|
|
110
|
+
log.warning(f"Exception while spawning process {counter}: {(e)}")
|
|
111
|
+
continue
|
|
112
|
+
|
|
113
|
+
async with process_mgr.manage_proc(proc):
|
|
114
|
+
while True:
|
|
115
|
+
if proc.stdout is None or proc.stderr is None:
|
|
116
|
+
break
|
|
117
|
+
if proc.stdout.at_eof() and proc.stderr.at_eof():
|
|
118
|
+
break
|
|
119
|
+
stdout = (await proc.stdout.readline()).decode().rstrip()
|
|
120
|
+
if stdout:
|
|
121
|
+
log.info(f"VDF client {counter}: {stdout}")
|
|
122
|
+
stderr = (await proc.stderr.readline()).decode().rstrip()
|
|
123
|
+
if stderr:
|
|
124
|
+
if first_10_seconds:
|
|
125
|
+
if time.time() - start_time > 10:
|
|
126
|
+
first_10_seconds = False
|
|
127
|
+
else:
|
|
128
|
+
log.error(f"VDF client {counter}: {stderr}")
|
|
129
|
+
|
|
130
|
+
await asyncio.sleep(0.1)
|
|
131
|
+
|
|
132
|
+
await proc.communicate()
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
async def spawn_all_processes(config: dict, net_config: dict, process_mgr: VDFClientProcessMgr):
|
|
136
|
+
await asyncio.sleep(5)
|
|
137
|
+
hostname = net_config["self_hostname"] if "host" not in config else config["host"]
|
|
138
|
+
port = config["port"]
|
|
139
|
+
process_count = config["process_count"]
|
|
140
|
+
if process_count == 0:
|
|
141
|
+
log.info("Process_count set to 0, stopping TLauncher.")
|
|
142
|
+
return
|
|
143
|
+
awaitables = [
|
|
144
|
+
spawn_process(
|
|
145
|
+
hostname,
|
|
146
|
+
port,
|
|
147
|
+
i,
|
|
148
|
+
process_mgr,
|
|
149
|
+
prefer_ipv6=net_config.get("prefer_ipv6", False),
|
|
150
|
+
)
|
|
151
|
+
for i in range(process_count)
|
|
152
|
+
]
|
|
153
|
+
await asyncio.gather(*awaitables)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
async def async_main(config: dict[str, Any], net_config: dict[str, Any]) -> None:
|
|
157
|
+
process_mgr = VDFClientProcessMgr()
|
|
158
|
+
|
|
159
|
+
async def stop(
|
|
160
|
+
signal_: signal.Signals,
|
|
161
|
+
stack_frame: Optional[FrameType],
|
|
162
|
+
loop: asyncio.AbstractEventLoop,
|
|
163
|
+
) -> None:
|
|
164
|
+
await process_mgr.kill_processes()
|
|
165
|
+
|
|
166
|
+
async with SignalHandlers.manage() as signal_handlers:
|
|
167
|
+
signal_handlers.setup_async_signal_handler(handler=stop)
|
|
168
|
+
|
|
169
|
+
try:
|
|
170
|
+
await spawn_all_processes(config, net_config, process_mgr)
|
|
171
|
+
finally:
|
|
172
|
+
log.info("Launcher fully closed.")
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def main():
|
|
176
|
+
if os.name == "nt":
|
|
177
|
+
log.info("Timelord launcher not supported on Windows.")
|
|
178
|
+
return 1
|
|
179
|
+
root_path = resolve_root_path(override=None)
|
|
180
|
+
|
|
181
|
+
setproctitle("chia_timelord_launcher")
|
|
182
|
+
net_config = load_config(root_path, "config.yaml")
|
|
183
|
+
config = net_config["timelord_launcher"]
|
|
184
|
+
initialize_logging("TLauncher", config["logging"], root_path)
|
|
185
|
+
|
|
186
|
+
asyncio.run(async_main(config=config, net_config=net_config))
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
if __name__ == "__main__":
|
|
190
|
+
sys.exit(main())
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import Optional, Union
|
|
5
|
+
|
|
6
|
+
from chia.consensus.constants import ConsensusConstants
|
|
7
|
+
from chia.protocols import timelord_protocol
|
|
8
|
+
from chia.timelord.iters_from_block import iters_from_block
|
|
9
|
+
from chia.timelord.types import Chain, StateType
|
|
10
|
+
from chia.types.blockchain_format.classgroup import ClassgroupElement
|
|
11
|
+
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
12
|
+
from chia.types.blockchain_format.slots import ChallengeBlockInfo
|
|
13
|
+
from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
|
|
14
|
+
from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
|
|
15
|
+
from chia.util.ints import uint8, uint32, uint64, uint128
|
|
16
|
+
|
|
17
|
+
log = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class LastState:
|
|
21
|
+
"""
|
|
22
|
+
Represents the state that the timelord is in, and should execute VDFs on top of. A state can be one of three types:
|
|
23
|
+
1. A "peak" or a block
|
|
24
|
+
2. An end of sub-slot
|
|
25
|
+
3. None, if it's the first sub-slot and there are no blocks yet
|
|
26
|
+
Timelords execute VDFs until they reach the next block or sub-slot, at which point the state is changed again.
|
|
27
|
+
The state can also be changed arbitrarily to a sub-slot or peak, for example in the case the timelord receives
|
|
28
|
+
a new block in the future.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
def __init__(self, constants: ConsensusConstants):
|
|
32
|
+
self.state_type: StateType = StateType.FIRST_SUB_SLOT
|
|
33
|
+
self.peak: Optional[timelord_protocol.NewPeakTimelord] = None
|
|
34
|
+
self.subslot_end: Optional[EndOfSubSlotBundle] = None
|
|
35
|
+
self.last_ip: uint64 = uint64(0)
|
|
36
|
+
self.deficit: uint8 = constants.MIN_BLOCKS_PER_CHALLENGE_BLOCK
|
|
37
|
+
self.sub_epoch_summary: Optional[SubEpochSummary] = None
|
|
38
|
+
self.constants: ConsensusConstants = constants
|
|
39
|
+
self.last_weight: uint128 = uint128(0)
|
|
40
|
+
self.last_height: uint32 = uint32(0)
|
|
41
|
+
self.total_iters: uint128 = uint128(0)
|
|
42
|
+
self.last_challenge_sb_or_eos_total_iters = uint128(0)
|
|
43
|
+
self.last_block_total_iters: Optional[uint128] = None
|
|
44
|
+
self.last_peak_challenge: bytes32 = constants.GENESIS_CHALLENGE
|
|
45
|
+
self.difficulty: uint64 = constants.DIFFICULTY_STARTING
|
|
46
|
+
self.sub_slot_iters: uint64 = constants.SUB_SLOT_ITERS_STARTING
|
|
47
|
+
self.reward_challenge_cache: list[tuple[bytes32, uint128]] = [(constants.GENESIS_CHALLENGE, uint128(0))]
|
|
48
|
+
self.new_epoch = False
|
|
49
|
+
self.passed_ses_height_but_not_yet_included = False
|
|
50
|
+
self.infused_ses = False
|
|
51
|
+
|
|
52
|
+
def set_state(self, state: Union[timelord_protocol.NewPeakTimelord, EndOfSubSlotBundle]) -> None:
|
|
53
|
+
if isinstance(state, timelord_protocol.NewPeakTimelord):
|
|
54
|
+
self.state_type = StateType.PEAK
|
|
55
|
+
self.peak = state
|
|
56
|
+
self.subslot_end = None
|
|
57
|
+
_, self.last_ip = iters_from_block(
|
|
58
|
+
self.constants,
|
|
59
|
+
state.reward_chain_block,
|
|
60
|
+
state.sub_slot_iters,
|
|
61
|
+
state.difficulty,
|
|
62
|
+
state.reward_chain_block.height,
|
|
63
|
+
)
|
|
64
|
+
self.deficit = state.deficit
|
|
65
|
+
self.sub_epoch_summary = state.sub_epoch_summary
|
|
66
|
+
self.last_weight = state.reward_chain_block.weight
|
|
67
|
+
self.last_height = state.reward_chain_block.height
|
|
68
|
+
self.total_iters = state.reward_chain_block.total_iters
|
|
69
|
+
self.last_peak_challenge = state.reward_chain_block.get_hash()
|
|
70
|
+
self.difficulty = state.difficulty
|
|
71
|
+
self.sub_slot_iters = state.sub_slot_iters
|
|
72
|
+
if state.reward_chain_block.is_transaction_block:
|
|
73
|
+
self.last_block_total_iters = self.total_iters
|
|
74
|
+
self.reward_challenge_cache = state.previous_reward_challenges
|
|
75
|
+
self.last_challenge_sb_or_eos_total_iters = self.peak.last_challenge_sb_or_eos_total_iters
|
|
76
|
+
self.new_epoch = False
|
|
77
|
+
if (self.peak.reward_chain_block.height + 1) % self.constants.SUB_EPOCH_BLOCKS == 0:
|
|
78
|
+
self.passed_ses_height_but_not_yet_included = True
|
|
79
|
+
else:
|
|
80
|
+
self.passed_ses_height_but_not_yet_included = state.passes_ses_height_but_not_yet_included
|
|
81
|
+
elif isinstance(state, EndOfSubSlotBundle):
|
|
82
|
+
self.state_type = StateType.END_OF_SUB_SLOT
|
|
83
|
+
if self.peak is not None:
|
|
84
|
+
self.total_iters = uint128(self.total_iters - self.get_last_ip() + self.sub_slot_iters)
|
|
85
|
+
else:
|
|
86
|
+
self.total_iters = uint128(self.total_iters + self.sub_slot_iters)
|
|
87
|
+
self.peak = None
|
|
88
|
+
self.subslot_end = state
|
|
89
|
+
self.last_ip = uint64(0)
|
|
90
|
+
self.deficit = state.reward_chain.deficit
|
|
91
|
+
if state.challenge_chain.new_difficulty is not None:
|
|
92
|
+
assert state.challenge_chain.new_sub_slot_iters is not None
|
|
93
|
+
self.difficulty = state.challenge_chain.new_difficulty
|
|
94
|
+
self.sub_slot_iters = state.challenge_chain.new_sub_slot_iters
|
|
95
|
+
self.new_epoch = True
|
|
96
|
+
else:
|
|
97
|
+
self.new_epoch = False
|
|
98
|
+
if state.challenge_chain.subepoch_summary_hash is not None:
|
|
99
|
+
self.infused_ses = True
|
|
100
|
+
self.passed_ses_height_but_not_yet_included = False
|
|
101
|
+
else:
|
|
102
|
+
self.infused_ses = False
|
|
103
|
+
# Since we have a new sub slot which is not an end of subepoch,
|
|
104
|
+
# we will use the last value that we saw for
|
|
105
|
+
# passed_ses_height_but_not_yet_included
|
|
106
|
+
self.last_challenge_sb_or_eos_total_iters = self.total_iters
|
|
107
|
+
else:
|
|
108
|
+
assert False
|
|
109
|
+
|
|
110
|
+
reward_challenge: Optional[bytes32] = self.get_challenge(Chain.REWARD_CHAIN)
|
|
111
|
+
assert reward_challenge is not None # Reward chain always has VDFs
|
|
112
|
+
self.reward_challenge_cache.append((reward_challenge, self.total_iters))
|
|
113
|
+
log.info(f"Updated timelord peak to {reward_challenge.hex()}, total iters: {self.total_iters}")
|
|
114
|
+
while len(self.reward_challenge_cache) > 2 * self.constants.MAX_SUB_SLOT_BLOCKS:
|
|
115
|
+
self.reward_challenge_cache.pop(0)
|
|
116
|
+
|
|
117
|
+
def get_sub_slot_iters(self) -> uint64:
|
|
118
|
+
return self.sub_slot_iters
|
|
119
|
+
|
|
120
|
+
def can_infuse_block(self, overflow: bool) -> bool:
|
|
121
|
+
if overflow and self.new_epoch:
|
|
122
|
+
# No overflows in new epoch
|
|
123
|
+
return False
|
|
124
|
+
if self.state_type in {StateType.FIRST_SUB_SLOT, StateType.END_OF_SUB_SLOT}:
|
|
125
|
+
return True
|
|
126
|
+
ss_start_iters = self.get_total_iters() - self.get_last_ip()
|
|
127
|
+
already_infused_count: int = 0
|
|
128
|
+
for _, total_iters in self.reward_challenge_cache:
|
|
129
|
+
if total_iters > ss_start_iters:
|
|
130
|
+
already_infused_count += 1
|
|
131
|
+
if already_infused_count >= self.constants.MAX_SUB_SLOT_BLOCKS:
|
|
132
|
+
return False
|
|
133
|
+
return True
|
|
134
|
+
|
|
135
|
+
def get_weight(self) -> uint128:
|
|
136
|
+
return self.last_weight
|
|
137
|
+
|
|
138
|
+
def get_height(self) -> uint32:
|
|
139
|
+
return self.last_height
|
|
140
|
+
|
|
141
|
+
def get_total_iters(self) -> uint128:
|
|
142
|
+
return self.total_iters
|
|
143
|
+
|
|
144
|
+
def get_last_peak_challenge(self) -> Optional[bytes32]:
|
|
145
|
+
return self.last_peak_challenge
|
|
146
|
+
|
|
147
|
+
def get_difficulty(self) -> uint64:
|
|
148
|
+
return self.difficulty
|
|
149
|
+
|
|
150
|
+
def get_last_ip(self) -> uint64:
|
|
151
|
+
return self.last_ip
|
|
152
|
+
|
|
153
|
+
def get_deficit(self) -> uint8:
|
|
154
|
+
return self.deficit
|
|
155
|
+
|
|
156
|
+
def just_infused_sub_epoch_summary(self) -> bool:
|
|
157
|
+
"""
|
|
158
|
+
Returns true if state is an end of sub-slot, and that end of sub-slot infused a sub epoch summary
|
|
159
|
+
"""
|
|
160
|
+
return self.state_type == StateType.END_OF_SUB_SLOT and self.infused_ses
|
|
161
|
+
|
|
162
|
+
def get_next_sub_epoch_summary(self) -> Optional[SubEpochSummary]:
|
|
163
|
+
if self.state_type in {StateType.FIRST_SUB_SLOT, StateType.END_OF_SUB_SLOT}:
|
|
164
|
+
# Can only infuse SES after a peak (in an end of sub slot)
|
|
165
|
+
return None
|
|
166
|
+
assert self.peak is not None
|
|
167
|
+
if self.passed_ses_height_but_not_yet_included and self.get_deficit() == 0:
|
|
168
|
+
# This will mean we will include the ses in the next sub-slot
|
|
169
|
+
return self.sub_epoch_summary
|
|
170
|
+
return None
|
|
171
|
+
|
|
172
|
+
def get_last_block_total_iters(self) -> Optional[uint128]:
|
|
173
|
+
return self.last_block_total_iters
|
|
174
|
+
|
|
175
|
+
def get_passed_ses_height_but_not_yet_included(self) -> bool:
|
|
176
|
+
return self.passed_ses_height_but_not_yet_included
|
|
177
|
+
|
|
178
|
+
def get_challenge(self, chain: Chain) -> Optional[bytes32]:
|
|
179
|
+
if self.state_type == StateType.FIRST_SUB_SLOT:
|
|
180
|
+
assert self.peak is None and self.subslot_end is None
|
|
181
|
+
if chain == Chain.CHALLENGE_CHAIN:
|
|
182
|
+
return self.constants.GENESIS_CHALLENGE
|
|
183
|
+
elif chain == Chain.REWARD_CHAIN:
|
|
184
|
+
return self.constants.GENESIS_CHALLENGE
|
|
185
|
+
elif chain == Chain.INFUSED_CHALLENGE_CHAIN:
|
|
186
|
+
return None
|
|
187
|
+
elif self.state_type == StateType.PEAK:
|
|
188
|
+
assert self.peak is not None
|
|
189
|
+
reward_chain_block = self.peak.reward_chain_block
|
|
190
|
+
if chain == Chain.CHALLENGE_CHAIN:
|
|
191
|
+
return reward_chain_block.challenge_chain_ip_vdf.challenge
|
|
192
|
+
elif chain == Chain.REWARD_CHAIN:
|
|
193
|
+
return reward_chain_block.get_hash()
|
|
194
|
+
elif chain == Chain.INFUSED_CHALLENGE_CHAIN:
|
|
195
|
+
if reward_chain_block.infused_challenge_chain_ip_vdf is not None:
|
|
196
|
+
return reward_chain_block.infused_challenge_chain_ip_vdf.challenge
|
|
197
|
+
elif self.peak.deficit == self.constants.MIN_BLOCKS_PER_CHALLENGE_BLOCK - 1:
|
|
198
|
+
return ChallengeBlockInfo(
|
|
199
|
+
reward_chain_block.proof_of_space,
|
|
200
|
+
reward_chain_block.challenge_chain_sp_vdf,
|
|
201
|
+
reward_chain_block.challenge_chain_sp_signature,
|
|
202
|
+
reward_chain_block.challenge_chain_ip_vdf,
|
|
203
|
+
).get_hash()
|
|
204
|
+
return None
|
|
205
|
+
elif self.state_type == StateType.END_OF_SUB_SLOT:
|
|
206
|
+
assert self.subslot_end is not None
|
|
207
|
+
if chain == Chain.CHALLENGE_CHAIN:
|
|
208
|
+
return self.subslot_end.challenge_chain.get_hash()
|
|
209
|
+
elif chain == Chain.REWARD_CHAIN:
|
|
210
|
+
return self.subslot_end.reward_chain.get_hash()
|
|
211
|
+
elif chain == Chain.INFUSED_CHALLENGE_CHAIN:
|
|
212
|
+
if self.subslot_end.reward_chain.deficit < self.constants.MIN_BLOCKS_PER_CHALLENGE_BLOCK:
|
|
213
|
+
assert self.subslot_end.infused_challenge_chain is not None
|
|
214
|
+
return self.subslot_end.infused_challenge_chain.get_hash()
|
|
215
|
+
return None
|
|
216
|
+
return None
|
|
217
|
+
|
|
218
|
+
def get_initial_form(self, chain: Chain) -> Optional[ClassgroupElement]:
|
|
219
|
+
if self.state_type == StateType.FIRST_SUB_SLOT:
|
|
220
|
+
return ClassgroupElement.get_default_element()
|
|
221
|
+
elif self.state_type == StateType.PEAK:
|
|
222
|
+
assert self.peak is not None
|
|
223
|
+
reward_chain_block = self.peak.reward_chain_block
|
|
224
|
+
if chain == Chain.CHALLENGE_CHAIN:
|
|
225
|
+
return reward_chain_block.challenge_chain_ip_vdf.output
|
|
226
|
+
if chain == Chain.REWARD_CHAIN:
|
|
227
|
+
return ClassgroupElement.get_default_element()
|
|
228
|
+
if chain == Chain.INFUSED_CHALLENGE_CHAIN:
|
|
229
|
+
if reward_chain_block.infused_challenge_chain_ip_vdf is not None:
|
|
230
|
+
return reward_chain_block.infused_challenge_chain_ip_vdf.output
|
|
231
|
+
elif self.peak.deficit == self.constants.MIN_BLOCKS_PER_CHALLENGE_BLOCK - 1:
|
|
232
|
+
return ClassgroupElement.get_default_element()
|
|
233
|
+
else:
|
|
234
|
+
return None
|
|
235
|
+
elif self.state_type == StateType.END_OF_SUB_SLOT:
|
|
236
|
+
if chain in {Chain.CHALLENGE_CHAIN, Chain.REWARD_CHAIN}:
|
|
237
|
+
return ClassgroupElement.get_default_element()
|
|
238
|
+
if chain == Chain.INFUSED_CHALLENGE_CHAIN:
|
|
239
|
+
assert self.subslot_end is not None
|
|
240
|
+
if self.subslot_end.reward_chain.deficit < self.constants.MIN_BLOCKS_PER_CHALLENGE_BLOCK:
|
|
241
|
+
return ClassgroupElement.get_default_element()
|
|
242
|
+
else:
|
|
243
|
+
return None
|
|
244
|
+
return None
|
chia/timelord/types.py
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Chain(Enum):
|
|
7
|
+
CHALLENGE_CHAIN = 1
|
|
8
|
+
REWARD_CHAIN = 2
|
|
9
|
+
INFUSED_CHALLENGE_CHAIN = 3
|
|
10
|
+
BLUEBOX = 4
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class IterationType(Enum):
|
|
14
|
+
SIGNAGE_POINT = 1
|
|
15
|
+
INFUSION_POINT = 2
|
|
16
|
+
END_OF_SUBSLOT = 3
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class StateType(Enum):
|
|
20
|
+
PEAK = 1
|
|
21
|
+
END_OF_SUB_SLOT = 2
|
|
22
|
+
FIRST_SUB_SLOT = 3
|
chia/types/__init__.py
ADDED
|
File without changes
|
chia/types/aliases.py
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from chia.data_layer.data_layer import DataLayer
|
|
4
|
+
from chia.data_layer.data_layer_api import DataLayerAPI
|
|
5
|
+
from chia.farmer.farmer import Farmer
|
|
6
|
+
from chia.farmer.farmer_api import FarmerAPI
|
|
7
|
+
from chia.full_node.full_node import FullNode
|
|
8
|
+
from chia.full_node.full_node_api import FullNodeAPI
|
|
9
|
+
from chia.harvester.harvester import Harvester
|
|
10
|
+
from chia.harvester.harvester_api import HarvesterAPI
|
|
11
|
+
from chia.introducer.introducer import Introducer
|
|
12
|
+
from chia.introducer.introducer_api import IntroducerAPI
|
|
13
|
+
from chia.rpc.crawler_rpc_api import CrawlerRpcApi
|
|
14
|
+
from chia.rpc.data_layer_rpc_api import DataLayerRpcApi
|
|
15
|
+
from chia.rpc.farmer_rpc_api import FarmerRpcApi
|
|
16
|
+
from chia.rpc.full_node_rpc_api import FullNodeRpcApi
|
|
17
|
+
from chia.rpc.harvester_rpc_api import HarvesterRpcApi
|
|
18
|
+
from chia.rpc.timelord_rpc_api import TimelordRpcApi
|
|
19
|
+
from chia.rpc.wallet_rpc_api import WalletRpcApi
|
|
20
|
+
from chia.seeder.crawler import Crawler
|
|
21
|
+
from chia.seeder.crawler_api import CrawlerAPI
|
|
22
|
+
from chia.server.start_service import Service
|
|
23
|
+
from chia.timelord.timelord import Timelord
|
|
24
|
+
from chia.timelord.timelord_api import TimelordAPI
|
|
25
|
+
from chia.wallet.wallet_node import WalletNode
|
|
26
|
+
from chia.wallet.wallet_node_api import WalletNodeAPI
|
|
27
|
+
|
|
28
|
+
CrawlerService = Service[Crawler, CrawlerAPI, CrawlerRpcApi]
|
|
29
|
+
DataLayerService = Service[DataLayer, DataLayerAPI, DataLayerRpcApi]
|
|
30
|
+
FarmerService = Service[Farmer, FarmerAPI, FarmerRpcApi]
|
|
31
|
+
FullNodeService = Service[FullNode, FullNodeAPI, FullNodeRpcApi]
|
|
32
|
+
HarvesterService = Service[Harvester, HarvesterAPI, HarvesterRpcApi]
|
|
33
|
+
IntroducerService = Service[Introducer, IntroducerAPI, FullNodeRpcApi]
|
|
34
|
+
TimelordService = Service[Timelord, TimelordAPI, TimelordRpcApi]
|
|
35
|
+
WalletService = Service[WalletNode, WalletNodeAPI, WalletRpcApi]
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
from typing_extensions import Protocol
|
|
6
|
+
|
|
7
|
+
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
8
|
+
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
9
|
+
from chia.util.ints import uint32
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class BlockInfo(Protocol):
|
|
13
|
+
@property
|
|
14
|
+
def prev_header_hash(self) -> bytes32: ...
|
|
15
|
+
|
|
16
|
+
@property
|
|
17
|
+
def transactions_generator(self) -> Optional[SerializedProgram]: ...
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
def transactions_generator_ref_list(self) -> list[uint32]: ...
|
|
File without changes
|