chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.5.8rc1__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 (528) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_build_chains.py +2 -4
  6. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  7. chia/_tests/clvm/coin_store.py +4 -7
  8. chia/_tests/clvm/test_clvm_step.py +4 -4
  9. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  10. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  11. chia/_tests/clvm/test_singletons.py +2 -4
  12. chia/_tests/clvm/test_spend_sim.py +2 -2
  13. chia/_tests/cmds/cmd_test_utils.py +27 -45
  14. chia/_tests/cmds/test_cmd_framework.py +6 -6
  15. chia/_tests/cmds/test_daemon.py +3 -3
  16. chia/_tests/cmds/test_show.py +4 -4
  17. chia/_tests/cmds/test_tx_config_args.py +1 -2
  18. chia/_tests/cmds/testing_classes.py +4 -5
  19. chia/_tests/cmds/wallet/test_did.py +24 -27
  20. chia/_tests/cmds/wallet/test_nft.py +12 -10
  21. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  22. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  23. chia/_tests/conftest.py +59 -30
  24. chia/_tests/connection_utils.py +2 -2
  25. chia/_tests/core/cmds/test_beta.py +4 -4
  26. chia/_tests/core/cmds/test_keys.py +2 -3
  27. chia/_tests/core/cmds/test_wallet.py +15 -15
  28. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  29. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  30. chia/_tests/core/daemon/test_daemon.py +11 -11
  31. chia/_tests/core/data_layer/conftest.py +2 -2
  32. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  33. chia/_tests/core/data_layer/test_data_store.py +10 -10
  34. chia/_tests/core/data_layer/util.py +11 -11
  35. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  36. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  37. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  38. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  39. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  40. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  41. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  42. chia/_tests/core/full_node/test_conditions.py +21 -23
  43. chia/_tests/core/full_node/test_full_node.py +225 -62
  44. chia/_tests/core/full_node/test_hint_management.py +2 -4
  45. chia/_tests/core/full_node/test_performance.py +0 -1
  46. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  47. chia/_tests/core/full_node/test_transactions.py +1 -2
  48. chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
  49. chia/_tests/core/mempool/test_mempool.py +29 -37
  50. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  51. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  52. chia/_tests/core/mempool/test_mempool_manager.py +963 -839
  53. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  54. chia/_tests/core/server/serve.py +7 -7
  55. chia/_tests/core/server/test_dos.py +1 -2
  56. chia/_tests/core/server/test_event_loop.py +12 -4
  57. chia/_tests/core/server/test_loop.py +7 -8
  58. chia/_tests/core/server/test_rate_limits.py +9 -8
  59. chia/_tests/core/server/test_server.py +61 -1
  60. chia/_tests/core/services/test_services.py +2 -2
  61. chia/_tests/core/ssl/test_ssl.py +2 -2
  62. chia/_tests/core/test_cost_calculation.py +2 -6
  63. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  64. chia/_tests/core/test_filter.py +0 -1
  65. chia/_tests/core/test_full_node_rpc.py +2 -2
  66. chia/_tests/core/test_merkle_set.py +1 -2
  67. chia/_tests/core/test_seeder.py +4 -4
  68. chia/_tests/core/util/test_config.py +4 -4
  69. chia/_tests/core/util/test_jsonify.py +2 -2
  70. chia/_tests/core/util/test_keychain.py +3 -3
  71. chia/_tests/core/util/test_lockfile.py +2 -1
  72. chia/_tests/core/util/test_log_exceptions.py +1 -2
  73. chia/_tests/core/util/test_streamable.py +17 -17
  74. chia/_tests/db/test_db_wrapper.py +3 -2
  75. chia/_tests/environments/wallet.py +14 -14
  76. chia/_tests/ether.py +4 -3
  77. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  78. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  79. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  80. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  81. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  82. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  83. chia/_tests/harvester/test_harvester_api.py +11 -4
  84. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  85. chia/_tests/plot_sync/test_receiver.py +11 -10
  86. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  87. chia/_tests/plot_sync/util.py +1 -2
  88. chia/_tests/plotting/test_plot_manager.py +7 -6
  89. chia/_tests/plotting/test_prover.py +30 -38
  90. chia/_tests/pools/test_pool_cmdline.py +4 -6
  91. chia/_tests/pools/test_pool_rpc.py +203 -61
  92. chia/_tests/pools/test_pool_wallet.py +3 -3
  93. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  94. chia/_tests/process_junit.py +2 -2
  95. chia/_tests/rpc/test_rpc_client.py +4 -4
  96. chia/_tests/rpc/test_rpc_server.py +3 -3
  97. chia/_tests/simulation/test_simulation.py +12 -25
  98. chia/_tests/solver/test_solver_service.py +13 -4
  99. chia/_tests/testconfig.py +2 -2
  100. chia/_tests/timelord/test_new_peak.py +22 -11
  101. chia/_tests/tools/test_run_block.py +0 -2
  102. chia/_tests/tools/test_virtual_project.py +2 -1
  103. chia/_tests/util/benchmarks.py +1 -0
  104. chia/_tests/util/blockchain.py +38 -36
  105. chia/_tests/util/blockchain_mock.py +11 -11
  106. chia/_tests/util/build_network_protocol_files.py +2 -1
  107. chia/_tests/util/coin_store.py +2 -1
  108. chia/_tests/util/config.py +1 -1
  109. chia/_tests/util/db_connection.py +2 -3
  110. chia/_tests/util/full_sync.py +9 -11
  111. chia/_tests/util/gen_ssl_certs.py +4 -5
  112. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  113. chia/_tests/util/misc.py +24 -24
  114. chia/_tests/util/network_protocol_data.py +20 -3
  115. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  116. chia/_tests/util/protocol_messages_json.py +292 -3
  117. chia/_tests/util/setup_nodes.py +62 -47
  118. chia/_tests/util/spend_sim.py +57 -57
  119. chia/_tests/util/test_async_pool.py +2 -3
  120. chia/_tests/util/test_chia_version.py +1 -3
  121. chia/_tests/util/test_config.py +3 -3
  122. chia/_tests/util/test_full_block_utils.py +6 -3
  123. chia/_tests/util/test_limited_semaphore.py +1 -2
  124. chia/_tests/util/test_misc.py +2 -2
  125. chia/_tests/util/test_network.py +1 -2
  126. chia/_tests/util/test_priority_mutex.py +3 -3
  127. chia/_tests/util/test_recursive_replace.py +5 -6
  128. chia/_tests/util/test_replace_str_to_bytes.py +8 -10
  129. chia/_tests/util/test_testnet_overrides.py +3 -3
  130. chia/_tests/util/time_out_assert.py +2 -2
  131. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  132. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  133. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  134. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  135. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  136. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  137. chia/_tests/wallet/conftest.py +6 -6
  138. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  139. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  140. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  141. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  142. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  145. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  146. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  147. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  148. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  149. chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
  150. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  151. chia/_tests/wallet/test_coin_management.py +2 -2
  152. chia/_tests/wallet/test_conditions.py +45 -51
  153. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  154. chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
  155. chia/_tests/wallet/test_notifications.py +14 -14
  156. chia/_tests/wallet/test_signer_protocol.py +5 -5
  157. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  158. chia/_tests/wallet/test_transaction_store.py +20 -20
  159. chia/_tests/wallet/test_util.py +2 -2
  160. chia/_tests/wallet/test_wallet.py +380 -228
  161. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  162. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  163. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  164. chia/_tests/wallet/test_wallet_node.py +14 -14
  165. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  166. chia/_tests/wallet/test_wallet_utils.py +2 -3
  167. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  168. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  169. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  170. chia/_tests/wallet/wallet_block_tools.py +12 -11
  171. chia/_tests/weight_proof/config.py +1 -0
  172. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  173. chia/apis/__init__.py +21 -0
  174. chia/apis/farmer_stub.py +102 -0
  175. chia/apis/full_node_stub.py +372 -0
  176. chia/apis/harvester_stub.py +57 -0
  177. chia/apis/introducer_stub.py +35 -0
  178. chia/apis/solver_stub.py +30 -0
  179. chia/apis/stub_protocol_registry.py +21 -0
  180. chia/apis/timelord_stub.py +39 -0
  181. chia/apis/wallet_stub.py +161 -0
  182. chia/cmds/beta.py +3 -4
  183. chia/cmds/beta_funcs.py +4 -3
  184. chia/cmds/check_wallet_db.py +4 -4
  185. chia/cmds/chia.py +1 -2
  186. chia/cmds/cmd_classes.py +11 -13
  187. chia/cmds/cmd_helpers.py +11 -11
  188. chia/cmds/cmds_util.py +15 -15
  189. chia/cmds/coin_funcs.py +6 -7
  190. chia/cmds/coins.py +2 -3
  191. chia/cmds/configure.py +1 -2
  192. chia/cmds/data.py +42 -42
  193. chia/cmds/data_funcs.py +81 -81
  194. chia/cmds/db.py +4 -5
  195. chia/cmds/db_backup_func.py +2 -2
  196. chia/cmds/db_upgrade_func.py +3 -3
  197. chia/cmds/db_validate_func.py +2 -2
  198. chia/cmds/dev/data.py +4 -4
  199. chia/cmds/dev/gh.py +5 -5
  200. chia/cmds/dev/installers.py +2 -3
  201. chia/cmds/dev/mempool.py +3 -4
  202. chia/cmds/dev/mempool_funcs.py +4 -4
  203. chia/cmds/dev/sim.py +8 -8
  204. chia/cmds/dump_keyring.py +3 -3
  205. chia/cmds/farm.py +6 -8
  206. chia/cmds/farm_funcs.py +25 -24
  207. chia/cmds/init_funcs.py +4 -4
  208. chia/cmds/keys.py +16 -18
  209. chia/cmds/keys_funcs.py +36 -36
  210. chia/cmds/netspace.py +1 -3
  211. chia/cmds/netspace_funcs.py +1 -2
  212. chia/cmds/options.py +3 -2
  213. chia/cmds/param_types.py +17 -16
  214. chia/cmds/passphrase.py +6 -7
  215. chia/cmds/passphrase_funcs.py +11 -13
  216. chia/cmds/peer.py +1 -3
  217. chia/cmds/peer_funcs.py +3 -3
  218. chia/cmds/plotnft.py +6 -7
  219. chia/cmds/plotnft_funcs.py +37 -26
  220. chia/cmds/rpc.py +3 -3
  221. chia/cmds/show.py +3 -5
  222. chia/cmds/show_funcs.py +9 -9
  223. chia/cmds/sim_funcs.py +25 -26
  224. chia/cmds/solver.py +1 -3
  225. chia/cmds/solver_funcs.py +1 -2
  226. chia/cmds/start_funcs.py +2 -2
  227. chia/cmds/wallet.py +76 -81
  228. chia/cmds/wallet_funcs.py +206 -177
  229. chia/consensus/augmented_chain.py +6 -6
  230. chia/consensus/block_body_validation.py +19 -15
  231. chia/consensus/block_creation.py +25 -21
  232. chia/consensus/block_header_validation.py +27 -13
  233. chia/consensus/block_height_map.py +3 -6
  234. chia/consensus/block_height_map_protocol.py +2 -2
  235. chia/consensus/block_record.py +2 -4
  236. chia/consensus/blockchain.py +58 -40
  237. chia/consensus/blockchain_interface.py +7 -7
  238. chia/consensus/coin_store_protocol.py +5 -6
  239. chia/consensus/condition_tools.py +4 -4
  240. chia/consensus/cost_calculator.py +2 -3
  241. chia/consensus/default_constants.py +16 -13
  242. chia/consensus/deficit.py +1 -3
  243. chia/consensus/difficulty_adjustment.py +3 -5
  244. chia/consensus/find_fork_point.py +2 -4
  245. chia/consensus/full_block_to_block_record.py +11 -13
  246. chia/consensus/generator_tools.py +2 -3
  247. chia/consensus/get_block_challenge.py +42 -26
  248. chia/consensus/get_block_generator.py +2 -3
  249. chia/consensus/make_sub_epoch_summary.py +8 -7
  250. chia/consensus/multiprocess_validation.py +31 -20
  251. chia/consensus/pos_quality.py +6 -23
  252. chia/consensus/pot_iterations.py +17 -44
  253. chia/consensus/signage_point.py +4 -5
  254. chia/consensus/vdf_info_computation.py +2 -4
  255. chia/daemon/client.py +8 -8
  256. chia/daemon/keychain_proxy.py +31 -37
  257. chia/daemon/server.py +32 -33
  258. chia/daemon/windows_signal.py +4 -3
  259. chia/data_layer/data_layer.py +86 -77
  260. chia/data_layer/data_layer_rpc_api.py +9 -9
  261. chia/data_layer/data_layer_rpc_client.py +13 -15
  262. chia/data_layer/data_layer_server.py +3 -3
  263. chia/data_layer/data_layer_util.py +14 -14
  264. chia/data_layer/data_layer_wallet.py +94 -101
  265. chia/data_layer/data_store.py +50 -50
  266. chia/data_layer/dl_wallet_store.py +9 -12
  267. chia/data_layer/download_data.py +8 -9
  268. chia/data_layer/s3_plugin_service.py +5 -9
  269. chia/data_layer/start_data_layer.py +5 -5
  270. chia/farmer/farmer.py +31 -31
  271. chia/farmer/farmer_api.py +45 -33
  272. chia/farmer/farmer_rpc_api.py +5 -4
  273. chia/farmer/farmer_rpc_client.py +6 -6
  274. chia/farmer/start_farmer.py +6 -6
  275. chia/full_node/block_store.py +13 -16
  276. chia/full_node/check_fork_next_block.py +1 -2
  277. chia/full_node/coin_store.py +15 -16
  278. chia/full_node/eligible_coin_spends.py +3 -3
  279. chia/full_node/fee_estimate_store.py +2 -3
  280. chia/full_node/fee_tracker.py +1 -2
  281. chia/full_node/full_block_utils.py +4 -4
  282. chia/full_node/full_node.py +238 -224
  283. chia/full_node/full_node_api.py +193 -150
  284. chia/full_node/full_node_rpc_api.py +53 -31
  285. chia/full_node/full_node_rpc_client.py +18 -19
  286. chia/full_node/full_node_store.py +45 -43
  287. chia/full_node/hint_management.py +2 -2
  288. chia/full_node/mempool.py +17 -19
  289. chia/full_node/mempool_manager.py +89 -42
  290. chia/full_node/pending_tx_cache.py +2 -3
  291. chia/full_node/start_full_node.py +5 -5
  292. chia/full_node/sync_store.py +3 -4
  293. chia/full_node/tx_processing_queue.py +34 -13
  294. chia/full_node/weight_proof.py +61 -48
  295. chia/harvester/harvester.py +25 -24
  296. chia/harvester/harvester_api.py +61 -38
  297. chia/harvester/harvester_rpc_api.py +10 -10
  298. chia/harvester/start_harvester.py +4 -4
  299. chia/introducer/introducer.py +3 -3
  300. chia/introducer/introducer_api.py +6 -4
  301. chia/introducer/start_introducer.py +4 -4
  302. chia/legacy/keyring.py +3 -3
  303. chia/plot_sync/delta.py +1 -2
  304. chia/plot_sync/receiver.py +20 -17
  305. chia/plot_sync/sender.py +15 -10
  306. chia/plotters/bladebit.py +7 -7
  307. chia/plotters/chiapos.py +2 -2
  308. chia/plotters/madmax.py +4 -4
  309. chia/plotters/plotters.py +4 -4
  310. chia/plotters/plotters_util.py +3 -3
  311. chia/plotting/cache.py +20 -14
  312. chia/plotting/check_plots.py +26 -35
  313. chia/plotting/create_plots.py +22 -23
  314. chia/plotting/manager.py +21 -14
  315. chia/plotting/prover.py +59 -42
  316. chia/plotting/util.py +16 -16
  317. chia/pools/pool_config.py +2 -1
  318. chia/pools/pool_puzzles.py +11 -12
  319. chia/pools/pool_wallet.py +34 -57
  320. chia/pools/pool_wallet_info.py +39 -10
  321. chia/protocols/farmer_protocol.py +8 -9
  322. chia/protocols/fee_estimate.py +3 -4
  323. chia/protocols/full_node_protocol.py +3 -4
  324. chia/protocols/harvester_protocol.py +27 -15
  325. chia/protocols/outbound_message.py +3 -3
  326. chia/protocols/pool_protocol.py +8 -9
  327. chia/protocols/shared_protocol.py +1 -2
  328. chia/protocols/solver_protocol.py +9 -2
  329. chia/protocols/timelord_protocol.py +4 -7
  330. chia/protocols/wallet_protocol.py +11 -12
  331. chia/rpc/rpc_client.py +9 -9
  332. chia/rpc/rpc_server.py +17 -17
  333. chia/rpc/util.py +2 -2
  334. chia/seeder/crawler.py +8 -8
  335. chia/seeder/crawler_api.py +21 -27
  336. chia/seeder/crawler_rpc_api.py +2 -2
  337. chia/seeder/dns_server.py +21 -21
  338. chia/seeder/start_crawler.py +4 -4
  339. chia/server/address_manager.py +15 -16
  340. chia/server/api_protocol.py +11 -11
  341. chia/server/chia_policy.py +46 -26
  342. chia/server/introducer_peers.py +2 -3
  343. chia/server/node_discovery.py +19 -19
  344. chia/server/rate_limit_numbers.py +4 -5
  345. chia/server/rate_limits.py +4 -4
  346. chia/server/resolve_peer_info.py +4 -4
  347. chia/server/server.py +49 -52
  348. chia/server/signal_handlers.py +6 -6
  349. chia/server/start_service.py +17 -17
  350. chia/server/upnp.py +4 -6
  351. chia/server/ws_connection.py +52 -37
  352. chia/simulator/add_blocks_in_batches.py +1 -3
  353. chia/simulator/block_tools.py +312 -200
  354. chia/simulator/full_node_simulator.py +56 -35
  355. chia/simulator/keyring.py +2 -3
  356. chia/simulator/setup_services.py +15 -15
  357. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  358. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  359. chia/simulator/simulator_protocol.py +1 -2
  360. chia/simulator/simulator_test_tools.py +3 -3
  361. chia/simulator/start_simulator.py +7 -7
  362. chia/simulator/wallet_tools.py +10 -10
  363. chia/solver/solver.py +10 -10
  364. chia/solver/solver_api.py +10 -8
  365. chia/solver/solver_rpc_api.py +2 -2
  366. chia/solver/start_solver.py +4 -4
  367. chia/ssl/cacert.pem +148 -90
  368. chia/ssl/chia_ca.crt +14 -10
  369. chia/ssl/chia_ca_old.crt +19 -0
  370. chia/ssl/create_ssl.py +4 -4
  371. chia/ssl/renewedselfsignedca.conf +4 -0
  372. chia/ssl/ssl_check.py +1 -2
  373. chia/timelord/iters_from_block.py +1 -4
  374. chia/timelord/start_timelord.py +4 -4
  375. chia/timelord/timelord.py +44 -40
  376. chia/timelord/timelord_api.py +6 -4
  377. chia/timelord/timelord_launcher.py +2 -2
  378. chia/timelord/timelord_rpc_api.py +2 -2
  379. chia/timelord/timelord_state.py +11 -12
  380. chia/types/block_protocol.py +1 -3
  381. chia/types/blockchain_format/coin.py +1 -3
  382. chia/types/blockchain_format/program.py +11 -8
  383. chia/types/blockchain_format/proof_of_space.py +123 -76
  384. chia/types/blockchain_format/tree_hash.py +3 -3
  385. chia/types/blockchain_format/vdf.py +1 -2
  386. chia/types/coin_spend.py +3 -3
  387. chia/types/mempool_item.py +5 -5
  388. chia/types/mempool_submission_status.py +2 -3
  389. chia/types/peer_info.py +1 -2
  390. chia/types/unfinished_header_block.py +3 -4
  391. chia/types/validation_state.py +1 -2
  392. chia/util/action_scope.py +8 -8
  393. chia/util/async_pool.py +5 -5
  394. chia/util/bech32m.py +1 -2
  395. chia/util/beta_metrics.py +2 -2
  396. chia/util/block_cache.py +4 -4
  397. chia/util/chia_logging.py +2 -2
  398. chia/util/chia_version.py +1 -2
  399. chia/util/config.py +15 -16
  400. chia/util/db_wrapper.py +26 -27
  401. chia/util/default_root.py +1 -2
  402. chia/util/errors.py +3 -3
  403. chia/util/file_keyring.py +14 -14
  404. chia/util/files.py +2 -3
  405. chia/util/hash.py +4 -4
  406. chia/util/initial-config.yaml +3 -5
  407. chia/util/inline_executor.py +2 -1
  408. chia/util/ip_address.py +1 -2
  409. chia/util/keychain.py +25 -27
  410. chia/util/keyring_wrapper.py +18 -19
  411. chia/util/lock.py +3 -4
  412. chia/util/log_exceptions.py +1 -2
  413. chia/util/lru_cache.py +2 -2
  414. chia/util/network.py +6 -6
  415. chia/util/path.py +2 -3
  416. chia/util/priority_mutex.py +2 -2
  417. chia/util/profiler.py +1 -2
  418. chia/util/safe_cancel_task.py +1 -2
  419. chia/util/streamable.py +22 -8
  420. chia/util/task_referencer.py +1 -1
  421. chia/util/timing.py +3 -3
  422. chia/util/virtual_project_analysis.py +6 -5
  423. chia/util/ws_message.py +2 -2
  424. chia/wallet/cat_wallet/cat_info.py +3 -4
  425. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  426. chia/wallet/cat_wallet/cat_utils.py +3 -4
  427. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  428. chia/wallet/cat_wallet/lineage_store.py +3 -4
  429. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  430. chia/wallet/coin_selection.py +9 -10
  431. chia/wallet/conditions.py +120 -105
  432. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  433. chia/wallet/derivation_record.py +1 -2
  434. chia/wallet/derive_keys.py +2 -4
  435. chia/wallet/did_wallet/did_info.py +10 -11
  436. chia/wallet/did_wallet/did_wallet.py +36 -82
  437. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  438. chia/wallet/driver_protocol.py +5 -7
  439. chia/wallet/lineage_proof.py +4 -4
  440. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  441. chia/wallet/nft_wallet/nft_info.py +8 -9
  442. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  443. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  444. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  445. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  446. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  447. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  448. chia/wallet/notification_manager.py +3 -3
  449. chia/wallet/notification_store.py +44 -61
  450. chia/wallet/outer_puzzles.py +6 -7
  451. chia/wallet/puzzle_drivers.py +34 -6
  452. chia/wallet/puzzles/clawback/drivers.py +6 -6
  453. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  454. chia/wallet/puzzles/load_clvm.py +1 -1
  455. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  456. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  457. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  458. chia/wallet/puzzles/tails.py +3 -3
  459. chia/wallet/singleton.py +5 -7
  460. chia/wallet/singleton_record.py +3 -3
  461. chia/wallet/start_wallet.py +5 -5
  462. chia/wallet/trade_manager.py +37 -58
  463. chia/wallet/trade_record.py +4 -4
  464. chia/wallet/trading/offer.py +59 -46
  465. chia/wallet/trading/trade_store.py +8 -9
  466. chia/wallet/transaction_record.py +8 -8
  467. chia/wallet/uncurried_puzzle.py +1 -2
  468. chia/wallet/util/clvm_streamable.py +12 -12
  469. chia/wallet/util/compute_hints.py +4 -5
  470. chia/wallet/util/curry_and_treehash.py +1 -2
  471. chia/wallet/util/merkle_tree.py +2 -3
  472. chia/wallet/util/peer_request_cache.py +8 -8
  473. chia/wallet/util/signing.py +85 -0
  474. chia/wallet/util/tx_config.py +15 -6
  475. chia/wallet/util/wallet_sync_utils.py +14 -16
  476. chia/wallet/util/wallet_types.py +2 -2
  477. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  478. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  479. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  480. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  481. chia/wallet/vc_wallet/vc_store.py +5 -6
  482. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  483. chia/wallet/wallet.py +50 -78
  484. chia/wallet/wallet_action_scope.py +11 -11
  485. chia/wallet/wallet_blockchain.py +12 -12
  486. chia/wallet/wallet_coin_record.py +12 -6
  487. chia/wallet/wallet_coin_store.py +24 -25
  488. chia/wallet/wallet_interested_store.py +3 -5
  489. chia/wallet/wallet_nft_store.py +10 -11
  490. chia/wallet/wallet_node.py +53 -61
  491. chia/wallet/wallet_node_api.py +5 -3
  492. chia/wallet/wallet_protocol.py +23 -23
  493. chia/wallet/wallet_puzzle_store.py +15 -18
  494. chia/wallet/wallet_request_types.py +778 -114
  495. chia/wallet/wallet_retry_store.py +1 -3
  496. chia/wallet/wallet_rpc_api.py +572 -909
  497. chia/wallet/wallet_rpc_client.py +87 -279
  498. chia/wallet/wallet_singleton_store.py +3 -4
  499. chia/wallet/wallet_state_manager.py +332 -106
  500. chia/wallet/wallet_transaction_store.py +11 -14
  501. chia/wallet/wallet_user_store.py +4 -6
  502. chia/wallet/wallet_weight_proof_handler.py +4 -4
  503. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
  504. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
  505. chia/apis.py +0 -21
  506. chia/consensus/check_time_locks.py +0 -57
  507. chia/data_layer/puzzles/__init__.py +0 -0
  508. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  509. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  510. chia/types/coin_record.py +0 -44
  511. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  512. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  513. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  514. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  515. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  516. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  517. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  518. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  520. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  521. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  522. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  524. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  525. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  526. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
  527. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
  528. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
@@ -12,7 +12,7 @@ import time
12
12
  import traceback
13
13
  from collections.abc import AsyncIterator, Awaitable
14
14
  from pathlib import Path
15
- from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union, cast, final
15
+ from typing import TYPE_CHECKING, Any, ClassVar, cast, final
16
16
 
17
17
  import aiohttp
18
18
  from chia_rs.datalayer import ProofOfInclusion, ProofOfInclusionLayer
@@ -61,12 +61,15 @@ from chia.server.ws_connection import WSChiaConnection
61
61
  from chia.util.async_pool import Job, QueuedAsyncPool
62
62
  from chia.util.path import path_from_root
63
63
  from chia.util.task_referencer import create_referenced_task
64
+ from chia.wallet.puzzle_drivers import Solver
64
65
  from chia.wallet.trade_record import TradeRecord
65
66
  from chia.wallet.trading.offer import Offer as TradingOffer
66
67
  from chia.wallet.transaction_record import TransactionRecord
67
68
  from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
68
69
  from chia.wallet.wallet_request_types import (
70
+ CancelOffer,
69
71
  CreateNewDL,
72
+ CreateOfferForIDs,
70
73
  DLDeleteMirror,
71
74
  DLGetMirrors,
72
75
  DLHistory,
@@ -77,8 +80,10 @@ from chia.wallet.wallet_request_types import (
77
80
  DLUpdateMultiple,
78
81
  DLUpdateMultipleUpdates,
79
82
  DLUpdateRoot,
83
+ GetOffer,
80
84
  LauncherRootPair,
81
85
  LogIn,
86
+ TakeOffer,
82
87
  )
83
88
  from chia.wallet.wallet_rpc_client import WalletRpcClient
84
89
 
@@ -129,14 +134,14 @@ class DataLayer:
129
134
  maximum_full_file_count: int
130
135
  server_files_location: Path
131
136
  unsubscribe_data_queue: list[UnsubscribeData]
132
- _server: Optional[ChiaServer] = None
137
+ _server: ChiaServer | None = None
133
138
  none_bytes: bytes32 = bytes32.zeros
134
139
  initialized: bool = False
135
- _data_store: Optional[DataStore] = None
136
- state_changed_callback: Optional[StateChangedProtocol] = None
140
+ _data_store: DataStore | None = None
141
+ state_changed_callback: StateChangedProtocol | None = None
137
142
  _shut_down: bool = False
138
- periodically_manage_data_task: Optional[asyncio.Task[None]] = None
139
- _wallet_rpc: Optional[WalletRpcClient] = None
143
+ periodically_manage_data_task: asyncio.Task[None] | None = None
144
+ _wallet_rpc: WalletRpcClient | None = None
140
145
  subscription_lock: asyncio.Lock = dataclasses.field(default_factory=asyncio.Lock)
141
146
  subscription_update_concurrency: int = 5
142
147
  client_timeout: aiohttp.ClientTimeout = dataclasses.field(
@@ -179,7 +184,7 @@ class DataLayer:
179
184
  wallet_rpc_init: Awaitable[WalletRpcClient],
180
185
  downloaders: list[PluginRemote],
181
186
  uploaders: list[PluginRemote], # dont add FilesystemUploader to this, it is the default uploader
182
- name: Optional[str] = None,
187
+ name: str | None = None,
183
188
  ) -> DataLayer:
184
189
  if name == "":
185
190
  # TODO: If no code depends on "" counting as 'unspecified' then we do not
@@ -225,7 +230,7 @@ class DataLayer:
225
230
 
226
231
  @contextlib.asynccontextmanager
227
232
  async def manage(self) -> AsyncIterator[None]:
228
- sql_log_path: Optional[Path] = None
233
+ sql_log_path: Path | None = None
229
234
  if self.config.get("log_sqlite_cmds", False):
230
235
  sql_log_path = path_from_root(self.root_path, "log/data_sql.log")
231
236
  self.log.info(f"logging SQL commands to {sql_log_path}")
@@ -264,7 +269,7 @@ class DataLayer:
264
269
  async def on_connect(self, connection: WSChiaConnection) -> None:
265
270
  pass
266
271
 
267
- def get_connections(self, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
272
+ def get_connections(self, request_node_type: NodeType | None) -> list[dict[str, Any]]:
268
273
  return default_get_connections(server=self.server, request_node_type=request_node_type)
269
274
 
270
275
  def set_server(self, server: ChiaServer) -> None:
@@ -292,7 +297,7 @@ class DataLayer:
292
297
  changelist: list[dict[str, Any]],
293
298
  fee: uint64,
294
299
  submit_on_chain: bool = True,
295
- ) -> Optional[TransactionRecord]:
300
+ ) -> TransactionRecord | None:
296
301
  status = Status.PENDING if submit_on_chain else Status.PENDING_BATCH
297
302
  await self.batch_insert(store_id=store_id, changelist=changelist, status=status)
298
303
 
@@ -302,7 +307,7 @@ class DataLayer:
302
307
  return None
303
308
 
304
309
  async def _get_publishable_root_hash(self, store_id: bytes32) -> bytes32:
305
- pending_root: Optional[Root] = await self.data_store.get_pending_root(store_id=store_id)
310
+ pending_root: Root | None = await self.data_store.get_pending_root(store_id=store_id)
306
311
  if pending_root is None:
307
312
  raise Exception("Latest root is already confirmed.")
308
313
  if pending_root.status == Status.PENDING_BATCH:
@@ -348,7 +353,7 @@ class DataLayer:
348
353
  ) -> TransactionRecord:
349
354
  await self._update_confirmation_status(store_id=store_id)
350
355
 
351
- pending_root: Optional[Root] = await self.data_store.get_pending_root(store_id=store_id)
356
+ pending_root: Root | None = await self.data_store.get_pending_root(store_id=store_id)
352
357
  if pending_root is None:
353
358
  raise Exception("Latest root is already confirmed.")
354
359
  if pending_root.status == Status.PENDING:
@@ -376,12 +381,12 @@ class DataLayer:
376
381
  store_id: bytes32,
377
382
  changelist: list[dict[str, Any]],
378
383
  status: Status = Status.PENDING,
379
- enable_batch_autoinsert: Optional[bool] = None,
384
+ enable_batch_autoinsert: bool | None = None,
380
385
  ) -> bytes32:
381
386
  await self._update_confirmation_status(store_id=store_id)
382
387
 
383
388
  async with self.data_store.transaction():
384
- pending_root: Optional[Root] = await self.data_store.get_pending_root(store_id=store_id)
389
+ pending_root: Root | None = await self.data_store.get_pending_root(store_id=store_id)
385
390
  if pending_root is not None and pending_root.status == Status.PENDING:
386
391
  raise Exception("Already have a pending root waiting for confirmation.")
387
392
 
@@ -428,7 +433,7 @@ class DataLayer:
428
433
  self,
429
434
  store_id: bytes32,
430
435
  key: bytes,
431
- root_hash: Union[bytes32, Unspecified] = unspecified,
436
+ root_hash: bytes32 | Unspecified = unspecified,
432
437
  ) -> bytes32:
433
438
  await self._update_confirmation_status(store_id=store_id)
434
439
 
@@ -436,9 +441,7 @@ class DataLayer:
436
441
  node = await self.data_store.get_node_by_key(store_id=store_id, key=key, root_hash=root_hash)
437
442
  return node.hash
438
443
 
439
- async def get_value(
440
- self, store_id: bytes32, key: bytes, root_hash: Union[bytes32, Unspecified] = unspecified
441
- ) -> bytes:
444
+ async def get_value(self, store_id: bytes32, key: bytes, root_hash: bytes32 | Unspecified = unspecified) -> bytes:
442
445
  await self._update_confirmation_status(store_id=store_id)
443
446
 
444
447
  async with self.data_store.transaction():
@@ -449,7 +452,7 @@ class DataLayer:
449
452
  async def get_keys_values(
450
453
  self,
451
454
  store_id: bytes32,
452
- root_hash: Union[bytes32, Unspecified],
455
+ root_hash: bytes32 | Unspecified,
453
456
  ) -> list[TerminalNode]:
454
457
  await self._update_confirmation_status(store_id=store_id)
455
458
 
@@ -461,9 +464,9 @@ class DataLayer:
461
464
  async def get_keys_values_paginated(
462
465
  self,
463
466
  store_id: bytes32,
464
- root_hash: Union[bytes32, Unspecified],
467
+ root_hash: bytes32 | Unspecified,
465
468
  page: int,
466
- max_page_size: Optional[int] = None,
469
+ max_page_size: int | None = None,
467
470
  ) -> KeysValuesPaginationData:
468
471
  await self._update_confirmation_status(store_id=store_id)
469
472
 
@@ -472,7 +475,7 @@ class DataLayer:
472
475
  res = await self.data_store.get_keys_values_paginated(store_id, page, max_page_size, root_hash)
473
476
  return res
474
477
 
475
- async def get_keys(self, store_id: bytes32, root_hash: Union[bytes32, Unspecified]) -> list[bytes]:
478
+ async def get_keys(self, store_id: bytes32, root_hash: bytes32 | Unspecified) -> list[bytes]:
476
479
  await self._update_confirmation_status(store_id=store_id)
477
480
 
478
481
  res = await self.data_store.get_keys(store_id, root_hash)
@@ -481,9 +484,9 @@ class DataLayer:
481
484
  async def get_keys_paginated(
482
485
  self,
483
486
  store_id: bytes32,
484
- root_hash: Union[bytes32, Unspecified],
487
+ root_hash: bytes32 | Unspecified,
485
488
  page: int,
486
- max_page_size: Optional[int] = None,
489
+ max_page_size: int | None = None,
487
490
  ) -> KeysPaginationData:
488
491
  await self._update_confirmation_status(store_id=store_id)
489
492
 
@@ -500,13 +503,13 @@ class DataLayer:
500
503
  self.log.error("Failed to get ancestors")
501
504
  return res
502
505
 
503
- async def get_root(self, store_id: bytes32) -> Optional[SingletonRecord]:
506
+ async def get_root(self, store_id: bytes32) -> SingletonRecord | None:
504
507
  latest = (await self.wallet_rpc.dl_latest_singleton(DLLatestSingleton(store_id, True))).singleton
505
508
  if latest is None:
506
509
  self.log.error(f"Failed to get root for {store_id.hex()}")
507
510
  return latest
508
511
 
509
- async def get_local_root(self, store_id: bytes32) -> Optional[bytes32]:
512
+ async def get_local_root(self, store_id: bytes32) -> bytes32 | None:
510
513
  await self._update_confirmation_status(store_id=store_id)
511
514
 
512
515
  res = await self.data_store.get_tree_root(store_id=store_id)
@@ -520,7 +523,7 @@ class DataLayer:
520
523
  if records is None:
521
524
  self.log.error(f"Failed to get root history for {store_id.hex()}")
522
525
  root_history = []
523
- prev: Optional[SingletonRecord] = None
526
+ prev: SingletonRecord | None = None
524
527
  for record in records:
525
528
  if prev is None or record.root != prev.root:
526
529
  root_history.append(record)
@@ -688,7 +691,7 @@ class DataLayer:
688
691
  )
689
692
  self.log.info(f"Successfully written full tree filename {filename_full_tree}.")
690
693
 
691
- async def get_downloader(self, store_id: bytes32, url: str) -> Optional[PluginRemote]:
694
+ async def get_downloader(self, store_id: bytes32, url: str) -> PluginRemote | None:
692
695
  request_json = {"store_id": store_id.hex(), "url": url}
693
696
  for d in self.downloaders:
694
697
  async with aiohttp.ClientSession() as session:
@@ -787,7 +790,7 @@ class DataLayer:
787
790
  publish_generation -= 1
788
791
  root = await self.data_store.get_tree_root(store_id=store_id, generation=publish_generation)
789
792
 
790
- async def add_missing_files(self, store_id: bytes32, overwrite: bool, foldername: Optional[Path]) -> None:
793
+ async def add_missing_files(self, store_id: bytes32, overwrite: bool, foldername: Path | None) -> None:
791
794
  root = await self.data_store.get_tree_root(store_id=store_id)
792
795
  latest_generation = root.generation
793
796
  full_tree_first_publish_generation = max(0, latest_generation - self.maximum_full_file_count + 1)
@@ -937,7 +940,7 @@ class DataLayer:
937
940
  hash_1: bytes32,
938
941
  hash_2: bytes32,
939
942
  page: int,
940
- max_page_size: Optional[int] = None,
943
+ max_page_size: int | None = None,
941
944
  ) -> KVDiffPaginationData:
942
945
  if max_page_size is None:
943
946
  max_page_size = 40 * 1024 * 1024
@@ -1148,34 +1151,38 @@ class DataLayer:
1148
1151
  async with self.data_store.transaction():
1149
1152
  our_store_proofs = await self.process_offered_stores(offer_stores=maker)
1150
1153
 
1151
- offer_dict: dict[Union[uint32, str], int] = {
1152
- **{offer_store.store_id.hex(): -1 for offer_store in maker},
1153
- **{offer_store.store_id.hex(): 1 for offer_store in taker},
1154
+ offer_dict: dict[str, str] = {
1155
+ **{offer_store.store_id.hex(): "-1" for offer_store in maker},
1156
+ **{offer_store.store_id.hex(): "1" for offer_store in taker},
1154
1157
  }
1155
1158
 
1156
- solver: dict[str, Any] = {
1157
- "0x" + our_offer_store.store_id.hex(): {
1158
- "new_root": "0x" + our_store_proofs[our_offer_store.store_id].proofs[0].root().hex(),
1159
- "dependencies": [
1160
- {
1161
- "launcher_id": "0x" + their_offer_store.store_id.hex(),
1162
- "values_to_prove": [
1163
- "0x" + leaf_hash(key=entry.key, value=entry.value).hex()
1164
- for entry in their_offer_store.inclusions
1165
- ],
1166
- }
1167
- for their_offer_store in taker
1168
- ],
1159
+ solver = Solver(
1160
+ {
1161
+ "0x" + our_offer_store.store_id.hex(): {
1162
+ "new_root": "0x" + our_store_proofs[our_offer_store.store_id].proofs[0].root().hex(),
1163
+ "dependencies": [
1164
+ {
1165
+ "launcher_id": "0x" + their_offer_store.store_id.hex(),
1166
+ "values_to_prove": [
1167
+ "0x" + leaf_hash(key=entry.key, value=entry.value).hex()
1168
+ for entry in their_offer_store.inclusions
1169
+ ],
1170
+ }
1171
+ for their_offer_store in taker
1172
+ ],
1173
+ }
1174
+ for our_offer_store in maker
1169
1175
  }
1170
- for our_offer_store in maker
1171
- }
1176
+ )
1172
1177
 
1173
1178
  res = await self.wallet_rpc.create_offer_for_ids(
1174
- offer_dict=offer_dict,
1175
- solver=solver,
1176
- driver_dict={},
1177
- fee=fee,
1178
- validate_only=False,
1179
+ CreateOfferForIDs(
1180
+ offer=offer_dict,
1181
+ solver=solver,
1182
+ driver_dict={},
1183
+ fee=fee,
1184
+ validate_only=False,
1185
+ ),
1179
1186
  # TODO: probably shouldn't be default but due to peculiarities in the RPC, we're using a stop gap.
1180
1187
  # This is not a change in behavior, the default was already implicit.
1181
1188
  tx_config=DEFAULT_TX_CONFIG,
@@ -1235,22 +1242,26 @@ class DataLayer:
1235
1242
  )
1236
1243
  )
1237
1244
 
1238
- solver: dict[str, Any] = {
1239
- "proofs_of_inclusion": proofs_of_inclusion,
1240
- **{
1241
- "0x" + our_offer_store.store_id.hex(): {
1242
- "new_root": "0x" + root.hex(),
1243
- "dependencies": [
1244
- {
1245
- "launcher_id": "0x" + their_offer_store.store_id.hex(),
1246
- "values_to_prove": ["0x" + entry.node_hash.hex() for entry in their_offer_store.proofs],
1247
- }
1248
- for their_offer_store in maker
1249
- ],
1250
- }
1251
- for our_offer_store in taker
1252
- },
1253
- }
1245
+ solver = Solver(
1246
+ {
1247
+ "proofs_of_inclusion": proofs_of_inclusion,
1248
+ **{
1249
+ "0x" + our_offer_store.store_id.hex(): {
1250
+ "new_root": "0x" + root.hex(),
1251
+ "dependencies": [
1252
+ {
1253
+ "launcher_id": "0x" + their_offer_store.store_id.hex(),
1254
+ "values_to_prove": [
1255
+ "0x" + entry.node_hash.hex() for entry in their_offer_store.proofs
1256
+ ],
1257
+ }
1258
+ for their_offer_store in maker
1259
+ ],
1260
+ }
1261
+ for our_offer_store in taker
1262
+ },
1263
+ }
1264
+ )
1254
1265
 
1255
1266
  # Excluding wallet from transaction since failures in the wallet may occur
1256
1267
  # after the transaction is submitted to the chain. If we roll back data we
@@ -1258,9 +1269,7 @@ class DataLayer:
1258
1269
 
1259
1270
  trade_record = (
1260
1271
  await self.wallet_rpc.take_offer(
1261
- offer=offer,
1262
- solver=solver,
1263
- fee=fee,
1272
+ TakeOffer(offer=offer.to_bech32(), solver=solver, fee=fee, push=True),
1264
1273
  # TODO: probably shouldn't be default but due to peculiarities in the RPC, we're using a stop gap.
1265
1274
  # This is not a change in behavior, the default was already implicit.
1266
1275
  tx_config=DEFAULT_TX_CONFIG,
@@ -1273,15 +1282,15 @@ class DataLayer:
1273
1282
  store_ids: list[bytes32] = []
1274
1283
 
1275
1284
  if not secure:
1276
- trade_record = await self.wallet_rpc.get_offer(trade_id=trade_id, file_contents=True)
1285
+ trade_record = (
1286
+ await self.wallet_rpc.get_offer(GetOffer(trade_id=trade_id, file_contents=True))
1287
+ ).trade_record
1277
1288
  trading_offer = TradingOffer.from_bytes(trade_record.offer)
1278
1289
  summary = await DataLayerWallet.get_offer_summary(offer=trading_offer)
1279
- store_ids = [bytes32.from_hexstr(offered["launcher_id"]) for offered in summary["offered"]]
1290
+ store_ids = [offered.launcher_id for offered in summary.offered]
1280
1291
 
1281
1292
  await self.wallet_rpc.cancel_offer(
1282
- trade_id=trade_id,
1283
- secure=secure,
1284
- fee=fee,
1293
+ CancelOffer(trade_id=trade_id, secure=secure, fee=fee, push=True),
1285
1294
  # TODO: probably shouldn't be default but due to peculiarities in the RPC, we're using a stop gap.
1286
1295
  # This is not a change in behavior, the default was already implicit.
1287
1296
  tx_config=DEFAULT_TX_CONFIG,
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
4
  from pathlib import Path
5
- from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union, cast
5
+ from typing import TYPE_CHECKING, Any, ClassVar, cast
6
6
 
7
7
  from chia_rs.sized_bytes import bytes32
8
8
  from chia_rs.sized_ints import uint8, uint64
@@ -137,7 +137,7 @@ class DataLayerRpcApi:
137
137
  "/verify_proof": self.verify_proof,
138
138
  }
139
139
 
140
- async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]]) -> list[WsRpcMessage]:
140
+ async def _state_changed(self, change: str, change_data: dict[str, Any] | None) -> list[WsRpcMessage]:
141
141
  return []
142
142
 
143
143
  async def wallet_log_in(self, request: dict[str, Any]) -> EndpointResult:
@@ -168,8 +168,8 @@ class DataLayerRpcApi:
168
168
  store_id = bytes32.from_hexstr(request["id"])
169
169
  key = hexstr_to_bytes(request["key"])
170
170
  # NOTE: being outside the rpc, this retains the none-means-unspecified semantics
171
- root_hash: Optional[str] = request.get("root_hash")
172
- resolved_root_hash: Union[bytes32, Unspecified]
171
+ root_hash: str | None = request.get("root_hash")
172
+ resolved_root_hash: bytes32 | Unspecified
173
173
  if root_hash is not None:
174
174
  resolved_root_hash = bytes32.from_hexstr(root_hash)
175
175
  else:
@@ -185,10 +185,10 @@ class DataLayerRpcApi:
185
185
  async def get_keys(self, request: dict[str, Any]) -> EndpointResult:
186
186
  store_id = bytes32.from_hexstr(request["id"])
187
187
  # NOTE: being outside the rpc, this retains the none-means-unspecified semantics
188
- root_hash: Optional[str] = request.get("root_hash")
188
+ root_hash: str | None = request.get("root_hash")
189
189
  page = request.get("page", None)
190
190
  max_page_size = request.get("max_page_size", None)
191
- resolved_root_hash: Union[bytes32, Unspecified]
191
+ resolved_root_hash: bytes32 | Unspecified
192
192
  if root_hash is not None:
193
193
  resolved_root_hash = bytes32.from_hexstr(root_hash)
194
194
  else:
@@ -222,10 +222,10 @@ class DataLayerRpcApi:
222
222
  async def get_keys_values(self, request: dict[str, Any]) -> EndpointResult:
223
223
  store_id = bytes32.from_hexstr(request["id"])
224
224
  # NOTE: being outside the rpc, this retains the none-means-unspecified semantics
225
- root_hash: Optional[str] = request.get("root_hash")
225
+ root_hash: str | None = request.get("root_hash")
226
226
  page = request.get("page", None)
227
227
  max_page_size = request.get("max_page_size", None)
228
- resolved_root_hash: Union[bytes32, Unspecified]
228
+ resolved_root_hash: bytes32 | Unspecified
229
229
  if root_hash is not None:
230
230
  resolved_root_hash = bytes32.from_hexstr(root_hash)
231
231
  else:
@@ -445,7 +445,7 @@ class DataLayerRpcApi:
445
445
  subscriptions: list[Subscription] = await self.service.get_subscriptions()
446
446
  ids_bytes = [subscription.store_id for subscription in subscriptions]
447
447
  overwrite = request.get("overwrite", False)
448
- foldername: Optional[Path] = None
448
+ foldername: Path | None = None
449
449
  if "foldername" in request:
450
450
  foldername = Path(request["foldername"])
451
451
  for store_id in ids_bytes:
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from pathlib import Path
4
- from typing import Any, Optional
4
+ from typing import Any
5
5
 
6
6
  from chia_rs.sized_bytes import bytes32
7
7
  from chia_rs.sized_ints import uint64
@@ -11,7 +11,7 @@ from chia.rpc.rpc_client import RpcClient
11
11
 
12
12
 
13
13
  class DataLayerRpcClient(RpcClient):
14
- async def create_data_store(self, fee: Optional[uint64], verbose: bool) -> dict[str, Any]:
14
+ async def create_data_store(self, fee: uint64 | None, verbose: bool) -> dict[str, Any]:
15
15
  response = await self.fetch("create_data_store", {"fee": fee, "verbose": verbose})
16
16
  return response
17
17
 
@@ -20,7 +20,7 @@ class DataLayerRpcClient(RpcClient):
20
20
  response = await self.fetch("wallet_log_in", request)
21
21
  return response
22
22
 
23
- async def get_value(self, store_id: bytes32, key: bytes, root_hash: Optional[bytes32]) -> dict[str, Any]:
23
+ async def get_value(self, store_id: bytes32, key: bytes, root_hash: bytes32 | None) -> dict[str, Any]:
24
24
  request: dict[str, Any] = {"id": store_id.hex(), "key": key.hex()}
25
25
  if root_hash is not None:
26
26
  request["root_hash"] = root_hash.hex()
@@ -28,7 +28,7 @@ class DataLayerRpcClient(RpcClient):
28
28
  return response
29
29
 
30
30
  async def update_data_store(
31
- self, store_id: bytes32, changelist: list[dict[str, str]], fee: Optional[uint64], submit_on_chain: bool = True
31
+ self, store_id: bytes32, changelist: list[dict[str, str]], fee: uint64 | None, submit_on_chain: bool = True
32
32
  ) -> dict[str, Any]:
33
33
  response = await self.fetch(
34
34
  "batch_update",
@@ -42,7 +42,7 @@ class DataLayerRpcClient(RpcClient):
42
42
  return response
43
43
 
44
44
  async def update_multiple_stores(
45
- self, store_updates: list[dict[str, Any]], fee: Optional[uint64], submit_on_chain: bool = True
45
+ self, store_updates: list[dict[str, Any]], fee: uint64 | None, submit_on_chain: bool = True
46
46
  ) -> dict[str, Any]:
47
47
  response = await self.fetch(
48
48
  "multistore_batch_update",
@@ -54,16 +54,16 @@ class DataLayerRpcClient(RpcClient):
54
54
  )
55
55
  return response
56
56
 
57
- async def submit_pending_root(self, store_id: bytes32, fee: Optional[uint64]) -> dict[str, Any]:
57
+ async def submit_pending_root(self, store_id: bytes32, fee: uint64 | None) -> dict[str, Any]:
58
58
  response = await self.fetch("submit_pending_root", {"id": store_id.hex(), "fee": fee})
59
59
  return response
60
60
 
61
- async def submit_all_pending_roots(self, fee: Optional[uint64]) -> dict[str, Any]:
61
+ async def submit_all_pending_roots(self, fee: uint64 | None) -> dict[str, Any]:
62
62
  response = await self.fetch("submit_all_pending_roots", {"fee": fee})
63
63
  return response
64
64
 
65
65
  async def get_keys_values(
66
- self, store_id: bytes32, root_hash: Optional[bytes32], page: Optional[int], max_page_size: Optional[int]
66
+ self, store_id: bytes32, root_hash: bytes32 | None, page: int | None, max_page_size: int | None
67
67
  ) -> dict[str, Any]:
68
68
  request: dict[str, Any] = {"id": store_id.hex()}
69
69
  if root_hash is not None:
@@ -76,7 +76,7 @@ class DataLayerRpcClient(RpcClient):
76
76
  return response
77
77
 
78
78
  async def get_keys(
79
- self, store_id: bytes32, root_hash: Optional[bytes32], page: Optional[int], max_page_size: Optional[int]
79
+ self, store_id: bytes32, root_hash: bytes32 | None, page: int | None, max_page_size: int | None
80
80
  ) -> dict[str, Any]:
81
81
  request: dict[str, Any] = {"id": store_id.hex()}
82
82
  if root_hash is not None:
@@ -117,7 +117,7 @@ class DataLayerRpcClient(RpcClient):
117
117
  return response
118
118
 
119
119
  async def add_missing_files(
120
- self, store_ids: Optional[list[bytes32]], overwrite: Optional[bool], foldername: Optional[Path]
120
+ self, store_ids: list[bytes32] | None, overwrite: bool | None, foldername: Path | None
121
121
  ) -> dict[str, Any]:
122
122
  request: dict[str, Any] = {}
123
123
  if store_ids is not None:
@@ -130,7 +130,7 @@ class DataLayerRpcClient(RpcClient):
130
130
  return response
131
131
 
132
132
  async def get_kv_diff(
133
- self, store_id: bytes32, hash_1: bytes32, hash_2: bytes32, page: Optional[int], max_page_size: Optional[int]
133
+ self, store_id: bytes32, hash_1: bytes32, hash_2: bytes32, page: int | None, max_page_size: int | None
134
134
  ) -> dict[str, Any]:
135
135
  request: dict[str, Any] = {"id": store_id.hex(), "hash_1": hash_1.hex(), "hash_2": hash_2.hex()}
136
136
  if page is not None:
@@ -144,13 +144,11 @@ class DataLayerRpcClient(RpcClient):
144
144
  response = await self.fetch("get_root_history", {"id": store_id.hex()})
145
145
  return response
146
146
 
147
- async def add_mirror(
148
- self, store_id: bytes32, urls: list[str], amount: int, fee: Optional[uint64]
149
- ) -> dict[str, Any]:
147
+ async def add_mirror(self, store_id: bytes32, urls: list[str], amount: int, fee: uint64 | None) -> dict[str, Any]:
150
148
  response = await self.fetch("add_mirror", {"id": store_id.hex(), "urls": urls, "amount": amount, "fee": fee})
151
149
  return response
152
150
 
153
- async def delete_mirror(self, coin_id: bytes32, fee: Optional[uint64]) -> dict[str, Any]:
151
+ async def delete_mirror(self, coin_id: bytes32, fee: uint64 | None) -> dict[str, Any]:
154
152
  response = await self.fetch("delete_mirror", {"coin_id": coin_id.hex(), "fee": fee})
155
153
  return response
156
154
 
@@ -7,7 +7,7 @@ import sys
7
7
  from dataclasses import dataclass, field
8
8
  from pathlib import Path
9
9
  from types import FrameType
10
- from typing import Any, Optional
10
+ from typing import Any
11
11
 
12
12
  import click
13
13
  from aiohttp import web
@@ -38,7 +38,7 @@ class DataLayerServer:
38
38
  config: dict[str, Any]
39
39
  log: logging.Logger
40
40
  shutdown_event: asyncio.Event
41
- webserver: Optional[WebServer] = None
41
+ webserver: WebServer | None = None
42
42
  upnp: UPnP = field(default_factory=UPnP)
43
43
 
44
44
  async def start(self, signal_handlers: SignalHandlers) -> None:
@@ -120,7 +120,7 @@ class DataLayerServer:
120
120
  def _accept_signal(
121
121
  self,
122
122
  signal_: signal.Signals,
123
- stack_frame: Optional[FrameType],
123
+ stack_frame: FrameType | None,
124
124
  loop: asyncio.AbstractEventLoop,
125
125
  ) -> None:
126
126
  self.log.info("Received signal %s (%s), shutting down.", signal_.name, signal_.value)