chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_blockchain_transactions.py +5 -2
  6. chia/_tests/blockchain/test_build_chains.py +2 -4
  7. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  8. chia/_tests/clvm/coin_store.py +4 -7
  9. chia/_tests/clvm/test_clvm_step.py +4 -4
  10. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  11. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  12. chia/_tests/clvm/test_singletons.py +2 -4
  13. chia/_tests/clvm/test_spend_sim.py +2 -2
  14. chia/_tests/cmds/cmd_test_utils.py +27 -45
  15. chia/_tests/cmds/test_cmd_framework.py +6 -6
  16. chia/_tests/cmds/test_daemon.py +3 -3
  17. chia/_tests/cmds/test_show.py +4 -4
  18. chia/_tests/cmds/test_tx_config_args.py +1 -2
  19. chia/_tests/cmds/testing_classes.py +4 -5
  20. chia/_tests/cmds/wallet/test_did.py +24 -27
  21. chia/_tests/cmds/wallet/test_nft.py +12 -10
  22. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  23. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  24. chia/_tests/conftest.py +66 -31
  25. chia/_tests/connection_utils.py +2 -2
  26. chia/_tests/core/cmds/test_beta.py +4 -4
  27. chia/_tests/core/cmds/test_keys.py +2 -3
  28. chia/_tests/core/cmds/test_wallet.py +15 -15
  29. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  30. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  31. chia/_tests/core/daemon/test_daemon.py +11 -11
  32. chia/_tests/core/data_layer/conftest.py +2 -2
  33. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  34. chia/_tests/core/data_layer/test_data_store.py +10 -10
  35. chia/_tests/core/data_layer/util.py +11 -11
  36. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  37. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  38. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  39. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  40. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  41. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  42. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  43. chia/_tests/core/full_node/test_conditions.py +21 -23
  44. chia/_tests/core/full_node/test_full_node.py +273 -70
  45. chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
  46. chia/_tests/core/full_node/test_hint_management.py +2 -4
  47. chia/_tests/core/full_node/test_performance.py +0 -1
  48. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  49. chia/_tests/core/full_node/test_transactions.py +1 -2
  50. chia/_tests/core/full_node/test_tx_processing_queue.py +198 -30
  51. chia/_tests/core/mempool/test_mempool.py +54 -50
  52. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  53. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  54. chia/_tests/core/mempool/test_mempool_manager.py +988 -854
  55. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  56. chia/_tests/core/server/serve.py +7 -7
  57. chia/_tests/core/server/test_dos.py +1 -2
  58. chia/_tests/core/server/test_event_loop.py +12 -4
  59. chia/_tests/core/server/test_loop.py +7 -8
  60. chia/_tests/core/server/test_rate_limits.py +9 -8
  61. chia/_tests/core/server/test_server.py +61 -1
  62. chia/_tests/core/services/test_services.py +2 -2
  63. chia/_tests/core/ssl/test_ssl.py +2 -2
  64. chia/_tests/core/test_cost_calculation.py +2 -6
  65. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  66. chia/_tests/core/test_filter.py +0 -1
  67. chia/_tests/core/test_full_node_rpc.py +2 -2
  68. chia/_tests/core/test_merkle_set.py +1 -2
  69. chia/_tests/core/test_seeder.py +4 -4
  70. chia/_tests/core/util/test_config.py +4 -4
  71. chia/_tests/core/util/test_jsonify.py +2 -2
  72. chia/_tests/core/util/test_keychain.py +3 -3
  73. chia/_tests/core/util/test_lockfile.py +2 -1
  74. chia/_tests/core/util/test_log_exceptions.py +1 -2
  75. chia/_tests/core/util/test_streamable.py +17 -17
  76. chia/_tests/db/test_db_wrapper.py +3 -2
  77. chia/_tests/environments/wallet.py +14 -14
  78. chia/_tests/ether.py +4 -3
  79. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  80. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  81. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  82. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  83. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  84. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  85. chia/_tests/harvester/test_harvester_api.py +11 -4
  86. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  87. chia/_tests/plot_sync/test_receiver.py +11 -10
  88. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  89. chia/_tests/plot_sync/util.py +1 -2
  90. chia/_tests/plotting/test_plot_manager.py +7 -6
  91. chia/_tests/plotting/test_prover.py +30 -38
  92. chia/_tests/pools/test_pool_cmdline.py +4 -6
  93. chia/_tests/pools/test_pool_rpc.py +203 -61
  94. chia/_tests/pools/test_pool_wallet.py +3 -3
  95. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  96. chia/_tests/process_junit.py +2 -2
  97. chia/_tests/rpc/test_rpc_client.py +4 -4
  98. chia/_tests/rpc/test_rpc_server.py +3 -3
  99. chia/_tests/simulation/test_simulation.py +12 -25
  100. chia/_tests/solver/test_solver_service.py +13 -4
  101. chia/_tests/testconfig.py +2 -2
  102. chia/_tests/timelord/test_new_peak.py +22 -11
  103. chia/_tests/tools/test_run_block.py +0 -2
  104. chia/_tests/tools/test_virtual_project.py +2 -1
  105. chia/_tests/util/benchmarks.py +1 -0
  106. chia/_tests/util/blockchain.py +38 -36
  107. chia/_tests/util/blockchain_mock.py +11 -11
  108. chia/_tests/util/build_network_protocol_files.py +2 -1
  109. chia/_tests/util/coin_store.py +2 -1
  110. chia/_tests/util/config.py +1 -1
  111. chia/_tests/util/db_connection.py +2 -3
  112. chia/_tests/util/full_sync.py +9 -11
  113. chia/_tests/util/gen_ssl_certs.py +4 -5
  114. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  115. chia/_tests/util/misc.py +24 -24
  116. chia/_tests/util/network_protocol_data.py +20 -3
  117. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  118. chia/_tests/util/protocol_messages_json.py +292 -3
  119. chia/_tests/util/setup_nodes.py +62 -47
  120. chia/_tests/util/spend_sim.py +57 -57
  121. chia/_tests/util/test_async_pool.py +2 -3
  122. chia/_tests/util/test_chia_version.py +1 -3
  123. chia/_tests/util/test_config.py +3 -3
  124. chia/_tests/util/test_full_block_utils.py +6 -3
  125. chia/_tests/util/test_limited_semaphore.py +1 -2
  126. chia/_tests/util/test_misc.py +2 -2
  127. chia/_tests/util/test_network.py +1 -2
  128. chia/_tests/util/test_priority_mutex.py +3 -3
  129. chia/_tests/util/test_recursive_replace.py +5 -6
  130. chia/_tests/util/test_replace_str_to_bytes.py +9 -10
  131. chia/_tests/util/test_testnet_overrides.py +3 -3
  132. chia/_tests/util/time_out_assert.py +2 -2
  133. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  134. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  135. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  136. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  137. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  138. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  139. chia/_tests/wallet/conftest.py +6 -6
  140. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  141. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  142. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  145. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  146. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  147. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  148. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  149. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  150. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  151. chia/_tests/wallet/sync/test_wallet_sync.py +63 -60
  152. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  153. chia/_tests/wallet/test_coin_management.py +2 -2
  154. chia/_tests/wallet/test_conditions.py +45 -51
  155. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  156. chia/_tests/wallet/test_new_wallet_protocol.py +17 -17
  157. chia/_tests/wallet/test_notifications.py +14 -14
  158. chia/_tests/wallet/test_signer_protocol.py +5 -5
  159. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  160. chia/_tests/wallet/test_transaction_store.py +20 -20
  161. chia/_tests/wallet/test_util.py +2 -2
  162. chia/_tests/wallet/test_wallet.py +380 -228
  163. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  164. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  165. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  166. chia/_tests/wallet/test_wallet_node.py +16 -15
  167. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  168. chia/_tests/wallet/test_wallet_utils.py +2 -3
  169. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  170. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  171. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  172. chia/_tests/wallet/wallet_block_tools.py +12 -11
  173. chia/_tests/weight_proof/config.py +1 -0
  174. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  175. chia/apis/__init__.py +21 -0
  176. chia/apis/farmer_stub.py +102 -0
  177. chia/apis/full_node_stub.py +374 -0
  178. chia/apis/harvester_stub.py +57 -0
  179. chia/apis/introducer_stub.py +35 -0
  180. chia/apis/solver_stub.py +30 -0
  181. chia/apis/stub_protocol_registry.py +21 -0
  182. chia/apis/timelord_stub.py +39 -0
  183. chia/apis/wallet_stub.py +161 -0
  184. chia/cmds/beta.py +3 -4
  185. chia/cmds/beta_funcs.py +4 -3
  186. chia/cmds/check_wallet_db.py +4 -4
  187. chia/cmds/chia.py +1 -2
  188. chia/cmds/cmd_classes.py +11 -13
  189. chia/cmds/cmd_helpers.py +11 -11
  190. chia/cmds/cmds_util.py +15 -15
  191. chia/cmds/coin_funcs.py +6 -7
  192. chia/cmds/coins.py +2 -3
  193. chia/cmds/configure.py +1 -2
  194. chia/cmds/data.py +42 -42
  195. chia/cmds/data_funcs.py +81 -81
  196. chia/cmds/db.py +4 -5
  197. chia/cmds/db_backup_func.py +2 -2
  198. chia/cmds/db_upgrade_func.py +3 -3
  199. chia/cmds/db_validate_func.py +2 -2
  200. chia/cmds/dev/data.py +4 -4
  201. chia/cmds/dev/gh.py +5 -5
  202. chia/cmds/dev/installers.py +2 -3
  203. chia/cmds/dev/mempool.py +3 -4
  204. chia/cmds/dev/mempool_funcs.py +4 -4
  205. chia/cmds/dev/sim.py +8 -8
  206. chia/cmds/dump_keyring.py +3 -3
  207. chia/cmds/farm.py +6 -8
  208. chia/cmds/farm_funcs.py +25 -24
  209. chia/cmds/init_funcs.py +4 -4
  210. chia/cmds/keys.py +16 -18
  211. chia/cmds/keys_funcs.py +36 -36
  212. chia/cmds/netspace.py +1 -3
  213. chia/cmds/netspace_funcs.py +1 -2
  214. chia/cmds/options.py +3 -2
  215. chia/cmds/param_types.py +17 -16
  216. chia/cmds/passphrase.py +6 -7
  217. chia/cmds/passphrase_funcs.py +11 -13
  218. chia/cmds/peer.py +1 -3
  219. chia/cmds/peer_funcs.py +3 -3
  220. chia/cmds/plotnft.py +6 -7
  221. chia/cmds/plotnft_funcs.py +37 -26
  222. chia/cmds/rpc.py +3 -3
  223. chia/cmds/show.py +3 -5
  224. chia/cmds/show_funcs.py +9 -9
  225. chia/cmds/sim_funcs.py +25 -26
  226. chia/cmds/solver.py +1 -3
  227. chia/cmds/solver_funcs.py +1 -2
  228. chia/cmds/start_funcs.py +2 -2
  229. chia/cmds/wallet.py +76 -81
  230. chia/cmds/wallet_funcs.py +206 -177
  231. chia/consensus/augmented_chain.py +6 -6
  232. chia/consensus/block_body_validation.py +19 -15
  233. chia/consensus/block_creation.py +25 -21
  234. chia/consensus/block_header_validation.py +27 -13
  235. chia/consensus/block_height_map.py +3 -6
  236. chia/consensus/block_height_map_protocol.py +2 -2
  237. chia/consensus/block_record.py +2 -4
  238. chia/consensus/blockchain.py +58 -40
  239. chia/consensus/blockchain_interface.py +7 -7
  240. chia/consensus/coin_store_protocol.py +5 -6
  241. chia/consensus/condition_tools.py +4 -4
  242. chia/consensus/cost_calculator.py +2 -3
  243. chia/consensus/default_constants.py +19 -13
  244. chia/consensus/deficit.py +1 -3
  245. chia/consensus/difficulty_adjustment.py +3 -5
  246. chia/consensus/find_fork_point.py +2 -4
  247. chia/consensus/full_block_to_block_record.py +11 -13
  248. chia/consensus/generator_tools.py +2 -3
  249. chia/consensus/get_block_challenge.py +50 -26
  250. chia/consensus/get_block_generator.py +2 -3
  251. chia/consensus/make_sub_epoch_summary.py +8 -7
  252. chia/consensus/multiprocess_validation.py +31 -20
  253. chia/consensus/pos_quality.py +6 -23
  254. chia/consensus/pot_iterations.py +17 -44
  255. chia/consensus/signage_point.py +4 -5
  256. chia/consensus/vdf_info_computation.py +2 -4
  257. chia/daemon/client.py +8 -8
  258. chia/daemon/keychain_proxy.py +31 -37
  259. chia/daemon/server.py +32 -33
  260. chia/daemon/windows_signal.py +4 -3
  261. chia/data_layer/data_layer.py +86 -77
  262. chia/data_layer/data_layer_rpc_api.py +9 -9
  263. chia/data_layer/data_layer_rpc_client.py +13 -15
  264. chia/data_layer/data_layer_server.py +3 -3
  265. chia/data_layer/data_layer_util.py +14 -14
  266. chia/data_layer/data_layer_wallet.py +94 -101
  267. chia/data_layer/data_store.py +50 -50
  268. chia/data_layer/dl_wallet_store.py +9 -12
  269. chia/data_layer/download_data.py +8 -9
  270. chia/data_layer/s3_plugin_service.py +5 -9
  271. chia/data_layer/start_data_layer.py +5 -5
  272. chia/farmer/farmer.py +31 -31
  273. chia/farmer/farmer_api.py +45 -33
  274. chia/farmer/farmer_rpc_api.py +5 -4
  275. chia/farmer/farmer_rpc_client.py +6 -6
  276. chia/farmer/start_farmer.py +6 -6
  277. chia/full_node/block_store.py +13 -16
  278. chia/full_node/check_fork_next_block.py +1 -2
  279. chia/full_node/coin_store.py +15 -16
  280. chia/full_node/eligible_coin_spends.py +3 -3
  281. chia/full_node/fee_estimate_store.py +2 -3
  282. chia/full_node/fee_tracker.py +1 -2
  283. chia/full_node/full_block_utils.py +4 -4
  284. chia/full_node/full_node.py +239 -223
  285. chia/full_node/full_node_api.py +197 -152
  286. chia/full_node/full_node_rpc_api.py +34 -32
  287. chia/full_node/full_node_rpc_client.py +18 -19
  288. chia/full_node/full_node_store.py +45 -43
  289. chia/full_node/hard_fork_utils.py +44 -0
  290. chia/full_node/hint_management.py +2 -2
  291. chia/full_node/mempool.py +17 -19
  292. chia/full_node/mempool_manager.py +89 -42
  293. chia/full_node/pending_tx_cache.py +2 -3
  294. chia/full_node/start_full_node.py +5 -5
  295. chia/full_node/sync_store.py +3 -4
  296. chia/full_node/tx_processing_queue.py +120 -36
  297. chia/full_node/weight_proof.py +61 -48
  298. chia/harvester/harvester.py +25 -24
  299. chia/harvester/harvester_api.py +61 -38
  300. chia/harvester/harvester_rpc_api.py +10 -10
  301. chia/harvester/start_harvester.py +4 -4
  302. chia/introducer/introducer.py +3 -3
  303. chia/introducer/introducer_api.py +6 -4
  304. chia/introducer/start_introducer.py +4 -4
  305. chia/legacy/keyring.py +3 -3
  306. chia/plot_sync/delta.py +1 -2
  307. chia/plot_sync/receiver.py +20 -17
  308. chia/plot_sync/sender.py +15 -10
  309. chia/plotters/bladebit.py +7 -7
  310. chia/plotters/chiapos.py +2 -2
  311. chia/plotters/madmax.py +4 -4
  312. chia/plotters/plotters.py +4 -4
  313. chia/plotters/plotters_util.py +3 -3
  314. chia/plotting/cache.py +20 -14
  315. chia/plotting/check_plots.py +26 -35
  316. chia/plotting/create_plots.py +22 -23
  317. chia/plotting/manager.py +21 -14
  318. chia/plotting/prover.py +59 -42
  319. chia/plotting/util.py +16 -16
  320. chia/pools/pool_config.py +2 -1
  321. chia/pools/pool_puzzles.py +11 -12
  322. chia/pools/pool_wallet.py +34 -57
  323. chia/pools/pool_wallet_info.py +39 -10
  324. chia/protocols/farmer_protocol.py +8 -9
  325. chia/protocols/fee_estimate.py +3 -4
  326. chia/protocols/full_node_protocol.py +3 -4
  327. chia/protocols/harvester_protocol.py +27 -15
  328. chia/protocols/outbound_message.py +3 -3
  329. chia/protocols/pool_protocol.py +8 -9
  330. chia/protocols/shared_protocol.py +1 -2
  331. chia/protocols/solver_protocol.py +9 -2
  332. chia/protocols/timelord_protocol.py +4 -7
  333. chia/protocols/wallet_protocol.py +11 -12
  334. chia/rpc/rpc_client.py +9 -9
  335. chia/rpc/rpc_server.py +17 -17
  336. chia/rpc/util.py +2 -2
  337. chia/seeder/crawler.py +8 -8
  338. chia/seeder/crawler_api.py +21 -27
  339. chia/seeder/crawler_rpc_api.py +2 -2
  340. chia/seeder/dns_server.py +21 -21
  341. chia/seeder/start_crawler.py +4 -4
  342. chia/server/address_manager.py +15 -16
  343. chia/server/api_protocol.py +11 -11
  344. chia/server/chia_policy.py +46 -26
  345. chia/server/introducer_peers.py +2 -3
  346. chia/server/node_discovery.py +19 -19
  347. chia/server/rate_limit_numbers.py +4 -5
  348. chia/server/rate_limits.py +4 -4
  349. chia/server/resolve_peer_info.py +4 -4
  350. chia/server/server.py +49 -52
  351. chia/server/signal_handlers.py +6 -6
  352. chia/server/start_service.py +17 -17
  353. chia/server/upnp.py +4 -6
  354. chia/server/ws_connection.py +52 -37
  355. chia/simulator/add_blocks_in_batches.py +1 -3
  356. chia/simulator/block_tools.py +312 -200
  357. chia/simulator/full_node_simulator.py +56 -35
  358. chia/simulator/keyring.py +2 -3
  359. chia/simulator/setup_services.py +15 -15
  360. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  361. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  362. chia/simulator/simulator_protocol.py +1 -2
  363. chia/simulator/simulator_test_tools.py +3 -3
  364. chia/simulator/start_simulator.py +7 -7
  365. chia/simulator/wallet_tools.py +10 -10
  366. chia/solver/solver.py +10 -10
  367. chia/solver/solver_api.py +10 -8
  368. chia/solver/solver_rpc_api.py +2 -2
  369. chia/solver/start_solver.py +4 -4
  370. chia/ssl/cacert.pem +148 -90
  371. chia/ssl/chia_ca.crt +14 -10
  372. chia/ssl/chia_ca_old.crt +19 -0
  373. chia/ssl/create_ssl.py +4 -4
  374. chia/ssl/renewedselfsignedca.conf +4 -0
  375. chia/ssl/ssl_check.py +1 -2
  376. chia/timelord/iters_from_block.py +1 -4
  377. chia/timelord/start_timelord.py +4 -4
  378. chia/timelord/timelord.py +44 -40
  379. chia/timelord/timelord_api.py +6 -4
  380. chia/timelord/timelord_launcher.py +2 -2
  381. chia/timelord/timelord_rpc_api.py +2 -2
  382. chia/timelord/timelord_state.py +11 -12
  383. chia/types/block_protocol.py +1 -3
  384. chia/types/blockchain_format/coin.py +1 -3
  385. chia/types/blockchain_format/program.py +11 -8
  386. chia/types/blockchain_format/proof_of_space.py +123 -76
  387. chia/types/blockchain_format/tree_hash.py +3 -3
  388. chia/types/blockchain_format/vdf.py +1 -2
  389. chia/types/coin_spend.py +3 -3
  390. chia/types/mempool_item.py +5 -5
  391. chia/types/mempool_submission_status.py +2 -3
  392. chia/types/peer_info.py +1 -2
  393. chia/types/unfinished_header_block.py +3 -4
  394. chia/types/validation_state.py +1 -2
  395. chia/util/action_scope.py +8 -8
  396. chia/util/async_pool.py +5 -5
  397. chia/util/bech32m.py +1 -2
  398. chia/util/beta_metrics.py +2 -2
  399. chia/util/block_cache.py +4 -4
  400. chia/util/chia_logging.py +2 -2
  401. chia/util/chia_version.py +1 -2
  402. chia/util/config.py +15 -16
  403. chia/util/db_wrapper.py +26 -27
  404. chia/util/default_root.py +1 -2
  405. chia/util/errors.py +3 -3
  406. chia/util/file_keyring.py +14 -14
  407. chia/util/files.py +2 -3
  408. chia/util/hash.py +4 -4
  409. chia/util/initial-config.yaml +4 -5
  410. chia/util/inline_executor.py +2 -1
  411. chia/util/ip_address.py +1 -2
  412. chia/util/keychain.py +25 -27
  413. chia/util/keyring_wrapper.py +18 -19
  414. chia/util/lock.py +3 -4
  415. chia/util/log_exceptions.py +1 -2
  416. chia/util/lru_cache.py +2 -2
  417. chia/util/network.py +6 -6
  418. chia/util/path.py +2 -3
  419. chia/util/priority_mutex.py +2 -2
  420. chia/util/profiler.py +1 -2
  421. chia/util/safe_cancel_task.py +1 -2
  422. chia/util/streamable.py +24 -10
  423. chia/util/task_referencer.py +1 -1
  424. chia/util/timing.py +3 -3
  425. chia/util/virtual_project_analysis.py +6 -5
  426. chia/util/ws_message.py +2 -2
  427. chia/wallet/cat_wallet/cat_info.py +3 -4
  428. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  429. chia/wallet/cat_wallet/cat_utils.py +3 -4
  430. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  431. chia/wallet/cat_wallet/lineage_store.py +3 -4
  432. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  433. chia/wallet/coin_selection.py +9 -10
  434. chia/wallet/conditions.py +142 -106
  435. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  436. chia/wallet/derivation_record.py +1 -2
  437. chia/wallet/derive_keys.py +2 -4
  438. chia/wallet/did_wallet/did_info.py +10 -11
  439. chia/wallet/did_wallet/did_wallet.py +36 -82
  440. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  441. chia/wallet/driver_protocol.py +5 -7
  442. chia/wallet/lineage_proof.py +4 -4
  443. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  444. chia/wallet/nft_wallet/nft_info.py +8 -9
  445. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  446. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  447. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  448. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  449. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  450. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  451. chia/wallet/notification_manager.py +3 -3
  452. chia/wallet/notification_store.py +44 -61
  453. chia/wallet/outer_puzzles.py +6 -7
  454. chia/wallet/puzzle_drivers.py +34 -6
  455. chia/wallet/puzzles/clawback/drivers.py +6 -6
  456. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  457. chia/wallet/puzzles/load_clvm.py +1 -1
  458. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  459. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  460. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  461. chia/wallet/puzzles/tails.py +3 -3
  462. chia/wallet/singleton.py +5 -7
  463. chia/wallet/singleton_record.py +3 -3
  464. chia/wallet/start_wallet.py +5 -5
  465. chia/wallet/trade_manager.py +37 -58
  466. chia/wallet/trade_record.py +4 -4
  467. chia/wallet/trading/offer.py +59 -46
  468. chia/wallet/trading/trade_store.py +8 -9
  469. chia/wallet/transaction_record.py +8 -8
  470. chia/wallet/uncurried_puzzle.py +1 -2
  471. chia/wallet/util/clvm_streamable.py +12 -12
  472. chia/wallet/util/compute_hints.py +4 -5
  473. chia/wallet/util/curry_and_treehash.py +1 -2
  474. chia/wallet/util/merkle_tree.py +2 -3
  475. chia/wallet/util/peer_request_cache.py +8 -8
  476. chia/wallet/util/signing.py +85 -0
  477. chia/wallet/util/tx_config.py +15 -6
  478. chia/wallet/util/wallet_sync_utils.py +14 -16
  479. chia/wallet/util/wallet_types.py +2 -2
  480. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  481. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  482. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  483. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  484. chia/wallet/vc_wallet/vc_store.py +5 -6
  485. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  486. chia/wallet/wallet.py +50 -78
  487. chia/wallet/wallet_action_scope.py +11 -11
  488. chia/wallet/wallet_blockchain.py +12 -12
  489. chia/wallet/wallet_coin_record.py +12 -6
  490. chia/wallet/wallet_coin_store.py +24 -25
  491. chia/wallet/wallet_interested_store.py +3 -5
  492. chia/wallet/wallet_nft_store.py +10 -11
  493. chia/wallet/wallet_node.py +53 -61
  494. chia/wallet/wallet_node_api.py +5 -3
  495. chia/wallet/wallet_protocol.py +23 -23
  496. chia/wallet/wallet_puzzle_store.py +15 -18
  497. chia/wallet/wallet_request_types.py +778 -114
  498. chia/wallet/wallet_retry_store.py +1 -3
  499. chia/wallet/wallet_rpc_api.py +572 -909
  500. chia/wallet/wallet_rpc_client.py +87 -279
  501. chia/wallet/wallet_singleton_store.py +3 -4
  502. chia/wallet/wallet_state_manager.py +332 -106
  503. chia/wallet/wallet_transaction_store.py +11 -14
  504. chia/wallet/wallet_user_store.py +4 -6
  505. chia/wallet/wallet_weight_proof_handler.py +4 -4
  506. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/METADATA +6 -5
  507. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
  508. chia/apis.py +0 -21
  509. chia/consensus/check_time_locks.py +0 -57
  510. chia/data_layer/puzzles/__init__.py +0 -0
  511. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  512. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  513. chia/types/coin_record.py +0 -44
  514. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  515. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  516. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  517. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  518. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  520. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  521. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  522. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  524. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  525. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  526. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  527. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  528. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  529. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/WHEEL +0 -0
  530. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
  531. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
