chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.5.8rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_build_chains.py +2 -4
  6. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  7. chia/_tests/clvm/coin_store.py +4 -7
  8. chia/_tests/clvm/test_clvm_step.py +4 -4
  9. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  10. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  11. chia/_tests/clvm/test_singletons.py +2 -4
  12. chia/_tests/clvm/test_spend_sim.py +2 -2
  13. chia/_tests/cmds/cmd_test_utils.py +27 -45
  14. chia/_tests/cmds/test_cmd_framework.py +6 -6
  15. chia/_tests/cmds/test_daemon.py +3 -3
  16. chia/_tests/cmds/test_show.py +4 -4
  17. chia/_tests/cmds/test_tx_config_args.py +1 -2
  18. chia/_tests/cmds/testing_classes.py +4 -5
  19. chia/_tests/cmds/wallet/test_did.py +24 -27
  20. chia/_tests/cmds/wallet/test_nft.py +12 -10
  21. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  22. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  23. chia/_tests/conftest.py +59 -30
  24. chia/_tests/connection_utils.py +2 -2
  25. chia/_tests/core/cmds/test_beta.py +4 -4
  26. chia/_tests/core/cmds/test_keys.py +2 -3
  27. chia/_tests/core/cmds/test_wallet.py +15 -15
  28. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  29. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  30. chia/_tests/core/daemon/test_daemon.py +11 -11
  31. chia/_tests/core/data_layer/conftest.py +2 -2
  32. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  33. chia/_tests/core/data_layer/test_data_store.py +10 -10
  34. chia/_tests/core/data_layer/util.py +11 -11
  35. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  36. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  37. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  38. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  39. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  40. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  41. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  42. chia/_tests/core/full_node/test_conditions.py +21 -23
  43. chia/_tests/core/full_node/test_full_node.py +225 -62
  44. chia/_tests/core/full_node/test_hint_management.py +2 -4
  45. chia/_tests/core/full_node/test_performance.py +0 -1
  46. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  47. chia/_tests/core/full_node/test_transactions.py +1 -2
  48. chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
  49. chia/_tests/core/mempool/test_mempool.py +29 -37
  50. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  51. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  52. chia/_tests/core/mempool/test_mempool_manager.py +963 -839
  53. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  54. chia/_tests/core/server/serve.py +7 -7
  55. chia/_tests/core/server/test_dos.py +1 -2
  56. chia/_tests/core/server/test_event_loop.py +12 -4
  57. chia/_tests/core/server/test_loop.py +7 -8
  58. chia/_tests/core/server/test_rate_limits.py +9 -8
  59. chia/_tests/core/server/test_server.py +61 -1
  60. chia/_tests/core/services/test_services.py +2 -2
  61. chia/_tests/core/ssl/test_ssl.py +2 -2
  62. chia/_tests/core/test_cost_calculation.py +2 -6
  63. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  64. chia/_tests/core/test_filter.py +0 -1
  65. chia/_tests/core/test_full_node_rpc.py +2 -2
  66. chia/_tests/core/test_merkle_set.py +1 -2
  67. chia/_tests/core/test_seeder.py +4 -4
  68. chia/_tests/core/util/test_config.py +4 -4
  69. chia/_tests/core/util/test_jsonify.py +2 -2
  70. chia/_tests/core/util/test_keychain.py +3 -3
  71. chia/_tests/core/util/test_lockfile.py +2 -1
  72. chia/_tests/core/util/test_log_exceptions.py +1 -2
  73. chia/_tests/core/util/test_streamable.py +17 -17
  74. chia/_tests/db/test_db_wrapper.py +3 -2
  75. chia/_tests/environments/wallet.py +14 -14
  76. chia/_tests/ether.py +4 -3
  77. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  78. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  79. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  80. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  81. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  82. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  83. chia/_tests/harvester/test_harvester_api.py +11 -4
  84. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  85. chia/_tests/plot_sync/test_receiver.py +11 -10
  86. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  87. chia/_tests/plot_sync/util.py +1 -2
  88. chia/_tests/plotting/test_plot_manager.py +7 -6
  89. chia/_tests/plotting/test_prover.py +30 -38
  90. chia/_tests/pools/test_pool_cmdline.py +4 -6
  91. chia/_tests/pools/test_pool_rpc.py +203 -61
  92. chia/_tests/pools/test_pool_wallet.py +3 -3
  93. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  94. chia/_tests/process_junit.py +2 -2
  95. chia/_tests/rpc/test_rpc_client.py +4 -4
  96. chia/_tests/rpc/test_rpc_server.py +3 -3
  97. chia/_tests/simulation/test_simulation.py +12 -25
  98. chia/_tests/solver/test_solver_service.py +13 -4
  99. chia/_tests/testconfig.py +2 -2
  100. chia/_tests/timelord/test_new_peak.py +22 -11
  101. chia/_tests/tools/test_run_block.py +0 -2
  102. chia/_tests/tools/test_virtual_project.py +2 -1
  103. chia/_tests/util/benchmarks.py +1 -0
  104. chia/_tests/util/blockchain.py +38 -36
  105. chia/_tests/util/blockchain_mock.py +11 -11
  106. chia/_tests/util/build_network_protocol_files.py +2 -1
  107. chia/_tests/util/coin_store.py +2 -1
  108. chia/_tests/util/config.py +1 -1
  109. chia/_tests/util/db_connection.py +2 -3
  110. chia/_tests/util/full_sync.py +9 -11
  111. chia/_tests/util/gen_ssl_certs.py +4 -5
  112. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  113. chia/_tests/util/misc.py +24 -24
  114. chia/_tests/util/network_protocol_data.py +20 -3
  115. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  116. chia/_tests/util/protocol_messages_json.py +292 -3
  117. chia/_tests/util/setup_nodes.py +62 -47
  118. chia/_tests/util/spend_sim.py +57 -57
  119. chia/_tests/util/test_async_pool.py +2 -3
  120. chia/_tests/util/test_chia_version.py +1 -3
  121. chia/_tests/util/test_config.py +3 -3
  122. chia/_tests/util/test_full_block_utils.py +6 -3
  123. chia/_tests/util/test_limited_semaphore.py +1 -2
  124. chia/_tests/util/test_misc.py +2 -2
  125. chia/_tests/util/test_network.py +1 -2
  126. chia/_tests/util/test_priority_mutex.py +3 -3
  127. chia/_tests/util/test_recursive_replace.py +5 -6
  128. chia/_tests/util/test_replace_str_to_bytes.py +8 -10
  129. chia/_tests/util/test_testnet_overrides.py +3 -3
  130. chia/_tests/util/time_out_assert.py +2 -2
  131. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  132. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  133. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  134. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  135. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  136. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  137. chia/_tests/wallet/conftest.py +6 -6
  138. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  139. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  140. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  141. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  142. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  145. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  146. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  147. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  148. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  149. chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
  150. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  151. chia/_tests/wallet/test_coin_management.py +2 -2
  152. chia/_tests/wallet/test_conditions.py +45 -51
  153. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  154. chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
  155. chia/_tests/wallet/test_notifications.py +14 -14
  156. chia/_tests/wallet/test_signer_protocol.py +5 -5
  157. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  158. chia/_tests/wallet/test_transaction_store.py +20 -20
  159. chia/_tests/wallet/test_util.py +2 -2
  160. chia/_tests/wallet/test_wallet.py +380 -228
  161. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  162. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  163. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  164. chia/_tests/wallet/test_wallet_node.py +14 -14
  165. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  166. chia/_tests/wallet/test_wallet_utils.py +2 -3
  167. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  168. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  169. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  170. chia/_tests/wallet/wallet_block_tools.py +12 -11
  171. chia/_tests/weight_proof/config.py +1 -0
  172. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  173. chia/apis/__init__.py +21 -0
  174. chia/apis/farmer_stub.py +102 -0
  175. chia/apis/full_node_stub.py +372 -0
  176. chia/apis/harvester_stub.py +57 -0
  177. chia/apis/introducer_stub.py +35 -0
  178. chia/apis/solver_stub.py +30 -0
  179. chia/apis/stub_protocol_registry.py +21 -0
  180. chia/apis/timelord_stub.py +39 -0
  181. chia/apis/wallet_stub.py +161 -0
  182. chia/cmds/beta.py +3 -4
  183. chia/cmds/beta_funcs.py +4 -3
  184. chia/cmds/check_wallet_db.py +4 -4
  185. chia/cmds/chia.py +1 -2
  186. chia/cmds/cmd_classes.py +11 -13
  187. chia/cmds/cmd_helpers.py +11 -11
  188. chia/cmds/cmds_util.py +15 -15
  189. chia/cmds/coin_funcs.py +6 -7
  190. chia/cmds/coins.py +2 -3
  191. chia/cmds/configure.py +1 -2
  192. chia/cmds/data.py +42 -42
  193. chia/cmds/data_funcs.py +81 -81
  194. chia/cmds/db.py +4 -5
  195. chia/cmds/db_backup_func.py +2 -2
  196. chia/cmds/db_upgrade_func.py +3 -3
  197. chia/cmds/db_validate_func.py +2 -2
  198. chia/cmds/dev/data.py +4 -4
  199. chia/cmds/dev/gh.py +5 -5
  200. chia/cmds/dev/installers.py +2 -3
  201. chia/cmds/dev/mempool.py +3 -4
  202. chia/cmds/dev/mempool_funcs.py +4 -4
  203. chia/cmds/dev/sim.py +8 -8
  204. chia/cmds/dump_keyring.py +3 -3
  205. chia/cmds/farm.py +6 -8
  206. chia/cmds/farm_funcs.py +25 -24
  207. chia/cmds/init_funcs.py +4 -4
  208. chia/cmds/keys.py +16 -18
  209. chia/cmds/keys_funcs.py +36 -36
  210. chia/cmds/netspace.py +1 -3
  211. chia/cmds/netspace_funcs.py +1 -2
  212. chia/cmds/options.py +3 -2
  213. chia/cmds/param_types.py +17 -16
  214. chia/cmds/passphrase.py +6 -7
  215. chia/cmds/passphrase_funcs.py +11 -13
  216. chia/cmds/peer.py +1 -3
  217. chia/cmds/peer_funcs.py +3 -3
  218. chia/cmds/plotnft.py +6 -7
  219. chia/cmds/plotnft_funcs.py +37 -26
  220. chia/cmds/rpc.py +3 -3
  221. chia/cmds/show.py +3 -5
  222. chia/cmds/show_funcs.py +9 -9
  223. chia/cmds/sim_funcs.py +25 -26
  224. chia/cmds/solver.py +1 -3
  225. chia/cmds/solver_funcs.py +1 -2
  226. chia/cmds/start_funcs.py +2 -2
  227. chia/cmds/wallet.py +76 -81
  228. chia/cmds/wallet_funcs.py +206 -177
  229. chia/consensus/augmented_chain.py +6 -6
  230. chia/consensus/block_body_validation.py +19 -15
  231. chia/consensus/block_creation.py +25 -21
  232. chia/consensus/block_header_validation.py +27 -13
  233. chia/consensus/block_height_map.py +3 -6
  234. chia/consensus/block_height_map_protocol.py +2 -2
  235. chia/consensus/block_record.py +2 -4
  236. chia/consensus/blockchain.py +58 -40
  237. chia/consensus/blockchain_interface.py +7 -7
  238. chia/consensus/coin_store_protocol.py +5 -6
  239. chia/consensus/condition_tools.py +4 -4
  240. chia/consensus/cost_calculator.py +2 -3
  241. chia/consensus/default_constants.py +16 -13
  242. chia/consensus/deficit.py +1 -3
  243. chia/consensus/difficulty_adjustment.py +3 -5
  244. chia/consensus/find_fork_point.py +2 -4
  245. chia/consensus/full_block_to_block_record.py +11 -13
  246. chia/consensus/generator_tools.py +2 -3
  247. chia/consensus/get_block_challenge.py +42 -26
  248. chia/consensus/get_block_generator.py +2 -3
  249. chia/consensus/make_sub_epoch_summary.py +8 -7
  250. chia/consensus/multiprocess_validation.py +31 -20
  251. chia/consensus/pos_quality.py +6 -23
  252. chia/consensus/pot_iterations.py +17 -44
  253. chia/consensus/signage_point.py +4 -5
  254. chia/consensus/vdf_info_computation.py +2 -4
  255. chia/daemon/client.py +8 -8
  256. chia/daemon/keychain_proxy.py +31 -37
  257. chia/daemon/server.py +32 -33
  258. chia/daemon/windows_signal.py +4 -3
  259. chia/data_layer/data_layer.py +86 -77
  260. chia/data_layer/data_layer_rpc_api.py +9 -9
  261. chia/data_layer/data_layer_rpc_client.py +13 -15
  262. chia/data_layer/data_layer_server.py +3 -3
  263. chia/data_layer/data_layer_util.py +14 -14
  264. chia/data_layer/data_layer_wallet.py +94 -101
  265. chia/data_layer/data_store.py +50 -50
  266. chia/data_layer/dl_wallet_store.py +9 -12
  267. chia/data_layer/download_data.py +8 -9
  268. chia/data_layer/s3_plugin_service.py +5 -9
  269. chia/data_layer/start_data_layer.py +5 -5
  270. chia/farmer/farmer.py +31 -31
  271. chia/farmer/farmer_api.py +45 -33
  272. chia/farmer/farmer_rpc_api.py +5 -4
  273. chia/farmer/farmer_rpc_client.py +6 -6
  274. chia/farmer/start_farmer.py +6 -6
  275. chia/full_node/block_store.py +13 -16
  276. chia/full_node/check_fork_next_block.py +1 -2
  277. chia/full_node/coin_store.py +15 -16
  278. chia/full_node/eligible_coin_spends.py +3 -3
  279. chia/full_node/fee_estimate_store.py +2 -3
  280. chia/full_node/fee_tracker.py +1 -2
  281. chia/full_node/full_block_utils.py +4 -4
  282. chia/full_node/full_node.py +238 -224
  283. chia/full_node/full_node_api.py +193 -150
  284. chia/full_node/full_node_rpc_api.py +53 -31
  285. chia/full_node/full_node_rpc_client.py +18 -19
  286. chia/full_node/full_node_store.py +45 -43
  287. chia/full_node/hint_management.py +2 -2
  288. chia/full_node/mempool.py +17 -19
  289. chia/full_node/mempool_manager.py +89 -42
  290. chia/full_node/pending_tx_cache.py +2 -3
  291. chia/full_node/start_full_node.py +5 -5
  292. chia/full_node/sync_store.py +3 -4
  293. chia/full_node/tx_processing_queue.py +34 -13
  294. chia/full_node/weight_proof.py +61 -48
  295. chia/harvester/harvester.py +25 -24
  296. chia/harvester/harvester_api.py +61 -38
  297. chia/harvester/harvester_rpc_api.py +10 -10
  298. chia/harvester/start_harvester.py +4 -4
  299. chia/introducer/introducer.py +3 -3
  300. chia/introducer/introducer_api.py +6 -4
  301. chia/introducer/start_introducer.py +4 -4
  302. chia/legacy/keyring.py +3 -3
  303. chia/plot_sync/delta.py +1 -2
  304. chia/plot_sync/receiver.py +20 -17
  305. chia/plot_sync/sender.py +15 -10
  306. chia/plotters/bladebit.py +7 -7
  307. chia/plotters/chiapos.py +2 -2
  308. chia/plotters/madmax.py +4 -4
  309. chia/plotters/plotters.py +4 -4
  310. chia/plotters/plotters_util.py +3 -3
  311. chia/plotting/cache.py +20 -14
  312. chia/plotting/check_plots.py +26 -35
  313. chia/plotting/create_plots.py +22 -23
  314. chia/plotting/manager.py +21 -14
  315. chia/plotting/prover.py +59 -42
  316. chia/plotting/util.py +16 -16
  317. chia/pools/pool_config.py +2 -1
  318. chia/pools/pool_puzzles.py +11 -12
  319. chia/pools/pool_wallet.py +34 -57
  320. chia/pools/pool_wallet_info.py +39 -10
  321. chia/protocols/farmer_protocol.py +8 -9
  322. chia/protocols/fee_estimate.py +3 -4
  323. chia/protocols/full_node_protocol.py +3 -4
  324. chia/protocols/harvester_protocol.py +27 -15
  325. chia/protocols/outbound_message.py +3 -3
  326. chia/protocols/pool_protocol.py +8 -9
  327. chia/protocols/shared_protocol.py +1 -2
  328. chia/protocols/solver_protocol.py +9 -2
  329. chia/protocols/timelord_protocol.py +4 -7
  330. chia/protocols/wallet_protocol.py +11 -12
  331. chia/rpc/rpc_client.py +9 -9
  332. chia/rpc/rpc_server.py +17 -17
  333. chia/rpc/util.py +2 -2
  334. chia/seeder/crawler.py +8 -8
  335. chia/seeder/crawler_api.py +21 -27
  336. chia/seeder/crawler_rpc_api.py +2 -2
  337. chia/seeder/dns_server.py +21 -21
  338. chia/seeder/start_crawler.py +4 -4
  339. chia/server/address_manager.py +15 -16
  340. chia/server/api_protocol.py +11 -11
  341. chia/server/chia_policy.py +46 -26
  342. chia/server/introducer_peers.py +2 -3
  343. chia/server/node_discovery.py +19 -19
  344. chia/server/rate_limit_numbers.py +4 -5
  345. chia/server/rate_limits.py +4 -4
  346. chia/server/resolve_peer_info.py +4 -4
  347. chia/server/server.py +49 -52
  348. chia/server/signal_handlers.py +6 -6
  349. chia/server/start_service.py +17 -17
  350. chia/server/upnp.py +4 -6
  351. chia/server/ws_connection.py +52 -37
  352. chia/simulator/add_blocks_in_batches.py +1 -3
  353. chia/simulator/block_tools.py +312 -200
  354. chia/simulator/full_node_simulator.py +56 -35
  355. chia/simulator/keyring.py +2 -3
  356. chia/simulator/setup_services.py +15 -15
  357. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  358. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  359. chia/simulator/simulator_protocol.py +1 -2
  360. chia/simulator/simulator_test_tools.py +3 -3
  361. chia/simulator/start_simulator.py +7 -7
  362. chia/simulator/wallet_tools.py +10 -10
  363. chia/solver/solver.py +10 -10
  364. chia/solver/solver_api.py +10 -8
  365. chia/solver/solver_rpc_api.py +2 -2
  366. chia/solver/start_solver.py +4 -4
  367. chia/ssl/cacert.pem +148 -90
  368. chia/ssl/chia_ca.crt +14 -10
  369. chia/ssl/chia_ca_old.crt +19 -0
  370. chia/ssl/create_ssl.py +4 -4
  371. chia/ssl/renewedselfsignedca.conf +4 -0
  372. chia/ssl/ssl_check.py +1 -2
  373. chia/timelord/iters_from_block.py +1 -4
  374. chia/timelord/start_timelord.py +4 -4
  375. chia/timelord/timelord.py +44 -40
  376. chia/timelord/timelord_api.py +6 -4
  377. chia/timelord/timelord_launcher.py +2 -2
  378. chia/timelord/timelord_rpc_api.py +2 -2
  379. chia/timelord/timelord_state.py +11 -12
  380. chia/types/block_protocol.py +1 -3
  381. chia/types/blockchain_format/coin.py +1 -3
  382. chia/types/blockchain_format/program.py +11 -8
  383. chia/types/blockchain_format/proof_of_space.py +123 -76
  384. chia/types/blockchain_format/tree_hash.py +3 -3
  385. chia/types/blockchain_format/vdf.py +1 -2
  386. chia/types/coin_spend.py +3 -3
  387. chia/types/mempool_item.py +5 -5
  388. chia/types/mempool_submission_status.py +2 -3
  389. chia/types/peer_info.py +1 -2
  390. chia/types/unfinished_header_block.py +3 -4
  391. chia/types/validation_state.py +1 -2
  392. chia/util/action_scope.py +8 -8
  393. chia/util/async_pool.py +5 -5
  394. chia/util/bech32m.py +1 -2
  395. chia/util/beta_metrics.py +2 -2
  396. chia/util/block_cache.py +4 -4
  397. chia/util/chia_logging.py +2 -2
  398. chia/util/chia_version.py +1 -2
  399. chia/util/config.py +15 -16
  400. chia/util/db_wrapper.py +26 -27
  401. chia/util/default_root.py +1 -2
  402. chia/util/errors.py +3 -3
  403. chia/util/file_keyring.py +14 -14
  404. chia/util/files.py +2 -3
  405. chia/util/hash.py +4 -4
  406. chia/util/initial-config.yaml +3 -5
  407. chia/util/inline_executor.py +2 -1
  408. chia/util/ip_address.py +1 -2
  409. chia/util/keychain.py +25 -27
  410. chia/util/keyring_wrapper.py +18 -19
  411. chia/util/lock.py +3 -4
  412. chia/util/log_exceptions.py +1 -2
  413. chia/util/lru_cache.py +2 -2
  414. chia/util/network.py +6 -6
  415. chia/util/path.py +2 -3
  416. chia/util/priority_mutex.py +2 -2
  417. chia/util/profiler.py +1 -2
  418. chia/util/safe_cancel_task.py +1 -2
  419. chia/util/streamable.py +22 -8
  420. chia/util/task_referencer.py +1 -1
  421. chia/util/timing.py +3 -3
  422. chia/util/virtual_project_analysis.py +6 -5
  423. chia/util/ws_message.py +2 -2
  424. chia/wallet/cat_wallet/cat_info.py +3 -4
  425. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  426. chia/wallet/cat_wallet/cat_utils.py +3 -4
  427. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  428. chia/wallet/cat_wallet/lineage_store.py +3 -4
  429. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  430. chia/wallet/coin_selection.py +9 -10
  431. chia/wallet/conditions.py +120 -105
  432. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  433. chia/wallet/derivation_record.py +1 -2
  434. chia/wallet/derive_keys.py +2 -4
  435. chia/wallet/did_wallet/did_info.py +10 -11
  436. chia/wallet/did_wallet/did_wallet.py +36 -82
  437. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  438. chia/wallet/driver_protocol.py +5 -7
  439. chia/wallet/lineage_proof.py +4 -4
  440. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  441. chia/wallet/nft_wallet/nft_info.py +8 -9
  442. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  443. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  444. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  445. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  446. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  447. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  448. chia/wallet/notification_manager.py +3 -3
  449. chia/wallet/notification_store.py +44 -61
  450. chia/wallet/outer_puzzles.py +6 -7
  451. chia/wallet/puzzle_drivers.py +34 -6
  452. chia/wallet/puzzles/clawback/drivers.py +6 -6
  453. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  454. chia/wallet/puzzles/load_clvm.py +1 -1
  455. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  456. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  457. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  458. chia/wallet/puzzles/tails.py +3 -3
  459. chia/wallet/singleton.py +5 -7
  460. chia/wallet/singleton_record.py +3 -3
  461. chia/wallet/start_wallet.py +5 -5
  462. chia/wallet/trade_manager.py +37 -58
  463. chia/wallet/trade_record.py +4 -4
  464. chia/wallet/trading/offer.py +59 -46
  465. chia/wallet/trading/trade_store.py +8 -9
  466. chia/wallet/transaction_record.py +8 -8
  467. chia/wallet/uncurried_puzzle.py +1 -2
  468. chia/wallet/util/clvm_streamable.py +12 -12
  469. chia/wallet/util/compute_hints.py +4 -5
  470. chia/wallet/util/curry_and_treehash.py +1 -2
  471. chia/wallet/util/merkle_tree.py +2 -3
  472. chia/wallet/util/peer_request_cache.py +8 -8
  473. chia/wallet/util/signing.py +85 -0
  474. chia/wallet/util/tx_config.py +15 -6
  475. chia/wallet/util/wallet_sync_utils.py +14 -16
  476. chia/wallet/util/wallet_types.py +2 -2
  477. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  478. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  479. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  480. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  481. chia/wallet/vc_wallet/vc_store.py +5 -6
  482. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  483. chia/wallet/wallet.py +50 -78
  484. chia/wallet/wallet_action_scope.py +11 -11
  485. chia/wallet/wallet_blockchain.py +12 -12
  486. chia/wallet/wallet_coin_record.py +12 -6
  487. chia/wallet/wallet_coin_store.py +24 -25
  488. chia/wallet/wallet_interested_store.py +3 -5
  489. chia/wallet/wallet_nft_store.py +10 -11
  490. chia/wallet/wallet_node.py +53 -61
  491. chia/wallet/wallet_node_api.py +5 -3
  492. chia/wallet/wallet_protocol.py +23 -23
  493. chia/wallet/wallet_puzzle_store.py +15 -18
  494. chia/wallet/wallet_request_types.py +778 -114
  495. chia/wallet/wallet_retry_store.py +1 -3
  496. chia/wallet/wallet_rpc_api.py +572 -909
  497. chia/wallet/wallet_rpc_client.py +87 -279
  498. chia/wallet/wallet_singleton_store.py +3 -4
  499. chia/wallet/wallet_state_manager.py +332 -106
  500. chia/wallet/wallet_transaction_store.py +11 -14
  501. chia/wallet/wallet_user_store.py +4 -6
  502. chia/wallet/wallet_weight_proof_handler.py +4 -4
  503. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
  504. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
  505. chia/apis.py +0 -21
  506. chia/consensus/check_time_locks.py +0 -57
  507. chia/data_layer/puzzles/__init__.py +0 -0
  508. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  509. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  510. chia/types/coin_record.py +0 -44
  511. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  512. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  513. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  514. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  515. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  516. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  517. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  518. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  520. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  521. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  522. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  524. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  525. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  526. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
  527. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
  528. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
@@ -4,9 +4,8 @@ import asyncio
4
4
  import contextlib
5
5
  import functools
6
6
  import logging
7
- from collections.abc import Awaitable
7
+ from collections.abc import Awaitable, Callable
8
8
  from dataclasses import dataclass
9
- from typing import Callable, Optional
10
9
  from unittest.mock import MagicMock
11
10
 
12
11
  import pytest
@@ -111,7 +110,9 @@ async def test_request_block_headers(
111
110
  assert [x.transactions_filter for x in bh] == [b"\x00"] * 6
112
111
 
113
112
  num_blocks = 20
114
- new_blocks = bt.get_consecutive_blocks(num_blocks, block_list_input=default_400_blocks, pool_reward_puzzle_hash=ph)
113
+ new_blocks = bt.get_consecutive_blocks(
114
+ num_blocks, block_list_input=default_400_blocks, farmer_reward_puzzle_hash=ph
115
+ )
115
116
  await add_blocks_in_batches(new_blocks, full_node_api.full_node)
116
117
  msg = await full_node_api.request_block_headers(wallet_protocol.RequestBlockHeaders(uint32(110), uint32(115), True))
117
118
  assert msg is not None
@@ -626,7 +627,7 @@ async def test_request_additions_errors(simulator_and_wallet: OldSimulatorsAndWa
626
627
 
627
628
  await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
628
629
 
629
- last_block: Optional[BlockRecord] = full_node_api.full_node.blockchain.get_peak()
630
+ last_block: BlockRecord | None = full_node_api.full_node.blockchain.get_peak()
630
631
  assert last_block is not None
631
632
 
632
633
  # Invalid height
@@ -1431,10 +1432,10 @@ async def test_retry_store(
1431
1432
 
1432
1433
  def flaky_get_coin_state(
1433
1434
  flakiness_info: FlakinessInfo,
1434
- func: Callable[[list[bytes32], WSChiaConnection, Optional[uint32]], Awaitable[list[CoinState]]],
1435
- ) -> Callable[[list[bytes32], WSChiaConnection, Optional[uint32]], Awaitable[list[CoinState]]]:
1435
+ func: Callable[[list[bytes32], WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]],
1436
+ ) -> Callable[[list[bytes32], WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]]:
1436
1437
  async def new_func(
1437
- coin_names: list[bytes32], peer: WSChiaConnection, fork_height: Optional[uint32] = None
1438
+ coin_names: list[bytes32], peer: WSChiaConnection, fork_height: uint32 | None = None
1438
1439
  ) -> list[CoinState]:
1439
1440
  if flakiness_info.coin_state_flaky:
1440
1441
  flakiness_info.coin_state_flaky = False
@@ -1447,10 +1448,10 @@ async def test_retry_store(
1447
1448
  request_puzzle_solution_failure_tested = False
1448
1449
 
1449
1450
  def flaky_request_puzzle_solution(
1450
- func: Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[Optional[Message]]],
1451
- ) -> Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[Optional[Message]]]:
1451
+ func: Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[Message | None]],
1452
+ ) -> Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[Message | None]]:
1452
1453
  @functools.wraps(func)
1453
- async def new_func(self: FullNodeAPI, request: wallet_protocol.RequestPuzzleSolution) -> Optional[Message]:
1454
+ async def new_func(self: FullNodeAPI, request: wallet_protocol.RequestPuzzleSolution) -> Message | None:
1454
1455
  nonlocal request_puzzle_solution_failure_tested
1455
1456
  if not request_puzzle_solution_failure_tested:
1456
1457
  request_puzzle_solution_failure_tested = True
@@ -1464,10 +1465,10 @@ async def test_retry_store(
1464
1465
 
1465
1466
  def flaky_fetch_children(
1466
1467
  flakiness_info: FlakinessInfo,
1467
- func: Callable[[bytes32, WSChiaConnection, Optional[uint32]], Awaitable[list[CoinState]]],
1468
- ) -> Callable[[bytes32, WSChiaConnection, Optional[uint32]], Awaitable[list[CoinState]]]:
1468
+ func: Callable[[bytes32, WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]],
1469
+ ) -> Callable[[bytes32, WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]]:
1469
1470
  async def new_func(
1470
- coin_name: bytes32, peer: WSChiaConnection, fork_height: Optional[uint32] = None
1471
+ coin_name: bytes32, peer: WSChiaConnection, fork_height: uint32 | None = None
1471
1472
  ) -> list[CoinState]:
1472
1473
  if flakiness_info.fetch_children_flaky:
1473
1474
  flakiness_info.fetch_children_flaky = False
@@ -1490,9 +1491,9 @@ async def test_retry_store(
1490
1491
  return new_func
1491
1492
 
1492
1493
  def flaky_info_for_puzhash(
1493
- flakiness_info: FlakinessInfo, func: Callable[[bytes32], Awaitable[Optional[WalletIdentifier]]]
1494
- ) -> Callable[[bytes32], Awaitable[Optional[WalletIdentifier]]]:
1495
- async def new_func(puzzle_hash: bytes32) -> Optional[WalletIdentifier]:
1494
+ flakiness_info: FlakinessInfo, func: Callable[[bytes32], Awaitable[WalletIdentifier | None]]
1495
+ ) -> Callable[[bytes32], Awaitable[WalletIdentifier | None]]:
1496
+ async def new_func(puzzle_hash: bytes32) -> WalletIdentifier | None:
1496
1497
  if flakiness_info.db_flaky:
1497
1498
  flakiness_info.db_flaky = False
1498
1499
  raise AIOSqliteError
@@ -1605,7 +1606,7 @@ async def test_bad_peak_mismatch(
1605
1606
  full_node_protocol.RespondProofOfWeight(wp, wp.recent_chain_data[-1].header_hash),
1606
1607
  )
1607
1608
  with monkeypatch.context() as m:
1608
- f: asyncio.Future[Optional[Message]] = asyncio.Future()
1609
+ f: asyncio.Future[Message | None] = asyncio.Future()
1609
1610
  f.set_result(wp_msg)
1610
1611
  m.setattr(full_node_api, "request_proof_of_weight", MagicMock(return_value=f))
1611
1612
 
@@ -1614,7 +1615,7 @@ async def test_bad_peak_mismatch(
1614
1615
  ProtocolMessageTypes.respond_block_header,
1615
1616
  wallet_protocol.RespondBlockHeader(wp.recent_chain_data[-1]),
1616
1617
  )
1617
- f2: asyncio.Future[Optional[Message]] = asyncio.Future()
1618
+ f2: asyncio.Future[Message | None] = asyncio.Future()
1618
1619
  f2.set_result(header_block_msg)
1619
1620
  m.setattr(full_node_api, "request_block_header", MagicMock(return_value=f2))
1620
1621
 
@@ -1638,7 +1639,7 @@ async def test_bad_peak_mismatch(
1638
1639
  async def test_long_sync_untrusted_break(
1639
1640
  setup_two_nodes_and_wallet: OldSimulatorsAndWallets,
1640
1641
  default_1000_blocks: list[FullBlock],
1641
- default_400_blocks: list[FullBlock],
1642
+ default_1500_blocks: list[FullBlock],
1642
1643
  self_hostname: str,
1643
1644
  caplog: pytest.LogCaptureFixture,
1644
1645
  use_delta_sync: bool,
@@ -1649,27 +1650,16 @@ async def test_long_sync_untrusted_break(
1649
1650
  wallet_node.config["trusted_peers"] = {trusted_full_node_server.node_id.hex(): None}
1650
1651
  wallet_node.config["use_delta_sync"] = use_delta_sync
1651
1652
 
1652
- sync_canceled = False
1653
-
1654
1653
  async def register_for_ph_updates(
1655
1654
  self: object,
1656
1655
  request: wallet_protocol.RegisterForPhUpdates,
1657
1656
  peer: WSChiaConnection,
1658
1657
  ) -> None:
1659
- nonlocal sync_canceled
1660
- # Just sleep a long time here to simulate a long-running untrusted sync
1661
- try:
1662
- await asyncio.sleep(120)
1663
- except Exception:
1664
- sync_canceled = True
1665
- raise
1658
+ await peer.wait_until_closed()
1666
1659
 
1667
1660
  def wallet_syncing() -> bool:
1668
1661
  return wallet_node.wallet_state_manager.sync_mode
1669
1662
 
1670
- def check_sync_canceled() -> bool:
1671
- return sync_canceled
1672
-
1673
1663
  def synced_to_trusted() -> bool:
1674
1664
  return trusted_full_node_server.node_id in wallet_node.synced_peers
1675
1665
 
@@ -1678,26 +1668,32 @@ async def test_long_sync_untrusted_break(
1678
1668
  untrusted_peers = sum(not wallet_node.is_trusted(peer) for peer in wallet_server.all_connections.values())
1679
1669
  return trusted_peers == 1 and untrusted_peers == 0
1680
1670
 
1681
- await add_blocks_in_batches(default_400_blocks, trusted_full_node_api.full_node)
1671
+ await add_blocks_in_batches(default_1500_blocks[:600], trusted_full_node_api.full_node)
1672
+ await add_blocks_in_batches(default_1000_blocks[:600], untrusted_full_node_api.full_node)
1682
1673
 
1683
- await add_blocks_in_batches(default_1000_blocks[:400], untrusted_full_node_api.full_node)
1684
-
1685
- with patch_request_handler(api=untrusted_full_node_api, handler=register_for_ph_updates):
1674
+ with (
1675
+ patch_request_handler(api=untrusted_full_node_api, handler=register_for_ph_updates),
1676
+ caplog.at_level(logging.INFO),
1677
+ ):
1686
1678
  # Connect to the untrusted peer and wait until the long sync started
1687
- await wallet_server.start_client(PeerInfo(self_hostname, untrusted_full_node_server.get_port()), None)
1679
+ assert await wallet_server.start_client(PeerInfo(self_hostname, untrusted_full_node_server.get_port()), None)
1680
+ untrusted_conn = wallet_server.all_connections.get(untrusted_full_node_server.node_id)
1681
+ assert untrusted_conn is not None
1688
1682
  await time_out_assert(30, wallet_syncing)
1689
- with caplog.at_level(logging.INFO):
1690
- # Connect to the trusted peer and make sure the running untrusted long sync gets interrupted via disconnect
1691
- await wallet_server.start_client(PeerInfo(self_hostname, trusted_full_node_server.get_port()), None)
1692
- await time_out_assert(600, wallet_height_at_least, True, wallet_node, len(default_400_blocks) - 1)
1693
- assert time_out_assert(10, synced_to_trusted)
1694
- assert untrusted_full_node_server.node_id not in wallet_node.synced_peers
1695
- assert "Connected to a synced trusted peer, disconnecting from all untrusted nodes." in caplog.text
1696
-
1697
- # Make sure the sync was interrupted
1698
- assert time_out_assert(30, check_sync_canceled)
1683
+
1684
+ # Connect to the trusted peer and make sure the running untrusted long sync gets interrupted via disconnect
1685
+ assert await wallet_server.start_client(PeerInfo(self_hostname, trusted_full_node_server.get_port()), None)
1686
+ await time_out_assert(600, wallet_height_at_least, True, wallet_node, 599)
1687
+ await time_out_assert(10, synced_to_trusted)
1688
+ assert untrusted_full_node_server.node_id not in wallet_node.synced_peers
1689
+
1690
+ assert "Connected to a synced trusted peer, disconnecting from all untrusted nodes." in caplog.text
1691
+ assert (
1692
+ f"Connection closed: {untrusted_conn.peer_info.host}, node id: {untrusted_full_node_server.node_id}"
1693
+ in caplog.text
1694
+ )
1699
1695
  # And that we only have a trusted peer left
1700
- assert time_out_assert(30, only_trusted_peer)
1696
+ await time_out_assert(30, only_trusted_peer)
1701
1697
 
1702
1698
 
1703
1699
  @pytest.mark.anyio
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
- from typing import Optional
5
4
 
6
5
  import pytest
7
6
  from chia_rs.sized_bytes import bytes32
@@ -77,14 +76,14 @@ def test_nested_serialization() -> None:
77
76
  @streamable
78
77
  @dataclasses.dataclass(frozen=True)
79
78
  class Compound(Streamable):
80
- optional: Optional[BasicCLVMStreamable]
79
+ optional: BasicCLVMStreamable | None
81
80
  list: list[BasicCLVMStreamable]
82
81
 
83
82
 
84
83
  @clvm_streamable
85
84
  @dataclasses.dataclass(frozen=True)
86
85
  class CompoundCLVM(Streamable):
87
- optional: Optional[BasicCLVMStreamable]
86
+ optional: BasicCLVMStreamable | None
88
87
  list: list[BasicCLVMStreamable]
89
88
 
90
89
 
@@ -66,8 +66,8 @@ def test_list_parsing(id: ValueAndArgs, show_unconfirmed: ValueAndArgs, paginate
66
66
  {
67
67
  "num_environments": 1,
68
68
  "blocks_needed": [3], # 6 coins to test pagination
69
- "reuse_puzhash": True, # irrelevent
70
- "trusted": True, # irrelevent
69
+ "reuse_puzhash": True, # irrelevant
70
+ "trusted": True, # irrelevant
71
71
  }
72
72
  ],
73
73
  indirect=True,
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Any, Optional, Union
4
+ from typing import Any
5
5
 
6
6
  import pytest
7
7
  from chia_rs.sized_bytes import bytes32
@@ -214,11 +214,9 @@ def test_unknown_condition() -> None:
214
214
  ],
215
215
  )
216
216
  def test_announcement_inversions(
217
- drivers: Union[
218
- tuple[type[CreateCoinAnnouncement], type[AssertCoinAnnouncement]],
219
- tuple[type[CreatePuzzleAnnouncement], type[AssertPuzzleAnnouncement]],
220
- tuple[type[CreateAnnouncement], type[AssertAnnouncement]],
221
- ],
217
+ drivers: tuple[type[CreateCoinAnnouncement], type[AssertCoinAnnouncement]]
218
+ | tuple[type[CreatePuzzleAnnouncement], type[AssertPuzzleAnnouncement]]
219
+ | tuple[type[CreateAnnouncement], type[AssertAnnouncement]],
222
220
  ) -> None:
223
221
  create_driver, assert_driver = drivers
224
222
  # mypy is not smart enough to understand that this `if` narrows down the potential types it could be
@@ -250,7 +248,7 @@ def test_announcement_inversions(
250
248
  class TimelockInfo:
251
249
  drivers: list[Condition]
252
250
  parsed_info: ConditionValidTimes
253
- conditions_after: Optional[list[Condition]] = None
251
+ conditions_after: list[Condition] | None = None
254
252
 
255
253
 
256
254
  @pytest.mark.parametrize(
@@ -285,9 +283,7 @@ class TimelockInfo:
285
283
  ],
286
284
  )
287
285
  def test_timelock_parsing(timelock_info: TimelockInfo) -> None:
288
- assert timelock_info.parsed_info == parse_timelock_info(
289
- [UnknownCondition(Program.to(None), []), *timelock_info.drivers]
290
- )
286
+ assert timelock_info.parsed_info == parse_timelock_info([UnknownCondition(Program.NIL, []), *timelock_info.drivers])
291
287
  assert timelock_info.parsed_info.to_conditions() == (
292
288
  timelock_info.conditions_after if timelock_info.conditions_after is not None else timelock_info.drivers
293
289
  )
@@ -349,47 +345,45 @@ def test_timelock_parsing(timelock_info: TimelockInfo) -> None:
349
345
  )
350
346
  def test_invalid_condition(
351
347
  cond: type[
352
- Union[
353
- AggSigParent,
354
- AggSigPuzzle,
355
- AggSigAmount,
356
- AggSigPuzzleAmount,
357
- AggSigParentAmount,
358
- AggSigParentPuzzle,
359
- AggSigUnsafe,
360
- AggSigMe,
361
- CreateCoin,
362
- ReserveFee,
363
- AssertCoinAnnouncement,
364
- CreateCoinAnnouncement,
365
- AssertPuzzleAnnouncement,
366
- CreatePuzzleAnnouncement,
367
- AssertConcurrentSpend,
368
- AssertConcurrentPuzzle,
369
- AssertMyCoinID,
370
- AssertMyParentID,
371
- AssertMyPuzzleHash,
372
- AssertMyAmount,
373
- AssertMyBirthSeconds,
374
- AssertMyBirthHeight,
375
- AssertSecondsRelative,
376
- AssertSecondsAbsolute,
377
- AssertHeightRelative,
378
- AssertHeightAbsolute,
379
- AssertBeforeSecondsRelative,
380
- AssertBeforeSecondsAbsolute,
381
- AssertBeforeHeightRelative,
382
- AssertBeforeHeightAbsolute,
383
- Softfork,
384
- Remark,
385
- UnknownCondition,
386
- AggSig,
387
- CreateAnnouncement,
388
- AssertAnnouncement,
389
- Timelock,
390
- SendMessage,
391
- ReceiveMessage,
392
- ]
348
+ AggSigParent
349
+ | AggSigPuzzle
350
+ | AggSigAmount
351
+ | AggSigPuzzleAmount
352
+ | AggSigParentAmount
353
+ | AggSigParentPuzzle
354
+ | AggSigUnsafe
355
+ | AggSigMe
356
+ | CreateCoin
357
+ | ReserveFee
358
+ | AssertCoinAnnouncement
359
+ | CreateCoinAnnouncement
360
+ | AssertPuzzleAnnouncement
361
+ | CreatePuzzleAnnouncement
362
+ | AssertConcurrentSpend
363
+ | AssertConcurrentPuzzle
364
+ | AssertMyCoinID
365
+ | AssertMyParentID
366
+ | AssertMyPuzzleHash
367
+ | AssertMyAmount
368
+ | AssertMyBirthSeconds
369
+ | AssertMyBirthHeight
370
+ | AssertSecondsRelative
371
+ | AssertSecondsAbsolute
372
+ | AssertHeightRelative
373
+ | AssertHeightAbsolute
374
+ | AssertBeforeSecondsRelative
375
+ | AssertBeforeSecondsAbsolute
376
+ | AssertBeforeHeightRelative
377
+ | AssertBeforeHeightAbsolute
378
+ | Softfork
379
+ | Remark
380
+ | UnknownCondition
381
+ | AggSig
382
+ | CreateAnnouncement
383
+ | AssertAnnouncement
384
+ | Timelock
385
+ | SendMessage
386
+ | ReceiveMessage
393
387
  ],
394
388
  prg: bytes,
395
389
  ) -> None:
@@ -50,7 +50,7 @@ def test_debug_spend_bundle(capsys: pytest.CaptureFixture[str]) -> None:
50
50
  make_spend(
51
51
  coin_bad_reveal,
52
52
  ACS,
53
- Program.to(None),
53
+ Program.NIL,
54
54
  ),
55
55
  make_spend(
56
56
  coin,
@@ -60,7 +60,7 @@ def test_debug_spend_bundle(capsys: pytest.CaptureFixture[str]) -> None:
60
60
  make_spend(
61
61
  child_coin,
62
62
  ACS,
63
- Program.to(None),
63
+ Program.NIL,
64
64
  ),
65
65
  ],
66
66
  sig,
@@ -5,10 +5,9 @@ from collections import OrderedDict
5
5
  from collections.abc import AsyncGenerator
6
6
  from dataclasses import dataclass
7
7
  from random import Random
8
- from typing import Optional
9
8
 
10
9
  import pytest
11
- from chia_rs import AugSchemeMPL, Coin, CoinSpend, CoinState, Program, SpendBundle
10
+ from chia_rs import AugSchemeMPL, Coin, CoinRecord, CoinSpend, CoinState, Program, SpendBundle
12
11
  from chia_rs.sized_bytes import bytes32
13
12
  from chia_rs.sized_ints import uint8, uint16, uint32, uint64
14
13
 
@@ -26,7 +25,6 @@ from chia.simulator import simulator_protocol
26
25
  from chia.simulator.block_tools import BlockTools
27
26
  from chia.simulator.full_node_simulator import FullNodeSimulator
28
27
  from chia.simulator.start_simulator import SimulatorFullNodeService
29
- from chia.types.coin_record import CoinRecord
30
28
  from chia.types.mempool_inclusion_status import MempoolInclusionStatus
31
29
  from chia.util.hash import std_hash
32
30
  from chia.wallet.wallet_service import WalletService
@@ -621,14 +619,14 @@ async def test_request_puzzle_state_limit(one_node: OneNode, self_hostname: str)
621
619
  class PuzzleStateData:
622
620
  coin_states: list[CoinState]
623
621
  end_of_batch: bool
624
- previous_height: Optional[uint32]
622
+ previous_height: uint32 | None
625
623
  header_hash: bytes32
626
624
 
627
625
 
628
626
  async def sync_puzzle_hashes(
629
627
  puzzle_hashes: list[bytes32],
630
628
  *,
631
- initial_previous_height: Optional[uint32],
629
+ initial_previous_height: uint32 | None,
632
630
  initial_header_hash: bytes32,
633
631
  filters: wallet_protocol.CoinStateFilters,
634
632
  subscribe_when_finished: bool = False,
@@ -893,7 +891,7 @@ async def subscribe_puzzle(
893
891
  assert len(response.coin_states) == existing_coin_states
894
892
 
895
893
 
896
- async def spend_coin(simulator: FullNodeSimulator, coin: Coin, solution: Optional[Program] = None) -> bytes32:
894
+ async def spend_coin(simulator: FullNodeSimulator, coin: Coin, solution: Program | None = None) -> bytes32:
897
895
  bundle = SpendBundle(
898
896
  [CoinSpend(coin, IDENTITY_PUZZLE, Program.to([]) if solution is None else solution)], AugSchemeMPL.aggregate([])
899
897
  )
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import random
4
4
  import tempfile
5
5
  from pathlib import Path
6
- from typing import Any, Optional
6
+ from typing import Any
7
7
 
8
8
  import pytest
9
9
  from chia_rs.sized_bytes import bytes32
@@ -109,8 +109,8 @@ async def test_notifications(
109
109
 
110
110
  notification_manager_2.potentially_add_new_notification = track_coin_state
111
111
 
112
- allow_larger_height: Optional[int] = None
113
- allow_height: Optional[int] = None
112
+ allow_larger_height: int | None = None
113
+ allow_height: int | None = None
114
114
 
115
115
  for case in ("block all", "block too low", "allow", "allow_larger", "block_too_large"):
116
116
  msg: bytes = bytes(case, "utf8")
@@ -165,34 +165,34 @@ async def test_notifications(
165
165
  assert allow_larger_height is not None
166
166
  assert allow_height is not None
167
167
 
168
- notifications = await notification_manager_2.notification_store.get_all_notifications(pagination=(0, 2))
168
+ notifications = await notification_manager_2.notification_store.get_notifications(pagination=(0, 2))
169
169
  assert len(notifications) == 2
170
170
  assert notifications[0].message == b"allow_larger"
171
171
  assert notifications[0].height == allow_larger_height
172
- notifications = await notification_manager_2.notification_store.get_all_notifications(pagination=(1, None))
172
+ notifications = await notification_manager_2.notification_store.get_notifications(pagination=(1, None))
173
173
  assert len(notifications) == 1
174
174
  assert notifications[0].message == b"allow"
175
175
  assert notifications[0].height == allow_height
176
- notifications = await notification_manager_2.notification_store.get_all_notifications(pagination=(0, 1))
176
+ notifications = await notification_manager_2.notification_store.get_notifications(pagination=(0, 1))
177
177
  assert len(notifications) == 1
178
178
  assert notifications[0].message == b"allow_larger"
179
- notifications = await notification_manager_2.notification_store.get_all_notifications(pagination=(None, 1))
179
+ notifications = await notification_manager_2.notification_store.get_notifications(pagination=(None, 1))
180
180
  assert len(notifications) == 1
181
181
  assert notifications[0].message == b"allow_larger"
182
182
  assert (
183
- await notification_manager_2.notification_store.get_notifications([n.id for n in notifications])
183
+ await notification_manager_2.notification_store.get_notifications(coin_ids=[n.id for n in notifications])
184
184
  == notifications
185
185
  )
186
186
 
187
- sent_notifications = await notification_manager_1.notification_store.get_all_notifications()
187
+ sent_notifications = await notification_manager_1.notification_store.get_notifications()
188
188
  assert len(sent_notifications) == 0
189
189
 
190
- await notification_manager_2.notification_store.delete_all_notifications()
191
- assert len(await notification_manager_2.notification_store.get_all_notifications()) == 0
190
+ await notification_manager_2.notification_store.delete_notifications()
191
+ assert len(await notification_manager_2.notification_store.get_notifications()) == 0
192
192
  await notification_manager_2.notification_store.add_notification(notifications[0])
193
- await notification_manager_2.notification_store.delete_notifications([n.id for n in notifications])
194
- assert len(await notification_manager_2.notification_store.get_all_notifications()) == 0
193
+ await notification_manager_2.notification_store.delete_notifications(coin_ids=[n.id for n in notifications])
194
+ assert len(await notification_manager_2.notification_store.get_notifications()) == 0
195
195
 
196
196
  assert not await func(*notification_manager_2.most_recent_args)
197
- await notification_manager_2.notification_store.delete_all_notifications()
197
+ await notification_manager_2.notification_store.delete_notifications()
198
198
  assert not await func(*notification_manager_2.most_recent_args)
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
- from typing import Optional
5
4
 
6
5
  import click
7
6
  import pytest
@@ -135,7 +134,7 @@ async def test_p2dohp_wallet_signer_protocol(wallet_environments: WalletTestFram
135
134
  async with wallet.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=False) as action_scope:
136
135
  [coin] = await wallet.select_coins(uint64(0), action_scope)
137
136
  puzzle: Program = await wallet.puzzle_for_puzzle_hash(coin.puzzle_hash)
138
- delegated_puzzle: Program = Program.to(None)
137
+ delegated_puzzle: Program = Program.NIL
139
138
  delegated_puzzle_hash: bytes32 = delegated_puzzle.get_tree_hash()
140
139
  solution: Program = Program.to([None, None, None])
141
140
 
@@ -145,9 +144,9 @@ async def test_p2dohp_wallet_signer_protocol(wallet_environments: WalletTestFram
145
144
  solution,
146
145
  )
147
146
 
148
- derivation_record: Optional[
149
- DerivationRecord
150
- ] = await wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(coin.puzzle_hash)
147
+ derivation_record: (
148
+ DerivationRecord | None
149
+ ) = await wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(coin.puzzle_hash)
151
150
  assert derivation_record is not None
152
151
  pubkey: G1Element = derivation_record.pubkey
153
152
  atom = puzzle.uncurry()[1].at("f").atom
@@ -687,6 +686,7 @@ async def test_signer_commands(wallet_environments: WalletTestFramework) -> None
687
686
  )
688
687
 
689
688
 
689
+ @pytest.mark.filterwarnings("ignore:The parameter .* is used more than once:UserWarning")
690
690
  def test_signer_command_default_parsing() -> None:
691
691
  check_click_parsing(
692
692
  GatherSigningInfoCMD(
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from collections.abc import Callable
3
4
  from dataclasses import dataclass
4
- from typing import Any, Callable, Optional, TypeVar, cast, get_args, get_origin
5
+ from typing import Any, TypeVar, cast, get_args, get_origin
5
6
 
6
7
  from chia_rs import CoinSpend, G1Element, G2Element
7
8
  from chia_rs.sized_bytes import bytes32
@@ -78,7 +79,7 @@ class PuzzleDB:
78
79
  def add_puzzle(self, puzzle: Program) -> None:
79
80
  self._db[puzzle.get_tree_hash()] = Program.from_bytes(bytes(puzzle))
80
81
 
81
- def puzzle_for_hash(self, puzzle_hash: bytes32) -> Optional[Program]:
82
+ def puzzle_for_hash(self, puzzle_hash: bytes32) -> Program | None:
82
83
  return self._db.get(puzzle_hash)
83
84
 
84
85
 
@@ -237,7 +238,7 @@ class SingletonWallet:
237
238
  current_state: Coin
238
239
  lineage_proof: Program
239
240
 
240
- def inner_puzzle(self, puzzle_db: PuzzleDB) -> Optional[Program]:
241
+ def inner_puzzle(self, puzzle_db: PuzzleDB) -> Program | None:
241
242
  puzzle = puzzle_db.puzzle_for_hash(self.current_state.puzzle_hash)
242
243
  if puzzle is None:
243
244
  return None
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
4
  import random
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
 
7
7
  import pytest
8
8
  from chia_rs.sized_bytes import bytes32
@@ -31,24 +31,24 @@ coin_2 = Coin(bytes32.random(module_seeded_random), bytes32.random(module_seeded
31
31
  coin_3 = Coin(bytes32.random(module_seeded_random), bytes32.random(module_seeded_random), uint64(12312 - 1234))
32
32
 
33
33
  tr1 = TransactionRecord(
34
- uint32(0), # confirmed height
35
- uint64(1000), # created_at_time
36
- bytes32(bytes32.zeros), # to_puzzle_hash
37
- uint64(1234), # amount
38
- uint64(12), # fee_amount
39
- False, # confirmed
40
- uint32(0), # sent
41
- None, # Optional[SpendBundle] spend_bundle
42
- [coin_2, coin_3], # additions
43
- [coin_1], # removals
44
- uint32(1), # wallet_id
45
- [], # list[tuple[str, uint8, Optional[str]]] sent_to
46
- bytes32(bytes32.random(module_seeded_random)), # trade_id
47
- uint32(TransactionType.OUTGOING_TX), # type
48
- bytes32(bytes32.random(module_seeded_random)), # name
49
- {}, # memos
50
- ConditionValidTimes(),
51
- encode_puzzle_hash(bytes32(bytes32.zeros), "txch"),
34
+ confirmed_at_height=uint32(0),
35
+ created_at_time=uint64(1000),
36
+ to_puzzle_hash=bytes32(bytes32.zeros),
37
+ to_address=encode_puzzle_hash(bytes32(bytes32.zeros), "txch"),
38
+ amount=uint64(1234),
39
+ fee_amount=uint64(12),
40
+ confirmed=False,
41
+ sent=uint32(0),
42
+ spend_bundle=None,
43
+ additions=[coin_2, coin_3],
44
+ removals=[coin_1],
45
+ wallet_id=uint32(1),
46
+ sent_to=[],
47
+ trade_id=bytes32(bytes32.random(module_seeded_random)),
48
+ type=uint32(TransactionType.OUTGOING_TX),
49
+ name=bytes32(bytes32.random(module_seeded_random)),
50
+ memos={},
51
+ valid_times=ConditionValidTimes(),
52
52
  )
53
53
 
54
54
  MINIMUM_CONFIG = {
@@ -811,7 +811,7 @@ async def test_get_not_sent(seeded_random: random.Random) -> None:
811
811
 
812
812
  @pytest.mark.anyio
813
813
  async def test_transaction_record_is_valid() -> None:
814
- invalid_attempts: list[tuple[str, uint8, Optional[str]]] = []
814
+ invalid_attempts: list[tuple[str, uint8, str | None]] = []
815
815
  # The tx should be valid as long as we don't have minimum_send_attempts failed attempts
816
816
  while len(invalid_attempts) < minimum_send_attempts:
817
817
  assert dataclasses.replace(tr1, sent_to=invalid_attempts).is_valid()
@@ -106,7 +106,7 @@ def test_list_to_binary_tree() -> None:
106
106
  @pytest.mark.parametrize(
107
107
  "serializations",
108
108
  [
109
- (tuple(), Program.to(None), []),
109
+ (tuple(), Program.NIL, []),
110
110
  ((bytes32.zeros,), Program.to([bytes32.zeros]), [LineageProofField.PARENT_NAME]),
111
111
  (
112
112
  (bytes32.zeros, bytes32.zeros),
@@ -129,7 +129,7 @@ def test_lineage_proof_varargs(serializations: tuple[tuple[Any, ...], Program, l
129
129
  @pytest.mark.parametrize(
130
130
  "serializations",
131
131
  [
132
- ({}, Program.to(None), []),
132
+ ({}, Program.NIL, []),
133
133
  ({"parent_name": bytes32.zeros}, Program.to([bytes32.zeros]), [LineageProofField.PARENT_NAME]),
134
134
  (
135
135
  {"parent_name": bytes32.zeros, "inner_puzzle_hash": bytes32.zeros},