chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__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 (531) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_blockchain_transactions.py +5 -2
  6. chia/_tests/blockchain/test_build_chains.py +2 -4
  7. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  8. chia/_tests/clvm/coin_store.py +4 -7
  9. chia/_tests/clvm/test_clvm_step.py +4 -4
  10. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  11. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  12. chia/_tests/clvm/test_singletons.py +2 -4
  13. chia/_tests/clvm/test_spend_sim.py +2 -2
  14. chia/_tests/cmds/cmd_test_utils.py +27 -45
  15. chia/_tests/cmds/test_cmd_framework.py +6 -6
  16. chia/_tests/cmds/test_daemon.py +3 -3
  17. chia/_tests/cmds/test_show.py +4 -4
  18. chia/_tests/cmds/test_tx_config_args.py +1 -2
  19. chia/_tests/cmds/testing_classes.py +4 -5
  20. chia/_tests/cmds/wallet/test_did.py +24 -27
  21. chia/_tests/cmds/wallet/test_nft.py +12 -10
  22. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  23. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  24. chia/_tests/conftest.py +66 -31
  25. chia/_tests/connection_utils.py +2 -2
  26. chia/_tests/core/cmds/test_beta.py +4 -4
  27. chia/_tests/core/cmds/test_keys.py +2 -3
  28. chia/_tests/core/cmds/test_wallet.py +15 -15
  29. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  30. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  31. chia/_tests/core/daemon/test_daemon.py +11 -11
  32. chia/_tests/core/data_layer/conftest.py +2 -2
  33. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  34. chia/_tests/core/data_layer/test_data_store.py +10 -10
  35. chia/_tests/core/data_layer/util.py +11 -11
  36. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  37. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  38. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  39. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  40. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  41. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  42. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  43. chia/_tests/core/full_node/test_conditions.py +21 -23
  44. chia/_tests/core/full_node/test_full_node.py +273 -70
  45. chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
  46. chia/_tests/core/full_node/test_hint_management.py +2 -4
  47. chia/_tests/core/full_node/test_performance.py +0 -1
  48. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  49. chia/_tests/core/full_node/test_transactions.py +1 -2
  50. chia/_tests/core/full_node/test_tx_processing_queue.py +198 -30
  51. chia/_tests/core/mempool/test_mempool.py +54 -50
  52. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  53. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  54. chia/_tests/core/mempool/test_mempool_manager.py +988 -854
  55. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  56. chia/_tests/core/server/serve.py +7 -7
  57. chia/_tests/core/server/test_dos.py +1 -2
  58. chia/_tests/core/server/test_event_loop.py +12 -4
  59. chia/_tests/core/server/test_loop.py +7 -8
  60. chia/_tests/core/server/test_rate_limits.py +9 -8
  61. chia/_tests/core/server/test_server.py +61 -1
  62. chia/_tests/core/services/test_services.py +2 -2
  63. chia/_tests/core/ssl/test_ssl.py +2 -2
  64. chia/_tests/core/test_cost_calculation.py +2 -6
  65. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  66. chia/_tests/core/test_filter.py +0 -1
  67. chia/_tests/core/test_full_node_rpc.py +2 -2
  68. chia/_tests/core/test_merkle_set.py +1 -2
  69. chia/_tests/core/test_seeder.py +4 -4
  70. chia/_tests/core/util/test_config.py +4 -4
  71. chia/_tests/core/util/test_jsonify.py +2 -2
  72. chia/_tests/core/util/test_keychain.py +3 -3
  73. chia/_tests/core/util/test_lockfile.py +2 -1
  74. chia/_tests/core/util/test_log_exceptions.py +1 -2
  75. chia/_tests/core/util/test_streamable.py +17 -17
  76. chia/_tests/db/test_db_wrapper.py +3 -2
  77. chia/_tests/environments/wallet.py +14 -14
  78. chia/_tests/ether.py +4 -3
  79. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  80. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  81. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  82. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  83. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  84. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  85. chia/_tests/harvester/test_harvester_api.py +11 -4
  86. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  87. chia/_tests/plot_sync/test_receiver.py +11 -10
  88. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  89. chia/_tests/plot_sync/util.py +1 -2
  90. chia/_tests/plotting/test_plot_manager.py +7 -6
  91. chia/_tests/plotting/test_prover.py +30 -38
  92. chia/_tests/pools/test_pool_cmdline.py +4 -6
  93. chia/_tests/pools/test_pool_rpc.py +203 -61
  94. chia/_tests/pools/test_pool_wallet.py +3 -3
  95. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  96. chia/_tests/process_junit.py +2 -2
  97. chia/_tests/rpc/test_rpc_client.py +4 -4
  98. chia/_tests/rpc/test_rpc_server.py +3 -3
  99. chia/_tests/simulation/test_simulation.py +12 -25
  100. chia/_tests/solver/test_solver_service.py +13 -4
  101. chia/_tests/testconfig.py +2 -2
  102. chia/_tests/timelord/test_new_peak.py +22 -11
  103. chia/_tests/tools/test_run_block.py +0 -2
  104. chia/_tests/tools/test_virtual_project.py +2 -1
  105. chia/_tests/util/benchmarks.py +1 -0
  106. chia/_tests/util/blockchain.py +38 -36
  107. chia/_tests/util/blockchain_mock.py +11 -11
  108. chia/_tests/util/build_network_protocol_files.py +2 -1
  109. chia/_tests/util/coin_store.py +2 -1
  110. chia/_tests/util/config.py +1 -1
  111. chia/_tests/util/db_connection.py +2 -3
  112. chia/_tests/util/full_sync.py +9 -11
  113. chia/_tests/util/gen_ssl_certs.py +4 -5
  114. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  115. chia/_tests/util/misc.py +24 -24
  116. chia/_tests/util/network_protocol_data.py +20 -3
  117. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  118. chia/_tests/util/protocol_messages_json.py +292 -3
  119. chia/_tests/util/setup_nodes.py +62 -47
  120. chia/_tests/util/spend_sim.py +57 -57
  121. chia/_tests/util/test_async_pool.py +2 -3
  122. chia/_tests/util/test_chia_version.py +1 -3
  123. chia/_tests/util/test_config.py +3 -3
  124. chia/_tests/util/test_full_block_utils.py +6 -3
  125. chia/_tests/util/test_limited_semaphore.py +1 -2
  126. chia/_tests/util/test_misc.py +2 -2
  127. chia/_tests/util/test_network.py +1 -2
  128. chia/_tests/util/test_priority_mutex.py +3 -3
  129. chia/_tests/util/test_recursive_replace.py +5 -6
  130. chia/_tests/util/test_replace_str_to_bytes.py +9 -10
  131. chia/_tests/util/test_testnet_overrides.py +3 -3
  132. chia/_tests/util/time_out_assert.py +2 -2
  133. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  134. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  135. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  136. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  137. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  138. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  139. chia/_tests/wallet/conftest.py +6 -6
  140. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  141. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  142. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  145. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  146. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  147. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  148. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  149. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  150. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  151. chia/_tests/wallet/sync/test_wallet_sync.py +63 -60
  152. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  153. chia/_tests/wallet/test_coin_management.py +2 -2
  154. chia/_tests/wallet/test_conditions.py +45 -51
  155. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  156. chia/_tests/wallet/test_new_wallet_protocol.py +17 -17
  157. chia/_tests/wallet/test_notifications.py +14 -14
  158. chia/_tests/wallet/test_signer_protocol.py +5 -5
  159. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  160. chia/_tests/wallet/test_transaction_store.py +20 -20
  161. chia/_tests/wallet/test_util.py +2 -2
  162. chia/_tests/wallet/test_wallet.py +380 -228
  163. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  164. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  165. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  166. chia/_tests/wallet/test_wallet_node.py +16 -15
  167. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  168. chia/_tests/wallet/test_wallet_utils.py +2 -3
  169. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  170. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  171. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  172. chia/_tests/wallet/wallet_block_tools.py +12 -11
  173. chia/_tests/weight_proof/config.py +1 -0
  174. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  175. chia/apis/__init__.py +21 -0
  176. chia/apis/farmer_stub.py +102 -0
  177. chia/apis/full_node_stub.py +374 -0
  178. chia/apis/harvester_stub.py +57 -0
  179. chia/apis/introducer_stub.py +35 -0
  180. chia/apis/solver_stub.py +30 -0
  181. chia/apis/stub_protocol_registry.py +21 -0
  182. chia/apis/timelord_stub.py +39 -0
  183. chia/apis/wallet_stub.py +161 -0
  184. chia/cmds/beta.py +3 -4
  185. chia/cmds/beta_funcs.py +4 -3
  186. chia/cmds/check_wallet_db.py +4 -4
  187. chia/cmds/chia.py +1 -2
  188. chia/cmds/cmd_classes.py +11 -13
  189. chia/cmds/cmd_helpers.py +11 -11
  190. chia/cmds/cmds_util.py +15 -15
  191. chia/cmds/coin_funcs.py +6 -7
  192. chia/cmds/coins.py +2 -3
  193. chia/cmds/configure.py +1 -2
  194. chia/cmds/data.py +42 -42
  195. chia/cmds/data_funcs.py +81 -81
  196. chia/cmds/db.py +4 -5
  197. chia/cmds/db_backup_func.py +2 -2
  198. chia/cmds/db_upgrade_func.py +3 -3
  199. chia/cmds/db_validate_func.py +2 -2
  200. chia/cmds/dev/data.py +4 -4
  201. chia/cmds/dev/gh.py +5 -5
  202. chia/cmds/dev/installers.py +2 -3
  203. chia/cmds/dev/mempool.py +3 -4
  204. chia/cmds/dev/mempool_funcs.py +4 -4
  205. chia/cmds/dev/sim.py +8 -8
  206. chia/cmds/dump_keyring.py +3 -3
  207. chia/cmds/farm.py +6 -8
  208. chia/cmds/farm_funcs.py +25 -24
  209. chia/cmds/init_funcs.py +4 -4
  210. chia/cmds/keys.py +16 -18
  211. chia/cmds/keys_funcs.py +36 -36
  212. chia/cmds/netspace.py +1 -3
  213. chia/cmds/netspace_funcs.py +1 -2
  214. chia/cmds/options.py +3 -2
  215. chia/cmds/param_types.py +17 -16
  216. chia/cmds/passphrase.py +6 -7
  217. chia/cmds/passphrase_funcs.py +11 -13
  218. chia/cmds/peer.py +1 -3
  219. chia/cmds/peer_funcs.py +3 -3
  220. chia/cmds/plotnft.py +6 -7
  221. chia/cmds/plotnft_funcs.py +37 -26
  222. chia/cmds/rpc.py +3 -3
  223. chia/cmds/show.py +3 -5
  224. chia/cmds/show_funcs.py +9 -9
  225. chia/cmds/sim_funcs.py +25 -26
  226. chia/cmds/solver.py +1 -3
  227. chia/cmds/solver_funcs.py +1 -2
  228. chia/cmds/start_funcs.py +2 -2
  229. chia/cmds/wallet.py +76 -81
  230. chia/cmds/wallet_funcs.py +206 -177
  231. chia/consensus/augmented_chain.py +6 -6
  232. chia/consensus/block_body_validation.py +19 -15
  233. chia/consensus/block_creation.py +25 -21
  234. chia/consensus/block_header_validation.py +27 -13
  235. chia/consensus/block_height_map.py +3 -6
  236. chia/consensus/block_height_map_protocol.py +2 -2
  237. chia/consensus/block_record.py +2 -4
  238. chia/consensus/blockchain.py +58 -40
  239. chia/consensus/blockchain_interface.py +7 -7
  240. chia/consensus/coin_store_protocol.py +5 -6
  241. chia/consensus/condition_tools.py +4 -4
  242. chia/consensus/cost_calculator.py +2 -3
  243. chia/consensus/default_constants.py +19 -13
  244. chia/consensus/deficit.py +1 -3
  245. chia/consensus/difficulty_adjustment.py +3 -5
  246. chia/consensus/find_fork_point.py +2 -4
  247. chia/consensus/full_block_to_block_record.py +11 -13
  248. chia/consensus/generator_tools.py +2 -3
  249. chia/consensus/get_block_challenge.py +50 -26
  250. chia/consensus/get_block_generator.py +2 -3
  251. chia/consensus/make_sub_epoch_summary.py +8 -7
  252. chia/consensus/multiprocess_validation.py +31 -20
  253. chia/consensus/pos_quality.py +6 -23
  254. chia/consensus/pot_iterations.py +17 -44
  255. chia/consensus/signage_point.py +4 -5
  256. chia/consensus/vdf_info_computation.py +2 -4
  257. chia/daemon/client.py +8 -8
  258. chia/daemon/keychain_proxy.py +31 -37
  259. chia/daemon/server.py +32 -33
  260. chia/daemon/windows_signal.py +4 -3
  261. chia/data_layer/data_layer.py +86 -77
  262. chia/data_layer/data_layer_rpc_api.py +9 -9
  263. chia/data_layer/data_layer_rpc_client.py +13 -15
  264. chia/data_layer/data_layer_server.py +3 -3
  265. chia/data_layer/data_layer_util.py +14 -14
  266. chia/data_layer/data_layer_wallet.py +94 -101
  267. chia/data_layer/data_store.py +50 -50
  268. chia/data_layer/dl_wallet_store.py +9 -12
  269. chia/data_layer/download_data.py +8 -9
  270. chia/data_layer/s3_plugin_service.py +5 -9
  271. chia/data_layer/start_data_layer.py +5 -5
  272. chia/farmer/farmer.py +31 -31
  273. chia/farmer/farmer_api.py +45 -33
  274. chia/farmer/farmer_rpc_api.py +5 -4
  275. chia/farmer/farmer_rpc_client.py +6 -6
  276. chia/farmer/start_farmer.py +6 -6
  277. chia/full_node/block_store.py +13 -16
  278. chia/full_node/check_fork_next_block.py +1 -2
  279. chia/full_node/coin_store.py +15 -16
  280. chia/full_node/eligible_coin_spends.py +3 -3
  281. chia/full_node/fee_estimate_store.py +2 -3
  282. chia/full_node/fee_tracker.py +1 -2
  283. chia/full_node/full_block_utils.py +4 -4
  284. chia/full_node/full_node.py +239 -223
  285. chia/full_node/full_node_api.py +197 -152
  286. chia/full_node/full_node_rpc_api.py +34 -32
  287. chia/full_node/full_node_rpc_client.py +18 -19
  288. chia/full_node/full_node_store.py +45 -43
  289. chia/full_node/hard_fork_utils.py +44 -0
  290. chia/full_node/hint_management.py +2 -2
  291. chia/full_node/mempool.py +17 -19
  292. chia/full_node/mempool_manager.py +89 -42
  293. chia/full_node/pending_tx_cache.py +2 -3
  294. chia/full_node/start_full_node.py +5 -5
  295. chia/full_node/sync_store.py +3 -4
  296. chia/full_node/tx_processing_queue.py +120 -36
  297. chia/full_node/weight_proof.py +61 -48
  298. chia/harvester/harvester.py +25 -24
  299. chia/harvester/harvester_api.py +61 -38
  300. chia/harvester/harvester_rpc_api.py +10 -10
  301. chia/harvester/start_harvester.py +4 -4
  302. chia/introducer/introducer.py +3 -3
  303. chia/introducer/introducer_api.py +6 -4
  304. chia/introducer/start_introducer.py +4 -4
  305. chia/legacy/keyring.py +3 -3
  306. chia/plot_sync/delta.py +1 -2
  307. chia/plot_sync/receiver.py +20 -17
  308. chia/plot_sync/sender.py +15 -10
  309. chia/plotters/bladebit.py +7 -7
  310. chia/plotters/chiapos.py +2 -2
  311. chia/plotters/madmax.py +4 -4
  312. chia/plotters/plotters.py +4 -4
  313. chia/plotters/plotters_util.py +3 -3
  314. chia/plotting/cache.py +20 -14
  315. chia/plotting/check_plots.py +26 -35
  316. chia/plotting/create_plots.py +22 -23
  317. chia/plotting/manager.py +21 -14
  318. chia/plotting/prover.py +59 -42
  319. chia/plotting/util.py +16 -16
  320. chia/pools/pool_config.py +2 -1
  321. chia/pools/pool_puzzles.py +11 -12
  322. chia/pools/pool_wallet.py +34 -57
  323. chia/pools/pool_wallet_info.py +39 -10
  324. chia/protocols/farmer_protocol.py +8 -9
  325. chia/protocols/fee_estimate.py +3 -4
  326. chia/protocols/full_node_protocol.py +3 -4
  327. chia/protocols/harvester_protocol.py +27 -15
  328. chia/protocols/outbound_message.py +3 -3
  329. chia/protocols/pool_protocol.py +8 -9
  330. chia/protocols/shared_protocol.py +1 -2
  331. chia/protocols/solver_protocol.py +9 -2
  332. chia/protocols/timelord_protocol.py +4 -7
  333. chia/protocols/wallet_protocol.py +11 -12
  334. chia/rpc/rpc_client.py +9 -9
  335. chia/rpc/rpc_server.py +17 -17
  336. chia/rpc/util.py +2 -2
  337. chia/seeder/crawler.py +8 -8
  338. chia/seeder/crawler_api.py +21 -27
  339. chia/seeder/crawler_rpc_api.py +2 -2
  340. chia/seeder/dns_server.py +21 -21
  341. chia/seeder/start_crawler.py +4 -4
  342. chia/server/address_manager.py +15 -16
  343. chia/server/api_protocol.py +11 -11
  344. chia/server/chia_policy.py +46 -26
  345. chia/server/introducer_peers.py +2 -3
  346. chia/server/node_discovery.py +19 -19
  347. chia/server/rate_limit_numbers.py +4 -5
  348. chia/server/rate_limits.py +4 -4
  349. chia/server/resolve_peer_info.py +4 -4
  350. chia/server/server.py +49 -52
  351. chia/server/signal_handlers.py +6 -6
  352. chia/server/start_service.py +17 -17
  353. chia/server/upnp.py +4 -6
  354. chia/server/ws_connection.py +52 -37
  355. chia/simulator/add_blocks_in_batches.py +1 -3
  356. chia/simulator/block_tools.py +312 -200
  357. chia/simulator/full_node_simulator.py +56 -35
  358. chia/simulator/keyring.py +2 -3
  359. chia/simulator/setup_services.py +15 -15
  360. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  361. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  362. chia/simulator/simulator_protocol.py +1 -2
  363. chia/simulator/simulator_test_tools.py +3 -3
  364. chia/simulator/start_simulator.py +7 -7
  365. chia/simulator/wallet_tools.py +10 -10
  366. chia/solver/solver.py +10 -10
  367. chia/solver/solver_api.py +10 -8
  368. chia/solver/solver_rpc_api.py +2 -2
  369. chia/solver/start_solver.py +4 -4
  370. chia/ssl/cacert.pem +148 -90
  371. chia/ssl/chia_ca.crt +14 -10
  372. chia/ssl/chia_ca_old.crt +19 -0
  373. chia/ssl/create_ssl.py +4 -4
  374. chia/ssl/renewedselfsignedca.conf +4 -0
  375. chia/ssl/ssl_check.py +1 -2
  376. chia/timelord/iters_from_block.py +1 -4
  377. chia/timelord/start_timelord.py +4 -4
  378. chia/timelord/timelord.py +44 -40
  379. chia/timelord/timelord_api.py +6 -4
  380. chia/timelord/timelord_launcher.py +2 -2
  381. chia/timelord/timelord_rpc_api.py +2 -2
  382. chia/timelord/timelord_state.py +11 -12
  383. chia/types/block_protocol.py +1 -3
  384. chia/types/blockchain_format/coin.py +1 -3
  385. chia/types/blockchain_format/program.py +11 -8
  386. chia/types/blockchain_format/proof_of_space.py +123 -76
  387. chia/types/blockchain_format/tree_hash.py +3 -3
  388. chia/types/blockchain_format/vdf.py +1 -2
  389. chia/types/coin_spend.py +3 -3
  390. chia/types/mempool_item.py +5 -5
  391. chia/types/mempool_submission_status.py +2 -3
  392. chia/types/peer_info.py +1 -2
  393. chia/types/unfinished_header_block.py +3 -4
  394. chia/types/validation_state.py +1 -2
  395. chia/util/action_scope.py +8 -8
  396. chia/util/async_pool.py +5 -5
  397. chia/util/bech32m.py +1 -2
  398. chia/util/beta_metrics.py +2 -2
  399. chia/util/block_cache.py +4 -4
  400. chia/util/chia_logging.py +2 -2
  401. chia/util/chia_version.py +1 -2
  402. chia/util/config.py +15 -16
  403. chia/util/db_wrapper.py +26 -27
  404. chia/util/default_root.py +1 -2
  405. chia/util/errors.py +3 -3
  406. chia/util/file_keyring.py +14 -14
  407. chia/util/files.py +2 -3
  408. chia/util/hash.py +4 -4
  409. chia/util/initial-config.yaml +4 -5
  410. chia/util/inline_executor.py +2 -1
  411. chia/util/ip_address.py +1 -2
  412. chia/util/keychain.py +25 -27
  413. chia/util/keyring_wrapper.py +18 -19
  414. chia/util/lock.py +3 -4
  415. chia/util/log_exceptions.py +1 -2
  416. chia/util/lru_cache.py +2 -2
  417. chia/util/network.py +6 -6
  418. chia/util/path.py +2 -3
  419. chia/util/priority_mutex.py +2 -2
  420. chia/util/profiler.py +1 -2
  421. chia/util/safe_cancel_task.py +1 -2
  422. chia/util/streamable.py +24 -10
  423. chia/util/task_referencer.py +1 -1
  424. chia/util/timing.py +3 -3
  425. chia/util/virtual_project_analysis.py +6 -5
  426. chia/util/ws_message.py +2 -2
  427. chia/wallet/cat_wallet/cat_info.py +3 -4
  428. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  429. chia/wallet/cat_wallet/cat_utils.py +3 -4
  430. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  431. chia/wallet/cat_wallet/lineage_store.py +3 -4
  432. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  433. chia/wallet/coin_selection.py +9 -10
  434. chia/wallet/conditions.py +142 -106
  435. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  436. chia/wallet/derivation_record.py +1 -2
  437. chia/wallet/derive_keys.py +2 -4
  438. chia/wallet/did_wallet/did_info.py +10 -11
  439. chia/wallet/did_wallet/did_wallet.py +36 -82
  440. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  441. chia/wallet/driver_protocol.py +5 -7
  442. chia/wallet/lineage_proof.py +4 -4
  443. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  444. chia/wallet/nft_wallet/nft_info.py +8 -9
  445. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  446. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  447. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  448. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  449. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  450. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  451. chia/wallet/notification_manager.py +3 -3
  452. chia/wallet/notification_store.py +44 -61
  453. chia/wallet/outer_puzzles.py +6 -7
  454. chia/wallet/puzzle_drivers.py +34 -6
  455. chia/wallet/puzzles/clawback/drivers.py +6 -6
  456. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  457. chia/wallet/puzzles/load_clvm.py +1 -1
  458. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  459. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  460. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  461. chia/wallet/puzzles/tails.py +3 -3
  462. chia/wallet/singleton.py +5 -7
  463. chia/wallet/singleton_record.py +3 -3
  464. chia/wallet/start_wallet.py +5 -5
  465. chia/wallet/trade_manager.py +37 -58
  466. chia/wallet/trade_record.py +4 -4
  467. chia/wallet/trading/offer.py +59 -46
  468. chia/wallet/trading/trade_store.py +8 -9
  469. chia/wallet/transaction_record.py +8 -8
  470. chia/wallet/uncurried_puzzle.py +1 -2
  471. chia/wallet/util/clvm_streamable.py +12 -12
  472. chia/wallet/util/compute_hints.py +4 -5
  473. chia/wallet/util/curry_and_treehash.py +1 -2
  474. chia/wallet/util/merkle_tree.py +2 -3
  475. chia/wallet/util/peer_request_cache.py +8 -8
  476. chia/wallet/util/signing.py +85 -0
  477. chia/wallet/util/tx_config.py +15 -6
  478. chia/wallet/util/wallet_sync_utils.py +14 -16
  479. chia/wallet/util/wallet_types.py +2 -2
  480. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  481. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  482. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  483. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  484. chia/wallet/vc_wallet/vc_store.py +5 -6
  485. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  486. chia/wallet/wallet.py +50 -78
  487. chia/wallet/wallet_action_scope.py +11 -11
  488. chia/wallet/wallet_blockchain.py +12 -12
  489. chia/wallet/wallet_coin_record.py +12 -6
  490. chia/wallet/wallet_coin_store.py +24 -25
  491. chia/wallet/wallet_interested_store.py +3 -5
  492. chia/wallet/wallet_nft_store.py +10 -11
  493. chia/wallet/wallet_node.py +53 -61
  494. chia/wallet/wallet_node_api.py +5 -3
  495. chia/wallet/wallet_protocol.py +23 -23
  496. chia/wallet/wallet_puzzle_store.py +15 -18
  497. chia/wallet/wallet_request_types.py +778 -114
  498. chia/wallet/wallet_retry_store.py +1 -3
  499. chia/wallet/wallet_rpc_api.py +572 -909
  500. chia/wallet/wallet_rpc_client.py +87 -279
  501. chia/wallet/wallet_singleton_store.py +3 -4
  502. chia/wallet/wallet_state_manager.py +332 -106
  503. chia/wallet/wallet_transaction_store.py +11 -14
  504. chia/wallet/wallet_user_store.py +4 -6
  505. chia/wallet/wallet_weight_proof_handler.py +4 -4
  506. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/METADATA +6 -5
  507. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
  508. chia/apis.py +0 -21
  509. chia/consensus/check_time_locks.py +0 -57
  510. chia/data_layer/puzzles/__init__.py +0 -0
  511. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  512. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  513. chia/types/coin_record.py +0 -44
  514. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  515. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  516. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  517. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  518. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  520. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  521. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  522. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  524. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  525. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  526. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  527. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  528. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  529. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/WHEEL +0 -0
  530. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
  531. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