@@ -4,17 +4,17 @@ 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
- get_flags_for_height_and_constants,
18
18
  get_spends_for_trusted_block,
19
19
  get_spends_for_trusted_block_with_conditions,
20
20
  run_block_generator2,
@@ -28,10 +28,10 @@ from chia.consensus.get_block_generator import get_block_generator
28
28
  from chia.consensus.pos_quality import UI_ACTUAL_SPACE_CONSTANT_FACTOR
29
29
  from chia.full_node.fee_estimator_interface import FeeEstimatorInterface
30
30
  from chia.full_node.full_node import FullNode
31
+ from chia.full_node.hard_fork_utils import get_flags
31
32
  from chia.protocols.outbound_message import NodeType
32
33
  from chia.rpc.rpc_server import Endpoint, EndpointResult
33
34
  from chia.types.blockchain_format.proof_of_space import calculate_prefix_bits
34
- from chia.types.coin_record import CoinRecord
35
35
  from chia.types.generator_types import BlockGenerator, NewBlockGenerator
36
36
  from chia.types.mempool_inclusion_status import MempoolInclusionStatus
37
37
  from chia.types.unfinished_header_block import UnfinishedHeaderBlock
@@ -65,7 +65,7 @@ async def get_average_block_time(
65
65
  blockchain: Blockchain,
66
66
  base_block: BlockRecord,
67
67
  height_distance: int,
68
- ) -> Optional[uint32]:
68
+ ) -> uint32 | None:
69
69
  newer_block = await get_nearest_transaction_block(blockchain, base_block)
