chia-blockchain 2.5.7rc4__py3-none-any.whl → 2.5.8rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. chia/__init__.py +8 -4
  2. chia/_tests/blockchain/blockchain_test_utils.py +6 -8
  3. chia/_tests/blockchain/test_augmented_chain.py +4 -4
  4. chia/_tests/blockchain/test_blockchain.py +165 -190
  5. chia/_tests/blockchain/test_build_chains.py +2 -4
  6. chia/_tests/blockchain/test_get_block_generator.py +2 -3
  7. chia/_tests/clvm/coin_store.py +4 -7
  8. chia/_tests/clvm/test_clvm_step.py +4 -4
  9. chia/_tests/clvm/test_puzzle_compression.py +2 -1
  10. chia/_tests/clvm/test_puzzle_drivers.py +2 -2
  11. chia/_tests/clvm/test_singletons.py +2 -4
  12. chia/_tests/clvm/test_spend_sim.py +2 -2
  13. chia/_tests/cmds/cmd_test_utils.py +27 -45
  14. chia/_tests/cmds/test_cmd_framework.py +6 -6
  15. chia/_tests/cmds/test_daemon.py +3 -3
  16. chia/_tests/cmds/test_show.py +4 -4
  17. chia/_tests/cmds/test_tx_config_args.py +1 -2
  18. chia/_tests/cmds/testing_classes.py +4 -5
  19. chia/_tests/cmds/wallet/test_did.py +24 -27
  20. chia/_tests/cmds/wallet/test_nft.py +12 -10
  21. chia/_tests/cmds/wallet/test_vcs.py +11 -12
  22. chia/_tests/cmds/wallet/test_wallet.py +134 -89
  23. chia/_tests/conftest.py +59 -30
  24. chia/_tests/connection_utils.py +2 -2
  25. chia/_tests/core/cmds/test_beta.py +4 -4
  26. chia/_tests/core/cmds/test_keys.py +2 -3
  27. chia/_tests/core/cmds/test_wallet.py +15 -15
  28. chia/_tests/core/consensus/test_pot_iterations.py +19 -73
  29. chia/_tests/core/custom_types/test_proof_of_space.py +124 -98
  30. chia/_tests/core/daemon/test_daemon.py +11 -11
  31. chia/_tests/core/data_layer/conftest.py +2 -2
  32. chia/_tests/core/data_layer/test_data_rpc.py +28 -14
  33. chia/_tests/core/data_layer/test_data_store.py +10 -10
  34. chia/_tests/core/data_layer/util.py +11 -11
  35. chia/_tests/core/farmer/test_farmer_api.py +2 -4
  36. chia/_tests/core/full_node/full_sync/test_full_sync.py +8 -7
  37. chia/_tests/core/full_node/stores/test_block_store.py +5 -4
  38. chia/_tests/core/full_node/stores/test_coin_store.py +5 -11
  39. chia/_tests/core/full_node/stores/test_full_node_store.py +8 -8
  40. chia/_tests/core/full_node/stores/test_hint_store.py +2 -2
  41. chia/_tests/core/full_node/test_block_height_map.py +3 -4
  42. chia/_tests/core/full_node/test_conditions.py +21 -23
  43. chia/_tests/core/full_node/test_full_node.py +225 -62
  44. chia/_tests/core/full_node/test_hint_management.py +2 -4
  45. chia/_tests/core/full_node/test_performance.py +0 -1
  46. chia/_tests/core/full_node/test_prev_tx_block.py +88 -11
  47. chia/_tests/core/full_node/test_transactions.py +1 -2
  48. chia/_tests/core/full_node/test_tx_processing_queue.py +109 -25
  49. chia/_tests/core/mempool/test_mempool.py +29 -37
  50. chia/_tests/core/mempool/test_mempool_fee_estimator.py +39 -39
  51. chia/_tests/core/mempool/test_mempool_fee_protocol.py +2 -6
  52. chia/_tests/core/mempool/test_mempool_manager.py +963 -839
  53. chia/_tests/core/mempool/test_singleton_fast_forward.py +6 -6
  54. chia/_tests/core/server/serve.py +7 -7
  55. chia/_tests/core/server/test_dos.py +1 -2
  56. chia/_tests/core/server/test_event_loop.py +12 -4
  57. chia/_tests/core/server/test_loop.py +7 -8
  58. chia/_tests/core/server/test_rate_limits.py +9 -8
  59. chia/_tests/core/server/test_server.py +61 -1
  60. chia/_tests/core/services/test_services.py +2 -2
  61. chia/_tests/core/ssl/test_ssl.py +2 -2
  62. chia/_tests/core/test_cost_calculation.py +2 -6
  63. chia/_tests/core/test_farmer_harvester_rpc.py +3 -5
  64. chia/_tests/core/test_filter.py +0 -1
  65. chia/_tests/core/test_full_node_rpc.py +2 -2
  66. chia/_tests/core/test_merkle_set.py +1 -2
  67. chia/_tests/core/test_seeder.py +4 -4
  68. chia/_tests/core/util/test_config.py +4 -4
  69. chia/_tests/core/util/test_jsonify.py +2 -2
  70. chia/_tests/core/util/test_keychain.py +3 -3
  71. chia/_tests/core/util/test_lockfile.py +2 -1
  72. chia/_tests/core/util/test_log_exceptions.py +1 -2
  73. chia/_tests/core/util/test_streamable.py +17 -17
  74. chia/_tests/db/test_db_wrapper.py +3 -2
  75. chia/_tests/environments/wallet.py +14 -14
  76. chia/_tests/ether.py +4 -3
  77. chia/_tests/farmer_harvester/test_farmer.py +41 -24
  78. chia/_tests/farmer_harvester/test_farmer_harvester.py +50 -17
  79. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +27 -27
  80. chia/_tests/farmer_harvester/test_third_party_harvesters.py +21 -22
  81. chia/_tests/fee_estimation/test_fee_estimation_integration.py +18 -18
  82. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +11 -9
  83. chia/_tests/harvester/test_harvester_api.py +11 -4
  84. chia/_tests/plot_sync/test_plot_sync.py +13 -11
  85. chia/_tests/plot_sync/test_receiver.py +11 -10
  86. chia/_tests/plot_sync/test_sync_simulated.py +2 -2
  87. chia/_tests/plot_sync/util.py +1 -2
  88. chia/_tests/plotting/test_plot_manager.py +7 -6
  89. chia/_tests/plotting/test_prover.py +30 -38
  90. chia/_tests/pools/test_pool_cmdline.py +4 -6
  91. chia/_tests/pools/test_pool_rpc.py +203 -61
  92. chia/_tests/pools/test_pool_wallet.py +3 -3
  93. chia/_tests/pools/test_wallet_pool_store.py +1 -4
  94. chia/_tests/process_junit.py +2 -2
  95. chia/_tests/rpc/test_rpc_client.py +4 -4
  96. chia/_tests/rpc/test_rpc_server.py +3 -3
  97. chia/_tests/simulation/test_simulation.py +12 -25
  98. chia/_tests/solver/test_solver_service.py +13 -4
  99. chia/_tests/testconfig.py +2 -2
  100. chia/_tests/timelord/test_new_peak.py +22 -11
  101. chia/_tests/tools/test_run_block.py +0 -2
  102. chia/_tests/tools/test_virtual_project.py +2 -1
  103. chia/_tests/util/benchmarks.py +1 -0
  104. chia/_tests/util/blockchain.py +38 -36
  105. chia/_tests/util/blockchain_mock.py +11 -11
  106. chia/_tests/util/build_network_protocol_files.py +2 -1
  107. chia/_tests/util/coin_store.py +2 -1
  108. chia/_tests/util/config.py +1 -1
  109. chia/_tests/util/db_connection.py +2 -3
  110. chia/_tests/util/full_sync.py +9 -11
  111. chia/_tests/util/gen_ssl_certs.py +4 -5
  112. chia/_tests/util/get_name_puzzle_conditions.py +2 -0
  113. chia/_tests/util/misc.py +24 -24
  114. chia/_tests/util/network_protocol_data.py +20 -3
  115. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  116. chia/_tests/util/protocol_messages_json.py +292 -3
  117. chia/_tests/util/setup_nodes.py +62 -47
  118. chia/_tests/util/spend_sim.py +57 -57
  119. chia/_tests/util/test_async_pool.py +2 -3
  120. chia/_tests/util/test_chia_version.py +1 -3
  121. chia/_tests/util/test_config.py +3 -3
  122. chia/_tests/util/test_full_block_utils.py +6 -3
  123. chia/_tests/util/test_limited_semaphore.py +1 -2
  124. chia/_tests/util/test_misc.py +2 -2
  125. chia/_tests/util/test_network.py +1 -2
  126. chia/_tests/util/test_priority_mutex.py +3 -3
  127. chia/_tests/util/test_recursive_replace.py +5 -6
  128. chia/_tests/util/test_replace_str_to_bytes.py +8 -10
  129. chia/_tests/util/test_testnet_overrides.py +3 -3
  130. chia/_tests/util/time_out_assert.py +2 -2
  131. chia/_tests/wallet/cat_wallet/test_cat_lifecycle.py +4 -6
  132. chia/_tests/wallet/cat_wallet/test_cat_outer_puzzle.py +2 -4
  133. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +19 -13
  134. chia/_tests/wallet/cat_wallet/test_offer_lifecycle.py +13 -13
  135. chia/_tests/wallet/cat_wallet/test_trades.py +40 -38
  136. chia/_tests/wallet/clawback/test_clawback_lifecycle.py +2 -4
  137. chia/_tests/wallet/conftest.py +6 -6
  138. chia/_tests/wallet/db_wallet/test_db_graftroot.py +1 -1
  139. chia/_tests/wallet/db_wallet/test_dl_offers.py +34 -34
  140. chia/_tests/wallet/did_wallet/test_did.py +16 -6
  141. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +21 -21
  142. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +20 -6
  143. chia/_tests/wallet/nft_wallet/test_nft_offers.py +19 -21
  144. chia/_tests/wallet/nft_wallet/test_nft_puzzles.py +1 -2
  145. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +121 -2
  146. chia/_tests/wallet/nft_wallet/test_ownership_outer_puzzle.py +6 -9
  147. chia/_tests/wallet/rpc/test_dl_wallet_rpc.py +44 -1
  148. chia/_tests/wallet/rpc/test_wallet_rpc.py +1672 -896
  149. chia/_tests/wallet/sync/test_wallet_sync.py +43 -47
  150. chia/_tests/wallet/test_clvm_streamable.py +2 -3
  151. chia/_tests/wallet/test_coin_management.py +2 -2
  152. chia/_tests/wallet/test_conditions.py +45 -51
  153. chia/_tests/wallet/test_debug_spend_bundle.py +2 -2
  154. chia/_tests/wallet/test_new_wallet_protocol.py +4 -6
  155. chia/_tests/wallet/test_notifications.py +14 -14
  156. chia/_tests/wallet/test_signer_protocol.py +5 -5
  157. chia/_tests/wallet/test_singleton_lifecycle_fast.py +4 -3
  158. chia/_tests/wallet/test_transaction_store.py +20 -20
  159. chia/_tests/wallet/test_util.py +2 -2
  160. chia/_tests/wallet/test_wallet.py +380 -228
  161. chia/_tests/wallet/test_wallet_action_scope.py +4 -4
  162. chia/_tests/wallet/test_wallet_blockchain.py +12 -12
  163. chia/_tests/wallet/test_wallet_coin_store.py +3 -4
  164. chia/_tests/wallet/test_wallet_node.py +14 -14
  165. chia/_tests/wallet/test_wallet_test_framework.py +2 -1
  166. chia/_tests/wallet/test_wallet_utils.py +2 -3
  167. chia/_tests/wallet/vc_wallet/test_cr_outer_puzzle.py +3 -5
  168. chia/_tests/wallet/vc_wallet/test_vc_lifecycle.py +14 -15
  169. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +29 -24
  170. chia/_tests/wallet/wallet_block_tools.py +12 -11
  171. chia/_tests/weight_proof/config.py +1 -0
  172. chia/_tests/weight_proof/test_weight_proof.py +5 -4
  173. chia/apis/__init__.py +21 -0
  174. chia/apis/farmer_stub.py +102 -0
  175. chia/apis/full_node_stub.py +372 -0
  176. chia/apis/harvester_stub.py +57 -0
  177. chia/apis/introducer_stub.py +35 -0
  178. chia/apis/solver_stub.py +30 -0
  179. chia/apis/stub_protocol_registry.py +21 -0
  180. chia/apis/timelord_stub.py +39 -0
  181. chia/apis/wallet_stub.py +161 -0
  182. chia/cmds/beta.py +3 -4
  183. chia/cmds/beta_funcs.py +4 -3
  184. chia/cmds/check_wallet_db.py +4 -4
  185. chia/cmds/chia.py +1 -2
  186. chia/cmds/cmd_classes.py +11 -13
  187. chia/cmds/cmd_helpers.py +11 -11
  188. chia/cmds/cmds_util.py +15 -15
  189. chia/cmds/coin_funcs.py +6 -7
  190. chia/cmds/coins.py +2 -3
  191. chia/cmds/configure.py +1 -2
  192. chia/cmds/data.py +42 -42
  193. chia/cmds/data_funcs.py +81 -81
  194. chia/cmds/db.py +4 -5
  195. chia/cmds/db_backup_func.py +2 -2
  196. chia/cmds/db_upgrade_func.py +3 -3
  197. chia/cmds/db_validate_func.py +2 -2
  198. chia/cmds/dev/data.py +4 -4
  199. chia/cmds/dev/gh.py +5 -5
  200. chia/cmds/dev/installers.py +2 -3
  201. chia/cmds/dev/mempool.py +3 -4
  202. chia/cmds/dev/mempool_funcs.py +4 -4
  203. chia/cmds/dev/sim.py +8 -8
  204. chia/cmds/dump_keyring.py +3 -3
  205. chia/cmds/farm.py +6 -8
  206. chia/cmds/farm_funcs.py +25 -24
  207. chia/cmds/init_funcs.py +4 -4
  208. chia/cmds/keys.py +16 -18
  209. chia/cmds/keys_funcs.py +36 -36
  210. chia/cmds/netspace.py +1 -3
  211. chia/cmds/netspace_funcs.py +1 -2
  212. chia/cmds/options.py +3 -2
  213. chia/cmds/param_types.py +17 -16
  214. chia/cmds/passphrase.py +6 -7
  215. chia/cmds/passphrase_funcs.py +11 -13
  216. chia/cmds/peer.py +1 -3
  217. chia/cmds/peer_funcs.py +3 -3
  218. chia/cmds/plotnft.py +6 -7
  219. chia/cmds/plotnft_funcs.py +37 -26
  220. chia/cmds/rpc.py +3 -3
  221. chia/cmds/show.py +3 -5
  222. chia/cmds/show_funcs.py +9 -9
  223. chia/cmds/sim_funcs.py +25 -26
  224. chia/cmds/solver.py +1 -3
  225. chia/cmds/solver_funcs.py +1 -2
  226. chia/cmds/start_funcs.py +2 -2
  227. chia/cmds/wallet.py +76 -81
  228. chia/cmds/wallet_funcs.py +206 -177
  229. chia/consensus/augmented_chain.py +6 -6
  230. chia/consensus/block_body_validation.py +19 -15
  231. chia/consensus/block_creation.py +25 -21
  232. chia/consensus/block_header_validation.py +27 -13
  233. chia/consensus/block_height_map.py +3 -6
  234. chia/consensus/block_height_map_protocol.py +2 -2
  235. chia/consensus/block_record.py +2 -4
  236. chia/consensus/blockchain.py +58 -40
  237. chia/consensus/blockchain_interface.py +7 -7
  238. chia/consensus/coin_store_protocol.py +5 -6
  239. chia/consensus/condition_tools.py +4 -4
  240. chia/consensus/cost_calculator.py +2 -3
  241. chia/consensus/default_constants.py +16 -13
  242. chia/consensus/deficit.py +1 -3
  243. chia/consensus/difficulty_adjustment.py +3 -5
  244. chia/consensus/find_fork_point.py +2 -4
  245. chia/consensus/full_block_to_block_record.py +11 -13
  246. chia/consensus/generator_tools.py +2 -3
  247. chia/consensus/get_block_challenge.py +42 -26
  248. chia/consensus/get_block_generator.py +2 -3
  249. chia/consensus/make_sub_epoch_summary.py +8 -7
  250. chia/consensus/multiprocess_validation.py +31 -20
  251. chia/consensus/pos_quality.py +6 -23
  252. chia/consensus/pot_iterations.py +17 -44
  253. chia/consensus/signage_point.py +4 -5
  254. chia/consensus/vdf_info_computation.py +2 -4
  255. chia/daemon/client.py +8 -8
  256. chia/daemon/keychain_proxy.py +31 -37
  257. chia/daemon/server.py +32 -33
  258. chia/daemon/windows_signal.py +4 -3
  259. chia/data_layer/data_layer.py +86 -77
  260. chia/data_layer/data_layer_rpc_api.py +9 -9
  261. chia/data_layer/data_layer_rpc_client.py +13 -15
  262. chia/data_layer/data_layer_server.py +3 -3
  263. chia/data_layer/data_layer_util.py +14 -14
  264. chia/data_layer/data_layer_wallet.py +94 -101
  265. chia/data_layer/data_store.py +50 -50
  266. chia/data_layer/dl_wallet_store.py +9 -12
  267. chia/data_layer/download_data.py +8 -9
  268. chia/data_layer/s3_plugin_service.py +5 -9
  269. chia/data_layer/start_data_layer.py +5 -5
  270. chia/farmer/farmer.py +31 -31
  271. chia/farmer/farmer_api.py +45 -33
  272. chia/farmer/farmer_rpc_api.py +5 -4
  273. chia/farmer/farmer_rpc_client.py +6 -6
  274. chia/farmer/start_farmer.py +6 -6
  275. chia/full_node/block_store.py +13 -16
  276. chia/full_node/check_fork_next_block.py +1 -2
  277. chia/full_node/coin_store.py +15 -16
  278. chia/full_node/eligible_coin_spends.py +3 -3
  279. chia/full_node/fee_estimate_store.py +2 -3
  280. chia/full_node/fee_tracker.py +1 -2
  281. chia/full_node/full_block_utils.py +4 -4
  282. chia/full_node/full_node.py +238 -224
  283. chia/full_node/full_node_api.py +193 -150
  284. chia/full_node/full_node_rpc_api.py +53 -31
  285. chia/full_node/full_node_rpc_client.py +18 -19
  286. chia/full_node/full_node_store.py +45 -43
  287. chia/full_node/hint_management.py +2 -2
  288. chia/full_node/mempool.py +17 -19
  289. chia/full_node/mempool_manager.py +89 -42
  290. chia/full_node/pending_tx_cache.py +2 -3
  291. chia/full_node/start_full_node.py +5 -5
  292. chia/full_node/sync_store.py +3 -4
  293. chia/full_node/tx_processing_queue.py +34 -13
  294. chia/full_node/weight_proof.py +61 -48
  295. chia/harvester/harvester.py +25 -24
  296. chia/harvester/harvester_api.py +61 -38
  297. chia/harvester/harvester_rpc_api.py +10 -10
  298. chia/harvester/start_harvester.py +4 -4
  299. chia/introducer/introducer.py +3 -3
  300. chia/introducer/introducer_api.py +6 -4
  301. chia/introducer/start_introducer.py +4 -4
  302. chia/legacy/keyring.py +3 -3
  303. chia/plot_sync/delta.py +1 -2
  304. chia/plot_sync/receiver.py +20 -17
  305. chia/plot_sync/sender.py +15 -10
  306. chia/plotters/bladebit.py +7 -7
  307. chia/plotters/chiapos.py +2 -2
  308. chia/plotters/madmax.py +4 -4
  309. chia/plotters/plotters.py +4 -4
  310. chia/plotters/plotters_util.py +3 -3
  311. chia/plotting/cache.py +20 -14
  312. chia/plotting/check_plots.py +26 -35
  313. chia/plotting/create_plots.py +22 -23
  314. chia/plotting/manager.py +21 -14
  315. chia/plotting/prover.py +59 -42
  316. chia/plotting/util.py +16 -16
  317. chia/pools/pool_config.py +2 -1
  318. chia/pools/pool_puzzles.py +11 -12
  319. chia/pools/pool_wallet.py +34 -57
  320. chia/pools/pool_wallet_info.py +39 -10
  321. chia/protocols/farmer_protocol.py +8 -9
  322. chia/protocols/fee_estimate.py +3 -4
  323. chia/protocols/full_node_protocol.py +3 -4
  324. chia/protocols/harvester_protocol.py +27 -15
  325. chia/protocols/outbound_message.py +3 -3
  326. chia/protocols/pool_protocol.py +8 -9
  327. chia/protocols/shared_protocol.py +1 -2
  328. chia/protocols/solver_protocol.py +9 -2
  329. chia/protocols/timelord_protocol.py +4 -7
  330. chia/protocols/wallet_protocol.py +11 -12
  331. chia/rpc/rpc_client.py +9 -9
  332. chia/rpc/rpc_server.py +17 -17
  333. chia/rpc/util.py +2 -2
  334. chia/seeder/crawler.py +8 -8
  335. chia/seeder/crawler_api.py +21 -27
  336. chia/seeder/crawler_rpc_api.py +2 -2
  337. chia/seeder/dns_server.py +21 -21
  338. chia/seeder/start_crawler.py +4 -4
  339. chia/server/address_manager.py +15 -16
  340. chia/server/api_protocol.py +11 -11
  341. chia/server/chia_policy.py +46 -26
  342. chia/server/introducer_peers.py +2 -3
  343. chia/server/node_discovery.py +19 -19
  344. chia/server/rate_limit_numbers.py +4 -5
  345. chia/server/rate_limits.py +4 -4
  346. chia/server/resolve_peer_info.py +4 -4
  347. chia/server/server.py +49 -52
  348. chia/server/signal_handlers.py +6 -6
  349. chia/server/start_service.py +17 -17
  350. chia/server/upnp.py +4 -6
  351. chia/server/ws_connection.py +52 -37
  352. chia/simulator/add_blocks_in_batches.py +1 -3
  353. chia/simulator/block_tools.py +312 -200
  354. chia/simulator/full_node_simulator.py +56 -35
  355. chia/simulator/keyring.py +2 -3
  356. chia/simulator/setup_services.py +15 -15
  357. chia/simulator/simulator_full_node_rpc_api.py +1 -2
  358. chia/simulator/simulator_full_node_rpc_client.py +1 -2
  359. chia/simulator/simulator_protocol.py +1 -2
  360. chia/simulator/simulator_test_tools.py +3 -3
  361. chia/simulator/start_simulator.py +7 -7
  362. chia/simulator/wallet_tools.py +10 -10
  363. chia/solver/solver.py +10 -10
  364. chia/solver/solver_api.py +10 -8
  365. chia/solver/solver_rpc_api.py +2 -2
  366. chia/solver/start_solver.py +4 -4
  367. chia/ssl/cacert.pem +148 -90
  368. chia/ssl/chia_ca.crt +14 -10
  369. chia/ssl/chia_ca_old.crt +19 -0
  370. chia/ssl/create_ssl.py +4 -4
  371. chia/ssl/renewedselfsignedca.conf +4 -0
  372. chia/ssl/ssl_check.py +1 -2
  373. chia/timelord/iters_from_block.py +1 -4
  374. chia/timelord/start_timelord.py +4 -4
  375. chia/timelord/timelord.py +44 -40
  376. chia/timelord/timelord_api.py +6 -4
  377. chia/timelord/timelord_launcher.py +2 -2
  378. chia/timelord/timelord_rpc_api.py +2 -2
  379. chia/timelord/timelord_state.py +11 -12
  380. chia/types/block_protocol.py +1 -3
  381. chia/types/blockchain_format/coin.py +1 -3
  382. chia/types/blockchain_format/program.py +11 -8
  383. chia/types/blockchain_format/proof_of_space.py +123 -76
  384. chia/types/blockchain_format/tree_hash.py +3 -3
  385. chia/types/blockchain_format/vdf.py +1 -2
  386. chia/types/coin_spend.py +3 -3
  387. chia/types/mempool_item.py +5 -5
  388. chia/types/mempool_submission_status.py +2 -3
  389. chia/types/peer_info.py +1 -2
  390. chia/types/unfinished_header_block.py +3 -4
  391. chia/types/validation_state.py +1 -2
  392. chia/util/action_scope.py +8 -8
  393. chia/util/async_pool.py +5 -5
  394. chia/util/bech32m.py +1 -2
  395. chia/util/beta_metrics.py +2 -2
  396. chia/util/block_cache.py +4 -4
  397. chia/util/chia_logging.py +2 -2
  398. chia/util/chia_version.py +1 -2
  399. chia/util/config.py +15 -16
  400. chia/util/db_wrapper.py +26 -27
  401. chia/util/default_root.py +1 -2
  402. chia/util/errors.py +3 -3
  403. chia/util/file_keyring.py +14 -14
  404. chia/util/files.py +2 -3
  405. chia/util/hash.py +4 -4
  406. chia/util/initial-config.yaml +3 -5
  407. chia/util/inline_executor.py +2 -1
  408. chia/util/ip_address.py +1 -2
  409. chia/util/keychain.py +25 -27
  410. chia/util/keyring_wrapper.py +18 -19
  411. chia/util/lock.py +3 -4
  412. chia/util/log_exceptions.py +1 -2
  413. chia/util/lru_cache.py +2 -2
  414. chia/util/network.py +6 -6
  415. chia/util/path.py +2 -3
  416. chia/util/priority_mutex.py +2 -2
  417. chia/util/profiler.py +1 -2
  418. chia/util/safe_cancel_task.py +1 -2
  419. chia/util/streamable.py +22 -8
  420. chia/util/task_referencer.py +1 -1
  421. chia/util/timing.py +3 -3
  422. chia/util/virtual_project_analysis.py +6 -5
  423. chia/util/ws_message.py +2 -2
  424. chia/wallet/cat_wallet/cat_info.py +3 -4
  425. chia/wallet/cat_wallet/cat_outer_puzzle.py +12 -11
  426. chia/wallet/cat_wallet/cat_utils.py +3 -4
  427. chia/wallet/cat_wallet/cat_wallet.py +61 -83
  428. chia/wallet/cat_wallet/lineage_store.py +3 -4
  429. chia/wallet/cat_wallet/r_cat_wallet.py +19 -22
  430. chia/wallet/coin_selection.py +9 -10
  431. chia/wallet/conditions.py +120 -105
  432. chia/wallet/db_wallet/db_wallet_puzzles.py +4 -5
  433. chia/wallet/derivation_record.py +1 -2
  434. chia/wallet/derive_keys.py +2 -4
  435. chia/wallet/did_wallet/did_info.py +10 -11
  436. chia/wallet/did_wallet/did_wallet.py +36 -82
  437. chia/wallet/did_wallet/did_wallet_puzzles.py +7 -8
  438. chia/wallet/driver_protocol.py +5 -7
  439. chia/wallet/lineage_proof.py +4 -4
  440. chia/wallet/nft_wallet/metadata_outer_puzzle.py +11 -11
  441. chia/wallet/nft_wallet/nft_info.py +8 -9
  442. chia/wallet/nft_wallet/nft_puzzle_utils.py +8 -8
  443. chia/wallet/nft_wallet/nft_wallet.py +79 -116
  444. chia/wallet/nft_wallet/ownership_outer_puzzle.py +14 -14
  445. chia/wallet/nft_wallet/singleton_outer_puzzle.py +12 -11
  446. chia/wallet/nft_wallet/transfer_program_puzzle.py +11 -11
  447. chia/wallet/nft_wallet/uncurry_nft.py +10 -11
  448. chia/wallet/notification_manager.py +3 -3
  449. chia/wallet/notification_store.py +44 -61
  450. chia/wallet/outer_puzzles.py +6 -7
  451. chia/wallet/puzzle_drivers.py +34 -6
  452. chia/wallet/puzzles/clawback/drivers.py +6 -6
  453. chia/wallet/puzzles/deployed_puzzle_hashes.json +1 -54
  454. chia/wallet/puzzles/load_clvm.py +1 -1
  455. chia/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +1 -2
  456. chia/wallet/puzzles/singleton_top_layer.py +2 -3
  457. chia/wallet/puzzles/singleton_top_layer_v1_1.py +3 -4
  458. chia/wallet/puzzles/tails.py +3 -3
  459. chia/wallet/singleton.py +5 -7
  460. chia/wallet/singleton_record.py +3 -3
  461. chia/wallet/start_wallet.py +5 -5
  462. chia/wallet/trade_manager.py +37 -58
  463. chia/wallet/trade_record.py +4 -4
  464. chia/wallet/trading/offer.py +59 -46
  465. chia/wallet/trading/trade_store.py +8 -9
  466. chia/wallet/transaction_record.py +8 -8
  467. chia/wallet/uncurried_puzzle.py +1 -2
  468. chia/wallet/util/clvm_streamable.py +12 -12
  469. chia/wallet/util/compute_hints.py +4 -5
  470. chia/wallet/util/curry_and_treehash.py +1 -2
  471. chia/wallet/util/merkle_tree.py +2 -3
  472. chia/wallet/util/peer_request_cache.py +8 -8
  473. chia/wallet/util/signing.py +85 -0
  474. chia/wallet/util/tx_config.py +15 -6
  475. chia/wallet/util/wallet_sync_utils.py +14 -16
  476. chia/wallet/util/wallet_types.py +2 -2
  477. chia/wallet/vc_wallet/cr_cat_drivers.py +10 -11
  478. chia/wallet/vc_wallet/cr_cat_wallet.py +50 -68
  479. chia/wallet/vc_wallet/cr_outer_puzzle.py +14 -13
  480. chia/wallet/vc_wallet/vc_drivers.py +27 -27
  481. chia/wallet/vc_wallet/vc_store.py +5 -6
  482. chia/wallet/vc_wallet/vc_wallet.py +33 -61
  483. chia/wallet/wallet.py +50 -78
  484. chia/wallet/wallet_action_scope.py +11 -11
  485. chia/wallet/wallet_blockchain.py +12 -12
  486. chia/wallet/wallet_coin_record.py +12 -6
  487. chia/wallet/wallet_coin_store.py +24 -25
  488. chia/wallet/wallet_interested_store.py +3 -5
  489. chia/wallet/wallet_nft_store.py +10 -11
  490. chia/wallet/wallet_node.py +53 -61
  491. chia/wallet/wallet_node_api.py +5 -3
  492. chia/wallet/wallet_protocol.py +23 -23
  493. chia/wallet/wallet_puzzle_store.py +15 -18
  494. chia/wallet/wallet_request_types.py +778 -114
  495. chia/wallet/wallet_retry_store.py +1 -3
  496. chia/wallet/wallet_rpc_api.py +572 -909
  497. chia/wallet/wallet_rpc_client.py +87 -279
  498. chia/wallet/wallet_singleton_store.py +3 -4
  499. chia/wallet/wallet_state_manager.py +332 -106
  500. chia/wallet/wallet_transaction_store.py +11 -14
  501. chia/wallet/wallet_user_store.py +4 -6
  502. chia/wallet/wallet_weight_proof_handler.py +4 -4
  503. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/METADATA +6 -5
  504. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/RECORD +507 -516
  505. chia/apis.py +0 -21
  506. chia/consensus/check_time_locks.py +0 -57
  507. chia/data_layer/puzzles/__init__.py +0 -0
  508. chia/data_layer/puzzles/graftroot_dl_offers.clsp +0 -100
  509. chia/data_layer/puzzles/graftroot_dl_offers.clsp.hex +0 -1
  510. chia/types/coin_record.py +0 -44
  511. chia/wallet/nft_wallet/puzzles/__init__.py +0 -0
  512. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp +0 -6
  513. chia/wallet/nft_wallet/puzzles/create_nft_launcher_from_did.clsp.hex +0 -1
  514. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp +0 -6
  515. chia/wallet/nft_wallet/puzzles/nft_intermediate_launcher.clsp.hex +0 -1
  516. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp +0 -30
  517. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_default.clsp.hex +0 -1
  518. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp +0 -28
  519. chia/wallet/nft_wallet/puzzles/nft_metadata_updater_updateable.clsp.hex +0 -1
  520. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp +0 -100
  521. chia/wallet/nft_wallet/puzzles/nft_ownership_layer.clsp.hex +0 -1
  522. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp +0 -78
  523. chia/wallet/nft_wallet/puzzles/nft_ownership_transfer_program_one_way_claim_with_royalties.clsp.hex +0 -1
  524. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp +0 -74
  525. chia/wallet/nft_wallet/puzzles/nft_state_layer.clsp.hex +0 -1
  526. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/WHEEL +0 -0
  527. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/entry_points.txt +0 -0
  528. {chia_blockchain-2.5.7rc4.dist-info → chia_blockchain-2.5.8rc1.dist-info}/licenses/LICENSE +0 -0
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import Any, Optional
4
+ from typing import Any
5
5
 