@@ -4,10 +4,10 @@ import asyncio
4
4
  import itertools
5
5
  import time
6
6
  from collections.abc import Collection
7
- from typing import Any, Optional, Union
7
+ from typing import Any
8
8
 
9
9
  import anyio
10
- from chia_rs import BlockRecord, FullBlock, SpendBundle
10
+ from chia_rs import BlockRecord, CoinRecord, FullBlock, SpendBundle
11
11
  from chia_rs.sized_bytes import bytes32
12
12
  from chia_rs.sized_ints import uint8, uint32, uint64, uint128
13
13
 
@@ -24,7 +24,6 @@ from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
24
24
  from chia.simulator.block_tools import BlockTools
25
25
  from chia.simulator.simulator_protocol import FarmNewBlockProtocol, GetAllCoinsProtocol, ReorgProtocol
26
26
  from chia.types.blockchain_format.coin import Coin
27
- from chia.types.coin_record import CoinRecord
28
27
  from chia.types.validation_state import ValidationState
29
28
  from chia.util.config import lock_and_load_config, save_config
30
29
  from chia.util.timing import adjusted_timeout, backoff_times
@@ -45,7 +44,7 @@ default = _Default()
45
44
  timeout_per_block = 5
46
45
 
47
46
 
48
- async def wait_for_coins_in_wallet(coins: set[Coin], wallet: Wallet, timeout: Optional[float] = 5):
47
+ async def wait_for_coins_in_wallet(coins: set[Coin], wallet: Wallet, timeout: float | None = 5):
49
48
  """Wait until all of the specified coins are simultaneously reported as spendable
50
49
  by the wallet.
51
50
 
@@ -72,16 +71,16 @@ class FullNodeSimulator(FullNodeAPI):
72
71
  self.bt = block_tools
73
72
  self.full_node = full_node
74
73
  self.config = config
75
- self.time_per_block: Optional[float] = None
74
+ self.time_per_block: float | None = None
76
75
  self.full_node.simulator_transaction_callback = self.autofarm_transaction
77
76
  self.use_current_time: bool = self.config.get("simulator", {}).get("use_current_time", False)
78
77
  self.auto_farm: bool = self.config.get("simulator", {}).get("auto_farm", False)
79
78
 
80
- def get_connections(self, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
79
+ def get_connections(self, request_node_type: NodeType | None) -> list[dict[str, Any]]:
81
80
  return default_get_connections(server=self.server, request_node_type=request_node_type)
82
81
 
83
82
  async def get_all_full_blocks(self) -> list[FullBlock]:
84
- peak: Optional[BlockRecord] = self.full_node.blockchain.get_peak()
83
+ peak: BlockRecord | None = self.full_node.blockchain.get_peak()
85
84
  if peak is None:
86
85
  return []
87
86
  blocks = []
@@ -158,7 +157,7 @@ class FullNodeSimulator(FullNodeAPI):
158
157
  Note: This does not broadcast the changes, and all wallets will need to be wiped.
159
158
  """
160
159
  async with self.full_node.blockchain.priority_mutex.acquire(priority=BlockchainMutexPriority.high):
161
- peak_height: Optional[uint32] = self.full_node.blockchain.get_peak_height()
160
+ peak_height: uint32 | None = self.full_node.blockchain.get_peak_height()
162
161
  if peak_height is None:
163
162
  raise ValueError("We can't revert without any blocks.")
164
163
  elif peak_height - 1 < new_height:
@@ -237,12 +236,17 @@ class FullNodeSimulator(FullNodeAPI):
237
236
 
238
237
  current_blocks = await self.get_all_full_blocks()
239
238
  target = request.puzzle_hash
239
+ pool_target: bytes32 | None = target
240
+ if current_blocks[-1].height >= self.full_node.constants.HARD_FORK2_HEIGHT - 1:
241
+ # v2 plots (which we start farming at the hard fork activation)
242
+ # don't support specifying the pool target
243
+ pool_target = None
240
244
  more = self.bt.get_consecutive_blocks(
241
245
  1,
242
246
  time_per_block=time_per_block,
243
247
  transaction_data=spend_bundle,
244
248
  farmer_reward_puzzle_hash=target,
245
- pool_reward_puzzle_hash=target,
249
+ pool_reward_puzzle_hash=pool_target,
246
250
  block_list_input=current_blocks,
247
251
  guarantee_transaction_block=True,
248
252
  current_time=current_time,
@@ -289,11 +293,16 @@ class FullNodeSimulator(FullNodeAPI):
289
293
  spend_bundle = mempool_bundle[0]
290
294
  current_blocks = await self.get_all_full_blocks()
291
295
  target = request.puzzle_hash
296
+ pool_target: bytes32 | None = target
297
+ if current_blocks[-1].height >= self.full_node.constants.HARD_FORK2_HEIGHT - 1:
298
+ # v2 plots (which we start farming at the hard fork activation)
299
+ # don't support specifying the pool target
300
+ pool_target = None
292
301
  more = self.bt.get_consecutive_blocks(
293
302
  1,
294
303
  transaction_data=spend_bundle,
295
304
  farmer_reward_puzzle_hash=target,
296
- pool_reward_puzzle_hash=target,
305
+ pool_reward_puzzle_hash=pool_target,
297
306
  block_list_input=current_blocks,
298
307
  current_time=current_time,
299
308
  time_per_block=time_per_block,
@@ -311,10 +320,15 @@ class FullNodeSimulator(FullNodeAPI):
311
320
  current_blocks = await self.get_all_full_blocks()
312
321
  block_count = new_index - old_index
313
322
 
323
+ pool_target: bytes32 | None = coinbase_ph
324
+ if current_blocks[-1].height >= self.full_node.constants.HARD_FORK2_HEIGHT - 1:
325
+ # v2 plots (which we start farming at the hard fork activation)
326
+ # don't support specifying the pool target
327
+ pool_target = None
314
328
  more_blocks = self.bt.get_consecutive_blocks(
315
329
  block_count,
316
330
  farmer_reward_puzzle_hash=coinbase_ph,
317
- pool_reward_puzzle_hash=coinbase_ph,
331
+ pool_reward_puzzle_hash=pool_target,
318
332
  block_list_input=current_blocks[: old_index + 1],
319
333
  force_overflow=True,
320
334
  guarantee_transaction_block=True,
@@ -327,7 +341,7 @@ class FullNodeSimulator(FullNodeAPI):
327
341
  count: int,
328
342
  farm_to: bytes32 = bytes32.zeros,
329
343
  guarantee_transaction_blocks: bool = False,
330
- timeout: Union[_Default, float, None] = default,
344
+ timeout: _Default | float | None = default,
331
345
  _wait_for_synced: bool = True,
332
346
  ) -> int:
333
347
  """Process the requested number of blocks including farming to the passed puzzle
@@ -371,7 +385,7 @@ class FullNodeSimulator(FullNodeAPI):
371
385
  self,
372
386
  count: int,
373
387
  wallet: Wallet,
374
- timeout: Union[_Default, float, None] = default,
388
+ timeout: _Default | float | None = default,
375
389
  _wait_for_synced: bool = True,
376
390
  ) -> int:
377
391
  """Farm the requested number of blocks to the passed wallet. This will
@@ -398,12 +412,19 @@ class FullNodeSimulator(FullNodeAPI):
398
412
  rewards = 0
399
413
 
400
414
  block_reward_coins = set()
401
- expected_reward_coin_count = 2 * count
402
415
 
403
416
  original_peak_height = self.full_node.blockchain.get_peak_height()
404
417
  expected_peak_height = 0 if original_peak_height is None else original_peak_height
405
418
  extra_blocks = [[False, False]] if original_peak_height is None else [] # Farm genesis block first
406
419
 
420
+ if expected_peak_height >= self.full_node.constants.HARD_FORK2_HEIGHT - 1:
421
+ # v2 plots (which we start farming at the hard fork activation)
422
+ # don't support specifying the pool target, so we only get the
423
+ # farmer reward, not the pool reward
424
+ expected_reward_coin_count = count
425
+ else:
426
+ expected_reward_coin_count = 2 * count
427
+
407
428
  for to_wallet, tx_block in [*extra_blocks, *([[True, False]] * (count - 1)), [True, True], [False, True]]:
408
429
  # This complicated application of the last two blocks being transaction
409
430
  # blocks is due to the transaction blocks only including rewards from
@@ -444,7 +465,7 @@ class FullNodeSimulator(FullNodeAPI):
444
465
  self,
445
466
  amount: int,
446
467
  wallet: Wallet,
447
- timeout: Union[_Default, float, None] = default,
468
+ timeout: _Default | float | None = default,
448
469
  ) -> int:
449
470
  """Farm at least the requested amount of mojos to the passed wallet. Extra
450
471
  mojos will be received based on the block rewards at the present block height.
@@ -462,7 +483,7 @@ class FullNodeSimulator(FullNodeAPI):
462
483
  if amount == 0:
463
484
  return rewards
464
485
 
465
- height_before: Optional[uint32] = self.full_node.blockchain.get_peak_height()
486
+ height_before: uint32 | None = self.full_node.blockchain.get_peak_height()
466
487
  if height_before is None:
467
488
  height_before = uint32(0)
468
489
 
@@ -484,8 +505,8 @@ class FullNodeSimulator(FullNodeAPI):
484
505
 
485
506
  async def wait_transaction_records_entered_mempool(
486
507
  self,
487
- records: Collection[Union[TransactionRecord, LightTransactionRecord]],
488
- timeout: Union[float, None] = 5,
508
+ records: Collection[TransactionRecord | LightTransactionRecord],
509
+ timeout: float | None = 5,
489
510
  ) -> None:
490
511
  """Wait until the transaction records have entered the mempool. Transaction
491
512
  records with no spend bundle are ignored.
@@ -517,7 +538,7 @@ class FullNodeSimulator(FullNodeAPI):
517
538
  async def wait_bundle_ids_in_mempool(
518
539
  self,
519
540
  bundle_ids: Collection[bytes32],
520
- timeout: Union[float, None] = 5,
541
+ timeout: float | None = 5,
521
542
  ) -> None:
522
543
  """Wait until the ids of specific spend bundles have entered the mempool.
523
544
 
@@ -544,7 +565,7 @@ class FullNodeSimulator(FullNodeAPI):
544
565
  self,
545
566
  record_ids: Collection[bytes32],
546
567
  wallet_node: WalletNode,
547
- timeout: Union[float, None] = 10,
568
+ timeout: float | None = 10,
548
569
  ) -> None:
549
570
  """Wait until the transaction records have been marked that they have made it into the mempool. Transaction
550
571
  records with no spend bundle are ignored.
@@ -571,7 +592,7 @@ class FullNodeSimulator(FullNodeAPI):
571
592
  async def process_transaction_records(
572
593
  self,
573
594
  records: Collection[TransactionRecord],
574
- timeout: Union[float, None] = (2 * timeout_per_block) + 5,
595
+ timeout: float | None = (2 * timeout_per_block) + 5,
575
596
  ) -> None:
576
597
  """Process the specified transaction records and wait until they have been
577
598
  included in a block.
@@ -596,7 +617,7 @@ class FullNodeSimulator(FullNodeAPI):
596
617
  async def process_spend_bundles(
597
618
  self,
598
619
  bundles: Collection[SpendBundle],
599
- timeout: Union[float, None] = (2 * timeout_per_block) + 5,
620
+ timeout: float | None = (2 * timeout_per_block) + 5,
600
621
  ) -> None:
601
622
  """Process the specified spend bundles and wait until they have been included
602
623
  in a block.
@@ -612,7 +633,7 @@ class FullNodeSimulator(FullNodeAPI):
612
633
  async def process_coin_spends(
613
634
  self,
614
635
  coins: Collection[Coin],
615
- timeout: Union[float, None] = (2 * timeout_per_block) + 5,
636
+ timeout: float | None = (2 * timeout_per_block) + 5,
616
637
  ) -> None:
617
638
  """Process the specified coin names and wait until they have been created in a
618
639
  block.
@@ -639,10 +660,10 @@ class FullNodeSimulator(FullNodeAPI):
639
660
  if len(coin_set) == 0:
640
661
  return
641
662
 
642
- async def process_all_wallet_transactions(self, wallet: Wallet, timeout: Optional[float] = 5) -> None:
663
+ async def process_all_wallet_transactions(self, wallet: Wallet, timeout: float | None = 5) -> None:
643
664
  # TODO: Maybe something could be done around waiting for the tx to enter the
644
665
  # mempool. Maybe not, might be too many races or such.
645
- wallet_state_manager: Optional[WalletStateManager] = wallet.wallet_state_manager
666
+ wallet_state_manager: WalletStateManager | None = wallet.wallet_state_manager
646
667
  assert wallet_state_manager is not None
647
668
 
648
669
  with anyio.fail_after(delay=adjusted_timeout(timeout)):
@@ -664,8 +685,8 @@ class FullNodeSimulator(FullNodeAPI):
664
685
  async def check_transactions_confirmed(
665
686
  self,
666
687
  wallet_state_manager: WalletStateManager,
667
- transactions: Union[list[TransactionRecord], list[LightTransactionRecord]],
668
- timeout: Optional[float] = 5,
688
+ transactions: list[TransactionRecord] | list[LightTransactionRecord],
689
+ timeout: float | None = 5,
669
690
  ) -> None:
670
691
  transactions_left: set[bytes32] = {tx.name for tx in transactions}
671
692
  with anyio.fail_after(delay=adjusted_timeout(timeout)):
@@ -682,7 +703,7 @@ class FullNodeSimulator(FullNodeAPI):
682
703
  amounts: list[uint64],
683
704
  wallet: Wallet,
684
705
  per_transaction_record_group: int = 50,
685
- timeout: Union[float, None] = 15,
706
+ timeout: float | None = 15,
686
707
  ) -> set[Coin]:
687
708
  """Create coins with the requested amount. This is useful when you need a
688
709
  bunch of coins for a test and don't need to farm that many.
@@ -760,7 +781,7 @@ class FullNodeSimulator(FullNodeAPI):
760
781
  async def self_is_synced(self) -> bool:
761
782
  return await self.full_node.synced()
762
783
 
763
- async def wallet_is_synced(self, wallet_node: WalletNode, peak_height: Optional[uint32] = None) -> bool:
784
+ async def wallet_is_synced(self, wallet_node: WalletNode, peak_height: uint32 | None = None) -> bool:
764
785
  if not await self.self_is_synced():
765
786
  # Depending on races, may not be covered every time
766
787
  return False # pragma: no cover
@@ -776,8 +797,8 @@ class FullNodeSimulator(FullNodeAPI):
776
797
  async def wait_for_wallet_synced(
777
798
  self,
778
799
  wallet_node: WalletNode,
779
- timeout: Optional[float] = 5,
780
- peak_height: Optional[uint32] = None,
800
+ timeout: float | None = 5,
801
+ peak_height: uint32 | None = None,
781
802
  ) -> None:
782
803
  with anyio.fail_after(delay=adjusted_timeout(timeout)):
783
804
  for backoff_time in backoff_times():
@@ -785,7 +806,7 @@ class FullNodeSimulator(FullNodeAPI):
785
806
  break
786
807
  await asyncio.sleep(backoff_time)
787
808
 
788
- async def wallets_are_synced(self, wallet_nodes: list[WalletNode], peak_height: Optional[uint32] = None) -> bool:
809
+ async def wallets_are_synced(self, wallet_nodes: list[WalletNode], peak_height: uint32 | None = None) -> bool:
789
810
  return all(
790
811
  [
791
812
  await self.wallet_is_synced(wallet_node=wallet_node, peak_height=peak_height)
@@ -796,8 +817,8 @@ class FullNodeSimulator(FullNodeAPI):
796
817
  async def wait_for_wallets_synced(
797
818
  self,
798
819
  wallet_nodes: list[WalletNode],
799
- timeout: Optional[float] = 5,
800
- peak_height: Optional[uint32] = None,
820
+ timeout: float | None = 5,
821
+ peak_height: uint32 | None = None,
801
822
  ) -> None:
802
823
  with anyio.fail_after(delay=adjusted_timeout(timeout)):
803
824
  for backoff_time in backoff_times():
@@ -807,7 +828,7 @@ class FullNodeSimulator(FullNodeAPI):
807
828
 
808
829
  async def wait_for_self_synced(
809
830
  self,
810
- timeout: Optional[float] = 5,
831
+ timeout: float | None = 5,
811
832
  ) -> None:
812
833
  with anyio.fail_after(delay=adjusted_timeout(timeout)):
813
834
  for backoff_time in backoff_times():
chia/simulator/keyring.py CHANGED
@@ -4,7 +4,6 @@ import os
4
4
  import shutil
5
5
  import tempfile
6
6
  from pathlib import Path
7
- from typing import Optional
8
7
  from unittest.mock import patch
9
8
 
10
9
  from chia.util.file_keyring import FileKeyring, keyring_path_from_root
@@ -44,7 +43,7 @@ class TempKeyring:
44
43
  user: str = "testing-1.8.0",
45
44
  service: str = "testing-chia-1.8.0",
46
45
  populate: bool = False,
47
- existing_keyring_path: Optional[str] = None,
46
+ existing_keyring_path: str | None = None,
48
47
  delete_on_cleanup: bool = True,
49
48
  use_os_credential_store: bool = False,
50
49
  ):
@@ -65,7 +64,7 @@ class TempKeyring:
65
64
  user: str,
66
65
  service: str,
67
66
  populate: bool,
68
- existing_keyring_path: Optional[str],
67
+ existing_keyring_path: str | None,
69
68
  use_os_credential_store: bool,
70
69
  ):
71
70
  existing_keyring_dir = Path(existing_keyring_path).parent if existing_keyring_path else None
@@ -9,7 +9,7 @@ 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, Optional, Union
12
+ from typing import Any
13
13
 
14
14
  from chia_rs import ConsensusConstants
15
15
  from chia_rs.sized_bytes import bytes32
@@ -100,18 +100,18 @@ async def setup_full_node(
100
100
  db_name: str,
101
101
  self_hostname: str,
102
102
  local_bt: BlockTools,
103
- introducer_port: Optional[int] = None,
103
+ introducer_port: int | None = None,
104
104
  simulator: bool = False,
105
105
  send_uncompact_interval: int = 0,
106
106
  sanitize_weight_proof_only: bool = False,
107
107
  connect_to_daemon: bool = False,
108
108
  db_version: int = 1,
109
- disable_capabilities: Optional[list[Capability]] = None,
109
+ disable_capabilities: list[Capability] | None = None,
110
110
  *,
111
111
  reuse_db: bool = False,
112
- ) -> AsyncGenerator[Union[FullNodeService, SimulatorFullNodeService], None]:
112
+ ) -> AsyncGenerator[FullNodeService | SimulatorFullNodeService, None]:
113
113
  if reuse_db:
114
- db_path: Union[str, Path] = local_bt.root_path / f"{db_name}"
114
+ db_path: str | Path = local_bt.root_path / f"{db_name}"
115
115
  uri = False
116
116
  else:
117
117
  db_path = generate_in_memory_db_uri()
@@ -149,7 +149,7 @@ async def setup_full_node(
149
149
  override_capabilities = (
150
150
  None if disable_capabilities is None else get_capability_overrides(NodeType.FULL_NODE, disable_capabilities)
151
151
  )
152
- service: Union[FullNodeService, SimulatorFullNodeService]
152
+ service: FullNodeService | SimulatorFullNodeService
153
153
  if simulator:
154
154
  service = await create_full_node_simulator_service(
155
155
  local_bt.root_path,
@@ -232,11 +232,11 @@ async def setup_wallet_node(
232
232
  self_hostname: str,
233
233
  consensus_constants: ConsensusConstants,
234
234
  local_bt: BlockTools,
235
- spam_filter_after_n_txs: Optional[int] = 200,
235
+ spam_filter_after_n_txs: int | None = 200,
236
236
  xch_spam_amount: int = 1000000,
237
- full_node_port: Optional[uint16] = None,
238
- introducer_port: Optional[uint16] = None,
239
- key_seed: Optional[bytes] = None,
237
+ full_node_port: uint16 | None = None,
238
+ introducer_port: uint16 | None = None,
239
+ key_seed: bytes | None = None,
240
240
  initial_num_public_keys: int = 5,
241
241
  ) -> AsyncGenerator[WalletService, None]:
242
242
  with TempKeyring(populate=True) as keychain:
@@ -324,7 +324,7 @@ async def setup_wallet_node(
324
324
  async def setup_harvester(
325
325
  b_tools: BlockTools,
326
326
  root_path: Path,
327
- farmer_peer: Optional[UnresolvedPeerInfo],
327
+ farmer_peer: UnresolvedPeerInfo | None,
328
328
  consensus_constants: ConsensusConstants,
329
329
  start_service: bool = True,
330
330
  ) -> AsyncGenerator[HarvesterService, None]:
@@ -356,10 +356,10 @@ async def setup_farmer(
356
356
  root_path: Path,
357
357
  self_hostname: str,
358
358
  consensus_constants: ConsensusConstants,
359
- full_node_port: Optional[uint16] = None,
359
+ full_node_port: uint16 | None = None,
360
360
  start_service: bool = True,
361
361
  port: uint16 = uint16(0),
362
- solver_peer: Optional[UnresolvedPeerInfo] = None,
362
+ solver_peer: UnresolvedPeerInfo | None = None,
363
363
  ) -> AsyncGenerator[FarmerService, None]:
364
364
  with create_lock_and_load_config(b_tools.root_path / "config" / "ssl" / "ca", root_path) as root_config:
365
365
  root_config["logging"]["log_stdout"] = True
@@ -435,7 +435,7 @@ async def setup_vdf_client(bt: BlockTools, self_hostname: str, port: int) -> Asy
435
435
 
436
436
  async def stop(
437
437
  signal_: signal.Signals,
438
- stack_frame: Optional[FrameType],
438
+ stack_frame: FrameType | None,
439
439
  loop: asyncio.AbstractEventLoop,
440
440
  ) -> None:
441
441
  await process_mgr.kill_processes()
@@ -472,7 +472,7 @@ async def setup_vdf_clients(bt: BlockTools, self_hostname: str, port: int) -> As
472
472
 
473
473
  async def stop(
474
474
  signal_: signal.Signals,
475
- stack_frame: Optional[FrameType],
475
+ stack_frame: FrameType | None,
476
476
  loop: asyncio.AbstractEventLoop,
477
477
  ) -> None:
478
478
  await process_mgr.kill_processes()
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from chia_rs import FullBlock
3
+ from chia_rs import CoinRecord, FullBlock
4
4
  from chia_rs.sized_bytes import bytes32
5
5
  from chia_rs.sized_ints import uint32
6
6
 
@@ -8,7 +8,6 @@ from chia.full_node.full_node_rpc_api import FullNodeRpcApi
8
8
  from chia.rpc.rpc_server import Endpoint, EndpointResult
9
9
  from chia.simulator.full_node_simulator import FullNodeSimulator
10
10
  from chia.simulator.simulator_protocol import FarmNewBlockProtocol, GetAllCoinsProtocol, ReorgProtocol
11
- from chia.types.coin_record import CoinRecord
12
11
  from chia.util.bech32m import decode_puzzle_hash
13
12
 
14
13
 
@@ -1,11 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
- from chia_rs import FullBlock
3
+ from chia_rs import CoinRecord, FullBlock
4
4
  from chia_rs.sized_bytes import bytes32
5
5
  from chia_rs.sized_ints import uint128
6
6
 
7
7
  from chia.full_node.full_node_rpc_client import FullNodeRpcClient
8
- from chia.types.coin_record import CoinRecord
9
8
  from chia.util.bech32m import encode_puzzle_hash
10
9
 
11
10
 
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Optional
5
4
 
6
5
  from chia_rs.sized_bytes import bytes32
7
6
  from chia_rs.sized_ints import uint32
@@ -21,7 +20,7 @@ class ReorgProtocol(Streamable):
21
20
  old_index: uint32
22
21
  new_index: uint32
23
22
  puzzle_hash: bytes32
24
- seed: Optional[bytes32]
23
+ seed: bytes32 | None
25
24
 
26
25
 
27
26
  @streamable
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import sys
4
4
  from collections.abc import AsyncGenerator
5
5
  from pathlib import Path
6
- from typing import Any, Optional
6
+ from typing import Any
7
7
 
8
8
  from chia_rs import PrivateKey
9
9
  from chia_rs.sized_bytes import bytes32
@@ -118,9 +118,9 @@ async def start_simulator(chia_root: Path, automated_testing: bool = False) -> A
118
118
 
119
119
  async def get_full_chia_simulator(
120
120
  chia_root: Path,
121
- keychain: Optional[Keychain] = None,
121
+ keychain: Keychain | None = None,
122
122
  automated_testing: bool = False,
123
- config: Optional[dict[str, Any]] = None,
123
+ config: dict[str, Any] | None = None,
124
124
  ) -> AsyncGenerator[tuple[FullNodeSimulator, Path, dict[str, Any], str, int, Keychain], None]:
125
125
  """
126
126
  A chia root Path is required.
@@ -5,12 +5,12 @@ import sys
5
5
  from dataclasses import dataclass
6
6
  from multiprocessing import freeze_support
7
7
  from pathlib import Path
8
- from typing import Any, Optional
8
+ from typing import Any
9
9
 
10
10
  from chia_rs.sized_bytes import bytes32
11
11
  from chia_rs.sized_ints import uint16
12
12
 
13
- from chia.apis import ApiProtocolRegistry
13
+ from chia.apis import StubMetadataRegistry
14
14
  from chia.full_node.full_node import FullNode
15
15
  from chia.protocols.outbound_message import NodeType
16
16
  from chia.server.signal_handlers import SignalHandlers
@@ -39,7 +39,7 @@ async def create_full_node_simulator_service(
39
39
  config: dict[str, Any],
40
40
  bt: BlockTools,
41
41
  connect_to_daemon: bool = True,
42
- override_capabilities: Optional[list[tuple[uint16, str]]] = None,
42
+ override_capabilities: list[tuple[uint16, str]] | None = None,
43
43
  ) -> SimulatorFullNodeService:
44
44
  service_config = config[SERVICE_NAME]
45
45
  constants = bt.constants
@@ -65,7 +65,7 @@ async def create_full_node_simulator_service(
65
65
  rpc_info=(SimulatorFullNodeRpcApi, service_config["rpc_port"]),
66
66
  connect_to_daemon=connect_to_daemon,
67
67
  override_capabilities=override_capabilities,
68
- class_for_type=ApiProtocolRegistry,
68
+ stub_metadata_for_type=StubMetadataRegistry,
69
69
  )
70
70
 
71
71
 
@@ -78,7 +78,7 @@ class StartedSimulator:
78
78
  async def async_main(
79
79
  test_mode: bool = False,
80
80
  automated_testing: bool = False,
81
- root_path: Optional[Path] = None,
81
+ root_path: Path | None = None,
82
82
  ) -> StartedSimulator:
83
83
  root_path = resolve_root_path(override=root_path)
84
84
  # helping mypy out for now
@@ -89,8 +89,8 @@ async def async_main(
89
89
  service_config = load_config_cli(root_path, "config.yaml", SERVICE_NAME)
90
90
  config[SERVICE_NAME] = service_config
91
91
  # THIS IS Simulator specific.
92
- fingerprint: Optional[int] = None
93
- farming_puzzle_hash: Optional[bytes32] = None
92
+ fingerprint: int | None = None
93
+ farming_puzzle_hash: bytes32 | None = None
94
94
  plot_dir: str = "simulator/plots"
95
95
  if "simulator" in config:
96
96
  overrides = {}
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Optional
3
+ from typing import Any
4
4
 
5
5
  from chia_rs import AugSchemeMPL, CoinSpend, ConsensusConstants, G1Element, G2Element, PrivateKey, SpendBundle
6
6
  from chia_rs.sized_bytes import bytes32
@@ -37,7 +37,7 @@ class WalletTool:
37
37
  pubkey_num_lookup: dict[bytes, uint32] = {} # noqa: RUF012
38
38
  puzzle_pk_cache: dict[bytes32, PrivateKey] = {} # noqa: RUF012
39
39
 
40
- def __init__(self, constants: ConsensusConstants, sk: Optional[PrivateKey] = None):
40
+ def __init__(self, constants: ConsensusConstants, sk: PrivateKey | None = None):
41
41
  self.constants = constants
42
42
  self.current_balance = 0
43
43
  self.my_utxos: set = set()
@@ -106,9 +106,9 @@ class WalletTool:
106
106
  coins: list[Coin],
107
107
  condition_dic: dict[ConditionOpcode, list[ConditionWithArgs]],
108
108
  fee: int = 0,
109
- secret_key: Optional[PrivateKey] = None,
110
- additional_outputs: Optional[list[tuple[bytes32, int]]] = None,
111
- memo: Optional[bytes32] = None,
109
+ secret_key: PrivateKey | None = None,
110
+ additional_outputs: list[tuple[bytes32, int]] | None = None,
111
+ memo: bytes32 | None = None,
112
112
  ) -> list[CoinSpend]:
113
113
  spends = []
114
114
 
@@ -206,10 +206,10 @@ class WalletTool:
206
206
  amount: uint64,
207
207
  new_puzzle_hash: bytes32,
208
208
  coin: Coin,
209
- condition_dic: Optional[dict[ConditionOpcode, list[ConditionWithArgs]]] = None,
209
+ condition_dic: dict[ConditionOpcode, list[ConditionWithArgs]] | None = None,
210
210
  fee: int = 0,
211
- additional_outputs: Optional[list[tuple[bytes32, int]]] = None,
212
- memo: Optional[bytes32] = None,
211
+ additional_outputs: list[tuple[bytes32, int]] | None = None,
212
+ memo: bytes32 | None = None,
213
213
  ) -> SpendBundle:
214
214
  if condition_dic is None:
215
215
  condition_dic = {}
@@ -224,9 +224,9 @@ class WalletTool:
224
224
  amount: uint64,
225
225
  new_puzzle_hash: bytes32,
226
226
  coins: list[Coin],
227
- condition_dic: Optional[dict[ConditionOpcode, list[ConditionWithArgs]]] = None,
227
+ condition_dic: dict[ConditionOpcode, list[ConditionWithArgs]] | None = None,
228
228
  fee: int = 0,
229
- additional_outputs: Optional[list[tuple[bytes32, int]]] = None,
229
+ additional_outputs: list[tuple[bytes32, int]] | None = None,
230
230
  ) -> SpendBundle:
231
231
  if condition_dic is None:
232
232
  condition_dic = {}
chia/solver/solver.py CHANGED
@@ -6,15 +6,15 @@ import logging
6
6
  from collections.abc import AsyncIterator
7
7
  from concurrent.futures.thread import ThreadPoolExecutor
8
8
  from pathlib import Path
9
- from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
9
+ from typing import TYPE_CHECKING, Any, ClassVar, cast
10
10
 
11
- from chia_rs import ConsensusConstants
11
+ from chia_rs import ConsensusConstants, PartialProof, solve_proof
12
+ from chia_rs.sized_bytes import bytes32
12
13
 
13
14
  from chia.protocols.outbound_message import NodeType
14
15
  from chia.rpc.rpc_server import StateChangedProtocol, default_get_connections
15
16
  from chia.server.server import ChiaServer
16
17
  from chia.server.ws_connection import WSChiaConnection
17
- from chia.types.blockchain_format.proof_of_space import solve_proof
18
18
 
19
19
  log = logging.getLogger(__name__)
20
20
 
@@ -26,11 +26,11 @@ class Solver:
26
26
  _protocol_check: ClassVar[RpcServiceProtocol] = cast("Solver", None)
27
27
 
28
28
  root_path: Path
29
- _server: Optional[ChiaServer]
29
+ _server: ChiaServer | None
30
30
  _shut_down: bool
31
31
  started: bool = False
32
32
  executor: ThreadPoolExecutor
33
- state_changed_callback: Optional[StateChangedProtocol] = None
33
+ state_changed_callback: StateChangedProtocol | None = None
34
34
  constants: ConsensusConstants
35
35
  event_loop: asyncio.events.AbstractEventLoop
36
36
 
@@ -51,7 +51,7 @@ class Solver:
51
51
  self.executor = ThreadPoolExecutor(max_workers=num_threads, thread_name_prefix="solver-")
52
52
  self._server = None
53
53
  self.constants = constants
54
- self.state_changed_callback: Optional[StateChangedProtocol] = None
54
+ self.state_changed_callback: StateChangedProtocol | None = None
55
55
  self.log.info("Solver initialization complete")
56
56
 
57
57
  @contextlib.asynccontextmanager
@@ -67,15 +67,15 @@ class Solver:
67
67
  self.executor.shutdown(wait=True)
68
68
  self.log.info("Solver service shutdown complete")
69
69
 
70
- def solve(self, partial_proof: bytes) -> Optional[bytes]:
71
- self.log.debug(f"Solve request: partial={partial_proof.hex()}")
70
+ def solve(self, partial_proof: PartialProof, plot_id: bytes32, strength: int, size: int) -> bytes | None:
71
+ self.log.info(f"Solve request: partial={partial_proof.proof_fragments[:5]} plot-id: {plot_id} k: {size}")
72
72
  try:
73
- return solve_proof(partial_proof)
73
+ return solve_proof(partial_proof, plot_id, strength, size)
74
74
  except Exception:
75
75
  self.log.exception("solve_proof()")
76
76
  return None
77
77
 
78
- def get_connections(self, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
78
+ def get_connections(self, request_node_type: NodeType | None) -> list[dict[str, Any]]:
79
79
  return default_get_connections(server=self.server, request_node_type=request_node_type)
80
80
 
81
81
  async def on_connect(self, connection: WSChiaConnection) -> None: