chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__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 (531) 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_blockchain_transactions.py +5 -2
  6. chia/_tests/blockchain/test_build_chains.py +2 -4
  7. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  8. chia/_tests/clvm/coin_store.py +4 -7
  9. chia/_tests/clvm/test_clvm_step.py +4 -4
  10. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  11. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  12. chia/_tests/clvm/test_singletons.py +2 -4
  13. chia/_tests/clvm/test_spend_sim.py +2 -2
  14. chia/_tests/cmds/cmd_test_utils.py +27 -45
  15. chia/_tests/cmds/test_cmd_framework.py +6 -6
  16. chia/_tests/cmds/test_daemon.py +3 -3
  17. chia/_tests/cmds/test_show.py +4 -4
  18. chia/_tests/cmds/test_tx_config_args.py +1 -2
  19. chia/_tests/cmds/testing_classes.py +4 -5
  20. chia/_tests/cmds/wallet/test_did.py +24 -27
  21. chia/_tests/cmds/wallet/test_nft.py +12 -10
  22. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  23. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  24. chia/_tests/conftest.py +66 -31
  25. chia/_tests/connection_utils.py +2 -2
  26. chia/_tests/core/cmds/test_beta.py +4 -4
  27. chia/_tests/core/cmds/test_keys.py +2 -3
  28. chia/_tests/core/cmds/test_wallet.py +15 -15
  29. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  30. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  31. chia/_tests/core/daemon/test_daemon.py +11 -11
  32. chia/_tests/core/data_layer/conftest.py +2 -2
  33. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  34. chia/_tests/core/data_layer/test_data_store.py +10 -10
  35. chia/_tests/core/data_layer/util.py +11 -11
  36. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  37. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  38. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  39. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  40. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  41. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  42. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  43. chia/_tests/core/full_node/test_conditions.py +21 -23
  44. chia/_tests/core/full_node/test_full_node.py +273 -70
  45. chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
  46. chia/_tests/core/full_node/test_hint_management.py +2 -4
  47. chia/_tests/core/full_node/test_performance.py +0 -1
  48. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  49. chia/_tests/core/full_node/test_transactions.py +1 -2
  50. chia/_tests/core/full_node/test_tx_processing_queue.py +198 -30
  51. chia/_tests/core/mempool/test_mempool.py +54 -50
  52. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  53. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  54. chia/_tests/core/mempool/test_mempool_manager.py +988 -854
  55. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  56. chia/_tests/core/server/serve.py +7 -7
  57. chia/_tests/core/server/test_dos.py +1 -2
  58. chia/_tests/core/server/test_event_loop.py +12 -4
  59. chia/_tests/core/server/test_loop.py +7 -8
  60. chia/_tests/core/server/test_rate_limits.py +9 -8
  61. chia/_tests/core/server/test_server.py +61 -1
  62. chia/_tests/core/services/test_services.py +2 -2
  63. chia/_tests/core/ssl/test_ssl.py +2 -2
  64. chia/_tests/core/test_cost_calculation.py +2 -6
  65. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  66. chia/_tests/core/test_filter.py +0 -1
  67. chia/_tests/core/test_full_node_rpc.py +2 -2
  68. chia/_tests/core/test_merkle_set.py +1 -2
  69. chia/_tests/core/test_seeder.py +4 -4
  70. chia/_tests/core/util/test_config.py +4 -4
  71. chia/_tests/core/util/test_jsonify.py +2 -2
  72. chia/_tests/core/util/test_keychain.py +3 -3
  73. chia/_tests/core/util/test_lockfile.py +2 -1
  74. chia/_tests/core/util/test_log_exceptions.py +1 -2
  75. chia/_tests/core/util/test_streamable.py +17 -17
  76. chia/_tests/db/test_db_wrapper.py +3 -2
  77. chia/_tests/environments/wallet.py +14 -14
  78. chia/_tests/ether.py +4 -3
  79. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  80. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  81. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  82. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  83. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  84. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  85. chia/_tests/harvester/test_harvester_api.py +11 -4
  86. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  87. chia/_tests/plot_sync/test_receiver.py +11 -10
  88. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  89. chia/_tests/plot_sync/util.py +1 -2
  90. chia/_tests/plotting/test_plot_manager.py +7 -6
  91. chia/_tests/plotting/test_prover.py +30 -38
  92. chia/_tests/pools/test_pool_cmdline.py +4 -6
  93. chia/_tests/pools/test_pool_rpc.py +203 -61
  94. chia/_tests/pools/test_pool_wallet.py +3 -3
  95. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  96. chia/_tests/process_junit.py +2 -2
  97. chia/_tests/rpc/test_rpc_client.py +4 -4
  98. chia/_tests/rpc/test_rpc_server.py +3 -3
  99. chia/_tests/simulation/test_simulation.py +12 -25
  100. chia/_tests/solver/test_solver_service.py +13 -4
  101. chia/_tests/testconfig.py +2 -2
  102. chia/_tests/timelord/test_new_peak.py +22 -11
  103. chia/_tests/tools/test_run_block.py +0 -2
  104. chia/_tests/tools/test_virtual_project.py +2 -1
  105. chia/_tests/util/benchmarks.py +1 -0
  106. chia/_tests/util/blockchain.py +38 -36
  107. chia/_tests/util/blockchain_mock.py +11 -11
  108. chia/_tests/util/build_network_protocol_files.py +2 -1
  109. chia/_tests/util/coin_store.py +2 -1
  110. chia/_tests/util/config.py +1 -1
  111. chia/_tests/util/db_connection.py +2 -3
  112. chia/_tests/util/full_sync.py +9 -11
  113. chia/_tests/util/gen_ssl_certs.py +4 -5
  114. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  115. chia/_tests/util/misc.py +24 -24
  116. chia/_tests/util/network_protocol_data.py +20 -3
  117. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  118. chia/_tests/util/protocol_messages_json.py +292 -3
  119. chia/_tests/util/setup_nodes.py +62 -47
  120. chia/_tests/util/spend_sim.py +57 -57
  121. chia/_tests/util/test_async_pool.py +2 -3
  122. chia/_tests/util/test_chia_version.py +1 -3
  123. chia/_tests/util/test_config.py +3 -3
  124. chia/_tests/util/test_full_block_utils.py +6 -3
  125. chia/_tests/util/test_limited_semaphore.py +1 -2
  126. chia/_tests/util/test_misc.py +2 -2
  127. chia/_tests/util/test_network.py +1 -2
  128. chia/_tests/util/test_priority_mutex.py +3 -3
  129. chia/_tests/util/test_recursive_replace.py +5 -6
  130. chia/_tests/util/test_replace_str_to_bytes.py +9 -10
  131. chia/_tests/util/test_testnet_overrides.py +3 -3
  132. chia/_tests/util/time_out_assert.py +2 -2
  133. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  134. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  135. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  136. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  137. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  138. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  139. chia/_tests/wallet/conftest.py +6 -6
  140. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  141. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  142. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  145. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  146. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  147. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  148. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  149. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  150. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  151. chia/_tests/wallet/sync/test_wallet_sync.py +63 -60
  152. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  153. chia/_tests/wallet/test_coin_management.py +2 -2
  154. chia/_tests/wallet/test_conditions.py +45 -51
  155. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  156. chia/_tests/wallet/test_new_wallet_protocol.py +17 -17
  157. chia/_tests/wallet/test_notifications.py +14 -14
  158. chia/_tests/wallet/test_signer_protocol.py +5 -5
  159. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  160. chia/_tests/wallet/test_transaction_store.py +20 -20
  161. chia/_tests/wallet/test_util.py +2 -2
  162. chia/_tests/wallet/test_wallet.py +380 -228
  163. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  164. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  165. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  166. chia/_tests/wallet/test_wallet_node.py +16 -15
  167. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  168. chia/_tests/wallet/test_wallet_utils.py +2 -3
  169. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  170. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  171. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  172. chia/_tests/wallet/wallet_block_tools.py +12 -11
  173. chia/_tests/weight_proof/config.py +1 -0
  174. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  175. chia/apis/__init__.py +21 -0
  176. chia/apis/farmer_stub.py +102 -0
  177. chia/apis/full_node_stub.py +374 -0
  178. chia/apis/harvester_stub.py +57 -0
  179. chia/apis/introducer_stub.py +35 -0
  180. chia/apis/solver_stub.py +30 -0
  181. chia/apis/stub_protocol_registry.py +21 -0
  182. chia/apis/timelord_stub.py +39 -0
  183. chia/apis/wallet_stub.py +161 -0
  184. chia/cmds/beta.py +3 -4
  185. chia/cmds/beta_funcs.py +4 -3
  186. chia/cmds/check_wallet_db.py +4 -4
  187. chia/cmds/chia.py +1 -2
  188. chia/cmds/cmd_classes.py +11 -13
  189. chia/cmds/cmd_helpers.py +11 -11
  190. chia/cmds/cmds_util.py +15 -15
  191. chia/cmds/coin_funcs.py +6 -7
  192. chia/cmds/coins.py +2 -3
  193. chia/cmds/configure.py +1 -2
  194. chia/cmds/data.py +42 -42
  195. chia/cmds/data_funcs.py +81 -81
  196. chia/cmds/db.py +4 -5
  197. chia/cmds/db_backup_func.py +2 -2
  198. chia/cmds/db_upgrade_func.py +3 -3
  199. chia/cmds/db_validate_func.py +2 -2
  200. chia/cmds/dev/data.py +4 -4
  201. chia/cmds/dev/gh.py +5 -5
  202. chia/cmds/dev/installers.py +2 -3
  203. chia/cmds/dev/mempool.py +3 -4
  204. chia/cmds/dev/mempool_funcs.py +4 -4
  205. chia/cmds/dev/sim.py +8 -8
  206. chia/cmds/dump_keyring.py +3 -3
  207. chia/cmds/farm.py +6 -8
  208. chia/cmds/farm_funcs.py +25 -24
  209. chia/cmds/init_funcs.py +4 -4
  210. chia/cmds/keys.py +16 -18
  211. chia/cmds/keys_funcs.py +36 -36
  212. chia/cmds/netspace.py +1 -3
  213. chia/cmds/netspace_funcs.py +1 -2
  214. chia/cmds/options.py +3 -2
  215. chia/cmds/param_types.py +17 -16
  216. chia/cmds/passphrase.py +6 -7
  217. chia/cmds/passphrase_funcs.py +11 -13
  218. chia/cmds/peer.py +1 -3
  219. chia/cmds/peer_funcs.py +3 -3
  220. chia/cmds/plotnft.py +6 -7
  221. chia/cmds/plotnft_funcs.py +37 -26
  222. chia/cmds/rpc.py +3 -3
  223. chia/cmds/show.py +3 -5
  224. chia/cmds/show_funcs.py +9 -9
  225. chia/cmds/sim_funcs.py +25 -26
  226. chia/cmds/solver.py +1 -3
  227. chia/cmds/solver_funcs.py +1 -2
  228. chia/cmds/start_funcs.py +2 -2
  229. chia/cmds/wallet.py +76 -81
  230. chia/cmds/wallet_funcs.py +206 -177
  231. chia/consensus/augmented_chain.py +6 -6
  232. chia/consensus/block_body_validation.py +19 -15
  233. chia/consensus/block_creation.py +25 -21
  234. chia/consensus/block_header_validation.py +27 -13
  235. chia/consensus/block_height_map.py +3 -6
  236. chia/consensus/block_height_map_protocol.py +2 -2
  237. chia/consensus/block_record.py +2 -4
  238. chia/consensus/blockchain.py +58 -40
  239. chia/consensus/blockchain_interface.py +7 -7
  240. chia/consensus/coin_store_protocol.py +5 -6
  241. chia/consensus/condition_tools.py +4 -4
  242. chia/consensus/cost_calculator.py +2 -3
  243. chia/consensus/default_constants.py +19 -13
  244. chia/consensus/deficit.py +1 -3
  245. chia/consensus/difficulty_adjustment.py +3 -5
  246. chia/consensus/find_fork_point.py +2 -4
  247. chia/consensus/full_block_to_block_record.py +11 -13
  248. chia/consensus/generator_tools.py +2 -3
  249. chia/consensus/get_block_challenge.py +50 -26
  250. chia/consensus/get_block_generator.py +2 -3
  251. chia/consensus/make_sub_epoch_summary.py +8 -7
  252. chia/consensus/multiprocess_validation.py +31 -20
  253. chia/consensus/pos_quality.py +6 -23
  254. chia/consensus/pot_iterations.py +17 -44
  255. chia/consensus/signage_point.py +4 -5
  256. chia/consensus/vdf_info_computation.py +2 -4
  257. chia/daemon/client.py +8 -8
  258. chia/daemon/keychain_proxy.py +31 -37
  259. chia/daemon/server.py +32 -33
  260. chia/daemon/windows_signal.py +4 -3
  261. chia/data_layer/data_layer.py +86 -77
  262. chia/data_layer/data_layer_rpc_api.py +9 -9
  263. chia/data_layer/data_layer_rpc_client.py +13 -15
  264. chia/data_layer/data_layer_server.py +3 -3
  265. chia/data_layer/data_layer_util.py +14 -14
  266. chia/data_layer/data_layer_wallet.py +94 -101
  267. chia/data_layer/data_store.py +50 -50
  268. chia/data_layer/dl_wallet_store.py +9 -12
  269. chia/data_layer/download_data.py +8 -9
  270. chia/data_layer/s3_plugin_service.py +5 -9
  271. chia/data_layer/start_data_layer.py +5 -5
  272. chia/farmer/farmer.py +31 -31
  273. chia/farmer/farmer_api.py +45 -33
  274. chia/farmer/farmer_rpc_api.py +5 -4
  275. chia/farmer/farmer_rpc_client.py +6 -6
  276. chia/farmer/start_farmer.py +6 -6
  277. chia/full_node/block_store.py +13 -16
  278. chia/full_node/check_fork_next_block.py +1 -2
  279. chia/full_node/coin_store.py +15 -16
  280. chia/full_node/eligible_coin_spends.py +3 -3
  281. chia/full_node/fee_estimate_store.py +2 -3
  282. chia/full_node/fee_tracker.py +1 -2
  283. chia/full_node/full_block_utils.py +4 -4
  284. chia/full_node/full_node.py +239 -223
  285. chia/full_node/full_node_api.py +197 -152
  286. chia/full_node/full_node_rpc_api.py +34 -32
  287. chia/full_node/full_node_rpc_client.py +18 -19
  288. chia/full_node/full_node_store.py +45 -43
  289. chia/full_node/hard_fork_utils.py +44 -0
  290. chia/full_node/hint_management.py +2 -2
  291. chia/full_node/mempool.py +17 -19
  292. chia/full_node/mempool_manager.py +89 -42
  293. chia/full_node/pending_tx_cache.py +2 -3
  294. chia/full_node/start_full_node.py +5 -5
  295. chia/full_node/sync_store.py +3 -4
  296. chia/full_node/tx_processing_queue.py +120 -36
  297. chia/full_node/weight_proof.py +61 -48
  298. chia/harvester/harvester.py +25 -24
  299. chia/harvester/harvester_api.py +61 -38
  300. chia/harvester/harvester_rpc_api.py +10 -10
  301. chia/harvester/start_harvester.py +4 -4
  302. chia/introducer/introducer.py +3 -3
  303. chia/introducer/introducer_api.py +6 -4
  304. chia/introducer/start_introducer.py +4 -4
  305. chia/legacy/keyring.py +3 -3
  306. chia/plot_sync/delta.py +1 -2
  307. chia/plot_sync/receiver.py +20 -17
  308. chia/plot_sync/sender.py +15 -10
  309. chia/plotters/bladebit.py +7 -7
  310. chia/plotters/chiapos.py +2 -2
  311. chia/plotters/madmax.py +4 -4
  312. chia/plotters/plotters.py +4 -4
  313. chia/plotters/plotters_util.py +3 -3
  314. chia/plotting/cache.py +20 -14
  315. chia/plotting/check_plots.py +26 -35
  316. chia/plotting/create_plots.py +22 -23
  317. chia/plotting/manager.py +21 -14
  318. chia/plotting/prover.py +59 -42
  319. chia/plotting/util.py +16 -16
  320. chia/pools/pool_config.py +2 -1
  321. chia/pools/pool_puzzles.py +11 -12
  322. chia/pools/pool_wallet.py +34 -57
  323. chia/pools/pool_wallet_info.py +39 -10
  324. chia/protocols/farmer_protocol.py +8 -9
  325. chia/protocols/fee_estimate.py +3 -4
  326. chia/protocols/full_node_protocol.py +3 -4
  327. chia/protocols/harvester_protocol.py +27 -15
  328. chia/protocols/outbound_message.py +3 -3
  329. chia/protocols/pool_protocol.py +8 -9
  330. chia/protocols/shared_protocol.py +1 -2
  331. chia/protocols/solver_protocol.py +9 -2
  332. chia/protocols/timelord_protocol.py +4 -7
  333. chia/protocols/wallet_protocol.py +11 -12
  334. chia/rpc/rpc_client.py +9 -9
  335. chia/rpc/rpc_server.py +17 -17
  336. chia/rpc/util.py +2 -2
  337. chia/seeder/crawler.py +8 -8
  338. chia/seeder/crawler_api.py +21 -27
  339. chia/seeder/crawler_rpc_api.py +2 -2
  340. chia/seeder/dns_server.py +21 -21
  341. chia/seeder/start_crawler.py +4 -4
  342. chia/server/address_manager.py +15 -16
  343. chia/server/api_protocol.py +11 -11
  344. chia/server/chia_policy.py +46 -26
  345. chia/server/introducer_peers.py +2 -3
  346. chia/server/node_discovery.py +19 -19
  347. chia/server/rate_limit_numbers.py +4 -5
  348. chia/server/rate_limits.py +4 -4
  349. chia/server/resolve_peer_info.py +4 -4
  350. chia/server/server.py +49 -52
  351. chia/server/signal_handlers.py +6 -6
  352. chia/server/start_service.py +17 -17
  353. chia/server/upnp.py +4 -6
  354. chia/server/ws_connection.py +52 -37
  355. chia/simulator/add_blocks_in_batches.py +1 -3
  356. chia/simulator/block_tools.py +312 -200
  357. chia/simulator/full_node_simulator.py +56 -35
  358. chia/simulator/keyring.py +2 -3
  359. chia/simulator/setup_services.py +15 -15
  360. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  361. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  362. chia/simulator/simulator_protocol.py +1 -2
  363. chia/simulator/simulator_test_tools.py +3 -3
  364. chia/simulator/start_simulator.py +7 -7
  365. chia/simulator/wallet_tools.py +10 -10
  366. chia/solver/solver.py +10 -10
  367. chia/solver/solver_api.py +10 -8
  368. chia/solver/solver_rpc_api.py +2 -2
  369. chia/solver/start_solver.py +4 -4
  370. chia/ssl/cacert.pem +148 -90
  371. chia/ssl/chia_ca.crt +14 -10
  372. chia/ssl/chia_ca_old.crt +19 -0
  373. chia/ssl/create_ssl.py +4 -4
  374. chia/ssl/renewedselfsignedca.conf +4 -0
  375. chia/ssl/ssl_check.py +1 -2
  376. chia/timelord/iters_from_block.py +1 -4
  377. chia/timelord/start_timelord.py +4 -4
  378. chia/timelord/timelord.py +44 -40
  379. chia/timelord/timelord_api.py +6 -4
  380. chia/timelord/timelord_launcher.py +2 -2
  381. chia/timelord/timelord_rpc_api.py +2 -2
  382. chia/timelord/timelord_state.py +11 -12
  383. chia/types/block_protocol.py +1 -3
  384. chia/types/blockchain_format/coin.py +1 -3
  385. chia/types/blockchain_format/program.py +11 -8
  386. chia/types/blockchain_format/proof_of_space.py +123 -76
  387. chia/types/blockchain_format/tree_hash.py +3 -3
  388. chia/types/blockchain_format/vdf.py +1 -2
  389. chia/types/coin_spend.py +3 -3
  390. chia/types/mempool_item.py +5 -5
  391. chia/types/mempool_submission_status.py +2 -3
  392. chia/types/peer_info.py +1 -2
  393. chia/types/unfinished_header_block.py +3 -4
  394. chia/types/validation_state.py +1 -2
  395. chia/util/action_scope.py +8 -8
  396. chia/util/async_pool.py +5 -5
  397. chia/util/bech32m.py +1 -2
  398. chia/util/beta_metrics.py +2 -2
  399. chia/util/block_cache.py +4 -4
  400. chia/util/chia_logging.py +2 -2
  401. chia/util/chia_version.py +1 -2
  402. chia/util/config.py +15 -16
  403. chia/util/db_wrapper.py +26 -27
  404. chia/util/default_root.py +1 -2
  405. chia/util/errors.py +3 -3
  406. chia/util/file_keyring.py +14 -14
  407. chia/util/files.py +2 -3
  408. chia/util/hash.py +4 -4
  409. chia/util/initial-config.yaml +4 -5
  410. chia/util/inline_executor.py +2 -1
  411. chia/util/ip_address.py +1 -2
  412. chia/util/keychain.py +25 -27
  413. chia/util/keyring_wrapper.py +18 -19
  414. chia/util/lock.py +3 -4
  415. chia/util/log_exceptions.py +1 -2
  416. chia/util/lru_cache.py +2 -2
  417. chia/util/network.py +6 -6
  418. chia/util/path.py +2 -3
  419. chia/util/priority_mutex.py +2 -2
  420. chia/util/profiler.py +1 -2
  421. chia/util/safe_cancel_task.py +1 -2
  422. chia/util/streamable.py +24 -10
  423. chia/util/task_referencer.py +1 -1
  424. chia/util/timing.py +3 -3
  425. chia/util/virtual_project_analysis.py +6 -5
  426. chia/util/ws_message.py +2 -2
  427. chia/wallet/cat_wallet/cat_info.py +3 -4
  428. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  429. chia/wallet/cat_wallet/cat_utils.py +3 -4
  430. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  431. chia/wallet/cat_wallet/lineage_store.py +3 -4
  432. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  433. chia/wallet/coin_selection.py +9 -10
  434. chia/wallet/conditions.py +142 -106
  435. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  436. chia/wallet/derivation_record.py +1 -2
  437. chia/wallet/derive_keys.py +2 -4
  438. chia/wallet/did_wallet/did_info.py +10 -11
  439. chia/wallet/did_wallet/did_wallet.py +36 -82
  440. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  441. chia/wallet/driver_protocol.py +5 -7
  442. chia/wallet/lineage_proof.py +4 -4
  443. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  444. chia/wallet/nft_wallet/nft_info.py +8 -9
  445. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  446. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  447. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  448. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  449. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  450. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  451. chia/wallet/notification_manager.py +3 -3
  452. chia/wallet/notification_store.py +44 -61
  453. chia/wallet/outer_puzzles.py +6 -7
  454. chia/wallet/puzzle_drivers.py +34 -6
  455. chia/wallet/puzzles/clawback/drivers.py +6 -6
  456. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  457. chia/wallet/puzzles/load_clvm.py +1 -1
  458. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  459. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  460. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  461. chia/wallet/puzzles/tails.py +3 -3
  462. chia/wallet/singleton.py +5 -7
  463. chia/wallet/singleton_record.py +3 -3
  464. chia/wallet/start_wallet.py +5 -5
  465. chia/wallet/trade_manager.py +37 -58
  466. chia/wallet/trade_record.py +4 -4
  467. chia/wallet/trading/offer.py +59 -46
  468. chia/wallet/trading/trade_store.py +8 -9
  469. chia/wallet/transaction_record.py +8 -8
  470. chia/wallet/uncurried_puzzle.py +1 -2
  471. chia/wallet/util/clvm_streamable.py +12 -12
  472. chia/wallet/util/compute_hints.py +4 -5
  473. chia/wallet/util/curry_and_treehash.py +1 -2
  474. chia/wallet/util/merkle_tree.py +2 -3
  475. chia/wallet/util/peer_request_cache.py +8 -8
  476. chia/wallet/util/signing.py +85 -0
  477. chia/wallet/util/tx_config.py +15 -6
  478. chia/wallet/util/wallet_sync_utils.py +14 -16
  479. chia/wallet/util/wallet_types.py +2 -2
  480. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  481. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  482. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  483. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  484. chia/wallet/vc_wallet/vc_store.py +5 -6
  485. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  486. chia/wallet/wallet.py +50 -78
  487. chia/wallet/wallet_action_scope.py +11 -11
  488. chia/wallet/wallet_blockchain.py +12 -12
  489. chia/wallet/wallet_coin_record.py +12 -6
  490. chia/wallet/wallet_coin_store.py +24 -25
  491. chia/wallet/wallet_interested_store.py +3 -5
  492. chia/wallet/wallet_nft_store.py +10 -11
  493. chia/wallet/wallet_node.py +53 -61
  494. chia/wallet/wallet_node_api.py +5 -3
  495. chia/wallet/wallet_protocol.py +23 -23
  496. chia/wallet/wallet_puzzle_store.py +15 -18
  497. chia/wallet/wallet_request_types.py +778 -114
  498. chia/wallet/wallet_retry_store.py +1 -3
  499. chia/wallet/wallet_rpc_api.py +572 -909
  500. chia/wallet/wallet_rpc_client.py +87 -279
  501. chia/wallet/wallet_singleton_store.py +3 -4
  502. chia/wallet/wallet_state_manager.py +332 -106
  503. chia/wallet/wallet_transaction_store.py +11 -14
  504. chia/wallet/wallet_user_store.py +4 -6
  505. chia/wallet/wallet_weight_proof_handler.py +4 -4
  506. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/METADATA +6 -5
  507. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
  508. chia/apis.py +0 -21
  509. chia/consensus/check_time_locks.py +0 -57
  510. chia/data_layer/puzzles/__init__.py +0 -0
  511. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  512. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  513. chia/types/coin_record.py +0 -44
  514. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  515. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  516. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  517. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  518. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  520. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  521. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  522. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  524. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  525. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  526. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  527. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  528. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  529. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/WHEEL +0 -0
  530. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
  531. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