6
6
  import pytest
7
7
  from chia_rs.sized_bytes import bytes32
@@ -17,7 +17,7 @@ from chia.wallet.did_wallet.did_wallet import DIDWallet
17
17
  from chia.wallet.nft_wallet.nft_wallet import NFTWallet
18
18
  from chia.wallet.outer_puzzles import create_asset_id, match_puzzle
19
19
  from chia.wallet.puzzle_drivers import PuzzleInfo
20
- from chia.wallet.trading.offer import Offer, OfferSummary
20
+ from chia.wallet.trading.offer import Offer, OfferSpecification
21
21
  from chia.wallet.trading.trade_status import TradeStatus
22
22
  from chia.wallet.uncurried_puzzle import uncurry_puzzle
23
23
 
@@ -158,12 +158,12 @@ async def test_nft_offer_sell_nft(wallet_environments: WalletTestFramework, zero
158
158
  assert await nft_wallet_taker.get_nft_count() == 0
159
159
 
160
160
  nft_to_offer = coins_maker[0]
161
- nft_to_offer_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
161
+ nft_to_offer_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
162
162
  nft_to_offer_asset_id: bytes32 = create_asset_id(nft_to_offer_info) # type: ignore
163
163
  xch_requested = 1000
164
164
  maker_fee = uint64(433)
165
165
 
166
- offer_did_nft_for_xch: OfferSummary = {nft_to_offer_asset_id: -1, wallet_maker.id(): xch_requested}
166
+ offer_did_nft_for_xch: OfferSpecification = {nft_to_offer_asset_id: -1, wallet_maker.id(): xch_requested}
167
167
 
168
168
  async with trade_manager_maker.wallet_state_manager.new_action_scope(
169
169
  wallet_environments.tx_config, push=False
@@ -386,7 +386,7 @@ async def test_nft_offer_request_nft(wallet_environments: WalletTestFramework, z
386
386
 
387
387
  assert await nft_wallet_maker.get_nft_count() == 0
388
388
  nft_to_request = coins_taker[0]
389
- nft_to_request_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_request.full_puzzle))
389
+ nft_to_request_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_request.full_puzzle))
390
390
 
