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,7 +4,6 @@ import asyncio
4
4
  import dataclasses
5
5
  import logging
6
6
  import time
7
- from typing import Optional
8
7
 
9
8
  from chia_rs import BlockRecord, ConsensusConstants, EndOfSubSlotBundle, FullBlock, UnfinishedBlock
10
9
  from chia_rs.sized_bytes import bytes32
@@ -16,6 +15,7 @@ from chia.consensus.make_sub_epoch_summary import make_sub_epoch_summary
16
15
  from chia.consensus.multiprocess_validation import PreValidationResult
17
16
  from chia.consensus.pot_iterations import calculate_sp_interval_iters
18
17
  from chia.consensus.signage_point import SignagePoint
18
+ from chia.full_node.tx_processing_queue import PeerWithTx
19
19
  from chia.protocols import timelord_protocol
20
20
  from chia.protocols.outbound_message import Message
21
21
  from chia.types.blockchain_format.classgroup import ClassgroupElement
@@ -29,7 +29,7 @@ log = logging.getLogger(__name__)
29
29
  @streamable
30
30
  @dataclasses.dataclass(frozen=True)
31
31
  class FullNodeStorePeakResult(Streamable):
32
- added_eos: Optional[EndOfSubSlotBundle]
32
+ added_eos: EndOfSubSlotBundle | None
33
33
  new_signage_points: list[tuple[uint8, SignagePoint]]
34
34
  new_infusion_points: list[timelord_protocol.NewInfusionPointVDF]
35
35
 
@@ -38,16 +38,16 @@ class FullNodeStorePeakResult(Streamable):
38
38
  class UnfinishedBlockEntry:
39
39
  # if this is None, it means we've requested this block but not yet received
40
40
  # it
41
- unfinished_block: Optional[UnfinishedBlock]
41
+ unfinished_block: UnfinishedBlock | None
42
42
  # If this is None, it means we've initiated validation of this block, but it
43
43
  # hasn't completed yet
44
- result: Optional[PreValidationResult]
44
+ result: PreValidationResult | None
45
45
  height: uint32
46
46
 
47
47
 
48
48
  def find_best_block(
49
- result: dict[Optional[bytes32], UnfinishedBlockEntry],
50
- ) -> tuple[Optional[bytes32], Optional[UnfinishedBlock]]:
49
+ result: dict[bytes32 | None, UnfinishedBlockEntry],
50
+ ) -> tuple[bytes32 | None, UnfinishedBlock | None]:
51
51
  """
52
52
  Given a collection of UnfinishedBlocks (all with the same reward block
53
53
  hash), return the "best" one. i.e. the one with the smallest foliage hash.
@@ -64,7 +64,7 @@ def find_best_block(
64
64
  else:
65
65
  return foliage_hash, entry.unfinished_block
66
66
 
67
- def include_block(item: tuple[Optional[bytes32], UnfinishedBlockEntry]) -> bool:
67
+ def include_block(item: tuple[bytes32 | None, UnfinishedBlockEntry]) -> bool:
68
68
  foliage_hash, entry = item
69
69
  return foliage_hash is not None and entry.unfinished_block is not None
70
70
 
@@ -104,13 +104,13 @@ class FullNodeStore:
104
104
  # The inner key (the foliage hash) is Optional, where None either means
105
105
  # it's not a transaction block, or it's a block we learned about via the old
106
106
  # protocol, where all we get is the reward block hash.
107
- _unfinished_blocks: dict[bytes32, dict[Optional[bytes32], UnfinishedBlockEntry]]
107
+ _unfinished_blocks: dict[bytes32, dict[bytes32 | None, UnfinishedBlockEntry]]
108
108
 
109
109
  # Finished slots and sps from the peak's slot onwards
110
110
  # We store all 32 SPs for each slot, starting as 32 Nones and filling them as we go
111
111
  # Also stores the total iters at the end of slot
112
112
  # For the first sub-slot, EndOfSlotBundle is None
113
- finished_sub_slots: list[tuple[Optional[EndOfSubSlotBundle], list[Optional[SignagePoint]], uint128]]
113
+ finished_sub_slots: list[tuple[EndOfSubSlotBundle | None, list[SignagePoint | None], uint128]]
114
114
 
115
115
  # These caches maintain objects which depend on infused blocks in the reward chain, that we
116
116
  # might receive before the blocks themselves. The dict keys are the reward chain challenge hashes.
@@ -132,10 +132,12 @@ class FullNodeStore:
132
132
  recent_eos: LRUCache[bytes32, tuple[EndOfSubSlotBundle, float]]
133
133
 
134
134
  pending_tx_request: dict[bytes32, bytes32] # tx_id: peer_id
135
- peers_with_tx: dict[bytes32, set[bytes32]] # tx_id: set[peer_ids}
135
+ # Map of transaction ID to the map of peer ID to its hostname, fee and cost
136
+ # it advertised for that transaction.
137
+ peers_with_tx: dict[bytes32, dict[bytes32, PeerWithTx]]
136
138
  tx_fetch_tasks: dict[bytes32, asyncio.Task[None]] # Task id: task
137
- serialized_wp_message: Optional[Message]
138
- serialized_wp_message_tip: Optional[bytes32]
139
+ serialized_wp_message: Message | None
140
+ serialized_wp_message_tip: bytes32 | None
139
141
 
140
142
  max_seen_unfinished_blocks: int
141
143
 
@@ -162,7 +164,7 @@ class FullNodeStore:
162
164
  self.max_seen_unfinished_blocks = 1000
163
165
 
164
166
  def is_requesting_unfinished_block(
165
- self, reward_block_hash: bytes32, foliage_hash: Optional[bytes32]
167
+ self, reward_block_hash: bytes32, foliage_hash: bytes32 | None
166
168
  ) -> tuple[bool, int]:
167
169
  """