chia/server/server.py CHANGED
@@ -5,11 +5,11 @@ import logging
5
5
  import ssl
6
6
  import time
7
7
  import traceback
8
- from collections.abc import Awaitable
8
+ from collections.abc import Awaitable, Callable
9
9
  from dataclasses import dataclass, field
10
10
  from ipaddress import IPv4Network, IPv6Network, ip_network
11
11
  from pathlib import Path
12
- from typing import Any, Callable, Optional, Union, cast
12
+ from typing import Any, cast
13
13
 
14
14
  from aiohttp import (
15
15
  ClientResponseError,
@@ -31,7 +31,7 @@ from chia.protocols.outbound_message import Message, NodeType
31
31
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
32
32
  from chia.protocols.protocol_state_machine import message_requires_reply
33
33
  from chia.protocols.protocol_timing import INVALID_PROTOCOL_BAN_SECONDS
34
- from chia.server.api_protocol import ApiProtocol
34
+ from chia.server.api_protocol import ApiMetadata, ApiProtocol
35
35
  from chia.server.introducer_peers import IntroducerPeers
36
36
  from chia.server.ssl_context import private_ssl_paths, public_ssl_paths
37
37
  from chia.server.ws_connection import ConnectionCallback, WSChiaConnection
@@ -52,33 +52,21 @@ def ssl_context_for_server(
52
52
  key_path: Path,
53
53
  *,
54
54
  check_permissions: bool = True,
55
- log: Optional[logging.Logger] = None,
55
+ log: logging.Logger | None = None,
56
56
  ) -> ssl.SSLContext:
57
57
  if check_permissions:
58
58
  verify_ssl_certs_and_keys([ca_cert, cert_path], [ca_key, key_path], log)
59
59
 
60
60
  ssl_context = ssl._create_unverified_context(purpose=ssl.Purpose.CLIENT_AUTH, cafile=str(ca_cert)) # noqa: S323
61
61
  ssl_context.check_hostname = False
62
- ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2
63
- ssl_context.set_ciphers(
64
- "ECDHE-ECDSA-AES256-GCM-SHA384:"
65
- "ECDHE-RSA-AES256-GCM-SHA384:"
66
- "ECDHE-ECDSA-CHACHA20-POLY1305:"
67
- "ECDHE-RSA-CHACHA20-POLY1305:"
68
- "ECDHE-ECDSA-AES128-GCM-SHA256:"
69
- "ECDHE-RSA-AES128-GCM-SHA256:"
70
- "ECDHE-ECDSA-AES256-SHA384:"
71
- "ECDHE-RSA-AES256-SHA384:"
72
- "ECDHE-ECDSA-AES128-SHA256:"
73
- "ECDHE-RSA-AES128-SHA256"
74
- )
62
+ ssl_context.minimum_version = ssl.TLSVersion.TLSv1_3
75
63
  ssl_context.load_cert_chain(certfile=str(cert_path), keyfile=str(key_path))
76
64
  ssl_context.verify_mode = ssl.CERT_REQUIRED
77
65
  return ssl_context
78
66
 
79
67
 
80
68
  def ssl_context_for_root(
81
- ca_cert_file: str, *, check_permissions: bool = True, log: Optional[logging.Logger] = None
69
+ ca_cert_file: str, *, check_permissions: bool = True, log: logging.Logger | None = None
82
70
  ) -> ssl.SSLContext:
83
71
  if check_permissions:
84
72
  verify_ssl_certs_and_keys([Path(ca_cert_file)], [], log)
@@ -94,7 +82,7 @@ def ssl_context_for_client(
94
82
  key_path: Path,
95
83
  *,
96
84
  check_permissions: bool = True,
97
- log: Optional[logging.Logger] = None,
85
+ log: logging.Logger | None = None,
98
86
  ) -> ssl.SSLContext:
99
87
  if check_permissions:
100
88
  verify_ssl_certs_and_keys([ca_cert, cert_path], [ca_key, key_path], log)
@@ -116,7 +104,7 @@ def calculate_node_id(cert_path: Path) -> bytes32:
116
104
  @final
117
105
  @dataclass
118
106
  class ChiaServer:
119
- _port: Optional[int]
107
+ _port: int | None
120
108
  _local_type: NodeType
121
109
  _local_capabilities_for_handshake: list[tuple[uint16, str]]
122
110
  _ping_interval: int
@@ -131,23 +119,23 @@ class ChiaServer:
131
119
  ssl_context: ssl.SSLContext
132
120
  ssl_client_context: ssl.SSLContext
133
121
  node_id: bytes32
134
- exempt_peer_networks: list[Union[IPv4Network, IPv6Network]]
135
- class_for_type: dict[NodeType, type[ApiProtocol]]
122
+ exempt_peer_networks: list[IPv4Network | IPv6Network]
123
+ stub_metadata_for_type: dict[NodeType, ApiMetadata]
136
124
  all_connections: dict[bytes32, WSChiaConnection] = field(default_factory=dict)
137
- on_connect: Optional[ConnectionCallback] = None
125
+ on_connect: ConnectionCallback | None = None
138
126
  shut_down_event: asyncio.Event = field(default_factory=asyncio.Event)
139
- introducer_peers: Optional[IntroducerPeers] = None
140
- gc_task: Optional[asyncio.Task[None]] = None
141
- webserver: Optional[WebServer] = None
142
- connection_close_task: Optional[asyncio.Task[None]] = None
143
- received_message_callback: Optional[ConnectionCallback] = None
127
+ introducer_peers: IntroducerPeers | None = None
128
+ gc_task: asyncio.Task[None] | None = None
129
+ webserver: WebServer | None = None
130
+ connection_close_task: asyncio.Task[None] | None = None
131
+ received_message_callback: ConnectionCallback | None = None
144
132
  banned_peers: dict[str, float] = field(default_factory=dict)
145
133
  invalid_protocol_ban_seconds: int = INVALID_PROTOCOL_BAN_SECONDS
146
134
 
147
135
  @classmethod
148
136
  def create(
149
137
  cls,
150
- port: Optional[int],
138
+ port: int | None,
151
139
  node: Any,
152
140
  api: ApiProtocol,
153
141
  local_type: NodeType,
@@ -160,7 +148,7 @@ class ChiaServer:
160
148
  config: dict[str, Any],
161
149
  private_ca_crt_key: tuple[Path, Path],
162
150
  chia_ca_crt_key: tuple[Path, Path],
163
- class_for_type: dict[NodeType, type[ApiProtocol]],
151
+ stub_metadata_for_type: dict[NodeType, ApiMetadata],
164
152
  name: str = __name__,
165
153
  ) -> ChiaServer:
166
154
  log = logging.getLogger(name)
@@ -241,7 +229,7 @@ class ChiaServer:
241
229
  node_id=calculate_node_id(node_id_cert_path),
242
230
  exempt_peer_networks=[ip_network(net, strict=False) for net in config.get("exempt_peer_networks", [])],
243
231
  introducer_peers=IntroducerPeers() if local_type is NodeType.INTRODUCER else None,
244
- class_for_type=class_for_type,
232
+ stub_metadata_for_type=stub_metadata_for_type,
245
233
  )
246
234
 
247
235
  def set_received_message_callback(self, callback: ConnectionCallback) -> None:
@@ -285,7 +273,7 @@ class ChiaServer:
285
273
  async def start(
286
274
  self,
287
275
  prefer_ipv6: bool,
288
- on_connect: Optional[ConnectionCallback] = None,
276
+ on_connect: ConnectionCallback | None = None,
289
277
  ) -> None:
290
278
  if self.webserver is not None:
291
279
  raise RuntimeError("ChiaServer already started")
@@ -326,7 +314,7 @@ class ChiaServer:
326
314
  peer_id = bytes32(der_cert.fingerprint(hashes.SHA256()))
327
315
  if peer_id == self.node_id:
328
316
  return ws
329
- connection: Optional[WSChiaConnection] = None
317
+ connection: WSChiaConnection | None = None
330
318
  try:
331
319
  connection = WSChiaConnection.create(
332
320
  local_type=self._local_type,
@@ -341,7 +329,8 @@ class ChiaServer:
341
329
  inbound_rate_limit_percent=self._inbound_rate_limit_percent,
342
330
  outbound_rate_limit_percent=self._outbound_rate_limit_percent,
343
331
  local_capabilities_for_handshake=self._local_capabilities_for_handshake,
344
- class_for_type=self.class_for_type,
332
+ stub_metadata_for_type=self.stub_metadata_for_type,
333
+ exempt_peer_networks=self.exempt_peer_networks,
345
334
  )
