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
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Union
5
4
 
6
5
  from chia_rs import G1Element
7
6
  from chia_rs.sized_bytes import bytes32
@@ -20,7 +19,7 @@ class DerivationRecord:
20
19
 
21
20
  index: uint32
22
21
  puzzle_hash: bytes32
23
- _pubkey: Union[G1Element, bytes]
22
+ _pubkey: G1Element | bytes
24
23
  wallet_type: WalletType
25
24
  wallet_id: uint32
26
25
  hardened: bool
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  from chia_rs import AugSchemeMPL, G1Element, PrivateKey
6
4
  from chia_rs.sized_bytes import bytes32
7
5
  from chia_rs.sized_ints import uint32
@@ -95,7 +93,7 @@ def master_sk_to_pooling_authentication_sk(master: PrivateKey, pool_wallet_index
95
93
  return _derive_path(master, [12381, 8444, 6, pool_wallet_index * 10000 + index])
96
94
 
97
95
 
98
- def find_owner_sk(all_sks: list[PrivateKey], owner_pk: G1Element) -> Optional[tuple[PrivateKey, uint32]]:
96
+ def find_owner_sk(all_sks: list[PrivateKey], owner_pk: G1Element) -> tuple[PrivateKey, uint32] | None:
99
97
  for pool_wallet_index in range(MAX_POOL_WALLETS):
100
98
  for sk in all_sks:
101
99
  try_owner_sk = master_sk_to_singleton_owner_sk(sk, uint32(pool_wallet_index))
@@ -104,7 +102,7 @@ def find_owner_sk(all_sks: list[PrivateKey], owner_pk: G1Element) -> Optional[tu
104
102
  return None
105
103
 
106
104
 
107
- def find_authentication_sk(all_sks: list[PrivateKey], owner_pk: G1Element) -> Optional[PrivateKey]:
105
+ def find_authentication_sk(all_sks: list[PrivateKey], owner_pk: G1Element) -> PrivateKey | None:
108
106
  # NOTE: might need to increase this if using a large number of wallets, or have switched authentication keys
109
107
  # many times.
110
108
  for pool_wallet_index in range(MAX_POOL_WALLETS):
@@ -1,14 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Optional
5
4
 
6
5
  from chia_rs import CoinState
7
6
  from chia_rs.sized_bytes import bytes32
8
7
  from chia_rs.sized_ints import uint16, uint64
9
8
 
10
9
  from chia.types.blockchain_format.coin import Coin
11
- from chia.types.blockchain_format.program import NIL, Program
10
+ from chia.types.blockchain_format.program import Program
12
11
  from chia.util.streamable import Streamable, streamable
13
12
  from chia.wallet.lineage_proof import LineageProof
14
13
  from chia.wallet.util.curry_and_treehash import NIL_TREEHASH
@@ -16,7 +15,7 @@ from chia.wallet.util.curry_and_treehash import NIL_TREEHASH
16
15
 
17
16
  def did_recovery_is_nil(recovery_program: Program) -> bool:
18
17
  # cannot use set as not hashable
19
- if recovery_program in (NIL, NIL_TREEHASH): # noqa: PLR6201
18
+ if recovery_program in (Program.NIL, NIL_TREEHASH): # noqa: PLR6201
20
19
  return True
21
20
  else:
22
21
  return False
@@ -25,14 +24,14 @@ def did_recovery_is_nil(recovery_program: Program) -> bool:
25
24
  @streamable
26
25
  @dataclass(frozen=True)
27
26
  class DIDInfo(Streamable):
28
- origin_coin: Optional[Coin] # Coin ID of this coin is our DID
27
+ origin_coin: Coin | None # Coin ID of this coin is our DID
29
28
  backup_ids: list[bytes32]
30
29
  num_of_backup_ids_needed: uint64
31
- parent_info: list[tuple[bytes32, Optional[LineageProof]]] # {coin.name(): LineageProof}
32
- current_inner: Optional[Program] # represents a Program as bytes
33
- temp_coin: Optional[Coin] # partially recovered wallet uses these to hold info
34
- temp_puzhash: Optional[bytes32]
35
- temp_pubkey: Optional[bytes]
30
+ parent_info: list[tuple[bytes32, LineageProof | None]] # {coin.name(): LineageProof}
31
+ current_inner: Program | None # represents a Program as bytes
32
+ temp_coin: Coin | None # partially recovered wallet uses these to hold info
33
+ temp_puzhash: bytes32 | None
34
+ temp_pubkey: bytes | None
36
35
  sent_recovery_transaction: bool
37
36
  metadata: str # JSON of the user defined metadata
38
37
 
@@ -41,9 +40,9 @@ class DIDInfo(Streamable):
41
40
  @dataclass(frozen=True)
42
41
  class DIDCoinData(Streamable):
43
42
  p2_puzzle: Program
44
- recovery_list_hash: Optional[bytes32]
43
+ recovery_list_hash: bytes32 | None
45
44
  num_verification: uint16
46
45
  singleton_struct: Program
47
46
  metadata: Program
48
- inner_puzzle: Optional[Program]
47
+ inner_puzzle: Program | None
49
48
  coin_state: CoinState
@@ -5,7 +5,7 @@ import json
5
5
  import logging
6
6
  import re
7
7
  import time
8
- from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
8
+ from typing import TYPE_CHECKING, Any, ClassVar, cast
9
9
 
10
10
  from chia_rs import AugSchemeMPL, CoinSpend, CoinState, G1Element, G2Element
11
11
  from chia_rs.sized_bytes import bytes32
@@ -16,14 +16,12 @@ from chia.server.ws_connection import WSChiaConnection
16
16
  from chia.types.blockchain_format.coin import Coin
17
17
  from chia.types.blockchain_format.program import Program
18
18
  from chia.types.coin_spend import make_spend
19
- from chia.types.signing_mode import CHIP_0002_SIGN_MESSAGE_PREFIX, SigningMode
20
19
  from chia.wallet.conditions import (
21
20
  AssertCoinAnnouncement,
22
21
  Condition,
23
22
  ConditionValidTimes,
24
23
  CreateCoin,
25
24
  CreateCoinAnnouncement,
26
- parse_timelock_info,
27
25
  )
28
26
  from chia.wallet.derivation_record import DerivationRecord
29
27
  from chia.wallet.did_wallet import did_wallet_puzzles
@@ -31,8 +29,6 @@ from chia.wallet.did_wallet.did_info import DIDCoinData, DIDInfo, did_recovery_i
31
29
  from chia.wallet.did_wallet.did_wallet_puzzles import match_did_puzzle, uncurry_innerpuz
32
30
  from chia.wallet.lineage_proof import LineageProof
33
31
  from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import (
34
- DEFAULT_HIDDEN_PUZZLE_HASH,
35
- calculate_synthetic_secret_key,
36
32
  puzzle_for_pk,
37
33
  puzzle_hash_for_pk,
38
34
  )
@@ -44,7 +40,6 @@ from chia.wallet.singleton import (
44
40
  )
45
41
  from chia.wallet.transaction_record import TransactionRecord
46
42
  from chia.wallet.uncurried_puzzle import uncurry_puzzle
47
- from chia.wallet.util.compute_memos import compute_memos
48
43
  from chia.wallet.util.curry_and_treehash import NIL_TREEHASH, shatree_int, shatree_pair
49
44
  from chia.wallet.util.transaction_type import TransactionType
50
45
  from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
@@ -68,8 +63,8 @@ class DIDWallet:
68
63
  wallet_info: WalletInfo
69
64
  did_info: DIDInfo
70
65
  standard_wallet: Wallet
71
- base_puzzle_program: Optional[bytes]
72
- base_inner_puzzle_hash: Optional[bytes32]
66
+ base_puzzle_program: bytes | None
67
+ base_inner_puzzle_hash: bytes32 | None
73
68
  wallet_id: int
74
69
 
75
70
  @staticmethod
@@ -79,7 +74,7 @@ class DIDWallet:
79
74
  amount: uint64,
80
75
  action_scope: WalletActionScope,
81
76
  metadata: dict[str, str] = {},
82
- name: Optional[str] = None,
77
+ name: str | None = None,
83
78
  fee: uint64 = uint64(0),
84
79
  extra_conditions: tuple[Condition, ...] = tuple(),
85
80
  ):
@@ -149,7 +144,7 @@ class DIDWallet:
149
144
  wallet_state_manager: Any,
150
145
  wallet: Wallet,
151
146
  backup_data: str,
152
- name: Optional[str] = None,
147
+ name: str | None = None,
153
148
  ):
