chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.5.8rc1__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 (528) 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_build_chains.py +2 -4
  6. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  7. chia/_tests/clvm/coin_store.py +4 -7
  8. chia/_tests/clvm/test_clvm_step.py +4 -4
  9. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  10. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  11. chia/_tests/clvm/test_singletons.py +2 -4
  12. chia/_tests/clvm/test_spend_sim.py +2 -2
  13. chia/_tests/cmds/cmd_test_utils.py +27 -45
  14. chia/_tests/cmds/test_cmd_framework.py +6 -6
  15. chia/_tests/cmds/test_daemon.py +3 -3
  16. chia/_tests/cmds/test_show.py +4 -4
  17. chia/_tests/cmds/test_tx_config_args.py +1 -2
  18. chia/_tests/cmds/testing_classes.py +4 -5
  19. chia/_tests/cmds/wallet/test_did.py +24 -27
  20. chia/_tests/cmds/wallet/test_nft.py +12 -10
  21. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  22. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  23. chia/_tests/conftest.py +59 -30
  24. chia/_tests/connection_utils.py +2 -2
  25. chia/_tests/core/cmds/test_beta.py +4 -4
  26. chia/_tests/core/cmds/test_keys.py +2 -3
  27. chia/_tests/core/cmds/test_wallet.py +15 -15
  28. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  29. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  30. chia/_tests/core/daemon/test_daemon.py +11 -11
  31. chia/_tests/core/data_layer/conftest.py +2 -2
  32. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  33. chia/_tests/core/data_layer/test_data_store.py +10 -10
  34. chia/_tests/core/data_layer/util.py +11 -11
  35. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  36. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  37. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  38. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  39. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  40. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  41. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  42. chia/_tests/core/full_node/test_conditions.py +21 -23
  43. chia/_tests/core/full_node/test_full_node.py +225 -62
  44. chia/_tests/core/full_node/test_hint_management.py +2 -4
  45. chia/_tests/core/full_node/test_performance.py +0 -1
  46. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  47. chia/_tests/core/full_node/test_transactions.py +1 -2
  48. chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
  49. chia/_tests/core/mempool/test_mempool.py +29 -37
  50. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  51. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  52. chia/_tests/core/mempool/test_mempool_manager.py +963 -839
  53. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  54. chia/_tests/core/server/serve.py +7 -7
  55. chia/_tests/core/server/test_dos.py +1 -2
  56. chia/_tests/core/server/test_event_loop.py +12 -4
  57. chia/_tests/core/server/test_loop.py +7 -8
  58. chia/_tests/core/server/test_rate_limits.py +9 -8
  59. chia/_tests/core/server/test_server.py +61 -1
  60. chia/_tests/core/services/test_services.py +2 -2
  61. chia/_tests/core/ssl/test_ssl.py +2 -2
  62. chia/_tests/core/test_cost_calculation.py +2 -6
  63. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  64. chia/_tests/core/test_filter.py +0 -1
  65. chia/_tests/core/test_full_node_rpc.py +2 -2
  66. chia/_tests/core/test_merkle_set.py +1 -2
  67. chia/_tests/core/test_seeder.py +4 -4
  68. chia/_tests/core/util/test_config.py +4 -4
  69. chia/_tests/core/util/test_jsonify.py +2 -2
  70. chia/_tests/core/util/test_keychain.py +3 -3
  71. chia/_tests/core/util/test_lockfile.py +2 -1
  72. chia/_tests/core/util/test_log_exceptions.py +1 -2
  73. chia/_tests/core/util/test_streamable.py +17 -17
  74. chia/_tests/db/test_db_wrapper.py +3 -2
  75. chia/_tests/environments/wallet.py +14 -14
  76. chia/_tests/ether.py +4 -3
  77. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  78. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  79. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  80. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  81. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  82. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  83. chia/_tests/harvester/test_harvester_api.py +11 -4
  84. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  85. chia/_tests/plot_sync/test_receiver.py +11 -10
  86. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  87. chia/_tests/plot_sync/util.py +1 -2
  88. chia/_tests/plotting/test_plot_manager.py +7 -6
  89. chia/_tests/plotting/test_prover.py +30 -38
  90. chia/_tests/pools/test_pool_cmdline.py +4 -6
  91. chia/_tests/pools/test_pool_rpc.py +203 -61
  92. chia/_tests/pools/test_pool_wallet.py +3 -3
  93. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  94. chia/_tests/process_junit.py +2 -2
  95. chia/_tests/rpc/test_rpc_client.py +4 -4
  96. chia/_tests/rpc/test_rpc_server.py +3 -3
  97. chia/_tests/simulation/test_simulation.py +12 -25
  98. chia/_tests/solver/test_solver_service.py +13 -4
  99. chia/_tests/testconfig.py +2 -2
  100. chia/_tests/timelord/test_new_peak.py +22 -11
  101. chia/_tests/tools/test_run_block.py +0 -2
  102. chia/_tests/tools/test_virtual_project.py +2 -1
  103. chia/_tests/util/benchmarks.py +1 -0
  104. chia/_tests/util/blockchain.py +38 -36
  105. chia/_tests/util/blockchain_mock.py +11 -11
  106. chia/_tests/util/build_network_protocol_files.py +2 -1
  107. chia/_tests/util/coin_store.py +2 -1
  108. chia/_tests/util/config.py +1 -1
  109. chia/_tests/util/db_connection.py +2 -3
  110. chia/_tests/util/full_sync.py +9 -11
  111. chia/_tests/util/gen_ssl_certs.py +4 -5
  112. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  113. chia/_tests/util/misc.py +24 -24
  114. chia/_tests/util/network_protocol_data.py +20 -3
  115. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  116. chia/_tests/util/protocol_messages_json.py +292 -3
  117. chia/_tests/util/setup_nodes.py +62 -47
  118. chia/_tests/util/spend_sim.py +57 -57
  119. chia/_tests/util/test_async_pool.py +2 -3
  120. chia/_tests/util/test_chia_version.py +1 -3
  121. chia/_tests/util/test_config.py +3 -3
  122. chia/_tests/util/test_full_block_utils.py +6 -3
  123. chia/_tests/util/test_limited_semaphore.py +1 -2
  124. chia/_tests/util/test_misc.py +2 -2
  125. chia/_tests/util/test_network.py +1 -2
  126. chia/_tests/util/test_priority_mutex.py +3 -3
  127. chia/_tests/util/test_recursive_replace.py +5 -6
  128. chia/_tests/util/test_replace_str_to_bytes.py +8 -10
  129. chia/_tests/util/test_testnet_overrides.py +3 -3
  130. chia/_tests/util/time_out_assert.py +2 -2
  131. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  132. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  133. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  134. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  135. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  136. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  137. chia/_tests/wallet/conftest.py +6 -6
  138. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  139. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  140. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  141. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  142. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  145. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  146. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  147. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  148. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  149. chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
  150. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  151. chia/_tests/wallet/test_coin_management.py +2 -2
  152. chia/_tests/wallet/test_conditions.py +45 -51
  153. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  154. chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
  155. chia/_tests/wallet/test_notifications.py +14 -14
  156. chia/_tests/wallet/test_signer_protocol.py +5 -5
  157. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  158. chia/_tests/wallet/test_transaction_store.py +20 -20
  159. chia/_tests/wallet/test_util.py +2 -2
  160. chia/_tests/wallet/test_wallet.py +380 -228
  161. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  162. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  163. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  164. chia/_tests/wallet/test_wallet_node.py +14 -14
  165. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  166. chia/_tests/wallet/test_wallet_utils.py +2 -3
  167. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  168. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  169. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  170. chia/_tests/wallet/wallet_block_tools.py +12 -11
  171. chia/_tests/weight_proof/config.py +1 -0
  172. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  173. chia/apis/__init__.py +21 -0
  174. chia/apis/farmer_stub.py +102 -0
  175. chia/apis/full_node_stub.py +372 -0
  176. chia/apis/harvester_stub.py +57 -0
  177. chia/apis/introducer_stub.py +35 -0
  178. chia/apis/solver_stub.py +30 -0
  179. chia/apis/stub_protocol_registry.py +21 -0
  180. chia/apis/timelord_stub.py +39 -0
  181. chia/apis/wallet_stub.py +161 -0
  182. chia/cmds/beta.py +3 -4
  183. chia/cmds/beta_funcs.py +4 -3
  184. chia/cmds/check_wallet_db.py +4 -4
  185. chia/cmds/chia.py +1 -2
  186. chia/cmds/cmd_classes.py +11 -13
  187. chia/cmds/cmd_helpers.py +11 -11
  188. chia/cmds/cmds_util.py +15 -15
  189. chia/cmds/coin_funcs.py +6 -7
  190. chia/cmds/coins.py +2 -3
  191. chia/cmds/configure.py +1 -2
  192. chia/cmds/data.py +42 -42
  193. chia/cmds/data_funcs.py +81 -81
  194. chia/cmds/db.py +4 -5
  195. chia/cmds/db_backup_func.py +2 -2
  196. chia/cmds/db_upgrade_func.py +3 -3
  197. chia/cmds/db_validate_func.py +2 -2
  198. chia/cmds/dev/data.py +4 -4
  199. chia/cmds/dev/gh.py +5 -5
  200. chia/cmds/dev/installers.py +2 -3
  201. chia/cmds/dev/mempool.py +3 -4
  202. chia/cmds/dev/mempool_funcs.py +4 -4
  203. chia/cmds/dev/sim.py +8 -8
  204. chia/cmds/dump_keyring.py +3 -3
  205. chia/cmds/farm.py +6 -8
  206. chia/cmds/farm_funcs.py +25 -24
  207. chia/cmds/init_funcs.py +4 -4
  208. chia/cmds/keys.py +16 -18
  209. chia/cmds/keys_funcs.py +36 -36
  210. chia/cmds/netspace.py +1 -3
  211. chia/cmds/netspace_funcs.py +1 -2
  212. chia/cmds/options.py +3 -2
  213. chia/cmds/param_types.py +17 -16
  214. chia/cmds/passphrase.py +6 -7
  215. chia/cmds/passphrase_funcs.py +11 -13
  216. chia/cmds/peer.py +1 -3
  217. chia/cmds/peer_funcs.py +3 -3
  218. chia/cmds/plotnft.py +6 -7
  219. chia/cmds/plotnft_funcs.py +37 -26
  220. chia/cmds/rpc.py +3 -3
  221. chia/cmds/show.py +3 -5
  222. chia/cmds/show_funcs.py +9 -9
  223. chia/cmds/sim_funcs.py +25 -26
  224. chia/cmds/solver.py +1 -3
  225. chia/cmds/solver_funcs.py +1 -2
  226. chia/cmds/start_funcs.py +2 -2
  227. chia/cmds/wallet.py +76 -81
  228. chia/cmds/wallet_funcs.py +206 -177
  229. chia/consensus/augmented_chain.py +6 -6
  230. chia/consensus/block_body_validation.py +19 -15
  231. chia/consensus/block_creation.py +25 -21
  232. chia/consensus/block_header_validation.py +27 -13
  233. chia/consensus/block_height_map.py +3 -6
  234. chia/consensus/block_height_map_protocol.py +2 -2
  235. chia/consensus/block_record.py +2 -4
  236. chia/consensus/blockchain.py +58 -40
  237. chia/consensus/blockchain_interface.py +7 -7
  238. chia/consensus/coin_store_protocol.py +5 -6
  239. chia/consensus/condition_tools.py +4 -4
  240. chia/consensus/cost_calculator.py +2 -3
  241. chia/consensus/default_constants.py +16 -13
  242. chia/consensus/deficit.py +1 -3
  243. chia/consensus/difficulty_adjustment.py +3 -5
  244. chia/consensus/find_fork_point.py +2 -4
  245. chia/consensus/full_block_to_block_record.py +11 -13
  246. chia/consensus/generator_tools.py +2 -3
  247. chia/consensus/get_block_challenge.py +42 -26
  248. chia/consensus/get_block_generator.py +2 -3
  249. chia/consensus/make_sub_epoch_summary.py +8 -7
  250. chia/consensus/multiprocess_validation.py +31 -20
  251. chia/consensus/pos_quality.py +6 -23
  252. chia/consensus/pot_iterations.py +17 -44
  253. chia/consensus/signage_point.py +4 -5
  254. chia/consensus/vdf_info_computation.py +2 -4
  255. chia/daemon/client.py +8 -8
  256. chia/daemon/keychain_proxy.py +31 -37
  257. chia/daemon/server.py +32 -33
  258. chia/daemon/windows_signal.py +4 -3
  259. chia/data_layer/data_layer.py +86 -77
  260. chia/data_layer/data_layer_rpc_api.py +9 -9
  261. chia/data_layer/data_layer_rpc_client.py +13 -15
  262. chia/data_layer/data_layer_server.py +3 -3
  263. chia/data_layer/data_layer_util.py +14 -14
  264. chia/data_layer/data_layer_wallet.py +94 -101
  265. chia/data_layer/data_store.py +50 -50
  266. chia/data_layer/dl_wallet_store.py +9 -12
  267. chia/data_layer/download_data.py +8 -9
  268. chia/data_layer/s3_plugin_service.py +5 -9
  269. chia/data_layer/start_data_layer.py +5 -5
  270. chia/farmer/farmer.py +31 -31
  271. chia/farmer/farmer_api.py +45 -33
  272. chia/farmer/farmer_rpc_api.py +5 -4
  273. chia/farmer/farmer_rpc_client.py +6 -6
  274. chia/farmer/start_farmer.py +6 -6
  275. chia/full_node/block_store.py +13 -16
  276. chia/full_node/check_fork_next_block.py +1 -2
  277. chia/full_node/coin_store.py +15 -16
  278. chia/full_node/eligible_coin_spends.py +3 -3
  279. chia/full_node/fee_estimate_store.py +2 -3
  280. chia/full_node/fee_tracker.py +1 -2
  281. chia/full_node/full_block_utils.py +4 -4
  282. chia/full_node/full_node.py +238 -224
  283. chia/full_node/full_node_api.py +193 -150
  284. chia/full_node/full_node_rpc_api.py +53 -31
  285. chia/full_node/full_node_rpc_client.py +18 -19
  286. chia/full_node/full_node_store.py +45 -43
  287. chia/full_node/hint_management.py +2 -2
  288. chia/full_node/mempool.py +17 -19
  289. chia/full_node/mempool_manager.py +89 -42
  290. chia/full_node/pending_tx_cache.py +2 -3
  291. chia/full_node/start_full_node.py +5 -5
  292. chia/full_node/sync_store.py +3 -4
  293. chia/full_node/tx_processing_queue.py +34 -13
  294. chia/full_node/weight_proof.py +61 -48
  295. chia/harvester/harvester.py +25 -24
  296. chia/harvester/harvester_api.py +61 -38
  297. chia/harvester/harvester_rpc_api.py +10 -10
  298. chia/harvester/start_harvester.py +4 -4
  299. chia/introducer/introducer.py +3 -3
  300. chia/introducer/introducer_api.py +6 -4
  301. chia/introducer/start_introducer.py +4 -4
  302. chia/legacy/keyring.py +3 -3
  303. chia/plot_sync/delta.py +1 -2
  304. chia/plot_sync/receiver.py +20 -17
  305. chia/plot_sync/sender.py +15 -10
  306. chia/plotters/bladebit.py +7 -7
  307. chia/plotters/chiapos.py +2 -2
  308. chia/plotters/madmax.py +4 -4
  309. chia/plotters/plotters.py +4 -4
  310. chia/plotters/plotters_util.py +3 -3
  311. chia/plotting/cache.py +20 -14
  312. chia/plotting/check_plots.py +26 -35
  313. chia/plotting/create_plots.py +22 -23
  314. chia/plotting/manager.py +21 -14
  315. chia/plotting/prover.py +59 -42
  316. chia/plotting/util.py +16 -16
  317. chia/pools/pool_config.py +2 -1
  318. chia/pools/pool_puzzles.py +11 -12
  319. chia/pools/pool_wallet.py +34 -57
  320. chia/pools/pool_wallet_info.py +39 -10
  321. chia/protocols/farmer_protocol.py +8 -9
  322. chia/protocols/fee_estimate.py +3 -4
  323. chia/protocols/full_node_protocol.py +3 -4
  324. chia/protocols/harvester_protocol.py +27 -15
  325. chia/protocols/outbound_message.py +3 -3
  326. chia/protocols/pool_protocol.py +8 -9
  327. chia/protocols/shared_protocol.py +1 -2
  328. chia/protocols/solver_protocol.py +9 -2
  329. chia/protocols/timelord_protocol.py +4 -7
  330. chia/protocols/wallet_protocol.py +11 -12
  331. chia/rpc/rpc_client.py +9 -9
  332. chia/rpc/rpc_server.py +17 -17
  333. chia/rpc/util.py +2 -2
  334. chia/seeder/crawler.py +8 -8
  335. chia/seeder/crawler_api.py +21 -27
  336. chia/seeder/crawler_rpc_api.py +2 -2
  337. chia/seeder/dns_server.py +21 -21
  338. chia/seeder/start_crawler.py +4 -4
  339. chia/server/address_manager.py +15 -16
  340. chia/server/api_protocol.py +11 -11
  341. chia/server/chia_policy.py +46 -26
  342. chia/server/introducer_peers.py +2 -3
  343. chia/server/node_discovery.py +19 -19
  344. chia/server/rate_limit_numbers.py +4 -5
  345. chia/server/rate_limits.py +4 -4
  346. chia/server/resolve_peer_info.py +4 -4
  347. chia/server/server.py +49 -52
  348. chia/server/signal_handlers.py +6 -6
  349. chia/server/start_service.py +17 -17
  350. chia/server/upnp.py +4 -6
  351. chia/server/ws_connection.py +52 -37
  352. chia/simulator/add_blocks_in_batches.py +1 -3
  353. chia/simulator/block_tools.py +312 -200
  354. chia/simulator/full_node_simulator.py +56 -35
  355. chia/simulator/keyring.py +2 -3
  356. chia/simulator/setup_services.py +15 -15
  357. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  358. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  359. chia/simulator/simulator_protocol.py +1 -2
  360. chia/simulator/simulator_test_tools.py +3 -3
  361. chia/simulator/start_simulator.py +7 -7
  362. chia/simulator/wallet_tools.py +10 -10
  363. chia/solver/solver.py +10 -10
  364. chia/solver/solver_api.py +10 -8
  365. chia/solver/solver_rpc_api.py +2 -2
  366. chia/solver/start_solver.py +4 -4
  367. chia/ssl/cacert.pem +148 -90
  368. chia/ssl/chia_ca.crt +14 -10
  369. chia/ssl/chia_ca_old.crt +19 -0
  370. chia/ssl/create_ssl.py +4 -4
  371. chia/ssl/renewedselfsignedca.conf +4 -0
  372. chia/ssl/ssl_check.py +1 -2
  373. chia/timelord/iters_from_block.py +1 -4
  374. chia/timelord/start_timelord.py +4 -4
  375. chia/timelord/timelord.py +44 -40
  376. chia/timelord/timelord_api.py +6 -4
  377. chia/timelord/timelord_launcher.py +2 -2
  378. chia/timelord/timelord_rpc_api.py +2 -2
  379. chia/timelord/timelord_state.py +11 -12
  380. chia/types/block_protocol.py +1 -3
  381. chia/types/blockchain_format/coin.py +1 -3
  382. chia/types/blockchain_format/program.py +11 -8
  383. chia/types/blockchain_format/proof_of_space.py +123 -76
  384. chia/types/blockchain_format/tree_hash.py +3 -3
  385. chia/types/blockchain_format/vdf.py +1 -2
  386. chia/types/coin_spend.py +3 -3
  387. chia/types/mempool_item.py +5 -5
  388. chia/types/mempool_submission_status.py +2 -3
  389. chia/types/peer_info.py +1 -2
  390. chia/types/unfinished_header_block.py +3 -4
  391. chia/types/validation_state.py +1 -2
  392. chia/util/action_scope.py +8 -8
  393. chia/util/async_pool.py +5 -5
  394. chia/util/bech32m.py +1 -2
  395. chia/util/beta_metrics.py +2 -2
  396. chia/util/block_cache.py +4 -4
  397. chia/util/chia_logging.py +2 -2
  398. chia/util/chia_version.py +1 -2
  399. chia/util/config.py +15 -16
  400. chia/util/db_wrapper.py +26 -27
  401. chia/util/default_root.py +1 -2
  402. chia/util/errors.py +3 -3
  403. chia/util/file_keyring.py +14 -14
  404. chia/util/files.py +2 -3
  405. chia/util/hash.py +4 -4
  406. chia/util/initial-config.yaml +3 -5
  407. chia/util/inline_executor.py +2 -1
  408. chia/util/ip_address.py +1 -2
  409. chia/util/keychain.py +25 -27
  410. chia/util/keyring_wrapper.py +18 -19
  411. chia/util/lock.py +3 -4
  412. chia/util/log_exceptions.py +1 -2
  413. chia/util/lru_cache.py +2 -2
  414. chia/util/network.py +6 -6
  415. chia/util/path.py +2 -3
  416. chia/util/priority_mutex.py +2 -2
  417. chia/util/profiler.py +1 -2
  418. chia/util/safe_cancel_task.py +1 -2
  419. chia/util/streamable.py +22 -8
  420. chia/util/task_referencer.py +1 -1
  421. chia/util/timing.py +3 -3
  422. chia/util/virtual_project_analysis.py +6 -5
  423. chia/util/ws_message.py +2 -2
  424. chia/wallet/cat_wallet/cat_info.py +3 -4
  425. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  426. chia/wallet/cat_wallet/cat_utils.py +3 -4
  427. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  428. chia/wallet/cat_wallet/lineage_store.py +3 -4
  429. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  430. chia/wallet/coin_selection.py +9 -10
  431. chia/wallet/conditions.py +120 -105
  432. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  433. chia/wallet/derivation_record.py +1 -2
  434. chia/wallet/derive_keys.py +2 -4
  435. chia/wallet/did_wallet/did_info.py +10 -11
  436. chia/wallet/did_wallet/did_wallet.py +36 -82
  437. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  438. chia/wallet/driver_protocol.py +5 -7
  439. chia/wallet/lineage_proof.py +4 -4
  440. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  441. chia/wallet/nft_wallet/nft_info.py +8 -9
  442. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  443. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  444. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  445. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  446. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  447. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  448. chia/wallet/notification_manager.py +3 -3
  449. chia/wallet/notification_store.py +44 -61
  450. chia/wallet/outer_puzzles.py +6 -7
  451. chia/wallet/puzzle_drivers.py +34 -6
  452. chia/wallet/puzzles/clawback/drivers.py +6 -6
  453. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  454. chia/wallet/puzzles/load_clvm.py +1 -1
  455. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  456. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  457. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  458. chia/wallet/puzzles/tails.py +3 -3
  459. chia/wallet/singleton.py +5 -7
  460. chia/wallet/singleton_record.py +3 -3
  461. chia/wallet/start_wallet.py +5 -5
  462. chia/wallet/trade_manager.py +37 -58
  463. chia/wallet/trade_record.py +4 -4
  464. chia/wallet/trading/offer.py +59 -46
  465. chia/wallet/trading/trade_store.py +8 -9
  466. chia/wallet/transaction_record.py +8 -8
  467. chia/wallet/uncurried_puzzle.py +1 -2
  468. chia/wallet/util/clvm_streamable.py +12 -12
  469. chia/wallet/util/compute_hints.py +4 -5
  470. chia/wallet/util/curry_and_treehash.py +1 -2
  471. chia/wallet/util/merkle_tree.py +2 -3
  472. chia/wallet/util/peer_request_cache.py +8 -8
  473. chia/wallet/util/signing.py +85 -0
  474. chia/wallet/util/tx_config.py +15 -6
  475. chia/wallet/util/wallet_sync_utils.py +14 -16
  476. chia/wallet/util/wallet_types.py +2 -2
  477. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  478. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  479. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  480. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  481. chia/wallet/vc_wallet/vc_store.py +5 -6
  482. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  483. chia/wallet/wallet.py +50 -78
  484. chia/wallet/wallet_action_scope.py +11 -11
  485. chia/wallet/wallet_blockchain.py +12 -12
  486. chia/wallet/wallet_coin_record.py +12 -6
  487. chia/wallet/wallet_coin_store.py +24 -25
  488. chia/wallet/wallet_interested_store.py +3 -5
  489. chia/wallet/wallet_nft_store.py +10 -11
  490. chia/wallet/wallet_node.py +53 -61
  491. chia/wallet/wallet_node_api.py +5 -3
  492. chia/wallet/wallet_protocol.py +23 -23
  493. chia/wallet/wallet_puzzle_store.py +15 -18
  494. chia/wallet/wallet_request_types.py +778 -114
  495. chia/wallet/wallet_retry_store.py +1 -3
  496. chia/wallet/wallet_rpc_api.py +572 -909
  497. chia/wallet/wallet_rpc_client.py +87 -279
  498. chia/wallet/wallet_singleton_store.py +3 -4
  499. chia/wallet/wallet_state_manager.py +332 -106
  500. chia/wallet/wallet_transaction_store.py +11 -14
  501. chia/wallet/wallet_user_store.py +4 -6
  502. chia/wallet/wallet_weight_proof_handler.py +4 -4
  503. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
  504. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
  505. chia/apis.py +0 -21
  506. chia/consensus/check_time_locks.py +0 -57
  507. chia/data_layer/puzzles/__init__.py +0 -0
  508. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  509. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  510. chia/types/coin_record.py +0 -44
  511. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  512. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  513. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  514. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  515. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  516. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  517. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  518. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  520. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  521. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  522. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  524. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  525. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  526. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
  527. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
  528. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
