chia-blockchain 2.5.7rc3__py3-none-any.whl → 2.5.8rc1__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 (528) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_build_chains.py +2 -4
  6. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  7. chia/_tests/clvm/coin_store.py +4 -7
  8. chia/_tests/clvm/test_clvm_step.py +4 -4
  9. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  10. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  11. chia/_tests/clvm/test_singletons.py +2 -4
  12. chia/_tests/clvm/test_spend_sim.py +2 -2
  13. chia/_tests/cmds/cmd_test_utils.py +27 -45
  14. chia/_tests/cmds/test_cmd_framework.py +6 -6
  15. chia/_tests/cmds/test_daemon.py +3 -3
  16. chia/_tests/cmds/test_show.py +4 -4
  17. chia/_tests/cmds/test_tx_config_args.py +1 -2
  18. chia/_tests/cmds/testing_classes.py +4 -5
  19. chia/_tests/cmds/wallet/test_did.py +24 -27
  20. chia/_tests/cmds/wallet/test_nft.py +12 -10
  21. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  22. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  23. chia/_tests/conftest.py +59 -30
  24. chia/_tests/connection_utils.py +2 -2
  25. chia/_tests/core/cmds/test_beta.py +4 -4
  26. chia/_tests/core/cmds/test_keys.py +2 -3
  27. chia/_tests/core/cmds/test_wallet.py +15 -15
  28. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  29. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  30. chia/_tests/core/daemon/test_daemon.py +11 -11
  31. chia/_tests/core/data_layer/conftest.py +2 -2
  32. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  33. chia/_tests/core/data_layer/test_data_store.py +10 -10
  34. chia/_tests/core/data_layer/util.py +11 -11
  35. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  36. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  37. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  38. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  39. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  40. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  41. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  42. chia/_tests/core/full_node/test_conditions.py +21 -23
  43. chia/_tests/core/full_node/test_full_node.py +225 -62
  44. chia/_tests/core/full_node/test_hint_management.py +2 -4
  45. chia/_tests/core/full_node/test_performance.py +0 -1
  46. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  47. chia/_tests/core/full_node/test_transactions.py +1 -2
  48. chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
  49. chia/_tests/core/mempool/test_mempool.py +29 -37
  50. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  51. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  52. chia/_tests/core/mempool/test_mempool_manager.py +963 -839
  53. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  54. chia/_tests/core/server/serve.py +7 -7
  55. chia/_tests/core/server/test_dos.py +1 -2
  56. chia/_tests/core/server/test_event_loop.py +12 -4
  57. chia/_tests/core/server/test_loop.py +7 -8
  58. chia/_tests/core/server/test_rate_limits.py +9 -8
  59. chia/_tests/core/server/test_server.py +61 -1
  60. chia/_tests/core/services/test_services.py +2 -2
  61. chia/_tests/core/ssl/test_ssl.py +2 -2
  62. chia/_tests/core/test_cost_calculation.py +2 -6
  63. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  64. chia/_tests/core/test_filter.py +0 -1
  65. chia/_tests/core/test_full_node_rpc.py +2 -2
  66. chia/_tests/core/test_merkle_set.py +1 -2
  67. chia/_tests/core/test_seeder.py +4 -4
  68. chia/_tests/core/util/test_config.py +4 -4
  69. chia/_tests/core/util/test_jsonify.py +2 -2
  70. chia/_tests/core/util/test_keychain.py +3 -3
  71. chia/_tests/core/util/test_lockfile.py +2 -1
  72. chia/_tests/core/util/test_log_exceptions.py +1 -2
  73. chia/_tests/core/util/test_streamable.py +17 -17
  74. chia/_tests/db/test_db_wrapper.py +3 -2
  75. chia/_tests/environments/wallet.py +14 -14
  76. chia/_tests/ether.py +4 -3
  77. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  78. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  79. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  80. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  81. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  82. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  83. chia/_tests/harvester/test_harvester_api.py +11 -4
  84. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  85. chia/_tests/plot_sync/test_receiver.py +11 -10
  86. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  87. chia/_tests/plot_sync/util.py +1 -2
  88. chia/_tests/plotting/test_plot_manager.py +7 -6
  89. chia/_tests/plotting/test_prover.py +30 -38
  90. chia/_tests/pools/test_pool_cmdline.py +4 -6
  91. chia/_tests/pools/test_pool_rpc.py +203 -61
  92. chia/_tests/pools/test_pool_wallet.py +3 -3
  93. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  94. chia/_tests/process_junit.py +2 -2
  95. chia/_tests/rpc/test_rpc_client.py +4 -4
  96. chia/_tests/rpc/test_rpc_server.py +3 -3
  97. chia/_tests/simulation/test_simulation.py +12 -25
  98. chia/_tests/solver/test_solver_service.py +13 -4
  99. chia/_tests/testconfig.py +2 -2
  100. chia/_tests/timelord/test_new_peak.py +22 -11
  101. chia/_tests/tools/test_run_block.py +0 -2
  102. chia/_tests/tools/test_virtual_project.py +2 -1
  103. chia/_tests/util/benchmarks.py +1 -0
  104. chia/_tests/util/blockchain.py +38 -36
  105. chia/_tests/util/blockchain_mock.py +11 -11
  106. chia/_tests/util/build_network_protocol_files.py +2 -1
  107. chia/_tests/util/coin_store.py +2 -1
  108. chia/_tests/util/config.py +1 -1
  109. chia/_tests/util/db_connection.py +2 -3
  110. chia/_tests/util/full_sync.py +9 -11
  111. chia/_tests/util/gen_ssl_certs.py +4 -5
  112. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  113. chia/_tests/util/misc.py +24 -24
  114. chia/_tests/util/network_protocol_data.py +20 -3
  115. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  116. chia/_tests/util/protocol_messages_json.py +292 -3
  117. chia/_tests/util/setup_nodes.py +62 -47
  118. chia/_tests/util/spend_sim.py +57 -57
  119. chia/_tests/util/test_async_pool.py +2 -3
  120. chia/_tests/util/test_chia_version.py +1 -3
  121. chia/_tests/util/test_config.py +3 -3
  122. chia/_tests/util/test_full_block_utils.py +6 -3
  123. chia/_tests/util/test_limited_semaphore.py +1 -2
  124. chia/_tests/util/test_misc.py +2 -2
  125. chia/_tests/util/test_network.py +1 -2
  126. chia/_tests/util/test_priority_mutex.py +3 -3
  127. chia/_tests/util/test_recursive_replace.py +5 -6
  128. chia/_tests/util/test_replace_str_to_bytes.py +8 -10
  129. chia/_tests/util/test_testnet_overrides.py +3 -3
  130. chia/_tests/util/time_out_assert.py +2 -2
  131. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  132. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  133. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  134. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  135. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  136. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  137. chia/_tests/wallet/conftest.py +6 -6
  138. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  139. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  140. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  141. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  142. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  145. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  146. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  147. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  148. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  149. chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
  150. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  151. chia/_tests/wallet/test_coin_management.py +2 -2
  152. chia/_tests/wallet/test_conditions.py +45 -51
  153. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  154. chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
  155. chia/_tests/wallet/test_notifications.py +14 -14
  156. chia/_tests/wallet/test_signer_protocol.py +5 -5
  157. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  158. chia/_tests/wallet/test_transaction_store.py +20 -20
  159. chia/_tests/wallet/test_util.py +2 -2
  160. chia/_tests/wallet/test_wallet.py +380 -228
  161. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  162. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  163. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  164. chia/_tests/wallet/test_wallet_node.py +14 -14
  165. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  166. chia/_tests/wallet/test_wallet_utils.py +2 -3
  167. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  168. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  169. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  170. chia/_tests/wallet/wallet_block_tools.py +12 -11
  171. chia/_tests/weight_proof/config.py +1 -0
  172. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  173. chia/apis/__init__.py +21 -0
  174. chia/apis/farmer_stub.py +102 -0
  175. chia/apis/full_node_stub.py +372 -0
  176. chia/apis/harvester_stub.py +57 -0
  177. chia/apis/introducer_stub.py +35 -0
  178. chia/apis/solver_stub.py +30 -0
  179. chia/apis/stub_protocol_registry.py +21 -0
  180. chia/apis/timelord_stub.py +39 -0
  181. chia/apis/wallet_stub.py +161 -0
  182. chia/cmds/beta.py +3 -4
  183. chia/cmds/beta_funcs.py +4 -3
  184. chia/cmds/check_wallet_db.py +4 -4
  185. chia/cmds/chia.py +1 -2
  186. chia/cmds/cmd_classes.py +11 -13
  187. chia/cmds/cmd_helpers.py +11 -11
  188. chia/cmds/cmds_util.py +15 -15
  189. chia/cmds/coin_funcs.py +6 -7
  190. chia/cmds/coins.py +2 -3
  191. chia/cmds/configure.py +1 -2
  192. chia/cmds/data.py +42 -42
  193. chia/cmds/data_funcs.py +81 -81
  194. chia/cmds/db.py +4 -5
  195. chia/cmds/db_backup_func.py +2 -2
  196. chia/cmds/db_upgrade_func.py +3 -3
  197. chia/cmds/db_validate_func.py +2 -2
  198. chia/cmds/dev/data.py +4 -4
  199. chia/cmds/dev/gh.py +5 -5
  200. chia/cmds/dev/installers.py +2 -3
  201. chia/cmds/dev/mempool.py +3 -4
  202. chia/cmds/dev/mempool_funcs.py +4 -4
  203. chia/cmds/dev/sim.py +8 -8
  204. chia/cmds/dump_keyring.py +3 -3
  205. chia/cmds/farm.py +6 -8
  206. chia/cmds/farm_funcs.py +25 -24
  207. chia/cmds/init_funcs.py +4 -4
  208. chia/cmds/keys.py +16 -18
  209. chia/cmds/keys_funcs.py +36 -36
  210. chia/cmds/netspace.py +1 -3
  211. chia/cmds/netspace_funcs.py +1 -2
  212. chia/cmds/options.py +3 -2
  213. chia/cmds/param_types.py +17 -16
  214. chia/cmds/passphrase.py +6 -7
  215. chia/cmds/passphrase_funcs.py +11 -13
  216. chia/cmds/peer.py +1 -3
  217. chia/cmds/peer_funcs.py +3 -3
  218. chia/cmds/plotnft.py +6 -7
  219. chia/cmds/plotnft_funcs.py +37 -26
  220. chia/cmds/rpc.py +3 -3
  221. chia/cmds/show.py +3 -5
  222. chia/cmds/show_funcs.py +9 -9
  223. chia/cmds/sim_funcs.py +25 -26
  224. chia/cmds/solver.py +1 -3
  225. chia/cmds/solver_funcs.py +1 -2
  226. chia/cmds/start_funcs.py +2 -2
  227. chia/cmds/wallet.py +76 -81
  228. chia/cmds/wallet_funcs.py +206 -177
  229. chia/consensus/augmented_chain.py +6 -6
  230. chia/consensus/block_body_validation.py +19 -15
  231. chia/consensus/block_creation.py +25 -21
  232. chia/consensus/block_header_validation.py +27 -13
  233. chia/consensus/block_height_map.py +3 -6
  234. chia/consensus/block_height_map_protocol.py +2 -2
  235. chia/consensus/block_record.py +2 -4
  236. chia/consensus/blockchain.py +58 -40
  237. chia/consensus/blockchain_interface.py +7 -7
  238. chia/consensus/coin_store_protocol.py +5 -6
  239. chia/consensus/condition_tools.py +4 -4
  240. chia/consensus/cost_calculator.py +2 -3
  241. chia/consensus/default_constants.py +16 -13
  242. chia/consensus/deficit.py +1 -3
  243. chia/consensus/difficulty_adjustment.py +3 -5
  244. chia/consensus/find_fork_point.py +2 -4
  245. chia/consensus/full_block_to_block_record.py +11 -13
  246. chia/consensus/generator_tools.py +2 -3
  247. chia/consensus/get_block_challenge.py +42 -26
  248. chia/consensus/get_block_generator.py +2 -3
  249. chia/consensus/make_sub_epoch_summary.py +8 -7
  250. chia/consensus/multiprocess_validation.py +31 -20
  251. chia/consensus/pos_quality.py +6 -23
  252. chia/consensus/pot_iterations.py +17 -44
  253. chia/consensus/signage_point.py +4 -5
  254. chia/consensus/vdf_info_computation.py +2 -4
  255. chia/daemon/client.py +8 -8
  256. chia/daemon/keychain_proxy.py +31 -37
  257. chia/daemon/server.py +32 -33
  258. chia/daemon/windows_signal.py +4 -3
  259. chia/data_layer/data_layer.py +86 -77
  260. chia/data_layer/data_layer_rpc_api.py +9 -9
  261. chia/data_layer/data_layer_rpc_client.py +13 -15
  262. chia/data_layer/data_layer_server.py +3 -3
  263. chia/data_layer/data_layer_util.py +14 -14
  264. chia/data_layer/data_layer_wallet.py +94 -101
  265. chia/data_layer/data_store.py +50 -50
  266. chia/data_layer/dl_wallet_store.py +9 -12
  267. chia/data_layer/download_data.py +8 -9
  268. chia/data_layer/s3_plugin_service.py +5 -9
  269. chia/data_layer/start_data_layer.py +5 -5
  270. chia/farmer/farmer.py +31 -31
  271. chia/farmer/farmer_api.py +45 -33
  272. chia/farmer/farmer_rpc_api.py +5 -4
  273. chia/farmer/farmer_rpc_client.py +6 -6
  274. chia/farmer/start_farmer.py +12 -7
  275. chia/full_node/block_store.py +13 -16
  276. chia/full_node/check_fork_next_block.py +1 -2
  277. chia/full_node/coin_store.py +15 -16
  278. chia/full_node/eligible_coin_spends.py +3 -3
  279. chia/full_node/fee_estimate_store.py +2 -3
  280. chia/full_node/fee_tracker.py +1 -2
  281. chia/full_node/full_block_utils.py +4 -4
  282. chia/full_node/full_node.py +238 -224
  283. chia/full_node/full_node_api.py +193 -150
  284. chia/full_node/full_node_rpc_api.py +53 -31
  285. chia/full_node/full_node_rpc_client.py +18 -19
  286. chia/full_node/full_node_store.py +45 -43
  287. chia/full_node/hint_management.py +2 -2
  288. chia/full_node/mempool.py +17 -19
  289. chia/full_node/mempool_manager.py +89 -42
  290. chia/full_node/pending_tx_cache.py +2 -3
  291. chia/full_node/start_full_node.py +5 -5
  292. chia/full_node/sync_store.py +3 -4
  293. chia/full_node/tx_processing_queue.py +34 -13
  294. chia/full_node/weight_proof.py +61 -48
  295. chia/harvester/harvester.py +25 -24
  296. chia/harvester/harvester_api.py +61 -38
  297. chia/harvester/harvester_rpc_api.py +10 -10
  298. chia/harvester/start_harvester.py +4 -4
  299. chia/introducer/introducer.py +3 -3
  300. chia/introducer/introducer_api.py +6 -4
  301. chia/introducer/start_introducer.py +4 -4
  302. chia/legacy/keyring.py +3 -3
  303. chia/plot_sync/delta.py +1 -2
  304. chia/plot_sync/receiver.py +20 -17
  305. chia/plot_sync/sender.py +15 -10
  306. chia/plotters/bladebit.py +7 -7
  307. chia/plotters/chiapos.py +2 -2
  308. chia/plotters/madmax.py +4 -4
  309. chia/plotters/plotters.py +4 -4
  310. chia/plotters/plotters_util.py +3 -3
  311. chia/plotting/cache.py +20 -14
  312. chia/plotting/check_plots.py +26 -35
  313. chia/plotting/create_plots.py +22 -23
  314. chia/plotting/manager.py +21 -14
  315. chia/plotting/prover.py +59 -42
  316. chia/plotting/util.py +16 -16
  317. chia/pools/pool_config.py +2 -1
  318. chia/pools/pool_puzzles.py +11 -12
  319. chia/pools/pool_wallet.py +34 -57
  320. chia/pools/pool_wallet_info.py +39 -10
  321. chia/protocols/farmer_protocol.py +8 -9
  322. chia/protocols/fee_estimate.py +3 -4
  323. chia/protocols/full_node_protocol.py +3 -4
  324. chia/protocols/harvester_protocol.py +27 -15
  325. chia/protocols/outbound_message.py +3 -3
  326. chia/protocols/pool_protocol.py +8 -9
  327. chia/protocols/shared_protocol.py +1 -2
  328. chia/protocols/solver_protocol.py +9 -2
  329. chia/protocols/timelord_protocol.py +4 -7
  330. chia/protocols/wallet_protocol.py +11 -12
  331. chia/rpc/rpc_client.py +9 -9
  332. chia/rpc/rpc_server.py +17 -17
  333. chia/rpc/util.py +2 -2
  334. chia/seeder/crawler.py +8 -8
  335. chia/seeder/crawler_api.py +21 -27
  336. chia/seeder/crawler_rpc_api.py +2 -2
  337. chia/seeder/dns_server.py +21 -21
  338. chia/seeder/start_crawler.py +4 -4
  339. chia/server/address_manager.py +15 -16
  340. chia/server/api_protocol.py +11 -11
  341. chia/server/chia_policy.py +46 -26
  342. chia/server/introducer_peers.py +2 -3
  343. chia/server/node_discovery.py +19 -19
  344. chia/server/rate_limit_numbers.py +4 -5
  345. chia/server/rate_limits.py +4 -4
  346. chia/server/resolve_peer_info.py +4 -4
  347. chia/server/server.py +49 -52
  348. chia/server/signal_handlers.py +6 -6
  349. chia/server/start_service.py +17 -17
  350. chia/server/upnp.py +4 -6
  351. chia/server/ws_connection.py +52 -37
  352. chia/simulator/add_blocks_in_batches.py +1 -3
  353. chia/simulator/block_tools.py +312 -200
  354. chia/simulator/full_node_simulator.py +56 -35
  355. chia/simulator/keyring.py +2 -3
  356. chia/simulator/setup_services.py +16 -15
  357. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  358. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  359. chia/simulator/simulator_protocol.py +1 -2
  360. chia/simulator/simulator_test_tools.py +3 -3
  361. chia/simulator/start_simulator.py +7 -7
  362. chia/simulator/wallet_tools.py +10 -10
  363. chia/solver/solver.py +10 -10
  364. chia/solver/solver_api.py +10 -8
  365. chia/solver/solver_rpc_api.py +2 -2
  366. chia/solver/start_solver.py +4 -4
  367. chia/ssl/cacert.pem +148 -90
  368. chia/ssl/chia_ca.crt +14 -10
  369. chia/ssl/chia_ca_old.crt +19 -0
  370. chia/ssl/create_ssl.py +4 -4
  371. chia/ssl/renewedselfsignedca.conf +4 -0
  372. chia/ssl/ssl_check.py +1 -2
  373. chia/timelord/iters_from_block.py +1 -4
  374. chia/timelord/start_timelord.py +4 -4
  375. chia/timelord/timelord.py +44 -40
  376. chia/timelord/timelord_api.py +6 -4
  377. chia/timelord/timelord_launcher.py +2 -2
  378. chia/timelord/timelord_rpc_api.py +2 -2
  379. chia/timelord/timelord_state.py +11 -12
  380. chia/types/block_protocol.py +1 -3
  381. chia/types/blockchain_format/coin.py +1 -3
  382. chia/types/blockchain_format/program.py +11 -8
  383. chia/types/blockchain_format/proof_of_space.py +123 -76
  384. chia/types/blockchain_format/tree_hash.py +3 -3
  385. chia/types/blockchain_format/vdf.py +1 -2
  386. chia/types/coin_spend.py +3 -3
  387. chia/types/mempool_item.py +5 -5
  388. chia/types/mempool_submission_status.py +2 -3
  389. chia/types/peer_info.py +1 -2
  390. chia/types/unfinished_header_block.py +3 -4
  391. chia/types/validation_state.py +1 -2
  392. chia/util/action_scope.py +8 -8
  393. chia/util/async_pool.py +5 -5
  394. chia/util/bech32m.py +1 -2
  395. chia/util/beta_metrics.py +2 -2
  396. chia/util/block_cache.py +4 -4
  397. chia/util/chia_logging.py +2 -2
  398. chia/util/chia_version.py +1 -2
  399. chia/util/config.py +15 -16
  400. chia/util/db_wrapper.py +26 -27
  401. chia/util/default_root.py +1 -2
  402. chia/util/errors.py +3 -3
  403. chia/util/file_keyring.py +14 -14
  404. chia/util/files.py +2 -3
  405. chia/util/hash.py +4 -4
  406. chia/util/initial-config.yaml +3 -5
  407. chia/util/inline_executor.py +2 -1
  408. chia/util/ip_address.py +1 -2
  409. chia/util/keychain.py +25 -27
  410. chia/util/keyring_wrapper.py +18 -19
  411. chia/util/lock.py +3 -4
  412. chia/util/log_exceptions.py +1 -2
  413. chia/util/lru_cache.py +2 -2
  414. chia/util/network.py +6 -6
  415. chia/util/path.py +2 -3
  416. chia/util/priority_mutex.py +2 -2
  417. chia/util/profiler.py +1 -2
  418. chia/util/safe_cancel_task.py +1 -2
  419. chia/util/streamable.py +22 -8
  420. chia/util/task_referencer.py +1 -1
  421. chia/util/timing.py +3 -3
  422. chia/util/virtual_project_analysis.py +6 -5
  423. chia/util/ws_message.py +2 -2
  424. chia/wallet/cat_wallet/cat_info.py +3 -4
  425. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  426. chia/wallet/cat_wallet/cat_utils.py +3 -4
  427. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  428. chia/wallet/cat_wallet/lineage_store.py +3 -4
  429. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  430. chia/wallet/coin_selection.py +9 -10
  431. chia/wallet/conditions.py +120 -105
  432. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  433. chia/wallet/derivation_record.py +1 -2
  434. chia/wallet/derive_keys.py +2 -4
  435. chia/wallet/did_wallet/did_info.py +10 -11
  436. chia/wallet/did_wallet/did_wallet.py +36 -82
  437. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  438. chia/wallet/driver_protocol.py +5 -7
  439. chia/wallet/lineage_proof.py +4 -4
  440. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  441. chia/wallet/nft_wallet/nft_info.py +8 -9
  442. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  443. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  444. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  445. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  446. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  447. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  448. chia/wallet/notification_manager.py +3 -3
  449. chia/wallet/notification_store.py +44 -61
  450. chia/wallet/outer_puzzles.py +6 -7
  451. chia/wallet/puzzle_drivers.py +34 -6
  452. chia/wallet/puzzles/clawback/drivers.py +6 -6
  453. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  454. chia/wallet/puzzles/load_clvm.py +1 -1
  455. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  456. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  457. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  458. chia/wallet/puzzles/tails.py +3 -3
  459. chia/wallet/singleton.py +5 -7
  460. chia/wallet/singleton_record.py +3 -3
  461. chia/wallet/start_wallet.py +5 -5
  462. chia/wallet/trade_manager.py +37 -58
  463. chia/wallet/trade_record.py +4 -4
  464. chia/wallet/trading/offer.py +59 -46
  465. chia/wallet/trading/trade_store.py +8 -9
  466. chia/wallet/transaction_record.py +8 -8
  467. chia/wallet/uncurried_puzzle.py +1 -2
  468. chia/wallet/util/clvm_streamable.py +12 -12
  469. chia/wallet/util/compute_hints.py +4 -5
  470. chia/wallet/util/curry_and_treehash.py +1 -2
  471. chia/wallet/util/merkle_tree.py +2 -3
  472. chia/wallet/util/peer_request_cache.py +8 -8
  473. chia/wallet/util/signing.py +85 -0
  474. chia/wallet/util/tx_config.py +15 -6
  475. chia/wallet/util/wallet_sync_utils.py +14 -16
  476. chia/wallet/util/wallet_types.py +2 -2
  477. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  478. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  479. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  480. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  481. chia/wallet/vc_wallet/vc_store.py +5 -6
  482. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  483. chia/wallet/wallet.py +50 -78
  484. chia/wallet/wallet_action_scope.py +11 -11
  485. chia/wallet/wallet_blockchain.py +12 -12
  486. chia/wallet/wallet_coin_record.py +12 -6
  487. chia/wallet/wallet_coin_store.py +24 -25
  488. chia/wallet/wallet_interested_store.py +3 -5
  489. chia/wallet/wallet_nft_store.py +10 -11
  490. chia/wallet/wallet_node.py +53 -61
  491. chia/wallet/wallet_node_api.py +5 -3
  492. chia/wallet/wallet_protocol.py +23 -23
  493. chia/wallet/wallet_puzzle_store.py +15 -18
  494. chia/wallet/wallet_request_types.py +778 -114
  495. chia/wallet/wallet_retry_store.py +1 -3
  496. chia/wallet/wallet_rpc_api.py +572 -909
  497. chia/wallet/wallet_rpc_client.py +87 -279
  498. chia/wallet/wallet_singleton_store.py +3 -4
  499. chia/wallet/wallet_state_manager.py +332 -106
  500. chia/wallet/wallet_transaction_store.py +11 -14
  501. chia/wallet/wallet_user_store.py +4 -6
  502. chia/wallet/wallet_weight_proof_handler.py +4 -4
  503. {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
  504. {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
  505. chia/apis.py +0 -21
  506. chia/consensus/check_time_locks.py +0 -57
  507. chia/data_layer/puzzles/__init__.py +0 -0
  508. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  509. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  510. chia/types/coin_record.py +0 -44
  511. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  512. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  513. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  514. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  515. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  516. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  517. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  518. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  520. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  521. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  522. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  524. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  525. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  526. {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
  527. {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
  528. {chia_blockchain-2.5.7rc3.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
chia/rpc/rpc_server.py CHANGED
@@ -6,12 +6,12 @@ import json
6
6
  import logging
7
7
  import sys
8
8
  import traceback
9
- from collections.abc import AsyncIterator, Awaitable
9
+ from collections.abc import AsyncIterator, Awaitable, Callable
10
10
  from dataclasses import dataclass
11
11
  from pathlib import Path
12
12
  from ssl import SSLContext
13
13
  from types import MethodType
14
- from typing import Any, Callable, ClassVar, Generic, Optional, TypeVar
14
+ from typing import Any, ClassVar, Generic, TypeVar
15
15
 
16
16
  from aiohttp import (
17
17
  ClientConnectorError,
@@ -57,7 +57,7 @@ _T_RpcApiProtocol = TypeVar("_T_RpcApiProtocol", bound="RpcApiProtocol")
57
57
 
58
58
 
59
59
  class StateChangedProtocol(Protocol):
60
- def __call__(self, change: str, change_data: Optional[dict[str, Any]]) -> None: ...
60
+ def __call__(self, change: str, change_data: dict[str, Any] | None) -> None: ...
61
61
 
62
62
 
63
63
  class RpcServiceProtocol(Protocol):
@@ -75,7 +75,7 @@ class RpcServiceProtocol(Protocol):
75
75
  # Optional[ChiaServer]
76
76
  ...
77
77
 
78
- def get_connections(self, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
78
+ def get_connections(self, request_node_type: NodeType | None) -> list[dict[str, Any]]:
79
79
  """Report the active connections for the service.
80
80
 
81
81
  A default implementation is available and can be called as
@@ -115,12 +115,12 @@ class RpcApiProtocol(Protocol):
115
115
  """Return the mapping of endpoints to handler callables."""
116
116
  ...
117
117
 
118
- async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]]) -> list[WsRpcMessage]:
118
+ async def _state_changed(self, change: str, change_data: dict[str, Any] | None) -> list[WsRpcMessage]:
119
119
  """Notify the state change system of a changed state."""
120
120
  ...
121
121
 
122
122
 
123
- def default_get_connections(server: ChiaServer, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
123
+ def default_get_connections(server: ChiaServer, request_node_type: NodeType | None) -> list[dict[str, Any]]:
124
124
  connections = server.get_connections(request_node_type)
125
125
  con_info = [
126
126
  {
@@ -154,12 +154,12 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
154
154
  ssl_client_context: SSLContext
155
155
  net_config: dict[str, Any]
156
156
  service_config: dict[str, Any]
157
- webserver: Optional[WebServer] = None
157
+ webserver: WebServer | None = None
158
158
  daemon_heartbeat: int = 300
159
- daemon_connection_task: Optional[asyncio.Task[None]] = None
159
+ daemon_connection_task: asyncio.Task[None] | None = None
160
160
  shut_down: bool = False
161
- websocket: Optional[ClientWebSocketResponse] = None
162
- client_session: Optional[ClientSession] = None
161
+ websocket: ClientWebSocketResponse | None = None
162
+ client_session: ClientSession | None = None
163
163
  prefer_ipv6: bool = False
164
164
 
165
165
  @classmethod
@@ -220,7 +220,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
220
220
  await self.daemon_connection_task
221
221
  self.daemon_connection_task = None
222
222
 
223
- async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]]) -> None:
223
+ async def _state_changed(self, change: str, change_data: dict[str, Any] | None) -> None:
224
224
  if self.websocket is None or self.websocket.closed:
225
225
  return None
226
226
  payloads: list[WsRpcMessage] = await self.rpc_api._state_changed(change, change_data)
@@ -246,7 +246,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
246
246
  tb = traceback.format_exc()
247
247
  log.warning(f"Sending data failed. Exception {tb}.")
248
248
 
249
- def state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> None:
249
+ def state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> None:
250
250
  if self.websocket is None or self.websocket.closed:
251
251
  return None
252
252
  create_referenced_task(self._state_changed(change, change_data), known_unreferenced=True)
@@ -280,7 +280,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
280
280
  }
281
281
 
282
282
  async def get_connections(self, request: dict[str, Any]) -> EndpointResult:
283
- request_node_type: Optional[NodeType] = None
283
+ request_node_type: NodeType | None = None
284
284
  if "node_type" in request:
285
285
  request_node_type = NodeType(request["node_type"])
286
286
  if self.rpc_api.service.server is None:
@@ -361,7 +361,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
361
361
  "errors": error_strings,
362
362
  }
363
363
 
364
- async def ws_api(self, message: WsRpcMessage) -> Optional[dict[str, object]]:
364
+ async def ws_api(self, message: WsRpcMessage) -> dict[str, object] | None:
365
365
  """
366
366
  This function gets called when new message is received via websocket.
367
367
  """
@@ -376,10 +376,10 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
376
376
  if command == "ping":
377
377
  return pong()
378
378
 
379
- f_internal: Optional[Endpoint] = getattr(self, command, None)
379
+ f_internal: Endpoint | None = getattr(self, command, None)
380
380
  if f_internal is not None:
381
381
  return await f_internal(data)
382
- f_rpc_api: Optional[Endpoint] = getattr(self.rpc_api, command, None)
382
+ f_rpc_api: Endpoint | None = getattr(self.rpc_api, command, None)
383
383
  if f_rpc_api is not None:
384
384
  return await f_rpc_api(data)
385
385
 
@@ -487,7 +487,7 @@ async def start_rpc_server(
487
487
  net_config: dict[str, object],
488
488
  service_config: dict[str, object],
489
489
  connect_to_daemon: bool = True,
490
- max_request_body_size: Optional[int] = None,
490
+ max_request_body_size: int | None = None,
491
491
  ) -> RpcServer[_T_RpcApiProtocol]:
492
492
  """
493
493
  Starts an HTTP server with the following RPC methods, to be used by local clients to
chia/rpc/util.py CHANGED
@@ -2,8 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
  import traceback
5
- from collections.abc import Awaitable
6
- from typing import TYPE_CHECKING, Any, Callable, get_type_hints
5
+ from collections.abc import Awaitable, Callable
6
+ from typing import TYPE_CHECKING, Any, get_type_hints
7
7
 
8
8
  import aiohttp
9
9
 
chia/seeder/crawler.py CHANGED
@@ -7,10 +7,10 @@ import logging
7
7
  import time
8
8
  import traceback
9
9
  from collections import defaultdict
10
- from collections.abc import AsyncIterator, Awaitable
10
+ from collections.abc import AsyncIterator, Awaitable, Callable
11
11
  from dataclasses import dataclass, field
12
12
  from pathlib import Path
13
- from typing import TYPE_CHECKING, Any, Callable, ClassVar, Optional, cast
13
+ from typing import TYPE_CHECKING, Any, ClassVar, cast
14
14
 
15
15
  import aiosqlite
16
16
  from chia_rs import ConsensusConstants
@@ -45,10 +45,10 @@ class Crawler:
45
45
  root_path: Path
46
46
  constants: ConsensusConstants
47
47
  print_status: bool = True
48
- state_changed_callback: Optional[StateChangedProtocol] = None
49
- _server: Optional[ChiaServer] = None
50
- crawl_task: Optional[asyncio.Task[None]] = None
51
- crawl_store: Optional[CrawlStore] = None
48
+ state_changed_callback: StateChangedProtocol | None = None
49
+ _server: ChiaServer | None = None
50
+ crawl_task: asyncio.Task[None] | None = None
51
+ crawl_store: CrawlStore | None = None
52
52
  log: logging.Logger = log
53
53
  _shut_down: bool = False
54
54
  peer_count: int = 0
@@ -118,7 +118,7 @@ class Crawler:
118
118
  def _set_state_changed_callback(self, callback: StateChangedProtocol) -> None:
119
119
  self.state_changed_callback = callback
120
120
 
121
- def get_connections(self, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
121
+ def get_connections(self, request_node_type: NodeType | None) -> list[dict[str, Any]]:
122
122
  return default_get_connections(server=self.server, request_node_type=request_node_type)
123
123
 
124
124
  async def create_client(
@@ -322,7 +322,7 @@ class Crawler:
322
322
  def set_server(self, server: ChiaServer) -> None:
323
323
  self._server = server
324
324
 
325
- def _state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> None:
325
+ def _state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> None:
326
326
  if self.state_changed_callback is not None:
327
327
  self.state_changed_callback(change, change_data)
328
328
 
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import TYPE_CHECKING, ClassVar, Optional, cast
4
+ from typing import TYPE_CHECKING, ClassVar, cast
5
5
 
6
6
  from chia.protocols import full_node_protocol, wallet_protocol
7
7
  from chia.protocols.outbound_message import Message
@@ -34,76 +34,70 @@ class CrawlerAPI:
34
34
  return True
35
35
 
36
36
  @metadata.request(peer_required=True)
37
- async def request_peers(
38
- self, _request: full_node_protocol.RequestPeers, peer: WSChiaConnection
39
- ) -> Optional[Message]:
37
+ async def request_peers(self, _request: full_node_protocol.RequestPeers, peer: WSChiaConnection) -> Message | None:
40
38
  pass
41
39
 
42
40
  @metadata.request(peer_required=True)
43
- async def respond_peers(
44
- self, request: full_node_protocol.RespondPeers, peer: WSChiaConnection
45
- ) -> Optional[Message]:
41
+ async def respond_peers(self, request: full_node_protocol.RespondPeers, peer: WSChiaConnection) -> Message | None:
46
42
  pass
47
43
 
48
44
  @metadata.request(peer_required=True)
49
- async def new_peak(self, request: full_node_protocol.NewPeak, peer: WSChiaConnection) -> Optional[Message]:
45
+ async def new_peak(self, request: full_node_protocol.NewPeak, peer: WSChiaConnection) -> Message | None:
50
46
  await self.crawler.new_peak(request, peer)
51
47
  return None
52
48
 
53
49
  @metadata.request()
54
- async def new_transaction(self, transaction: full_node_protocol.NewTransaction) -> Optional[Message]:
50
+ async def new_transaction(self, transaction: full_node_protocol.NewTransaction) -> Message | None:
55
51
  pass
56
52
 
57
53
  @metadata.request(peer_required=True)
58
54
  async def new_signage_point_or_end_of_sub_slot(
59
55
  self, new_sp: full_node_protocol.NewSignagePointOrEndOfSubSlot, peer: WSChiaConnection
60
- ) -> Optional[Message]:
56
+ ) -> Message | None:
61
57
  pass
62
58
 
63
59
  @metadata.request()
64
- async def new_unfinished_block(
65
- self, new_unfinished_block: full_node_protocol.NewUnfinishedBlock
66
- ) -> Optional[Message]:
60
+ async def new_unfinished_block(self, new_unfinished_block: full_node_protocol.NewUnfinishedBlock) -> Message | None:
67
61
  pass
68
62
 
69
63
  @metadata.request()
70
64
  async def new_unfinished_block2(
71
65
  self, new_unfinished_block: full_node_protocol.NewUnfinishedBlock2
72
- ) -> Optional[Message]:
66
+ ) -> Message | None:
73
67
  pass
74
68
 
75
69
  @metadata.request(peer_required=True)
76
70
  async def new_compact_vdf(
77
71
  self, request: full_node_protocol.NewCompactVDF, peer: WSChiaConnection
78
- ) -> Optional[Message]:
72
+ ) -> Message | None:
79
73
  pass
80
74
 
81
75
  @metadata.request()
82
- async def request_transaction(self, request: full_node_protocol.RequestTransaction) -> Optional[Message]:
76
+ async def request_transaction(self, request: full_node_protocol.RequestTransaction) -> Message | None:
83
77
  pass
84
78
 
85
79
  @metadata.request()
86
- async def request_proof_of_weight(self, request: full_node_protocol.RequestProofOfWeight) -> Optional[Message]:
80
+ async def request_proof_of_weight(self, request: full_node_protocol.RequestProofOfWeight) -> Message | None:
87
81
  pass
88
82
 
89
83
  @metadata.request()
90
- async def request_block(self, request: full_node_protocol.RequestBlock) -> Optional[Message]:
84
+ async def request_block(self, request: full_node_protocol.RequestBlock) -> Message | None:
91
85
  pass
92
86
 
93
87
  @metadata.request()
94
- async def request_blocks(self, request: full_node_protocol.RequestBlocks) -> Optional[Message]:
88
+ async def request_blocks(self, request: full_node_protocol.RequestBlocks) -> Message | None:
95
89
  pass
96
90
 
97
91
  @metadata.request()
98
92
  async def request_unfinished_block(
99
93
  self, request_unfinished_block: full_node_protocol.RequestUnfinishedBlock
100
- ) -> Optional[Message]:
94
+ ) -> Message | None:
101
95
  pass
102
96
 
103
97
  @metadata.request()
104
98
  async def request_signage_point_or_end_of_sub_slot(
105
99
  self, request: full_node_protocol.RequestSignagePointOrEndOfSubSlot
106
- ) -> Optional[Message]:
100
+ ) -> Message | None:
107
101
  pass
108
102
 
109
103
  @metadata.request(peer_required=True)
@@ -111,25 +105,25 @@ class CrawlerAPI:
111
105
  self,
112
106
  request: full_node_protocol.RequestMempoolTransactions,
113
107
  peer: WSChiaConnection,
114
- ) -> Optional[Message]:
108
+ ) -> Message | None:
115
109
  pass
116
110
 
117
111
  @metadata.request()
118
- async def request_block_header(self, request: wallet_protocol.RequestBlockHeader) -> Optional[Message]:
112
+ async def request_block_header(self, request: wallet_protocol.RequestBlockHeader) -> Message | None:
119
113
  pass
120
114
 
121
115
  @metadata.request()
122
- async def request_additions(self, request: wallet_protocol.RequestAdditions) -> Optional[Message]:
116
+ async def request_additions(self, request: wallet_protocol.RequestAdditions) -> Message | None:
123
117
  pass
124
118
 
125
119
  @metadata.request()
126
- async def request_removals(self, request: wallet_protocol.RequestRemovals) -> Optional[Message]:
120
+ async def request_removals(self, request: wallet_protocol.RequestRemovals) -> Message | None:
127
121
  pass
128
122
 
129
123
  @metadata.request()
130
- async def request_puzzle_solution(self, request: wallet_protocol.RequestPuzzleSolution) -> Optional[Message]:
124
+ async def request_puzzle_solution(self, request: wallet_protocol.RequestPuzzleSolution) -> Message | None:
131
125
  pass
132
126
 
133
127
  @metadata.request()
134
- async def request_header_blocks(self, request: wallet_protocol.RequestHeaderBlocks) -> Optional[Message]:
128
+ async def request_header_blocks(self, request: wallet_protocol.RequestHeaderBlocks) -> Message | None:
135
129
  pass
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import ipaddress
4
- from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
4
+ from typing import TYPE_CHECKING, Any, ClassVar, cast
5
5
 
6
6
  from chia.rpc.rpc_server import Endpoint, EndpointResult
7
7
  from chia.seeder.crawler import Crawler
@@ -24,7 +24,7 @@ class CrawlerRpcApi:
24
24
  "/get_ips_after_timestamp": self.get_ips_after_timestamp,
25
25
  }
26
26
 
27
- async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> list[WsRpcMessage]:
27
+ async def _state_changed(self, change: str, change_data: dict[str, Any] | None = None) -> list[WsRpcMessage]:
28
28
  payloads = []
29
29
 
30
30
  if change_data is None:
chia/seeder/dns_server.py CHANGED
@@ -5,14 +5,14 @@ import logging
5
5
  import signal
6
6
  import sys
7
7
  import traceback
8
- from collections.abc import AsyncIterator, Awaitable
8
+ from collections.abc import AsyncIterator, Awaitable, Callable
9
9
  from contextlib import asynccontextmanager
10
10
  from dataclasses import dataclass, field
11
11
  from ipaddress import IPv4Address, IPv6Address, ip_address
12
12
  from multiprocessing import freeze_support
13
13
  from pathlib import Path
14
14
  from types import FrameType
15
- from typing import Any, Callable, Optional
15
+ from typing import Any
16
16
 
17
17
  import aiosqlite
18
18
  import dns.asyncresolver
@@ -58,9 +58,9 @@ class UDPDNSServerProtocol(asyncio.DatagramProtocol):
58
58
  """
59
59
 
60
60
  callback: DnsCallback
61
- transport: Optional[asyncio.DatagramTransport] = field(init=False, default=None)
61
+ transport: asyncio.DatagramTransport | None = field(init=False, default=None)
62
62
  data_queue: asyncio.Queue[tuple[DNSRecord, tuple[str, int]]] = field(default_factory=asyncio.Queue)
63
- queue_task: Optional[asyncio.Task[None]] = field(init=False, default=None)
63
+ queue_task: asyncio.Task[None] | None = field(init=False, default=None)
64
64
 
65
65
  def start(self) -> None:
66
66
  self.queue_task = create_referenced_task(self.respond()) # This starts the dns respond loop.
@@ -81,7 +81,7 @@ class UDPDNSServerProtocol(asyncio.DatagramProtocol):
81
81
 
82
82
  def datagram_received(self, data: bytes, addr: tuple[str, int]) -> None:
83
83
  log.debug(f"Received UDP DNS request from {addr}.")
84
- dns_request: Optional[DNSRecord] = parse_dns_request(data)
84
+ dns_request: DNSRecord | None = parse_dns_request(data)
85
85
  if dns_request is None: # Invalid Request, we can just drop it and move on.
86
86
  return
87
87
  create_referenced_task(self.handler(dns_request, addr), known_unreferenced=True)
@@ -123,7 +123,7 @@ class TCPDNSServerProtocol(asyncio.BufferedProtocol):
123
123
  """
124
124
 
125
125
  callback: DnsCallback
126
- transport: Optional[asyncio.Transport] = field(init=False, default=None)
126
+ transport: asyncio.Transport | None = field(init=False, default=None)
127
127
  peer_info: str = field(init=False, default="")
128
128
  expected_length: int = 0
129
129
  buffer: bytearray = field(init=False, default_factory=lambda: bytearray(2))
@@ -139,7 +139,7 @@ class TCPDNSServerProtocol(asyncio.BufferedProtocol):
139
139
  self.peer_info = f"{peer_info[0]}:{peer_info[1]}"
140
140
  log.debug(f"TCP connection established with {self.peer_info}.")
141
141
 
142
- def connection_lost(self, exc: Optional[Exception]) -> None:
142
+ def connection_lost(self, exc: Exception | None) -> None:
143
143
  """
144
144
  This is called whenever a connection is lost, or closed.
145
145
  """
@@ -178,7 +178,7 @@ class TCPDNSServerProtocol(asyncio.BufferedProtocol):
178
178
  self.buffer = self.buffer[self.expected_length :] # Remove the message from the buffer
179
179
  self.expected_length = 0 # Reset the expected length
180
180
 
181
- dns_request: Optional[DNSRecord] = parse_dns_request(message)
181
+ dns_request: DNSRecord | None = parse_dns_request(message)
182
182
  if dns_request is None: # Invalid Request, so we disconnect and don't send anything back.
183
183
  self.transport.close()
184
184
  return
@@ -186,7 +186,7 @@ class TCPDNSServerProtocol(asyncio.BufferedProtocol):
186
186
 
187
187
  self.buffer = bytearray(2 if self.expected_length == 0 else self.expected_length) # Reset the buffer if empty.
188
188
 
189
- def eof_received(self) -> Optional[bool]:
189
+ def eof_received(self) -> bool | None:
190
190
  """
191
191
  This is called when the client closes the connection, False or None means we close the connection.
192
192
  True means we keep the connection open.
@@ -241,11 +241,11 @@ def create_dns_reply(dns_request: DNSRecord) -> DNSRecord:
241
241
  return DNSRecord(DNSHeader(id=dns_request.header.id, qr=1, aa=1, ra=0), q=dns_request.q)
242
242
 
243
243
 
244
- def parse_dns_request(data: bytes) -> Optional[DNSRecord]:
244
+ def parse_dns_request(data: bytes) -> DNSRecord | None:
245
245
  """
246
246
  Parses the DNS request, and returns a DNSRecord object, or None if the request is invalid.
247
247
  """
248
- dns_request: Optional[DNSRecord] = None
248
+ dns_request: DNSRecord | None = None
249
249
  try:
250
250
  dns_request = DNSRecord.parse(data)
251
251
  except DNSError as e:
@@ -273,15 +273,15 @@ class DNSServer:
273
273
  root_path: Path
274
274
  lock: asyncio.Lock = field(default_factory=asyncio.Lock)
275
275
  shutdown_event: asyncio.Event = field(default_factory=asyncio.Event)
276
- crawl_store: Optional[CrawlStore] = field(init=False, default=None)
277
- reliable_task: Optional[asyncio.Task[None]] = field(init=False, default=None)
276
+ crawl_store: CrawlStore | None = field(init=False, default=None)
277
+ reliable_task: asyncio.Task[None] | None = field(init=False, default=None)
278
278
  shutting_down: bool = field(init=False, default=False)
279
- udp_transport_ipv4: Optional[asyncio.DatagramTransport] = field(init=False, default=None)
280
- udp_protocol_ipv4: Optional[UDPDNSServerProtocol] = field(init=False, default=None)
281
- udp_transport_ipv6: Optional[asyncio.DatagramTransport] = field(init=False, default=None)
282
- udp_protocol_ipv6: Optional[UDPDNSServerProtocol] = field(init=False, default=None)
279
+ udp_transport_ipv4: asyncio.DatagramTransport | None = field(init=False, default=None)
280
+ udp_protocol_ipv4: UDPDNSServerProtocol | None = field(init=False, default=None)
281
+ udp_transport_ipv6: asyncio.DatagramTransport | None = field(init=False, default=None)
282
+ udp_protocol_ipv6: UDPDNSServerProtocol | None = field(init=False, default=None)
283
283
  # TODO: After 3.10 is dropped change to asyncio.Server
284
- tcp_server: Optional[asyncio.base_events.Server] = field(init=False, default=None)
284
+ tcp_server: asyncio.base_events.Server | None = field(init=False, default=None)
285
285
  # these are all set in __post_init__
286
286
  tcp_dns_port: int = field(init=False)
287
287
  udp_dns_port: int = field(init=False)
@@ -295,7 +295,7 @@ class DNSServer:
295
295
  reliable_peers_v6: list[IPv6Address] = field(default_factory=list)
296
296
  static_peers_v4: list[IPv4Address] = field(default_factory=list)
297
297
  static_peers_v6: list[IPv6Address] = field(default_factory=list)
298
- resolver: Optional[dns.asyncresolver.Resolver] = field(init=False)
298
+ resolver: dns.asyncresolver.Resolver | None = field(init=False)
299
299
  pointer_v4: int = 0
300
300
  pointer_v6: int = 0
301
301
 
@@ -330,7 +330,7 @@ class DNSServer:
330
330
  ),
331
331
  )
332
332
  try:
333
- self.resolver: Optional[dns.asyncresolver.Resolver] = dns.asyncresolver.Resolver()
333
+ self.resolver: dns.asyncresolver.Resolver | None = dns.asyncresolver.Resolver()
334
334
  except Exception:
335
335
  self.resolver = None
336
336
  log.exception("Error initializing asyncresolver for dns_server")
@@ -379,7 +379,7 @@ class DNSServer:
379
379
  async def _accept_signal(
380
380
  self,
381
381
  signal_: signal.Signals,
382
- stack_frame: Optional[FrameType],
382
+ stack_frame: FrameType | None,
383
383
  loop: asyncio.AbstractEventLoop,
384
384
  ) -> None: # pragma: no cover
385
385
  log.info("Received signal %s (%s), shutting down.", signal_.name, signal_.value)
@@ -4,11 +4,11 @@ import logging
4
4
  import pathlib
5
5
  import sys
6
6
  from multiprocessing import freeze_support
7
- from typing import Any, Optional
7
+ from typing import Any
8
8
 
9
9
  from chia_rs import ConsensusConstants
10
10
 
11
- from chia.apis import ApiProtocolRegistry
11
+ from chia.apis import StubMetadataRegistry
12
12
  from chia.consensus.constants import replace_str_to_bytes
13
13
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
14
14
  from chia.protocols.outbound_message import NodeType
@@ -46,7 +46,7 @@ def create_full_node_crawler_service(
46
46
 
47
47
  network_id = service_config["selected_network"]
48
48
 
49
- rpc_info: Optional[RpcInfo[CrawlerRpcApi]] = None
49
+ rpc_info: RpcInfo[CrawlerRpcApi] | None = None
50
50
  if crawler_config.get("start_rpc_server", True):
51
51
  rpc_info = (CrawlerRpcApi, crawler_config.get("rpc_port", 8561))
52
52
 
@@ -63,7 +63,7 @@ def create_full_node_crawler_service(
63
63
  network_id=network_id,
64
64
  rpc_info=rpc_info,
65
65
  connect_to_daemon=connect_to_daemon,
66
- class_for_type=ApiProtocolRegistry,
66
+ stub_metadata_for_type=StubMetadataRegistry,
67
67
  )
68
68
 
69
69
 
@@ -12,7 +12,6 @@ from pathlib import Path
12
12
  from random import choice, randrange
13
13
  from secrets import randbits
14
14
  from timeit import default_timer as timer
15
- from typing import Optional
16
15
 
17
16
  import aiofiles
18
17
  from chia_rs.sized_ints import uint16, uint32, uint64
@@ -45,7 +44,7 @@ class ExtendedPeerInfo:
45
44
  def __init__(
46
45
  self,
47
46
  addr: TimestampedPeerInfo,
48
- src_peer: Optional[PeerInfo],
47
+ src_peer: PeerInfo | None,
49
48
  ):
50
49
  self.peer_info: PeerInfo = PeerInfo(
51
50
  addr.host,
@@ -57,7 +56,7 @@ class ExtendedPeerInfo:
57
56
  self.src = src_peer
58
57
  else:
59
58
  self.src = self.peer_info
60
- self.random_pos: Optional[int] = None
59
+ self.random_pos: int | None = None
61
60
  self.is_tried: bool = False
62
61
  self.ref_count: int = 0
63
62
  self.last_success: int = 0
@@ -145,7 +144,7 @@ class ExtendedPeerInfo:
145
144
  )
146
145
  return hash2 % TRIED_BUCKET_COUNT
147
146
 
148
- def get_new_bucket(self, key: int, src_peer: Optional[PeerInfo] = None) -> int:
147
+ def get_new_bucket(self, key: int, src_peer: PeerInfo | None = None) -> int:
149
148
  if src_peer is None:
150
149
  src_peer = self.src
151
150
  assert src_peer is not None
@@ -175,7 +174,7 @@ class ExtendedPeerInfo:
175
174
  )
176
175
  return hash1 % BUCKET_SIZE
177
176
 
178
- def is_terrible(self, now: Optional[int] = None) -> bool:
177
+ def is_terrible(self, now: int | None = None) -> bool:
179
178
  if now is None:
180
179
  now = math.floor(time.time())
181
180
  # never remove things tried in the last minute
@@ -200,7 +199,7 @@ class ExtendedPeerInfo:
200
199
 
201
200
  return False
202
201
 
203
- def get_selection_chance(self, now: Optional[int] = None) -> float:
202
+ def get_selection_chance(self, now: int | None = None) -> float:
204
203
  if now is None:
205
204
  now = math.floor(time.time())
206
205
  chance = 1.0
@@ -247,7 +246,7 @@ class AddressManager:
247
246
  """
248
247
  Create an address manager using data deserialized from a peers file.
249
248
  """
250
- address_manager: Optional[AddressManager] = None
249
+ address_manager: AddressManager | None = None
251
250
  if peers_file_path.exists():
252
251
  try:
253
252
  log.info(f"Loading peers from {peers_file_path}")
@@ -400,7 +399,7 @@ class AddressManager:
400
399
  if not info.is_tried and info.ref_count == 0:
401
400
  self.delete_new_entry_(id)
402
401
 
403
- def create_(self, addr: TimestampedPeerInfo, addr_src: Optional[PeerInfo]) -> tuple[ExtendedPeerInfo, int]:
402
+ def create_(self, addr: TimestampedPeerInfo, addr_src: PeerInfo | None) -> tuple[ExtendedPeerInfo, int]:
404
403
  self.id_count += 1
405
404
  node_id = self.id_count
406
405
  self.map_info[node_id] = ExtendedPeerInfo(addr, addr_src)
@@ -409,7 +408,7 @@ class AddressManager:
409
408
  self.random_pos.append(node_id)
410
409
  return (self.map_info[node_id], node_id)
411
410
 
412
- def find_(self, addr: PeerInfo) -> tuple[Optional[ExtendedPeerInfo], Optional[int]]:
411
+ def find_(self, addr: PeerInfo) -> tuple[ExtendedPeerInfo | None, int | None]:
413
412
  if addr.host not in self.map_addr:
414
413
  return (None, None)
415
414
  node_id = self.map_addr[addr.host]
@@ -529,7 +528,7 @@ class AddressManager:
529
528
  del self.map_info[node_id]
530
529
  self.new_count -= 1
531
530
 
532
- def add_to_new_table_(self, addr: TimestampedPeerInfo, source: Optional[PeerInfo], penalty: int) -> bool:
531
+ def add_to_new_table_(self, addr: TimestampedPeerInfo, source: PeerInfo | None, penalty: int) -> bool:
533
532
  is_unique = False
534
533
  peer_info = PeerInfo(
535
534
  addr.host,
@@ -603,7 +602,7 @@ class AddressManager:
603
602
  info.last_count_attempt = timestamp
604
603
  info.num_attempts += 1
605
604
 
606
- def select_peer_(self, new_only: bool) -> Optional[ExtendedPeerInfo]:
605
+ def select_peer_(self, new_only: bool) -> ExtendedPeerInfo | None:
607
606
  if len(self.random_pos) == 0:
608
607
  return None
609
608
 
@@ -697,7 +696,7 @@ class AddressManager:
697
696
  if resolved:
698
697
  self.tried_collisions.remove(node_id)
699
698
 
700
- def select_tried_collision_(self) -> Optional[ExtendedPeerInfo]:
699
+ def select_tried_collision_(self) -> ExtendedPeerInfo | None:
701
700
  if len(self.tried_collisions) == 0:
702
701
  return None
703
702
  new_id = choice(self.tried_collisions)
@@ -766,7 +765,7 @@ class AddressManager:
766
765
  async def add_to_new_table(
767
766
  self,
768
767
  addresses: list[TimestampedPeerInfo],
769
- source: Optional[PeerInfo] = None,
768
+ source: PeerInfo | None = None,
770
769
  penalty: int = 0,
771
770
  ) -> bool:
772
771
  is_added = False
@@ -806,12 +805,12 @@ class AddressManager:
806
805
  self.resolve_tried_collisions_()
807
806
 
808
807
  # Randomly select an address in tried that another address is attempting to evict.
809
- async def select_tried_collision(self) -> Optional[ExtendedPeerInfo]:
808
+ async def select_tried_collision(self) -> ExtendedPeerInfo | None:
810
809
  async with self.lock:
811
810
  return self.select_tried_collision_()
812
811
 
813
812
  # Choose an address to connect to.
814
- async def select_peer(self, new_only: bool = False) -> Optional[ExtendedPeerInfo]:
813
+ async def select_peer(self, new_only: bool = False) -> ExtendedPeerInfo | None:
815
814
  async with self.lock:
816
815
  return self.select_peer_(new_only)
817
816
 
@@ -833,7 +832,7 @@ class AddressManager:
833
832
  """
834
833
  Create an address manager using data deserialized from a peers file.
835
834
  """
836
- peer_data: Optional[PeerDataSerialization] = None
835
+ peer_data: PeerDataSerialization | None = None
837
836
  address_manager = AddressManager()
838
837
  start_time = timer()
839
838
  # if this fails, we pass the exception up to the function that called us and try the other type of deserializing