70
70
  if newer_block.height < 1:
71
71
  return None
@@ -100,7 +100,7 @@ class FullNodeRpcApi:
100
100
  def __init__(self, service: FullNode) -> None:
101
101
  self.service = service
102
102
  self.service_name = "chia_full_node"
103
- self.cached_blockchain_state: Optional[dict[str, Any]] = None
103
+ self.cached_blockchain_state: dict[str, Any] | None = None
104
104
  self.executor = ThreadPoolExecutor(max_workers=2, thread_name_prefix="node-rpc-")
105
105
 
106
106
  def get_routes(self) -> dict[str, Endpoint]:
@@ -139,7 +139,7 @@ class FullNodeRpcApi:
139
139
  "/get_fee_estimate": self.get_fee_estimate,
140
140
  }
141
141
 
142
- async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> list[WsRpcMessage]:
142
+ async def _state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> list[WsRpcMessage]:
143
143
  if change_data is None:
144
144
  change_data = {}
145
145
 
@@ -203,7 +203,7 @@ class FullNodeRpcApi:
203
203
  },
204
204
  }
205
205
  return res
206
- peak: Optional[BlockRecord] = self.service.blockchain.get_peak()
206
+ peak: BlockRecord | None = self.service.blockchain.get_peak()
207
207
 
208
208
  if peak is not None and peak.height > 0:
209
209
  difficulty = uint64(peak.weight - self.service.blockchain.block_record(peak.prev_hash).weight)
@@ -214,7 +214,7 @@ class FullNodeRpcApi:
214
214
 
215
215
  sync_mode: bool = self.service.sync_store.get_sync_mode() or self.service.sync_store.get_long_sync()
216
216
 
217
- sync_tip_height: Optional[uint32] = uint32(0)
217
+ sync_tip_height: uint32 | None = uint32(0)
218
218
  if sync_mode:
219
219
  target_peak = self.service.sync_store.target_peak
220
220
  if target_peak is not None:
@@ -230,7 +230,7 @@ class FullNodeRpcApi:
230
230
  else:
231
231
  sync_progress_height = uint32(0)
232
232
 
233
- average_block_time: Optional[uint32] = None
233
+ average_block_time: uint32 | None = None
234
234
  if peak is not None and peak.height > 1:
235
235
  newer_block_hex = peak.header_hash.hex()
236
236
  # Average over the last day
@@ -309,7 +309,7 @@ class FullNodeRpcApi:
309
309
  return {"eos": eos, "time_received": time_received, "reverted": False}
310
310
 
311
311
  # Otherwise we can backtrack from peak to find it in the blockchain
