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
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from collections.abc import AsyncIterator
3
4
  from dataclasses import dataclass
4
- from typing import AsyncIterator, final
5
+ from typing import final
5
6
 
6
7
  import pytest
7
8
 
@@ -4,7 +4,7 @@ import asyncio
4
4
  import random
5
5
  import re
6
6
  from dataclasses import dataclass
7
- from typing import List, Optional, Tuple, Type
7
+ from typing import Optional
8
8
 
9
9
  import anyio
10
10
  import pytest
@@ -110,7 +110,7 @@ async def test_worker_id_counts() -> None:
110
110
  worker_async_callable=worker,
111
111
  target_worker_count=1,
112
112
  ):
113
- results: List[int] = []
113
+ results: list[int] = []
114
114
 
115
115
  with anyio.fail_after(adjusted_timeout(10)):
116
116
  for _ in expected_results:
@@ -194,7 +194,7 @@ async def test_simple_queue_example() -> None:
194
194
  for input in inputs:
195
195
  await work_queue.put(input)
196
196
 
197
- results: List[int] = []
197
+ results: list[int] = []
198
198
 
199
199
  with anyio.fail_after(adjusted_timeout(10)):
200
200
  for _ in inputs:
@@ -228,7 +228,7 @@ async def test_simple_queue_example_using_queued() -> None:
228
228
  for job in jobs:
229
229
  await work_queue.put(job)
230
230
 
231
- results: List[int] = []
231
+ results: list[int] = []
232
232
 
233
233
  with anyio.fail_after(adjusted_timeout(10)):
234
234
  for _ in expected_results:
@@ -266,7 +266,7 @@ async def test_queued_pre_cancel() -> None:
266
266
 
267
267
  await work_queue.put(job)
268
268
 
269
- results: List[int] = []
269
+ results: list[int] = []
270
270
 
271
271
  with anyio.fail_after(adjusted_timeout(10)):
272
272
  for _ in expected_results:
@@ -304,7 +304,7 @@ async def test_queued_active_cancel() -> None:
304
304
  for job in jobs:
305
305
  await work_queue.put(job)
306
306
 
307
- results: List[int] = []
307
+ results: list[int] = []
308
308
  with anyio.fail_after(adjusted_timeout(10)):
309
309
  for job in jobs:
310
310
  await job.started.wait()
@@ -346,7 +346,7 @@ async def test_queued_raises() -> None:
346
346
  for job in jobs:
347
347
  await work_queue.put(job)
348
348
 
349
- results: List[int] = []
349
+ results: list[int] = []
350
350
 
351
351
  with anyio.fail_after(adjusted_timeout(10)):
352
352
  for _ in expected_results:
@@ -355,7 +355,7 @@ async def test_queued_raises() -> None:
355
355
  raising_jobs = [job for job in jobs if job.input in raises]
356
356
  expected_exceptions = [(Exception, (job.input,)) for job in raising_jobs]
357
357
 
358
- exceptions: List[Tuple[Type[BaseException], Tuple[int]]] = []
358
+ exceptions: list[tuple[type[BaseException], tuple[int]]] = []
359
359
  for job in raising_jobs:
360
360
  exception = job.exception
361
361
  assert isinstance(exception, BaseException)
@@ -4,14 +4,13 @@ import json
4
4
  import pathlib
5
5
  import subprocess
6
6
  import sys
7
- from typing import Dict, List
8
7
 
9
8
  import chia._tests
10
9
 
11
10
  build_job_matrix_path = pathlib.Path(chia._tests.__file__).with_name("build-job-matrix.py")
12
11
 
13
12
 
14
- def run(args: List[str]) -> str:
13
+ def run(args: list[str]) -> str:
15
14
  completed_process = subprocess.run(
16
15
  [sys.executable, build_job_matrix_path, *args],
17
16
  check=True,
@@ -22,7 +21,7 @@ def run(args: List[str]) -> str:
22
21
 
23
22
 
24
23
  def test() -> None:
25
- timeouts: Dict[int, Dict[str, int]] = {}
24
+ timeouts: dict[int, dict[str, int]] = {}
26
25
 
27
26
  multipliers = [1, 2, 3]
28
27
 
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import List, Tuple
4
-
5
3
  import pytest
6
4
  from chia_rs import G1Element
7
5
  from clvm.casts import int_to_bytes
@@ -29,8 +27,8 @@ TEST_COIN = Coin(H1, H2, uint64(123))
29
27
 
30
28
  def mk_agg_sig_conditions(
31
29
  opcode: ConditionOpcode,
32
- agg_sig_data: List[Tuple[G1Element, bytes]],
33
- agg_sig_unsafe_data: List[Tuple[G1Element, bytes]] = [],
30
+ agg_sig_data: list[tuple[G1Element, bytes]],
31
+ agg_sig_unsafe_data: list[tuple[G1Element, bytes]] = [],
34
32
  ) -> SpendBundleConditions:
35
33
  spend = SpendConditions(
36
34
  coin_id=TEST_COIN.name(),
@@ -53,7 +51,7 @@ def mk_agg_sig_conditions(
53
51
  agg_sig_puzzle_amount=agg_sig_data if opcode == ConditionOpcode.AGG_SIG_PUZZLE_AMOUNT else [],
54
52
  flags=0,
55
53
  )
56
- return SpendBundleConditions([spend], 0, 0, 0, None, None, agg_sig_unsafe_data, 0, 0, 0, False)
54
+ return SpendBundleConditions([spend], 0, 0, 0, None, None, agg_sig_unsafe_data, 0, 0, 0, False, 0, 0)
57
55
 
58
56
 
59
57
  @pytest.mark.parametrize(
@@ -100,7 +98,7 @@ def test_pkm_pairs_vs_for_conditions_dict(opcode: ConditionOpcode) -> None:
100
98
 
101
99
  class TestPkmPairs:
102
100
  def test_empty_list(self) -> None:
103
- conds = SpendBundleConditions([], 0, 0, 0, None, None, [], 0, 0, 0, False)
101
+ conds = SpendBundleConditions([], 0, 0, 0, None, None, [], 0, 0, 0, False, 0, 0)
104
102
  pks, msgs = pkm_pairs(conds, b"foobar")
105
103
  assert pks == []
106
104
  assert msgs == []
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Any, Dict, Optional, Set
4
+ from typing import Any, Optional
5
5
 
6
6
  from chia._tests.util.misc import DataCase, Marks, datacases
7
7
  from chia.server.outbound_message import NodeType
@@ -13,9 +13,9 @@ from chia.util.ints import uint16
13
13
  @dataclass
14
14
  class GetUnresolvedPeerInfosCase(DataCase):
15
15
  description: str
16
- service_config: Dict[str, Any]
16
+ service_config: dict[str, Any]
17
17
  requested_node_type: NodeType
18
- expected_peer_infos: Set[UnresolvedPeerInfo]
18
+ expected_peer_infos: set[UnresolvedPeerInfo]
19
19
  marks: Marks = ()
20
20
 
21
21
  @property
@@ -154,9 +154,9 @@ def test_get_unresolved_peer_infos(case: GetUnresolvedPeerInfosCase) -> None:
154
154
  @dataclass
155
155
  class SetPeerInfoCase(DataCase):
156
156
  description: str
157
- service_config: Dict[str, Any]
157
+ service_config: dict[str, Any]
158
158
  requested_node_type: NodeType
159
- expected_service_config: Dict[str, Any]
159
+ expected_service_config: dict[str, Any]
160
160
  peer_host: Optional[str] = None
161
161
  peer_port: Optional[int] = None
162
162
  marks: Marks = ()
@@ -2,8 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  import os
4
4
  import re
5
+ from collections.abc import Sequence
5
6
  from dataclasses import dataclass
6
- from typing import Sequence
7
7
 
8
8
  from click.testing import CliRunner
9
9
 
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import random
4
- from typing import Generator, Iterator, List, Optional
4
+ from collections.abc import Generator, Iterator
5
+ from typing import Optional
5
6
 
6
7
  import pytest
7
8
  from chia_rs import G1Element, G2Element
@@ -23,15 +24,20 @@ from chia.types.blockchain_format.vdf import VDFInfo, VDFProof
23
24
  from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
24
25
  from chia.types.full_block import FullBlock
25
26
  from chia.types.header_block import HeaderBlock
26
- from chia.util.full_block_utils import block_info_from_block, generator_from_block, header_block_from_block
27
+ from chia.util.full_block_utils import (
28
+ block_info_from_block,
29
+ generator_from_block,
30
+ get_height_and_tx_status_from_block,
31
+ header_block_from_block,
32
+ )
27
33
  from chia.util.generator_tools import get_block_header
28
34
  from chia.util.ints import uint8, uint32, uint64, uint128
29
35
 
30
- test_g2s: List[G2Element] = [rand_g2() for _ in range(10)]
31
- test_g1s: List[G1Element] = [rand_g1() for _ in range(10)]
32
- test_hashes: List[bytes32] = [rand_hash() for _ in range(100)]
33
- test_vdfs: List[VDFInfo] = [rand_vdf() for _ in range(100)]
34
- test_vdf_proofs: List[VDFProof] = [rand_vdf_proof() for _ in range(100)]
36
+ test_g2s: list[G2Element] = [rand_g2() for _ in range(10)]
37
+ test_g1s: list[G1Element] = [rand_g1() for _ in range(10)]
38
+ test_hashes: list[bytes32] = [rand_hash() for _ in range(100)]
39
+ test_vdfs: list[VDFInfo] = [rand_vdf() for _ in range(100)]
40
+ test_vdf_proofs: list[VDFProof] = [rand_vdf_proof() for _ in range(100)]
35
41
 
36
42
 
37
43
  def g2() -> G2Element:
@@ -200,12 +206,12 @@ def get_end_of_sub_slot() -> Generator[EndOfSubSlotBundle, None, None]:
200
206
  )
201
207
 
202
208
 
203
- def get_finished_sub_slots() -> Generator[List[EndOfSubSlotBundle], None, None]:
209
+ def get_finished_sub_slots() -> Generator[list[EndOfSubSlotBundle], None, None]:
204
210
  yield []
205
211
  yield [s for s in get_end_of_sub_slot()]
206
212
 
207
213
 
208
- def get_ref_list() -> Generator[List[uint32], None, None]:
214
+ def get_ref_list() -> Generator[list[uint32], None, None]:
209
215
  yield []
210
216
  yield [uint32(1), uint32(2), uint32(3), uint32(4)]
211
217
  yield [uint32(256)]
@@ -244,7 +250,6 @@ def get_full_blocks() -> Iterator[FullBlock]:
244
250
 
245
251
 
246
252
  @pytest.mark.anyio
247
- @pytest.mark.skip("This test is expensive and has already convinced us the parser works")
248
253
  async def test_parser():
249
254
  # loop over every combination of Optionals being set and not set
250
255
  # along with random values for the FullBlock fields. Ensure
@@ -252,6 +257,9 @@ async def test_parser():
252
257
  # correctly
253
258
  for block in get_full_blocks():
254
259
  block_bytes = bytes(block)
260
+ height, is_tx_block = get_height_and_tx_status_from_block(block_bytes)
261
+ assert height == block.height
262
+ assert is_tx_block == (block.transactions_info is not None)
255
263
  gen = generator_from_block(block_bytes)
256
264
  assert gen == bytes(block.transactions_generator)
257
265
  bi = block_info_from_block(block_bytes)
@@ -266,6 +274,6 @@ async def test_parser():
266
274
  @pytest.mark.skip("This test is expensive and has already convinced us the parser works")
267
275
  async def test_header_block():
268
276
  for block in get_full_blocks():
269
- hb: HeaderBlock = get_block_header(block, [], [])
277
+ hb: HeaderBlock = get_block_header(block)
270
278
  hb_bytes = header_block_from_block(memoryview(bytes(block)))
271
279
  assert HeaderBlock.from_bytes(hb_bytes) == hb
@@ -6,6 +6,7 @@ from typing import Optional
6
6
  import pytest
7
7
 
8
8
  from chia.util.limited_semaphore import LimitedSemaphore, LimitedSemaphoreFullError
9
+ from chia.util.task_referencer import create_referenced_task
9
10
 
10
11
 
11
12
  @pytest.mark.anyio
@@ -27,8 +28,8 @@ async def test_stuff() -> None:
27
28
  waiting_events = [asyncio.Event() for _ in range(waiting_limit)]
28
29
  failed_events = [asyncio.Event() for _ in range(beyond_limit)]
29
30
 
30
- entered_tasks = [asyncio.create_task(acquire(entered_event=event)) for event in entered_events]
31
- waiting_tasks = [asyncio.create_task(acquire(entered_event=event)) for event in waiting_events]
31
+ entered_tasks = [create_referenced_task(acquire(entered_event=event)) for event in entered_events]
32
+ waiting_tasks = [create_referenced_task(acquire(entered_event=event)) for event in waiting_events]
32
33
 
33
34
  await asyncio.gather(*(event.wait() for event in entered_events))
34
35
  assert all(event.is_set() for event in entered_events)
@@ -36,7 +37,7 @@ async def test_stuff() -> None:
36
37
 
37
38
  assert semaphore._available_count == 0
38
39
 
39
- failure_tasks = [asyncio.create_task(acquire()) for _ in range(beyond_limit)]
40
+ failure_tasks = [create_referenced_task(acquire()) for _ in range(beyond_limit)]
40
41
 
41
42
  failure_results = await asyncio.gather(*failure_tasks, return_exceptions=True)
42
43
  assert [str(error) for error in failure_results] == [str(LimitedSemaphoreFullError())] * beyond_limit
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  import time
5
- from re import split
6
5
  from time import sleep
7
6
 
8
7
  import pytest
@@ -27,7 +26,7 @@ def test_logging_filter(caplog: pytest.LogCaptureFixture) -> None:
27
26
  sleep(min(0.0, now - last_time))
28
27
  last_time = now
29
28
 
30
- assert len(split("\n", caplog.text)) <= ((num_logs * sleep_secs) / log_interval_secs) + 1
29
+ assert len(caplog.text.split("\n")) <= ((num_logs * sleep_secs) / log_interval_secs) + 1
31
30
 
32
31
 
33
32
  def test_dont_filter_non_matches(caplog: pytest.LogCaptureFixture) -> None:
@@ -40,4 +39,4 @@ def test_dont_filter_non_matches(caplog: pytest.LogCaptureFixture) -> None:
40
39
  with caplog.at_level(logging.WARNING):
41
40
  log.warning(f"Don't Filter this log message {n}")
42
41
 
43
- assert len(split("\n", caplog.text)) == num_log_statements
42
+ assert len(caplog.text.split("\n")) == num_log_statements
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import contextlib
4
- from typing import AsyncIterator, Iterator, List, Optional, Tuple, Type, TypeVar
4
+ from collections.abc import AsyncIterator, Iterator
5
+ from typing import Optional, TypeVar
5
6
 
6
7
  import aiohttp
7
8
  import anyio
@@ -89,7 +90,7 @@ def test_validate_directory_writable(tmp_path) -> None:
89
90
 
90
91
  def test_empty_lists() -> None:
91
92
  # An empty list should return an empty iterator and skip the loop's body.
92
- empty: List[int] = []
93
+ empty: list[int] = []
93
94
  with pytest.raises(StopIteration):
94
95
  next(to_batches(empty, 1))
95
96
 
@@ -129,14 +130,14 @@ def test_invalid_input_type() -> None:
129
130
 
130
131
 
131
132
  @contextlib.contextmanager
132
- def sync_manager(y: List[str]) -> Iterator[None]:
133
+ def sync_manager(y: list[str]) -> Iterator[None]:
133
134
  y.append("entered")
134
135
  yield
135
136
  y.append("exited")
136
137
 
137
138
 
138
139
  def test_split_manager_class_works() -> None:
139
- x: List[str] = []
140
+ x: list[str] = []
140
141
 
141
142
  split = SplitManager(manager=sync_manager(y=x), object=None)
142
143
  assert x == []
@@ -149,7 +150,7 @@ def test_split_manager_class_works() -> None:
149
150
 
150
151
 
151
152
  def test_split_manager_function_exits_if_needed() -> None:
152
- x: List[str] = []
153
+ x: list[str] = []
153
154
 
154
155
  with split_manager(manager=sync_manager(y=x), object=None) as split:
155
156
  assert x == []
@@ -161,7 +162,7 @@ def test_split_manager_function_exits_if_needed() -> None:
161
162
 
162
163
 
163
164
  def test_split_manager_function_skips_if_not_needed() -> None:
164
- x: List[str] = []
165
+ x: list[str] = []
165
166
 
166
167
  with split_manager(manager=sync_manager(y=x), object=None) as split:
167
168
  assert x == []
@@ -176,7 +177,7 @@ def test_split_manager_function_skips_if_not_needed() -> None:
176
177
 
177
178
 
178
179
  def test_split_manager_raises_on_second_entry() -> None:
179
- x: List[str] = []
180
+ x: list[str] = []
180
181
 
181
182
  split = SplitManager(manager=sync_manager(y=x), object=None)
182
183
  split.enter()
@@ -186,7 +187,7 @@ def test_split_manager_raises_on_second_entry() -> None:
186
187
 
187
188
 
188
189
  def test_split_manager_raises_on_second_entry_after_exiting() -> None:
189
- x: List[str] = []
190
+ x: list[str] = []
190
191
 
191
192
  split = SplitManager(manager=sync_manager(y=x), object=None)
192
193
  split.enter()
@@ -197,7 +198,7 @@ def test_split_manager_raises_on_second_entry_after_exiting() -> None:
197
198
 
198
199
 
199
200
  def test_split_manager_raises_on_second_exit() -> None:
200
- x: List[str] = []
201
+ x: list[str] = []
201
202
 
202
203
  split = SplitManager(manager=sync_manager(y=x), object=None)
203
204
  split.enter()
@@ -208,7 +209,7 @@ def test_split_manager_raises_on_second_exit() -> None:
208
209
 
209
210
 
210
211
  def test_split_manager_raises_on_exit_without_entry() -> None:
211
- x: List[str] = []
212
+ x: list[str] = []
212
213
 
213
214
  split = SplitManager(manager=sync_manager(y=x), object=None)
214
215
 
@@ -217,7 +218,7 @@ def test_split_manager_raises_on_exit_without_entry() -> None:
217
218
 
218
219
 
219
220
  @contextlib.asynccontextmanager
220
- async def async_manager(y: List[str]) -> AsyncIterator[None]:
221
+ async def async_manager(y: list[str]) -> AsyncIterator[None]:
221
222
  y.append("entered")
222
223
  yield
223
224
  y.append("exited")
@@ -225,7 +226,7 @@ async def async_manager(y: List[str]) -> AsyncIterator[None]:
225
226
 
226
227
  @pytest.mark.anyio
227
228
  async def test_split_async_manager_class_works() -> None:
228
- x: List[str] = []
229
+ x: list[str] = []
229
230
 
230
231
  split = SplitAsyncManager(manager=async_manager(y=x), object=None)
231
232
  assert x == []
@@ -239,7 +240,7 @@ async def test_split_async_manager_class_works() -> None:
239
240
 
240
241
  @pytest.mark.anyio
241
242
  async def test_split_async_manager_function_exits_if_needed() -> None:
242
- x: List[str] = []
243
+ x: list[str] = []
243
244
 
244
245
  async with split_async_manager(manager=async_manager(y=x), object=None) as split:
245
246
  assert x == []
@@ -252,7 +253,7 @@ async def test_split_async_manager_function_exits_if_needed() -> None:
252
253
 
253
254
  @pytest.mark.anyio
254
255
  async def test_split_async_manager_function_skips_if_not_needed() -> None:
255
- x: List[str] = []
256
+ x: list[str] = []
256
257
 
257
258
  async with split_async_manager(manager=async_manager(y=x), object=None) as split:
258
259
  assert x == []
@@ -268,7 +269,7 @@ async def test_split_async_manager_function_skips_if_not_needed() -> None:
268
269
 
269
270
  @pytest.mark.anyio
270
271
  async def test_split_async_manager_raises_on_second_entry() -> None:
271
- x: List[str] = []
272
+ x: list[str] = []
272
273
 
273
274
  split = SplitAsyncManager(manager=async_manager(y=x), object=None)
274
275
  await split.enter()
@@ -279,7 +280,7 @@ async def test_split_async_manager_raises_on_second_entry() -> None:
279
280
 
280
281
  @pytest.mark.anyio
281
282
  async def test_split_async_manager_raises_on_second_entry_after_exiting() -> None:
282
- x: List[str] = []
283
+ x: list[str] = []
283
284
 
284
285
  split = SplitAsyncManager(manager=async_manager(y=x), object=None)
285
286
  await split.enter()
@@ -291,7 +292,7 @@ async def test_split_async_manager_raises_on_second_entry_after_exiting() -> Non
291
292
 
292
293
  @pytest.mark.anyio
293
294
  async def test_split_async_manager_raises_on_second_exit() -> None:
294
- x: List[str] = []
295
+ x: list[str] = []
295
296
 
296
297
  split = SplitAsyncManager(manager=async_manager(y=x), object=None)
297
298
  await split.enter()
@@ -303,7 +304,7 @@ async def test_split_async_manager_raises_on_second_exit() -> None:
303
304
 
304
305
  @pytest.mark.anyio
305
306
  async def test_split_async_manager_raises_on_exit_without_entry() -> None:
306
- x: List[str] = []
307
+ x: list[str] = []
307
308
 
308
309
  split = SplitAsyncManager(manager=async_manager(y=x), object=None)
309
310
 
@@ -365,7 +366,7 @@ async def test_valued_event_wait_blocks_when_not_set() -> None:
365
366
 
366
367
  @pytest.mark.anyio
367
368
  async def test_valued_event_multiple_waits_all_get_values() -> None:
368
- results: List[int] = []
369
+ results: list[int] = []
369
370
  valued_event = ValuedEvent[int]()
370
371
  value = 37
371
372
  task_count = 10
@@ -430,15 +431,15 @@ async def test_recording_web_server_specified_response(
430
431
  (42, uint64, False),
431
432
  (uint64(42), uint64, True),
432
433
  ("42", int, False),
433
- ([4, 2], List[int], True),
434
- ([4, "2"], List[int], False),
435
- ((4, 2), Tuple[int, int], True),
436
- ((4, "2"), Tuple[int, int], False),
437
- ((4, 2), Tuple[int, ...], True),
438
- ((4, "2"), Tuple[int, ...], False),
439
- ([(4, Program.to([2]))], List[Tuple[int, Program]], True),
440
- ([(4, "2")], Tuple[int, str], False),
434
+ ([4, 2], list[int], True),
435
+ ([4, "2"], list[int], False),
436
+ ((4, 2), tuple[int, int], True),
437
+ ((4, "2"), tuple[int, int], False),
438
+ ((4, 2), tuple[int, ...], True),
439
+ ((4, "2"), tuple[int, ...], False),
440
+ ([(4, Program.to([2]))], list[tuple[int, Program]], True),
441
+ ([(4, "2")], tuple[int, str], False),
441
442
  ],
442
443
  )
443
- def test_satisfies_hint(obj: T, type_hint: Type[T], expected_result: bool) -> None:
444
+ def test_satisfies_hint(obj: T, type_hint: type[T], expected_result: bool) -> None:
444
445
  assert satisfies_hint(obj, type_hint) == expected_result
@@ -3,42 +3,43 @@ from __future__ import annotations
3
3
  import os
4
4
  import sys
5
5
  from ipaddress import IPv4Address, IPv6Address
6
- from typing import Type, Union
6
+ from typing import Union
7
7
 
8
8
  import pytest
9
9
 
10
- from chia.util.network import IPAddress, resolve
10
+ from chia.util.ip_address import IPAddress
11
+ from chia.util.network import resolve
11
12
 
12
13
 
13
- class TestNetwork:
14
- @pytest.mark.anyio
15
- async def test_resolve4(self):
16
- # Run these tests forcing IPv4 resolution
17
- prefer_ipv6 = False
18
- assert await resolve("127.0.0.1", prefer_ipv6=prefer_ipv6) == IPAddress.create("127.0.0.1")
19
- assert await resolve("10.11.12.13", prefer_ipv6=prefer_ipv6) == IPAddress.create("10.11.12.13")
20
- assert await resolve("localhost", prefer_ipv6=prefer_ipv6) == IPAddress.create("127.0.0.1")
21
- assert await resolve("example.net", prefer_ipv6=prefer_ipv6) == IPAddress.create("93.184.215.14")
14
+ @pytest.mark.anyio
15
+ async def test_resolve4() -> None:
16
+ # Run these tests forcing IPv4 resolution
17
+ prefer_ipv6 = False
18
+ assert await resolve("127.0.0.1", prefer_ipv6=prefer_ipv6) == IPAddress.create("127.0.0.1")
19
+ assert await resolve("10.11.12.13", prefer_ipv6=prefer_ipv6) == IPAddress.create("10.11.12.13")
20
+ assert await resolve("localhost", prefer_ipv6=prefer_ipv6) == IPAddress.create("127.0.0.1")
21
+ example = await resolve("example.net", prefer_ipv6=prefer_ipv6)
22
+ assert example.is_v4
23
+ assert not example.is_private
22
24
 
23
- @pytest.mark.anyio
24
- @pytest.mark.skipif(
25
- condition=("GITHUB_ACTIONS" in os.environ) and (sys.platform in {"darwin", "win32"}),
26
- reason="macOS and Windows runners in GitHub Actions do not seem to support IPv6",
27
- )
28
- async def test_resolve6(self):
29
- # Run these tests forcing IPv6 resolution
30
- prefer_ipv6 = True
31
- assert await resolve("::1", prefer_ipv6=prefer_ipv6) == IPAddress.create("::1")
32
- assert await resolve("2000:1000::1234:abcd", prefer_ipv6=prefer_ipv6) == IPAddress.create(
33
- "2000:1000::1234:abcd"
34
- )
35
- # ip6-localhost is not always available, and localhost is IPv4 only
36
- # on some systems. Just test neither here.
37
- # assert await resolve("ip6-localhost", prefer_ipv6=prefer_ipv6) == IPAddress.create("::1")
38
- # assert await resolve("localhost", prefer_ipv6=prefer_ipv6) == IPAddress.create("::1")
39
- assert await resolve("example.net", prefer_ipv6=prefer_ipv6) == IPAddress.create(
40
- "2606:2800:21f:cb07:6820:80da:af6b:8b2c"
41
- )
25
+
26
+ @pytest.mark.anyio
27
+ @pytest.mark.skipif(
28
+ condition=("GITHUB_ACTIONS" in os.environ) and (sys.platform in {"darwin", "win32"}),
29
+ reason="macOS and Windows runners in GitHub Actions do not seem to support IPv6",
30
+ )
31
+ async def test_resolve6() -> None:
32
+ # Run these tests forcing IPv6 resolution
33
+ prefer_ipv6 = True
34
+ assert await resolve("::1", prefer_ipv6=prefer_ipv6) == IPAddress.create("::1")
35
+ assert await resolve("2000:1000::1234:abcd", prefer_ipv6=prefer_ipv6) == IPAddress.create("2000:1000::1234:abcd")
36
+ # ip6-localhost is not always available, and localhost is IPv4 only
37
+ # on some systems. Just test neither here.
38
+ # assert await resolve("ip6-localhost", prefer_ipv6=prefer_ipv6) == IPAddress.create("::1")
39
+ # assert await resolve("localhost", prefer_ipv6=prefer_ipv6) == IPAddress.create("::1")
40
+ example = await resolve("example.net", prefer_ipv6=prefer_ipv6)
41
+ assert example.is_v6
42
+ assert not example.is_private
42
43
 
43
44
 
44
45
  @pytest.mark.parametrize(
@@ -51,7 +52,7 @@ class TestNetwork:
51
52
  ("93.184.216.34", IPv4Address),
52
53
  ],
53
54
  )