391
391
  assert isinstance(nft_to_request_info, PuzzleInfo)
392
392
  nft_to_request_asset_id = create_asset_id(nft_to_request_info)
@@ -395,7 +395,7 @@ async def test_nft_offer_request_nft(wallet_environments: WalletTestFramework, z
395
395
  maker_fee = uint64(10)
396
396
  driver_dict = {nft_to_request_asset_id: nft_to_request_info}
397
397
 
398
- offer_dict: OfferSummary = {nft_to_request_asset_id: 1, wallet_maker.id(): -xch_offered}
398
+ offer_dict: OfferSpecification = {nft_to_request_asset_id: 1, wallet_maker.id(): -xch_offered}
399
399
 
400
400
  async with trade_manager_maker.wallet_state_manager.new_action_scope(
401
401
  wallet_environments.tx_config, push=False
@@ -680,12 +680,12 @@ async def test_nft_offer_sell_did_to_did(wallet_environments: WalletTestFramewor
680
680
  assert len(coins_maker) == 1
681
681
  assert await nft_wallet_taker.get_nft_count() == 0
682
682
  nft_to_offer = coins_maker[0]
683
- nft_to_offer_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
683
+ nft_to_offer_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
684
684
  nft_to_offer_asset_id: bytes32 = create_asset_id(nft_to_offer_info) # type: ignore
685
685
  xch_requested = 1000
686
686
  maker_fee = uint64(433)
687
687
 
688
- offer_did_nft_for_xch: OfferSummary = {nft_to_offer_asset_id: -1, wallet_maker.id(): xch_requested}
688
+ offer_did_nft_for_xch: OfferSpecification = {nft_to_offer_asset_id: -1, wallet_maker.id(): xch_requested}
689
689
 
690
690
  async with trade_manager_maker.wallet_state_manager.new_action_scope(
691
691
  wallet_environments.tx_config, push=False
@@ -985,12 +985,12 @@ async def test_nft_offer_sell_nft_for_cat(
985
985
  await time_out_assert(20, cat_wallet_maker.get_confirmed_balance, maker_cat_balance)
986
986
  await time_out_assert(20, cat_wallet_taker.get_confirmed_balance, taker_cat_balance)
987
987
  nft_to_offer = coins_maker[0]
988
- nft_to_offer_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
988
+ nft_to_offer_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
989
989
  nft_to_offer_asset_id: bytes32 = create_asset_id(nft_to_offer_info) # type: ignore
990
990
  cats_requested = 1000
991
991
  maker_fee = uint64(433)
992
992
 
993
- offer_did_nft_for_xch: OfferSummary = {nft_to_offer_asset_id: -1, cat_wallet_maker.id(): cats_requested}
993
+ offer_did_nft_for_xch: OfferSpecification = {nft_to_offer_asset_id: -1, cat_wallet_maker.id(): cats_requested}
994
994
 
995
995
  async with trade_manager_maker.wallet_state_manager.new_action_scope(
996
996
  wallet_environments.tx_config, push=False
@@ -1347,7 +1347,7 @@ async def test_nft_offer_request_nft_for_cat(
1347
1347
  maker_fee = uint64(433)
1348
1348
  driver_dict = {nft_to_request_asset_id: nft_to_request_info}
1349
1349
 
1350
- offer_dict: OfferSummary = {nft_to_request_asset_id: 1, cat_wallet_maker.id(): -cats_requested}
1350
+ offer_dict: OfferSpecification = {nft_to_request_asset_id: 1, cat_wallet_maker.id(): -cats_requested}
1351
1351
 
1352
1352
  async with trade_manager_maker.wallet_state_manager.new_action_scope(
1353
1353
  wallet_environments.tx_config, push=False
@@ -1583,7 +1583,7 @@ async def test_nft_offer_sell_cancel(wallet_environments: WalletTestFramework) -
1583
1583
  xch_requested = 1000
1584
1584
  maker_fee = uint64(433)
1585
1585
 
1586
- offer_did_nft_for_xch: OfferSummary = {nft_to_offer_asset_id: -1, wallet_maker.id(): xch_requested}
1586
+ offer_did_nft_for_xch: OfferSpecification = {nft_to_offer_asset_id: -1, wallet_maker.id(): xch_requested}
1587
1587
 
1588
1588
  async with trade_manager_maker.wallet_state_manager.new_action_scope(
1589
1589
  wallet_environments.tx_config, push=False
@@ -1976,13 +1976,13 @@ async def test_complex_nft_offer(
1976
1976
  CAT_REQUESTED = 100000
1977
1977
  FEE = uint64(2000000000000)
1978
1978
 
1979
- complex_nft_offer: OfferSummary = {
1979
+ complex_nft_offer: OfferSpecification = {
1980
1980
  nft_to_offer_asset_id_maker: -1,
1981
1981
  cat_wallet_maker.id(): CAT_REQUESTED * -1,
1982
1982
  1: XCH_REQUESTED,
1983
1983
  nft_to_offer_asset_id_taker_1: 1,
1984
1984
  nft_to_offer_asset_id_taker_2: 1,
1985
- bytes32.from_hexstr(cat_wallet_taker.get_asset_id()): CAT_REQUESTED,
1985
+ cat_wallet_taker.get_asset_id(): CAT_REQUESTED,
1986
1986
  }
1987
1987
 
1988
1988
  nft_taker_1_info = match_puzzle(uncurry_puzzle(taker_nfts[0].full_puzzle))
@@ -1992,10 +1992,10 @@ async def test_complex_nft_offer(
1992
1992
  driver_dict = {
1993
1993
  nft_to_offer_asset_id_taker_1: nft_taker_1_info,
1994
1994
  nft_to_offer_asset_id_taker_2: nft_taker_2_info,
1995
- bytes32.from_hexstr(cat_wallet_taker.get_asset_id()): PuzzleInfo(
1995
+ cat_wallet_taker.get_asset_id(): PuzzleInfo(
1996
1996
  {
1997
1997
  "type": "CAT",
1998
- "tail": "0x" + cat_wallet_taker.get_asset_id(),
1998
+ "tail": "0x" + cat_wallet_taker.get_asset_id().hex(),
1999
1999
  **(
2000
2000
  {}
2001
2001
  if wallet_type is CATWallet
@@ -2047,7 +2047,7 @@ async def test_complex_nft_offer(
2047
2047
  },
2048
2048
  {
2049
2049
  None: uint64(XCH_REQUESTED),
2050
- bytes32.from_hexstr(cat_wallet_taker.get_asset_id()): uint64(CAT_REQUESTED),
2050
+ cat_wallet_taker.get_asset_id(): uint64(CAT_REQUESTED),
2051
2051
  },
2052
2052
  )
2053
2053
  taker_royalty_summary = NFTWallet.royalty_calculation(
@@ -2056,7 +2056,7 @@ async def test_complex_nft_offer(
2056
2056
  nft_to_offer_asset_id_taker_2: (royalty_puzhash_taker, royalty_basis_pts_taker_2),
2057
2057
  },
2058
2058
  {
2059
- bytes32.from_hexstr(cat_wallet_maker.get_asset_id()): uint64(CAT_REQUESTED),
2059
+ cat_wallet_maker.get_asset_id(): uint64(CAT_REQUESTED),
2060
2060
  },
2061
2061
  )
2062
2062
  maker_xch_royalties_expected = maker_royalty_summary[nft_to_offer_asset_id_maker][0]["amount"]
@@ -2198,7 +2198,7 @@ async def test_complex_nft_offer(
2198
2198
  complex_nft_offer = {
2199
2199
  cat_wallet_maker.id(): CAT_REQUESTED * -1,
2200
2200
  1: HALF_XCH_REQUESTED,
2201
- bytes32.from_hexstr(cat_wallet_taker.get_asset_id()): CAT_REQUESTED,
2201
+ cat_wallet_taker.get_asset_id(): CAT_REQUESTED,
2202
2202
  nft_to_offer_asset_id_maker: 1,
2203
2203
  }
2204
2204
 
@@ -2206,10 +2206,10 @@ async def test_complex_nft_offer(
2206
2206
  assert maker_nft_info is not None
2207
2207
  driver_dict = {
2208
2208
  nft_to_offer_asset_id_maker: maker_nft_info,
2209
- bytes32.from_hexstr(cat_wallet_taker.get_asset_id()): PuzzleInfo(
2209
+ cat_wallet_taker.get_asset_id(): PuzzleInfo(
2210
2210
  {
2211
2211
  "type": "CAT",
2212
- "tail": "0x" + cat_wallet_taker.get_asset_id(),
2212
+ "tail": "0x" + cat_wallet_taker.get_asset_id().hex(),
2213
2213
  }
2214
2214
  ),
2215
2215
  }
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional, cast
3
+ from typing import cast
4
4
 
5
5
  import pytest
6
6
  from chia_rs.sized_bytes import bytes32
@@ -15,7 +15,15 @@ from chia.wallet.nft_wallet.nft_wallet import NFTWallet
15
15
  from chia.wallet.nft_wallet.uncurry_nft import UncurriedNFT
16
16
  from chia.wallet.transaction_record import TransactionRecord
17
17
  from chia.wallet.util.address_type import AddressType
18
- from chia.wallet.wallet_request_types import NFTGetNFTs, NFTMintBulk, NFTMintMetadata, PushTransactions, SelectCoins
18
+ from chia.wallet.wallet_request_types import (
19
+ CreateNewWallet,
20
+ CreateNewWalletType,
21
+ NFTGetNFTs,
22
+ NFTMintBulk,
23
+ NFTMintMetadata,
24
+ PushTransactions,
25
+ SelectCoins,
26
+ )
19
27
 
20
28
 
21
29
  async def nft_count(wallet: NFTWallet) -> int:
@@ -263,9 +271,15 @@ async def test_nft_mint_rpc(wallet_environments: WalletTestFramework, zero_royal
263
271
  hex_did_id = did_wallet_maker.get_my_DID()
264
272
  hmr_did_id = encode_puzzle_hash(bytes32.from_hexstr(hex_did_id), AddressType.DID.hrp(env_0.node.config))
265
273
 
266
- nft_wallet_maker = await env_0.rpc_client.create_new_nft_wallet(name="NFT WALLET 1", did_id=hmr_did_id)
274
+ create_wallet_res = await env_0.rpc_client.create_new_wallet(
275
+ CreateNewWallet(wallet_type=CreateNewWalletType.NFT_WALLET, name="NFT WALLET 1", did_id=hmr_did_id, push=True),
276
+ wallet_environments.tx_config,
277
+ )
267
278
 
268
- await env_1.rpc_client.create_new_nft_wallet(name="NFT WALLET 2", did_id=None)
279
+ await env_1.rpc_client.create_new_wallet(
280
+ CreateNewWallet(wallet_type=CreateNewWalletType.NFT_WALLET, name="NFT WALLET 2", did_id=None, push=True),
281
+ wallet_environments.tx_config,
282
+ )
269
283
 
270
284
  await env_0.change_balances({"nft": {"init": True}})
271
285
  await env_1.change_balances({"nft": {"init": True}})
@@ -310,13 +324,13 @@ async def test_nft_mint_rpc(wallet_environments: WalletTestFramework, zero_royal
310
324
  )
311
325
  )
312
326
  ).coins[0]
313
- did_lineage_parent: Optional[bytes32] = None
327
+ did_lineage_parent: bytes32 | None = None
314
328
  txs: list[TransactionRecord] = []
315
329
  nft_ids = set()
316
330
  for i in range(0, n, chunk):
317
331
  resp = await env_0.rpc_client.nft_mint_bulk(
318
332
  NFTMintBulk(
319
- wallet_id=nft_wallet_maker["wallet_id"],
333
+ wallet_id=create_wallet_res.wallet_id,
320
334
  metadata_list=[NFTMintMetadata.from_json_dict(metadata) for metadata in metadata_list[i : i + chunk]],
321
335
  target_list=target_list[i : i + chunk],
322
336
  royalty_percentage=uint16.construct_optional(royalty_percentage),
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional, Union
4
-
5
3
  import pytest
6
4
  from chia_rs.sized_bytes import bytes32
7
5
  from chia_rs.sized_ints import uint64
@@ -116,7 +114,7 @@ async def test_nft_offer_with_fee(wallet_environments: WalletTestFramework) -> N
116
114
  # MAKE FIRST TRADE: 1 NFT for 100 xch
117
115
 
118
116
  nft_to_offer = coins_maker[0]
119
- nft_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
117
+ nft_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
120
118
  assert nft_info is not None
121
119
  nft_asset_id = create_asset_id(nft_info)
122
120
  assert nft_asset_id is not None
@@ -124,7 +122,7 @@ async def test_nft_offer_with_fee(wallet_environments: WalletTestFramework) -> N
124
122
 
125
123
  xch_request = 100
126
124
  maker_fee = uint64(10)
127
- offer_nft_for_xch: dict[Union[int, bytes32], int] = {wallet_maker.id(): xch_request, nft_asset_id: -1}
125
+ offer_nft_for_xch: dict[int | bytes32, int] = {wallet_maker.id(): xch_request, nft_asset_id: -1}
128
126
 
129
127
  async with trade_manager_maker.wallet_state_manager.new_action_scope(
130
128
  wallet_environments.tx_config, push=False
@@ -215,7 +213,7 @@ async def test_nft_offer_with_fee(wallet_environments: WalletTestFramework) -> N
215
213
  # MAKE SECOND TRADE: 100 xch for 1 NFT
216
214
 
217
215
  nft_to_buy = coins_taker[0]
218
- nft_to_buy_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_buy.full_puzzle))
216
+ nft_to_buy_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_buy.full_puzzle))
219
217
  assert nft_to_buy_info is not None
220
218
  nft_to_buy_asset_id = create_asset_id(nft_to_buy_info)
221
219
  assert nft_to_buy_asset_id is not None
@@ -223,7 +221,7 @@ async def test_nft_offer_with_fee(wallet_environments: WalletTestFramework) -> N
223
221
 
224
222
  xch_offered = 1000
225
223
  maker_fee = uint64(10)
226
- offer_xch_for_nft: dict[Union[int, bytes32], int] = {wallet_maker.id(): -xch_offered, nft_to_buy_asset_id: 1}
224
+ offer_xch_for_nft: dict[int | bytes32, int] = {wallet_maker.id(): -xch_offered, nft_to_buy_asset_id: 1}
227
225
 
228
226
  async with trade_manager_maker.wallet_state_manager.new_action_scope(
229
227
  wallet_environments.tx_config, push=False
@@ -385,7 +383,7 @@ async def test_nft_offer_cancellations(wallet_environments: WalletTestFramework)
385
383
 
386
384
  # maker creates offer and cancels
387
385
  nft_to_offer = coins_maker[0]
388
- nft_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
386
+ nft_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
389
387
  assert nft_info is not None
390
388
  nft_asset_id = create_asset_id(nft_info)
391
389
  assert nft_asset_id is not None
@@ -393,7 +391,7 @@ async def test_nft_offer_cancellations(wallet_environments: WalletTestFramework)
393
391
 
394
392
  xch_request = 100
395
393
  maker_fee = uint64(10)
396
- offer_nft_for_xch: dict[Union[bytes32, int], int] = {wallet_maker.id(): xch_request, nft_asset_id: -1}
394
+ offer_nft_for_xch: dict[bytes32 | int, int] = {wallet_maker.id(): xch_request, nft_asset_id: -1}
397
395
 
398
396
  async with trade_manager_maker.wallet_state_manager.new_action_scope(
399
397
  wallet_environments.tx_config, push=False
@@ -602,7 +600,7 @@ async def test_nft_offer_with_metadata_update(wallet_environments: WalletTestFra
602
600
 
603
601
  # MAKE FIRST TRADE: 1 NFT for 100 xch
604
602
  nft_to_offer = coins_maker[0]
605
- nft_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
603
+ nft_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
606
604
  assert nft_info is not None
607
605
  nft_asset_id = create_asset_id(nft_info)
608
606
  assert nft_asset_id is not None
@@ -610,7 +608,7 @@ async def test_nft_offer_with_metadata_update(wallet_environments: WalletTestFra
610
608
 
611
609
  xch_request = 100
612
610
  maker_fee = uint64(10)
613
- offer_nft_for_xch: dict[Union[bytes32, int], int] = {wallet_maker.id(): xch_request, nft_asset_id: -1}
611
+ offer_nft_for_xch: dict[bytes32 | int, int] = {wallet_maker.id(): xch_request, nft_asset_id: -1}
614
612
 
615
613
  async with trade_manager_maker.wallet_state_manager.new_action_scope(
616
614
  wallet_environments.tx_config, push=False
@@ -827,7 +825,7 @@ async def test_nft_offer_nft_for_cat(wallet_environments: WalletTestFramework, w
827
825
 
828
826
  # MAKE FIRST TRADE: 1 NFT for 10 taker cats
829
827
  nft_to_offer = coins_maker[0]
830
- nft_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
828
+ nft_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
831
829
  assert nft_info is not None
832
830
  nft_asset_id = create_asset_id(nft_info)
833
831
  assert nft_asset_id is not None
@@ -835,7 +833,7 @@ async def test_nft_offer_nft_for_cat(wallet_environments: WalletTestFramework, w
835
833
 
836
834
  maker_fee = uint64(10)
837
835
  taker_cat_offered = 2500
838
- offer_nft_for_cat: dict[Union[bytes32, int], int] = {
836
+ offer_nft_for_cat: dict[bytes32 | int, int] = {
839
837
  nft_asset_id: -1,
840
838
  wallet_maker_for_taker_cat.id(): taker_cat_offered,
841
839
  }
@@ -955,7 +953,7 @@ async def test_nft_offer_nft_for_cat(wallet_environments: WalletTestFramework, w
955
953
  taker_cat_amount = 500
956
954
 
957
955
  nft_to_buy = coins_taker[0]
958
- nft_to_buy_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_buy.full_puzzle))
956
+ nft_to_buy_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_buy.full_puzzle))
959
957
  assert nft_to_buy_info is not None
960
958
  nft_to_buy_asset_id = create_asset_id(nft_to_buy_info)
961
959
  assert nft_to_buy_asset_id is not None
@@ -964,7 +962,7 @@ async def test_nft_offer_nft_for_cat(wallet_environments: WalletTestFramework, w
964
962
  }
965
963
 
966
964
  maker_fee = uint64(10)
967
- offer_multi_cats_for_nft: dict[Union[bytes32, int], int] = {
965
+ offer_multi_cats_for_nft: dict[bytes32 | int, int] = {
968
966
  nft_to_buy_asset_id: 1,
969
967
  wallet_maker_for_taker_cat.id(): -taker_cat_amount,
970
968
  cat_wallet_maker.id(): -maker_cat_amount,
@@ -1230,13 +1228,13 @@ async def test_nft_offer_nft_for_nft(wallet_environments: WalletTestFramework) -
1230
1228
  assert len(coins_taker) == 1
1231
1229
 
1232
1230
  nft_to_offer = coins_maker[0]
1233
- nft_to_offer_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
1231
+ nft_to_offer_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
1234
1232
  assert nft_to_offer_info is not None
1235
1233
  nft_to_offer_asset_id = create_asset_id(nft_to_offer_info)
1236
1234
  assert nft_to_offer_asset_id is not None
1237
1235
 
1238
1236
  nft_to_take = coins_taker[0]
1239
- nft_to_take_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_take.full_puzzle))
1237
+ nft_to_take_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_take.full_puzzle))
1240
1238
  assert nft_to_take_info is not None
1241
1239
  nft_to_take_asset_id = create_asset_id(nft_to_take_info)
1242
1240
  assert nft_to_take_asset_id is not None
@@ -1247,7 +1245,7 @@ async def test_nft_offer_nft_for_nft(wallet_environments: WalletTestFramework) -
1247
1245
  }
1248
1246
 
1249
1247
  maker_fee = uint64(10)
1250
- offer_nft_for_nft: dict[Union[bytes32, int], int] = {nft_to_take_asset_id: 1, nft_to_offer_asset_id: -1}
1248
+ offer_nft_for_nft: dict[bytes32 | int, int] = {nft_to_take_asset_id: 1, nft_to_offer_asset_id: -1}
1251
1249
 
1252
1250
  async with trade_manager_maker.wallet_state_manager.new_action_scope(
1253
1251
  wallet_environments.tx_config, push=False
@@ -1466,7 +1464,7 @@ async def test_nft_offer_nft0_and_xch_for_cat(
1466
1464
 
1467
1465
  # MAKE FIRST TRADE: 1 NFT for 10 taker cats
1468
1466
  nft_to_offer = coins_maker[0]
1469
- nft_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
1467
+ nft_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_offer.full_puzzle))
1470
1468
  assert nft_info is not None
1471
1469
  nft_asset_id = create_asset_id(nft_info)
1472
1470
  assert nft_asset_id is not None
@@ -1476,7 +1474,7 @@ async def test_nft_offer_nft0_and_xch_for_cat(
1476
1474
  maker_xch_offered = 1000
1477
1475
  taker_cat_offered = 2500
1478
1476
  wallet_maker_id = wallet_maker.id()
1479
- offer_nft_for_cat: dict[Union[bytes32, int], int] = {
1477
+ offer_nft_for_cat: dict[bytes32 | int, int] = {
1480
1478
  wallet_maker_id: -maker_xch_offered,
1481
1479
  nft_asset_id: -1,
1482
1480
  wallet_maker_for_taker_cat.id(): taker_cat_offered,
@@ -1595,7 +1593,7 @@ async def test_nft_offer_nft0_and_xch_for_cat(
1595
1593
  taker_cat_amount = 500
1596
1594
 
1597
1595
  nft_to_buy = coins_taker[0]
1598
- nft_to_buy_info: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(nft_to_buy.full_puzzle))
1596
+ nft_to_buy_info: PuzzleInfo | None = match_puzzle(uncurry_puzzle(nft_to_buy.full_puzzle))
1599
1597
  assert nft_to_buy_info is not None
1600
1598
  nft_to_buy_asset_id = create_asset_id(nft_to_buy_info)
1601
1599
  assert nft_to_buy_asset_id is not None
@@ -1605,7 +1603,7 @@ async def test_nft_offer_nft0_and_xch_for_cat(
1605
1603
  }
1606
1604
 
1607
1605
  maker_fee = uint64(10)
1608
- offer_multi_cats_for_nft: dict[Union[bytes32, int], int] = {
1606
+ offer_multi_cats_for_nft: dict[bytes32 | int, int] = {
1609
1607
  nft_to_buy_asset_id: 1,
1610
1608
  wallet_maker_for_taker_cat.id(): -taker_cat_amount,
1611
1609
  cat_wallet_maker.id(): -maker_cat_amount,
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import random
4
- from typing import Optional
5
4
 
6
5
  from chia_rs.sized_bytes import bytes32
7
6
 
@@ -85,7 +84,7 @@ def test_nft_transfer_puzzle_hashes(seeded_random: random.Random) -> None:
85
84
 
86
85
  conds = nft_puz.run(nft_sol)
87
86
 
88
- expected_ph: Optional[bytes32] = None
87
+ expected_ph: bytes32 | None = None
89
88
  # get the new NFT puzhash
90
89
  for cond in conds.as_iter():
91
90
  if cond.first().as_int() == 51:
@@ -2,7 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  import asyncio
4
4
  import time
5
- from typing import Any, Callable
5
+ from collections.abc import Callable
6
+ from typing import Any
6
7
 
7
8
  import pytest
8
9
  from chia_rs import AugSchemeMPL
@@ -660,10 +661,128 @@ async def test_nft_wallet_rpc_creation_and_list(wallet_environments: WalletTestF
660
661
  # test counts
661
662
  assert (await env.rpc_client.count_nfts(NFTCountNFTs(uint32(env.wallet_aliases["nft"])))).count == 2
662
663
  assert (await env.rpc_client.count_nfts(NFTCountNFTs())).count == 2
663
- with pytest.raises(ResponseFailureError, match="Wallet 50 not found"):
664
+ with pytest.raises(ResponseFailureError, match="Wallet with id 50 does not exist"):
664
665
  await env.rpc_client.count_nfts(NFTCountNFTs(uint32(50)))
665
666
 
666
667
 
668
+ @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
669
+ @pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
670
+ @pytest.mark.anyio
671
+ async def test_sign_message_by_nft_id(wallet_environments: WalletTestFramework) -> None:
672
+ env = wallet_environments.environments[0]
673
+ wallet_node = env.node
674
+ wallet = env.xch_wallet
675
+
676
+ env.wallet_aliases = {
677
+ "xch": 1,
678
+ "nft": 2,
679
+ }
680
+
681
+ nft_wallet_0 = await env.rpc_client.fetch("create_new_wallet", dict(wallet_type="nft_wallet", name="NFT WALLET 1"))
682
+ assert isinstance(nft_wallet_0, dict)
683
+ assert nft_wallet_0.get("success")
684
+ assert env.wallet_aliases["nft"] == nft_wallet_0["wallet_id"]
685
+
686
+ async with wallet.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
687
+ wallet_ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
688
+ await env.rpc_client.mint_nft(
689
+ request=NFTMintNFTRequest(
690
+ wallet_id=uint32(env.wallet_aliases["nft"]),
691
+ royalty_address=encode_puzzle_hash(wallet_ph, AddressType.NFT.hrp(wallet_node.config)),
692
+ target_address=None,
693
+ hash=bytes32.from_hexstr("0xD4584AD463139FA8C0D9F68F4B59F185D4584AD463139FA8C0D9F68F4B59F185"),
694
+ uris=["https://www.chia.net/img/branding/chia-logo.svg"],
695
+ push=True,
696
+ ),
697
+ tx_config=wallet_environments.tx_config,
698
+ )
699
+
700
+ await wallet_environments.process_pending_states(
701
+ [
702
+ WalletStateTransition(
703
+ pre_block_balance_updates={
704
+ "xch": {"set_remainder": True}, # tested above
705
+ "nft": {"init": True, "pending_coin_removal_count": 1},
706
+ },
707
+ post_block_balance_updates={
708
+ "xch": {"set_remainder": True}, # tested above
709
+ "nft": {
710
+ "pending_coin_removal_count": -1,
711
+ "unspent_coin_count": 1,
712
+ },
713
+ },
714
+ )
715
+ ]
716
+ )
717
+
718
+ nft_list = await env.rpc_client.list_nfts(NFTGetNFTs(uint32(env.wallet_aliases["nft"])))
719
+ nft_id = nft_list.nft_list[0].nft_id
720
+
721
+ # Test general string
722
+ message = "Hello World"
723
+ response = await env.rpc_client.sign_message_by_id(
724
+ SignMessageByID(
725
+ id=nft_id,
726
+ message=message,
727
+ )
728
+ )
729
+ puzzle: Program = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, message))
730
+ assert AugSchemeMPL.verify(
731
+ response.pubkey,
732
+ puzzle.get_tree_hash(),
733
+ response.signature,
734
+ )
735
+ # Test hex string
736
+ message = "0123456789ABCDEF"
737
+ response = await env.rpc_client.sign_message_by_id(
738
+ SignMessageByID(
739
+ id=nft_id,
740
+ message=message,
741
+ is_hex=True,
742
+ )
743
+ )
744
+ puzzle = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, bytes.fromhex(message)))
745
+
746
+ assert AugSchemeMPL.verify(
747
+ response.pubkey,
748
+ puzzle.get_tree_hash(),
749
+ response.signature,
750
+ )
751
+
752
+ # Test BLS sign string
753
+ message = "Hello World"
754
+ response = await env.rpc_client.sign_message_by_id(
755
+ SignMessageByID(
756
+ id=nft_id,
757
+ message=message,
758
+ is_hex=False,
759
+ safe_mode=False,
760
+ )
761
+ )
762
+
763
+ assert AugSchemeMPL.verify(
764
+ response.pubkey,
765
+ bytes(message, "utf-8"),
766
+ response.signature,
767
+ )
768
+ # Test BLS sign hex
769
+ message = "0123456789ABCDEF"
770
+ response = await env.rpc_client.sign_message_by_id(
771
+ SignMessageByID(
772
+ id=nft_id,
773
+ message=message,
774
+ is_hex=True,
775
+ safe_mode=False,
776
+ )
777
+ )
778
+
779
+ assert AugSchemeMPL.verify(
780
+ response.pubkey,
781
+ hexstr_to_bytes(message),
782
+ response.signature,
783
+ )
784
+
785
+
667
786
  @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
668
787
  @pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
669
788
  @pytest.mark.anyio
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Optional
4
-
5
3
  from chia_rs.sized_bytes import bytes32
6
4
  from chia_rs.sized_ints import uint16
7
5
  from clvm_tools.binutils import assemble
@@ -16,7 +14,6 @@ from chia.wallet.uncurried_puzzle import uncurry_puzzle
16
14
 
17
15
  def test_ownership_outer_puzzle() -> None:
18
16
  ACS = Program.to(1)
19
- NIL = Program.to([])
20
17
  owner = bytes32.zeros
21
18
  # (mod (current_owner conditions solution)
22
19
  # (list current_owner () conditions)
@@ -28,12 +25,12 @@ def test_ownership_outer_puzzle() -> None:
28
25
  )
29
26
  transfer_program_default: Program = puzzle_for_transfer_program(bytes32([1] * 32), bytes32([2] * 32), uint16(5000))
30
27
  ownership_puzzle: Program = puzzle_for_ownership_layer(owner, Program.to(transfer_program), ACS)
31
- ownership_puzzle_empty: Program = puzzle_for_ownership_layer(NIL, Program.to(transfer_program), ACS)
28
+ ownership_puzzle_empty: Program = puzzle_for_ownership_layer(Program.NIL, Program.to(transfer_program), ACS)
32
29
  ownership_puzzle_default: Program = puzzle_for_ownership_layer(owner, transfer_program_default, ACS)
33
- ownership_driver: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(ownership_puzzle))
34
- ownership_driver_empty: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(ownership_puzzle_empty))
35
- ownership_driver_default: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(ownership_puzzle_default))
36
- transfer_program_driver: Optional[PuzzleInfo] = match_puzzle(uncurry_puzzle(transfer_program_default))
30
+ ownership_driver: PuzzleInfo | None = match_puzzle(uncurry_puzzle(ownership_puzzle))
31
+ ownership_driver_empty: PuzzleInfo | None = match_puzzle(uncurry_puzzle(ownership_puzzle_empty))
32
+ ownership_driver_default: PuzzleInfo | None = match_puzzle(uncurry_puzzle(ownership_puzzle_default))
33
+ transfer_program_driver: PuzzleInfo | None = match_puzzle(uncurry_puzzle(transfer_program_default))
37
34
 
38
35
  assert ownership_driver is not None
39
36
  assert ownership_driver_empty is not None
@@ -41,7 +38,7 @@ def test_ownership_outer_puzzle() -> None:
41
38
  assert transfer_program_driver is not None
42
39
  assert ownership_driver.type() == "ownership"
43
40
  assert ownership_driver["owner"] == owner
44
- assert ownership_driver_empty["owner"] == NIL
41
+ assert ownership_driver_empty["owner"] == Program.NIL
45
42
  assert ownership_driver["transfer_program"] == transfer_program
46
43
  assert ownership_driver_default["transfer_program"] == transfer_program_driver
47
44
  assert transfer_program_driver.type() == "royalty transfer program"