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/cmds/rpc.py CHANGED
@@ -3,30 +3,40 @@ from __future__ import annotations
3
3
  import asyncio
4
4
  import json
5
5
  import sys
6
- from typing import Any, Dict, List, Optional, TextIO
6
+ from pathlib import Path
7
+ from typing import Any, Optional, TextIO
7
8
 
8
9
  import click
9
10
  from aiohttp import ClientResponseError
10
11
 
12
+ from chia.cmds.cmd_classes import ChiaCliContext
11
13
  from chia.util.config import load_config
12
- from chia.util.default_root import DEFAULT_ROOT_PATH
13
14
  from chia.util.ints import uint16
14
15
 
15
- services: List[str] = ["crawler", "daemon", "farmer", "full_node", "harvester", "timelord", "wallet", "data_layer"]
16
+ services: list[str] = ["crawler", "daemon", "farmer", "full_node", "harvester", "timelord", "wallet", "data_layer"]
16
17
 
17
18
 
18
19
  async def call_endpoint(
19
- service: str, endpoint: str, request: Dict[str, Any], config: Dict[str, Any], quiet: bool = False
20
- ) -> Dict[str, Any]:
20
+ service: str,
21
+ endpoint: str,
22
+ request: dict[str, Any],
23
+ config: dict[str, Any],
24
+ root_path: Path,
25
+ quiet: bool = False,
26
+ ) -> dict[str, Any]:
21
27
  if service == "daemon":
22
- return await call_daemon_command(endpoint, request, config, quiet)
28
+ return await call_daemon_command(endpoint, request, config, root_path=root_path, quiet=quiet)
23
29
 
24
- return await call_rpc_service_endpoint(service, endpoint, request, config)
30
+ return await call_rpc_service_endpoint(service, endpoint, request, config, root_path=root_path)
25
31
 
26
32
 
27
33
  async def call_rpc_service_endpoint(
28
- service: str, endpoint: str, request: Dict[str, Any], config: Dict[str, Any]
29
- ) -> Dict[str, Any]:
34
+ service: str,
35
+ endpoint: str,
36
+ request: dict[str, Any],
37
+ config: dict[str, Any],
38
+ root_path: Path,
39
+ ) -> dict[str, Any]:
30
40
  from chia.rpc.rpc_client import RpcClient
31
41
 
32
42
  port: uint16
@@ -37,10 +47,10 @@ async def call_rpc_service_endpoint(
37
47
  port = uint16(config[service]["rpc_port"])
38
48
 
39
49
  try:
40
- client = await RpcClient.create(config["self_hostname"], port, DEFAULT_ROOT_PATH, config)
50
+ client = await RpcClient.create(config["self_hostname"], port, root_path, config)
41
51
  except Exception as e:
42
52
  raise Exception(f"Failed to create RPC client {service}: {e}")
43
- result: Dict[str, Any]
53
+ result: dict[str, Any]
44
54
  try:
45
55
  result = await client.fetch(endpoint, request)
46
56
  except ClientResponseError as e:
@@ -56,16 +66,16 @@ async def call_rpc_service_endpoint(
56
66
 
57
67
 
58
68
  async def call_daemon_command(
59
- command: str, request: Dict[str, Any], config: Dict[str, Any], quiet: bool = False
60
- ) -> Dict[str, Any]:
69
+ command: str, request: dict[str, Any], config: dict[str, Any], root_path: Path, quiet: bool = False
70
+ ) -> dict[str, Any]:
61
71
  from chia.daemon.client import connect_to_daemon_and_validate
62
72
 
63
- daemon = await connect_to_daemon_and_validate(DEFAULT_ROOT_PATH, config, quiet=quiet)
73
+ daemon = await connect_to_daemon_and_validate(root_path, config, quiet=quiet)
64
74
 
65
75
  if daemon is None:
66
76
  raise Exception("Failed to connect to chia daemon")
67
77
 
68
- result: Dict[str, Any]
78
+ result: dict[str, Any]
69
79
  try:
70
80
  ws_request = daemon.format_request(command, request)
71
81
  ws_response = await daemon._get(ws_request)
@@ -77,12 +87,12 @@ async def call_daemon_command(
77
87
  return result
78
88
 
79
89
 
80
- def print_result(json_dict: Dict[str, Any]) -> None:
90
+ def print_result(json_dict: dict[str, Any]) -> None:
81
91
  print(json.dumps(json_dict, indent=2, sort_keys=True))
82
92
 
83
93
 
84
- def get_routes(service: str, config: Dict[str, Any], quiet: bool = False) -> Dict[str, Any]:
85
- return asyncio.run(call_endpoint(service, "get_routes", {}, config, quiet))
94
+ def get_routes(service: str, config: dict[str, Any], root_path: Path, quiet: bool = False) -> dict[str, Any]:
95
+ return asyncio.run(call_endpoint(service, "get_routes", {}, config, root_path=root_path, quiet=quiet))
86
96
 
87
97
 
88
98
  @click.group("rpc", help="RPC Client")
@@ -92,10 +102,12 @@ def rpc_cmd() -> None:
92
102
 
93
103
  @rpc_cmd.command("endpoints", help="Print all endpoints of a service")
94
104
  @click.argument("service", type=click.Choice(services))
95
- def endpoints_cmd(service: str) -> None:
96
- config = load_config(DEFAULT_ROOT_PATH, "config.yaml")
105
+ @click.pass_context
106
+ def endpoints_cmd(ctx: click.Context, service: str) -> None:
107
+ root_path = ChiaCliContext.set_default(ctx).root_path
108
+ config = load_config(root_path, "config.yaml")
97
109
  try:
98
- routes = get_routes(service, config)
110
+ routes = get_routes(service, config, root_path=root_path)
99
111
  for route in routes["routes"]:
100
112
  print(route.lstrip("/"))
101
113
  except Exception as e:
@@ -104,10 +116,12 @@ def endpoints_cmd(service: str) -> None:
104
116
 
105
117
  @rpc_cmd.command("status", help="Print the status of all available RPC services")
106
118
  @click.option("--json-output", "json_output", is_flag=True, help="Output status as JSON")
107
- def status_cmd(json_output: bool) -> None:
119
+ @click.pass_context
120
+ def status_cmd(ctx: click.Context, json_output: bool) -> None:
108
121
  import json
109
122
 
110
- config = load_config(DEFAULT_ROOT_PATH, "config.yaml")
123
+ root_path = ChiaCliContext.set_default(ctx).root_path
124
+ config = load_config(root_path, "config.yaml")
111
125
 
112
126
  def print_row(c0: str, c1: str) -> None:
113
127
  print(f"│ {c0:<12} │ {c1:<9} │")
@@ -116,7 +130,7 @@ def status_cmd(json_output: bool) -> None:
116
130
  for service in services:
117
131
  status = "ACTIVE"
118
132
  try:
119
- if not get_routes(service, config, quiet=True)["success"]:
133
+ if not get_routes(service, config, root_path=root_path, quiet=True)["success"]:
120
134
  raise Exception()
121
135
  except Exception:
122
136
  status = "INACTIVE"
@@ -156,16 +170,22 @@ def create_commands() -> None:
156
170
  type=click.File("r"),
157
171
  default=None,
158
172
  )
173
+ @click.pass_context
159
174
  def rpc_client_cmd(
160
- endpoint: str, request: Optional[str], json_file: Optional[TextIO], service: str = service
175
+ ctx: click.Context,
176
+ endpoint: str,
177
+ request: Optional[str],
178
+ json_file: Optional[TextIO],
179
+ service: str = service,
161
180
  ) -> None:
162
- config = load_config(DEFAULT_ROOT_PATH, "config.yaml")
181
+ root_path: Path = ChiaCliContext.set_default(ctx).root_path
182
+ config = load_config(root_path, "config.yaml")
163
183
  if request is not None and json_file is not None:
164
184
  sys.exit(
165
185
  "Can only use one request source: REQUEST argument OR -j/--json-file option. See the help with -h"
166
186
  )
167
187
 
168
- request_json: Dict[str, Any] = {}
188
+ request_json: dict[str, Any] = {}
169
189
  if json_file is not None:
170
190
  try:
171
191
  request_json = json.load(json_file)
@@ -180,7 +200,7 @@ def create_commands() -> None:
180
200
  try:
181
201
  if endpoint[0] == "/":
182
202
  endpoint = endpoint[1:]
183
- print_result(asyncio.run(call_endpoint(service, endpoint, request_json, config)))
203
+ print_result(asyncio.run(call_endpoint(service, endpoint, request_json, config, root_path=root_path)))
184
204
  except Exception as e:
185
205
  sys.exit(str(e))
186
206
 
chia/cmds/show.py CHANGED
@@ -4,6 +4,7 @@ from typing import Optional
4
4
 
5
5
  import click
6
6
 
7
+ from chia.cmds.cmd_classes import ChiaCliContext
7
8
  from chia.cmds.show_funcs import show_async
8
9
 
9
10
 
@@ -62,7 +63,7 @@ def show_cmd(
62
63
  asyncio.run(
63
64
  show_async(
64
65
  rpc_port,
65
- ctx.obj["root_path"],
66
+ ChiaCliContext.set_default(ctx).root_path,
66
67
  fee,
67
68
  state,
68
69
  block_header_hash_by_height,
chia/cmds/show_funcs.py CHANGED
@@ -2,13 +2,13 @@ from __future__ import annotations
2
2
 
3
3
  import json
4
4
  from pathlib import Path
5
- from typing import Any, Dict, List, Optional, Union
5
+ from typing import Any, Optional, Union
6
6
 
7
7
  from chia.rpc.full_node_rpc_client import FullNodeRpcClient
8
8
  from chia.types.blockchain_format.sized_bytes import bytes32
9
9
 
10
10
 
11
- async def print_blockchain_state(node_client: FullNodeRpcClient, config: Dict[str, Any]) -> bool:
11
+ async def print_blockchain_state(node_client: FullNodeRpcClient, config: dict[str, Any]) -> bool:
12
12
  import time
13
13
 
14
14
  from chia.cmds.cmds_util import format_bytes
@@ -43,7 +43,8 @@ async def print_blockchain_state(node_client: FullNodeRpcClient, config: Dict[st
43
43
  sync_current_block = blockchain_state["sync"]["sync_progress_height"]
44
44
  print(
45
45
  f"Current Blockchain Status: Syncing {sync_current_block}/{sync_max_block} "
46
- f"({sync_max_block - sync_current_block} behind). ({sync_current_block*100.0/sync_max_block:2.2f}% synced)"
46
+ f"({sync_max_block - sync_current_block} behind). "
47
+ f"({sync_current_block * 100.0 / sync_max_block:2.2f}% synced)"
47
48
  )
48
49
  print("Peak: Hash:", bytes32(peak.header_hash) if peak is not None else "")
49
50
  elif peak is not None:
@@ -78,7 +79,7 @@ async def print_blockchain_state(node_client: FullNodeRpcClient, config: Dict[st
78
79
  print(f"Current VDF sub_slot_iters: {sub_slot_iters}")
79
80
  print("\n Height: | Hash:")
80
81
 
81
- added_blocks: List[BlockRecord] = []
82
+ added_blocks: list[BlockRecord] = []
82
83
  curr = await node_client.get_block_record(peak.header_hash)
83
84
  while curr is not None and len(added_blocks) < num_blocks and curr.height > 0:
84
85
  added_blocks.append(curr)
@@ -92,7 +93,7 @@ async def print_blockchain_state(node_client: FullNodeRpcClient, config: Dict[st
92
93
 
93
94
 
94
95
  async def print_block_from_hash(
95
- node_client: FullNodeRpcClient, config: Dict[str, Any], block_by_header_hash: str
96
+ node_client: FullNodeRpcClient, config: dict[str, Any], block_by_header_hash: str
96
97
  ) -> None:
97
98
  import time
98
99
 
@@ -196,7 +197,7 @@ async def show_async(
196
197
  ) -> None:
197
198
  from chia.cmds.cmds_util import get_any_service_client
198
199
 
199
- async with get_any_service_client(FullNodeRpcClient, rpc_port, root_path) as (node_client, config):
200
+ async with get_any_service_client(FullNodeRpcClient, root_path, rpc_port) as (node_client, config):
200
201
  # Check State
201
202
  if print_state:
202
203
  if await print_blockchain_state(node_client, config) is True:
chia/cmds/signer.py CHANGED
@@ -3,26 +3,31 @@ from __future__ import annotations
3
3
  import itertools
4
4
  import os
5
5
  import time
6
+ from collections.abc import Sequence
6
7
  from dataclasses import replace
7
- from functools import cached_property
8
8
  from pathlib import Path
9
9
  from threading import Event, Thread
10
- from typing import List, Sequence, Type, TypeVar
10
+ from typing import TypeVar
11
11
 
12
12
  import click
13
13
  from chia_rs import AugSchemeMPL, G2Element
14
14
  from hsms.util.byte_chunks import create_chunks_for_blob, optimal_chunk_size_for_max_chunk_size
15
15
  from segno import QRCode, make_qr
16
16
 
17
- from chia.cmds.cmd_classes import NeedsWalletRPC, chia_command, command_helper, option
18
- from chia.cmds.cmds_util import TransactionBundle
19
- from chia.cmds.wallet import wallet_cmd
17
+ from chia.cmds.cmd_classes import chia_command, command_helper, option
18
+ from chia.cmds.cmd_helpers import NeedsWalletRPC, TransactionsIn, TransactionsOut
20
19
  from chia.rpc.util import ALL_TRANSLATION_LAYERS
21
- from chia.rpc.wallet_request_types import ApplySignatures, ExecuteSigningInstructions, GatherSigningInfo
20
+ from chia.rpc.wallet_request_types import (
21
+ ApplySignatures,
22
+ ExecuteSigningInstructions,
23
+ GatherSigningInfo,
24
+ PushTransactions,
25
+ )
22
26
  from chia.util.streamable import Streamable
23
27
  from chia.wallet.signer_protocol import SignedTransaction, SigningInstructions, SigningResponse, Spend
24
28
  from chia.wallet.transaction_record import TransactionRecord
25
29
  from chia.wallet.util.clvm_streamable import byte_deserialize_clvm_streamable, byte_serialize_clvm_streamable
30
+ from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
26
31
  from chia.wallet.wallet_spend_bundle import WalletSpendBundle
27
32
 
28
33
 
@@ -31,7 +36,7 @@ def _clear_screen() -> None:
31
36
  os.system("cls" if os.name == "nt" else "clear")
32
37
 
33
38
 
34
- @wallet_cmd.group("signer", help="Get information for an external signer")
39
+ @click.group("signer", help="Get information for an external signer")
35
40
  def signer_cmd() -> None:
36
41
  pass # pragma: no cover
37
42
 
@@ -55,7 +60,7 @@ class QrCodeDisplay:
55
60
  show_default=True,
56
61
  )
57
62
 
58
- def _display_qr(self, index: int, max_index: int, code_list: List[QRCode], stop_event: Event) -> None:
63
+ def _display_qr(self, index: int, max_index: int, code_list: list[QRCode], stop_event: Event) -> None:
59
64
  while not stop_event.is_set():
60
65
  for qr_code in itertools.cycle(code_list):
61
66
  _clear_screen()
@@ -68,7 +73,7 @@ class QrCodeDisplay:
68
73
  if stop_event.is_set():
69
74
  return
70
75
 
71
- def display_qr_codes(self, blobs: List[bytes]) -> None:
76
+ def display_qr_codes(self, blobs: list[bytes]) -> None:
72
77
  chunk_sizes = [optimal_chunk_size_for_max_chunk_size(len(blob), self.qr_density) for blob in blobs]
73
78
  chunks = [create_chunks_for_blob(blob, chunk_size) for blob, chunk_size in zip(blobs, chunk_sizes)]
74
79
  qr_codes = [[make_qr(chunk) for chunk in chks] for chks in chunks]
@@ -86,37 +91,6 @@ class QrCodeDisplay:
86
91
  stop_event.clear()
87
92
 
88
93
 
89
- @command_helper
90
- class TransactionsIn:
91
- transaction_file_in: str = option(
92
- "--transaction-file-in",
93
- "-i",
94
- type=str,
95
- help="Transaction file to use as input",
96
- required=True,
97
- )
98
-
99
- @cached_property
100
- def transaction_bundle(self) -> TransactionBundle:
101
- with open(Path(self.transaction_file_in), "rb") as file:
102
- return TransactionBundle.from_bytes(file.read())
103
-
104
-
105
- @command_helper
106
- class TransactionsOut:
107
- transaction_file_out: str = option(
108
- "--transaction-file-out",
109
- "-o",
110
- type=str,
111
- help="Transaction filename to use as output",
112
- required=True,
113
- )
114
-
115
- def handle_transaction_output(self, output: List[TransactionRecord]) -> None:
116
- with open(Path(self.transaction_file_out), "wb") as file:
117
- file.write(bytes(TransactionBundle(output)))
118
-
119
-
120
94
  @command_helper
121
95
  class _SPTranslation:
122
96
  translation: str = option(
@@ -142,9 +116,9 @@ class SPIn(_SPTranslation):
142
116
  required=True,
143
117
  )
144
118
 
145
- def read_sp_input(self, typ: Type[_T_ClvmStreamable]) -> List[_T_ClvmStreamable]:
146
- final_list: List[_T_ClvmStreamable] = []
147
- for filename in self.signer_protocol_input: # pylint: disable=not-an-iterable
119
+ def read_sp_input(self, typ: type[_T_ClvmStreamable]) -> list[_T_ClvmStreamable]:
120
+ final_list: list[_T_ClvmStreamable] = []
121
+ for filename in self.signer_protocol_input:
148
122
  with open(Path(filename), "rb") as file:
149
123
  final_list.append(
150
124
  byte_deserialize_clvm_streamable(
@@ -176,7 +150,7 @@ class SPOut(QrCodeDisplay, _SPTranslation):
176
150
  help="The file(s) to output to (if --output-format=file)",
177
151
  )
178
152
 
179
- def handle_clvm_output(self, outputs: List[Streamable]) -> None:
153
+ def handle_clvm_output(self, outputs: list[Streamable]) -> None:
180
154
  translation_layer = ALL_TRANSLATION_LAYERS[self.translation] if self.translation != "none" else None
181
155
  if self.output_format == "hex":
182
156
  for output in outputs:
@@ -202,9 +176,10 @@ class SPOut(QrCodeDisplay, _SPTranslation):
202
176
 
203
177
 
204
178
  @chia_command(
205
- signer_cmd,
206
- "gather_signing_info",
207
- "Gather the information from a transaction that a signer needs in order to create a signature",
179
+ group=signer_cmd,
180
+ name="gather_signing_info",
181
+ short_help="gather signer information",
182
+ help="Gather the information from a transaction that a signer needs in order to create a signature",
208
183
  )
209
184
  class GatherSigningInfoCMD:
210
185
  sp_out: SPOut
@@ -213,7 +188,7 @@ class GatherSigningInfoCMD:
213
188
 
214
189
  async def run(self) -> None:
215
190
  async with self.rpc_info.wallet_rpc() as wallet_rpc:
216
- spends: List[Spend] = [
191
+ spends: list[Spend] = [
217
192
  Spend.from_coin_spend(cs)
218
193
  for tx in self.txs_in.transaction_bundle.txs
219
194
  if tx.spend_bundle is not None
@@ -225,7 +200,12 @@ class GatherSigningInfoCMD:
225
200
  self.sp_out.handle_clvm_output([signing_instructions])
226
201
 
227
202
 
228
- @chia_command(signer_cmd, "apply_signatures", "Apply a signer's signatures to a transaction bundle")
203
+ @chia_command(
204
+ group=signer_cmd,
205
+ name="apply_signatures",
206
+ short_help="apply signatures",
207
+ help="Apply a signer's signatures to a transaction bundle",
208
+ )
229
209
  class ApplySignaturesCMD:
230
210
  txs_out: TransactionsOut
231
211
  sp_in: SPIn
@@ -234,19 +214,19 @@ class ApplySignaturesCMD:
234
214
 
235
215
  async def run(self) -> None:
236
216
  async with self.rpc_info.wallet_rpc() as wallet_rpc:
237
- signing_responses: List[SigningResponse] = self.sp_in.read_sp_input(SigningResponse)
238
- spends: List[Spend] = [
217
+ signing_responses: list[SigningResponse] = self.sp_in.read_sp_input(SigningResponse)
218
+ spends: list[Spend] = [
239
219
  Spend.from_coin_spend(cs)
240
220
  for tx in self.txs_in.transaction_bundle.txs
241
221
  if tx.spend_bundle is not None
242
222
  for cs in tx.spend_bundle.coin_spends
243
223
  ]
244
- signed_transactions: List[SignedTransaction] = (
224
+ signed_transactions: list[SignedTransaction] = (
245
225
  await wallet_rpc.client.apply_signatures(
246
226
  ApplySignatures(spends=spends, signing_responses=signing_responses)
247
227
  )
248
228
  ).signed_transactions
249
- signed_spends: List[Spend] = [spend for tx in signed_transactions for spend in tx.transaction_info.spends]
229
+ signed_spends: list[Spend] = [spend for tx in signed_transactions for spend in tx.transaction_info.spends]
250
230
  final_signature: G2Element = G2Element()
251
231
  for signature in [sig for tx in signed_transactions for sig in tx.signatures]:
252
232
  if signature.type != "bls_12381_aug_scheme": # pragma: no cover
@@ -254,7 +234,7 @@ class ApplySignaturesCMD:
254
234
  return
255
235
  final_signature = AugSchemeMPL.aggregate([final_signature, G2Element.from_bytes(signature.signature)])
256
236
  new_spend_bundle = WalletSpendBundle([spend.as_coin_spend() for spend in signed_spends], final_signature)
257
- new_transactions: List[TransactionRecord] = [
237
+ new_transactions: list[TransactionRecord] = [
258
238
  replace(
259
239
  self.txs_in.transaction_bundle.txs[0], spend_bundle=new_spend_bundle, name=new_spend_bundle.name()
260
240
  ),
@@ -263,7 +243,12 @@ class ApplySignaturesCMD:
263
243
  self.txs_out.handle_transaction_output(new_transactions)
264
244
 
265
245
 
266
- @chia_command(signer_cmd, "execute_signing_instructions", "Given some signing instructions, return signing responses")
246
+ @chia_command(
247
+ group=signer_cmd,
248
+ name="execute_signing_instructions",
249
+ short_help="execute signing instructions",
250
+ help="Given some signing instructions, return signing responses",
251
+ )
267
252
  class ExecuteSigningInstructionsCMD:
268
253
  sp_out: SPOut
269
254
  sp_in: SPIn
@@ -271,7 +256,7 @@ class ExecuteSigningInstructionsCMD:
271
256
 
272
257
  async def run(self) -> None:
273
258
  async with self.rpc_info.wallet_rpc() as wallet_rpc:
274
- signing_instructions: List[SigningInstructions] = self.sp_in.read_sp_input(SigningInstructions)
259
+ signing_instructions: list[SigningInstructions] = self.sp_in.read_sp_input(SigningInstructions)
275
260
  self.sp_out.handle_clvm_output(
276
261
  [
277
262
  signing_response
@@ -285,14 +270,21 @@ class ExecuteSigningInstructionsCMD:
285
270
  )
286
271
 
287
272
 
288
- @chia_command(wallet_cmd, "push_transactions", "Push a transaction bundle to the wallet to send to the network")
273
+ @chia_command(
274
+ name="push_transactions",
275
+ short_help="push transaction bundle",
276
+ help="Push a transaction bundle to the wallet to send to the network",
277
+ )
289
278
  class PushTransactionsCMD:
290
279
  txs_in: TransactionsIn
291
280
  rpc_info: NeedsWalletRPC
292
281
 
293
282
  async def run(self) -> None:
294
283
  async with self.rpc_info.wallet_rpc() as wallet_rpc:
295
- await wallet_rpc.client.push_transactions(self.txs_in.transaction_bundle.txs)
284
+ # TODO: provide access to additional parameters instead of filling with the defaults constant
285
+ await wallet_rpc.client.push_transactions(
286
+ PushTransactions(transactions=self.txs_in.transaction_bundle.txs), DEFAULT_TX_CONFIG
287
+ )
296
288
 
297
289
 
298
290
  # Uncomment this for testing of qr code display
chia/cmds/sim.py CHANGED
@@ -7,6 +7,7 @@ from typing import Any, Optional
7
7
  import click
8
8
 
9
9
  from chia.cmds import options
10
+ from chia.cmds.cmd_classes import ChiaCliContext
10
11
  from chia.cmds.sim_funcs import async_config_wizard, farm_blocks, print_status, revert_block_height, set_auto_farm
11
12
  from chia.util.default_root import SIMULATOR_ROOT_PATH
12
13
 
@@ -34,10 +35,9 @@ from chia.util.default_root import SIMULATOR_ROOT_PATH
34
35
  )
35
36
  @click.pass_context
36
37
  def sim_cmd(ctx: click.Context, rpc_port: Optional[int], root_path: str, simulator_name: str) -> None:
37
- ctx.ensure_object(dict)
38
- ctx.obj["root_path"] = Path(root_path) / simulator_name
39
- ctx.obj["sim_name"] = simulator_name
40
- ctx.obj["rpc_port"] = rpc_port
38
+ context = ChiaCliContext.set_default(ctx)
39
+ context.root_path = Path(root_path) / simulator_name
40
+ context.rpc_port = rpc_port
41
41
 
42
42
 
43
43
  @sim_cmd.command("create", help="Guides you through the process of setting up a Chia Simulator")
@@ -73,13 +73,14 @@ def create_simulator_config(
73
73
  docker_mode: bool,
74
74
  no_bitfield: bool,
75
75
  ) -> None:
76
- print(f"Using this Directory: {ctx.obj['root_path']}\n")
76
+ root_path = ChiaCliContext.set_default(ctx).root_path
77
+ print(f"Using this Directory: {root_path}\n")
77
78
  if fingerprint and mnemonic:
78
79
  print("You can't use both a fingerprint and a mnemonic. Please choose one.")
79
80
  return None
80
81
  asyncio.run(
81
82
  async_config_wizard(
82
- ctx.obj["root_path"],
83
+ root_path,
83
84
  fingerprint,
84
85
  reward_address,
85
86
  plot_directory,
@@ -132,10 +133,12 @@ def status_cmd(
132
133
  include_rewards: bool,
133
134
  show_addresses: bool,
134
135
  ) -> None:
136
+ context = ChiaCliContext.set_default(ctx)
137
+
135
138
  asyncio.run(
136
139
  print_status(
137
- ctx.obj["rpc_port"],
138
- ctx.obj["root_path"],
140
+ context.rpc_port,
141
+ context.root_path,
139
142
  fingerprint,
140
143
  show_key,
141
144
  show_coins,
@@ -174,10 +177,13 @@ def revert_cmd(
174
177
  if reset and blocks != 1:
175
178
  print("\nBlocks, '-b' must not be set if all blocks are selected by reset, '-r'. Exiting.\n")
176
179
  return
180
+
181
+ context = ChiaCliContext.set_default(ctx)
182
+
177
183
  asyncio.run(
178
184
  revert_block_height(
179
- ctx.obj["rpc_port"],
180
- ctx.obj["root_path"],
185
+ context.rpc_port,
186
+ context.root_path,
181
187
  blocks,
182
188
  new_blocks,
183
189
  reset,
@@ -192,10 +198,11 @@ def revert_cmd(
192
198
  @click.option("-a", "--target-address", type=str, default="", help="Block reward address")
193
199
  @click.pass_context
194
200
  def farm_cmd(ctx: click.Context, blocks: int, non_transaction: bool, target_address: str) -> None:
201
+ context = ChiaCliContext.set_default(ctx)
195
202
  asyncio.run(
196
203
  farm_blocks(
197
- ctx.obj["rpc_port"],
198
- ctx.obj["root_path"],
204
+ context.rpc_port,
205
+ context.root_path,
199
206
  blocks,
200
207
  not non_transaction,
201
208
  target_address,
@@ -208,10 +215,11 @@ def farm_cmd(ctx: click.Context, blocks: int, non_transaction: bool, target_addr
208
215
  @click.pass_context
209
216
  def autofarm_cmd(ctx: click.Context, set_autofarm: str) -> None:
210
217
  autofarm = bool(set_autofarm == "on")
218
+ context = ChiaCliContext.set_default(ctx)
211
219
  asyncio.run(
212
220
  set_auto_farm(
213
- ctx.obj["rpc_port"],
214
- ctx.obj["root_path"],
221
+ context.rpc_port,
222
+ context.root_path,
215
223
  autofarm,
216
224
  )
217
225
  )
chia/cmds/sim_funcs.py CHANGED
@@ -5,7 +5,7 @@ import os
5
5
  import sys
6
6
  from pathlib import Path, PureWindowsPath
7
7
  from random import randint
8
- from typing import Any, Dict, List, Optional
8
+ from typing import Any, Optional
9
9
 
10
10
  from aiohttp import ClientConnectorError
11
11
  from chia_rs import PrivateKey
@@ -47,7 +47,7 @@ def create_chia_directory(
47
47
  plot_directory: Optional[str],
48
48
  auto_farm: Optional[bool],
49
49
  docker_mode: bool,
50
- ) -> Dict[str, Any]:
50
+ ) -> dict[str, Any]:
51
51
  """
52
52
  This function creates a new chia directory and returns a heavily modified config,
53
53
  suitable for use in the simulator.
@@ -57,7 +57,7 @@ def create_chia_directory(
57
57
  if not chia_root.is_dir() or not Path(chia_root / "config" / "config.yaml").exists():
58
58
  # create chia directories & load config
59
59
  chia_init(chia_root, testnet=True, fix_ssl_permissions=True)
60
- config: Dict[str, Any] = load_config(chia_root, "config.yaml")
60
+ config: dict[str, Any] = load_config(chia_root, "config.yaml")
61
61
  # apply standard block-tools config.
62
62
  config["full_node"]["send_uncompact_interval"] = 0
63
63
  config["full_node"]["target_uncompact_proofs"] = 30
@@ -243,7 +243,7 @@ def select_fingerprint(
243
243
  return fingerprint
244
244
 
245
245
 
246
- async def generate_plots(config: Dict[str, Any], root_path: Path, fingerprint: int, bitfield: bool) -> None:
246
+ async def generate_plots(config: dict[str, Any], root_path: Path, fingerprint: int, bitfield: bool) -> None:
247
247
  """
248
248
  Pre-Generate plots for the new simulator instance.
249
249
  """
@@ -345,14 +345,14 @@ def print_coin_record(
345
345
 
346
346
 
347
347
  async def print_coin_records(
348
- config: Dict[str, Any],
348
+ config: dict[str, Any],
349
349
  node_client: SimulatorFullNodeRpcClient,
350
350
  include_reward_coins: bool,
351
351
  include_spent: bool = False,
352
352
  ) -> None:
353
353
  import sys
354
354
 
355
- coin_records: List[CoinRecord] = await node_client.get_all_coins(include_spent)
355
+ coin_records: list[CoinRecord] = await node_client.get_all_coins(include_spent)
356
356
  coin_records = [coin_record for coin_record in coin_records if not coin_record.coinbase or include_reward_coins]
357
357
  address_prefix = config["network_overrides"]["config"][config["selected_network"]]["address_prefix"]
358
358
  name = "mojo"
@@ -382,7 +382,7 @@ async def print_coin_records(
382
382
  break
383
383
 
384
384
 
385
- async def print_wallets(config: Dict[str, Any], node_client: SimulatorFullNodeRpcClient) -> None:
385
+ async def print_wallets(config: dict[str, Any], node_client: SimulatorFullNodeRpcClient) -> None:
386
386
  ph_and_amount = await node_client.get_all_puzzle_hashes()
387
387
  address_prefix = config["network_overrides"]["config"][config["selected_network"]]["address_prefix"]
388
388
  name = "mojo"
@@ -407,7 +407,7 @@ async def print_status(
407
407
  from chia.cmds.show_funcs import print_blockchain_state
408
408
  from chia.cmds.units import units
409
409
 
410
- async with get_any_service_client(SimulatorFullNodeRpcClient, rpc_port, root_path) as (node_client, config):
410
+ async with get_any_service_client(SimulatorFullNodeRpcClient, root_path, rpc_port) as (node_client, config):
411
411
  # Display keychain info
412
412
  if show_key:
413
413
  if fingerprint is None:
@@ -451,7 +451,7 @@ async def revert_block_height(
451
451
  """
452
452
  This function allows users to easily revert the chain to a previous state or perform a reorg.
453
453
  """
454
- async with get_any_service_client(SimulatorFullNodeRpcClient, rpc_port, root_path) as (node_client, _):
454
+ async with get_any_service_client(SimulatorFullNodeRpcClient, root_path, rpc_port) as (node_client, _):
455
455
  if use_revert_blocks:
456
456
  if num_new_blocks != 1:
457
457
  print(f"Ignoring num_new_blocks: {num_new_blocks}, because we are not performing a reorg.")
@@ -479,7 +479,7 @@ async def farm_blocks(
479
479
  """
480
480
  This function is used to generate new blocks.
481
481
  """
482
- async with get_any_service_client(SimulatorFullNodeRpcClient, rpc_port, root_path) as (node_client, config):
482
+ async with get_any_service_client(SimulatorFullNodeRpcClient, root_path, rpc_port) as (node_client, config):
483
483
  if target_address == "":
484
484
  target_address = config["simulator"]["farming_address"]
485
485
  if target_address is None:
@@ -500,7 +500,7 @@ async def set_auto_farm(rpc_port: Optional[int], root_path: Path, set_autofarm:
500
500
  """
501
501
  This function can be used to enable or disable Auto Farming.
502
502
  """
503
- async with get_any_service_client(SimulatorFullNodeRpcClient, rpc_port, root_path) as (node_client, _):
503
+ async with get_any_service_client(SimulatorFullNodeRpcClient, root_path, rpc_port) as (node_client, _):
504
504
  current = await node_client.get_auto_farming()
505
505
  if current == set_autofarm:
506
506
  print(f"Auto farming is already {'on' if set_autofarm else 'off'}")