chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.6.0rc2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_blockchain_transactions.py +5 -2
  6. chia/_tests/blockchain/test_build_chains.py +2 -4
  7. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  8. chia/_tests/clvm/coin_store.py +4 -7
  9. chia/_tests/clvm/test_clvm_step.py +4 -4
  10. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  11. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  12. chia/_tests/clvm/test_singletons.py +2 -4
  13. chia/_tests/clvm/test_spend_sim.py +2 -2
  14. chia/_tests/cmds/cmd_test_utils.py +27 -45
  15. chia/_tests/cmds/test_cmd_framework.py +6 -6
  16. chia/_tests/cmds/test_daemon.py +3 -3
  17. chia/_tests/cmds/test_show.py +4 -4
  18. chia/_tests/cmds/test_tx_config_args.py +1 -2
  19. chia/_tests/cmds/testing_classes.py +4 -5
  20. chia/_tests/cmds/wallet/test_did.py +24 -27
  21. chia/_tests/cmds/wallet/test_nft.py +12 -10
  22. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  23. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  24. chia/_tests/conftest.py +66 -31
  25. chia/_tests/connection_utils.py +2 -2
  26. chia/_tests/core/cmds/test_beta.py +4 -4
  27. chia/_tests/core/cmds/test_keys.py +2 -3
  28. chia/_tests/core/cmds/test_wallet.py +15 -15
  29. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  30. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  31. chia/_tests/core/daemon/test_daemon.py +11 -11
  32. chia/_tests/core/data_layer/conftest.py +2 -2
  33. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  34. chia/_tests/core/data_layer/test_data_store.py +10 -10
  35. chia/_tests/core/data_layer/util.py +11 -11
  36. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  37. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  38. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  39. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  40. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  41. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  42. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  43. chia/_tests/core/full_node/test_conditions.py +21 -23
  44. chia/_tests/core/full_node/test_full_node.py +273 -70
  45. chia/_tests/core/full_node/test_hard_fork_utils.py +92 -0
  46. chia/_tests/core/full_node/test_hint_management.py +2 -4
  47. chia/_tests/core/full_node/test_performance.py +0 -1
  48. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  49. chia/_tests/core/full_node/test_transactions.py +1 -2
  50. chia/_tests/core/full_node/test_tx_processing_queue.py +198 -30
  51. chia/_tests/core/mempool/test_mempool.py +54 -50
  52. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  53. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  54. chia/_tests/core/mempool/test_mempool_manager.py +988 -854
  55. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  56. chia/_tests/core/server/serve.py +7 -7
  57. chia/_tests/core/server/test_dos.py +1 -2
  58. chia/_tests/core/server/test_event_loop.py +12 -4
  59. chia/_tests/core/server/test_loop.py +7 -8
  60. chia/_tests/core/server/test_rate_limits.py +9 -8
  61. chia/_tests/core/server/test_server.py +61 -1
  62. chia/_tests/core/services/test_services.py +2 -2
  63. chia/_tests/core/ssl/test_ssl.py +2 -2
  64. chia/_tests/core/test_cost_calculation.py +2 -6
  65. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  66. chia/_tests/core/test_filter.py +0 -1
  67. chia/_tests/core/test_full_node_rpc.py +2 -2
  68. chia/_tests/core/test_merkle_set.py +1 -2
  69. chia/_tests/core/test_seeder.py +4 -4
  70. chia/_tests/core/util/test_config.py +4 -4
  71. chia/_tests/core/util/test_jsonify.py +2 -2
  72. chia/_tests/core/util/test_keychain.py +3 -3
  73. chia/_tests/core/util/test_lockfile.py +2 -1
  74. chia/_tests/core/util/test_log_exceptions.py +1 -2
  75. chia/_tests/core/util/test_streamable.py +17 -17
  76. chia/_tests/db/test_db_wrapper.py +3 -2
  77. chia/_tests/environments/wallet.py +14 -14
  78. chia/_tests/ether.py +4 -3
  79. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  80. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  81. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  82. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  83. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  84. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  85. chia/_tests/harvester/test_harvester_api.py +11 -4
  86. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  87. chia/_tests/plot_sync/test_receiver.py +11 -10
  88. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  89. chia/_tests/plot_sync/util.py +1 -2
  90. chia/_tests/plotting/test_plot_manager.py +7 -6
  91. chia/_tests/plotting/test_prover.py +30 -38
  92. chia/_tests/pools/test_pool_cmdline.py +4 -6
  93. chia/_tests/pools/test_pool_rpc.py +203 -61
  94. chia/_tests/pools/test_pool_wallet.py +3 -3
  95. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  96. chia/_tests/process_junit.py +2 -2
  97. chia/_tests/rpc/test_rpc_client.py +4 -4
  98. chia/_tests/rpc/test_rpc_server.py +3 -3
  99. chia/_tests/simulation/test_simulation.py +12 -25
  100. chia/_tests/solver/test_solver_service.py +13 -4
  101. chia/_tests/testconfig.py +2 -2
  102. chia/_tests/timelord/test_new_peak.py +22 -11
  103. chia/_tests/tools/test_run_block.py +0 -2
  104. chia/_tests/tools/test_virtual_project.py +2 -1
  105. chia/_tests/util/benchmarks.py +1 -0
  106. chia/_tests/util/blockchain.py +38 -36
  107. chia/_tests/util/blockchain_mock.py +11 -11
  108. chia/_tests/util/build_network_protocol_files.py +2 -1
  109. chia/_tests/util/coin_store.py +2 -1
  110. chia/_tests/util/config.py +1 -1
  111. chia/_tests/util/db_connection.py +2 -3
  112. chia/_tests/util/full_sync.py +9 -11
  113. chia/_tests/util/gen_ssl_certs.py +4 -5
  114. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  115. chia/_tests/util/misc.py +24 -24
  116. chia/_tests/util/network_protocol_data.py +20 -3
  117. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  118. chia/_tests/util/protocol_messages_json.py +292 -3
  119. chia/_tests/util/setup_nodes.py +62 -47
  120. chia/_tests/util/spend_sim.py +57 -57
  121. chia/_tests/util/test_async_pool.py +2 -3
  122. chia/_tests/util/test_chia_version.py +1 -3
  123. chia/_tests/util/test_config.py +3 -3
  124. chia/_tests/util/test_full_block_utils.py +6 -3
  125. chia/_tests/util/test_limited_semaphore.py +1 -2
  126. chia/_tests/util/test_misc.py +2 -2
  127. chia/_tests/util/test_network.py +1 -2
  128. chia/_tests/util/test_priority_mutex.py +3 -3
  129. chia/_tests/util/test_recursive_replace.py +5 -6
  130. chia/_tests/util/test_replace_str_to_bytes.py +9 -10
  131. chia/_tests/util/test_testnet_overrides.py +3 -3
  132. chia/_tests/util/time_out_assert.py +2 -2
  133. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  134. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  135. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  136. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  137. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  138. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  139. chia/_tests/wallet/conftest.py +6 -6
  140. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  141. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  142. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  145. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  146. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  147. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  148. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  149. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  150. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  151. chia/_tests/wallet/sync/test_wallet_sync.py +63 -60
  152. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  153. chia/_tests/wallet/test_coin_management.py +2 -2
  154. chia/_tests/wallet/test_conditions.py +45 -51
  155. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  156. chia/_tests/wallet/test_new_wallet_protocol.py +17 -17
  157. chia/_tests/wallet/test_notifications.py +14 -14
  158. chia/_tests/wallet/test_signer_protocol.py +5 -5
  159. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  160. chia/_tests/wallet/test_transaction_store.py +20 -20
  161. chia/_tests/wallet/test_util.py +2 -2
  162. chia/_tests/wallet/test_wallet.py +380 -228
  163. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  164. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  165. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  166. chia/_tests/wallet/test_wallet_node.py +16 -15
  167. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  168. chia/_tests/wallet/test_wallet_utils.py +2 -3
  169. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  170. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  171. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  172. chia/_tests/wallet/wallet_block_tools.py +12 -11
  173. chia/_tests/weight_proof/config.py +1 -0
  174. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  175. chia/apis/__init__.py +21 -0
  176. chia/apis/farmer_stub.py +102 -0
  177. chia/apis/full_node_stub.py +374 -0
  178. chia/apis/harvester_stub.py +57 -0
  179. chia/apis/introducer_stub.py +35 -0
  180. chia/apis/solver_stub.py +30 -0
  181. chia/apis/stub_protocol_registry.py +21 -0
  182. chia/apis/timelord_stub.py +39 -0
  183. chia/apis/wallet_stub.py +161 -0
  184. chia/cmds/beta.py +3 -4
  185. chia/cmds/beta_funcs.py +4 -3
  186. chia/cmds/check_wallet_db.py +4 -4
  187. chia/cmds/chia.py +1 -2
  188. chia/cmds/cmd_classes.py +11 -13
  189. chia/cmds/cmd_helpers.py +11 -11
  190. chia/cmds/cmds_util.py +15 -15
  191. chia/cmds/coin_funcs.py +6 -7
  192. chia/cmds/coins.py +2 -3
  193. chia/cmds/configure.py +1 -2
  194. chia/cmds/data.py +42 -42
  195. chia/cmds/data_funcs.py +81 -81
  196. chia/cmds/db.py +4 -5
  197. chia/cmds/db_backup_func.py +2 -2
  198. chia/cmds/db_upgrade_func.py +3 -3
  199. chia/cmds/db_validate_func.py +2 -2
  200. chia/cmds/dev/data.py +4 -4
  201. chia/cmds/dev/gh.py +5 -5
  202. chia/cmds/dev/installers.py +2 -3
  203. chia/cmds/dev/mempool.py +3 -4
  204. chia/cmds/dev/mempool_funcs.py +4 -4
  205. chia/cmds/dev/sim.py +8 -8
  206. chia/cmds/dump_keyring.py +3 -3
  207. chia/cmds/farm.py +6 -8
  208. chia/cmds/farm_funcs.py +25 -24
  209. chia/cmds/init_funcs.py +4 -4
  210. chia/cmds/keys.py +16 -18
  211. chia/cmds/keys_funcs.py +36 -36
  212. chia/cmds/netspace.py +1 -3
  213. chia/cmds/netspace_funcs.py +1 -2
  214. chia/cmds/options.py +3 -2
  215. chia/cmds/param_types.py +17 -16
  216. chia/cmds/passphrase.py +6 -7
  217. chia/cmds/passphrase_funcs.py +11 -13
  218. chia/cmds/peer.py +1 -3
  219. chia/cmds/peer_funcs.py +3 -3
  220. chia/cmds/plotnft.py +6 -7
  221. chia/cmds/plotnft_funcs.py +37 -26
  222. chia/cmds/rpc.py +3 -3
  223. chia/cmds/show.py +3 -5
  224. chia/cmds/show_funcs.py +9 -9
  225. chia/cmds/sim_funcs.py +25 -26
  226. chia/cmds/solver.py +1 -3
  227. chia/cmds/solver_funcs.py +1 -2
  228. chia/cmds/start_funcs.py +2 -2
  229. chia/cmds/wallet.py +76 -81
  230. chia/cmds/wallet_funcs.py +206 -177
  231. chia/consensus/augmented_chain.py +6 -6
  232. chia/consensus/block_body_validation.py +19 -15
  233. chia/consensus/block_creation.py +25 -21
  234. chia/consensus/block_header_validation.py +27 -13
  235. chia/consensus/block_height_map.py +3 -6
  236. chia/consensus/block_height_map_protocol.py +2 -2
  237. chia/consensus/block_record.py +2 -4
  238. chia/consensus/blockchain.py +58 -40
  239. chia/consensus/blockchain_interface.py +7 -7
  240. chia/consensus/coin_store_protocol.py +5 -6
  241. chia/consensus/condition_tools.py +4 -4
  242. chia/consensus/cost_calculator.py +2 -3
  243. chia/consensus/default_constants.py +19 -13
  244. chia/consensus/deficit.py +1 -3
  245. chia/consensus/difficulty_adjustment.py +3 -5
  246. chia/consensus/find_fork_point.py +2 -4
  247. chia/consensus/full_block_to_block_record.py +11 -13
  248. chia/consensus/generator_tools.py +2 -3
  249. chia/consensus/get_block_challenge.py +50 -26
  250. chia/consensus/get_block_generator.py +2 -3
  251. chia/consensus/make_sub_epoch_summary.py +8 -7
  252. chia/consensus/multiprocess_validation.py +31 -20
  253. chia/consensus/pos_quality.py +6 -23
  254. chia/consensus/pot_iterations.py +17 -44
  255. chia/consensus/signage_point.py +4 -5
  256. chia/consensus/vdf_info_computation.py +2 -4
  257. chia/daemon/client.py +8 -8
  258. chia/daemon/keychain_proxy.py +31 -37
  259. chia/daemon/server.py +32 -33
  260. chia/daemon/windows_signal.py +4 -3
  261. chia/data_layer/data_layer.py +86 -77
  262. chia/data_layer/data_layer_rpc_api.py +9 -9
  263. chia/data_layer/data_layer_rpc_client.py +13 -15
  264. chia/data_layer/data_layer_server.py +3 -3
  265. chia/data_layer/data_layer_util.py +14 -14
  266. chia/data_layer/data_layer_wallet.py +94 -101
  267. chia/data_layer/data_store.py +50 -50
  268. chia/data_layer/dl_wallet_store.py +9 -12
  269. chia/data_layer/download_data.py +8 -9
  270. chia/data_layer/s3_plugin_service.py +5 -9
  271. chia/data_layer/start_data_layer.py +5 -5
  272. chia/farmer/farmer.py +31 -31
  273. chia/farmer/farmer_api.py +45 -33
  274. chia/farmer/farmer_rpc_api.py +5 -4
  275. chia/farmer/farmer_rpc_client.py +6 -6
  276. chia/farmer/start_farmer.py +6 -6
  277. chia/full_node/block_store.py +13 -16
  278. chia/full_node/check_fork_next_block.py +1 -2
  279. chia/full_node/coin_store.py +15 -16
  280. chia/full_node/eligible_coin_spends.py +3 -3
  281. chia/full_node/fee_estimate_store.py +2 -3
  282. chia/full_node/fee_tracker.py +1 -2
  283. chia/full_node/full_block_utils.py +4 -4
  284. chia/full_node/full_node.py +239 -223
  285. chia/full_node/full_node_api.py +197 -152
  286. chia/full_node/full_node_rpc_api.py +34 -32
  287. chia/full_node/full_node_rpc_client.py +18 -19
  288. chia/full_node/full_node_store.py +45 -43
  289. chia/full_node/hard_fork_utils.py +44 -0
  290. chia/full_node/hint_management.py +2 -2
  291. chia/full_node/mempool.py +17 -19
  292. chia/full_node/mempool_manager.py +89 -42
  293. chia/full_node/pending_tx_cache.py +2 -3
  294. chia/full_node/start_full_node.py +5 -5
  295. chia/full_node/sync_store.py +3 -4
  296. chia/full_node/tx_processing_queue.py +120 -36
  297. chia/full_node/weight_proof.py +61 -48
  298. chia/harvester/harvester.py +25 -24
  299. chia/harvester/harvester_api.py +61 -38
  300. chia/harvester/harvester_rpc_api.py +10 -10
  301. chia/harvester/start_harvester.py +4 -4
  302. chia/introducer/introducer.py +3 -3
  303. chia/introducer/introducer_api.py +6 -4
  304. chia/introducer/start_introducer.py +4 -4
  305. chia/legacy/keyring.py +3 -3
  306. chia/plot_sync/delta.py +1 -2
  307. chia/plot_sync/receiver.py +20 -17
  308. chia/plot_sync/sender.py +15 -10
  309. chia/plotters/bladebit.py +7 -7
  310. chia/plotters/chiapos.py +2 -2
  311. chia/plotters/madmax.py +4 -4
  312. chia/plotters/plotters.py +4 -4
  313. chia/plotters/plotters_util.py +3 -3
  314. chia/plotting/cache.py +20 -14
  315. chia/plotting/check_plots.py +26 -35
  316. chia/plotting/create_plots.py +22 -23
  317. chia/plotting/manager.py +21 -14
  318. chia/plotting/prover.py +59 -42
  319. chia/plotting/util.py +16 -16
  320. chia/pools/pool_config.py +2 -1
  321. chia/pools/pool_puzzles.py +11 -12
  322. chia/pools/pool_wallet.py +34 -57
  323. chia/pools/pool_wallet_info.py +39 -10
  324. chia/protocols/farmer_protocol.py +8 -9
  325. chia/protocols/fee_estimate.py +3 -4
  326. chia/protocols/full_node_protocol.py +3 -4
  327. chia/protocols/harvester_protocol.py +27 -15
  328. chia/protocols/outbound_message.py +3 -3
  329. chia/protocols/pool_protocol.py +8 -9
  330. chia/protocols/shared_protocol.py +1 -2
  331. chia/protocols/solver_protocol.py +9 -2
  332. chia/protocols/timelord_protocol.py +4 -7
  333. chia/protocols/wallet_protocol.py +11 -12
  334. chia/rpc/rpc_client.py +9 -9
  335. chia/rpc/rpc_server.py +17 -17
  336. chia/rpc/util.py +2 -2
  337. chia/seeder/crawler.py +8 -8
  338. chia/seeder/crawler_api.py +21 -27
  339. chia/seeder/crawler_rpc_api.py +2 -2
  340. chia/seeder/dns_server.py +21 -21
  341. chia/seeder/start_crawler.py +4 -4
  342. chia/server/address_manager.py +15 -16
  343. chia/server/api_protocol.py +11 -11
  344. chia/server/chia_policy.py +46 -26
  345. chia/server/introducer_peers.py +2 -3
  346. chia/server/node_discovery.py +19 -19
  347. chia/server/rate_limit_numbers.py +4 -5
  348. chia/server/rate_limits.py +4 -4
  349. chia/server/resolve_peer_info.py +4 -4
  350. chia/server/server.py +49 -52
  351. chia/server/signal_handlers.py +6 -6
  352. chia/server/start_service.py +17 -17
  353. chia/server/upnp.py +4 -6
  354. chia/server/ws_connection.py +52 -37
  355. chia/simulator/add_blocks_in_batches.py +1 -3
  356. chia/simulator/block_tools.py +312 -200
  357. chia/simulator/full_node_simulator.py +56 -35
  358. chia/simulator/keyring.py +2 -3
  359. chia/simulator/setup_services.py +15 -15
  360. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  361. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  362. chia/simulator/simulator_protocol.py +1 -2
  363. chia/simulator/simulator_test_tools.py +3 -3
  364. chia/simulator/start_simulator.py +7 -7
  365. chia/simulator/wallet_tools.py +10 -10
  366. chia/solver/solver.py +10 -10
  367. chia/solver/solver_api.py +10 -8
  368. chia/solver/solver_rpc_api.py +2 -2
  369. chia/solver/start_solver.py +4 -4
  370. chia/ssl/cacert.pem +148 -90
  371. chia/ssl/chia_ca.crt +14 -10
  372. chia/ssl/chia_ca_old.crt +19 -0
  373. chia/ssl/create_ssl.py +4 -4
  374. chia/ssl/renewedselfsignedca.conf +4 -0
  375. chia/ssl/ssl_check.py +1 -2
  376. chia/timelord/iters_from_block.py +1 -4
  377. chia/timelord/start_timelord.py +4 -4
  378. chia/timelord/timelord.py +44 -40
  379. chia/timelord/timelord_api.py +6 -4
  380. chia/timelord/timelord_launcher.py +2 -2
  381. chia/timelord/timelord_rpc_api.py +2 -2
  382. chia/timelord/timelord_state.py +11 -12
  383. chia/types/block_protocol.py +1 -3
  384. chia/types/blockchain_format/coin.py +1 -3
  385. chia/types/blockchain_format/program.py +11 -8
  386. chia/types/blockchain_format/proof_of_space.py +123 -76
  387. chia/types/blockchain_format/tree_hash.py +3 -3
  388. chia/types/blockchain_format/vdf.py +1 -2
  389. chia/types/coin_spend.py +3 -3
  390. chia/types/mempool_item.py +5 -5
  391. chia/types/mempool_submission_status.py +2 -3
  392. chia/types/peer_info.py +1 -2
  393. chia/types/unfinished_header_block.py +3 -4
  394. chia/types/validation_state.py +1 -2
  395. chia/util/action_scope.py +8 -8
  396. chia/util/async_pool.py +5 -5
  397. chia/util/bech32m.py +1 -2
  398. chia/util/beta_metrics.py +2 -2
  399. chia/util/block_cache.py +4 -4
  400. chia/util/chia_logging.py +2 -2
  401. chia/util/chia_version.py +1 -2
  402. chia/util/config.py +15 -16
  403. chia/util/db_wrapper.py +26 -27
  404. chia/util/default_root.py +1 -2
  405. chia/util/errors.py +3 -3
  406. chia/util/file_keyring.py +14 -14
  407. chia/util/files.py +2 -3
  408. chia/util/hash.py +4 -4
  409. chia/util/initial-config.yaml +4 -5
  410. chia/util/inline_executor.py +2 -1
  411. chia/util/ip_address.py +1 -2
  412. chia/util/keychain.py +25 -27
  413. chia/util/keyring_wrapper.py +18 -19
  414. chia/util/lock.py +3 -4
  415. chia/util/log_exceptions.py +1 -2
  416. chia/util/lru_cache.py +2 -2
  417. chia/util/network.py +6 -6
  418. chia/util/path.py +2 -3
  419. chia/util/priority_mutex.py +2 -2
  420. chia/util/profiler.py +1 -2
  421. chia/util/safe_cancel_task.py +1 -2
  422. chia/util/streamable.py +24 -10
  423. chia/util/task_referencer.py +1 -1
  424. chia/util/timing.py +3 -3
  425. chia/util/virtual_project_analysis.py +6 -5
  426. chia/util/ws_message.py +2 -2
  427. chia/wallet/cat_wallet/cat_info.py +3 -4
  428. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  429. chia/wallet/cat_wallet/cat_utils.py +3 -4
  430. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  431. chia/wallet/cat_wallet/lineage_store.py +3 -4
  432. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  433. chia/wallet/coin_selection.py +9 -10
  434. chia/wallet/conditions.py +142 -106
  435. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  436. chia/wallet/derivation_record.py +1 -2
  437. chia/wallet/derive_keys.py +2 -4
  438. chia/wallet/did_wallet/did_info.py +10 -11
  439. chia/wallet/did_wallet/did_wallet.py +36 -82
  440. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  441. chia/wallet/driver_protocol.py +5 -7
  442. chia/wallet/lineage_proof.py +4 -4
  443. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  444. chia/wallet/nft_wallet/nft_info.py +8 -9
  445. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  446. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  447. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  448. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  449. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  450. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  451. chia/wallet/notification_manager.py +3 -3
  452. chia/wallet/notification_store.py +44 -61
  453. chia/wallet/outer_puzzles.py +6 -7
  454. chia/wallet/puzzle_drivers.py +34 -6
  455. chia/wallet/puzzles/clawback/drivers.py +6 -6
  456. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  457. chia/wallet/puzzles/load_clvm.py +1 -1
  458. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  459. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  460. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  461. chia/wallet/puzzles/tails.py +3 -3
  462. chia/wallet/singleton.py +5 -7
  463. chia/wallet/singleton_record.py +3 -3
  464. chia/wallet/start_wallet.py +5 -5
  465. chia/wallet/trade_manager.py +37 -58
  466. chia/wallet/trade_record.py +4 -4
  467. chia/wallet/trading/offer.py +59 -46
  468. chia/wallet/trading/trade_store.py +8 -9
  469. chia/wallet/transaction_record.py +8 -8
  470. chia/wallet/uncurried_puzzle.py +1 -2
  471. chia/wallet/util/clvm_streamable.py +12 -12
  472. chia/wallet/util/compute_hints.py +4 -5
  473. chia/wallet/util/curry_and_treehash.py +1 -2
  474. chia/wallet/util/merkle_tree.py +2 -3
  475. chia/wallet/util/peer_request_cache.py +8 -8
  476. chia/wallet/util/signing.py +85 -0
  477. chia/wallet/util/tx_config.py +15 -6
  478. chia/wallet/util/wallet_sync_utils.py +14 -16
  479. chia/wallet/util/wallet_types.py +2 -2
  480. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  481. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  482. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  483. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  484. chia/wallet/vc_wallet/vc_store.py +5 -6
  485. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  486. chia/wallet/wallet.py +50 -78
  487. chia/wallet/wallet_action_scope.py +11 -11
  488. chia/wallet/wallet_blockchain.py +12 -12
  489. chia/wallet/wallet_coin_record.py +12 -6
  490. chia/wallet/wallet_coin_store.py +24 -25
  491. chia/wallet/wallet_interested_store.py +3 -5
  492. chia/wallet/wallet_nft_store.py +10 -11
  493. chia/wallet/wallet_node.py +53 -61
  494. chia/wallet/wallet_node_api.py +5 -3
  495. chia/wallet/wallet_protocol.py +23 -23
  496. chia/wallet/wallet_puzzle_store.py +15 -18
  497. chia/wallet/wallet_request_types.py +778 -114
  498. chia/wallet/wallet_retry_store.py +1 -3
  499. chia/wallet/wallet_rpc_api.py +572 -909
  500. chia/wallet/wallet_rpc_client.py +87 -279
  501. chia/wallet/wallet_singleton_store.py +3 -4
  502. chia/wallet/wallet_state_manager.py +332 -106
  503. chia/wallet/wallet_transaction_store.py +11 -14
  504. chia/wallet/wallet_user_store.py +4 -6
  505. chia/wallet/wallet_weight_proof_handler.py +4 -4
  506. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/METADATA +6 -5
  507. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/RECORD +510 -517
  508. chia/apis.py +0 -21
  509. chia/consensus/check_time_locks.py +0 -57
  510. chia/data_layer/puzzles/__init__.py +0 -0
  511. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  512. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  513. chia/types/coin_record.py +0 -44
  514. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  515. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  516. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  517. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  518. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  520. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  521. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  522. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  524. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  525. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  526. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  527. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  528. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  529. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/WHEEL +0 -0
  530. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/entry_points.txt +0 -0
  531. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.6.0rc2.dist-info}/licenses/LICENSE +0 -0
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from enum import IntEnum
5
- from typing import Any, Optional
6
5
 
7
6
  from chia_rs import G1Element
8
7
  from chia_rs.sized_bytes import bytes32
@@ -57,26 +56,56 @@ class PoolState(Streamable):
57
56
  target_puzzle_hash: bytes32 # TODO: rename target_puzzle_hash -> pay_to_address
58
57
  # owner_pubkey is set by the wallet, once
59
58
  owner_pubkey: G1Element
60
- pool_url: Optional[str]
59
+ pool_url: str | None
61
60
  relative_lock_height: uint32
62
61
 
63
62
 
63
+ @streamable
64
+ @dataclass(frozen=True)
65
+ class NewPoolWalletInitialTargetState(Streamable):
66
+ state: str # must map to name of PoolSingletonState Enum
67
+ # only when state == "FARMING_TO_POOL"
68
+ target_puzzle_hash: bytes32 | None = None
69
+ pool_url: str | None = None
70
+ relative_lock_height: uint32 | None = None
71
+
72
+ def __post_init__(self) -> None:
73
+ if self.state not in {member.name for member in PoolSingletonState}:
74
+ raise ValueError(f"Invalid pool wallet initial state: {self.state}")
75
+ if PoolSingletonState[self.state] == PoolSingletonState.FARMING_TO_POOL:
76
+ if self.target_puzzle_hash is None:
77
+ raise ValueError("target_puzzle_hash must be set when state is FARMING_TO_POOL")
78
+ if self.pool_url is None:
79
+ raise ValueError("pool_url must be set when state is FARMING_TO_POOL")
80
+ if self.relative_lock_height is None:
81
+ raise ValueError("relative_lock_height must be set when state is FARMING_TO_POOL")
82
+ else:
83
+ if self.target_puzzle_hash is not None:
84
+ raise ValueError("target_puzzle_hash is only valid for FARMING_TO_POOL")
85
+ if self.pool_url is not None:
86
+ raise ValueError("pool_url is only valid for FARMING_TO_POOL")
87
+ if self.relative_lock_height is not None:
88
+ raise ValueError("relative_lock_height is only valid for FARMING_TO_POOL")
89
+
90
+ super().__post_init__()
91
+
92
+
64
93
  def initial_pool_state_from_dict(
65
- state_dict: dict[str, Any],
94
+ initial_state: NewPoolWalletInitialTargetState,
66
95
  owner_pubkey: G1Element,
67
96
  owner_puzzle_hash: bytes32,
68
97
  ) -> PoolState:
69
- state_str = state_dict["state"]
70
- singleton_state: PoolSingletonState = PoolSingletonState[state_str]
98
+ singleton_state: PoolSingletonState = PoolSingletonState[initial_state.state]
71
99
 
72
100
  if singleton_state == SELF_POOLING:
73
101
  target_puzzle_hash = owner_puzzle_hash
74
102
  pool_url: str = ""
75
103
  relative_lock_height = uint32(0)
76
104
  elif singleton_state == FARMING_TO_POOL:
77
- target_puzzle_hash = bytes32.from_hexstr(state_dict["target_puzzle_hash"])
78
- pool_url = state_dict["pool_url"]
79
- relative_lock_height = uint32(state_dict["relative_lock_height"])
105
+ # mypy doesn't know about our __post_init__
106
+ target_puzzle_hash = initial_state.target_puzzle_hash # type: ignore[assignment]
107
+ pool_url = initial_state.pool_url # type: ignore[assignment]
108
+ relative_lock_height = initial_state.relative_lock_height # type: ignore[assignment]
80
109
  else:
81
110
  raise ValueError("Initial state must be SELF_POOLING or FARMING_TO_POOL")
82
111
 
@@ -89,7 +118,7 @@ def create_pool_state(
89
118
  state: PoolSingletonState,
90
119
  target_puzzle_hash: bytes32,
91
120
  owner_pubkey: G1Element,
92
- pool_url: Optional[str],
121
+ pool_url: str | None,
93
122
  relative_lock_height: uint32,
94
123
  ) -> PoolState:
95
124
  if state not in {s.value for s in PoolSingletonState}:
@@ -110,7 +139,7 @@ class PoolWalletInfo(Streamable):
110
139
  """
111
140
 
112
141
  current: PoolState
113
- target: Optional[PoolState]
142
+ target: PoolState | None
114
143
  launcher_coin: Coin
115
144
  launcher_id: bytes32
116
145
  p2_singleton_puzzle_hash: bytes32
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Optional
5
4
 
6
5
  from chia_rs import (
7
6
  ChallengeChainSubSlot,
@@ -42,8 +41,8 @@ class SPVDFSourceData(Streamable):
42
41
  @streamable
43
42
  @dataclass(frozen=True)
44
43
  class SignagePointSourceData(Streamable):
45
- sub_slot_data: Optional[SPSubSlotSourceData] = None
46
- vdf_data: Optional[SPVDFSourceData] = None
44
+ sub_slot_data: SPSubSlotSourceData | None = None
45
+ vdf_data: SPVDFSourceData | None = None
47
46
 
48
47
 
49
48
  @streamable
@@ -57,7 +56,7 @@ class NewSignagePoint(Streamable):
57
56
  signage_point_index: uint8
58
57
  peak_height: uint32
59
58
  last_tx_height: uint32
60
- sp_source_data: Optional[SignagePointSourceData] = None
59
+ sp_source_data: SignagePointSourceData | None = None
61
60
 
62
61
 
63
62
  @streamable
@@ -71,8 +70,8 @@ class DeclareProofOfSpace(Streamable):
71
70
  challenge_chain_sp_signature: G2Element
72
71
  reward_chain_sp_signature: G2Element
73
72
  farmer_puzzle_hash: bytes32
74
- pool_target: Optional[PoolTarget]
75
- pool_signature: Optional[G2Element]
73
+ pool_target: PoolTarget | None
74
+ pool_signature: G2Element | None
76
75
  include_signature_source_data: bool = False
77
76
 
78
77
 
@@ -82,9 +81,9 @@ class RequestSignedValues(Streamable):
82
81
  quality_string: bytes32
83
82
  foliage_block_data_hash: bytes32
84
83
  foliage_transaction_block_hash: bytes32
85
- foliage_block_data: Optional[FoliageBlockData] = None
86
- foliage_transaction_block_data: Optional[FoliageTransactionBlock] = None
87
- rc_block_unfinished: Optional[RewardChainBlockUnfinished] = None
84
+ foliage_block_data: FoliageBlockData | None = None
85
+ foliage_transaction_block_data: FoliageTransactionBlock | None = None
86
+ rc_block_unfinished: RewardChainBlockUnfinished | None = None
88
87
 
89
88
 
90
89
  @streamable
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  import math
4
4
  from dataclasses import dataclass
5
- from typing import Optional
6
5
 
7
6
  from chia_rs.sized_ints import uint64
8
7
 
@@ -23,14 +22,14 @@ class FeeEstimate(Streamable):
23
22
  estimated_fee_rate: expressed in mojo per 1 clvm_cost. `estimated_fee` can be zero.
24
23
  """
25
24
 
26
- error: Optional[str]
25
+ error: str | None
27
26
  time_target: uint64 # unix time stamp in seconds
28
27
  estimated_fee_rate: FeeRate # Mojos per clvm cost
29
28
 
30
29
 
31
30
  @dataclass(frozen=True)
32
31
  class FeeEstimateV2:
33
- error: Optional[str]
32
+ error: str | None
34
33
  time_target: uint64 # unix time stamp in seconds
35
34
  estimated_fee_rate: FeeRateV2 # Mojos per clvm cost
36
35
 
@@ -51,5 +50,5 @@ class FeeEstimateGroup(Streamable):
51
50
  Estimates are expressed in mojos / 1 clvm_cost.
52
51
  """
53
52
 
54
- error: Optional[str]
53
+ error: str | None
55
54
  estimates: list[FeeEstimate]
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Optional
5
4
 
6
5
  from chia_rs import EndOfSubSlotBundle, FullBlock, SpendBundle, UnfinishedBlock
7
6
  from chia_rs.sized_bytes import bytes32
@@ -120,14 +119,14 @@ class RequestUnfinishedBlock(Streamable):
120
119
  @dataclass(frozen=True)
121
120
  class NewUnfinishedBlock2(Streamable):
122
121
  unfinished_reward_hash: bytes32
123
- foliage_hash: Optional[bytes32]
122
+ foliage_hash: bytes32 | None
124
123
 
125
124
 
126
125
  @streamable
127
126
  @dataclass(frozen=True)
128
127
  class RequestUnfinishedBlock2(Streamable):
129
128
  unfinished_reward_hash: bytes32
130
- foliage_hash: Optional[bytes32]
129
+ foliage_hash: bytes32 | None
131
130
 
132
131
 
133
132
  @streamable
@@ -139,7 +138,7 @@ class RespondUnfinishedBlock(Streamable):
139
138
  @streamable
140
139
  @dataclass(frozen=True)
141
140
  class NewSignagePointOrEndOfSubSlot(Streamable):
142
- prev_challenge_hash: Optional[bytes32]
141
+ prev_challenge_hash: bytes32 | None
143
142
  challenge_hash: bytes32
144
143
  index_from_challenge: uint8
145
144
  last_rc_infusion: bytes32
@@ -2,9 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from enum import IntEnum
5
- from typing import Optional
6
5
 
7
- from chia_rs import G1Element, G2Element, ProofOfSpace, RewardChainBlockUnfinished
6
+ from chia_rs import G1Element, G2Element, PartialProof, PlotParam, ProofOfSpace, RewardChainBlockUnfinished
8
7
  from chia_rs.sized_bytes import bytes32
9
8
  from chia_rs.sized_ints import int16, uint8, uint32, uint64
10
9
 
@@ -73,8 +72,8 @@ class NewProofOfSpace(Streamable):
73
72
  proof: ProofOfSpace
74
73
  signage_point_index: uint8
75
74
  include_source_signature_data: bool
76
- farmer_reward_address_override: Optional[bytes32]
77
- fee_info: Optional[ProofOfSpaceFeeInfo]
75
+ farmer_reward_address_override: bytes32 | None
76
+ fee_info: ProofOfSpaceFeeInfo | None
78
77
 
79
78
 
80
79
  @streamable
@@ -83,11 +82,13 @@ class PartialProofsData(Streamable):
83
82
  challenge_hash: bytes32
84
83
  sp_hash: bytes32
85
84
  plot_identifier: str
86
- partial_proofs: list[bytes] # 16 * k bits blobs instead of 32-byte quality strings
85
+ partial_proofs: list[PartialProof] # 16 * k bits blobs instead of 32-byte quality strings
87
86
  signage_point_index: uint8
88
87
  plot_size: uint8
89
- pool_public_key: Optional[G1Element]
90
- pool_contract_puzzle_hash: Optional[bytes32]
88
+ strength: uint8
89
+ plot_id: bytes32
90
+ pool_public_key: G1Element | None
91
+ pool_contract_puzzle_hash: bytes32 | None
91
92
  plot_public_key: G1Element
92
93
 
93
94
 
@@ -119,8 +120,8 @@ class RequestSignatures(Streamable):
119
120
  sp_hash: bytes32
120
121
  messages: list[bytes32]
121
122
  # This, and rc_block_unfinished are only set when using a third-party harvester (see CHIP-22)
122
- message_data: Optional[list[Optional[SignatureRequestSourceData]]]
123
- rc_block_unfinished: Optional[RewardChainBlockUnfinished]
123
+ message_data: list[SignatureRequestSourceData | None] | None
124
+ rc_block_unfinished: RewardChainBlockUnfinished | None
124
125
 
125
126
 
126
127
  @streamable
@@ -133,21 +134,32 @@ class RespondSignatures(Streamable):
133
134
  farmer_pk: G1Element
134
135
  message_signatures: list[tuple[bytes32, G2Element]]
135
136
  include_source_signature_data: bool
136
- farmer_reward_address_override: Optional[bytes32]
137
+ farmer_reward_address_override: bytes32 | None
137
138
 
138
139
 
139
140
  @streamable
140
141
  @dataclass(frozen=True)
141
142
  class Plot(Streamable):
142
143
  filename: str
144
+ # for backwards compatibility with previous harvester (e.g. DrPlotter)
145
+ # this field is either k-size (for v1 plots) or strength (for v2 plots).
146
+ # the most significant bit is set for v2 plots
147
+ # TODO: after the phase-out, v1 harvester won't be relevant anymore and we
148
+ # can clean this up with a new protocol version
143
149
  size: uint8
144
150
  plot_id: bytes32
145
- pool_public_key: Optional[G1Element]
146
- pool_contract_puzzle_hash: Optional[bytes32]
151
+ pool_public_key: G1Element | None
152
+ pool_contract_puzzle_hash: bytes32 | None
147
153
  plot_public_key: G1Element
148
154
  file_size: uint64
149
155
  time_modified: uint64
150
- compression_level: Optional[uint8]
156
+ compression_level: uint8 | None
157
+
158
+ def param(self) -> PlotParam:
159
+ if (self.size & 0x80) != 0:
160
+ return PlotParam.make_v2(self.size & 0x7F)
161
+ else:
162
+ return PlotParam.make_v1(self.size)
151
163
 
152
164
 
153
165
  @streamable
@@ -226,7 +238,7 @@ class PlotSyncDone(Streamable):
226
238
  class PlotSyncError(Streamable):
227
239
  code: int16
228
240
  message: str
229
- expected_identifier: Optional[PlotSyncIdentifier]
241
+ expected_identifier: PlotSyncIdentifier | None
230
242
 
231
243
  def __str__(self) -> str:
232
244
  return f"PlotSyncError: code {self.code}, count {self.message}, expected_identifier {self.expected_identifier}"
@@ -237,7 +249,7 @@ class PlotSyncError(Streamable):
237
249
  class PlotSyncResponse(Streamable):
238
250
  identifier: PlotSyncIdentifier
239
251
  message_type: int16
240
- error: Optional[PlotSyncError]
252
+ error: PlotSyncError | None
241
253
 
242
254
  def __str__(self) -> str:
243
255
  return f"PlotSyncResponse: identifier {self.identifier}, message_type {self.message_type}, error {self.error}"
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from enum import IntEnum
5
- from typing import Optional, SupportsBytes, Union
5
+ from typing import SupportsBytes
6
6
 
7
7
  from chia_rs.sized_ints import uint8, uint16
8
8
 
@@ -26,10 +26,10 @@ class NodeType(IntEnum):
26
26
  class Message(Streamable):
27
27
  type: uint8 # one of ProtocolMessageTypes
28
28
  # message id
29
- id: Optional[uint16]
29
+ id: uint16 | None
30
30
  # Message data for that type
31
31
  data: bytes
32
32
 
33
33
 
34
- def make_msg(msg_type: ProtocolMessageTypes, data: Union[bytes, SupportsBytes]) -> Message:
34
+ def make_msg(msg_type: ProtocolMessageTypes, data: bytes | SupportsBytes) -> Message:
35
35
  return Message(uint8(msg_type.value), None, bytes(data))
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  import time
4
4
  from dataclasses import dataclass
5
5
  from enum import Enum
6
- from typing import Optional
7
6
 
8
7
  from chia_rs import G1Element, G2Element, ProofOfSpace
9
8
  from chia_rs.sized_bytes import bytes32
@@ -109,7 +108,7 @@ class PostFarmerPayload(Streamable):
109
108
  authentication_token: uint64
110
109
  authentication_public_key: G1Element
111
110
  payout_instructions: str
112
- suggested_difficulty: Optional[uint64]
111
+ suggested_difficulty: uint64 | None
113
112
 
114
113
 
115
114
  @streamable
@@ -134,9 +133,9 @@ class PostFarmerResponse(Streamable):
134
133
  class PutFarmerPayload(Streamable):
135
134
  launcher_id: bytes32
136
135
  authentication_token: uint64
137
- authentication_public_key: Optional[G1Element]
138
- payout_instructions: Optional[str]
139
- suggested_difficulty: Optional[uint64]
136
+ authentication_public_key: G1Element | None
137
+ payout_instructions: str | None
138
+ suggested_difficulty: uint64 | None
140
139
 
141
140
 
142
141
  @streamable
@@ -150,9 +149,9 @@ class PutFarmerRequest(Streamable):
150
149
  @streamable
151
150
  @dataclass(frozen=True)
152
151
  class PutFarmerResponse(Streamable):
153
- authentication_public_key: Optional[bool]
154
- payout_instructions: Optional[bool]
155
- suggested_difficulty: Optional[bool]
152
+ authentication_public_key: bool | None
153
+ payout_instructions: bool | None
154
+ suggested_difficulty: bool | None
156
155
 
157
156
 
158
157
  # Misc
@@ -163,7 +162,7 @@ class PutFarmerResponse(Streamable):
163
162
  @dataclass(frozen=True)
164
163
  class ErrorResponse(Streamable):
165
164
  error_code: uint16
166
- error_message: Optional[str]
165
+ error_message: str | None
167
166
 
168
167
 
169
168
  # Get the current authentication token according to "Farmer authentication" in SPECIFICATION.md
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from enum import IntEnum
5
- from typing import Optional
6
5
 
7
6
  from chia_rs.sized_ints import int16, uint8, uint16
8
7
 
@@ -86,4 +85,4 @@ class Handshake(Streamable):
86
85
  class Error(Streamable):
87
86
  code: int16 # Err
88
87
  message: str
89
- data: Optional[bytes] = None
88
+ data: bytes | None = None
@@ -2,17 +2,24 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
 
5
+ from chia_rs import PartialProof
6
+ from chia_rs.sized_bytes import bytes32
7
+ from chia_rs.sized_ints import uint8
8
+
5
9
  from chia.util.streamable import Streamable, streamable
6
10
 
7
11
 
8
12
  @streamable
9
13
  @dataclass(frozen=True)
10
14
  class SolverInfo(Streamable):
11
- partial_proof: bytes # 16 * k bits blob, k (plot size) can be derived from this
15
+ partial_proof: PartialProof
16
+ plot_id: bytes32
17
+ strength: uint8
18
+ size: uint8 # k-size
12
19
 
13
20
 
14
21
  @streamable
15
22
  @dataclass(frozen=True)
16
23
  class SolverResponse(Streamable):
17
- partial_proof: bytes
24
+ partial_proof: PartialProof
18
25
  proof: bytes
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Optional
5
4
 
6
5
  from chia_rs import EndOfSubSlotBundle, Foliage, RewardChainBlock, RewardChainBlockUnfinished, SubEpochSummary
7
6
  from chia_rs.sized_bytes import bytes32
@@ -23,9 +22,7 @@ class NewPeakTimelord(Streamable):
23
22
  difficulty: uint64
24
23
  deficit: uint8
25
24
  sub_slot_iters: uint64 # SSi in the slot where NewPeak has been infused
26
- sub_epoch_summary: Optional[
27
- SubEpochSummary
28
- ] # If NewPeak is the last slot in epoch, the next slot should include this
25
+ sub_epoch_summary: SubEpochSummary | None # If NewPeak is the last slot in epoch, the next slot should include this
29
26
  previous_reward_challenges: list[tuple[bytes32, uint128]]
30
27
  last_challenge_sb_or_eos_total_iters: uint128
31
28
  passes_ses_height_but_not_yet_included: bool
@@ -38,7 +35,7 @@ class NewUnfinishedBlockTimelord(Streamable):
38
35
  difficulty: uint64
39
36
  sub_slot_iters: uint64 # SSi in the slot where block is infused
40
37
  foliage: Foliage # Reward chain foliage data
41
- sub_epoch_summary: Optional[SubEpochSummary] # If this is the last slot in epoch, the next slot should include this
38
+ sub_epoch_summary: SubEpochSummary | None # If this is the last slot in epoch, the next slot should include this
42
39
  # This is the last thing infused in the reward chain before this signage point.
43
40
  # The challenge that the SP reward chain VDF is based off of, or in the case of sp index 0, the previous infusion
44
41
  rc_prev: bytes32
@@ -52,8 +49,8 @@ class NewInfusionPointVDF(Streamable):
52
49
  challenge_chain_ip_proof: VDFProof
53
50
  reward_chain_ip_vdf: VDFInfo
54
51
  reward_chain_ip_proof: VDFProof
55
- infused_challenge_chain_ip_vdf: Optional[VDFInfo]
56
- infused_challenge_chain_ip_proof: Optional[VDFProof]
52
+ infused_challenge_chain_ip_vdf: VDFInfo | None
53
+ infused_challenge_chain_ip_proof: VDFProof | None
57
54
 
58
55
 
59
56
  @streamable
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from enum import IntEnum
5
- from typing import Optional
6
5
 
7
6
  import chia_rs
8
7
  from chia_rs import HeaderBlock, SpendBundle
@@ -65,7 +64,7 @@ class SendTransaction(Streamable):
65
64
  class TransactionAck(Streamable):
66
65
  txid: bytes32
67
66
  status: uint8 # MempoolInclusionStatus
68
- error: Optional[str]
67
+ error: str | None
69
68
 
70
69
 
71
70
  @streamable
@@ -100,7 +99,7 @@ class RejectHeaderRequest(Streamable):
100
99
  class RequestRemovals(Streamable):
101
100
  height: uint32
102
101
  header_hash: bytes32
103
- coin_names: Optional[list[bytes32]]
102
+ coin_names: list[bytes32] | None
104
103
 
105
104
 
106
105
  @streamable
@@ -108,8 +107,8 @@ class RequestRemovals(Streamable):
108
107
  class RespondRemovals(Streamable):
109
108
  height: uint32
110
109
  header_hash: bytes32
111
- coins: list[tuple[bytes32, Optional[Coin]]]
112
- proofs: Optional[list[tuple[bytes32, bytes]]]
110
+ coins: list[tuple[bytes32, Coin | None]]
111
+ proofs: list[tuple[bytes32, bytes]] | None
113
112
 
114
113
 
115
114
  @streamable
@@ -123,8 +122,8 @@ class RejectRemovalsRequest(Streamable):
123
122
  @dataclass(frozen=True)
124
123
  class RequestAdditions(Streamable):
125
124
  height: uint32
126
- header_hash: Optional[bytes32]
127
- puzzle_hashes: Optional[list[bytes32]]
125
+ header_hash: bytes32 | None
126
+ puzzle_hashes: list[bytes32] | None
128
127
 
129
128
 
130
129
  @streamable
@@ -133,7 +132,7 @@ class RespondAdditions(Streamable):
133
132
  height: uint32
134
133
  header_hash: bytes32
135
134
  coins: list[tuple[bytes32, list[Coin]]]
136
- proofs: Optional[list[tuple[bytes32, bytes, Optional[bytes]]]]
135
+ proofs: list[tuple[bytes32, bytes, bytes | None]] | None
137
136
 
138
137
 
139
138
  @streamable
@@ -282,7 +281,7 @@ class RespondFeeEstimates(Streamable):
282
281
  @streamable
283
282
  @dataclass(frozen=True)
284
283
  class RequestRemovePuzzleSubscriptions(Streamable):
285
- puzzle_hashes: Optional[list[bytes32]]
284
+ puzzle_hashes: list[bytes32] | None
286
285
 
287
286
 
288
287
  @streamable
@@ -294,7 +293,7 @@ class RespondRemovePuzzleSubscriptions(Streamable):
294
293
  @streamable
295
294
  @dataclass(frozen=True)
296
295
  class RequestRemoveCoinSubscriptions(Streamable):
297
- coin_ids: Optional[list[bytes32]]
296
+ coin_ids: list[bytes32] | None
298
297
 
299
298
 
300
299
  @streamable
@@ -316,7 +315,7 @@ class CoinStateFilters(Streamable):
316
315
  @dataclass(frozen=True)
317
316
  class RequestPuzzleState(Streamable):
318
317
  puzzle_hashes: list[bytes32]
319
- previous_height: Optional[uint32]
318
+ previous_height: uint32 | None
320
319
  header_hash: bytes32
321
320
  filters: CoinStateFilters
322
321
  subscribe_when_finished: bool
@@ -342,7 +341,7 @@ class RejectPuzzleState(Streamable):
342
341
  @dataclass(frozen=True)
343
342
  class RequestCoinState(Streamable):
344
343
  coin_ids: list[bytes32]
345
- previous_height: Optional[uint32]
344
+ previous_height: uint32 | None
346
345
  header_hash: bytes32
347
346
  subscribe: bool
348
347
 
chia/rpc/rpc_client.py CHANGED
@@ -7,7 +7,7 @@ from contextlib import asynccontextmanager
7
7
  from dataclasses import dataclass
8
8
  from pathlib import Path
9
9
  from ssl import SSLContext
10
- from typing import Any, Optional
10
+ from typing import Any
11
11
 
12
12
  import aiohttp
13
13
  from chia_rs.sized_bytes import bytes32
@@ -42,23 +42,23 @@ class RpcClient:
42
42
 
43
43
  url: str
44
44
  session: aiohttp.ClientSession
45
- ssl_context: Optional[SSLContext]
45
+ ssl_context: SSLContext | None
46
46
  hostname: str
47
47
  port: uint16
48
- closing_task: Optional[asyncio.Task] = None
48
+ closing_task: asyncio.Task | None = None
49
49
 
50
50
  @classmethod
51
51
  async def create(
52
52
  cls,
53
53
  self_hostname: str,
54
54
  port: uint16,
55
- root_path: Optional[Path],
56
- net_config: Optional[dict[str, Any]],
55
+ root_path: Path | None,
56
+ net_config: dict[str, Any] | None,
57
57
  ) -> Self:
58
58
  if (root_path is not None) != (net_config is not None):
59
59
  raise ValueError("Either both or neither of root_path and net_config must be provided")
60
60
 
61
- ssl_context: Optional[SSLContext]
61
+ ssl_context: SSLContext | None
62
62
  if root_path is None:
63
63
  scheme = "http"
64
64
  ssl_context = None
@@ -91,8 +91,8 @@ class RpcClient:
91
91
  cls,
92
92
  self_hostname: str,
93
93
  port: uint16,
94
- root_path: Optional[Path] = None,
95
- net_config: Optional[dict[str, Any]] = None,
94
+ root_path: Path | None = None,
95
+ net_config: dict[str, Any] | None = None,
96
96
  ) -> AsyncIterator[Self]:
97
97
  self = await cls.create(
98
98
  self_hostname=self_hostname,
@@ -116,7 +116,7 @@ class RpcClient:
116
116
  raise ResponseFailureError(res_json)
117
117
  return res_json
118
118
 
119
- async def get_connections(self, node_type: Optional[NodeType] = None) -> list[dict]:
119
+ async def get_connections(self, node_type: NodeType | None = None) -> list[dict]:
120
120
  request = {}
121
121
  if node_type is not None:
122
122
  request["node_type"] = node_type.value