chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5rc1__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 +421 -69
  63. chia/_tests/core/mempool/test_mempool_performance.py +3 -2
  64. chia/_tests/core/mempool/test_singleton_fast_forward.py +60 -131
  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 +305 -184
  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 +143 -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 +26 -40
  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 +273 -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.5rc1.dist-info}/METADATA +7 -7
  424. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.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.5rc1.dist-info}/LICENSE +0 -0
  452. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/WHEEL +0 -0
  453. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5rc1.dist-info}/entry_points.txt +0 -0
chia/wallet/wallet.py CHANGED
@@ -4,7 +4,7 @@ import logging
4
4
  import time
5
5
  from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
6
6
 
7
- from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
7
+ from chia_rs import AugSchemeMPL, CoinSpend, G1Element, G2Element, PrivateKey
8
8
  from chia_rs.sized_bytes import bytes32
9
9
  from chia_rs.sized_ints import uint32, uint64, uint128
10
10
  from typing_extensions import Unpack
@@ -12,7 +12,7 @@ from typing_extensions import Unpack
12
12
  from chia.types.blockchain_format.coin import Coin
13
13
  from chia.types.blockchain_format.program import Program
14
14
  from chia.types.blockchain_format.serialized_program import SerializedProgram
15
- from chia.types.coin_spend import CoinSpend, make_spend
15
+ from chia.types.coin_spend import make_spend
16
16
  from chia.types.signing_mode import CHIP_0002_SIGN_MESSAGE_PREFIX, SigningMode
17
17
  from chia.util.hash import std_hash
18
18
  from chia.util.streamable import Streamable
@@ -177,38 +177,6 @@ class Wallet:
177
177
  public_key = await self.wallet_state_manager.get_public_key(puzzle_hash)
178
178
  return puzzle_for_pk(G1Element.from_bytes(public_key))
179
179
 
180
- async def get_new_puzzle(self) -> Program:
181
- dr = await self.wallet_state_manager.get_unused_derivation_record(self.id())
182
- puzzle = puzzle_for_pk(dr.pubkey)
183
- return puzzle
184
-
185
- async def get_puzzle(self, new: bool) -> Program:
186
- if new:
187
- return await self.get_new_puzzle()
188
- else:
189
- record: Optional[
190
- DerivationRecord
191
- ] = await self.wallet_state_manager.get_current_derivation_record_for_wallet(self.id())
192
- if record is None:
193
- return await self.get_new_puzzle() # pragma: no cover
194
- puzzle = puzzle_for_pk(record.pubkey)
195
- return puzzle
196
-
197
- async def get_puzzle_hash(self, new: bool) -> bytes32:
198
- if new:
199
- return await self.get_new_puzzlehash()
200
- else:
201
- record: Optional[
202
- DerivationRecord
203
- ] = await self.wallet_state_manager.get_current_derivation_record_for_wallet(self.id())
204
- if record is None:
205
- return await self.get_new_puzzlehash()
206
- return record.puzzle_hash
207
-
208
- async def get_new_puzzlehash(self) -> bytes32:
209
- puzhash = (await self.wallet_state_manager.get_unused_derivation_record(self.id())).puzzle_hash
210
- return puzhash
211
-
212
180
  def make_solution(
213
181
  self,
214
182
  primaries: list[CreateCoin],
@@ -272,6 +240,8 @@ class Wallet:
272
240
  negative_change_allowed: bool = False,
273
241
  puzzle_decorator_override: Optional[list[dict[str, Any]]] = None,
274
242
  extra_conditions: tuple[Condition, ...] = tuple(),
243
+ reserve_fee: Optional[uint64] = None,
244
+ preferred_change_puzzle_hash: Optional[bytes32] = None,
275
245
  ) -> list[CoinSpend]:
276
246
  """
277
247
  Generates a unsigned transaction in form of List(Puzzle, Solutions)
@@ -338,15 +308,22 @@ class Wallet:
338
308
  ]
339
309
 
340
310
  if change > 0:
341
- if action_scope.config.tx_config.reuse_puzhash:
342
- change_puzzle_hash: bytes32 = coin.puzzle_hash
343
- for primary in primaries:
344
- if change_puzzle_hash == primary.puzzle_hash and change == primary.amount:
345
- # We cannot create two coins has same id, create a new puzhash for the change:
346
- change_puzzle_hash = await self.get_new_puzzlehash()
347
- break
348
- else:
349
- change_puzzle_hash = await self.get_new_puzzlehash()
311
+ change_puzzle_hash = (
312
+ preferred_change_puzzle_hash
313
+ if preferred_change_puzzle_hash is not None
314
+ else await action_scope.get_puzzle_hash(self.wallet_state_manager)
315
+ )
316
+ for primary in primaries:
317
+ if change_puzzle_hash == primary.puzzle_hash and change == primary.amount:
318
+ if preferred_change_puzzle_hash is not None:
319
+ raise ValueError(
320
+ "A `preferred_change_puzzle_hash` was specified that would make a duplicate output"
321
+ )
322
+ # We cannot create two coins has same id, create a new puzhash for the change:
323
+ change_puzzle_hash = await action_scope.get_puzzle_hash(
324
+ self.wallet_state_manager, override_reuse_puzhash_with=False
325
+ )
326
+ break
350
327
  primaries.append(CreateCoin(change_puzzle_hash, uint64(change)))
351
328
  message_list: list[bytes32] = [c.name() for c in coins]
352
329
  for primary in primaries:
@@ -355,7 +332,7 @@ class Wallet:
355
332
  puzzle: Program = await self.puzzle_for_puzzle_hash(coin.puzzle_hash)
356
333
  solution: Program = self.make_solution(
357
334
  primaries=primaries,
358
- fee=fee,
335
+ fee=fee if reserve_fee is None else reserve_fee,
359
336
  conditions=(*extra_conditions, CreateCoinAnnouncement(message)),
360
337
  )
361
338
  solution = decorator_manager.solve(inner_puzzle, target_primaries, solution)
@@ -416,6 +393,8 @@ class Wallet:
416
393
  origin_id: Optional[bytes32] = kwargs.get("origin_id", None)
417
394
  negative_change_allowed: bool = kwargs.get("negative_change_allowed", False)
418
395
  puzzle_decorator_override: Optional[list[dict[str, Any]]] = kwargs.get("puzzle_decorator_override", None)
396
+ reserve_fee: Optional[uint64] = kwargs.get("reserve_fee", None)
397
+ preferred_change_puzzle_hash: Optional[bytes32] = kwargs.get("preferred_change_puzzle_hash", None)
419
398
  """
420
399
  Use this to generate transaction.
421
400
  Note: this must be called under a wallet state manager lock
@@ -435,6 +414,8 @@ class Wallet:
435
414
  negative_change_allowed,
436
415
  puzzle_decorator_override=puzzle_decorator_override,
437
416
  extra_conditions=extra_conditions,
417
+ reserve_fee=reserve_fee,
418
+ preferred_change_puzzle_hash=preferred_change_puzzle_hash,
438
419
  )
439
420
  assert len(transaction) > 0
440
421
  spend_bundle = WalletSpendBundle(transaction, G2Element())
@@ -477,16 +458,22 @@ class Wallet:
477
458
  self,
478
459
  fee: uint64,
479
460
  action_scope: WalletActionScope,
461
+ coins: Optional[set[Coin]] = None,
480
462
  extra_conditions: tuple[Condition, ...] = tuple(),
463
+ reserve_fee: Optional[uint64] = None,
464
+ preferred_change_puzzle_hash: Optional[bytes32] = None,
481
465
  ) -> None:
482
- chia_coins = await self.select_coins(fee, action_scope)
466
+ if coins is None:
467
+ coins = await self.select_coins(fee, action_scope)
483
468
  await self.generate_signed_transaction(
484
469
  [],
485
470
  [],
486
471
  action_scope,
487
472
  fee=fee,
488
- coins=chia_coins,
473
+ coins=coins,
489
474
  extra_conditions=extra_conditions,
475
+ reserve_fee=reserve_fee,
476
+ preferred_change_puzzle_hash=preferred_change_puzzle_hash,
490
477
  )
491
478
 
492
479
  async def get_coins_to_offer(
@@ -522,6 +509,9 @@ class Wallet:
522
509
  return True
523
510
  return False
524
511
 
512
+ def hardened_pubkey_for_path(self, path: list[int]) -> G1Element:
513
+ return _derive_path(self.wallet_state_manager.get_master_private_key(), path).get_g1()
514
+
525
515
  async def sum_hint_for_pubkey(self, pk: bytes) -> Optional[SumHint]:
526
516
  pk_parsed: G1Element = G1Element.from_bytes(pk)
527
517
  dr: Optional[DerivationRecord] = await self.wallet_state_manager.puzzle_store.record_for_puzzle_hash(
@@ -3,16 +3,22 @@ from __future__ import annotations
3
3
  import contextlib
4
4
  from collections.abc import AsyncIterator
5
5
  from dataclasses import dataclass, field, replace
6
- from typing import TYPE_CHECKING, Optional, cast, final
6
+ from typing import TYPE_CHECKING, Callable, Optional, cast, final
7
+
8
+ from chia_rs.chia_rs import G1Element
9
+ from chia_rs.sized_bytes import bytes32
7
10
 
8
11
  from chia.data_layer.singleton_record import SingletonRecord
9
12
  from chia.types.blockchain_format.coin import Coin
13
+ from chia.types.blockchain_format.program import Program
10
14
  from chia.util.action_scope import ActionScope
11
15
  from chia.util.streamable import Streamable, streamable
16
+ from chia.wallet.derivation_record import DerivationRecord
12
17
  from chia.wallet.signer_protocol import SigningResponse
13
18
  from chia.wallet.transaction_record import TransactionRecord
14
19
  from chia.wallet.util.tx_config import TXConfig
15
20
  from chia.wallet.wallet_spend_bundle import WalletSpendBundle
21
+ from chia.wallet.wsm_apis import GetUnusedDerivationRecordResult, StreambleGetUnusedDerivationRecordResult
16
22
 
17
23
  if TYPE_CHECKING:
18
24
  # Avoid a circular import here
@@ -27,6 +33,7 @@ class _StreamableWalletSideEffects(Streamable):
27
33
  extra_spends: list[WalletSpendBundle]
28
34
  selected_coins: list[Coin]
29
35
  singleton_records: list[SingletonRecord]
36
+ get_unused_derivation_record_result: Optional[StreambleGetUnusedDerivationRecordResult]
30
37
 
31
38
 
32
39
  @dataclass
@@ -36,6 +43,7 @@ class WalletSideEffects:
36
43
  extra_spends: list[WalletSpendBundle] = field(default_factory=list)
37
44
  selected_coins: list[Coin] = field(default_factory=list)
38
45
  singleton_records: list[SingletonRecord] = field(default_factory=list)
46
+ get_unused_derivation_record_result: Optional[StreambleGetUnusedDerivationRecordResult] = None
39
47
 
40
48
  def __bytes__(self) -> bytes:
41
49
  return bytes(_StreamableWalletSideEffects(**self.__dict__))
@@ -54,6 +62,7 @@ class WalletActionConfig:
54
62
  additional_signing_responses: list[SigningResponse]
55
63
  extra_spends: list[WalletSpendBundle]
56
64
  tx_config: TXConfig
65
+ puzzle_for_pk: Callable[[G1Element], Program]
57
66
 
58
67
  def adjust_for_side_effects(self, side_effects: WalletSideEffects) -> WalletActionConfig:
59
68
  return replace(
@@ -65,7 +74,59 @@ class WalletActionConfig:
65
74
  )
66
75
 
67
76
 
68
- WalletActionScope = ActionScope[WalletSideEffects, WalletActionConfig]
77
+ class WalletActionScope(ActionScope[WalletSideEffects, WalletActionConfig]):
78
+ async def _get_unused_derivation_path(
79
+ self, wallet_state_manager: WalletStateManager
80
+ ) -> GetUnusedDerivationRecordResult:
81
+ async with self.use() as interface:
82
+ result = await wallet_state_manager._get_unused_derivation_record(
83
+ wallet_state_manager.main_wallet.id(),
84
+ previous_result=interface.side_effects.get_unused_derivation_record_result.to_standard()
85
+ if interface.side_effects.get_unused_derivation_record_result is not None
86
+ else None,
87
+ )
88
+ interface.side_effects.get_unused_derivation_record_result = (
89
+ StreambleGetUnusedDerivationRecordResult.from_standard(result)
90
+ )
91
+ return result
92
+
93
+ async def _get_new_puzzle(self, wallet_state_manager: WalletStateManager) -> Program:
94
+ puzzle = self.config.puzzle_for_pk((await self._get_unused_derivation_path(wallet_state_manager)).record.pubkey)
95
+ return puzzle
96
+
97
+ async def _get_new_puzzle_hash(self, wallet_state_manager: WalletStateManager) -> bytes32:
98
+ return (await self._get_unused_derivation_path(wallet_state_manager)).record.puzzle_hash
99
+
100
+ async def get_puzzle(
101
+ self, wallet_state_manager: WalletStateManager, override_reuse_puzhash_with: Optional[bool] = None
102
+ ) -> Program:
103
+ if (
104
+ self.config.tx_config.reuse_puzhash or override_reuse_puzhash_with is True
105
+ ) and override_reuse_puzhash_with is not False:
106
+ record: Optional[DerivationRecord] = await wallet_state_manager.get_current_derivation_record_for_wallet(
107
+ wallet_state_manager.main_wallet.id()
108
+ )
109
+ if record is None:
110
+ return await self._get_new_puzzle(wallet_state_manager) # pragma: no cover
111
+ puzzle = self.config.puzzle_for_pk(record.pubkey)
112
+ return puzzle
113
+ else:
114
+ return await self._get_new_puzzle(wallet_state_manager)
115
+
116
+ async def get_puzzle_hash(
117
+ self, wallet_state_manager: WalletStateManager, override_reuse_puzhash_with: Optional[bool] = None
118
+ ) -> bytes32:
119
+ if (
120
+ self.config.tx_config.reuse_puzhash or override_reuse_puzhash_with is True
121
+ ) and override_reuse_puzhash_with is not False:
122
+ record: Optional[DerivationRecord] = await wallet_state_manager.get_current_derivation_record_for_wallet(
123
+ wallet_state_manager.main_wallet.id()
124
+ )
125
+ if record is None:
126
+ return await self._get_new_puzzle_hash(wallet_state_manager) # pragma: no cover
127
+ return record.puzzle_hash
128
+ else:
129
+ return await self._get_new_puzzle_hash(wallet_state_manager)
69
130
 
70
131
 
71
132
  @contextlib.asynccontextmanager
@@ -77,10 +138,16 @@ async def new_wallet_action_scope(
77
138
  sign: Optional[bool] = None,
78
139
  additional_signing_responses: list[SigningResponse] = [],
79
140
  extra_spends: list[WalletSpendBundle] = [],
141
+ puzzle_for_pk: Optional[Callable[[G1Element], Program]] = None,
80
142
  ) -> AsyncIterator[WalletActionScope]:
81
- async with ActionScope.new_scope(
143
+ if puzzle_for_pk is None:
144
+ puzzle_for_pk = wallet_state_manager.main_wallet.puzzle_for_pk
145
+ assert puzzle_for_pk is not None
146
+ async with WalletActionScope.new_scope(
82
147
  WalletSideEffects,
83
- WalletActionConfig(push, merge_spends, sign, additional_signing_responses, extra_spends, tx_config),
148
+ WalletActionConfig(
149
+ push, merge_spends, sign, additional_signing_responses, extra_spends, tx_config, puzzle_for_pk
150
+ ),
84
151
  ) as self:
85
152
  self = cast(WalletActionScope, self)
86
153
  async with self.use() as interface:
@@ -98,3 +165,5 @@ async def new_wallet_action_scope(
98
165
  extra_spends=self.side_effects.extra_spends,
99
166
  singleton_records=self.side_effects.singleton_records,
100
167
  )
168
+ if push and self.side_effects.get_unused_derivation_record_result is not None:
169
+ await self.side_effects.get_unused_derivation_record_result.to_standard().commit(wallet_state_manager)
@@ -3,16 +3,14 @@ from __future__ import annotations
3
3
  import logging
4
4
  from typing import TYPE_CHECKING, ClassVar, Optional, cast
5
5
 
6
- from chia_rs import ConsensusConstants
6
+ from chia_rs import BlockRecord, ConsensusConstants, HeaderBlock
7
7
  from chia_rs.sized_bytes import bytes32
8
8
  from chia_rs.sized_ints import uint32, uint64
9
9
 
10
10
  from chia.consensus.block_header_validation import validate_finished_header_block
11
- from chia.consensus.block_record import BlockRecord
12
11
  from chia.consensus.blockchain import AddBlockResult
13
12
  from chia.consensus.find_fork_point import find_fork_point_in_chain
14
13
  from chia.consensus.full_block_to_block_record import block_to_block_record
15
- from chia.types.header_block import HeaderBlock
16
14
  from chia.types.validation_state import ValidationState
17
15
  from chia.types.weight_proof import WeightProof
18
16
  from chia.util.errors import Err
@@ -2,10 +2,10 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Optional
4
4
 
5
+ from chia_rs import CoinState
5
6
  from chia_rs.sized_bytes import bytes32
6
7
  from chia_rs.sized_ints import uint32
7
8
 
8
- from chia.protocols.wallet_protocol import CoinState
9
9
  from chia.util.db_wrapper import DBWrapper2
10
10
 
11
11
 
@@ -3,10 +3,11 @@ from __future__ import annotations
3
3
  import json
4
4
  import logging
5
5
  from sqlite3 import Row
6
- from typing import Optional, TypeVar, Union
6
+ from typing import Optional, Union
7
7
 
8
8
  from chia_rs.sized_bytes import bytes32
9
9
  from chia_rs.sized_ints import uint32
10
+ from typing_extensions import Self
10
11
 
11
12
  from chia.types.blockchain_format.coin import Coin
12
13
  from chia.types.blockchain_format.program import Program
@@ -15,7 +16,6 @@ from chia.wallet.lineage_proof import LineageProof
15
16
  from chia.wallet.nft_wallet.nft_info import DEFAULT_STATUS, IN_TRANSACTION_STATUS, NFTCoinInfo
16
17
 
17
18
  log = logging.getLogger(__name__)
18
- _T_WalletNftStore = TypeVar("_T_WalletNftStore", bound="WalletNftStore")
19
19
  REMOVE_BUFF_BLOCKS = 1000
20
20
  NFT_COIN_INFO_COLUMNS = "nft_id, coin, lineage_proof, mint_height, status, full_puzzle, latest_height, minter_did"
21
21
 
@@ -42,7 +42,7 @@ class WalletNftStore:
42
42
  db_wrapper: DBWrapper2
43
43
 
44
44
  @classmethod
45
- async def create(cls: type[_T_WalletNftStore], db_wrapper: DBWrapper2) -> _T_WalletNftStore:
45
+ async def create(cls, db_wrapper: DBWrapper2) -> Self:
46
46
  self = cls()
47
47
  self.db_wrapper = db_wrapper
48
48
  async with self.db_wrapper.writer_maybe_transaction() as conn:
@@ -14,7 +14,7 @@ from pathlib import Path
14
14
  from typing import TYPE_CHECKING, Any, ClassVar, Literal, Optional, Union, cast, overload
15
15
 
16
16
  import aiosqlite
17
- from chia_rs import AugSchemeMPL, ConsensusConstants, G1Element, G2Element, PrivateKey
17
+ from chia_rs import AugSchemeMPL, CoinState, ConsensusConstants, G1Element, G2Element, HeaderBlock, PrivateKey
18
18
  from chia_rs.sized_bytes import bytes32
19
19
  from chia_rs.sized_ints import uint16, uint32, uint64, uint128
20
20
  from packaging.version import Version
@@ -23,9 +23,9 @@ from chia.consensus.blockchain import AddBlockResult
23
23
  from chia.daemon.keychain_proxy import KeychainProxy, connect_to_keychain_and_validate, wrap_local_keychain
24
24
  from chia.full_node.full_node_api import FullNodeAPI
25
25
  from chia.protocols.full_node_protocol import RequestProofOfWeight, RespondProofOfWeight
26
+ from chia.protocols.outbound_message import Message, NodeType, make_msg
26
27
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
27
28
  from chia.protocols.wallet_protocol import (
28
- CoinState,
29
29
  CoinStateUpdate,
30
30
  NewPeakWallet,
31
31
  RegisterForCoinUpdates,
@@ -38,11 +38,9 @@ from chia.protocols.wallet_protocol import (
38
38
  )
39
39
  from chia.rpc.rpc_server import StateChangedProtocol, default_get_connections
40
40
  from chia.server.node_discovery import WalletPeers
41
- from chia.server.outbound_message import Message, NodeType, make_msg
42
41
  from chia.server.server import ChiaServer
43
42
  from chia.server.ws_connection import WSChiaConnection
44
43
  from chia.types.blockchain_format.coin import Coin
45
- from chia.types.header_block import HeaderBlock
46
44
  from chia.types.mempool_inclusion_status import MempoolInclusionStatus
47
45
  from chia.types.weight_proof import WeightProof
48
46
  from chia.util.batches import to_batches
@@ -202,7 +200,7 @@ class WalletNode:
202
200
  else:
203
201
  self._keychain_proxy = await connect_to_keychain_and_validate(self.root_path, self.log)
204
202
  if not self._keychain_proxy:
205
- raise KeychainProxyConnectionFailure()
203
+ raise KeychainProxyConnectionFailure
206
204
  return self._keychain_proxy
207
205
 
208
206
  def get_cache_for_peer(self, peer: WSChiaConnection) -> PeerRequestCache:
@@ -470,7 +468,8 @@ class WalletNode:
470
468
  async with self.wallet_state_manager.puzzle_store.lock:
471
469
  index = await self.wallet_state_manager.puzzle_store.get_last_derivation_path()
472
470
  if index is None or index < self.wallet_state_manager.initial_num_public_keys - 1:
473
- await self.wallet_state_manager.create_more_puzzle_hashes(from_zero=True)
471
+ result = await self.wallet_state_manager.create_more_puzzle_hashes(from_zero=True)
472
+ await result.commit(self.wallet_state_manager)
474
473
 
475
474
  if self.wallet_peers is None:
476
475
  self.initialize_wallet_peers()
@@ -708,15 +707,16 @@ class WalletNode:
708
707
  testing = self.config.get("testing", False)
709
708
  if self.wallet_peers is None and connect_to_unknown_peers and not testing:
710
709
  self.wallet_peers = WalletPeers(
711
- self.server,
712
- self.config["target_peer_count"],
713
- self.root_path / Path(self.config.get("wallet_peers_file_path", "wallet/db/wallet_peers.dat")),
714
- self.config["introducer_peer"],
715
- self.config.get("dns_servers", ["dns-introducer.chia.net"]),
716
- self.config["peer_connect_interval"],
717
- network_name,
718
- default_port,
719
- self.log,
710
+ server=self.server,
711
+ target_outbound_count=self.config["target_peer_count"],
712
+ peers_file_path=self.root_path
713
+ / Path(self.config.get("wallet_peers_file_path", "wallet/db/wallet_peers.dat")),
714
+ introducer_info=self.config["introducer_peer"],
715
+ dns_servers=self.config.get("dns_servers", ["dns-introducer.chia.net"]),
716
+ peer_connect_interval=self.config["peer_connect_interval"],
717
+ selected_network=network_name,
718
+ default_port=default_port,
719
+ log=self.log,
720
720
  )
721
721
  create_referenced_task(self.wallet_peers.start())
722
722
 
@@ -828,7 +828,8 @@ class WalletNode:
828
828
  min_height_for_subscriptions = fork_height if use_delta_sync else 0
829
829
  already_checked_ph: set[bytes32] = set()
830
830
  while not self._shut_down:
831
- await self.wallet_state_manager.create_more_puzzle_hashes()
831
+ result = await self.wallet_state_manager.create_more_puzzle_hashes()
832
+ await result.commit(self.wallet_state_manager)
832
833
  all_puzzle_hashes = await self.get_puzzle_hashes_to_subscribe()
833
834
  not_checked_puzzle_hashes = set(all_puzzle_hashes) - already_checked_ph
834
835
  if not_checked_puzzle_hashes == set():
@@ -3,9 +3,11 @@ from __future__ import annotations
3
3
  import logging
4
4
  from typing import TYPE_CHECKING, ClassVar, cast
5
5
 
6
+ from chia_rs import RespondToPhUpdates
7
+
6
8
  from chia.protocols import full_node_protocol, introducer_protocol, wallet_protocol
9
+ from chia.protocols.outbound_message import NodeType
7
10
  from chia.server.api_protocol import ApiMetadata
8
- from chia.server.outbound_message import NodeType
9
11
  from chia.server.ws_connection import WSChiaConnection
10
12
  from chia.types.mempool_inclusion_status import MempoolInclusionStatus
11
13
  from chia.util.errors import Err
@@ -37,14 +39,12 @@ class WalletNodeAPI:
37
39
  """
38
40
  The full node has rejected our request for removals.
39
41
  """
40
- pass
41
42
 
42
43
  @metadata.request()
43
44
  async def reject_additions_request(self, response: wallet_protocol.RejectAdditionsRequest):
44
45
  """
45
46
  The full node has rejected our request for additions.
46
47
  """
47
- pass
48
48
 
49
49
  @metadata.request(peer_required=True, execute_task=True)
50
50
  async def new_peak_wallet(self, peak: wallet_protocol.NewPeakWallet, peer: WSChiaConnection):
@@ -81,7 +81,6 @@ class WalletNodeAPI:
81
81
  """
82
82
  The full node has rejected our request for a header.
83
83
  """
84
- pass
85
84
 
86
85
  @metadata.request()
87
86
  async def respond_block_header(self, response: wallet_protocol.RespondBlockHeader):
@@ -187,7 +186,7 @@ class WalletNodeAPI:
187
186
  # subclass, as you might expect it wouldn't be. Maybe we can get the
188
187
  # protocol working right back at the api.request definition.
189
188
  @metadata.request() # type: ignore[type-var]
190
- async def respond_to_ph_updates(self, request: wallet_protocol.RespondToPhUpdates):
189
+ async def respond_to_ph_updates(self, request: RespondToPhUpdates):
191
190
  pass
192
191
 
193
192
  @metadata.request()
@@ -2,9 +2,9 @@ from __future__ import annotations
2
2
 
3
3
  import logging
4
4
 
5
+ from chia_rs import CoinSpend
5
6
  from chia_rs.sized_ints import uint32
6
7
 
7
- from chia.types.coin_spend import CoinSpend
8
8
  from chia.util.db_wrapper import DBWrapper2
9
9
 
10
10
  log = logging.getLogger(__name__)
@@ -102,3 +102,5 @@ class GSTOptionalArgs(TypedDict):
102
102
  origin_id: NotRequired[Optional[bytes32]]
103
103
  negative_change_allowed: NotRequired[bool]
104
104
  puzzle_decorator_override: NotRequired[Optional[list[dict[str, Any]]]]
105
+ reserve_fee: NotRequired[Optional[uint64]]
106
+ preferred_change_puzzle_hash: NotRequired[Optional[bytes32]]
@@ -380,7 +380,7 @@ class WalletPuzzleStore:
380
380
  pass
381
381
  self.last_derivation_index = None
382
382
 
383
- async def get_unused_count(self, wallet_id: uint32) -> int:
383
+ async def get_used_count(self, wallet_id: uint32) -> int:
384
384
  """
385
385
  Returns a count of unused derivation indexes
386
386
  """