chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc1.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
- from typing import Any, Awaitable, Callable, List, Optional
4
+ from collections.abc import Awaitable
5
+ from typing import Any, Callable, Optional
5
6
 
6
7
  import pytest
7
8
  from chia_rs import G2Element
@@ -9,6 +10,7 @@ from typing_extensions import Literal
9
10
 
10
11
  from chia._tests.environments.wallet import WalletEnvironment, WalletStateTransition, WalletTestFramework
11
12
  from chia._tests.util.time_out_assert import time_out_assert_not_none
13
+ from chia.rpc.wallet_request_types import VCAddProofs, VCGet, VCGetList, VCGetProofsForRoot, VCMint, VCRevoke, VCSpend
12
14
  from chia.rpc.wallet_rpc_client import WalletRpcClient
13
15
  from chia.simulator.full_node_simulator import FullNodeSimulator
14
16
  from chia.types.blockchain_format.coin import coin_as_list
@@ -39,7 +41,7 @@ async def mint_cr_cat(
39
41
  wallet_node_0: WalletNode,
40
42
  client_0: WalletRpcClient,
41
43
  full_node_api: FullNodeSimulator,
42
- authorized_providers: List[bytes32] = [],
44
+ authorized_providers: list[bytes32] = [],
43
45
  tail: Program = Program.to(None),
44
46
  proofs_checker: ProofsChecker = ProofsChecker(["foo", "bar"]),
45
47
  ) -> None:
@@ -161,10 +163,13 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
161
163
  # Mint a VC
162
164
  vc_record = (
163
165
  await client_0.vc_mint(
164
- did_id,
166
+ VCMint(
167
+ did_id=encode_puzzle_hash(did_id, "did"),
168
+ target_address=encode_puzzle_hash(await wallet_0.get_new_puzzlehash(), "txch"),
169
+ fee=uint64(1_750_000_000_000),
170
+ push=True,
171
+ ),
165
172
  wallet_environments.tx_config,
166
- target_address=await wallet_0.get_new_puzzlehash(),
167
- fee=uint64(1_750_000_000_000),
168
173
  )
169
174
  ).vc_record
170
175
 
@@ -179,7 +184,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
179
184
  # One existing coin has been removed and two ephemeral coins have been removed
180
185
  # Does pending_coin_removal_count attempt to show the number of current pending removals
181
186
  # Or does it intend to just mean all pending removals that we should eventually get states for?
182
- "pending_coin_removal_count": 5, # 4 for VC mint, 1 for DID mint
187
+ "pending_coin_removal_count": 3,
183
188
  "<=#spendable_balance": -1_750_000_000_002,
184
189
  "<=#max_send_amount": -1_750_000_000_002,
185
190
  "set_remainder": True,
@@ -200,7 +205,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
200
205
  "xch": {
201
206
  # 1_750_000_000_000 for VC mint fee, 1 for VC singleton, 1 for DID mint
202
207
  "confirmed_wallet_balance": -1_750_000_000_002,
203
- "pending_coin_removal_count": -5, # 3 for VC mint, 1 for DID mint
208
+ "pending_coin_removal_count": -3, # 3 for VC mint, 1 for DID mint
204
209
  "set_remainder": True,
205
210
  },
206
211
  "did": {
@@ -214,17 +219,20 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
214
219
  WalletStateTransition(),
215
220
  ]
216
221
  )
217
- new_vc_record: Optional[VCRecord] = await client_0.vc_get(vc_record.vc.launcher_id)
222
+ new_vc_record: Optional[VCRecord] = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
218
223
  assert new_vc_record is not None
219
224
 
220
225
  # Spend VC
221
226
  proofs: VCProofs = VCProofs({"foo": "1", "bar": "1", "baz": "1", "qux": "1", "grault": "1"})
222
227
  proof_root: bytes32 = proofs.root()
223
228
  await client_0.vc_spend(
224
- vc_record.vc.launcher_id,
229
+ VCSpend(
230
+ vc_id=vc_record.vc.launcher_id,
231
+ new_proof_hash=proof_root,
232
+ fee=uint64(100),
233
+ push=True,
234
+ ),
225
235
  wallet_environments.tx_config,
226
- new_proof_hash=proof_root,
227
- fee=uint64(100),
228
236
  )
229
237
  await wallet_environments.process_pending_states(
230
238
  [
@@ -241,6 +249,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
241
249
  "spendable_balance": -1,
242
250
  "pending_change": 1,
243
251
  "pending_coin_removal_count": 1,
252
+ "max_send_amount": -1,
244
253
  },
245
254
  "vc": {
246
255
  "pending_coin_removal_count": 1,
@@ -256,6 +265,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
256
265
  "spendable_balance": 1,
257
266
  "pending_change": -1,
258
267
  "pending_coin_removal_count": -1,
268
+ "max_send_amount": 1,
259
269
  },
260
270
  "vc": {
261
271
  "pending_coin_removal_count": -1,
@@ -265,12 +275,12 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
265
275
  WalletStateTransition(),
266
276
  ]
267
277
  )
268
- vc_record_updated: Optional[VCRecord] = await client_0.vc_get(vc_record.vc.launcher_id)
278
+ vc_record_updated: Optional[VCRecord] = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
269
279
  assert vc_record_updated is not None
270
280
  assert vc_record_updated.vc.proof_hash == proof_root
271
281
 
272
282
  # Do a mundane spend
273
- await client_0.vc_spend(vc_record.vc.launcher_id, wallet_environments.tx_config)
283
+ await client_0.vc_spend(VCSpend(vc_id=vc_record.vc.launcher_id, push=True), wallet_environments.tx_config)
274
284
  await wallet_environments.process_pending_states(
275
285
  [
276
286
  WalletStateTransition(
@@ -290,12 +300,15 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
290
300
  )
291
301
 
292
302
  # Add proofs to DB
293
- await client_0.vc_add_proofs(proofs.key_value_pairs)
294
- await client_0.vc_add_proofs(proofs.key_value_pairs) # Doing it again just to make sure it doesn't care
295
- assert await client_0.vc_get_proofs_for_root(proof_root) == proofs.key_value_pairs
296
- vc_records, fetched_proofs = await client_0.vc_get_list()
297
- assert len(vc_records) == 1
298
- assert fetched_proofs[proof_root.hex()] == proofs.key_value_pairs
303
+ await client_0.vc_add_proofs(VCAddProofs.from_vc_proofs(proofs))
304
+ # Doing it again just to make sure it doesn't care
305
+ await client_0.vc_add_proofs(VCAddProofs.from_vc_proofs(proofs))
306
+ assert (
307
+ await client_0.vc_get_proofs_for_root(VCGetProofsForRoot(proof_root))
308
+ ).to_vc_proofs().key_value_pairs == proofs.key_value_pairs
309
+ get_list_reponse = await client_0.vc_get_list(VCGetList())
310
+ assert len(get_list_reponse.vc_records) == 1
311
+ assert get_list_reponse.proof_dict[proof_root] == proofs.key_value_pairs
299
312
 
300
313
  # Mint CR-CAT
301
314
  await mint_cr_cat(1, wallet_0, wallet_node_0, client_0, full_node_api, [did_id])
@@ -434,7 +447,8 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
434
447
 
435
448
  # Send the VC to wallet_1 to use for the CR-CATs
436
449
  await client_0.vc_spend(
437
- vc_record.vc.launcher_id, wallet_environments.tx_config, new_puzhash=await wallet_1.get_new_puzzlehash()
450
+ VCSpend(vc_id=vc_record.vc.launcher_id, new_puzhash=await wallet_1.get_new_puzzlehash(), push=True),
451
+ wallet_environments.tx_config,
438
452
  )
439
453
  await wallet_environments.process_pending_states(
440
454
  [
@@ -458,7 +472,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
458
472
  ),
459
473
  ]
460
474
  )
461
- await client_1.vc_add_proofs(proofs.key_value_pairs)
475
+ await client_1.vc_add_proofs(VCAddProofs.from_vc_proofs(proofs))
462
476
 
463
477
  # Claim the pending approval to our wallet
464
478
  await client_1.crcat_approve_pending(
@@ -525,16 +539,18 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
525
539
  )
526
540
 
527
541
  # Test melting a CRCAT
528
- tx = (
529
- await client_1.cat_spend(
530
- env_1.dealias_wallet_id("crcat"),
531
- wallet_environments.tx_config,
532
- uint64(20),
533
- wallet_1_addr,
534
- uint64(0),
535
- cat_discrepancy=(-50, Program.to(None), Program.to(None)),
536
- )
537
- ).transaction
542
+ # This is intended to trigger an edge case where the output and change are the same forcing a new puzhash
543
+ with wallet_environments.new_puzzle_hashes_allowed():
544
+ tx = (
545
+ await client_1.cat_spend(
546
+ env_1.dealias_wallet_id("crcat"),
547
+ wallet_environments.tx_config,
548
+ uint64(20),
549
+ wallet_1_addr,
550
+ uint64(0),
551
+ cat_discrepancy=(-50, Program.to(None), Program.to(None)),
552
+ )
553
+ ).transaction
538
554
  [tx] = await wallet_node_1.wallet_state_manager.add_pending_transactions([tx])
539
555
  await wallet_environments.process_pending_states(
540
556
  [
@@ -580,11 +596,14 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
580
596
  ),
581
597
  ]
582
598
  )
583
- vc_record_updated = await client_1.vc_get(vc_record_updated.vc.launcher_id)
599
+ vc_record_updated = (await client_1.vc_get(VCGet(vc_record_updated.vc.launcher_id))).vc_record
584
600
  assert vc_record_updated is not None
585
601
 
586
602
  # Revoke VC
587
- await client_0.vc_revoke(vc_record_updated.vc.coin.parent_coin_info, wallet_environments.tx_config, uint64(1))
603
+ await client_0.vc_revoke(
604
+ VCRevoke(vc_parent_id=vc_record_updated.vc.coin.parent_coin_info, fee=uint64(1), push=True),
605
+ wallet_environments.tx_config,
606
+ )
588
607
  await wallet_environments.process_pending_states(
589
608
  [
590
609
  WalletStateTransition(
@@ -600,6 +619,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
600
619
  "spendable_balance": -1,
601
620
  "pending_change": 1,
602
621
  "pending_coin_removal_count": 1,
622
+ "max_send_amount": -1,
603
623
  },
604
624
  },
605
625
  post_block_balance_updates={
@@ -612,6 +632,7 @@ async def test_vc_lifecycle(wallet_environments: WalletTestFramework) -> None:
612
632
  "spendable_balance": 1,
613
633
  "pending_change": -1,
614
634
  "pending_coin_removal_count": -1,
635
+ "max_send_amount": 1,
615
636
  },
616
637
  },
617
638
  ),
@@ -663,7 +684,13 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
663
684
 
664
685
  vc_record = (
665
686
  await client_0.vc_mint(
666
- did_id, wallet_environments.tx_config, target_address=await wallet_0.get_new_puzzlehash(), fee=uint64(200)
687
+ VCMint(
688
+ did_id=encode_puzzle_hash(did_id, "did"),
689
+ target_address=encode_puzzle_hash(await wallet_0.get_new_puzzlehash(), "txch"),
690
+ fee=uint64(200),
691
+ push=True,
692
+ ),
693
+ wallet_environments.tx_config,
667
694
  )
668
695
  ).vc_record
669
696
  await wallet_environments.process_pending_states(
@@ -683,7 +710,7 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
683
710
  )
684
711
  ]
685
712
  )
686
- new_vc_record: Optional[VCRecord] = await client_0.vc_get(vc_record.vc.launcher_id)
713
+ new_vc_record: Optional[VCRecord] = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
687
714
  assert new_vc_record is not None
688
715
 
689
716
  # Test a negative case real quick (mostly unrelated)
@@ -694,7 +721,7 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
694
721
  await (await wallet_node_0.wallet_state_manager.get_or_create_vc_wallet()).generate_signed_transaction(
695
722
  new_vc_record.vc.launcher_id,
696
723
  action_scope,
697
- new_proof_hash=bytes32([0] * 32),
724
+ new_proof_hash=bytes32.zeros,
698
725
  self_revoke=True,
699
726
  )
700
727
 
@@ -702,7 +729,7 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
702
729
  async with did_wallet.wallet_state_manager.new_action_scope(
703
730
  wallet_environments.tx_config, push=True
704
731
  ) as action_scope:
705
- await did_wallet.transfer_did(bytes32([0] * 32), uint64(0), False, action_scope)
732
+ await did_wallet.transfer_did(bytes32.zeros, uint64(0), False, action_scope)
706
733
 
707
734
  await wallet_environments.process_pending_states(
708
735
  [
@@ -716,7 +743,9 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
716
743
  )
717
744
 
718
745
  # Make sure revoking still works
719
- await client_0.vc_revoke(new_vc_record.vc.coin.parent_coin_info, wallet_environments.tx_config, uint64(0))
746
+ await client_0.vc_revoke(
747
+ VCRevoke(vc_parent_id=new_vc_record.vc.coin.parent_coin_info, push=True), wallet_environments.tx_config
748
+ )
720
749
  await wallet_environments.process_pending_states(
721
750
  [
722
751
  WalletStateTransition(
@@ -735,7 +764,7 @@ async def test_self_revoke(wallet_environments: WalletTestFramework) -> None:
735
764
  )
736
765
  ]
737
766
  )
738
- vc_record_revoked: Optional[VCRecord] = await client_0.vc_get(vc_record.vc.launcher_id)
767
+ vc_record_revoked: Optional[VCRecord] = (await client_0.vc_get(VCGet(vc_record.vc.launcher_id))).vc_record
739
768
  assert vc_record_revoked is None
740
769
  assert (
741
770
  len(await (await wallet_node_0.wallet_state_manager.get_or_create_vc_wallet()).store.get_unconfirmed_vcs()) == 0
@@ -783,7 +812,7 @@ async def test_cat_wallet_conversion(
783
812
  wallet_node_0.wallet_state_manager, wallet_0, Program.to(None).get_tree_hash().hex()
784
813
  )
785
814
 
786
- did_id = bytes32([0] * 32)
815
+ did_id = bytes32.zeros
787
816
  await mint_cr_cat(num_blocks, wallet_0, wallet_node_0, client_0, full_node_api, [did_id])
788
817
  await full_node_api.farm_blocks_to_wallet(count=num_blocks, wallet=wallet_0)
789
818
  await full_node_api.wait_for_wallet_synced(wallet_node=wallet_node_0, timeout=20)
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import time
4
- from typing import Any, Dict, List, Optional, Tuple
4
+ from typing import Any, Optional
5
5
 
6
6
  from chia_rs import G1Element, G2Element, compute_merkle_set_root
7
7
  from chiabip158 import PyBIP158
@@ -30,14 +30,14 @@ from chia.util.hash import std_hash
30
30
  from chia.util.ints import uint8, uint32, uint64, uint128
31
31
 
32
32
  DEFAULT_PROOF_OF_SPACE = ProofOfSpace(
33
- bytes32([0] * 32),
33
+ bytes32.zeros,
34
34
  G1Element(),
35
35
  None,
36
36
  G1Element(),
37
37
  uint8(20),
38
38
  bytes(32 * 5),
39
39
  )
40
- DEFAULT_VDF_INFO = VDFInfo(bytes32([0] * 32), uint64(1), ClassgroupElement(bytes100([0] * 100)))
40
+ DEFAULT_VDF_INFO = VDFInfo(bytes32.zeros, uint64(1), ClassgroupElement(bytes100.zeros))
41
41
  DEFAULT_VDF_PROOF = VDFProof(uint8(0), bytes(100), False)
42
42
 
43
43
 
@@ -50,14 +50,14 @@ class WalletBlockTools(BlockTools):
50
50
  def get_consecutive_blocks(
51
51
  self,
52
52
  num_blocks: int,
53
- block_list_input: Optional[List[FullBlock]] = None,
53
+ block_list_input: Optional[list[FullBlock]] = None,
54
54
  *,
55
55
  farmer_reward_puzzle_hash: Optional[bytes32] = None,
56
56
  pool_reward_puzzle_hash: Optional[bytes32] = None,
57
57
  transaction_data: Optional[SpendBundle] = None,
58
58
  genesis_timestamp: Optional[uint64] = None,
59
59
  **kwargs: Any, # We're overriding so there's many arguments no longer used.
60
- ) -> List[FullBlock]:
60
+ ) -> list[FullBlock]:
61
61
  assert num_blocks > 0
62
62
  constants = self.constants
63
63
 
@@ -67,7 +67,7 @@ class WalletBlockTools(BlockTools):
67
67
  if block_list_input is None:
68
68
  block_list_input = []
69
69
 
70
- blocks: Dict[bytes32, BlockRecord]
70
+ blocks: dict[bytes32, BlockRecord]
71
71
  if len(block_list_input) == 0:
72
72
  height_to_hash = {}
73
73
  blocks = {}
@@ -130,10 +130,10 @@ class WalletBlockTools(BlockTools):
130
130
 
131
131
 
132
132
  def load_block_list(
133
- block_list: List[FullBlock], constants: ConsensusConstants
134
- ) -> Tuple[Dict[uint32, bytes32], uint64, Dict[bytes32, BlockRecord]]:
135
- height_to_hash: Dict[uint32, bytes32] = {}
136
- blocks: Dict[bytes32, BlockRecord] = {}
133
+ block_list: list[FullBlock], constants: ConsensusConstants
134
+ ) -> tuple[dict[uint32, bytes32], uint64, dict[bytes32, BlockRecord]]:
135
+ height_to_hash: dict[uint32, bytes32] = {}
136
+ blocks: dict[bytes32, BlockRecord] = {}
137
137
  sub_slot_iters = constants.SUB_SLOT_ITERS_STARTING
138
138
  for full_block in block_list:
139
139
  if full_block.height != 0 and len(full_block.finished_sub_slots) > 0:
@@ -154,8 +154,8 @@ def finish_block(
154
154
  constants: ConsensusConstants,
155
155
  unfinished_block: UnfinishedBlock,
156
156
  prev_block: Optional[BlockRecord],
157
- blocks: Dict[bytes32, BlockRecord],
158
- ) -> Tuple[FullBlock, BlockRecord]:
157
+ blocks: dict[bytes32, BlockRecord],
158
+ ) -> tuple[FullBlock, BlockRecord]:
159
159
  if prev_block is None:
160
160
  new_weight = uint128(1)
161
161
  new_height = uint32(0)
@@ -170,7 +170,7 @@ def finish_block(
170
170
  new_height,
171
171
  uint128(1),
172
172
  uint8(1),
173
- bytes32([0] * 32),
173
+ bytes32.zeros,
174
174
  unfinished_block.reward_chain_block.proof_of_space,
175
175
  DEFAULT_VDF_INFO,
176
176
  G2Element(),
@@ -199,15 +199,15 @@ def finish_block(
199
199
 
200
200
  def get_full_block_and_block_record(
201
201
  constants: ConsensusConstants,
202
- blocks: Dict[bytes32, BlockRecord],
202
+ blocks: dict[bytes32, BlockRecord],
203
203
  last_timestamp: uint64,
204
204
  farmer_reward_puzzlehash: bytes32,
205
205
  pool_target: PoolTarget,
206
206
  prev_block: Optional[BlockRecord],
207
207
  block_generator: Optional[BlockGenerator],
208
- additions: List[Coin],
209
- removals: List[Coin],
210
- ) -> Tuple[FullBlock, BlockRecord, float]:
208
+ additions: list[Coin],
209
+ removals: list[Coin],
210
+ ) -> tuple[FullBlock, BlockRecord, float]:
211
211
  timestamp = last_timestamp + 20
212
212
  if prev_block is None:
213
213
  height: uint32 = uint32(0)
@@ -241,9 +241,9 @@ def get_full_block_and_block_record(
241
241
  )
242
242
  )
243
243
 
244
- byte_array_tx: List[bytearray] = []
245
- removal_ids: List[bytes32] = []
246
- puzzlehash_coin_map: Dict[bytes32, List[bytes32]] = {}
244
+ byte_array_tx: list[bytearray] = []
245
+ removal_ids: list[bytes32] = []
246
+ puzzlehash_coin_map: dict[bytes32, list[bytes32]] = {}
247
247
  for coin in additions:
248
248
  puzzlehash_coin_map.setdefault(coin.puzzle_hash, [])
249
249
  puzzlehash_coin_map[coin.puzzle_hash].append(coin.name())
@@ -255,7 +255,7 @@ def get_full_block_and_block_record(
255
255
  bip158: PyBIP158 = PyBIP158(byte_array_tx)
256
256
  filter_hash = std_hash(bytes(bip158.GetEncoded()))
257
257
 
258
- additions_merkle_items: List[bytes32] = []
258
+ additions_merkle_items: list[bytes32] = []
259
259
  for puzzle, coin_ids in puzzlehash_coin_map.items():
260
260
  additions_merkle_items.append(puzzle)
261
261
  additions_merkle_items.append(hash_coin_ids(coin_ids))
@@ -263,21 +263,21 @@ def get_full_block_and_block_record(
263
263
  additions_root = bytes32(compute_merkle_set_root(additions_merkle_items))
264
264
  removals_root = bytes32(compute_merkle_set_root(removal_ids))
265
265
 
266
- generator_hash = bytes32([0] * 32)
266
+ generator_hash = bytes32.zeros
267
267
  if block_generator is not None:
268
268
  generator_hash = std_hash(block_generator.program)
269
269
 
270
270
  foliage_data = FoliageBlockData(
271
- bytes32([0] * 32),
271
+ bytes32.zeros,
272
272
  pool_target,
273
273
  G2Element(),
274
274
  farmer_reward_puzzlehash,
275
- bytes32([0] * 32),
275
+ bytes32.zeros,
276
276
  )
277
277
 
278
278
  transactions_info = TransactionsInfo(
279
279
  generator_hash,
280
- bytes32([0] * 32),
280
+ bytes32.zeros,
281
281
  G2Element(),
282
282
  fees,
283
283
  uint64(constants.MAX_BLOCK_COST_CLVM),
@@ -295,7 +295,7 @@ def get_full_block_and_block_record(
295
295
 
296
296
  foliage = Foliage(
297
297
  prev_block_hash,
298
- bytes32([0] * 32),
298
+ bytes32.zeros,
299
299
  foliage_data,
300
300
  G2Element(),
301
301
  foliage_transaction_block.get_hash(),
@@ -306,7 +306,7 @@ def get_full_block_and_block_record(
306
306
  RewardChainBlockUnfinished(
307
307
  uint128(1),
308
308
  uint8(1),
309
- bytes32([0] * 32),
309
+ bytes32.zeros,
310
310
  DEFAULT_PROOF_OF_SPACE,
311
311
  None,
312
312
  G2Element(),
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Dict, List, Optional, Tuple
3
+ from typing import Optional
4
4
 
5
5
  import pytest
6
6
 
@@ -22,14 +22,14 @@ from chia.util.ints import uint8, uint32, uint64
22
22
 
23
23
 
24
24
  async def load_blocks_dont_validate(
25
- blocks: List[FullBlock], constants: ConsensusConstants
26
- ) -> Tuple[
27
- Dict[bytes32, HeaderBlock], Dict[uint32, bytes32], Dict[bytes32, BlockRecord], Dict[uint32, SubEpochSummary]
25
+ blocks: list[FullBlock], constants: ConsensusConstants
26
+ ) -> tuple[
27
+ dict[bytes32, HeaderBlock], dict[uint32, bytes32], dict[bytes32, BlockRecord], dict[uint32, SubEpochSummary]
28
28
  ]:
29
- header_cache: Dict[bytes32, HeaderBlock] = {}
30
- height_to_hash: Dict[uint32, bytes32] = {}
31
- sub_blocks: Dict[bytes32, BlockRecord] = {}
32
- sub_epoch_summaries: Dict[uint32, SubEpochSummary] = {}
29
+ header_cache: dict[bytes32, HeaderBlock] = {}
30
+ height_to_hash: dict[uint32, bytes32] = {}
31
+ sub_blocks: dict[bytes32, BlockRecord] = {}
32
+ sub_epoch_summaries: dict[uint32, SubEpochSummary] = {}
33
33
  prev_block = None
34
34
  difficulty = constants.DIFFICULTY_STARTING
35
35
  sub_slot_iters = constants.SUB_SLOT_ITERS_STARTING
@@ -74,7 +74,7 @@ async def load_blocks_dont_validate(
74
74
  )
75
75
  sub_blocks[block.header_hash] = sub_block
76
76
  height_to_hash[block.height] = block.header_hash
77
- header_cache[block.header_hash] = get_block_header(block, [], [])
77
+ header_cache[block.header_hash] = get_block_header(block)
78
78
  if sub_block.sub_epoch_summary_included is not None:
79
79
  sub_epoch_summaries[block.height] = sub_block.sub_epoch_summary_included
80
80
  prev_block = block
@@ -82,15 +82,15 @@ async def load_blocks_dont_validate(
82
82
 
83
83
 
84
84
  async def _test_map_summaries(
85
- blocks: List[FullBlock],
86
- header_cache: Dict[bytes32, HeaderBlock],
87
- height_to_hash: Dict[uint32, bytes32],
88
- sub_blocks: Dict[bytes32, BlockRecord],
89
- summaries: Dict[uint32, SubEpochSummary],
85
+ blocks: list[FullBlock],
86
+ header_cache: dict[bytes32, HeaderBlock],
87
+ height_to_hash: dict[uint32, bytes32],
88
+ sub_blocks: dict[bytes32, BlockRecord],
89
+ summaries: dict[uint32, SubEpochSummary],
90
90
  constants: ConsensusConstants,
91
91
  ) -> None:
92
92
  curr = sub_blocks[blocks[-1].header_hash]
93
- orig_summaries: Dict[int, SubEpochSummary] = {}
93
+ orig_summaries: dict[int, SubEpochSummary] = {}
94
94
  while curr.height > 0:
95
95
  if curr.sub_epoch_summary_included is not None:
96
96
  orig_summaries[curr.height] = curr.sub_epoch_summary_included
@@ -114,7 +114,7 @@ async def _test_map_summaries(
114
114
  class TestWeightProof:
115
115
  @pytest.mark.anyio
116
116
  async def test_weight_proof_map_summaries_1(
117
- self, default_400_blocks: List[FullBlock], blockchain_constants: ConsensusConstants
117
+ self, default_400_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
118
118
  ) -> None:
119
119
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
120
120
  default_400_blocks, blockchain_constants
@@ -125,7 +125,7 @@ class TestWeightProof:
125
125
 
126
126
  @pytest.mark.anyio
127
127
  async def test_weight_proof_map_summaries_2(
128
- self, default_1000_blocks: List[FullBlock], blockchain_constants: ConsensusConstants
128
+ self, default_1000_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
129
129
  ) -> None:
130
130
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
131
131
  default_1000_blocks, blockchain_constants
@@ -136,7 +136,7 @@ class TestWeightProof:
136
136
 
137
137
  @pytest.mark.anyio
138
138
  async def test_weight_proof_summaries_1000_blocks(
139
- self, default_1000_blocks: List[FullBlock], blockchain_constants: ConsensusConstants
139
+ self, default_1000_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
140
140
  ) -> None:
141
141
  blocks = default_1000_blocks
142
142
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
@@ -158,7 +158,7 @@ class TestWeightProof:
158
158
 
159
159
  @pytest.mark.anyio
160
160
  async def test_weight_proof_bad_peak_hash(
161
- self, default_1000_blocks: List[FullBlock], blockchain_constants: ConsensusConstants
161
+ self, default_1000_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
162
162
  ) -> None:
163
163
  blocks = default_1000_blocks
164
164
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
@@ -173,7 +173,7 @@ class TestWeightProof:
173
173
  @pytest.mark.anyio
174
174
  @pytest.mark.skip(reason="broken")
175
175
  async def test_weight_proof_from_genesis(
176
- self, default_400_blocks: List[FullBlock], blockchain_constants: ConsensusConstants
176
+ self, default_400_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
177
177
  ) -> None:
178
178
  blocks = default_400_blocks
179
179
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
@@ -188,7 +188,7 @@ class TestWeightProof:
188
188
  assert wp is not None
189
189
 
190
190
  @pytest.mark.anyio
191
- async def test_weight_proof_edge_cases(self, bt: BlockTools, default_400_blocks: List[FullBlock]) -> None:
191
+ async def test_weight_proof_edge_cases(self, bt: BlockTools, default_400_blocks: list[FullBlock]) -> None:
192
192
  blocks = default_400_blocks
193
193
 
194
194
  blocks = bt.get_consecutive_blocks(
@@ -275,7 +275,7 @@ class TestWeightProof:
275
275
 
276
276
  @pytest.mark.anyio
277
277
  async def test_weight_proof1000(
278
- self, default_1000_blocks: List[FullBlock], blockchain_constants: ConsensusConstants
278
+ self, default_1000_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
279
279
  ) -> None:
280
280
  blocks = default_1000_blocks
281
281
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
@@ -294,7 +294,7 @@ class TestWeightProof:
294
294
 
295
295
  @pytest.mark.anyio
296
296
  async def test_weight_proof1000_pre_genesis_empty_slots(
297
- self, pre_genesis_empty_slots_1000_blocks: List[FullBlock], blockchain_constants: ConsensusConstants
297
+ self, pre_genesis_empty_slots_1000_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
298
298
  ) -> None:
299
299
  blocks = pre_genesis_empty_slots_1000_blocks
300
300
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
@@ -314,7 +314,7 @@ class TestWeightProof:
314
314
 
315
315
  @pytest.mark.anyio
316
316
  async def test_weight_proof10000__blocks_compact(
317
- self, default_10000_blocks_compact: List[FullBlock], blockchain_constants: ConsensusConstants
317
+ self, default_10000_blocks_compact: list[FullBlock], blockchain_constants: ConsensusConstants
318
318
  ) -> None:
319
319
  blocks = default_10000_blocks_compact
320
320
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
@@ -333,7 +333,7 @@ class TestWeightProof:
333
333
 
334
334
  @pytest.mark.anyio
335
335
  async def test_weight_proof1000_partial_blocks_compact(
336
- self, bt: BlockTools, default_10000_blocks_compact: List[FullBlock]
336
+ self, bt: BlockTools, default_10000_blocks_compact: list[FullBlock]
337
337
  ) -> None:
338
338
  blocks = bt.get_consecutive_blocks(
339
339
  100,
@@ -355,7 +355,7 @@ class TestWeightProof:
355
355
 
356
356
  @pytest.mark.anyio
357
357
  async def test_weight_proof10000(
358
- self, default_10000_blocks: List[FullBlock], blockchain_constants: ConsensusConstants
358
+ self, default_10000_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
359
359
  ) -> None:
360
360
  blocks = default_10000_blocks
361
361
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
@@ -375,7 +375,7 @@ class TestWeightProof:
375
375
 
376
376
  @pytest.mark.anyio
377
377
  async def test_check_num_of_samples(
378
- self, default_10000_blocks: List[FullBlock], blockchain_constants: ConsensusConstants
378
+ self, default_10000_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
379
379
  ) -> None:
380
380
  blocks = default_10000_blocks
381
381
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
@@ -396,7 +396,7 @@ class TestWeightProof:
396
396
 
397
397
  @pytest.mark.anyio
398
398
  async def test_weight_proof_extend_no_ses(
399
- self, default_1000_blocks: List[FullBlock], blockchain_constants: ConsensusConstants
399
+ self, default_1000_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
400
400
  ) -> None:
401
401
  blocks = default_1000_blocks
402
402
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
@@ -424,7 +424,7 @@ class TestWeightProof:
424
424
 
425
425
  @pytest.mark.anyio
426
426
  async def test_weight_proof_extend_new_ses(
427
- self, default_1000_blocks: List[FullBlock], blockchain_constants: ConsensusConstants
427
+ self, default_1000_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
428
428
  ) -> None:
429
429
  blocks = default_1000_blocks
430
430
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
@@ -468,7 +468,7 @@ class TestWeightProof:
468
468
 
469
469
  @pytest.mark.anyio
470
470
  async def test_weight_proof_extend_multiple_ses(
471
- self, default_1000_blocks: List[FullBlock], blockchain_constants: ConsensusConstants
471
+ self, default_1000_blocks: list[FullBlock], blockchain_constants: ConsensusConstants
472
472
  ) -> None:
473
473
  blocks = default_1000_blocks
474
474
  header_cache, height_to_hash, sub_blocks, summaries = await load_blocks_dont_validate(
chia/apis.py ADDED
@@ -0,0 +1,19 @@
1
+ from __future__ import annotations
2
+
3
+ from chia.farmer.farmer_api import FarmerAPI
4
+ from chia.full_node.full_node_api import FullNodeAPI
5
+ from chia.harvester.harvester_api import HarvesterAPI
6
+ from chia.introducer.introducer_api import IntroducerAPI
7
+ from chia.server.api_protocol import ApiProtocol
8
+ from chia.server.outbound_message import NodeType
9
+ from chia.timelord.timelord_api import TimelordAPI
10
+ from chia.wallet.wallet_node_api import WalletNodeAPI
11
+
12
+ ApiProtocolRegistry: dict[NodeType, type[ApiProtocol]] = {
13
+ NodeType.FULL_NODE: FullNodeAPI,
14
+ NodeType.WALLET: WalletNodeAPI,
15
+ NodeType.INTRODUCER: IntroducerAPI,
16
+ NodeType.TIMELORD: TimelordAPI,
17
+ NodeType.FARMER: FarmerAPI,
18
+ NodeType.HARVESTER: HarvesterAPI,
19
+ }