154
149
  """
155
150
  Create a DID wallet from a backup file
@@ -191,7 +186,7 @@ class DIDWallet:
191
186
  launch_coin: Coin,
192
187
  inner_puzzle: Program,
193
188
  coin_spend: CoinSpend,
194
- name: Optional[str] = None,
189
+ name: str | None = None,
195
190
  ):
196
191
  """
197
192
  Create a DID wallet from a transfer
@@ -264,7 +259,7 @@ class DIDWallet:
264
259
  wallet_state_manager: Any,
265
260
  wallet: Wallet,
266
261
  wallet_info: WalletInfo,
267
- name: Optional[str] = None,
262
+ name: str | None = None,
268
263
  ):
269
264
  """
270
265
  Create a DID wallet based on the local database
@@ -362,7 +357,7 @@ class DIDWallet:
362
357
  # We can improve this interface by passing in the CoinSpend, as well
363
358
  # We need to change DID Wallet coin_added to expect p2 spends as well as recovery spends,
364
359
  # or only call it in the recovery spend case
365
- async def coin_added(self, coin: Coin, _: uint32, peer: WSChiaConnection, parent_coin_data: Optional[DIDCoinData]):
360
+ async def coin_added(self, coin: Coin, _: uint32, peer: WSChiaConnection, parent_coin_data: DIDCoinData | None):
366
361
  """Notification from wallet state manager that wallet has been received."""
367
362
  parent = self.get_parent_for_coin(coin)
368
363
  if parent_coin_data is not None:
@@ -381,9 +376,7 @@ class DIDWallet:
381
376
  p2_puzzle, recovery_list_hash, num_verification, singleton_struct, metadata = did_curried_args
382
377
  did_data = DIDCoinData(
383
378
  p2_puzzle=p2_puzzle,
384
- recovery_list_hash=bytes32(recovery_list_hash.as_atom())
385
- if recovery_list_hash != Program.to(None)
386
- else None,
379
+ recovery_list_hash=bytes32(recovery_list_hash.as_atom()) if recovery_list_hash != Program.NIL else None,
387
380
  num_verification=uint16(num_verification.as_int()),
388
381
  singleton_struct=singleton_struct,
389
382
  metadata=metadata,
@@ -649,25 +642,16 @@ class DIDWallet:
649
642
  extra_conditions=(AssertCoinAnnouncement(asserted_id=coin_name, asserted_msg=coin_name),),
650
643
  )
651
644
  to_ph = await action_scope.get_puzzle_hash(self.wallet_state_manager, override_reuse_puzhash_with=True)
652
- did_record = TransactionRecord(
653
- confirmed_at_height=uint32(0),
654
- created_at_time=uint64(time.time()),
655
- to_puzzle_hash=to_ph,
656
- to_address=self.wallet_state_manager.encode_puzzle_hash(to_ph),
645
+ did_record = self.wallet_state_manager.new_outgoing_transaction(
646
+ wallet_id=self.id(),
647
+ puzzle_hash=to_ph,
657
648
  amount=uint64(coin.amount),
658
- fee_amount=uint64(0),
659
- confirmed=False,
660
- sent=uint32(0),
649
+ fee=uint64(0),
661
650
  spend_bundle=spend_bundle,
662
651
  additions=spend_bundle.additions(),
663
652
  removals=spend_bundle.removals(),
664
- wallet_id=self.wallet_info.id,
665
- sent_to=[],
666
- trade_id=None,
667
- type=uint32(TransactionType.OUTGOING_TX.value),
668
- name=bytes32.secret(),
669
- memos=compute_memos(spend_bundle),
670
- valid_times=parse_timelock_info(extra_conditions),
653
+ name=spend_bundle.name(),
654
+ extra_conditions=extra_conditions,
671
655
  )
672
656
 
673
657
  async with action_scope.use() as interface:
@@ -735,25 +719,16 @@ class DIDWallet:
735
719
  extra_conditions=(AssertCoinAnnouncement(asserted_id=coin_name, asserted_msg=coin_name),),
736
720
  )
737
721
  to_ph = await action_scope.get_puzzle_hash(self.wallet_state_manager, override_reuse_puzhash_with=True)
738
- did_record = TransactionRecord(
739
- confirmed_at_height=uint32(0),
740
- created_at_time=uint64(time.time()),
741
- to_puzzle_hash=to_ph,
742
- to_address=self.wallet_state_manager.encode_puzzle_hash(to_ph),
722
+ did_record = self.wallet_state_manager.new_outgoing_transaction(
723
+ wallet_id=self.id(),
724
+ puzzle_hash=to_ph,
743
725
  amount=uint64(coin.amount),
744
- fee_amount=fee,
745
- confirmed=False,
746
- sent=uint32(0),
726
+ fee=fee,
747
727
  spend_bundle=spend_bundle,
748
728
  additions=spend_bundle.additions(),
749
729
  removals=spend_bundle.removals(),
750
- wallet_id=self.wallet_info.id,
751
- sent_to=[],
752
- trade_id=None,
753
- type=uint32(TransactionType.OUTGOING_TX.value),
754
730
  name=spend_bundle.name(),
755
- memos=compute_memos(spend_bundle),
756
- valid_times=parse_timelock_info(extra_conditions),
731
+ extra_conditions=extra_conditions,
757
732
  )
758
733
 
759
734
  async with action_scope.use() as interface:
@@ -815,25 +790,16 @@ class DIDWallet:
815
790
  )
816
791
  list_of_coinspends = [make_spend(coin, full_puzzle, fullsol)]
817
792
  unsigned_spend_bundle = WalletSpendBundle(list_of_coinspends, G2Element())
818
- tx = TransactionRecord(
819
- confirmed_at_height=uint32(0),
820
- created_at_time=uint64(time.time()),
821
- to_puzzle_hash=p2_ph,
822
- to_address=self.wallet_state_manager.encode_puzzle_hash(p2_ph),
793
+ tx = self.wallet_state_manager.new_outgoing_transaction(
794
+ wallet_id=self.id(),
795
+ puzzle_hash=p2_ph,
823
796
  amount=uint64(coin.amount),
824
- fee_amount=uint64(0),
825
- confirmed=False,
826
- sent=uint32(0),
797
+ fee=uint64(0),
827
798
  spend_bundle=unsigned_spend_bundle,
828
799
  additions=unsigned_spend_bundle.additions(),
829
800
  removals=[coin],
830
- wallet_id=self.id(),
831
- sent_to=[],
832
- trade_id=None,
833
- type=uint32(TransactionType.OUTGOING_TX.value),
834
801
  name=unsigned_spend_bundle.name(),
835
- memos=compute_memos(unsigned_spend_bundle),
836
- valid_times=parse_timelock_info(extra_conditions),
802
+ extra_conditions=extra_conditions,
837
803
  )
838
804
  async with action_scope.use() as interface:
839
805
  interface.side_effects.transactions.append(tx)
@@ -841,8 +807,8 @@ class DIDWallet:
841
807
  async def get_did_innerpuz(
842
808
  self,
843
809
  action_scope: WalletActionScope,
844
- origin_id: Optional[bytes32] = None,
845
- override_reuse_puzhash_with: Optional[bool] = None,
810
+ origin_id: bytes32 | None = None,
811
+ override_reuse_puzhash_with: bool | None = None,
846
812
  ) -> Program:
847
813
  if self.did_info.origin_coin is not None:
848
814
  launcher_id = self.did_info.origin_coin.name()
@@ -904,7 +870,7 @@ class DIDWallet:
904
870
  )
905
871
  return inner_puzzle
906
872
 
907
- def reset_recovery_list(self) -> Optional[Program]:
873
+ def reset_recovery_list(self) -> Program | None:
908
874
  if self.did_info.current_inner is None:
909
875
  return None
910
876
 
@@ -921,7 +887,7 @@ class DIDWallet:
921
887
 
922
888
  return og_recovery_list_hash
923
889
 
924
- def get_parent_for_coin(self, coin) -> Optional[LineageProof]:
890
+ def get_parent_for_coin(self, coin) -> LineageProof | None:
925
891
  parent_info = None
926
892
  for name, ccparent in self.did_info.parent_info:
927
893
  if name == coin.parent_coin_info:
@@ -929,27 +895,15 @@ class DIDWallet:
929
895
 
930
896
  return parent_info
931
897
 
932
- async def sign_message(self, message: str, mode: SigningMode) -> tuple[G1Element, G2Element]:
898
+ async def current_p2_puzzle_hash(self) -> bytes32:
933
899
  if self.did_info.current_inner is None:
934
900
  raise ValueError("Missing DID inner puzzle.")
935
901
  puzzle_args = did_wallet_puzzles.uncurry_innerpuz(self.did_info.current_inner)
936
902
  if puzzle_args is not None:
937
903
  p2_puzzle, _, _, _, _ = puzzle_args
938
- puzzle_hash = p2_puzzle.get_tree_hash()
939
- private = await self.wallet_state_manager.get_private_key(puzzle_hash)
940
- synthetic_secret_key = calculate_synthetic_secret_key(private, DEFAULT_HIDDEN_PUZZLE_HASH)
941
- synthetic_pk = synthetic_secret_key.get_g1()
942
- if mode == SigningMode.CHIP_0002_HEX_INPUT:
943
- hex_message: bytes = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, bytes.fromhex(message))).get_tree_hash()
944
- elif mode == SigningMode.BLS_MESSAGE_AUGMENTATION_UTF8_INPUT:
945
- hex_message = bytes(message, "utf-8")
946
- elif mode == SigningMode.BLS_MESSAGE_AUGMENTATION_HEX_INPUT:
947
- hex_message = bytes.fromhex(message)
948
- else:
949
- hex_message = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, message)).get_tree_hash()
950
- return synthetic_pk, AugSchemeMPL.sign(synthetic_secret_key, hex_message)
904
+ return p2_puzzle.get_tree_hash()
951
905
  else:
952
- raise ValueError("Invalid inner DID puzzle.")
906
+ raise ValueError("Invalid DID inner puzzle.")
953
907
 
954
908
  async def generate_new_decentralised_id(
955
909
  self,
@@ -1084,14 +1038,14 @@ class DIDWallet:
1084
1038
  )
1085
1039
  return spendable_am
1086
1040
 
1087
- async def get_max_send_amount(self, records: Optional[set[WalletCoinRecord]] = None):
1041
+ async def get_max_send_amount(self, records: set[WalletCoinRecord] | None = None):
1088
1042
  spendable: list[WalletCoinRecord] = list(
1089
1043
  await self.wallet_state_manager.get_spendable_coins_for_wallet(self.id(), records)
1090
1044
  )
1091
1045
  max_send_amount = sum(cr.coin.amount for cr in spendable)
1092
1046
  return max_send_amount
1093
1047
 
1094
- async def add_parent(self, name: bytes32, parent: Optional[LineageProof]):
1048
+ async def add_parent(self, name: bytes32, parent: LineageProof | None):
1095
1049
  self.log.info(f"Adding parent {name}: {parent}")
1096
1050
  current_list = self.did_info.parent_info.copy()
1097
1051
  current_list.append((name, parent))
@@ -1234,8 +1188,8 @@ class DIDWallet:
1234
1188
  puzzle_hashes: list[bytes32],
1235
1189
  action_scope: WalletActionScope,
1236
1190
  fee: uint64 = uint64(0),
1237
- coins: Optional[set[Coin]] = None,
1238
- memos: Optional[list[list[bytes]]] = None,
1191
+ coins: set[Coin] | None = None,
1192
+ memos: list[list[bytes]] | None = None,
1239
1193
  extra_conditions: tuple[Condition, ...] = tuple(),
1240
1194
  **kwargs: Unpack[GSTOptionalArgs],
1241
1195
  ) -> None:
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from collections.abc import Iterator
4
- from typing import Optional, Union
5
4
 
6
5
  from chia_puzzles_py.programs import DID_INNERPUZ, DID_INNERPUZ_HASH, NFT_INTERMEDIATE_LAUNCHER
7
6
  from chia_rs import CoinSpend, G1Element
@@ -36,12 +35,12 @@ INTERMEDIATE_LAUNCHER_MOD = Program.from_bytes(NFT_INTERMEDIATE_LAUNCHER)
36
35
 
37
36
 
38
37
  def create_innerpuz(
39
- p2_puzzle_or_hash: Union[Program, bytes32],
38
+ p2_puzzle_or_hash: Program | bytes32,
40
39
  recovery_list: list[bytes32],
41
40
  num_of_backup_ids_needed: uint64,
42
41
  launcher_id: bytes32,
43
42
  metadata: Program = Program.to([]),
44
- recovery_list_hash: Optional[Program] = None,
43
+ recovery_list_hash: Program | None = None,
45
44
  ) -> Program:
46
45
  """
