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
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import copy
4
4
  import dataclasses
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
 
7
7
  import pytest
8
8
  from chia_rs import AugSchemeMPL, CoinSpend, G1Element, G2Element, PrivateKey, SpendBundle
@@ -59,7 +59,7 @@ def test_process_fast_forward_spends_nothing_to_do() -> None:
59
59
  original_version = dataclasses.replace(internal_mempool_item)
60
60
  singleton_ff = SingletonFastForward()
61
61
  bundle_coin_spends = singleton_ff.process_fast_forward_spends(
62
- mempool_item=internal_mempool_item, height=TEST_HEIGHT, constants=DEFAULT_CONSTANTS
62
+ mempool_item=internal_mempool_item, prev_tx_height=TEST_HEIGHT, constants=DEFAULT_CONSTANTS
63
63
  )
64
64
  assert singleton_ff == SingletonFastForward()
65
65
  assert bundle_coin_spends == original_version.bundle_coin_spends
@@ -91,7 +91,7 @@ def test_process_fast_forward_spends_latest_unspent() -> None:
91
91
  original_version = dataclasses.replace(internal_mempool_item)
92
92
  singleton_ff = SingletonFastForward()
93
93
  bundle_coin_spends = singleton_ff.process_fast_forward_spends(
94
- mempool_item=internal_mempool_item, height=TEST_HEIGHT, constants=DEFAULT_CONSTANTS
94
+ mempool_item=internal_mempool_item, prev_tx_height=TEST_HEIGHT, constants=DEFAULT_CONSTANTS
95
95
  )
96
96
  child_coin = item.bundle_coin_spends[test_coin.name()].additions[0]
97
97
  expected_fast_forward_spends = {
@@ -199,10 +199,10 @@ async def make_and_send_spend_bundle(
199
199
  is_eligible_for_ff: bool = True,
200
200
  *,
201
201
  is_launcher_coin: bool = False,
202
- signing_puzzle: Optional[Program] = None,
203
- signing_coin: Optional[Coin] = None,
202
+ signing_puzzle: Program | None = None,
203
+ signing_coin: Coin | None = None,
204
204
  aggsig: G2Element = G2Element(),
205
- ) -> tuple[MempoolInclusionStatus, Optional[Err]]:
205
+ ) -> tuple[MempoolInclusionStatus, Err | None]:
206
206
  if is_launcher_coin or not is_eligible_for_ff:
207
207
  assert signing_puzzle is not None
208
208
  assert signing_coin is not None
@@ -7,7 +7,7 @@ import logging.config
7
7
  import pathlib
8
8
  import sys
9
9
  import threading
10
- from typing import Optional, final, overload
10
+ from typing import final, overload
11
11
 
12
12
  from chia._tests.util.misc import create_logger
13
13
  from chia.server.chia_policy import ChiaPolicy
@@ -47,7 +47,7 @@ async def async_main(
47
47
  shutdown_path: pathlib.Path,
48
48
  ip: str = "127.0.0.1",
49
49
  port: int = 8444,
50
- port_holder: Optional[list[int]] = None,
50
+ port_holder: list[int] | None = None,
51
51
  ) -> None: ...
52
52
 
53
53
 
@@ -58,22 +58,22 @@ async def async_main(
58
58
  thread_end_event: threading.Event,
59
59
  ip: str = "127.0.0.1",
60
60
  port: int = 8444,
61
- port_holder: Optional[list[int]] = None,
61
+ port_holder: list[int] | None = None,
62
62
  ) -> None: ...
63
63
 
64
64
 
65
65
  async def async_main(
66
66
  *,
67
67
  out_path: pathlib.Path,
68
- shutdown_path: Optional[pathlib.Path] = None,
69
- thread_end_event: Optional[threading.Event] = None,
68
+ shutdown_path: pathlib.Path | None = None,
69
+ thread_end_event: threading.Event | None = None,
70
70
  ip: str = "127.0.0.1",
71
71
  port: int = 8444,
72
- port_holder: Optional[list[int]] = None,
72
+ port_holder: list[int] | None = None,
73
73
  ) -> None:
74
74
  with out_path.open(mode="w") as file:
75
75
  logger = create_logger(file=file)
76
- file_task: Optional[asyncio.Task[None]] = None
76
+ file_task: asyncio.Task[None] | None = None
77
77
  if thread_end_event is None:
78
78
  assert shutdown_path is not None
79
79
  thread_end_event = threading.Event()
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  import asyncio
4
4
  import logging
5
5
  import time
6
- from typing import Optional
7
6
 
8
7
  import pytest
9
8
  from aiohttp import ClientSession, ClientTimeout, WSCloseCode, WSMessage, WSMsgType, WSServerHandshakeError
@@ -36,7 +35,7 @@ def not_localhost(host: str) -> bool:
36
35
  class FakeRateLimiter:
37
36
  def process_msg_and_check(
38
37
  self, message: Message, our_capabilities: list[Capability], peer_capabilities: list[Capability]
39
- ) -> Optional[str]:
38
+ ) -> str | None:
40
39
  return None
41
40
 
42
41
 
@@ -30,7 +30,9 @@ def test_base_event_loop_has_methods() -> None:
30
30
  assert hasattr(base_selector_event_loop, "create_server")
31
31
  method = getattr(base_selector_event_loop, "create_server")
32
32
  assert inspect.ismethod(method)
33
- if sys.version_info >= (3, 11):
33
+ if sys.version_info >= (3, 13):
34
+ expected_signature = "(protocol_factory, host=None, port=None, *, family=<AddressFamily.AF_UNSPEC: 0>, flags=<AddressInfo.AI_PASSIVE: 1>, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None, keep_alive=None, ssl_handshake_timeout=None, ssl_shutdown_timeout=None, start_serving=True)" # noqa: E501
35
+ elif sys.version_info >= (3, 11):
34
36
  expected_signature = "(protocol_factory, host=None, port=None, *, family=<AddressFamily.AF_UNSPEC: 0>, flags=<AddressInfo.AI_PASSIVE: 1>, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None, ssl_handshake_timeout=None, ssl_shutdown_timeout=None, start_serving=True)" # noqa: E501
35
37
  else:
36
38
  expected_signature = "(protocol_factory, host=None, port=None, *, family=<AddressFamily.AF_UNSPEC: 0>, flags=<AddressInfo.AI_PASSIVE: 1>, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None, ssl_handshake_timeout=None, start_serving=True)" # noqa: E501
@@ -62,7 +64,7 @@ def test_base_event_loop_has_methods() -> None:
62
64
  )
63
65
 
64
66
  assert inspect.isfunction(_chia_create_server)
65
- expected_signature = "(cls: 'Any', protocol_factory: '_ProtocolFactory', host: 'Any', port: 'Any', *, family: 'socket.AddressFamily' = <AddressFamily.AF_UNSPEC: 0>, flags: 'socket.AddressInfo' = <AddressInfo.AI_PASSIVE: 1>, sock: 'Any' = None, backlog: 'int' = 100, ssl: '_SSLContext' = None, reuse_address: 'Optional[bool]' = None, reuse_port: 'Optional[bool]' = None, ssl_handshake_timeout: 'Optional[float]' = 30, start_serving: 'bool' = True) -> 'PausableServer'" # noqa: E501
67
+ expected_signature = "(cls: 'Any', protocol_factory: '_ProtocolFactory', host: 'Any', port: 'Any', *, family: 'socket.AddressFamily' = <AddressFamily.AF_UNSPEC: 0>, flags: 'socket.AddressInfo' = <AddressInfo.AI_PASSIVE: 1>, sock: 'Any' = None, backlog: 'int' = 100, ssl: '_SSLContext' = None, reuse_address: 'bool | None' = None, reuse_port: 'bool | None' = None, ssl_handshake_timeout: 'float | None' = 30, start_serving: 'bool' = True) -> 'PausableServer'" # noqa: E501
66
68
  assert str(inspect.signature(_chia_create_server)) == expected_signature
67
69
 
68
70
  class EchoProtocol(asyncio.Protocol):
@@ -103,7 +105,13 @@ def test_base_event_loop_has_methods() -> None:
103
105
 
104
106
  for func in ("_attach", "_detach"):
105
107
  assert hasattr(base_server, func)
106
- method = getattr(base_server, func)
107
- assert str(inspect.signature(method)) == "()"
108
+ if sys.version_info >= (3, 13):
109
+ # https://github.com/python/cpython/blob/bcee1c322115c581da27600f2ae55e5439c027eb/Lib/asyncio/base_events.py#L296
110
+ method = getattr(base_server, func)
111
+ assert str(inspect.signature(method)) == "(transport)"
112
+ else:
113
+ method = getattr(base_server, func)
114
+ assert str(inspect.signature(method)) == "()"
115
+
108
116
  finally:
109
117
  selector_event_loop.close()
@@ -10,7 +10,6 @@ import sys
10
10
  import threading
11
11
  from collections.abc import AsyncIterator
12
12
  from dataclasses import dataclass, field
13
- from typing import Optional
14
13
 
15
14
  import anyio
16
15
  import pytest
@@ -45,8 +44,8 @@ async def serve_in_thread(
45
44
 
46
45
  @dataclass
47
46
  class Client:
48
- reader: Optional[asyncio.StreamReader]
49
- writer: Optional[asyncio.StreamWriter]
47
+ reader: asyncio.StreamReader | None
48
+ writer: asyncio.StreamWriter | None
50
49
 
51
50
  @classmethod
52
51
  async def open(cls, ip: str, port: int) -> Client:
@@ -95,10 +94,10 @@ class ServeInThread:
95
94
  requested_port: int
96
95
  out_path: pathlib.Path
97
96
  connection_limit: int = 25
98
- original_connection_limit: Optional[int] = None
99
- loop: Optional[asyncio.AbstractEventLoop] = None
100
- server_task: Optional[asyncio.Task[None]] = None
101
- thread: Optional[threading.Thread] = None
97
+ original_connection_limit: int | None = None
98
+ loop: asyncio.AbstractEventLoop | None = None
99
+ server_task: asyncio.Task[None] | None = None
100
+ thread: threading.Thread | None = None
102
101
  thread_end_event: threading.Event = field(default_factory=threading.Event)
103
102
  port_holder: list[int] = field(default_factory=list)
104
103
 
@@ -189,7 +188,7 @@ async def test_loop(tmp_path: pathlib.Path) -> None:
189
188
  await asyncio.sleep(adjusted_timeout(5))
190
189
 
191
190
  writer = None
192
- post_connection_error: Optional[str] = None
191
+ post_connection_error: str | None = None
193
192
  try:
194
193
  logger.info(" ==== attempting a single new connection")
195
194
  with anyio.fail_after(delay=adjusted_timeout(1)):
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Union
5
4
 
6
5
  import pytest
7
6
  from chia_rs.sized_ints import uint32
@@ -24,7 +23,6 @@ from chia.types.peer_info import PeerInfo
24
23
  rl_v2 = [Capability.BASE, Capability.BLOCK_HEADERS, Capability.RATE_LIMITS_V2]
25
24
  rl_v1 = [Capability.BASE]
26
25
  node_with_params_b = node_with_params
27
- test_different_versions_results: list[int] = []
28
26
 
29
27
 
30
28
  @dataclass
@@ -66,7 +64,7 @@ async def test_limits_v2(incoming: bool, tx_msg: bool, limit_size: bool, monkeyp
66
64
  message_data = b"\0" * 1024
67
65
  msg_type = ProtocolMessageTypes.new_transaction
68
66
 
69
- limits: dict[ProtocolMessageTypes, Union[RLSettings, Unlimited]]
67
+ limits: dict[ProtocolMessageTypes, RLSettings | Unlimited]
70
68
 
71
69
  if limit_size:
72
70
  agg_limit = RLSettings(False, count * 2, len(message_data), count * len(message_data))
@@ -80,7 +78,7 @@ async def test_limits_v2(incoming: bool, tx_msg: bool, limit_size: bool, monkeyp
80
78
 
81
79
  def mock_get_limits(
82
80
  our_capabilities: list[Capability], peer_capabilities: list[Capability]
83
- ) -> tuple[dict[ProtocolMessageTypes, Union[RLSettings, Unlimited]], RLSettings]:
81
+ ) -> tuple[dict[ProtocolMessageTypes, RLSettings | Unlimited], RLSettings]:
84
82
  return limits, agg_limit
85
83
 
86
84
  import chia.server.rate_limits
@@ -418,11 +416,14 @@ async def test_different_versions(
418
416
  # The following code checks whether all of the runs resulted in the same number of items in "rate_limits_tx",
419
417
  # which would mean the same rate limits are always used. This should not happen, since two nodes with V2
420
418
  # will use V2.
421
- total_tx_msg_count = len(get_rate_limits_to_use(a_con.local_capabilities, a_con.peer_capabilities))
419
+ rate_limits = get_rate_limits_to_use(a_con.local_capabilities, a_con.peer_capabilities)[0]
420
+ limit = rate_limits[ProtocolMessageTypes.request_header_blocks]
421
+ assert isinstance(limit, RLSettings)
422
422
 
423
- test_different_versions_results.append(total_tx_msg_count)
424
- if len(test_different_versions_results) >= 4:
425
- assert len(set(test_different_versions_results)) >= 2
423
+ if Capability.RATE_LIMITS_V2 in a_con.local_capabilities and Capability.RATE_LIMITS_V2 in a_con.peer_capabilities:
424
+ assert limit.frequency == 5000
425
+ else:
426
+ assert limit.frequency == 500
426
427
 
427
428
 
428
429
  @pytest.mark.anyio
@@ -1,8 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
+ from collections.abc import Callable
4
5
  from dataclasses import dataclass
5
- from typing import Callable, ClassVar, cast
6
+ from typing import ClassVar, cast
6
7
 
7
8
  import pytest
8
9
  from chia_rs.sized_bytes import bytes32
@@ -10,6 +11,7 @@ from chia_rs.sized_ints import int16, uint32
10
11
  from packaging.version import Version
11
12
 
12
13
  from chia import __version__
14
+ from chia._tests.conftest import ConsensusMode
13
15
  from chia._tests.connection_utils import connect_and_get_peer
14
16
  from chia._tests.util.setup_nodes import SimulatorsAndWalletsServices
15
17
  from chia._tests.util.time_out_assert import time_out_assert
@@ -22,6 +24,7 @@ from chia.protocols.shared_protocol import Error, protocol_version
22
24
  from chia.protocols.wallet_protocol import RejectHeaderRequest
23
25
  from chia.server.api_protocol import ApiMetadata
24
26
  from chia.server.server import ChiaServer
27
+ from chia.server.ssl_context import chia_ssl_ca_paths, private_ssl_ca_paths
25
28
  from chia.server.ws_connection import WSChiaConnection, error_response_version
26
29
  from chia.simulator.block_tools import BlockTools
27
30
  from chia.types.peer_info import PeerInfo
@@ -224,3 +227,60 @@ async def test_get_peer_info(bt: BlockTools) -> None:
224
227
  node_service = await create_full_node_service(bt.root_path, bt.config, bt.constants, connect_to_daemon=False)
225
228
  local_port = node_service._server.get_port()
226
229
  assert local_port is not None
230
+
231
+
232
+ class FakeConnection:
233
+ connection_type: NodeType = NodeType.FULL_NODE
234
+ peer_node_id: bytes32 = bytes32(b"\x00" * 32)
235
+
236
+ def __init__(self, peer_info: PeerInfo) -> None:
237
+ self.peer_info = peer_info
238
+
239
+ def cancel_tasks(self) -> None:
240
+ pass
241
+
242
+
243
+ @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="save time")
244
+ @pytest.mark.anyio
245
+ async def test_connection_closed_banning(bt: BlockTools, caplog: pytest.LogCaptureFixture) -> None:
246
+ test_config = bt.config["full_node"]
247
+ private_ca_crt, private_ca_key = private_ssl_ca_paths(bt.root_path, bt.config)
248
+ chia_ca_crt, chia_ca_key = chia_ssl_ca_paths(bt.root_path, bt.config)
249
+
250
+ # need to add in exempt networks to config
251
+ test_config["exempt_peer_networks"] = ["10.1.1.0/16"]
252
+ test_config["trusted_cidrs"] = ["34.34.34.34/32"]
253
+
254
+ my_test_server = ChiaServer.create(
255
+ port=None,
256
+ node=None,
257
+ api=FullNodeAPI(None), # type: ignore[arg-type]
258
+ local_type=NodeType.FULL_NODE,
259
+ ping_interval=0,
260
+ network_id="Fake",
261
+ root_path=bt.root_path,
262
+ capabilities=[],
263
+ outbound_rate_limit_percent=100,
264
+ inbound_rate_limit_percent=100,
265
+ config=test_config,
266
+ private_ca_crt_key=(private_ca_crt, private_ca_key),
267
+ chia_ca_crt_key=(chia_ca_crt, chia_ca_key),
268
+ stub_metadata_for_type={},
269
+ name="Hello",
270
+ )
271
+
272
+ with caplog.at_level(logging.WARNING):
273
+ # testing exempt_peer_networks
274
+ exempt_peer = FakeConnection(peer_info=PeerInfo("10.1.1.1", 8444))
275
+ await my_test_server.connection_closed(cast(WSChiaConnection, exempt_peer), ban_time=60)
276
+ assert f"Trying to ban exempt peer {exempt_peer.peer_info.host} for 60, but will not ban" in caplog.text
277
+
278
+ # testing localhost exemption
279
+ localhost_peer = FakeConnection(peer_info=PeerInfo("127.0.0.1", 8444))
280
+ await my_test_server.connection_closed(cast(WSChiaConnection, localhost_peer), ban_time=60)
281
+ assert "Trying to ban localhost for 60, but will not ban" in caplog.text
282
+
283
+ # testing trusted peers exemption
284
+ trusted_peer = FakeConnection(peer_info=PeerInfo("34.34.34.34", 8444))
285
+ await my_test_server.connection_closed(cast(WSChiaConnection, trusted_peer), ban_time=60)
286
+ assert f"Trying to ban trusted peer {trusted_peer.peer_info.host} for 60, but will not ban" in caplog.text
@@ -7,7 +7,7 @@ import sys
7
7
  import time
8
8
  from collections.abc import AsyncIterator
9
9
  from pathlib import Path
10
- from typing import Any, Optional, cast
10
+ from typing import Any, cast
11
11
 
12
12
  import aiohttp.client_exceptions
13
13
  import pytest
@@ -114,7 +114,7 @@ async def test_daemon_terminates(signal_number: signal.Signals, chia_root: ChiaR
114
114
  async def test_services_terminate(
115
115
  signal_number: signal.Signals,
116
116
  chia_root: ChiaRoot,
117
- create_service: Optional[CreateServiceProtocol],
117
+ create_service: CreateServiceProtocol | None,
118
118
  module_path: str,
119
119
  service_config_name: str,
120
120
  ) -> None:
@@ -9,7 +9,7 @@ import aiohttp
9
9
  import pytest
10
10
  from chia_rs.sized_bytes import bytes32
11
11
 
12
- from chia.apis import ApiProtocolRegistry
12
+ from chia.apis import StubMetadataRegistry
13
13
  from chia.protocols.outbound_message import NodeType
14
14
  from chia.protocols.shared_protocol import default_capabilities
15
15
  from chia.server.server import ChiaServer, ssl_context_for_client
@@ -38,7 +38,7 @@ async def establish_connection(server: ChiaServer, self_hostname: str, ssl_conte
38
38
  100,
39
39
  30,
40
40
  local_capabilities_for_handshake=default_capabilities[NodeType.FULL_NODE],
41
- class_for_type=ApiProtocolRegistry,
41
+ stub_metadata_for_type=StubMetadataRegistry,
42
42
  )
43
43
  await wsc.perform_handshake(server._network_id, dummy_port, NodeType.FULL_NODE)
44
44
  await wsc.close()
@@ -58,9 +58,7 @@ async def test_basics(softfork_height: int, bt: BlockTools) -> None:
58
58
  wallet_tool = bt.get_pool_wallet_tool()
59
59
  ph = wallet_tool.get_new_puzzlehash()
60
60
  num_blocks = 3
61
- blocks = bt.get_consecutive_blocks(
62
- num_blocks, [], guarantee_transaction_block=True, pool_reward_puzzle_hash=ph, farmer_reward_puzzle_hash=ph
63
- )
61
+ blocks = bt.get_consecutive_blocks(num_blocks, [], guarantee_transaction_block=True, farmer_reward_puzzle_hash=ph)
64
62
  coinbase = None
65
63
  for coin in blocks[2].get_included_reward_coins():
66
64
  if coin.puzzle_hash == ph and coin.amount == 250000000000:
@@ -124,9 +122,7 @@ async def test_mempool_mode(softfork_height: int, bt: BlockTools) -> None:
124
122
  ph = wallet_tool.get_new_puzzlehash()
125
123
 
126
124
  num_blocks = 3
127
- blocks = bt.get_consecutive_blocks(
128
- num_blocks, [], guarantee_transaction_block=True, pool_reward_puzzle_hash=ph, farmer_reward_puzzle_hash=ph
129
- )
125
+ blocks = bt.get_consecutive_blocks(num_blocks, [], guarantee_transaction_block=True, farmer_reward_puzzle_hash=ph)
130
126
 
131
127
  coinbase = None
132
128
  for coin in blocks[2].get_included_reward_coins():
@@ -3,14 +3,13 @@ from __future__ import annotations
3
3
  import dataclasses
4
4
  import logging
5
5
  import operator
6
- import sys
7
6
  import time
8
- from collections.abc import Awaitable
7
+ from collections.abc import Awaitable, Callable
9
8
  from math import ceil
10
9
  from os import mkdir
11
10
  from pathlib import Path
12
11
  from shutil import copy
13
- from typing import Any, Callable, Union, cast
12
+ from typing import Any, cast
14
13
 
15
14
  import pytest
16
15
  from chia_rs.sized_bytes import bytes32
@@ -360,11 +359,10 @@ def test_plot_matches_filter(filter_item: FilterItem, match: bool) -> None:
360
359
  ],
361
360
  )
362
361
  @pytest.mark.anyio
363
- @pytest.mark.skipif(sys.platform == "win32", reason="avoiding crashes on windows until we fix this (crashing workers)")
364
362
  async def test_farmer_get_harvester_plots_endpoints(
365
363
  harvester_farmer_environment: HarvesterFarmerEnvironment,
366
364
  endpoint: Callable[[FarmerRpcClient, PaginatedRequestData], Awaitable[dict[str, Any]]],
367
- filtering: Union[list[FilterItem], list[str]],
365
+ filtering: list[FilterItem] | list[str],
368
366
  sort_key: str,
369
367
  reverse: bool,
370
368
  expected_plot_count: int,
@@ -19,7 +19,6 @@ async def test_basic_filter_test(simulator_and_wallet):
19
19
  10,
20
20
  guarantee_transaction_block=True,
21
21
  farmer_reward_puzzle_hash=ph,
22
- pool_reward_puzzle_hash=ph,
23
22
  )
24
23
  for i in range(1, num_blocks):
25
24
  byte_array_tx: list[bytes] = []
@@ -9,6 +9,7 @@ from chia import __version__
9
9
  from chia._tests.blockchain.blockchain_test_utils import _validate_and_add_block
10
10
  from chia._tests.conftest import ConsensusMode
11
11
  from chia._tests.connection_utils import connect_and_get_peer
12
+ from chia._tests.core.full_node.test_full_node import find_reward_coin
12
13
  from chia._tests.util.rpc import validate_get_routes
13
14
  from chia._tests.util.setup_nodes import SimulatorsAndWalletsServices
14
15
  from chia._tests.util.time_out_assert import time_out_assert
@@ -763,7 +764,6 @@ async def test_coin_name_found_in_mempool(one_node: SimulatorsAndWalletsServices
763
764
  block_list_input=blocks,
764
765
  guarantee_transaction_block=True,
765
766
  farmer_reward_puzzle_hash=ph,
766
- pool_reward_puzzle_hash=ph,
767
767
  )
768
768
  for block in blocks[-2:]:
769
769
  await full_node_api.full_node.add_block(block)
@@ -771,7 +771,7 @@ async def test_coin_name_found_in_mempool(one_node: SimulatorsAndWalletsServices
771
771
  # empty mempool
772
772
  assert len(await client.get_all_mempool_items()) == 0
773
773
 
774
- coin_to_spend = blocks[-1].get_included_reward_coins()[0]
774
+ coin_to_spend = find_reward_coin(blocks[-1], ph)
775
775
  spend_bundle = wallet.generate_signed_transaction(coin_to_spend.amount, ph_receiver, coin_to_spend)
776
776
  await client.push_tx(spend_bundle)
777
777
 
@@ -5,7 +5,6 @@ import random
5
5
  from hashlib import sha256
6
6
  from itertools import permutations
7
7
  from random import Random
8
- from typing import Optional
9
8
 
10
9
  import pytest
11
10
  from chia_rs import Coin, MerkleSet, compute_merkle_set_root, confirm_included_already_hashed
@@ -311,7 +310,7 @@ def test_validate_removals_full_list(num_coins: int, seeded_random: Random) -> N
311
310
  # the root can be computed by all the removals
312
311
  coins = make_test_coins(num_coins, seeded_random)
313
312
 
314
- coin_map: list[tuple[bytes32, Optional[Coin]]] = []
313
+ coin_map: list[tuple[bytes32, Coin | None]] = []
315
314
  removals_merkle_set = MerkleSet([coin.name() for coin in coins])
316
315
  for coin in coins:
317
316
  coin_map.append((coin.name(), coin))
@@ -4,7 +4,7 @@ import time
4
4
  from dataclasses import dataclass
5
5
  from ipaddress import IPv4Address, IPv6Address
6
6
  from socket import AF_INET, AF_INET6, SOCK_STREAM
7
- from typing import Optional, Union, cast
7
+ from typing import cast
8
8
  from unittest.mock import AsyncMock
9
9
 
10
10
  import dns
@@ -367,9 +367,9 @@ def get_mock_resolver() -> AsyncMock:
367
367
 
368
368
  # Adjust mock_resolve to accept all arguments
369
369
  async def mock_resolve(
370
- qname: Union[dns.name.Name, str],
371
- rdtype: Union[dns.rdatatype.RdataType, str] = dns.rdatatype.A,
372
- lifetime: Optional[float] = None,
370
+ qname: dns.name.Name | str,
371
+ rdtype: dns.rdatatype.RdataType | str = dns.rdatatype.A,
372
+ lifetime: float | None = None,
373
373
  ) -> RRset:
374
374
  if rdtype == "A":
375
375
  return mock_rrset_a
@@ -10,7 +10,7 @@ from multiprocessing import Pool, Queue, TimeoutError
10
10
  from pathlib import Path
11
11
  from threading import Thread
12
12
  from time import sleep
13
- from typing import Any, Optional
13
+ from typing import Any
14
14
 
15
15
  import pytest
16
16
  import yaml
@@ -41,7 +41,7 @@ def write_config(
41
41
  atomic_write: bool,
42
42
  do_sleep: bool,
43
43
  iterations: int,
44
- error_queue: Optional[Queue] = None,
44
+ error_queue: Queue | None = None,
45
45
  ):
46
46
  """
47
47
  Wait for a random amount of time and write out the config data. With a large
@@ -74,7 +74,7 @@ def write_config(
74
74
 
75
75
 
76
76
  def read_and_compare_config(
77
- root_path: Path, default_config: dict, do_sleep: bool, iterations: int, error_queue: Optional[Queue] = None
77
+ root_path: Path, default_config: dict, do_sleep: bool, iterations: int, error_queue: Queue | None = None
78
78
  ):
79
79
  """
80
80
  Wait for a random amount of time, read the config and compare with the
@@ -263,7 +263,7 @@ class TestConfig:
263
263
  Test whether multiple readers/writers encounter data corruption. When using non-atomic operations
264
264
  to write to the config, partial/incomplete writes can cause readers to yield bad/corrupt data.
265
265
  """
266
- # Artifically inflate the size of the default config. This is done to (hopefully) force
266
+ # Artificially inflate the size of the default config. This is done to (hopefully) force
267
267
  # save_config() to require multiple writes. When save_config() was using shutil.move()
268
268
  # multiple writes were observed, leading to read failures when data was partially written.
269
269
  default_config_dict["xyz"] = "x" * 32768
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Any, Optional
4
+ from typing import Any
5
5
 
6
6
  from chia_rs.sized_bytes import bytes32
7
7
  from chia_rs.sized_ints import uint32
@@ -18,7 +18,7 @@ def test_primitives() -> None:
18
18
  @dataclass(frozen=True)
19
19
  class PrimitivesTest(Streamable):
20
20
  a: uint32
21
- b: Optional[str]
21
+ b: str | None
22
22
  c: str
23
23
  d: bytes
24
24
  e: bytes32
@@ -2,8 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  import json
4
4
  import random
5
+ from collections.abc import Callable
5
6
  from dataclasses import dataclass, replace
6
- from typing import Callable, Optional
7
7
 
8
8
  import importlib_resources
9
9
  import pytest
@@ -271,7 +271,7 @@ def test_key_data_secrets_creation(
271
271
 
272
272
 
273
273
  @pytest.mark.parametrize("label", [None, "key"])
274
- def test_key_data_generate(label: Optional[str]) -> None:
274
+ def test_key_data_generate(label: str | None) -> None:
275
275
  key_data = KeyData.generate(label)
276
276
  assert key_data.private_key == AugSchemeMPL.key_gen(mnemonic_to_seed(key_data.mnemonic_str()))
277
277
  assert key_data.entropy == bytes_from_mnemonic(key_data.mnemonic_str())
@@ -343,7 +343,7 @@ def test_key_data_secrets_post_init(input_data: tuple[list[str], bytes, PrivateK
343
343
  ],
344
344
  )
345
345
  def test_key_data_post_init(
346
- input_data: tuple[uint32, G1Element, Optional[str], Optional[KeyDataSecrets]], data_type: str
346
+ input_data: tuple[uint32, G1Element, str | None, KeyDataSecrets | None], data_type: str
347
347
  ) -> None:
348
348
  with pytest.raises(KeychainKeyDataMismatch, match=data_type):
349
349
  KeyData(*input_data)
@@ -3,11 +3,12 @@ from __future__ import annotations
3
3
  import logging
4
4
  import os
5
5
  import time
6
+ from collections.abc import Callable
6
7
  from multiprocessing import Pool, TimeoutError
7
8
  from pathlib import Path
8
9
  from sys import platform
9
10
  from time import sleep
10
- from typing import Any, Callable
11
+ from typing import Any
11
12
 
12
13
  import pytest
13
14
 
@@ -4,7 +4,6 @@ import contextlib
4
4
  import dataclasses
5
5
  import logging
6
6
  import re
7
- from typing import Union
8
7
 
9
8
  import pytest
10
9
 
@@ -22,7 +21,7 @@ def logger_fixture() -> logging.Logger:
22
21
  @dataclasses.dataclass
23
22
  class ErrorCase:
24
23
  type_to_raise: type[BaseException]
25
- type_to_catch: Union[type[BaseException], tuple[type[BaseException], ...]]
24
+ type_to_catch: type[BaseException] | tuple[type[BaseException], ...]
26
25
  should_match: bool
27
26
 
28
27