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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_blockchain_transactions.py +5 -2
  6. chia/_tests/blockchain/test_build_chains.py +2 -4
  7. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  8. chia/_tests/clvm/coin_store.py +4 -7
  9. chia/_tests/clvm/test_clvm_step.py +4 -4
  10. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  11. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  12. chia/_tests/clvm/test_singletons.py +2 -4
  13. chia/_tests/clvm/test_spend_sim.py +2 -2
  14. chia/_tests/cmds/cmd_test_utils.py +27 -45
  15. chia/_tests/cmds/test_cmd_framework.py +6 -6
  16. chia/_tests/cmds/test_daemon.py +3 -3
  17. chia/_tests/cmds/test_show.py +4 -4
  18. chia/_tests/cmds/test_tx_config_args.py +1 -2
  19. chia/_tests/cmds/testing_classes.py +4 -5
  20. chia/_tests/cmds/wallet/test_did.py +24 -27
  21. chia/_tests/cmds/wallet/test_nft.py +12 -10
  22. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  23. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  24. chia/_tests/conftest.py +66 -31
  25. chia/_tests/connection_utils.py +2 -2
  26. chia/_tests/core/cmds/test_beta.py +4 -4
  27. chia/_tests/core/cmds/test_keys.py +2 -3
  28. chia/_tests/core/cmds/test_wallet.py +15 -15
  29. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  30. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  31. chia/_tests/core/daemon/test_daemon.py +11 -11
  32. chia/_tests/core/data_layer/conftest.py +2 -2
  33. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  34. chia/_tests/core/data_layer/test_data_store.py +10 -10
  35. chia/_tests/core/data_layer/util.py +11 -11
  36. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  37. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  38. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  39. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  40. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  41. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  42. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  43. chia/_tests/core/full_node/test_conditions.py +21 -23
  44. chia/_tests/core/full_node/test_full_node.py +273 -70
  45. chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
  46. chia/_tests/core/full_node/test_hint_management.py +2 -4
  47. chia/_tests/core/full_node/test_performance.py +0 -1
  48. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  49. chia/_tests/core/full_node/test_transactions.py +1 -2
  50. chia/_tests/core/full_node/test_tx_processing_queue.py +198 -30
  51. chia/_tests/core/mempool/test_mempool.py +54 -50
  52. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  53. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  54. chia/_tests/core/mempool/test_mempool_manager.py +988 -854
  55. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  56. chia/_tests/core/server/serve.py +7 -7
  57. chia/_tests/core/server/test_dos.py +1 -2
  58. chia/_tests/core/server/test_event_loop.py +12 -4
  59. chia/_tests/core/server/test_loop.py +7 -8
  60. chia/_tests/core/server/test_rate_limits.py +9 -8
  61. chia/_tests/core/server/test_server.py +61 -1
  62. chia/_tests/core/services/test_services.py +2 -2
  63. chia/_tests/core/ssl/test_ssl.py +2 -2
  64. chia/_tests/core/test_cost_calculation.py +2 -6
  65. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  66. chia/_tests/core/test_filter.py +0 -1
  67. chia/_tests/core/test_full_node_rpc.py +2 -2
  68. chia/_tests/core/test_merkle_set.py +1 -2
  69. chia/_tests/core/test_seeder.py +4 -4
  70. chia/_tests/core/util/test_config.py +4 -4
  71. chia/_tests/core/util/test_jsonify.py +2 -2
  72. chia/_tests/core/util/test_keychain.py +3 -3
  73. chia/_tests/core/util/test_lockfile.py +2 -1
  74. chia/_tests/core/util/test_log_exceptions.py +1 -2
  75. chia/_tests/core/util/test_streamable.py +17 -17
  76. chia/_tests/db/test_db_wrapper.py +3 -2
  77. chia/_tests/environments/wallet.py +14 -14
  78. chia/_tests/ether.py +4 -3
  79. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  80. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  81. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  82. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  83. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  84. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  85. chia/_tests/harvester/test_harvester_api.py +11 -4
  86. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  87. chia/_tests/plot_sync/test_receiver.py +11 -10
  88. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  89. chia/_tests/plot_sync/util.py +1 -2
  90. chia/_tests/plotting/test_plot_manager.py +7 -6
  91. chia/_tests/plotting/test_prover.py +30 -38
  92. chia/_tests/pools/test_pool_cmdline.py +4 -6
  93. chia/_tests/pools/test_pool_rpc.py +203 -61
  94. chia/_tests/pools/test_pool_wallet.py +3 -3
  95. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  96. chia/_tests/process_junit.py +2 -2
  97. chia/_tests/rpc/test_rpc_client.py +4 -4
  98. chia/_tests/rpc/test_rpc_server.py +3 -3
  99. chia/_tests/simulation/test_simulation.py +12 -25
  100. chia/_tests/solver/test_solver_service.py +13 -4
  101. chia/_tests/testconfig.py +2 -2
  102. chia/_tests/timelord/test_new_peak.py +22 -11
  103. chia/_tests/tools/test_run_block.py +0 -2
  104. chia/_tests/tools/test_virtual_project.py +2 -1
  105. chia/_tests/util/benchmarks.py +1 -0
  106. chia/_tests/util/blockchain.py +38 -36
  107. chia/_tests/util/blockchain_mock.py +11 -11
  108. chia/_tests/util/build_network_protocol_files.py +2 -1
  109. chia/_tests/util/coin_store.py +2 -1
  110. chia/_tests/util/config.py +1 -1
  111. chia/_tests/util/db_connection.py +2 -3
  112. chia/_tests/util/full_sync.py +9 -11
  113. chia/_tests/util/gen_ssl_certs.py +4 -5
  114. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  115. chia/_tests/util/misc.py +24 -24
  116. chia/_tests/util/network_protocol_data.py +20 -3
  117. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  118. chia/_tests/util/protocol_messages_json.py +292 -3
  119. chia/_tests/util/setup_nodes.py +62 -47
  120. chia/_tests/util/spend_sim.py +57 -57
  121. chia/_tests/util/test_async_pool.py +2 -3
  122. chia/_tests/util/test_chia_version.py +1 -3
  123. chia/_tests/util/test_config.py +3 -3
  124. chia/_tests/util/test_full_block_utils.py +6 -3
  125. chia/_tests/util/test_limited_semaphore.py +1 -2
  126. chia/_tests/util/test_misc.py +2 -2
  127. chia/_tests/util/test_network.py +1 -2
  128. chia/_tests/util/test_priority_mutex.py +3 -3
  129. chia/_tests/util/test_recursive_replace.py +5 -6
  130. chia/_tests/util/test_replace_str_to_bytes.py +9 -10
  131. chia/_tests/util/test_testnet_overrides.py +3 -3
  132. chia/_tests/util/time_out_assert.py +2 -2
  133. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  134. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  135. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  136. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  137. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  138. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  139. chia/_tests/wallet/conftest.py +6 -6
  140. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  141. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  142. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  145. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  146. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  147. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  148. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  149. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  150. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  151. chia/_tests/wallet/sync/test_wallet_sync.py +63 -60
  152. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  153. chia/_tests/wallet/test_coin_management.py +2 -2
  154. chia/_tests/wallet/test_conditions.py +45 -51
  155. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  156. chia/_tests/wallet/test_new_wallet_protocol.py +17 -17
  157. chia/_tests/wallet/test_notifications.py +14 -14
  158. chia/_tests/wallet/test_signer_protocol.py +5 -5
  159. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  160. chia/_tests/wallet/test_transaction_store.py +20 -20
  161. chia/_tests/wallet/test_util.py +2 -2
  162. chia/_tests/wallet/test_wallet.py +380 -228
  163. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  164. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  165. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  166. chia/_tests/wallet/test_wallet_node.py +16 -15
  167. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  168. chia/_tests/wallet/test_wallet_utils.py +2 -3
  169. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  170. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  171. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  172. chia/_tests/wallet/wallet_block_tools.py +12 -11
  173. chia/_tests/weight_proof/config.py +1 -0
  174. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  175. chia/apis/__init__.py +21 -0
  176. chia/apis/farmer_stub.py +102 -0
  177. chia/apis/full_node_stub.py +374 -0
  178. chia/apis/harvester_stub.py +57 -0
  179. chia/apis/introducer_stub.py +35 -0
  180. chia/apis/solver_stub.py +30 -0
  181. chia/apis/stub_protocol_registry.py +21 -0
  182. chia/apis/timelord_stub.py +39 -0
  183. chia/apis/wallet_stub.py +161 -0
  184. chia/cmds/beta.py +3 -4
  185. chia/cmds/beta_funcs.py +4 -3
  186. chia/cmds/check_wallet_db.py +4 -4
  187. chia/cmds/chia.py +1 -2
  188. chia/cmds/cmd_classes.py +11 -13
  189. chia/cmds/cmd_helpers.py +11 -11
  190. chia/cmds/cmds_util.py +15 -15
  191. chia/cmds/coin_funcs.py +6 -7
  192. chia/cmds/coins.py +2 -3
  193. chia/cmds/configure.py +1 -2
  194. chia/cmds/data.py +42 -42
  195. chia/cmds/data_funcs.py +81 -81
  196. chia/cmds/db.py +4 -5
  197. chia/cmds/db_backup_func.py +2 -2
  198. chia/cmds/db_upgrade_func.py +3 -3
  199. chia/cmds/db_validate_func.py +2 -2
  200. chia/cmds/dev/data.py +4 -4
  201. chia/cmds/dev/gh.py +5 -5
  202. chia/cmds/dev/installers.py +2 -3
  203. chia/cmds/dev/mempool.py +3 -4
  204. chia/cmds/dev/mempool_funcs.py +4 -4
  205. chia/cmds/dev/sim.py +8 -8
  206. chia/cmds/dump_keyring.py +3 -3
  207. chia/cmds/farm.py +6 -8
  208. chia/cmds/farm_funcs.py +25 -24
  209. chia/cmds/init_funcs.py +4 -4
  210. chia/cmds/keys.py +16 -18
  211. chia/cmds/keys_funcs.py +36 -36
  212. chia/cmds/netspace.py +1 -3
  213. chia/cmds/netspace_funcs.py +1 -2
  214. chia/cmds/options.py +3 -2
  215. chia/cmds/param_types.py +17 -16
  216. chia/cmds/passphrase.py +6 -7
  217. chia/cmds/passphrase_funcs.py +11 -13
  218. chia/cmds/peer.py +1 -3
  219. chia/cmds/peer_funcs.py +3 -3
  220. chia/cmds/plotnft.py +6 -7
  221. chia/cmds/plotnft_funcs.py +37 -26
  222. chia/cmds/rpc.py +3 -3
  223. chia/cmds/show.py +3 -5
  224. chia/cmds/show_funcs.py +9 -9
  225. chia/cmds/sim_funcs.py +25 -26
  226. chia/cmds/solver.py +1 -3
  227. chia/cmds/solver_funcs.py +1 -2
  228. chia/cmds/start_funcs.py +2 -2
  229. chia/cmds/wallet.py +76 -81
  230. chia/cmds/wallet_funcs.py +206 -177
  231. chia/consensus/augmented_chain.py +6 -6
  232. chia/consensus/block_body_validation.py +19 -15
  233. chia/consensus/block_creation.py +25 -21
  234. chia/consensus/block_header_validation.py +27 -13
  235. chia/consensus/block_height_map.py +3 -6
  236. chia/consensus/block_height_map_protocol.py +2 -2
  237. chia/consensus/block_record.py +2 -4
  238. chia/consensus/blockchain.py +58 -40
  239. chia/consensus/blockchain_interface.py +7 -7
  240. chia/consensus/coin_store_protocol.py +5 -6
  241. chia/consensus/condition_tools.py +4 -4
  242. chia/consensus/cost_calculator.py +2 -3
  243. chia/consensus/default_constants.py +19 -13
  244. chia/consensus/deficit.py +1 -3
  245. chia/consensus/difficulty_adjustment.py +3 -5
  246. chia/consensus/find_fork_point.py +2 -4
  247. chia/consensus/full_block_to_block_record.py +11 -13
  248. chia/consensus/generator_tools.py +2 -3
  249. chia/consensus/get_block_challenge.py +50 -26
  250. chia/consensus/get_block_generator.py +2 -3
  251. chia/consensus/make_sub_epoch_summary.py +8 -7
  252. chia/consensus/multiprocess_validation.py +31 -20
  253. chia/consensus/pos_quality.py +6 -23
  254. chia/consensus/pot_iterations.py +17 -44
  255. chia/consensus/signage_point.py +4 -5
  256. chia/consensus/vdf_info_computation.py +2 -4
  257. chia/daemon/client.py +8 -8
  258. chia/daemon/keychain_proxy.py +31 -37
  259. chia/daemon/server.py +32 -33
  260. chia/daemon/windows_signal.py +4 -3
  261. chia/data_layer/data_layer.py +86 -77
  262. chia/data_layer/data_layer_rpc_api.py +9 -9
  263. chia/data_layer/data_layer_rpc_client.py +13 -15
  264. chia/data_layer/data_layer_server.py +3 -3
  265. chia/data_layer/data_layer_util.py +14 -14
  266. chia/data_layer/data_layer_wallet.py +94 -101
  267. chia/data_layer/data_store.py +50 -50
  268. chia/data_layer/dl_wallet_store.py +9 -12
  269. chia/data_layer/download_data.py +8 -9
  270. chia/data_layer/s3_plugin_service.py +5 -9
  271. chia/data_layer/start_data_layer.py +5 -5
  272. chia/farmer/farmer.py +31 -31
  273. chia/farmer/farmer_api.py +45 -33
  274. chia/farmer/farmer_rpc_api.py +5 -4
  275. chia/farmer/farmer_rpc_client.py +6 -6
  276. chia/farmer/start_farmer.py +6 -6
  277. chia/full_node/block_store.py +13 -16
  278. chia/full_node/check_fork_next_block.py +1 -2
  279. chia/full_node/coin_store.py +15 -16
  280. chia/full_node/eligible_coin_spends.py +3 -3
  281. chia/full_node/fee_estimate_store.py +2 -3
  282. chia/full_node/fee_tracker.py +1 -2
  283. chia/full_node/full_block_utils.py +4 -4
  284. chia/full_node/full_node.py +239 -223
  285. chia/full_node/full_node_api.py +197 -152
  286. chia/full_node/full_node_rpc_api.py +34 -32
  287. chia/full_node/full_node_rpc_client.py +18 -19
  288. chia/full_node/full_node_store.py +45 -43
  289. chia/full_node/hard_fork_utils.py +44 -0
  290. chia/full_node/hint_management.py +2 -2
  291. chia/full_node/mempool.py +17 -19
  292. chia/full_node/mempool_manager.py +89 -42
  293. chia/full_node/pending_tx_cache.py +2 -3
  294. chia/full_node/start_full_node.py +5 -5
  295. chia/full_node/sync_store.py +3 -4
  296. chia/full_node/tx_processing_queue.py +120 -36
  297. chia/full_node/weight_proof.py +61 -48
  298. chia/harvester/harvester.py +25 -24
  299. chia/harvester/harvester_api.py +61 -38
  300. chia/harvester/harvester_rpc_api.py +10 -10
  301. chia/harvester/start_harvester.py +4 -4
  302. chia/introducer/introducer.py +3 -3
  303. chia/introducer/introducer_api.py +6 -4
  304. chia/introducer/start_introducer.py +4 -4
  305. chia/legacy/keyring.py +3 -3
  306. chia/plot_sync/delta.py +1 -2
  307. chia/plot_sync/receiver.py +20 -17
  308. chia/plot_sync/sender.py +15 -10
  309. chia/plotters/bladebit.py +7 -7
  310. chia/plotters/chiapos.py +2 -2
  311. chia/plotters/madmax.py +4 -4
  312. chia/plotters/plotters.py +4 -4
  313. chia/plotters/plotters_util.py +3 -3
  314. chia/plotting/cache.py +20 -14
  315. chia/plotting/check_plots.py +26 -35
  316. chia/plotting/create_plots.py +22 -23
  317. chia/plotting/manager.py +21 -14
  318. chia/plotting/prover.py +59 -42
  319. chia/plotting/util.py +16 -16
  320. chia/pools/pool_config.py +2 -1
  321. chia/pools/pool_puzzles.py +11 -12
  322. chia/pools/pool_wallet.py +34 -57
  323. chia/pools/pool_wallet_info.py +39 -10
  324. chia/protocols/farmer_protocol.py +8 -9
  325. chia/protocols/fee_estimate.py +3 -4
  326. chia/protocols/full_node_protocol.py +3 -4
  327. chia/protocols/harvester_protocol.py +27 -15
  328. chia/protocols/outbound_message.py +3 -3
  329. chia/protocols/pool_protocol.py +8 -9
  330. chia/protocols/shared_protocol.py +1 -2
  331. chia/protocols/solver_protocol.py +9 -2
  332. chia/protocols/timelord_protocol.py +4 -7
  333. chia/protocols/wallet_protocol.py +11 -12
  334. chia/rpc/rpc_client.py +9 -9
  335. chia/rpc/rpc_server.py +17 -17
  336. chia/rpc/util.py +2 -2
  337. chia/seeder/crawler.py +8 -8
  338. chia/seeder/crawler_api.py +21 -27
  339. chia/seeder/crawler_rpc_api.py +2 -2
  340. chia/seeder/dns_server.py +21 -21
  341. chia/seeder/start_crawler.py +4 -4
  342. chia/server/address_manager.py +15 -16
  343. chia/server/api_protocol.py +11 -11
  344. chia/server/chia_policy.py +46 -26
  345. chia/server/introducer_peers.py +2 -3
  346. chia/server/node_discovery.py +19 -19
  347. chia/server/rate_limit_numbers.py +4 -5
  348. chia/server/rate_limits.py +4 -4
  349. chia/server/resolve_peer_info.py +4 -4
  350. chia/server/server.py +49 -52
  351. chia/server/signal_handlers.py +6 -6
  352. chia/server/start_service.py +17 -17
  353. chia/server/upnp.py +4 -6
  354. chia/server/ws_connection.py +52 -37
  355. chia/simulator/add_blocks_in_batches.py +1 -3
  356. chia/simulator/block_tools.py +312 -200
  357. chia/simulator/full_node_simulator.py +56 -35
  358. chia/simulator/keyring.py +2 -3
  359. chia/simulator/setup_services.py +15 -15
  360. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  361. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  362. chia/simulator/simulator_protocol.py +1 -2
  363. chia/simulator/simulator_test_tools.py +3 -3
  364. chia/simulator/start_simulator.py +7 -7
  365. chia/simulator/wallet_tools.py +10 -10
  366. chia/solver/solver.py +10 -10
  367. chia/solver/solver_api.py +10 -8
  368. chia/solver/solver_rpc_api.py +2 -2
  369. chia/solver/start_solver.py +4 -4
  370. chia/ssl/cacert.pem +148 -90
  371. chia/ssl/chia_ca.crt +14 -10
  372. chia/ssl/chia_ca_old.crt +19 -0
  373. chia/ssl/create_ssl.py +4 -4
  374. chia/ssl/renewedselfsignedca.conf +4 -0
  375. chia/ssl/ssl_check.py +1 -2
  376. chia/timelord/iters_from_block.py +1 -4
  377. chia/timelord/start_timelord.py +4 -4
  378. chia/timelord/timelord.py +44 -40
  379. chia/timelord/timelord_api.py +6 -4
  380. chia/timelord/timelord_launcher.py +2 -2
  381. chia/timelord/timelord_rpc_api.py +2 -2
  382. chia/timelord/timelord_state.py +11 -12
  383. chia/types/block_protocol.py +1 -3
  384. chia/types/blockchain_format/coin.py +1 -3
  385. chia/types/blockchain_format/program.py +11 -8
  386. chia/types/blockchain_format/proof_of_space.py +123 -76
  387. chia/types/blockchain_format/tree_hash.py +3 -3
  388. chia/types/blockchain_format/vdf.py +1 -2
  389. chia/types/coin_spend.py +3 -3
  390. chia/types/mempool_item.py +5 -5
  391. chia/types/mempool_submission_status.py +2 -3
  392. chia/types/peer_info.py +1 -2
  393. chia/types/unfinished_header_block.py +3 -4
  394. chia/types/validation_state.py +1 -2
  395. chia/util/action_scope.py +8 -8
  396. chia/util/async_pool.py +5 -5
  397. chia/util/bech32m.py +1 -2
  398. chia/util/beta_metrics.py +2 -2
  399. chia/util/block_cache.py +4 -4
  400. chia/util/chia_logging.py +2 -2
  401. chia/util/chia_version.py +1 -2
  402. chia/util/config.py +15 -16
  403. chia/util/db_wrapper.py +26 -27
  404. chia/util/default_root.py +1 -2
  405. chia/util/errors.py +3 -3
  406. chia/util/file_keyring.py +14 -14
  407. chia/util/files.py +2 -3
  408. chia/util/hash.py +4 -4
  409. chia/util/initial-config.yaml +4 -5
  410. chia/util/inline_executor.py +2 -1
  411. chia/util/ip_address.py +1 -2
  412. chia/util/keychain.py +25 -27
  413. chia/util/keyring_wrapper.py +18 -19
  414. chia/util/lock.py +3 -4
  415. chia/util/log_exceptions.py +1 -2
  416. chia/util/lru_cache.py +2 -2
  417. chia/util/network.py +6 -6
  418. chia/util/path.py +2 -3
  419. chia/util/priority_mutex.py +2 -2
  420. chia/util/profiler.py +1 -2
  421. chia/util/safe_cancel_task.py +1 -2
  422. chia/util/streamable.py +24 -10
  423. chia/util/task_referencer.py +1 -1
  424. chia/util/timing.py +3 -3
  425. chia/util/virtual_project_analysis.py +6 -5
  426. chia/util/ws_message.py +2 -2
  427. chia/wallet/cat_wallet/cat_info.py +3 -4
  428. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  429. chia/wallet/cat_wallet/cat_utils.py +3 -4
  430. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  431. chia/wallet/cat_wallet/lineage_store.py +3 -4
  432. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  433. chia/wallet/coin_selection.py +9 -10
  434. chia/wallet/conditions.py +142 -106
  435. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  436. chia/wallet/derivation_record.py +1 -2
  437. chia/wallet/derive_keys.py +2 -4
  438. chia/wallet/did_wallet/did_info.py +10 -11
  439. chia/wallet/did_wallet/did_wallet.py +36 -82
  440. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  441. chia/wallet/driver_protocol.py +5 -7
  442. chia/wallet/lineage_proof.py +4 -4
  443. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  444. chia/wallet/nft_wallet/nft_info.py +8 -9
  445. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  446. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  447. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  448. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  449. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  450. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  451. chia/wallet/notification_manager.py +3 -3
  452. chia/wallet/notification_store.py +44 -61
  453. chia/wallet/outer_puzzles.py +6 -7
  454. chia/wallet/puzzle_drivers.py +34 -6
  455. chia/wallet/puzzles/clawback/drivers.py +6 -6
  456. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  457. chia/wallet/puzzles/load_clvm.py +1 -1
  458. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  459. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  460. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  461. chia/wallet/puzzles/tails.py +3 -3
  462. chia/wallet/singleton.py +5 -7
  463. chia/wallet/singleton_record.py +3 -3
  464. chia/wallet/start_wallet.py +5 -5
  465. chia/wallet/trade_manager.py +37 -58
  466. chia/wallet/trade_record.py +4 -4
  467. chia/wallet/trading/offer.py +59 -46
  468. chia/wallet/trading/trade_store.py +8 -9
  469. chia/wallet/transaction_record.py +8 -8
  470. chia/wallet/uncurried_puzzle.py +1 -2
  471. chia/wallet/util/clvm_streamable.py +12 -12
  472. chia/wallet/util/compute_hints.py +4 -5
  473. chia/wallet/util/curry_and_treehash.py +1 -2
  474. chia/wallet/util/merkle_tree.py +2 -3
  475. chia/wallet/util/peer_request_cache.py +8 -8
  476. chia/wallet/util/signing.py +85 -0
  477. chia/wallet/util/tx_config.py +15 -6
  478. chia/wallet/util/wallet_sync_utils.py +14 -16
  479. chia/wallet/util/wallet_types.py +2 -2
  480. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  481. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  482. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  483. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  484. chia/wallet/vc_wallet/vc_store.py +5 -6
  485. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  486. chia/wallet/wallet.py +50 -78
  487. chia/wallet/wallet_action_scope.py +11 -11
  488. chia/wallet/wallet_blockchain.py +12 -12
  489. chia/wallet/wallet_coin_record.py +12 -6
  490. chia/wallet/wallet_coin_store.py +24 -25
  491. chia/wallet/wallet_interested_store.py +3 -5
  492. chia/wallet/wallet_nft_store.py +10 -11
  493. chia/wallet/wallet_node.py +53 -61
  494. chia/wallet/wallet_node_api.py +5 -3
  495. chia/wallet/wallet_protocol.py +23 -23
  496. chia/wallet/wallet_puzzle_store.py +15 -18
  497. chia/wallet/wallet_request_types.py +778 -114
  498. chia/wallet/wallet_retry_store.py +1 -3
  499. chia/wallet/wallet_rpc_api.py +572 -909
  500. chia/wallet/wallet_rpc_client.py +87 -279
  501. chia/wallet/wallet_singleton_store.py +3 -4
  502. chia/wallet/wallet_state_manager.py +332 -106
  503. chia/wallet/wallet_transaction_store.py +11 -14
  504. chia/wallet/wallet_user_store.py +4 -6
  505. chia/wallet/wallet_weight_proof_handler.py +4 -4
  506. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/METADATA +6 -5
  507. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
  508. chia/apis.py +0 -21
  509. chia/consensus/check_time_locks.py +0 -57
  510. chia/data_layer/puzzles/__init__.py +0 -0
  511. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  512. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  513. chia/types/coin_record.py +0 -44
  514. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  515. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  516. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  517. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  518. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  520. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  521. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  522. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  524. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  525. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  526. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  527. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  528. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  529. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/WHEEL +0 -0
  530. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
  531. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Optional
5
4
 
6
5
  import pytest
7
6
  from chia_rs import G2Element, Program
@@ -36,7 +35,7 @@ def test_back_and_forth_serialization() -> None:
36
35
 
37
36
  @dataclass
38
37
  class MockWalletStateManager:
39
- most_recent_call: Optional[
38
+ most_recent_call: (
40
39
  tuple[
41
40
  list[TransactionRecord],
42
41
  bool,
@@ -45,8 +44,9 @@ class MockWalletStateManager:
45
44
  list[SigningResponse],
46
45
  list[WalletSpendBundle],
47
46
  list[SingletonRecord],
48
- ],
49
- ] = None
47
+ ]
48
+ | None
49
+ ) = None
50
50
 
51
51
  async def add_pending_transactions(
52
52
  self,
@@ -22,22 +22,22 @@ async def test_wallet_blockchain(
22
22
  ) -> None:
23
23
  [full_node_api], [(wallet_node, _)], bt = simulator_and_wallet
24
24
 
25
- await add_blocks_in_batches(default_1000_blocks[:600], full_node_api.full_node)
25
+ await add_blocks_in_batches(default_1000_blocks[:700], full_node_api.full_node)
26
26
  resp = await full_node_api.request_proof_of_weight(
27
27
  full_node_protocol.RequestProofOfWeight(
28
- uint32(default_1000_blocks[499].height + 1), default_1000_blocks[499].header_hash
28
+ uint32(default_1000_blocks[599].height + 1), default_1000_blocks[599].header_hash
29
29
  )
30
30
  )
31
31
  assert resp is not None
32
32
  resp_2 = await full_node_api.request_proof_of_weight(
33
33
  full_node_protocol.RequestProofOfWeight(
34
- uint32(default_1000_blocks[460].height + 1), default_1000_blocks[460].header_hash
34
+ uint32(default_1000_blocks[560].height + 1), default_1000_blocks[560].header_hash
35
35
  )
36
36
  )
37
37
  assert resp_2 is not None
38
38
  resp_3 = await full_node_api.request_proof_of_weight(
39
39
  full_node_protocol.RequestProofOfWeight(
40
- uint32(default_1000_blocks[505].height + 1), default_1000_blocks[505].header_hash
40
+ uint32(default_1000_blocks[605].height + 1), default_1000_blocks[605].header_hash
41
41
  )
42
42
  )
43
43
  assert resp_3 is not None
@@ -59,18 +59,18 @@ async def test_wallet_blockchain(
59
59
  await chain.new_valid_weight_proof(weight_proof, records)
60
60
  peak_block = await chain.get_peak_block()
61
61
  assert peak_block is not None
62
- assert peak_block.height == 499
62
+ assert peak_block.height == 599
63
63
  assert chain.get_latest_timestamp() > 0
64
64
 
65
65
  await chain.new_valid_weight_proof(weight_proof_short, records_short)
66
66
  peak_block = await chain.get_peak_block()
67
67
  assert peak_block is not None
68
- assert peak_block.height == 499
68
+ assert peak_block.height == 599
69
69
 
70
70
  await chain.new_valid_weight_proof(weight_proof_long, records_long)
71
71
  peak_block = await chain.get_peak_block()
72
72
  assert peak_block is not None
73
- assert peak_block.height == 505
73
+ assert peak_block.height == 605
74
74
 
75
75
  header_blocks: list[HeaderBlock] = []
76
76
  for block in default_1000_blocks:
@@ -81,24 +81,24 @@ async def test_wallet_blockchain(
81
81
  print(res, err)
82
82
  assert res == AddBlockResult.DISCONNECTED_BLOCK
83
83
 
84
- res, err = await chain.add_block(header_blocks[400])
84
+ res, err = await chain.add_block(header_blocks[500])
85
85
  print(res, err)
86
86
  assert res == AddBlockResult.ALREADY_HAVE_BLOCK
87
87
 
88
- res, err = await chain.add_block(header_blocks[507])
88
+ res, err = await chain.add_block(header_blocks[607])
89
89
  print(res, err)
90
90
  assert res == AddBlockResult.DISCONNECTED_BLOCK
91
91
 
92
92
  res, err = await chain.add_block(
93
- header_blocks[506].replace(challenge_chain_ip_proof=VDFProof(uint8(2), b"123", True))
93
+ header_blocks[606].replace(challenge_chain_ip_proof=VDFProof(uint8(2), b"123", True))
94
94
  )
95
95
  assert res == AddBlockResult.INVALID_BLOCK
96
96
 
97
97
  peak_block = await chain.get_peak_block()
98
98
  assert peak_block is not None
99
- assert peak_block.height == 505
99
+ assert peak_block.height == 605
100
100
 
101
- for header_block in header_blocks[506:]:
101
+ for header_block in header_blocks[606:]:
102
102
  res, err = await chain.add_block(header_block)
103
103
  assert res == AddBlockResult.NEW_PEAK
104
104
  peak_block = await chain.get_peak_block()
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  import random
4
4
  from dataclasses import dataclass, field, replace
5
- from typing import Optional
6
5
 
7
6
  import pytest
8
7
  from chia_rs.sized_bytes import bytes32
@@ -14,7 +13,7 @@ from chia.util.streamable import Streamable, UInt32Range, UInt64Range, Versioned
14
13
  from chia.wallet.puzzles.clawback.metadata import ClawbackMetadata
15
14
  from chia.wallet.util.query_filter import AmountFilter, HashFilter
16
15
  from chia.wallet.util.wallet_types import CoinType, WalletType
17
- from chia.wallet.wallet_coin_record import WalletCoinRecord
16
+ from chia.wallet.wallet_coin_record import WalletCoinRecord, WalletCoinRecordMetadataParsingError
18
17
  from chia.wallet.wallet_coin_store import CoinRecordOrder, GetCoinRecords, GetCoinRecordsResult, WalletCoinStore
19
18
 
20
19
  clawback_metadata = ClawbackMetadata(uint64(0), bytes32(b"1" * 32), bytes32(b"2" * 32))
@@ -134,7 +133,7 @@ class DummyWalletCoinRecords:
134
133
  ],
135
134
  )
136
135
  def test_wallet_coin_record_parsed_metadata_failures(invalid_record: WalletCoinRecord, error: str) -> None:
137
- with pytest.raises(ValueError, match=error):
136
+ with pytest.raises(WalletCoinRecordMetadataParsingError, match=error):
138
137
  invalid_record.parsed_metadata()
139
138
 
140
139
 
@@ -632,7 +631,7 @@ get_coin_records_mixed_tests: list[tuple[GetCoinRecords, int, list[WalletCoinRec
632
631
 
633
632
 
634
633
  async def run_get_coin_records_test(
635
- request: GetCoinRecords, total_count: Optional[int], coin_records: list[WalletCoinRecord]
634
+ request: GetCoinRecords, total_count: int | None, coin_records: list[WalletCoinRecord]
636
635
  ) -> None:
637
636
  async with DBConnection(1) as db_wrapper:
638
637
  store = await WalletCoinStore.create(db_wrapper)
@@ -5,7 +5,7 @@ import sys
5
5
  import time
6
6
  import types
7
7
  from pathlib import Path
8
- from typing import Any, Optional
8
+ from typing import Any
9
9
 
10
10
  import pytest
11
11
  from chia_rs import CoinState, FullBlock, G1Element, PrivateKey
@@ -19,6 +19,7 @@ from chia.protocols import wallet_protocol
19
19
  from chia.protocols.outbound_message import Message, make_msg
20
20
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
21
21
  from chia.server.api_protocol import Self
22
+ from chia.server.ws_connection import WSChiaConnection
22
23
  from chia.simulator.add_blocks_in_batches import add_blocks_in_batches
23
24
  from chia.simulator.block_tools import test_constants
24
25
  from chia.types.blockchain_format.coin import Coin
@@ -72,7 +73,7 @@ async def test_get_private_key_default_key(root_path_populated_with_config: Path
72
73
  @pytest.mark.anyio
73
74
  @pytest.mark.parametrize("fingerprint", [None, 1234567890])
74
75
  async def test_get_private_key_missing_key(
75
- root_path_populated_with_config: Path, get_temp_keyring: Keychain, fingerprint: Optional[int]
76
+ root_path_populated_with_config: Path, get_temp_keyring: Keychain, fingerprint: int | None
76
77
  ) -> None:
77
78
  root_path = root_path_populated_with_config
78
79
  keychain = get_temp_keyring # empty keyring
@@ -163,7 +164,7 @@ async def test_get_public_key_default_key(root_path_populated_with_config: Path,
163
164
  @pytest.mark.anyio
164
165
  @pytest.mark.parametrize("fingerprint", [None, 1234567890])
165
166
  async def test_get_public_key_missing_key(
166
- root_path_populated_with_config: Path, get_temp_keyring: Keychain, fingerprint: Optional[int]
167
+ root_path_populated_with_config: Path, get_temp_keyring: Keychain, fingerprint: int | None
167
168
  ) -> None:
168
169
  root_path: Path = root_path_populated_with_config
169
170
  keychain: Keychain = get_temp_keyring # empty keyring
@@ -357,7 +358,7 @@ def test_get_last_used_fingerprint_file_cant_read_win32(
357
358
  m.setattr(WindowsPath, "read_text", patched_pathlib_path_read_text)
358
359
 
359
360
  # Calling get_last_used_fingerprint() should not throw an exception
360
- last_used_fingerprint: Optional[int] = node.get_last_used_fingerprint()
361
+ last_used_fingerprint: int | None = node.get_last_used_fingerprint()
361
362
 
362
363
  # Verify that the file is unreadable
363
364
  assert called_read_text is True
@@ -432,7 +433,7 @@ async def test_get_timestamp_for_height_from_peer(
432
433
  ) -> None:
433
434
  [full_node_api], [(wallet_node, wallet_server)], _ = simulator_and_wallet
434
435
 
435
- async def get_timestamp(height: int) -> Optional[uint64]:
436
+ async def get_timestamp(height: int) -> uint64 | None:
436
437
  return await wallet_node.get_timestamp_for_height_from_peer(uint32(height), full_node_peer)
437
438
 
438
439
  await wallet_server.start_client(PeerInfo(self_hostname, full_node_api.server.get_port()), None)
@@ -492,7 +493,7 @@ async def test_unique_puzzle_hash_subscriptions(simulator_and_wallet: OldSimulat
492
493
  @pytest.mark.anyio
493
494
  @pytest.mark.standard_block_tools
494
495
  async def test_get_balance(
495
- simulator_and_wallet: OldSimulatorsAndWallets, self_hostname: str, default_400_blocks: list[FullBlock]
496
+ simulator_and_wallet: OldSimulatorsAndWallets, self_hostname: str, default_1000_blocks: list[FullBlock]
496
497
  ) -> None:
497
498
  [full_node_api], [(wallet_node, wallet_server)], _bt = simulator_and_wallet
498
499
  full_node_server = full_node_api.full_node.server
@@ -500,7 +501,7 @@ async def test_get_balance(
500
501
  def wallet_synced() -> bool:
501
502
  return full_node_server.node_id in wallet_node.synced_peers
502
503
 
503
- async def restart_with_fingerprint(fingerprint: Optional[int]) -> None:
504
+ async def restart_with_fingerprint(fingerprint: int | None) -> None:
504
505
  wallet_node._close()
505
506
  await wallet_node._await_closed(shutting_down=False)
506
507
  await wallet_node._start_with_fingerprint(fingerprint=fingerprint)
@@ -512,7 +513,7 @@ async def test_get_balance(
512
513
  # with that to a KeyError when applying the race cache if there are less than WEIGHT_PROOF_RECENT_BLOCKS
513
514
  # blocks but we still have a peak stored in the DB. So we need to add enough blocks for a weight proof here to
514
515
  # be able to restart the wallet in this test.
515
- await add_blocks_in_batches(default_400_blocks, full_node_api.full_node)
516
+ await add_blocks_in_batches(default_1000_blocks[:600], full_node_api.full_node)
516
517
  # Initially there should be no sync and no balance
517
518
  assert not wallet_synced()
518
519
  assert await wallet_node.get_balance(wallet_id) == Balance()
@@ -611,7 +612,7 @@ async def test_transaction_send_cache(
611
612
  ) -> None:
612
613
  """
613
614
  The purpose of this test is to test that calling _resend_queue on the wallet node does not result in resending a
614
- spend to a peer that has already recieved that spend and is currently processing it. It also tests that once we
615
+ spend to a peer that has already received that spend and is currently processing it. It also tests that once we
615
616
  have heard that the peer is done processing the spend, we _do_ properly resend it.
616
617
  """
617
618
  [full_node_api], [(wallet_node, wallet_server)], _ = simulator_and_wallet
@@ -624,8 +625,8 @@ async def test_transaction_send_cache(
624
625
  logged_spends = []
625
626
 
626
627
  async def send_transaction(
627
- self: Self, request: wallet_protocol.SendTransaction, *, test: bool = False
628
- ) -> Optional[Message]:
628
+ self: Self, request: wallet_protocol.SendTransaction, peer: WSChiaConnection, *, test: bool = False
629
+ ) -> Message | None:
629
630
  logged_spends.append(request.transaction.name())
630
631
  return None
631
632
 
@@ -649,7 +650,7 @@ async def test_transaction_send_cache(
649
650
  with pytest.raises(AssertionError):
650
651
  await time_out_assert(5, logged_spends_len, 2)
651
652
 
652
- # Tell the wallet that we recieved the spend (but failed to process it so it should send again)
653
+ # Tell the wallet that we received the spend (but failed to process it so it should send again)
653
654
  msg = make_msg(
654
655
  ProtocolMessageTypes.transaction_ack,
655
656
  wallet_protocol.TransactionAck(
@@ -688,7 +689,7 @@ async def test_wallet_node_bad_coin_state_ignore(
688
689
 
689
690
  async def register_for_coin_updates(
690
691
  self: Self, request: wallet_protocol.RegisterForCoinUpdates, *, test: bool = False
691
- ) -> Optional[Message]:
692
+ ) -> Message | None:
692
693
  return make_msg(
693
694
  ProtocolMessageTypes.respond_to_coin_updates,
694
695
  wallet_protocol.RespondToCoinUpdates(
@@ -721,7 +722,7 @@ async def test_start_with_multiple_key_types(
721
722
  ) -> None:
722
723
  [_full_node_api], [(wallet_node, _wallet_server)], _bt = simulator_and_wallet
723
724
 
724
- async def restart_with_fingerprint(fingerprint: Optional[int]) -> None:
725
+ async def restart_with_fingerprint(fingerprint: int | None) -> None:
725
726
  wallet_node._close()
726
727
  await wallet_node._await_closed(shutting_down=False)
727
728
  await wallet_node._start_with_fingerprint(fingerprint=fingerprint)
@@ -752,7 +753,7 @@ async def test_start_with_multiple_keys(
752
753
  ) -> None:
753
754
  [_full_node_api], [(wallet_node, _wallet_server)], _bt = simulator_and_wallet
754
755
 
755
- async def restart_with_fingerprint(fingerprint: Optional[int]) -> None:
756
+ async def restart_with_fingerprint(fingerprint: int | None) -> None:
756
757
  wallet_node._close()
757
758
  await wallet_node._await_closed(shutting_down=False)
758
759
  await wallet_node._start_with_fingerprint(fingerprint=fingerprint)
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import pytest
4
4
  from chia_rs import BlockRecord
5
+ from chia_rs.sized_bytes import bytes32
5
6
 
6
7
  from chia._tests.environments.wallet import (
7
8
  BalanceCheckingError,
@@ -145,7 +146,7 @@ async def test_balance_checking(
145
146
  )
146
147
  ]
147
148
  )
148
- await CATWallet.get_or_create_wallet_for_cat(env_0.wallet_state_manager, env_0.xch_wallet, "00" * 32)
149
+ await CATWallet.get_or_create_wallet_for_cat(env_0.wallet_state_manager, env_0.xch_wallet, bytes32.zeros)
149
150
  with pytest.raises(KeyError, match="No wallet state for wallet id 2"):
150
151
  await env_0.check_balances()
151
152
 
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from collections.abc import Collection
4
- from typing import Optional
5
4
 
6
5
  import pytest
7
6
  from chia_rs import Coin, CoinState
@@ -32,7 +31,7 @@ def assert_race_cache(cache: PeerRequestCache, expected_entries: dict[int, set[C
32
31
  cache.get_race_cache(i)
33
32
 
34
33
 
35
- def dummy_coin_state(*, created_height: Optional[int], spent_height: Optional[int]) -> CoinState:
34
+ def dummy_coin_state(*, created_height: int | None, spent_height: int | None) -> CoinState:
36
35
  return CoinState(
37
36
  Coin(bytes(b"0" * 32), bytes(b"0" * 32), uint64(0)),
38
37
  uint32.construct_optional(spent_height),
@@ -40,7 +39,7 @@ def dummy_coin_state(*, created_height: Optional[int], spent_height: Optional[in
40
39
  )
41
40
 
42
41
 
43
- def heights(coin_states: Collection[CoinState]) -> list[tuple[Optional[int], Optional[int]]]:
42
+ def heights(coin_states: Collection[CoinState]) -> list[tuple[int | None, int | None]]:
44
43
  return [(coin_state.created_height, coin_state.spent_height) for coin_state in coin_states]
45
44
 
46
45
 
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  from chia_rs.sized_bytes import bytes32
6
4
  from chia_rs.sized_ints import uint64
7
5
 
@@ -22,18 +20,18 @@ from chia.wallet.vc_wallet.cr_cat_drivers import construct_cr_layer
22
20
 
23
21
  def test_cat_outer_puzzle() -> None:
24
22
  authorized_providers: list[bytes32] = [bytes32.zeros, bytes32.zeros]
25
- proofs_checker: Program = Program.to(None)
23
+ proofs_checker: Program = Program.NIL
26
24
  ACS: Program = Program.to(1)
27
25
  cr_puzzle: Program = construct_cr_layer(authorized_providers, proofs_checker, ACS)
28
26
  double_cr_puzzle: Program = construct_cr_layer(authorized_providers, proofs_checker, cr_puzzle)
29
27
  uncurried_cr_puzzle = uncurry_puzzle(double_cr_puzzle)
30
- cr_driver: Optional[PuzzleInfo] = match_puzzle(uncurried_cr_puzzle)
28
+ cr_driver: PuzzleInfo | None = match_puzzle(uncurried_cr_puzzle)
31
29
 
32
30
  assert cr_driver is not None
33
31
  assert cr_driver.type() == "credential restricted"
34
32
  assert cr_driver["authorized_providers"] == authorized_providers
35
33
  assert cr_driver["proofs_checker"] == proofs_checker
36
- inside_cr_driver: Optional[PuzzleInfo] = cr_driver.also()
34
+ inside_cr_driver: PuzzleInfo | None = cr_driver.also()
37
35
  assert inside_cr_driver is not None
38
36
  assert inside_cr_driver.type() == "credential restricted"
39
37
  assert inside_cr_driver["authorized_providers"] == authorized_providers
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import itertools
4
- from typing import Optional
5
4
 
6
5
  import pytest
7
6
  from chia_rs import CoinSpend, G2Element
@@ -105,7 +104,7 @@ async def test_covenant_layer(cost_logger: CostLogger) -> None:
105
104
  ].coin
106
105
 
107
106
  # With the honest coin, attempt to spend the non-eve case too soon
108
- result: tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
107
+ result: tuple[MempoolInclusionStatus, Err | None] = await client.push_tx(
109
108
  WalletSpendBundle(
110
109
  [
111
110
  make_spend(
@@ -117,7 +116,7 @@ async def test_covenant_layer(cost_logger: CostLogger) -> None:
117
116
  inner_puzzle_hash=ACS_PH,
118
117
  amount=uint64(acs_coin.amount),
119
118
  ),
120
- Program.to(None),
119
+ Program.NIL,
121
120
  Program.to([[51, covenant_puzzle_hash, acs_coin.amount]]),
122
121
  ),
123
122
  ),
@@ -139,7 +138,7 @@ async def test_covenant_layer(cost_logger: CostLogger) -> None:
139
138
  covenant_puzzle,
140
139
  solve_covenant_layer(
141
140
  LineageProof(parent_name=parent.parent_coin_info, amount=uint64(parent.amount)),
142
- Program.to(None),
141
+ Program.NIL,
143
142
  Program.to([[51, covenant_puzzle_hash, cov.amount]]),
144
143
  ),
145
144
  ),
@@ -173,7 +172,7 @@ async def test_covenant_layer(cost_logger: CostLogger) -> None:
173
172
  inner_puzzle_hash=ACS_PH,
174
173
  amount=uint64(acs_cov.amount),
175
174
  ),
176
- Program.to(None),
175
+ Program.NIL,
177
176
  Program.to([[51, covenant_puzzle_hash, new_acs_cov.amount]]),
178
177
  ),
179
178
  ),
@@ -213,7 +212,7 @@ async def test_did_tp(cost_logger: CostLogger) -> None:
213
212
  bad_data: bytes32 = bytes32.zeros
214
213
 
215
214
  # Try to update metadata and tp without any announcement
216
- result: tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
215
+ result: tuple[MempoolInclusionStatus, Err | None] = await client.push_tx(
217
216
  WalletSpendBundle(
218
217
  [
219
218
  make_spend(
@@ -327,7 +326,7 @@ async def test_revocation_layer(cost_logger: CostLogger) -> None:
327
326
  )[0].coin
328
327
 
329
328
  # Reveal the wrong puzzle
330
- result: tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
329
+ result: tuple[MempoolInclusionStatus, Err | None] = await client.push_tx(
331
330
  WalletSpendBundle(
332
331
  [
333
332
  make_spend(
@@ -335,7 +334,7 @@ async def test_revocation_layer(cost_logger: CostLogger) -> None:
335
334
  p2_either_puzzle,
336
335
  solve_revocation_layer(
337
336
  ACS,
338
- Program.to(None),
337
+ Program.NIL,
339
338
  hidden=True,
340
339
  ),
341
340
  )
@@ -415,7 +414,7 @@ async def test_proofs_checker(cost_logger: CostLogger, num_proofs: int) -> None:
415
414
 
416
415
  block_height: uint32 = sim.block_height
417
416
  for i, proof_list in enumerate(itertools.permutations(flags, num_proofs)):
418
- result: tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
417
+ result: tuple[MempoolInclusionStatus, Err | None] = await client.push_tx(
419
418
  cost_logger.add_cost(
420
419
  f"Proofs Checker only - num_proofs: {num_proofs} - permutation: {i}",
421
420
  WalletSpendBundle(
@@ -506,7 +505,7 @@ async def test_vc_lifecycle(test_syncing: bool, cost_logger: CostLogger) -> None
506
505
  ACS_PH,
507
506
  [bytes32.zeros],
508
507
  )
509
- result: tuple[MempoolInclusionStatus, Optional[Err]] = await client.push_tx(
508
+ result: tuple[MempoolInclusionStatus, Err | None] = await client.push_tx(
510
509
  cost_logger.add_cost(
511
510
  "Launch VC",
512
511
  WalletSpendBundle(
@@ -616,16 +615,16 @@ async def test_vc_lifecycle(test_syncing: bool, cost_logger: CostLogger) -> None
616
615
  dpuz_1, launch_crcat_spend_1, cr_1 = CRCAT.launch(
617
616
  cr_coin_1,
618
617
  CreateCoin(ACS_PH, uint64(cr_coin_1.amount)),
619
- Program.to(None),
620
- Program.to(None),
618
+ Program.NIL,
619
+ Program.NIL,
621
620
  AUTHORIZED_PROVIDERS,
622
621
  proofs_checker.as_program(),
623
622
  )
624
623
  dpuz_2, launch_crcat_spend_2, cr_2 = CRCAT.launch(
625
624
  cr_coin_2,
626
625
  CreateCoin(ACS_PH, uint64(cr_coin_2.amount)),
627
- Program.to(None),
628
- Program.to(None),
626
+ Program.NIL,
627
+ Program.NIL,
629
628
  AUTHORIZED_PROVIDERS,
630
629
  proofs_checker.as_program(),
631
630
  )
@@ -700,7 +699,7 @@ async def test_vc_lifecycle(test_syncing: bool, cost_logger: CostLogger) -> None
700
699
  ),
701
700
  ],
702
701
  NEW_PROOFS if error != "use_malicious_cats" else MALICIOUS_PROOFS,
703
- Program.to(None),
702
+ Program.NIL,
704
703
  launcher_id,
705
704
  vc.launcher_id,
706
705
  vc.wrap_inner_with_backdoor().get_tree_hash(),
@@ -1,14 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
- from collections.abc import Awaitable
5
- from typing import Any, Callable, Optional
4
+ from collections.abc import Awaitable, Callable
5
+ from typing import Any, Literal
6
6
 
7
7
  import pytest
8
8
  from chia_rs import G2Element
9
9
  from chia_rs.sized_bytes import bytes32
10
10
  from chia_rs.sized_ints import uint8, uint16, uint32, uint64
11
- from typing_extensions import Literal
12
11
 
13
12
  from chia._tests.environments.wallet import WalletEnvironment, WalletStateTransition, WalletTestFramework
14
13
  from chia._tests.util.time_out_assert import time_out_assert_not_none
@@ -31,7 +30,10 @@ from chia.wallet.vc_wallet.vc_store import VCProofs, VCRecord
31
30
  from chia.wallet.wallet import Wallet
32
31
  from chia.wallet.wallet_node import WalletNode
33
32
  from chia.wallet.wallet_request_types import (
33
+ Addition,
34
34
  CATSpend,
35
+ CRCATApprovePending,
36
+ CreateSignedTransaction,
35
37
  GetTransactions,
36
38
  GetWallets,
37
39
  VCAddProofs,
@@ -55,7 +57,7 @@ async def mint_cr_cat(
55
57
  full_node_api: FullNodeSimulator,
56
58
  tx_config: TXConfig,
57
59
  authorized_providers: list[bytes32] = [],
58
- tail: Program = Program.to(None),
60
+ tail: Program = Program.NIL,
59
61
  proofs_checker: ProofsChecker = ProofsChecker(["foo", "bar"]),
60
62
  ) -> None:
61
63
  async with wallet_0.wallet_state_manager.new_action_scope(tx_config, push=True) as action_scope:
@@ -70,14 +72,16 @@ async def mint_cr_cat(
70
72
  await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node_0, timeout=20)
71
73
  tx = (
72
74
  await client_0.create_signed_transactions(
73
- [
74
- {
75
- "puzzle_hash": cat_puzzle.get_tree_hash(),
76
- "amount": CAT_AMOUNT_0,
77
- }
78
- ],
75
+ CreateSignedTransaction(
76
+ wallet_id=uint32(1),
77
+ additions=[
78
+ Addition(
79
+ puzzle_hash=cat_puzzle.get_tree_hash(),
80
+ amount=CAT_AMOUNT_0,
81
+ )
82
+ ],
83
+ ),
79
84
  tx_config,
80
- wallet_id=1,
81
85
  )
82
86
  ).signed_tx
83
87
  spend_bundle = tx.spend_bundle
@@ -165,7 +169,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
165
169
  }
166
170
 
167
171
  # Generate DID as an "authorized provider"
168
- async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
172
+ async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
169
173
  did_id: bytes32 = bytes32.from_hexstr(
170
174
  (
171
175
  await DIDWallet.create_new_did_wallet(
@@ -173,9 +177,10 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
173
177
  )
174
178
  ).get_my_DID()
175
179
  )
180
+ await full_node_api.wait_for_wallet_synced(wallet_node_0)
176
181
 
177
182
  # Mint a VC
178
- async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
183
+ async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
179
184
  ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
180
185
  vc_record = (
181
186
  await client_0.vc_mint(
@@ -235,7 +240,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
235
240
  WalletStateTransition(),
236
241
  ]
237
242
  )
238
- new_vc_record: Optional[VCRecord] = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
243
+ new_vc_record: VCRecord | None = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
239
244
  assert new_vc_record is not None
240
245
 
241
246
  # Spend VC
@@ -291,7 +296,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
291
296
  WalletStateTransition(),
292
297
  ]
293
298
  )
294
- vc_record_updated: Optional[VCRecord] = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
299
+ vc_record_updated: VCRecord | None = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
295
300
  assert vc_record_updated is not None
296
301
  assert vc_record_updated.vc.proof_hash == proof_root
297
302
 
@@ -463,8 +468,8 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
463
468
  await client_1.get_transactions(
464
469
  GetTransactions(
465
470
  uint32(env_1.dealias_wallet_id("crcat")),
466
- uint16(0),
467
- uint16(1),
471
+ uint32(0),
472
+ uint32(1),
468
473
  reverse=True,
469
474
  type_filter=TransactionTypeFilter.include([TransactionType.INCOMING_CRCAT_PENDING]),
470
475
  )
@@ -505,10 +510,10 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
505
510
 
506
511
  # Claim the pending approval to our wallet
507
512
  await client_1.crcat_approve_pending(
508
- env_1.dealias_wallet_id("crcat"),
509
- uint64(90),
513
+ CRCATApprovePending(
514
+ wallet_id=env_1.dealias_wallet_id("crcat"), min_amount_to_claim=uint64(90), fee=uint64(90), push=True
515
+ ),
510
516
  wallet_environments.tx_config,
511
- fee=uint64(90),
512
517
  )
513
518
  await wallet_environments.process_pending_states(
514
519
  [
@@ -748,7 +753,7 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
748
753
  )
749
754
  ]
750
755
  )
751
- new_vc_record: Optional[VCRecord] = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
756
+ new_vc_record: VCRecord | None = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
752
757
  assert new_vc_record is not None
753
758
 
754
759
  # Test a negative case real quick (mostly unrelated)
@@ -804,7 +809,7 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
804
809
  )
805
810
  ]
806
811
  )
807
- vc_record_revoked: Optional[VCRecord] = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
812
+ vc_record_revoked: VCRecord | None = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
808
813
  assert vc_record_revoked is None
809
814
  assert (
810
815
  len(await (await wallet_node_0.wallet_state_manager.get_or_create_vc_wallet()).store.get_unconfirmed_vcs()) == 0
@@ -849,7 +854,7 @@ async def test_cat_wallet_conversion(
849
854
 
850
855
  # Key point of test: create a normal CAT wallet first, and see if it gets converted to CR-CAT wallet
851
856
  await CATWallet.get_or_create_wallet_for_cat(
852
- wallet_node_0.wallet_state_manager, wallet_0, Program.to(None).get_tree_hash().hex()
857
+ wallet_node_0.wallet_state_manager, wallet_0, Program.NIL.get_tree_hash()
853
858
  )
854
859
 
855
860
  did_id = bytes32.zeros
@@ -857,7 +862,7 @@ async def test_cat_wallet_conversion(
857
862
  await full_node_api.farm_blocks_to_wallet(count=num_blocks, wallet=wallet_0)
858
863
  await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node_0, timeout=20)
859
864
 
860
- async def check_length(length: int, func: Callable[..., Awaitable[Any]], *args: Any) -> Optional[Literal[True]]:
865
+ async def check_length(length: int, func: Callable[..., Awaitable[Any]], *args: Any) -> Literal[True] | None:
861
866
  if len(await func(*args)) == length:
862
867
  return True
863
868
  return None # pragma: no cover