chia/timelord/timelord.py CHANGED
@@ -13,7 +13,7 @@ import traceback
13
13
  from collections.abc import AsyncIterator
14
14
  from concurrent.futures import ThreadPoolExecutor
15
15
  from pathlib import Path
16
- from typing import IO, TYPE_CHECKING, Any, ClassVar, Optional, cast
16
+ from typing import IO, TYPE_CHECKING, Any, ClassVar, cast
17
17
 
18
18
  from chia_rs import (
19
19
  ChallengeChainSubSlot,
@@ -80,6 +80,9 @@ class Timelord:
80
80
 
81
81
  _protocol_check: ClassVar[RpcServiceProtocol] = cast("Timelord", None)
82
82
 
83
+ unfinished_blocks: list[timelord_protocol.NewUnfinishedBlockTimelord]
84
+ overflow_blocks: list[timelord_protocol.NewUnfinishedBlockTimelord]
85
+
83
86
  @property
84
87
  def server(self) -> ChiaServer:
85
88
  # This is a stop gap until the class usage is refactored such the values of
@@ -96,7 +99,7 @@ class Timelord:
96
99
  self._shut_down = False
97
100
  self.free_clients: list[tuple[str, asyncio.StreamReader, asyncio.StreamWriter]] = []
98
101
  self.ip_whitelist = self.config["vdf_clients"]["ip"]
99
- self._server: Optional[ChiaServer] = None
102
+ self._server: ChiaServer | None = None
100
103
  self.chain_type_to_stream: dict[Chain, tuple[str, asyncio.StreamReader, asyncio.StreamWriter]] = {}
101
104
  self.chain_start_time: dict[Chain, float] = {}
102
105
  # Chains that currently don't have a vdf_client.
@@ -108,7 +111,7 @@ class Timelord:
108
111
  # Chains that currently accept iterations.
109
112
  self.allows_iters: list[Chain] = []
110
113
  # Last peak received, None if it's already processed.
111
- self.new_peak: Optional[timelord_protocol.NewPeakTimelord] = None
114
+ self.new_peak: timelord_protocol.NewPeakTimelord | None = None
112
115
  # Last state received. Can either be a new peak or a new EndOfSubslotBundle.
113
116
  # Unfinished block info, iters adjusted to the last peak.
114
117
  self.unfinished_blocks: list[timelord_protocol.NewUnfinishedBlockTimelord] = []
@@ -129,15 +132,15 @@ class Timelord:
129
132
  self.num_resets: int = 0
130
133
 
131
134
  self.process_communication_tasks: list[asyncio.Task[None]] = []
132
- self.main_loop: Optional[asyncio.Task[None]] = None
133
- self.vdf_server: Optional[asyncio.base_events.Server] = None
135
+ self.main_loop: asyncio.Task[None] | None = None
136
+ self.vdf_server: asyncio.base_events.Server | None = None
134
137
  self._shut_down = False
135
- self.vdf_failures: list[tuple[Chain, Optional[int]]] = []
138
+ self.vdf_failures: list[tuple[Chain, int | None]] = []
136
139
  self.vdf_failures_count: int = 0
137
140
  self.vdf_failure_time: float = 0
138
141
  self.total_unfinished: int = 0
139
142
  self.total_infused: int = 0
140
- self.state_changed_callback: Optional[StateChangedProtocol] = None
143
+ self.state_changed_callback: StateChangedProtocol | None = None
141
144
  self.bluebox_mode = self.config.get("bluebox_mode", False)
142
145
  # Support backwards compatibility for the old `config.yaml` that has field `sanitizer_mode`.
143
146
  if not self.bluebox_mode:
@@ -145,8 +148,8 @@ class Timelord:
145
148
  self.pending_bluebox_info: list[tuple[float, timelord_protocol.RequestCompactProofOfTime]] = []
146
149
  self.last_active_time = time.time()
147
150
  self.max_allowed_inactivity_time = 60
148
- self._executor_shutdown_tempfile: Optional[IO[bytes]] = None
149
- self.bluebox_pool: Optional[ThreadPoolExecutor] = None
151
+ self._executor_shutdown_tempfile: IO[bytes] | None = None
152
+ self.bluebox_pool: ThreadPoolExecutor | None = None
150
153
 
151
154
  @contextlib.asynccontextmanager
152
155
  async def manage(self) -> AsyncIterator[None]:
@@ -187,13 +190,13 @@ class Timelord:
187
190
  if self.bluebox_pool is not None:
188
191
  self.bluebox_pool.shutdown()
189
192
 
190
- def get_connections(self, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
193
+ def get_connections(self, request_node_type: NodeType | None) -> list[dict[str, Any]]:
191
194
  return default_get_connections(server=self.server, request_node_type=request_node_type)
192
195
 
193
196
  async def on_connect(self, connection: WSChiaConnection) -> None:
194
197
  pass
195
198
 
196
- def get_vdf_server_port(self) -> Optional[uint16]:
199
+ def get_vdf_server_port(self) -> uint16 | None:
197
200
  if self.vdf_server is not None:
198
201
  return uint16(self.vdf_server.sockets[0].getsockname()[1])
199
202
  return None
@@ -201,7 +204,7 @@ class Timelord:
201
204
  def _set_state_changed_callback(self, callback: StateChangedProtocol) -> None:
202
205
  self.state_changed_callback = callback
203
206
 
204
- def state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> None:
207
+ def state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> None:
205
208
  if self.state_changed_callback is not None:
206
209
  self.state_changed_callback(change, change_data)
207
210
 
@@ -240,7 +243,7 @@ class Timelord:
240
243
  else:
241
244
  return uint32(self.last_state.get_height() + 1)
242
245
 
243
- def _can_infuse_unfinished_block(self, block: timelord_protocol.NewUnfinishedBlockTimelord) -> Optional[uint64]:
246
+ def _can_infuse_unfinished_block(self, block: timelord_protocol.NewUnfinishedBlockTimelord) -> uint64 | None:
244
247
  assert self.last_state is not None
245
248
  sub_slot_iters = self.last_state.get_sub_slot_iters()
246
249
  difficulty = self.last_state.get_difficulty()
@@ -325,7 +328,7 @@ class Timelord:
325
328
  self.iteration_to_proof_type = {}
326
329
  if not only_eos:
327
330
  for block in self.unfinished_blocks + self.overflow_blocks:
328
- new_block_iters: Optional[uint64] = self._can_infuse_unfinished_block(block)
331
+ new_block_iters: uint64 | None = self._can_infuse_unfinished_block(block)
329
332
  # Does not add duplicates, or blocks that we cannot infuse
330
333
  if new_block_iters and new_block_iters not in self.iters_to_submit[Chain.CHALLENGE_CHAIN]:
331
334
  if block not in self.unfinished_blocks:
@@ -473,10 +476,10 @@ class Timelord:
473
476
  ]
474
477
  # Wait for both cc and rc to have the signage point.
475
478
  if len(proofs_with_iter) == 2:
476
- cc_info: Optional[VDFInfo] = None
477
- cc_proof: Optional[VDFProof] = None
478
- rc_info: Optional[VDFInfo] = None
479
- rc_proof: Optional[VDFProof] = None
479
+ cc_info: VDFInfo | None = None
480
+ cc_proof: VDFProof | None = None
481
+ rc_info: VDFInfo | None = None
482
+ rc_proof: VDFProof | None = None
480
483
  for chain, info, proof in proofs_with_iter:
481
484
  if chain == Chain.CHALLENGE_CHAIN:
482
485
  cc_info = info
@@ -511,7 +514,7 @@ class Timelord:
511
514
  to_remove.append((signage_iter, signage_point_index))
512
515
 
513
516
  self.proofs_finished = self._clear_proof_list(signage_iter)
514
- # Send the next 3 signage point to the chains.
517
+ # Send the next 10 signage point to the chains.
515
518
  next_iters_count = 0
516
519
  for next_sp, k in self.signage_point_iters:
517
520
  for chain in [Chain.CHALLENGE_CHAIN, Chain.REWARD_CHAIN]:
@@ -568,12 +571,12 @@ class Timelord:
568
571
  if block is not None:
569
572
  ip_total_iters = self.last_state.get_total_iters() + iteration
570
573
  challenge = block.reward_chain_block.get_hash()
571
- icc_info: Optional[VDFInfo] = None
572
- icc_proof: Optional[VDFProof] = None
573
- cc_info: Optional[VDFInfo] = None
574
- cc_proof: Optional[VDFProof] = None
575
- rc_info: Optional[VDFInfo] = None
576
- rc_proof: Optional[VDFProof] = None
574
+ icc_info: VDFInfo | None = None
575
+ icc_proof: VDFProof | None = None
576
+ cc_info: VDFInfo | None = None
577
+ cc_proof: VDFProof | None = None
578
+ rc_info: VDFInfo | None = None
579
+ rc_proof: VDFProof | None = None
577
580
  for chain, info, proof in proofs_with_iter:
578
581
  if chain == Chain.CHALLENGE_CHAIN:
579
582
  cc_info = info
@@ -669,6 +672,7 @@ class Timelord:
669
672
  block.reward_chain_block.reward_chain_sp_signature,
670
673
  rc_info,
671
674
  icc_info,
675
+ None, # header_mmr_root
672
676
  is_transaction_block,
673
677
  )
674
678
  if self.last_state.state_type == StateType.FIRST_SUB_SLOT:
@@ -743,12 +747,12 @@ class Timelord:
743
747
  else:
744
748
  chain_count = 2
745
749
  if len(chains_finished) == chain_count:
746
- icc_ip_vdf: Optional[VDFInfo] = None
747
- icc_ip_proof: Optional[VDFProof] = None
748
- cc_vdf: Optional[VDFInfo] = None
749
- cc_proof: Optional[VDFProof] = None
750
- rc_vdf: Optional[VDFInfo] = None
751
- rc_proof: Optional[VDFProof] = None
750
+ icc_ip_vdf: VDFInfo | None = None
751
+ icc_ip_proof: VDFProof | None = None
752
+ cc_vdf: VDFInfo | None = None
753
+ cc_proof: VDFProof | None = None
754
+ rc_vdf: VDFInfo | None = None
755
+ rc_proof: VDFProof | None = None
752
756
  for chain, info, proof in chains_finished:
753
757
  if chain == Chain.CHALLENGE_CHAIN:
754
758
  cc_vdf = info
@@ -789,17 +793,17 @@ class Timelord:
789
793
  assert iters_from_cb <= self.last_state.sub_slot_iters
790
794
  icc_ip_vdf = icc_ip_vdf.replace(number_of_iterations=iters_from_cb)
791
795
 
792
- icc_sub_slot: Optional[InfusedChallengeChainSubSlot] = (
796
+ icc_sub_slot: InfusedChallengeChainSubSlot | None = (
793
797
  None if icc_ip_vdf is None else InfusedChallengeChainSubSlot(icc_ip_vdf)
794
798
  )
795
- icc_sub_slot_hash: Optional[bytes32]
799
+ icc_sub_slot_hash: bytes32 | None
796
800
  if self.last_state.get_deficit() == 0:
797
801
  assert icc_sub_slot is not None
798
802
  icc_sub_slot_hash = icc_sub_slot.get_hash()
799
803
  else:
800
804
  icc_sub_slot_hash = None
801
- next_ses: Optional[SubEpochSummary] = self.last_state.get_next_sub_epoch_summary()
802
- ses_hash: Optional[bytes32]
805
+ next_ses: SubEpochSummary | None = self.last_state.get_next_sub_epoch_summary()
806
+ ses_hash: bytes32 | None
803
807
  if next_ses is not None:
804
808
  log.info(f"Including sub epoch summary{next_ses}")
805
809
  ses_hash = next_ses.get_hash()
@@ -929,12 +933,12 @@ class Timelord:
929
933
  reader: asyncio.StreamReader,
930
934
  writer: asyncio.StreamWriter,
931
935
  # Data specific only when running in bluebox mode.
932
- bluebox_iteration: Optional[uint64] = None,
933
- header_hash: Optional[bytes32] = None,
934
- height: Optional[uint32] = None,
935
- field_vdf: Optional[uint8] = None,
936
+ bluebox_iteration: uint64 | None = None,
937
+ header_hash: bytes32 | None = None,
938
+ height: uint32 | None = None,
939
+ field_vdf: uint8 | None = None,
936
940
  # Labels a proof to the current state only
937
- proof_label: Optional[int] = None,
941
+ proof_label: int | None = None,
938
942
  ) -> None:
