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
@@ -4,14 +4,15 @@ import asyncio
4
4
  import time
5
5
  from concurrent.futures import ThreadPoolExecutor
6
6
  from datetime import datetime, timezone
7
- from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
7
+ from typing import TYPE_CHECKING, Any, ClassVar, cast
8
8
 
9
9
  from chia_rs import (
10
10
  MEMPOOL_MODE,
11
11
  BlockRecord,
12
+ CoinRecord,
12
13
  CoinSpend,
13
14
  FullBlock,
14
- PlotSize,
15
+ PlotParam,
15
16
  SpendBundle,
16
17
  SpendBundleConditions,
17
18
  get_flags_for_height_and_constants,
@@ -24,6 +25,7 @@ from chia_rs.sized_bytes import bytes32
24
25
  from chia_rs.sized_ints import uint32, uint64, uint128
25
26
 
26
27
  from chia.consensus.blockchain import Blockchain, BlockchainMutexPriority
28
+ from chia.consensus.get_block_challenge import pre_sp_tx_block_height
27
29
  from chia.consensus.get_block_generator import get_block_generator
28
30
  from chia.consensus.pos_quality import UI_ACTUAL_SPACE_CONSTANT_FACTOR
29
31
  from chia.full_node.fee_estimator_interface import FeeEstimatorInterface
@@ -31,7 +33,6 @@ from chia.full_node.full_node import FullNode
31
33
  from chia.protocols.outbound_message import NodeType
32
34
  from chia.rpc.rpc_server import Endpoint, EndpointResult
33
35
  from chia.types.blockchain_format.proof_of_space import calculate_prefix_bits
34
- from chia.types.coin_record import CoinRecord
35
36
  from chia.types.generator_types import BlockGenerator, NewBlockGenerator
36
37
  from chia.types.mempool_inclusion_status import MempoolInclusionStatus
37
38
  from chia.types.unfinished_header_block import UnfinishedHeaderBlock
@@ -65,7 +66,7 @@ async def get_average_block_time(
65
66
  blockchain: Blockchain,
66
67
  base_block: BlockRecord,
67
68
  height_distance: int,
68
- ) -> Optional[uint32]:
69
+ ) -> uint32 | None:
69
70
  newer_block = await get_nearest_transaction_block(blockchain, base_block)
70
71
  if newer_block.height < 1:
71
72
  return None
@@ -100,7 +101,7 @@ class FullNodeRpcApi:
100
101
  def __init__(self, service: FullNode) -> None:
101
102
  self.service = service
102
103
  self.service_name = "chia_full_node"
103
- self.cached_blockchain_state: Optional[dict[str, Any]] = None
104
+ self.cached_blockchain_state: dict[str, Any] | None = None
104
105
  self.executor = ThreadPoolExecutor(max_workers=2, thread_name_prefix="node-rpc-")
105
106
 
106
107
  def get_routes(self) -> dict[str, Endpoint]:
@@ -139,7 +140,7 @@ class FullNodeRpcApi:
139
140
  "/get_fee_estimate": self.get_fee_estimate,
140
141
  }
141
142
 
142
- async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> list[WsRpcMessage]:
143
+ async def _state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> list[WsRpcMessage]:
143
144
  if change_data is None:
144
145
  change_data = {}
145
146
 
@@ -203,7 +204,7 @@ class FullNodeRpcApi:
203
204
  },
204
205
  }
205
206
  return res
206
- peak: Optional[BlockRecord] = self.service.blockchain.get_peak()
207
+ peak: BlockRecord | None = self.service.blockchain.get_peak()
207
208
 
208
209
  if peak is not None and peak.height > 0:
209
210
  difficulty = uint64(peak.weight - self.service.blockchain.block_record(peak.prev_hash).weight)
@@ -214,7 +215,7 @@ class FullNodeRpcApi:
214
215
 
215
216
  sync_mode: bool = self.service.sync_store.get_sync_mode() or self.service.sync_store.get_long_sync()
216
217
 
217
- sync_tip_height: Optional[uint32] = uint32(0)
218
+ sync_tip_height: uint32 | None = uint32(0)
218
219
  if sync_mode:
219
220
  target_peak = self.service.sync_store.target_peak
220
221
  if target_peak is not None:
@@ -230,7 +231,7 @@ class FullNodeRpcApi:
230
231
  else:
231
232
  sync_progress_height = uint32(0)
232
233
 
233
- average_block_time: Optional[uint32] = None
234
+ average_block_time: uint32 | None = None
234
235
  if peak is not None and peak.height > 1:
235
236
  newer_block_hex = peak.header_hash.hex()
236
237
  # Average over the last day
@@ -309,7 +310,7 @@ class FullNodeRpcApi:
309
310
  return {"eos": eos, "time_received": time_received, "reverted": False}
310
311
 
311
312
  # Otherwise we can backtrack from peak to find it in the blockchain
312
- curr: Optional[BlockRecord] = self.service.blockchain.get_peak()
313
+ curr: BlockRecord | None = self.service.blockchain.get_peak()
313
314
  if curr is None:
314
315
  raise ValueError("No blocks in the chain")
315
316
 
@@ -345,8 +346,8 @@ class FullNodeRpcApi:
345
346
 
346
347
  # Otherwise we can backtrack from peak to find it in the blockchain
347
348
  rc_challenge: bytes32 = sp.rc_vdf.challenge
348
- next_b: Optional[BlockRecord] = None
349
- curr_b_optional: Optional[BlockRecord] = self.service.blockchain.get_peak()
349
+ next_b: BlockRecord | None = None
350
+ curr_b_optional: BlockRecord | None = self.service.blockchain.get_peak()
350
351
  assert curr_b_optional is not None
351
352
  curr_b: BlockRecord = curr_b_optional
352
353
 
@@ -391,7 +392,7 @@ class FullNodeRpcApi:
391
392
  raise ValueError("No header_hash in request")
392
393
  header_hash = bytes32.from_hexstr(request["header_hash"])
393
394
 
394
- block: Optional[FullBlock] = await self.service.block_store.get_full_block(header_hash)
395
+ block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
395
396
  if block is None:
396
397
  raise ValueError(f"Block {header_hash.hex()} not found")
397
398
 
@@ -464,10 +465,10 @@ class FullNodeRpcApi:
464
465
  if peak_height < uint32(a):
465
466
  self.service.log.warning("requested block is higher than known peak ")
466
467
  break
467
- header_hash: Optional[bytes32] = self.service.blockchain.height_to_hash(uint32(a))
468
+ header_hash: bytes32 | None = self.service.blockchain.height_to_hash(uint32(a))
468
469
  if header_hash is None:
469
470
  raise ValueError(f"Height not in blockchain: {a}")
470
- record: Optional[BlockRecord] = self.service.blockchain.try_block_record(header_hash)
471
+ record: BlockRecord | None = self.service.blockchain.try_block_record(header_hash)
471
472
  if record is None:
472
473
  # Fetch from DB
473
474
  record = await self.service.blockchain.block_store.get_block_record(header_hash)
@@ -481,7 +482,7 @@ class FullNodeRpcApi:
481
482
  if "header_hash" not in request:
482
483
  raise ValueError("No header_hash in request")
483
484
  header_hash = bytes32.from_hexstr(request["header_hash"])
484
- full_block: Optional[FullBlock] = await self.service.block_store.get_full_block(header_hash)
485
+ full_block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
485
486
  if full_block is None:
486
487
  raise ValueError(f"Block {header_hash.hex()} not found")
487
488
 
@@ -489,7 +490,14 @@ class FullNodeRpcApi:
489
490
  if block_generator is None: # if block is not a transaction block.
490
491
  return {"block_spends": []}
491
492
 
492
- flags = get_flags_for_height_and_constants(full_block.height, self.service.constants)
493
+ prev_tx_height = pre_sp_tx_block_height(
494
+ constants=self.service.constants,
495
+ blocks=self.service.blockchain,
496
+ prev_b_hash=full_block.prev_header_hash,
497
+ sp_index=full_block.reward_chain_block.signage_point_index,
498
+ first_in_sub_slot=len(full_block.finished_sub_slots) > 0,
499
+ )
500
+ flags = get_flags_for_height_and_constants(prev_tx_height, self.service.constants)
493
501
  spends = await asyncio.get_running_loop().run_in_executor(
494
502
  self.executor,
495
503
  get_spends_for_trusted_block,
@@ -505,7 +513,7 @@ class FullNodeRpcApi:
505
513
  if "header_hash" not in request:
506
514
  raise ValueError("No header_hash in request")
507
515
  header_hash = bytes32.from_hexstr(request["header_hash"])
508
- full_block: Optional[FullBlock] = await self.service.block_store.get_full_block(header_hash)
516
+ full_block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
509
517
  if full_block is None:
510
518
  raise ValueError(f"Block {header_hash.hex()} not found")
511
519
 
@@ -513,7 +521,14 @@ class FullNodeRpcApi:
513
521
  if block_generator is None: # if block is not a transaction block.
514
522
  return {"block_spends_with_conditions": []}
515
523
 
516
- flags = get_flags_for_height_and_constants(full_block.height, self.service.constants)
524
+ prev_tx_height = pre_sp_tx_block_height(
525
+ constants=self.service.constants,
526
+ blocks=self.service.blockchain,
527
+ prev_b_hash=full_block.prev_header_hash,
528
+ sp_index=full_block.reward_chain_block.signage_point_index,
529
+ first_in_sub_slot=len(full_block.finished_sub_slots) > 0,
530
+ )
531
+ flags = get_flags_for_height_and_constants(prev_tx_height, self.service.constants)
517
532
  spends_with_conditions = await asyncio.get_running_loop().run_in_executor(
518
533
  self.executor,
519
534
  get_spends_for_trusted_block_with_conditions,
@@ -532,10 +547,10 @@ class FullNodeRpcApi:
532
547
  peak_height = self.service.blockchain.get_peak_height()
533
548
  if peak_height is None or header_height > peak_height:
534
549
  raise ValueError(f"Block height {height} not found in chain")
535
- header_hash: Optional[bytes32] = self.service.blockchain.height_to_hash(header_height)
550
+ header_hash: bytes32 | None = self.service.blockchain.height_to_hash(header_height)
536
551
  if header_hash is None:
537
552
  raise ValueError(f"Block hash {height} not found in chain")
538
- record: Optional[BlockRecord] = self.service.blockchain.try_block_record(header_hash)
553
+ record: BlockRecord | None = self.service.blockchain.try_block_record(header_hash)
539
554
  if record is None:
540
555
  # Fetch from DB
541
556
  record = await self.service.blockchain.block_store.get_block_record(header_hash)
@@ -548,7 +563,7 @@ class FullNodeRpcApi:
548
563
  raise ValueError("header_hash not in request")
549
564
  header_hash_str = request["header_hash"]
550
565
  header_hash = bytes32.from_hexstr(header_hash_str)
551
- record: Optional[BlockRecord] = self.service.blockchain.try_block_record(header_hash)
566
+ record: BlockRecord | None = self.service.blockchain.try_block_record(header_hash)
552
567
  if record is None:
553
568
  # Fetch from DB
554
569
  record = await self.service.blockchain.block_store.get_block_record(header_hash)
@@ -558,7 +573,7 @@ class FullNodeRpcApi:
558
573
  return {"block_record": record}
559
574
 
560
575
  async def get_unfinished_block_headers(self, _request: dict[str, Any]) -> EndpointResult:
561
- peak: Optional[BlockRecord] = self.service.blockchain.get_peak()
576
+ peak: BlockRecord | None = self.service.blockchain.get_peak()
562
577
  if peak is None:
563
578
  return {"headers": []}
564
579
 
@@ -606,7 +621,7 @@ class FullNodeRpcApi:
606
621
 
607
622
  # TODO: todo_v2_plots Update this calculation to take v2 plots into
608
623
  # account
609
- plot_filter_size = calculate_prefix_bits(self.service.constants, newer_block.height, PlotSize.make_v1(32))
624
+ plot_filter_size = calculate_prefix_bits(self.service.constants, newer_block.height, PlotParam.make_v1(32))
610
625
  delta_iters = newer_block.total_iters - older_block.total_iters
611
626
  weight_div_iters = delta_weight / delta_iters
612
627
  additional_difficulty_constant = self.service.constants.DIFFICULTY_CONSTANT_FACTOR
@@ -668,7 +683,7 @@ class FullNodeRpcApi:
668
683
  raise ValueError("Name not in request")
669
684
  name = bytes32.from_hexstr(request["name"])
670
685
 
671
- coin_record: Optional[CoinRecord] = await self.service.blockchain.coin_store.get_coin_record(name)
686
+ coin_record: CoinRecord | None = await self.service.blockchain.coin_store.get_coin_record(name)
672
687
  if coin_record is None:
673
688
  raise ValueError(f"Coin record 0x{name.hex()} not found")
674
689
 
@@ -781,23 +796,30 @@ class FullNodeRpcApi:
781
796
 
782
797
  header_hash = self.service.blockchain.height_to_hash(height)
783
798
  assert header_hash is not None
784
- block: Optional[FullBlock] = await self.service.block_store.get_full_block(header_hash)
799
+ block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
785
800
 
786
801
  if block is None or block.transactions_generator is None:
787
802
  raise ValueError("Invalid block or block generator")
788
803
 
789
- block_generator: Optional[BlockGenerator] = await get_block_generator(
804
+ block_generator: BlockGenerator | None = await get_block_generator(
790
805
  self.service.blockchain.lookup_block_generators, block
791
806
  )
792
807
  assert block_generator is not None
793
808
 
794
809
  try:
810
+ prev_tx_height = pre_sp_tx_block_height(
811
+ constants=self.service.constants,
812
+ blocks=self.service.blockchain,
813
+ prev_b_hash=block.prev_header_hash,
814
+ sp_index=block.reward_chain_block.signage_point_index,
815
+ first_in_sub_slot=len(block.finished_sub_slots) > 0,
816
+ )
795
817
  puzzle, solution = get_puzzle_and_solution_for_coin(
796
818
  block_generator.program,
797
819
  block_generator.generator_refs,
798
820
  self.service.constants.MAX_BLOCK_COST_CLVM,
799
821
  coin_record.coin,
800
- get_flags_for_height_and_constants(block.height, self.service.constants),
822
+ get_flags_for_height_and_constants(prev_tx_height, self.service.constants),
801
823
  )
802
824
  return {"coin_solution": CoinSpend(coin_record.coin, puzzle, solution)}
803
825
  except Exception as e:
@@ -808,7 +830,7 @@ class FullNodeRpcApi:
808
830
  raise ValueError("No header_hash in request")
809
831
  header_hash = bytes32.from_hexstr(request["header_hash"])
810
832
 
811
- block: Optional[FullBlock] = await self.service.block_store.get_full_block(header_hash)
833
+ block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
812
834
  if block is None:
813
835
  raise ValueError(f"Block {header_hash.hex()} not found")
814
836
 
@@ -862,7 +884,7 @@ class FullNodeRpcApi:
862
884
 
863
885
  # Grab best transactions from Mempool for given tip target
864
886
  async with self.service.blockchain.priority_mutex.acquire(priority=BlockchainMutexPriority.low):
865
- peak: Optional[BlockRecord] = self.service.blockchain.get_peak()
887
+ peak: BlockRecord | None = self.service.blockchain.get_peak()
866
888
 
867
889
  if peak is None:
868
890
  return {
@@ -998,7 +1020,7 @@ class FullNodeRpcApi:
998
1020
 
999
1021
  if peak is None:
1000
1022
  peak_height = uint32(0)
1001
- last_peak_timestamp: Optional[uint64] = uint64(0)
1023
+ last_peak_timestamp: uint64 | None = uint64(0)
1002
1024
  last_block_cost = 0
1003
1025
  fee_rate_last_block = 0.0
1004
1026
  last_tx_block_fees = uint64(0)
@@ -1,14 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Optional, cast
3
+ from typing import Any, cast
4
4
 
5
- from chia_rs import BlockRecord, CoinSpend, EndOfSubSlotBundle, FullBlock, SpendBundle
5
+ from chia_rs import BlockRecord, CoinRecord, CoinSpend, EndOfSubSlotBundle, FullBlock, SpendBundle
6
6
  from chia_rs.sized_bytes import bytes32
7
7
  from chia_rs.sized_ints import uint32
8
8
 
9
9
  from chia.consensus.signage_point import SignagePoint
10
10
  from chia.rpc.rpc_client import ResponseFailureError, RpcClient
11
- from chia.types.coin_record import CoinRecord
12
11
  from chia.types.coin_spend import CoinSpendWithConditions
13
12
  from chia.types.condition_opcodes import ConditionOpcode
14
13
  from chia.types.condition_with_args import ConditionWithArgs
@@ -46,7 +45,7 @@ class FullNodeRpcClient(RpcClient):
46
45
  )
47
46
  return [FullBlock.from_json_dict(block) for block in response["blocks"]]
48
47
 
49
- async def get_block_record_by_height(self, height: int) -> Optional[BlockRecord]:
48
+ async def get_block_record_by_height(self, height: int) -> BlockRecord | None:
50
49
  try:
51
50
  response = await self.fetch("get_block_record_by_height", {"height": height})
52
51
  except ResponseFailureError as e: # Block Height not found
@@ -55,7 +54,7 @@ class FullNodeRpcClient(RpcClient):
55
54
  raise e
56
55
  return BlockRecord.from_json_dict(response["block_record"])
57
56
 
58
- async def get_block_record(self, header_hash: bytes32) -> Optional[BlockRecord]:
57
+ async def get_block_record(self, header_hash: bytes32) -> BlockRecord | None:
59
58
  response = await self.fetch("get_block_record", {"header_hash": header_hash.hex()})
60
59
  if response["block_record"] is None:
61
60
  return None
@@ -88,8 +87,8 @@ class FullNodeRpcClient(RpcClient):
88
87
  self,
89
88
  names: list[bytes32],
90
89
  include_spent_coins: bool = True,
91
- start_height: Optional[int] = None,
92
- end_height: Optional[int] = None,
90
+ start_height: int | None = None,
91
+ end_height: int | None = None,
93
92
  ) -> list[CoinRecord]:
94
93
  names_hex = [name.hex() for name in names]
95
94
  d = {"names": names_hex, "include_spent_coins": include_spent_coins}
@@ -105,8 +104,8 @@ class FullNodeRpcClient(RpcClient):
105
104
  self,
106
105
  puzzle_hash: bytes32,
107
106
  include_spent_coins: bool = True,
108
- start_height: Optional[int] = None,
109
- end_height: Optional[int] = None,
107
+ start_height: int | None = None,
108
+ end_height: int | None = None,
110
109
  ) -> list[CoinRecord]:
111
110
  d = {"puzzle_hash": puzzle_hash.hex(), "include_spent_coins": include_spent_coins}
112
111
  if start_height is not None:
@@ -121,8 +120,8 @@ class FullNodeRpcClient(RpcClient):
121
120
  self,
122
121
  puzzle_hashes: list[bytes32],
123
122
  include_spent_coins: bool = True,
124
- start_height: Optional[int] = None,
125
- end_height: Optional[int] = None,
123
+ start_height: int | None = None,
124
+ end_height: int | None = None,
126
125
  ) -> list[CoinRecord]:
127
126
  puzzle_hashes_hex = [ph.hex() for ph in puzzle_hashes]
128
127
  d = {"puzzle_hashes": puzzle_hashes_hex, "include_spent_coins": include_spent_coins}
@@ -138,8 +137,8 @@ class FullNodeRpcClient(RpcClient):
138
137
  self,
139
138
  parent_ids: list[bytes32],
140
139
  include_spent_coins: bool = True,
141
- start_height: Optional[int] = None,
142
- end_height: Optional[int] = None,
140
+ start_height: int | None = None,
141
+ end_height: int | None = None,
143
142
  ) -> list[CoinRecord]:
144
143
  parent_ids_hex = [pid.hex() for pid in parent_ids]
145
144
  d = {"parent_ids": parent_ids_hex, "include_spent_coins": include_spent_coins}
@@ -159,8 +158,8 @@ class FullNodeRpcClient(RpcClient):
159
158
  self,
160
159
  hint: bytes32,
161
160
  include_spent_coins: bool = True,
162
- start_height: Optional[int] = None,
163
- end_height: Optional[int] = None,
161
+ start_height: int | None = None,
162
+ end_height: int | None = None,
164
163
  ) -> list[CoinRecord]:
165
164
  d = {"hint": hint.hex(), "include_spent_coins": include_spent_coins}
166
165
  if start_height is not None:
@@ -247,12 +246,12 @@ class FullNodeRpcClient(RpcClient):
247
246
  response = await self.fetch("get_mempool_items_by_coin_name", {"coin_name": coin_name.hex()})
248
247
  return response
249
248
 
250
- async def create_block_generator(self) -> Optional[dict[str, Any]]:
249
+ async def create_block_generator(self) -> dict[str, Any] | None:
251
250
  response = await self.fetch("create_block_generator", {})
252
251
  return response
253
252
 
254
253
  async def get_recent_signage_point_or_eos(
255
- self, sp_hash: Optional[bytes32], challenge_hash: Optional[bytes32]
254
+ self, sp_hash: bytes32 | None, challenge_hash: bytes32 | None
256
255
  ) -> dict[str, Any]:
257
256
  if sp_hash is not None and challenge_hash is not None:
258
257
  raise ValueError("Either sp_hash or challenge_hash must be provided, not both.")
@@ -275,8 +274,8 @@ class FullNodeRpcClient(RpcClient):
275
274
 
276
275
  async def get_fee_estimate(
277
276
  self,
278
- target_times: Optional[list[int]],
279
- cost: Optional[int],
277
+ target_times: list[int] | None,
278
+ cost: int | None,
280
279
  ) -> dict[str, Any]:
281
280
  response = await self.fetch("get_fee_estimate", {"cost": cost, "target_times": target_times})
282
281
  return response