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
chia/cmds/farm.py
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
import click
|
|
6
|
+
|
|
7
|
+
from chia.cmds.cmd_classes import ChiaCliContext
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@click.group("farm", help="Manage your farm")
|
|
11
|
+
def farm_cmd() -> None:
|
|
12
|
+
pass
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@farm_cmd.command("summary", help="Summary of farming information")
|
|
16
|
+
@click.option(
|
|
17
|
+
"-p",
|
|
18
|
+
"--rpc-port",
|
|
19
|
+
help=(
|
|
20
|
+
"Set the port where the Full Node is hosting the RPC interface. "
|
|
21
|
+
"See the rpc_port under full_node in config.yaml"
|
|
22
|
+
),
|
|
23
|
+
type=int,
|
|
24
|
+
default=None,
|
|
25
|
+
show_default=True,
|
|
26
|
+
)
|
|
27
|
+
@click.option(
|
|
28
|
+
"-wp",
|
|
29
|
+
"--wallet-rpc-port",
|
|
30
|
+
help="Set the port where the Wallet is hosting the RPC interface. See the rpc_port under wallet in config.yaml",
|
|
31
|
+
type=int,
|
|
32
|
+
default=None,
|
|
33
|
+
show_default=True,
|
|
34
|
+
)
|
|
35
|
+
@click.option(
|
|
36
|
+
"-hp",
|
|
37
|
+
"--harvester-rpc-port",
|
|
38
|
+
help=(
|
|
39
|
+
"Set the port where the Harvester is hosting the RPC interface"
|
|
40
|
+
"See the rpc_port under harvester in config.yaml"
|
|
41
|
+
),
|
|
42
|
+
type=int,
|
|
43
|
+
default=None,
|
|
44
|
+
show_default=True,
|
|
45
|
+
)
|
|
46
|
+
@click.option(
|
|
47
|
+
"-fp",
|
|
48
|
+
"--farmer-rpc-port",
|
|
49
|
+
help=("Set the port where the Farmer is hosting the RPC interface. See the rpc_port under farmer in config.yaml"),
|
|
50
|
+
type=int,
|
|
51
|
+
default=None,
|
|
52
|
+
show_default=True,
|
|
53
|
+
)
|
|
54
|
+
@click.pass_context
|
|
55
|
+
def summary_cmd(
|
|
56
|
+
ctx: click.Context,
|
|
57
|
+
rpc_port: Optional[int],
|
|
58
|
+
wallet_rpc_port: Optional[int],
|
|
59
|
+
harvester_rpc_port: Optional[int],
|
|
60
|
+
farmer_rpc_port: Optional[int],
|
|
61
|
+
) -> None:
|
|
62
|
+
import asyncio
|
|
63
|
+
|
|
64
|
+
from chia.cmds.farm_funcs import summary
|
|
65
|
+
|
|
66
|
+
asyncio.run(
|
|
67
|
+
summary(
|
|
68
|
+
rpc_port,
|
|
69
|
+
wallet_rpc_port,
|
|
70
|
+
harvester_rpc_port,
|
|
71
|
+
farmer_rpc_port,
|
|
72
|
+
root_path=ChiaCliContext.set_default(ctx).root_path,
|
|
73
|
+
)
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@farm_cmd.command("challenges", help="Show the latest challenges")
|
|
78
|
+
@click.option(
|
|
79
|
+
"-fp",
|
|
80
|
+
"--farmer-rpc-port",
|
|
81
|
+
help="Set the port where the Farmer is hosting the RPC interface. See the rpc_port under farmer in config.yaml",
|
|
82
|
+
type=int,
|
|
83
|
+
default=None,
|
|
84
|
+
show_default=True,
|
|
85
|
+
)
|
|
86
|
+
@click.option(
|
|
87
|
+
"-l",
|
|
88
|
+
"--limit",
|
|
89
|
+
help="Limit the number of challenges shown. Use 0 to disable the limit",
|
|
90
|
+
type=click.IntRange(0),
|
|
91
|
+
default=20,
|
|
92
|
+
show_default=True,
|
|
93
|
+
)
|
|
94
|
+
@click.pass_context
|
|
95
|
+
def challenges_cmd(ctx: click.Context, farmer_rpc_port: Optional[int], limit: int) -> None:
|
|
96
|
+
import asyncio
|
|
97
|
+
|
|
98
|
+
from chia.cmds.farm_funcs import challenges
|
|
99
|
+
|
|
100
|
+
asyncio.run(challenges(ChiaCliContext.set_default(ctx).root_path, farmer_rpc_port, limit))
|
chia/cmds/farm_funcs.py
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
import traceback
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Any, Optional
|
|
7
|
+
|
|
8
|
+
from chia.cmds.cmds_util import format_bytes, format_minutes, get_any_service_client
|
|
9
|
+
from chia.cmds.units import units
|
|
10
|
+
from chia.consensus.block_record import BlockRecord
|
|
11
|
+
from chia.rpc.farmer_rpc_client import FarmerRpcClient
|
|
12
|
+
from chia.rpc.full_node_rpc_client import FullNodeRpcClient
|
|
13
|
+
from chia.rpc.wallet_rpc_client import WalletRpcClient
|
|
14
|
+
from chia.util.errors import CliRpcConnectionError
|
|
15
|
+
from chia.util.network import is_localhost
|
|
16
|
+
|
|
17
|
+
SECONDS_PER_BLOCK = (24 * 3600) / 4608
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
async def get_harvesters_summary(farmer_rpc_port: Optional[int], root_path: Path) -> Optional[dict[str, Any]]:
|
|
21
|
+
async with get_any_service_client(FarmerRpcClient, root_path, farmer_rpc_port) as (farmer_client, _):
|
|
22
|
+
return await farmer_client.get_harvesters_summary()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
async def get_blockchain_state(rpc_port: Optional[int], root_path: Path) -> Optional[dict[str, Any]]:
|
|
26
|
+
async with get_any_service_client(FullNodeRpcClient, root_path, rpc_port) as (client, _):
|
|
27
|
+
return await client.get_blockchain_state()
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
async def get_average_block_time(rpc_port: Optional[int], root_path: Path) -> float:
|
|
31
|
+
async with get_any_service_client(FullNodeRpcClient, root_path, rpc_port) as (client, _):
|
|
32
|
+
blocks_to_compare = 500
|
|
33
|
+
blockchain_state = await client.get_blockchain_state()
|
|
34
|
+
curr: Optional[BlockRecord] = blockchain_state["peak"]
|
|
35
|
+
if curr is None or curr.height < (blocks_to_compare + 100):
|
|
36
|
+
return SECONDS_PER_BLOCK
|
|
37
|
+
while curr is not None and curr.height > 0 and not curr.is_transaction_block:
|
|
38
|
+
curr = await client.get_block_record(curr.prev_hash)
|
|
39
|
+
if curr is None or curr.timestamp is None or curr.height is None:
|
|
40
|
+
# stupid mypy
|
|
41
|
+
return SECONDS_PER_BLOCK
|
|
42
|
+
past_curr = await client.get_block_record_by_height(curr.height - blocks_to_compare)
|
|
43
|
+
while past_curr is not None and past_curr.height > 0 and not past_curr.is_transaction_block:
|
|
44
|
+
past_curr = await client.get_block_record(past_curr.prev_hash)
|
|
45
|
+
if past_curr is None or past_curr.timestamp is None or past_curr.height is None:
|
|
46
|
+
# stupid mypy
|
|
47
|
+
return SECONDS_PER_BLOCK
|
|
48
|
+
return (curr.timestamp - past_curr.timestamp) / (curr.height - past_curr.height)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
async def get_wallets_stats(wallet_rpc_port: Optional[int], root_path: Path) -> Optional[dict[str, Any]]:
|
|
52
|
+
async with get_any_service_client(WalletRpcClient, root_path, wallet_rpc_port) as (wallet_client, _):
|
|
53
|
+
return await wallet_client.get_farmed_amount()
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
async def get_challenges(root_path: Path, farmer_rpc_port: Optional[int]) -> Optional[list[dict[str, Any]]]:
|
|
57
|
+
async with get_any_service_client(FarmerRpcClient, root_path, farmer_rpc_port) as (farmer_client, _):
|
|
58
|
+
return await farmer_client.get_signage_points()
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
async def challenges(root_path: Path, farmer_rpc_port: Optional[int], limit: int) -> None:
|
|
62
|
+
signage_points = await get_challenges(root_path, farmer_rpc_port)
|
|
63
|
+
if signage_points is None:
|
|
64
|
+
return None
|
|
65
|
+
|
|
66
|
+
signage_points.reverse()
|
|
67
|
+
if limit != 0:
|
|
68
|
+
signage_points = signage_points[:limit]
|
|
69
|
+
|
|
70
|
+
for signage_point in signage_points:
|
|
71
|
+
print(
|
|
72
|
+
f"Hash: {signage_point['signage_point']['challenge_hash']} "
|
|
73
|
+
f"Index: {signage_point['signage_point']['signage_point_index']}"
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
async def summary(
|
|
78
|
+
rpc_port: Optional[int],
|
|
79
|
+
wallet_rpc_port: Optional[int],
|
|
80
|
+
harvester_rpc_port: Optional[int],
|
|
81
|
+
farmer_rpc_port: Optional[int],
|
|
82
|
+
root_path: Path,
|
|
83
|
+
) -> None:
|
|
84
|
+
harvesters_summary = await get_harvesters_summary(farmer_rpc_port, root_path)
|
|
85
|
+
blockchain_state = None
|
|
86
|
+
try:
|
|
87
|
+
blockchain_state = await get_blockchain_state(rpc_port, root_path)
|
|
88
|
+
except CliRpcConnectionError:
|
|
89
|
+
pass
|
|
90
|
+
except Exception:
|
|
91
|
+
print("Error while trying to get blockchain state!", file=sys.stderr)
|
|
92
|
+
traceback.print_exc(file=sys.stderr)
|
|
93
|
+
|
|
94
|
+
farmer_running = False if harvesters_summary is None else True # harvesters uses farmer rpc too
|
|
95
|
+
|
|
96
|
+
wallet_not_ready: bool = False
|
|
97
|
+
amounts = None
|
|
98
|
+
try:
|
|
99
|
+
amounts = await get_wallets_stats(wallet_rpc_port, root_path)
|
|
100
|
+
except CliRpcConnectionError:
|
|
101
|
+
wallet_not_ready = True
|
|
102
|
+
except Exception:
|
|
103
|
+
print("Error while trying to get wallet stats!", file=sys.stderr)
|
|
104
|
+
traceback.print_exc(file=sys.stderr)
|
|
105
|
+
wallet_not_running: bool = True if amounts is None else False
|
|
106
|
+
|
|
107
|
+
print("Farming status: ", end="")
|
|
108
|
+
if blockchain_state is None:
|
|
109
|
+
print("Not available")
|
|
110
|
+
elif blockchain_state["sync"]["sync_mode"]:
|
|
111
|
+
print("Syncing")
|
|
112
|
+
elif not blockchain_state["sync"]["synced"]:
|
|
113
|
+
print("Not synced or not connected to peers")
|
|
114
|
+
elif not farmer_running:
|
|
115
|
+
print("Not running")
|
|
116
|
+
else:
|
|
117
|
+
print("Farming")
|
|
118
|
+
|
|
119
|
+
if amounts is not None:
|
|
120
|
+
print(f"Total chia farmed: {amounts['farmed_amount'] / units['chia']}")
|
|
121
|
+
print(f"User transaction fees: {amounts['fee_amount'] / units['chia']}")
|
|
122
|
+
print(f"Block rewards: {(amounts['farmer_reward_amount'] + amounts['pool_reward_amount']) / units['chia']}")
|
|
123
|
+
print(f"Last height farmed: {amounts['last_height_farmed']}")
|
|
124
|
+
|
|
125
|
+
class PlotStats:
|
|
126
|
+
total_plot_size = 0
|
|
127
|
+
total_effective_plot_size = 0
|
|
128
|
+
total_plots = 0
|
|
129
|
+
|
|
130
|
+
if harvesters_summary is not None:
|
|
131
|
+
harvesters_local: dict[str, dict[str, Any]] = {}
|
|
132
|
+
harvesters_remote: dict[str, dict[str, Any]] = {}
|
|
133
|
+
for harvester in harvesters_summary["harvesters"]:
|
|
134
|
+
ip = harvester["connection"]["host"]
|
|
135
|
+
if is_localhost(ip):
|
|
136
|
+
harvesters_local[harvester["connection"]["node_id"]] = harvester
|
|
137
|
+
else:
|
|
138
|
+
if ip not in harvesters_remote:
|
|
139
|
+
harvesters_remote[ip] = {}
|
|
140
|
+
harvesters_remote[ip][harvester["connection"]["node_id"]] = harvester
|
|
141
|
+
|
|
142
|
+
def process_harvesters(harvester_peers_in: dict[str, dict[str, Any]]) -> None:
|
|
143
|
+
for harvester_peer_id, harvester_dict in harvester_peers_in.items():
|
|
144
|
+
syncing = harvester_dict["syncing"]
|
|
145
|
+
if syncing is not None and syncing["initial"]:
|
|
146
|
+
print(f" Loading plots: {syncing['plot_files_processed']} / {syncing['plot_files_total']}")
|
|
147
|
+
else:
|
|
148
|
+
total_plot_size_harvester = harvester_dict["total_plot_size"]
|
|
149
|
+
total_effective_plot_size_harvester = harvester_dict["total_effective_plot_size"]
|
|
150
|
+
plot_count_harvester = harvester_dict["plots"]
|
|
151
|
+
PlotStats.total_plot_size += total_plot_size_harvester
|
|
152
|
+
PlotStats.total_effective_plot_size += total_effective_plot_size_harvester
|
|
153
|
+
PlotStats.total_plots += plot_count_harvester
|
|
154
|
+
print(
|
|
155
|
+
f" {plot_count_harvester} plots of size: {format_bytes(total_plot_size_harvester)} on-disk, "
|
|
156
|
+
f"{format_bytes(total_effective_plot_size_harvester)}e (effective)"
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
if len(harvesters_local) > 0:
|
|
160
|
+
print(f"Local Harvester{'s' if len(harvesters_local) > 1 else ''}")
|
|
161
|
+
process_harvesters(harvesters_local)
|
|
162
|
+
for harvester_ip, harvester_peers in harvesters_remote.items():
|
|
163
|
+
print(f"Remote Harvester{'s' if len(harvester_peers) > 1 else ''} for IP: {harvester_ip}")
|
|
164
|
+
process_harvesters(harvester_peers)
|
|
165
|
+
|
|
166
|
+
print(f"Plot count for all harvesters: {PlotStats.total_plots}")
|
|
167
|
+
|
|
168
|
+
print(
|
|
169
|
+
f"Total size of plots: {format_bytes(PlotStats.total_plot_size)}, "
|
|
170
|
+
f"{format_bytes(PlotStats.total_effective_plot_size)}e (effective)"
|
|
171
|
+
)
|
|
172
|
+
else:
|
|
173
|
+
print("Plot count: Unknown")
|
|
174
|
+
print("Total size of plots: Unknown")
|
|
175
|
+
|
|
176
|
+
if blockchain_state is not None:
|
|
177
|
+
print("Estimated network space: ", end="")
|
|
178
|
+
print(format_bytes(blockchain_state["space"]))
|
|
179
|
+
else:
|
|
180
|
+
print("Estimated network space: Unknown")
|
|
181
|
+
|
|
182
|
+
minutes = -1
|
|
183
|
+
if blockchain_state is not None and harvesters_summary is not None:
|
|
184
|
+
proportion = (
|
|
185
|
+
PlotStats.total_effective_plot_size / blockchain_state["space"] if blockchain_state["space"] else -1
|
|
186
|
+
)
|
|
187
|
+
minutes = int((await get_average_block_time(rpc_port, root_path) / 60) / proportion) if proportion else -1
|
|
188
|
+
|
|
189
|
+
if harvesters_summary is not None and PlotStats.total_plots == 0:
|
|
190
|
+
print("Expected time to win: Never (no plots)")
|
|
191
|
+
else:
|
|
192
|
+
print("Expected time to win: " + format_minutes(minutes))
|
|
193
|
+
|
|
194
|
+
if amounts is None:
|
|
195
|
+
if wallet_not_running:
|
|
196
|
+
print("For details on farmed rewards and fees you should run 'chia start wallet' and 'chia wallet show'")
|
|
197
|
+
elif wallet_not_ready:
|
|
198
|
+
print("For details on farmed rewards and fees you should run 'chia wallet show'")
|
|
199
|
+
else:
|
|
200
|
+
print("Note: log into your key using 'chia wallet show' to see rewards for each key")
|
chia/cmds/gh.py
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import os
|
|
5
|
+
import shlex
|
|
6
|
+
import urllib
|
|
7
|
+
import uuid
|
|
8
|
+
import webbrowser
|
|
9
|
+
from collections.abc import Sequence
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Callable, ClassVar, Literal, Optional, Union, overload
|
|
12
|
+
|
|
13
|
+
import anyio
|
|
14
|
+
import click
|
|
15
|
+
import yaml
|
|
16
|
+
|
|
17
|
+
from chia.cmds.cmd_classes import chia_command, option
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class UnexpectedFormError(Exception):
|
|
21
|
+
pass
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
Oses = Union[Literal["linux"], Literal["macos-arm"], Literal["macos-intel"], Literal["windows"]]
|
|
25
|
+
Method = Union[Literal["GET"], Literal["POST"]]
|
|
26
|
+
Per = Union[Literal["directory"], Literal["file"]]
|
|
27
|
+
|
|
28
|
+
all_oses: Sequence[Oses] = ("linux", "macos-arm", "macos-intel", "windows")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def report(*args: str) -> None:
|
|
32
|
+
print(" ====", *args)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
async def get_gh_token() -> str:
|
|
36
|
+
command = ["gh", "auth", "token"]
|
|
37
|
+
report(f"running command: {shlex.join(command)}")
|
|
38
|
+
process = await anyio.run_process(command=command, check=False, stderr=None)
|
|
39
|
+
|
|
40
|
+
if process.returncode != 0:
|
|
41
|
+
raise click.ClickException("failed to get gh cli personal access token")
|
|
42
|
+
|
|
43
|
+
return process.stdout.decode("utf-8").strip()
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@overload
|
|
47
|
+
async def run_gh_api(method: Method, args: list[str], error: str) -> None: ...
|
|
48
|
+
@overload
|
|
49
|
+
async def run_gh_api(method: Method, args: list[str], error: str, capture_stdout: Literal[False]) -> None: ...
|
|
50
|
+
@overload
|
|
51
|
+
async def run_gh_api(method: Method, args: list[str], error: str, capture_stdout: Literal[True]) -> str: ...
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
async def run_gh_api(method: Method, args: list[str], error: str, capture_stdout: bool = False) -> Optional[str]:
|
|
55
|
+
command = [
|
|
56
|
+
"gh",
|
|
57
|
+
"api",
|
|
58
|
+
f"--method={method}",
|
|
59
|
+
"-H=Accept: application/vnd.github+json",
|
|
60
|
+
"-H=X-GitHub-Api-Version: 2022-11-28",
|
|
61
|
+
*args,
|
|
62
|
+
]
|
|
63
|
+
report(f"running command: {shlex.join(command)}")
|
|
64
|
+
|
|
65
|
+
if capture_stdout:
|
|
66
|
+
process = await anyio.run_process(command=command, check=False, stderr=None)
|
|
67
|
+
else:
|
|
68
|
+
process = await anyio.run_process(command=command, check=False, stderr=None, stdout=None)
|
|
69
|
+
|
|
70
|
+
if process.returncode != 0:
|
|
71
|
+
raise click.ClickException(error)
|
|
72
|
+
|
|
73
|
+
if capture_stdout:
|
|
74
|
+
return process.stdout.decode("utf-8")
|
|
75
|
+
|
|
76
|
+
return None
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def input_arg(name: str, value: object, cond: bool = True) -> list[str]:
|
|
80
|
+
if not cond:
|
|
81
|
+
return []
|
|
82
|
+
|
|
83
|
+
assert value is not None
|
|
84
|
+
|
|
85
|
+
if isinstance(value, os.PathLike):
|
|
86
|
+
value = os.fspath(value)
|
|
87
|
+
dumped = yaml.safe_dump(value).partition("\n")[0]
|
|
88
|
+
return [f"-f=inputs[{name}]={dumped}"]
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
@click.group("gh", help="For working with GitHub")
|
|
92
|
+
def gh_group() -> None:
|
|
93
|
+
pass
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
@chia_command(
|
|
97
|
+
group=gh_group,
|
|
98
|
+
name="test",
|
|
99
|
+
short_help="launch a test run in CI from HEAD or existing remote ref",
|
|
100
|
+
help="""Allows easy triggering and viewing of test workflow runs in CI including
|
|
101
|
+
configuration of parameters. If a ref is specified then it must exist on the
|
|
102
|
+
remote and a run will be launched for it. If ref is not specified then the local
|
|
103
|
+
HEAD will be pushed to a temporary remote branch and a run will be launched for
|
|
104
|
+
that. There is no need to push the local commit first. The temporary remote
|
|
105
|
+
branch will automatically be deleted in most cases.
|
|
106
|
+
|
|
107
|
+
After launching the workflow run GitHub will be queried for the run and the URL
|
|
108
|
+
will be opened in the default browser.
|
|
109
|
+
""",
|
|
110
|
+
)
|
|
111
|
+
class TestCMD:
|
|
112
|
+
workflow_id: ClassVar[str] = "test.yml"
|
|
113
|
+
owner: str = option("-o", "--owner", help="Owner of the repo", type=str, default="Chia-Network")
|
|
114
|
+
repository: str = option("-r", "--repository", help="Repository name", type=str, default="chia-blockchain")
|
|
115
|
+
ref: Optional[str] = option(
|
|
116
|
+
"-f",
|
|
117
|
+
"--ref",
|
|
118
|
+
help="Branch or tag name (commit SHA not supported), if not specified will push HEAD to a temporary branch",
|
|
119
|
+
type=str,
|
|
120
|
+
default=None,
|
|
121
|
+
)
|
|
122
|
+
per: Per = option("-p", "--per", help="Per", type=click.Choice(["directory", "file"]), default="directory")
|
|
123
|
+
only: Optional[Path] = option(
|
|
124
|
+
"-o", "--only", help="Only run this item, a file or directory depending on --per", type=Path
|
|
125
|
+
)
|
|
126
|
+
duplicates: int = option("-d", "--duplicates", help="Number of duplicates", type=int, default=1)
|
|
127
|
+
oses: Sequence[Oses] = option(
|
|
128
|
+
"--os",
|
|
129
|
+
help="Operating systems to run on",
|
|
130
|
+
type=click.Choice(all_oses),
|
|
131
|
+
multiple=True,
|
|
132
|
+
default=all_oses,
|
|
133
|
+
)
|
|
134
|
+
full_python_matrix: bool = option(
|
|
135
|
+
"--full-python-matrix/--default-python-matrix", help="Run on all Python versions", default=False
|
|
136
|
+
)
|
|
137
|
+
remote: str = option("-r", "--remote", help="Name of git remote", type=str, default="origin")
|
|
138
|
+
open_browser: bool = option("--open-browser/--no-open-browser", help="Open browser", default=True)
|
|
139
|
+
|
|
140
|
+
async def run(self) -> None:
|
|
141
|
+
await self.check_only()
|
|
142
|
+
|
|
143
|
+
username = await self.get_username()
|
|
144
|
+
|
|
145
|
+
if self.ref is not None:
|
|
146
|
+
await self.trigger_workflow(self.ref)
|
|
147
|
+
query = "+".join(
|
|
148
|
+
[
|
|
149
|
+
"event=workflow_dispatch",
|
|
150
|
+
f"branch={self.ref}",
|
|
151
|
+
f"actor={username}",
|
|
152
|
+
]
|
|
153
|
+
)
|
|
154
|
+
run_url = f"https://github.com/Chia-Network/chia-blockchain/actions/workflows/test.yml?query={urllib.parse.quote(query)}"
|
|
155
|
+
report(f"waiting a few seconds to load: {run_url}")
|
|
156
|
+
await anyio.sleep(10)
|
|
157
|
+
else:
|
|
158
|
+
process = await anyio.run_process(command=["git", "rev-parse", "HEAD"], check=True, stderr=None)
|
|
159
|
+
if process.returncode != 0:
|
|
160
|
+
raise click.ClickException("Failed to get current commit SHA")
|
|
161
|
+
|
|
162
|
+
commit_sha = process.stdout.decode("utf-8").strip()
|
|
163
|
+
|
|
164
|
+
temp_branch_name = f"tmp/{username}/{commit_sha}/{uuid.uuid4()}"
|
|
165
|
+
|
|
166
|
+
process = await anyio.run_process(
|
|
167
|
+
command=["git", "push", self.remote, f"HEAD:{temp_branch_name}"], check=False, stdout=None, stderr=None
|
|
168
|
+
)
|
|
169
|
+
if process.returncode != 0:
|
|
170
|
+
raise click.ClickException("Failed to push temporary branch")
|
|
171
|
+
|
|
172
|
+
try:
|
|
173
|
+
await self.trigger_workflow(temp_branch_name)
|
|
174
|
+
for _ in range(10):
|
|
175
|
+
await anyio.sleep(1)
|
|
176
|
+
|
|
177
|
+
try:
|
|
178
|
+
report("looking for run")
|
|
179
|
+
html_url, api_url = await self.find_run(temp_branch_name)
|
|
180
|
+
report(f"run found at: {html_url}")
|
|
181
|
+
report(f"run found at: {api_url}")
|
|
182
|
+
except UnexpectedFormError:
|
|
183
|
+
report("run not found")
|
|
184
|
+
continue
|
|
185
|
+
|
|
186
|
+
break
|
|
187
|
+
else:
|
|
188
|
+
raise click.ClickException("Failed to find run url")
|
|
189
|
+
finally:
|
|
190
|
+
report(f"deleting temporary branch: {temp_branch_name}")
|
|
191
|
+
process = await anyio.run_process(
|
|
192
|
+
command=["git", "push", self.remote, "-d", temp_branch_name], check=False, stdout=None, stderr=None
|
|
193
|
+
)
|
|
194
|
+
if process.returncode != 0:
|
|
195
|
+
raise click.ClickException("Failed to dispatch workflow")
|
|
196
|
+
report(f"temporary branch deleted: {temp_branch_name}")
|
|
197
|
+
|
|
198
|
+
report(f"run html url: {html_url}")
|
|
199
|
+
report(f"run api url: {api_url}")
|
|
200
|
+
if self.open_browser:
|
|
201
|
+
webbrowser.open(html_url)
|
|
202
|
+
|
|
203
|
+
async def check_only(self) -> None:
|
|
204
|
+
if self.only is not None:
|
|
205
|
+
import chia._tests
|
|
206
|
+
|
|
207
|
+
test_path = Path(chia._tests.__file__).parent
|
|
208
|
+
effective_path = test_path.joinpath(self.only)
|
|
209
|
+
checks: dict[Per, Callable[[], bool]] = {"directory": effective_path.is_dir, "file": effective_path.is_file}
|
|
210
|
+
check = checks[self.per]
|
|
211
|
+
if not check():
|
|
212
|
+
if effective_path.exists():
|
|
213
|
+
explanation = "wrong type"
|
|
214
|
+
else:
|
|
215
|
+
explanation = "does not exist"
|
|
216
|
+
message = f"expected requested --only to be a {self.per}, {explanation} at: {effective_path.as_posix()}"
|
|
217
|
+
raise click.ClickException(message)
|
|
218
|
+
|
|
219
|
+
async def trigger_workflow(self, ref: str) -> None:
|
|
220
|
+
# https://docs.github.com/en/rest/actions/workflows?apiVersion=2022-11-28#create-a-workflow-dispatch-event
|
|
221
|
+
await run_gh_api(
|
|
222
|
+
method="POST",
|
|
223
|
+
args=[
|
|
224
|
+
f"/repos/{self.owner}/{self.repository}/actions/workflows/{self.workflow_id}/dispatches",
|
|
225
|
+
f"-f=ref={ref}",
|
|
226
|
+
*input_arg("per", self.per),
|
|
227
|
+
*input_arg("only", self.only, self.only is not None),
|
|
228
|
+
*input_arg("duplicates", self.duplicates),
|
|
229
|
+
*(arg for os_name in all_oses for arg in input_arg(f"run-{os_name}", os_name in self.oses)),
|
|
230
|
+
*input_arg("full-python-matrix", self.full_python_matrix),
|
|
231
|
+
],
|
|
232
|
+
error="Failed to dispatch workflow",
|
|
233
|
+
)
|
|
234
|
+
report(f"workflow triggered on branch: {ref}")
|
|
235
|
+
|
|
236
|
+
async def find_run(self, ref: str) -> tuple[str, str]:
|
|
237
|
+
# https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#list-workflow-runs-for-a-workflow
|
|
238
|
+
stdout = await run_gh_api(
|
|
239
|
+
method="GET",
|
|
240
|
+
args=[
|
|
241
|
+
f"-f=branch={ref}",
|
|
242
|
+
f"/repos/{self.owner}/{self.repository}/actions/workflows/{self.workflow_id}/runs",
|
|
243
|
+
],
|
|
244
|
+
error="Failed to query workflow runs",
|
|
245
|
+
capture_stdout=True,
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
response = json.loads(stdout)
|
|
249
|
+
runs = response["workflow_runs"]
|
|
250
|
+
try:
|
|
251
|
+
[run] = runs
|
|
252
|
+
except ValueError:
|
|
253
|
+
raise UnexpectedFormError(f"expected 1 run, got: {len(runs)}")
|
|
254
|
+
|
|
255
|
+
html_url = run["html_url"]
|
|
256
|
+
assert isinstance(html_url, str), f"expected html url to be a string, got: {html_url!r}"
|
|
257
|
+
|
|
258
|
+
api_url = run["url"]
|
|
259
|
+
assert isinstance(api_url, str), f"expected url to be a string, got: {api_url!r}"
|
|
260
|
+
|
|
261
|
+
return html_url, api_url
|
|
262
|
+
|
|
263
|
+
async def get_username(self) -> str:
|
|
264
|
+
# https://docs.github.com/en/rest/users/users?apiVersion=2022-11-28#get-the-authenticated-user
|
|
265
|
+
stdout = await run_gh_api(
|
|
266
|
+
method="GET",
|
|
267
|
+
args=["/user"],
|
|
268
|
+
error="Failed to get username",
|
|
269
|
+
capture_stdout=True,
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
response = json.loads(stdout)
|
|
273
|
+
username = response["login"]
|
|
274
|
+
assert isinstance(username, str), f"expected username to be a string, got: {username!r}"
|
|
275
|
+
return username
|
chia/cmds/init.py
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import click
|
|
4
|
+
|
|
5
|
+
from chia.cmds.cmd_classes import ChiaCliContext
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@click.command("init", help="Create or migrate the configuration")
|
|
9
|
+
@click.option(
|
|
10
|
+
"--create-certs",
|
|
11
|
+
"-c",
|
|
12
|
+
default=None,
|
|
13
|
+
help="Create new SSL certificates based on CA in [directory]",
|
|
14
|
+
type=click.Path(),
|
|
15
|
+
)
|
|
16
|
+
@click.option(
|
|
17
|
+
"--fix-ssl-permissions",
|
|
18
|
+
is_flag=True,
|
|
19
|
+
help="Attempt to fix SSL certificate/key file permissions",
|
|
20
|
+
)
|
|
21
|
+
@click.option("--testnet", is_flag=True, help="Configure this chia install to connect to the testnet")
|
|
22
|
+
@click.option("--set-passphrase", "-s", is_flag=True, help="Protect your keyring with a passphrase")
|
|
23
|
+
@click.option(
|
|
24
|
+
"--v1-db",
|
|
25
|
+
is_flag=True,
|
|
26
|
+
help="Initialize the blockchain database in v1 format (compatible with older versions of the full node)",
|
|
27
|
+
)
|
|
28
|
+
@click.pass_context
|
|
29
|
+
def init_cmd(
|
|
30
|
+
ctx: click.Context,
|
|
31
|
+
create_certs: str,
|
|
32
|
+
fix_ssl_permissions: bool,
|
|
33
|
+
testnet: bool,
|
|
34
|
+
set_passphrase: bool,
|
|
35
|
+
v1_db: bool,
|
|
36
|
+
) -> None:
|
|
37
|
+
"""
|
|
38
|
+
Create a new configuration or migrate from previous versions to current
|
|
39
|
+
|
|
40
|
+
\b
|
|
41
|
+
Follow these steps to create new certificates for a remote harvester:
|
|
42
|
+
- Make a copy of your Farming Machine CA directory: ~/.chia/[version]/config/ssl/ca
|
|
43
|
+
- Shut down all chia daemon processes with `chia stop all -d`
|
|
44
|
+
- Run `chia init -c [directory]` on your remote harvester,
|
|
45
|
+
where [directory] is the copy of your Farming Machine CA directory
|
|
46
|
+
- Get more details on remote harvester on Chia wiki:
|
|
47
|
+
https://github.com/Chia-Network/chia-blockchain/wiki/Farming-on-many-machines
|
|
48
|
+
"""
|
|
49
|
+
from pathlib import Path
|
|
50
|
+
|
|
51
|
+
from chia.cmds.init_funcs import init
|
|
52
|
+
from chia.cmds.passphrase_funcs import initialize_passphrase
|
|
53
|
+
|
|
54
|
+
if set_passphrase:
|
|
55
|
+
initialize_passphrase()
|
|
56
|
+
|
|
57
|
+
init(
|
|
58
|
+
Path(create_certs) if create_certs is not None else None,
|
|
59
|
+
ChiaCliContext.set_default(ctx).root_path,
|
|
60
|
+
fix_ssl_permissions,
|
|
61
|
+
testnet,
|
|
62
|
+
v1_db,
|
|
63
|
+
)
|