346
335
  await connection.perform_handshake(self._network_id, self.get_port(), self._local_type)
347
336
  assert connection.connection_type is not None, "handshake failed to set connection type, still None"
@@ -384,7 +373,7 @@ class ChiaServer:
384
373
  return ws
385
374
 
386
375
  async def connection_added(
387
- self, connection: WSChiaConnection, on_connect: Optional[ConnectionCallback] = None
376
+ self, connection: WSChiaConnection, on_connect: ConnectionCallback | None = None
388
377
  ) -> None:
389
378
  # If we already had a connection to this peer_id, close the old one. This is secure because peer_ids are based
390
379
  # on TLS public keys
@@ -416,7 +405,7 @@ class ChiaServer:
416
405
  async def start_client(
417
406
  self,
418
407
  target_node: PeerInfo,
419
- on_connect: Optional[ConnectionCallback] = None,
408
+ on_connect: ConnectionCallback | None = None,
420
409
  is_feeler: bool = False,
421
410
  ) -> bool:
422
411
  """
@@ -432,7 +421,7 @@ class ChiaServer:
432
421
  return False
433
422
 
434
423
  session = None
435
- connection: Optional[WSChiaConnection] = None
424
+ connection: WSChiaConnection | None = None
436
425
  try:
437
426
  # Crawler/DNS introducer usually uses a lower timeout than the default
438
427
  timeout_value = float(self.config.get("peer_connect_timeout", 30))
@@ -492,8 +481,9 @@ class ChiaServer:
492
481
  inbound_rate_limit_percent=self._inbound_rate_limit_percent,
493
482
  outbound_rate_limit_percent=self._outbound_rate_limit_percent,
494
483
  local_capabilities_for_handshake=self._local_capabilities_for_handshake,
495
- class_for_type=self.class_for_type,
484
+ stub_metadata_for_type=self.stub_metadata_for_type,
496
485
  session=session,
486
+ exempt_peer_networks=self.exempt_peer_networks,
497
487
  )
498
488
  await connection.perform_handshake(self._network_id, server_port, self._local_type)
499
489
  await self.connection_added(connection, on_connect)
@@ -561,15 +551,14 @@ class ChiaServer:
561
551
  f"Trying to ban trusted peer {connection.peer_info.host} for {ban_time}, but will not ban"
562
552
  )
563
553
  ban_time = 0
564
- if ban_time > 0:
565
- ban_until: float = time.time() + ban_time
566
- self.log.warning(f"Banning {connection.peer_info.host} for {ban_time} seconds")
567
- if connection.peer_info.host in self.banned_peers:
568
- self.banned_peers[connection.peer_info.host] = max(
569
- ban_until, self.banned_peers[connection.peer_info.host]
554
+ elif is_in_network(connection.peer_info.host, self.exempt_peer_networks):
555
+ self.log.warning(
556
+ f"Trying to ban exempt peer {connection.peer_info.host} for {ban_time}, but will not ban"
570
557
  )
571
- else:
572
- self.banned_peers[connection.peer_info.host] = ban_until
558
+ ban_time = 0
559
+
560
+ if ban_time > 0:
561
+ self.ban_peer(connection.peer_info.host, ban_time)
573
562
 
574
563
  present_connection = self.all_connections.get(connection.peer_node_id)
575
564
  if present_connection is connection:
@@ -607,7 +596,7 @@ class ChiaServer:
607
596
  self,
608
597
  messages: list[Message],
609
598
  node_type: NodeType,
610
- exclude: Optional[bytes32] = None,
599
+ exclude: bytes32 | None = None,
611
600
  ) -> None:
612
601
  await self.validate_broadcast_message_type(messages, node_type)
613
602
  for _, connection in self.all_connections.items():
@@ -620,7 +609,7 @@ class ChiaServer:
620
609
  messages: list[Message],
621
610
  node_type: NodeType,
622
611
  predicate: Callable[[WSChiaConnection], bool],
623
- exclude: Optional[bytes32] = None,
612
+ exclude: bytes32 | None = None,
624
613
  ) -> None:
625
614
  await self.validate_broadcast_message_type(messages, node_type)
626
615
  for _, connection in self.all_connections.items():
@@ -635,8 +624,8 @@ class ChiaServer:
635
624
  await connection.send_message(message)
636
625
 
637
626
  async def call_api_of_specific(
638
- self, request_method: Callable[..., Awaitable[Optional[Message]]], message_data: Streamable, node_id: bytes32
639
- ) -> Optional[Any]:
627
+ self, request_method: Callable[..., Awaitable[Message | None]], message_data: Streamable, node_id: bytes32
628
+ ) -> Any | None:
640
629
  if node_id in self.all_connections:
641
630
  connection = self.all_connections[node_id]
642
631
  return await connection.call_api(request_method, message_data)
@@ -644,7 +633,7 @@ class ChiaServer:
644
633
  return None
645
634
 
646
635
  def get_connections(
647
- self, node_type: Optional[NodeType] = None, *, outbound: Optional[bool] = None
636
+ self, node_type: NodeType | None = None, *, outbound: bool | None = None
648
637
  ) -> list[WSChiaConnection]:
649
638
  result = []
650
639
  for _, connection in self.all_connections.items():
@@ -680,7 +669,7 @@ class ChiaServer:
680
669
  await self.webserver.await_closed()
681
670
  self.webserver = None
682
671
 
683
- async def get_peer_info(self) -> Optional[PeerInfo]:
672
+ async def get_peer_info(self) -> PeerInfo | None:
684
673
  ip = None
685
674
 
686
675
  try:
@@ -749,3 +738,11 @@ class ChiaServer:
749
738
 
750
739
  def set_capabilities(self, capabilities: list[tuple[uint16, str]]) -> None:
751
740
  self._local_capabilities_for_handshake = capabilities
741
+
742
+ def ban_peer(self, host: str, ban_time: int) -> None:
743
+ ban_until: float = time.time() + ban_time
744
+ self.log.warning(f"Banning {host} for {ban_time} seconds")
745
+ if host in self.banned_peers:
746
+ self.banned_peers[host] = max(ban_until, self.banned_peers[host])
747
+ else:
748
+ self.banned_peers[host] = ban_until
@@ -8,7 +8,7 @@ import signal
8
8
  import sys
9
9
  from collections.abc import AsyncIterator
10
10
  from types import FrameType
11
- from typing import Optional, final
11
+ from typing import final
12
12
 
13
13
  from typing_extensions import Protocol
14
14
 
@@ -19,7 +19,7 @@ class Handler(Protocol):
19
19
  def __call__(
20
20
  self,
21
21
  signal_: signal.Signals,
22
- stack_frame: Optional[FrameType],
22
+ stack_frame: FrameType | None,
23
23
  loop: asyncio.AbstractEventLoop,
24
24
  ) -> None: ...
25
25
 
@@ -28,7 +28,7 @@ class AsyncHandler(Protocol):
28
28
  async def __call__(
29
29
  self,
30
30
  signal_: signal.Signals,
31
- stack_frame: Optional[FrameType],
31
+ stack_frame: FrameType | None,
32
32
  loop: asyncio.AbstractEventLoop,
33
33
  ) -> None: ...
34
34
 
@@ -55,7 +55,7 @@ class SignalHandlers:
55
55
  def loop_safe_sync_signal_handler_for_async(
56
56
  self,
57
57
  signal_: signal.Signals,
58
- stack_frame: Optional[FrameType],
58
+ stack_frame: FrameType | None,
59
59
  loop: asyncio.AbstractEventLoop,
60
60
  handler: AsyncHandler,
61
61
  ) -> None:
@@ -69,7 +69,7 @@ class SignalHandlers:
69
69
  def threadsafe_sync_signal_handler_for_async(
70
70
  self,
71
71
  signal_: signal.Signals,
72
- stack_frame: Optional[FrameType],
72
+ stack_frame: FrameType | None,
73
73
  loop: asyncio.AbstractEventLoop,
74
74
  handler: AsyncHandler,
75
75
  ) -> None:
@@ -90,7 +90,7 @@ class SignalHandlers:
90
90
 
91
91
  def ensure_signal_object_not_int(
92
92
  signal_: int,
93
- stack_frame: Optional[FrameType],
93
+ stack_frame: FrameType | None,
94
94
  *,
95
95
  handler: Handler = handler,
96
96
  loop: asyncio.AbstractEventLoop = loop,
@@ -5,10 +5,10 @@ import contextlib
5
5
  import logging
6
6
  import os
7
7
  import signal
8
- from collections.abc import AsyncIterator, Awaitable, Coroutine
8
+ from collections.abc import AsyncIterator, Awaitable, Callable, Coroutine
9
9
  from pathlib import Path
10
10
  from types import FrameType
11
- from typing import Any, Callable, Generic, Optional, TypeVar, cast
11
+ from typing import Any, Generic, TypeVar, cast
12
12
 
13
13
  from chia_rs.sized_ints import uint16
14
14
 
@@ -16,7 +16,7 @@ from chia.daemon.server import service_launch_lock_path
16
16
  from chia.protocols.outbound_message import NodeType
17
17
  from chia.protocols.shared_protocol import default_capabilities
18
18
  from chia.rpc.rpc_server import RpcApiProtocol, RpcServer, RpcServiceProtocol, start_rpc_server
19
- from chia.server.api_protocol import ApiProtocol
19
+ from chia.server.api_protocol import ApiMetadata, ApiProtocol
20
20
  from chia.server.chia_policy import set_chia_policy
21
21
  from chia.server.server import ChiaServer
22
22
  from chia.server.signal_handlers import SignalHandlers
@@ -33,7 +33,7 @@ from chia.util.task_referencer import create_referenced_task
33
33
 
34
34
  # this is used to detect whether we are running in the main process or not, in
35
35
  # signal handlers. We need to ignore signals in the sub processes.
36
- main_pid: Optional[int] = None
36
+ main_pid: int | None = None
37
37
 
38
38
  T = TypeVar("T")
39
39
  _T_RpcServiceProtocol = TypeVar("_T_RpcServiceProtocol", bound=RpcServiceProtocol)
@@ -56,19 +56,19 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
56
56
  node: _T_RpcServiceProtocol,
57
57
  peer_api: _T_ApiProtocol,
58
58
  node_type: NodeType,
59
- advertised_port: Optional[int],
59
+ advertised_port: int | None,
60
60
  service_name: str,
61
61
  network_id: str,
62
62
  *,
63
63
  config: dict[str, Any],
64
- class_for_type: dict[NodeType, type[ApiProtocol]],
65
- upnp_ports: Optional[list[int]] = None,
66
- connect_peers: Optional[set[UnresolvedPeerInfo]] = None,
67
- on_connect_callback: Optional[Callable[[WSChiaConnection], Awaitable[None]]] = None,
68
- rpc_info: Optional[RpcInfo[_T_RpcApiProtocol]] = None,
64
+ stub_metadata_for_type: dict[NodeType, ApiMetadata],
65
+ upnp_ports: list[int] | None = None,
66
+ connect_peers: set[UnresolvedPeerInfo] | None = None,
67
+ on_connect_callback: Callable[[WSChiaConnection], Awaitable[None]] | None = None,
68
+ rpc_info: RpcInfo[_T_RpcApiProtocol] | None = None,
69
69
  connect_to_daemon: bool = True,
70
- max_request_body_size: Optional[int] = None,
71
- override_capabilities: Optional[list[tuple[uint16, str]]] = None,
70
+ max_request_body_size: int | None = None,
71
+ override_capabilities: list[tuple[uint16, str]] | None = None,
72
72
  ) -> None:
73
73
  if upnp_ports is None:
74
74
  upnp_ports = []
@@ -85,7 +85,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
85
85
  self._connect_to_daemon = connect_to_daemon
86
86
  self._node_type = node_type
87
87
  self._service_name = service_name
88
- self.rpc_server: Optional[RpcServer[_T_RpcApiProtocol]] = None
88
+ self.rpc_server: RpcServer[_T_RpcApiProtocol] | None = None
89
89
  self._network_id: str = network_id
90
90
  self.max_request_body_size = max_request_body_size
91
91
  self.reconnect_retry_seconds: int = 3
@@ -123,7 +123,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
123
123
  self.service_config,
124
124
  (private_ca_crt, private_ca_key),
125
125
  (chia_ca_crt, chia_ca_key),
126
- class_for_type=class_for_type,
126
+ stub_metadata_for_type=stub_metadata_for_type,
127
127
  name=f"{service_name}_server",
128
128
  )
129
129
  f = getattr(node, "set_server", None)
@@ -141,7 +141,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
141
141
  self._on_connect_callback = on_connect_callback
142
142
  self._advertised_port = advertised_port
143
143
  self._connect_peers = connect_peers
144
- self._connect_peers_task: Optional[asyncio.Task[None]] = None
144
+ self._connect_peers_task: asyncio.Task[None] | None = None
145
145
  self.upnp: UPnP = UPnP()
146
146
  self.stop_requested = asyncio.Event()
147
147
 
@@ -287,7 +287,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
287
287
  def _accept_signal(
288
288
  self,
289
289
  signal_: signal.Signals,
290
- stack_frame: Optional[FrameType],
290
+ stack_frame: FrameType | None,
291
291
  loop: asyncio.AbstractEventLoop,
292
292
  ) -> None:
293
293
  # we only handle signals in the main process. In the ProcessPoolExecutor
@@ -309,7 +309,7 @@ class Service(Generic[_T_RpcServiceProtocol, _T_ApiProtocol, _T_RpcApiProtocol])
309
309
  self.stop_requested.set()
310
310
 
311
311
 
312
- def async_run(coro: Coroutine[object, object, T], connection_limit: Optional[int] = None) -> T:
312
+ def async_run(coro: Coroutine[object, object, T], connection_limit: int | None = None) -> T:
313
313
  with log_exceptions(log=log, message="fatal uncaught exception"):
314
314
  if connection_limit is not None:
315
315
  set_chia_policy(connection_limit)
chia/server/upnp.py CHANGED
@@ -6,9 +6,7 @@ import threading
6
6
  from collections.abc import Iterator
7
7
  from dataclasses import dataclass, field
8
8
  from queue import Queue
9
- from typing import Optional, Union
10
-
11
- from typing_extensions import Literal
9
+ from typing import Literal
12
10
 
13
11
  log = logging.getLogger(__name__)
14
12
 
@@ -23,11 +21,11 @@ except ImportError:
23
21
 
24
22
  @dataclass
25
23
  class UPnP:
26
- _thread: Optional[threading.Thread] = None
27
- _queue: Queue[Union[tuple[Literal["remap", "release"], int], tuple[Literal["shutdown"]]]] = field(
24
+ _thread: threading.Thread | None = None
25
+ _queue: Queue[tuple[Literal["remap", "release"], int] | tuple[Literal["shutdown"]]] = field(
28
26
  default_factory=Queue,
29
27
  )
30
- _upnp: Optional[miniupnpc.UPnP] = None
28
+ _upnp: miniupnpc.UPnP | None = None
31
29
 
32
30
  @contextlib.contextmanager
33
31
  def manage(self, ports: list[int]) -> Iterator[None]: