chia-blockchain 2.5.0rc1__py3-none-any.whl → 2.5.1__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 (637) hide show
  1. chia/_tests/README.md +1 -1
  2. chia/_tests/blockchain/blockchain_test_utils.py +24 -26
  3. chia/_tests/blockchain/test_augmented_chain.py +6 -8
  4. chia/_tests/blockchain/test_blockchain.py +409 -307
  5. chia/_tests/blockchain/test_blockchain_transactions.py +56 -75
  6. chia/_tests/blockchain/test_build_chains.py +11 -13
  7. chia/_tests/blockchain/test_get_block_generator.py +8 -8
  8. chia/_tests/blockchain/test_lookup_fork_chain.py +3 -4
  9. chia/_tests/build-init-files.py +3 -4
  10. chia/_tests/build-job-matrix.py +9 -9
  11. chia/_tests/check_sql_statements.py +2 -3
  12. chia/_tests/clvm/benchmark_costs.py +1 -1
  13. chia/_tests/clvm/coin_store.py +7 -5
  14. chia/_tests/clvm/test_chialisp_deserialization.py +8 -8
  15. chia/_tests/clvm/test_condition_codes.py +2 -2
  16. chia/_tests/clvm/test_curry_and_treehash.py +2 -4
  17. chia/_tests/clvm/test_message_conditions.py +184 -0
  18. chia/_tests/clvm/test_puzzle_compression.py +1 -2
  19. chia/_tests/clvm/test_puzzle_drivers.py +3 -3
  20. chia/_tests/clvm/test_puzzles.py +13 -18
  21. chia/_tests/clvm/test_singletons.py +17 -17
  22. chia/_tests/clvm/test_spend_sim.py +7 -7
  23. chia/_tests/cmds/cmd_test_utils.py +42 -45
  24. chia/_tests/cmds/conftest.py +2 -2
  25. chia/_tests/cmds/test_click_types.py +21 -16
  26. chia/_tests/cmds/test_cmd_framework.py +255 -35
  27. chia/_tests/cmds/test_cmds_util.py +2 -2
  28. chia/_tests/cmds/test_daemon.py +3 -3
  29. chia/_tests/cmds/test_dev_gh.py +131 -0
  30. chia/_tests/cmds/test_farm_cmd.py +1 -2
  31. chia/_tests/cmds/test_show.py +6 -6
  32. chia/_tests/cmds/test_tx_config_args.py +2 -1
  33. chia/_tests/cmds/wallet/test_dao.py +23 -23
  34. chia/_tests/cmds/wallet/test_did.py +29 -29
  35. chia/_tests/cmds/wallet/test_nft.py +24 -23
  36. chia/_tests/cmds/wallet/test_notifications.py +8 -8
  37. chia/_tests/cmds/wallet/test_tx_decorators.py +3 -3
  38. chia/_tests/cmds/wallet/test_vcs.py +97 -73
  39. chia/_tests/cmds/wallet/test_wallet.py +74 -75
  40. chia/_tests/cmds/wallet/test_wallet_check.py +5 -7
  41. chia/_tests/conftest.py +153 -38
  42. chia/_tests/connection_utils.py +7 -6
  43. chia/_tests/core/cmds/test_beta.py +3 -3
  44. chia/_tests/core/cmds/test_keys.py +6 -6
  45. chia/_tests/core/cmds/test_wallet.py +3 -3
  46. chia/_tests/core/consensus/test_block_creation.py +3 -5
  47. chia/_tests/core/custom_types/test_coin.py +1 -3
  48. chia/_tests/core/custom_types/test_spend_bundle.py +3 -4
  49. chia/_tests/core/daemon/test_daemon.py +58 -58
  50. chia/_tests/core/daemon/test_keychain_proxy.py +2 -1
  51. chia/_tests/core/data_layer/conftest.py +4 -3
  52. chia/_tests/core/data_layer/test_data_cli.py +1 -2
  53. chia/_tests/core/data_layer/test_data_layer.py +5 -5
  54. chia/_tests/core/data_layer/test_data_layer_util.py +8 -9
  55. chia/_tests/core/data_layer/test_data_rpc.py +75 -93
  56. chia/_tests/core/data_layer/test_data_store.py +38 -37
  57. chia/_tests/core/data_layer/test_data_store_schema.py +11 -11
  58. chia/_tests/core/data_layer/util.py +11 -10
  59. chia/_tests/core/farmer/test_farmer_api.py +6 -4
  60. chia/_tests/core/full_node/full_sync/test_full_sync.py +5 -10
  61. chia/_tests/core/full_node/ram_db.py +2 -2
  62. chia/_tests/core/full_node/stores/test_block_store.py +113 -11
  63. chia/_tests/core/full_node/stores/test_coin_store.py +37 -28
  64. chia/_tests/core/full_node/stores/test_full_node_store.py +34 -30
  65. chia/_tests/core/full_node/stores/test_hint_store.py +3 -4
  66. chia/_tests/core/full_node/test_address_manager.py +2 -2
  67. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  68. chia/_tests/core/full_node/test_conditions.py +10 -12
  69. chia/_tests/core/full_node/test_full_node.py +2077 -1822
  70. chia/_tests/core/full_node/test_generator_tools.py +4 -4
  71. chia/_tests/core/full_node/test_hint_management.py +2 -2
  72. chia/_tests/core/full_node/test_performance.py +2 -5
  73. chia/_tests/core/full_node/test_subscriptions.py +4 -4
  74. chia/_tests/core/full_node/test_tx_processing_queue.py +5 -4
  75. chia/_tests/core/make_block_generator.py +5 -7
  76. chia/_tests/core/mempool/test_mempool.py +205 -208
  77. chia/_tests/core/mempool/test_mempool_fee_protocol.py +5 -5
  78. chia/_tests/core/mempool/test_mempool_item_queries.py +2 -4
  79. chia/_tests/core/mempool/test_mempool_manager.py +109 -80
  80. chia/_tests/core/mempool/test_mempool_performance.py +3 -4
  81. chia/_tests/core/mempool/test_singleton_fast_forward.py +12 -12
  82. chia/_tests/core/server/flood.py +6 -4
  83. chia/_tests/core/server/serve.py +10 -7
  84. chia/_tests/core/server/test_api_protocol.py +21 -0
  85. chia/_tests/core/server/test_capabilities.py +3 -5
  86. chia/_tests/core/server/test_dos.py +15 -16
  87. chia/_tests/core/server/test_loop.py +14 -10
  88. chia/_tests/core/server/test_node_discovery.py +1 -2
  89. chia/_tests/core/server/test_rate_limits.py +156 -44
  90. chia/_tests/core/server/test_server.py +8 -7
  91. chia/_tests/core/services/test_services.py +59 -37
  92. chia/_tests/core/ssl/test_ssl.py +5 -3
  93. chia/_tests/core/test_cost_calculation.py +5 -6
  94. chia/_tests/core/test_crawler.py +2 -2
  95. chia/_tests/core/test_db_conversion.py +5 -4
  96. chia/_tests/core/test_db_validation.py +6 -5
  97. chia/_tests/core/test_farmer_harvester_rpc.py +8 -7
  98. chia/_tests/core/test_filter.py +3 -5
  99. chia/_tests/core/test_full_node_rpc.py +64 -90
  100. chia/_tests/core/test_merkle_set.py +10 -10
  101. chia/_tests/core/test_program.py +2 -4
  102. chia/_tests/core/test_rpc_util.py +1 -2
  103. chia/_tests/core/test_seeder.py +124 -12
  104. chia/_tests/core/util/test_block_cache.py +5 -5
  105. chia/_tests/core/util/test_cached_bls.py +3 -3
  106. chia/_tests/core/util/test_config.py +13 -13
  107. chia/_tests/core/util/test_files.py +2 -2
  108. chia/_tests/core/util/test_jsonify.py +9 -9
  109. chia/_tests/core/util/test_keychain.py +13 -5
  110. chia/_tests/core/util/test_keyring_wrapper.py +6 -5
  111. chia/_tests/core/util/test_log_exceptions.py +3 -3
  112. chia/_tests/core/util/test_streamable.py +38 -38
  113. chia/_tests/db/test_db_wrapper.py +13 -12
  114. chia/_tests/environments/common.py +2 -2
  115. chia/_tests/environments/full_node.py +2 -2
  116. chia/_tests/environments/wallet.py +109 -48
  117. chia/_tests/farmer_harvester/test_farmer.py +35 -35
  118. chia/_tests/farmer_harvester/test_farmer_harvester.py +17 -17
  119. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  120. chia/_tests/farmer_harvester/test_third_party_harvesters.py +73 -46
  121. chia/_tests/fee_estimation/test_fee_estimation_integration.py +8 -8
  122. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +47 -47
  123. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +6 -7
  124. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +11 -11
  125. chia/_tests/generator/test_compression.py +13 -30
  126. chia/_tests/generator/test_generator_types.py +3 -3
  127. chia/_tests/generator/test_rom.py +7 -9
  128. chia/_tests/plot_sync/test_delta.py +2 -3
  129. chia/_tests/plot_sync/test_plot_sync.py +25 -24
  130. chia/_tests/plot_sync/test_receiver.py +9 -9
  131. chia/_tests/plot_sync/test_sender.py +1 -1
  132. chia/_tests/plot_sync/test_sync_simulated.py +27 -26
  133. chia/_tests/plot_sync/util.py +2 -1
  134. chia/_tests/plotting/test_plot_manager.py +54 -11
  135. chia/_tests/plotting/util.py +2 -3
  136. chia/_tests/pools/test_pool_cli_parsing.py +128 -0
  137. chia/_tests/pools/test_pool_cmdline.py +993 -15
  138. chia/_tests/pools/test_pool_config.py +3 -5
  139. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -11
  140. chia/_tests/pools/test_pool_rpc.py +203 -90
  141. chia/_tests/pools/test_pool_wallet.py +12 -8
  142. chia/_tests/pools/test_wallet_pool_store.py +3 -3
  143. chia/_tests/process_junit.py +16 -17
  144. chia/_tests/rpc/test_rpc_client.py +59 -2
  145. chia/_tests/rpc/test_rpc_server.py +183 -0
  146. chia/_tests/simulation/test_simulation.py +5 -5
  147. chia/_tests/simulation/test_simulator.py +8 -10
  148. chia/_tests/simulation/test_start_simulator.py +5 -4
  149. chia/_tests/timelord/test_new_peak.py +19 -19
  150. chia/_tests/tools/test_run_block.py +1 -2
  151. chia/_tests/tools/test_virtual_project.py +591 -0
  152. chia/_tests/util/benchmark_cost.py +9 -9
  153. chia/_tests/util/benchmarks.py +1 -2
  154. chia/_tests/util/blockchain.py +12 -11
  155. chia/_tests/util/blockchain_mock.py +15 -15
  156. chia/_tests/util/build_network_protocol_files.py +12 -12
  157. chia/_tests/util/db_connection.py +3 -2
  158. chia/_tests/util/full_sync.py +14 -6
  159. chia/_tests/util/gen_ssl_certs.py +4 -5
  160. chia/_tests/util/generator_tools_testing.py +5 -7
  161. chia/_tests/util/get_name_puzzle_conditions.py +52 -0
  162. chia/_tests/util/key_tool.py +2 -3
  163. chia/_tests/util/misc.py +59 -106
  164. chia/_tests/util/network_protocol_data.py +7 -9
  165. chia/_tests/util/protocol_messages_json.py +112 -111
  166. chia/_tests/util/rpc.py +3 -0
  167. chia/_tests/util/run_block.py +16 -16
  168. chia/_tests/util/setup_nodes.py +25 -23
  169. chia/{clvm → _tests/util}/spend_sim.py +59 -55
  170. chia/_tests/util/split_managers.py +12 -9
  171. chia/_tests/util/temp_file.py +1 -1
  172. chia/_tests/util/test_action_scope.py +2 -1
  173. chia/_tests/util/test_async_pool.py +8 -8
  174. chia/_tests/util/test_build_job_matrix.py +2 -3
  175. chia/_tests/util/test_condition_tools.py +4 -6
  176. chia/_tests/util/test_config.py +5 -5
  177. chia/_tests/util/test_dump_keyring.py +1 -1
  178. chia/_tests/util/test_full_block_utils.py +19 -11
  179. chia/_tests/util/test_limited_semaphore.py +4 -3
  180. chia/_tests/util/test_logging_filter.py +2 -3
  181. chia/_tests/util/test_misc.py +29 -28
  182. chia/_tests/util/test_network.py +32 -31
  183. chia/_tests/util/test_network_protocol_files.py +2 -3
  184. chia/_tests/util/test_network_protocol_json.py +1 -0
  185. chia/_tests/util/test_network_protocol_test.py +18 -19
  186. chia/_tests/util/test_paginator.py +3 -4
  187. chia/_tests/util/test_pprint.py +1 -1
  188. chia/_tests/util/test_priority_mutex.py +18 -17
  189. chia/_tests/util/test_recursive_replace.py +2 -2
  190. chia/_tests/util/test_testnet_overrides.py +3 -3
  191. chia/_tests/util/test_timing.py +1 -1
  192. chia/_tests/util/test_trusted_peer.py +2 -2
  193. chia/_tests/util/time_out_assert.py +43 -6
  194. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +13 -13
  195. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -1
  196. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +117 -29
  197. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +15 -15
  198. chia/_tests/wallet/cat_wallet/test_trades.py +50 -28
  199. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -5
  200. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +6 -6
  201. chia/_tests/wallet/clawback/test_clawback_metadata.py +1 -2
  202. chia/_tests/wallet/conftest.py +135 -74
  203. chia/_tests/wallet/dao_wallet/test_dao_clvm.py +25 -17
  204. chia/_tests/wallet/dao_wallet/test_dao_wallets.py +75 -75
  205. chia/_tests/wallet/db_wallet/test_db_graftroot.py +10 -12
  206. chia/_tests/wallet/db_wallet/test_dl_offers.py +6 -6
  207. chia/_tests/wallet/db_wallet/test_dl_wallet.py +18 -18
  208. chia/_tests/wallet/did_wallet/test_did.py +1277 -474
  209. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +12 -11
  210. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +115 -105
  211. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +6 -7
  212. chia/_tests/wallet/nft_wallet/test_nft_offers.py +16 -16
  213. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +3 -3
  214. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +38 -12
  215. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +1 -1
  216. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +31 -33
  217. chia/_tests/wallet/rpc/test_wallet_rpc.py +218 -171
  218. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +36 -37
  219. chia/_tests/wallet/sync/test_wallet_sync.py +241 -78
  220. chia/_tests/wallet/test_address_type.py +20 -20
  221. chia/_tests/wallet/test_clvm_streamable.py +5 -5
  222. chia/_tests/wallet/test_coin_management.py +354 -0
  223. chia/_tests/wallet/test_coin_selection.py +34 -35
  224. chia/_tests/wallet/test_conditions.py +28 -16
  225. chia/_tests/wallet/test_debug_spend_bundle.py +156 -14
  226. chia/_tests/wallet/test_new_wallet_protocol.py +29 -31
  227. chia/_tests/wallet/test_nft_store.py +1 -2
  228. chia/_tests/wallet/test_notifications.py +2 -2
  229. chia/_tests/wallet/test_offer_parsing_performance.py +1 -1
  230. chia/_tests/wallet/test_puzzle_store.py +2 -3
  231. chia/_tests/wallet/test_sign_coin_spends.py +3 -3
  232. chia/_tests/wallet/test_signer_protocol.py +33 -34
  233. chia/_tests/wallet/test_singleton_lifecycle_fast.py +29 -29
  234. chia/_tests/wallet/test_taproot.py +1 -1
  235. chia/_tests/wallet/test_transaction_store.py +23 -19
  236. chia/_tests/wallet/test_util.py +36 -32
  237. chia/_tests/wallet/test_wallet.py +37 -37
  238. chia/_tests/wallet/test_wallet_action_scope.py +8 -8
  239. chia/_tests/wallet/test_wallet_blockchain.py +4 -6
  240. chia/_tests/wallet/test_wallet_coin_store.py +34 -34
  241. chia/_tests/wallet/test_wallet_node.py +69 -72
  242. chia/_tests/wallet/test_wallet_retry.py +3 -3
  243. chia/_tests/wallet/test_wallet_state_manager.py +12 -5
  244. chia/_tests/wallet/test_wallet_trade_store.py +2 -2
  245. chia/_tests/wallet/test_wallet_utils.py +5 -4
  246. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -3
  247. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +18 -18
  248. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +69 -40
  249. chia/_tests/wallet/wallet_block_tools.py +27 -27
  250. chia/_tests/weight_proof/test_weight_proof.py +30 -30
  251. chia/apis.py +19 -0
  252. chia/cmds/beta.py +8 -7
  253. chia/cmds/beta_funcs.py +15 -11
  254. chia/cmds/check_wallet_db.py +29 -27
  255. chia/cmds/chia.py +17 -9
  256. chia/cmds/cmd_classes.py +87 -79
  257. chia/cmds/cmd_helpers.py +242 -0
  258. chia/cmds/cmds_util.py +56 -66
  259. chia/cmds/coin_funcs.py +168 -153
  260. chia/cmds/coins.py +156 -194
  261. chia/cmds/configure.py +4 -3
  262. chia/cmds/dao.py +89 -33
  263. chia/cmds/dao_funcs.py +55 -33
  264. chia/cmds/data.py +7 -6
  265. chia/cmds/data_funcs.py +26 -21
  266. chia/cmds/db.py +4 -3
  267. chia/cmds/db_backup_func.py +2 -2
  268. chia/cmds/db_upgrade_func.py +3 -3
  269. chia/cmds/db_validate_func.py +2 -2
  270. chia/cmds/dev.py +2 -0
  271. chia/cmds/farm.py +18 -5
  272. chia/cmds/farm_funcs.py +17 -24
  273. chia/cmds/gh.py +275 -0
  274. chia/cmds/init.py +4 -11
  275. chia/cmds/init_funcs.py +9 -9
  276. chia/cmds/installers.py +5 -3
  277. chia/cmds/keys.py +56 -39
  278. chia/cmds/keys_funcs.py +30 -31
  279. chia/cmds/netspace.py +6 -3
  280. chia/cmds/netspace_funcs.py +3 -2
  281. chia/cmds/param_types.py +16 -6
  282. chia/cmds/passphrase.py +8 -7
  283. chia/cmds/passphrase_funcs.py +7 -61
  284. chia/cmds/peer.py +2 -1
  285. chia/cmds/peer_funcs.py +5 -5
  286. chia/cmds/plotnft.py +207 -153
  287. chia/cmds/plotnft_funcs.py +205 -174
  288. chia/cmds/plots.py +14 -6
  289. chia/cmds/plotters.py +2 -1
  290. chia/cmds/rpc.py +48 -28
  291. chia/cmds/show.py +2 -1
  292. chia/cmds/show_funcs.py +7 -6
  293. chia/cmds/signer.py +50 -58
  294. chia/cmds/sim.py +22 -14
  295. chia/cmds/sim_funcs.py +11 -11
  296. chia/cmds/start.py +3 -3
  297. chia/cmds/start_funcs.py +9 -12
  298. chia/cmds/stop.py +4 -3
  299. chia/cmds/units.py +1 -3
  300. chia/cmds/wallet.py +252 -96
  301. chia/cmds/wallet_funcs.py +217 -143
  302. chia/consensus/block_body_validation.py +133 -86
  303. chia/consensus/block_creation.py +42 -21
  304. chia/consensus/block_header_validation.py +32 -37
  305. chia/consensus/block_record.py +1 -2
  306. chia/consensus/blockchain.py +167 -180
  307. chia/consensus/blockchain_interface.py +10 -10
  308. chia/consensus/constants.py +2 -2
  309. chia/consensus/default_constants.py +3 -4
  310. chia/consensus/difficulty_adjustment.py +5 -5
  311. chia/consensus/find_fork_point.py +5 -5
  312. chia/consensus/full_block_to_block_record.py +4 -4
  313. chia/consensus/get_block_challenge.py +2 -2
  314. chia/consensus/get_block_generator.py +4 -3
  315. chia/consensus/multiprocess_validation.py +207 -304
  316. chia/consensus/vdf_info_computation.py +3 -3
  317. chia/daemon/client.py +46 -27
  318. chia/daemon/keychain_proxy.py +10 -9
  319. chia/daemon/keychain_server.py +18 -18
  320. chia/daemon/server.py +103 -113
  321. chia/daemon/windows_signal.py +2 -2
  322. chia/data_layer/data_layer.py +64 -76
  323. chia/data_layer/data_layer_api.py +8 -0
  324. chia/data_layer/data_layer_errors.py +3 -3
  325. chia/data_layer/data_layer_server.py +2 -2
  326. chia/data_layer/data_layer_util.py +71 -71
  327. chia/data_layer/data_layer_wallet.py +63 -67
  328. chia/data_layer/data_store.py +72 -72
  329. chia/data_layer/dl_wallet_store.py +10 -10
  330. chia/data_layer/download_data.py +5 -5
  331. chia/data_layer/s3_plugin_service.py +9 -9
  332. chia/data_layer/util/benchmark.py +0 -1
  333. chia/data_layer/util/plugin.py +2 -3
  334. chia/farmer/farmer.py +46 -43
  335. chia/farmer/farmer_api.py +27 -21
  336. chia/full_node/block_height_map.py +6 -6
  337. chia/full_node/block_store.py +41 -35
  338. chia/full_node/coin_store.py +42 -41
  339. chia/full_node/fee_estimate.py +2 -2
  340. chia/full_node/fee_estimation.py +1 -2
  341. chia/full_node/fee_history.py +5 -6
  342. chia/full_node/fee_tracker.py +24 -24
  343. chia/full_node/full_node.py +574 -300
  344. chia/full_node/full_node_api.py +181 -130
  345. chia/full_node/full_node_store.py +43 -43
  346. chia/full_node/hint_management.py +4 -4
  347. chia/full_node/hint_store.py +9 -10
  348. chia/full_node/mempool.py +25 -19
  349. chia/full_node/mempool_check_conditions.py +11 -42
  350. chia/full_node/mempool_manager.py +48 -53
  351. chia/full_node/pending_tx_cache.py +9 -9
  352. chia/full_node/subscriptions.py +23 -24
  353. chia/full_node/sync_store.py +8 -7
  354. chia/full_node/tx_processing_queue.py +3 -3
  355. chia/full_node/util/__init__.py +0 -0
  356. chia/full_node/weight_proof.py +79 -78
  357. chia/harvester/harvester.py +9 -8
  358. chia/harvester/harvester_api.py +19 -13
  359. chia/introducer/introducer.py +7 -5
  360. chia/introducer/introducer_api.py +9 -3
  361. chia/legacy/keyring.py +6 -5
  362. chia/plot_sync/delta.py +8 -8
  363. chia/plot_sync/receiver.py +12 -11
  364. chia/plot_sync/sender.py +15 -12
  365. chia/plotters/bladebit.py +12 -12
  366. chia/plotters/chiapos.py +2 -2
  367. chia/plotters/madmax.py +8 -8
  368. chia/plotters/plotters.py +6 -6
  369. chia/plotters/plotters_util.py +6 -4
  370. chia/plotting/cache.py +8 -7
  371. chia/plotting/check_plots.py +8 -8
  372. chia/plotting/create_plots.py +6 -6
  373. chia/plotting/manager.py +22 -22
  374. chia/plotting/util.py +31 -19
  375. chia/pools/pool_config.py +7 -7
  376. chia/pools/pool_puzzles.py +16 -16
  377. chia/pools/pool_wallet.py +64 -57
  378. chia/pools/pool_wallet_info.py +3 -3
  379. chia/protocols/full_node_protocol.py +3 -3
  380. chia/protocols/harvester_protocol.py +12 -12
  381. chia/protocols/introducer_protocol.py +1 -2
  382. chia/protocols/protocol_message_types.py +4 -4
  383. chia/protocols/protocol_state_machine.py +2 -2
  384. chia/protocols/protocol_timing.py +1 -0
  385. chia/protocols/shared_protocol.py +3 -3
  386. chia/protocols/timelord_protocol.py +2 -2
  387. chia/protocols/wallet_protocol.py +33 -33
  388. chia/rpc/crawler_rpc_api.py +12 -7
  389. chia/rpc/data_layer_rpc_api.py +49 -44
  390. chia/rpc/data_layer_rpc_client.py +41 -41
  391. chia/rpc/data_layer_rpc_util.py +7 -11
  392. chia/rpc/farmer_rpc_api.py +32 -27
  393. chia/rpc/farmer_rpc_client.py +14 -14
  394. chia/rpc/full_node_rpc_api.py +53 -48
  395. chia/rpc/full_node_rpc_client.py +30 -30
  396. chia/rpc/harvester_rpc_api.py +16 -11
  397. chia/rpc/harvester_rpc_client.py +6 -6
  398. chia/rpc/rpc_client.py +34 -14
  399. chia/rpc/rpc_server.py +117 -43
  400. chia/rpc/timelord_rpc_api.py +9 -4
  401. chia/rpc/util.py +11 -211
  402. chia/rpc/wallet_request_types.py +276 -60
  403. chia/rpc/wallet_rpc_api.py +563 -399
  404. chia/rpc/wallet_rpc_client.py +220 -250
  405. chia/seeder/crawl_store.py +6 -8
  406. chia/seeder/crawler.py +23 -36
  407. chia/seeder/crawler_api.py +28 -22
  408. chia/seeder/dns_server.py +99 -50
  409. chia/seeder/start_crawler.py +13 -9
  410. chia/server/address_manager.py +19 -19
  411. chia/server/address_manager_store.py +17 -17
  412. chia/server/api_protocol.py +106 -1
  413. chia/server/capabilities.py +3 -3
  414. chia/server/chia_policy.py +17 -16
  415. chia/server/introducer_peers.py +3 -3
  416. chia/server/node_discovery.py +34 -38
  417. chia/server/rate_limit_numbers.py +26 -16
  418. chia/server/rate_limits.py +67 -27
  419. chia/server/server.py +52 -31
  420. chia/server/signal_handlers.py +6 -3
  421. chia/server/ssl_context.py +5 -5
  422. chia/server/start_data_layer.py +37 -23
  423. chia/server/start_farmer.py +28 -16
  424. chia/server/start_full_node.py +29 -23
  425. chia/server/start_harvester.py +28 -15
  426. chia/server/start_introducer.py +27 -15
  427. chia/server/start_service.py +17 -29
  428. chia/server/start_timelord.py +25 -18
  429. chia/server/start_wallet.py +22 -18
  430. chia/server/upnp.py +4 -3
  431. chia/server/ws_connection.py +68 -54
  432. chia/simulator/add_blocks_in_batches.py +54 -0
  433. chia/simulator/block_tools.py +65 -64
  434. chia/simulator/full_node_simulator.py +66 -74
  435. chia/simulator/setup_services.py +10 -9
  436. chia/simulator/simulator_full_node_rpc_api.py +12 -14
  437. chia/simulator/simulator_full_node_rpc_client.py +3 -5
  438. chia/simulator/simulator_test_tools.py +8 -7
  439. chia/simulator/socket.py +1 -4
  440. chia/simulator/ssl_certs.py +5 -5
  441. chia/simulator/ssl_certs_1.py +2 -4
  442. chia/simulator/ssl_certs_10.py +2 -4
  443. chia/simulator/ssl_certs_2.py +2 -4
  444. chia/simulator/ssl_certs_3.py +2 -4
  445. chia/simulator/ssl_certs_4.py +2 -4
  446. chia/simulator/ssl_certs_5.py +2 -4
  447. chia/simulator/ssl_certs_6.py +2 -4
  448. chia/simulator/ssl_certs_7.py +2 -4
  449. chia/simulator/ssl_certs_8.py +2 -4
  450. chia/simulator/ssl_certs_9.py +2 -4
  451. chia/simulator/start_simulator.py +14 -6
  452. chia/simulator/wallet_tools.py +21 -20
  453. chia/ssl/create_ssl.py +11 -11
  454. chia/timelord/iters_from_block.py +2 -2
  455. chia/timelord/timelord.py +57 -33
  456. chia/timelord/timelord_api.py +12 -6
  457. chia/timelord/timelord_launcher.py +10 -8
  458. chia/timelord/timelord_state.py +5 -5
  459. chia/types/block_protocol.py +2 -2
  460. chia/types/blockchain_format/coin.py +3 -3
  461. chia/types/blockchain_format/program.py +17 -18
  462. chia/types/blockchain_format/tree_hash.py +9 -9
  463. chia/types/coin_spend.py +8 -8
  464. chia/types/condition_with_args.py +1 -2
  465. chia/types/eligible_coin_spends.py +16 -15
  466. chia/types/generator_types.py +1 -2
  467. chia/types/internal_mempool_item.py +1 -2
  468. chia/types/mempool_item.py +7 -7
  469. chia/types/mempool_submission_status.py +2 -2
  470. chia/types/peer_info.py +1 -1
  471. chia/types/spend_bundle.py +1 -2
  472. chia/types/transaction_queue_entry.py +2 -2
  473. chia/types/unfinished_header_block.py +2 -2
  474. chia/types/validation_state.py +14 -0
  475. chia/types/weight_proof.py +5 -6
  476. chia/util/action_scope.py +8 -8
  477. chia/util/async_pool.py +6 -4
  478. chia/util/augmented_chain.py +13 -9
  479. chia/util/batches.py +5 -2
  480. chia/util/bech32m.py +14 -11
  481. chia/util/beta_metrics.py +5 -4
  482. chia/util/block_cache.py +5 -5
  483. chia/util/byte_types.py +2 -0
  484. chia/util/check_fork_next_block.py +3 -2
  485. chia/util/chia_logging.py +41 -21
  486. chia/util/collection.py +3 -3
  487. chia/util/condition_tools.py +18 -18
  488. chia/util/config.py +26 -25
  489. chia/util/cpu.py +2 -0
  490. chia/util/db_synchronous.py +2 -0
  491. chia/util/db_version.py +2 -0
  492. chia/util/db_wrapper.py +13 -10
  493. chia/util/default_root.py +17 -0
  494. chia/util/dump_keyring.py +6 -6
  495. chia/util/errors.py +5 -3
  496. chia/util/file_keyring.py +22 -33
  497. chia/util/files.py +2 -0
  498. chia/util/full_block_utils.py +31 -7
  499. chia/util/generator_tools.py +18 -8
  500. chia/util/hash.py +3 -1
  501. chia/util/initial-config.yaml +19 -0
  502. chia/util/inline_executor.py +2 -0
  503. chia/util/ip_address.py +39 -0
  504. chia/util/json_util.py +0 -4
  505. chia/util/keychain.py +27 -24
  506. chia/util/keyring_wrapper.py +65 -4
  507. chia/util/limited_semaphore.py +3 -1
  508. chia/util/lock.py +4 -2
  509. chia/util/log_exceptions.py +5 -2
  510. chia/util/logging.py +3 -1
  511. chia/util/lru_cache.py +2 -0
  512. chia/util/math.py +4 -4
  513. chia/util/network.py +15 -73
  514. chia/util/paginator.py +3 -1
  515. chia/util/path.py +2 -0
  516. chia/util/permissions.py +3 -2
  517. chia/util/prev_transaction_block.py +1 -3
  518. chia/util/priority_mutex.py +6 -3
  519. chia/util/profiler.py +7 -4
  520. chia/util/recursive_replace.py +2 -0
  521. chia/util/safe_cancel_task.py +2 -0
  522. chia/util/service_groups.py +2 -2
  523. chia/util/setproctitle.py +2 -0
  524. chia/util/significant_bits.py +2 -0
  525. chia/util/ssl_check.py +11 -11
  526. chia/util/streamable.py +44 -56
  527. chia/util/task_referencer.py +59 -0
  528. chia/util/task_timing.py +22 -18
  529. chia/util/timing.py +4 -1
  530. chia/util/vdf_prover.py +2 -3
  531. chia/util/virtual_project_analysis.py +540 -0
  532. chia/util/ws_message.py +6 -6
  533. chia/wallet/cat_wallet/cat_info.py +3 -3
  534. chia/wallet/cat_wallet/cat_outer_puzzle.py +3 -3
  535. chia/wallet/cat_wallet/cat_utils.py +5 -4
  536. chia/wallet/cat_wallet/cat_wallet.py +56 -70
  537. chia/wallet/cat_wallet/dao_cat_info.py +3 -3
  538. chia/wallet/cat_wallet/dao_cat_wallet.py +18 -18
  539. chia/wallet/cat_wallet/lineage_store.py +2 -2
  540. chia/wallet/coin_selection.py +15 -15
  541. chia/wallet/conditions.py +257 -71
  542. chia/wallet/dao_wallet/dao_info.py +4 -4
  543. chia/wallet/dao_wallet/dao_utils.py +43 -42
  544. chia/wallet/dao_wallet/dao_wallet.py +66 -68
  545. chia/wallet/db_wallet/db_wallet_puzzles.py +12 -8
  546. chia/wallet/derive_keys.py +11 -11
  547. chia/wallet/did_wallet/did_info.py +3 -3
  548. chia/wallet/did_wallet/did_wallet.py +56 -47
  549. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -6
  550. chia/wallet/lineage_proof.py +4 -4
  551. chia/wallet/nft_wallet/metadata_outer_puzzle.py +2 -2
  552. chia/wallet/nft_wallet/nft_info.py +4 -4
  553. chia/wallet/nft_wallet/nft_puzzles.py +16 -16
  554. chia/wallet/nft_wallet/nft_wallet.py +90 -89
  555. chia/wallet/nft_wallet/ownership_outer_puzzle.py +2 -2
  556. chia/wallet/nft_wallet/singleton_outer_puzzle.py +2 -2
  557. chia/wallet/nft_wallet/transfer_program_puzzle.py +2 -2
  558. chia/wallet/nft_wallet/uncurry_nft.py +2 -2
  559. chia/wallet/notification_manager.py +5 -5
  560. chia/wallet/notification_store.py +6 -6
  561. chia/wallet/outer_puzzles.py +2 -2
  562. chia/wallet/payment.py +4 -5
  563. chia/wallet/puzzle_drivers.py +4 -4
  564. chia/wallet/puzzles/clawback/drivers.py +5 -5
  565. chia/wallet/puzzles/clawback/puzzle_decorator.py +7 -7
  566. chia/wallet/puzzles/load_clvm.py +2 -3
  567. chia/wallet/puzzles/p2_conditions.py +1 -2
  568. chia/wallet/puzzles/p2_delegated_conditions.py +1 -2
  569. chia/wallet/puzzles/p2_delegated_puzzle.py +2 -3
  570. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +3 -4
  571. chia/wallet/puzzles/p2_m_of_n_delegate_direct.py +1 -2
  572. chia/wallet/puzzles/p2_puzzle_hash.py +1 -2
  573. chia/wallet/puzzles/puzzle_utils.py +7 -7
  574. chia/wallet/puzzles/singleton_top_layer.py +6 -5
  575. chia/wallet/puzzles/singleton_top_layer_v1_1.py +6 -5
  576. chia/wallet/puzzles/tails.py +34 -30
  577. chia/wallet/signer_protocol.py +7 -8
  578. chia/wallet/singleton.py +4 -4
  579. chia/wallet/trade_manager.py +155 -141
  580. chia/wallet/trade_record.py +5 -5
  581. chia/wallet/trading/offer.py +100 -101
  582. chia/wallet/trading/trade_store.py +14 -14
  583. chia/wallet/transaction_record.py +31 -16
  584. chia/wallet/util/address_type.py +4 -4
  585. chia/wallet/util/blind_signer_tl.py +8 -12
  586. chia/wallet/util/clvm_streamable.py +15 -15
  587. chia/wallet/util/compute_hints.py +5 -5
  588. chia/wallet/util/compute_memos.py +4 -6
  589. chia/wallet/util/curry_and_treehash.py +3 -2
  590. chia/wallet/util/debug_spend_bundle.py +6 -8
  591. chia/wallet/util/merkle_tree.py +10 -10
  592. chia/wallet/util/merkle_utils.py +10 -10
  593. chia/wallet/util/new_peak_queue.py +3 -3
  594. chia/wallet/util/peer_request_cache.py +8 -8
  595. chia/{util → wallet/util}/pprint.py +2 -3
  596. chia/wallet/util/puzzle_compression.py +3 -4
  597. chia/wallet/util/puzzle_decorator.py +10 -10
  598. chia/wallet/util/query_filter.py +9 -10
  599. chia/wallet/util/tx_config.py +12 -12
  600. chia/wallet/util/wallet_sync_utils.py +24 -21
  601. chia/wallet/util/wallet_types.py +9 -2
  602. chia/wallet/vc_wallet/cr_cat_drivers.py +28 -27
  603. chia/wallet/vc_wallet/cr_cat_wallet.py +42 -40
  604. chia/wallet/vc_wallet/cr_outer_puzzle.py +4 -4
  605. chia/wallet/vc_wallet/vc_drivers.py +16 -16
  606. chia/wallet/vc_wallet/vc_store.py +9 -9
  607. chia/wallet/vc_wallet/vc_wallet.py +35 -35
  608. chia/wallet/wallet.py +54 -54
  609. chia/wallet/wallet_action_scope.py +14 -13
  610. chia/wallet/wallet_blockchain.py +10 -10
  611. chia/wallet/wallet_coin_record.py +2 -2
  612. chia/wallet/wallet_coin_store.py +10 -10
  613. chia/wallet/wallet_info.py +1 -2
  614. chia/wallet/wallet_interested_store.py +5 -5
  615. chia/wallet/wallet_nft_store.py +6 -6
  616. chia/wallet/wallet_node.py +72 -76
  617. chia/wallet/wallet_node_api.py +33 -27
  618. chia/wallet/wallet_pool_store.py +1 -2
  619. chia/wallet/wallet_protocol.py +15 -15
  620. chia/wallet/wallet_puzzle_store.py +35 -4
  621. chia/wallet/wallet_retry_store.py +2 -2
  622. chia/wallet/wallet_singleton_store.py +10 -9
  623. chia/wallet/wallet_spend_bundle.py +4 -20
  624. chia/wallet/wallet_state_manager.py +223 -224
  625. chia/wallet/wallet_transaction_store.py +44 -18
  626. chia/wallet/wallet_user_store.py +2 -2
  627. chia/wallet/wallet_weight_proof_handler.py +2 -2
  628. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/LICENSE +1 -1
  629. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/METADATA +67 -72
  630. chia_blockchain-2.5.1.dist-info/RECORD +1042 -0
  631. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/WHEEL +1 -1
  632. mozilla-ca/cacert.pem +32 -87
  633. chia/_tests/cmds/wallet/test_coins.py +0 -195
  634. chia/consensus/block_root_validation.py +0 -46
  635. chia/util/api_decorators.py +0 -89
  636. chia_blockchain-2.5.0rc1.dist-info/RECORD +0 -1028
  637. {chia_blockchain-2.5.0rc1.dist-info → chia_blockchain-2.5.1.dist-info}/entry_points.txt +0 -0
@@ -1,15 +1,14 @@
1
- # pylint: disable=invalid-field-call
2
-
3
1
  from __future__ import annotations
4
2
 
5
3
  import sys
6
4
  from dataclasses import dataclass, field
7
- from typing import Any, Dict, List, Optional, Tuple, Type, TypeVar
5
+ from typing import Any, Optional, TypeVar, final
8
6
 
9
7
  from chia_rs import G1Element, G2Element, PrivateKey
10
8
  from typing_extensions import dataclass_transform
11
9
 
12
10
  from chia.types.blockchain_format.sized_bytes import bytes32
11
+ from chia.util.byte_types import hexstr_to_bytes
13
12
  from chia.util.ints import uint16, uint32, uint64
14
13
  from chia.util.streamable import Streamable, streamable
15
14
  from chia.wallet.conditions import Condition, ConditionValidTimes
@@ -26,14 +25,14 @@ from chia.wallet.trading.offer import Offer
26
25
  from chia.wallet.transaction_record import TransactionRecord
27
26
  from chia.wallet.util.clvm_streamable import json_deserialize_with_clvm_streamable
28
27
  from chia.wallet.util.tx_config import TXConfig
29
- from chia.wallet.vc_wallet.vc_store import VCRecord
28
+ from chia.wallet.vc_wallet.vc_store import VCProofs, VCRecord
30
29
  from chia.wallet.wallet_spend_bundle import WalletSpendBundle
31
30
 
32
31
  _T_OfferEndpointResponse = TypeVar("_T_OfferEndpointResponse", bound="_OfferEndpointResponse")
33
32
 
34
33
 
35
34
  @dataclass_transform(frozen_default=True, kw_only_default=True)
36
- def kw_only_dataclass(cls: Type[Any]) -> Type[Any]:
35
+ def kw_only_dataclass(cls: type[Any]) -> type[Any]:
37
36
  if sys.version_info < (3, 10):
38
37
  return dataclass(frozen=True)(cls) # pragma: no cover
39
38
  else:
@@ -72,10 +71,10 @@ class GetLoggedInFingerprintResponse(Streamable):
72
71
  @dataclass(frozen=True)
73
72
  class GetPublicKeysResponse(Streamable):
74
73
  keyring_is_locked: bool
75
- public_key_fingerprints: Optional[List[uint32]] = None
74
+ public_key_fingerprints: Optional[list[uint32]] = None
76
75
 
77
76
  @property
78
- def pk_fingerprints(self) -> List[uint32]:
77
+ def pk_fingerprints(self) -> list[uint32]:
79
78
  if self.keyring_is_locked:
80
79
  raise RuntimeError("get_public_keys cannot return public keys because the keyring is locked")
81
80
  else:
@@ -110,13 +109,13 @@ class GetPrivateKeyResponse(Streamable):
110
109
  @streamable
111
110
  @dataclass(frozen=True)
112
111
  class GenerateMnemonicResponse(Streamable):
113
- mnemonic: List[str]
112
+ mnemonic: list[str]
114
113
 
115
114
 
116
115
  @streamable
117
116
  @dataclass(frozen=True)
118
117
  class AddKey(Streamable):
119
- mnemonic: List[str]
118
+ mnemonic: list[str]
120
119
 
121
120
 
122
121
  @streamable
@@ -147,10 +146,59 @@ class CheckDeleteKeyResponse(Streamable):
147
146
  wallet_balance: bool
148
147
 
149
148
 
149
+ @streamable
150
+ @dataclass(frozen=True)
151
+ class SetWalletResyncOnStartup(Streamable):
152
+ enable: bool = True
153
+
154
+
155
+ @streamable
156
+ @dataclass(frozen=True)
157
+ class GetSyncStatusResponse(Streamable):
158
+ synced: bool
159
+ syncing: bool
160
+ genesis_initialized: bool = True
161
+
162
+
163
+ @streamable
164
+ @dataclass(frozen=True)
165
+ class GetHeightInfoResponse(Streamable):
166
+ height: uint32
167
+
168
+
169
+ @streamable
170
+ @dataclass(frozen=True)
171
+ class PushTX(Streamable):
172
+ spend_bundle: WalletSpendBundle
173
+
174
+ # We allow for flexibility in transaction parsing here so we need to override
175
+ @classmethod
176
+ def from_json_dict(cls, json_dict: dict[str, Any]) -> PushTX:
177
+ if isinstance(json_dict["spend_bundle"], str):
178
+ spend_bundle = WalletSpendBundle.from_bytes(hexstr_to_bytes(json_dict["spend_bundle"]))
179
+ else:
180
+ spend_bundle = WalletSpendBundle.from_json_dict(json_dict["spend_bundle"])
181
+
182
+ json_dict["spend_bundle"] = spend_bundle.to_json_dict()
183
+ return super().from_json_dict(json_dict)
184
+
185
+
186
+ @streamable
187
+ @dataclass(frozen=True)
188
+ class GetTimestampForHeight(Streamable):
189
+ height: uint32
190
+
191
+
192
+ @streamable
193
+ @dataclass(frozen=True)
194
+ class GetTimestampForHeightResponse(Streamable):
195
+ timestamp: uint64
196
+
197
+
150
198
  @streamable
151
199
  @dataclass(frozen=True)
152
200
  class GetNotifications(Streamable):
153
- ids: Optional[List[bytes32]] = None
201
+ ids: Optional[list[bytes32]] = None
154
202
  start: Optional[uint32] = None
155
203
  end: Optional[uint32] = None
156
204
 
@@ -158,7 +206,7 @@ class GetNotifications(Streamable):
158
206
  @streamable
159
207
  @dataclass(frozen=True)
160
208
  class GetNotificationsResponse(Streamable):
161
- notifications: List[Notification]
209
+ notifications: list[Notification]
162
210
 
163
211
 
164
212
  @streamable
@@ -189,17 +237,17 @@ class GetTransactionMemo(Streamable):
189
237
  @dataclass(frozen=True)
190
238
  class CoinIDWithMemos(Streamable):
191
239
  coin_id: bytes32
192
- memos: List[bytes]
240
+ memos: list[bytes]
193
241
 
194
242
 
195
243
  @streamable
196
244
  @dataclass(frozen=True)
197
245
  class GetTransactionMemoResponse(Streamable):
198
246
  transaction_id: bytes32
199
- coins_with_memos: List[CoinIDWithMemos]
247
+ coins_with_memos: list[CoinIDWithMemos]
200
248
 
201
249
  # TODO: deprecate the kinda silly format of this RPC and delete these functions
202
- def to_json_dict(self) -> Dict[str, Any]:
250
+ def to_json_dict(self) -> dict[str, Any]:
203
251
  return {
204
252
  self.transaction_id.hex(): {
205
253
  cwm.coin_id.hex(): [memo.hex() for memo in cwm.memos] for cwm in self.coins_with_memos
@@ -207,12 +255,12 @@ class GetTransactionMemoResponse(Streamable):
207
255
  }
208
256
 
209
257
  @classmethod
210
- def from_json_dict(cls, json_dict: Dict[str, Any]) -> GetTransactionMemoResponse:
258
+ def from_json_dict(cls, json_dict: dict[str, Any]) -> GetTransactionMemoResponse:
211
259
  return cls(
212
- bytes32.from_hexstr(list(json_dict.keys())[0]),
260
+ bytes32.from_hexstr(next(iter(json_dict.keys()))),
213
261
  [
214
262
  CoinIDWithMemos(bytes32.from_hexstr(coin_id), [bytes32.from_hexstr(memo) for memo in memos])
215
- for coin_id, memos in list(json_dict.values())[0].items()
263
+ for coin_id, memos in next(iter(json_dict.values())).items()
216
264
  ],
217
265
  )
218
266
 
@@ -236,7 +284,7 @@ class DefaultCAT(Streamable):
236
284
  @streamable
237
285
  @dataclass(frozen=True)
238
286
  class GetCATListResponse(Streamable):
239
- cat_list: List[DefaultCAT]
287
+ cat_list: list[DefaultCAT]
240
288
 
241
289
 
242
290
  @streamable
@@ -265,7 +313,7 @@ class DIDGetRecoveryInfoResponse(Streamable):
265
313
  coin_name: bytes32
266
314
  newpuzhash: bytes32
267
315
  pubkey: G1Element
268
- backup_dids: List[bytes32]
316
+ backup_dids: list[bytes32]
269
317
 
270
318
 
271
319
  @streamable
@@ -316,7 +364,7 @@ class NFTWalletWithDID(Streamable):
316
364
  @streamable
317
365
  @dataclass(frozen=True)
318
366
  class NFTGetWalletsWithDIDsResponse(Streamable):
319
- nft_wallets: List[NFTWalletWithDID]
367
+ nft_wallets: list[NFTWalletWithDID]
320
368
 
321
369
 
322
370
  # utility for NFTSetDIDBulk
@@ -327,10 +375,125 @@ class NFTCoin(Streamable):
327
375
  wallet_id: uint32
328
376
 
329
377
 
378
+ @streamable
379
+ @dataclass(frozen=True)
380
+ class VCGet(Streamable):
381
+ vc_id: bytes32
382
+
383
+
384
+ @streamable
385
+ @dataclass(frozen=True)
386
+ class VCGetResponse(Streamable):
387
+ vc_record: Optional[VCRecord]
388
+
389
+
390
+ @streamable
391
+ @dataclass(frozen=True)
392
+ class VCGetList(Streamable):
393
+ start: uint32 = uint32(0)
394
+ end: uint32 = uint32(50)
395
+
396
+
397
+ # utility for VC endpoints
398
+ @streamable
399
+ @dataclass(frozen=True)
400
+ class VCProofsRPC(Streamable):
401
+ key_value_pairs: list[tuple[str, str]]
402
+
403
+ def to_vc_proofs(self) -> VCProofs:
404
+ return VCProofs({key: value for key, value in self.key_value_pairs})
405
+
406
+ @classmethod
407
+ def from_vc_proofs(cls: type[_T_VCProofsRPC], vc_proofs: VCProofs) -> _T_VCProofsRPC:
408
+ return cls([(key, value) for key, value in vc_proofs.key_value_pairs.items()])
409
+
410
+
411
+ _T_VCProofsRPC = TypeVar("_T_VCProofsRPC", bound=VCProofsRPC)
412
+
413
+
414
+ # utility for VCGetListResponse
415
+ @streamable
416
+ @dataclass(frozen=True)
417
+ class VCProofWithHash(Streamable):
418
+ hash: bytes32
419
+ proof: Optional[VCProofsRPC]
420
+
421
+
422
+ # utility for VCGetListResponse
423
+ @final
424
+ @streamable
425
+ @dataclass(frozen=True)
426
+ class VCRecordWithCoinID(VCRecord):
427
+ coin_id: bytes32
428
+
429
+ @classmethod
430
+ def from_vc_record(cls, vc_record: VCRecord) -> VCRecordWithCoinID:
431
+ return cls(coin_id=vc_record.vc.coin.name(), **vc_record.__dict__)
432
+
433
+
434
+ @streamable
435
+ @dataclass(frozen=True)
436
+ class VCGetListResponse(Streamable):
437
+ vc_records: list[VCRecordWithCoinID]
438
+ proofs: list[VCProofWithHash]
439
+
440
+ @property
441
+ def proof_dict(self) -> dict[bytes32, Optional[dict[str, str]]]:
442
+ return {
443
+ pwh.hash: None if pwh.proof is None else {key: value for key, value in pwh.proof.key_value_pairs}
444
+ for pwh in self.proofs
445
+ }
446
+
447
+ def to_json_dict(self) -> dict[str, Any]:
448
+ return {
449
+ "vc_records": [vc_record.to_json_dict() for vc_record in self.vc_records],
450
+ "proofs": {proof_hash.hex(): proof_data for proof_hash, proof_data in self.proof_dict.items()},
451
+ }
452
+
453
+ @classmethod
454
+ def from_json_dict(cls, json_dict: dict[str, Any]) -> VCGetListResponse:
455
+ return cls(
456
+ [VCRecordWithCoinID.from_json_dict(vc_record) for vc_record in json_dict["vc_records"]],
457
+ [
458
+ VCProofWithHash(
459
+ bytes32.from_hexstr(proof_hash),
460
+ None if potential_proofs is None else VCProofsRPC.from_vc_proofs(VCProofs(potential_proofs)),
461
+ )
462
+ for proof_hash, potential_proofs in json_dict["proofs"].items()
463
+ ],
464
+ )
465
+
466
+
467
+ @streamable
468
+ @dataclass(frozen=True)
469
+ class VCAddProofs(VCProofsRPC):
470
+ def to_json_dict(self) -> dict[str, Any]:
471
+ return {"proofs": self.to_vc_proofs().key_value_pairs}
472
+
473
+ @classmethod
474
+ def from_json_dict(cls: type[_T_VCAddProofs], json_dict: dict[str, Any]) -> _T_VCAddProofs:
475
+ return cls([(key, value) for key, value in json_dict["proofs"].items()])
476
+
477
+
478
+ _T_VCAddProofs = TypeVar("_T_VCAddProofs", bound=VCAddProofs)
479
+
480
+
481
+ @streamable
482
+ @dataclass(frozen=True)
483
+ class VCGetProofsForRoot(Streamable):
484
+ root: bytes32
485
+
486
+
487
+ @streamable
488
+ @dataclass(frozen=True)
489
+ class VCGetProofsForRootResponse(VCAddProofs):
490
+ pass
491
+
492
+
330
493
  @streamable
331
494
  @dataclass(frozen=True)
332
495
  class GatherSigningInfo(Streamable):
333
- spends: List[Spend]
496
+ spends: list[Spend]
334
497
 
335
498
 
336
499
  @streamable
@@ -342,26 +505,26 @@ class GatherSigningInfoResponse(Streamable):
342
505
  @streamable
343
506
  @dataclass(frozen=True)
344
507
  class ApplySignatures(Streamable):
345
- spends: List[Spend]
346
- signing_responses: List[SigningResponse]
508
+ spends: list[Spend]
509
+ signing_responses: list[SigningResponse]
347
510
 
348
511
 
349
512
  @streamable
350
513
  @dataclass(frozen=True)
351
514
  class ApplySignaturesResponse(Streamable):
352
- signed_transactions: List[SignedTransaction]
515
+ signed_transactions: list[SignedTransaction]
353
516
 
354
517
 
355
518
  @streamable
356
519
  @dataclass(frozen=True)
357
520
  class SubmitTransactions(Streamable):
358
- signed_transactions: List[SignedTransaction]
521
+ signed_transactions: list[SignedTransaction]
359
522
 
360
523
 
361
524
  @streamable
362
525
  @dataclass(frozen=True)
363
526
  class SubmitTransactionsResponse(Streamable):
364
- mempool_ids: List[bytes32]
527
+ mempool_ids: list[bytes32]
365
528
 
366
529
 
367
530
  @streamable
@@ -374,7 +537,7 @@ class ExecuteSigningInstructions(Streamable):
374
537
  @streamable
375
538
  @dataclass(frozen=True)
376
539
  class ExecuteSigningInstructionsResponse(Streamable):
377
- signing_responses: List[SigningResponse]
540
+ signing_responses: list[SigningResponse]
378
541
 
379
542
 
380
543
  # When inheriting from this class you must set any non default arguments with:
@@ -385,8 +548,9 @@ class ExecuteSigningInstructionsResponse(Streamable):
385
548
  class TransactionEndpointRequest(Streamable):
386
549
  fee: uint64 = uint64(0)
387
550
  push: Optional[bool] = None
551
+ sign: Optional[bool] = None
388
552
 
389
- def to_json_dict(self, _avoid_ban: bool = False) -> Dict[str, Any]:
553
+ def to_json_dict(self, _avoid_ban: bool = False) -> dict[str, Any]:
390
554
  if not _avoid_ban:
391
555
  raise NotImplementedError(
392
556
  "to_json_dict is banned on TransactionEndpointRequest, please use .json_serialize_for_transport"
@@ -395,8 +559,8 @@ class TransactionEndpointRequest(Streamable):
395
559
  return super().to_json_dict()
396
560
 
397
561
  def json_serialize_for_transport(
398
- self, tx_config: TXConfig, extra_conditions: Tuple[Condition, ...], timelock_info: ConditionValidTimes
399
- ) -> Dict[str, Any]:
562
+ self, tx_config: TXConfig, extra_conditions: tuple[Condition, ...], timelock_info: ConditionValidTimes
563
+ ) -> dict[str, Any]:
400
564
  return {
401
565
  **tx_config.to_json_dict(),
402
566
  **timelock_info.to_json_dict(),
@@ -408,8 +572,38 @@ class TransactionEndpointRequest(Streamable):
408
572
  @streamable
409
573
  @dataclass(frozen=True)
410
574
  class TransactionEndpointResponse(Streamable):
411
- unsigned_transactions: List[UnsignedTransaction]
412
- transactions: List[TransactionRecord]
575
+ unsigned_transactions: list[UnsignedTransaction]
576
+ transactions: list[TransactionRecord]
577
+
578
+
579
+ @streamable
580
+ @dataclass(frozen=True)
581
+ class PushTransactions(TransactionEndpointRequest):
582
+ transactions: list[TransactionRecord] = field(default_factory=default_raise)
583
+ push: Optional[bool] = True
584
+
585
+ # We allow for flexibility in transaction parsing here so we need to override
586
+ @classmethod
587
+ def from_json_dict(cls, json_dict: dict[str, Any]) -> PushTransactions:
588
+ transactions: list[TransactionRecord] = []
589
+ for transaction_hexstr_or_json in json_dict["transactions"]:
590
+ if isinstance(transaction_hexstr_or_json, str):
591
+ tx = TransactionRecord.from_bytes(hexstr_to_bytes(transaction_hexstr_or_json))
592
+ else:
593
+ try:
594
+ tx = TransactionRecord.from_json_dict_convenience(transaction_hexstr_or_json)
595
+ except AttributeError:
596
+ tx = TransactionRecord.from_json_dict(transaction_hexstr_or_json)
597
+ transactions.append(tx)
598
+
599
+ json_dict["transactions"] = [tx.to_json_dict() for tx in transactions]
600
+ return super().from_json_dict(json_dict)
601
+
602
+
603
+ @streamable
604
+ @dataclass(frozen=True)
605
+ class PushTransactionsResponse(TransactionEndpointResponse):
606
+ pass
413
607
 
414
608
 
415
609
  @streamable
@@ -431,9 +625,9 @@ class SplitCoinsResponse(TransactionEndpointResponse):
431
625
  @kw_only_dataclass
432
626
  class CombineCoins(TransactionEndpointRequest):
433
627
  wallet_id: uint32 = field(default_factory=default_raise)
434
- number_of_coins: uint16 = field(default_factory=default_raise)
628
+ number_of_coins: uint16 = uint16(500)
435
629
  largest_first: bool = False
436
- target_coin_ids: List[bytes32] = field(default_factory=list)
630
+ target_coin_ids: list[bytes32] = field(default_factory=list)
437
631
  target_coin_amount: Optional[uint64] = None
438
632
  coin_num_limit: uint16 = uint16(500)
439
633
 
@@ -447,14 +641,14 @@ class CombineCoinsResponse(TransactionEndpointResponse):
447
641
  @streamable
448
642
  @kw_only_dataclass
449
643
  class NFTSetDIDBulk(TransactionEndpointRequest):
450
- nft_coin_list: List[NFTCoin] = field(default_factory=default_raise)
644
+ nft_coin_list: list[NFTCoin] = field(default_factory=default_raise)
451
645
  did_id: Optional[str] = None
452
646
 
453
647
 
454
648
  @streamable
455
649
  @dataclass(frozen=True)
456
650
  class NFTSetDIDBulkResponse(TransactionEndpointResponse):
457
- wallet_id: List[uint32]
651
+ wallet_id: list[uint32]
458
652
  tx_num: uint16
459
653
  spend_bundle: WalletSpendBundle
460
654
 
@@ -462,18 +656,58 @@ class NFTSetDIDBulkResponse(TransactionEndpointResponse):
462
656
  @streamable
463
657
  @kw_only_dataclass
464
658
  class NFTTransferBulk(TransactionEndpointRequest):
465
- nft_coin_list: List[NFTCoin] = field(default_factory=default_raise)
659
+ nft_coin_list: list[NFTCoin] = field(default_factory=default_raise)
466
660
  target_address: str = field(default_factory=default_raise)
467
661
 
468
662
 
469
663
  @streamable
470
664
  @dataclass(frozen=True)
471
665
  class NFTTransferBulkResponse(TransactionEndpointResponse):
472
- wallet_id: List[uint32]
666
+ wallet_id: list[uint32]
473
667
  tx_num: uint16
474
668
  spend_bundle: WalletSpendBundle
475
669
 
476
670
 
671
+ @streamable
672
+ @dataclass(frozen=True)
673
+ class VCMint(TransactionEndpointRequest):
674
+ did_id: str = field(default_factory=default_raise)
675
+ target_address: Optional[str] = None
676
+
677
+
678
+ @streamable
679
+ @dataclass(frozen=True)
680
+ class VCMintResponse(TransactionEndpointResponse):
681
+ vc_record: VCRecord
682
+
683
+
684
+ @streamable
685
+ @dataclass(frozen=True)
686
+ class VCSpend(TransactionEndpointRequest):
687
+ vc_id: bytes32 = field(default_factory=default_raise)
688
+ new_puzhash: Optional[bytes32] = None
689
+ new_proof_hash: Optional[bytes32] = None
690
+ provider_inner_puzhash: Optional[bytes32] = None
691
+
692
+
693
+ @streamable
694
+ @dataclass(frozen=True)
695
+ class VCSpendResponse(TransactionEndpointResponse):
696
+ pass
697
+
698
+
699
+ @streamable
700
+ @dataclass(frozen=True)
701
+ class VCRevoke(TransactionEndpointRequest):
702
+ vc_parent_id: bytes32 = field(default_factory=default_raise)
703
+
704
+
705
+ @streamable
706
+ @dataclass(frozen=True)
707
+ class VCRevokeResponse(TransactionEndpointResponse):
708
+ pass
709
+
710
+
477
711
  # TODO: The section below needs corresponding request types
478
712
  # TODO: The section below should be added to the API (currently only for client)
479
713
  @streamable
@@ -493,7 +727,7 @@ class SendTransactionMultiResponse(TransactionEndpointResponse):
493
727
  @streamable
494
728
  @dataclass(frozen=True)
495
729
  class CreateSignedTransactionsResponse(TransactionEndpointResponse):
496
- signed_txs: List[TransactionRecord]
730
+ signed_txs: list[TransactionRecord]
497
731
  signed_tx: TransactionRecord
498
732
 
499
733
 
@@ -537,7 +771,7 @@ class _OfferEndpointResponse(TransactionEndpointResponse):
537
771
  trade_record: TradeRecord
538
772
 
539
773
  @classmethod
540
- def from_json_dict(cls: Type[_T_OfferEndpointResponse], json_dict: Dict[str, Any]) -> _T_OfferEndpointResponse:
774
+ def from_json_dict(cls: type[_T_OfferEndpointResponse], json_dict: dict[str, Any]) -> _T_OfferEndpointResponse:
541
775
  tx_endpoint: TransactionEndpointResponse = json_deserialize_with_clvm_streamable(
542
776
  json_dict, TransactionEndpointResponse
543
777
  )
@@ -607,7 +841,7 @@ class NFTSetNFTDIDResponse(TransactionEndpointResponse):
607
841
  @dataclass(frozen=True)
608
842
  class NFTMintBulkResponse(TransactionEndpointResponse):
609
843
  spend_bundle: WalletSpendBundle
610
- nft_id_list: List[str]
844
+ nft_id_list: list[str]
611
845
 
612
846
 
613
847
  @streamable
@@ -660,7 +894,7 @@ class DAOAddFundsToTreasuryResponse(TransactionEndpointResponse):
660
894
  @dataclass(frozen=True)
661
895
  class DAOSendToLockupResponse(TransactionEndpointResponse):
662
896
  tx_id: bytes32
663
- txs: List[TransactionRecord]
897
+ txs: list[TransactionRecord]
664
898
 
665
899
 
666
900
  @streamable
@@ -668,21 +902,3 @@ class DAOSendToLockupResponse(TransactionEndpointResponse):
668
902
  class DAOExitLockupResponse(TransactionEndpointResponse):
669
903
  tx_id: bytes32
670
904
  tx: TransactionRecord
671
-
672
-
673
- @streamable
674
- @dataclass(frozen=True)
675
- class VCMintResponse(TransactionEndpointResponse):
676
- vc_record: VCRecord
677
-
678
-
679
- @streamable
680
- @dataclass(frozen=True)
681
- class VCSpendResponse(TransactionEndpointResponse):
682
- pass
683
-
684
-
685
- @streamable
686
- @dataclass(frozen=True)
687
- class VCRevokeResponse(TransactionEndpointResponse):
688
- pass