47
46
  Create DID inner puzzle
@@ -55,7 +54,7 @@ def create_innerpuz(
55
54
  Note: Receiving a standard P2 puzzle hash wouldn't calculate a valid puzzle, but
56
55
  that can be useful if calling `.get_tree_hash_precalc()` on it.
57
56
  """
58
- backup_ids_hash: Union[Program, bytes32] = Program.to(recovery_list).get_tree_hash()
57
+ backup_ids_hash: Program | bytes32 = Program.to(recovery_list).get_tree_hash()
59
58
  if recovery_list_hash is not None:
60
59
  backup_ids_hash = recovery_list_hash
61
60
  singleton_struct = Program.to((SINGLETON_TOP_LAYER_MOD_HASH, (launcher_id, SINGLETON_LAUNCHER_PUZZLE_HASH)))
@@ -69,8 +68,8 @@ def get_inner_puzhash_by_p2(
69
68
  num_of_backup_ids_needed: uint64,
70
69
  launcher_id: bytes32,
71
70
  metadata: Program = Program.to([]),
72
- recovery_list: Optional[list[bytes32]] = None,
73
- recovery_list_hash: Optional[Program] = None,
71
+ recovery_list: list[bytes32] | None = None,
72
+ recovery_list_hash: Program | None = None,
74
73
  ) -> bytes32:
75
74
  """
76
75
  Calculate DID inner puzzle hash based on a P2 puzzle hash
@@ -118,7 +117,7 @@ def is_did_innerpuz(inner_f: Program) -> bool:
118
117
  return inner_f == DID_INNERPUZ_MOD
119
118
 
120
119
 
121
- def uncurry_innerpuz(puzzle: Program) -> Optional[tuple[Program, Program, Program, Program, Program]]:
120
+ def uncurry_innerpuz(puzzle: Program) -> tuple[Program, Program, Program, Program, Program] | None:
122
121
  """
123
122
  Uncurry a DID inner puzzle
124
123
  :param puzzle: DID puzzle
@@ -172,7 +171,7 @@ def create_spend_for_message(
172
171
  return make_spend(coin, puzzle, solution)
173
172
 
174
173
 
175
- def match_did_puzzle(mod: Program, curried_args: Program) -> Optional[Iterator[Program]]:
174
+ def match_did_puzzle(mod: Program, curried_args: Program) -> Iterator[Program] | None:
176
175
  """
177
176
  Given a puzzle test if it's a DID, if it is, return the curried arguments
178
177
  :param puzzle: Puzzle
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  from chia_rs.sized_bytes import bytes32
6
4
  from typing_extensions import Protocol
7
5
 
@@ -11,15 +9,15 @@ from chia.wallet.uncurried_puzzle import UncurriedPuzzle
11
9
 
12
10
 
13
11
  class DriverProtocol(Protocol):
14
- def match(self, puzzle: UncurriedPuzzle) -> Optional[PuzzleInfo]: ...
12
+ def match(self, puzzle: UncurriedPuzzle) -> PuzzleInfo | None: ...
15
13
 
16
14
  def get_inner_puzzle(
17
- self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle, solution: Optional[Program] = ...
18
- ) -> Optional[Program]: ...
15
+ self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle, solution: Program | None = ...
16
+ ) -> Program | None: ...
19
17
 