312
- curr: Optional[BlockRecord] = self.service.blockchain.get_peak()
312
+ curr: BlockRecord | None = self.service.blockchain.get_peak()
313
313
  if curr is None:
314
314
  raise ValueError("No blocks in the chain")
315
315
 
@@ -345,8 +345,8 @@ class FullNodeRpcApi:
345
345
 
346
346
  # Otherwise we can backtrack from peak to find it in the blockchain
347
347
  rc_challenge: bytes32 = sp.rc_vdf.challenge
348
- next_b: Optional[BlockRecord] = None
349
- curr_b_optional: Optional[BlockRecord] = self.service.blockchain.get_peak()
348
+ next_b: BlockRecord | None = None
349
+ curr_b_optional: BlockRecord | None = self.service.blockchain.get_peak()
350
350
  assert curr_b_optional is not None
351
351
  curr_b: BlockRecord = curr_b_optional
352
352
 
@@ -391,7 +391,7 @@ class FullNodeRpcApi:
391
391
  raise ValueError("No header_hash in request")
392
392
  header_hash = bytes32.from_hexstr(request["header_hash"])
393
393
 
394
- block: Optional[FullBlock] = await self.service.block_store.get_full_block(header_hash)
394
+ block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
395
395
  if block is None:
396
396
  raise ValueError(f"Block {header_hash.hex()} not found")
397
397
 
@@ -464,10 +464,10 @@ class FullNodeRpcApi:
464
464
  if peak_height < uint32(a):
465
465
  self.service.log.warning("requested block is higher than known peak ")
466
466
  break
467
- header_hash: Optional[bytes32] = self.service.blockchain.height_to_hash(uint32(a))
467
+ header_hash: bytes32 | None = self.service.blockchain.height_to_hash(uint32(a))
468
468
  if header_hash is None:
469
469
  raise ValueError(f"Height not in blockchain: {a}")
470
- record: Optional[BlockRecord] = self.service.blockchain.try_block_record(header_hash)
470
+ record: BlockRecord | None = self.service.blockchain.try_block_record(header_hash)
471
471
  if record is None:
472
472
  # Fetch from DB
473
473
  record = await self.service.blockchain.block_store.get_block_record(header_hash)
@@ -481,7 +481,7 @@ class FullNodeRpcApi:
481
481
  if "header_hash" not in request:
482
482
  raise ValueError("No header_hash in request")
483
483
  header_hash = bytes32.from_hexstr(request["header_hash"])
484
- full_block: Optional[FullBlock] = await self.service.block_store.get_full_block(header_hash)
484
+ full_block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
485
485
  if full_block is None:
486
486
  raise ValueError(f"Block {header_hash.hex()} not found")
487
487
 
@@ -489,7 +489,8 @@ class FullNodeRpcApi:
489
489
  if block_generator is None: # if block is not a transaction block.
490
490
  return {"block_spends": []}
491
491
 
492
- flags = get_flags_for_height_and_constants(full_block.height, self.service.constants)
492
+ flags = await get_flags(constants=self.service.constants, blocks=self.service.blockchain, block=full_block)
493
+
493
494
  spends = await asyncio.get_running_loop().run_in_executor(
494
495
  self.executor,
495
496
  get_spends_for_trusted_block,
@@ -505,7 +506,7 @@ class FullNodeRpcApi:
505
506
  if "header_hash" not in request:
506
507
  raise ValueError("No header_hash in request")
507
508
  header_hash = bytes32.from_hexstr(request["header_hash"])
508
- full_block: Optional[FullBlock] = await self.service.block_store.get_full_block(header_hash)
509
+ full_block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
509
510
  if full_block is None:
510
511
  raise ValueError(f"Block {header_hash.hex()} not found")
511
512
 
@@ -513,7 +514,7 @@ class FullNodeRpcApi:
513
514
  if block_generator is None: # if block is not a transaction block.
514
515
  return {"block_spends_with_conditions": []}
515
516
 
516
- flags = get_flags_for_height_and_constants(full_block.height, self.service.constants)
517
+ flags = await get_flags(constants=self.service.constants, blocks=self.service.blockchain, block=full_block)
517
518
  spends_with_conditions = await asyncio.get_running_loop().run_in_executor(
518
519
  self.executor,
519
520
  get_spends_for_trusted_block_with_conditions,
@@ -532,10 +533,10 @@ class FullNodeRpcApi:
532
533
  peak_height = self.service.blockchain.get_peak_height()
533
534
  if peak_height is None or header_height > peak_height:
534
535
  raise ValueError(f"Block height {height} not found in chain")
535
- header_hash: Optional[bytes32] = self.service.blockchain.height_to_hash(header_height)
536
+ header_hash: bytes32 | None = self.service.blockchain.height_to_hash(header_height)
536
537
  if header_hash is None:
537
538
  raise ValueError(f"Block hash {height} not found in chain")
538
- record: Optional[BlockRecord] = self.service.blockchain.try_block_record(header_hash)
539
+ record: BlockRecord | None = self.service.blockchain.try_block_record(header_hash)
539
540
  if record is None:
540
541
  # Fetch from DB
541
542
  record = await self.service.blockchain.block_store.get_block_record(header_hash)
@@ -548,7 +549,7 @@ class FullNodeRpcApi:
548
549
  raise ValueError("header_hash not in request")
549
550
  header_hash_str = request["header_hash"]
550
551
  header_hash = bytes32.from_hexstr(header_hash_str)
551
- record: Optional[BlockRecord] = self.service.blockchain.try_block_record(header_hash)
552
+ record: BlockRecord | None = self.service.blockchain.try_block_record(header_hash)
552
553
  if record is None:
553
554
  # Fetch from DB
554
555
  record = await self.service.blockchain.block_store.get_block_record(header_hash)
@@ -558,7 +559,7 @@ class FullNodeRpcApi:
558
559
  return {"block_record": record}
559
560
 
560
561
  async def get_unfinished_block_headers(self, _request: dict[str, Any]) -> EndpointResult:
561
- peak: Optional[BlockRecord] = self.service.blockchain.get_peak()
562
+ peak: BlockRecord | None = self.service.blockchain.get_peak()
562
563
  if peak is None:
563
564
  return {"headers": []}
564
565
 
@@ -606,7 +607,7 @@ class FullNodeRpcApi:
606
607
 
607
608
  # TODO: todo_v2_plots Update this calculation to take v2 plots into
608
609
  # account
609
- plot_filter_size = calculate_prefix_bits(self.service.constants, newer_block.height, PlotSize.make_v1(32))
610
+ plot_filter_size = calculate_prefix_bits(self.service.constants, newer_block.height, PlotParam.make_v1(32))
610
611
  delta_iters = newer_block.total_iters - older_block.total_iters
611
612
  weight_div_iters = delta_weight / delta_iters
612
613
  additional_difficulty_constant = self.service.constants.DIFFICULTY_CONSTANT_FACTOR
@@ -668,7 +669,7 @@ class FullNodeRpcApi:
668
669
  raise ValueError("Name not in request")
669
670
  name = bytes32.from_hexstr(request["name"])
670
671
 
671
- coin_record: Optional[CoinRecord] = await self.service.blockchain.coin_store.get_coin_record(name)
672
+ coin_record: CoinRecord | None = await self.service.blockchain.coin_store.get_coin_record(name)
672
673
  if coin_record is None:
673
674
  raise ValueError(f"Coin record 0x{name.hex()} not found")
674
675
 
@@ -781,23 +782,24 @@ class FullNodeRpcApi:
781
782
 
782
783
  header_hash = self.service.blockchain.height_to_hash(height)
783
784
  assert header_hash is not None
784
- block: Optional[FullBlock] = await self.service.block_store.get_full_block(header_hash)
785
+ block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
785
786
 
786
787
  if block is None or block.transactions_generator is None:
787
788
  raise ValueError("Invalid block or block generator")
788
789
 
789
- block_generator: Optional[BlockGenerator] = await get_block_generator(
790
+ block_generator: BlockGenerator | None = await get_block_generator(
790
791
  self.service.blockchain.lookup_block_generators, block
791
792
  )
792
793
  assert block_generator is not None
793
794
 
794
795
  try:
796
+ flags = await get_flags(constants=self.service.constants, blocks=self.service.blockchain, block=block)
795
797
  puzzle, solution = get_puzzle_and_solution_for_coin(
796
798
  block_generator.program,
797
799
  block_generator.generator_refs,
798
800
  self.service.constants.MAX_BLOCK_COST_CLVM,
799
801
  coin_record.coin,
800
- get_flags_for_height_and_constants(block.height, self.service.constants),
802
+ flags,
801
803
  )
802
804
  return {"coin_solution": CoinSpend(coin_record.coin, puzzle, solution)}
803
805
  except Exception as e:
@@ -808,7 +810,7 @@ class FullNodeRpcApi:
808
810
  raise ValueError("No header_hash in request")
809
811
  header_hash = bytes32.from_hexstr(request["header_hash"])
810
812
 
811
- block: Optional[FullBlock] = await self.service.block_store.get_full_block(header_hash)
813
+ block: FullBlock | None = await self.service.block_store.get_full_block(header_hash)
812
814
  if block is None:
813
815
  raise ValueError(f"Block {header_hash.hex()} not found")
814
816
 
@@ -862,7 +864,7 @@ class FullNodeRpcApi:
862
864
 
863
865
  # Grab best transactions from Mempool for given tip target
864
866
  async with self.service.blockchain.priority_mutex.acquire(priority=BlockchainMutexPriority.low):
865
- peak: Optional[BlockRecord] = self.service.blockchain.get_peak()
867
+ peak: BlockRecord | None = self.service.blockchain.get_peak()
866
868
 
867
869
  if peak is None:
868
870
  return {
@@ -998,7 +1000,7 @@ class FullNodeRpcApi:
998
1000
 
999
1001
  if peak is None:
1000
1002
  peak_height = uint32(0)
1001
- last_peak_timestamp: Optional[uint64] = uint64(0)
1003
+ last_peak_timestamp: uint64 | None = uint64(0)
1002
1004
  last_block_cost = 0
1003
1005
  fee_rate_last_block = 0.0
1004
1006
  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