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
@@ -3,18 +3,21 @@ from __future__ import annotations
3
3
  import asyncio
4
4
  import itertools
5
5
  import time
6
- from typing import Any, Collection, Dict, List, Optional, Set, Tuple, Union
6
+ from collections.abc import Collection
7
+ from typing import Any, Optional, Union
7
8
 
8
9
  import anyio
9
10
 
11
+ from chia.consensus.block_body_validation import ForkInfo
10
12
  from chia.consensus.block_record import BlockRecord
11
13
  from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
12
14
  from chia.consensus.blockchain import BlockchainMutexPriority
13
- from chia.consensus.multiprocess_validation import PreValidationResult, pre_validate_blocks_multiprocessing
15
+ from chia.consensus.multiprocess_validation import PreValidationResult, pre_validate_block
14
16
  from chia.full_node.full_node import FullNode
15
17
  from chia.full_node.full_node_api import FullNodeAPI
16
18
  from chia.rpc.rpc_server import default_get_connections
17
19
  from chia.server.outbound_message import NodeType
20
+ from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
18
21
  from chia.simulator.block_tools import BlockTools
19
22
  from chia.simulator.simulator_protocol import FarmNewBlockProtocol, GetAllCoinsProtocol, ReorgProtocol
20
23
  from chia.types.blockchain_format.coin import Coin
@@ -22,11 +25,13 @@ from chia.types.blockchain_format.sized_bytes import bytes32
22
25
  from chia.types.coin_record import CoinRecord
23
26
  from chia.types.full_block import FullBlock
24
27
  from chia.types.spend_bundle import SpendBundle
28
+ from chia.types.validation_state import ValidationState
29
+ from chia.util.augmented_chain import AugmentedBlockchain
25
30
  from chia.util.config import lock_and_load_config, save_config
26
31
  from chia.util.ints import uint8, uint32, uint64, uint128
27
32
  from chia.util.timing import adjusted_timeout, backoff_times
28
33
  from chia.wallet.payment import Payment
29
- from chia.wallet.transaction_record import TransactionRecord
34
+ from chia.wallet.transaction_record import LightTransactionRecord, TransactionRecord
30
35
  from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
31
36
  from chia.wallet.wallet import Wallet
32
37
  from chia.wallet.wallet_node import WalletNode
@@ -42,7 +47,7 @@ default = _Default()
42
47
  timeout_per_block = 5
43
48
 
44
49
 
