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
@@ -1,9 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  import pytest
6
- from chia_rs import BlockRecord, FullBlock, SubEpochSummary, UnfinishedBlock
4
+ from chia_rs import BlockRecord, FullBlock, SubEpochSummary, UnfinishedBlock, is_overflow_block
7
5
  from chia_rs.sized_bytes import bytes32
8
6
  from chia_rs.sized_ints import uint64, uint128
9
7
 
@@ -22,6 +20,13 @@ from chia.simulator.wallet_tools import WalletTool
22
20
  from chia.timelord.timelord_api import TimelordAPI
23
21
 
24
22
 
23
+ def last_unfinished(tl: TimelordAPI, *, overflow: bool) -> timelord_protocol.NewUnfinishedBlockTimelord:
24
+ if overflow:
25
+ return tl.timelord.overflow_blocks[-1]
26
+ else:
27
+ return tl.timelord.unfinished_blocks[-1]
28
+
29
+
25
30
  class TestNewPeak:
26
31
  @pytest.mark.anyio
27
32
  async def test_timelord_new_peak_basic(
@@ -127,7 +132,8 @@ class TestNewPeak:
127
132
  )
128
133
  await timelord_api.new_unfinished_block_timelord(timelord_unf_block)
129
134
 
130
- assert timelord_api.timelord.unfinished_blocks[-1].get_hash() == timelord_unf_block.get_hash()
135
+ overflow = is_overflow_block(bt.constants, timelord_unf_block.reward_chain_block.signage_point_index)
136
+ assert last_unfinished(timelord_api, overflow=overflow).get_hash() == timelord_unf_block.get_hash()
131
137
  new_peak = timelord_peak_from_block(b1, block_2)
132
138
  assert timelord_unf_block.reward_chain_block.total_iters <= new_peak.reward_chain_block.total_iters
133
139
  await timelord_api.new_peak_timelord(new_peak)
@@ -193,7 +199,9 @@ class TestNewPeak:
193
199
  await get_rc_prev(b1, block_1),
194
200
  )
195
201
  await timelord_api.new_unfinished_block_timelord(timelord_unf_block)
196
- assert timelord_api.timelord.unfinished_blocks[-1].get_hash() == timelord_unf_block.get_hash()
202
+
203
+ overflow = is_overflow_block(bt.constants, timelord_unf_block.reward_chain_block.signage_point_index)
204
+ assert last_unfinished(timelord_api, overflow=overflow).get_hash() == timelord_unf_block.get_hash()
197
205
  new_peak = timelord_peak_from_block(b2, block_2)
198
206
 
199
207
  # timelord knows unfinished block_1 that has lower iterations,
@@ -208,7 +216,8 @@ class TestNewPeak:
208
216
  == peak.reward_chain_block.get_hash()
209
217
  )
210
218
  # check unfinished block_1 is still in cache
211
- assert timelord_api.timelord.unfinished_blocks[-1].get_hash() == timelord_unf_block.get_hash()
219
+ overflow = is_overflow_block(bt.constants, timelord_unf_block.reward_chain_block.signage_point_index)
220
+ assert last_unfinished(timelord_api, overflow=overflow).get_hash() == timelord_unf_block.get_hash()
212
221
 
213
222
  # full node gets block_1 unfinished
214
223
  block_1_unf = UnfinishedBlock(
@@ -371,7 +380,8 @@ class TestNewPeak:
371
380
 
372
381
  # add unfinished and make sure we cache it
373
382
  await timelord_api.new_unfinished_block_timelord(timelord_unf_block)
374
- assert timelord_api.timelord.unfinished_blocks[-1].get_hash() == timelord_unf_block.get_hash()
383
+ overflow = is_overflow_block(bt.constants, timelord_unf_block.reward_chain_block.signage_point_index)
384
+ assert last_unfinished(timelord_api, overflow=overflow).get_hash() == timelord_unf_block.get_hash()
375
385
  new_peak = timelord_peak_from_block(b1, block_1)
376
386
  assert timelord_unf_block.reward_chain_block.total_iters >= new_peak.reward_chain_block.total_iters
377
387
  await timelord_api.new_peak_timelord(new_peak)
@@ -531,9 +541,10 @@ class TestNewPeak:
531
541
  )
532
542
 
533
543
  await timelord_api.new_unfinished_block_timelord(timelord_unf_block)
534
- assert timelord_api.timelord.unfinished_blocks[-1].get_hash() == timelord_unf_block.get_hash()
544
+ overflow = is_overflow_block(bt.constants, timelord_unf_block.reward_chain_block.signage_point_index)
545
+ assert last_unfinished(timelord_api, overflow=overflow).get_hash() == timelord_unf_block.get_hash()
535
546
  assert (
536
- timelord_api.timelord.unfinished_blocks[-1].reward_chain_block.get_hash()
547
+ last_unfinished(timelord_api, overflow=overflow).reward_chain_block.get_hash()
537
548
  == timelord_unf_block.reward_chain_block.get_hash()
538
549
  )
539
550
 
@@ -579,7 +590,7 @@ def get_recent_reward_challenges(blockchain: Blockchain) -> list[tuple[bytes32,
579
590
  if peak is None:
580
591
  return []
581
592
  recent_rc: list[tuple[bytes32, uint128]] = []
582
- curr: Optional[BlockRecord] = peak
593
+ curr: BlockRecord | None = peak
583
594
  while curr is not None and len(recent_rc) < 2 * blockchain.constants.MAX_SUB_SLOT_BLOCKS:
584
595
  if curr != peak:
585
596
  recent_rc.append((curr.reward_infusion_new_challenge, curr.total_iters))
@@ -602,7 +613,7 @@ def timelord_peak_from_block(
602
613
  ) -> timelord_protocol.NewPeakTimelord:
603
614
  peak = blockchain.block_record(block.header_hash)
604
615
  _, difficulty = get_next_sub_slot_iters_and_difficulty(blockchain.constants, False, peak, blockchain)
605
- ses: Optional[SubEpochSummary] = next_sub_epoch_summary(
616
+ ses: SubEpochSummary | None = next_sub_epoch_summary(
606
617
  blockchain.constants, blockchain, peak.required_iters, block, True
607
618
  )
608
619
 
@@ -34,8 +34,6 @@ constants = DEFAULT_CONSTANTS.replace(
34
34
  ),
35
35
  MEMPOOL_BLOCK_BUFFER=uint8(10),
36
36
  MIN_PLOT_SIZE_V1=uint8(18),
37
- # TODO: todo_v2_plots decide on v2 test plot k-size
38
- MIN_PLOT_SIZE_V2=uint8(18),
39
37
  )
40
38
  retire_bytes = (
41
39
  b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
@@ -1,8 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import textwrap
4
+ from collections.abc import Callable
4
5
  from pathlib import Path
5
- from typing import Any, Callable
6
+ from typing import Any
6
7
 
7
8
  import click
8
9
  import pytest
@@ -94,6 +94,7 @@ def rand_full_block() -> FullBlock:
94
94
  rand_g2(),
95
95
  rand_vdf(),
96
96
  rand_vdf(),
97
+ None,
97
98
  True,
98
99
  )
99
100
 
@@ -5,10 +5,10 @@ import os
5
5
  import pickle # noqa: S403 # TODO: use explicit serialization instead of pickle
6
6
  from collections.abc import AsyncIterator
7
7
  from pathlib import Path
8
- from typing import Optional
9
8
 
10
9
  from chia_rs import ConsensusConstants, FullBlock
11
10
  from chia_rs.sized_ints import uint64
11
+ from filelock import FileLock
12
12
 
13
13
  from chia.consensus.block_height_map import BlockHeightMap
14
14
  from chia.consensus.blockchain import Blockchain
@@ -48,8 +48,8 @@ def persistent_blocks(
48
48
  normalized_to_identity_icc_eos: bool = False,
49
49
  normalized_to_identity_cc_sp: bool = False,
50
50
  normalized_to_identity_cc_ip: bool = False,
51
- block_list_input: Optional[list[FullBlock]] = None,
52
- time_per_block: Optional[float] = None,
51
+ block_list_input: list[FullBlock] | None = None,
52
+ time_per_block: float | None = None,
53
53
  dummy_block_references: bool = False,
54
54
  include_transactions: bool = False,
55
55
  ) -> list[FullBlock]:
@@ -59,6 +59,7 @@ def persistent_blocks(
59
59
  block_list_input = []
60
60
  block_path_dir = DEFAULT_ROOT_PATH.parent.joinpath("blocks")
61
61
  file_path = block_path_dir.joinpath(db_name)
62
+ lock_file_path = block_path_dir / (db_name + ".lockfile")
62
63
 
63
64
  ci = os.environ.get("CI")
64
65
  if ci is not None and not file_path.exists():
@@ -66,40 +67,41 @@ def persistent_blocks(
66
67
 
67
68
  block_path_dir.mkdir(parents=True, exist_ok=True)
68
69
 
69
- if file_path.exists():
70
- print(f"File found at: {file_path}")
71
- try:
72
- bytes_list = file_path.read_bytes()
73
- # TODO: use explicit serialization instead of pickle
74
- block_bytes_list: list[bytes] = pickle.loads(bytes_list) # noqa: S301
75
- blocks: list[FullBlock] = []
76
- for block_bytes in block_bytes_list:
77
- blocks.append(FullBlock.from_bytes_unchecked(block_bytes))
78
- if len(blocks) == num_of_blocks + len(block_list_input):
79
- print(f"\n loaded {file_path} with {len(blocks)} blocks")
70
+ with FileLock(lock_file_path):
71
+ if file_path.exists():
72
+ print(f"File found at: {file_path}")
73
+ try:
74
+ bytes_list = file_path.read_bytes()
75
+ # TODO: use explicit serialization instead of pickle
76
+ block_bytes_list: list[bytes] = pickle.loads(bytes_list) # noqa: S301
77
+ blocks: list[FullBlock] = []
78
+ for block_bytes in block_bytes_list:
79
+ blocks.append(FullBlock.from_bytes_unchecked(block_bytes))
80
+ if len(blocks) == num_of_blocks + len(block_list_input):
81
+ print(f"\n loaded {file_path} with {len(blocks)} blocks")
80
82
 
81
- return blocks
82
- except EOFError:
83
- print("\n error reading db file")
84
- else:
85
- print(f"File not found at: {file_path}")
83
+ return blocks
84
+ except EOFError:
85
+ print("\n error reading db file")
86
+ else:
87
+ print(f"File not found at: {file_path}")
86
88
 
87
- print("Creating a new test db")
88
- return new_test_db(
89
- file_path,
90
- num_of_blocks,
91
- seed,
92
- empty_sub_slots,
93
- bt,
94
- block_list_input,
95
- time_per_block,
96
- normalized_to_identity_cc_eos=normalized_to_identity_cc_eos,
97
- normalized_to_identity_icc_eos=normalized_to_identity_icc_eos,
98
- normalized_to_identity_cc_sp=normalized_to_identity_cc_sp,
99
- normalized_to_identity_cc_ip=normalized_to_identity_cc_ip,
100
- dummy_block_references=dummy_block_references,
101
- include_transactions=include_transactions,
102
- )
89
+ print("Creating a new test db")
90
+ return new_test_db(
91
+ file_path,
92
+ num_of_blocks,
93
+ seed,
94
+ empty_sub_slots,
95
+ bt,
96
+ block_list_input,
97
+ time_per_block,
98
+ normalized_to_identity_cc_eos=normalized_to_identity_cc_eos,
99
+ normalized_to_identity_icc_eos=normalized_to_identity_icc_eos,
100
+ normalized_to_identity_cc_sp=normalized_to_identity_cc_sp,
101
+ normalized_to_identity_cc_ip=normalized_to_identity_cc_ip,
102
+ dummy_block_references=dummy_block_references,
103
+ include_transactions=include_transactions,
104
+ )
103
105
 
104
106
 
105
107
  def new_test_db(
@@ -109,7 +111,7 @@ def new_test_db(
109
111
  empty_sub_slots: int,
110
112
  bt: BlockTools,
111
113
  block_list_input: list[FullBlock],
112
- time_per_block: Optional[float],
114
+ time_per_block: float | None,
113
115
  *,
114
116
  normalized_to_identity_cc_eos: bool = False, # CC_EOS,
115
117
  normalized_to_identity_icc_eos: bool = False, # ICC_EOS
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import TYPE_CHECKING, ClassVar, Optional, cast
4
+ from typing import TYPE_CHECKING, ClassVar, cast
5
5
 
6
6
  from chia_rs import BlockRecord, HeaderBlock, SubEpochChallengeSegment, SubEpochSegments, SubEpochSummary
7
7
  from chia_rs.sized_bytes import bytes32
@@ -20,9 +20,9 @@ class BlockchainMock:
20
20
  def __init__(
21
21
  self,
22
22
  blocks: dict[bytes32, BlockRecord],
23
- headers: Optional[dict[bytes32, HeaderBlock]] = None,
24
- height_to_hash: Optional[dict[uint32, bytes32]] = None,
25
- sub_epoch_summaries: Optional[dict[uint32, SubEpochSummary]] = None,
23
+ headers: dict[bytes32, HeaderBlock] | None = None,
24
+ height_to_hash: dict[uint32, bytes32] | None = None,
25
+ sub_epoch_summaries: dict[uint32, SubEpochSummary] | None = None,
26
26
  ):
27
27
  if sub_epoch_summaries is None:
28
28
  sub_epoch_summaries = {}
@@ -37,10 +37,10 @@ class BlockchainMock:
37
37
  self._sub_epoch_segments: dict[bytes32, SubEpochSegments] = {}
38
38
  self.log = logging.getLogger(__name__)
39
39
 
40
- def get_peak(self) -> Optional[BlockRecord]:
40
+ def get_peak(self) -> BlockRecord | None:
41
41
  return None
42
42
 
43
- def get_peak_height(self) -> Optional[uint32]:
43
+ def get_peak_height(self) -> uint32 | None:
44
44
  return None
45
45
 
46
46
  def block_record(self, header_hash: bytes32) -> BlockRecord:
@@ -49,7 +49,7 @@ class BlockchainMock:
49
49
  def height_to_block_record(self, height: uint32, check_db: bool = False) -> BlockRecord:
50
50
  # Precondition: height is < peak height
51
51
 
52
- header_hash: Optional[bytes32] = self.height_to_hash(height)
52
+ header_hash: bytes32 | None = self.height_to_hash(height)
53
53
  assert header_hash is not None
54
54
 
55
55
  return self.block_record(header_hash)
@@ -60,7 +60,7 @@ class BlockchainMock:
60
60
  def get_ses(self, height: uint32) -> SubEpochSummary:
61
61
  return self._sub_epoch_summaries[height]
62
62
 
63
- def height_to_hash(self, height: uint32) -> Optional[bytes32]:
63
+ def height_to_hash(self, height: uint32) -> bytes32 | None:
64
64
  assert height in self._height_to_hash
65
65
  return self._height_to_hash[height]
66
66
 
@@ -88,10 +88,10 @@ class BlockchainMock:
88
88
  block_records.append(self.height_to_block_record(height))
89
89
  return block_records
90
90
 
91
- def try_block_record(self, header_hash: bytes32) -> Optional[BlockRecord]:
91
+ def try_block_record(self, header_hash: bytes32) -> BlockRecord | None:
92
92
  return self._block_records.get(header_hash)
93
93
 
94
- async def get_block_record_from_db(self, header_hash: bytes32) -> Optional[BlockRecord]:
94
+ async def get_block_record_from_db(self, header_hash: bytes32) -> BlockRecord | None:
95
95
  return self._block_records[header_hash]
96
96
 
97
97
  async def prev_block_hash(self, header_hashes: list[bytes32]) -> list[bytes32]:
@@ -119,7 +119,7 @@ class BlockchainMock:
119
119
  async def get_sub_epoch_challenge_segments(
120
120
  self,
121
121
  sub_epoch_summary_hash: bytes32,
122
- ) -> Optional[list[SubEpochChallengeSegment]]:
122
+ ) -> list[SubEpochChallengeSegment] | None:
123
123
  segments = self._sub_epoch_segments.get(sub_epoch_summary_hash)
124
124
  if segments is None:
125
125
  return None
@@ -4,8 +4,9 @@ from __future__ import annotations
4
4
  import os
5
5
  import subprocess
6
6
  import sys
7
+ from collections.abc import Callable
7
8
  from pathlib import Path
8
- from typing import Any, Callable
9
+ from typing import Any
9
10
 
10
11
  from chia_rs.sized_ints import uint32
11
12
 
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from chia_rs import CoinRecord
4
+
3
5
  from chia.consensus.coin_store_protocol import CoinStoreProtocol
4
- from chia.types.coin_record import CoinRecord
5
6
  from chia.util.db_wrapper import DBWrapper2
6
7
 
7
8
 
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- job_timeout = 60
3
+ job_timeout = 90
@@ -4,7 +4,6 @@ import tempfile
4
4
  from collections.abc import AsyncIterator
5
5
  from contextlib import asynccontextmanager
6
6
  from pathlib import Path
7
- from typing import Optional
8
7
 
9
8
  import aiosqlite
10
9
 
@@ -14,8 +13,8 @@ from chia.util.db_wrapper import DBWrapper2, generate_in_memory_db_uri
14
13
  @asynccontextmanager
15
14
  async def DBConnection(
16
15
  db_version: int,
17
- foreign_keys: Optional[bool] = None,
18
- row_factory: Optional[type[aiosqlite.Row]] = None,
16
+ foreign_keys: bool | None = None,
17
+ row_factory: type[aiosqlite.Row] | None = None,
19
18
  ) -> AsyncIterator[DBWrapper2]:
20
19
  db_uri = generate_in_memory_db_uri()
21
20
  async with DBWrapper2.managed(
@@ -5,10 +5,10 @@ import logging
5
5
  import shutil
6
6
  import tempfile
7
7
  import time
8
- from collections.abc import Iterator
8
+ from collections.abc import Callable, Iterator
9
9
  from contextlib import contextmanager
10
10
  from pathlib import Path
11
- from typing import Callable, Optional, cast
11
+ from typing import cast
12
12
 
13
13
  import aiosqlite
14
14
  import zstd
@@ -60,9 +60,7 @@ def enable_profiler(profile: bool, counter: int) -> Iterator[None]:
60
60
 
61
61
 
62
62
  class FakeServer:
63
- async def send_to_all(
64
- self, messages: list[Message], node_type: NodeType, exclude: Optional[bytes32] = None
65
- ) -> None:
63
+ async def send_to_all(self, messages: list[Message], node_type: NodeType, exclude: bytes32 | None = None) -> None:
66
64
  pass
67
65
 
68
66
  async def send_to_all_if(
@@ -70,18 +68,18 @@ class FakeServer:
70
68
  messages: list[Message],
71
69
  node_type: NodeType,
72
70
  predicate: Callable[[WSChiaConnection], bool],
73
- exclude: Optional[bytes32] = None,
71
+ exclude: bytes32 | None = None,
74
72
  ) -> None:
75
73
  pass
76
74
 
77
75
  def set_received_message_callback(self, callback: ConnectionCallback) -> None:
78
76
  pass
79
77
 
80
- async def get_peer_info(self) -> Optional[PeerInfo]:
78
+ async def get_peer_info(self) -> PeerInfo | None:
81
79
  return None
82
80
 
83
81
  def get_connections(
84
- self, node_type: Optional[NodeType] = None, *, outbound: Optional[bool] = False
82
+ self, node_type: NodeType | None = None, *, outbound: bool | None = False
85
83
  ) -> list[WSChiaConnection]:
86
84
  return []
87
85
 
@@ -91,7 +89,7 @@ class FakeServer:
91
89
  async def start_client(
92
90
  self,
93
91
  target_node: PeerInfo,
94
- on_connect: Optional[ConnectionCallback] = None,
92
+ on_connect: ConnectionCallback | None = None,
95
93
  auth: bool = False,
96
94
  is_feeler: bool = False,
97
95
  ) -> bool:
@@ -105,7 +103,7 @@ class FakePeer:
105
103
  def __init__(self) -> None:
106
104
  self.peer_node_id = bytes([0] * 32)
107
105
 
108
- async def get_peer_info(self) -> Optional[PeerInfo]:
106
+ async def get_peer_info(self) -> PeerInfo | None:
109
107
  return None
110
108
 
111
109
 
@@ -118,7 +116,7 @@ async def run_sync_test(
118
116
  keep_up: bool,
119
117
  db_sync: str,
120
118
  node_profiler: bool,
121
- start_at_checkpoint: Optional[str],
119
+ start_at_checkpoint: str | None,
122
120
  ) -> None:
123
121
  logger = logging.getLogger()
124
122
  logger.setLevel(logging.WARNING)
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from pathlib import Path
4
- from typing import Optional
5
4
 
6
5
  import click
7
6
  from pytest import MonkeyPatch
@@ -20,8 +19,8 @@ from chia.ssl.create_ssl import generate_ca_signed_cert, get_chia_ca_crt_key, ma
20
19
  required=True,
21
20
  )
22
21
  def gen_ssl(suffix: str = "") -> None:
23
- captured_crt: Optional[bytes] = None
24
- captured_key: Optional[bytes] = None
22
+ captured_crt: bytes | None = None
23
+ captured_key: bytes | None = None
25
24
  capture_cert_and_key = False
26
25
 
27
26
  def patched_write_ssl_cert_and_key(cert_path: Path, cert_data: bytes, key_path: Path, key_data: bytes) -> None:
@@ -39,8 +38,8 @@ def gen_ssl(suffix: str = "") -> None:
39
38
  patch = MonkeyPatch()
40
39
  patch.setattr("chia.ssl.create_ssl.write_ssl_cert_and_key", patched_write_ssl_cert_and_key)
41
40
 
42
- private_ca_crt: Optional[bytes] = None
43
- private_ca_key: Optional[bytes] = None
41
+ private_ca_crt: bytes | None = None
42
+ private_ca_key: bytes | None = None
44
43
  capture_cert_and_key = True
45
44
 
46
45
  make_ca_cert(Path("SSL_TEST_PRIVATE_CA_CRT"), Path("SSL_TEST_PRIVATE_CA_KEY"))
@@ -28,6 +28,8 @@ def get_name_puzzle_conditions(
28
28
  height: uint32,
29
29
  constants: ConsensusConstants,
30
30
  ) -> NPCResult:
31
+ # TODO: technically, this is supposed to be the previous transaction block
32
+ # height. But this is just for testing and it seems to be OK for now
31
33
  flags = get_flags_for_height_and_constants(height, constants) | DONT_VALIDATE_SIGNATURE
32
34
 
33
35
  if mempool_mode:
chia/_tests/util/misc.py CHANGED
@@ -12,7 +12,7 @@ import pathlib
12
12
  import ssl
13
13
  import subprocess
14
14
  import sys
15
- from collections.abc import Awaitable, Collection, Iterator
15
+ from collections.abc import Awaitable, Callable, Collection, Iterator
16
16
  from concurrent.futures import Future
17
17
  from dataclasses import dataclass, field
18
18
  from enum import Enum
@@ -20,7 +20,7 @@ from statistics import mean
20
20
  from textwrap import dedent
21
21
  from time import thread_time
22
22
  from types import TracebackType
23
- from typing import TYPE_CHECKING, Any, Callable, ClassVar, Optional, Protocol, TextIO, TypeVar, Union, cast, final
23
+ from typing import TYPE_CHECKING, Any, ClassVar, Protocol, TextIO, TypeVar, cast, final
24
24
 
25
25
  import aiohttp
26
26
  import pytest
@@ -88,7 +88,7 @@ class RuntimeResults:
88
88
  duration: float
89
89
  entry_file: str
90
90
  entry_line: int
91
- overhead: Optional[float]
91
+ overhead: float | None
92
92
 
93
93
  def block(self, label: str = "") -> str:
94
94
  # The entry line is reported starting at the beginning of the line to trigger
@@ -112,13 +112,13 @@ class AssertRuntimeResults:
112
112
  duration: float
113
113
  entry_file: str
114
114
  entry_line: int
115
- overhead: Optional[float]
115
+ overhead: float | None
116
116
  limit: float
117
117
  ratio: float
118
118
 
119
119
  @classmethod
120
120
  def from_runtime_results(
121
- cls, results: RuntimeResults, limit: float, entry_file: str, entry_line: int, overhead: Optional[float]
121
+ cls, results: RuntimeResults, limit: float, entry_file: str, entry_line: int, overhead: float | None
122
122
  ) -> AssertRuntimeResults:
123
123
  return cls(
124
124
  start=results.start,
@@ -161,7 +161,7 @@ class AssertRuntimeResults:
161
161
 
162
162
  def measure_overhead(
163
163
  manager_maker: Callable[
164
- [], contextlib.AbstractContextManager[Union[Future[RuntimeResults], Future[AssertRuntimeResults]]]
164
+ [], contextlib.AbstractContextManager[Future[RuntimeResults] | Future[AssertRuntimeResults]]
165
165
  ],
166
166
  cycles: int = 10,
167
167
  ) -> float:
@@ -183,7 +183,7 @@ def measure_runtime(
183
183
  label: str = "",
184
184
  clock: Callable[[], float] = thread_time,
185
185
  gc_mode: GcMode = GcMode.disable,
186
- overhead: Optional[float] = None,
186
+ overhead: float | None = None,
187
187
  print_results: bool = True,
188
188
  ) -> Iterator[Future[RuntimeResults]]:
189
189
  entry_file, entry_line = caller_file_and_line(
@@ -289,12 +289,12 @@ class _AssertRuntime:
289
289
  clock: Callable[[], float] = thread_time
290
290
  gc_mode: GcMode = GcMode.disable
291
291
  print: bool = True
292
- overhead: Optional[float] = None
293
- entry_file: Optional[str] = None
294
- entry_line: Optional[int] = None
295
- _results: Optional[AssertRuntimeResults] = None
296
- runtime_manager: Optional[contextlib.AbstractContextManager[Future[RuntimeResults]]] = None
297
- runtime_results_callable: Optional[Future[RuntimeResults]] = None
292
+ overhead: float | None = None
293
+ entry_file: str | None = None
294
+ entry_line: int | None = None
295
+ _results: AssertRuntimeResults | None = None
296
+ runtime_manager: contextlib.AbstractContextManager[Future[RuntimeResults]] | None = None
297
+ runtime_results_callable: Future[RuntimeResults] | None = None
298
298
  enable_assertion: bool = True
299
299
 
300
300
  def __enter__(self) -> Future[AssertRuntimeResults]:
@@ -315,9 +315,9 @@ class _AssertRuntime:
315
315
 
316
316
  def __exit__(
317
317
  self,
318
- exc_type: Optional[type[BaseException]],
319
- exc: Optional[BaseException],
320
- traceback: Optional[TracebackType],
318
+ exc_type: type[BaseException] | None,
319
+ exc: BaseException | None,
320
+ traceback: TracebackType | None,
321
321
  ) -> None:
322
322
  if (
323
323
  self.entry_file is None
@@ -366,8 +366,8 @@ class _AssertRuntime:
366
366
  @dataclasses.dataclass
367
367
  class BenchmarkRunner:
368
368
  enable_assertion: bool = True
369
- test_id: Optional[TestId] = None
370
- overhead: Optional[float] = None
369
+ test_id: TestId | None = None
370
+ overhead: float | None = None
371
371
 
372
372
  def assert_runtime(self, *args: Any, **kwargs: Any) -> _AssertRuntime:
373
373
  kwargs.setdefault("enable_assertion", self.enable_assertion)
@@ -398,7 +398,7 @@ def closing_chia_root_popen(chia_root: ChiaRoot, args: list[str]) -> Iterator[su
398
398
 
399
399
 
400
400
  # https://github.com/pytest-dev/pytest/blob/7.3.1/src/_pytest/mark/__init__.py#L45
401
- Marks = Union[pytest.MarkDecorator, Collection[Union[pytest.MarkDecorator, pytest.Mark]]]
401
+ Marks = pytest.MarkDecorator | Collection[pytest.MarkDecorator | pytest.Mark]
402
402
 
403
403
 
404
404
  class DataCase(Protocol):
@@ -445,7 +445,7 @@ class CoinGenerator:
445
445
  self._seed += 1
446
446
  return uint64(self._seed)
447
447
 
448
- def get(self, parent_coin_id: Optional[bytes32] = None, include_hint: bool = True) -> HintedCoin:
448
+ def get(self, parent_coin_id: bytes32 | None = None, include_hint: bool = True) -> HintedCoin:
449
449
  if parent_coin_id is None:
450
450
  parent_coin_id = self._get_hash()
451
451
  hint = None
@@ -516,7 +516,7 @@ class RecordingWebServer:
516
516
  hostname: str,
517
517
  port: uint16,
518
518
  max_request_body_size: int = 1024**2, # Default `client_max_size` from web.Application
519
- ssl_context: Optional[ssl.SSLContext] = None,
519
+ ssl_context: ssl.SSLContext | None = None,
520
520
  prefer_ipv6: bool = False,
521
521
  ) -> RecordingWebServer:
522
522
  web_server = await WebServer.create(
@@ -657,9 +657,9 @@ def is_attribute_local(o: object, name: str) -> bool:
657
657
 
658
658
  @contextlib.contextmanager
659
659
  def patch_request_handler(
660
- api: Union[ApiProtocol, type[ApiProtocol]],
661
- handler: Callable[..., Awaitable[Optional[Message]]],
662
- request_type: Optional[ProtocolMessageTypes] = None,
660
+ api: ApiProtocol | type[ApiProtocol],
661
+ handler: Callable[..., Awaitable[Message | None]],
662
+ request_type: ProtocolMessageTypes | None = None,
663
663
  ) -> Iterator[None]:
664
664
  if request_type is None:
665
665
  request_type = ProtocolMessageTypes[handler.__name__]