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,8 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
+ from collections.abc import Iterator
4
5
  from itertools import chain
5
- from typing import Any, Iterator, List, Optional, Tuple, Union
6
+ from typing import Any, Optional, Union
6
7
 
7
8
  from clvm.EvalError import EvalError
8
9
 
@@ -217,7 +218,7 @@ def get_p2_singleton_puzhash(treasury_id: bytes32, asset_id: Optional[bytes32] =
217
218
 
218
219
  def get_lockup_puzzle(
219
220
  cat_tail_hash: Union[bytes32, Program],
220
- previous_votes_list: Union[List[Optional[bytes32]], Program],
221
+ previous_votes_list: Union[list[Optional[bytes32]], Program],
221
222
  innerpuz: Optional[Program],
222
223
  ) -> Program:
223
224
  self_hash: Program = DAO_LOCKUP_MOD.curry(
@@ -240,13 +241,13 @@ def add_proposal_to_active_list(
240
241
  ) -> Program:
241
242
  curried_args, c_a = uncurry_lockup(lockup_puzzle)
242
243
  (
243
- SINGLETON_MOD_HASH,
244
- SINGLETON_LAUNCHER_PUZHASH,
245
- DAO_FINISHED_STATE_HASH,
246
- CAT_MOD_HASH,
244
+ _SINGLETON_MOD_HASH,
245
+ _SINGLETON_LAUNCHER_PUZHASH,
246
+ _DAO_FINISHED_STATE_HASH,
247
+ _CAT_MOD_HASH,
247
248
  CAT_TAIL_HASH,
248
249
  ) = c_a.as_iter()
249
- (SELF_HASH, ACTIVE_VOTES, INNERPUZ) = curried_args.as_iter()
250
+ (_SELF_HASH, ACTIVE_VOTES, INNERPUZ) = curried_args.as_iter()
250
251
  new_active_votes = Program.to(proposal_id).cons(ACTIVE_VOTES) # (c proposal_id ACTIVE_VOTES)
251
252
  if inner_puzzle is None:
252
253
  inner_puzzle = INNERPUZ
@@ -263,7 +264,7 @@ def get_active_votes_from_lockup_puzzle(lockup_puzzle: Program) -> Program:
263
264
  _CAT_TAIL_HASH,
264
265
  ) = list(c_a.as_iter())
265
266
  (
266
- self_hash,
267
+ _self_hash,
267
268
  ACTIVE_VOTES,
268
269
  _INNERPUZ,
269
270
  ) = curried_args.as_iter()
@@ -284,7 +285,7 @@ def get_innerpuz_from_lockup_puzzle(lockup_puzzle: Program) -> Optional[Program]
284
285
  _CAT_TAIL_HASH,
285
286
  ) = list(c_a.as_iter())
286
287
  (
287
- self_hash,
288
+ _self_hash,
288
289
  _ACTIVE_VOTES,
289
290
  INNERPUZ,
290
291
  ) = list(curried_args.as_iter())
@@ -394,10 +395,10 @@ def get_treasury_rules_from_puzzle(puzzle_reveal: Optional[Program]) -> DAORules
394
395
  ) = curried_args
395
396
  curried_args_prg = uncurry_proposal_validator(proposal_validator)
396
397
  (
397
- SINGLETON_STRUCT,
398
- PROPOSAL_SELF_HASH,
398
+ _SINGLETON_STRUCT,
399
+ _PROPOSAL_SELF_HASH,
399
400
  PROPOSAL_MINIMUM_AMOUNT,
400
- PAYOUT_PUZHASH,
401
+ _PAYOUT_PUZHASH,
401
402
  ) = curried_args_prg.as_iter()
402
403
  return DAORules(
403
404
  uint64(proposal_timelock.as_int()),
@@ -419,7 +420,7 @@ def get_new_puzzle_from_treasury_solution(puzzle_reveal: Program, solution: Prog
419
420
  if mod == DAO_UPDATE_PROPOSAL_MOD:
420
421
  (
421
422
  DAO_TREASURY_MOD_HASH,
422
- DAO_VALIDATOR_MOD_HASH,
423
+ _DAO_VALIDATOR_MOD_HASH,
423
424
  TREASURY_SINGLETON_STRUCT,
424
425
  PROPOSAL_SELF_HASH,
425
426
  proposal_minimum_amount,
@@ -462,19 +463,19 @@ def get_new_puzzle_from_proposal_solution(puzzle_reveal: Program, solution: Prog
462
463
  c_a, curried_args = uncurry_proposal(puzzle_reveal)
463
464
  assert isinstance(curried_args, Program)
464
465
  (
465
- DAO_PROPOSAL_TIMER_MOD_HASH,
466
- SINGLETON_MOD_HASH,
467
- SINGLETON_LAUNCHER_PUZHASH,
468
- CAT_MOD_HASH,
469
- DAO_FINISHED_STATE_HASH,
470
- DAO_TREASURY_MOD_HASH,
471
- lockup_self_hash,
466
+ _DAO_PROPOSAL_TIMER_MOD_HASH,
467
+ _SINGLETON_MOD_HASH,
468
+ _SINGLETON_LAUNCHER_PUZHASH,
469
+ _CAT_MOD_HASH,
470
+ _DAO_FINISHED_STATE_HASH,
471
+ _DAO_TREASURY_MOD_HASH,
472
+ _lockup_self_hash,
472
473
  cat_tail_hash,
473
474
  treasury_id,
474
475
  ) = curried_args.as_iter()
475
476
  assert isinstance(c_a, Program)
476
477
  (
477
- curry_one,
478
+ _curry_one,
478
479
  proposal_id,
479
480
  proposed_puzzle_hash,
480
481
  yes_votes,
@@ -508,25 +509,25 @@ def get_new_puzzle_from_proposal_solution(puzzle_reveal: Program, solution: Prog
508
509
  if mod.uncurry()[0] == DAO_PROPOSAL_MOD:
509
510
  c_a, curried_args = uncurry_proposal(puzzle_reveal)
510
511
  (
511
- DAO_PROPOSAL_TIMER_MOD_HASH,
512
- SINGLETON_MOD_HASH,
513
- SINGLETON_LAUNCHER_PUZHASH,
514
- CAT_MOD_HASH,
515
- DAO_FINISHED_STATE_HASH,
516
- DAO_TREASURY_MOD_HASH,
517
- lockup_self_hash,
512
+ _DAO_PROPOSAL_TIMER_MOD_HASH,
513
+ _SINGLETON_MOD_HASH,
514
+ _SINGLETON_LAUNCHER_PUZHASH,
515
+ _CAT_MOD_HASH,
516
+ _DAO_FINISHED_STATE_HASH,
517
+ _DAO_TREASURY_MOD_HASH,
518
+ _lockup_self_hash,
518
519
  cat_tail_hash,
519
520
  treasury_id,
520
521
  ) = curried_args.as_iter()
521
522
  (
522
- curry_one,
523
+ _curry_one,
523
524
  proposal_id,
524
525
  proposed_puzzle_hash,
525
526
  yes_votes,
526
527
  total_votes,
527
528
  ) = c_a.as_iter()
528
529
  else: # pragma: no cover
529
- SINGLETON_STRUCT, dao_finished_hash = currieds.as_iter()
530
+ SINGLETON_STRUCT, _dao_finished_hash = currieds.as_iter()
530
531
  proposal_id = SINGLETON_STRUCT.rest().first()
531
532
  return get_finished_state_inner_puzzle(bytes32(proposal_id.as_atom()))
532
533
 
@@ -570,7 +571,7 @@ def uncurry_proposal_validator(proposal_validator_program: Program) -> Program:
570
571
  return curried_args
571
572
 
572
573
 
573
- def uncurry_treasury(treasury_puzzle: Program) -> List[Program]:
574
+ def uncurry_treasury(treasury_puzzle: Program) -> list[Program]:
574
575
  try:
575
576
  mod, curried_args = treasury_puzzle.uncurry()
576
577
  except ValueError as e: # pragma: no cover
@@ -582,7 +583,7 @@ def uncurry_treasury(treasury_puzzle: Program) -> List[Program]:
582
583
  return list(curried_args.as_iter())
583
584
 
584
585
 
585
- def uncurry_proposal(proposal_puzzle: Program) -> Tuple[Program, Program]:
586
+ def uncurry_proposal(proposal_puzzle: Program) -> tuple[Program, Program]:
586
587
  try:
587
588
  mod, curried_args = proposal_puzzle.uncurry()
588
589
  except ValueError as e: # pragma: no cover
@@ -598,7 +599,7 @@ def uncurry_proposal(proposal_puzzle: Program) -> Tuple[Program, Program]:
598
599
  return curried_args, c_a
599
600
 
600
601
 
601
- def uncurry_lockup(lockup_puzzle: Program) -> Tuple[Program, Program]:
602
+ def uncurry_lockup(lockup_puzzle: Program) -> tuple[Program, Program]:
602
603
  try:
603
604
  mod, curried_args = lockup_puzzle.uncurry()
604
605
  except ValueError as e: # pragma: no cover
@@ -615,7 +616,7 @@ def uncurry_lockup(lockup_puzzle: Program) -> Tuple[Program, Program]:
615
616
 
616
617
 
617
618
  # This is the proposed puzzle
618
- def get_proposal_args(puzzle: Program) -> Tuple[ProposalType, Program]:
619
+ def get_proposal_args(puzzle: Program) -> tuple[ProposalType, Program]:
619
620
  try:
620
621
  mod, curried_args = puzzle.uncurry()
621
622
  except ValueError as e: # pragma: no cover
@@ -697,7 +698,7 @@ def match_finished_puzzle(mod: Program, curried_args: Program) -> Optional[Itera
697
698
 
698
699
  # This is used in WSM to determine whether we have a dao funding spend
699
700
  def match_funding_puzzle(
700
- uncurried: UncurriedPuzzle, solution: Program, coin: Coin, dao_ids: List[bytes32] = []
701
+ uncurried: UncurriedPuzzle, solution: Program, coin: Coin, dao_ids: list[bytes32] = []
701
702
  ) -> Optional[bool]:
702
703
  if not dao_ids:
703
704
  return None
@@ -710,7 +711,7 @@ def match_funding_puzzle(
710
711
  inner_puz, _ = uncurried.args.at("rf").uncurry()
711
712
  if inner_puz == DAO_TREASURY_MOD:
712
713
  delegated_puz = solution.at("rrfrrf")
713
- delegated_mod, delegated_args = delegated_puz.uncurry()
714
+ _delegated_mod, delegated_args = delegated_puz.uncurry()
714
715
  if delegated_puz.uncurry()[0] == SPEND_P2_SINGLETON_MOD:
715
716
  if coin.puzzle_hash == delegated_args.at("rrrrf").as_atom(): # pragma: no cover
716
717
  return True
@@ -744,19 +745,19 @@ def match_dao_cat_puzzle(uncurried: UncurriedPuzzle) -> Optional[Iterator[Progra
744
745
 
745
746
  def generate_simple_proposal_innerpuz(
746
747
  treasury_id: bytes32,
747
- recipient_puzhashes: List[bytes32],
748
- amounts: List[uint64],
749
- asset_types: List[Optional[bytes32]] = [None],
748
+ recipient_puzhashes: list[bytes32],
749
+ amounts: list[uint64],
750
+ asset_types: list[Optional[bytes32]] = [None],
750
751
  ) -> Program:
751
752
  if len(recipient_puzhashes) != len(amounts) != len(asset_types): # pragma: no cover
752
753
  raise ValueError("Mismatch in the number of recipients, amounts, or asset types")
753
- xch_conds: List[Any] = []
754
- cat_conds: List[Any] = []
754
+ xch_conds: list[Any] = []
755
+ cat_conds: list[Any] = []
755
756
  seen_assets = set()
756
757
  for recipient_puzhash, amount, asset_type in zip(recipient_puzhashes, amounts, asset_types):
757
758
  if asset_type:
758
759
  if asset_type in seen_assets:
759
- asset_conds = [x for x in cat_conds if x[0] == asset_type][0]
760
+ asset_conds = next(x for x in cat_conds if x[0] == asset_type)
760
761
  asset_conds[1].append([51, recipient_puzhash, amount, [recipient_puzhash]])
761
762
  else:
762
763
  cat_conds.append([asset_type, [[51, recipient_puzhash, amount, [recipient_puzhash]]]])
@@ -6,7 +6,7 @@ import json
6
6
  import logging
7
7
  import re
8
8
  import time
9
- from typing import TYPE_CHECKING, Any, ClassVar, Dict, List, Optional, Set, Tuple, Union, cast
9
+ from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union, cast
10
10
 
11
11
  from chia_rs import AugSchemeMPL, G1Element, G2Element
12
12
  from clvm.casts import int_from_bytes
@@ -21,9 +21,13 @@ from chia.types.coin_spend import CoinSpend, make_spend
21
21
  from chia.types.condition_opcodes import ConditionOpcode
22
22
  from chia.util.ints import uint32, uint64, uint128
23
23
  from chia.wallet import singleton
24
- from chia.wallet.cat_wallet.cat_utils import CAT_MOD, SpendableCAT, construct_cat_puzzle
24
+ from chia.wallet.cat_wallet.cat_utils import (
25
+ CAT_MOD,
26
+ SpendableCAT,
27
+ construct_cat_puzzle,
28
+ unsigned_spend_bundle_for_spendable_cats,
29
+ )
25
30
  from chia.wallet.cat_wallet.cat_utils import get_innerpuzzle_from_puzzle as get_innerpuzzle_from_cat_puzzle
26
- from chia.wallet.cat_wallet.cat_utils import unsigned_spend_bundle_for_spendable_cats
27
31
  from chia.wallet.cat_wallet.cat_wallet import CATWallet
28
32
  from chia.wallet.cat_wallet.dao_cat_wallet import DAOCATWallet
29
33
  from chia.wallet.coin_selection import select_coins
@@ -152,7 +156,7 @@ class DAOWallet:
152
156
  raise ValueError(f"Your balance of {bal} mojos is not enough to create {amount_of_cats} CATs")
153
157
 
154
158
  self.dao_info = DAOInfo(
155
- treasury_id=bytes32([0] * 32),
159
+ treasury_id=bytes32.zeros,
156
160
  cat_wallet_id=uint32(0),
157
161
  dao_cat_wallet_id=uint32(0),
158
162
  proposals_list=[],
@@ -180,7 +184,7 @@ class DAOWallet:
180
184
  fee_for_cat=fee_for_cat,
181
185
  )
182
186
  except Exception as e_info: # pragma: no cover
183
- await wallet_state_manager.user_store.delete_wallet(self.id())
187
+ await wallet_state_manager.delete_wallet(self.id())
184
188
  self.log.exception(f"Failed to create dao wallet: {e_info}")
185
189
  raise
186
190
 
@@ -326,14 +330,14 @@ class DAOWallet:
326
330
  parent_info = ccparent
327
331
  return parent_info
328
332
 
329
- async def get_max_send_amount(self, records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
333
+ async def get_max_send_amount(self, records: Optional[set[WalletCoinRecord]] = None) -> uint128:
330
334
  return uint128(0) # pragma: no cover
331
335
 
332
- async def get_spendable_balance(self, unspent_records: Optional[Set[WalletCoinRecord]] = None) -> uint128:
336
+ async def get_spendable_balance(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128:
333
337
  # No spendable or receivable value
334
338
  return uint128(1)
335
339
 
336
- async def get_confirmed_balance(self, record_list: Optional[Set[WalletCoinRecord]] = None) -> uint128:
340
+ async def get_confirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
337
341
  # No spendable or receivable value
338
342
  return uint128(1)
339
343
 
@@ -341,7 +345,7 @@ class DAOWallet:
341
345
  self,
342
346
  amount: uint64,
343
347
  action_scope: WalletActionScope,
344
- ) -> Set[Coin]:
348
+ ) -> set[Coin]:
345
349
  """
346
350
  Returns a set of coins that can be used for generating a new transaction.
347
351
  Note: Must be called under wallet state manager lock
@@ -353,13 +357,13 @@ class DAOWallet:
353
357
  self.log.warning(f"Can't select {amount}, from spendable {spendable_amount} for wallet id {self.id()}")
354
358
  return set()
355
359
 
356
- spendable_coins: List[WalletCoinRecord] = list(
360
+ spendable_coins: list[WalletCoinRecord] = list(
357
361
  await self.wallet_state_manager.get_spendable_coins_for_wallet(self.wallet_info.id)
358
362
  )
359
363
 
360
364
  # Try to use coins from the store, if there isn't enough of "unused"
361
365
  # coins use change coins that are not confirmed yet
362
- unconfirmed_removals: Dict[bytes32, Coin] = await self.wallet_state_manager.unconfirmed_removals_for_wallet(
366
+ unconfirmed_removals: dict[bytes32, Coin] = await self.wallet_state_manager.unconfirmed_removals_for_wallet(
363
367
  self.wallet_info.id
364
368
  )
365
369
  async with action_scope.use() as interface:
@@ -379,7 +383,7 @@ class DAOWallet:
379
383
  # No spendable or receivable value
380
384
  return uint64(0)
381
385
 
382
- async def get_unconfirmed_balance(self, record_list: Optional[Set[WalletCoinRecord]] = None) -> uint128:
386
+ async def get_unconfirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
383
387
  # No spendable or receivable value
384
388
  return uint128(1)
385
389
 
@@ -392,7 +396,7 @@ class DAOWallet:
392
396
  # if asset_id == None: then we get normal XCH
393
397
  async def select_coins_for_asset_type(
394
398
  self, amount: uint64, action_scope: WalletActionScope, asset_id: Optional[bytes32] = None
395
- ) -> List[Coin]:
399
+ ) -> list[Coin]:
396
400
  puzhash = get_p2_singleton_puzhash(self.dao_info.treasury_id, asset_id=asset_id)
397
401
  records = await self.wallet_state_manager.coin_store.get_coin_records_by_puzzle_hash(puzhash)
398
402
  unspent_records = [r for r in records if not r.spent]
@@ -446,7 +450,6 @@ class DAOWallet:
446
450
  self.log.info(f"DAO funding coin added: {coin.name().hex()}:{coin}. Asset ID: {asset_id}")
447
451
  except Exception as e: # pragma: no cover
448
452
  self.log.exception(f"Error occurred during dao wallet coin addition: {e}")
449
- return
450
453
 
451
454
  def get_cat_tail_hash(self) -> bytes32:
452
455
  cat_wallet: CATWallet = self.wallet_state_manager.wallets[self.dao_info.cat_wallet_id]
@@ -467,7 +470,6 @@ class DAOWallet:
467
470
  ]
468
471
  dao_info = dataclasses.replace(self.dao_info, proposals_list=new_list)
469
472
  await self.save_info(dao_info)
470
- return
471
473
 
472
474
  async def resync_treasury_state(self) -> None:
473
475
  """
@@ -490,7 +492,7 @@ class DAOWallet:
490
492
  if len(children) == 0:
491
493
  break
492
494
 
493
- children_state_list: List[CoinState] = [child for child in children if child.coin.amount % 2 == 1]
495
+ children_state_list: list[CoinState] = [child for child in children if child.coin.amount % 2 == 1]
494
496
  # ensure children_state_list has only one odd amount coin (the treasury)
495
497
  if (len(children_state_list) == 0) or (len(children_state_list) > 1): # pragma: no cover
496
498
  raise RuntimeError("Could not retrieve child_state")
@@ -604,8 +606,6 @@ class DAOWallet:
604
606
  response: Optional[RespondBlockHeader] = await peer.call_api(FullNodeAPI.request_block_header, request)
605
607
  await wallet_node.sync_from_untrusted_close_to_peak(response.header_block, peer)
606
608
 
607
- return
608
-
609
609
  async def generate_new_dao(
610
610
  self,
611
611
  amount_of_cats_to_create: Optional[uint64],
@@ -613,7 +613,7 @@ class DAOWallet:
613
613
  cat_tail_hash: Optional[bytes32] = None,
614
614
  fee: uint64 = uint64(0),
615
615
  fee_for_cat: uint64 = uint64(0),
616
- extra_conditions: Tuple[Condition, ...] = tuple(),
616
+ extra_conditions: tuple[Condition, ...] = tuple(),
617
617
  ) -> None:
618
618
  """
619
619
  Create a new DAO treasury using the dao_rules object. This does the first spend to create the launcher
@@ -846,7 +846,7 @@ class DAOWallet:
846
846
  action_scope: WalletActionScope,
847
847
  vote_amount: Optional[uint64] = None,
848
848
  fee: uint64 = uint64(0),
849
- extra_conditions: Tuple[Condition, ...] = tuple(),
849
+ extra_conditions: tuple[Condition, ...] = tuple(),
850
850
  ) -> None:
851
851
  dao_rules = get_treasury_rules_from_puzzle(self.dao_info.current_treasury_innerpuz)
852
852
  coins = await self.standard_wallet.select_coins(
@@ -1027,7 +1027,7 @@ class DAOWallet:
1027
1027
  is_yes_vote: bool,
1028
1028
  action_scope: WalletActionScope,
1029
1029
  fee: uint64 = uint64(0),
1030
- extra_conditions: Tuple[Condition, ...] = tuple(),
1030
+ extra_conditions: tuple[Condition, ...] = tuple(),
1031
1031
  ) -> None:
1032
1032
  self.log.info(f"Trying to create a proposal close spend with ID: {proposal_id}")
1033
1033
  proposal_info = None
@@ -1145,7 +1145,7 @@ class DAOWallet:
1145
1145
  genesis_id: Optional[bytes32] = None,
1146
1146
  fee: uint64 = uint64(0),
1147
1147
  self_destruct: bool = False,
1148
- extra_conditions: Tuple[Condition, ...] = tuple(),
1148
+ extra_conditions: tuple[Condition, ...] = tuple(),
1149
1149
  ) -> None:
1150
1150
  self.log.info(f"Trying to create a proposal close spend with ID: {proposal_id}")
1151
1151
  proposal_info = None
@@ -1215,8 +1215,8 @@ class DAOWallet:
1215
1215
  )
1216
1216
  c_a, curried_args_prg = uncurry_proposal(proposal_info.current_innerpuz)
1217
1217
  (
1218
- SELF_HASH,
1219
- PROPOSAL_ID,
1218
+ _SELF_HASH,
1219
+ _PROPOSAL_ID,
1220
1220
  PROPOSED_PUZ_HASH,
1221
1221
  YES_VOTES,
1222
1222
  TOTAL_VOTES,
@@ -1257,11 +1257,11 @@ class DAOWallet:
1257
1257
  proposal_type, curried_args_prg = get_proposal_args(puzzle_reveal)
1258
1258
  if proposal_type == ProposalType.SPEND:
1259
1259
  (
1260
- TREASURY_SINGLETON_STRUCT,
1261
- CAT_MOD_HASH,
1260
+ _TREASURY_SINGLETON_STRUCT,
1261
+ _CAT_MOD_HASH,
1262
1262
  CONDITIONS,
1263
1263
  LIST_OF_TAILHASH_CONDITIONS,
1264
- P2_SINGLETON_VIA_DELEGATED_PUZZLE_PUZHASH,
1264
+ _P2_SINGLETON_VIA_DELEGATED_PUZZLE_PUZHASH,
1265
1265
  ) = curried_args_prg.as_iter()
1266
1266
 
1267
1267
  sum = 0
@@ -1421,18 +1421,18 @@ class DAOWallet:
1421
1421
 
1422
1422
  elif proposal_type == ProposalType.UPDATE:
1423
1423
  (
1424
- TREASURY_MOD_HASH,
1425
- VALIDATOR_MOD_HASH,
1426
- SINGLETON_STRUCT,
1427
- PROPOSAL_SELF_HASH,
1428
- PROPOSAL_MINIMUM_AMOUNT,
1429
- PROPOSAL_EXCESS_PAYOUT_PUZHASH,
1430
- PROPOSAL_LENGTH,
1431
- PROPOSAL_SOFTCLOSE_LENGTH,
1432
- ATTENDANCE_REQUIRED,
1433
- PASS_MARGIN,
1434
- PROPOSAL_SELF_DESTRUCT_TIME,
1435
- ORACLE_SPEND_DELAY,
1424
+ _TREASURY_MOD_HASH,
1425
+ _VALIDATOR_MOD_HASH,
1426
+ _SINGLETON_STRUCT,
1427
+ _PROPOSAL_SELF_HASH,
1428
+ _PROPOSAL_MINIMUM_AMOUNT,
1429
+ _PROPOSAL_EXCESS_PAYOUT_PUZHASH,
1430
+ _PROPOSAL_LENGTH,
1431
+ _PROPOSAL_SOFTCLOSE_LENGTH,
1432
+ _ATTENDANCE_REQUIRED,
1433
+ _PASS_MARGIN,
1434
+ _PROPOSAL_SELF_DESTRUCT_TIME,
1435
+ _ORACLE_SPEND_DELAY,
1436
1436
  ) = curried_args_prg.as_iter()
1437
1437
  coin_spends = []
1438
1438
  treasury_inner_puzhash = self.dao_info.current_treasury_innerpuz.get_tree_hash()
@@ -1473,7 +1473,6 @@ class DAOWallet:
1473
1473
  spend_bundle = WalletSpendBundle([proposal_cs, treasury_cs], AugSchemeMPL.aggregate([]))
1474
1474
  else:
1475
1475
  # TODO: maybe we can refactor this to provide clarity around timer_cs having been defined
1476
- # pylint: disable-next=E0606
1477
1476
  spend_bundle = WalletSpendBundle([proposal_cs, timer_cs, treasury_cs], AugSchemeMPL.aggregate([]))
1478
1477
  if fee > 0:
1479
1478
  await self.standard_wallet.create_tandem_xch_tx(fee, action_scope)
@@ -1536,7 +1535,7 @@ class DAOWallet:
1536
1535
  amount: uint64,
1537
1536
  action_scope: WalletActionScope,
1538
1537
  fee: uint64 = uint64(0),
1539
- extra_conditions: Tuple[Condition, ...] = tuple(),
1538
+ extra_conditions: tuple[Condition, ...] = tuple(),
1540
1539
  ) -> None:
1541
1540
  if funding_wallet.type() == WalletType.STANDARD_WALLET.value:
1542
1541
  p2_singleton_puzhash = get_p2_singleton_puzhash(self.dao_info.treasury_id, asset_id=None)
@@ -1569,7 +1568,7 @@ class DAOWallet:
1569
1568
  action_scope: WalletActionScope,
1570
1569
  fee: uint64 = uint64(0),
1571
1570
  funding_wallet_id: uint32 = uint32(1),
1572
- extra_conditions: Tuple[Condition, ...] = tuple(),
1571
+ extra_conditions: tuple[Condition, ...] = tuple(),
1573
1572
  ) -> None:
1574
1573
  # set up the p2_singleton
1575
1574
  funding_wallet = self.wallet_state_manager.wallets[funding_wallet_id]
@@ -1594,7 +1593,7 @@ class DAOWallet:
1594
1593
  self,
1595
1594
  action_scope: WalletActionScope,
1596
1595
  fee: uint64 = uint64(0),
1597
- extra_conditions: Tuple[Condition, ...] = tuple(),
1596
+ extra_conditions: tuple[Condition, ...] = tuple(),
1598
1597
  ) -> None:
1599
1598
  dao_cat_wallet: DAOCATWallet = self.wallet_state_manager.wallets[self.dao_info.dao_cat_wallet_id]
1600
1599
  spends = []
@@ -1648,7 +1647,7 @@ class DAOWallet:
1648
1647
  async with action_scope.use() as interface:
1649
1648
  interface.side_effects.transactions.append(record)
1650
1649
 
1651
- async def parse_proposal(self, proposal_id: bytes32) -> Dict[str, Any]:
1650
+ async def parse_proposal(self, proposal_id: bytes32) -> dict[str, Any]:
1652
1651
  for prop_info in self.dao_info.proposals_list:
1653
1652
  if prop_info.proposal_id == proposal_id:
1654
1653
  state = await self.get_proposal_state(proposal_id)
@@ -1657,11 +1656,11 @@ class DAOWallet:
1657
1656
  if proposal_type == ProposalType.SPEND:
1658
1657
  cat_launcher = create_cat_launcher_for_singleton_id(self.dao_info.treasury_id)
1659
1658
  (
1660
- TREASURY_SINGLETON_STRUCT,
1661
- CAT_MOD_HASH,
1659
+ _TREASURY_SINGLETON_STRUCT,
1660
+ _CAT_MOD_HASH,
1662
1661
  CONDITIONS,
1663
1662
  LIST_OF_TAILHASH_CONDITIONS,
1664
- P2_SINGLETON_VIA_DELEGATED_PUZZLE_PUZHASH,
1663
+ _P2_SINGLETON_VIA_DELEGATED_PUZZLE_PUZHASH,
1665
1664
  ) = curried_args.as_iter()
1666
1665
  mint_amount = None
1667
1666
  new_cat_puzhash = None
@@ -1675,10 +1674,10 @@ class DAOWallet:
1675
1674
  cc = {"puzzle_hash": cond.at("rf").as_atom(), "amount": cond.at("rrf").as_int()}
1676
1675
  xch_created_coins.append(cc)
1677
1676
 
1678
- asset_create_coins: List[Dict[Any, Any]] = []
1677
+ asset_create_coins: list[dict[Any, Any]] = []
1679
1678
  for asset in LIST_OF_TAILHASH_CONDITIONS.as_iter():
1680
1679
  if asset == Program.to(0): # pragma: no cover
1681
- asset_dict: Optional[Dict[str, Any]] = None
1680
+ asset_dict: Optional[dict[str, Any]] = None
1682
1681
  else:
1683
1682
  asset_id = asset.first().as_atom()
1684
1683
  cc_list = []
@@ -1691,7 +1690,7 @@ class DAOWallet:
1691
1690
  # cc_list.append([asset_id, asset_dict])
1692
1691
  cc_list.append(asset_dict)
1693
1692
  asset_create_coins.append({"asset_id": asset_id, "conditions": cc_list})
1694
- dictionary: Dict[str, Any] = {
1693
+ dictionary: dict[str, Any] = {
1695
1694
  "state": state,
1696
1695
  "proposal_type": proposal_type.value,
1697
1696
  "proposed_puzzle_reveal": proposed_puzzle_reveal,
@@ -1761,7 +1760,7 @@ class DAOWallet:
1761
1760
  self,
1762
1761
  amount: uint64,
1763
1762
  action_scope: WalletActionScope,
1764
- ) -> List[TransactionRecord]:
1763
+ ) -> list[TransactionRecord]:
1765
1764
  dao_cat_wallet: DAOCATWallet = self.wallet_state_manager.wallets[self.dao_info.dao_cat_wallet_id]
1766
1765
  return await dao_cat_wallet.enter_dao_cat_voting_mode(amount, action_scope)
1767
1766
 
@@ -1823,7 +1822,7 @@ class DAOWallet:
1823
1822
  )
1824
1823
  await self.add_parent(new_state.coin.name(), future_parent)
1825
1824
  return
1826
- index = index + 1
1825
+ index += 1
1827
1826
 
1828
1827
  # check if we are the finished state
1829
1828
  if current_innerpuz == get_finished_state_inner_puzzle(singleton_id):
@@ -1831,26 +1830,26 @@ class DAOWallet:
1831
1830
 
1832
1831
  c_a, curried_args = uncurry_proposal(puzzle)
1833
1832
  (
1834
- DAO_PROPOSAL_TIMER_MOD_HASH,
1835
- SINGLETON_MOD_HASH,
1836
- SINGLETON_LAUNCHER_PUZHASH,
1837
- CAT_MOD_HASH,
1838
- DAO_FINISHED_STATE_HASH,
1833
+ _DAO_PROPOSAL_TIMER_MOD_HASH,
1834
+ _SINGLETON_MOD_HASH,
1835
+ _SINGLETON_LAUNCHER_PUZHASH,
1836
+ _CAT_MOD_HASH,
1837
+ _DAO_FINISHED_STATE_HASH,
1839
1838
  _DAO_TREASURY_MOD_HASH,
1840
- lockup_self_hash,
1839
+ _lockup_self_hash,
1841
1840
  cat_tail_hash,
1842
- treasury_id,
1841
+ _treasury_id,
1843
1842
  ) = curried_args.as_iter()
1844
1843
  (
1845
- curry_one,
1846
- proposal_id,
1847
- proposed_puzzle_hash,
1844
+ _curry_one,
1845
+ _proposal_id,
1846
+ _proposed_puzzle_hash,
1848
1847
  yes_votes,
1849
1848
  total_votes,
1850
1849
  ) = c_a.as_iter()
1851
1850
 
1852
1851
  if current_coin is None: # pragma: no cover
1853
- raise RuntimeError("get_most_recent_singleton_coin_from_coin_spend({new_state}) failed")
1852
+ raise RuntimeError(f"get_most_recent_singleton_coin_from_coin_spend({new_state}) failed")
1854
1853
 
1855
1854
  timer_coin = None
1856
1855
  if solution.at("rrrrrrf").as_int() == 0:
@@ -1907,7 +1906,7 @@ class DAOWallet:
1907
1906
  )
1908
1907
  await self.add_parent(new_state.coin.name(), future_parent)
1909
1908
  return
1910
- index = index + 1
1909
+ index += 1
1911
1910
 
1912
1911
  # Search for the timer coin
1913
1912
  if not ended:
@@ -2002,9 +2001,9 @@ class DAOWallet:
2002
2001
  )
2003
2002
  await self.add_parent(new_state.coin.name(), future_parent)
2004
2003
  return
2005
- index = index + 1
2004
+ index += 1
2006
2005
 
2007
- async def get_proposal_state(self, proposal_id: bytes32) -> Dict[str, Union[int, bool]]:
2006
+ async def get_proposal_state(self, proposal_id: bytes32) -> dict[str, Union[int, bool]]:
2008
2007
  """
2009
2008
  Use this to figure out whether a proposal has passed or failed and whether it can be closed
2010
2009
  Given a proposal_id:
@@ -2084,7 +2083,6 @@ class DAOWallet:
2084
2083
  uint64(new_state.coin.amount),
2085
2084
  )
2086
2085
  await self.add_parent(new_state.coin.name(), future_parent)
2087
- return
2088
2086
 
2089
2087
  async def apply_state_transition(self, new_state: CoinSpend, block_height: uint32) -> bool:
2090
2088
  """
@@ -2105,7 +2103,7 @@ class DAOWallet:
2105
2103
  puzzle = get_inner_puzzle_from_singleton(new_state.puzzle_reveal)
2106
2104
  assert puzzle
2107
2105
  try:
2108
- mod, curried_args = puzzle.uncurry()
2106
+ mod, _curried_args = puzzle.uncurry()
2109
2107
  except ValueError as e: # pragma: no cover
2110
2108
  self.log.warning("Cannot uncurry puzzle in DAO Wallet: error: %s", e)
2111
2109
  raise e
@@ -1,8 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Iterator, List, Tuple, Union
3
+ from collections.abc import Iterator
4
+ from typing import Union
4
5
 
5
- from chia.types.blockchain_format.program import Program
6
+ from chia.types.blockchain_format.program import INFINITE_COST, Program
6
7
  from chia.types.blockchain_format.serialized_program import SerializedProgram
7
8
  from chia.types.blockchain_format.sized_bytes import bytes32
8
9
  from chia.types.condition_opcodes import ConditionOpcode
@@ -40,7 +41,7 @@ def create_host_layer_puzzle(innerpuz: Union[Program, bytes32], current_root: by
40
41
  )
41
42
 
42
43
 
43
- def match_dl_singleton(puzzle: Union[Program, SerializedProgram]) -> Tuple[bool, Iterator[Program]]:
44
+ def match_dl_singleton(puzzle: Union[Program, SerializedProgram]) -> tuple[bool, Iterator[Program]]:
44
45
  """
45
46
  Given a puzzle test if it's a CAT and, if it is, return the curried arguments
46
47
  """
@@ -56,7 +57,7 @@ def match_dl_singleton(puzzle: Union[Program, SerializedProgram]) -> Tuple[bool,
56
57
  return False, iter(())
57
58
 
58
59
 
59
- def launch_solution_to_singleton_info(launch_solution: Program) -> Tuple[bytes32, uint64, bytes32, bytes32]:
60
+ def launch_solution_to_singleton_info(launch_solution: Program) -> tuple[bytes32, uint64, bytes32, bytes32]:
60
61
  solution = launch_solution.as_python()
61
62
  try:
62
63
  full_puzzle_hash = bytes32(solution[0])
@@ -77,7 +78,7 @@ def launcher_to_struct(launcher_id: bytes32) -> Program:
77
78
 
78
79
 
79
80
  def create_graftroot_offer_puz(
80
- launcher_ids: List[bytes32], values_to_prove: List[List[bytes32]], inner_puzzle: Program
81
+ launcher_ids: list[bytes32], values_to_prove: list[list[bytes32]], inner_puzzle: Program
81
82
  ) -> Program:
82
83
  return GRAFTROOT_DL_OFFERS.curry(
83
84
  inner_puzzle,
@@ -94,14 +95,17 @@ def create_mirror_puzzle() -> Program:
94
95
  MIRROR_PUZZLE_HASH = create_mirror_puzzle().get_tree_hash()
95
96
 
96
97
 
97
- def get_mirror_info(parent_puzzle: Program, parent_solution: Program) -> Tuple[bytes32, List[bytes]]:
98
- conditions = parent_puzzle.run(parent_solution)
98
+ def get_mirror_info(
99
+ parent_puzzle: Union[Program, SerializedProgram], parent_solution: Union[Program, SerializedProgram]
100
+ ) -> tuple[bytes32, list[bytes]]:
101
+ assert type(parent_puzzle) is type(parent_solution)
102
+ _, conditions = parent_puzzle.run_with_cost(INFINITE_COST, parent_solution)
99
103
  for condition in conditions.as_iter():
100
104
  if (
101
105
  condition.first().as_python() == ConditionOpcode.CREATE_COIN
102
106
  and condition.at("rf").as_python() == create_mirror_puzzle().get_tree_hash()
103
107
  ):
104
- memos: List[bytes] = condition.at("rrrf").as_python()
108
+ memos: list[bytes] = condition.at("rrrf").as_python()
105
109
  launcher_id = bytes32(memos[0])
106
110
  return launcher_id, [url for url in memos[1:]]
107
111
  raise ValueError("The provided puzzle and solution do not create a mirror coin")