939
943
  disc: int = create_discriminant(challenge, self.constants.DISCRIMINANT_SIZE_BITS)
940
944
 
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  import time
5
- from typing import TYPE_CHECKING, ClassVar, Optional, cast
5
+ from typing import TYPE_CHECKING, ClassVar
6
6
 
7
7
  from chia_rs.sized_ints import uint64
8
8
 
@@ -19,9 +19,11 @@ log = logging.getLogger(__name__)
19
19
 
20
20
  class TimelordAPI:
21
21
  if TYPE_CHECKING:
22
- from chia.server.api_protocol import ApiProtocol
22
+ from chia.apis.timelord_stub import TimelordApiStub
23
23
 
24
- _protocol_check: ClassVar[ApiProtocol] = cast("TimelordAPI", None)
24
+ # Verify this class implements the TimelordApiStub protocol
25
+ def _protocol_check(self: TimelordAPI) -> TimelordApiStub:
26
+ return self
25
27
 
26
28
  log: logging.Logger
27
29
  timelord: Timelord
@@ -143,7 +145,7 @@ class TimelordAPI:
143
145
  self.timelord.overflow_blocks.append(new_unfinished_block)
144
146
  log.debug(f"Overflow unfinished block, total {self.timelord.total_unfinished}")
145
147
  elif ip_iters > last_ip_iters:
146
- new_block_iters: Optional[uint64] = self.timelord._can_infuse_unfinished_block(new_unfinished_block)
148
+ new_block_iters: uint64 | None = self.timelord._can_infuse_unfinished_block(new_unfinished_block)
147
149
  if new_block_iters:
148
150
  self.timelord.unfinished_blocks.append(new_unfinished_block)
149
151
  for chain in [Chain.REWARD_CHAIN, Chain.CHALLENGE_CHAIN]:
@@ -11,7 +11,7 @@ from collections.abc import AsyncIterator
11
11
  from contextlib import asynccontextmanager
12
12
  from dataclasses import dataclass, field
13
13
  from types import FrameType
14
- from typing import Any, Optional
14
+ from typing import Any
15
15
 
16
16
  from chia.server.signal_handlers import SignalHandlers
17
17
  from chia.util.chia_logging import initialize_logging
@@ -158,7 +158,7 @@ async def async_main(config: dict[str, Any], net_config: dict[str, Any]) -> None
158
158
 
159
159
  async def stop(
160
160
  signal_: signal.Signals,
161
- stack_frame: Optional[FrameType],
161
+ stack_frame: FrameType | None,
162
162
  loop: asyncio.AbstractEventLoop,
163
163
  ) -> None:
164
164
  await process_mgr.kill_processes()
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
3
+ from typing import TYPE_CHECKING, Any, ClassVar, cast
4
4
 
