chia-blockchain 2.5.4rc2__py3-none-any.whl → 2.5.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. chia/_tests/blockchain/blockchain_test_utils.py +2 -3
  2. chia/_tests/blockchain/test_augmented_chain.py +2 -3
  3. chia/_tests/blockchain/test_blockchain.py +261 -44
  4. chia/_tests/blockchain/test_blockchain_transactions.py +4 -3
  5. chia/_tests/blockchain/test_build_chains.py +197 -1
  6. chia/_tests/blockchain/test_get_block_generator.py +1 -1
  7. chia/_tests/blockchain/test_lookup_fork_chain.py +1 -1
  8. chia/_tests/clvm/benchmark_costs.py +1 -1
  9. chia/_tests/clvm/coin_store.py +3 -4
  10. chia/_tests/clvm/test_message_conditions.py +2 -2
  11. chia/_tests/clvm/test_puzzle_compression.py +2 -3
  12. chia/_tests/clvm/test_puzzles.py +1 -2
  13. chia/_tests/clvm/test_singletons.py +2 -3
  14. chia/_tests/clvm/test_spend_sim.py +7 -7
  15. chia/_tests/cmds/cmd_test_utils.py +30 -25
  16. chia/_tests/cmds/test_dev_gh.py +1 -1
  17. chia/_tests/cmds/test_farm_cmd.py +1 -1
  18. chia/_tests/cmds/test_show.py +1 -2
  19. chia/_tests/cmds/wallet/test_did.py +101 -56
  20. chia/_tests/cmds/wallet/test_nft.py +109 -84
  21. chia/_tests/cmds/wallet/test_notifications.py +1 -1
  22. chia/_tests/cmds/wallet/test_offer.toffer +1 -1
  23. chia/_tests/cmds/wallet/test_vcs.py +8 -8
  24. chia/_tests/cmds/wallet/test_wallet.py +100 -46
  25. chia/_tests/conftest.py +31 -20
  26. chia/_tests/connection_utils.py +1 -1
  27. chia/_tests/core/consensus/stores/__init__.py +0 -0
  28. chia/_tests/core/consensus/stores/test_coin_store_protocol.py +40 -0
  29. chia/_tests/core/consensus/test_block_creation.py +2 -31
  30. chia/_tests/core/consensus/test_pot_iterations.py +38 -3
  31. chia/_tests/core/custom_types/test_proof_of_space.py +154 -26
  32. chia/_tests/core/custom_types/test_spend_bundle.py +2 -3
  33. chia/_tests/core/daemon/test_daemon.py +80 -0
  34. chia/_tests/core/data_layer/test_data_layer.py +1 -1
  35. chia/_tests/core/data_layer/test_data_layer_util.py +1 -1
  36. chia/_tests/core/data_layer/test_data_rpc.py +14 -10
  37. chia/_tests/core/data_layer/test_data_store.py +5 -5
  38. chia/_tests/core/farmer/test_farmer_api.py +2 -2
  39. chia/_tests/core/full_node/full_sync/test_full_sync.py +446 -406
  40. chia/_tests/core/full_node/ram_db.py +3 -1
  41. chia/_tests/core/full_node/stores/test_block_store.py +28 -16
  42. chia/_tests/core/full_node/stores/test_coin_store.py +277 -185
  43. chia/_tests/core/full_node/stores/test_full_node_store.py +11 -4
  44. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  45. chia/_tests/core/full_node/test_address_manager.py +200 -27
  46. chia/_tests/core/full_node/test_block_height_map.py +2 -2
  47. chia/_tests/core/full_node/test_conditions.py +7 -6
  48. chia/_tests/core/full_node/test_full_node.py +456 -40
  49. chia/_tests/core/full_node/test_generator_tools.py +32 -2
  50. chia/_tests/core/full_node/test_hint_management.py +1 -1
  51. chia/_tests/core/full_node/test_node_load.py +20 -21
  52. chia/_tests/core/full_node/test_performance.py +3 -4
  53. chia/_tests/core/full_node/test_prev_tx_block.py +43 -0
  54. chia/_tests/core/full_node/test_subscriptions.py +1 -2
  55. chia/_tests/core/full_node/test_transactions.py +9 -5
  56. chia/_tests/core/full_node/test_tx_processing_queue.py +1 -2
  57. chia/_tests/core/large_block.py +1 -2
  58. chia/_tests/core/make_block_generator.py +3 -4
  59. chia/_tests/core/mempool/test_mempool.py +36 -86
  60. chia/_tests/core/mempool/test_mempool_fee_estimator.py +1 -1
  61. chia/_tests/core/mempool/test_mempool_item_queries.py +1 -3
  62. chia/_tests/core/mempool/test_mempool_manager.py +529 -69
  63. chia/_tests/core/mempool/test_mempool_performance.py +3 -2
  64. chia/_tests/core/mempool/test_singleton_fast_forward.py +61 -132
  65. chia/_tests/core/server/flood.py +1 -1
  66. chia/_tests/core/server/test_dos.py +1 -1
  67. chia/_tests/core/server/test_node_discovery.py +41 -27
  68. chia/_tests/core/server/test_rate_limits.py +1 -1
  69. chia/_tests/core/server/test_server.py +1 -1
  70. chia/_tests/core/services/test_services.py +5 -5
  71. chia/_tests/core/ssl/test_ssl.py +1 -1
  72. chia/_tests/core/test_cost_calculation.py +6 -6
  73. chia/_tests/core/test_crawler.py +2 -2
  74. chia/_tests/core/test_crawler_rpc.py +1 -1
  75. chia/_tests/core/test_db_conversion.py +3 -1
  76. chia/_tests/core/test_db_validation.py +5 -3
  77. chia/_tests/core/test_farmer_harvester_rpc.py +15 -15
  78. chia/_tests/core/test_filter.py +4 -1
  79. chia/_tests/core/test_full_node_rpc.py +99 -82
  80. chia/_tests/core/test_program.py +2 -2
  81. chia/_tests/core/util/test_block_cache.py +1 -1
  82. chia/_tests/core/util/test_keychain.py +2 -2
  83. chia/_tests/core/util/test_lockfile.py +1 -1
  84. chia/_tests/core/util/test_log_exceptions.py +5 -5
  85. chia/_tests/core/util/test_streamable.py +81 -22
  86. chia/_tests/db/test_db_wrapper.py +1 -3
  87. chia/_tests/environments/wallet.py +5 -5
  88. chia/_tests/farmer_harvester/test_farmer.py +9 -7
  89. chia/_tests/farmer_harvester/test_farmer_harvester.py +11 -4
  90. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +6 -5
  91. chia/_tests/farmer_harvester/test_third_party_harvesters.py +15 -9
  92. chia/_tests/fee_estimation/test_fee_estimation_integration.py +1 -2
  93. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +7 -5
  94. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -1
  95. chia/_tests/generator/test_compression.py +1 -2
  96. chia/_tests/generator/test_rom.py +8 -4
  97. chia/_tests/plot_sync/test_plot_sync.py +3 -3
  98. chia/_tests/plot_sync/test_receiver.py +3 -3
  99. chia/_tests/plot_sync/test_sender.py +1 -1
  100. chia/_tests/plot_sync/test_sync_simulated.py +3 -3
  101. chia/_tests/plot_sync/util.py +2 -2
  102. chia/_tests/pools/test_pool_cmdline.py +48 -21
  103. chia/_tests/pools/test_pool_puzzles_lifecycle.py +2 -3
  104. chia/_tests/pools/test_pool_rpc.py +237 -105
  105. chia/_tests/pools/test_pool_wallet.py +11 -2
  106. chia/_tests/pools/test_wallet_pool_store.py +5 -4
  107. chia/_tests/rpc/test_rpc_client.py +1 -1
  108. chia/_tests/simulation/test_simulation.py +13 -8
  109. chia/_tests/simulation/test_simulator.py +2 -2
  110. chia/_tests/timelord/test_new_peak.py +191 -47
  111. chia/_tests/timelord/test_timelord.py +1 -1
  112. chia/_tests/tools/test_full_sync.py +0 -2
  113. chia/_tests/tools/test_run_block.py +3 -1
  114. chia/_tests/util/benchmark_cost.py +3 -3
  115. chia/_tests/util/benchmarks.py +2 -2
  116. chia/_tests/util/blockchain.py +11 -5
  117. chia/_tests/util/blockchain_mock.py +1 -4
  118. chia/_tests/util/coin_store.py +29 -0
  119. chia/_tests/util/constants.py +2 -18
  120. chia/_tests/util/full_sync.py +3 -3
  121. chia/_tests/util/generator_tools_testing.py +2 -3
  122. chia/_tests/util/key_tool.py +2 -3
  123. chia/_tests/util/misc.py +33 -31
  124. chia/_tests/util/network_protocol_data.py +19 -17
  125. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  126. chia/_tests/util/protocol_messages_json.py +3 -1
  127. chia/_tests/util/run_block.py +2 -2
  128. chia/_tests/util/setup_nodes.py +7 -7
  129. chia/_tests/util/spend_sim.py +47 -55
  130. chia/_tests/util/test_condition_tools.py +5 -4
  131. chia/_tests/util/test_config.py +2 -2
  132. chia/_tests/util/test_dump_keyring.py +1 -1
  133. chia/_tests/util/test_full_block_utils.py +12 -14
  134. chia/_tests/util/test_misc.py +2 -2
  135. chia/_tests/util/test_paginator.py +4 -4
  136. chia/_tests/util/test_priority_mutex.py +2 -2
  137. chia/_tests/util/test_replace_str_to_bytes.py +15 -5
  138. chia/_tests/util/test_ssl_check.py +1 -1
  139. chia/_tests/util/test_testnet_overrides.py +13 -3
  140. chia/_tests/util/time_out_assert.py +4 -2
  141. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +1 -1
  142. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +1 -2
  143. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +352 -432
  144. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +3 -6
  145. chia/_tests/wallet/cat_wallet/test_trades.py +53 -77
  146. chia/_tests/wallet/clawback/test_clawback_decorator.py +3 -1
  147. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +3 -3
  148. chia/_tests/wallet/clawback/test_clawback_metadata.py +4 -2
  149. chia/_tests/wallet/conftest.py +11 -12
  150. chia/_tests/wallet/db_wallet/test_db_graftroot.py +11 -4
  151. chia/_tests/wallet/db_wallet/test_dl_offers.py +433 -130
  152. chia/_tests/wallet/db_wallet/test_dl_wallet.py +3 -3
  153. chia/_tests/wallet/did_wallet/test_did.py +2132 -2000
  154. chia/_tests/wallet/nft_wallet/config.py +1 -1
  155. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +1610 -742
  156. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +486 -907
  157. chia/_tests/wallet/nft_wallet/test_nft_lifecycle.py +4 -4
  158. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +517 -294
  159. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +133 -62
  160. chia/_tests/wallet/rpc/test_wallet_rpc.py +495 -265
  161. chia/_tests/wallet/simple_sync/test_simple_sync_protocol.py +10 -6
  162. chia/_tests/wallet/sync/test_wallet_sync.py +89 -60
  163. chia/_tests/wallet/test_clvm_casts.py +88 -0
  164. chia/_tests/wallet/test_coin_management.py +1 -1
  165. chia/_tests/wallet/test_coin_selection.py +1 -1
  166. chia/_tests/wallet/test_conditions.py +1 -1
  167. chia/_tests/wallet/test_new_wallet_protocol.py +13 -11
  168. chia/_tests/wallet/test_notifications.py +5 -3
  169. chia/_tests/wallet/test_sign_coin_spends.py +6 -6
  170. chia/_tests/wallet/test_signer_protocol.py +13 -12
  171. chia/_tests/wallet/test_singleton.py +1 -1
  172. chia/_tests/wallet/test_singleton_lifecycle_fast.py +5 -7
  173. chia/_tests/wallet/test_util.py +2 -2
  174. chia/_tests/wallet/test_wallet.py +108 -29
  175. chia/_tests/wallet/test_wallet_action_scope.py +9 -2
  176. chia/_tests/wallet/test_wallet_blockchain.py +2 -3
  177. chia/_tests/wallet/test_wallet_key_val_store.py +1 -2
  178. chia/_tests/wallet/test_wallet_node.py +2 -4
  179. chia/_tests/wallet/test_wallet_retry.py +4 -2
  180. chia/_tests/wallet/test_wallet_state_manager.py +191 -5
  181. chia/_tests/wallet/test_wallet_test_framework.py +1 -1
  182. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +8 -8
  183. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -12
  184. chia/_tests/wallet/wallet_block_tools.py +6 -6
  185. chia/_tests/weight_proof/test_weight_proof.py +10 -48
  186. chia/apis.py +1 -1
  187. chia/cmds/beta.py +1 -1
  188. chia/cmds/chia.py +9 -9
  189. chia/cmds/cmd_classes.py +12 -11
  190. chia/cmds/cmd_helpers.py +1 -1
  191. chia/cmds/cmds_util.py +12 -9
  192. chia/cmds/coin_funcs.py +2 -2
  193. chia/cmds/configure.py +2 -2
  194. chia/cmds/data.py +0 -2
  195. chia/cmds/data_funcs.py +1 -1
  196. chia/cmds/db_validate_func.py +1 -2
  197. chia/cmds/dev/__init__.py +0 -0
  198. chia/cmds/dev/data.py +273 -0
  199. chia/cmds/{gh.py → dev/gh.py} +5 -5
  200. chia/cmds/dev/main.py +22 -0
  201. chia/cmds/dev/mempool.py +78 -0
  202. chia/cmds/dev/mempool_funcs.py +63 -0
  203. chia/cmds/farm_funcs.py +5 -4
  204. chia/cmds/init_funcs.py +11 -11
  205. chia/cmds/keys.py +2 -2
  206. chia/cmds/keys_funcs.py +4 -4
  207. chia/cmds/netspace_funcs.py +1 -1
  208. chia/cmds/peer_funcs.py +2 -2
  209. chia/cmds/plotnft_funcs.py +72 -26
  210. chia/cmds/rpc.py +1 -1
  211. chia/cmds/show_funcs.py +5 -5
  212. chia/cmds/signer.py +8 -7
  213. chia/cmds/sim_funcs.py +8 -9
  214. chia/cmds/wallet.py +2 -2
  215. chia/cmds/wallet_funcs.py +165 -131
  216. chia/{util → consensus}/augmented_chain.py +1 -2
  217. chia/consensus/block_body_validation.py +54 -40
  218. chia/consensus/block_creation.py +42 -76
  219. chia/consensus/block_header_validation.py +32 -26
  220. chia/consensus/block_record.py +0 -3
  221. chia/consensus/blockchain.py +23 -32
  222. chia/consensus/blockchain_interface.py +1 -5
  223. chia/consensus/check_time_locks.py +57 -0
  224. chia/consensus/coin_store_protocol.py +151 -0
  225. chia/consensus/coinbase.py +0 -6
  226. chia/consensus/condition_costs.py +4 -0
  227. chia/{util → consensus}/condition_tools.py +4 -5
  228. chia/consensus/cost_calculator.py +1 -1
  229. chia/consensus/default_constants.py +32 -9
  230. chia/consensus/deficit.py +1 -3
  231. chia/consensus/difficulty_adjustment.py +1 -2
  232. chia/consensus/find_fork_point.py +1 -3
  233. chia/consensus/full_block_to_block_record.py +1 -6
  234. chia/{util → consensus}/generator_tools.py +1 -3
  235. chia/consensus/get_block_challenge.py +30 -7
  236. chia/consensus/make_sub_epoch_summary.py +1 -5
  237. chia/consensus/multiprocess_validation.py +21 -20
  238. chia/consensus/pot_iterations.py +74 -13
  239. chia/{util → consensus}/prev_transaction_block.py +1 -1
  240. chia/consensus/vdf_info_computation.py +1 -3
  241. chia/daemon/keychain_proxy.py +5 -5
  242. chia/daemon/server.py +22 -5
  243. chia/data_layer/data_layer.py +92 -51
  244. chia/{rpc → data_layer}/data_layer_rpc_api.py +1 -1
  245. chia/{rpc → data_layer}/data_layer_rpc_util.py +3 -6
  246. chia/data_layer/data_layer_util.py +4 -6
  247. chia/data_layer/data_layer_wallet.py +42 -69
  248. chia/data_layer/dl_wallet_store.py +12 -6
  249. chia/data_layer/download_data.py +3 -3
  250. chia/data_layer/s3_plugin_service.py +0 -1
  251. chia/farmer/farmer.py +3 -4
  252. chia/farmer/farmer_api.py +11 -7
  253. chia/{rpc → farmer}/farmer_rpc_client.py +1 -1
  254. chia/full_node/block_height_map.py +7 -6
  255. chia/full_node/block_store.py +5 -7
  256. chia/full_node/bundle_tools.py +1 -2
  257. chia/full_node/coin_store.py +153 -124
  258. chia/{types → full_node}/eligible_coin_spends.py +39 -70
  259. chia/full_node/fee_estimator.py +1 -1
  260. chia/full_node/fee_estimator_interface.py +0 -8
  261. chia/full_node/fee_tracker.py +25 -25
  262. chia/full_node/full_node.py +70 -53
  263. chia/full_node/full_node_api.py +57 -40
  264. chia/{rpc → full_node}/full_node_rpc_api.py +87 -8
  265. chia/{rpc → full_node}/full_node_rpc_client.py +7 -6
  266. chia/full_node/full_node_store.py +23 -8
  267. chia/full_node/mempool.py +206 -53
  268. chia/full_node/mempool_check_conditions.py +20 -63
  269. chia/full_node/mempool_manager.py +47 -45
  270. chia/full_node/subscriptions.py +1 -3
  271. chia/full_node/tx_processing_queue.py +50 -3
  272. chia/full_node/weight_proof.py +46 -37
  273. chia/harvester/harvester.py +1 -1
  274. chia/harvester/harvester_api.py +22 -7
  275. chia/introducer/introducer.py +1 -1
  276. chia/introducer/introducer_api.py +1 -1
  277. chia/plot_sync/exceptions.py +1 -1
  278. chia/plot_sync/receiver.py +1 -1
  279. chia/plot_sync/sender.py +2 -2
  280. chia/pools/pool_puzzles.py +13 -18
  281. chia/pools/pool_wallet.py +23 -46
  282. chia/protocols/farmer_protocol.py +11 -3
  283. chia/protocols/full_node_protocol.py +1 -4
  284. chia/protocols/harvester_protocol.py +3 -3
  285. chia/protocols/pool_protocol.py +1 -2
  286. chia/protocols/shared_protocol.py +3 -3
  287. chia/protocols/timelord_protocol.py +1 -3
  288. chia/protocols/wallet_protocol.py +3 -3
  289. chia/rpc/rpc_client.py +7 -8
  290. chia/rpc/rpc_server.py +3 -3
  291. chia/rpc/util.py +3 -1
  292. chia/seeder/crawler.py +1 -1
  293. chia/seeder/crawler_api.py +1 -1
  294. chia/seeder/dns_server.py +2 -0
  295. chia/seeder/start_crawler.py +3 -3
  296. chia/server/address_manager.py +286 -38
  297. chia/server/address_manager_store.py +0 -215
  298. chia/{types → server}/aliases.py +7 -7
  299. chia/server/api_protocol.py +1 -1
  300. chia/server/chia_policy.py +1 -1
  301. chia/server/node_discovery.py +76 -113
  302. chia/server/rate_limits.py +1 -1
  303. chia/server/resolve_peer_info.py +43 -0
  304. chia/server/server.py +5 -5
  305. chia/server/start_data_layer.py +4 -4
  306. chia/server/start_farmer.py +5 -4
  307. chia/server/start_full_node.py +5 -4
  308. chia/server/start_harvester.py +7 -5
  309. chia/server/start_introducer.py +2 -2
  310. chia/server/start_service.py +1 -1
  311. chia/server/start_timelord.py +7 -5
  312. chia/server/start_wallet.py +7 -5
  313. chia/server/ws_connection.py +1 -1
  314. chia/simulator/add_blocks_in_batches.py +2 -2
  315. chia/simulator/block_tools.py +245 -201
  316. chia/simulator/full_node_simulator.py +38 -10
  317. chia/simulator/setup_services.py +12 -12
  318. chia/simulator/simulator_full_node_rpc_api.py +2 -2
  319. chia/simulator/simulator_full_node_rpc_client.py +2 -2
  320. chia/simulator/simulator_test_tools.py +2 -2
  321. chia/simulator/start_simulator.py +1 -1
  322. chia/simulator/wallet_tools.py +10 -18
  323. chia/ssl/create_ssl.py +1 -1
  324. chia/timelord/iters_from_block.py +14 -14
  325. chia/timelord/timelord.py +15 -11
  326. chia/timelord/timelord_api.py +14 -2
  327. chia/timelord/timelord_state.py +20 -14
  328. chia/types/blockchain_format/program.py +53 -10
  329. chia/types/blockchain_format/proof_of_space.py +73 -19
  330. chia/types/coin_spend.py +3 -56
  331. chia/types/generator_types.py +28 -0
  332. chia/types/internal_mempool_item.py +1 -2
  333. chia/types/mempool_item.py +12 -7
  334. chia/types/unfinished_header_block.py +1 -2
  335. chia/types/validation_state.py +1 -2
  336. chia/types/weight_proof.py +1 -3
  337. chia/util/action_scope.py +3 -3
  338. chia/util/block_cache.py +1 -2
  339. chia/util/byte_types.py +1 -1
  340. chia/util/casts.py +21 -0
  341. chia/util/config.py +0 -37
  342. chia/util/db_wrapper.py +8 -1
  343. chia/util/errors.py +3 -2
  344. chia/util/initial-config.yaml +21 -5
  345. chia/util/keychain.py +6 -7
  346. chia/util/keyring_wrapper.py +5 -5
  347. chia/util/limited_semaphore.py +1 -1
  348. chia/util/priority_mutex.py +1 -1
  349. chia/util/streamable.py +63 -5
  350. chia/util/task_timing.py +1 -1
  351. chia/util/virtual_project_analysis.py +1 -1
  352. chia/wallet/cat_wallet/cat_info.py +7 -3
  353. chia/wallet/cat_wallet/cat_outer_puzzle.py +9 -5
  354. chia/wallet/cat_wallet/cat_utils.py +1 -1
  355. chia/wallet/cat_wallet/cat_wallet.py +44 -36
  356. chia/wallet/cat_wallet/lineage_store.py +7 -0
  357. chia/wallet/cat_wallet/r_cat_wallet.py +274 -0
  358. chia/wallet/conditions.py +5 -10
  359. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -4
  360. chia/wallet/derivation_record.py +33 -0
  361. chia/wallet/derive_keys.py +3 -3
  362. chia/wallet/did_wallet/did_info.py +12 -3
  363. chia/wallet/did_wallet/did_wallet.py +132 -101
  364. chia/wallet/did_wallet/did_wallet_puzzles.py +9 -9
  365. chia/wallet/driver_protocol.py +3 -1
  366. chia/{types/spend_bundle.py → wallet/estimate_fees.py} +2 -7
  367. chia/wallet/nft_wallet/metadata_outer_puzzle.py +5 -3
  368. chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
  369. chia/wallet/nft_wallet/nft_wallet.py +69 -112
  370. chia/wallet/nft_wallet/ownership_outer_puzzle.py +5 -3
  371. chia/wallet/nft_wallet/singleton_outer_puzzle.py +6 -4
  372. chia/wallet/nft_wallet/transfer_program_puzzle.py +4 -2
  373. chia/wallet/nft_wallet/uncurry_nft.py +4 -6
  374. chia/wallet/notification_manager.py +2 -3
  375. chia/wallet/outer_puzzles.py +7 -2
  376. chia/wallet/puzzle_drivers.py +1 -1
  377. chia/wallet/puzzles/clawback/drivers.py +5 -4
  378. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -1
  379. chia/wallet/puzzles/singleton_top_layer.py +2 -1
  380. chia/wallet/puzzles/singleton_top_layer_v1_1.py +2 -1
  381. chia/wallet/puzzles/tails.py +1 -3
  382. chia/wallet/signer_protocol.py +5 -6
  383. chia/wallet/singleton.py +5 -4
  384. chia/wallet/singleton_record.py +1 -1
  385. chia/wallet/trade_manager.py +18 -20
  386. chia/wallet/trade_record.py +3 -6
  387. chia/wallet/trading/offer.py +12 -13
  388. chia/wallet/uncurried_puzzle.py +2 -2
  389. chia/wallet/util/compute_additions.py +58 -0
  390. chia/wallet/util/compute_hints.py +3 -3
  391. chia/wallet/util/compute_memos.py +4 -4
  392. chia/wallet/util/curry_and_treehash.py +2 -1
  393. chia/wallet/util/debug_spend_bundle.py +1 -1
  394. chia/wallet/util/merkle_tree.py +1 -1
  395. chia/wallet/util/peer_request_cache.py +1 -2
  396. chia/wallet/util/tx_config.py +3 -8
  397. chia/wallet/util/wallet_sync_utils.py +10 -5
  398. chia/wallet/util/wallet_types.py +1 -0
  399. chia/wallet/vc_wallet/cr_cat_drivers.py +17 -18
  400. chia/wallet/vc_wallet/cr_cat_wallet.py +30 -28
  401. chia/wallet/vc_wallet/cr_outer_puzzle.py +5 -3
  402. chia/wallet/vc_wallet/vc_drivers.py +50 -8
  403. chia/wallet/vc_wallet/vc_store.py +3 -5
  404. chia/wallet/vc_wallet/vc_wallet.py +15 -22
  405. chia/wallet/wallet.py +36 -46
  406. chia/wallet/wallet_action_scope.py +73 -4
  407. chia/wallet/wallet_blockchain.py +1 -3
  408. chia/wallet/wallet_interested_store.py +1 -1
  409. chia/wallet/wallet_nft_store.py +3 -3
  410. chia/wallet/wallet_node.py +17 -16
  411. chia/wallet/wallet_node_api.py +4 -5
  412. chia/wallet/wallet_pool_store.py +1 -1
  413. chia/wallet/wallet_protocol.py +2 -0
  414. chia/wallet/wallet_puzzle_store.py +1 -1
  415. chia/{rpc → wallet}/wallet_request_types.py +670 -81
  416. chia/{rpc → wallet}/wallet_rpc_api.py +735 -766
  417. chia/{rpc → wallet}/wallet_rpc_client.py +268 -420
  418. chia/wallet/wallet_singleton_store.py +8 -7
  419. chia/wallet/wallet_spend_bundle.py +4 -3
  420. chia/wallet/wallet_state_manager.py +320 -191
  421. chia/wallet/wallet_weight_proof_handler.py +1 -2
  422. chia/wallet/wsm_apis.py +98 -0
  423. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/METADATA +7 -7
  424. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/RECORD +443 -436
  425. mozilla-ca/cacert.pem +3 -165
  426. chia/_tests/fee_estimation/test_mempoolitem_height_added.py +0 -145
  427. chia/cmds/dev.py +0 -18
  428. chia/types/blockchain_format/slots.py +0 -9
  429. chia/types/blockchain_format/sub_epoch_summary.py +0 -5
  430. chia/types/end_of_slot_bundle.py +0 -5
  431. chia/types/full_block.py +0 -5
  432. chia/types/header_block.py +0 -5
  433. chia/types/spend_bundle_conditions.py +0 -7
  434. chia/types/transaction_queue_entry.py +0 -56
  435. chia/types/unfinished_block.py +0 -5
  436. /chia/cmds/{installers.py → dev/installers.py} +0 -0
  437. /chia/cmds/{sim.py → dev/sim.py} +0 -0
  438. /chia/{util → cmds}/dump_keyring.py +0 -0
  439. /chia/{full_node → consensus}/signage_point.py +0 -0
  440. /chia/{rpc → data_layer}/data_layer_rpc_client.py +0 -0
  441. /chia/{rpc → farmer}/farmer_rpc_api.py +0 -0
  442. /chia/{util → full_node}/full_block_utils.py +0 -0
  443. /chia/{rpc → harvester}/harvester_rpc_api.py +0 -0
  444. /chia/{rpc → harvester}/harvester_rpc_client.py +0 -0
  445. /chia/{full_node → protocols}/fee_estimate.py +0 -0
  446. /chia/{server → protocols}/outbound_message.py +0 -0
  447. /chia/{rpc → seeder}/crawler_rpc_api.py +0 -0
  448. /chia/{util → simulator}/vdf_prover.py +0 -0
  449. /chia/{util → ssl}/ssl_check.py +0 -0
  450. /chia/{rpc → timelord}/timelord_rpc_api.py +0 -0
  451. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/LICENSE +0 -0
  452. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/WHEEL +0 -0
  453. {chia_blockchain-2.5.4rc2.dist-info → chia_blockchain-2.5.5.dist-info}/entry_points.txt +0 -0
chia/cmds/wallet_funcs.py CHANGED
@@ -24,19 +24,6 @@ from chia.cmds.cmds_util import (
24
24
  from chia.cmds.param_types import CliAddress, CliAmount
25
25
  from chia.cmds.peer_funcs import print_connections
26
26
  from chia.cmds.units import units
27
- from chia.rpc.wallet_request_types import (
28
- CATSpendResponse,
29
- GetNotifications,
30
- SendTransactionResponse,
31
- VCAddProofs,
32
- VCGet,
33
- VCGetList,
34
- VCGetProofsForRoot,
35
- VCMint,
36
- VCRevoke,
37
- VCSpend,
38
- )
39
- from chia.rpc.wallet_rpc_client import WalletRpcClient
40
27
  from chia.util.bech32m import bech32_decode, decode_puzzle_hash, encode_puzzle_hash
41
28
  from chia.util.byte_types import hexstr_to_bytes
42
29
  from chia.util.config import selected_network_address_prefix
@@ -56,6 +43,37 @@ from chia.wallet.util.transaction_type import CLAWBACK_INCOMING_TRANSACTION_TYPE
56
43
  from chia.wallet.util.wallet_types import WalletType
57
44
  from chia.wallet.vc_wallet.vc_store import VCProofs
58
45
  from chia.wallet.wallet_coin_store import GetCoinRecords
46
+ from chia.wallet.wallet_request_types import (
47
+ CATSpendResponse,
48
+ DIDFindLostDID,
49
+ DIDGetDID,
50
+ DIDGetInfo,
51
+ DIDMessageSpend,
52
+ DIDSetWalletName,
53
+ DIDTransferDID,
54
+ DIDUpdateMetadata,
55
+ FungibleAsset,
56
+ GetNotifications,
57
+ NFTAddURI,
58
+ NFTCalculateRoyalties,
59
+ NFTCalculateRoyaltiesResponse,
60
+ NFTGetInfo,
61
+ NFTGetNFTs,
62
+ NFTGetWalletDID,
63
+ NFTMintNFTRequest,
64
+ NFTSetNFTDID,
65
+ NFTTransferNFT,
66
+ RoyaltyAsset,
67
+ SendTransactionResponse,
68
+ VCAddProofs,
69
+ VCGet,
70
+ VCGetList,
71
+ VCGetProofsForRoot,
72
+ VCMint,
73
+ VCRevoke,
74
+ VCSpend,
75
+ )
76
+ from chia.wallet.wallet_rpc_client import WalletRpcClient
59
77
 
60
78
  CATNameResolver = Callable[[bytes32], Awaitable[Optional[tuple[Optional[uint32], str]]]]
61
79
 
@@ -114,7 +132,7 @@ def get_mojo_per_unit(wallet_type: WalletType) -> int:
114
132
  WalletType.VC,
115
133
  }:
116
134
  mojo_per_unit = units["chia"]
117
- elif wallet_type in {WalletType.CAT, WalletType.CRCAT}:
135
+ elif wallet_type in {WalletType.CAT, WalletType.CRCAT, WalletType.RCAT}:
118
136
  mojo_per_unit = units["cat"]
119
137
  elif wallet_type in {WalletType.NFT, WalletType.DECENTRALIZED_ID}:
120
138
  mojo_per_unit = units["mojo"]
@@ -148,7 +166,7 @@ async def get_unit_name_for_wallet_id(
148
166
  WalletType.VC,
149
167
  }:
150
168
  name: str = config["network_overrides"]["config"][config["selected_network"]]["address_prefix"].upper()
151
- elif wallet_type in {WalletType.CAT, WalletType.CRCAT}:
169
+ elif wallet_type in {WalletType.CAT, WalletType.CRCAT, WalletType.RCAT}:
152
170
  name = await wallet_client.get_cat_name(wallet_id=wallet_id)
153
171
  else:
154
172
  raise LookupError(f"Operation is not supported for Wallet type {wallet_type.name}")
@@ -234,7 +252,7 @@ async def get_transactions(
234
252
  skipped = 0
235
253
  num_per_screen = 5 if paginate else len(txs)
236
254
  for i in range(0, len(txs), num_per_screen):
237
- for j in range(0, num_per_screen):
255
+ for j in range(num_per_screen):
238
256
  if i + j + skipped >= len(txs):
239
257
  break
240
258
  coin_record: Optional[dict[str, Any]] = None
@@ -340,7 +358,7 @@ async def send(
340
358
  push=push,
341
359
  timelock_info=condition_valid_times,
342
360
  )
343
- elif typ in {WalletType.CAT, WalletType.CRCAT}:
361
+ elif typ in {WalletType.CAT, WalletType.CRCAT, WalletType.RCAT}:
344
362
  print("Submitting transaction...")
345
363
  res = await wallet_client.cat_spend(
346
364
  wallet_id,
@@ -446,8 +464,8 @@ async def make_offer(
446
464
  offer_dict: dict[Union[uint32, str], int] = {}
447
465
  driver_dict: dict[str, Any] = {}
448
466
  printable_dict: dict[str, tuple[str, int, int]] = {} # dict[asset_name, tuple[amount, unit, multiplier]]
449
- royalty_asset_dict: dict[Any, tuple[Any, uint16]] = {}
450
- fungible_asset_dict: dict[Any, uint64] = {}
467
+ royalty_assets: list[RoyaltyAsset] = []
468
+ fungible_assets: list[FungibleAsset] = []
451
469
  for item in [*offers, *requests]:
452
470
  name, amount = tuple(item.split(":")[0:2])
453
471
  try:
@@ -460,14 +478,14 @@ async def make_offer(
460
478
  name = "Unknown CAT"
461
479
  unit = units["cat"]
462
480
  if item in offers:
463
- fungible_asset_dict[name] = uint64(abs(int(Decimal(amount) * unit)))
481
+ fungible_assets.append(FungibleAsset(name, uint64(abs(int(Decimal(amount) * unit)))))
464
482
  except ValueError:
465
483
  try:
466
484
  hrp, _ = bech32_decode(name)
467
485
  if hrp == "nft":
468
486
  coin_id = decode_puzzle_hash(name)
469
487
  unit = 1
470
- info = NFTInfo.from_json_dict((await wallet_client.get_nft_info(coin_id.hex()))["nft_info"])
488
+ info = (await wallet_client.get_nft_info(NFTGetInfo(coin_id.hex()))).nft_info
471
489
  id = info.launcher_id.hex()
472
490
  assert isinstance(id, str)
473
491
  if item in requests:
@@ -494,9 +512,12 @@ async def make_offer(
494
512
  "royalty_percentage": str(info.royalty_percentage),
495
513
  },
496
514
  }
497
- royalty_asset_dict[name] = (
498
- encode_puzzle_hash(info.royalty_puzzle_hash, AddressType.XCH.hrp(config)),
499
- info.royalty_percentage,
515
+ royalty_assets.append(
516
+ RoyaltyAsset(
517
+ name,
518
+ encode_puzzle_hash(info.royalty_puzzle_hash, AddressType.XCH.hrp(config)),
519
+ info.royalty_percentage,
520
+ )
500
521
  )
501
522
  else:
502
523
  id = decode_puzzle_hash(name).hex()
@@ -511,7 +532,7 @@ async def make_offer(
511
532
  name = await wallet_client.get_cat_name(id)
512
533
  unit = units["cat"]
513
534
  if item in offers:
514
- fungible_asset_dict[name] = uint64(abs(int(Decimal(amount) * unit)))
535
+ fungible_assets.append(FungibleAsset(name, uint64(abs(int(Decimal(amount) * unit)))))
515
536
  multiplier: int = -1 if item in offers else 1
516
537
  printable_dict[name] = (amount, unit, multiplier)
517
538
  if id in offer_dict:
@@ -538,19 +559,21 @@ async def make_offer(
538
559
  print()
539
560
  print(f"Including Fees: {Decimal(fee) / units['chia']} XCH, {fee} mojos")
540
561
 
541
- if royalty_asset_dict != {}:
542
- royalty_summary: dict[Any, list[dict[str, Any]]] = await wallet_client.nft_calculate_royalties(
543
- royalty_asset_dict, fungible_asset_dict
562
+ if len(royalty_assets) > 0:
563
+ royalty_summary: NFTCalculateRoyaltiesResponse = await wallet_client.nft_calculate_royalties(
564
+ NFTCalculateRoyalties(royalty_assets, fungible_assets)
544
565
  )
545
566
  total_amounts_requested: dict[Any, int] = {}
546
567
  print()
547
568
  print("Royalties Summary:")
548
- for nft_id, summaries in royalty_summary.items():
569
+ for nft_id, summaries in royalty_summary.to_json_dict().items():
549
570
  print(f" - For {nft_id}:")
550
571
  for summary in summaries:
551
572
  divisor = units["chia"] if summary["asset"] == "XCH" else units["cat"]
552
573
  converted_amount = Decimal(summary["amount"]) / divisor
553
- total_amounts_requested.setdefault(summary["asset"], fungible_asset_dict[summary["asset"]])
574
+ total_amounts_requested.setdefault(
575
+ summary["asset"], next(a.amount for a in fungible_assets if a.asset == summary["asset"])
576
+ )
554
577
  total_amounts_requested[summary["asset"]] += summary["amount"]
555
578
  print(
556
579
  f" - {converted_amount} {summary['asset']} ({summary['amount']} mojos) to {summary['address']}" # noqa
@@ -759,17 +782,20 @@ async def take_offer(
759
782
 
760
783
  print()
761
784
 
762
- royalty_asset_dict: dict[Any, tuple[Any, uint16]] = {}
785
+ royalty_assets = []
763
786
  for royalty_asset_id in nft_coin_ids_supporting_royalties_from_offer(offer):
764
787
  if royalty_asset_id.hex() in offered:
765
788
  percentage, address = await get_nft_royalty_percentage_and_address(royalty_asset_id, wallet_client)
766
- royalty_asset_dict[encode_puzzle_hash(royalty_asset_id, AddressType.NFT.hrp(config))] = (
767
- encode_puzzle_hash(address, AddressType.XCH.hrp(config)),
768
- percentage,
789
+ royalty_assets.append(
790
+ RoyaltyAsset(
791
+ encode_puzzle_hash(royalty_asset_id, AddressType.NFT.hrp(config)),
792
+ encode_puzzle_hash(address, AddressType.XCH.hrp(config)),
793
+ percentage,
794
+ )
769
795
  )
770
796
 
771
- if royalty_asset_dict != {}:
772
- fungible_asset_dict: dict[Any, uint64] = {}
797
+ if len(royalty_assets) > 0:
798
+ fungible_assets = []
773
799
  for fungible_asset_id in fungible_assets_from_offer(offer):
774
800
  fungible_asset_id_str = fungible_asset_id.hex() if fungible_asset_id is not None else "xch"
775
801
  if fungible_asset_id_str in requested:
@@ -780,20 +806,24 @@ async def take_offer(
780
806
  result = await wallet_client.cat_asset_id_to_name(fungible_asset_id)
781
807
  if result is not None:
782
808
  nft_royalty_currency = result[1]
783
- fungible_asset_dict[nft_royalty_currency] = uint64(requested[fungible_asset_id_str])
809
+ fungible_assets.append(
810
+ FungibleAsset(nft_royalty_currency, uint64(requested[fungible_asset_id_str]))
811
+ )
784
812
 
785
- if fungible_asset_dict != {}:
786
- royalty_summary: dict[Any, list[dict[str, Any]]] = await wallet_client.nft_calculate_royalties(
787
- royalty_asset_dict, fungible_asset_dict
813
+ if len(fungible_assets) > 0:
814
+ royalty_summary = await wallet_client.nft_calculate_royalties(
815
+ NFTCalculateRoyalties(royalty_assets, fungible_assets)
788
816
  )
789
817
  total_amounts_requested: dict[Any, int] = {}
790
818
  print("Royalties Summary:")
791
- for nft_id, summaries in royalty_summary.items():
819
+ for nft_id, summaries in royalty_summary.to_json_dict().items():
792
820
  print(f" - For {nft_id}:")
793
821
  for summary in summaries:
794
822
  divisor = units["chia"] if summary["asset"] == network_xch else units["cat"]
795
823
  converted_amount = Decimal(summary["amount"]) / divisor
796
- total_amounts_requested.setdefault(summary["asset"], fungible_asset_dict[summary["asset"]])
824
+ total_amounts_requested.setdefault(
825
+ summary["asset"], next(a.amount for a in fungible_assets if a.asset == summary["asset"])
826
+ )
797
827
  total_amounts_requested[summary["asset"]] += summary["amount"]
798
828
  print(
799
829
  f" - {converted_amount} {summary['asset']} ({summary['amount']} mojos) to {summary['address']}" # noqa
@@ -861,7 +891,7 @@ async def cancel_offer(
861
891
 
862
892
 
863
893
  def wallet_coin_unit(typ: WalletType, address_prefix: str) -> tuple[str, int]:
864
- if typ in {WalletType.CAT, WalletType.CRCAT}:
894
+ if typ in {WalletType.CAT, WalletType.CRCAT, WalletType.RCAT}:
865
895
  return "", units["cat"]
866
896
  if typ in {WalletType.STANDARD_WALLET, WalletType.POOLING_WALLET, WalletType.MULTI_SIG}:
867
897
  return address_prefix, units["chia"]
@@ -932,12 +962,11 @@ async def print_balances(
932
962
  print(f"{indent}{'-Spendable:'.ljust(ljust)} {spendable_balance}")
933
963
  print(f"{indent}{'-Type:'.ljust(ljust)} {typ.name}")
934
964
  if typ == WalletType.DECENTRALIZED_ID:
935
- get_did_response = await wallet_client.get_did_id(wallet_id)
936
- my_did = get_did_response["my_did"]
965
+ get_did_response = await wallet_client.get_did_id(DIDGetDID(wallet_id))
966
+ my_did = get_did_response.my_did
937
967
  print(f"{indent}{'-DID ID:'.ljust(ljust)} {my_did}")
938
968
  elif typ == WalletType.NFT:
939
- get_did_response = await wallet_client.get_nft_wallet_did(wallet_id)
940
- my_did = get_did_response["did_id"]
969
+ my_did = (await wallet_client.get_nft_wallet_did(NFTGetWalletDID(wallet_id))).did_id
941
970
  if my_did is not None and len(my_did) > 0:
942
971
  print(f"{indent}{'-DID ID:'.ljust(ljust)} {my_did}")
943
972
  elif len(asset_id) > 0:
@@ -985,7 +1014,7 @@ async def did_set_wallet_name(
985
1014
  ) -> None:
986
1015
  async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
987
1016
  try:
988
- await wallet_client.did_set_wallet_name(wallet_id, name)
1017
+ await wallet_client.did_set_wallet_name(DIDSetWalletName(uint32(wallet_id), name))
989
1018
  print(f"Successfully set a new name for DID wallet with id {wallet_id}: {name}")
990
1019
  except Exception as e:
991
1020
  print(f"Failed to set DID wallet name: {e}")
@@ -996,11 +1025,9 @@ async def get_did(
996
1025
  ) -> None:
997
1026
  async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
998
1027
  try:
999
- response = await wallet_client.get_did_id(did_wallet_id)
1000
- my_did = response["my_did"]
1001
- coin_id = response["coin_id"]
1002
- print(f"{'DID:'.ljust(23)} {my_did}")
1003
- print(f"{'Coin ID:'.ljust(23)} {coin_id}")
1028
+ response = await wallet_client.get_did_id(DIDGetDID(uint32(did_wallet_id)))
1029
+ print(f"{'DID:'.ljust(23)} {response.my_did}")
1030
+ print(f"{'Coin ID:'.ljust(23)} {response.coin_id.hex() if response.coin_id is not None else 'Unknown'}")
1004
1031
  except Exception as e:
1005
1032
  print(f"Failed to get DID: {e}")
1006
1033
 
@@ -1011,18 +1038,21 @@ async def get_did_info(
1011
1038
  async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
1012
1039
  did_padding_length = 23
1013
1040
  try:
1014
- response = await wallet_client.get_did_info(coin_id, latest)
1015
- print(f"{'DID:'.ljust(did_padding_length)} {response['did_id']}")
1016
- print(f"{'Coin ID:'.ljust(did_padding_length)} {response['latest_coin']}")
1017
- print(f"{'Inner P2 Address:'.ljust(did_padding_length)} {response['p2_address']}")
1018
- print(f"{'Public Key:'.ljust(did_padding_length)} {response['public_key']}")
1019
- print(f"{'Launcher ID:'.ljust(did_padding_length)} {response['launcher_id']}")
1020
- print(f"{'DID Metadata:'.ljust(did_padding_length)} {response['metadata']}")
1021
- print(f"{'Recovery List Hash:'.ljust(did_padding_length)} {response['recovery_list_hash']}")
1022
- print(f"{'Recovery Required Verifications:'.ljust(did_padding_length)} {response['num_verification']}")
1023
- print(f"{'Last Spend Puzzle:'.ljust(did_padding_length)} {response['full_puzzle']}")
1024
- print(f"{'Last Spend Solution:'.ljust(did_padding_length)} {response['solution']}")
1025
- print(f"{'Last Spend Hints:'.ljust(did_padding_length)} {response['hints']}")
1041
+ response = await wallet_client.get_did_info(DIDGetInfo(coin_id, latest))
1042
+ print(f"{'DID:'.ljust(did_padding_length)} {response.did_id}")
1043
+ print(f"{'Coin ID:'.ljust(did_padding_length)} {response.latest_coin.hex()}")
1044
+ print(f"{'Inner P2 Address:'.ljust(did_padding_length)} {response.p2_address}")
1045
+ print(f"{'Public Key:'.ljust(did_padding_length)} {response.public_key.hex()}")
1046
+ print(f"{'Launcher ID:'.ljust(did_padding_length)} {response.launcher_id.hex()}")
1047
+ print(f"{'DID Metadata:'.ljust(did_padding_length)} {response.metadata}")
1048
+ print(
1049
+ f"{'Recovery List Hash:'.ljust(did_padding_length)} "
1050
+ + (response.recovery_list_hash.hex() if response.recovery_list_hash is not None else "")
1051
+ )
1052
+ print(f"{'Recovery Required Verifications:'.ljust(did_padding_length)} {response.num_verification}")
1053
+ print(f"{'Last Spend Puzzle:'.ljust(did_padding_length)} {bytes(response.full_puzzle).hex()}")
1054
+ print(f"{'Last Spend Solution:'.ljust(did_padding_length)} {bytes(response.solution).hex()}")
1055
+ print(f"{'Last Spend Hints:'.ljust(did_padding_length)} {[hint.hex() for hint in response.hints]}")
1026
1056
 
1027
1057
  except Exception as e:
1028
1058
  print(f"Failed to get DID details: {e}")
@@ -1041,12 +1071,14 @@ async def update_did_metadata(
1041
1071
  async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
1042
1072
  try:
1043
1073
  response = await wallet_client.update_did_metadata(
1044
- did_wallet_id,
1045
- json.loads(metadata),
1074
+ DIDUpdateMetadata(
1075
+ wallet_id=uint32(did_wallet_id),
1076
+ metadata=json.loads(metadata),
1077
+ push=push,
1078
+ ),
1046
1079
  tx_config=CMDTXConfigLoader(
1047
1080
  reuse_puzhash=reuse_puzhash,
1048
1081
  ).to_tx_config(units["chia"], config, fingerprint),
1049
- push=push,
1050
1082
  timelock_info=condition_valid_times,
1051
1083
  )
1052
1084
  if push:
@@ -1073,13 +1105,12 @@ async def did_message_spend(
1073
1105
  async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
1074
1106
  try:
1075
1107
  response = await wallet_client.did_message_spend(
1076
- did_wallet_id,
1108
+ DIDMessageSpend(wallet_id=uint32(did_wallet_id), push=push),
1077
1109
  CMDTXConfigLoader().to_tx_config(units["chia"], config, fingerprint),
1078
1110
  extra_conditions=(
1079
1111
  *(CreateCoinAnnouncement(hexstr_to_bytes(ca)) for ca in coin_announcements),
1080
1112
  *(CreatePuzzleAnnouncement(hexstr_to_bytes(pa)) for pa in puzzle_announcements),
1081
1113
  ),
1082
- push=push,
1083
1114
  timelock_info=condition_valid_times,
1084
1115
  )
1085
1116
  print(f"Message Spend Bundle: {response.spend_bundle.to_json_dict()}")
@@ -1105,14 +1136,16 @@ async def transfer_did(
1105
1136
  try:
1106
1137
  target_address = target_cli_address.original_address
1107
1138
  response = await wallet_client.did_transfer_did(
1108
- did_wallet_id,
1109
- target_address,
1110
- fee,
1111
- with_recovery,
1139
+ DIDTransferDID(
1140
+ wallet_id=uint32(did_wallet_id),
1141
+ inner_address=target_address,
1142
+ fee=fee,
1143
+ with_recovery_info=with_recovery,
1144
+ push=push,
1145
+ ),
1112
1146
  tx_config=CMDTXConfigLoader(
1113
1147
  reuse_puzhash=reuse_puzhash,
1114
1148
  ).to_tx_config(units["chia"], config, fingerprint),
1115
- push=push,
1116
1149
  timelock_info=condition_valid_times,
1117
1150
  )
1118
1151
  if push:
@@ -1131,22 +1164,21 @@ async def find_lost_did(
1131
1164
  wallet_rpc_port: Optional[int],
1132
1165
  fp: Optional[int],
1133
1166
  coin_id: str,
1134
- metadata: Optional[Any],
1167
+ metadata: Optional[str],
1135
1168
  recovery_list_hash: Optional[str],
1136
1169
  num_verification: Optional[int],
1137
1170
  ) -> None:
1138
1171
  async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, _):
1139
1172
  try:
1140
1173
  response = await wallet_client.find_lost_did(
1141
- coin_id,
1142
- recovery_list_hash,
1143
- metadata,
1144
- num_verification,
1174
+ DIDFindLostDID(
1175
+ coin_id,
1176
+ bytes32.from_hexstr(recovery_list_hash) if recovery_list_hash is not None else None,
1177
+ uint16.construct_optional(num_verification),
1178
+ json.loads(metadata) if metadata is not None else None,
1179
+ )
1145
1180
  )
1146
- if response["success"]:
1147
- print(f"Successfully found lost DID {coin_id}, latest coin ID: {response['latest_coin_id']}")
1148
- else:
1149
- print(f"Cannot find lost DID {coin_id}: {response['error']}")
1181
+ print(f"Successfully found lost DID {coin_id}, latest coin ID: {response.latest_coin_id.hex()}")
1150
1182
  except Exception as e:
1151
1183
  print(f"Failed to find lost DID: {e}")
1152
1184
 
@@ -1194,8 +1226,8 @@ async def mint_nft(
1194
1226
  royalty_address = royalty_cli_address.validate_address_type(AddressType.XCH) if royalty_cli_address else None
1195
1227
  target_address = target_cli_address.validate_address_type(AddressType.XCH) if target_cli_address else None
1196
1228
  try:
1197
- response = await wallet_client.get_nft_wallet_did(wallet_id)
1198
- wallet_did = response["did_id"]
1229
+ response = await wallet_client.get_nft_wallet_did(NFTGetWalletDID(uint32(wallet_id)))
1230
+ wallet_did = response.did_id
1199
1231
  wallet_has_did = wallet_did is not None
1200
1232
  did_id: Optional[str] = wallet_did
1201
1233
  # Handle the case when the user wants to disable DID ownership
@@ -1209,24 +1241,26 @@ async def mint_nft(
1209
1241
  did_id = ""
1210
1242
 
1211
1243
  mint_response = await wallet_client.mint_nft(
1212
- wallet_id,
1213
- royalty_address,
1214
- target_address,
1215
- hash,
1216
- uris,
1217
- CMDTXConfigLoader(
1244
+ request=NFTMintNFTRequest(
1245
+ wallet_id=uint32(wallet_id),
1246
+ royalty_address=royalty_address,
1247
+ target_address=target_address,
1248
+ hash=bytes32.from_hexstr(hash),
1249
+ uris=uris,
1250
+ meta_hash=bytes32.from_hexstr(metadata_hash) if metadata_hash is not None else None,
1251
+ meta_uris=metadata_uris,
1252
+ license_hash=bytes32.from_hexstr(license_hash) if license_hash is not None else None,
1253
+ license_uris=license_uris,
1254
+ edition_total=uint64(edition_total) if edition_total is not None else uint64(1),
1255
+ edition_number=uint64(edition_number) if edition_number is not None else uint64(1),
1256
+ fee=fee,
1257
+ royalty_amount=uint16(royalty_percentage),
1258
+ did_id=did_id,
1259
+ push=push,
1260
+ ),
1261
+ tx_config=CMDTXConfigLoader(
1218
1262
  reuse_puzhash=reuse_puzhash,
1219
1263
  ).to_tx_config(units["chia"], config, fingerprint),
1220
- metadata_hash,
1221
- metadata_uris,
1222
- license_hash,
1223
- license_uris,
1224
- edition_total,
1225
- edition_number,
1226
- fee,
1227
- royalty_percentage,
1228
- did_id,
1229
- push=push,
1230
1264
  timelock_info=condition_valid_times,
1231
1265
  )
1232
1266
  spend_bundle = mint_response.spend_bundle
@@ -1269,15 +1303,17 @@ async def add_uri_to_nft(
1269
1303
  else:
1270
1304
  raise ValueError("You must provide at least one of the URI flags")
1271
1305
  response = await wallet_client.add_uri_to_nft(
1272
- wallet_id,
1273
- nft_coin_id,
1274
- key,
1275
- uri_value,
1276
- fee,
1306
+ NFTAddURI(
1307
+ wallet_id=uint32(wallet_id),
1308
+ nft_coin_id=nft_coin_id,
1309
+ key=key,
1310
+ uri=uri_value,
1311
+ fee=fee,
1312
+ push=push,
1313
+ ),
1277
1314
  tx_config=CMDTXConfigLoader(
1278
1315
  reuse_puzhash=reuse_puzhash,
1279
1316
  ).to_tx_config(units["chia"], config, fingerprint),
1280
- push=push,
1281
1317
  timelock_info=condition_valid_times,
1282
1318
  )
1283
1319
  spend_bundle = response.spend_bundle.to_json_dict()
@@ -1306,14 +1342,16 @@ async def transfer_nft(
1306
1342
  try:
1307
1343
  target_address = target_cli_address.validate_address_type(AddressType.XCH)
1308
1344
  response = await wallet_client.transfer_nft(
1309
- wallet_id,
1310
- nft_coin_id,
1311
- target_address,
1312
- fee,
1345
+ NFTTransferNFT(
1346
+ wallet_id=uint32(wallet_id),
1347
+ nft_coin_id=nft_coin_id,
1348
+ target_address=target_address,
1349
+ fee=fee,
1350
+ push=push,
1351
+ ),
1313
1352
  tx_config=CMDTXConfigLoader(
1314
1353
  reuse_puzhash=reuse_puzhash,
1315
1354
  ).to_tx_config(units["chia"], config, fingerprint),
1316
- push=push,
1317
1355
  timelock_info=condition_valid_times,
1318
1356
  )
1319
1357
  spend_bundle = response.spend_bundle.to_json_dict()
@@ -1373,11 +1411,10 @@ async def list_nfts(
1373
1411
  ) -> None:
1374
1412
  async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
1375
1413
  try:
1376
- response = await wallet_client.list_nfts(wallet_id, num, start_index)
1377
- nft_list = response["nft_list"]
1414
+ response = await wallet_client.list_nfts(NFTGetNFTs(uint32(wallet_id), uint32(start_index), uint32(num)))
1415
+ nft_list = response.nft_list
1378
1416
  if len(nft_list) > 0:
1379
- for n in nft_list:
1380
- nft = NFTInfo.from_json_dict(n)
1417
+ for nft in nft_list:
1381
1418
  print_nft_info(nft, config=config)
1382
1419
  else:
1383
1420
  print(f"No NFTs found for wallet with id {wallet_id} on key {fingerprint}")
@@ -1401,14 +1438,16 @@ async def set_nft_did(
1401
1438
  async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, fingerprint, config):
1402
1439
  try:
1403
1440
  response = await wallet_client.set_nft_did(
1404
- wallet_id,
1405
- did_id,
1406
- nft_coin_id,
1407
- fee,
1441
+ NFTSetNFTDID(
1442
+ wallet_id=uint32(wallet_id),
1443
+ did_id=did_id,
1444
+ nft_coin_id=bytes32.from_hexstr(nft_coin_id),
1445
+ fee=fee,
1446
+ push=push,
1447
+ ),
1408
1448
  tx_config=CMDTXConfigLoader(
1409
1449
  reuse_puzhash=reuse_puzhash,
1410
1450
  ).to_tx_config(units["chia"], config, fingerprint),
1411
- push=push,
1412
1451
  timelock_info=condition_valid_times,
1413
1452
  )
1414
1453
  spend_bundle = response.spend_bundle.to_json_dict()
@@ -1424,9 +1463,8 @@ async def get_nft_info(
1424
1463
  ) -> None:
1425
1464
  async with get_wallet_client(root_path, wallet_rpc_port, fp) as (wallet_client, _, config):
1426
1465
  try:
1427
- response = await wallet_client.get_nft_info(nft_coin_id)
1428
- nft_info = NFTInfo.from_json_dict(response["nft_info"])
1429
- print_nft_info(nft_info, config=config)
1466
+ response = await wallet_client.get_nft_info(NFTGetInfo(nft_coin_id))
1467
+ print_nft_info(response.nft_info, config=config)
1430
1468
  except Exception as e:
1431
1469
  print(f"Failed to get NFT info: {e}")
1432
1470
 
@@ -1434,7 +1472,7 @@ async def get_nft_info(
1434
1472
  async def get_nft_royalty_percentage_and_address(
1435
1473
  nft_coin_id: bytes32, wallet_client: WalletRpcClient
1436
1474
  ) -> tuple[uint16, bytes32]:
1437
- info = NFTInfo.from_json_dict((await wallet_client.get_nft_info(nft_coin_id.hex()))["nft_info"])
1475
+ info = (await wallet_client.get_nft_info(NFTGetInfo(nft_coin_id.hex()))).nft_info
1438
1476
  assert info.royalty_puzzle_hash is not None
1439
1477
  percentage = uint16(info.royalty_percentage) if info.royalty_percentage is not None else 0
1440
1478
  return uint16(percentage), info.royalty_puzzle_hash
@@ -1469,11 +1507,7 @@ def driver_dict_asset_is_nft_supporting_royalties(driver_dict: dict[bytes32, Puz
1469
1507
 
1470
1508
  def driver_dict_asset_is_fungible(driver_dict: dict[bytes32, PuzzleInfo], asset_id: bytes32) -> bool:
1471
1509
  asset_dict: PuzzleInfo = driver_dict[asset_id]
1472
- return not asset_dict.check_type(
1473
- [
1474
- AssetType.SINGLETON.value,
1475
- ]
1476
- )
1510
+ return asset_dict.type() != AssetType.SINGLETON.value
1477
1511
 
1478
1512
 
1479
1513
  def nft_coin_ids_supporting_royalties_from_offer(offer: Offer) -> list[bytes32]:
@@ -2,12 +2,11 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING, ClassVar, Optional, cast
4
4
 
5
+ from chia_rs import BlockRecord, FullBlock
5
6
  from chia_rs.sized_bytes import bytes32
6
7
  from chia_rs.sized_ints import uint32
7
8
 
8
- from chia.consensus.block_record import BlockRecord
9
9
  from chia.consensus.blockchain_interface import BlocksProtocol
10
- from chia.types.full_block import FullBlock
11
10
  from chia.util.errors import Err
12
11
 
13
12