20
- def get_inner_solution(self, constructor: PuzzleInfo, solution: Program) -> Optional[Program]: ...
18
+ def get_inner_solution(self, constructor: PuzzleInfo, solution: Program) -> Program | None: ...
21
19
 
22
- def asset_id(self, constructor: PuzzleInfo) -> Optional[bytes32]: ...
20
+ def asset_id(self, constructor: PuzzleInfo) -> bytes32 | None: ...
23
21
 
24
22
  def construct(self, constructor: PuzzleInfo, inner_puzzle: Program) -> Program: ...
25
23
 
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from enum import Enum
5
- from typing import Any, Optional
5
+ from typing import Any
6
6
 
7
7
  from chia_rs.sized_bytes import bytes32
8
8
  from chia_rs.sized_ints import uint64
@@ -20,9 +20,9 @@ class LineageProofField(Enum):
20
20
  @streamable
21
21
  @dataclass(frozen=True)
22
22
  class LineageProof(Streamable):
23
- parent_name: Optional[bytes32] = None
24
- inner_puzzle_hash: Optional[bytes32] = None
25
- amount: Optional[uint64] = None
23
+ parent_name: bytes32 | None = None
24
+ inner_puzzle_hash: bytes32 | None = None
25
+ amount: uint64 | None = None
26
26
 
27
27
  @classmethod
28
28
  def from_program(cls, program: Program, fields: list[LineageProofField]) -> LineageProof:
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from collections.abc import Callable
3
4
  from dataclasses import dataclass
4
- from typing import Callable, Optional
5
5
 
6
6
  from chia_rs.sized_bytes import bytes32
7
7
 
@@ -30,13 +30,13 @@ def solution_for_metadata_layer(inner_solution: Program) -> Program:
30
30
 
31
31
  @dataclass(frozen=True)
32
32
  class MetadataOuterPuzzle:
33
- _match: Callable[[UncurriedPuzzle], Optional[PuzzleInfo]]
33
+ _match: Callable[[UncurriedPuzzle], PuzzleInfo | None]
34
34
  _construct: Callable[[PuzzleInfo, Program], Program]
35
35
  _solve: Callable[[PuzzleInfo, Solver, Program, Program], Program]
36
- _get_inner_puzzle: Callable[[PuzzleInfo, UncurriedPuzzle, Optional[Program]], Optional[Program]]
37
- _get_inner_solution: Callable[[PuzzleInfo, Program], Optional[Program]]
36
+ _get_inner_puzzle: Callable[[PuzzleInfo, UncurriedPuzzle, Program | None], Program | None]
37
+ _get_inner_solution: Callable[[PuzzleInfo, Program], Program | None]
38
38
 
39
- def match(self, puzzle: UncurriedPuzzle) -> Optional[PuzzleInfo]:
39
+ def match(self, puzzle: UncurriedPuzzle) -> PuzzleInfo | None:
40
40
  matched, curried_args = match_metadata_layer_puzzle(puzzle)
41
41
  if matched:
42
42
  _, metadata, updater_hash, inner_puzzle = curried_args
@@ -53,7 +53,7 @@ class MetadataOuterPuzzle:
53
53
  return None
54
54
  return None # Uncomment above when match_metadata_layer_puzzle works
55
55
 
56
- def asset_id(self, constructor: PuzzleInfo) -> Optional[bytes32]:
56
+ def asset_id(self, constructor: PuzzleInfo) -> bytes32 | None:
57
57
  return bytes32(constructor["updater_hash"])
58
58
 
59
59
  def construct(self, constructor: PuzzleInfo, inner_puzzle: Program) -> Program:
@@ -63,25 +63,25 @@ class MetadataOuterPuzzle:
63
63
  return puzzle_for_metadata_layer(constructor["metadata"], constructor["updater_hash"], inner_puzzle)
64
64
 
65
65
  def get_inner_puzzle(
66
- self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle, solution: Optional[Program] = None
67
- ) -> Optional[Program]:
66
+ self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle, solution: Program | None = None
67
+ ) -> Program | None:
68
68
  matched, curried_args = match_metadata_layer_puzzle(puzzle_reveal)
