chia-blockchain 2.5.0rc2__py3-none-any.whl → 2.5.1rc2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1rc2.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc2.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc2.dist-info → chia_blockchain-2.5.1rc2.dist-info}/entry_points.txt +0 -0
chia/util/default_root.py CHANGED
@@ -1,10 +1,27 @@
1
+ # Package: utils
2
+
1
3
  from __future__ import annotations
2
4
 
3
5
  import os
4
6
  from pathlib import Path
7
+ from typing import Optional
5
8
 
6
9
  DEFAULT_ROOT_PATH = Path(os.path.expanduser(os.getenv("CHIA_ROOT", "~/.chia/mainnet"))).resolve()
7
10
 
8
11
  DEFAULT_KEYS_ROOT_PATH = Path(os.path.expanduser(os.getenv("CHIA_KEYS_ROOT", "~/.chia_keys"))).resolve()
9
12
 
10
13
  SIMULATOR_ROOT_PATH = Path(os.path.expanduser(os.getenv("CHIA_SIMULATOR_ROOT", "~/.chia/simulator"))).resolve()
14
+
15
+
16
+ def resolve_root_path(*, override: Optional[Path]) -> Path:
17
+ candidates = [
18
+ override,
19
+ os.environ.get("CHIA_ROOT"),
20
+ "~/.chia/mainnet",
21
+ ]
22
+
23
+ for candidate in candidates:
24
+ if candidate is not None:
25
+ return Path(candidate).expanduser().resolve()
26
+
27
+ raise RuntimeError("unreachable: last candidate is hardcoded to be found")
chia/util/dump_keyring.py CHANGED
@@ -5,17 +5,17 @@ from __future__ import annotations
5
5
  import os
6
6
  from io import TextIOWrapper
7
7
  from pathlib import Path
8
- from typing import Any, Dict, Optional, cast
8
+ from typing import Any, Optional, cast
9
9
 
10
10
  import click
11
11
  import colorama
12
12
  import yaml
13
13
  from cryptography.exceptions import InvalidTag
14
14
 
15
- from chia.cmds.passphrase_funcs import prompt_for_passphrase, read_passphrase_from_file
15
+ from chia.cmds.passphrase_funcs import read_passphrase_from_file
16
16
  from chia.util.default_root import DEFAULT_KEYS_ROOT_PATH
17
17
  from chia.util.file_keyring import FileKeyringContent
18
- from chia.util.keyring_wrapper import DEFAULT_PASSPHRASE_IF_NO_MASTER_PASSPHRASE, KeyringWrapper
18
+ from chia.util.keyring_wrapper import DEFAULT_PASSPHRASE_IF_NO_MASTER_PASSPHRASE, KeyringWrapper, prompt_for_passphrase
19
19
 
20
20
  DEFAULT_KEYRING_YAML = DEFAULT_KEYS_ROOT_PATH / "keyring.yaml"
21
21
 
@@ -36,7 +36,7 @@ def get_passphrase_prompt(keyring_file: str) -> str:
36
36
  + ")"
37
37
  + colorama.Style.RESET_ALL
38
38
  + " Passphrase: "
39
- ), # noqa: E501
39
+ ),
40
40
  )
41
41
  return prompt
42
42
 
@@ -66,7 +66,7 @@ def dump(keyring_file: str, full_payload: bool, passphrase_file: Optional[TextIO
66
66
  try:
67
67
  data_dict = file_content.get_decrypted_data_dict(passphrase)
68
68
  if full_payload:
69
- dump_content: Dict[str, Any] = file_content_dict
69
+ dump_content: dict[str, Any] = file_content_dict
70
70
  dump_content["data"] = data_dict
71
71
  else:
72
72
  dump_content = data_dict
@@ -86,7 +86,7 @@ def dump(keyring_file: str, full_payload: bool, passphrase_file: Optional[TextIO
86
86
 
87
87
  def main() -> None:
88
88
  colorama.init()
89
- dump() # pylint: disable=no-value-for-parameter
89
+ dump()
90
90
 
91
91
 
92
92
  if __name__ == "__main__":
chia/util/errors.py CHANGED
@@ -1,8 +1,10 @@
1
+ # Package: utils
2
+
1
3
  from __future__ import annotations
2
4
 
3
5
  from enum import Enum
4
6
  from pathlib import Path
5
- from typing import Any, List, Optional
7
+ from typing import Any, Optional
6
8
 
7
9
  from click import ClickException
8
10
 
@@ -208,14 +210,14 @@ class TimestampError(Exception):
208
210
 
209
211
 
210
212
  class ConsensusError(Exception):
211
- def __init__(self, code: Err, errors: List[Any] = []):
213
+ def __init__(self, code: Err, errors: list[Any] = []):
212
214
  super().__init__(f"Error code: {code.name} {errors}")
213
215
  self.code = code
214
216
  self.errors = errors
215
217
 
216
218
 
217
219
  class ProtocolError(Exception):
218
- def __init__(self, code: Err, errors: List[Any] = []):
220
+ def __init__(self, code: Err, errors: list[Any] = []):
219
221
  super().__init__(f"Error code: {code.name} {errors}")
220
222
  self.code = code
221
223
  self.errors = errors
chia/util/file_keyring.py CHANGED
@@ -1,16 +1,18 @@
1
+ # Package: utils
2
+
1
3
  from __future__ import annotations
2
4
 
3
5
  import base64
4
6
  import contextlib
5
7
  import os
6
8
  import shutil
7
- import sys
8
9
  import threading
10
+ from collections.abc import Iterator
9
11
  from dataclasses import asdict, dataclass, field
10
12
  from hashlib import pbkdf2_hmac
11
13
  from pathlib import Path
12
14
  from secrets import token_bytes
13
- from typing import Any, Dict, Iterator, Optional, Union, cast
15
+ from typing import Any, Optional, Union, cast
14
16
 
15
17
  import yaml
16
18
  from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 # pyright: reportMissingModuleSource=false
@@ -52,18 +54,6 @@ def symmetric_key_from_passphrase(passphrase: str, salt: bytes) -> bytes:
52
54
  return pbkdf2_hmac("sha256", passphrase.encode(), salt, HASH_ITERS)
53
55
 
54
56
 
55
- def get_symmetric_key(salt: bytes) -> bytes:
56
- from chia.cmds.passphrase_funcs import obtain_current_passphrase
57
-
58
- try:
59
- passphrase = obtain_current_passphrase(use_passphrase_cache=True)
60
- except Exception as e:
61
- print(f"Unable to unlock the keyring: {e}")
62
- sys.exit(1)
63
-
64
- return symmetric_key_from_passphrase(passphrase, salt)
65
-
66
-
67
57
  def encrypt_data(input_data: bytes, key: bytes, nonce: bytes) -> bytes:
68
58
  encryptor = ChaCha20Poly1305(key)
69
59
  data = encryptor.encrypt(nonce, CHECKBYTES_VALUE + input_data, None)
@@ -144,7 +134,7 @@ class FileKeyringContent:
144
134
  except PermissionError:
145
135
  shutil.move(str(temp_path), str(path))
146
136
 
147
- def get_decrypted_data_dict(self, passphrase: str) -> Dict[str, Any]:
137
+ def get_decrypted_data_dict(self, passphrase: str) -> dict[str, Any]:
148
138
  if self.empty():
149
139
  return {}
150
140
  key = symmetric_key_from_passphrase(passphrase, self.salt)
@@ -165,7 +155,7 @@ class FileKeyringContent:
165
155
  def empty(self) -> bool:
166
156
  return self.data is None or len(self.data) == 0
167
157
 
168
- def to_dict(self) -> Dict[str, Any]:
158
+ def to_dict(self) -> dict[str, Any]:
169
159
  result = asdict(self)
170
160
  result["salt"] = result["salt"].hex()
171
161
  result["nonce"] = result["nonce"].hex()
@@ -175,30 +165,30 @@ class FileKeyringContent:
175
165
  @dataclass(frozen=True)
176
166
  class Key:
177
167
  secret: bytes
178
- metadata: Optional[Dict[str, Any]] = None
168
+ metadata: Optional[dict[str, Any]] = None
179
169
 
180
170
  @classmethod
181
- def parse(cls, data: str, metadata: Optional[Dict[str, Any]]) -> Key:
171
+ def parse(cls, data: str, metadata: Optional[dict[str, Any]]) -> Key:
182
172
  return cls(
183
173
  bytes.fromhex(data),
184
174
  metadata,
185
175
  )
186
176
 
187
- def to_data(self) -> Union[str, Dict[str, Any]]:
177
+ def to_data(self) -> Union[str, dict[str, Any]]:
188
178
  return self.secret.hex()
189
179
 
190
180
 
191
- Users = Dict[str, Key]
192
- Services = Dict[str, Users]
181
+ Users = dict[str, Key]
182
+ Services = dict[str, Users]
193
183
 
194
184
 
195
185
  @dataclass
196
186
  class DecryptedKeyringData:
197
187
  services: Services
198
- labels: Dict[int, str] # {fingerprint: label}
188
+ labels: dict[int, str] # {fingerprint: label}
199
189
 
200
190
  @classmethod
201
- def from_dict(cls, data_dict: Dict[str, Any]) -> DecryptedKeyringData:
191
+ def from_dict(cls, data_dict: dict[str, Any]) -> DecryptedKeyringData:
202
192
  return cls(
203
193
  {
204
194
  service: {
@@ -210,7 +200,7 @@ class DecryptedKeyringData:
210
200
  data_dict.get("labels", {}),
211
201
  )
212
202
 
213
- def to_dict(self) -> Dict[str, Any]:
203
+ def to_dict(self) -> dict[str, Any]:
214
204
  return {
215
205
  "keys": {
216
206
  service: {user: key.to_data() for user, key in users.items()}
@@ -243,7 +233,7 @@ class FileKeyring(FileSystemEventHandler):
243
233
  cached_data_dict: DecryptedKeyringData = field(default_factory=default_file_keyring_data)
244
234
  keyring_last_mod_time: Optional[float] = None
245
235
  # Key/value pairs to set on the outer payload on the next write
246
- file_content_properties_for_next_write: Dict[str, Any] = field(default_factory=dict)
236
+ file_content_properties_for_next_write: dict[str, Any] = field(default_factory=dict)
247
237
 
248
238
  @classmethod
249
239
  def create(cls, keys_root_path: Path = DEFAULT_KEYS_ROOT_PATH) -> FileKeyring:
@@ -282,16 +272,16 @@ class FileKeyring(FileSystemEventHandler):
282
272
  def setup_keyring_file_watcher(self) -> None:
283
273
  # recursive=True necessary for macOS support
284
274
  if not self.keyring_observer.is_alive():
285
- self.keyring_observer.schedule( # type: ignore[no-untyped-call]
275
+ self.keyring_observer.schedule(
286
276
  self,
287
- self.keyring_path.parent,
277
+ str(self.keyring_path.parent),
288
278
  recursive=True,
289
279
  )
290
- self.keyring_observer.start() # type: ignore[no-untyped-call]
280
+ self.keyring_observer.start()
291
281
 
292
282
  def cleanup_keyring_file_watcher(self) -> None:
293
283
  if self.keyring_observer.is_alive():
294
- self.keyring_observer.stop() # type: ignore[no-untyped-call]
284
+ self.keyring_observer.stop()
295
285
  self.keyring_observer.join()
296
286
 
297
287
  def on_modified(self, event: Union[FileSystemEvent, DirModifiedEvent]) -> None:
@@ -320,7 +310,7 @@ class FileKeyring(FileSystemEventHandler):
320
310
  """
321
311
  return self.cached_data_dict.services
322
312
 
323
- def cached_labels(self) -> Dict[int, str]:
313
+ def cached_labels(self) -> dict[int, str]:
324
314
  """
325
315
  Returns keyring.data.labels
326
316
  """
@@ -416,7 +406,7 @@ class FileKeyring(FileSystemEventHandler):
416
406
  return False
417
407
 
418
408
  def load_keyring(self, passphrase: Optional[str] = None) -> None:
419
- from chia.cmds.passphrase_funcs import obtain_current_passphrase
409
+ from chia.util.keyring_wrapper import obtain_current_passphrase
420
410
 
421
411
  with self.load_keyring_lock:
422
412
  self.needs_load_keyring = False
@@ -435,8 +425,7 @@ class FileKeyring(FileSystemEventHandler):
435
425
  )
436
426
 
437
427
  def write_keyring(self, fresh_salt: bool = False) -> None:
438
- from chia.cmds.passphrase_funcs import obtain_current_passphrase
439
- from chia.util.keyring_wrapper import KeyringWrapper
428
+ from chia.util.keyring_wrapper import KeyringWrapper, obtain_current_passphrase
440
429
 
441
430
  # Merge in other properties like "passphrase_hint"
442
431
  if "passphrase_hint" in self.file_content_properties_for_next_write:
chia/util/files.py CHANGED
@@ -1,3 +1,5 @@
1
+ # Package: utils
2
+
1
3
  from __future__ import annotations
2
4
 
3
5
  import asyncio
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Callable, List, Optional, Tuple
4
+ from typing import Callable, Optional
5
5
 
6
6
  from chia_rs import G1Element, G2Element, serialized_length
7
7
  from chiabip158 import PyBIP158
@@ -56,7 +56,7 @@ def skip_uint8(buf: memoryview) -> memoryview:
56
56
 
57
57
 
58
58
  def skip_bool(buf: memoryview) -> memoryview:
59
- assert buf[0] in [0, 1]
59
+ assert buf[0] in {0, 1}
60
60
  return buf[1:]
61
61
 
62
62
 
@@ -167,7 +167,7 @@ def skip_foliage(buf: memoryview) -> memoryview:
167
167
  return skip_optional(buf, skip_g2_element) # foliage_transaction_block_signature
168
168
 
169
169
 
170
- def prev_hash_from_foliage(buf: memoryview) -> Tuple[memoryview, bytes32]:
170
+ def prev_hash_from_foliage(buf: memoryview) -> tuple[memoryview, bytes32]:
171
171
  prev_hash = buf[:32] # prev_block_hash
172
172
  buf = skip_bytes32(buf) # prev_block_hash
173
173
  buf = skip_bytes32(buf) # reward_block_hash
@@ -230,7 +230,7 @@ def generator_from_block(buf: memoryview) -> Optional[bytes]:
230
230
  class GeneratorBlockInfo:
231
231
  prev_header_hash: bytes32
232
232
  transactions_generator: Optional[SerializedProgram]
233
- transactions_generator_ref_list: List[uint32]
233
+ transactions_generator_ref_list: list[uint32]
234
234
 
235
235
 
236
236
  def block_info_from_block(buf: memoryview) -> GeneratorBlockInfo:
@@ -267,7 +267,7 @@ def block_info_from_block(buf: memoryview) -> GeneratorBlockInfo:
267
267
 
268
268
 
269
269
  def header_block_from_block(
270
- buf: memoryview, request_filter: bool = True, tx_addition_coins: List[Coin] = [], removal_names: List[bytes32] = []
270
+ buf: memoryview, request_filter: bool = True, tx_addition_coins: list[Coin] = [], removal_names: list[bytes32] = []
271
271
  ) -> bytes:
272
272
  buf2 = buf[:]
273
273
  buf2 = skip_list(buf2, skip_end_of_sub_slot_bundle) # finished_sub_slots
@@ -297,8 +297,8 @@ def header_block_from_block(
297
297
  transactions_info_optional = bytes([0])
298
298
  else:
299
299
  transactions_info_optional = bytes([1])
300
- transactions_info, advance = TransactionsInfo.parse_rust(buf2[1:])
301
- byte_array_tx: List[bytearray] = []
300
+ transactions_info, _advance = TransactionsInfo.parse_rust(buf2[1:])
301
+ byte_array_tx: list[bytearray] = []
302
302
  if is_transaction_block and transactions_info:
303
303
  addition_coins = tx_addition_coins + list(transactions_info.reward_claims_incorporated)
304
304
  for coin in addition_coins:
@@ -319,3 +319,27 @@ def header_block_from_block(
319
319
  header_block += bytes(transactions_info)
320
320
 
321
321
  return header_block
322
+
323
+
324
+ def get_height_and_tx_status_from_block(buf: memoryview) -> tuple[uint32, bool]:
325
+ """
326
+ Returns the height of the block and whether it's a transaction block or not.
327
+ We're considering the block as a transaction block if transactions_info is not None.
328
+ """
329
+ reward_chain_block_buf = skip_list(buf, skip_end_of_sub_slot_bundle) # finished_sub_slots
330
+ # Get the block height from reward_chain_block_buf
331
+ height_buf = skip_uint128(reward_chain_block_buf) # weight
332
+ height = uint32.from_bytes(height_buf[:4])
333
+ # Let's continue down to transactions_info
334
+ buf = skip_reward_chain_block(reward_chain_block_buf) # reward_chain_block
335
+ buf = skip_optional(buf, skip_vdf_proof) # challenge_chain_sp_proof
336
+ buf = skip_vdf_proof(buf) # challenge_chain_ip_proof
337
+ buf = skip_optional(buf, skip_vdf_proof) # reward_chain_sp_proof
338
+ buf = skip_vdf_proof(buf) # reward_chain_ip_proof
339
+ buf = skip_optional(buf, skip_vdf_proof) # infused_challenge_chain_ip_proof
340
+ buf = skip_foliage(buf) # foliage
341
+ buf = skip_optional(buf, skip_foliage_transaction_block) # foliage_transaction_block
342
+ # We're at the transactions_info optional.
343
+ # If it's not None, consider this a transaction block.
344
+ is_tx_block = buf[0] != 0
345
+ return height, is_tx_block
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Collection, List, Optional, Tuple
3
+ from collections.abc import Collection
4
+ from typing import Optional
4
5
 
5
6
  from chiabip158 import PyBIP158
6
7
 
@@ -13,11 +14,20 @@ from chia.util.ints import uint64
13
14
 
14
15
 
15
16
  def get_block_header(
16
- block: FullBlock, tx_addition_coins: Collection[Coin], removals_names: Collection[bytes32]
17
+ block: FullBlock, removals_and_additions: Optional[tuple[Collection[bytes32], Collection[Coin]]] = None
17
18
  ) -> HeaderBlock:
18
- # Create filter
19
- byte_array_tx: List[bytearray] = []
20
- if block.is_transaction_block():
19
+ """
20
+ Returns a HeaderBlock from a FullBlock.
21
+ If `removals_and_additions` is not None, account for them, as well as
22
+ reward coins, in the creation of the transactions filter, otherwise create
23
+ an empty one.
24
+ """
25
+ # Guard against passing removals and additions for a non-transaction block.
26
+ assert removals_and_additions is None or block.is_transaction_block()
27
+ # Create an empty filter to begin with
28
+ byte_array_tx: list[bytearray] = []
29
+ if removals_and_additions is not None and block.is_transaction_block():
30
+ removals_names, tx_addition_coins = removals_and_additions
21
31
  for coin in tx_addition_coins:
22
32
  byte_array_tx.append(bytearray(coin.puzzle_hash))
23
33
  for coin in block.get_included_reward_coins():
@@ -43,13 +53,13 @@ def get_block_header(
43
53
  )
44
54
 
45
55
 
46
- def tx_removals_and_additions(results: Optional[SpendBundleConditions]) -> Tuple[List[bytes32], List[Coin]]:
56
+ def tx_removals_and_additions(results: Optional[SpendBundleConditions]) -> tuple[list[bytes32], list[Coin]]:
47
57
  """
48
58
  Doesn't return farmer and pool reward.
49
59
  """
50
60
 
51
- removals: List[bytes32] = []
52
- additions: List[Coin] = []
61
+ removals: list[bytes32] = []
62
+ additions: list[Coin] = []
53
63
 
54
64
  # build removals list
55
65
  if results is None:
chia/util/hash.py CHANGED
@@ -1,9 +1,11 @@
1
+ # Package: utils
2
+
1
3
  from __future__ import annotations
2
4
 
3
5
  from hashlib import sha256
4
6
  from typing import Literal, SupportsBytes, Union, cast, overload
5
7
 
6
- from chia.types.blockchain_format.sized_bytes import bytes32
8
+ from chia_rs.sized_bytes import bytes32
7
9
 
8
10
 
9
11
  @overload
@@ -86,6 +86,7 @@ daemon_ssl:
86
86
  # Controls logging of all servers (harvester, farmer, etc..). Each one can be overridden.
87
87
  logging: &logging
88
88
  log_stdout: False # If True, outputs to stdout instead of a file
89
+ log_backcompat: False
89
90
  log_filename: "log/debug.log"
90
91
  log_level: "WARNING" # Can be CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET
91
92
  log_maxfilesrotation: 7 # Max files in rotation. Default value 7 if the key is not set
@@ -109,6 +110,9 @@ seeder:
109
110
  # Peers used for the initial run.
110
111
  bootstrap_peers:
111
112
  - "node.chia.net"
113
+ # Peers to respond with regardless of what the crawler finds
114
+ # Can be IPs or Hostnames. Hostnames will be resolved to IPs
115
+ static_peers: []
112
116
  # Only consider nodes synced at least to this height.
113
117
  minimum_height: 240000
114
118
  # How many of a particular version we need to see before reporting it in the logs
@@ -160,6 +164,7 @@ harvester:
160
164
  # Plots are searched for in the following directories
161
165
  plot_directories: []
162
166
  recursive_plot_scan: False # If True the harvester scans plots recursively in the provided directories.
167
+ recursive_follow_links: False # If True the harvester follows symlinks when scanning for plots recursively
163
168
 
164
169
  ssl:
165
170
  private_crt: "config/ssl/harvester/private_harvester.crt"
@@ -356,6 +361,10 @@ full_node:
356
361
  # profiled.
357
362
  single_threaded: False
358
363
 
364
+ # when enabled, logs coins additions, removals and reorgs at INFO level.
365
+ # Requires the log level to be INFO or DEBUG as well.
366
+ log_coins: False
367
+
359
368
  # How often to initiate outbound connections to other full nodes.
360
369
  peer_connect_interval: 30
361
370
  # How long to wait for a peer connection
@@ -401,6 +410,10 @@ full_node:
401
410
 
402
411
  enable_memory_profiler: False
403
412
 
413
+ # this is a debug/auditing facility that saves all spend bundles added to the
414
+ # mempool, organized by peak height at the time
415
+ log_mempool: false
416
+
404
417
  # this is a debug and profiling facility that logs all SQLite commands to a
405
418
  # separate log file (under logging/sql.log).
406
419
  log_sqlite_cmds: False
@@ -427,6 +440,7 @@ full_node:
427
440
  - "seeder.dexie.space"
428
441
  - "chia.hoffmang.com"
429
442
  - "seeder.xchpool.org"
443
+ - "seeder.xchseeder.com"
430
444
  introducer_peer:
431
445
  host: introducer.chia.net # Chia AWS introducer IPv4/IPv6
432
446
  port: 8444
@@ -480,6 +494,8 @@ introducer:
480
494
  public_key: "config/ssl/full_node/public_full_node.key"
481
495
 
482
496
  wallet:
497
+ # If True, starts an RPC server at the following port
498
+ start_rpc_server: True
483
499
  rpc_port: 9256
484
500
 
485
501
  # when enabled, the wallet will print a pstats profile to the
@@ -564,6 +580,9 @@ wallet:
564
580
  # the user accepts the risk/responsibility of verifying the authenticity and origin of unknown CATs
565
581
  automatically_add_unknown_cats: False
566
582
 
583
+ # if an unknown DID is sent to us, a wallet will be automatically created
584
+ did_auto_add_limit: 10
585
+
567
586
  # Interval to resend unconfirmed transactions, even if previously accepted into Mempool
568
587
  tx_resend_timeout_secs: 1800
569
588
 
@@ -1,3 +1,5 @@
1
+ # Package: utils
2
+
1
3
  from __future__ import annotations
2
4
 
3
5
  from concurrent.futures import Executor, Future
@@ -0,0 +1,39 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from ipaddress import IPv4Address, IPv6Address, ip_address
5
+ from typing import Union
6
+
7
+
8
+ @dataclass(frozen=True)
9
+ class IPAddress:
10
+ _inner: Union[IPv4Address, IPv6Address]
11
+
12
+ @classmethod
13
+ def create(cls, ip: str) -> IPAddress:
14
+ return cls(ip_address(ip))
15
+
16
+ def __int__(self) -> int:
17
+ return int(self._inner)
18
+
19
+ def __str__(self) -> str:
20
+ return str(self._inner)
21
+
22
+ def __repr__(self) -> str:
23
+ return repr(self._inner)
24
+
25
+ @property
26
+ def packed(self) -> bytes:
27
+ return self._inner.packed
28
+
29
+ @property
30
+ def is_private(self) -> bool:
31
+ return self._inner.is_private
32
+
33
+ @property
34
+ def is_v4(self) -> bool:
35
+ return self._inner.version == 4
36
+
37
+ @property
38
+ def is_v6(self) -> bool:
39
+ return self._inner.version == 6
chia/util/json_util.py CHANGED
@@ -5,8 +5,6 @@ from typing import Any
5
5
 
6
6
  from aiohttp import web
7
7
 
8
- from chia.wallet.util.wallet_types import WalletType
9
-
10
8
 
11
9
  class EnhancedJSONEncoder(json.JSONEncoder):
12
10
  """
@@ -16,8 +14,6 @@ class EnhancedJSONEncoder(json.JSONEncoder):
16
14
  def default(self, o: Any) -> Any:
17
15
  if hasattr(type(o), "to_json_dict"):
18
16
  return o.to_json_dict()
19
- elif isinstance(o, WalletType):
20
- return o.name
21
17
  elif hasattr(type(o), "__bytes__"):
22
18
  return f"0x{bytes(o).hex()}"
23
19
  elif isinstance(o, bytes):