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,8 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from collections.abc import Callable
3
4
  from dataclasses import dataclass
4
- from typing import Any, Callable, Optional
5
+ from typing import Any
5
6
 
6
7
  from chia_rs.sized_bytes import bytes32
7
8
  from chia_rs.sized_ints import uint64
@@ -16,14 +17,14 @@ from chia.wallet.vc_wallet.cr_cat_drivers import PROOF_FLAGS_CHECKER, construct_
16
17
 
17
18
  @dataclass(frozen=True)
18
19
  class CROuterPuzzle:
19
- _match: Callable[[UncurriedPuzzle], Optional[PuzzleInfo]]
20
+ _match: Callable[[UncurriedPuzzle], PuzzleInfo | None]
20
21
  _construct: Callable[[PuzzleInfo, Program], Program]
21
22
  _solve: Callable[[PuzzleInfo, Solver, Program, Program], Program]
22
- _get_inner_puzzle: Callable[[PuzzleInfo, UncurriedPuzzle, Optional[Program]], Optional[Program]]
23
- _get_inner_solution: Callable[[PuzzleInfo, Program], Optional[Program]]
23
+ _get_inner_puzzle: Callable[[PuzzleInfo, UncurriedPuzzle, Program | None], Program | None]
24
+ _get_inner_solution: Callable[[PuzzleInfo, Program], Program | None]
24
25
 
25
- def match(self, puzzle: UncurriedPuzzle) -> Optional[PuzzleInfo]:
26
- args: Optional[tuple[list[bytes32], Program, Program]] = match_cr_layer(puzzle)
26
+ def match(self, puzzle: UncurriedPuzzle) -> PuzzleInfo | None:
27
+ args: tuple[list[bytes32], Program, Program] | None = match_cr_layer(puzzle)
27
28
  if args is None:
28
29
  return None
29
30
  authorized_providers, proofs_checker, inner_puzzle = args
@@ -38,29 +39,29 @@ class CROuterPuzzle:
38
39
  return PuzzleInfo(constructor_dict)
39
40
 
40
41
  def get_inner_puzzle(
41
- self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle, solution: Optional[Program] = None
42
- ) -> Optional[Program]:
43
- args: Optional[tuple[list[bytes32], Program, Program]] = match_cr_layer(puzzle_reveal)
42
+ self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle, solution: Program | None = None
43
+ ) -> Program | None:
44
+ args: tuple[list[bytes32], Program, Program] | None = match_cr_layer(puzzle_reveal)
44
45
  if args is None:
45
46
  raise ValueError("This driver is not for the specified puzzle reveal") # pragma: no cover
46
47
  _, _, inner_puzzle = args
47
48
  also = constructor.also()
48
49
  if also is not None:
49
- deep_inner_puzzle: Optional[Program] = self._get_inner_puzzle(also, uncurry_puzzle(inner_puzzle), None)
50
+ deep_inner_puzzle: Program | None = self._get_inner_puzzle(also, uncurry_puzzle(inner_puzzle), None)
50
51
  return deep_inner_puzzle
51
52
  else:
52
53
  return inner_puzzle
53
54
 
54
- def get_inner_solution(self, constructor: PuzzleInfo, solution: Program) -> Optional[Program]:
55
+ def get_inner_solution(self, constructor: PuzzleInfo, solution: Program) -> Program | None:
55
56
  my_inner_solution: Program = solution.at("rrrrrrf")
56
57
  also = constructor.also()
57
58
  if also:
58
- deep_inner_solution: Optional[Program] = self._get_inner_solution(also, my_inner_solution)
59
+ deep_inner_solution: Program | None = self._get_inner_solution(also, my_inner_solution)
59
60
  return deep_inner_solution
60
61
  else:
61
62
  return my_inner_solution
62
63
 
63
- def asset_id(self, constructor: PuzzleInfo) -> Optional[bytes32]:
64
+ def asset_id(self, constructor: PuzzleInfo) -> bytes32 | None:
64
65
  return None
65
66
 
66
67
  def construct(self, constructor: PuzzleInfo, inner_puzzle: Program) -> Program:
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass, replace
4
- from typing import Any, Optional
4
+ from typing import Any
5
5
 
6
6
  from chia_puzzles_py.programs import ACS_TRANSFER_PROGRAM as ACS_TRANSFER_PROGRAM_BYTES
7
7
  from chia_puzzles_py.programs import COVENANT_LAYER as COVENANT_LAYER_BYTES
@@ -89,7 +89,7 @@ def create_covenant_layer(initial_puzzle_hash: bytes32, parent_morpher: Program,
89
89
  )
90
90
 
91
91
 
92
- def match_covenant_layer(uncurried_puzzle: UncurriedPuzzle) -> Optional[tuple[bytes32, Program, Program]]:
92
+ def match_covenant_layer(uncurried_puzzle: UncurriedPuzzle) -> tuple[bytes32, Program, Program] | None:
93
93
  if uncurried_puzzle.mod == COVENANT_LAYER:
94
94
  return (
95
95
  bytes32(uncurried_puzzle.args.at("f").as_atom()),
@@ -129,7 +129,7 @@ def create_tp_covenant_adapter(covenant_layer: Program) -> Program:
129
129
  return EML_TP_COVENANT_ADAPTER.curry(covenant_layer)
130
130
 
131
131
 
132
- def match_tp_covenant_adapter(uncurried_puzzle: UncurriedPuzzle) -> Optional[Program]: # pragma: no cover
132
+ def match_tp_covenant_adapter(uncurried_puzzle: UncurriedPuzzle) -> Program | None: # pragma: no cover
133
133
  if uncurried_puzzle.mod == EML_TP_COVENANT_ADAPTER:
134
134
  return uncurried_puzzle.args.at("f")
135
135
  else:
@@ -152,7 +152,7 @@ def create_did_tp(
152
152
  EML_DID_TP_FULL_HASH = create_did_tp().get_tree_hash()
153
153
 
154
154
 
155
- def match_did_tp(uncurried_puzzle: UncurriedPuzzle) -> Optional[tuple[()]]:
155
+ def match_did_tp(uncurried_puzzle: UncurriedPuzzle) -> tuple[()] | None:
156
156
  if uncurried_puzzle.mod == EML_DID_TP:
157
157
  return ()
158
158
  else:
@@ -184,7 +184,7 @@ def create_revocation_layer(hidden_puzzle_hash: bytes32, inner_puzzle_hash: byte
184
184
  )
185
185
 
186
186
 
187
- def match_revocation_layer(uncurried_puzzle: UncurriedPuzzle) -> Optional[tuple[bytes32, bytes32]]:
187
+ def match_revocation_layer(uncurried_puzzle: UncurriedPuzzle) -> tuple[bytes32, bytes32] | None:
188
188
  if uncurried_puzzle.mod == REVOCATION_LAYER:
189
189
  return bytes32(uncurried_puzzle.args.at("rf").as_atom()), bytes32(uncurried_puzzle.args.at("rrf").as_atom())
190
190
  else:
@@ -223,7 +223,7 @@ def create_eml_covenant_morpher(
223
223
 
224
224
 
225
225
  def construct_exigent_metadata_layer(
226
- metadata: Optional[Program], transfer_program: Program, inner_puzzle: Program
226
+ metadata: Program | None, transfer_program: Program, inner_puzzle: Program
227
227
  ) -> Program:
228
228
  return EXTIGENT_METADATA_LAYER.curry(
229
229
  EXTIGENT_METADATA_LAYER_HASH, metadata, transfer_program, transfer_program.get_tree_hash(), inner_puzzle
@@ -237,7 +237,7 @@ class VCLineageProof(LineageProof, Streamable):
237
237
  The covenant layer for exigent metadata layers requires to be passed the previous parent's metadata too
238
238
  """
239
239
 
240
- parent_proof_hash: Optional[bytes32] = None
240
+ parent_proof_hash: bytes32 | None = None
241
241
 
242
242
 
243
243
  def solve_std_vc_backdoor(
@@ -249,7 +249,7 @@ def solve_std_vc_backdoor(
249
249
  eml_lineage_proof: VCLineageProof,
250
250
  provider_innerpuzhash: bytes32,
251
251
  coin_id: bytes32,
252
- announcement_nonce: Optional[bytes32] = None,
252
+ announcement_nonce: bytes32 | None = None,
253
253
  ) -> Program:
254
254
  """
255
255
  Solution to the STANDARD_BRICK_PUZZLE above. Requires proof info about pretty much the whole puzzle stack.
@@ -309,7 +309,7 @@ class VerifiedCredential(Streamable):
309
309
  launcher_id: bytes32
310
310
  inner_puzzle_hash: bytes32
311
311
  proof_provider: bytes32
312
- proof_hash: Optional[bytes32]
312
+ proof_hash: bytes32 | None
313
313
 
314
314
  @classmethod
315
315
  def launch(
@@ -562,7 +562,7 @@ class VerifiedCredential(Streamable):
562
562
  amount=uint64(parent_coin.amount),
563
563
  )
564
564
  if layer_below_singleton == OWNERSHIP_LAYER_LAUNCHER:
565
- proof_hash: Optional[bytes32] = None
565
+ proof_hash: bytes32 | None = None
566
566
  eml_lineage_proof: VCLineageProof = VCLineageProof(
567
567
  parent_name=parent_coin.parent_coin_info, amount=uint64(parent_coin.amount)
568
568
  )
@@ -587,14 +587,14 @@ class VerifiedCredential(Streamable):
587
587
  )
588
588
  inner_puzzle_hash = bytes32(new_singleton_condition.at("rf").as_atom())
589
589
  magic_condition = next(c for c in conditions if c.at("f").as_int() == -10)
590
- if magic_condition.at("rrrf") == Program.to(None):
590
+ if magic_condition.at("rrrf") == Program.NIL:
591
591
  proof_hash_as_prog: Program = metadata_layer.args.at("rfr")
592
592
  elif magic_condition.at("rrrf").atom is not None:
593
593
  raise ValueError("Specified VC was cleared")
594
594
  else:
595
595
  proof_hash_as_prog = magic_condition.at("rrrfrrf")
596
596
 
597
- proof_hash = None if proof_hash_as_prog == Program.to(None) else bytes32(proof_hash_as_prog.as_atom())
597
+ proof_hash = None if proof_hash_as_prog == Program.NIL else bytes32(proof_hash_as_prog.as_atom())
598
598
 
599
599
  proof_provider = bytes32(metadata_layer.args.at("rff").as_atom())
600
600
 
@@ -606,7 +606,7 @@ class VerifiedCredential(Streamable):
606
606
  bytes32(uncurry_puzzle(metadata_layer.args.at("rrrrf")).args.at("rrf").as_atom()),
607
607
  ).get_tree_hash(),
608
608
  amount=uint64(parent_coin.amount),
609
- parent_proof_hash=None if parent_proof_hash == Program.to(None) else parent_proof_hash,
609
+ parent_proof_hash=None if parent_proof_hash == Program.NIL else parent_proof_hash,
610
610
  )
611
611
 
612
612
  new_vc: Self = cls(
@@ -627,9 +627,9 @@ class VerifiedCredential(Streamable):
627
627
  # The methods in this section are useful for spending an existing VC
628
628
  def magic_condition_for_new_proofs(
629
629
  self,
630
- new_proof_hash: Optional[bytes32],
630
+ new_proof_hash: bytes32 | None,
631
631
  provider_innerpuzhash: bytes32,
632
- new_proof_provider: Optional[bytes32] = None,
632
+ new_proof_provider: bytes32 | None = None,
633
633
  ) -> Program:
634
634
  """
635
635
  Returns the 'magic' condition that can update the metadata with a new proof hash. Returning this condition from
@@ -690,9 +690,9 @@ class VerifiedCredential(Streamable):
690
690
  self,
691
691
  inner_puzzle: Program,
692
692
  inner_solution: Program,
693
- new_proof_hash: Optional[bytes32] = None,
694
- new_proof_provider: Optional[bytes32] = None,
695
- ) -> tuple[Optional[CreatePuzzleAnnouncement], CoinSpend, VerifiedCredential]:
693
+ new_proof_hash: bytes32 | None = None,
694
+ new_proof_provider: bytes32 | None = None,
695
+ ) -> tuple[CreatePuzzleAnnouncement | None, CoinSpend, VerifiedCredential]:
696
696
  """
697
697
  Given an inner puzzle reveal and solution, spend the VC (potentially updating the proofs in the process).
698
698
  Note that the inner puzzle is already expected to output the 'magic' condition (which can be created above).
@@ -714,7 +714,7 @@ class VerifiedCredential(Streamable):
714
714
  )
715
715
 
716
716
  if new_proof_hash is not None:
717
- expected_announcement: Optional[CreatePuzzleAnnouncement] = CreatePuzzleAnnouncement(
717
+ expected_announcement: CreatePuzzleAnnouncement | None = CreatePuzzleAnnouncement(
718
718
  std_hash(
719
719
  self.coin.name()
720
720
  + Program.to(new_proof_hash).get_tree_hash()
@@ -744,7 +744,7 @@ class VerifiedCredential(Streamable):
744
744
  )
745
745
 
746
746
  def activate_backdoor(
747
- self, provider_innerpuzhash: bytes32, announcement_nonce: Optional[bytes32] = None
747
+ self, provider_innerpuzhash: bytes32, announcement_nonce: bytes32 | None = None
748
748
  ) -> tuple[CreatePuzzleAnnouncement, CoinSpend]:
749
749
  """
750
750
  Activates the backdoor in the VC to revoke the credentials and remove the provider's DID.
@@ -778,7 +778,7 @@ class VerifiedCredential(Streamable):
778
778
  )
779
779
 
780
780
  expected_announcement: CreatePuzzleAnnouncement = CreatePuzzleAnnouncement(
781
- std_hash(self.coin.name() + Program.to(None).get_tree_hash() + ACS_TRANSFER_PROGRAM.get_tree_hash())
781
+ std_hash(self.coin.name() + Program.NIL.get_tree_hash() + ACS_TRANSFER_PROGRAM.get_tree_hash())
782
782
  )
783
783
 
784
784
  return (
@@ -789,7 +789,7 @@ class VerifiedCredential(Streamable):
789
789
  ####################################################################################################################
790
790
 
791
791
  def _next_vc(
792
- self, next_inner_puzzle_hash: bytes32, new_proof_hash: Optional[bytes32], next_amount: uint64
792
+ self, next_inner_puzzle_hash: bytes32, new_proof_hash: bytes32 | None, next_amount: uint64
793
793
  ) -> VerifiedCredential:
794
794
  """
795
795
  Private method that creates the next VC class instance.
@@ -830,7 +830,7 @@ class VerifiedCredential(Streamable):
830
830
  # inside of a CAT.
831
831
  @dataclass(frozen=True)
832
832
  class RevocationOuterPuzzle:
833
- def match(self, puzzle: UncurriedPuzzle) -> Optional[PuzzleInfo]:
833
+ def match(self, puzzle: UncurriedPuzzle) -> PuzzleInfo | None:
834
834
  args = match_revocation_layer(puzzle)
835
835
  if args is None:
836
836
  return None
@@ -842,17 +842,17 @@ class RevocationOuterPuzzle:
842
842
  return PuzzleInfo(constructor_dict)
843
843
 
844
844
  def get_inner_puzzle(
845
- self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle, solution: Optional[Program] = None
846
- ) -> Optional[Program]:
845
+ self, constructor: PuzzleInfo, puzzle_reveal: UncurriedPuzzle, solution: Program | None = None
846
+ ) -> Program | None:
847
847
  if solution is None:
848
848
  raise ValueError("Cannot get_inner_puzzle of revocation layer without solution")
849
849
 
850
850
  return solution.at("rf")
851
851
 
852
- def get_inner_solution(self, constructor: PuzzleInfo, solution: Program) -> Optional[Program]:
852
+ def get_inner_solution(self, constructor: PuzzleInfo, solution: Program) -> Program | None:
853
853
  return solution.at("rrf")
854
854
 
855
- def asset_id(self, constructor: PuzzleInfo) -> Optional[bytes32]:
855
+ def asset_id(self, constructor: PuzzleInfo) -> bytes32 | None:
856
856
  return bytes32(constructor["hidden_puzzle_hash"])
857
857
 
858
858
  def construct(self, constructor: PuzzleInfo, inner_puzzle: Program) -> Program:
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
4
  from functools import cmp_to_key
5
- from typing import Optional
6
5
 
7
6
  from aiosqlite import Row
8
7
  from chia_rs.sized_bytes import bytes32
@@ -24,7 +23,7 @@ class VCProofs:
24
23
 
25
24
  def as_program(self) -> Program:
26
25
  def byte_sort_pairs(f1: tuple[str, str], f2: tuple[str, str]) -> int:
27
- return 1 if Program.to([10, (1, f1[0]), (1, f2[0])]).run([]) == Program.to(None) else -1
26
+ return 1 if Program.to([10, (1, f1[0]), (1, f2[0])]).run([]) == Program.NIL else -1
28
27
 
29
28
  prog: Program = Program.to(
30
29
  list_to_binary_tree(
@@ -55,7 +54,7 @@ class VCProofs:
55
54
  else:
56
55
  raise ValueError("Malformatted VCProofs program") # pragma: no cover
57
56
 
58
- def prove_keys(self, keys: list[str], tree: Optional[Program] = None) -> Program:
57
+ def prove_keys(self, keys: list[str], tree: Program | None = None) -> Program:
59
58
  if tree is None:
60
59
  tree = self.as_program()
61
60
 
@@ -177,7 +176,7 @@ class VCStore:
177
176
  ),
178
177
  )
179
178
 
180
- async def get_vc_record(self, launcher_id: bytes32) -> Optional[VCRecord]:
179
+ async def get_vc_record(self, launcher_id: bytes32) -> VCRecord | None:
181
180
  """
182
181
  Checks DB for VC with specified launcher_id and returns it.
183
182
  """
@@ -235,7 +234,7 @@ class VCStore:
235
234
  async with self.db_wrapper.writer_maybe_transaction() as conn:
236
235
  await (await conn.execute("DELETE FROM vc_records WHERE launcher_id=?", (launcher_id.hex(),))).close()
237
236
 
238
- async def get_vc_record_by_coin_id(self, coin_id: bytes32) -> Optional[VCRecord]:
237
+ async def get_vc_record_by_coin_id(self, coin_id: bytes32) -> VCRecord | None:
239
238
  async with self.db_wrapper.reader_no_transaction() as conn:
240
239
  cursor = await conn.execute("SELECT * from vc_records WHERE coin_id=? LIMIT 1000", (coin_id.hex(),))
241
240
  row = await cursor.fetchone()
@@ -250,7 +249,7 @@ class VCStore:
250
249
  "INSERT OR IGNORE INTO vc_proofs VALUES(?, ?)", (vc_proofs.root().hex(), bytes(vc_proofs.as_program()))
251
250
  )
252
251
 
253
- async def get_proofs_for_root(self, root: bytes32) -> Optional[VCProofs]:
252
+ async def get_proofs_for_root(self, root: bytes32) -> VCProofs | None:
254
253
  async with self.db_wrapper.reader_no_transaction() as conn:
255
254
  cursor = await conn.execute("SELECT proofs FROM vc_proofs WHERE root=?", (root.hex(),))
256
255
  row = await cursor.fetchone()
@@ -1,9 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- import time
5
4
  import traceback
6
- from typing import TYPE_CHECKING, Optional, TypeVar, Union
5
+ from typing import TYPE_CHECKING, TypeVar
7
6
 
8
7
  from chia_rs import CoinSpend, CoinState, G1Element, G2Element
9
8
  from chia_rs.sized_bytes import bytes32
@@ -17,7 +16,6 @@ from chia.types.blockchain_format.serialized_program import SerializedProgram
17
16
  from chia.types.coin_spend import make_spend
18
17
  from chia.util.casts import int_to_bytes
19
18
  from chia.util.hash import std_hash
20
- from chia.util.streamable import Streamable
21
19
  from chia.wallet.conditions import (
22
20
  AssertCoinAnnouncement,
23
21
  Condition,
@@ -25,16 +23,12 @@ from chia.wallet.conditions import (
25
23
  CreateCoinAnnouncement,
26
24
  CreatePuzzleAnnouncement,
27
25
  UnknownCondition,
28
- parse_timelock_info,
29
26
  )
30
27
  from chia.wallet.did_wallet.did_wallet import DIDWallet
31
28
  from chia.wallet.puzzle_drivers import Solver
32
29
  from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import solution_for_delegated_puzzle
33
30
  from chia.wallet.trading.offer import Offer
34
- from chia.wallet.transaction_record import TransactionRecord
35
31
  from chia.wallet.uncurried_puzzle import uncurry_puzzle
36
- from chia.wallet.util.compute_memos import compute_memos
37
- from chia.wallet.util.transaction_type import TransactionType
38
32
  from chia.wallet.util.wallet_sync_utils import fetch_coin_spend_for_coin_state
39
33
  from chia.wallet.util.wallet_types import WalletType
40
34
  from chia.wallet.vc_wallet.cr_cat_drivers import CRCAT, CRCATSpend, ProofsChecker, construct_pending_approval_state
@@ -65,7 +59,7 @@ class VCWallet:
65
59
  cls: type[_T_VCWallet],
66
60
  wallet_state_manager: WalletStateManager,
67
61
  wallet: Wallet,
68
- name: Optional[str] = None,
62
+ name: str | None = None,
69
63
  ) -> _T_VCWallet:
70
64
  name = "VCWallet" if name is None else name
71
65
  new_wallet: _T_VCWallet = await cls.create(
@@ -83,7 +77,7 @@ class VCWallet:
83
77
  wallet_state_manager: WalletStateManager,
84
78
  wallet: Wallet,
85
79
  wallet_info: WalletInfo,
86
- name: Optional[str] = None,
80
+ name: str | None = None,
87
81
  ) -> _T_VCWallet:
88
82
  self = cls()
89
83
  self.wallet_state_manager = wallet_state_manager
@@ -100,16 +94,14 @@ class VCWallet:
100
94
  def id(self) -> uint32:
101
95
  return self.wallet_info.id
102
96
 
103
- async def coin_added(
104
- self, coin: Coin, height: uint32, peer: WSChiaConnection, coin_data: Optional[Streamable]
105
- ) -> None:
97
+ async def coin_added(self, coin: Coin, height: uint32, peer: WSChiaConnection, coin_data: object | None) -> None:
106
98
  """
107
99
  An unspent coin has arrived to our wallet. Get the parent spend to construct the current VerifiedCredential
108
100
  representation of the coin and add it to the DB if it's the newest version of the singleton.
109
101
  """
110
102
  # TODO Use coin_data instead of calling peer API
111
103
  wallet_node = self.wallet_state_manager.wallet_node
112
- coin_states: Optional[list[CoinState]] = await wallet_node.get_coin_state([coin.parent_coin_info], peer=peer)
104
+ coin_states: list[CoinState] | None = await wallet_node.get_coin_state([coin.parent_coin_info], peer=peer)
113
105
  if coin_states is None:
114
106
  self.log.error(
115
107
  f"Cannot find parent coin of the verified credential coin: {coin.name().hex()}"
@@ -142,7 +134,7 @@ class VCWallet:
142
134
  :param height:
143
135
  :return:
144
136
  """
145
- vc_record: Optional[VCRecord] = await self.store.get_vc_record_by_coin_id(coin.name())
137
+ vc_record: VCRecord | None = await self.store.get_vc_record_by_coin_id(coin.name())
146
138
  if vc_record is not None:
147
139
  await self.store.delete_vc_record(vc_record.vc.launcher_id)
148
140
  self.wallet_state_manager.state_changed(
@@ -162,7 +154,7 @@ class VCWallet:
162
154
  self,
163
155
  provider_did: bytes32,
164
156
  action_scope: WalletActionScope,
165
- inner_puzzle_hash: Optional[bytes32] = None,
157
+ inner_puzzle_hash: bytes32 | None = None,
166
158
  fee: uint64 = uint64(0),
167
159
  extra_conditions: tuple[Condition, ...] = tuple(),
168
160
  ) -> VCRecord:
@@ -196,35 +188,25 @@ class VCWallet:
196
188
  extra_conditions=extra_conditions,
197
189
  )
198
190
  for dpuz, coin in zip(dpuzs, coins):
199
- solution = solution_for_delegated_puzzle(dpuz, Program.to(None))
191
+ solution = solution_for_delegated_puzzle(dpuz, Program.NIL)
200
192
  puzzle = await self.standard_wallet.puzzle_for_puzzle_hash(coin.puzzle_hash)
201
193
  coin_spends.append(make_spend(coin, puzzle, solution))
202
194
  spend_bundle = WalletSpendBundle(coin_spends, G2Element())
203
- now = uint64(time.time())
204
195
  add_list: list[Coin] = list(spend_bundle.additions())
205
196
  rem_list: list[Coin] = list(spend_bundle.removals())
206
197
  vc_record: VCRecord = VCRecord(vc, uint32(0))
207
198
  async with action_scope.use() as interface:
208
199
  interface.side_effects.transactions.append(
209
- TransactionRecord(
210
- confirmed_at_height=uint32(0),
211
- created_at_time=now,
212
- to_puzzle_hash=inner_puzzle_hash,
213
- to_address=self.wallet_state_manager.encode_puzzle_hash(inner_puzzle_hash),
200
+ self.wallet_state_manager.new_outgoing_transaction(
201
+ wallet_id=uint32(1),
202
+ puzzle_hash=inner_puzzle_hash,
214
203
  amount=uint64(1),
215
- fee_amount=uint64(fee),
216
- confirmed=False,
217
- sent=uint32(0),
204
+ fee=fee,
218
205
  spend_bundle=spend_bundle,
219
206
  additions=add_list,
220
207
  removals=rem_list,
221
- wallet_id=uint32(1),
222
- sent_to=[],
223
- trade_id=None,
224
- type=uint32(TransactionType.OUTGOING_TX.value),
225
208
  name=spend_bundle.name(),
226
- memos=compute_memos(spend_bundle),
227
- valid_times=parse_timelock_info(extra_conditions),
209
+ extra_conditions=extra_conditions,
228
210
  )
229
211
  )
230
212
 
@@ -236,17 +218,17 @@ class VCWallet:
236
218
  puzzle_hashes: list[bytes32],
237
219
  action_scope: WalletActionScope,
238
220
  fee: uint64 = uint64(0),
239
- coins: Optional[set[Coin]] = None,
240
- memos: Optional[list[list[bytes]]] = None,
221
+ coins: set[Coin] | None = None,
222
+ memos: list[list[bytes]] | None = None,
241
223
  extra_conditions: tuple[Condition, ...] = tuple(),
242
224
  **kwargs: Unpack[GSTOptionalArgs],
243
225
  ) -> None:
244
- new_proof_hash: Optional[bytes32] = kwargs.get(
226
+ new_proof_hash: bytes32 | None = kwargs.get(
245
227
  "new_proof_hash", None
246
228
  ) # Requires that this key possesses the DID to update the specified VC
247
- provider_inner_puzhash: Optional[bytes32] = kwargs.get("provider_inner_puzhash", None)
248
- self_revoke: Optional[bool] = kwargs.get("self_revoke", False)
249
- potential_vc_id: Optional[bytes32] = kwargs.get("vc_id", None)
229
+ provider_inner_puzhash: bytes32 | None = kwargs.get("provider_inner_puzhash", None)
230
+ self_revoke: bool | None = kwargs.get("self_revoke", False)
231
+ potential_vc_id: bytes32 | None = kwargs.get("vc_id", None)
250
232
  """
251
233
  Entry point for two standard actions:
252
234
  - Cycle the singleton and make an announcement authorizing something
@@ -340,29 +322,19 @@ class VCWallet:
340
322
  ) # pragma: no cover
341
323
  add_list: list[Coin] = list(spend_bundle.additions())
342
324
  rem_list: list[Coin] = list(spend_bundle.removals())
343
- now = uint64(time.time())
344
325
 
345
326
  async with action_scope.use() as interface:
346
327
  interface.side_effects.transactions.append(
347
- TransactionRecord(
348
- confirmed_at_height=uint32(0),
349
- created_at_time=now,
350
- to_puzzle_hash=puzzle_hashes[0],
351
- to_address=self.wallet_state_manager.encode_puzzle_hash(puzzle_hashes[0]),
328
+ self.wallet_state_manager.new_outgoing_transaction(
329
+ wallet_id=self.id(),
330
+ puzzle_hash=puzzle_hashes[0],
352
331
  amount=uint64(1),
353
- fee_amount=uint64(fee),
354
- confirmed=False,
355
- sent=uint32(0),
332
+ fee=fee,
356
333
  spend_bundle=spend_bundle,
357
334
  additions=add_list,
358
335
  removals=rem_list,
359
- wallet_id=self.id(),
360
- sent_to=[],
361
- trade_id=None,
362
- type=uint32(TransactionType.OUTGOING_TX.value),
363
336
  name=spend_bundle.name(),
364
- memos=compute_memos(spend_bundle),
365
- valid_times=parse_timelock_info(extra_conditions),
337
+ extra_conditions=extra_conditions,
366
338
  )
367
339
  )
368
340
 
@@ -408,7 +380,7 @@ class VCWallet:
408
380
  if fee > 0:
409
381
  coins.update(await self.standard_wallet.select_coins(fee, action_scope))
410
382
  sorted_coins: list[Coin] = sorted(coins, key=Coin.name)
411
- sorted_coin_list: list[list[Union[bytes32, uint64]]] = [coin_as_list(c) for c in sorted_coins]
383
+ sorted_coin_list: list[list[bytes32 | uint64]] = [coin_as_list(c) for c in sorted_coins]
412
384
  nonce: bytes32 = SerializedProgram.to(sorted_coin_list).get_tree_hash()
413
385
  vc_announcement: AssertCoinAnnouncement = AssertCoinAnnouncement(asserted_id=vc.coin.name(), asserted_msg=nonce)
414
386
 
@@ -497,7 +469,7 @@ class VCWallet:
497
469
  bytes32(cc.at("rf").as_atom()) == crcat_spend.crcat.inner_puzzle_hash
498
470
  )
499
471
  or ( # it's going to the pending state
500
- cc.at("rrr") != Program.to(None)
472
+ cc.at("rrr") != Program.NIL
501
473
  and cc.at("rrrf").atom is None
502
474
  and bytes32(cc.at("rf").as_atom())
503
475
  == construct_pending_approval_state(
@@ -542,7 +514,7 @@ class VCWallet:
542
514
  solution=Program.from_serialized(spend_to_fix.solution)
543
515
  .replace(
544
516
  ff=coin_args[coin_name][0],
545
- frf=Program.to(None), # not general
517
+ frf=Program.NIL, # not general
546
518
  frrf=bytes32.from_hexstr(coin_args[coin_name][2]),
547
519
  frrrf=bytes32.from_hexstr(coin_args[coin_name][3]),
548
520
  frrrrf=bytes32.from_hexstr(coin_args[coin_name][4]),
@@ -604,7 +576,7 @@ class VCWallet:
604
576
  for rec in vc_records:
605
577
  if rec.vc.proof_hash is None:
606
578
  continue # pragma: no cover
607
- vc_proofs: Optional[VCProofs] = await self.store.get_proofs_for_root(rec.vc.proof_hash)
579
+ vc_proofs: VCProofs | None = await self.store.get_proofs_for_root(rec.vc.proof_hash)
608
580
  if vc_proofs is None:
609
581
  continue # pragma: no cover
610
582
  if all(proof in vc_proofs.key_value_pairs for proof in proofs):
@@ -612,7 +584,7 @@ class VCWallet:
612
584
  raise ValueError(f"No authorized VC has the correct proofs: {proofs}") # pragma: no cover
613
585
 
614
586
  async def proof_of_inclusions_for_root_and_keys(self, root: bytes32, keys: list[str]) -> Program:
615
- vc_proofs: Optional[VCProofs] = await self.store.get_proofs_for_root(root)
587
+ vc_proofs: VCProofs | None = await self.store.get_proofs_for_root(root)
616
588
  if vc_proofs is None:
617
589
  raise RuntimeError(f"No proofs exist for VC root: {root.hex()}") # pragma: no cover
618
590
  else:
@@ -625,22 +597,22 @@ class VCWallet:
625
597
  ) -> set[Coin]:
626
598
  raise RuntimeError("VCWallet does not support select_coins()") # pragma: no cover
627
599
 
628
- async def get_confirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
600
+ async def get_confirmed_balance(self, record_list: set[WalletCoinRecord] | None = None) -> uint128:
629
601
  """The VC wallet doesn't really have a balance."""
630
602
  return uint128(0) # pragma: no cover
631
603
 
632
- async def get_unconfirmed_balance(self, record_list: Optional[set[WalletCoinRecord]] = None) -> uint128:
604
+ async def get_unconfirmed_balance(self, record_list: set[WalletCoinRecord] | None = None) -> uint128:
633
605
  """The VC wallet doesn't really have a balance."""
634
606
  return uint128(0) # pragma: no cover
635
607
 
636
- async def get_spendable_balance(self, unspent_records: Optional[set[WalletCoinRecord]] = None) -> uint128:
608
+ async def get_spendable_balance(self, unspent_records: set[WalletCoinRecord] | None = None) -> uint128:
637
609
  """The VC wallet doesn't really have a balance."""
638
610
  return uint128(0) # pragma: no cover
639
611
 
640
612
  async def get_pending_change_balance(self) -> uint64:
641
613
  return uint64(0) # pragma: no cover
642
614
 
643
- async def get_max_send_amount(self, records: Optional[set[WalletCoinRecord]] = None) -> uint128:
615
+ async def get_max_send_amount(self, records: set[WalletCoinRecord] | None = None) -> uint128:
644
616
  """This is the confirmed balance, which we set to 0 as the VC wallet doesn't have one."""
645
617
  return uint128(0) # pragma: no cover
646
618