69
69
  if matched:
70
70
  _, _, _, inner_puzzle = curried_args
71
71
  also = constructor.also()
72
72
  if also is not None:
73
- deep_inner_puzzle: Optional[Program] = self._get_inner_puzzle(also, uncurry_puzzle(inner_puzzle), None)
73
+ deep_inner_puzzle: Program | None = self._get_inner_puzzle(also, uncurry_puzzle(inner_puzzle), None)
74
74
  return deep_inner_puzzle
75
75
  else:
76
76
  return inner_puzzle
77
77
  else:
78
78
  raise ValueError("This driver is not for the specified puzzle reveal")
79
79
 
80
- def get_inner_solution(self, constructor: PuzzleInfo, solution: Program) -> Optional[Program]:
80
+ def get_inner_solution(self, constructor: PuzzleInfo, solution: Program) -> Program | None:
81
81
  my_inner_solution: Program = solution.first()
82
82
  also = constructor.also()
83
83
  if also:
84
- deep_inner_solution: Optional[Program] = self._get_inner_solution(also, my_inner_solution)
84
+ deep_inner_solution: Program | None = self._get_inner_solution(also, my_inner_solution)
85
85
  return deep_inner_solution
86
86
  else:
87
87
  return my_inner_solution
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Optional
5
4
 