45
- async def wait_for_coins_in_wallet(coins: Set[Coin], wallet: Wallet, timeout: Optional[float] = 5):
50
+ async def wait_for_coins_in_wallet(coins: set[Coin], wallet: Wallet, timeout: Optional[float] = 5):
46
51
  """Wait until all of the specified coins are simultaneously reported as spendable
47
52
  by the wallet.
48
53
 
@@ -64,7 +69,7 @@ async def wait_for_coins_in_wallet(coins: Set[Coin], wallet: Wallet, timeout: Op
64
69
 
65
70
 
66
71
  class FullNodeSimulator(FullNodeAPI):
67
- def __init__(self, full_node: FullNode, block_tools: BlockTools, config: Dict) -> None:
72
+ def __init__(self, full_node: FullNode, block_tools: BlockTools, config: dict) -> None:
68
73
  super().__init__(full_node)
69
74
  self.bt = block_tools
70
75
  self.full_node = full_node
@@ -74,10 +79,10 @@ class FullNodeSimulator(FullNodeAPI):
74
79
  self.use_current_time: bool = self.config.get("simulator", {}).get("use_current_time", False)
75
80
  self.auto_farm: bool = self.config.get("simulator", {}).get("auto_farm", False)
76
81
 
77
- def get_connections(self, request_node_type: Optional[NodeType]) -> List[Dict[str, Any]]:
82
+ def get_connections(self, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
78
83
  return default_get_connections(server=self.server, request_node_type=request_node_type)
79
84
 
80
- async def get_all_full_blocks(self) -> List[FullBlock]:
85
+ async def get_all_full_blocks(self) -> list[FullBlock]:
81
86
  peak: Optional[BlockRecord] = self.full_node.blockchain.get_peak()
82
87
  if peak is None:
83
88
  return []
@@ -119,7 +124,7 @@ class FullNodeSimulator(FullNodeAPI):
119
124
  await self.farm_new_transaction_block(FarmNewBlockProtocol(self.bt.farmer_ph))
120
125
  return self.auto_farm
121
126
 
122
- async def get_all_coins(self, request: GetAllCoinsProtocol) -> List[CoinRecord]:
127
+ async def get_all_coins(self, request: GetAllCoinsProtocol) -> list[CoinRecord]:
123
128
  return await self.full_node.coin_store.get_all_coins(request.include_spent_coins)
124
129
 
125
130
  async def revert_block_height(self, new_height: uint32) -> None:
@@ -148,15 +153,15 @@ class FullNodeSimulator(FullNodeAPI):
148
153
  # reload mempool
149
154
  await self.full_node.mempool_manager.new_peak(block_record, None)
150
155
 
151
- async def get_all_puzzle_hashes(self) -> Dict[bytes32, Tuple[uint128, int]]:
156
+ async def get_all_puzzle_hashes(self) -> dict[bytes32, tuple[uint128, int]]:
152
157
  # puzzle_hash, (total_amount, num_transactions)
153
- ph_total_amount: Dict[bytes32, Tuple[uint128, int]] = {}
154
- all_non_spent_coins: List[CoinRecord] = await self.get_all_coins(GetAllCoinsProtocol(False))
158
+ ph_total_amount: dict[bytes32, tuple[uint128, int]] = {}
159
+ all_non_spent_coins: list[CoinRecord] = await self.get_all_coins(GetAllCoinsProtocol(False))
155
160
  for cr in all_non_spent_coins:
156
161
  if cr.coin.puzzle_hash not in ph_total_amount:
157
162
  ph_total_amount[cr.coin.puzzle_hash] = (uint128(cr.coin.amount), 1)
158
163
  else:
159
- dict_value: Tuple[uint128, int] = ph_total_amount[cr.coin.puzzle_hash]
164
+ dict_value: tuple[uint128, int] = ph_total_amount[cr.coin.puzzle_hash]
160
165
  ph_total_amount[cr.coin.puzzle_hash] = (uint128(cr.coin.amount + dict_value[0]), dict_value[1] + 1)
161
166
  return ph_total_amount
162
167
 
@@ -170,23 +175,21 @@ class FullNodeSimulator(FullNodeAPI):
170
175
  current_blocks = await self.get_all_full_blocks()
171
176
  if len(current_blocks) == 0:
172
177
  genesis = self.bt.get_consecutive_blocks(uint8(1))[0]
173
- pre_validation_results: List[PreValidationResult] = await pre_validate_blocks_multiprocessing(
178
+ future = await pre_validate_block(
174
179
  self.full_node.blockchain.constants,
175
- self.full_node.blockchain,
176
- [genesis],
180
+ AugmentedBlockchain(self.full_node.blockchain),
181
+ genesis,
177
182
  self.full_node.blockchain.pool,
178
- {},
179
- sub_slot_iters=ssi,
180
- difficulty=diff,
181
- prev_ses_block=None,
182
- validate_signatures=True,
183
+ None,
184
+ ValidationState(ssi, diff, None),
183
185
  )
184
- assert pre_validation_results is not None
186
+ pre_validation_result: PreValidationResult = await future
187
+ fork_info = ForkInfo(-1, -1, self.full_node.constants.GENESIS_CHALLENGE)
185
188
  await self.full_node.blockchain.add_block(
186
189
  genesis,
187
- pre_validation_results[0],
188
- self.full_node._bls_cache,
190
+ pre_validation_result,
189
191
  self.full_node.constants.SUB_SLOT_ITERS_STARTING,
192
+ fork_info,
190
193
  )
191
194
 
192
195
  peak = self.full_node.blockchain.get_peak()
@@ -227,30 +230,23 @@ class FullNodeSimulator(FullNodeAPI):
227
230
 
228
231
  async def farm_new_block(self, request: FarmNewBlockProtocol, force_wait_for_timestamp: bool = False):
229
232
  ssi = self.full_node.constants.SUB_SLOT_ITERS_STARTING
230
- diffculty = self.full_node.constants.DIFFICULTY_STARTING
233
+ diff = self.full_node.constants.DIFFICULTY_STARTING
231
234
  async with self.full_node.blockchain.priority_mutex.acquire(priority=BlockchainMutexPriority.high):
232
235
  self.log.info("Farming new block!")
233
236
  current_blocks = await self.get_all_full_blocks()
234
237
  if len(current_blocks) == 0:
235
238
  genesis = self.bt.get_consecutive_blocks(uint8(1))[0]
236
- pre_validation_results: List[PreValidationResult] = await pre_validate_blocks_multiprocessing(
239
+ future = await pre_validate_block(
237
240
  self.full_node.blockchain.constants,
238
- self.full_node.blockchain,
239
- [genesis],
240
- self.full_node.blockchain.pool,
241
- {},
242
- sub_slot_iters=ssi,
243
- difficulty=diffculty,
244
- prev_ses_block=None,
245
- validate_signatures=True,
246
- )
247
- assert pre_validation_results is not None
248
- await self.full_node.blockchain.add_block(
241
+ AugmentedBlockchain(self.full_node.blockchain),
249
242
  genesis,
250
- pre_validation_results[0],
251
- self.full_node._bls_cache,
252
- ssi,
243
+ self.full_node.blockchain.pool,
244
+ None,
245
+ ValidationState(ssi, diff, None),
253
246
  )
247
+ pre_validation_result: PreValidationResult = await future
248
+ fork_info = ForkInfo(-1, -1, self.full_node.constants.GENESIS_CHALLENGE)
249
+ await self.full_node.blockchain.add_block(genesis, pre_validation_result, ssi, fork_info)
254
250
  peak = self.full_node.blockchain.get_peak()
255
251
  assert peak is not None
256
252
  curr: BlockRecord = peak
@@ -304,16 +300,14 @@ class FullNodeSimulator(FullNodeAPI):
304
300
  guarantee_transaction_block=True,
305
301
  seed=seed,
306
302
  )
307
-
308
- for block in more_blocks:
309
- await self.full_node.add_block(block)
303
+ await add_blocks_in_batches(more_blocks[old_index + 1 :], self.full_node)
310
304
 
311
305
  async def farm_blocks_to_puzzlehash(
312
306
  self,
313
307
  count: int,
314
- farm_to: bytes32 = bytes32([0] * 32),
308
+ farm_to: bytes32 = bytes32.zeros,
315
309
  guarantee_transaction_blocks: bool = False,
316
- timeout: Union[None, _Default, float] = default,
310
+ timeout: Union[_Default, float, None] = default,
317
311
  _wait_for_synced: bool = True,
318
312
  ) -> int:
319
313
  """Process the requested number of blocks including farming to the passed puzzle
