chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5__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 (453) hide show
  1. chia/_tests/blockchain/blockchain_test_utils.py +2 -3
  2. chia/_tests/blockchain/test_augmented_chain.py +2 -3
  3. chia/_tests/blockchain/test_blockchain.py +261 -44
  4. chia/_tests/blockchain/test_blockchain_transactions.py +4 -3
  5. chia/_tests/blockchain/test_build_chains.py +197 -1
  6. chia/_tests/blockchain/test_get_block_generator.py +1 -1
  7. chia/_tests/blockchain/test_lookup_fork_chain.py +1 -1
  8. chia/_tests/clvm/benchmark_costs.py +1 -1
  9. chia/_tests/clvm/coin_store.py +3 -4
  10. chia/_tests/clvm/test_message_conditions.py +2 -2
  11. chia/_tests/clvm/test_puzzle_compression.py +2 -3
  12. chia/_tests/clvm/test_puzzles.py +1 -2
  13. chia/_tests/clvm/test_singletons.py +2 -3
  14. chia/_tests/clvm/test_spend_sim.py +7 -7
  15. chia/_tests/cmds/cmd_test_utils.py +30 -25
  16. chia/_tests/cmds/test_dev_gh.py +1 -1
  17. chia/_tests/cmds/test_farm_cmd.py +1 -1
  18. chia/_tests/cmds/test_show.py +1 -2
  19. chia/_tests/cmds/wallet/test_did.py +101 -56
  20. chia/_tests/cmds/wallet/test_nft.py +109 -84
  21. chia/_tests/cmds/wallet/test_notifications.py +1 -1
  22. chia/_tests/cmds/wallet/test_offer.toffer +1 -1
  23. chia/_tests/cmds/wallet/test_vcs.py +8 -8
  24. chia/_tests/cmds/wallet/test_wallet.py +100 -46
  25. chia/_tests/conftest.py +31 -20
  26. chia/_tests/connection_utils.py +1 -1
  27. chia/_tests/core/consensus/stores/__init__.py +0 -0
  28. chia/_tests/core/consensus/stores/test_coin_store_protocol.py +40 -0
  29. chia/_tests/core/consensus/test_block_creation.py +2 -31
  30. chia/_tests/core/consensus/test_pot_iterations.py +38 -3
  31. chia/_tests/core/custom_types/test_proof_of_space.py +154 -26
  32. chia/_tests/core/custom_types/test_spend_bundle.py +2 -3
  33. chia/_tests/core/daemon/test_daemon.py +80 -0
  34. chia/_tests/core/data_layer/test_data_layer.py +1 -1
  35. chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
  36. chia/_tests/core/data_layer/test_data_rpc.py +14 -10
  37. chia/_tests/core/data_layer/test_data_store.py +5 -5
  38. chia/_tests/core/farmer/test_farmer_api.py +2 -2
  39. chia/_tests/core/full_node/full_sync/test_full_sync.py +446 -406
  40. chia/_tests/core/full_node/ram_db.py +3 -1
  41. chia/_tests/core/full_node/stores/test_block_store.py +28 -16
  42. chia/_tests/core/full_node/stores/test_coin_store.py +277 -185
  43. chia/_tests/core/full_node/stores/test_full_node_store.py +11 -4
  44. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  45. chia/_tests/core/full_node/test_address_manager.py +200 -27
  46. chia/_tests/core/full_node/test_block_height_map.py +2 -2
  47. chia/_tests/core/full_node/test_conditions.py +7 -6
  48. chia/_tests/core/full_node/test_full_node.py +456 -40
  49. chia/_tests/core/full_node/test_generator_tools.py +32 -2
  50. chia/_tests/core/full_node/test_hint_management.py +1 -1
  51. chia/_tests/core/full_node/test_node_load.py +20 -21
  52. chia/_tests/core/full_node/test_performance.py +3 -4
  53. chia/_tests/core/full_node/test_prev_tx_block.py +43 -0
  54. chia/_tests/core/full_node/test_subscriptions.py +1 -2
  55. chia/_tests/core/full_node/test_transactions.py +9 -5
  56. chia/_tests/core/full_node/test_tx_processing_queue.py +1 -2
  57. chia/_tests/core/large_block.py +1 -2
  58. chia/_tests/core/make_block_generator.py +3 -4
  59. chia/_tests/core/mempool/test_mempool.py +36 -86
  60. chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
  61. chia/_tests/core/mempool/test_mempool_item_queries.py +1 -3
  62. chia/_tests/core/mempool/test_mempool_manager.py +529 -69
  63. chia/_tests/core/mempool/test_mempool_performance.py +3 -2
  64. chia/_tests/core/mempool/test_singleton_fast_forward.py +61 -132
  65. chia/_tests/core/server/flood.py +1 -1
  66. chia/_tests/core/server/test_dos.py +1 -1
  67. chia/_tests/core/server/test_node_discovery.py +41 -27
  68. chia/_tests/core/server/test_rate_limits.py +1 -1
  69. chia/_tests/core/server/test_server.py +1 -1
  70. chia/_tests/core/services/test_services.py +5 -5
  71. chia/_tests/core/ssl/test_ssl.py +1 -1
  72. chia/_tests/core/test_cost_calculation.py +6 -6
  73. chia/_tests/core/test_crawler.py +2 -2
  74. chia/_tests/core/test_crawler_rpc.py +1 -1
  75. chia/_tests/core/test_db_conversion.py +3 -1
  76. chia/_tests/core/test_db_validation.py +5 -3
  77. chia/_tests/core/test_farmer_harvester_rpc.py +15 -15
  78. chia/_tests/core/test_filter.py +4 -1
  79. chia/_tests/core/test_full_node_rpc.py +99 -82
  80. chia/_tests/core/test_program.py +2 -2
  81. chia/_tests/core/util/test_block_cache.py +1 -1
  82. chia/_tests/core/util/test_keychain.py +2 -2
  83. chia/_tests/core/util/test_lockfile.py +1 -1
  84. chia/_tests/core/util/test_log_exceptions.py +5 -5
  85. chia/_tests/core/util/test_streamable.py +81 -22
  86. chia/_tests/db/test_db_wrapper.py +1 -3
  87. chia/_tests/environments/wallet.py +5 -5
  88. chia/_tests/farmer_harvester/test_farmer.py +9 -7
  89. chia/_tests/farmer_harvester/test_farmer_harvester.py +11 -4
  90. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  91. chia/_tests/farmer_harvester/test_third_party_harvesters.py +15 -9
  92. chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -2
  93. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +7 -5
  94. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
  95. chia/_tests/generator/test_compression.py +1 -2
  96. chia/_tests/generator/test_rom.py +8 -4
  97. chia/_tests/plot_sync/test_plot_sync.py +3 -3
  98. chia/_tests/plot_sync/test_receiver.py +3 -3
  99. chia/_tests/plot_sync/test_sender.py +1 -1
  100. chia/_tests/plot_sync/test_sync_simulated.py +3 -3
  101. chia/_tests/plot_sync/util.py +2 -2
  102. chia/_tests/pools/test_pool_cmdline.py +48 -21
  103. chia/_tests/pools/test_pool_puzzles_lifecycle.py +2 -3
  104. chia/_tests/pools/test_pool_rpc.py +237 -105
  105. chia/_tests/pools/test_pool_wallet.py +11 -2
  106. chia/_tests/pools/test_wallet_pool_store.py +5 -4
  107. chia/_tests/rpc/test_rpc_client.py +1 -1
  108. chia/_tests/simulation/test_simulation.py +13 -8
  109. chia/_tests/simulation/test_simulator.py +2 -2
  110. chia/_tests/timelord/test_new_peak.py +191 -47
  111. chia/_tests/timelord/test_timelord.py +1 -1
  112. chia/_tests/tools/test_full_sync.py +0 -2
  113. chia/_tests/tools/test_run_block.py +3 -1
  114. chia/_tests/util/benchmark_cost.py +3 -3
  115. chia/_tests/util/benchmarks.py +2 -2
  116. chia/_tests/util/blockchain.py +11 -5
  117. chia/_tests/util/blockchain_mock.py +1 -4
  118. chia/_tests/util/coin_store.py +29 -0
  119. chia/_tests/util/constants.py +2 -18
  120. chia/_tests/util/full_sync.py +3 -3
  121. chia/_tests/util/generator_tools_testing.py +2 -3
  122. chia/_tests/util/key_tool.py +2 -3
  123. chia/_tests/util/misc.py +33 -31
  124. chia/_tests/util/network_protocol_data.py +19 -17
  125. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  126. chia/_tests/util/protocol_messages_json.py +3 -1
  127. chia/_tests/util/run_block.py +2 -2
  128. chia/_tests/util/setup_nodes.py +7 -7
  129. chia/_tests/util/spend_sim.py +47 -55
  130. chia/_tests/util/test_condition_tools.py +5 -4
  131. chia/_tests/util/test_config.py +2 -2
  132. chia/_tests/util/test_dump_keyring.py +1 -1
  133. chia/_tests/util/test_full_block_utils.py +12 -14
  134. chia/_tests/util/test_misc.py +2 -2
  135. chia/_tests/util/test_paginator.py +4 -4
  136. chia/_tests/util/test_priority_mutex.py +2 -2
  137. chia/_tests/util/test_replace_str_to_bytes.py +15 -5
  138. chia/_tests/util/test_ssl_check.py +1 -1
  139. chia/_tests/util/test_testnet_overrides.py +13 -3
  140. chia/_tests/util/time_out_assert.py +4 -2
  141. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
  142. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -2
  143. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +352 -432
  144. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +3 -6
  145. chia/_tests/wallet/cat_wallet/test_trades.py +53 -77
  146. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -1
  147. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +3 -3
  148. chia/_tests/wallet/clawback/test_clawback_metadata.py +4 -2
  149. chia/_tests/wallet/conftest.py +11 -12
  150. chia/_tests/wallet/db_wallet/test_db_graftroot.py +11 -4
  151. chia/_tests/wallet/db_wallet/test_dl_offers.py +433 -130
  152. chia/_tests/wallet/db_wallet/test_dl_wallet.py +3 -3
  153. chia/_tests/wallet/did_wallet/test_did.py +2132 -2000
  154. chia/_tests/wallet/nft_wallet/config.py +1 -1
  155. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1610 -742
  156. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +486 -907
  157. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +4 -4
  158. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +517 -294
  159. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +133 -62
  160. chia/_tests/wallet/rpc/test_wallet_rpc.py +495 -265
  161. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +10 -6
  162. chia/_tests/wallet/sync/test_wallet_sync.py +89 -60
  163. chia/_tests/wallet/test_clvm_casts.py +88 -0
  164. chia/_tests/wallet/test_coin_management.py +1 -1
  165. chia/_tests/wallet/test_coin_selection.py +1 -1
  166. chia/_tests/wallet/test_conditions.py +1 -1
  167. chia/_tests/wallet/test_new_wallet_protocol.py +13 -11
  168. chia/_tests/wallet/test_notifications.py +5 -3
  169. chia/_tests/wallet/test_sign_coin_spends.py +6 -6
  170. chia/_tests/wallet/test_signer_protocol.py +13 -12
  171. chia/_tests/wallet/test_singleton.py +1 -1
  172. chia/_tests/wallet/test_singleton_lifecycle_fast.py +5 -7
  173. chia/_tests/wallet/test_util.py +2 -2
  174. chia/_tests/wallet/test_wallet.py +108 -29
  175. chia/_tests/wallet/test_wallet_action_scope.py +9 -2
  176. chia/_tests/wallet/test_wallet_blockchain.py +2 -3
  177. chia/_tests/wallet/test_wallet_key_val_store.py +1 -2
  178. chia/_tests/wallet/test_wallet_node.py +2 -4
  179. chia/_tests/wallet/test_wallet_retry.py +4 -2
  180. chia/_tests/wallet/test_wallet_state_manager.py +191 -5
  181. chia/_tests/wallet/test_wallet_test_framework.py +1 -1
  182. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +8 -8
  183. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -12
  184. chia/_tests/wallet/wallet_block_tools.py +6 -6
  185. chia/_tests/weight_proof/test_weight_proof.py +10 -48
  186. chia/apis.py +1 -1
  187. chia/cmds/beta.py +1 -1
  188. chia/cmds/chia.py +9 -9
  189. chia/cmds/cmd_classes.py +12 -11
  190. chia/cmds/cmd_helpers.py +1 -1
  191. chia/cmds/cmds_util.py +12 -9
  192. chia/cmds/coin_funcs.py +2 -2
  193. chia/cmds/configure.py +2 -2
  194. chia/cmds/data.py +0 -2
  195. chia/cmds/data_funcs.py +1 -1
  196. chia/cmds/db_validate_func.py +1 -2
  197. chia/cmds/dev/__init__.py +0 -0
  198. chia/cmds/dev/data.py +273 -0
  199. chia/cmds/{gh.py → dev/gh.py} +5 -5
  200. chia/cmds/dev/main.py +22 -0
  201. chia/cmds/dev/mempool.py +78 -0
  202. chia/cmds/dev/mempool_funcs.py +63 -0
  203. chia/cmds/farm_funcs.py +5 -4
  204. chia/cmds/init_funcs.py +11 -11
  205. chia/cmds/keys.py +2 -2
  206. chia/cmds/keys_funcs.py +4 -4
  207. chia/cmds/netspace_funcs.py +1 -1
  208. chia/cmds/peer_funcs.py +2 -2
  209. chia/cmds/plotnft_funcs.py +72 -26
  210. chia/cmds/rpc.py +1 -1
  211. chia/cmds/show_funcs.py +5 -5
  212. chia/cmds/signer.py +8 -7
  213. chia/cmds/sim_funcs.py +8 -9
  214. chia/cmds/wallet.py +2 -2
  215. chia/cmds/wallet_funcs.py +165 -131
  216. chia/{util → consensus}/augmented_chain.py +1 -2
  217. chia/consensus/block_body_validation.py +54 -40
  218. chia/consensus/block_creation.py +42 -76
  219. chia/consensus/block_header_validation.py +32 -26
  220. chia/consensus/block_record.py +0 -3
  221. chia/consensus/blockchain.py +23 -32
  222. chia/consensus/blockchain_interface.py +1 -5
  223. chia/consensus/check_time_locks.py +57 -0
  224. chia/consensus/coin_store_protocol.py +151 -0
  225. chia/consensus/coinbase.py +0 -6
  226. chia/consensus/condition_costs.py +4 -0
  227. chia/{util → consensus}/condition_tools.py +4 -5
  228. chia/consensus/cost_calculator.py +1 -1
  229. chia/consensus/default_constants.py +32 -9
  230. chia/consensus/deficit.py +1 -3
  231. chia/consensus/difficulty_adjustment.py +1 -2
  232. chia/consensus/find_fork_point.py +1 -3
  233. chia/consensus/full_block_to_block_record.py +1 -6
  234. chia/{util → consensus}/generator_tools.py +1 -3
  235. chia/consensus/get_block_challenge.py +30 -7
  236. chia/consensus/make_sub_epoch_summary.py +1 -5
  237. chia/consensus/multiprocess_validation.py +21 -20
  238. chia/consensus/pot_iterations.py +74 -13
  239. chia/{util → consensus}/prev_transaction_block.py +1 -1
  240. chia/consensus/vdf_info_computation.py +1 -3
  241. chia/daemon/keychain_proxy.py +5 -5
  242. chia/daemon/server.py +22 -5
  243. chia/data_layer/data_layer.py +92 -51
  244. chia/{rpc → data_layer}/data_layer_rpc_api.py +1 -1
  245. chia/{rpc → data_layer}/data_layer_rpc_util.py +3 -6
  246. chia/data_layer/data_layer_util.py +4 -6
  247. chia/data_layer/data_layer_wallet.py +42 -69
  248. chia/data_layer/dl_wallet_store.py +12 -6
  249. chia/data_layer/download_data.py +3 -3
  250. chia/data_layer/s3_plugin_service.py +0 -1
  251. chia/farmer/farmer.py +3 -4
  252. chia/farmer/farmer_api.py +11 -7
  253. chia/{rpc → farmer}/farmer_rpc_client.py +1 -1
  254. chia/full_node/block_height_map.py +7 -6
  255. chia/full_node/block_store.py +5 -7
  256. chia/full_node/bundle_tools.py +1 -2
  257. chia/full_node/coin_store.py +153 -124
  258. chia/{types → full_node}/eligible_coin_spends.py +39 -70
  259. chia/full_node/fee_estimator.py +1 -1
  260. chia/full_node/fee_estimator_interface.py +0 -8
  261. chia/full_node/fee_tracker.py +25 -25
  262. chia/full_node/full_node.py +70 -53
  263. chia/full_node/full_node_api.py +57 -40
  264. chia/{rpc → full_node}/full_node_rpc_api.py +87 -8
  265. chia/{rpc → full_node}/full_node_rpc_client.py +7 -6
  266. chia/full_node/full_node_store.py +23 -8
  267. chia/full_node/mempool.py +206 -53
  268. chia/full_node/mempool_check_conditions.py +20 -63
  269. chia/full_node/mempool_manager.py +47 -45
  270. chia/full_node/subscriptions.py +1 -3
  271. chia/full_node/tx_processing_queue.py +50 -3
  272. chia/full_node/weight_proof.py +46 -37
  273. chia/harvester/harvester.py +1 -1
  274. chia/harvester/harvester_api.py +22 -7
  275. chia/introducer/introducer.py +1 -1
  276. chia/introducer/introducer_api.py +1 -1
  277. chia/plot_sync/exceptions.py +1 -1
  278. chia/plot_sync/receiver.py +1 -1
  279. chia/plot_sync/sender.py +2 -2
  280. chia/pools/pool_puzzles.py +13 -18
  281. chia/pools/pool_wallet.py +23 -46
  282. chia/protocols/farmer_protocol.py +11 -3
  283. chia/protocols/full_node_protocol.py +1 -4
  284. chia/protocols/harvester_protocol.py +3 -3
  285. chia/protocols/pool_protocol.py +1 -2
  286. chia/protocols/shared_protocol.py +3 -3
  287. chia/protocols/timelord_protocol.py +1 -3
  288. chia/protocols/wallet_protocol.py +3 -3
  289. chia/rpc/rpc_client.py +7 -8
  290. chia/rpc/rpc_server.py +3 -3
  291. chia/rpc/util.py +3 -1
  292. chia/seeder/crawler.py +1 -1
  293. chia/seeder/crawler_api.py +1 -1
  294. chia/seeder/dns_server.py +2 -0
  295. chia/seeder/start_crawler.py +3 -3
  296. chia/server/address_manager.py +286 -38
  297. chia/server/address_manager_store.py +0 -215
  298. chia/{types → server}/aliases.py +7 -7
  299. chia/server/api_protocol.py +1 -1
  300. chia/server/chia_policy.py +1 -1
  301. chia/server/node_discovery.py +76 -113
  302. chia/server/rate_limits.py +1 -1
  303. chia/server/resolve_peer_info.py +43 -0
  304. chia/server/server.py +5 -5
  305. chia/server/start_data_layer.py +4 -4
  306. chia/server/start_farmer.py +5 -4
  307. chia/server/start_full_node.py +5 -4
  308. chia/server/start_harvester.py +7 -5
  309. chia/server/start_introducer.py +2 -2
  310. chia/server/start_service.py +1 -1
  311. chia/server/start_timelord.py +7 -5
  312. chia/server/start_wallet.py +7 -5
  313. chia/server/ws_connection.py +1 -1
  314. chia/simulator/add_blocks_in_batches.py +2 -2
  315. chia/simulator/block_tools.py +245 -201
  316. chia/simulator/full_node_simulator.py +38 -10
  317. chia/simulator/setup_services.py +12 -12
  318. chia/simulator/simulator_full_node_rpc_api.py +2 -2
  319. chia/simulator/simulator_full_node_rpc_client.py +2 -2
  320. chia/simulator/simulator_test_tools.py +2 -2
  321. chia/simulator/start_simulator.py +1 -1
  322. chia/simulator/wallet_tools.py +10 -18
  323. chia/ssl/create_ssl.py +1 -1
  324. chia/timelord/iters_from_block.py +14 -14
  325. chia/timelord/timelord.py +15 -11
  326. chia/timelord/timelord_api.py +14 -2
  327. chia/timelord/timelord_state.py +20 -14
  328. chia/types/blockchain_format/program.py +53 -10
  329. chia/types/blockchain_format/proof_of_space.py +73 -19
  330. chia/types/coin_spend.py +3 -56
  331. chia/types/generator_types.py +28 -0
  332. chia/types/internal_mempool_item.py +1 -2
  333. chia/types/mempool_item.py +12 -7
  334. chia/types/unfinished_header_block.py +1 -2
  335. chia/types/validation_state.py +1 -2
  336. chia/types/weight_proof.py +1 -3
  337. chia/util/action_scope.py +3 -3
  338. chia/util/block_cache.py +1 -2
  339. chia/util/byte_types.py +1 -1
  340. chia/util/casts.py +21 -0
  341. chia/util/config.py +0 -37
  342. chia/util/db_wrapper.py +8 -1
  343. chia/util/errors.py +3 -2
  344. chia/util/initial-config.yaml +21 -5
  345. chia/util/keychain.py +6 -7
  346. chia/util/keyring_wrapper.py +5 -5
  347. chia/util/limited_semaphore.py +1 -1
  348. chia/util/priority_mutex.py +1 -1
  349. chia/util/streamable.py +63 -5
  350. chia/util/task_timing.py +1 -1
  351. chia/util/virtual_project_analysis.py +1 -1
  352. chia/wallet/cat_wallet/cat_info.py +7 -3
  353. chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
  354. chia/wallet/cat_wallet/cat_utils.py +1 -1
  355. chia/wallet/cat_wallet/cat_wallet.py +44 -36
  356. chia/wallet/cat_wallet/lineage_store.py +7 -0
  357. chia/wallet/cat_wallet/r_cat_wallet.py +274 -0
  358. chia/wallet/conditions.py +5 -10
  359. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
  360. chia/wallet/derivation_record.py +33 -0
  361. chia/wallet/derive_keys.py +3 -3
  362. chia/wallet/did_wallet/did_info.py +12 -3
  363. chia/wallet/did_wallet/did_wallet.py +132 -101
  364. chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
  365. chia/wallet/driver_protocol.py +3 -1
  366. chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
  367. chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
  368. chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
  369. chia/wallet/nft_wallet/nft_wallet.py +69 -112
  370. chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
  371. chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
  372. chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
  373. chia/wallet/nft_wallet/uncurry_nft.py +4 -6
  374. chia/wallet/notification_manager.py +2 -3
  375. chia/wallet/outer_puzzles.py +7 -2
  376. chia/wallet/puzzle_drivers.py +1 -1
  377. chia/wallet/puzzles/clawback/drivers.py +5 -4
  378. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
  379. chia/wallet/puzzles/singleton_top_layer.py +2 -1
  380. chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
  381. chia/wallet/puzzles/tails.py +1 -3
  382. chia/wallet/signer_protocol.py +5 -6
  383. chia/wallet/singleton.py +5 -4
  384. chia/wallet/singleton_record.py +1 -1
  385. chia/wallet/trade_manager.py +18 -20
  386. chia/wallet/trade_record.py +3 -6
  387. chia/wallet/trading/offer.py +12 -13
  388. chia/wallet/uncurried_puzzle.py +2 -2
  389. chia/wallet/util/compute_additions.py +58 -0
  390. chia/wallet/util/compute_hints.py +3 -3
  391. chia/wallet/util/compute_memos.py +4 -4
  392. chia/wallet/util/curry_and_treehash.py +2 -1
  393. chia/wallet/util/debug_spend_bundle.py +1 -1
  394. chia/wallet/util/merkle_tree.py +1 -1
  395. chia/wallet/util/peer_request_cache.py +1 -2
  396. chia/wallet/util/tx_config.py +3 -8
  397. chia/wallet/util/wallet_sync_utils.py +10 -5
  398. chia/wallet/util/wallet_types.py +1 -0
  399. chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
  400. chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
  401. chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
  402. chia/wallet/vc_wallet/vc_drivers.py +50 -8
  403. chia/wallet/vc_wallet/vc_store.py +3 -5
  404. chia/wallet/vc_wallet/vc_wallet.py +15 -22
  405. chia/wallet/wallet.py +36 -46
  406. chia/wallet/wallet_action_scope.py +73 -4
  407. chia/wallet/wallet_blockchain.py +1 -3
  408. chia/wallet/wallet_interested_store.py +1 -1
  409. chia/wallet/wallet_nft_store.py +3 -3
  410. chia/wallet/wallet_node.py +17 -16
  411. chia/wallet/wallet_node_api.py +4 -5
  412. chia/wallet/wallet_pool_store.py +1 -1
  413. chia/wallet/wallet_protocol.py +2 -0
  414. chia/wallet/wallet_puzzle_store.py +1 -1
  415. chia/{rpc → wallet}/wallet_request_types.py +670 -81
  416. chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
  417. chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
  418. chia/wallet/wallet_singleton_store.py +8 -7
  419. chia/wallet/wallet_spend_bundle.py +4 -3
  420. chia/wallet/wallet_state_manager.py +320 -191
  421. chia/wallet/wallet_weight_proof_handler.py +1 -2
  422. chia/wallet/wsm_apis.py +98 -0
  423. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/METADATA +7 -7
  424. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/RECORD +443 -436
  425. mozilla-ca/cacert.pem +3 -165
  426. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
  427. chia/cmds/dev.py +0 -18
  428. chia/types/blockchain_format/slots.py +0 -9
  429. chia/types/blockchain_format/sub_epoch_summary.py +0 -5
  430. chia/types/end_of_slot_bundle.py +0 -5
  431. chia/types/full_block.py +0 -5
  432. chia/types/header_block.py +0 -5
  433. chia/types/spend_bundle_conditions.py +0 -7
  434. chia/types/transaction_queue_entry.py +0 -56
  435. chia/types/unfinished_block.py +0 -5
  436. /chia/cmds/{installers.py → dev/installers.py} +0 -0
  437. /chia/cmds/{sim.py → dev/sim.py} +0 -0
  438. /chia/{util → cmds}/dump_keyring.py +0 -0
  439. /chia/{full_node → consensus}/signage_point.py +0 -0
  440. /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
  441. /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
  442. /chia/{util → full_node}/full_block_utils.py +0 -0
  443. /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
  444. /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
  445. /chia/{full_node → protocols}/fee_estimate.py +0 -0
  446. /chia/{server → protocols}/outbound_message.py +0 -0
  447. /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
  448. /chia/{util → simulator}/vdf_prover.py +0 -0
  449. /chia/{util → ssl}/ssl_check.py +0 -0
  450. /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
  451. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/LICENSE +0 -0
  452. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/WHEEL +0 -0
  453. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/entry_points.txt +0 -0
