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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_blockchain_transactions.py +5 -2
  6. chia/_tests/blockchain/test_build_chains.py +2 -4
  7. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  8. chia/_tests/clvm/coin_store.py +4 -7
  9. chia/_tests/clvm/test_clvm_step.py +4 -4
  10. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  11. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  12. chia/_tests/clvm/test_singletons.py +2 -4
  13. chia/_tests/clvm/test_spend_sim.py +2 -2
  14. chia/_tests/cmds/cmd_test_utils.py +27 -45
  15. chia/_tests/cmds/test_cmd_framework.py +6 -6
  16. chia/_tests/cmds/test_daemon.py +3 -3
  17. chia/_tests/cmds/test_show.py +4 -4
  18. chia/_tests/cmds/test_tx_config_args.py +1 -2
  19. chia/_tests/cmds/testing_classes.py +4 -5
  20. chia/_tests/cmds/wallet/test_did.py +24 -27
  21. chia/_tests/cmds/wallet/test_nft.py +12 -10
  22. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  23. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  24. chia/_tests/conftest.py +66 -31
  25. chia/_tests/connection_utils.py +2 -2
  26. chia/_tests/core/cmds/test_beta.py +4 -4
  27. chia/_tests/core/cmds/test_keys.py +2 -3
  28. chia/_tests/core/cmds/test_wallet.py +15 -15
  29. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  30. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  31. chia/_tests/core/daemon/test_daemon.py +11 -11
  32. chia/_tests/core/data_layer/conftest.py +2 -2
  33. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  34. chia/_tests/core/data_layer/test_data_store.py +10 -10
  35. chia/_tests/core/data_layer/util.py +11 -11
  36. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  37. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  38. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  39. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  40. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  41. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  42. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  43. chia/_tests/core/full_node/test_conditions.py +21 -23
  44. chia/_tests/core/full_node/test_full_node.py +273 -70
  45. chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
  46. chia/_tests/core/full_node/test_hint_management.py +2 -4
  47. chia/_tests/core/full_node/test_performance.py +0 -1
  48. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  49. chia/_tests/core/full_node/test_transactions.py +1 -2
  50. chia/_tests/core/full_node/test_tx_processing_queue.py +198 -30
  51. chia/_tests/core/mempool/test_mempool.py +54 -50
  52. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  53. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  54. chia/_tests/core/mempool/test_mempool_manager.py +988 -854
  55. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  56. chia/_tests/core/server/serve.py +7 -7
  57. chia/_tests/core/server/test_dos.py +1 -2
  58. chia/_tests/core/server/test_event_loop.py +12 -4
  59. chia/_tests/core/server/test_loop.py +7 -8
  60. chia/_tests/core/server/test_rate_limits.py +9 -8
  61. chia/_tests/core/server/test_server.py +61 -1
  62. chia/_tests/core/services/test_services.py +2 -2
  63. chia/_tests/core/ssl/test_ssl.py +2 -2
  64. chia/_tests/core/test_cost_calculation.py +2 -6
  65. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  66. chia/_tests/core/test_filter.py +0 -1
  67. chia/_tests/core/test_full_node_rpc.py +2 -2
  68. chia/_tests/core/test_merkle_set.py +1 -2
  69. chia/_tests/core/test_seeder.py +4 -4
  70. chia/_tests/core/util/test_config.py +4 -4
  71. chia/_tests/core/util/test_jsonify.py +2 -2
  72. chia/_tests/core/util/test_keychain.py +3 -3
  73. chia/_tests/core/util/test_lockfile.py +2 -1
  74. chia/_tests/core/util/test_log_exceptions.py +1 -2
  75. chia/_tests/core/util/test_streamable.py +17 -17
  76. chia/_tests/db/test_db_wrapper.py +3 -2
  77. chia/_tests/environments/wallet.py +14 -14
  78. chia/_tests/ether.py +4 -3
  79. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  80. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  81. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  82. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  83. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  84. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  85. chia/_tests/harvester/test_harvester_api.py +11 -4
  86. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  87. chia/_tests/plot_sync/test_receiver.py +11 -10
  88. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  89. chia/_tests/plot_sync/util.py +1 -2
  90. chia/_tests/plotting/test_plot_manager.py +7 -6
  91. chia/_tests/plotting/test_prover.py +30 -38
  92. chia/_tests/pools/test_pool_cmdline.py +4 -6
  93. chia/_tests/pools/test_pool_rpc.py +203 -61
  94. chia/_tests/pools/test_pool_wallet.py +3 -3
  95. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  96. chia/_tests/process_junit.py +2 -2
  97. chia/_tests/rpc/test_rpc_client.py +4 -4
  98. chia/_tests/rpc/test_rpc_server.py +3 -3
  99. chia/_tests/simulation/test_simulation.py +12 -25
  100. chia/_tests/solver/test_solver_service.py +13 -4
  101. chia/_tests/testconfig.py +2 -2
  102. chia/_tests/timelord/test_new_peak.py +22 -11
  103. chia/_tests/tools/test_run_block.py +0 -2
  104. chia/_tests/tools/test_virtual_project.py +2 -1
  105. chia/_tests/util/benchmarks.py +1 -0
  106. chia/_tests/util/blockchain.py +38 -36
  107. chia/_tests/util/blockchain_mock.py +11 -11
  108. chia/_tests/util/build_network_protocol_files.py +2 -1
  109. chia/_tests/util/coin_store.py +2 -1
  110. chia/_tests/util/config.py +1 -1
  111. chia/_tests/util/db_connection.py +2 -3
  112. chia/_tests/util/full_sync.py +9 -11
  113. chia/_tests/util/gen_ssl_certs.py +4 -5
  114. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  115. chia/_tests/util/misc.py +24 -24
  116. chia/_tests/util/network_protocol_data.py +20 -3
  117. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  118. chia/_tests/util/protocol_messages_json.py +292 -3
  119. chia/_tests/util/setup_nodes.py +62 -47
  120. chia/_tests/util/spend_sim.py +57 -57
  121. chia/_tests/util/test_async_pool.py +2 -3
  122. chia/_tests/util/test_chia_version.py +1 -3
  123. chia/_tests/util/test_config.py +3 -3
  124. chia/_tests/util/test_full_block_utils.py +6 -3
  125. chia/_tests/util/test_limited_semaphore.py +1 -2
  126. chia/_tests/util/test_misc.py +2 -2
  127. chia/_tests/util/test_network.py +1 -2
  128. chia/_tests/util/test_priority_mutex.py +3 -3
  129. chia/_tests/util/test_recursive_replace.py +5 -6
  130. chia/_tests/util/test_replace_str_to_bytes.py +9 -10
  131. chia/_tests/util/test_testnet_overrides.py +3 -3
  132. chia/_tests/util/time_out_assert.py +2 -2
  133. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  134. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  135. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  136. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  137. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  138. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  139. chia/_tests/wallet/conftest.py +6 -6
  140. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  141. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  142. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  145. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  146. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  147. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  148. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  149. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  150. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  151. chia/_tests/wallet/sync/test_wallet_sync.py +63 -60
  152. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  153. chia/_tests/wallet/test_coin_management.py +2 -2
  154. chia/_tests/wallet/test_conditions.py +45 -51
  155. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  156. chia/_tests/wallet/test_new_wallet_protocol.py +17 -17
  157. chia/_tests/wallet/test_notifications.py +14 -14
  158. chia/_tests/wallet/test_signer_protocol.py +5 -5
  159. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  160. chia/_tests/wallet/test_transaction_store.py +20 -20
  161. chia/_tests/wallet/test_util.py +2 -2
  162. chia/_tests/wallet/test_wallet.py +380 -228
  163. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  164. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  165. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  166. chia/_tests/wallet/test_wallet_node.py +16 -15
  167. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  168. chia/_tests/wallet/test_wallet_utils.py +2 -3
  169. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  170. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  171. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  172. chia/_tests/wallet/wallet_block_tools.py +12 -11
  173. chia/_tests/weight_proof/config.py +1 -0
  174. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  175. chia/apis/__init__.py +21 -0
  176. chia/apis/farmer_stub.py +102 -0
  177. chia/apis/full_node_stub.py +374 -0
  178. chia/apis/harvester_stub.py +57 -0
  179. chia/apis/introducer_stub.py +35 -0
  180. chia/apis/solver_stub.py +30 -0
  181. chia/apis/stub_protocol_registry.py +21 -0
  182. chia/apis/timelord_stub.py +39 -0
  183. chia/apis/wallet_stub.py +161 -0
  184. chia/cmds/beta.py +3 -4
  185. chia/cmds/beta_funcs.py +4 -3
  186. chia/cmds/check_wallet_db.py +4 -4
  187. chia/cmds/chia.py +1 -2
  188. chia/cmds/cmd_classes.py +11 -13
  189. chia/cmds/cmd_helpers.py +11 -11
  190. chia/cmds/cmds_util.py +15 -15
  191. chia/cmds/coin_funcs.py +6 -7
  192. chia/cmds/coins.py +2 -3
  193. chia/cmds/configure.py +1 -2
  194. chia/cmds/data.py +42 -42
  195. chia/cmds/data_funcs.py +81 -81
  196. chia/cmds/db.py +4 -5
  197. chia/cmds/db_backup_func.py +2 -2
  198. chia/cmds/db_upgrade_func.py +3 -3
  199. chia/cmds/db_validate_func.py +2 -2
  200. chia/cmds/dev/data.py +4 -4
  201. chia/cmds/dev/gh.py +5 -5
  202. chia/cmds/dev/installers.py +2 -3
  203. chia/cmds/dev/mempool.py +3 -4
  204. chia/cmds/dev/mempool_funcs.py +4 -4
  205. chia/cmds/dev/sim.py +8 -8
  206. chia/cmds/dump_keyring.py +3 -3
  207. chia/cmds/farm.py +6 -8
  208. chia/cmds/farm_funcs.py +25 -24
  209. chia/cmds/init_funcs.py +4 -4
  210. chia/cmds/keys.py +16 -18
  211. chia/cmds/keys_funcs.py +36 -36
  212. chia/cmds/netspace.py +1 -3
  213. chia/cmds/netspace_funcs.py +1 -2
  214. chia/cmds/options.py +3 -2
  215. chia/cmds/param_types.py +17 -16
  216. chia/cmds/passphrase.py +6 -7
  217. chia/cmds/passphrase_funcs.py +11 -13
  218. chia/cmds/peer.py +1 -3
  219. chia/cmds/peer_funcs.py +3 -3
  220. chia/cmds/plotnft.py +6 -7
  221. chia/cmds/plotnft_funcs.py +37 -26
  222. chia/cmds/rpc.py +3 -3
  223. chia/cmds/show.py +3 -5
  224. chia/cmds/show_funcs.py +9 -9
  225. chia/cmds/sim_funcs.py +25 -26
  226. chia/cmds/solver.py +1 -3
  227. chia/cmds/solver_funcs.py +1 -2
  228. chia/cmds/start_funcs.py +2 -2
  229. chia/cmds/wallet.py +76 -81
  230. chia/cmds/wallet_funcs.py +206 -177
  231. chia/consensus/augmented_chain.py +6 -6
  232. chia/consensus/block_body_validation.py +19 -15
  233. chia/consensus/block_creation.py +25 -21
  234. chia/consensus/block_header_validation.py +27 -13
  235. chia/consensus/block_height_map.py +3 -6
  236. chia/consensus/block_height_map_protocol.py +2 -2
  237. chia/consensus/block_record.py +2 -4
  238. chia/consensus/blockchain.py +58 -40
  239. chia/consensus/blockchain_interface.py +7 -7
  240. chia/consensus/coin_store_protocol.py +5 -6
  241. chia/consensus/condition_tools.py +4 -4
  242. chia/consensus/cost_calculator.py +2 -3
  243. chia/consensus/default_constants.py +19 -13
  244. chia/consensus/deficit.py +1 -3
  245. chia/consensus/difficulty_adjustment.py +3 -5
  246. chia/consensus/find_fork_point.py +2 -4
  247. chia/consensus/full_block_to_block_record.py +11 -13
  248. chia/consensus/generator_tools.py +2 -3
  249. chia/consensus/get_block_challenge.py +50 -26
  250. chia/consensus/get_block_generator.py +2 -3
  251. chia/consensus/make_sub_epoch_summary.py +8 -7
  252. chia/consensus/multiprocess_validation.py +31 -20
  253. chia/consensus/pos_quality.py +6 -23
  254. chia/consensus/pot_iterations.py +17 -44
  255. chia/consensus/signage_point.py +4 -5
  256. chia/consensus/vdf_info_computation.py +2 -4
  257. chia/daemon/client.py +8 -8
  258. chia/daemon/keychain_proxy.py +31 -37
  259. chia/daemon/server.py +32 -33
  260. chia/daemon/windows_signal.py +4 -3
  261. chia/data_layer/data_layer.py +86 -77
  262. chia/data_layer/data_layer_rpc_api.py +9 -9
  263. chia/data_layer/data_layer_rpc_client.py +13 -15
  264. chia/data_layer/data_layer_server.py +3 -3
  265. chia/data_layer/data_layer_util.py +14 -14
  266. chia/data_layer/data_layer_wallet.py +94 -101
  267. chia/data_layer/data_store.py +50 -50
  268. chia/data_layer/dl_wallet_store.py +9 -12
  269. chia/data_layer/download_data.py +8 -9
  270. chia/data_layer/s3_plugin_service.py +5 -9
  271. chia/data_layer/start_data_layer.py +5 -5
  272. chia/farmer/farmer.py +31 -31
  273. chia/farmer/farmer_api.py +45 -33
  274. chia/farmer/farmer_rpc_api.py +5 -4
  275. chia/farmer/farmer_rpc_client.py +6 -6
  276. chia/farmer/start_farmer.py +6 -6
  277. chia/full_node/block_store.py +13 -16
  278. chia/full_node/check_fork_next_block.py +1 -2
  279. chia/full_node/coin_store.py +15 -16
  280. chia/full_node/eligible_coin_spends.py +3 -3
  281. chia/full_node/fee_estimate_store.py +2 -3
  282. chia/full_node/fee_tracker.py +1 -2
  283. chia/full_node/full_block_utils.py +4 -4
  284. chia/full_node/full_node.py +239 -223
  285. chia/full_node/full_node_api.py +197 -152
  286. chia/full_node/full_node_rpc_api.py +34 -32
  287. chia/full_node/full_node_rpc_client.py +18 -19
  288. chia/full_node/full_node_store.py +45 -43
  289. chia/full_node/hard_fork_utils.py +44 -0
  290. chia/full_node/hint_management.py +2 -2
  291. chia/full_node/mempool.py +17 -19
  292. chia/full_node/mempool_manager.py +89 -42
  293. chia/full_node/pending_tx_cache.py +2 -3
  294. chia/full_node/start_full_node.py +5 -5
  295. chia/full_node/sync_store.py +3 -4
  296. chia/full_node/tx_processing_queue.py +120 -36
  297. chia/full_node/weight_proof.py +61 -48
  298. chia/harvester/harvester.py +25 -24
  299. chia/harvester/harvester_api.py +61 -38
  300. chia/harvester/harvester_rpc_api.py +10 -10
  301. chia/harvester/start_harvester.py +4 -4
  302. chia/introducer/introducer.py +3 -3
  303. chia/introducer/introducer_api.py +6 -4
  304. chia/introducer/start_introducer.py +4 -4
  305. chia/legacy/keyring.py +3 -3
  306. chia/plot_sync/delta.py +1 -2
  307. chia/plot_sync/receiver.py +20 -17
  308. chia/plot_sync/sender.py +15 -10
  309. chia/plotters/bladebit.py +7 -7
  310. chia/plotters/chiapos.py +2 -2
  311. chia/plotters/madmax.py +4 -4
  312. chia/plotters/plotters.py +4 -4
  313. chia/plotters/plotters_util.py +3 -3
  314. chia/plotting/cache.py +20 -14
  315. chia/plotting/check_plots.py +26 -35
  316. chia/plotting/create_plots.py +22 -23
  317. chia/plotting/manager.py +21 -14
  318. chia/plotting/prover.py +59 -42
  319. chia/plotting/util.py +16 -16
  320. chia/pools/pool_config.py +2 -1
  321. chia/pools/pool_puzzles.py +11 -12
  322. chia/pools/pool_wallet.py +34 -57
  323. chia/pools/pool_wallet_info.py +39 -10
  324. chia/protocols/farmer_protocol.py +8 -9
  325. chia/protocols/fee_estimate.py +3 -4
  326. chia/protocols/full_node_protocol.py +3 -4
  327. chia/protocols/harvester_protocol.py +27 -15
  328. chia/protocols/outbound_message.py +3 -3
  329. chia/protocols/pool_protocol.py +8 -9
  330. chia/protocols/shared_protocol.py +1 -2
  331. chia/protocols/solver_protocol.py +9 -2
  332. chia/protocols/timelord_protocol.py +4 -7
  333. chia/protocols/wallet_protocol.py +11 -12
  334. chia/rpc/rpc_client.py +9 -9
  335. chia/rpc/rpc_server.py +17 -17
  336. chia/rpc/util.py +2 -2
  337. chia/seeder/crawler.py +8 -8
  338. chia/seeder/crawler_api.py +21 -27
  339. chia/seeder/crawler_rpc_api.py +2 -2
  340. chia/seeder/dns_server.py +21 -21
  341. chia/seeder/start_crawler.py +4 -4
  342. chia/server/address_manager.py +15 -16
  343. chia/server/api_protocol.py +11 -11
  344. chia/server/chia_policy.py +46 -26
  345. chia/server/introducer_peers.py +2 -3
  346. chia/server/node_discovery.py +19 -19
  347. chia/server/rate_limit_numbers.py +4 -5
  348. chia/server/rate_limits.py +4 -4
  349. chia/server/resolve_peer_info.py +4 -4
  350. chia/server/server.py +49 -52
  351. chia/server/signal_handlers.py +6 -6
  352. chia/server/start_service.py +17 -17
  353. chia/server/upnp.py +4 -6
  354. chia/server/ws_connection.py +52 -37
  355. chia/simulator/add_blocks_in_batches.py +1 -3
  356. chia/simulator/block_tools.py +312 -200
  357. chia/simulator/full_node_simulator.py +56 -35
  358. chia/simulator/keyring.py +2 -3
  359. chia/simulator/setup_services.py +15 -15
  360. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  361. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  362. chia/simulator/simulator_protocol.py +1 -2
  363. chia/simulator/simulator_test_tools.py +3 -3
  364. chia/simulator/start_simulator.py +7 -7
  365. chia/simulator/wallet_tools.py +10 -10
  366. chia/solver/solver.py +10 -10
  367. chia/solver/solver_api.py +10 -8
  368. chia/solver/solver_rpc_api.py +2 -2
  369. chia/solver/start_solver.py +4 -4
  370. chia/ssl/cacert.pem +148 -90
  371. chia/ssl/chia_ca.crt +14 -10
  372. chia/ssl/chia_ca_old.crt +19 -0
  373. chia/ssl/create_ssl.py +4 -4
  374. chia/ssl/renewedselfsignedca.conf +4 -0
  375. chia/ssl/ssl_check.py +1 -2
  376. chia/timelord/iters_from_block.py +1 -4
  377. chia/timelord/start_timelord.py +4 -4
  378. chia/timelord/timelord.py +44 -40
  379. chia/timelord/timelord_api.py +6 -4
  380. chia/timelord/timelord_launcher.py +2 -2
  381. chia/timelord/timelord_rpc_api.py +2 -2
  382. chia/timelord/timelord_state.py +11 -12
  383. chia/types/block_protocol.py +1 -3
  384. chia/types/blockchain_format/coin.py +1 -3
  385. chia/types/blockchain_format/program.py +11 -8
  386. chia/types/blockchain_format/proof_of_space.py +123 -76
  387. chia/types/blockchain_format/tree_hash.py +3 -3
  388. chia/types/blockchain_format/vdf.py +1 -2
  389. chia/types/coin_spend.py +3 -3
  390. chia/types/mempool_item.py +5 -5
  391. chia/types/mempool_submission_status.py +2 -3
  392. chia/types/peer_info.py +1 -2
  393. chia/types/unfinished_header_block.py +3 -4
  394. chia/types/validation_state.py +1 -2
  395. chia/util/action_scope.py +8 -8
  396. chia/util/async_pool.py +5 -5
  397. chia/util/bech32m.py +1 -2
  398. chia/util/beta_metrics.py +2 -2
  399. chia/util/block_cache.py +4 -4
  400. chia/util/chia_logging.py +2 -2
  401. chia/util/chia_version.py +1 -2
  402. chia/util/config.py +15 -16
  403. chia/util/db_wrapper.py +26 -27
  404. chia/util/default_root.py +1 -2
  405. chia/util/errors.py +3 -3
  406. chia/util/file_keyring.py +14 -14
  407. chia/util/files.py +2 -3
  408. chia/util/hash.py +4 -4
  409. chia/util/initial-config.yaml +4 -5
  410. chia/util/inline_executor.py +2 -1
  411. chia/util/ip_address.py +1 -2
  412. chia/util/keychain.py +25 -27
  413. chia/util/keyring_wrapper.py +18 -19
  414. chia/util/lock.py +3 -4
  415. chia/util/log_exceptions.py +1 -2
  416. chia/util/lru_cache.py +2 -2
  417. chia/util/network.py +6 -6
  418. chia/util/path.py +2 -3
  419. chia/util/priority_mutex.py +2 -2
  420. chia/util/profiler.py +1 -2
  421. chia/util/safe_cancel_task.py +1 -2
  422. chia/util/streamable.py +24 -10
  423. chia/util/task_referencer.py +1 -1
  424. chia/util/timing.py +3 -3
  425. chia/util/virtual_project_analysis.py +6 -5
  426. chia/util/ws_message.py +2 -2
  427. chia/wallet/cat_wallet/cat_info.py +3 -4
  428. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  429. chia/wallet/cat_wallet/cat_utils.py +3 -4
  430. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  431. chia/wallet/cat_wallet/lineage_store.py +3 -4
  432. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  433. chia/wallet/coin_selection.py +9 -10
  434. chia/wallet/conditions.py +142 -106
  435. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  436. chia/wallet/derivation_record.py +1 -2
  437. chia/wallet/derive_keys.py +2 -4
  438. chia/wallet/did_wallet/did_info.py +10 -11
  439. chia/wallet/did_wallet/did_wallet.py +36 -82
  440. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  441. chia/wallet/driver_protocol.py +5 -7
  442. chia/wallet/lineage_proof.py +4 -4
  443. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  444. chia/wallet/nft_wallet/nft_info.py +8 -9
  445. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  446. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  447. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  448. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  449. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  450. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  451. chia/wallet/notification_manager.py +3 -3
  452. chia/wallet/notification_store.py +44 -61
  453. chia/wallet/outer_puzzles.py +6 -7
  454. chia/wallet/puzzle_drivers.py +34 -6
  455. chia/wallet/puzzles/clawback/drivers.py +6 -6
  456. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  457. chia/wallet/puzzles/load_clvm.py +1 -1
  458. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  459. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  460. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  461. chia/wallet/puzzles/tails.py +3 -3
  462. chia/wallet/singleton.py +5 -7
  463. chia/wallet/singleton_record.py +3 -3
  464. chia/wallet/start_wallet.py +5 -5
  465. chia/wallet/trade_manager.py +37 -58
  466. chia/wallet/trade_record.py +4 -4
  467. chia/wallet/trading/offer.py +59 -46
  468. chia/wallet/trading/trade_store.py +8 -9
  469. chia/wallet/transaction_record.py +8 -8
  470. chia/wallet/uncurried_puzzle.py +1 -2
  471. chia/wallet/util/clvm_streamable.py +12 -12
  472. chia/wallet/util/compute_hints.py +4 -5
  473. chia/wallet/util/curry_and_treehash.py +1 -2
  474. chia/wallet/util/merkle_tree.py +2 -3
  475. chia/wallet/util/peer_request_cache.py +8 -8
  476. chia/wallet/util/signing.py +85 -0
  477. chia/wallet/util/tx_config.py +15 -6
  478. chia/wallet/util/wallet_sync_utils.py +14 -16
  479. chia/wallet/util/wallet_types.py +2 -2
  480. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  481. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  482. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  483. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  484. chia/wallet/vc_wallet/vc_store.py +5 -6
  485. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  486. chia/wallet/wallet.py +50 -78
  487. chia/wallet/wallet_action_scope.py +11 -11
  488. chia/wallet/wallet_blockchain.py +12 -12
  489. chia/wallet/wallet_coin_record.py +12 -6
  490. chia/wallet/wallet_coin_store.py +24 -25
  491. chia/wallet/wallet_interested_store.py +3 -5
  492. chia/wallet/wallet_nft_store.py +10 -11
  493. chia/wallet/wallet_node.py +53 -61
  494. chia/wallet/wallet_node_api.py +5 -3
  495. chia/wallet/wallet_protocol.py +23 -23
  496. chia/wallet/wallet_puzzle_store.py +15 -18
  497. chia/wallet/wallet_request_types.py +778 -114
  498. chia/wallet/wallet_retry_store.py +1 -3
  499. chia/wallet/wallet_rpc_api.py +572 -909
  500. chia/wallet/wallet_rpc_client.py +87 -279
  501. chia/wallet/wallet_singleton_store.py +3 -4
  502. chia/wallet/wallet_state_manager.py +332 -106
  503. chia/wallet/wallet_transaction_store.py +11 -14
  504. chia/wallet/wallet_user_store.py +4 -6
  505. chia/wallet/wallet_weight_proof_handler.py +4 -4
  506. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/METADATA +6 -5
  507. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
  508. chia/apis.py +0 -21
  509. chia/consensus/check_time_locks.py +0 -57
  510. chia/data_layer/puzzles/__init__.py +0 -0
  511. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  512. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  513. chia/types/coin_record.py +0 -44
  514. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  515. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  516. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  517. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  518. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  520. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  521. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  522. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  524. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  525. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  526. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  527. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  528. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  529. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/WHEEL +0 -0
  530. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
  531. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
@@ -4,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
@@ -26,7 +25,12 @@ from chiabip158 import PyBIP158
26
25
  from colorlog import getLogger
27
26
 
28
27
  from chia._tests.conftest import ConsensusMode
29
- from chia._tests.connection_utils import connect_and_get_peer, disconnect_all, disconnect_all_and_reconnect
28
+ from chia._tests.connection_utils import (
29
+ add_dummy_connection,
30
+ connect_and_get_peer,
31
+ disconnect_all,
32
+ disconnect_all_and_reconnect,
33
+ )
30
34
  from chia._tests.util.blockchain_mock import BlockchainMock
31
35
  from chia._tests.util.misc import patch_request_handler, wallet_height_at_least
32
36
  from chia._tests.util.setup_nodes import OldSimulatorsAndWallets
@@ -111,7 +115,9 @@ async def test_request_block_headers(
111
115
  assert [x.transactions_filter for x in bh] == [b"\x00"] * 6
112
116
 
113
117
  num_blocks = 20
114
- new_blocks = bt.get_consecutive_blocks(num_blocks, block_list_input=default_400_blocks, pool_reward_puzzle_hash=ph)
118
+ new_blocks = bt.get_consecutive_blocks(
119
+ num_blocks, block_list_input=default_400_blocks, farmer_reward_puzzle_hash=ph
120
+ )
115
121
  await add_blocks_in_batches(new_blocks, full_node_api.full_node)
116
122
  msg = await full_node_api.request_block_headers(wallet_protocol.RequestBlockHeaders(uint32(110), uint32(115), True))
117
123
  assert msg is not None
@@ -626,7 +632,7 @@ async def test_request_additions_errors(simulator_and_wallet: OldSimulatorsAndWa
626
632
 
627
633
  await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node, timeout=20)
628
634
 
629
- last_block: Optional[BlockRecord] = full_node_api.full_node.blockchain.get_peak()
635
+ last_block: BlockRecord | None = full_node_api.full_node.blockchain.get_peak()
630
636
  assert last_block is not None
631
637
 
632
638
  # Invalid height
@@ -675,7 +681,7 @@ async def test_request_additions_success(simulator_and_wallet: OldSimulatorsAndW
675
681
  ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
676
682
 
677
683
  full_node_api = full_nodes[0]
678
- await wallet_server.start_client(PeerInfo(self_hostname, full_node_api.full_node.server.get_port()), None)
684
+ wallet_peer = await connect_and_get_peer(full_node_api.full_node.server, wallet_server, self_hostname)
679
685
 
680
686
  for _ in range(2):
681
687
  await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
@@ -697,7 +703,7 @@ async def test_request_additions_success(simulator_and_wallet: OldSimulatorsAndW
697
703
  )
698
704
  [tx] = action_scope.side_effects.transactions
699
705
  assert tx.spend_bundle is not None
700
- await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
706
+ await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), wallet_peer)
701
707
  await full_node_api.wait_transaction_records_entered_mempool([tx])
702
708
  await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
703
709
 
@@ -917,7 +923,9 @@ async def test_dusted_wallet(
917
923
  )
918
924
  [tx] = action_scope.side_effects.transactions
919
925
  assert tx.spend_bundle is not None
920
- await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
926
+ _, dummy_node_id = await add_dummy_connection(full_node_api.server, self_hostname, 12312)
927
+ dummy_peer = full_node_api.server.all_connections[dummy_node_id]
928
+ await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
921
929
  await full_node_api.wait_transaction_records_entered_mempool([tx])
922
930
  await full_node_api.wait_for_wallets_synced(wallet_nodes=[farm_wallet_node, dust_wallet_node], timeout=20)
923
931
  await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
@@ -984,7 +992,7 @@ async def test_dusted_wallet(
984
992
  )
985
993
  [tx] = action_scope.side_effects.transactions
986
994
  assert tx.spend_bundle is not None
987
- await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
995
+ await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
988
996
 
989
997
  # advance the chain and sync both wallets
990
998
  await full_node_api.wait_transaction_records_entered_mempool([tx])
@@ -1007,7 +1015,7 @@ async def test_dusted_wallet(
1007
1015
  )
1008
1016
  [tx] = action_scope.side_effects.transactions
1009
1017
  assert tx.spend_bundle is not None
1010
- await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
1018
+ await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
1011
1019
 
1012
1020
  # advance the chain and sync both wallets
1013
1021
  await full_node_api.wait_transaction_records_entered_mempool([tx])
@@ -1060,7 +1068,7 @@ async def test_dusted_wallet(
1060
1068
  )
1061
1069
  [tx] = action_scope.side_effects.transactions
1062
1070
  assert tx.spend_bundle is not None
1063
- await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
1071
+ await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
1064
1072
 
1065
1073
  # advance the chain and sync both wallets
1066
1074
  await full_node_api.wait_transaction_records_entered_mempool([tx])
@@ -1104,7 +1112,7 @@ async def test_dusted_wallet(
1104
1112
  )
1105
1113
  [tx] = action_scope.side_effects.transactions
1106
1114
  assert tx.spend_bundle is not None
1107
- await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
1115
+ await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
1108
1116
 
1109
1117
  # advance the chain and sync both wallets
1110
1118
  await full_node_api.wait_transaction_records_entered_mempool([tx])
@@ -1168,7 +1176,7 @@ async def test_dusted_wallet(
1168
1176
  )
1169
1177
  [tx] = action_scope.side_effects.transactions
1170
1178
  assert tx.spend_bundle is not None
1171
- await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
1179
+ await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
1172
1180
 
1173
1181
  # advance the chain and sync both wallets
1174
1182
  await full_node_api.wait_transaction_records_entered_mempool([tx])
@@ -1209,7 +1217,7 @@ async def test_dusted_wallet(
1209
1217
  )
1210
1218
  [tx] = action_scope.side_effects.transactions
1211
1219
  assert tx.spend_bundle is not None
1212
- await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
1220
+ await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
1213
1221
 
1214
1222
  # advance the chain and sync both wallets
1215
1223
  await full_node_api.wait_transaction_records_entered_mempool([tx])
@@ -1258,7 +1266,7 @@ async def test_dusted_wallet(
1258
1266
  )
1259
1267
  [tx] = action_scope.side_effects.transactions
1260
1268
  assert tx.spend_bundle is not None
1261
- await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
1269
+ await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
1262
1270
  await full_node_api.wait_transaction_records_entered_mempool([tx])
1263
1271
  await full_node_api.wait_for_wallets_synced(wallet_nodes=[farm_wallet_node, dust_wallet_node], timeout=20)
1264
1272
  await full_node_api.farm_new_transaction_block(FarmNewBlockProtocol(ph))
@@ -1277,7 +1285,7 @@ async def test_dusted_wallet(
1277
1285
  )
1278
1286
  [tx] = action_scope.side_effects.transactions
1279
1287
  assert tx.spend_bundle is not None
1280
- await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
1288
+ await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
1281
1289
 
1282
1290
  # advance the chain and sync both wallets
1283
1291
  await full_node_api.wait_transaction_records_entered_mempool([tx])
@@ -1312,7 +1320,7 @@ async def test_dusted_wallet(
1312
1320
  )
1313
1321
  [tx] = action_scope.side_effects.transactions
1314
1322
  assert tx.spend_bundle is not None
1315
- await full_node_api.send_transaction(SendTransaction(tx.spend_bundle))
1323
+ await full_node_api.send_transaction(SendTransaction(tx.spend_bundle), dummy_peer)
1316
1324
 
1317
1325
  # advance the chain and sync both wallets
1318
1326
  await full_node_api.wait_transaction_records_entered_mempool([tx])
@@ -1431,10 +1439,10 @@ async def test_retry_store(
1431
1439
 
1432
1440
  def flaky_get_coin_state(
1433
1441
  flakiness_info: FlakinessInfo,
1434
- func: Callable[[list[bytes32], WSChiaConnection, Optional[uint32]], Awaitable[list[CoinState]]],
1435
- ) -> Callable[[list[bytes32], WSChiaConnection, Optional[uint32]], Awaitable[list[CoinState]]]:
1442
+ func: Callable[[list[bytes32], WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]],
1443
+ ) -> Callable[[list[bytes32], WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]]:
1436
1444
  async def new_func(
1437
- coin_names: list[bytes32], peer: WSChiaConnection, fork_height: Optional[uint32] = None
1445
+ coin_names: list[bytes32], peer: WSChiaConnection, fork_height: uint32 | None = None
1438
1446
  ) -> list[CoinState]:
1439
1447
  if flakiness_info.coin_state_flaky:
1440
1448
  flakiness_info.coin_state_flaky = False
@@ -1447,10 +1455,10 @@ async def test_retry_store(
1447
1455
  request_puzzle_solution_failure_tested = False
1448
1456
 
1449
1457
  def flaky_request_puzzle_solution(
1450
- func: Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[Optional[Message]]],
1451
- ) -> Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[Optional[Message]]]:
1458
+ func: Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[Message | None]],
1459
+ ) -> Callable[[FullNodeAPI, wallet_protocol.RequestPuzzleSolution], Awaitable[Message | None]]:
1452
1460
  @functools.wraps(func)
1453
- async def new_func(self: FullNodeAPI, request: wallet_protocol.RequestPuzzleSolution) -> Optional[Message]:
1461
+ async def new_func(self: FullNodeAPI, request: wallet_protocol.RequestPuzzleSolution) -> Message | None:
1454
1462
  nonlocal request_puzzle_solution_failure_tested
1455
1463
  if not request_puzzle_solution_failure_tested:
1456
1464
  request_puzzle_solution_failure_tested = True
@@ -1464,10 +1472,10 @@ async def test_retry_store(
1464
1472
 
1465
1473
  def flaky_fetch_children(
1466
1474
  flakiness_info: FlakinessInfo,
1467
- func: Callable[[bytes32, WSChiaConnection, Optional[uint32]], Awaitable[list[CoinState]]],
1468
- ) -> Callable[[bytes32, WSChiaConnection, Optional[uint32]], Awaitable[list[CoinState]]]:
1475
+ func: Callable[[bytes32, WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]],
1476
+ ) -> Callable[[bytes32, WSChiaConnection, uint32 | None], Awaitable[list[CoinState]]]:
1469
1477
  async def new_func(
1470
- coin_name: bytes32, peer: WSChiaConnection, fork_height: Optional[uint32] = None
1478
+ coin_name: bytes32, peer: WSChiaConnection, fork_height: uint32 | None = None
1471
1479
  ) -> list[CoinState]:
1472
1480
  if flakiness_info.fetch_children_flaky:
1473
1481
  flakiness_info.fetch_children_flaky = False
@@ -1490,9 +1498,9 @@ async def test_retry_store(
1490
1498
  return new_func
1491
1499
 
1492
1500
  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]:
1501
+ flakiness_info: FlakinessInfo, func: Callable[[bytes32], Awaitable[WalletIdentifier | None]]
1502
+ ) -> Callable[[bytes32], Awaitable[WalletIdentifier | None]]:
1503
+ async def new_func(puzzle_hash: bytes32) -> WalletIdentifier | None:
1496
1504
  if flakiness_info.db_flaky:
1497
1505
  flakiness_info.db_flaky = False
1498
1506
  raise AIOSqliteError
@@ -1605,7 +1613,7 @@ async def test_bad_peak_mismatch(
1605
1613
  full_node_protocol.RespondProofOfWeight(wp, wp.recent_chain_data[-1].header_hash),
1606
1614
  )
1607
1615
  with monkeypatch.context() as m:
1608
- f: asyncio.Future[Optional[Message]] = asyncio.Future()
1616
+ f: asyncio.Future[Message | None] = asyncio.Future()
1609
1617
  f.set_result(wp_msg)
1610
1618
  m.setattr(full_node_api, "request_proof_of_weight", MagicMock(return_value=f))
1611
1619
 
@@ -1614,7 +1622,7 @@ async def test_bad_peak_mismatch(
1614
1622
  ProtocolMessageTypes.respond_block_header,
1615
1623
  wallet_protocol.RespondBlockHeader(wp.recent_chain_data[-1]),
1616
1624
  )
1617
- f2: asyncio.Future[Optional[Message]] = asyncio.Future()
1625
+ f2: asyncio.Future[Message | None] = asyncio.Future()
1618
1626
  f2.set_result(header_block_msg)
1619
1627
  m.setattr(full_node_api, "request_block_header", MagicMock(return_value=f2))
1620
1628
 
@@ -1638,7 +1646,7 @@ async def test_bad_peak_mismatch(
1638
1646
  async def test_long_sync_untrusted_break(
1639
1647
  setup_two_nodes_and_wallet: OldSimulatorsAndWallets,
1640
1648
  default_1000_blocks: list[FullBlock],
1641
- default_400_blocks: list[FullBlock],
1649
+ default_1500_blocks: list[FullBlock],
1642
1650
  self_hostname: str,
1643
1651
  caplog: pytest.LogCaptureFixture,
1644
1652
  use_delta_sync: bool,
@@ -1649,27 +1657,16 @@ async def test_long_sync_untrusted_break(
1649
1657
  wallet_node.config["trusted_peers"] = {trusted_full_node_server.node_id.hex(): None}
1650
1658
  wallet_node.config["use_delta_sync"] = use_delta_sync
1651
1659
 
1652
- sync_canceled = False
1653
-
1654
1660
  async def register_for_ph_updates(
1655
1661
  self: object,
1656
1662
  request: wallet_protocol.RegisterForPhUpdates,
1657
1663
  peer: WSChiaConnection,
1658
1664
  ) -> 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
1665
+ await peer.wait_until_closed()
1666
1666
 
1667
1667
  def wallet_syncing() -> bool:
1668
1668
  return wallet_node.wallet_state_manager.sync_mode
1669
1669
 
1670
- def check_sync_canceled() -> bool:
1671
- return sync_canceled
1672
-
1673
1670
  def synced_to_trusted() -> bool:
1674
1671
  return trusted_full_node_server.node_id in wallet_node.synced_peers
1675
1672
 
@@ -1678,26 +1675,32 @@ async def test_long_sync_untrusted_break(
1678
1675
  untrusted_peers = sum(not wallet_node.is_trusted(peer) for peer in wallet_server.all_connections.values())
1679
1676
  return trusted_peers == 1 and untrusted_peers == 0
1680
1677
 
1681
- await add_blocks_in_batches(default_400_blocks, trusted_full_node_api.full_node)
1682
-
1683
- await add_blocks_in_batches(default_1000_blocks[:400], untrusted_full_node_api.full_node)
1678
+ await add_blocks_in_batches(default_1500_blocks[:600], trusted_full_node_api.full_node)
1679
+ await add_blocks_in_batches(default_1000_blocks[:600], untrusted_full_node_api.full_node)
1684
1680
 
1685
- with patch_request_handler(api=untrusted_full_node_api, handler=register_for_ph_updates):
1681
+ with (
1682
+ patch_request_handler(api=untrusted_full_node_api, handler=register_for_ph_updates),
1683
+ caplog.at_level(logging.INFO),
1684
+ ):
1686
1685
  # 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)
1686
+ assert await wallet_server.start_client(PeerInfo(self_hostname, untrusted_full_node_server.get_port()), None)
1687
+ untrusted_conn = wallet_server.all_connections.get(untrusted_full_node_server.node_id)
1688
+ assert untrusted_conn is not None
1688
1689
  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)
1690
+
1691
+ # Connect to the trusted peer and make sure the running untrusted long sync gets interrupted via disconnect
1692
+ assert await wallet_server.start_client(PeerInfo(self_hostname, trusted_full_node_server.get_port()), None)
1693
+ await time_out_assert(600, wallet_height_at_least, True, wallet_node, 599)
1694
+ await time_out_assert(10, synced_to_trusted)
1695
+ assert untrusted_full_node_server.node_id not in wallet_node.synced_peers
1696
+
1697
+ assert "Connected to a synced trusted peer, disconnecting from all untrusted nodes." in caplog.text
1698
+ assert (
1699
+ f"Connection closed: {untrusted_conn.peer_info.host}, node id: {untrusted_full_node_server.node_id}"
1700
+ in caplog.text
1701
+ )
1699
1702
  # And that we only have a trusted peer left
1700
- assert time_out_assert(30, only_trusted_peer)
1703
+ await time_out_assert(30, only_trusted_peer)
1701
1704
 
1702
1705
 
1703
1706
  @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,
@@ -835,7 +833,7 @@ async def raw_mpu_setup(one_node: OneNode, self_hostname: str, no_capability: bo
835
833
  for coin, hint in new_coins:
836
834
  solution = Program.to([[]])
837
835
  bundle = SpendBundle([CoinSpend(coin, puzzle, solution)], AugSchemeMPL.aggregate([]))
838
- tx_resp = await simulator.send_transaction(wallet_protocol.SendTransaction(bundle))
836
+ tx_resp = await simulator.send_transaction(wallet_protocol.SendTransaction(bundle), peer)
839
837
  assert tx_resp is not None
840
838
 
841
839
  ack = wallet_protocol.TransactionAck.from_bytes(tx_resp.data)
@@ -893,11 +891,13 @@ 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(
895
+ simulator: FullNodeSimulator, peer: WSChiaConnection, coin: Coin, solution: Program | None = None
896
+ ) -> bytes32:
897
897
  bundle = SpendBundle(
898
898
  [CoinSpend(coin, IDENTITY_PUZZLE, Program.to([]) if solution is None else solution)], AugSchemeMPL.aggregate([])
899
899
  )
900
- tx_resp = await simulator.send_transaction(wallet_protocol.SendTransaction(bundle))
900
+ tx_resp = await simulator.send_transaction(wallet_protocol.SendTransaction(bundle), peer)
901
901
  assert tx_resp is not None
902
902
 
903
903
  ack = wallet_protocol.TransactionAck.from_bytes(tx_resp.data)
@@ -917,7 +917,7 @@ async def test_spent_coin_id_mempool_update(mpu_setup: Mpu) -> None:
917
917
  # Make a coin and spend it
918
918
  coin, _ = await make_coin(simulator.full_node)
919
919
  await subscribe_coin(simulator, coin.name(), peer)
920
- transaction_id = await spend_coin(simulator, coin)
920
+ transaction_id = await spend_coin(simulator, peer, coin)
921
921
 
922
922
  # We should have gotten a mempool update for this transaction
923
923
  await assert_mempool_added(queue, {transaction_id})
@@ -944,7 +944,7 @@ async def test_spent_puzzle_hash_mempool_update(mpu_setup: Mpu) -> None:
944
944
  # Make a coin and spend it
945
945
  coin, _ = await make_coin(simulator.full_node)
946
946
  await subscribe_puzzle(simulator, coin.puzzle_hash, peer)
947
- transaction_id = await spend_coin(simulator, coin)
947
+ transaction_id = await spend_coin(simulator, peer, coin)
948
948
 
949
949
  # We should have gotten a mempool update for this transaction
950
950
  await assert_mempool_added(queue, {transaction_id})
@@ -971,7 +971,7 @@ async def test_spent_hint_mempool_update(mpu_setup: Mpu) -> None:
971
971
  # Make a coin and spend it
972
972
  coin, hint = await make_coin(simulator.full_node)
973
973
  await subscribe_puzzle(simulator, hint, peer)
974
- transaction_id = await spend_coin(simulator, coin)
974
+ transaction_id = await spend_coin(simulator, peer, coin)
975
975
 
976
976
  # We should have gotten a mempool update for this transaction
977
977
  await assert_mempool_added(queue, {transaction_id})
@@ -1000,7 +1000,7 @@ async def test_created_coin_id_mempool_update(mpu_setup: Mpu) -> None:
1000
1000
  child_coin = Coin(coin.name(), std_hash(b"new puzzle hash"), coin.amount)
1001
1001
  await subscribe_coin(simulator, child_coin.name(), peer, existing_coin_states=0)
1002
1002
  transaction_id = await spend_coin(
1003
- simulator, coin, solution=Program.to([[51, child_coin.puzzle_hash, child_coin.amount]])
1003
+ simulator, peer, coin, solution=Program.to([[51, child_coin.puzzle_hash, child_coin.amount]])
1004
1004
  )
1005
1005
 
1006
1006
  # We should have gotten a mempool update for this transaction
@@ -1030,7 +1030,7 @@ async def test_created_puzzle_hash_mempool_update(mpu_setup: Mpu) -> None:
1030
1030
  child_coin = Coin(coin.name(), std_hash(b"new puzzle hash"), coin.amount)
1031
1031
  await subscribe_puzzle(simulator, child_coin.puzzle_hash, peer, existing_coin_states=0)
1032
1032
  transaction_id = await spend_coin(
1033
- simulator, coin, solution=Program.to([[51, child_coin.puzzle_hash, child_coin.amount]])
1033
+ simulator, peer, coin, solution=Program.to([[51, child_coin.puzzle_hash, child_coin.amount]])
1034
1034
  )
1035
1035
 
1036
1036
  # We should have gotten a mempool update for this transaction
@@ -1061,7 +1061,7 @@ async def test_created_hint_mempool_update(mpu_setup: Mpu) -> None:
1061
1061
  hint = std_hash(b"new hint")
1062
1062
  await subscribe_puzzle(simulator, hint, peer, existing_coin_states=0)
1063
1063
  transaction_id = await spend_coin(
1064
- simulator, coin, solution=Program.to([[51, child_coin.puzzle_hash, child_coin.amount, [hint]]])
1064
+ simulator, peer, coin, solution=Program.to([[51, child_coin.puzzle_hash, child_coin.amount, [hint]]])
1065
1065
  )
1066
1066
 
1067
1067
  # We should have gotten a mempool update for this transaction
@@ -1089,7 +1089,7 @@ async def test_missing_capability_coin_id(mpu_setup_no_capability: Mpu) -> None:
1089
1089
  # Make a coin and spend it
1090
1090
  coin, _ = await make_coin(simulator.full_node)
1091
1091
  await subscribe_coin(simulator, coin.name(), peer)
1092
- transaction_id = await spend_coin(simulator, coin)
1092
+ transaction_id = await spend_coin(simulator, peer, coin)
1093
1093
 
1094
1094
  # There is no mempool update for this transaction since the peer doesn't have the capability
1095
1095
  assert queue.empty()
@@ -1114,7 +1114,7 @@ async def test_missing_capability_puzzle_hash(mpu_setup_no_capability: Mpu) -> N
1114
1114
  # Make a coin and spend it
1115
1115
  coin, _ = await make_coin(simulator.full_node)
1116
1116
  await subscribe_puzzle(simulator, coin.puzzle_hash, peer)
1117
- transaction_id = await spend_coin(simulator, coin)
1117
+ transaction_id = await spend_coin(simulator, peer, coin)
1118
1118
 
1119
1119
  # There is no mempool update for this transaction since the peer doesn't have the capability
1120
1120
  assert queue.empty()
@@ -1139,7 +1139,7 @@ async def test_missing_capability_hint(mpu_setup_no_capability: Mpu) -> None:
1139
1139
  # Make a coin and spend it
1140
1140
  coin, hint = await make_coin(simulator.full_node)
1141
1141
  await subscribe_puzzle(simulator, hint, peer)
1142
- transaction_id = await spend_coin(simulator, coin)
1142
+ transaction_id = await spend_coin(simulator, peer, coin)
1143
1143
 
1144
1144
  # There is no mempool update for this transaction since the peer doesn't have the capability
1145
1145
  assert queue.empty()