5
5
  from chia.rpc.rpc_server import Endpoint
6
6
  from chia.timelord.timelord import Timelord
@@ -20,7 +20,7 @@ class TimelordRpcApi:
20
20
  def get_routes(self) -> dict[str, Endpoint]:
21
21
  return {}
22
22
 
23
- async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> list[WsRpcMessage]:
23
+ async def _state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> list[WsRpcMessage]:
24
24
  payloads = []
25
25
 
26
26
  if change_data is None:
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import Optional, Union
5
4
 
6
5
  from chia_rs import ChallengeBlockInfo, ConsensusConstants, EndOfSubSlotBundle, SubEpochSummary
7
6
  from chia_rs.sized_bytes import bytes32
@@ -28,17 +27,17 @@ class LastState:
28
27
 
29
28
  def __init__(self, constants: ConsensusConstants):
30
29
  self.state_type: StateType = StateType.FIRST_SUB_SLOT
31
- self.peak: Optional[timelord_protocol.NewPeakTimelord] = None
32
- self.subslot_end: Optional[EndOfSubSlotBundle] = None
30
+ self.peak: timelord_protocol.NewPeakTimelord | None = None
31
+ self.subslot_end: EndOfSubSlotBundle | None = None
33
32
  self.last_ip: uint64 = uint64(0)
34
33
  self.deficit: uint8 = constants.MIN_BLOCKS_PER_CHALLENGE_BLOCK
35
- self.sub_epoch_summary: Optional[SubEpochSummary] = None
34
+ self.sub_epoch_summary: SubEpochSummary | None = None
36
35
  self.constants: ConsensusConstants = constants
37
36
  self.last_weight: uint128 = uint128(0)
38
37
  self.last_height: uint32 = uint32(0)
39
38
  self.total_iters: uint128 = uint128(0)
40
39
  self.last_challenge_sb_or_eos_total_iters = uint128(0)
41
- self.last_tx_block_total_iters: Optional[uint128] = None
40
+ self.last_tx_block_total_iters: uint128 | None = None
42
41
  self.last_tx_block_block_height: uint32 = uint32(0)
43
42
  self.last_tx_block_sp_index: uint8 = uint8(0)
44
43
  self.last_peak_challenge: bytes32 = constants.GENESIS_CHALLENGE
@@ -49,7 +48,7 @@ class LastState:
49
48
  self.passed_ses_height_but_not_yet_included = False
50
49
  self.infused_ses = False
51
50
 
52
- def set_state(self, state: Union[timelord_protocol.NewPeakTimelord, EndOfSubSlotBundle]) -> None:
51
+ def set_state(self, state: timelord_protocol.NewPeakTimelord | EndOfSubSlotBundle) -> None:
53
52
  if isinstance(state, timelord_protocol.NewPeakTimelord):
54
53
  self.state_type = StateType.PEAK
55
54
  self.peak = state
@@ -111,7 +110,7 @@ class LastState:
111
110
  else:
112
111
  assert False
113
112
 
114
- reward_challenge: Optional[bytes32] = self.get_challenge(Chain.REWARD_CHAIN)
113
+ reward_challenge: bytes32 | None = self.get_challenge(Chain.REWARD_CHAIN)
115
114
  assert reward_challenge is not None # Reward chain always has VDFs
116
115
  self.reward_challenge_cache.append((reward_challenge, self.total_iters))
117
116
  log.info(f"Updated timelord peak to {reward_challenge.hex()}, total iters: {self.total_iters}")
@@ -145,7 +144,7 @@ class LastState:
145
144
  def get_total_iters(self) -> uint128:
146
145
  return self.total_iters
147
146
 
148
- def get_last_peak_challenge(self) -> Optional[bytes32]:
147
+ def get_last_peak_challenge(self) -> bytes32 | None:
149
148
  return self.last_peak_challenge
150
149
 
151
150
  def get_difficulty(self) -> uint64:
@@ -163,7 +162,7 @@ class LastState:
163
162
  """
164
163
  return self.state_type == StateType.END_OF_SUB_SLOT and self.infused_ses
165
164
 
166
- def get_next_sub_epoch_summary(self) -> Optional[SubEpochSummary]:
165
+ def get_next_sub_epoch_summary(self) -> SubEpochSummary | None:
167
166
  if self.state_type in {StateType.FIRST_SUB_SLOT, StateType.END_OF_SUB_SLOT}:
168
167
  # Can only infuse SES after a peak (in an end of sub slot)
169
168
  return None
@@ -173,7 +172,7 @@ class LastState:
173
172
  return self.sub_epoch_summary
174
173
  return None
175
174
 
176
- def get_last_block_total_iters(self) -> Optional[uint128]:
175
+ def get_last_block_total_iters(self) -> uint128 | None:
177
176
  return self.last_tx_block_total_iters
178
177
 
179
178
  def get_last_tx_height(self) -> uint32:
@@ -182,7 +181,7 @@ class LastState:
182
181
  def get_passed_ses_height_but_not_yet_included(self) -> bool:
183
182
  return self.passed_ses_height_but_not_yet_included
184
183
 
185
- def get_challenge(self, chain: Chain) -> Optional[bytes32]:
184
+ def get_challenge(self, chain: Chain) -> bytes32 | None:
186
185
  if self.state_type == StateType.FIRST_SUB_SLOT:
187
186
  assert self.peak is None and self.subslot_end is None
188
187
  if chain == Chain.CHALLENGE_CHAIN:
@@ -222,7 +221,7 @@ class LastState:
222
221
  return None
223
222
  return None
224
223
 
225
- def get_initial_form(self, chain: Chain) -> Optional[ClassgroupElement]:
224
+ def get_initial_form(self, chain: Chain) -> ClassgroupElement | None:
226
225
  if self.state_type == StateType.FIRST_SUB_SLOT:
227
226
  return ClassgroupElement.get_default_element()
228
227
  elif self.state_type == StateType.PEAK:
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  from chia_rs.sized_bytes import bytes32
6
4
  from chia_rs.sized_ints import uint32
7
5
  from typing_extensions import Protocol
@@ -14,7 +12,7 @@ class BlockInfo(Protocol):
14
12
  def prev_header_hash(self) -> bytes32: ...
15
13
 
16
14
  @property
17
- def transactions_generator(self) -> Optional[SerializedProgram]: ...
15
+ def transactions_generator(self) -> SerializedProgram | None: ...
18
16
 
19
17
  @property
20
18
  def transactions_generator_ref_list(self) -> list[uint32]: ...
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Union
4
-
5
3
  from chia_rs import Coin
6
4
  from chia_rs.sized_bytes import bytes32
7
5
  from chia_rs.sized_ints import uint64
@@ -11,7 +9,7 @@ from chia.util.hash import std_hash
11
9
  __all__ = ["Coin", "coin_as_list", "hash_coin_ids"]
12
10
 
13
11
 
14
- def coin_as_list(c: Coin) -> list[Union[bytes32, uint64]]:
12
+ def coin_as_list(c: Coin) -> list[bytes32 | uint64]:
15
13
  return [c.parent_coin_info, c.puzzle_hash, uint64(c.amount)]
16
14
 
17
15
 
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import io
4
- from typing import TYPE_CHECKING, Any, Callable, Optional, TypeVar, Union
4
+ from collections.abc import Callable
5
+ from typing import TYPE_CHECKING, Any, ClassVar, TypeVar
5
6
 
6
7
  from chia_rs import MEMPOOL_MODE, run_chia_program, tree_hash
7
8
  from chia_rs.sized_bytes import bytes32
@@ -30,6 +31,8 @@ class Program(SExp):
30
31
  A thin wrapper around s-expression data intended to be invoked with "eval".
31
32
  """
32
33
 
34
+ NIL: ClassVar[Program]
35
+
33
36
  @classmethod
34
37
  def parse(cls, f) -> Self:
35
38
  return sexp_from_stream(f, cls.to)
@@ -219,7 +222,7 @@ class Program(SExp):
219
222
  return int_from_bytes(self.as_atom())
220
223
 
221
224
  def as_atom(self) -> bytes:
222
- ret: Optional[bytes] = self.atom
225
+ ret: bytes | None = self.atom
223
226
  if ret is None:
224
227
  raise ValueError("expected atom")
225
228
  return ret
@@ -247,7 +250,7 @@ def _tree_hash(node: SExp, precalculated: set[bytes32]) -> bytes32:
247
250
  return bytes32(std_hash(s))
248
251
 
249
252
 
250
- NIL = Program.from_bytes(b"\x80")
253
+ Program.NIL = Program.to(None)
251
254
 
252
255
 
253
256
  # real return type is more like Union[T_Program, CastableType] when considering corner and terminal cases
@@ -284,7 +287,7 @@ def _sexp_replace(sexp: T_CLVMStorage, to_sexp: Callable[[Any], T_Program], **kw
284
287
  return to_sexp((new_f, new_r))
285
288
 
286
289
 
287
- def _run(prg: Union[SerializedProgram, Program], max_cost: int, flags: int, args: Any) -> tuple[int, Program]:
290
+ def _run(prg: SerializedProgram | Program, max_cost: int, flags: int, args: Any) -> tuple[int, Program]:
288
291
  if isinstance(prg, SerializedProgram):
289
292
  result = prg.run_rust(max_cost, flags, args)
290
293
  return result[0], Program(result[1]) # type: ignore[arg-type]
@@ -292,7 +295,7 @@ def _run(prg: Union[SerializedProgram, Program], max_cost: int, flags: int, args
292
295
  return prg._run(max_cost, flags, args)
293
296
 
294
297
 
295
- def uncurry(prg: Union[SerializedProgram, Program]) -> tuple[Program, Program]:
298
+ def uncurry(prg: SerializedProgram | Program) -> tuple[Program, Program]:
296
299
  if isinstance(prg, SerializedProgram):
297
300
  result = prg.uncurry_rust()
298
301
  return Program(result[0]), Program(result[1]) # type: ignore[arg-type]
@@ -300,13 +303,13 @@ def uncurry(prg: Union[SerializedProgram, Program]) -> tuple[Program, Program]:
300
303
  return prg.uncurry()
301
304
 
302
305
 
303
- def run(prg: Union[SerializedProgram, Program], args: Any) -> Program:
306
+ def run(prg: SerializedProgram | Program, args: Any) -> Program:
304
307
  return _run(prg, INFINITE_COST, 0, args)[1]
305
308
 
306
309
 
307
- def run_with_cost(prg: Union[SerializedProgram, Program], max_cost: int, args: Any) -> tuple[int, Program]:
310
+ def run_with_cost(prg: SerializedProgram | Program, max_cost: int, args: Any) -> tuple[int, Program]:
308
311
  return _run(prg, max_cost, 0, args)
309
312
 
310
313
 
311
- def run_mempool_with_cost(prg: Union[SerializedProgram, Program], max_cost: int, args: Any) -> tuple[int, Program]:
314
+ def run_mempool_with_cost(prg: SerializedProgram | Program, max_cost: int, args: Any) -> tuple[int, Program]:
312
315
  return _run(prg, max_cost, MEMPOOL_MODE, args)