@@ -6,23 +6,26 @@ import time
6
6
  from pathlib import Path
7
7
  from typing import TYPE_CHECKING, ClassVar, Optional, cast
8
8
 
9
- from chia_rs import AugSchemeMPL, G1Element, G2Element
9
+ from chia_rs import AugSchemeMPL, G1Element, G2Element, PlotSize, ProofOfSpace
10
10
  from chia_rs.sized_bytes import bytes32
11
11
  from chia_rs.sized_ints import uint8, uint32, uint64
12
12
 
13
- from chia.consensus.pot_iterations import calculate_iterations_quality, calculate_sp_interval_iters
13
+ from chia.consensus.pot_iterations import (
14
+ calculate_iterations_quality,
15
+ calculate_sp_interval_iters,
16
+ )
14
17
  from chia.harvester.harvester import Harvester
15
18
  from chia.plotting.util import PlotInfo, parse_plot_info
16
19
  from chia.protocols import harvester_protocol
17
20
  from chia.protocols.farmer_protocol import FarmingInfo
18
21
  from chia.protocols.harvester_protocol import Plot, PlotSyncResponse
22
+ from chia.protocols.outbound_message import Message, make_msg
19
23
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
20
24
  from chia.server.api_protocol import ApiMetadata
21
- from chia.server.outbound_message import Message, make_msg
22
25
  from chia.server.ws_connection import WSChiaConnection
23
26
  from chia.types.blockchain_format.proof_of_space import (
24
- ProofOfSpace,
25
27
  calculate_pos_challenge,
28
+ calculate_prefix_bits,
26
29
  generate_plot_public_key,
27
30
  passes_plot_filter,
28
31
  )
@@ -144,12 +147,15 @@ class HarvesterAPI:
144
147
 
145
148
  # Found proofs of space (on average 1 is expected per plot)
146
149
  for index, quality_str in enumerate(quality_strings):
150
+ # TODO: todo_v2_plots
147
151
  required_iters: uint64 = calculate_iterations_quality(
148
- self.harvester.constants.DIFFICULTY_CONSTANT_FACTOR,
152
+ self.harvester.constants,
149
153
  quality_str,
150
- plot_info.prover.get_size(),
154
+ PlotSize.make_v1(plot_info.prover.get_size()),
151
155
  difficulty,
152
156
  new_challenge.sp_hash,
157
+ sub_slot_iters,
158
+ new_challenge.last_tx_height,
153
159
  )
154
160
  sp_interval_iters = calculate_sp_interval_iters(self.harvester.constants, sub_slot_iters)
155
161
  if required_iters < sp_interval_iters:
@@ -243,8 +249,17 @@ class HarvesterAPI:
243
249
  # Passes the plot filter (does not check sp filter yet though, since we have not reached sp)
244
250
  # This is being executed at the beginning of the slot
245
251
  total += 1
252
+
253
+ # TODO: todo_v2_plots support v2 plots in PlotManager
254
+ filter_prefix_bits = uint8(
255
+ calculate_prefix_bits(
256
+ self.harvester.constants,
257
+ new_challenge.peak_height,
258
+ PlotSize.make_v1(try_plot_info.prover.get_size()),
259
+ )
260
+ )
246
261
  if passes_plot_filter(
247
- new_challenge.filter_prefix_bits,
262
+ filter_prefix_bits,
248
263
  try_plot_info.prover.get_id(),
249
264
  new_challenge.challenge_hash,
250
265
  new_challenge.sp_hash,
@@ -11,9 +11,9 @@ from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
11
11
  import dns.asyncresolver
12
12
  from chia_rs.sized_ints import uint16, uint64
13
13
 
14
+ from chia.protocols.outbound_message import NodeType
14
15
  from chia.rpc.rpc_server import StateChangedProtocol, default_get_connections
15
16
  from chia.server.introducer_peers import VettedPeer
16
- from chia.server.outbound_message import NodeType
17
17
  from chia.server.server import ChiaServer
18
18
  from chia.server.ws_connection import WSChiaConnection
19
19
  from chia.types.peer_info import TimestampedPeerInfo
@@ -7,10 +7,10 @@ from chia_rs.sized_ints import uint64
7
7
 
8
8
  from chia.introducer.introducer import Introducer
9
9
  from chia.protocols.introducer_protocol import RequestPeersIntroducer, RespondPeersIntroducer
10
+ from chia.protocols.outbound_message import Message, make_msg
10
11
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
11
12
  from chia.rpc.rpc_server import StateChangedProtocol
12
13
  from chia.server.api_protocol import ApiMetadata
13
- from chia.server.outbound_message import Message, make_msg
14
14
  from chia.server.ws_connection import WSChiaConnection
15
15
  from chia.types.peer_info import TimestampedPeerInfo
16
16
 
@@ -6,7 +6,7 @@ from chia_rs.sized_ints import uint64
6
6
 
7
7
  from chia.plot_sync.util import ErrorCodes, State
8
8
  from chia.protocols.harvester_protocol import PlotSyncIdentifier
9
- from chia.server.outbound_message import NodeType
9
+ from chia.protocols.outbound_message import NodeType
10
10
 
11
11
 
12
12
  class PlotSyncException(Exception):
@@ -32,8 +32,8 @@ from chia.protocols.harvester_protocol import (
32
32
  PlotSyncResponse,
33
33
  PlotSyncStart,
34
34
  )
35
+ from chia.protocols.outbound_message import make_msg
35
36
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
36
- from chia.server.outbound_message import make_msg
37
37
  from chia.server.ws_connection import WSChiaConnection
38
38
 
39
39
  log = logging.getLogger(__name__)
chia/plot_sync/sender.py CHANGED
@@ -25,8 +25,8 @@ from chia.protocols.harvester_protocol import (
25
25
  PlotSyncResponse,
26
26
  PlotSyncStart,
27
27
  )
28
+ from chia.protocols.outbound_message import NodeType, make_msg
28
29
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
29
- from chia.server.outbound_message import NodeType, make_msg
30
30
  from chia.server.ws_connection import WSChiaConnection
31
31
  from chia.util.batches import to_batches
32
32
  from chia.util.task_referencer import create_referenced_task
@@ -125,7 +125,7 @@ class Sender:
125
125
  if not self._plot_manager.initial_refresh() or self._sync_id != 0:
126
126
  self._reset()
127
127
  else:
128
- raise AlreadyStartedError()
128
+ raise AlreadyStartedError
129
129
 
130
130
  def stop(self) -> None:
131
131
  self._stop_requested = True
@@ -11,10 +11,9 @@ from chia_puzzles_py.programs import (
11
11
  POOL_WAITINGROOM_INNERPUZ,
12
12
  POOL_WAITINGROOM_INNERPUZ_HASH,
13
13
  )
14
- from chia_rs import G1Element
14
+ from chia_rs import CoinSpend, G1Element
15
15
  from chia_rs.sized_bytes import bytes32
16
16
  from chia_rs.sized_ints import uint32, uint64
17
- from clvm.casts import int_to_bytes
18
17
 
19
18
  from chia.consensus.block_rewards import calculate_pool_reward
20
19
  from chia.consensus.coinbase import pool_parent_id
@@ -22,13 +21,15 @@ from chia.pools.pool_wallet_info import LEAVING_POOL, SELF_POOLING, PoolState
22
21
  from chia.types.blockchain_format.coin import Coin
23
22
  from chia.types.blockchain_format.program import Program
24
23
  from chia.types.blockchain_format.serialized_program import SerializedProgram
25
- from chia.types.coin_spend import CoinSpend, compute_additions
24
+ from chia.types.coin_spend import make_spend
25
+ from chia.util.casts import int_to_bytes
26
26
  from chia.wallet.puzzles.singleton_top_layer import (
27
27
  SINGLETON_LAUNCHER_HASH,
28
28
  SINGLETON_MOD,
29
29
  SINGLETON_MOD_HASH,
30
30
  puzzle_for_singleton,
31
31
  )
32
+ from chia.wallet.util.compute_additions import compute_additions
32
33
  from chia.wallet.util.curry_and_treehash import calculate_hash_of_quoted_mod_hash, curry_and_treehash, shatree_atom
33
34
 
34
35
  log = logging.getLogger(__name__)
@@ -240,10 +241,10 @@ def create_travel_spend(
240
241
  full_puzzle: Program = create_full_puzzle(inner_puzzle, launcher_coin.name())
241
242
 
242
243
  return (
243
- CoinSpend(
244
+ make_spend(
244
245
  current_singleton,
245
- SerializedProgram.from_program(full_puzzle),
246
- SerializedProgram.from_program(full_solution),
246
+ full_puzzle,
247
+ full_solution,
247
248
  ),
248
249
  inner_puzzle,
249
250
  )
@@ -287,22 +288,16 @@ def create_absorb_spend(
287
288
  last_coin_spend.coin.amount,
288
289
  ]
289
290
  )
290
- full_solution: SerializedProgram = SerializedProgram.from_program(
291
- Program.to([parent_info, last_coin_spend.coin.amount, inner_sol])
292
- )
293
- full_puzzle: SerializedProgram = SerializedProgram.from_program(
294
- create_full_puzzle(inner_puzzle, launcher_coin.name())
295
- )
291
+ full_solution: SerializedProgram = SerializedProgram.to([parent_info, last_coin_spend.coin.amount, inner_sol])
292
+ full_puzzle: SerializedProgram = create_full_puzzle(inner_puzzle, launcher_coin.name()).to_serialized()
296
293
  assert coin.puzzle_hash == full_puzzle.get_tree_hash()
297
294
 
298
295
  reward_parent: bytes32 = pool_parent_id(height, genesis_challenge)
299
- p2_singleton_puzzle: SerializedProgram = SerializedProgram.from_program(
300
- create_p2_singleton_puzzle(SINGLETON_MOD_HASH, launcher_coin.name(), delay_time, delay_ph)
301
- )
296
+ p2_singleton_puzzle = create_p2_singleton_puzzle(
297
+ SINGLETON_MOD_HASH, launcher_coin.name(), delay_time, delay_ph
298
+ ).to_serialized()
302
299
  reward_coin: Coin = Coin(reward_parent, p2_singleton_puzzle.get_tree_hash(), reward_amount)
303
- p2_singleton_solution: SerializedProgram = SerializedProgram.from_program(
304
- Program.to([inner_puzzle.get_tree_hash(), reward_coin.name()])
305
- )
300
+ p2_singleton_solution = SerializedProgram.to([inner_puzzle.get_tree_hash(), reward_coin.name()])
306
301
  assert p2_singleton_puzzle.get_tree_hash() == reward_coin.puzzle_hash
307
302
  assert full_puzzle.get_tree_hash() == coin.puzzle_hash
308
303
  assert get_inner_puzzle_from_puzzle(Program.from_bytes(bytes(full_puzzle))) is not None
chia/pools/pool_wallet.py CHANGED
@@ -5,7 +5,7 @@ import logging
5
5
  import time
6
6
  from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
7
7
 
8
- from chia_rs import G1Element, G2Element, PrivateKey
8
+ from chia_rs import CoinSpend, G1Element, G2Element
9
9
  from chia_rs.sized_bytes import bytes32
10
10
  from chia_rs.sized_ints import uint32, uint64, uint128
11
11
  from typing_extensions import Unpack, final
@@ -40,12 +40,11 @@ from chia.protocols.pool_protocol import POOL_PROTOCOL_VERSION
40
40
  from chia.server.ws_connection import WSChiaConnection
41
41
  from chia.types.blockchain_format.coin import Coin
42
42
  from chia.types.blockchain_format.program import Program
43
- from chia.types.blockchain_format.serialized_program import SerializedProgram
44
- from chia.types.coin_spend import CoinSpend, compute_additions
43
+ from chia.types.coin_spend import make_spend
45
44
  from chia.wallet.conditions import AssertCoinAnnouncement, Condition, ConditionValidTimes
46
- from chia.wallet.derive_keys import find_owner_sk
47
45
  from chia.wallet.puzzles.singleton_top_layer import SINGLETON_LAUNCHER
48
46
  from chia.wallet.transaction_record import TransactionRecord
47
+ from chia.wallet.util.compute_additions import compute_additions
49
48
  from chia.wallet.util.transaction_type import TransactionType
50
49
  from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG, TXConfig
51
50
  from chia.wallet.util.wallet_types import WalletType
@@ -68,10 +67,10 @@ class PoolWallet:
68
67
 
69
68
  _protocol_check: ClassVar[WalletProtocol[object]] = cast("PoolWallet", None)
70
69
 
71
- MINIMUM_INITIAL_BALANCE = 1
72
- MINIMUM_RELATIVE_LOCK_HEIGHT = 5
73
- MAXIMUM_RELATIVE_LOCK_HEIGHT = 1000
74
- DEFAULT_MAX_CLAIM_SPENDS = 100
70
+ MINIMUM_INITIAL_BALANCE: ClassVar[int] = 1
71
+ MINIMUM_RELATIVE_LOCK_HEIGHT: ClassVar[int] = 5
72
+ MAXIMUM_RELATIVE_LOCK_HEIGHT: ClassVar[int] = 1000
73
+ DEFAULT_MAX_CLAIM_SPENDS: ClassVar[int] = 100
75
74
 
76
75
  wallet_state_manager: WalletStateManager
77
76
  log: logging.Logger
@@ -81,7 +80,6 @@ class PoolWallet:
81
80
  next_transaction_fee: uint64 = uint64(0)
82
81
  next_tx_config: TXConfig = DEFAULT_TX_CONFIG
83
82
  target_state: Optional[PoolState] = None
84
- _owner_sk_and_index: Optional[tuple[PrivateKey, uint32]] = None
85
83
 
86
84
  """
87
85
  From the user's perspective, this is not a wallet at all, but a way to control
@@ -232,7 +230,7 @@ class PoolWallet:
232
230
  async def get_tip(self) -> tuple[uint32, CoinSpend]:
233
231
  return (await self.wallet_state_manager.pool_store.get_spends_for_wallet(self.wallet_id))[-1]
234
232
 
235
- async def update_pool_config(self) -> None:
233
+ async def update_pool_config(self, action_scope: WalletActionScope) -> None:
236
234
  current_state: PoolWalletInfo = await self.get_current_state()
237
235
  pool_config_list: list[PoolWalletConfig] = load_pool_config(self.wallet_state_manager.root_path)
238
236
  pool_config_dict: dict[bytes32, PoolWalletConfig] = {c.launcher_id: c for c in pool_config_list}
@@ -240,15 +238,7 @@ class PoolWallet:
240
238
  payout_instructions: str = existing_config.payout_instructions if existing_config is not None else ""
241
239
 
242
240
  if len(payout_instructions) == 0:
243
- reuse_puzhash_config = self.wallet_state_manager.config.get("reuse_public_key_for_change", None)
244
- if reuse_puzhash_config is None:
245
- reuse_puzhash = False
246
- else:
247
- reuse_puzhash = reuse_puzhash_config.get(
248
- str(self.wallet_state_manager.root_pubkey.get_fingerprint()), False
249
- )
250
-
251
- payout_instructions = (await self.standard_wallet.get_puzzle_hash(new=not reuse_puzhash)).hex()
241
+ payout_instructions = (await action_scope.get_puzzle_hash(self.wallet_state_manager)).hex()
252
242
  self.log.info(f"New config entry. Generated payout_instructions puzzle hash: {payout_instructions}")
253
243
 
254
244
  new_config: PoolWalletConfig = PoolWalletConfig(
@@ -262,7 +252,9 @@ class PoolWallet:
262
252
  pool_config_dict[new_config.launcher_id] = new_config
263
253
  await update_pool_config(self.wallet_state_manager.root_path, list(pool_config_dict.values()))
264
254
 
265
- async def apply_state_transition(self, new_state: CoinSpend, block_height: uint32) -> bool:
255
+ async def apply_state_transition(
256
+ self, new_state: CoinSpend, block_height: uint32, action_scope: WalletActionScope
257
+ ) -> bool:
266
258
  """
267
259
  Updates the Pool state (including DB) with new singleton spends.
268
260
  The DB must be committed after calling this method. All validation should be done here. Returns True iff
@@ -301,10 +293,10 @@ class PoolWallet:
301
293
  self.next_tx_config = DEFAULT_TX_CONFIG
302
294
  break
303
295
 
304
- await self.update_pool_config()
296
+ await self.update_pool_config(action_scope)
305
297
  return True
306
298
 
307
- async def rewind(self, block_height: int) -> bool:
299
+ async def rewind(self, block_height: int, action_scope: WalletActionScope) -> bool:
308
300
  """
309
301
  Rolls back all transactions after block_height, and if creation was after block_height, deletes the wallet.
310
302
  Returns True if the wallet should be removed.
@@ -320,7 +312,7 @@ class PoolWallet:
320
312
  return True
321
313
  else:
322
314
  if await self.get_current_state() != prev_state:
323
- await self.update_pool_config()
315
+ await self.update_pool_config(action_scope)
324
316
  return False
325
317
  except Exception as e:
326
318
  self.log.error(f"Exception rewinding: {e}")
@@ -330,6 +322,7 @@ class PoolWallet:
330
322
  async def create(
331
323
  cls,
332
324
  wallet_state_manager: Any,
325
+ action_scope: WalletActionScope,
333
326
  wallet: Wallet,
334
327
  launcher_coin_id: bytes32,
335
328
  block_spends: list[CoinSpend],
@@ -359,7 +352,7 @@ class PoolWallet:
359
352
  launcher_spend = spend
360
353
  assert launcher_spend is not None
361
354
  await wallet_state_manager.pool_store.add_spend(pool_wallet.wallet_id, launcher_spend, block_height)
362
- await pool_wallet.update_pool_config()
355
+ await pool_wallet.update_pool_config(action_scope)
363
356
 
364
357
  p2_puzzle_hash: bytes32 = (await pool_wallet.get_current_state()).p2_singleton_puzzle_hash
365
358
  await wallet_state_manager.add_new_wallet(pool_wallet)
@@ -411,9 +404,7 @@ class PoolWallet:
411
404
  standard_wallet = main_wallet
412
405
 
413
406
  if p2_singleton_delayed_ph is None:
414
- p2_singleton_delayed_ph = await main_wallet.get_puzzle_hash(
415
- new=not action_scope.config.tx_config.reuse_puzhash
416
- )
407
+ p2_singleton_delayed_ph = await action_scope.get_puzzle_hash(wallet_state_manager)
417
408
  if p2_singleton_delay_time is None:
418
409
  p2_singleton_delay_time = uint64(604800)
419
410
 
@@ -445,18 +436,6 @@ class PoolWallet:
445
436
 
446
437
  return p2_singleton_puzzle_hash, launcher_coin_id
447
438
 
448
- async def _get_owner_key_cache(self) -> tuple[PrivateKey, uint32]:
449
- if self._owner_sk_and_index is None:
450
- self._owner_sk_and_index = find_owner_sk(
451
- [self.wallet_state_manager.get_master_private_key()],
452
- (await self.get_current_state()).current.owner_pubkey,
453
- )
454
- assert self._owner_sk_and_index is not None
455
- return self._owner_sk_and_index
456
-
457
- async def get_pool_wallet_index(self) -> uint32:
458
- return (await self._get_owner_key_cache())[1]
459
-
460
439
  async def generate_fee_transaction(
461
440
  self,
462
441
  fee: uint64,
@@ -498,9 +477,7 @@ class PoolWallet:
498
477
  delayed_seconds,
499
478
  delayed_puzhash,
500
479
  )
501
- new_full_puzzle: SerializedProgram = SerializedProgram.from_program(
502
- create_full_puzzle(new_inner_puzzle, pool_wallet_info.launcher_coin.name())
503
- )
480
+ new_full_puzzle = create_full_puzzle(new_inner_puzzle, pool_wallet_info.launcher_coin.name()).to_serialized()
504
481
 
505
482
  outgoing_coin_spend, inner_puzzle = create_travel_spend(
506
483
  last_coin_spend,
@@ -626,10 +603,10 @@ class PoolWallet:
626
603
 
627
604
  genesis_launcher_solution: Program = Program.to([puzzle_hash, amount, pool_state_bytes])
628
605
 
629
- launcher_cs: CoinSpend = CoinSpend(
606
+ launcher_cs: CoinSpend = make_spend(
630
607
  launcher_coin,
631
- SerializedProgram.from_program(genesis_launcher_puz),
632
- SerializedProgram.from_program(genesis_launcher_solution),
608
+ genesis_launcher_puz,
609
+ genesis_launcher_solution,
633
610
  )
634
611
  launcher_sb = WalletSpendBundle([launcher_cs], G2Element())
635
612
 
@@ -711,7 +688,7 @@ class PoolWallet:
711
688
 
712
689
  # Note the implications of getting owner_puzzlehash from our local wallet right now
713
690
  # vs. having pre-arranged the target self-pooling address
714
- owner_puzzlehash = await self.standard_wallet.get_new_puzzlehash()
691
+ owner_puzzlehash = await action_scope.get_puzzle_hash(self.wallet_state_manager)
715
692
  owner_pubkey = pool_wallet_info.current.owner_pubkey
716
693
  current_state: PoolWalletInfo = await self.get_current_state()
717
694
  total_fee = uint64(fee * 2)
@@ -3,13 +3,20 @@ from __future__ import annotations
3
3
  from dataclasses import dataclass
4
4
  from typing import Optional
5
5
 
6
- from chia_rs import FoliageBlockData, FoliageTransactionBlock, G2Element, PoolTarget, RewardChainBlockUnfinished
6
+ from chia_rs import (
7
+ ChallengeChainSubSlot,
8
+ FoliageBlockData,
9
+ FoliageTransactionBlock,
10
+ G2Element,
11
+ PoolTarget,
12
+ ProofOfSpace,
13
+ RewardChainBlockUnfinished,
14
+ RewardChainSubSlot,
15
+ )
7
16
  from chia_rs.sized_bytes import bytes32
8
17
  from chia_rs.sized_ints import uint8, uint32, uint64
9
18
 
10
19
  from chia.types.blockchain_format.classgroup import ClassgroupElement
11
- from chia.types.blockchain_format.proof_of_space import ProofOfSpace
12
- from chia.types.blockchain_format.slots import ChallengeChainSubSlot, RewardChainSubSlot
13
20
  from chia.util.streamable import Streamable, streamable
14
21
 
15
22
  """
@@ -49,6 +56,7 @@ class NewSignagePoint(Streamable):
49
56
  sub_slot_iters: uint64
50
57
  signage_point_index: uint8
51
58
  peak_height: uint32
59
+ last_tx_height: uint32
52
60
  sp_source_data: Optional[SignagePointSourceData] = None
53
61
 
54
62
 
@@ -3,15 +3,12 @@ from __future__ import annotations
3
3
  from dataclasses import dataclass
4
4
  from typing import Optional
5
5
 
6
+ from chia_rs import EndOfSubSlotBundle, FullBlock, SpendBundle, UnfinishedBlock
6
7
  from chia_rs.sized_bytes import bytes32
7
8
  from chia_rs.sized_ints import uint8, uint32, uint64, uint128
8
9
 
9
10
  from chia.types.blockchain_format.vdf import VDFInfo, VDFProof
10
- from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
11
- from chia.types.full_block import FullBlock
12
11
  from chia.types.peer_info import TimestampedPeerInfo
13
- from chia.types.spend_bundle import SpendBundle
14
- from chia.types.unfinished_block import UnfinishedBlock
15
12
  from chia.types.weight_proof import WeightProof
16
13
  from chia.util.streamable import Streamable, streamable
17
14
 
@@ -4,11 +4,10 @@ from dataclasses import dataclass
4
4
  from enum import IntEnum
5
5
  from typing import Optional
6
6
 
7
- from chia_rs import G1Element, G2Element, RewardChainBlockUnfinished
7
+ from chia_rs import G1Element, G2Element, ProofOfSpace, RewardChainBlockUnfinished
8
8
  from chia_rs.sized_bytes import bytes32
9
9
  from chia_rs.sized_ints import int16, uint8, uint32, uint64
10
10
 
11
- from chia.types.blockchain_format.proof_of_space import ProofOfSpace
12
11
  from chia.util.streamable import Streamable, streamable
13
12
 
14
13
  """
@@ -41,7 +40,8 @@ class NewSignagePointHarvester(Streamable):
41
40
  signage_point_index: uint8
42
41
  sp_hash: bytes32
43
42
  pool_difficulties: list[PoolDifficulty]
44
- filter_prefix_bits: uint8
43
+ peak_height: uint32
44
+ last_tx_height: uint32
45
45
 
46
46
 
47
47
  @streamable
@@ -5,11 +5,10 @@ from dataclasses import dataclass
5
5
  from enum import Enum
6
6
  from typing import Optional
7
7
 
8
- from chia_rs import G1Element, G2Element
8
+ from chia_rs import G1Element, G2Element, ProofOfSpace
9
9
  from chia_rs.sized_bytes import bytes32
10
10
  from chia_rs.sized_ints import uint8, uint16, uint32, uint64
11
11
 
12
- from chia.types.blockchain_format.proof_of_space import ProofOfSpace
13
12
  from chia.util.streamable import Streamable, streamable
14
13
 
15
14
  POOL_PROTOCOL_VERSION = uint8(1)
@@ -6,13 +6,13 @@ from typing import Optional
6
6
 
7
7
  from chia_rs.sized_ints import int16, uint8, uint16
8
8
 
9
- from chia.server.outbound_message import NodeType
9
+ from chia.protocols.outbound_message import NodeType
10
10
  from chia.util.streamable import Streamable, streamable
11
11
 
12
12
  protocol_version = {
13
13
  NodeType.FULL_NODE: "0.0.36",
14
- NodeType.HARVESTER: "0.0.36",
15
- NodeType.FARMER: "0.0.36",
14
+ NodeType.HARVESTER: "0.0.37",
15
+ NodeType.FARMER: "0.0.37",
16
16
  NodeType.TIMELORD: "0.0.36",
17
17
  NodeType.INTRODUCER: "0.0.36",
18
18
  NodeType.WALLET: "0.0.38",
@@ -3,13 +3,11 @@ from __future__ import annotations
3
3
  from dataclasses import dataclass
4
4
  from typing import Optional
5
5
 
6
- from chia_rs import Foliage, RewardChainBlock, RewardChainBlockUnfinished
6
+ from chia_rs import EndOfSubSlotBundle, Foliage, RewardChainBlock, RewardChainBlockUnfinished, SubEpochSummary
7
7
  from chia_rs.sized_bytes import bytes32
8
8
  from chia_rs.sized_ints import uint8, uint32, uint64, uint128
9
9
 
10
- from chia.types.blockchain_format.sub_epoch_summary import SubEpochSummary
11
10
  from chia.types.blockchain_format.vdf import VDFInfo, VDFProof
12
- from chia.types.end_of_slot_bundle import EndOfSubSlotBundle
13
11
  from chia.util.streamable import Streamable, streamable
14
12
 
15
13
  """
@@ -5,14 +5,13 @@ from enum import IntEnum
5
5
  from typing import Optional
6
6
 
7
7
  import chia_rs
8
+ from chia_rs import HeaderBlock, SpendBundle
8
9
  from chia_rs.sized_bytes import bytes32
9
10
  from chia_rs.sized_ints import uint8, uint32, uint64, uint128
10
11
 
11
- from chia.full_node.fee_estimate import FeeEstimateGroup
12
+ from chia.protocols.fee_estimate import FeeEstimateGroup
12
13
  from chia.types.blockchain_format.coin import Coin
13
14
  from chia.types.blockchain_format.serialized_program import SerializedProgram
14
- from chia.types.header_block import HeaderBlock
15
- from chia.types.spend_bundle import SpendBundle
16
15
  from chia.util.streamable import Streamable, streamable
17
16
 
18
17
  """
@@ -21,6 +20,7 @@ Note: When changing this file, also change protocol_message_types.py, and the pr
21
20
  """
22
21
 
23
22
 
23
+ # NOTE: using this assignment to retain automatic testing of these messages
24
24
  CoinState = chia_rs.CoinState
25
25
  RespondToPhUpdates = chia_rs.RespondToPhUpdates
26
26
 
chia/rpc/rpc_client.py CHANGED
@@ -7,20 +7,19 @@ 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, TypeVar
10
+ from typing import Any, Optional
11
11
 
12
12
  import aiohttp
13
13
  from chia_rs.sized_bytes import bytes32
14
14
  from chia_rs.sized_ints import uint16
15
+ from typing_extensions import Self
15
16
 
16
- from chia.server.outbound_message import NodeType
17
+ from chia.protocols.outbound_message import NodeType
17
18
  from chia.server.server import ssl_context_for_client
18
19
  from chia.server.ssl_context import private_ssl_ca_paths
19
20
  from chia.util.byte_types import hexstr_to_bytes
20
21
  from chia.util.task_referencer import create_referenced_task
21
22
 
22
- _T_RpcClient = TypeVar("_T_RpcClient", bound="RpcClient")
23
-
24
23
 
25
24
  # It would be better to not inherit from ValueError. This is being done to separate
26
25
  # the possibility to identify these errors in new code from having to review and
@@ -50,12 +49,12 @@ class RpcClient:
50
49
 
51
50
  @classmethod
52
51
  async def create(
53
- cls: type[_T_RpcClient],
52
+ cls,
54
53
  self_hostname: str,
55
54
  port: uint16,
56
55
  root_path: Optional[Path],
57
56
  net_config: Optional[dict[str, Any]],
58
- ) -> _T_RpcClient:
57
+ ) -> Self:
59
58
  if (root_path is not None) != (net_config is not None):
60
59
  raise ValueError("Either both or neither of root_path and net_config must be provided")
61
60
 
@@ -89,12 +88,12 @@ class RpcClient:
89
88
  @classmethod
90
89
  @asynccontextmanager
91
90
  async def create_as_context(
92
- cls: type[_T_RpcClient],
91
+ cls,
93
92
  self_hostname: str,
94
93
  port: uint16,
95
94
  root_path: Optional[Path] = None,
96
95
  net_config: Optional[dict[str, Any]] = None,
97
- ) -> AsyncIterator[_T_RpcClient]:
96
+ ) -> AsyncIterator[Self]:
98
97
  self = await cls.create(
99
98
  self_hostname=self_hostname,
100
99
  port=port,
chia/rpc/rpc_server.py CHANGED
@@ -24,8 +24,8 @@ from chia_rs.sized_ints import uint16
24
24
  from typing_extensions import Protocol, final
25
25
 
26
26
  from chia import __version__
27
+ from chia.protocols.outbound_message import NodeType
27
28
  from chia.rpc.util import wrap_http_handler
28
- from chia.server.outbound_message import NodeType
29
29
  from chia.server.server import (
30
30
  ChiaServer,
31
31
  ssl_context_for_client,
@@ -199,7 +199,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
199
199
  hostname=self_hostname,
200
200
  port=rpc_port,
201
201
  max_request_body_size=max_request_body_size,
202
- routes=[web.post(route, wrap_http_handler(func)) for (route, func) in self._get_routes().items()],
202
+ routes=[web.post(route, wrap_http_handler(func, route)) for (route, func) in self._get_routes().items()],
203
203
  ssl_context=self.ssl_context,
204
204
  prefer_ipv6=self.prefer_ipv6,
205
205
  )
@@ -303,7 +303,7 @@ class RpcServer(Generic[_T_RpcApiProtocol]):
303
303
  async def close_connection(self, request: dict[str, Any]) -> EndpointResult:
304
304
  node_id = hexstr_to_bytes(request["node_id"])
305
305
  if self.rpc_api.service.server is None:
306
- raise web.HTTPInternalServerError()
306
+ raise web.HTTPInternalServerError
307
307
  connections_to_close = [c for c in self.rpc_api.service.server.get_connections() if c.peer_node_id == node_id]
308
308
  if len(connections_to_close) == 0:
309
309
  raise ValueError(f"Connection with node_id {node_id.hex()} does not exist")
chia/rpc/util.py CHANGED
@@ -66,11 +66,13 @@ def marshal(func: MarshallableRpcEndpoint) -> RpcEndpoint:
66
66
  raise ValueError("Internal Error. Marshalled endpoint was made with clvm_streamable.")
67
67
  return response_dict
68
68
 
69
+ rpc_endpoint.__name__ = func.__name__
69
70
  return rpc_endpoint
70
71
 
71
72
 
72
73
  def wrap_http_handler(
73
74
  f: Callable[[dict[str, Any]], Awaitable[EndpointResult]],
75
+ route: str,
74
76
  ) -> Callable[[aiohttp.web.Request], Awaitable[aiohttp.web.StreamResponse]]:
75
77
  async def inner(request: aiohttp.web.Request) -> aiohttp.web.StreamResponse:
76
78
  request_data = await request.json()
@@ -82,7 +84,7 @@ def wrap_http_handler(
82
84
  res_object["success"] = True
83
85
  except Exception as e:
84
86
  tb = traceback.format_exc()
85
- log.warning(f"Error while handling message: {tb}")
87
+ log.warning(f"Error while handling message for {route}: {tb}")
86
88
  if len(e.args) > 0:
87
89
  res_object = {"success": False, "error": f"{e.args[0]}", "traceback": f"{tb}"}
88
90
  else:
chia/seeder/crawler.py CHANGED
@@ -19,10 +19,10 @@ from chia_rs.sized_ints import uint32, uint64
19
19
  from chia.full_node.full_node_api import FullNodeAPI
20
20
  from chia.protocols import full_node_protocol
21
21
  from chia.protocols.full_node_protocol import RespondPeers
22
+ from chia.protocols.outbound_message import NodeType
22
23
  from chia.rpc.rpc_server import StateChangedProtocol, default_get_connections
23
24
  from chia.seeder.crawl_store import CrawlStore
24
25
  from chia.seeder.peer_record import PeerRecord, PeerReliability
25
- from chia.server.outbound_message import NodeType
26
26
  from chia.server.server import ChiaServer
27
27
  from chia.server.ws_connection import WSChiaConnection
28
28
  from chia.types.peer_info import PeerInfo
@@ -4,9 +4,9 @@ import logging
4
4
  from typing import TYPE_CHECKING, ClassVar, Optional, cast
5
5
 
6
6
  from chia.protocols import full_node_protocol, wallet_protocol
7
+ from chia.protocols.outbound_message import Message
7
8
  from chia.seeder.crawler import Crawler
8
9
  from chia.server.api_protocol import ApiMetadata
9
- from chia.server.outbound_message import Message
10
10
  from chia.server.server import ChiaServer
11
11
  from chia.server.ws_connection import WSChiaConnection
12
12