chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__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.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
@@ -6,11 +6,14 @@ import dataclasses
6
6
  import functools
7
7
  import signal
8
8
  import sys
9
+ from collections.abc import AsyncIterator
9
10
  from types import FrameType
10
- from typing import AsyncIterator, List, Optional, final
11
+ from typing import Optional, final
11
12
 
12
13
  from typing_extensions import Protocol
13
14
 
15
+ from chia.util.task_referencer import create_referenced_task
16
+
14
17
 
15
18
  class Handler(Protocol):
16
19
  def __call__(
@@ -33,7 +36,7 @@ class AsyncHandler(Protocol):
33
36
  @final
34
37
  @dataclasses.dataclass
35
38
  class SignalHandlers:
36
- tasks: List[asyncio.Task[None]] = dataclasses.field(default_factory=list)
39
+ tasks: list[asyncio.Task[None]] = dataclasses.field(default_factory=list)
37
40
 
38
41
  @classmethod
39
42
  @contextlib.asynccontextmanager
@@ -58,7 +61,7 @@ class SignalHandlers:
58
61
  ) -> None:
59
62
  self.remove_done_handlers()
60
63
 
61
- task = asyncio.create_task(
64
+ task = create_referenced_task(
62
65
  handler(signal_=signal_, stack_frame=stack_frame, loop=loop),
63
66
  )
64
67
  self.tasks.append(task)
@@ -1,31 +1,31 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from pathlib import Path
4
- from typing import Any, Dict, Tuple
4
+ from typing import Any
5
5
 
6
6
 
7
- def public_ssl_paths(path: Path, config: Dict[str, Any]) -> Tuple[Path, Path]:
7
+ def public_ssl_paths(path: Path, config: dict[str, Any]) -> tuple[Path, Path]:
8
8
  return (
9
9
  path / config["ssl"]["public_crt"],
10
10
  path / config["ssl"]["public_key"],
11
11
  )
12
12
 
13
13
 
14
- def private_ssl_paths(path: Path, config: Dict[str, Any]) -> Tuple[Path, Path]:
14
+ def private_ssl_paths(path: Path, config: dict[str, Any]) -> tuple[Path, Path]:
15
15
  return (
16
16
  path / config["ssl"]["private_crt"],
17
17
  path / config["ssl"]["private_key"],
18
18
  )
19
19
 
20
20
 
21
- def private_ssl_ca_paths(path: Path, config: Dict[str, Any]) -> Tuple[Path, Path]:
21
+ def private_ssl_ca_paths(path: Path, config: dict[str, Any]) -> tuple[Path, Path]:
22
22
  return (
23
23
  path / config["private_ssl_ca"]["crt"],
24
24
  path / config["private_ssl_ca"]["key"],
25
25
  )
26
26
 
27
27
 
28
- def chia_ssl_ca_paths(path: Path, config: Dict[str, Any]) -> Tuple[Path, Path]:
28
+ def chia_ssl_ca_paths(path: Path, config: dict[str, Any]) -> tuple[Path, Path]:
29
29
  return (
30
30
  path / config["chia_ssl_ca"]["crt"],
31
31
  path / config["chia_ssl_ca"]["key"],
@@ -1,10 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
+ import os
4
5
  import pathlib
5
6
  import sys
6
- from typing import Any, Dict, List, Optional, cast
7
+ from typing import Any, Optional, cast
7
8
 
9
+ from chia.apis import ApiProtocolRegistry
8
10
  from chia.data_layer.data_layer import DataLayer
9
11
  from chia.data_layer.data_layer_api import DataLayerAPI
10
12
  from chia.data_layer.data_layer_util import PluginRemote
@@ -18,22 +20,24 @@ from chia.ssl.create_ssl import create_all_ssl
18
20
  from chia.types.aliases import DataLayerService, WalletService
19
21
  from chia.util.chia_logging import initialize_logging
20
22
  from chia.util.config import load_config, load_config_cli
21
- from chia.util.default_root import DEFAULT_ROOT_PATH
23
+ from chia.util.default_root import resolve_root_path
22
24
  from chia.util.ints import uint16
25
+ from chia.util.task_timing import maybe_manage_task_instrumentation
23
26
 
24
27
  # See: https://bugs.python.org/issue29288
25
28
  "".encode("idna")
26
29
 
27
30
  SERVICE_NAME = "data_layer"
31
+
28
32
  log = logging.getLogger(__name__)
29
33
 
30
34
 
31
35
  # TODO: Review need for config and if retained then hint it properly.
32
36
  def create_data_layer_service(
33
37
  root_path: pathlib.Path,
34
- config: Dict[str, Any],
35
- downloaders: List[PluginRemote],
36
- uploaders: List[PluginRemote], # dont add FilesystemUploader to this, it is the default uploader
38
+ config: dict[str, Any],
39
+ downloaders: list[PluginRemote],
40
+ uploaders: list[PluginRemote], # dont add FilesystemUploader to this, it is the default uploader
37
41
  wallet_service: Optional[WalletService] = None,
38
42
  connect_to_daemon: bool = True,
39
43
  ) -> DataLayerService:
@@ -41,7 +45,11 @@ def create_data_layer_service(
41
45
  uploaders = []
42
46
  if downloaders is None:
43
47
  downloaders = []
48
+
44
49
  service_config = config[SERVICE_NAME]
50
+
51
+ network_id = service_config["selected_network"]
52
+
45
53
  self_hostname = config["self_hostname"]
46
54
  wallet_rpc_port = service_config["wallet_peer"]["port"]
47
55
  if wallet_service is None:
@@ -52,26 +60,26 @@ def create_data_layer_service(
52
60
  wallet_config = wallet_service.config
53
61
  wallet_rpc_init = WalletRpcClient.create(self_hostname, uint16(wallet_rpc_port), wallet_root_path, wallet_config)
54
62
 
55
- data_layer = DataLayer.create(
63
+ # dont add Fil)
64
+ node = DataLayer.create(
56
65
  config=service_config,
57
66
  root_path=root_path,
58
67
  wallet_rpc_init=wallet_rpc_init,
59
68
  downloaders=downloaders,
60
69
  uploaders=uploaders,
61
- ) # dont add Fil)
62
- api = DataLayerAPI(data_layer)
63
- network_id = service_config["selected_network"]
64
- rpc_port = service_config.get("rpc_port")
70
+ )
71
+ peer_api = DataLayerAPI(node)
72
+
65
73
  rpc_info: Optional[RpcInfo[DataLayerRpcApi]] = None
66
- if rpc_port is not None:
74
+ if service_config.get("start_rpc_server", True):
67
75
  rpc_info = (DataLayerRpcApi, cast(int, service_config["rpc_port"]))
68
76
 
69
77
  return Service(
70
78
  root_path=root_path,
71
79
  config=config,
72
- node=data_layer,
80
+ node=node,
73
81
  # TODO: not for peers...
74
- peer_api=api,
82
+ peer_api=peer_api,
75
83
  node_type=NodeType.DATA_LAYER,
76
84
  advertised_port=None,
77
85
  service_name=SERVICE_NAME,
@@ -79,34 +87,35 @@ def create_data_layer_service(
79
87
  max_request_body_size=service_config.get("rpc_server_max_request_body_size", 26214400),
80
88
  rpc_info=rpc_info,
81
89
  connect_to_daemon=connect_to_daemon,
90
+ class_for_type=ApiProtocolRegistry,
82
91
  )
83
92
 
84
93
 
85
- async def async_main() -> int:
94
+ async def async_main(root_path: pathlib.Path) -> int:
86
95
  # TODO: refactor to avoid the double load
87
- config = load_config(DEFAULT_ROOT_PATH, "config.yaml", fill_missing_services=True)
88
- service_config = load_config_cli(DEFAULT_ROOT_PATH, "config.yaml", SERVICE_NAME, fill_missing_services=True)
96
+ config = load_config(root_path, "config.yaml", fill_missing_services=True)
97
+ service_config = load_config_cli(root_path, "config.yaml", SERVICE_NAME, fill_missing_services=True)
89
98
  config[SERVICE_NAME] = service_config
90
99
  initialize_logging(
91
100
  service_name=SERVICE_NAME,
92
101
  logging_config=service_config["logging"],
93
- root_path=DEFAULT_ROOT_PATH,
102
+ root_path=root_path,
94
103
  )
95
104
 
96
105
  create_all_ssl(
97
- root_path=DEFAULT_ROOT_PATH,
106
+ root_path=root_path,
98
107
  private_node_names=["data_layer"],
99
108
  public_node_names=["data_layer"],
100
109
  overwrite=False,
101
110
  )
102
111
 
103
112
  plugins_config = config["data_layer"].get("plugins", {})
104
- service_dir = DEFAULT_ROOT_PATH / SERVICE_NAME
113
+ service_dir = root_path / SERVICE_NAME
105
114
 
106
115
  old_uploaders = config["data_layer"].get("uploaders", [])
107
116
  new_uploaders = plugins_config.get("uploaders", [])
108
117
  conf_file_uploaders = await load_plugin_configurations(service_dir, "uploaders", log)
109
- uploaders: List[PluginRemote] = [
118
+ uploaders: list[PluginRemote] = [
110
119
  *(PluginRemote(url=url) for url in old_uploaders),
111
120
  *(PluginRemote.unmarshal(marshalled=marshalled) for marshalled in new_uploaders),
112
121
  *conf_file_uploaders,
@@ -115,13 +124,13 @@ async def async_main() -> int:
115
124
  old_downloaders = config["data_layer"].get("downloaders", [])
116
125
  new_downloaders = plugins_config.get("downloaders", [])
117
126
  conf_file_uploaders = await load_plugin_configurations(service_dir, "downloaders", log)
118
- downloaders: List[PluginRemote] = [
127
+ downloaders: list[PluginRemote] = [
119
128
  *(PluginRemote(url=url) for url in old_downloaders),
120
129
  *(PluginRemote.unmarshal(marshalled=marshalled) for marshalled in new_downloaders),
121
130
  *conf_file_uploaders,
122
131
  ]
123
132
 
124
- service = create_data_layer_service(DEFAULT_ROOT_PATH, config, downloaders, uploaders)
133
+ service = create_data_layer_service(root_path, config, downloaders, uploaders)
125
134
  async with SignalHandlers.manage() as signal_handlers:
126
135
  await service.setup_process_global_state(signal_handlers=signal_handlers)
127
136
  await service.run()
@@ -130,7 +139,12 @@ async def async_main() -> int:
130
139
 
131
140
 
132
141
  def main() -> int:
133
- return async_run(async_main())
142
+ root_path = resolve_root_path(override=None)
143
+
144
+ with maybe_manage_task_instrumentation(
145
+ enable=os.environ.get(f"CHIA_INSTRUMENT_{SERVICE_NAME.upper()}") is not None
146
+ ):
147
+ return async_run(coro=async_main(root_path=root_path))
134
148
 
135
149
 
136
150
  if __name__ == "__main__":
@@ -1,9 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import os
3
4
  import pathlib
4
5
  import sys
5
- from typing import Any, Dict, Optional
6
+ from typing import Any, Optional
6
7
 
8
+ from chia.apis import ApiProtocolRegistry
7
9
  from chia.consensus.constants import ConsensusConstants, replace_str_to_bytes
8
10
  from chia.consensus.default_constants import DEFAULT_CONSTANTS, update_testnet_overrides
9
11
  from chia.farmer.farmer import Farmer
@@ -15,8 +17,9 @@ from chia.server.start_service import RpcInfo, Service, async_run
15
17
  from chia.types.aliases import FarmerService
16
18
  from chia.util.chia_logging import initialize_service_logging
17
19
  from chia.util.config import get_unresolved_peer_infos, load_config, load_config_cli
18
- from chia.util.default_root import DEFAULT_ROOT_PATH
20
+ from chia.util.default_root import resolve_root_path
19
21
  from chia.util.keychain import Keychain
22
+ from chia.util.task_timing import maybe_manage_task_instrumentation
20
23
 
21
24
  # See: https://bugs.python.org/issue29288
22
25
  "".encode("idna")
@@ -26,8 +29,8 @@ SERVICE_NAME = "farmer"
26
29
 
27
30
  def create_farmer_service(
28
31
  root_path: pathlib.Path,
29
- config: Dict[str, Any],
30
- config_pool: Dict[str, Any],
32
+ config: dict[str, Any],
33
+ config_pool: dict[str, Any],
31
34
  consensus_constants: ConsensusConstants,
32
35
  keychain: Optional[Keychain] = None,
33
36
  connect_to_daemon: bool = True,
@@ -39,38 +42,42 @@ def create_farmer_service(
39
42
  update_testnet_overrides(network_id, overrides)
40
43
  updated_constants = replace_str_to_bytes(consensus_constants, **overrides)
41
44
 
42
- farmer = Farmer(
45
+ node = Farmer(
43
46
  root_path, service_config, config_pool, consensus_constants=updated_constants, local_keychain=keychain
44
47
  )
45
- peer_api = FarmerAPI(farmer)
48
+ peer_api = FarmerAPI(node)
49
+
46
50
  rpc_info: Optional[RpcInfo[FarmerRpcApi]] = None
47
- if service_config["start_rpc_server"]:
51
+ if service_config.get("start_rpc_server", True):
48
52
  rpc_info = (FarmerRpcApi, service_config["rpc_port"])
53
+
49
54
  return Service(
50
55
  root_path=root_path,
51
56
  config=config,
52
- node=farmer,
57
+ node=node,
53
58
  peer_api=peer_api,
54
59
  node_type=NodeType.FARMER,
55
60
  advertised_port=service_config["port"],
56
61
  service_name=SERVICE_NAME,
57
62
  connect_peers=get_unresolved_peer_infos(service_config, NodeType.FULL_NODE),
58
- on_connect_callback=farmer.on_connect,
63
+ on_connect_callback=node.on_connect,
59
64
  network_id=network_id,
60
65
  rpc_info=rpc_info,
61
66
  connect_to_daemon=connect_to_daemon,
67
+ class_for_type=ApiProtocolRegistry,
62
68
  )
63
69
 
64
70
 
65
- async def async_main() -> int:
71
+ async def async_main(root_path: pathlib.Path) -> int:
66
72
  # TODO: refactor to avoid the double load
67
- config = load_config(DEFAULT_ROOT_PATH, "config.yaml")
68
- service_config = load_config_cli(DEFAULT_ROOT_PATH, "config.yaml", SERVICE_NAME)
73
+ config = load_config(root_path, "config.yaml")
74
+ service_config = load_config_cli(root_path, "config.yaml", SERVICE_NAME)
69
75
  config[SERVICE_NAME] = service_config
70
- config_pool = load_config_cli(DEFAULT_ROOT_PATH, "config.yaml", "pool")
76
+ config_pool = load_config_cli(root_path, "config.yaml", "pool")
71
77
  config["pool"] = config_pool
72
- initialize_service_logging(service_name=SERVICE_NAME, config=config)
73
- service = create_farmer_service(DEFAULT_ROOT_PATH, config, config_pool, DEFAULT_CONSTANTS)
78
+ initialize_service_logging(service_name=SERVICE_NAME, config=config, root_path=root_path)
79
+
80
+ service = create_farmer_service(root_path, config, config_pool, DEFAULT_CONSTANTS)
74
81
  async with SignalHandlers.manage() as signal_handlers:
75
82
  await service.setup_process_global_state(signal_handlers=signal_handlers)
76
83
  await service.run()
@@ -79,7 +86,12 @@ async def async_main() -> int:
79
86
 
80
87
 
81
88
  def main() -> int:
82
- return async_run(async_main())
89
+ root_path = resolve_root_path(override=None)
90
+
91
+ with maybe_manage_task_instrumentation(
92
+ enable=os.environ.get(f"CHIA_INSTRUMENT_{SERVICE_NAME.upper()}") is not None
93
+ ):
94
+ return async_run(coro=async_main(root_path=root_path))
83
95
 
84
96
 
85
97
  if __name__ == "__main__":
@@ -1,12 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
- import logging
4
3
  import os
5
4
  import pathlib
6
5
  import sys
7
6
  from multiprocessing import freeze_support
8
- from typing import Any, Dict, List, Optional, Tuple
7
+ from typing import Any, Optional
9
8
 
9
+ from chia.apis import ApiProtocolRegistry
10
10
  from chia.consensus.constants import ConsensusConstants, replace_str_to_bytes
11
11
  from chia.consensus.default_constants import DEFAULT_CONSTANTS, update_testnet_overrides
12
12
  from chia.full_node.full_node import FullNode
@@ -18,7 +18,7 @@ from chia.server.start_service import RpcInfo, Service, async_run
18
18
  from chia.types.aliases import FullNodeService
19
19
  from chia.util.chia_logging import initialize_service_logging
20
20
  from chia.util.config import get_unresolved_peer_infos, load_config, load_config_cli
21
- from chia.util.default_root import DEFAULT_ROOT_PATH
21
+ from chia.util.default_root import resolve_root_path
22
22
  from chia.util.ints import uint16
23
23
  from chia.util.task_timing import maybe_manage_task_instrumentation
24
24
 
@@ -26,60 +26,63 @@ from chia.util.task_timing import maybe_manage_task_instrumentation
26
26
  "".encode("idna")
27
27
 
28
28
  SERVICE_NAME = "full_node"
29
- log = logging.getLogger(__name__)
30
29
 
31
30
 
32
31
  async def create_full_node_service(
33
32
  root_path: pathlib.Path,
34
- config: Dict[str, Any],
33
+ config: dict[str, Any],
35
34
  consensus_constants: ConsensusConstants,
36
35
  connect_to_daemon: bool = True,
37
- override_capabilities: Optional[List[Tuple[uint16, str]]] = None,
36
+ override_capabilities: Optional[list[tuple[uint16, str]]] = None,
38
37
  ) -> FullNodeService:
39
38
  service_config = config[SERVICE_NAME]
40
39
 
41
- full_node = await FullNode.create(
40
+ network_id = service_config["selected_network"]
41
+ upnp_list = []
42
+ if service_config["enable_upnp"]:
43
+ upnp_list = [service_config["port"]]
44
+
45
+ node = await FullNode.create(
42
46
  service_config,
43
47
  root_path=root_path,
44
48
  consensus_constants=consensus_constants,
45
49
  )
46
- api = FullNodeAPI(full_node)
50
+ peer_api = FullNodeAPI(node)
47
51
 
48
- upnp_list = []
49
- if service_config["enable_upnp"]:
50
- upnp_list = [service_config["port"]]
51
- network_id = service_config["selected_network"]
52
52
  rpc_info: Optional[RpcInfo[FullNodeRpcApi]] = None
53
- if service_config["start_rpc_server"]:
53
+ if service_config.get("start_rpc_server", True):
54
54
  rpc_info = (FullNodeRpcApi, service_config["rpc_port"])
55
+
55
56
  return Service(
56
57
  root_path=root_path,
57
58
  config=config,
58
- node=api.full_node,
59
- peer_api=api,
59
+ node=node,
60
+ peer_api=peer_api,
60
61
  node_type=NodeType.FULL_NODE,
61
62
  advertised_port=service_config["port"],
62
63
  service_name=SERVICE_NAME,
63
64
  upnp_ports=upnp_list,
64
65
  connect_peers=get_unresolved_peer_infos(service_config, NodeType.FULL_NODE),
65
- on_connect_callback=full_node.on_connect,
66
+ on_connect_callback=node.on_connect,
66
67
  network_id=network_id,
67
68
  rpc_info=rpc_info,
68
69
  connect_to_daemon=connect_to_daemon,
69
70
  override_capabilities=override_capabilities,
71
+ class_for_type=ApiProtocolRegistry,
70
72
  )
71
73
 
72
74
 
73
- async def async_main(service_config: Dict[str, Any]) -> int:
75
+ async def async_main(service_config: dict[str, Any], root_path: pathlib.Path) -> int:
74
76
  # TODO: refactor to avoid the double load
75
- config = load_config(DEFAULT_ROOT_PATH, "config.yaml")
77
+ config = load_config(root_path, "config.yaml")
76
78
  config[SERVICE_NAME] = service_config
77
79
  network_id = service_config["selected_network"]
78
80
  overrides = service_config["network_overrides"]["constants"][network_id]
79
81
  update_testnet_overrides(network_id, overrides)
80
82
  updated_constants = replace_str_to_bytes(DEFAULT_CONSTANTS, **overrides)
81
- initialize_service_logging(service_name=SERVICE_NAME, config=config)
82
- service = await create_full_node_service(DEFAULT_ROOT_PATH, config, updated_constants)
83
+ initialize_service_logging(service_name=SERVICE_NAME, config=config, root_path=root_path)
84
+
85
+ service = await create_full_node_service(root_path, config, updated_constants)
83
86
  async with SignalHandlers.manage() as signal_handlers:
84
87
  await service.setup_process_global_state(signal_handlers=signal_handlers)
85
88
  await service.run()
@@ -89,9 +92,12 @@ async def async_main(service_config: Dict[str, Any]) -> int:
89
92
 
90
93
  def main() -> int:
91
94
  freeze_support()
95
+ root_path = resolve_root_path(override=None)
92
96
 
93
- with maybe_manage_task_instrumentation(enable=os.environ.get("CHIA_INSTRUMENT_NODE") is not None):
94
- service_config = load_config_cli(DEFAULT_ROOT_PATH, "config.yaml", SERVICE_NAME)
97
+ with maybe_manage_task_instrumentation(
98
+ enable=os.environ.get(f"CHIA_INSTRUMENT_{SERVICE_NAME.upper()}") is not None
99
+ ):
100
+ service_config = load_config_cli(root_path, "config.yaml", SERVICE_NAME)
95
101
  target_peer_count = service_config.get("target_peer_count", 40) - service_config.get(
96
102
  "target_outbound_peer_count", 8
97
103
  )
@@ -99,7 +105,7 @@ def main() -> int:
99
105
  target_peer_count = None
100
106
  if not service_config.get("use_chia_loop_policy", True):
101
107
  target_peer_count = None
102
- return async_run(coro=async_main(service_config), connection_limit=target_peer_count)
108
+ return async_run(coro=async_main(service_config, root_path=root_path), connection_limit=target_peer_count)
103
109
 
104
110
 
105
111
  if __name__ == "__main__":
@@ -1,9 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import os
3
4
  import pathlib
4
5
  import sys
5
- from typing import Any, Dict, Optional, Set
6
+ from typing import Any, Optional
6
7
 
8
+ from chia.apis import ApiProtocolRegistry
7
9
  from chia.consensus.constants import ConsensusConstants, replace_str_to_bytes
8
10
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
9
11
  from chia.harvester.harvester import Harvester
@@ -16,7 +18,8 @@ from chia.types.aliases import HarvesterService
16
18
  from chia.types.peer_info import UnresolvedPeerInfo
17
19
  from chia.util.chia_logging import initialize_service_logging
18
20
  from chia.util.config import get_unresolved_peer_infos, load_config, load_config_cli
19
- from chia.util.default_root import DEFAULT_ROOT_PATH
21
+ from chia.util.default_root import resolve_root_path
22
+ from chia.util.task_timing import maybe_manage_task_instrumentation
20
23
 
21
24
  # See: https://bugs.python.org/issue29288
22
25
  "".encode("idna")
@@ -26,26 +29,29 @@ SERVICE_NAME = "harvester"
26
29
 
27
30
  def create_harvester_service(
28
31
  root_path: pathlib.Path,
29
- config: Dict[str, Any],
32
+ config: dict[str, Any],
30
33
  consensus_constants: ConsensusConstants,
31
- farmer_peers: Set[UnresolvedPeerInfo],
34
+ farmer_peers: set[UnresolvedPeerInfo],
32
35
  connect_to_daemon: bool = True,
33
36
  ) -> HarvesterService:
34
37
  service_config = config[SERVICE_NAME]
35
38
 
36
- overrides = service_config["network_overrides"]["constants"][service_config["selected_network"]]
39
+ network_id = service_config["selected_network"]
40
+ overrides = service_config["network_overrides"]["constants"][network_id]
37
41
  updated_constants = replace_str_to_bytes(consensus_constants, **overrides)
38
42
 
39
- harvester = Harvester(root_path, service_config, updated_constants)
40
- peer_api = HarvesterAPI(harvester)
43
+ node = Harvester(root_path, service_config, updated_constants)
44
+ peer_api = HarvesterAPI(node)
41
45
  network_id = service_config["selected_network"]
46
+
42
47
  rpc_info: Optional[RpcInfo[HarvesterRpcApi]] = None
43
- if service_config["start_rpc_server"]:
48
+ if service_config.get("start_rpc_server", True):
44
49
  rpc_info = (HarvesterRpcApi, service_config["rpc_port"])
50
+
45
51
  return Service(
46
52
  root_path=root_path,
47
53
  config=config,
48
- node=harvester,
54
+ node=node,
49
55
  peer_api=peer_api,
50
56
  node_type=NodeType.HARVESTER,
51
57
  advertised_port=None,
@@ -54,17 +60,19 @@ def create_harvester_service(
54
60
  network_id=network_id,
55
61
  rpc_info=rpc_info,
56
62
  connect_to_daemon=connect_to_daemon,
63
+ class_for_type=ApiProtocolRegistry,
57
64
  )
58
65
 
59
66
 
60
- async def async_main() -> int:
67
+ async def async_main(root_path: pathlib.Path) -> int:
61
68
  # TODO: refactor to avoid the double load
62
- config = load_config(DEFAULT_ROOT_PATH, "config.yaml")
63
- service_config = load_config_cli(DEFAULT_ROOT_PATH, "config.yaml", SERVICE_NAME)
69
+ config = load_config(root_path, "config.yaml")
70
+ service_config = load_config_cli(root_path, "config.yaml", SERVICE_NAME)
64
71
  config[SERVICE_NAME] = service_config
65
- initialize_service_logging(service_name=SERVICE_NAME, config=config)
72
+ initialize_service_logging(service_name=SERVICE_NAME, config=config, root_path=root_path)
66
73
  farmer_peers = get_unresolved_peer_infos(service_config, NodeType.FARMER)
67
- service = create_harvester_service(DEFAULT_ROOT_PATH, config, DEFAULT_CONSTANTS, farmer_peers)
74
+
75
+ service = create_harvester_service(root_path, config, DEFAULT_CONSTANTS, farmer_peers)
68
76
  async with SignalHandlers.manage() as signal_handlers:
69
77
  await service.setup_process_global_state(signal_handlers=signal_handlers)
70
78
  await service.run()
@@ -73,7 +81,12 @@ async def async_main() -> int:
73
81
 
74
82
 
75
83
  def main() -> int:
76
- return async_run(async_main())
84
+ root_path = resolve_root_path(override=None)
85
+
86
+ with maybe_manage_task_instrumentation(
87
+ enable=os.environ.get(f"CHIA_INSTRUMENT_{SERVICE_NAME.upper()}") is not None
88
+ ):
89
+ return async_run(coro=async_main(root_path=root_path))
77
90
 
78
91
 
79
92
  if __name__ == "__main__":
@@ -1,9 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import os
3
4
  import pathlib
4
5
  import sys
5
- from typing import Any, Dict, Optional
6
+ from typing import Any, Optional
6
7
 
8
+ from chia.apis import ApiProtocolRegistry
7
9
  from chia.introducer.introducer import Introducer
8
10
  from chia.introducer.introducer_api import IntroducerAPI
9
11
  from chia.server.outbound_message import NodeType
@@ -12,7 +14,8 @@ from chia.server.start_service import Service, async_run
12
14
  from chia.types.aliases import IntroducerService
13
15
  from chia.util.chia_logging import initialize_service_logging
14
16
  from chia.util.config import load_config, load_config_cli
15
- from chia.util.default_root import DEFAULT_ROOT_PATH
17
+ from chia.util.default_root import resolve_root_path
18
+ from chia.util.task_timing import maybe_manage_task_instrumentation
16
19
 
17
20
  # See: https://bugs.python.org/issue29288
18
21
  "".encode("idna")
@@ -22,38 +25,42 @@ SERVICE_NAME = "introducer"
22
25
 
23
26
  def create_introducer_service(
24
27
  root_path: pathlib.Path,
25
- config: Dict[str, Any],
28
+ config: dict[str, Any],
26
29
  advertised_port: Optional[int] = None,
27
30
  connect_to_daemon: bool = True,
28
31
  ) -> IntroducerService:
29
32
  service_config = config[SERVICE_NAME]
30
33
 
34
+ network_id = service_config["selected_network"]
35
+
31
36
  if advertised_port is None:
32
37
  advertised_port = service_config["port"]
33
38
 
34
- introducer = Introducer(service_config["max_peers_to_send"], service_config["recent_peer_threshold"])
35
- node__api = IntroducerAPI(introducer)
36
- network_id = service_config["selected_network"]
39
+ node = Introducer(service_config["max_peers_to_send"], service_config["recent_peer_threshold"])
40
+ peer_api = IntroducerAPI(node)
41
+
37
42
  return Service(
38
43
  root_path=root_path,
39
44
  config=config,
40
- node=introducer,
41
- peer_api=node__api,
45
+ node=node,
46
+ peer_api=peer_api,
42
47
  node_type=NodeType.INTRODUCER,
48
+ advertised_port=advertised_port,
43
49
  service_name=SERVICE_NAME,
44
50
  network_id=network_id,
45
- advertised_port=advertised_port,
46
51
  connect_to_daemon=connect_to_daemon,
52
+ class_for_type=ApiProtocolRegistry,
47
53
  )
48
54
 
49
55
 
50
- async def async_main() -> int:
56
+ async def async_main(root_path: pathlib.Path) -> int:
51
57
  # TODO: refactor to avoid the double load
52
- config = load_config(DEFAULT_ROOT_PATH, "config.yaml")
53
- service_config = load_config_cli(DEFAULT_ROOT_PATH, "config.yaml", SERVICE_NAME)
58
+ config = load_config(root_path, "config.yaml")
59
+ service_config = load_config_cli(root_path, "config.yaml", SERVICE_NAME)
54
60
  config[SERVICE_NAME] = service_config
55
- service = create_introducer_service(DEFAULT_ROOT_PATH, config)
56
- initialize_service_logging(service_name=SERVICE_NAME, config=config)
61
+ initialize_service_logging(service_name=SERVICE_NAME, config=config, root_path=root_path)
62
+
63
+ service = create_introducer_service(root_path, config)
57
64
  async with SignalHandlers.manage() as signal_handlers:
58
65
  await service.setup_process_global_state(signal_handlers=signal_handlers)
59
66
  await service.run()
@@ -62,7 +69,12 @@ async def async_main() -> int:
62
69
 
63
70
 
64
71
  def main() -> int:
65
- return async_run(async_main())
72
+ root_path = resolve_root_path(override=None)
73
+
74
+ with maybe_manage_task_instrumentation(
75
+ enable=os.environ.get(f"CHIA_INSTRUMENT_{SERVICE_NAME.upper()}") is not None
76
+ ):
77
+ return async_run(coro=async_main(root_path=root_path))
66
78
 
67
79
 
68
80
  if __name__ == "__main__":