@@ -357,7 +351,7 @@ class FullNodeSimulator(FullNodeAPI):
357
351
  self,
358
352
  count: int,
359
353
  wallet: Wallet,
360
- timeout: Union[None, _Default, float] = default,
354
+ timeout: Union[_Default, float, None] = default,
361
355
  _wait_for_synced: bool = True,
362
356
  ) -> int:
363
357
  """Farm the requested number of blocks to the passed wallet. This will
@@ -429,7 +423,7 @@ class FullNodeSimulator(FullNodeAPI):
429
423
  self,
430
424
  amount: int,
431
425
  wallet: Wallet,
432
- timeout: Union[None, _Default, float] = default,
426
+ timeout: Union[_Default, float, None] = default,
433
427
  ) -> int:
434
428
  """Farm at least the requested amount of mojos to the passed wallet. Extra
435
429
  mojos will be received based on the block rewards at the present block height.
@@ -469,8 +463,8 @@ class FullNodeSimulator(FullNodeAPI):
469
463
 
470
464
  async def wait_transaction_records_entered_mempool(
471
465
  self,
472
- records: Collection[TransactionRecord],
473
- timeout: Union[None, float] = 5,
466
+ records: Collection[Union[TransactionRecord, LightTransactionRecord]],
467
+ timeout: Union[float, None] = 5,
474
468
  ) -> None:
475
469
  """Wait until the transaction records have entered the mempool. Transaction
476
470
  records with no spend bundle are ignored.
@@ -479,7 +473,7 @@ class FullNodeSimulator(FullNodeAPI):
479
473
  records: The transaction records to wait for.
480
474
  """
481
475
  with anyio.fail_after(delay=adjusted_timeout(timeout)):
482
- ids_to_check: Set[bytes32] = set()
476
+ ids_to_check: set[bytes32] = set()
483
477
  for record in records:
484
478
  if record.spend_bundle is None:
485
479
  continue
@@ -502,7 +496,7 @@ class FullNodeSimulator(FullNodeAPI):
502
496
  async def wait_bundle_ids_in_mempool(
503
497
  self,
504
498
  bundle_ids: Collection[bytes32],
505
- timeout: Union[None, float] = 5,
499
+ timeout: Union[float, None] = 5,
506
500
  ) -> None:
507
501
  """Wait until the ids of specific spend bundles have entered the mempool.
508
502
 
@@ -510,7 +504,7 @@ class FullNodeSimulator(FullNodeAPI):
510
504
  records: The bundle ids to wait for.
511
505
  """
512
506
  with anyio.fail_after(delay=adjusted_timeout(timeout)):
513
- ids_to_check: Set[bytes32] = set(bundle_ids)
507
+ ids_to_check: set[bytes32] = set(bundle_ids)
514
508
 
515
509
  for backoff in backoff_times():
516
510
  found = set()
@@ -529,7 +523,7 @@ class FullNodeSimulator(FullNodeAPI):
529
523
  self,
530
524
  record_ids: Collection[bytes32],
