chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__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.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.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.0rc1.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass, field
4
- from typing import Any, BinaryIO, Dict, List, Optional, Set, Tuple, Union
4
+ from typing import Any, BinaryIO, Optional, Union
5
5
 
6
6
  from chia_rs import G2Element
7
7
  from clvm_tools.binutils import disassemble
@@ -45,12 +45,11 @@ from chia.wallet.wallet_spend_bundle import WalletSpendBundle
45
45
 
46
46
  OFFER_MOD = load_clvm_maybe_recompile("settlement_payments.clsp")
47
47
  OFFER_MOD_HASH = OFFER_MOD.get_tree_hash()
48
- ZERO_32 = bytes32([0] * 32)
49
48
 
50
49
 
51
50
  def detect_dependent_coin(
52
- names: List[bytes32], deps: Dict[bytes32, List[bytes32]], announcement_dict: Dict[bytes32, List[bytes32]]
53
- ) -> Optional[Tuple[bytes32, bytes32]]:
51
+ names: list[bytes32], deps: dict[bytes32, list[bytes32]], announcement_dict: dict[bytes32, list[bytes32]]
52
+ ) -> Optional[tuple[bytes32, bytes32]]:
54
53
  # First, we check for any dependencies on coins in the same bundle
55
54
  for name in names:
56
55
  for dependency in deps[name]:
@@ -63,7 +62,7 @@ def detect_dependent_coin(
63
62
 
64
63
  @dataclass(frozen=True)
65
64
  class NotarizedPayment(Payment):
66
- nonce: bytes32 = ZERO_32
65
+ nonce: bytes32 = bytes32.zeros
67
66
 
68
67
  @classmethod
69
68
  def from_condition_and_nonce(cls, condition: Program, nonce: bytes32) -> NotarizedPayment:
@@ -75,19 +74,19 @@ class NotarizedPayment(Payment):
75
74
 
76
75
  @dataclass(frozen=True, eq=False)
77
76
  class Offer:
78
- requested_payments: Dict[
79
- Optional[bytes32], List[NotarizedPayment]
77
+ requested_payments: dict[
78
+ Optional[bytes32], list[NotarizedPayment]
80
79
  ] # The key is the asset id of the asset being requested
81
80
  _bundle: WalletSpendBundle
82
- driver_dict: Dict[bytes32, PuzzleInfo] # asset_id -> asset driver
81
+ driver_dict: dict[bytes32, PuzzleInfo] # asset_id -> asset driver
83
82
 
84
83
  # this is a cache of the coin additions made by the SpendBundle (_bundle)
85
84
  # ordered by the coin being spent
86
- _additions: Dict[Coin, List[Coin]] = field(init=False, repr=False)
87
- _hints: Dict[bytes32, bytes32] = field(init=False)
88
- _offered_coins: Dict[Optional[bytes32], List[Coin]] = field(init=False, repr=False)
85
+ _additions: dict[Coin, list[Coin]] = field(init=False, repr=False)
86
+ _hints: dict[bytes32, bytes32] = field(init=False)
87
+ _offered_coins: dict[Optional[bytes32], list[Coin]] = field(init=False, repr=False)
89
88
  _final_spend_bundle: Optional[WalletSpendBundle] = field(init=False, repr=False)
90
- _conditions: Optional[Dict[Coin, List[Condition]]] = field(init=False)
89
+ _conditions: Optional[dict[Coin, list[Condition]]] = field(init=False)
91
90
 
92
91
  @staticmethod
93
92
  def ph() -> bytes32:
@@ -95,15 +94,15 @@ class Offer:
95
94
 
96
95
  @staticmethod
97
96
  def notarize_payments(
98
- requested_payments: Dict[Optional[bytes32], List[Payment]], # `None` means you are requesting XCH
99
- coins: List[Coin],
100
- ) -> Dict[Optional[bytes32], List[NotarizedPayment]]:
97
+ requested_payments: dict[Optional[bytes32], list[Payment]], # `None` means you are requesting XCH
98
+ coins: list[Coin],
99
+ ) -> dict[Optional[bytes32], list[NotarizedPayment]]:
101
100
  # This sort should be reproducible in CLVM with `>s`
102
- sorted_coins: List[Coin] = sorted(coins, key=Coin.name)
103
- sorted_coin_list: List[List[Union[bytes32, uint64]]] = [coin_as_list(c) for c in sorted_coins]
101
+ sorted_coins: list[Coin] = sorted(coins, key=Coin.name)
102
+ sorted_coin_list: list[list[Union[bytes32, uint64]]] = [coin_as_list(c) for c in sorted_coins]
104
103
  nonce: bytes32 = Program.to(sorted_coin_list).get_tree_hash()
105
104
 
106
- notarized_payments: Dict[Optional[bytes32], List[NotarizedPayment]] = {}
105
+ notarized_payments: dict[Optional[bytes32], list[NotarizedPayment]] = {}
107
106
  for asset_id, payments in requested_payments.items():
108
107
  notarized_payments[asset_id] = []
109
108
  for p in payments:
@@ -115,10 +114,10 @@ class Offer:
115
114
  # The announcements returned from this function must be asserted in whatever spend bundle is created by the wallet
116
115
  @staticmethod
117
116
  def calculate_announcements(
118
- notarized_payments: Dict[Optional[bytes32], List[NotarizedPayment]],
119
- driver_dict: Dict[bytes32, PuzzleInfo],
120
- ) -> List[AssertPuzzleAnnouncement]:
121
- announcements: List[AssertPuzzleAnnouncement] = []
117
+ notarized_payments: dict[Optional[bytes32], list[NotarizedPayment]],
118
+ driver_dict: dict[bytes32, PuzzleInfo],
119
+ ) -> list[AssertPuzzleAnnouncement]:
120
+ announcements: list[AssertPuzzleAnnouncement] = []
122
121
  for asset_id, payments in notarized_payments.items():
123
122
  if asset_id is not None:
124
123
  if asset_id not in driver_dict:
@@ -135,7 +134,7 @@ class Offer:
135
134
  def __post_init__(self) -> None:
136
135
  # Verify that there are no duplicate payments
137
136
  for payments in self.requested_payments.values():
138
- payment_programs: List[bytes32] = [p.name() for p in payments]
137
+ payment_programs: list[bytes32] = [p.name() for p in payments]
139
138
  if len(set(payment_programs)) != len(payment_programs):
140
139
  raise ValueError("Bundle has duplicate requested payments")
141
140
 
@@ -145,8 +144,8 @@ class Offer:
145
144
  raise ValueError("Offer does not have enough driver information about the requested payments")
146
145
 
147
146
  # populate the _additions cache
148
- adds: Dict[Coin, List[Coin]] = {}
149
- hints: Dict[bytes32, bytes32] = {}
147
+ adds: dict[Coin, list[Coin]] = {}
148
+ hints: dict[bytes32, bytes32] = {}
150
149
  max_cost = int(DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM)
151
150
  for cs in self._bundle.coin_spends:
152
151
  # you can't spend the same coin twice in the same SpendBundle
@@ -164,9 +163,9 @@ class Offer:
164
163
  object.__setattr__(self, "_hints", hints)
165
164
  object.__setattr__(self, "_conditions", None)
166
165
 
167
- def conditions(self) -> Dict[Coin, List[Condition]]:
166
+ def conditions(self) -> dict[Coin, list[Condition]]:
168
167
  if self._conditions is None:
169
- conditions: Dict[Coin, List[Condition]] = {}
168
+ conditions: dict[Coin, list[Condition]] = {}
170
169
  max_cost = int(DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM)
171
170
  for cs in self._bundle.coin_spends:
172
171
  try:
@@ -181,7 +180,7 @@ class Offer:
181
180
  assert self._conditions is not None, "self._conditions is None"
182
181
  return self._conditions
183
182
 
184
- def valid_times(self) -> Dict[Coin, ConditionValidTimes]:
183
+ def valid_times(self) -> dict[Coin, ConditionValidTimes]:
185
184
  return {coin: parse_timelock_info(conditions) for coin, conditions in self.conditions().items()}
186
185
 
187
186
  def absolute_valid_times_ban_relatives(self) -> ConditionValidTimes:
@@ -197,13 +196,13 @@ class Offer:
197
196
  raise ValueError("Offers with relative timelocks are not currently supported")
198
197
  return valid_times
199
198
 
200
- def hints(self) -> Dict[bytes32, bytes32]:
199
+ def hints(self) -> dict[bytes32, bytes32]:
201
200
  return self._hints
202
201
 
203
- def additions(self) -> List[Coin]:
202
+ def additions(self) -> list[Coin]:
204
203
  return [c for additions in self._additions.values() for c in additions]
205
204
 
206
- def removals(self) -> List[Coin]:
205
+ def removals(self) -> list[Coin]:
207
206
  return self._bundle.removals()
208
207
 
209
208
  def fees(self) -> int:
@@ -212,7 +211,7 @@ class Offer:
212
211
  amount_out = sum(_.amount for _ in self.additions())
213
212
  return int(amount_in - amount_out)
214
213
 
215
- def coin_spends(self) -> List[CoinSpend]:
214
+ def coin_spends(self) -> list[CoinSpend]:
216
215
  return self._bundle.coin_spends
217
216
 
218
217
  def aggregated_signature(self) -> G2Element:
@@ -220,15 +219,15 @@ class Offer:
220
219
 
221
220
  # This method does not get every coin that is being offered, only the `settlement_payment` children
222
221
  # It's also a little heuristic, but it should get most things
223
- def _get_offered_coins(self) -> Dict[Optional[bytes32], List[Coin]]:
224
- offered_coins: Dict[Optional[bytes32], List[Coin]] = {}
222
+ def _get_offered_coins(self) -> dict[Optional[bytes32], list[Coin]]:
223
+ offered_coins: dict[Optional[bytes32], list[Coin]] = {}
225
224
 
226
225
  for parent_spend in self._bundle.coin_spends:
227
- coins_for_this_spend: List[Coin] = []
226
+ coins_for_this_spend: list[Coin] = []
228
227
 
229
228
  parent_puzzle: UncurriedPuzzle = uncurry_puzzle(parent_spend.puzzle_reveal)
230
229
  parent_solution: Program = parent_spend.solution.to_program()
231
- additions: List[Coin] = self._additions[parent_spend.coin]
230
+ additions: list[Coin] = self._additions[parent_spend.coin]
232
231
 
233
232
  puzzle_driver = match_puzzle(parent_puzzle)
234
233
  if puzzle_driver is not None:
@@ -240,7 +239,7 @@ class Offer:
240
239
  # We're going to look at the conditions created by the inner puzzle
241
240
  conditions: Program = inner_puzzle.run(inner_solution)
242
241
  expected_num_matches: int = 0
243
- offered_amounts: List[int] = []
242
+ offered_amounts: list[int] = []
244
243
  for condition in conditions.as_iter():
245
244
  if condition.first() == 51 and condition.rest().first() == OFFER_MOD_HASH:
246
245
  expected_num_matches += 1
@@ -281,7 +280,7 @@ class Offer:
281
280
  offered_coins[asset_id].extend(coins_for_this_spend)
282
281
  return offered_coins
283
282
 
284
- def get_offered_coins(self) -> Dict[Optional[bytes32], List[Coin]]:
283
+ def get_offered_coins(self) -> dict[Optional[bytes32], list[Coin]]:
285
284
  try:
286
285
  if self._offered_coins is not None:
287
286
  return self._offered_coins
@@ -289,52 +288,52 @@ class Offer:
289
288
  object.__setattr__(self, "_offered_coins", self._get_offered_coins())
290
289
  return self._offered_coins
291
290
 
292
- def get_offered_amounts(self) -> Dict[Optional[bytes32], int]:
293
- offered_coins: Dict[Optional[bytes32], List[Coin]] = self.get_offered_coins()
294
- offered_amounts: Dict[Optional[bytes32], int] = {}
291
+ def get_offered_amounts(self) -> dict[Optional[bytes32], int]:
292
+ offered_coins: dict[Optional[bytes32], list[Coin]] = self.get_offered_coins()
293
+ offered_amounts: dict[Optional[bytes32], int] = {}
295
294
  for asset_id, coins in offered_coins.items():
296
295
  offered_amounts[asset_id] = uint64(sum(c.amount for c in coins))
297
296
  return offered_amounts
298
297
 
299
- def get_requested_payments(self) -> Dict[Optional[bytes32], List[NotarizedPayment]]:
298
+ def get_requested_payments(self) -> dict[Optional[bytes32], list[NotarizedPayment]]:
300
299
  return self.requested_payments
301
300
 
302
- def get_requested_amounts(self) -> Dict[Optional[bytes32], int]:
303
- requested_amounts: Dict[Optional[bytes32], int] = {}
301
+ def get_requested_amounts(self) -> dict[Optional[bytes32], int]:
302
+ requested_amounts: dict[Optional[bytes32], int] = {}
304
303
  for asset_id, coins in self.get_requested_payments().items():
305
304
  requested_amounts[asset_id] = uint64(sum(c.amount for c in coins))
306
305
  return requested_amounts
307
306
 
308
- def arbitrage(self) -> Dict[Optional[bytes32], int]:
307
+ def arbitrage(self) -> dict[Optional[bytes32], int]:
309
308
  """
310
309
  Returns a dictionary of the type of each asset and amount that is involved in the trade
311
310
  With the amount being how much their offered amount within the offer
312
311
  exceeds/falls short of their requested amount.
313
312
  """
314
- offered_amounts: Dict[Optional[bytes32], int] = self.get_offered_amounts()
315
- requested_amounts: Dict[Optional[bytes32], int] = self.get_requested_amounts()
313
+ offered_amounts: dict[Optional[bytes32], int] = self.get_offered_amounts()
314
+ requested_amounts: dict[Optional[bytes32], int] = self.get_requested_amounts()
316
315
 
317
- arbitrage_dict: Dict[Optional[bytes32], int] = {}
316
+ arbitrage_dict: dict[Optional[bytes32], int] = {}
318
317
  for asset_id in [*requested_amounts.keys(), *offered_amounts.keys()]:
319
318
  arbitrage_dict[asset_id] = offered_amounts.get(asset_id, 0) - requested_amounts.get(asset_id, 0)
320
319
 
321
320
  return arbitrage_dict
322
321
 
323
322
  # This is a method mostly for the UI that creates a JSON summary of the offer
324
- def summary(self) -> Tuple[Dict[str, int], Dict[str, int], Dict[str, Dict[str, Any]], ConditionValidTimes]:
325
- offered_amounts: Dict[Optional[bytes32], int] = self.get_offered_amounts()
326
- requested_amounts: Dict[Optional[bytes32], int] = self.get_requested_amounts()
323
+ def summary(self) -> tuple[dict[str, int], dict[str, int], dict[str, dict[str, Any]], ConditionValidTimes]:
324
+ offered_amounts: dict[Optional[bytes32], int] = self.get_offered_amounts()
325
+ requested_amounts: dict[Optional[bytes32], int] = self.get_requested_amounts()
327
326
 
328
- def keys_to_strings(dic: Dict[Optional[bytes32], Any]) -> Dict[str, Any]:
329
- new_dic: Dict[str, Any] = {}
330
- for key in dic:
327
+ def keys_to_strings(dic: dict[Optional[bytes32], Any]) -> dict[str, Any]:
328
+ new_dic: dict[str, Any] = {}
329
+ for key, val in dic.items():
331
330
  if key is None:
332
- new_dic["xch"] = dic[key]
331
+ new_dic["xch"] = val
333
332
  else:
334
- new_dic[key.hex()] = dic[key]
333
+ new_dic[key.hex()] = val
335
334
  return new_dic
336
335
 
337
- driver_dict: Dict[str, Any] = {}
336
+ driver_dict: dict[str, Any] = {}
338
337
  for key, value in self.driver_dict.items():
339
338
  driver_dict[key.hex()] = value.info
340
339
 
@@ -347,12 +346,12 @@ class Offer:
347
346
 
348
347
  # Also mostly for the UI, returns a dictionary of assets and how much of them is pended for this offer
349
348
  # This method is also imperfect for sufficiently complex spends
350
- def get_pending_amounts(self) -> Dict[str, int]:
351
- all_additions: List[Coin] = self.additions()
352
- all_removals: List[Coin] = self.removals()
353
- non_ephemeral_removals: List[Coin] = list(filter(lambda c: c not in all_additions, all_removals))
349
+ def get_pending_amounts(self) -> dict[str, int]:
350
+ all_additions: list[Coin] = self.additions()
351
+ all_removals: list[Coin] = self.removals()
352
+ non_ephemeral_removals: list[Coin] = list(filter(lambda c: c not in all_additions, all_removals))
354
353
 
355
- pending_dict: Dict[str, int] = {}
354
+ pending_dict: dict[str, int] = {}
356
355
  # First we add up the amounts of all coins that share an ancestor with the offered coins (i.e. a primary coin)
357
356
  for asset_id, coins in self.get_offered_coins().items():
358
357
  name = "xch" if asset_id is None else asset_id.hex()
@@ -372,16 +371,16 @@ class Offer:
372
371
  return pending_dict
373
372
 
374
373
  # This method returns all of the coins that are being used in the offer (without which it would be invalid)
375
- def get_involved_coins(self) -> List[Coin]:
374
+ def get_involved_coins(self) -> list[Coin]:
376
375
  additions = self.additions()
377
376
  return list(filter(lambda c: c not in additions, self.removals()))
378
377
 
379
378
  # This returns the non-ephemeral removal that is an ancestor of the specified coin
380
379
  # This should maybe move to the SpendBundle object at some point
381
380
  def get_root_removal(self, coin: Coin) -> Coin:
382
- all_removals: Set[Coin] = set(self.removals())
383
- all_removal_ids: Set[bytes32] = {c.name() for c in all_removals}
384
- non_ephemeral_removals: Set[Coin] = {
381
+ all_removals: set[Coin] = set(self.removals())
382
+ all_removal_ids: set[bytes32] = {c.name() for c in all_removals}
383
+ non_ephemeral_removals: set[Coin] = {
385
384
  c for c in all_removals if c.parent_coin_info not in {r.name() for r in all_removals}
386
385
  }
387
386
  if coin.name() not in all_removal_ids and coin.parent_coin_info not in all_removal_ids:
@@ -393,19 +392,19 @@ class Offer:
393
392
  return coin
394
393
 
395
394
  # This will only return coins that are ancestors of settlement payments
396
- def get_primary_coins(self) -> List[Coin]:
397
- primary_coins: Set[Coin] = set()
395
+ def get_primary_coins(self) -> list[Coin]:
396
+ primary_coins: set[Coin] = set()
398
397
  for _, coins in self.get_offered_coins().items():
399
398
  for coin in coins:
400
399
  primary_coins.add(self.get_root_removal(coin))
401
400
  return list(primary_coins)
402
401
 
403
402
  # This returns the minimum coins that when spent will invalidate the rest of the bundle
404
- def get_cancellation_coins(self) -> List[Coin]:
403
+ def get_cancellation_coins(self) -> list[Coin]:
405
404
  # First, we're going to gather:
406
- dependencies: Dict[bytes32, List[bytes32]] = {} # all of the hashes that each coin depends on
407
- announcements: Dict[bytes32, List[bytes32]] = {} # all of the hashes of the announcement that each coin makes
408
- coin_names: List[bytes32] = [] # The names of all the coins
405
+ dependencies: dict[bytes32, list[bytes32]] = {} # all of the hashes that each coin depends on
406
+ announcements: dict[bytes32, list[bytes32]] = {} # all of the hashes of the announcement that each coin makes
407
+ coin_names: list[bytes32] = [] # The names of all the coins
409
408
  additions = self.additions()
410
409
  for spend in [cs for cs in self._bundle.coin_spends if cs.coin not in additions]:
411
410
  name = bytes32(spend.coin.name())
@@ -430,8 +429,8 @@ class Offer:
430
429
  if removed is None:
431
430
  break
432
431
  removed_coin, provider = removed
433
- removed_announcements: List[bytes32] = announcements[removed_coin]
434
- remove_these_keys: List[bytes32] = [removed_coin]
432
+ removed_announcements: list[bytes32] = announcements[removed_coin]
433
+ remove_these_keys: list[bytes32] = [removed_coin]
435
434
  while True:
436
435
  for coin, deps in dependencies.items():
437
436
  if set(deps) & set(removed_announcements) and coin != provider:
@@ -449,14 +448,14 @@ class Offer:
449
448
  return [cs.coin for cs in self._bundle.coin_spends if cs.coin.name() in coin_names]
450
449
 
451
450
  @classmethod
452
- def aggregate(cls, offers: List[Offer]) -> Offer:
453
- total_requested_payments: Dict[Optional[bytes32], List[NotarizedPayment]] = {}
451
+ def aggregate(cls, offers: list[Offer]) -> Offer:
452
+ total_requested_payments: dict[Optional[bytes32], list[NotarizedPayment]] = {}
454
453
  total_bundle = WalletSpendBundle([], G2Element())
455
- total_driver_dict: Dict[bytes32, PuzzleInfo] = {}
454
+ total_driver_dict: dict[bytes32, PuzzleInfo] = {}
456
455
  for offer in offers:
457
456
  # First check for any overlap in inputs
458
- total_inputs: Set[Coin] = {cs.coin for cs in total_bundle.coin_spends}
459
- offer_inputs: Set[Coin] = {cs.coin for cs in offer._bundle.coin_spends}
457
+ total_inputs: set[Coin] = {cs.coin for cs in total_bundle.coin_spends}
458
+ offer_inputs: set[Coin] = {cs.coin for cs in offer._bundle.coin_spends}
460
459
  if total_inputs & offer_inputs:
461
460
  raise ValueError("The aggregated offers overlap inputs")
462
461
 
@@ -486,34 +485,34 @@ class Offer:
486
485
  if not self.is_valid():
487
486
  raise ValueError("Offer is currently incomplete")
488
487
 
489
- completion_spends: List[CoinSpend] = []
490
- all_offered_coins: Dict[Optional[bytes32], List[Coin]] = self.get_offered_coins()
491
- total_arbitrage_amount: Dict[Optional[bytes32], int] = self.arbitrage()
488
+ completion_spends: list[CoinSpend] = []
489
+ all_offered_coins: dict[Optional[bytes32], list[Coin]] = self.get_offered_coins()
490
+ total_arbitrage_amount: dict[Optional[bytes32], int] = self.arbitrage()
492
491
  for asset_id, payments in self.requested_payments.items():
493
- offered_coins: List[Coin] = all_offered_coins[asset_id]
492
+ offered_coins: list[Coin] = all_offered_coins[asset_id]
494
493
 
495
494
  # Because of CAT supply laws, we must specify a place for the leftovers to go
496
495
  arbitrage_amount: int = total_arbitrage_amount[asset_id]
497
- all_payments: List[NotarizedPayment] = payments.copy()
496
+ all_payments: list[NotarizedPayment] = payments.copy()
498
497
  if arbitrage_amount > 0:
499
498
  assert arbitrage_amount is not None
500
499
  assert arbitrage_ph is not None
501
500
  all_payments.append(NotarizedPayment(arbitrage_ph, uint64(arbitrage_amount)))
502
501
 
503
502
  # Some assets need to know about siblings so we need to collect all spends first to be able to use them
504
- coin_to_spend_dict: Dict[Coin, CoinSpend] = {}
505
- coin_to_solution_dict: Dict[Coin, Program] = {}
503
+ coin_to_spend_dict: dict[Coin, CoinSpend] = {}
504
+ coin_to_solution_dict: dict[Coin, Program] = {}
506
505
  for coin in offered_coins:
507
- parent_spend: CoinSpend = list(
506
+ parent_spend: CoinSpend = next(
508
507
  filter(lambda cs: cs.coin.name() == coin.parent_coin_info, self._bundle.coin_spends)
509
- )[0]
508
+ )
510
509
  coin_to_spend_dict[coin] = parent_spend
511
510
 
512
511
  inner_solutions = []
513
512
  if coin == offered_coins[0]:
514
- nonces: List[bytes32] = [p.nonce for p in all_payments]
513
+ nonces: list[bytes32] = [p.nonce for p in all_payments]
515
514
  for nonce in list(dict.fromkeys(nonces)): # dedup without messing with order
516
- nonce_payments: List[NotarizedPayment] = list(filter(lambda p: p.nonce == nonce, all_payments))
515
+ nonce_payments: list[NotarizedPayment] = list(filter(lambda p: p.nonce == nonce, all_payments))
517
516
  inner_solutions.append((nonce, [np.as_condition_args() for np in nonce_payments]))
518
517
  coin_to_solution_dict[coin] = Program.to(inner_solutions)
519
518
 
@@ -580,19 +579,19 @@ class Offer:
580
579
  except AttributeError:
581
580
  pass
582
581
  # Before we serialize this as a SpendBundle, we need to serialize the `requested_payments` as dummy CoinSpends
583
- additional_coin_spends: List[CoinSpend] = []
582
+ additional_coin_spends: list[CoinSpend] = []
584
583
  for asset_id, payments in self.requested_payments.items():
585
584
  puzzle_reveal: Program = construct_puzzle(self.driver_dict[asset_id], OFFER_MOD) if asset_id else OFFER_MOD
586
585
  inner_solutions = []
587
- nonces: List[bytes32] = [p.nonce for p in payments]
586
+ nonces: list[bytes32] = [p.nonce for p in payments]
588
587
  for nonce in list(dict.fromkeys(nonces)): # dedup without messing with order
589
- nonce_payments: List[NotarizedPayment] = list(filter(lambda p: p.nonce == nonce, payments))
588
+ nonce_payments: list[NotarizedPayment] = list(filter(lambda p: p.nonce == nonce, payments))
590
589
  inner_solutions.append((nonce, [np.as_condition_args() for np in nonce_payments]))
591
590
 
592
591
  additional_coin_spends.append(
593
592
  make_spend(
594
593
  Coin(
595
- ZERO_32,
594
+ bytes32.zeros,
596
595
  puzzle_reveal.get_tree_hash(),
597
596
  uint64(0),
598
597
  ),
@@ -613,9 +612,9 @@ class Offer:
613
612
  @classmethod
614
613
  def from_spend_bundle(cls, bundle: WalletSpendBundle) -> Offer:
615
614
  # Because of the `to_spend_bundle` method, we need to parse the dummy CoinSpends as `requested_payments`
616
- requested_payments: Dict[Optional[bytes32], List[NotarizedPayment]] = {}
617
- driver_dict: Dict[bytes32, PuzzleInfo] = {}
618
- leftover_coin_spends: List[CoinSpend] = []
615
+ requested_payments: dict[Optional[bytes32], list[NotarizedPayment]] = {}
616
+ driver_dict: dict[bytes32, PuzzleInfo] = {}
617
+ leftover_coin_spends: list[CoinSpend] = []
619
618
  for coin_spend in bundle.coin_spends:
620
619
  driver = match_puzzle(uncurry_puzzle(coin_spend.puzzle_reveal))
621
620
  if driver is not None:
@@ -624,8 +623,8 @@ class Offer:
624
623
  driver_dict[asset_id] = driver
625
624
  else:
626
625
  asset_id = None
627
- if coin_spend.coin.parent_coin_info == ZERO_32:
628
- notarized_payments: List[NotarizedPayment] = []
626
+ if coin_spend.coin.parent_coin_info == bytes32.zeros:
627
+ notarized_payments: list[NotarizedPayment] = []
629
628
  for payment_group in coin_spend.solution.to_program().as_iter():
630
629
  nonce = bytes32(payment_group.first().as_atom())
631
630
  payment_args_list = payment_group.rest().as_iter()
@@ -652,7 +651,7 @@ class Offer:
652
651
  def compress(self, version: Optional[int] = None) -> bytes:
653
652
  as_spend_bundle = self.to_spend_bundle()
654
653
  if version is None:
655
- mods: List[bytes] = [bytes(s.puzzle_reveal.to_program().uncurry()[0]) for s in as_spend_bundle.coin_spends]
654
+ mods: list[bytes] = [bytes(s.puzzle_reveal.to_program().uncurry()[0]) for s in as_spend_bundle.coin_spends]
656
655
  version = max(lowest_best_version(mods), 6) # Clients lower than version 6 should not be able to parse
657
656
  return compress_object_with_puzzles(bytes(as_spend_bundle), version)
658
657
 
@@ -675,7 +674,7 @@ class Offer:
675
674
 
676
675
  @classmethod
677
676
  def from_bech32(cls, offer_bech32: str) -> Offer:
678
- hrpgot, data = bech32_decode(offer_bech32, max_length=len(offer_bech32))
677
+ _hrpgot, data = bech32_decode(offer_bech32, max_length=len(offer_bech32))
679
678
  if data is None:
680
679
  raise ValueError("Invalid Offer")
681
680
  decoded = convertbits(list(data), 5, 8, False)
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  from time import perf_counter
5
- from typing import Dict, List, Optional, Set, Tuple
5
+ from typing import Optional
6
6
 
7
7
  import aiosqlite
8
8
 
@@ -23,7 +23,7 @@ async def migrate_coin_of_interest(log: logging.Logger, db: aiosqlite.Connection
23
23
  start_time = perf_counter()
24
24
  rows = await db.execute_fetchall("SELECT trade_record, trade_id from trade_records")
25
25
 
26
- inserts: List[Tuple[bytes32, bytes32]] = []
26
+ inserts: list[tuple[bytes32, bytes32]] = []
27
27
  for row in rows:
28
28
  record: TradeRecordOld = TradeRecordOld.from_bytes(row[0])
29
29
  for coin in record.coins_of_interest:
@@ -57,7 +57,7 @@ async def migrate_is_my_offer(log: logging.Logger, db_connection: aiosqlite.Conn
57
57
  rows = await cursor.fetchall()
58
58
  await cursor.close()
59
59
 
60
- updates: List[Tuple[int, str]] = []
60
+ updates: list[tuple[int, str]] = []
61
61
  for row in rows:
62
62
  record = TradeRecordOld.from_bytes(row[0])
63
63
  is_my_offer = 1 if record.is_my_offer else 0
@@ -142,7 +142,7 @@ class TradeStore:
142
142
  try:
143
143
  await conn.execute("CREATE TABLE trade_record_times(trade_id blob PRIMARY KEY, valid_times blob)")
144
144
  async with await conn.execute("SELECT trade_id from trade_records") as cursor:
145
- trade_ids: List[bytes32] = [bytes32.from_hexstr(row[0]) for row in await cursor.fetchall()]
145
+ trade_ids: list[bytes32] = [bytes32.from_hexstr(row[0]) for row in await cursor.fetchall()]
146
146
  await conn.executemany(
147
147
  "INSERT INTO trade_record_times (trade_id, valid_times) VALUES(?, ?)",
148
148
  [(id, bytes(ConditionValidTimes())) for id in trade_ids],
@@ -204,7 +204,7 @@ class TradeStore:
204
204
  )
205
205
  await cursor.close()
206
206
  cursor = await conn.execute(
207
- "INSERT OR REPLACE INTO trade_record_times " "(trade_id, valid_times) " "VALUES(?, ?)",
207
+ "INSERT OR REPLACE INTO trade_record_times (trade_id, valid_times) VALUES(?, ?)",
208
208
  (
209
209
  record.trade_id,
210
210
  bytes(record.valid_times),
@@ -214,7 +214,7 @@ class TradeStore:
214
214
  # remove all current coin ids
215
215
  await conn.execute("DELETE FROM coin_of_interest_to_trade_record WHERE trade_id=?", (record.trade_id,))
216
216
  # now recreate them all
217
- inserts: List[Tuple[bytes32, bytes32]] = []
217
+ inserts: list[tuple[bytes32, bytes32]] = []
218
218
  for coin in record.coins_of_interest:
219
219
  inserts.append((coin.name(), record.trade_id))
220
220
  await conn.executemany(
@@ -294,7 +294,7 @@ class TradeStore:
294
294
  await self.add_trade_record(tx, offer.name())
295
295
  return True
296
296
 
297
- async def get_trades_count(self) -> Tuple[int, int, int]:
297
+ async def get_trades_count(self) -> tuple[int, int, int]:
298
298
  """
299
299
  Returns the number of trades in the database broken down by is_my_offer status
300
300
  """
@@ -334,7 +334,7 @@ class TradeStore:
334
334
  return (await self._get_new_trade_records_from_old([TradeRecordOld.from_bytes(row[0])]))[0]
335
335
  return None
336
336
 
337
- async def get_trade_record_with_status(self, status: TradeStatus) -> List[TradeRecord]:
337
+ async def get_trade_record_with_status(self, status: TradeStatus) -> list[TradeRecord]:
338
338
  """
339
339
  Checks DB for TradeRecord with id: id and returns it.
340
340
  """
@@ -345,7 +345,7 @@ class TradeStore:
345
345
 
346
346
  return await self._get_new_trade_records_from_old([TradeRecordOld.from_bytes(row[0]) for row in rows])
347
347
 
348
- async def get_coin_ids_of_interest_with_trade_statuses(self, trade_statuses: List[TradeStatus]) -> Set[bytes32]:
348
+ async def get_coin_ids_of_interest_with_trade_statuses(self, trade_statuses: list[TradeStatus]) -> set[bytes32]:
349
349
  """
350
350
  Checks DB for TradeRecord with id: id and returns it.
351
351
  """
@@ -360,7 +360,7 @@ class TradeStore:
360
360
  )
361
361
  return {bytes32(row[0]) for row in rows}
362
362
 
363
- async def get_all_trades(self) -> List[TradeRecord]:
363
+ async def get_all_trades(self) -> list[TradeRecord]:
364
364
  """
365
365
  Returns all stored trades.
366
366
  """
@@ -382,7 +382,7 @@ class TradeStore:
382
382
  exclude_my_offers: bool = False,
383
383
  exclude_taken_offers: bool = False,
384
384
  include_completed: bool = False,
385
- ) -> List[TradeRecord]:
385
+ ) -> list[TradeRecord]:
386
386
  """
387
387
  Return a list of trades sorted by a key and between a start and end index.
388
388
  """
@@ -486,11 +486,11 @@ class TradeStore:
486
486
  await (await conn.execute("DELETE FROM trade_records WHERE trade_id=?", (trade_id.hex(),))).close()
487
487
  await (await conn.execute("DELETE FROM trade_record_times WHERE trade_id=?", (trade_id,))).close()
488
488
 
489
- async def _get_new_trade_records_from_old(self, old_records: List[TradeRecordOld]) -> List[TradeRecord]:
490
- trade_id_to_valid_times: Dict[bytes, ConditionValidTimes] = {}
489
+ async def _get_new_trade_records_from_old(self, old_records: list[TradeRecordOld]) -> list[TradeRecord]:
490
+ trade_id_to_valid_times: dict[bytes, ConditionValidTimes] = {}
491
491
  empty_valid_times = ConditionValidTimes()
492
492
  async with self.db_wrapper.reader_no_transaction() as conn:
493
- chunked_records: List[List[TradeRecordOld]] = [
493
+ chunked_records: list[list[TradeRecordOld]] = [
494
494
  old_records[i : min(len(old_records), i + self.db_wrapper.host_parameter_limit)]
495
495
  for i in range(0, len(old_records), self.db_wrapper.host_parameter_limit)
496
496
  ]