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
@@ -4,7 +4,7 @@ import dataclasses
4
4
  import logging
5
5
  import time
6
6
  import traceback
7
- from typing import TYPE_CHECKING, Any, ClassVar, Dict, List, Optional, Set, Tuple, cast
7
+ from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
8
8
 
9
9
  from chia_rs import G1Element
10
10
  from typing_extensions import Unpack
@@ -69,12 +69,12 @@ CAT_MOD_HASH_HASH = Program.to(CAT_MOD_HASH).get_tree_hash()
69
69
  QUOTED_MOD_HASH = calculate_hash_of_quoted_mod_hash(CAT_MOD_HASH)
70
70
 
71
71
 
72
- def not_ephemeral_additions(sp: WalletSpendBundle) -> List[Coin]:
73
- removals: Set[Coin] = set()
72
+ def not_ephemeral_additions(sp: WalletSpendBundle) -> list[Coin]:
73
+ removals: set[Coin] = set()
74
74
  for cs in sp.coin_spends:
75
75
  removals.add(cs.coin)
76
76
 
77
- additions: List[Coin] = []
77
+ additions: list[Coin] = []
78
78
  max_cost = int(DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM)
79
79
  for cs in sp.coin_spends:
80
80
  coins, cost = compute_additions_with_cost(cs, max_cost=max_cost)
@@ -106,7 +106,7 @@ class CATWallet:
106
106
  async def create_new_cat_wallet(
107
107
  wallet_state_manager: WalletStateManager,
108
108
  wallet: Wallet,
109
- cat_tail_info: Dict[str, Any],
109
+ cat_tail_info: dict[str, Any],
110
110
  amount: uint64,
111
111
  action_scope: WalletActionScope,
112
112
  fee: uint64 = uint64(0),
@@ -144,10 +144,10 @@ class CATWallet:
144
144
  )
145
145
  assert self.cat_info.limitations_program_hash != empty_bytes
146
146
  except Exception:
147
- await wallet_state_manager.user_store.delete_wallet(self.id())
147
+ await wallet_state_manager.delete_wallet(self.id())
148
148
  raise
149
149
  if spend_bundle is None:
150
- await wallet_state_manager.user_store.delete_wallet(self.id())
150
+ await wallet_state_manager.delete_wallet(self.id())
151
151
  raise ValueError("Failed to create spend.")
152
152
 
153
153
  await self.wallet_state_manager.add_new_wallet(self)
@@ -160,7 +160,7 @@ class CATWallet:
160
160
  await self.set_name(name)
161
161
 
162
162
  # Change and actual CAT coin
163
- non_ephemeral_coins: List[Coin] = not_ephemeral_additions(spend_bundle)
163
+ non_ephemeral_coins: list[Coin] = not_ephemeral_additions(spend_bundle)
164
164
  cat_coin = None
165
165
  puzzle_store = self.wallet_state_manager.puzzle_store
166
166
  for c in non_ephemeral_coins:
@@ -257,7 +257,7 @@ class CATWallet:
257
257
  puzzle_driver: PuzzleInfo,
258
258
  name: Optional[str] = None,
259
259
  # We're hinting this as Any for mypy by should explore adding this to the wallet protocol and hinting properly
260
- potential_subclasses: Dict[AssetType, Any] = {},
260
+ potential_subclasses: dict[AssetType, Any] = {},
261
261
  ) -> Any:
262
262
  next_layer: Optional[PuzzleInfo] = puzzle_driver.also()
263
263
  if next_layer is not None:
@@ -310,7 +310,7 @@ class CATWallet:
310
310
  def id(self) -> uint32:
311
311
  return self.wallet_info.id
312
312
 
313
- async def get_confirmed_balance(self, record_list: Optional[Set[WalletCoinRecord]] = None) -> uint128:
313
+ async def get_confirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
314
314
  if record_list is None:
315
315
  record_list = await self.wallet_state_manager.coin_store.get_unspent_coins_for_wallet(self.id())
316
316
 
@@ -323,7 +323,7 @@ class CATWallet:
323
323
  self.log.info(f"Confirmed balance for cat wallet {self.id()} is {amount}")
324
324
  return uint128(amount)
325
325
 
326
- async def get_unconfirmed_balance(self, unspent_records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
326
+ async def get_unconfirmed_balance(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128:
327
327
  return await self.wallet_state_manager.get_unconfirmed_balance(self.id(), unspent_records)
328
328
 
329
329
  @property
@@ -335,14 +335,14 @@ class CATWallet:
335
335
  # avoid full block TXs
336
336
  return int(self.wallet_state_manager.constants.MAX_BLOCK_COST_CLVM / 2 / self.cost_of_single_tx)
337
337
 
338
- async def get_max_spendable_coins(self, records: Optional[Set[WalletCoinRecord]] = None) -> Set[WalletCoinRecord]:
339
- spendable: List[WalletCoinRecord] = list(
338
+ async def get_max_spendable_coins(self, records: Optional[set[WalletCoinRecord]] = None) -> set[WalletCoinRecord]:
339
+ spendable: list[WalletCoinRecord] = list(
340
340
  await self.wallet_state_manager.get_spendable_coins_for_wallet(self.id(), records)
341
341
  )
342
342
  spendable.sort(reverse=True, key=lambda record: record.coin.amount)
343
343
  return set(spendable[0 : min(len(spendable), self.max_send_quantity)])
344
344
 
345
- async def get_max_send_amount(self, records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
345
+ async def get_max_send_amount(self, records: Optional[set[WalletCoinRecord]] = None) -> uint128:
346
346
  return uint128(sum(cr.coin.amount for cr in await self.get_max_spendable_coins()))
347
347
 
348
348
  def get_name(self) -> str:
@@ -422,27 +422,6 @@ class CATWallet:
422
422
  # We also need to make sure there's no record of the transaction
423
423
  await self.wallet_state_manager.tx_store.delete_transaction_record(record.coin.name())
424
424
 
425
- async def get_new_inner_hash(self) -> bytes32:
426
- puzzle = await self.get_new_inner_puzzle()
427
- return puzzle.get_tree_hash()
428
-
429
- async def get_new_inner_puzzle(self) -> Program:
430
- return await self.standard_wallet.get_new_puzzle()
431
-
432
- async def get_new_puzzlehash(self) -> bytes32:
433
- return await self.standard_wallet.get_new_puzzlehash()
434
-
435
- async def get_puzzle_hash(self, new: bool) -> bytes32:
436
- if new:
437
- return await self.get_new_puzzlehash()
438
- else:
439
- record: Optional[DerivationRecord] = (
440
- await self.wallet_state_manager.get_current_derivation_record_for_wallet(self.standard_wallet.id())
441
- )
442
- if record is None:
443
- return await self.get_new_puzzlehash()
444
- return record.puzzle_hash
445
-
446
425
  def require_derivation_paths(self) -> bool:
447
426
  return True
448
427
 
@@ -456,10 +435,17 @@ class CATWallet:
456
435
  limitations_program_hash_hash = Program.to(self.cat_info.limitations_program_hash).get_tree_hash()
457
436
  return curry_and_treehash(QUOTED_MOD_HASH, CAT_MOD_HASH_HASH, limitations_program_hash_hash, inner_puzzle_hash)
458
437
 
459
- async def get_new_cat_puzzle_hash(self) -> bytes32:
460
- return (await self.wallet_state_manager.get_unused_derivation_record(self.id())).puzzle_hash
438
+ async def get_cat_puzzle_hash(self, new: bool) -> bytes32:
439
+ if new:
440
+ return (await self.wallet_state_manager.get_unused_derivation_record(self.id())).puzzle_hash
441
+ else:
442
+ derivation_record = await self.wallet_state_manager.get_current_derivation_record_for_wallet(self.id())
443
+ if derivation_record is None:
444
+ return (await self.wallet_state_manager.get_unused_derivation_record(self.id())).puzzle_hash
445
+
446
+ return derivation_record.puzzle_hash
461
447
 
462
- async def get_spendable_balance(self, records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
448
+ async def get_spendable_balance(self, records: Optional[set[WalletCoinRecord]] = None) -> uint128:
463
449
  coins = await self.get_cat_spendable_coins(records)
464
450
  amount = 0
465
451
  for record in coins:
@@ -493,10 +479,10 @@ class CATWallet:
493
479
 
494
480
  return uint64(addition_amount)
495
481
 
496
- async def get_cat_spendable_coins(self, records: Optional[Set[WalletCoinRecord]] = None) -> List[WalletCoinRecord]:
497
- result: List[WalletCoinRecord] = []
482
+ async def get_cat_spendable_coins(self, records: Optional[set[WalletCoinRecord]] = None) -> list[WalletCoinRecord]:
483
+ result: list[WalletCoinRecord] = []
498
484
 
499
- record_list: Set[WalletCoinRecord] = await self.wallet_state_manager.get_spendable_coins_for_wallet(
485
+ record_list: set[WalletCoinRecord] = await self.wallet_state_manager.get_spendable_coins_for_wallet(
500
486
  self.id(), records
501
487
  )
502
488
 
@@ -511,17 +497,17 @@ class CATWallet:
511
497
  self,
512
498
  amount: uint64,
513
499
  action_scope: WalletActionScope,
514
- ) -> Set[Coin]:
500
+ ) -> set[Coin]:
515
501
  """
516
502
  Returns a set of coins that can be used for generating a new transaction.
517
503
  Note: Must be called under wallet state manager lock
518
504
  """
519
505
  spendable_amount: uint128 = await self.get_spendable_balance()
520
- spendable_coins: List[WalletCoinRecord] = await self.get_cat_spendable_coins()
506
+ spendable_coins: list[WalletCoinRecord] = await self.get_cat_spendable_coins()
521
507
 
522
508
  # Try to use coins from the store, if there isn't enough of "unused"
523
509
  # coins use change coins that are not confirmed yet
524
- unconfirmed_removals: Dict[bytes32, Coin] = await self.wallet_state_manager.unconfirmed_removals_for_wallet(
510
+ unconfirmed_removals: dict[bytes32, Coin] = await self.wallet_state_manager.unconfirmed_removals_for_wallet(
525
511
  self.id()
526
512
  )
527
513
  async with action_scope.use() as interface:
@@ -538,18 +524,18 @@ class CATWallet:
538
524
  return coins
539
525
 
540
526
  async def inner_puzzle_for_cat_puzhash(self, cat_hash: bytes32) -> Program:
541
- record: Optional[DerivationRecord] = (
542
- await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(cat_hash)
543
- )
527
+ record: Optional[
528
+ DerivationRecord
529
+ ] = await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(cat_hash)
544
530
  if record is None:
545
531
  raise RuntimeError(f"Missing Derivation Record for CAT puzzle_hash {cat_hash}")
546
532
  inner_puzzle: Program = self.standard_wallet.puzzle_for_pk(record.pubkey)
547
533
  return inner_puzzle
548
534
 
549
535
  async def convert_puzzle_hash(self, puzzle_hash: bytes32) -> bytes32:
550
- record: Optional[DerivationRecord] = (
551
- await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(puzzle_hash)
552
- )
536
+ record: Optional[
537
+ DerivationRecord
538
+ ] = await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(puzzle_hash)
553
539
  if record is None:
554
540
  return puzzle_hash # TODO: check if we have a test for this case!
555
541
  else:
@@ -563,7 +549,7 @@ class CATWallet:
563
549
  fee: uint64,
564
550
  amount_to_claim: uint64,
565
551
  action_scope: WalletActionScope,
566
- extra_conditions: Tuple[Condition, ...] = tuple(),
552
+ extra_conditions: tuple[Condition, ...] = tuple(),
567
553
  ) -> Optional[AssertCoinAnnouncement]:
568
554
  """
569
555
  This function creates a non-CAT transaction to pay fees, contribute funds for issuance, and absorb melt value.
@@ -579,7 +565,7 @@ class CATWallet:
579
565
  fee,
580
566
  action_scope,
581
567
  )
582
- origin_id = list(chia_coins)[0].name()
568
+ origin_id = next(iter(chia_coins)).name()
583
569
  await self.standard_wallet.generate_signed_transaction(
584
570
  uint64(0),
585
571
  (await self.standard_wallet.get_puzzle_hash(not action_scope.config.tx_config.reuse_puzhash)),
@@ -595,7 +581,7 @@ class CATWallet:
595
581
  fee,
596
582
  action_scope,
597
583
  )
598
- origin_id = list(chia_coins)[0].name()
584
+ origin_id = next(iter(chia_coins)).name()
599
585
  selected_amount = sum(c.amount for c in chia_coins)
600
586
  await self.standard_wallet.generate_signed_transaction(
601
587
  uint64(selected_amount + amount_to_claim - fee),
@@ -627,12 +613,12 @@ class CATWallet:
627
613
 
628
614
  async def generate_unsigned_spendbundle(
629
615
  self,
630
- payments: List[Payment],
616
+ payments: list[Payment],
631
617
  action_scope: WalletActionScope,
632
618
  fee: uint64 = uint64(0),
633
- cat_discrepancy: Optional[Tuple[int, Program, Program]] = None, # (extra_delta, tail_reveal, tail_solution)
634
- coins: Optional[Set[Coin]] = None,
635
- extra_conditions: Tuple[Condition, ...] = tuple(),
619
+ cat_discrepancy: Optional[tuple[int, Program, Program]] = None, # (extra_delta, tail_reveal, tail_solution)
620
+ coins: Optional[set[Coin]] = None,
621
+ extra_conditions: tuple[Condition, ...] = tuple(),
636
622
  ) -> WalletSpendBundle:
637
623
  if cat_discrepancy is not None:
638
624
  extra_delta, tail_reveal, tail_solution = cat_discrepancy
@@ -666,17 +652,17 @@ class CATWallet:
666
652
 
667
653
  if change > 0:
668
654
  derivation_record = await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(
669
- list(cat_coins)[0].puzzle_hash
655
+ next(iter(cat_coins)).puzzle_hash
670
656
  )
671
657
  if derivation_record is not None and action_scope.config.tx_config.reuse_puzhash:
672
658
  change_puzhash = self.standard_wallet.puzzle_hash_for_pk(derivation_record.pubkey)
673
659
  for payment in payments:
674
660
  if change_puzhash == payment.puzzle_hash and change == payment.amount:
675
661
  # We cannot create two coins has same id, create a new puzhash for the change
676
- change_puzhash = await self.get_new_inner_hash()
662
+ change_puzhash = await self.standard_wallet.get_puzzle_hash(new=True)
677
663
  break
678
664
  else:
679
- change_puzhash = await self.get_new_inner_hash()
665
+ change_puzhash = await self.standard_wallet.get_puzzle_hash(new=True)
680
666
  primaries.append(Payment(change_puzhash, uint64(change), [change_puzhash]))
681
667
 
682
668
  # Loop through the coins we've selected and gather the information we need to spend them
@@ -756,17 +742,17 @@ class CATWallet:
756
742
 
757
743
  async def generate_signed_transaction(
758
744
  self,
759
- amounts: List[uint64],
760
- puzzle_hashes: List[bytes32],
745
+ amounts: list[uint64],
746
+ puzzle_hashes: list[bytes32],
761
747
  action_scope: WalletActionScope,
762
748
  fee: uint64 = uint64(0),
763
- coins: Optional[Set[Coin]] = None,
764
- memos: Optional[List[List[bytes]]] = None,
765
- extra_conditions: Tuple[Condition, ...] = tuple(),
749
+ coins: Optional[set[Coin]] = None,
750
+ memos: Optional[list[list[bytes]]] = None,
751
+ extra_conditions: tuple[Condition, ...] = tuple(),
766
752
  **kwargs: Unpack[GSTOptionalArgs],
767
753
  ) -> None:
768
754
  # (extra_delta, tail_reveal, tail_solution)
769
- cat_discrepancy: Optional[Tuple[int, Program, Program]] = kwargs.get("cat_discrepancy", None)
755
+ cat_discrepancy: Optional[tuple[int, Program, Program]] = kwargs.get("cat_discrepancy", None)
770
756
  if memos is None:
771
757
  memos = [[] for _ in range(len(puzzle_hashes))]
772
758
 
@@ -775,7 +761,7 @@ class CATWallet:
775
761
 
776
762
  payments = []
777
763
  for amount, puzhash, memo_list in zip(amounts, puzzle_hashes, memos):
778
- memos_with_hint: List[bytes] = [puzhash]
764
+ memos_with_hint: list[bytes] = [puzhash]
779
765
  memos_with_hint.extend(memo_list)
780
766
  payments.append(Payment(puzhash, amount, memos_with_hint))
781
767
 
@@ -790,10 +776,10 @@ class CATWallet:
790
776
  )
791
777
 
792
778
  async with action_scope.use() as interface:
793
- other_tx_removals: Set[Coin] = {
779
+ other_tx_removals: set[Coin] = {
794
780
  removal for tx in interface.side_effects.transactions for removal in tx.removals
795
781
  }
796
- other_tx_additions: Set[Coin] = {
782
+ other_tx_additions: set[Coin] = {
797
783
  removal for tx in interface.side_effects.transactions for removal in tx.additions
798
784
  }
799
785
  interface.side_effects.transactions.append(
@@ -854,7 +840,7 @@ class CATWallet:
854
840
  asset_id: Optional[bytes32],
855
841
  amount: uint64,
856
842
  action_scope: WalletActionScope,
857
- ) -> Set[Coin]:
843
+ ) -> set[Coin]:
858
844
  balance = await self.get_confirmed_balance()
859
845
  if balance < amount:
860
846
  raise Exception(f"insufficient funds in wallet {self.id()}")
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import List, Optional
4
+ from typing import Optional
5
5
 
6
6
  from chia.types.blockchain_format.coin import Coin
7
7
  from chia.types.blockchain_format.program import Program
@@ -15,7 +15,7 @@ from chia.util.streamable import Streamable, streamable
15
15
  class LockedCoinInfo(Streamable):
16
16
  coin: Coin
17
17
  inner_puzzle: Program # This is the lockup puzzle, not the lockup_puzzle's inner_puzzle
18
- active_votes: List[Optional[bytes32]]
18
+ active_votes: list[Optional[bytes32]]
19
19
 
20
20
 
21
21
  @streamable
@@ -25,4 +25,4 @@ class DAOCATInfo(Streamable):
25
25
  free_cat_wallet_id: uint64
26
26
  limitations_program_hash: bytes32
27
27
  my_tail: Optional[Program] # this is the program
28
- locked_coins: List[LockedCoinInfo]
28
+ locked_coins: list[LockedCoinInfo]
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  import time
5
- from typing import TYPE_CHECKING, Any, ClassVar, List, Optional, Set, Tuple, cast
5
+ from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
6
6
 
7
7
  from chia_rs import G1Element
8
8
 
@@ -152,7 +152,7 @@ class DAOCATWallet:
152
152
  parent_spend = await fetch_coin_spend(height, parent_coin.coin, peer)
153
153
  uncurried = parent_spend.puzzle_reveal.uncurry()
154
154
  cat_inner = uncurried[1].at("rrf")
155
- active_votes_list: List[Optional[bytes32]] = []
155
+ active_votes_list: list[Optional[bytes32]] = []
156
156
 
157
157
  record = await self.wallet_state_manager.puzzle_store.get_derivation_record_for_puzzle_hash(coin.puzzle_hash)
158
158
  if record:
@@ -227,7 +227,7 @@ class DAOCATWallet:
227
227
  self.log.info(f"Removing parent {name} (probably had a non-CAT parent)")
228
228
  await self.lineage_store.remove_lineage_proof(name)
229
229
 
230
- async def advanced_select_coins(self, amount: uint64, proposal_id: bytes32) -> List[LockedCoinInfo]:
230
+ async def advanced_select_coins(self, amount: uint64, proposal_id: bytes32) -> list[LockedCoinInfo]:
231
231
  coins = []
232
232
  s = 0
233
233
  for coin in self.dao_cat_info.locked_coins:
@@ -258,7 +258,7 @@ class DAOCATWallet:
258
258
  is_yes_vote: bool,
259
259
  proposal_puzzle: Optional[Program] = None,
260
260
  ) -> WalletSpendBundle:
261
- coins: List[LockedCoinInfo] = await self.advanced_select_coins(amount, proposal_id)
261
+ coins: list[LockedCoinInfo] = await self.advanced_select_coins(amount, proposal_id)
262
262
  running_sum = 0 # this will be used for change calculation
263
263
  change = sum(c.coin.amount for c in coins) - amount
264
264
  extra_delta, limitations_solution = 0, Program.to([])
@@ -288,7 +288,7 @@ class DAOCATWallet:
288
288
  lockup_innerpuz_list = []
289
289
  if running_sum + coin.amount <= amount:
290
290
  vote_amount = coin.amount
291
- running_sum = running_sum + coin.amount
291
+ running_sum += coin.amount
292
292
  primaries = [
293
293
  Payment(
294
294
  new_innerpuzzle.get_tree_hash(),
@@ -303,7 +303,7 @@ class DAOCATWallet:
303
303
  )
304
304
  else:
305
305
  vote_amount = uint64(amount - running_sum)
306
- running_sum = running_sum + coin.amount
306
+ running_sum += coin.amount
307
307
  primaries = [
308
308
  Payment(
309
309
  new_innerpuzzle.get_tree_hash(),
@@ -365,8 +365,8 @@ class DAOCATWallet:
365
365
  amount: uint64,
366
366
  action_scope: WalletActionScope,
367
367
  fee: uint64 = uint64(0),
368
- extra_conditions: Tuple[Condition, ...] = tuple(),
369
- ) -> List[TransactionRecord]:
368
+ extra_conditions: tuple[Condition, ...] = tuple(),
369
+ ) -> list[TransactionRecord]:
370
370
  """
371
371
  Enter existing CATs for the DAO into voting mode
372
372
  """
@@ -378,7 +378,7 @@ class DAOCATWallet:
378
378
  # get the lockup puzzle hash
379
379
  lockup_puzzle = await self.get_new_puzzle()
380
380
  # create the cat spend
381
- txs: List[TransactionRecord] = await cat_wallet.generate_signed_transaction(
381
+ txs: list[TransactionRecord] = await cat_wallet.generate_signed_transaction(
382
382
  [amount],
383
383
  [lockup_puzzle.get_tree_hash()],
384
384
  action_scope,
@@ -393,10 +393,10 @@ class DAOCATWallet:
393
393
 
394
394
  async def exit_vote_state(
395
395
  self,
396
- coins: List[LockedCoinInfo],
396
+ coins: list[LockedCoinInfo],
397
397
  action_scope: WalletActionScope,
398
398
  fee: uint64 = uint64(0),
399
- extra_conditions: Tuple[Condition, ...] = tuple(),
399
+ extra_conditions: tuple[Condition, ...] = tuple(),
400
400
  ) -> None:
401
401
  extra_delta, limitations_solution = 0, Program.to([])
402
402
  limitations_program_reveal = Program.to([])
@@ -495,11 +495,11 @@ class DAOCATWallet:
495
495
 
496
496
  async def remove_active_proposal(
497
497
  self,
498
- proposal_id_list: List[bytes32],
498
+ proposal_id_list: list[bytes32],
499
499
  action_scope: WalletActionScope,
500
500
  fee: uint64 = uint64(0),
501
501
  ) -> WalletSpendBundle:
502
- locked_coins: List[Tuple[LockedCoinInfo, List[bytes32]]] = []
502
+ locked_coins: list[tuple[LockedCoinInfo, list[bytes32]]] = []
503
503
  for lci in self.dao_cat_info.locked_coins:
504
504
  my_finished_proposals = []
505
505
  for active_vote in lci.active_votes:
@@ -609,16 +609,16 @@ class DAOCATWallet:
609
609
  async def match_hinted_coin(self, coin: Coin, hint: bytes32) -> bool:
610
610
  raise NotImplementedError("Method not implemented for DAO CAT Wallet") # pragma: no cover
611
611
 
612
- async def get_spendable_balance(self, records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
612
+ async def get_spendable_balance(self, records: Optional[set[WalletCoinRecord]] = None) -> uint128:
613
613
  return uint128(0)
614
614
 
615
- async def get_confirmed_balance(self, record_list: Optional[Set[WalletCoinRecord]] = None) -> uint128:
615
+ async def get_confirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
616
616
  amount = 0
617
617
  for coin in self.dao_cat_info.locked_coins:
618
618
  amount += coin.coin.amount
619
619
  return uint128(amount)
620
620
 
621
- async def get_unconfirmed_balance(self, unspent_records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
621
+ async def get_unconfirmed_balance(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128:
622
622
  return uint128(0)
623
623
 
624
624
  async def get_pending_change_balance(self) -> uint64:
@@ -628,10 +628,10 @@ class DAOCATWallet:
628
628
  self,
629
629
  amount: uint64,
630
630
  action_scope: WalletActionScope,
631
- ) -> Set[Coin]:
631
+ ) -> set[Coin]:
632
632
  return set()
633
633
 
634
- async def get_max_send_amount(self, unspent_records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
634
+ async def get_max_send_amount(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128:
635
635
  return uint128(0)
636
636
 
637
637
  async def get_votable_balance(
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import Dict, Optional
4
+ from typing import Optional
5
5
 
6
6
  from chia.types.blockchain_format.sized_bytes import bytes32
7
7
  from chia.util.db_wrapper import DBWrapper2
@@ -60,7 +60,7 @@ class CATLineageStore:
60
60
 
61
61
  return None
62
62
 
63
- async def get_all_lineage_proofs(self) -> Dict[bytes32, LineageProof]:
63
+ async def get_all_lineage_proofs(self) -> dict[bytes32, LineageProof]:
64
64
  async with self.db_wrapper.reader_no_transaction() as conn:
65
65
  cursor = await conn.execute(f"SELECT * FROM {self.table_name}")
66
66
  rows = await cursor.fetchall()
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  import random
5
- from typing import Dict, List, Optional, Set
5
+ from typing import Optional
6
6
 
7
7
  from chia.types.blockchain_format.coin import Coin
8
8
  from chia.types.blockchain_format.sized_bytes import bytes32
@@ -14,11 +14,11 @@ from chia.wallet.wallet_coin_record import WalletCoinRecord
14
14
  async def select_coins(
15
15
  spendable_amount: uint128,
16
16
  coin_selection_config: CoinSelectionConfig,
17
- spendable_coins: List[WalletCoinRecord],
18
- unconfirmed_removals: Dict[bytes32, Coin],
17
+ spendable_coins: list[WalletCoinRecord],
18
+ unconfirmed_removals: dict[bytes32, Coin],
19
19
  log: logging.Logger,
20
20
  amount: uint128,
21
- ) -> Set[Coin]:
21
+ ) -> set[Coin]:
22
22
  """
23
23
  Returns a set of coins that can be used for generating a new transaction.
24
24
  """
@@ -33,7 +33,7 @@ async def select_coins(
33
33
 
34
34
  max_num_coins = 500
35
35
  sum_spendable_coins = 0
36
- valid_spendable_coins: List[Coin] = []
36
+ valid_spendable_coins: list[Coin] = []
37
37
 
38
38
  for coin_record in spendable_coins: # remove all the unconfirmed coins, excluded coins and dust.
39
39
  coin_name: bytes32 = coin_record.coin.name()
@@ -76,7 +76,7 @@ async def select_coins(
76
76
  # Check for an exact match with all of the coins smaller than the amount.
77
77
  # If we have more, smaller coins than the amount we run the next algorithm.
78
78
  smaller_coin_sum = 0 # coins smaller than target.
79
- smaller_coins: List[Coin] = []
79
+ smaller_coins: list[Coin] = []
80
80
  for coin in valid_spendable_coins:
81
81
  if coin.amount < amount:
82
82
  smaller_coin_sum += coin.amount
@@ -90,7 +90,7 @@ async def select_coins(
90
90
  log.debug(f"Selected closest greater coin: {smallest_coin.name()}")
91
91
  return {smallest_coin}
92
92
  elif smaller_coin_sum > amount:
93
- coin_set: Optional[Set[Coin]] = knapsack_coin_algorithm(
93
+ coin_set: Optional[set[Coin]] = knapsack_coin_algorithm(
94
94
  smaller_coins, amount, coin_selection_config.max_coin_amount, max_num_coins
95
95
  )
96
96
  log.debug(f"Selected coins from knapsack algorithm: {coin_set}")
@@ -119,7 +119,7 @@ async def select_coins(
119
119
 
120
120
 
121
121
  # we use this to check if one of the coins exactly matches the target.
122
- def check_for_exact_match(coin_list: List[Coin], target: uint64) -> Optional[Coin]:
122
+ def check_for_exact_match(coin_list: list[Coin], target: uint64) -> Optional[Coin]:
123
123
  for coin in coin_list:
124
124
  if coin.amount == target:
125
125
  return coin
@@ -128,7 +128,7 @@ def check_for_exact_match(coin_list: List[Coin], target: uint64) -> Optional[Coi
128
128
 
129
129
  # amount of coins smaller than target, followed by a list of all valid spendable coins.
130
130
  # Coins must be sorted in descending amount order.
131
- def select_smallest_coin_over_target(target: uint128, sorted_coin_list: List[Coin]) -> Optional[Coin]:
131
+ def select_smallest_coin_over_target(target: uint128, sorted_coin_list: list[Coin]) -> Optional[Coin]:
132
132
  if sorted_coin_list[0].amount < target:
133
133
  return None
134
134
  for coin in reversed(sorted_coin_list):
@@ -140,15 +140,15 @@ def select_smallest_coin_over_target(target: uint128, sorted_coin_list: List[Coi
140
140
  # we use this to find the set of coins which have total value closest to the target, but at least the target.
141
141
  # IMPORTANT: The coins have to be sorted in descending order or else this function will not work.
142
142
  def knapsack_coin_algorithm(
143
- smaller_coins: List[Coin], target: uint128, max_coin_amount: int, max_num_coins: int, seed: bytes = b"knapsack seed"
144
- ) -> Optional[Set[Coin]]:
143
+ smaller_coins: list[Coin], target: uint128, max_coin_amount: int, max_num_coins: int, seed: bytes = b"knapsack seed"
144
+ ) -> Optional[set[Coin]]:
145
145
  best_set_sum = max_coin_amount
146
- best_set_of_coins: Optional[Set[Coin]] = None
146
+ best_set_of_coins: Optional[set[Coin]] = None
147
147
  ran: random.Random = random.Random()
148
148
  ran.seed(seed)
149
149
  for i in range(1000):
150
150
  # reset these variables every loop.
151
- selected_coins: Set[Coin] = set()
151
+ selected_coins: set[Coin] = set()
152
152
  selected_coins_sum = 0
153
153
  n_pass = 0
154
154
  target_reached = False
@@ -177,9 +177,9 @@ def knapsack_coin_algorithm(
177
177
 
178
178
  # Adds up the largest coins in the list, resulting in the minimum number of selected coins. A solution
179
179
  # is guaranteed if and only if the sum(coins) >= target. Coins must be sorted in descending amount order.
180
- def sum_largest_coins(target: uint128, sorted_coins: List[Coin]) -> Optional[Set[Coin]]:
180
+ def sum_largest_coins(target: uint128, sorted_coins: list[Coin]) -> Optional[set[Coin]]:
181
181
  total_value = 0
182
- selected_coins: Set[Coin] = set()
182
+ selected_coins: set[Coin] = set()
183
183
  for coin in sorted_coins:
184
184
  total_value += coin.amount
185
185
  selected_coins.add(coin)