chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__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 (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Any, Callable, Dict, List, Optional, Tuple, Type, TypeVar, cast, get_args, get_origin
4
+ from typing import Any, Callable, Optional, TypeVar, cast, get_args, get_origin
5
5
 
6
6
  from chia_rs import G1Element, G2Element
7
7
  from clvm_tools import binutils
@@ -35,12 +35,12 @@ ANYONE_CAN_SPEND_WITH_PADDING_PUZZLE_HASH = Program.to(binutils.assemble("(a (q
35
35
 
36
36
  POOL_REWARD_PREFIX_MAINNET = bytes32.fromhex("ccd5bb71183532bff220ba46c268991a00000000000000000000000000000000")
37
37
 
38
- MAX_BLOCK_COST_CLVM = int(1e18)
38
+ MAX_BLOCK_COST_CLVM = 10**18
39
39
 
40
40
  T = TypeVar("T")
41
41
 
42
42
 
43
- def satisfies_hint(obj: T, type_hint: Type[T]) -> bool:
43
+ def satisfies_hint(obj: T, type_hint: type[T]) -> bool:
44
44
  """
45
45
  Check if an object satisfies a type hint.
46
46
  This is a simplified version of `isinstance` that also handles generic types.
@@ -56,7 +56,7 @@ def satisfies_hint(obj: T, type_hint: Type[T]) -> bool:
56
56
  if not isinstance(obj, origin):
57
57
  return False
58
58
  if len(args) > 0:
59
- # Tuple[T, ...] gets handled just like List[T]
59
+ # tuple[T, ...] gets handled just like list[T]
60
60
  if origin is list or (origin is tuple and args[-1] is Ellipsis):
61
61
  object_hint_pairs.extend((item, args[0]) for item in obj)
62
62
  elif origin is tuple:
@@ -75,7 +75,7 @@ def satisfies_hint(obj: T, type_hint: Type[T]) -> bool:
75
75
 
76
76
  class PuzzleDB:
77
77
  def __init__(self) -> None:
78
- self._db: Dict[bytes32, Program] = {}
78
+ self._db: dict[bytes32, Program] = {}
79
79
 
80
80
  def add_puzzle(self, puzzle: Program) -> None:
81
81
  self._db[puzzle.get_tree_hash()] = Program.from_bytes(bytes(puzzle))
@@ -84,7 +84,7 @@ class PuzzleDB:
84
84
  return self._db.get(puzzle_hash)
85
85
 
86
86
 
87
- def from_kwargs(kwargs: Dict[str, Any], key: str, type_info: Type[T]) -> T:
87
+ def from_kwargs(kwargs: dict[str, Any], key: str, type_info: type[T]) -> T:
88
88
  """Raise an exception if `kwargs[key]` is missing or the wrong type"""
89
89
  if key not in kwargs:
90
90
  raise ValueError(f"`{key}` missing in call to `solve`")
@@ -93,7 +93,7 @@ def from_kwargs(kwargs: Dict[str, Any], key: str, type_info: Type[T]) -> T:
93
93
  return cast(T, kwargs[key])
94
94
 
95
95
 
96
- Solver_F = Callable[["Solver", PuzzleDB, List[Program], Any], Program]
96
+ Solver_F = Callable[["Solver", PuzzleDB, list[Program], Any], Program]
97
97
 
98
98
 
99
99
  class Solver:
@@ -102,14 +102,14 @@ class Solver:
102
102
  """
103
103
 
104
104
  def __init__(self) -> None:
105
- self.solvers_by_puzzle_hash: Dict[bytes32, Solver_F] = {}
105
+ self.solvers_by_puzzle_hash: dict[bytes32, Solver_F] = {}
106
106
 
107
107
  def register_solver(self, puzzle_hash: bytes32, solver_f: Solver_F) -> None:
108
108
  if puzzle_hash in self.solvers_by_puzzle_hash:
109
109
  raise ValueError(f"solver registered for {puzzle_hash}")
110
110
  self.solvers_by_puzzle_hash[puzzle_hash] = solver_f
111
111
 
112
- def solve(self, puzzle_db: PuzzleDB, puzzle: Program, **kwargs: Dict[str, Any]) -> Program:
112
+ def solve(self, puzzle_db: PuzzleDB, puzzle: Program, **kwargs: dict[str, Any]) -> Program:
113
113
  """
114
114
  The legal values and types for `kwargs` depends on the underlying solver
115
115
  that's invoked. The `kwargs` are passed through to any inner solvers
@@ -128,34 +128,34 @@ class Solver:
128
128
  raise ValueError("can't solve")
129
129
 
130
130
 
131
- def solve_launcher(solver: Solver, puzzle_db: PuzzleDB, args: List[Program], kwargs: Dict[str, Any]) -> Program:
131
+ def solve_launcher(solver: Solver, puzzle_db: PuzzleDB, args: list[Program], kwargs: dict[str, Any]) -> Program:
132
132
  launcher_amount = from_kwargs(kwargs, "launcher_amount", uint64)
133
133
  destination_puzzle_hash = from_kwargs(kwargs, "destination_puzzle_hash", bytes32)
134
- metadata = from_kwargs(kwargs, "metadata", List[Tuple[str, str]])
134
+ metadata = from_kwargs(kwargs, "metadata", list[tuple[str, str]])
135
135
  solution = Program.to([destination_puzzle_hash, launcher_amount, metadata])
136
136
  return solution
137
137
 
138
138
 
139
- def solve_anyone_can_spend(solver: Solver, puzzle_db: PuzzleDB, args: List[Program], kwargs: Dict[str, Any]) -> Program:
139
+ def solve_anyone_can_spend(solver: Solver, puzzle_db: PuzzleDB, args: list[Program], kwargs: dict[str, Any]) -> Program:
140
140
  """
141
141
  This is the anyone-can-spend puzzle `1`. Note that farmers can easily steal this coin, so don't use
142
142
  it except for testing.
143
143
  """
144
- conditions = from_kwargs(kwargs, "conditions", List[Program])
144
+ conditions = from_kwargs(kwargs, "conditions", list[Program])
145
145
  solution = Program.to(conditions)
146
146
  return solution
147
147
 
148
148
 
149
149
  def solve_anyone_can_spend_with_padding(
150
- solver: Solver, puzzle_db: PuzzleDB, args: List[Program], kwargs: Dict[str, Any]
150
+ solver: Solver, puzzle_db: PuzzleDB, args: list[Program], kwargs: dict[str, Any]
151
151
  ) -> Program:
152
152
  """This is the puzzle `(a (q . 1) 3)`. It's only for testing."""
153
- conditions = from_kwargs(kwargs, "conditions", List[Program])
153
+ conditions = from_kwargs(kwargs, "conditions", list[Program])
154
154
  solution = Program.to((0, conditions))
155
155
  return solution
156
156
 
157
157
 
158
- def solve_singleton(solver: Solver, puzzle_db: PuzzleDB, args: List[Program], kwargs: Dict[str, Any]) -> Program:
158
+ def solve_singleton(solver: Solver, puzzle_db: PuzzleDB, args: list[Program], kwargs: dict[str, Any]) -> Program:
159
159
  """
160
160
  `lineage_proof`: a `Program` that proves the parent is also a singleton (or the launcher).
161
161
  `coin_amount`: a necessarily-odd value of mojos in this coin.
@@ -168,7 +168,7 @@ def solve_singleton(solver: Solver, puzzle_db: PuzzleDB, args: List[Program], kw
168
168
  return solution
169
169
 
170
170
 
171
- def solve_pool_member(solver: Solver, puzzle_db: PuzzleDB, args: List[Program], kwargs: Dict[str, Any]) -> Program:
171
+ def solve_pool_member(solver: Solver, puzzle_db: PuzzleDB, args: list[Program], kwargs: dict[str, Any]) -> Program:
172
172
  pool_member_spend_type = from_kwargs(kwargs, "pool_member_spend_type", str)
173
173
  allowable = ["to-waiting-room", "claim-p2-nft"]
174
174
  if pool_member_spend_type not in allowable:
@@ -185,7 +185,7 @@ def solve_pool_member(solver: Solver, puzzle_db: PuzzleDB, args: List[Program],
185
185
 
186
186
 
187
187
  def solve_pool_waiting_room(
188
- solver: Solver, puzzle_db: PuzzleDB, args: List[Program], kwargs: Dict[str, Any]
188
+ solver: Solver, puzzle_db: PuzzleDB, args: list[Program], kwargs: dict[str, Any]
189
189
  ) -> Program:
190
190
  pool_leaving_spend_type = from_kwargs(kwargs, "pool_leaving_spend_type", str)
191
191
  allowable = ["exit-waiting-room", "claim-p2-nft"]
@@ -193,7 +193,7 @@ def solve_pool_waiting_room(
193
193
  raise ValueError(f"`pool_leaving_spend_type` must be one of {'/'.join(allowable)} for POOL_MEMBER puzzle")
194
194
  exit_waiting_room = pool_leaving_spend_type == "exit-waiting-room"
195
195
  if exit_waiting_room:
196
- key_value_list = from_kwargs(kwargs, "key_value_list", List[Tuple[str, str]])
196
+ key_value_list = from_kwargs(kwargs, "key_value_list", list[tuple[str, str]])
197
197
  destination_puzzle_hash = from_kwargs(kwargs, "destination_puzzle_hash", bytes32)
198
198
  return Program.to([0, 1, key_value_list, destination_puzzle_hash])
199
199
  # it's an "absorb_pool_reward" type
@@ -203,7 +203,7 @@ def solve_pool_waiting_room(
203
203
  return solution
204
204
 
205
205
 
206
- def solve_p2_singleton(solver: Solver, puzzle_db: PuzzleDB, args: List[Program], kwargs: Dict[str, Any]) -> Program:
206
+ def solve_p2_singleton(solver: Solver, puzzle_db: PuzzleDB, args: list[Program], kwargs: dict[str, Any]) -> Program:
207
207
  p2_singleton_spend_type = from_kwargs(kwargs, "p2_singleton_spend_type", str)
208
208
  allowable = ["claim-p2-nft", "delayed-spend"]
209
209
  if p2_singleton_spend_type not in allowable:
@@ -211,7 +211,7 @@ def solve_p2_singleton(solver: Solver, puzzle_db: PuzzleDB, args: List[Program],
211
211
  claim_p2_nft = p2_singleton_spend_type == "claim-p2-nft"
212
212
  if claim_p2_nft:
213
213
  singleton_inner_puzzle_hash = from_kwargs(kwargs, "singleton_inner_puzzle_hash", bytes32)
214
- p2_singleton_coin_name = from_kwargs(kwargs, "p2_singleton_coin_name", bytes)
214
+ p2_singleton_coin_name = from_kwargs(kwargs, "p2_singleton_coin_name", bytes32)
215
215
  solution = Program.to([singleton_inner_puzzle_hash, p2_singleton_coin_name])
216
216
  return solution
217
217
  raise ValueError("can't solve `delayed-spend` yet")
@@ -261,7 +261,7 @@ class SingletonWallet:
261
261
  )
262
262
  return make_spend(coin, puzzle_reveal, solution)
263
263
 
264
- def update_state(self, puzzle_db: PuzzleDB, removals: List[CoinSpend]) -> int:
264
+ def update_state(self, puzzle_db: PuzzleDB, removals: list[CoinSpend]) -> int:
265
265
  state_change_count = 0
266
266
  current_coin_name = self.current_state.name()
267
267
  for coin_spend in removals:
@@ -303,9 +303,9 @@ def launcher_conditions_and_spend_bundle(
303
303
  parent_coin_id: bytes32,
304
304
  launcher_amount: uint64,
305
305
  initial_singleton_inner_puzzle: Program,
306
- metadata: List[Tuple[str, str]],
306
+ metadata: list[tuple[str, str]],
307
307
  launcher_puzzle: Program,
308
- ) -> Tuple[bytes32, List[Program], WalletSpendBundle]:
308
+ ) -> tuple[bytes32, list[Program], WalletSpendBundle]:
309
309
  puzzle_db.add_puzzle(launcher_puzzle)
310
310
  launcher_puzzle_hash = launcher_puzzle.get_tree_hash()
311
311
  launcher_coin = Coin(parent_coin_id, launcher_puzzle_hash, launcher_amount)
@@ -374,7 +374,7 @@ def p2_singleton_puzzle_hash_for_launcher(
374
374
 
375
375
  def claim_p2_singleton(
376
376
  puzzle_db: PuzzleDB, singleton_wallet: SingletonWallet, p2_singleton_coin: Coin
377
- ) -> Tuple[CoinSpend, List[Program]]:
377
+ ) -> tuple[CoinSpend, list[Program]]:
378
378
  inner_puzzle = singleton_wallet.inner_puzzle(puzzle_db)
379
379
  assert inner_puzzle
380
380
  inner_puzzle_hash = inner_puzzle.get_tree_hash()
@@ -432,7 +432,7 @@ def assert_coin_spent(coin_store: CoinStore, coin: Coin, is_spent: bool = True)
432
432
 
433
433
  def spend_coin_to_singleton(
434
434
  puzzle_db: PuzzleDB, launcher_puzzle: Program, coin_store: CoinStore, now: CoinTimestamp
435
- ) -> Tuple[List[Coin], List[CoinSpend]]:
435
+ ) -> tuple[list[Coin], list[CoinSpend]]:
436
436
  farmed_coin_amount = 100000
437
437
  metadata = [("foo", "bar")]
438
438
 
@@ -468,7 +468,7 @@ def spend_coin_to_singleton(
468
468
  return additions, removals
469
469
 
470
470
 
471
- def find_interesting_singletons(removals: List[CoinSpend]) -> List[SingletonWallet]:
471
+ def find_interesting_singletons(removals: list[CoinSpend]) -> list[SingletonWallet]:
472
472
  singletons = []
473
473
  for coin_spend in removals:
474
474
  if coin_spend.coin.puzzle_hash == LAUNCHER_PUZZLE_HASH:
@@ -484,7 +484,7 @@ def find_interesting_singletons(removals: List[CoinSpend]) -> List[SingletonWall
484
484
  return singletons
485
485
 
486
486
 
487
- def filter_p2_singleton(puzzle_db: PuzzleDB, additions: List[Coin]) -> List[Coin]:
487
+ def filter_p2_singleton(puzzle_db: PuzzleDB, additions: list[Coin]) -> list[Coin]:
488
488
  r = []
489
489
  for coin in additions:
490
490
  puzzle = puzzle_db.puzzle_for_hash(coin.puzzle_hash)
@@ -508,7 +508,7 @@ def test_lifecycle_with_coinstore_as_wallet() -> None:
508
508
  now = CoinTimestamp(10012300, uint32(1))
509
509
 
510
510
  DELAY_SECONDS = 86400
511
- DELAY_PUZZLE_HASH = bytes32([0] * 32)
511
+ DELAY_PUZZLE_HASH = bytes32.zeros
512
512
 
513
513
  #######
514
514
  # spend coin to a singleton
@@ -8,7 +8,7 @@ from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import (
8
8
  )
9
9
 
10
10
 
11
- def test_1():
11
+ def test_1() -> None:
12
12
  for main_secret_exponent in range(500, 600):
13
13
  hidden_puzzle_hash = DEFAULT_HIDDEN_PUZZLE.get_tree_hash()
14
14
  main_pubkey = int_to_public_key(main_secret_exponent)
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
4
  import random
5
- from typing import Any, List, Optional, Tuple
5
+ from typing import Any, Optional
6
6
 
7
7
  import pytest
8
8
 
@@ -16,7 +16,11 @@ from chia.wallet.conditions import ConditionValidTimes
16
16
  from chia.wallet.transaction_record import TransactionRecord, TransactionRecordOld, minimum_send_attempts
17
17
  from chia.wallet.util.query_filter import TransactionTypeFilter
18
18
  from chia.wallet.util.transaction_type import TransactionType
19
- from chia.wallet.wallet_transaction_store import WalletTransactionStore, filter_ok_mempool_status
19
+ from chia.wallet.wallet_transaction_store import (
20
+ WalletTransactionStore,
21
+ filter_ok_mempool_status,
22
+ get_light_transaction_record,
23
+ )
20
24
 
21
25
  module_seeded_random = random.Random()
22
26
  module_seeded_random.seed(a=0, version=2)
@@ -37,11 +41,11 @@ tr1 = TransactionRecord(
37
41
  [coin_2, coin_3], # additions
38
42
  [coin_1], # removals
39
43
  uint32(1), # wallet_id
40
- [], # List[Tuple[str, uint8, Optional[str]]] sent_to
44
+ [], # list[tuple[str, uint8, Optional[str]]] sent_to
41
45
  bytes32(bytes32.random(module_seeded_random)), # trade_id
42
46
  uint32(TransactionType.OUTGOING_TX), # type
43
47
  bytes32(bytes32.random(module_seeded_random)), # name
44
- [], # List[Tuple[bytes32, List[bytes]]] memos
48
+ [], # list[tuple[bytes32, list[bytes]]] memos
45
49
  ConditionValidTimes(),
46
50
  )
47
51
 
@@ -210,7 +214,7 @@ async def test_get_farming_rewards(seeded_random: random.Random) -> None:
210
214
  async with DBConnection(1) as db_wrapper:
211
215
  store = await WalletTransactionStore.create(db_wrapper)
212
216
 
213
- test_trs: List[TransactionRecord] = []
217
+ test_trs: list[TransactionRecord] = []
214
218
  # tr1 is type OUTGOING_TX
215
219
 
216
220
  for conf in [True, False]:
@@ -252,8 +256,8 @@ async def test_get_all_unconfirmed(seeded_random: random.Random) -> None:
252
256
  )
253
257
  await store.add_transaction_record(tr1)
254
258
  await store.add_transaction_record(tr2)
255
-
256
- assert await store.get_all_unconfirmed() == [tr1]
259
+ all_unconfirmed = await store.get_all_unconfirmed()
260
+ assert all_unconfirmed == [get_light_transaction_record(tr1)]
257
261
 
258
262
 
259
263
  @pytest.mark.anyio
@@ -320,7 +324,7 @@ async def test_all_transactions_for_wallet(seeded_random: random.Random) -> None
320
324
  async with DBConnection(1) as db_wrapper:
321
325
  store = await WalletTransactionStore.create(db_wrapper)
322
326
 
323
- test_trs: List[TransactionRecord] = []
327
+ test_trs: list[TransactionRecord] = []
324
328
  for wallet_id in [1, 2]:
325
329
  for type in [
326
330
  TransactionType.INCOMING_TX,
@@ -356,7 +360,7 @@ async def test_all_transactions_for_wallet(seeded_random: random.Random) -> None
356
360
  assert await store.get_all_transactions_for_wallet(2, TransactionType.OUTGOING_TRADE) == [test_trs[11]]
357
361
 
358
362
 
359
- def cmp(lhs: List[Any], rhs: List[Any]) -> bool:
363
+ def cmp(lhs: list[Any], rhs: list[Any]) -> bool:
360
364
  if len(rhs) != len(lhs):
361
365
  return False
362
366
 
@@ -371,7 +375,7 @@ async def test_get_all_transactions(seeded_random: random.Random) -> None:
371
375
  async with DBConnection(1) as db_wrapper:
372
376
  store = await WalletTransactionStore.create(db_wrapper)
373
377
 
374
- test_trs: List[TransactionRecord] = []
378
+ test_trs: list[TransactionRecord] = []
375
379
  assert await store.get_all_transactions() == []
376
380
  for wallet_id in [1, 2, 3, 4]:
377
381
  test_trs.append(dataclasses.replace(tr1, name=bytes32.random(seeded_random), wallet_id=uint32(wallet_id)))
@@ -388,7 +392,7 @@ async def test_get_transaction_above(seeded_random: random.Random) -> None:
388
392
  async with DBConnection(1) as db_wrapper:
389
393
  store = await WalletTransactionStore.create(db_wrapper)
390
394
 
391
- test_trs: List[TransactionRecord] = []
395
+ test_trs: list[TransactionRecord] = []
392
396
  assert await store.get_transaction_above(uint32(0)) == []
393
397
  for height in range(10):
394
398
  test_trs.append(
@@ -440,7 +444,7 @@ async def test_rollback_to_block(seeded_random: random.Random) -> None:
440
444
  async with DBConnection(1) as db_wrapper:
441
445
  store = await WalletTransactionStore.create(db_wrapper)
442
446
 
443
- test_trs: List[TransactionRecord] = []
447
+ test_trs: list[TransactionRecord] = []
444
448
  for height in range(10):
445
449
  test_trs.append(
446
450
  dataclasses.replace(tr1, name=bytes32.random(seeded_random), confirmed_at_height=uint32(height))
@@ -798,7 +802,7 @@ async def test_get_not_sent(seeded_random: random.Random) -> None:
798
802
 
799
803
  @pytest.mark.anyio
800
804
  async def test_transaction_record_is_valid() -> None:
801
- invalid_attempts: List[Tuple[str, uint8, Optional[str]]] = []
805
+ invalid_attempts: list[tuple[str, uint8, Optional[str]]] = []
802
806
  # The tx should be valid as long as we don't have minimum_send_attempts failed attempts
803
807
  while len(invalid_attempts) < minimum_send_attempts:
804
808
  assert dataclasses.replace(tr1, sent_to=invalid_attempts).is_valid()
@@ -814,9 +818,9 @@ async def test_transaction_record_is_valid() -> None:
814
818
  Err.INVALID_FEE_TOO_CLOSE_TO_ZERO.name,
815
819
  )
816
820
  # But it should become valid with one of the above attempts
817
- assert dataclasses.replace(tr1, sent_to=invalid_attempts + [mempool_success]).is_valid()
818
- assert dataclasses.replace(tr1, sent_to=invalid_attempts + [low_fee]).is_valid()
819
- assert dataclasses.replace(tr1, sent_to=invalid_attempts + [close_to_zero]).is_valid()
821
+ assert dataclasses.replace(tr1, sent_to=[*invalid_attempts, mempool_success]).is_valid()
822
+ assert dataclasses.replace(tr1, sent_to=[*invalid_attempts, low_fee]).is_valid()
823
+ assert dataclasses.replace(tr1, sent_to=[*invalid_attempts, close_to_zero]).is_valid()
820
824
 
821
825
 
822
826
  @pytest.mark.anyio
@@ -842,7 +846,7 @@ async def test_valid_times_migration() -> None:
842
846
  old_record = TransactionRecordOld(
843
847
  confirmed_at_height=uint32(0),
844
848
  created_at_time=uint64(1000000000),
845
- to_puzzle_hash=bytes32([0] * 32),
849
+ to_puzzle_hash=bytes32.zeros,
846
850
  amount=uint64(0),
847
851
  fee_amount=uint64(0),
848
852
  confirmed=False,
@@ -854,7 +858,7 @@ async def test_valid_times_migration() -> None:
854
858
  sent_to=[],
855
859
  trade_id=None,
856
860
  type=uint32(TransactionType.INCOMING_TX.value),
857
- name=bytes32([0] * 32),
861
+ name=bytes32.zeros,
858
862
  memos=[],
859
863
  )
860
864
 
@@ -893,7 +897,7 @@ async def test_large_tx_record_query() -> None:
893
897
  record = TransactionRecordOld(
894
898
  confirmed_at_height=uint32(0),
895
899
  created_at_time=uint64(1000000000),
896
- to_puzzle_hash=bytes32([0] * 32),
900
+ to_puzzle_hash=bytes32.zeros,
897
901
  amount=uint64(0),
898
902
  fee_amount=uint64(0),
899
903
  confirmed=False,
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Dict, List, Tuple
3
+ from typing import Any
4
4
 
5
5
  import pytest
6
6
 
@@ -21,6 +21,7 @@ from chia.wallet.util.tx_config import (
21
21
  CoinSelectionConfigLoader,
22
22
  TXConfigLoader,
23
23
  )
24
+ from chia.wallet.util.wallet_types import WalletType
24
25
 
25
26
 
26
27
  def test_compute_spend_hints_and_additions() -> None:
@@ -36,22 +37,18 @@ def test_compute_spend_hints_and_additions() -> None:
36
37
  expected_dict = {hinted_coin.coin.name(): hinted_coin for hinted_coin in hinted_coins}
37
38
  assert compute_spend_hints_and_additions(coin_spend)[0] == expected_dict
38
39
 
39
- not_hinted_coin = HintedCoin(Coin(parent_coin.coin.name(), bytes32([0] * 32), uint64(0)), None)
40
+ not_hinted_coin = HintedCoin(Coin(parent_coin.coin.name(), bytes32.zeros, uint64(0)), None)
40
41
  assert compute_spend_hints_and_additions(
41
- make_spend(parent_coin.coin, Program.to(1), Program.to([[51, bytes32([0] * 32), 0, [["not", "a"], "hint"]]]))
42
+ make_spend(parent_coin.coin, Program.to(1), Program.to([[51, bytes32.zeros, 0, [["not", "a"], "hint"]]]))
42
43
  )[0] == {not_hinted_coin.coin.name(): not_hinted_coin}
43
44
 
44
45
  with pytest.raises(ValidationError):
45
46
  compute_spend_hints_and_additions(
46
- make_spend(
47
- parent_coin.coin, Program.to(1), Program.to([[51, bytes32([0] * 32), 0] for _ in range(0, 10000)])
48
- )
47
+ make_spend(parent_coin.coin, Program.to(1), Program.to([[51, bytes32.zeros, 0] for _ in range(0, 10000)]))
49
48
  )
50
49
  with pytest.raises(ValidationError):
51
50
  compute_spend_hints_and_additions(
52
- make_spend(
53
- parent_coin.coin, Program.to(1), Program.to([[50, bytes48([0] * 48), b""] for _ in range(0, 10000)])
54
- )
51
+ make_spend(parent_coin.coin, Program.to(1), Program.to([[50, bytes48.zeros, b""] for _ in range(0, 10000)]))
55
52
  )
56
53
 
57
54
 
@@ -66,7 +63,7 @@ def test_cs_config() -> None:
66
63
  "min_coin_amount": 50,
67
64
  }
68
65
  coin_to_exclude = CoinGenerator().get().coin
69
- coin_id_to_exclude = bytes32([0] * 32)
66
+ coin_id_to_exclude = bytes32.zeros
70
67
  assert CoinSelectionConfigLoader.from_json_dict(
71
68
  {
72
69
  "excluded_coins": [coin_to_exclude.to_json_dict()],
@@ -80,9 +77,7 @@ def test_cs_config() -> None:
80
77
  {
81
78
  "excluded_coins": [coin_to_exclude.to_json_dict()],
82
79
  }
83
- ).override(
84
- max_coin_amount=100
85
- ).autofill(constants=DEFAULT_CONSTANTS).to_json_dict() == {
80
+ ).override(max_coin_amount=100).autofill(constants=DEFAULT_CONSTANTS).to_json_dict() == {
86
81
  **default_cs_config,
87
82
  "excluded_coin_ids": ["0x" + coin_to_exclude.name().hex()],
88
83
  "max_coin_amount": 100,
@@ -112,20 +107,20 @@ def test_list_to_binary_tree() -> None:
112
107
  "serializations",
113
108
  [
114
109
  (tuple(), Program.to(None), []),
115
- ((bytes32([0] * 32),), Program.to([bytes32([0] * 32)]), [LineageProofField.PARENT_NAME]),
110
+ ((bytes32.zeros,), Program.to([bytes32.zeros]), [LineageProofField.PARENT_NAME]),
116
111
  (
117
- (bytes32([0] * 32), bytes32([0] * 32)),
118
- Program.to([bytes32([0] * 32), bytes32([0] * 32)]),
112
+ (bytes32.zeros, bytes32.zeros),
113
+ Program.to([bytes32.zeros, bytes32.zeros]),
119
114
  [LineageProofField.PARENT_NAME, LineageProofField.INNER_PUZZLE_HASH],
120
115
  ),
121
116
  (
122
- (bytes32([0] * 32), bytes32([0] * 32), uint64(0)),
123
- Program.to([bytes32([0] * 32), bytes32([0] * 32), uint64(0)]),
117
+ (bytes32.zeros, bytes32.zeros, uint64(0)),
118
+ Program.to([bytes32.zeros, bytes32.zeros, uint64(0)]),
124
119
  [LineageProofField.PARENT_NAME, LineageProofField.INNER_PUZZLE_HASH, LineageProofField.AMOUNT],
125
120
  ),
126
121
  ],
127
122
  )
128
- def test_lineage_proof_varargs(serializations: Tuple[Tuple[Any, ...], Program, List[LineageProofField]]) -> None:
123
+ def test_lineage_proof_varargs(serializations: tuple[tuple[Any, ...], Program, list[LineageProofField]]) -> None:
129
124
  var_args, expected_program, lp_fields = serializations
130
125
  assert LineageProof(*var_args).to_program() == expected_program
131
126
  assert LineageProof(*var_args) == LineageProof.from_program(expected_program, lp_fields)
@@ -135,36 +130,36 @@ def test_lineage_proof_varargs(serializations: Tuple[Tuple[Any, ...], Program, L
135
130
  "serializations",
136
131
  [
137
132
  ({}, Program.to(None), []),
138
- ({"parent_name": bytes32([0] * 32)}, Program.to([bytes32([0] * 32)]), [LineageProofField.PARENT_NAME]),
133
+ ({"parent_name": bytes32.zeros}, Program.to([bytes32.zeros]), [LineageProofField.PARENT_NAME]),
139
134
  (
140
- {"parent_name": bytes32([0] * 32), "inner_puzzle_hash": bytes32([0] * 32)},
141
- Program.to([bytes32([0] * 32), bytes32([0] * 32)]),
135
+ {"parent_name": bytes32.zeros, "inner_puzzle_hash": bytes32.zeros},
136
+ Program.to([bytes32.zeros, bytes32.zeros]),
142
137
  [LineageProofField.PARENT_NAME, LineageProofField.INNER_PUZZLE_HASH],
143
138
  ),
144
139
  (
145
- {"parent_name": bytes32([0] * 32), "inner_puzzle_hash": bytes32([0] * 32), "amount": uint64(0)},
146
- Program.to([bytes32([0] * 32), bytes32([0] * 32), uint64(0)]),
140
+ {"parent_name": bytes32.zeros, "inner_puzzle_hash": bytes32.zeros, "amount": uint64(0)},
141
+ Program.to([bytes32.zeros, bytes32.zeros, uint64(0)]),
147
142
  [LineageProofField.PARENT_NAME, LineageProofField.INNER_PUZZLE_HASH, LineageProofField.AMOUNT],
148
143
  ),
149
144
  (
150
- {"parent_name": bytes32([0] * 32), "amount": uint64(0)},
151
- Program.to([bytes32([0] * 32), uint64(0)]),
145
+ {"parent_name": bytes32.zeros, "amount": uint64(0)},
146
+ Program.to([bytes32.zeros, uint64(0)]),
152
147
  [LineageProofField.PARENT_NAME, LineageProofField.AMOUNT],
153
148
  ),
154
149
  (
155
- {"inner_puzzle_hash": bytes32([0] * 32), "amount": uint64(0)},
156
- Program.to([bytes32([0] * 32), uint64(0)]),
150
+ {"inner_puzzle_hash": bytes32.zeros, "amount": uint64(0)},
151
+ Program.to([bytes32.zeros, uint64(0)]),
157
152
  [LineageProofField.INNER_PUZZLE_HASH, LineageProofField.AMOUNT],
158
153
  ),
159
154
  ({"amount": uint64(0)}, Program.to([uint64(0)]), [LineageProofField.AMOUNT]),
160
155
  (
161
- {"inner_puzzle_hash": bytes32([0] * 32)},
162
- Program.to([bytes32([0] * 32)]),
156
+ {"inner_puzzle_hash": bytes32.zeros},
157
+ Program.to([bytes32.zeros]),
163
158
  [LineageProofField.INNER_PUZZLE_HASH],
164
159
  ),
165
160
  ],
166
161
  )
167
- def test_lineage_proof_kwargs(serializations: Tuple[Dict[str, Any], Program, List[LineageProofField]]) -> None:
162
+ def test_lineage_proof_kwargs(serializations: tuple[dict[str, Any], Program, list[LineageProofField]]) -> None:
168
163
  kwargs, expected_program, lp_fields = serializations
169
164
  assert LineageProof(**kwargs).to_program() == expected_program
170
165
  assert LineageProof(**kwargs) == LineageProof.from_program(expected_program, lp_fields)
@@ -174,8 +169,17 @@ def test_lineage_proof_errors() -> None:
174
169
  with pytest.raises(ValueError, match="Mismatch"):
175
170
  LineageProof.from_program(Program.to([]), [LineageProofField.PARENT_NAME])
176
171
  with pytest.raises(StopIteration):
177
- LineageProof.from_program(Program.to([bytes32([0] * 32)]), [])
172
+ LineageProof.from_program(Program.to([bytes32.zeros]), [])
178
173
  with pytest.raises(ValueError):
179
174
  LineageProof.from_program(Program.to([bytes32([1] * 32)]), [LineageProofField.AMOUNT])
180
175
  with pytest.raises(ValueError):
181
176
  LineageProof.from_program(Program.to([uint64(0)]), [LineageProofField.PARENT_NAME])
177
+
178
+
179
+ # this is the only test that has coverage for `WalletType.to_json_dict`
180
+ # it's possible it could even be deleted
181
+
182
+
183
+ def test_wallet_type_to_json() -> None:
184
+ for w in WalletType:
185
+ assert w.to_json_dict() == w.name