531
525
  wallet_node: WalletNode,
532
- timeout: Union[None, float] = 10,
526
+ timeout: Union[float, None] = 10,
533
527
  ) -> None:
534
528
  """Wait until the transaction records have been marked that they have made it into the mempool. Transaction
535
529
  records with no spend bundle are ignored.
@@ -538,7 +532,7 @@ class FullNodeSimulator(FullNodeAPI):
538
532
  records: The transaction records to wait for.
539
533
  """
540
534
  with anyio.fail_after(delay=adjusted_timeout(timeout)):
541
- ids_to_check: Set[bytes32] = set(record_ids)
535
+ ids_to_check: set[bytes32] = set(record_ids)
542
536
 
543
537
  for backoff in backoff_times():
544
538
  found = set()
@@ -556,7 +550,7 @@ class FullNodeSimulator(FullNodeAPI):
556
550
  async def process_transaction_records(
557
551
  self,
558
552
  records: Collection[TransactionRecord],
559
- timeout: Union[None, float] = (2 * timeout_per_block) + 5,
553
+ timeout: Union[float, None] = (2 * timeout_per_block) + 5,
560
554
  ) -> None:
561
555
  """Process the specified transaction records and wait until they have been
562
556
  included in a block.
@@ -567,7 +561,7 @@ class FullNodeSimulator(FullNodeAPI):
567
561
  with anyio.fail_after(delay=adjusted_timeout(timeout)):
568
562
  await self.wait_for_self_synced(timeout=None)
569
563
 
570
- coins_to_wait_for: Set[Coin] = set()
564
+ coins_to_wait_for: set[Coin] = set()
571
565
  for record in records:
572
566
  if record.spend_bundle is None:
573
567
  continue
@@ -581,7 +575,7 @@ class FullNodeSimulator(FullNodeAPI):
581
575
  async def process_spend_bundles(
582
576
  self,
583
577
  bundles: Collection[SpendBundle],
584
- timeout: Union[None, float] = (2 * timeout_per_block) + 5,
578
+ timeout: Union[float, None] = (2 * timeout_per_block) + 5,
585
579
  ) -> None:
586
580
  """Process the specified spend bundles and wait until they have been included
587
581
  in a block.
@@ -591,13 +585,13 @@ class FullNodeSimulator(FullNodeAPI):
591
585
  """
592
586
 
593
587
  with anyio.fail_after(delay=adjusted_timeout(timeout)):
594
- coins_to_wait_for: Set[Coin] = {addition for bundle in bundles for addition in bundle.additions()}
588
+ coins_to_wait_for: set[Coin] = {addition for bundle in bundles for addition in bundle.additions()}
595
589
  return await self.process_coin_spends(coins=coins_to_wait_for, timeout=None)
596
590
 
597
591
  async def process_coin_spends(
598
592
  self,
599
593
  coins: Collection[Coin],
600
- timeout: Union[None, float] = (2 * timeout_per_block) + 5,
594
+ timeout: Union[float, None] = (2 * timeout_per_block) + 5,
601
595
  ) -> None:
602
596
  """Process the specified coin names and wait until they have been created in a
603
597
  block.
@@ -613,7 +607,7 @@ class FullNodeSimulator(FullNodeAPI):
613
607
  while True:
614
608
  await self.farm_blocks_to_puzzlehash(count=1, guarantee_transaction_blocks=True, timeout=None)
615
609
 
616
- found: Set[Coin] = set()
610
+ found: set[Coin] = set()
617
611
  for coin in coin_set:
618
612
  # TODO: is this the proper check?
619
613
  if await coin_store.get_coin_record(coin.name()) is not None:
@@ -649,15 +643,13 @@ class FullNodeSimulator(FullNodeAPI):
649
643
  async def check_transactions_confirmed(
650
644
  self,
651
645
  wallet_state_manager: WalletStateManager,
652
- transactions: List[TransactionRecord],
646
+ transactions: Union[list[TransactionRecord], list[LightTransactionRecord]],
653
647
  timeout: Optional[float] = 5,
654
648
  ) -> None:
655
- transactions_left: Set[bytes32] = {tx.name for tx in transactions}
649
+ transactions_left: set[bytes32] = {tx.name for tx in transactions}
656
650
  with anyio.fail_after(delay=adjusted_timeout(timeout)):
657
651
  for backoff in backoff_times():
658
- transactions_left = transactions_left & {
659
- tx.name for tx in await wallet_state_manager.tx_store.get_all_unconfirmed()
660
- }
652
+ transactions_left &= {tx.name for tx in await wallet_state_manager.tx_store.get_all_unconfirmed()}
661
653
  if len(transactions_left) == 0:
662
654
  break
663
655
 
@@ -666,11 +658,11 @@ class FullNodeSimulator(FullNodeAPI):
666
658
 
667
659
  async def create_coins_with_amounts(
668
660
  self,
669
- amounts: List[uint64],
661
+ amounts: list[uint64],
670
662
  wallet: Wallet,
671
663
  per_transaction_record_group: int = 50,
672
- timeout: Union[None, float] = 15,
673
- ) -> Set[Coin]:
664
+ timeout: Union[float, None] = 15,
665
+ ) -> set[Coin]:
674
666
  """Create coins with the requested amount. This is useful when you need a
675
667
  bunch of coins for a test and don't need to farm that many.
676
668
 
@@ -694,8 +686,8 @@ class FullNodeSimulator(FullNodeAPI):
694
686
  if len(amounts) == 0:
695
687
  return set()
696
688
 
697
- outputs: List[Payment] = []
698
- amounts_seen: Set[uint64] = set()
689
+ outputs: list[Payment] = []
690
+ amounts_seen: set[uint64] = set()
699
691
  for amount in amounts:
700
692
  # We need unique puzzle hash amount combos so we'll only generate a new puzzle hash when we've already
701
693
  # seen that amount sent to that puzzle hash
@@ -703,7 +695,7 @@ class FullNodeSimulator(FullNodeAPI):
703
695
  outputs.append(Payment(puzzle_hash, amount))
704
696
  amounts_seen.add(amount)
705
697
 
706
- transaction_records: List[TransactionRecord] = []
698
+ transaction_records: list[TransactionRecord] = []
707
699
  outputs_iterator = iter(outputs)
708
700
  while True:
709
701
  # The outputs iterator must be second in the zip() call otherwise we lose
@@ -739,14 +731,14 @@ class FullNodeSimulator(FullNodeAPI):
739
731
  spendbundle = self.full_node.mempool_manager.get_spendbundle(bundle_hash=tx_id)
740
732
  return spendbundle is not None
741
733
 
742
- def txs_in_mempool(self, txs: List[TransactionRecord]) -> bool:
734
+ def txs_in_mempool(self, txs: list[TransactionRecord]) -> bool:
743
735
  return all(self.tx_id_in_mempool(tx_id=tx.spend_bundle.name()) for tx in txs if tx.spend_bundle is not None)
744
736
 
745
737
  async def self_is_synced(self) -> bool:
746
738
  return await self.full_node.synced()
747
739
 
748
740
  async def wallet_is_synced(self, wallet_node: WalletNode, peak_height: Optional[uint32] = None) -> bool:
749
- if not self.self_is_synced():
741
+ if not await self.self_is_synced():
750
742
  # Depending on races, may not be covered every time
751
743
  return False # pragma: no cover
752
744
  if not await wallet_node.wallet_state_manager.synced():
@@ -770,7 +762,7 @@ class FullNodeSimulator(FullNodeAPI):
770
762
  break
771
763
  await asyncio.sleep(backoff_time)
772
764
 
773
- async def wallets_are_synced(self, wallet_nodes: List[WalletNode], peak_height: Optional[uint32] = None) -> bool:
765
+ async def wallets_are_synced(self, wallet_nodes: list[WalletNode], peak_height: Optional[uint32] = None) -> bool:
774
766
  return all(
775
767
  [
776
768
  await self.wallet_is_synced(wallet_node=wallet_node, peak_height=peak_height)
@@ -780,7 +772,7 @@ class FullNodeSimulator(FullNodeAPI):
780
772
 
781
773
  async def wait_for_wallets_synced(
782
774
  self,
783
- wallet_nodes: List[WalletNode],
775
+ wallet_nodes: list[WalletNode],
784
776
  timeout: Optional[float] = 5,
785
777
  peak_height: Optional[uint32] = None,
786
778
  ) -> None:
@@ -5,11 +5,11 @@ import gc
5
5
  import logging
6
6
  import signal
7
7
  import sqlite3
8
- import time
8
+ from collections.abc import AsyncGenerator, AsyncIterator, Iterator
9
9
  from contextlib import asynccontextmanager, contextmanager
10
10
  from pathlib import Path
11
11
  from types import FrameType
12
- from typing import Any, AsyncGenerator, AsyncIterator, Dict, Iterator, List, Optional, Tuple, Union
12
+ from typing import Any, Optional, Union
13
13
 
14
14
  from chia.cmds.init_funcs import init
15
15
  from chia.consensus.constants import ConsensusConstants, replace_str_to_bytes
@@ -48,12 +48,13 @@ from chia.util.db_wrapper import generate_in_memory_db_uri
48
48
  from chia.util.ints import uint16
49
49
  from chia.util.keychain import bytes_to_mnemonic
50
50
  from chia.util.lock import Lockfile
51
+ from chia.util.task_referencer import create_referenced_task
51
52
 
52
53
  log = logging.getLogger(__name__)
53
54
 
54
55
 
55
56
  @contextmanager
56
- def create_lock_and_load_config(certs_path: Path, root_path: Path) -> Iterator[Dict[str, Any]]:
57
+ def create_lock_and_load_config(certs_path: Path, root_path: Path) -> Iterator[dict[str, Any]]:
57
58
  init(None, root_path)
58
59
  init(certs_path, root_path)
59
60
  path = config_path_for_filename(root_path=root_path, filename="config.yaml")
@@ -63,7 +64,7 @@ def create_lock_and_load_config(certs_path: Path, root_path: Path) -> Iterator[D
63
64
  yield config
64
65
 
65
66
 
66
- def get_capability_overrides(node_type: NodeType, disabled_capabilities: List[Capability]) -> List[Tuple[uint16, str]]:
67
+ def get_capability_overrides(node_type: NodeType, disabled_capabilities: list[Capability]) -> list[tuple[uint16, str]]:
67
68
  return [
68
69
  (
69
70
  capability
@@ -102,7 +103,7 @@ async def setup_full_node(
102
103
  sanitize_weight_proof_only: bool = False,
103
104
  connect_to_daemon: bool = False,
104
105
  db_version: int = 1,
105
- disable_capabilities: Optional[List[Capability]] = None,
106
+ disable_capabilities: Optional[list[Capability]] = None,
106
107
  *,
107
108
  reuse_db: bool = False,
108
109
  ) -> AsyncGenerator[Union[FullNodeService, SimulatorFullNodeService], None]:
@@ -309,7 +310,7 @@ async def setup_wallet_node(
309
310
  break
310
311
  except PermissionError as e:
311
312
  print(f"db_path.unlink(): {e}")
312
- time.sleep(0.1)
313
+ await asyncio.sleep(0.1)
313
314
  # filesystem operations are async on windows
314
315
  # [WinError 32] The process cannot access the file because it is
315
316
  # being used by another process
@@ -413,7 +414,7 @@ async def setup_introducer(bt: BlockTools, port: int) -> AsyncGenerator[Introduc
413
414
  async def setup_vdf_client(bt: BlockTools, self_hostname: str, port: int) -> AsyncIterator[None]:
414
415
  find_vdf_client() # raises FileNotFoundError if not found
415
416
  process_mgr = VDFClientProcessMgr()
416
- vdf_task_1 = asyncio.create_task(
417
+ vdf_task_1 = create_referenced_task(
417
418
  spawn_process(self_hostname, port, 1, process_mgr, prefer_ipv6=bt.config.get("prefer_ipv6", False)),
418
419
  name="vdf_client_1",
419
420
  )
@@ -447,7 +448,7 @@ async def setup_vdf_clients(bt: BlockTools, self_hostname: str, port: int) -> As
447
448
  prefer_ipv6 = bt.config.get("prefer_ipv6", False)
448
449
  for i in range(1, 4):
449
450
  tasks.append(
450
- asyncio.create_task(
451
+ create_referenced_task(
451
452
  spawn_process(
452
453
  host=self_hostname, port=port, counter=i, process_mgr=process_mgr, prefer_ipv6=prefer_ipv6
453
454
  ),
@@ -482,7 +483,7 @@ async def setup_timelord(
482
483
  full_node_port: int,
483
484
  sanitizer: bool,
484
485
  consensus_constants: ConsensusConstants,
485
- config: Dict[str, Any],
486
+ config: dict[str, Any],
486
487
  root_path: Path,
487
488
  vdf_port: uint16 = uint16(0),
488
489
  ) -> AsyncGenerator[TimelordService, None]:
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Dict, List
4
-
5
3
  from chia.rpc.full_node_rpc_api import FullNodeRpcApi
6
4
  from chia.rpc.rpc_server import Endpoint, EndpointResult
7
5
  from chia.simulator.full_node_simulator import FullNodeSimulator
@@ -19,7 +17,7 @@ class SimulatorFullNodeRpcApi(FullNodeRpcApi):
19
17
  assert isinstance(self.service.server.api, FullNodeSimulator)
20
18
  return self.service.server.api
21
19
 
22
- def get_routes(self) -> Dict[str, Endpoint]:
20
+ def get_routes(self) -> dict[str, Endpoint]:
23
21
  routes = super().get_routes()
24
22
  routes["/get_all_blocks"] = self.get_all_blocks
25
23
  routes["/farm_block"] = self.farm_block
@@ -32,11 +30,11 @@ class SimulatorFullNodeRpcApi(FullNodeRpcApi):
32
30
  routes["/reorg_blocks"] = self.reorg_blocks
33
31
  return routes
34
32
 
35
- async def get_all_blocks(self, _request: Dict[str, object]) -> EndpointResult:
36
- all_blocks: List[FullBlock] = await self.simulator_api.get_all_full_blocks()
33
+ async def get_all_blocks(self, _request: dict[str, object]) -> EndpointResult:
34
+ all_blocks: list[FullBlock] = await self.simulator_api.get_all_full_blocks()
37
35
  return {"blocks": [block.to_json_dict() for block in all_blocks]}
38
36
 
39
- async def farm_block(self, _request: Dict[str, object]) -> EndpointResult:
37
+ async def farm_block(self, _request: dict[str, object]) -> EndpointResult:
40
38
  request_address = str(_request["address"])
41
39
  guarantee_tx_block = bool(_request.get("guarantee_tx_block", False))
42
40
  blocks = int(str(_request.get("blocks", 1))) # mypy made me do this
@@ -51,29 +49,29 @@ class SimulatorFullNodeRpcApi(FullNodeRpcApi):
51
49
  await self.simulator_api.farm_new_block(req)
52
50
  return {"new_peak_height": (cur_height if cur_height is not None else 0) + blocks}
53
51
 
54
- async def set_auto_farming(self, _request: Dict[str, object]) -> EndpointResult:
52
+ async def set_auto_farming(self, _request: dict[str, object]) -> EndpointResult:
55
53
  auto_farm = bool(_request["auto_farm"])
56
54
  result = await self.simulator_api.update_autofarm_config(auto_farm)
57
55
  return {"auto_farm_enabled": result}
58
56
 
59
- async def get_auto_farming(self, _request: Dict[str, object]) -> EndpointResult:
57
+ async def get_auto_farming(self, _request: dict[str, object]) -> EndpointResult:
60
58
  return {"auto_farm_enabled": self.simulator_api.auto_farm}
61
59
 
62
- async def get_farming_ph(self, _request: Dict[str, object]) -> EndpointResult:
60
+ async def get_farming_ph(self, _request: dict[str, object]) -> EndpointResult:
63
61
  return {"puzzle_hash": self.simulator_api.bt.farmer_ph.hex()}
64
62
 
65
- async def get_all_coins(self, _request: Dict[str, object]) -> EndpointResult:
63
+ async def get_all_coins(self, _request: dict[str, object]) -> EndpointResult:
66
64
  p_request = GetAllCoinsProtocol(bool(_request.get("include_spent_coins", False)))
67
- result: List[CoinRecord] = await self.simulator_api.get_all_coins(p_request)
65
+ result: list[CoinRecord] = await self.simulator_api.get_all_coins(p_request)
68
66
  return {"coin_records": [coin_record.to_json_dict() for coin_record in result]}
69
67
 
70
- async def get_all_puzzle_hashes(self, _request: Dict[str, object]) -> EndpointResult:
68
+ async def get_all_puzzle_hashes(self, _request: dict[str, object]) -> EndpointResult:
71
69
  result = await self.simulator_api.get_all_puzzle_hashes()
72
70
  return {
73
71
  "puzzle_hashes": {puzzle_hash.hex(): (amount, num_tx) for (puzzle_hash, (amount, num_tx)) in result.items()}
74
72
  }
75
73
 
76
- async def revert_blocks(self, _request: Dict[str, object]) -> EndpointResult:
74
+ async def revert_blocks(self, _request: dict[str, object]) -> EndpointResult:
77
75
  blocks = int(str(_request.get("num_of_blocks", 1))) # number of blocks to revert
78
76
  all_blocks = bool(_request.get("delete_all_blocks", False)) # revert all blocks
79
77
  height = self.service.blockchain.get_peak_height()
@@ -84,7 +82,7 @@ class SimulatorFullNodeRpcApi(FullNodeRpcApi):
84
82
  await self.simulator_api.revert_block_height(uint32(new_height))
85
83
  return {"new_peak_height": new_height}
86
84
 
87
- async def reorg_blocks(self, _request: Dict[str, object]) -> EndpointResult:
85
+ async def reorg_blocks(self, _request: dict[str, object]) -> EndpointResult:
88
86
  fork_blocks = int(str(_request.get("num_of_blocks_to_rev", 1))) # number of blocks to go back
89
87
  new_blocks = int(str(_request.get("num_of_new_blocks", 1))) # how many extra blocks should we add
90
88
  all_blocks = bool(_request.get("revert_all_blocks", False)) # fork all blocks
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Dict, List, Tuple
4
-
5
3
  from chia.rpc.full_node_rpc_client import FullNodeRpcClient
6
4
  from chia.types.blockchain_format.sized_bytes import bytes32
7
5
  from chia.types.coin_record import CoinRecord
@@ -11,7 +9,7 @@ from chia.util.ints import uint128
11
9
 
12
10
 
13
11
  class SimulatorFullNodeRpcClient(FullNodeRpcClient):
14
- async def get_all_blocks(self) -> List[FullBlock]:
12
+ async def get_all_blocks(self) -> list[FullBlock]:
15
13
  json_blocks = (await self.fetch("get_all_blocks", {}))["blocks"]
16
14
  return [FullBlock.from_json_dict(block) for block in json_blocks]
17
15
 
@@ -34,11 +32,11 @@ class SimulatorFullNodeRpcClient(FullNodeRpcClient):
34
32
  result = await self.fetch("get_farming_ph", {})
35
33
  return bytes32.from_hexstr(result["puzzle_hash"])
36
34
 
37
- async def get_all_coins(self, include_spent_coins: bool = False) -> List[CoinRecord]:
35
+ async def get_all_coins(self, include_spent_coins: bool = False) -> list[CoinRecord]:
38
36
  json_result = await self.fetch("get_all_coins", {"include_spent_coins": include_spent_coins})
39
37
  return [CoinRecord.from_json_dict(coin_records) for coin_records in json_result["coin_records"]]
40
38
 
41
- async def get_all_puzzle_hashes(self) -> Dict[bytes32, Tuple[uint128, int]]:
39
+ async def get_all_puzzle_hashes(self) -> dict[bytes32, tuple[uint128, int]]:
42
40
  str_result = (await self.fetch("get_all_puzzle_hashes", {}))["puzzle_hashes"]
43
41
  return {bytes32.from_hexstr(ph): (uint128(amount), num_tx) for (ph, (amount, num_tx)) in str_result.items()}
44
42
 
@@ -1,8 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import sys
4
+ from collections.abc import AsyncGenerator
4
5
  from pathlib import Path
5
- from typing import Any, AsyncGenerator, Dict, Optional, Tuple
6
+ from typing import Any, Optional
6
7
 
7
8
  from chia_rs import PrivateKey
8
9
 
@@ -34,7 +35,7 @@ These functions are used to test the simulator.
34
35
  """
35
36
 
36
37
 
37
- def mnemonic_fingerprint(keychain: Keychain) -> Tuple[str, int]:
38
+ def mnemonic_fingerprint(keychain: Keychain) -> tuple[str, int]:
38
39
  mnemonic = (
39
40
  "today grape album ticket joy idle supreme sausage "
40
41
  "oppose voice angle roast you oven betray exact "
@@ -62,10 +63,10 @@ def get_puzzle_hash_from_key(keychain: Keychain, fingerprint: int, key_id: int =
62
63
  def create_config(
63
64
  chia_root: Path,
64
65
  fingerprint: int,
65
- private_ca_crt_and_key: Tuple[bytes, bytes],
66
- node_certs_and_keys: Dict[str, Dict[str, Dict[str, bytes]]],
66
+ private_ca_crt_and_key: tuple[bytes, bytes],
67
+ node_certs_and_keys: dict[str, dict[str, dict[str, bytes]]],
67
68
  keychain: Keychain,
68
- ) -> Dict[str, Any]:
69
+ ) -> dict[str, Any]:
69
70
  # create chia directories
70
71
  create_default_chia_config(chia_root)
71
72
  create_all_ssl(
@@ -119,8 +120,8 @@ async def get_full_chia_simulator(
119
120
  chia_root: Path,
120
121
  keychain: Optional[Keychain] = None,
121
122
  automated_testing: bool = False,
122
- config: Optional[Dict[str, Any]] = None,
123
- ) -> AsyncGenerator[Tuple[FullNodeSimulator, Path, Dict[str, Any], str, int, Keychain], None]:
123
+ config: Optional[dict[str, Any]] = None,
124
+ ) -> AsyncGenerator[tuple[FullNodeSimulator, Path, dict[str, Any], str, int, Keychain], None]:
124
125
  """
125
126
  A chia root Path is required.
126
127
  The chia root Path can be a temporary directory (tempfile.TemporaryDirectory)
chia/simulator/socket.py CHANGED
@@ -2,14 +2,11 @@ from __future__ import annotations
2
2
 
3
3
  import socket
4
4
  from contextlib import closing
5
- from typing import Set
6
5
 
7
- recent_ports: Set[int] = set()
6
+ recent_ports: set[int] = set()
8
7
 
9
8
 
10
9
  def find_available_listen_port(name: str = "free") -> int:
11
- global recent_ports
12
-
13
10
  while True:
14
11
  with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
15
12
  try: