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
@@ -5,7 +5,7 @@ import json
5
5
  import logging
6
6
  from dataclasses import dataclass, field, replace
7
7
  from pathlib import Path
8
- from typing import Any, Optional, Union, cast
8
+ from typing import Any, cast
9
9
 
10
10
  import aiohttp
11
11
  import pytest
@@ -94,7 +94,7 @@ class ChiaPlottersBladebitArgsCase:
94
94
  pool_contract: str = "txch1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
95
95
  compress: int = 1
96
96
  device: int = 0
97
- hybrid_disk_mode: Optional[int] = None
97
+ hybrid_disk_mode: int | None = None
98
98
  farmer_pk: str = ""
99
99
  final_dir: str = ""
100
100
  marks: Marks = ()
@@ -147,7 +147,7 @@ class ChiaPlottersBladebitArgsCase:
147
147
  class Service:
148
148
  running: bool
149
149
 
150
- def poll(self) -> Optional[int]:
150
+ def poll(self) -> int | None:
151
151
  return None if self.running else 1
152
152
 
153
153
 
@@ -155,8 +155,8 @@ class Service:
155
155
  @dataclass
156
156
  class Daemon:
157
157
  # Instance variables used by WebSocketServer.is_running()
158
- services: dict[str, Union[list[Service], Service]]
159
- connections: dict[str, Optional[list[Any]]]
158
+ services: dict[str, list[Service] | Service]
159
+ connections: dict[str, list[Any] | None]
160
160
 
161
161
  # Instance variables used by WebSocketServer.get_wallet_addresses()
162
162
  net_config: dict[str, Any] = field(default_factory=dict)
@@ -314,9 +314,9 @@ label_newline_or_tab_response_data = {
314
314
  def assert_response(
315
315
  response: aiohttp.http_websocket.WSMessage,
316
316
  expected_response_data: dict[str, Any],
317
- request_id: Optional[str] = None,
317
+ request_id: str | None = None,
318
318
  ack: bool = True,
319
- command: Optional[str] = None,
319
+ command: str | None = None,
320
320
  ) -> None:
321
321
  # Expect: JSON response
322
322
  assert response.type == aiohttp.WSMsgType.TEXT
@@ -332,7 +332,7 @@ def assert_response(
332
332
 
333
333
 
334
334
  def assert_response_success_only(
335
- response: aiohttp.http_websocket.WSMessage, request_id: Optional[str] = None
335
+ response: aiohttp.http_websocket.WSMessage, request_id: str | None = None
336
336
  ) -> dict[str, Any]:
337
337
  # Expect: JSON response
338
338
  assert response.type == aiohttp.WSMsgType.TEXT
@@ -1015,7 +1015,7 @@ async def test_add_private_key(daemon_connection_and_temp_keychain):
1015
1015
  # Expect: Failure due to missing mnemonic
1016
1016
  assert_response(await ws.receive(), missing_mnemonic_response_data)
1017
1017
 
1018
- # When: using a mmnemonic with an incorrect word (typo)
1018
+ # When: using a mnemonic with an incorrect word (typo)
1019
1019
  await ws.send_str(create_payload("add_private_key", {"mnemonic": mnemonic_with_typo}, "test", "daemon"))
1020
1020
  # Expect: Failure due to misspelled mnemonic
1021
1021
  assert_response(await ws.receive(), mnemonic_with_typo_response_data)
@@ -1025,7 +1025,7 @@ async def test_add_private_key(daemon_connection_and_temp_keychain):
1025
1025
  # Expect: Failure due to invalid mnemonic
1026
1026
  assert_response(await ws.receive(), invalid_mnemonic_length_response_data)
1027
1027
 
1028
- # When: using an incorrect mnemnonic
1028
+ # When: using an incorrect mnemonic
1029
1029
  await ws.send_str(create_payload("add_private_key", {"mnemonic": " ".join(["abandon"] * 24)}, "test", "daemon"))
1030
1030
  # Expect: Failure due to checksum error
1031
1031
  assert_response(await ws.receive(), invalid_mnemonic_response_data)
@@ -1340,7 +1340,7 @@ async def test_bad_json(daemon_connection_and_temp_keychain: tuple[aiohttp.Clien
1340
1340
  ),
1341
1341
  RouteCase(
1342
1342
  route="unknown_command",
1343
- description="non-existant route",
1343
+ description="non-existent route",
1344
1344
  request={},
1345
1345
  response={"success": False, "error": "unknown_command unknown_command"},
1346
1346
  ),
@@ -4,8 +4,8 @@ import os
4
4
  import pathlib
5
5
  import sys
6
6
  import time
7
- from collections.abc import AsyncIterable, Awaitable, Iterator
8
- from typing import Any, Callable
7
+ from collections.abc import AsyncIterable, Awaitable, Callable, Iterator
8
+ from typing import Any
9
9
 
10
10
  import pytest
11
11
 
@@ -16,7 +16,7 @@ from copy import deepcopy
16
16
  from dataclasses import dataclass
17
17
  from enum import IntEnum
18
18
  from pathlib import Path
19
- from typing import Any, Optional, cast
19
+ from typing import Any, cast
20
20
 
21
21
  import anyio
22
22
  import chia_rs.datalayer
@@ -73,7 +73,6 @@ from chia.util.timing import adjusted_timeout, backoff_times
73
73
  from chia.wallet.trading.offer import Offer as TradingOffer
74
74
  from chia.wallet.transaction_record import TransactionRecord
75
75
  from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
76
- from chia.wallet.wallet import Wallet
77
76
  from chia.wallet.wallet_node import WalletNode
78
77
  from chia.wallet.wallet_request_types import CheckOfferValidity, DLLatestSingleton
79
78
  from chia.wallet.wallet_rpc_api import WalletRpcApi
@@ -97,10 +96,10 @@ class InterfaceLayer(enum.Enum):
97
96
  async def init_data_layer_service(
98
97
  wallet_rpc_port: uint16,
99
98
  bt: BlockTools,
100
- db_path: Optional[Path] = None,
101
- wallet_service: Optional[WalletService] = None,
99
+ db_path: Path | None = None,
100
+ wallet_service: WalletService | None = None,
102
101
  manage_data_interval: int = 5,
103
- maximum_full_file_count: Optional[int] = None,
102
+ maximum_full_file_count: int | None = None,
104
103
  enable_batch_autoinsert: bool = True,
105
104
  group_files_by_store: bool = False,
106
105
  ) -> AsyncIterator[DataLayerService]:
@@ -131,9 +130,9 @@ async def init_data_layer(
131
130
  wallet_rpc_port: uint16,
132
131
  bt: BlockTools,
133
132
  db_path: Path,
134
- wallet_service: Optional[WalletService] = None,
133
+ wallet_service: WalletService | None = None,
135
134
  manage_data_interval: int = 5,
136
- maximum_full_file_count: Optional[int] = None,
135
+ maximum_full_file_count: int | None = None,
137
136
  group_files_by_store: bool = False,
138
137
  enable_batch_autoinsert: bool = True,
139
138
  ) -> AsyncIterator[DataLayer]:
@@ -763,6 +762,7 @@ async def test_get_owned_stores(
763
762
  ph = await action_scope.get_puzzle_hash(wallet_node.wallet_state_manager)
764
763
  for i in range(num_blocks):
765
764
  await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
765
+ await full_node_api.wait_for_wallet_synced(wallet_node, timeout=30)
766
766
  funds = sum(
767
767
  calculate_pool_reward(uint32(i)) + calculate_base_farmer_reward(uint32(i)) for i in range(1, num_blocks)
768
768
  )
@@ -777,11 +777,11 @@ async def test_get_owned_stores(
777
777
  assert res is not None
778
778
  launcher_id = bytes32.from_hexstr(res["id"])
779
779
  expected_store_ids.append(launcher_id)
780
+ await full_node_api.wait_for_wallet_synced(wallet_node)
780
781
 
781
782
  await time_out_assert(4, check_mempool_spend_count, True, full_node_api, 3)
782
- for i in range(num_blocks):
783
- await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
784
- await asyncio.sleep(0.5)
783
+ await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
784
+ await full_node_api.wait_for_wallet_synced(wallet_node)
785
785
 
786
786
  response = await data_rpc_api.get_owned_stores(request={})
787
787
  store_ids = sorted(bytes32.from_hexstr(id) for id in response["store_ids"])
@@ -845,6 +845,11 @@ class OfferSetup:
845
845
  maker: StoreSetup
846
846
  taker: StoreSetup
847
847
  full_node_api: FullNodeSimulator
848
+ wallet_nodes: list[WalletNode]
849
+
850
+ async def wait_for_wallets_synced(self, timeout: int = 30) -> None:
851
+ for node in self.wallet_nodes:
852
+ await self.full_node_api.wait_for_wallet_synced(wallet_node=node, timeout=timeout)
848
853
 
849
854
 
850
855
  @pytest.fixture(name="offer_setup")
@@ -857,16 +862,17 @@ async def offer_setup_fixture(
857
862
  [full_node_service], wallet_services, bt = two_wallet_nodes_services
858
863
  enable_batch_autoinsertion_settings = getattr(request, "param", (True, True))
859
864
  full_node_api = full_node_service._api
860
- wallets: list[Wallet] = []
865
+ wallets: list[WalletNode] = []
861
866
  for wallet_service in wallet_services:
862
867
  wallet_node = wallet_service._node
863
868
  assert wallet_node.server is not None
864
869
  await wallet_node.server.start_client(PeerInfo(self_hostname, full_node_api.server.get_port()), None)
865
870
  assert wallet_node.wallet_state_manager is not None
866
871
  wallet = wallet_node.wallet_state_manager.main_wallet
867
- wallets.append(wallet)
872
+ wallets.append(wallet_node)
868
873
 
869
874
  await full_node_api.farm_blocks_to_wallet(count=1, wallet=wallet, timeout=60)
875
+ await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=30)
870
876
 
871
877
  async with contextlib.AsyncExitStack() as exit_stack:
872
878
  store_setups: list[StoreSetup] = []
@@ -951,6 +957,7 @@ async def offer_setup_fixture(
951
957
  data_rpc_client=taker.data_rpc_client,
952
958
  ),
953
959
  full_node_api=full_node_api,
960
+ wallet_nodes=wallets,
954
961
  )
955
962
 
956
963
  maker.data_rpc_client.close()
@@ -1018,6 +1025,7 @@ async def populate_offer_setup(offer_setup: OfferSetup, count: int) -> OfferSetu
1018
1025
  data_rpc_client=offer_setup.taker.data_rpc_client,
1019
1026
  ),
1020
1027
  full_node_api=offer_setup.full_node_api,
1028
+ wallet_nodes=offer_setup.wallet_nodes,
1021
1029
  )
1022
1030
 
1023
1031
 
@@ -1026,7 +1034,7 @@ async def process_for_data_layer_keys(
1026
1034
  full_node_api: FullNodeSimulator,
1027
1035
  data_layer: DataLayer,
1028
1036
  store_id: bytes32,
1029
- expected_value: Optional[bytes] = None,
1037
+ expected_value: bytes | None = None,
1030
1038
  ) -> None:
1031
1039
  for sleep_time in backoff_times():
1032
1040
  try:
@@ -1843,6 +1851,7 @@ async def test_make_and_cancel_offer(offer_setup: OfferSetup, reference: MakeAnd
1843
1851
  # due to differences in chain progression, the exact offer and trade id may differ from the reference
1844
1852
  # assert maker_response == {"success": True, "offer": reference.make_offer_response}
1845
1853
  assert maker_response["success"] is True
1854
+ await offer_setup.wait_for_wallets_synced()
1846
1855
 
1847
1856
  cancel_request = {
1848
1857
  "trade_id": maker_response["offer"]["trade_id"],
@@ -1865,6 +1874,8 @@ async def test_make_and_cancel_offer(offer_setup: OfferSetup, reference: MakeAnd
1865
1874
  else: # pragma: no cover
1866
1875
  assert False, "offer was not cancelled"
1867
1876
 
1877
+ await offer_setup.wait_for_wallets_synced()
1878
+
1868
1879
  taker_request = {
1869
1880
  "offer": maker_response["offer"],
1870
1881
  "fee": 0,
@@ -1926,6 +1937,7 @@ async def test_make_and_cancel_offer_then_update(
1926
1937
  # due to differences in chain progression, the exact offer and trade id may differ from the reference
1927
1938
  # assert maker_response == {"success": True, "offer": reference.make_offer_response}
1928
1939
  assert maker_response["success"] is True
1940
+ await offer_setup.wait_for_wallets_synced()
1929
1941
 
1930
1942
  cancel_request = {
1931
1943
  "trade_id": maker_response["offer"]["trade_id"],
@@ -2015,6 +2027,7 @@ async def test_make_and_cancel_offer_not_secure_clears_pending_roots(
2015
2027
  # due to differences in chain progression, the exact offer and trade id may differ from the reference
2016
2028
  # assert maker_response == {"success": True, "offer": reference.make_offer_response}
2017
2029
  assert maker_response["success"] is True
2030
+ await offer_setup.wait_for_wallets_synced()
2018
2031
 
2019
2032
  cancel_request = {
2020
2033
  "trade_id": maker_response["offer"]["trade_id"],
@@ -2568,6 +2581,7 @@ async def populate_proof_setup(offer_setup: OfferSetup, count: int) -> OfferSetu
2568
2581
  data_rpc_client=offer_setup.taker.data_rpc_client,
2569
2582
  ),
2570
2583
  full_node_api=offer_setup.full_node_api,
2584
+ wallet_nodes=offer_setup.wallet_nodes,
2571
2585
  )
2572
2586
 
2573
2587
 
@@ -3054,7 +3068,7 @@ async def test_pagination_cmds(
3054
3068
  one_wallet_and_one_simulator_services: SimulatorsAndWalletsServices,
3055
3069
  tmp_path: Path,
3056
3070
  layer: InterfaceLayer,
3057
- max_page_size: Optional[int],
3071
+ max_page_size: int | None,
3058
3072
  bt: BlockTools,
3059
3073
  ) -> None:
3060
3074
  wallet_rpc_api, full_node_api, wallet_rpc_port, ph, bt = await init_wallet_and_node(
@@ -10,12 +10,12 @@ import re
10
10
  import shutil
11
11
  import statistics
12
12
  import time
13
- from collections.abc import Awaitable
13
+ from collections.abc import Awaitable, Callable
14
14
  from dataclasses import dataclass
15
15
  from hashlib import sha256
16
16
  from pathlib import Path
17
17
  from random import Random
18
- from typing import Any, BinaryIO, Callable, Optional
18
+ from typing import Any, BinaryIO
19
19
 
20
20
  import aiohttp
21
21
  import chia_rs.datalayer
@@ -290,7 +290,7 @@ async def test_get_ancestors_optimized(data_store: DataStore, store_id: bytes32)
290
290
  node_count = 0
291
291
  node_hashes: list[bytes32] = []
292
292
  hash_to_key: dict[bytes32, bytes] = {}
293
- node_hash: Optional[bytes32]
293
+ node_hash: bytes32 | None
294
294
 
295
295
  for i in range(1000):
296
296
  is_insert = False
@@ -1223,7 +1223,7 @@ async def test_server_http_ban(
1223
1223
  async def mock_http_download(
1224
1224
  target_filename_path: Path,
1225
1225
  filename: str,
1226
- proxy_url: Optional[str],
1226
+ proxy_url: str | None,
1227
1227
  server_info: ServerInfo,
1228
1228
  timeout: aiohttp.ClientTimeout,
1229
1229
  log: logging.Logger,
@@ -1278,7 +1278,7 @@ async def test_server_http_ban(
1278
1278
  assert sinfo.ignore_till == start_timestamp # we don't increase on second failure
1279
1279
 
1280
1280
 
1281
- async def get_first_generation(data_store: DataStore, node_hash: bytes32, store_id: bytes32) -> Optional[int]:
1281
+ async def get_first_generation(data_store: DataStore, node_hash: bytes32, store_id: bytes32) -> int | None:
1282
1282
  async with data_store.db_wrapper.reader() as reader:
1283
1283
  cursor = await reader.execute(
1284
1284
  "SELECT generation FROM nodes WHERE hash = ? AND store_id = ?",
@@ -1301,8 +1301,8 @@ async def write_tree_to_file_old_format(
1301
1301
  node_hash: bytes32,
1302
1302
  store_id: bytes32,
1303
1303
  writer: BinaryIO,
1304
- merkle_blob: Optional[MerkleBlob] = None,
1305
- hash_to_index: Optional[dict[bytes32, TreeIndex]] = None,
1304
+ merkle_blob: MerkleBlob | None = None,
1305
+ hash_to_index: dict[bytes32, TreeIndex] | None = None,
1306
1306
  ) -> None:
1307
1307
  if node_hash == bytes32.zeros:
1308
1308
  return
@@ -1760,7 +1760,7 @@ async def test_insert_from_delta_file(
1760
1760
  async def mock_http_download(
1761
1761
  target_filename_path: Path,
1762
1762
  filename: str,
1763
- proxy_url: Optional[str],
1763
+ proxy_url: str | None,
1764
1764
  server_info: ServerInfo,
1765
1765
  timeout: int,
1766
1766
  log: logging.Logger,
@@ -1770,7 +1770,7 @@ async def test_insert_from_delta_file(
1770
1770
  async def mock_http_download_2(
1771
1771
  target_filename_path: Path,
1772
1772
  filename: str,
1773
- proxy_url: Optional[str],
1773
+ proxy_url: str | None,
1774
1774
  server_info: ServerInfo,
1775
1775
  timeout: int,
1776
1776
  log: logging.Logger,
@@ -2180,7 +2180,7 @@ async def test_basic_key_value_db_vs_disk_cutoff(
2180
2180
  ) as cursor:
2181
2181
  row = await cursor.fetchone()
2182
2182
  assert row is not None
2183
- db_blob: Optional[bytes] = row["blob"]
2183
+ db_blob: bytes | None = row["blob"]
2184
2184
 
2185
2185
  if size_offset <= 0:
2186
2186
  assert not file_exists
@@ -8,7 +8,7 @@ import shutil
8
8
  import subprocess
9
9
  from collections.abc import Iterator
10
10
  from dataclasses import dataclass
11
- from typing import IO, TYPE_CHECKING, Any, Literal, Optional, Union, overload
11
+ from typing import IO, TYPE_CHECKING, Any, Literal, overload
12
12
 
13
13
  from chia_rs.sized_bytes import bytes32
14
14
 
@@ -17,7 +17,7 @@ from chia.data_layer.data_store import DataStore
17
17
  from chia.types.blockchain_format.program import Program
18
18
 
19
19
  # from subprocess.pyi
20
- _FILE = Union[int, IO[Any], None]
20
+ _FILE = int | IO[Any] | None
21
21
 
22
22
 
23
23
  if TYPE_CHECKING:
@@ -34,8 +34,8 @@ async def general_insert(
34
34
  store_id: bytes32,
35
35
  key: bytes,
36
36
  value: bytes,
37
- reference_node_hash: Optional[bytes32],
38
- side: Optional[Side],
37
+ reference_node_hash: bytes32 | None,
38
+ side: Side | None,
39
39
  ) -> bytes32:
40
40
  insert_result = await data_store.insert(
41
41
  key=key,
@@ -123,12 +123,12 @@ class ChiaRoot:
123
123
 
124
124
  def run(
125
125
  self,
126
- args: list[Union[str, os_PathLike_str]],
126
+ args: list[str | os_PathLike_str],
127
127
  *other_args: Any,
128
128
  check: bool = True,
129
129
  encoding: str = "utf-8",
130
- stdout: Optional[_FILE] = subprocess.PIPE,
131
- stderr: Optional[_FILE] = subprocess.PIPE,
130
+ stdout: _FILE | None = subprocess.PIPE,
131
+ stderr: _FILE | None = subprocess.PIPE,
132
132
  **kwargs: Any,
133
133
  ) -> subprocess_CompletedProcess_str:
134
134
  # TODO: --root-path doesn't seem to work here...
@@ -143,7 +143,7 @@ class ChiaRoot:
143
143
  chia_executable = shutil.which("chia")
144
144
  if chia_executable is None:
145
145
  chia_executable = "chia"
146
- modified_args: list[Union[str, os_PathLike_str]] = [
146
+ modified_args: list[str | os_PathLike_str] = [
147
147
  self.scripts_path.joinpath(chia_executable),
148
148
  "--root-path",
149
149
  self.path,
@@ -166,7 +166,7 @@ class ChiaRoot:
166
166
  return self.path.joinpath("log", "debug.log").read_text(encoding="utf-8")
167
167
 
168
168
  def print_log(self) -> None:
169
- log_text: Optional[str]
169
+ log_text: str | None
170
170
 
171
171
  try:
172
172
  log_text = self.read_log()
@@ -204,8 +204,8 @@ def create_valid_node_values(
204
204
 
205
205
  def create_valid_node_values(
206
206
  node_type: NodeType,
207
- left_hash: Optional[bytes32] = None,
208
- right_hash: Optional[bytes32] = None,
207
+ left_hash: bytes32 | None = None,
208
+ right_hash: bytes32 | None = None,
209
209
  ) -> dict[str, Any]:
210
210
  if node_type == NodeType.INTERNAL:
211
211
  assert left_hash is not None
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from asyncio import Task, gather, sleep
4
4
  from collections.abc import Coroutine
5
- from typing import Any, Optional, TypeVar
5
+ from typing import Any, TypeVar
6
6
 
7
7
  import pytest
8
8
  from chia_rs.sized_ints import uint8, uint32, uint64
@@ -80,9 +80,7 @@ async def test_farmer_responds_with_signed_values(farmer_one_harvester: FarmerOn
80
80
  )
81
81
  setattr(farmer_api, "_process_respond_signatures", lambda res: signed_values)
82
82
 
83
- signed_values_task: Task[Optional[Message]] = await begin_task(
84
- farmer_api.request_signed_values(request_signed_values)
85
- )
83
+ signed_values_task: Task[Message | None] = await begin_task(farmer_api.request_signed_values(request_signed_values))
86
84
 
87
85
  # Wait a bit for the dummy harvester to receive the signature request and respond with a dummy signature
88
86
  await sleep(1)
@@ -24,11 +24,11 @@ log = logging.getLogger(__name__)
24
24
 
25
25
  @pytest.mark.anyio
26
26
  async def test_long_sync_from_zero(
27
- five_nodes: list[FullNodeAPI], default_400_blocks: list[FullBlock], bt: BlockTools, self_hostname: str
27
+ five_nodes: list[FullNodeAPI], default_1000_blocks: list[FullBlock], bt: BlockTools, self_hostname: str
28
28
  ) -> None:
29
29
  # Must be larger than "sync_block_behind_threshold" in the config
30
- num_blocks = len(default_400_blocks)
31
- blocks: list[FullBlock] = default_400_blocks
30
+ blocks: list[FullBlock] = default_1000_blocks[:600]
31
+ num_blocks = len(blocks)
32
32
  full_node_1, full_node_2, full_node_3, full_node_4, full_node_5 = five_nodes
33
33
  server_1 = full_node_1.full_node.server
34
34
  server_2 = full_node_2.full_node.server
@@ -37,7 +37,7 @@ async def test_long_sync_from_zero(
37
37
  server_5 = full_node_5.full_node.server
38
38
 
39
39
  # If this constant is changed, update the tests to use more blocks
40
- assert bt.constants.WEIGHT_PROOF_RECENT_BLOCKS < 400
40
+ assert bt.constants.WEIGHT_PROOF_RECENT_BLOCKS < num_blocks
41
41
 
42
42
  # Syncs up less than recent blocks
43
43
  for block in blocks[: bt.constants.WEIGHT_PROOF_RECENT_BLOCKS - 5]:
@@ -101,14 +101,14 @@ async def test_long_sync_from_zero(
101
101
  await time_out_assert(timeout_seconds, node_height_exactly, True, full_node_4, num_blocks - 1)
102
102
 
103
103
  # Deep reorg, fall back from batch sync to long sync
104
- blocks_node_5 = bt.get_consecutive_blocks(60, block_list_input=blocks[:350], seed=b"node5")
104
+ blocks_node_5 = bt.get_consecutive_blocks(250, block_list_input=blocks[:350], seed=b"node5")
105
105
  for block in blocks_node_5:
106
106
  await full_node_5.full_node.add_block(block)
107
107
  await server_5.start_client(
108
108
  PeerInfo(self_hostname, server_1.get_port()), on_connect=full_node_5.full_node.on_connect
109
109
  )
110
- await time_out_assert(timeout_seconds, node_height_exactly, True, full_node_5, 409)
111
- await time_out_assert(timeout_seconds, node_height_exactly, True, full_node_1, 409)
110
+ await time_out_assert(timeout_seconds, node_height_exactly, True, full_node_5, 250 + 350 - 1)
111
+ await time_out_assert(timeout_seconds, node_height_exactly, True, full_node_1, 250 + 350 - 1)
112
112
 
113
113
 
114
114
  @pytest.mark.anyio
@@ -384,6 +384,7 @@ async def test_block_ses_mismatch(
384
384
  s.num_blocks_overflow,
385
385
  uint64(s.new_difficulty * 2) if s.new_difficulty is not None else None,
386
386
  uint64(s.new_sub_slot_iters * 2) if s.new_sub_slot_iters is not None else None,
387
+ None,
387
388
  )
388
389
  # manually try sync with wrong sub epoch summary list
389
390
  await server_2.start_client(PeerInfo(self_hostname, server_1.get_port()), None)
@@ -5,7 +5,7 @@ import logging
5
5
  import random
6
6
  import sqlite3
7
7
  from pathlib import Path
8
- from typing import Optional, cast
8
+ from typing import cast
9
9
 
10
10
  import pytest
11
11
 
@@ -16,6 +16,7 @@ from chia_rs.sized_bytes import bytes32
16
16
  from chia_rs.sized_ints import uint8, uint32, uint64
17
17
 
18
18
  from chia._tests.blockchain.blockchain_test_utils import _validate_and_add_block
19
+ from chia._tests.core.full_node.test_full_node import find_reward_coin
19
20
  from chia._tests.util.db_connection import DBConnection, PathDBConnection
20
21
  from chia.consensus.block_body_validation import ForkInfo
21
22
  from chia.consensus.block_height_map import BlockHeightMap
@@ -41,7 +42,7 @@ def use_cache(request: SubRequest) -> bool:
41
42
  return cast(bool, request.param)
42
43
 
43
44
 
44
- def maybe_serialize(gen: Optional[SerializedProgram]) -> Optional[bytes]:
45
+ def maybe_serialize(gen: SerializedProgram | None) -> bytes | None:
45
46
  if gen is None:
46
47
  return None
47
48
  else:
@@ -57,11 +58,11 @@ async def test_block_store(tmp_dir: Path, db_version: int, bt: BlockTools, use_c
57
58
  3,
58
59
  guarantee_transaction_block=True,
59
60
  farmer_reward_puzzle_hash=bt.pool_ph,
60
- pool_reward_puzzle_hash=bt.pool_ph,
61
61
  time_per_block=10,
62
62
  )
63
63
  wt: WalletTool = bt.get_pool_wallet_tool()
64
- tx = wt.generate_signed_transaction(uint64(10), wt.get_new_puzzlehash(), blocks[-1].get_included_reward_coins()[0])
64
+ coin = find_reward_coin(blocks[-1], bt.pool_ph)
65
+ tx = wt.generate_signed_transaction(uint64(10), wt.get_new_puzzlehash(), coin)
65
66
  blocks = bt.get_consecutive_blocks(
66
67
  10,
67
68
  block_list_input=blocks,
@@ -3,11 +3,10 @@ from __future__ import annotations
3
3
  import logging
4
4
  from dataclasses import dataclass
5
5
  from pathlib import Path
6
- from typing import Optional
7
6
 
8
7
  import aiosqlite
9
8
  import pytest
10
- from chia_rs import CoinState, FullBlock, additions_and_removals, get_flags_for_height_and_constants
9
+ from chia_rs import CoinRecord, CoinState, FullBlock, additions_and_removals, get_flags_for_height_and_constants
11
10
  from chia_rs.sized_bytes import bytes32
12
11
  from chia_rs.sized_ints import uint32, uint64
13
12
 
@@ -26,7 +25,6 @@ from chia.full_node.hint_store import HintStore
26
25
  from chia.simulator.block_tools import BlockTools, test_constants
27
26
  from chia.simulator.wallet_tools import WalletTool
28
27
  from chia.types.blockchain_format.coin import Coin
29
- from chia.types.coin_record import CoinRecord
30
28
  from chia.types.mempool_item import UnspentLineageInfo
31
29
  from chia.util.casts import int_to_bytes
32
30
  from chia.util.db_wrapper import DBWrapper2
@@ -68,7 +66,6 @@ async def test_basic_coin_store(db_version: int, softfork_height: uint32, bt: Bl
68
66
  10,
69
67
  [],
70
68
  farmer_reward_puzzle_hash=reward_ph,
71
- pool_reward_puzzle_hash=reward_ph,
72
69
  )
73
70
 
74
71
  coins_to_spend: list[Coin] = []
@@ -87,7 +84,6 @@ async def test_basic_coin_store(db_version: int, softfork_height: uint32, bt: Bl
87
84
  10,
88
85
  blocks,
89
86
  farmer_reward_puzzle_hash=reward_ph,
90
- pool_reward_puzzle_hash=reward_ph,
91
87
  transaction_data=spend_bundle,
92
88
  )
93
89
 
@@ -236,7 +232,7 @@ async def test_rollback(db_version: int, bt: BlockTools) -> None:
236
232
  async with DBConnection(db_version) as db_wrapper:
237
233
  coin_store = await CoinStore.create(db_wrapper)
238
234
 
239
- selected_coin: Optional[CoinRecord] = None
235
+ selected_coin: CoinRecord | None = None
240
236
  all_coins: list[Coin] = []
241
237
 
242
238
  for block in blocks:
@@ -320,7 +316,7 @@ async def test_basic_reorg(tmp_dir: Path, db_version: int, bt: BlockTools) -> No
320
316
  height_map = await BlockHeightMap.create(tmp_dir, db_wrapper)
321
317
  b: Blockchain = await Blockchain.create(coin_store, store, height_map, bt.constants, 2)
322
318
  try:
323
- records: list[Optional[CoinRecord]] = []
319
+ records: list[CoinRecord | None] = []
324
320
 
325
321
  for block in blocks:
326
322
  await _validate_and_add_block(b, block)
@@ -375,11 +371,9 @@ async def test_get_puzzle_hash(tmp_dir: Path, db_version: int, bt: BlockTools) -
375
371
  async with DBConnection(db_version) as db_wrapper:
376
372
  num_blocks = 20
377
373
  farmer_ph = bytes32(32 * b"0")
378
- pool_ph = bytes32(32 * b"1")
379
374
  blocks = bt.get_consecutive_blocks(
380
375
  num_blocks,
381
376
  farmer_reward_puzzle_hash=farmer_ph,
382
- pool_reward_puzzle_hash=pool_ph,
383
377
  guarantee_transaction_block=True,
384
378
  )
385
379
  coin_store = await CoinStore.create(db_wrapper)
@@ -392,7 +386,7 @@ async def test_get_puzzle_hash(tmp_dir: Path, db_version: int, bt: BlockTools) -
392
386
  assert peak is not None
393
387
  assert peak.height == num_blocks - 1
394
388
 
395
- coins_farmer = await coin_store.get_coin_records_by_puzzle_hash(True, pool_ph)
389
+ coins_farmer = await coin_store.get_coin_records_by_puzzle_hash(True, bt.pool_ph)
396
390
  coins_pool = await coin_store.get_coin_records_by_puzzle_hash(True, farmer_ph)
397
391
 
398
392
  assert len(coins_farmer) == num_blocks - 2
@@ -570,7 +564,7 @@ async def test_coin_state_batches(
570
564
  continue
571
565
  expected_crs.append(cr)
572
566
 
573
- height: Optional[uint32] = uint32(0)
567
+ height: uint32 | None = uint32(0)
574
568
  all_coin_states: list[CoinState] = []
575
569
  remaining_phs = random_coin_records.puzzle_hashes.copy()
576
570
 
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  import logging
4
4
  import random
5
5
  from collections.abc import AsyncIterator
6
- from typing import Optional
7
6
 
8
7
  import pytest
9
8
  from chia_rs import ConsensusConstants, FullBlock, UnfinishedBlock
@@ -39,7 +38,8 @@ async def custom_block_tools(blockchain_constants: ConsensusConstants) -> AsyncI
39
38
  DISCRIMINANT_SIZE_BITS=uint16(32),
40
39
  SUB_SLOT_ITERS_STARTING=uint64(2**12),
41
40
  )
42
- yield await create_block_tools_async(constants=patched_constants, keychain=keychain)
41
+ async with create_block_tools_async(constants=patched_constants, keychain=keychain) as bt:
42
+ yield bt
43
43
 
44
44
 
45
45
  @pytest.fixture(scope="function")
@@ -128,15 +128,15 @@ async def test_unfinished_block_rank(
128
128
  )
129
129
  async def test_find_best_block(
130
130
  seeded_random: random.Random,
131
- blocks: list[tuple[Optional[int], bool]],
132
- expected: Optional[int],
131
+ blocks: list[tuple[int | None, bool]],
132
+ expected: int | None,
133
133
  default_400_blocks: list[FullBlock],
134
134
  bt: BlockTools,
135
135
  ) -> None:
136
- result: dict[Optional[bytes32], UnfinishedBlockEntry] = {}
136
+ result: dict[bytes32 | None, UnfinishedBlockEntry] = {}
137
137
  i = 0
138
138
  for b, with_unf in blocks:
139
- unf: Optional[UnfinishedBlock]
139
+ unf: UnfinishedBlock | None
140
140
  if with_unf:
141
141
  unf = make_unfinished_block(default_400_blocks[i], bt.constants)
142
142
  i += 1
@@ -1022,10 +1022,10 @@ async def test_basic_store(
1022
1022
  and i1 > (i2 + 3)
1023
1023
  ):
1024
1024
  # We hit all the conditions that we want
1025
- all_sps: list[Optional[SignagePoint]] = [None] * custom_block_tools.constants.NUM_SPS_SUB_SLOT
1025
+ all_sps: list[SignagePoint | None] = [None] * custom_block_tools.constants.NUM_SPS_SUB_SLOT
1026
1026
 
1027
1027
  def assert_sp_none(sp_index: int, is_none: bool) -> None:
1028
- sp_to_check: Optional[SignagePoint] = all_sps[sp_index]
1028
+ sp_to_check: SignagePoint | None = all_sps[sp_index]
1029
1029
  assert sp_to_check is not None
1030
1030
  assert sp_to_check.cc_vdf is not None
1031
1031
  fetched = store.get_signage_point(sp_to_check.cc_vdf.output.get_hash())