6
5
  from chia_rs.sized_bytes import bytes32
7
6
  from chia_rs.sized_ints import uint16, uint32, uint64
@@ -32,13 +31,13 @@ class NFTInfo(Streamable):
32
31
  nft_coin_confirmation_height: uint32
33
32
  """Current NFT coin confirmation height"""
34
33
 
35
- owner_did: Optional[bytes32]
34
+ owner_did: bytes32 | None
36
35
  """Owner DID"""
37
36
 
38
- royalty_percentage: Optional[uint16]
37
+ royalty_percentage: uint16 | None
39
38
  """Percentage of the transaction fee paid to the author, e.g. 1000 = 1%"""
40
39
 
41
- royalty_puzzle_hash: Optional[bytes32]
40
+ royalty_puzzle_hash: bytes32 | None
42
41
  """Puzzle hash where royalty will be sent to"""
43
42
  data_uris: list[str]
44
43
  """ A list of content URIs"""
@@ -82,13 +81,13 @@ class NFTInfo(Streamable):
82
81
  pending_transaction: bool = False
83
82
  """Indicate if the NFT is pending for a transaction"""
84
83
 
85
- minter_did: Optional[bytes32] = None
84
+ minter_did: bytes32 | None = None
86
85
  """DID of the NFT minter"""
87
86
 
88
87
  launcher_puzhash: bytes32 = SINGLETON_LAUNCHER_PUZZLE_HASH
89
88
  """Puzzle hash of the singleton launcher in hex"""
90
89
 
91
- off_chain_metadata: Optional[str] = None
90
+ off_chain_metadata: str | None = None
92
91
  """Serialized off-chain metadata"""
93
92
 
94
93
 
@@ -101,13 +100,13 @@ class NFTCoinInfo(Streamable):
101
100
  """The latest coin of the NFT"""
102
101
  coin: Coin
103
102
  """NFT lineage proof"""
104
- lineage_proof: Optional[LineageProof]
103
+ lineage_proof: LineageProof | None
105
104
  """NFT full puzzle"""
106
105
  full_puzzle: Program
107
106
  """NFT minting block height"""
108
107
  mint_height: uint32
109
108
  """The DID of the NFT minter"""
110
- minter_did: Optional[bytes32] = None
109
+ minter_did: bytes32 | None = None
111
110
  """The block height of the latest coin"""
112
111
  latest_height: uint32 = uint32(0)
113
112
  """If the NFT is in the transaction"""
@@ -117,4 +116,4 @@ class NFTCoinInfo(Streamable):
117
116
  @streamable
118
117
  @dataclass(frozen=True)
119
118
  class NFTWalletInfo(Streamable):
120
- did_id: Optional[bytes32] = None
119
+ did_id: bytes32 | None = None