54
- def test_ip_address(address_string: str, expected_inner: Type[Union[IPv4Address, IPv6Address]]) -> None:
55
+ def test_ip_address(address_string: str, expected_inner: type[Union[IPv4Address, IPv6Address]]) -> None:
55
56
  inner = expected_inner(address_string)
56
57
  ip = IPAddress.create(address_string)
57
58
  # Helpers
@@ -1,16 +1,16 @@
1
+ # ruff: noqa: F405
1
2
  # this file is generated by build_network_protocol_files.py
2
3
 
3
4
  from __future__ import annotations
4
5
 
5
6
  from pathlib import Path
6
- from typing import Tuple
7
7
 
8
8
  from chia._tests.util.build_network_protocol_files import get_network_protocol_filename
9
9
  from chia._tests.util.network_protocol_data import * # noqa: F403
10
10
  from chia._tests.util.protocol_messages_json import * # noqa: F403
11
11
 
12
12
 
13
- def parse_blob(input_bytes: bytes) -> Tuple[bytes, bytes]:
13
+ def parse_blob(input_bytes: bytes) -> tuple[bytes, bytes]:
14
14
  size_bytes = input_bytes[:4]
15
15
  input_bytes = input_bytes[4:]
16
16
  size = int.from_bytes(size_bytes, "big")
@@ -20,7 +20,6 @@ def parse_blob(input_bytes: bytes) -> Tuple[bytes, bytes]:
20
20
 
21
21
 
22
22
  def test_protocol_bytes() -> None:
23
-
24
23
  filename: Path = get_network_protocol_filename()
25
24
  assert filename.exists()
26
25
  with open(filename, "rb") as f:
@@ -1,3 +1,4 @@
1
+ # ruff: noqa: F405
1
2
  # this file is generated by build_network_protocol_files.py
2
3
 
3
4
  from __future__ import annotations