168
170
  Asks if we are already requesting this specific unfinished block (given
@@ -180,11 +182,11 @@ class FullNodeStore:
180
182
  else:
181
183
  return (foliage_hash in ents, len(ents))
182
184
 
183
- def mark_requesting_unfinished_block(self, reward_block_hash: bytes32, foliage_hash: Optional[bytes32]) -> None:
185
+ def mark_requesting_unfinished_block(self, reward_block_hash: bytes32, foliage_hash: bytes32 | None) -> None:
184
186
  ents = self._unfinished_blocks.setdefault(reward_block_hash, {})
185
187
  ents.setdefault(foliage_hash, UnfinishedBlockEntry(None, None, uint32(0)))
186
188
 
187
- def remove_requesting_unfinished_block(self, reward_block_hash: bytes32, foliage_hash: Optional[bytes32]) -> None:
189
+ def remove_requesting_unfinished_block(self, reward_block_hash: bytes32, foliage_hash: bytes32 | None) -> None:
188
190
  reward_ents = self._unfinished_blocks.get(reward_block_hash)
189
191
  if reward_ents is None:
190
192
  return
@@ -209,7 +211,7 @@ class FullNodeStore:
209
211
 
210
212
  def get_candidate_block(
211
213
  self, quality_string: bytes32, backup: bool = False
212
- ) -> Optional[tuple[uint32, UnfinishedBlock]]:
214
+ ) -> tuple[uint32, UnfinishedBlock] | None:
213
215
  if backup:
214
216
  return self.candidate_backup_blocks.get(quality_string, None)
215
217
  else:
@@ -254,7 +256,7 @@ class FullNodeStore:
254
256
  unfinished_block, result, height
255
257
  )
256
258
 
257
- def get_unfinished_block(self, unfinished_reward_hash: bytes32) -> Optional[UnfinishedBlock]:
259
+ def get_unfinished_block(self, unfinished_reward_hash: bytes32) -> UnfinishedBlock | None:
258
260
  result = self._unfinished_blocks.get(unfinished_reward_hash, None)
259
261
  if result is None:
260
262
  return None
@@ -269,8 +271,8 @@ class FullNodeStore:
269
271
  return block
270
272
 
271
273
  def get_unfinished_block2(
272
- self, unfinished_reward_hash: bytes32, unfinished_foliage_hash: Optional[bytes32]
273
- ) -> tuple[Optional[UnfinishedBlock], int, bool]:
274
+ self, unfinished_reward_hash: bytes32, unfinished_foliage_hash: bytes32 | None
275
+ ) -> tuple[UnfinishedBlock | None, int, bool]:
274
276
  """
275
277
  Looks up an UnfinishedBlock by its reward block hash and foliage hash.
276
278
  If the foliage hash is None (e.g. it's not a transaction block), we fall
@@ -304,7 +306,7 @@ class FullNodeStore:
304
306
  # have a foliage hash. That's why unfinished_foliage_hash is not Optional.
305
307
  def get_unfinished_block_result(
306
308
  self, unfinished_reward_hash: bytes32, unfinished_foliage_hash: bytes32
307
- ) -> Optional[UnfinishedBlockEntry]:
309
+ ) -> UnfinishedBlockEntry | None:
308
310
  result = self._unfinished_blocks.get(unfinished_reward_hash, None)
309
311
  if result is None:
310
312
  return None
@@ -323,7 +325,7 @@ class FullNodeStore:
323
325
  def clear_unfinished_blocks_below(self, height: uint32) -> None:
324
326
  del_partial: list[bytes32] = []
325
327
  for partial_hash, entry in self._unfinished_blocks.items():
326
- del_foliage: list[Optional[bytes32]] = []
328
+ del_foliage: list[bytes32 | None] = []
327
329
  for foliage_hash, ube in entry.items():
328
330
  if ube.height < height:
329
331
  del_foliage.append(foliage_hash)
@@ -392,7 +394,7 @@ class FullNodeStore:
392
394
  def clear_slots(self) -> None:
393
395
  self.finished_sub_slots.clear()
394
396
 
395
- def get_sub_slot(self, challenge_hash: bytes32) -> Optional[tuple[EndOfSubSlotBundle, int, uint128]]:
397
+ def get_sub_slot(self, challenge_hash: bytes32) -> tuple[EndOfSubSlotBundle, int, uint128] | None:
396
398
  assert len(self.finished_sub_slots) >= 1
397
399
  for index, (sub_slot, _, total_iters) in enumerate(self.finished_sub_slots):
398
400
  if sub_slot is not None and sub_slot.challenge_chain.get_hash() == challenge_hash:
@@ -407,11 +409,11 @@ class FullNodeStore:
407
409
  self,
408
410
  eos: EndOfSubSlotBundle,
409
411
  blocks: BlockRecordsProtocol,
410
- peak: Optional[BlockRecord],
412
+ peak: BlockRecord | None,
411
413
  next_sub_slot_iters: uint64,
412
414
  next_difficulty: uint64,
413
- peak_full_block: Optional[FullBlock],
414
- ) -> Optional[list[timelord_protocol.NewInfusionPointVDF]]:
415
+ peak_full_block: FullBlock | None,
416
+ ) -> list[timelord_protocol.NewInfusionPointVDF] | None:
415
417
  """
416
418
  Returns false if not added. Returns a list if added. The list contains all infusion points that depended
417
419
  on this sub slot
@@ -427,8 +429,8 @@ class FullNodeStore:
427
429
  rc_challenge: bytes32 = (
428
430
  last_slot.reward_chain.get_hash() if last_slot is not None else self.constants.GENESIS_CHALLENGE
429
431
  )
430
- icc_challenge: Optional[bytes32] = None
431
- icc_iters: Optional[uint64] = None
432
+ icc_challenge: bytes32 | None = None
433
+ icc_iters: uint64 | None = None
432
434
 
433
435
  # Skip if already present
434
436
  for slot, _, _ in self.finished_sub_slots:
@@ -678,7 +680,7 @@ class FullNodeStore:
678
680
  self,
679
681
  index: uint8,
680
682
  blocks: BlockRecordsProtocol,
681
- peak: Optional[BlockRecord],
683
+ peak: BlockRecord | None,
682
684
  next_sub_slot_iters: uint64,
683
685
  signage_point: SignagePoint,
684
686
  skip_vdf_validation: bool = False,
@@ -814,7 +816,7 @@ class FullNodeStore:
814
816
  self.add_to_future_sp(signage_point, index)
815
817
  return False
816
818
 
817
- def get_signage_point(self, cc_signage_point: bytes32) -> Optional[SignagePoint]:
819
+ def get_signage_point(self, cc_signage_point: bytes32) -> SignagePoint | None:
818
820
  assert len(self.finished_sub_slots) >= 1
819
821
  if cc_signage_point == self.constants.GENESIS_CHALLENGE:
820
822
  return SignagePoint(None, None, None, None)
@@ -831,7 +833,7 @@ class FullNodeStore:
831
833
 
832
834
  def get_signage_point_by_index_and_cc_output(
833
835
  self, cc_signage_point: bytes32, challenge: bytes32, index: uint8
834
- ) -> Optional[SignagePoint]:
836
+ ) -> SignagePoint | None:
835
837
  assert len(self.finished_sub_slots) >= 1
836
838
  for sub_slot, sps, _ in self.finished_sub_slots:
837
839
  if sub_slot is not None:
@@ -842,7 +844,7 @@ class FullNodeStore:
842
844
  if index == 0:
843
845
  # first SP in the sub slot
844
846
  return SignagePoint(None, None, None, None)
845
- sp: Optional[SignagePoint] = sps[index]
847
+ sp: SignagePoint | None = sps[index]
846
848
  if sp is None:
847
849
  return None
848
850
  assert sp.cc_vdf is not None
@@ -852,7 +854,7 @@ class FullNodeStore:
852
854
 
853
855
  def get_signage_point_by_index(
854
856
  self, challenge_hash: bytes32, index: uint8, last_rc_infusion: bytes32
855
- ) -> Optional[SignagePoint]:
857
+ ) -> SignagePoint | None:
856
858
  assert len(self.finished_sub_slots) >= 1
857
859
  for sub_slot, sps, _ in self.finished_sub_slots:
858
860
  if sub_slot is not None:
@@ -863,7 +865,7 @@ class FullNodeStore:
863
865
  if cc_hash == challenge_hash:
864
866
  if index == 0:
865
867
  return SignagePoint(None, None, None, None)
866
- sp: Optional[SignagePoint] = sps[index]
868
+ sp: SignagePoint | None = sps[index]
867
869
  if sp is not None:
868
870
  assert sp.rc_vdf is not None
869
871
  if sp.rc_vdf.challenge == last_rc_infusion:
@@ -885,7 +887,7 @@ class FullNodeStore:
885
887
  if cc_hash == challenge_hash:
886
888
  found_rc_hash = False
887
889
  for i in range(index):
888
- sp: Optional[SignagePoint] = sps[i]
890
+ sp: SignagePoint | None = sps[i]
889
891
  if sp is not None and sp.rc_vdf is not None and sp.rc_vdf.challenge == last_rc_infusion:
890
892
  found_rc_hash = True
891
893
  sp = sps[index]
@@ -902,9 +904,9 @@ class FullNodeStore:
902
904
  self,
903
905
  peak: BlockRecord,
904
906
  peak_full_block: FullBlock,
905
- sp_sub_slot: Optional[EndOfSubSlotBundle], # None if not overflow, or in first/second slot
906
- ip_sub_slot: Optional[EndOfSubSlotBundle], # None if in first slot
907
- fork_block: Optional[BlockRecord],
907
+ sp_sub_slot: EndOfSubSlotBundle | None, # None if not overflow, or in first/second slot
908
+ ip_sub_slot: EndOfSubSlotBundle | None, # None if in first slot
909
+ fork_block: BlockRecord | None,
908
910
  blocks: BlockRecordsProtocol,
909
911
  next_sub_slot_iters: uint64,
910
912
  next_difficulty: uint64,
@@ -922,8 +924,8 @@ class FullNodeStore:
922
924
  self.initialize_genesis_sub_slot()
923
925
  else:
924
926
  # This is not the first sub-slot in the chain
925
- sp_sub_slot_sps: list[Optional[SignagePoint]] = [None] * self.constants.NUM_SPS_SUB_SLOT
926
- ip_sub_slot_sps: list[Optional[SignagePoint]] = [None] * self.constants.NUM_SPS_SUB_SLOT
927
+ sp_sub_slot_sps: list[SignagePoint | None] = [None] * self.constants.NUM_SPS_SUB_SLOT
928
+ ip_sub_slot_sps: list[SignagePoint | None] = [None] * self.constants.NUM_SPS_SUB_SLOT
927
929
 
928
930
  if fork_block is not None and fork_block.sub_slot_iters != peak.sub_slot_iters:
929
931
  # If there was a reorg and a difficulty adjustment, just clear all the slots
@@ -939,7 +941,7 @@ class FullNodeStore:
939
941
  if fork_block is None:
940
942
  # If this is not a reorg, we still want to remove signage points after the new peak
941
943
  fork_block = peak
942
- replaced_sps: list[Optional[SignagePoint]] = [] # index 0 is the end of sub slot
944
+ replaced_sps: list[SignagePoint | None] = [] # index 0 is the end of sub slot
943
945
  for i, sp in enumerate(sps):
944
946
  if (total_iters + i * interval_iters) < fork_block.total_iters:
945
947
  # Sps before the fork point as still valid
@@ -968,7 +970,7 @@ class FullNodeStore:
968
970
  ip_sub_slot_total_iters = peak.ip_sub_slot_total_iters(self.constants)
969
971
  self.finished_sub_slots.append((ip_sub_slot, ip_sub_slot_sps, ip_sub_slot_total_iters))
970
972
 
971
- new_eos: Optional[EndOfSubSlotBundle] = None
973
+ new_eos: EndOfSubSlotBundle | None = None
972
974
  new_sps: list[tuple[uint8, SignagePoint]] = []
973
975
  new_ips: list[timelord_protocol.NewInfusionPointVDF] = []
974
976
 
@@ -1006,9 +1008,9 @@ class FullNodeStore:
1006
1008
  def get_finished_sub_slots(
1007
1009
  self,
1008
1010
  block_records: BlockRecordsProtocol,
1009
- prev_b: Optional[BlockRecord],
1011
+ prev_b: BlockRecord | None,
1010
1012
  last_challenge_to_add: bytes32,
1011
- ) -> Optional[list[EndOfSubSlotBundle]]:
1013
+ ) -> list[EndOfSubSlotBundle] | None:
1012
1014
  """
1013
1015
  Retrieves the EndOfSubSlotBundles that are in the store either:
1014
1016
  1. From the starting challenge if prev_b is None
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Callable, Optional
3
+ from collections.abc import Callable
4
4
 
5
5
  from chia_rs.sized_bytes import bytes32
6
6
 
@@ -16,7 +16,7 @@ def get_hints_and_subscription_coin_ids(
16
16
  # Returns the hints that we need to add to the DB, and the coin ids that need to be looked up
17
17
 
18
18
  # Finds the coin IDs that we need to lookup in order to notify wallets of hinted transactions
19
- hint: Optional[bytes]
19
+ hint: bytes | None
20
20
  hints_to_add: list[tuple[bytes32, bytes]] = []
21
21
 
22
22
  # Goes through additions and removals for each block and flattens to a map and a set
chia/full_node/mempool.py CHANGED
@@ -7,11 +7,9 @@ from dataclasses import dataclass
7
7
  from datetime import datetime
8
8
  from enum import Enum
9
9
  from time import monotonic
10
- from typing import Optional
11
10
 
12
11
  from chia_rs import (
13
12
  DONT_VALIDATE_SIGNATURE,
14
- MEMPOOL_MODE,
15
13
  AugSchemeMPL,
16
14
  BlockBuilder,
17
15
  Coin,
@@ -74,7 +72,7 @@ class MempoolRemoveInfo:
74
72
  @dataclass
75
73
  class MempoolAddInfo:
76
74
  removals: list[MempoolRemoveInfo]
77
- error: Optional[Err]
75
+ error: Err | None
78
76
 
79
77
 
80
78
  class MempoolRemoveReason(Enum):
@@ -146,7 +144,7 @@ class Mempool:
146
144
  self.mempool_info: MempoolInfo = mempool_info
147
145
  self.fee_estimator: FeeEstimatorInterface = fee_estimator
148
146
 
149
- def __del__(self) -> None:
147
+ def close(self) -> None:
150
148
  self._db_conn.close()
151
149
 
152
150
  def _row_to_item(self, row: sqlite3.Row) -> MempoolItem:
@@ -255,7 +253,7 @@ class Mempool:
255
253
  row = cursor.fetchone()
256
254
  return int(row[0])
257
255
 
258
- def get_item_by_id(self, item_id: bytes32) -> Optional[MempoolItem]:
256
+ def get_item_by_id(self, item_id: bytes32) -> MempoolItem | None:
259
257
  with self._db_conn:
260
258
  cursor = self._db_conn.execute("SELECT * FROM tx WHERE name=?", (item_id,))
261
259
  row = cursor.fetchone()
@@ -289,7 +287,7 @@ class Mempool:
289
287
  items.extend(self._row_to_item(row) for row in cursor)
290
288
  return items
291
289
 
292
- def get_min_fee_rate(self, cost: int) -> Optional[float]:
290
+ def get_min_fee_rate(self, cost: int) -> float | None:
293
291
  """
294
292
  Gets the minimum fpc rate that a transaction with specified cost will need in order to get included.
295
293
  """
@@ -505,15 +503,15 @@ class Mempool:
505
503
  def create_block_generator(
506
504
  self,
507
505
  constants: ConsensusConstants,
508
- height: uint32,
506
+ prev_tx_height: uint32,
509
507
  timeout: float,
510
- ) -> Optional[NewBlockGenerator]:
508
+ ) -> NewBlockGenerator | None:
511
509
  """
512
- height is needed in case we fast-forward a transaction and we need to
513
- re-run its puzzle.
510
+ prev_tx_height is needed in case we fast-forward a transaction and we
511
+ need to re-run its puzzle.
514
512
  """
515
513
 
516
- mempool_bundle = self.create_bundle_from_mempool_items(constants, height, timeout)
514
+ mempool_bundle = self.create_bundle_from_mempool_items(constants, prev_tx_height, timeout)
517
515
  if mempool_bundle is None:
518
516
  return None
519
517
 
@@ -535,7 +533,7 @@ class Mempool:
535
533
  f"spends: {len(removals)} additions: {len(additions)}",
536
534
  )
537
535
 
538
- flags = get_flags_for_height_and_constants(height, constants) | MEMPOOL_MODE | DONT_VALIDATE_SIGNATURE
536
+ flags = get_flags_for_height_and_constants(prev_tx_height, constants) | DONT_VALIDATE_SIGNATURE
539
537
 
540
538
  err, conds = run_block_generator2(
541
539
  block_program,
@@ -551,7 +549,7 @@ class Mempool:
551
549
  if err is not None: # pragma: no cover
552
550
  log.error(
553
551
  f"Failed to compute block cost during farming: {err} "
554
- f"height: {height} "
552
+ f"prev-tx-height: {prev_tx_height} "
555
553
  f"generator: {bytes(block_program).hex()}"
556
554
  )
557
555
  return None
@@ -570,8 +568,8 @@ class Mempool:
570
568
  )
571
569
 
572
570
  def create_bundle_from_mempool_items(
573
- self, constants: ConsensusConstants, height: uint32, timeout: float = 1.0
574
- ) -> Optional[tuple[SpendBundle, list[Coin]]]:
571
+ self, constants: ConsensusConstants, prev_tx_height: uint32, timeout: float = 1.0
572
+ ) -> tuple[SpendBundle, list[Coin]] | None:
575
573
  cost_sum = 0 # Checks that total cost does not exceed block maximum
576
574
  fee_sum = 0 # Checks that total fees don't exceed 64 bits
577
575
  processed_spend_bundles = 0
@@ -624,7 +622,7 @@ class Mempool:
624
622
  cost_saving = 0
625
623
  else:
626
624
  bundle_coin_spends = singleton_ff.process_fast_forward_spends(
627
- mempool_item=item, height=height, constants=constants
625
+ mempool_item=item, prev_tx_height=prev_tx_height, constants=constants
628
626
  )
629
627
  unique_coin_spends, cost_saving, unique_additions = dedup_coin_spends.get_deduplication_info(
630
628
  bundle_coin_spends=bundle_coin_spends
@@ -687,8 +685,8 @@ class Mempool:
687
685
  return agg, additions
688
686
 
689
687
  def create_block_generator2(
690
- self, constants: ConsensusConstants, height: uint32, timeout: float
691
- ) -> Optional[NewBlockGenerator]:
688
+ self, constants: ConsensusConstants, prev_tx_height: uint32, timeout: float
689
+ ) -> NewBlockGenerator | None:
692
690
  fee_sum = 0 # Checks that total fees don't exceed 64 bits
693
691
  additions: list[Coin] = []
694
692
  removals: list[Coin] = []
@@ -723,7 +721,7 @@ class Mempool:
723
721
  assert item.conds is not None
724
722
  cost = item.conds.condition_cost + item.conds.execution_cost
725
723
  bundle_coin_spends = singleton_ff.process_fast_forward_spends(
726
- mempool_item=item, height=height, constants=constants
724
+ mempool_item=item, prev_tx_height=prev_tx_height, constants=constants
727
725
  )
728
726
  unique_coin_spends, cost_saving, unique_additions = dedup_coin_spends.get_deduplication_info(
729
727
  bundle_coin_spends=bundle_coin_spends