chia-blockchain 2.5.6rc2__py3-none-any.whl → 2.5.7rc2__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 (371) hide show
  1. chia/_tests/blockchain/blockchain_test_utils.py +6 -7
  2. chia/_tests/blockchain/test_augmented_chain.py +4 -3
  3. chia/_tests/blockchain/test_blockchain.py +10 -5
  4. chia/_tests/clvm/coin_store.py +1 -1
  5. chia/_tests/cmds/cmd_test_utils.py +84 -97
  6. chia/_tests/cmds/test_dev_gh.py +1 -1
  7. chia/_tests/cmds/test_farm_cmd.py +56 -2
  8. chia/_tests/cmds/wallet/test_consts.py +3 -1
  9. chia/_tests/cmds/wallet/test_did.py +3 -8
  10. chia/_tests/cmds/wallet/test_nft.py +6 -6
  11. chia/_tests/cmds/wallet/test_notifications.py +39 -21
  12. chia/_tests/cmds/wallet/test_vcs.py +2 -1
  13. chia/_tests/cmds/wallet/test_wallet.py +160 -136
  14. chia/_tests/conftest.py +51 -26
  15. chia/_tests/core/cmds/test_wallet.py +4 -3
  16. chia/_tests/core/consensus/test_pot_iterations.py +71 -24
  17. chia/_tests/core/custom_types/test_proof_of_space.py +60 -30
  18. chia/_tests/core/custom_types/test_spend_bundle.py +1 -4
  19. chia/_tests/core/data_layer/conftest.py +7 -2
  20. chia/_tests/core/data_layer/old_format/__init__.py +0 -0
  21. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-005876c1cdc4d5f1726551b207b9f63efc9cd2f72df80a3a26a1ba73d40d6745-delta-23-v1.0.dat +0 -0
  22. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-005876c1cdc4d5f1726551b207b9f63efc9cd2f72df80a3a26a1ba73d40d6745-full-23-v1.0.dat +0 -0
  23. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-01b36e72a975cdc00d6514eea81668d19e8ea3150217ae98cb3361688a016fab-delta-9-v1.0.dat +0 -0
  24. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-01b36e72a975cdc00d6514eea81668d19e8ea3150217ae98cb3361688a016fab-full-9-v1.0.dat +0 -0
  25. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-06147c3b12d73e9b83b686a8c10b4a36a513c8a93c0ff99ae197f06326278be9-delta-5-v1.0.dat +0 -0
  26. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-06147c3b12d73e9b83b686a8c10b4a36a513c8a93c0ff99ae197f06326278be9-full-5-v1.0.dat +0 -0
  27. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-073c051a5934ad3b8db39eee2189e4300e55f48aaa17ff4ae30eeae088ff544a-delta-22-v1.0.dat +0 -0
  28. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-073c051a5934ad3b8db39eee2189e4300e55f48aaa17ff4ae30eeae088ff544a-full-22-v1.0.dat +0 -0
  29. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-0cc077559b9c7b4aefe8f8f591c195e0779bebdf89f2ad8285a00ea5f859d965-delta-1-v1.0.dat +0 -0
  30. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-0cc077559b9c7b4aefe8f8f591c195e0779bebdf89f2ad8285a00ea5f859d965-full-1-v1.0.dat +0 -0
  31. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-16377275567b723b20936d3f1ec0a2fd83f6ac379b922351a5e4c54949069f3b-delta-2-v1.0.dat +0 -0
  32. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-16377275567b723b20936d3f1ec0a2fd83f6ac379b922351a5e4c54949069f3b-full-2-v1.0.dat +0 -0
  33. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-1cb824a7a5f02cd30ac6c38e8f6216780d9bfa2d24811d282a368dcd541438a7-delta-29-v1.0.dat +0 -0
  34. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-1cb824a7a5f02cd30ac6c38e8f6216780d9bfa2d24811d282a368dcd541438a7-full-29-v1.0.dat +0 -0
  35. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-27b89dc4809ebc5a3b87757d35e95e2761d978cf121e44fa2773a5c06e4cc7b5-delta-28-v1.0.dat +0 -0
  36. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-27b89dc4809ebc5a3b87757d35e95e2761d978cf121e44fa2773a5c06e4cc7b5-full-28-v1.0.dat +0 -0
  37. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-28a6b7c134abfaeb0ab58a018313f6c87a61a40a4d9ec9bedf53aa1d12f3ee37-delta-7-v1.0.dat +0 -0
  38. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-28a6b7c134abfaeb0ab58a018313f6c87a61a40a4d9ec9bedf53aa1d12f3ee37-full-7-v1.0.dat +0 -0
  39. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-30a6bfe7cecbeda259a295dc6de3a436357f52388c3b03d86901e7da68565aeb-delta-19-v1.0.dat +0 -0
  40. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-30a6bfe7cecbeda259a295dc6de3a436357f52388c3b03d86901e7da68565aeb-full-19-v1.0.dat +0 -0
  41. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-343a2bf9add798e3ac2e6a571823cf9fa7e8a1bed532143354ead2648bd036ef-delta-10-v1.0.dat +0 -0
  42. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-343a2bf9add798e3ac2e6a571823cf9fa7e8a1bed532143354ead2648bd036ef-full-10-v1.0.dat +0 -0
  43. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4d90efbc1fb3df324193831ea4a57dd5e10e67d9653343eb18d178272adb0447-delta-17-v1.0.dat +0 -0
  44. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4d90efbc1fb3df324193831ea4a57dd5e10e67d9653343eb18d178272adb0447-full-17-v1.0.dat +0 -0
  45. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4dd2ea099e91635c441f40b36d3f84078a2d818d2dc601c7278e72cbdfe3eca8-delta-20-v1.0.dat +0 -0
  46. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4dd2ea099e91635c441f40b36d3f84078a2d818d2dc601c7278e72cbdfe3eca8-full-20-v1.0.dat +0 -0
  47. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-509effbdca78639023b933ce6c08a0465fb247e1cd5329e9e9c553940e4b6e46-delta-31-v1.0.dat +0 -0
  48. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-509effbdca78639023b933ce6c08a0465fb247e1cd5329e9e9c553940e4b6e46-full-31-v1.0.dat +0 -0
  49. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5379a4d9ff29c29d1ef0906d22e82c52472753d31806189ab813c43365341b78-delta-40-v1.0.dat +0 -0
  50. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5379a4d9ff29c29d1ef0906d22e82c52472753d31806189ab813c43365341b78-full-40-v1.0.dat +0 -0
  51. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-55908eda5686a8f89e4c50672cbe893ec1734fb23449dc03325efe7c414f9aa4-delta-49-v1.0.dat +0 -0
  52. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-55908eda5686a8f89e4c50672cbe893ec1734fb23449dc03325efe7c414f9aa4-full-49-v1.0.dat +0 -0
  53. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-57cc2691fb1fb986c99a58bcb0e029d0cd0cff41553d703147c54196d7d9ca63-delta-14-v1.0.dat +0 -0
  54. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-57cc2691fb1fb986c99a58bcb0e029d0cd0cff41553d703147c54196d7d9ca63-full-14-v1.0.dat +0 -0
  55. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5943bf8ae4f5e59969d8570e4f40a8223299febdcfbcf188b3b3e2ab11044e18-delta-34-v1.0.dat +0 -0
  56. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5943bf8ae4f5e59969d8570e4f40a8223299febdcfbcf188b3b3e2ab11044e18-full-34-v1.0.dat +0 -0
  57. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6518527b7c939bee60ce6b024cbe90d3b9d8913c56b8ce11a4df5da7ff7db1c8-delta-8-v1.0.dat +0 -0
  58. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6518527b7c939bee60ce6b024cbe90d3b9d8913c56b8ce11a4df5da7ff7db1c8-full-8-v1.0.dat +0 -0
  59. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-66ff26a26620379e14a7c91252d27ee4dbe06ad69a3a390a88642fe757f2b288-delta-45-v1.0.dat +0 -0
  60. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-66ff26a26620379e14a7c91252d27ee4dbe06ad69a3a390a88642fe757f2b288-full-45-v1.0.dat +0 -0
  61. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6bd0a508ee2c4afbe9d4daa811139fd6e54e7f4e16850cbce999fa30f8bdccd2-delta-6-v1.0.dat +0 -0
  62. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6bd0a508ee2c4afbe9d4daa811139fd6e54e7f4e16850cbce999fa30f8bdccd2-full-6-v1.0.dat +0 -0
  63. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6ce850d0d77ca743fcc2fc792747472e5d2c1c0813aa43abbb370554428fc897-delta-48-v1.0.dat +0 -0
  64. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6ce850d0d77ca743fcc2fc792747472e5d2c1c0813aa43abbb370554428fc897-full-48-v1.0.dat +0 -0
  65. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6eb4ca2e1552b156c5969396b49070eb08ad6c96b347359387519be59f7ccaed-delta-26-v1.0.dat +0 -0
  66. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6eb4ca2e1552b156c5969396b49070eb08ad6c96b347359387519be59f7ccaed-full-26-v1.0.dat +0 -0
  67. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-71c797fb7592d3f0a5a20c79ab8497ddaa0fd9ec17712e109d25c91b3f3c76e5-delta-3-v1.0.dat +0 -0
  68. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-71c797fb7592d3f0a5a20c79ab8497ddaa0fd9ec17712e109d25c91b3f3c76e5-full-3-v1.0.dat +0 -0
  69. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-73357026053d5a4969e7a6b9aeeef91c14cc6d5f32fc700fe6d21d2a1b22496c-delta-25-v1.0.dat +0 -0
  70. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-73357026053d5a4969e7a6b9aeeef91c14cc6d5f32fc700fe6d21d2a1b22496c-full-25-v1.0.dat +0 -0
  71. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-7c897e5c46e834ced65bde7de87716acfaa5dffbdb30b5cd9377d8c319df2034-delta-35-v1.0.dat +0 -0
  72. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-7c897e5c46e834ced65bde7de87716acfaa5dffbdb30b5cd9377d8c319df2034-full-35-v1.0.dat +0 -0
  73. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-87b8394d80d08117a5a1cd04ed8a682564eab7197a2c090159863591b5108874-delta-4-v1.0.dat +0 -0
  74. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-87b8394d80d08117a5a1cd04ed8a682564eab7197a2c090159863591b5108874-full-4-v1.0.dat +0 -0
  75. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-89eb40b9cc0921c5f5c3feb20927c13a9ada5760f82d219dcee153b7d400165c-delta-41-v1.0.dat +0 -0
  76. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-89eb40b9cc0921c5f5c3feb20927c13a9ada5760f82d219dcee153b7d400165c-full-41-v1.0.dat +0 -0
  77. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8b649433156b8c924436cdec9c6de26106fd6f73a0528570f48748f7b40d7f8a-delta-21-v1.0.dat +0 -0
  78. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8b649433156b8c924436cdec9c6de26106fd6f73a0528570f48748f7b40d7f8a-full-21-v1.0.dat +0 -0
  79. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8d364023a0834c8c3077e236a465493acbf488e4f9d1f4c6cc230343c10a8f7d-delta-42-v1.0.dat +0 -0
  80. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8d364023a0834c8c3077e236a465493acbf488e4f9d1f4c6cc230343c10a8f7d-full-42-v1.0.dat +0 -0
  81. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-925689e24a3d98d98676d816cdd8b73e7b2df057d9d4503da9b27bf91d79666c-delta-38-v1.0.dat +0 -0
  82. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-925689e24a3d98d98676d816cdd8b73e7b2df057d9d4503da9b27bf91d79666c-full-38-v1.0.dat +0 -0
  83. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-937be3d428b19f521be4f98faecc3307ae11ee731c76992f417fa4268d13859e-delta-11-v1.0.dat +0 -0
  84. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-937be3d428b19f521be4f98faecc3307ae11ee731c76992f417fa4268d13859e-full-11-v1.0.dat +0 -0
  85. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-97f34af499b79e2111fc296a598fc9654c2467ea038dfea41fd58241fb3642de-delta-32-v1.0.dat +0 -0
  86. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-97f34af499b79e2111fc296a598fc9654c2467ea038dfea41fd58241fb3642de-full-32-v1.0.dat +0 -0
  87. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-9d1b737243b8a1d0022f2b36ac53333c6280354a74d77f2a3642dcab35204e59-delta-33-v1.0.dat +0 -0
  88. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-9d1b737243b8a1d0022f2b36ac53333c6280354a74d77f2a3642dcab35204e59-full-33-v1.0.dat +0 -0
  89. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-a6663f98ef6ddf6db55f01163e34bb2e87aa82f0347e79ce31e8dbfa390c480c-delta-47-v1.0.dat +0 -0
  90. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-a6663f98ef6ddf6db55f01163e34bb2e87aa82f0347e79ce31e8dbfa390c480c-full-47-v1.0.dat +0 -0
  91. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-aa77376d1ccd3664e5c6366e010c52a978fedbf40f5ce262fee71b2e7fe0c6a9-delta-50-v1.0.dat +0 -0
  92. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-aa77376d1ccd3664e5c6366e010c52a978fedbf40f5ce262fee71b2e7fe0c6a9-full-50-v1.0.dat +0 -0
  93. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b0f28514741ed1a71f5c6544bf92f9e0e493c5f3cf28328909771d8404eff626-delta-24-v1.0.dat +0 -0
  94. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b0f28514741ed1a71f5c6544bf92f9e0e493c5f3cf28328909771d8404eff626-full-24-v1.0.dat +0 -0
  95. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b3efee5358e6eb89ab3b60db2d128d57eef39e8538fb63c5632412d4f8e7d09e-delta-44-v1.0.dat +0 -0
  96. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b3efee5358e6eb89ab3b60db2d128d57eef39e8538fb63c5632412d4f8e7d09e-full-44-v1.0.dat +0 -0
  97. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bb0b56b6eb7acbb4e80893b04c72412fe833418232e1ed7b06d97d7a7f08b4e1-delta-16-v1.0.dat +0 -0
  98. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bb0b56b6eb7acbb4e80893b04c72412fe833418232e1ed7b06d97d7a7f08b4e1-full-16-v1.0.dat +0 -0
  99. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bc45262b757ff494b53bd2a8fba0f5511cc1f9c2a2c5360e04ea8cebbf6409df-delta-13-v1.0.dat +0 -0
  100. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bc45262b757ff494b53bd2a8fba0f5511cc1f9c2a2c5360e04ea8cebbf6409df-full-13-v1.0.dat +0 -0
  101. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bd0494ba430aff13458b557113b073d226eaf11257dfe26ff3323fa1cfe1335b-delta-39-v1.0.dat +0 -0
  102. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bd0494ba430aff13458b557113b073d226eaf11257dfe26ff3323fa1cfe1335b-full-39-v1.0.dat +0 -0
  103. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cd04f5fbba1553fa728b4dd8131d4723aaac288e0c7dc080447fbf0872c0a6eb-delta-36-v1.0.dat +0 -0
  104. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cd04f5fbba1553fa728b4dd8131d4723aaac288e0c7dc080447fbf0872c0a6eb-full-36-v1.0.dat +0 -0
  105. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cdd2399557fb3163a848f08831fdc833703354edb19a0d32a965fdb140f160c2-delta-18-v1.0.dat +0 -0
  106. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cdd2399557fb3163a848f08831fdc833703354edb19a0d32a965fdb140f160c2-full-18-v1.0.dat +0 -0
  107. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cf7a08fca7b1332095242e4d9800f4b94a3f4eaae88fe8407da42736d54b9e18-delta-37-v1.0.dat +0 -0
  108. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cf7a08fca7b1332095242e4d9800f4b94a3f4eaae88fe8407da42736d54b9e18-full-37-v1.0.dat +0 -0
  109. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-d1f97465a9f52187e2ef3a0d811a1258f52380a65340c55f3e8e65b92753bc13-delta-15-v1.0.dat +0 -0
  110. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-d1f97465a9f52187e2ef3a0d811a1258f52380a65340c55f3e8e65b92753bc13-full-15-v1.0.dat +0 -0
  111. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e475eccd4ee597e5ff67b1a249e37d65d6e3f754c3f0379fdb43692513588fef-delta-46-v1.0.dat +0 -0
  112. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e475eccd4ee597e5ff67b1a249e37d65d6e3f754c3f0379fdb43692513588fef-full-46-v1.0.dat +0 -0
  113. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e82e63517d78fd65b23a05c3b9a98cf905ddad7026995a238bfe634006b84cd0-delta-27-v1.0.dat +0 -0
  114. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e82e63517d78fd65b23a05c3b9a98cf905ddad7026995a238bfe634006b84cd0-full-27-v1.0.dat +0 -0
  115. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-ed2cf0fd6c0f6237c87c161e1fca303b3fbe6c04e01f652b88720b4572143349-delta-12-v1.0.dat +0 -0
  116. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-ed2cf0fd6c0f6237c87c161e1fca303b3fbe6c04e01f652b88720b4572143349-full-12-v1.0.dat +0 -0
  117. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f6e454eaf24a83c46a7bed4c19260a0a3ce0ed5c51739cb6d748d4913dc2ef58-delta-30-v1.0.dat +0 -0
  118. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f6e454eaf24a83c46a7bed4c19260a0a3ce0ed5c51739cb6d748d4913dc2ef58-full-30-v1.0.dat +0 -0
  119. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f7ad2bdf86d9609b4d6381086ec1e296bf558e2ff467ead29dd7fa6e31bacc56-delta-43-v1.0.dat +0 -0
  120. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f7ad2bdf86d9609b4d6381086ec1e296bf558e2ff467ead29dd7fa6e31bacc56-full-43-v1.0.dat +0 -0
  121. chia/_tests/core/data_layer/old_format/files/__init__.py +0 -0
  122. chia/_tests/core/data_layer/old_format/old_db.sqlite +0 -0
  123. chia/_tests/core/data_layer/test_data_layer_util.py +18 -21
  124. chia/_tests/core/data_layer/test_data_rpc.py +77 -28
  125. chia/_tests/core/data_layer/test_data_store.py +637 -700
  126. chia/_tests/core/data_layer/test_data_store_schema.py +2 -209
  127. chia/_tests/core/full_node/ram_db.py +1 -1
  128. chia/_tests/core/full_node/stores/test_block_store.py +4 -10
  129. chia/_tests/core/full_node/stores/test_coin_store.py +1 -1
  130. chia/_tests/core/full_node/test_address_manager.py +3 -3
  131. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  132. chia/_tests/core/full_node/test_full_node.py +91 -30
  133. chia/_tests/core/full_node/test_generator_tools.py +17 -10
  134. chia/_tests/core/mempool/test_mempool.py +190 -90
  135. chia/_tests/core/mempool/test_mempool_fee_estimator.py +2 -4
  136. chia/_tests/core/mempool/test_mempool_item_queries.py +1 -1
  137. chia/_tests/core/mempool/test_mempool_manager.py +134 -75
  138. chia/_tests/core/mempool/test_singleton_fast_forward.py +9 -27
  139. chia/_tests/core/server/serve.py +0 -2
  140. chia/_tests/core/server/test_rate_limits.py +400 -347
  141. chia/_tests/core/server/test_server.py +2 -2
  142. chia/_tests/core/services/test_services.py +7 -7
  143. chia/_tests/core/test_cost_calculation.py +31 -10
  144. chia/_tests/core/test_crawler.py +4 -4
  145. chia/_tests/core/test_db_conversion.py +7 -14
  146. chia/_tests/core/test_db_validation.py +2 -6
  147. chia/_tests/core/test_farmer_harvester_rpc.py +34 -1
  148. chia/_tests/core/test_full_node_rpc.py +28 -24
  149. chia/_tests/core/test_merkle_set.py +1 -4
  150. chia/_tests/core/test_seeder.py +1 -1
  151. chia/_tests/core/util/test_keychain.py +2 -2
  152. chia/_tests/core/util/test_lru_cache.py +16 -0
  153. chia/_tests/core/util/test_streamable.py +85 -4
  154. chia/_tests/environments/wallet.py +4 -1
  155. chia/_tests/farmer_harvester/test_farmer.py +8 -6
  156. chia/_tests/farmer_harvester/test_farmer_harvester.py +306 -8
  157. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +3 -3
  158. chia/_tests/farmer_harvester/test_third_party_harvesters.py +11 -11
  159. chia/_tests/fee_estimation/test_fee_estimation_integration.py +2 -2
  160. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +1 -1
  161. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -2
  162. chia/_tests/generator/test_rom.py +2 -1
  163. chia/_tests/harvester/__init__.py +0 -0
  164. chia/_tests/harvester/config.py +4 -0
  165. chia/_tests/harvester/test_harvester_api.py +157 -0
  166. chia/_tests/plot_sync/test_plot_sync.py +6 -3
  167. chia/_tests/plot_sync/test_receiver.py +16 -4
  168. chia/_tests/plot_sync/test_sender.py +8 -7
  169. chia/_tests/plot_sync/test_sync_simulated.py +15 -13
  170. chia/_tests/plot_sync/util.py +3 -2
  171. chia/_tests/plotting/test_plot_manager.py +21 -5
  172. chia/_tests/plotting/test_prover.py +106 -0
  173. chia/_tests/pools/test_pool_cmdline.py +7 -6
  174. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -3
  175. chia/_tests/pools/test_pool_rpc.py +92 -64
  176. chia/_tests/solver/__init__.py +0 -0
  177. chia/_tests/solver/config.py +4 -0
  178. chia/_tests/solver/test_solver_service.py +29 -0
  179. chia/_tests/timelord/test_new_peak.py +1 -1
  180. chia/_tests/timelord/test_timelord.py +1 -1
  181. chia/_tests/util/benchmarks.py +5 -12
  182. chia/_tests/util/blockchain.py +1 -1
  183. chia/_tests/util/build_network_protocol_files.py +7 -0
  184. chia/_tests/util/network_protocol_data.py +26 -0
  185. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  186. chia/_tests/util/protocol_messages_json.py +19 -0
  187. chia/_tests/util/setup_nodes.py +21 -2
  188. chia/_tests/util/spend_sim.py +9 -3
  189. chia/_tests/util/test_condition_tools.py +3 -2
  190. chia/_tests/util/test_full_block_utils.py +10 -9
  191. chia/_tests/util/test_misc.py +10 -10
  192. chia/_tests/util/test_network.py +32 -1
  193. chia/_tests/util/test_network_protocol_files.py +333 -318
  194. chia/_tests/util/test_network_protocol_json.py +6 -0
  195. chia/_tests/util/test_network_protocol_test.py +27 -0
  196. chia/_tests/util/test_priority_mutex.py +1 -1
  197. chia/_tests/util/test_replace_str_to_bytes.py +6 -6
  198. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +17 -13
  199. chia/_tests/wallet/cat_wallet/test_trades.py +55 -55
  200. chia/_tests/wallet/did_wallet/test_did.py +118 -1229
  201. chia/_tests/wallet/nft_wallet/config.py +1 -1
  202. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +73 -96
  203. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +15 -12
  204. chia/_tests/wallet/nft_wallet/test_nft_offers.py +67 -134
  205. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +31 -26
  206. chia/_tests/wallet/rpc/test_wallet_rpc.py +765 -371
  207. chia/_tests/wallet/sync/test_wallet_sync.py +6 -0
  208. chia/_tests/wallet/test_new_wallet_protocol.py +1 -1
  209. chia/_tests/wallet/test_signer_protocol.py +2 -2
  210. chia/_tests/wallet/test_singleton_lifecycle_fast.py +3 -4
  211. chia/_tests/wallet/test_transaction_store.py +42 -33
  212. chia/_tests/wallet/test_wallet.py +22 -31
  213. chia/_tests/wallet/test_wallet_state_manager.py +14 -7
  214. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +53 -32
  215. chia/apis.py +2 -0
  216. chia/cmds/beta.py +7 -3
  217. chia/cmds/chia.py +2 -0
  218. chia/cmds/cmd_classes.py +11 -27
  219. chia/cmds/cmds_util.py +3 -0
  220. chia/cmds/coin_funcs.py +27 -22
  221. chia/cmds/configure.py +42 -18
  222. chia/cmds/dev/data.py +22 -3
  223. chia/cmds/farm.py +32 -0
  224. chia/cmds/farm_funcs.py +54 -5
  225. chia/cmds/init_funcs.py +4 -0
  226. chia/cmds/keys_funcs.py +8 -10
  227. chia/cmds/peer_funcs.py +8 -10
  228. chia/cmds/plotnft_funcs.py +24 -16
  229. chia/cmds/rpc.py +11 -1
  230. chia/cmds/show_funcs.py +5 -5
  231. chia/cmds/solver.py +33 -0
  232. chia/cmds/solver_funcs.py +21 -0
  233. chia/cmds/wallet.py +1 -1
  234. chia/cmds/wallet_funcs.py +149 -96
  235. chia/consensus/block_body_validation.py +8 -9
  236. chia/consensus/block_creation.py +9 -10
  237. chia/consensus/block_header_validation.py +61 -69
  238. chia/{full_node → consensus}/block_height_map.py +2 -1
  239. chia/consensus/block_height_map_protocol.py +21 -0
  240. chia/consensus/block_rewards.py +12 -12
  241. chia/consensus/blockchain.py +8 -18
  242. chia/consensus/default_constants.py +6 -6
  243. chia/consensus/generator_tools.py +1 -1
  244. chia/consensus/get_block_challenge.py +24 -25
  245. chia/consensus/pos_quality.py +28 -2
  246. chia/consensus/pot_iterations.py +15 -17
  247. chia/daemon/keychain_proxy.py +5 -0
  248. chia/daemon/server.py +2 -3
  249. chia/data_layer/data_layer.py +32 -24
  250. chia/data_layer/data_layer_errors.py +5 -0
  251. chia/data_layer/data_layer_rpc_api.py +1 -1
  252. chia/data_layer/data_layer_service.py +8 -0
  253. chia/data_layer/data_layer_util.py +49 -89
  254. chia/data_layer/data_layer_wallet.py +20 -17
  255. chia/data_layer/data_store.py +1051 -1462
  256. chia/data_layer/download_data.py +44 -115
  257. chia/{server → data_layer}/start_data_layer.py +2 -1
  258. chia/data_layer/util/benchmark.py +38 -53
  259. chia/farmer/farmer.py +3 -0
  260. chia/farmer/farmer_api.py +104 -5
  261. chia/farmer/farmer_rpc_api.py +20 -0
  262. chia/farmer/farmer_rpc_client.py +6 -2
  263. chia/farmer/farmer_service.py +8 -0
  264. chia/{server → farmer}/start_farmer.py +4 -3
  265. chia/full_node/block_store.py +20 -10
  266. chia/full_node/coin_store.py +12 -4
  267. chia/full_node/eligible_coin_spends.py +17 -72
  268. chia/full_node/full_node.py +68 -71
  269. chia/full_node/full_node_api.py +26 -32
  270. chia/full_node/full_node_rpc_api.py +44 -32
  271. chia/full_node/full_node_rpc_client.py +67 -79
  272. chia/full_node/full_node_service.py +8 -0
  273. chia/full_node/full_node_store.py +5 -3
  274. chia/full_node/mempool.py +14 -14
  275. chia/full_node/mempool_manager.py +67 -89
  276. chia/{server → full_node}/start_full_node.py +1 -1
  277. chia/full_node/subscriptions.py +2 -2
  278. chia/full_node/weight_proof.py +14 -15
  279. chia/harvester/harvester.py +8 -1
  280. chia/harvester/harvester_api.py +178 -44
  281. chia/harvester/harvester_service.py +8 -0
  282. chia/{server → harvester}/start_harvester.py +1 -1
  283. chia/introducer/introducer_service.py +8 -0
  284. chia/{server → introducer}/start_introducer.py +1 -1
  285. chia/plot_sync/receiver.py +6 -1
  286. chia/plot_sync/sender.py +7 -4
  287. chia/plotting/cache.py +37 -28
  288. chia/plotting/check_plots.py +83 -48
  289. chia/plotting/create_plots.py +3 -4
  290. chia/plotting/manager.py +18 -13
  291. chia/plotting/prover.py +153 -0
  292. chia/plotting/util.py +14 -6
  293. chia/pools/pool_wallet.py +6 -4
  294. chia/protocols/harvester_protocol.py +14 -0
  295. chia/protocols/outbound_message.py +1 -0
  296. chia/protocols/pool_protocol.py +1 -1
  297. chia/protocols/protocol_message_types.py +7 -0
  298. chia/protocols/shared_protocol.py +2 -0
  299. chia/protocols/solver_protocol.py +18 -0
  300. chia/rpc/rpc_server.py +1 -1
  301. chia/seeder/crawl_store.py +4 -8
  302. chia/seeder/crawler.py +2 -2
  303. chia/seeder/crawler_service.py +8 -0
  304. chia/seeder/start_crawler.py +1 -1
  305. chia/server/address_manager.py +12 -15
  306. chia/server/introducer_peers.py +1 -1
  307. chia/server/node_discovery.py +9 -10
  308. chia/server/rate_limit_numbers.py +157 -168
  309. chia/server/rate_limits.py +44 -41
  310. chia/server/resolve_peer_info.py +5 -0
  311. chia/server/server.py +17 -7
  312. chia/server/start_service.py +0 -1
  313. chia/simulator/block_tools.py +92 -58
  314. chia/simulator/full_node_simulator.py +1 -1
  315. chia/simulator/setup_services.py +51 -15
  316. chia/solver/__init__.py +0 -0
  317. chia/solver/solver.py +100 -0
  318. chia/solver/solver_api.py +59 -0
  319. chia/solver/solver_rpc_api.py +31 -0
  320. chia/solver/solver_rpc_client.py +16 -0
  321. chia/solver/solver_service.py +8 -0
  322. chia/solver/start_solver.py +102 -0
  323. {mozilla-ca → chia/ssl}/cacert.pem +0 -27
  324. chia/ssl/create_ssl.py +3 -2
  325. chia/{server → timelord}/start_timelord.py +1 -1
  326. chia/timelord/timelord.py +12 -13
  327. chia/timelord/timelord_service.py +8 -0
  328. chia/types/blockchain_format/proof_of_space.py +61 -17
  329. chia/types/coin_spend.py +0 -8
  330. chia/types/internal_mempool_item.py +3 -3
  331. chia/types/mempool_item.py +15 -8
  332. chia/types/mempool_submission_status.py +1 -1
  333. chia/util/config.py +1 -3
  334. chia/util/db_wrapper.py +7 -8
  335. chia/util/initial-config.yaml +46 -0
  336. chia/util/lru_cache.py +8 -4
  337. chia/util/network.py +9 -0
  338. chia/util/service_groups.py +3 -1
  339. chia/util/streamable.py +38 -8
  340. chia/util/virtual_project_analysis.py +1 -1
  341. chia/wallet/cat_wallet/cat_outer_puzzle.py +7 -4
  342. chia/wallet/cat_wallet/cat_wallet.py +13 -7
  343. chia/wallet/cat_wallet/r_cat_wallet.py +4 -1
  344. chia/wallet/conditions.py +1 -3
  345. chia/wallet/did_wallet/did_wallet.py +27 -332
  346. chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
  347. chia/wallet/nft_wallet/nft_wallet.py +9 -7
  348. chia/wallet/puzzle_drivers.py +7 -8
  349. chia/{server → wallet}/start_wallet.py +1 -1
  350. chia/wallet/trade_manager.py +12 -9
  351. chia/wallet/transaction_record.py +14 -51
  352. chia/wallet/util/clvm_streamable.py +28 -41
  353. chia/wallet/util/merkle_utils.py +2 -2
  354. chia/wallet/util/tx_config.py +3 -6
  355. chia/wallet/vc_wallet/cr_cat_wallet.py +12 -6
  356. chia/wallet/vc_wallet/vc_wallet.py +13 -15
  357. chia/wallet/wallet.py +5 -3
  358. chia/wallet/wallet_node.py +25 -30
  359. chia/wallet/wallet_request_types.py +538 -101
  360. chia/wallet/wallet_rpc_api.py +398 -570
  361. chia/wallet/wallet_rpc_client.py +144 -332
  362. chia/wallet/wallet_service.py +8 -0
  363. chia/wallet/wallet_state_manager.py +53 -42
  364. chia/wallet/wallet_transaction_store.py +13 -5
  365. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/METADATA +31 -31
  366. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/RECORD +369 -241
  367. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/WHEEL +1 -1
  368. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/entry_points.txt +8 -7
  369. chia/full_node/mempool_check_conditions.py +0 -102
  370. chia/server/aliases.py +0 -35
  371. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info/licenses}/LICENSE +0 -0
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
4
  import json
5
- from typing import Any, Optional, Union
5
+ from typing import Any
6
6
 
7
7
  import pytest
8
8
  from chia_rs import AugSchemeMPL, G1Element, G2Element
@@ -23,13 +23,9 @@ from chia.types.condition_opcodes import ConditionOpcode
23
23
  from chia.types.peer_info import PeerInfo
24
24
  from chia.types.signing_mode import CHIP_0002_SIGN_MESSAGE_PREFIX
25
25
  from chia.util.bech32m import decode_puzzle_hash, encode_puzzle_hash
26
+ from chia.util.byte_types import hexstr_to_bytes
26
27
  from chia.wallet.did_wallet.did_wallet import DIDWallet
27
- from chia.wallet.did_wallet.did_wallet_puzzles import (
28
- DID_INNERPUZ_MOD,
29
- )
30
28
  from chia.wallet.singleton import (
31
- SINGLETON_LAUNCHER_PUZZLE_HASH,
32
- SINGLETON_TOP_LAYER_MOD_HASH,
33
29
  create_singleton_puzzle,
34
30
  )
35
31
  from chia.wallet.util.address_type import AddressType
@@ -38,9 +34,8 @@ from chia.wallet.util.wallet_types import WalletType
38
34
  from chia.wallet.wallet import Wallet
39
35
  from chia.wallet.wallet_action_scope import WalletActionScope
40
36
  from chia.wallet.wallet_node import WalletNode
41
- from chia.wallet.wallet_request_types import DIDFindLostDID, DIDGetCurrentCoinInfo, DIDGetInfo, DIDGetRecoveryInfo
37
+ from chia.wallet.wallet_request_types import DIDFindLostDID, DIDGetCurrentCoinInfo, DIDGetInfo
42
38
  from chia.wallet.wallet_rpc_api import WalletRpcApi
43
- from chia.wallet.wallet_spend_bundle import WalletSpendBundle
44
39
 
45
40
 
46
41
  async def get_wallet_num(wallet_manager):
@@ -56,34 +51,12 @@ async def make_did_wallet(
56
51
  wallet: Wallet,
57
52
  amount: uint64,
58
53
  action_scope: WalletActionScope,
59
- recovery_list: list[bytes32] = [],
60
54
  metadata: dict[str, str] = {},
61
55
  fee: uint64 = uint64(0),
62
- use_alternate_recovery: bool = False,
63
56
  ) -> DIDWallet:
64
- def alt_create_innerpuz(
65
- p2_puzzle_or_hash: Union[Program, bytes32],
66
- recovery_list: list[bytes32],
67
- num_of_backup_ids_needed: uint64,
68
- launcher_id: bytes32,
69
- metadata: Program = Program.to([]),
70
- recovery_list_hash: Optional[Program] = None,
71
- ) -> Program:
72
- # override the default of NIL_TREEHASH with NIL to match other wallet implementations
73
- nil_recovery = Program.to(None)
74
- singleton_struct = Program.to((SINGLETON_TOP_LAYER_MOD_HASH, (launcher_id, SINGLETON_LAUNCHER_PUZZLE_HASH)))
75
- return DID_INNERPUZ_MOD.curry(p2_puzzle_or_hash, nil_recovery, 0, singleton_struct, metadata)
76
-
77
- if use_alternate_recovery:
78
- with pytest.MonkeyPatch.context() as m:
79
- m.setattr("chia.wallet.did_wallet.did_wallet_puzzles.create_innerpuz", alt_create_innerpuz)
80
- did_wallet = await DIDWallet.create_new_did_wallet(
81
- wallet_state_manager, wallet, uint64(101), action_scope, metadata=metadata, fee=fee
82
- )
83
- else:
84
- did_wallet = await DIDWallet.create_new_did_wallet(
85
- wallet_state_manager, wallet, amount, action_scope, backups_ids=recovery_list, metadata=metadata, fee=fee
86
- )
57
+ did_wallet = await DIDWallet.create_new_did_wallet(
58
+ wallet_state_manager, wallet, amount, action_scope, metadata=metadata, fee=fee
59
+ )
87
60
 
88
61
  return did_wallet
89
62
 
@@ -94,16 +67,11 @@ async def make_did_wallet(
94
67
  "trusted",
95
68
  [True, False],
96
69
  )
97
- @pytest.mark.parametrize(
98
- "use_alternate_recovery",
99
- [True, False],
100
- )
101
70
  @pytest.mark.anyio
102
71
  async def test_creation_from_coin_spend(
103
72
  self_hostname: str,
104
73
  two_nodes_two_wallets_with_same_keys: OldSimulatorsAndWallets,
105
74
  trusted: bool,
106
- use_alternate_recovery: bool,
107
75
  ) -> None:
108
76
  """
109
77
  Verify that DIDWallet.create_new_did_wallet_from_coin_spend() is called after Singleton creation on
@@ -151,12 +119,10 @@ async def test_creation_from_coin_spend(
151
119
  wallet_0,
152
120
  uint64(101),
153
121
  action_scope,
154
- use_alternate_recovery=use_alternate_recovery,
155
122
  )
156
123
 
157
124
  with pytest.raises(RuntimeError):
158
125
  assert await did_wallet_0.get_coin() == set()
159
- assert await did_wallet_0.get_info_for_recovery() is None
160
126
 
161
127
  await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
162
128
  await full_node_api.wait_for_wallets_synced(wallet_nodes=[wallet_node_0, wallet_node_1])
@@ -187,15 +153,9 @@ async def test_creation_from_coin_spend(
187
153
  ],
188
154
  indirect=True,
189
155
  )
190
- @pytest.mark.parametrize(
191
- "use_alternate_recovery",
192
- [True, False],
193
- )
194
156
  @pytest.mark.anyio
195
157
  @pytest.mark.limit_consensus_modes(reason="irrelevant")
196
- async def test_creation_from_backup_file(
197
- wallet_environments: WalletTestFramework, use_alternate_recovery: bool
198
- ) -> None:
158
+ async def test_creation_from_backup_file(wallet_environments: WalletTestFramework) -> None:
199
159
  env_0 = wallet_environments.environments[0]
200
160
  env_1 = wallet_environments.environments[1]
201
161
  env_2 = wallet_environments.environments[2]
@@ -220,7 +180,6 @@ async def test_creation_from_backup_file(
220
180
  env_0.xch_wallet,
221
181
  uint64(101),
222
182
  action_scope,
223
- use_alternate_recovery=use_alternate_recovery,
224
183
  )
225
184
 
226
185
  await wallet_environments.process_pending_states(
@@ -270,12 +229,9 @@ async def test_creation_from_backup_file(
270
229
  ]
271
230
  )
272
231
 
273
- # Wallet1 sets up DIDWallet_1 with DIDWallet_0 as backup
274
- backup_ids = [bytes32.from_hexstr(did_wallet_0.get_my_DID())]
275
-
276
232
  async with env_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
277
233
  did_wallet_1: DIDWallet = await DIDWallet.create_new_did_wallet(
278
- env_1.wallet_state_manager, env_1.xch_wallet, uint64(201), action_scope, backup_ids
234
+ env_1.wallet_state_manager, env_1.xch_wallet, uint64(201), action_scope
279
235
  )
280
236
 
281
237
  await wallet_environments.process_pending_states(
@@ -335,999 +291,149 @@ async def test_creation_from_backup_file(
335
291
  backup_data=backup_data,
336
292
  )
337
293
  did_wallet_2 = env_2.wallet_state_manager.get_wallet(id=uint32(2), required_type=DIDWallet)
338
- recovery_info = await env_2.rpc_client.did_get_recovery_info(
339
- DIDGetRecoveryInfo(uint32(env_2.wallet_aliases["did"]))
340
- )
341
- assert recovery_info.wallet_id == env_2.wallet_aliases["did"]
342
- assert recovery_info.backup_dids == backup_ids
343
294
  current_coin_info_response = await env_0.rpc_client.did_get_current_coin_info(
344
295
  DIDGetCurrentCoinInfo(uint32(env_0.wallet_aliases["did"]))
345
296
  )
346
- # TODO: this check is kind of weak, we should research when this endpoint might actually be useful
347
297
  assert current_coin_info_response.wallet_id == env_0.wallet_aliases["did"]
348
- async with env_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
349
- assert recovery_info.pubkey is not None
350
- assert recovery_info.newpuzhash is not None
351
- message_spend_bundle, attest_data = await did_wallet_0.create_attestment(
352
- recovery_info.coin_name, recovery_info.newpuzhash, recovery_info.pubkey, action_scope
353
- )
354
-
355
- await wallet_environments.process_pending_states(
356
- [
357
- WalletStateTransition(
358
- pre_block_balance_updates={
359
- "did": {
360
- "spendable_balance": -101,
361
- "pending_change": 101,
362
- "pending_coin_removal_count": 1,
363
- "max_send_amount": -101,
364
- }
365
- },
366
- post_block_balance_updates={
367
- "did": {
368
- "spendable_balance": 101,
369
- "pending_change": -101,
370
- "pending_coin_removal_count": -1,
371
- "max_send_amount": 101,
372
- }
373
- },
374
- ),
375
- WalletStateTransition(
376
- pre_block_balance_updates={},
377
- post_block_balance_updates={},
378
- ),
379
- WalletStateTransition(
380
- pre_block_balance_updates={
381
- "did": {
382
- "init": True,
383
- }
384
- },
385
- post_block_balance_updates={},
386
- ),
387
- ]
388
- )
389
-
390
- (
391
- test_info_list,
392
- test_message_spend_bundle,
393
- ) = await did_wallet_2.load_attest_files_for_recovery_spend([attest_data])
394
- assert message_spend_bundle == test_message_spend_bundle
395
-
396
- async with env_2.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
397
- assert did_wallet_2.did_info.temp_coin is not None
398
- await did_wallet_2.recovery_spend(
399
- did_wallet_2.did_info.temp_coin,
400
- recovery_info.newpuzhash,
401
- test_info_list,
402
- recovery_info.pubkey,
403
- test_message_spend_bundle,
404
- action_scope,
405
- )
406
-
407
- await wallet_environments.process_pending_states(
408
- [
409
- WalletStateTransition(
410
- pre_block_balance_updates={},
411
- post_block_balance_updates={},
412
- ),
413
- WalletStateTransition(
414
- pre_block_balance_updates={},
415
- post_block_balance_updates={
416
- "did": {
417
- "confirmed_wallet_balance": -201,
418
- "unconfirmed_wallet_balance": -201,
419
- "spendable_balance": -201,
420
- "max_send_amount": -201,
421
- "unspent_coin_count": -1,
422
- }
423
- },
424
- ),
425
- WalletStateTransition(
426
- pre_block_balance_updates={
427
- "did": {
428
- "unconfirmed_wallet_balance": 201,
429
- "pending_coin_removal_count": 2,
430
- }
431
- },
432
- post_block_balance_updates={
433
- "did": {
434
- "confirmed_wallet_balance": 201,
435
- "spendable_balance": 201,
436
- "max_send_amount": 201,
437
- "unspent_coin_count": 1,
438
- "pending_coin_removal_count": -2,
439
- }
440
- },
441
- ),
442
- ]
443
- )
444
298
 
445
299
  for wallet in [did_wallet_0, did_wallet_1, did_wallet_2]:
446
300
  assert wallet.wallet_state_manager.wallets[wallet.id()] == wallet
447
301
 
448
- some_ph = bytes32(32 * b"\2")
449
- async with env_2.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
450
- await did_wallet_2.create_exit_spend(some_ph, action_scope)
451
-
452
- await wallet_environments.process_pending_states(
453
- [
454
- WalletStateTransition(
455
- pre_block_balance_updates={},
456
- post_block_balance_updates={},
457
- ),
458
- WalletStateTransition(
459
- pre_block_balance_updates={},
460
- post_block_balance_updates={},
461
- ),
462
- WalletStateTransition(
463
- pre_block_balance_updates={
464
- "did": {
465
- "unconfirmed_wallet_balance": -201,
466
- "spendable_balance": -201,
467
- "max_send_amount": -201,
468
- "pending_coin_removal_count": 1,
469
- }
470
- },
471
- post_block_balance_updates={
472
- "did": {
473
- "confirmed_wallet_balance": -201,
474
- "unspent_coin_count": -1,
475
- "pending_coin_removal_count": -1,
476
- }
477
- },
478
- ),
479
- ]
480
- )
481
-
482
- async def get_coins_with_ph() -> bool:
483
- coins = await wallet_environments.full_node.full_node.coin_store.get_coin_records_by_puzzle_hash(True, some_ph)
484
- return len(coins) == 1
485
-
486
- await time_out_assert(15, get_coins_with_ph, True)
487
-
488
- for wallet in [did_wallet_0, did_wallet_1]:
489
- assert wallet.wallet_state_manager.wallets[wallet.id()] == wallet
490
-
491
302
 
492
303
  @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
493
- @pytest.mark.parametrize("wallet_environments", [{"num_environments": 2, "blocks_needed": [1, 1]}], indirect=True)
494
- @pytest.mark.parametrize(
495
- "use_alternate_recovery",
496
- [True, False],
497
- )
304
+ @pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
498
305
  @pytest.mark.anyio
499
- async def test_did_recovery_with_multiple_backup_dids(
500
- wallet_environments: WalletTestFramework, use_alternate_recovery: bool
501
- ) -> None:
306
+ async def test_did_find_lost_did(wallet_environments: WalletTestFramework):
502
307
  env_0 = wallet_environments.environments[0]
503
- env_1 = wallet_environments.environments[1]
504
308
  wallet_node_0 = env_0.node
505
- wallet_node_1 = env_1.node
506
309
  wallet_0 = env_0.xch_wallet
507
- wallet_1 = env_1.xch_wallet
508
310
 
509
311
  env_0.wallet_aliases = {
510
312
  "xch": 1,
511
313
  "did": 2,
512
314
  }
513
- env_1.wallet_aliases = {
514
- "xch": 1,
515
- "did": 2,
516
- }
517
315
 
518
316
  async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
519
- did_wallet: DIDWallet = await make_did_wallet(
317
+ did_wallet_0 = await make_did_wallet(
520
318
  wallet_node_0.wallet_state_manager,
521
319
  wallet_0,
522
320
  uint64(101),
523
321
  action_scope,
524
- use_alternate_recovery=use_alternate_recovery,
525
- )
526
- assert did_wallet.get_name() == "Profile 1"
527
- recovery_list = [bytes32.from_hexstr(did_wallet.get_my_DID())]
528
-
529
- async with wallet_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
530
- did_wallet_2: DIDWallet = await DIDWallet.create_new_did_wallet(
531
- wallet_node_1.wallet_state_manager, wallet_1, uint64(101), action_scope, recovery_list
532
- )
533
-
534
- await wallet_environments.process_pending_states(
535
- [
536
- WalletStateTransition(
537
- pre_block_balance_updates={
538
- "xch": {
539
- "set_remainder": True,
540
- },
541
- "did": {
542
- "init": True,
543
- "unconfirmed_wallet_balance": 101,
544
- "pending_change": 101,
545
- "pending_coin_removal_count": 1,
546
- },
547
- },
548
- post_block_balance_updates={
549
- "xch": {
550
- "set_remainder": True,
551
- },
552
- "did": {
553
- "confirmed_wallet_balance": 101,
554
- "spendable_balance": 101,
555
- "max_send_amount": 101,
556
- "unspent_coin_count": 1,
557
- "pending_change": -101,
558
- "pending_coin_removal_count": -1,
559
- },
560
- },
561
- ),
562
- WalletStateTransition(
563
- pre_block_balance_updates={
564
- "xch": {
565
- "set_remainder": True,
566
- },
567
- "did": {
568
- "init": True,
569
- "unconfirmed_wallet_balance": 101,
570
- "pending_change": 101,
571
- "pending_coin_removal_count": 1,
572
- },
573
- },
574
- post_block_balance_updates={
575
- "xch": {
576
- "set_remainder": True,
577
- },
578
- "did": {
579
- "confirmed_wallet_balance": 101,
580
- "spendable_balance": 101,
581
- "max_send_amount": 101,
582
- "unspent_coin_count": 1,
583
- "pending_change": -101,
584
- "pending_coin_removal_count": -1,
585
- },
586
- },
587
- ),
588
- ]
589
- )
590
- assert did_wallet_2.did_info.backup_ids == recovery_list
591
-
592
- recovery_list.append(bytes32.from_hexstr(did_wallet_2.get_my_DID()))
593
-
594
- async with wallet_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
595
- did_wallet_3: DIDWallet = await DIDWallet.create_new_did_wallet(
596
- wallet_node_1.wallet_state_manager, wallet_1, uint64(201), action_scope, recovery_list
597
- )
598
-
599
- env_1.wallet_aliases["did_2"] = 3
600
-
601
- await wallet_environments.process_pending_states(
602
- [
603
- WalletStateTransition(
604
- pre_block_balance_updates={},
605
- post_block_balance_updates={},
606
- ),
607
- WalletStateTransition(
608
- pre_block_balance_updates={
609
- "xch": {
610
- "set_remainder": True,
611
- },
612
- "did": {
613
- "set_remainder": True,
614
- },
615
- "did_2": {
616
- "init": True,
617
- "unconfirmed_wallet_balance": 201,
618
- "pending_change": 201,
619
- "pending_coin_removal_count": 1,
620
- },
621
- },
622
- post_block_balance_updates={
623
- "xch": {
624
- "set_remainder": True,
625
- },
626
- "did": {
627
- "set_remainder": True,
628
- },
629
- "did_2": {
630
- "confirmed_wallet_balance": 201,
631
- "spendable_balance": 201,
632
- "max_send_amount": 201,
633
- "unspent_coin_count": 1,
634
- "pending_change": -201,
635
- "pending_coin_removal_count": -1,
636
- },
637
- },
638
- ),
639
- ]
640
- )
641
- coin = await did_wallet_3.get_coin()
642
-
643
- backup_data = did_wallet_3.create_backup()
644
-
645
- async with wallet_node_0.wallet_state_manager.lock:
646
- did_wallet_4 = await DIDWallet.create_new_did_wallet_from_recovery(
647
- wallet_node_0.wallet_state_manager,
648
- wallet_0,
649
- backup_data,
650
- )
651
- assert did_wallet_4.get_name() == "Profile 2"
652
- env_0.wallet_aliases["did_2"] = 3
653
-
654
- pubkey = (await did_wallet_4.wallet_state_manager.get_unused_derivation_record(did_wallet_2.wallet_info.id)).pubkey
655
- new_ph = did_wallet_4.did_info.temp_puzhash
656
- async with did_wallet.wallet_state_manager.new_action_scope(
657
- wallet_environments.tx_config, push=True
658
- ) as action_scope:
659
- message_spend_bundle, attest1 = await did_wallet.create_attestment(coin.name(), new_ph, pubkey, action_scope)
660
-
661
- async with did_wallet_2.wallet_state_manager.new_action_scope(
662
- wallet_environments.tx_config, push=True
663
- ) as action_scope_2:
664
- message_spend_bundle2, attest2 = await did_wallet_2.create_attestment(
665
- coin.name(), new_ph, pubkey, action_scope_2
666
322
  )
667
323
 
668
- message_spend_bundle = message_spend_bundle.aggregate([message_spend_bundle, message_spend_bundle2])
669
-
670
- (
671
- test_info_list,
672
- test_message_spend_bundle,
673
- ) = await did_wallet_4.load_attest_files_for_recovery_spend([attest1, attest2])
674
- assert message_spend_bundle == test_message_spend_bundle
675
-
676
- await wallet_environments.process_pending_states(
677
- [
678
- WalletStateTransition(
679
- pre_block_balance_updates={
680
- "did": {
681
- "spendable_balance": -101,
682
- "pending_change": 101,
683
- "max_send_amount": -101,
684
- "pending_coin_removal_count": 1,
685
- "set_remainder": True,
686
- },
687
- "did_2": {
688
- "init": True,
689
- "unconfirmed_wallet_balance": 0,
690
- "pending_change": 0,
691
- "pending_coin_removal_count": 0,
692
- },
693
- },
694
- post_block_balance_updates={
695
- "did": {
696
- "spendable_balance": 101,
697
- "pending_change": -101,
698
- "max_send_amount": 101,
699
- "pending_coin_removal_count": -1,
700
- },
701
- "did_2": {
702
- "confirmed_wallet_balance": 0,
703
- "spendable_balance": 0,
704
- "max_send_amount": 0,
705
- "unspent_coin_count": 0,
706
- "pending_change": 0,
707
- "pending_coin_removal_count": 0,
708
- },
709
- },
710
- ),
711
- WalletStateTransition(
712
- pre_block_balance_updates={
713
- "did": {
714
- "spendable_balance": -101,
715
- "pending_change": 101,
716
- "max_send_amount": -101,
717
- "pending_coin_removal_count": 1,
718
- "set_remainder": True,
719
- },
720
- },
721
- post_block_balance_updates={
722
- "did": {
723
- "spendable_balance": 101,
724
- "pending_change": -101,
725
- "max_send_amount": 101,
726
- "pending_coin_removal_count": -1,
727
- },
728
- },
729
- ),
730
- ]
731
- )
732
-
733
- async with did_wallet_4.wallet_state_manager.new_action_scope(
734
- wallet_environments.tx_config, push=True
735
- ) as action_scope:
736
- await did_wallet_4.recovery_spend(coin, new_ph, test_info_list, pubkey, message_spend_bundle, action_scope)
737
-
738
- await wallet_environments.process_pending_states(
739
- [
740
- WalletStateTransition(
741
- pre_block_balance_updates={
742
- "did_2": {
743
- "unconfirmed_wallet_balance": 201,
744
- "pending_change": 0,
745
- "pending_coin_removal_count": 3,
746
- },
747
- },
748
- post_block_balance_updates={
749
- "did_2": {
750
- "confirmed_wallet_balance": 201,
751
- "spendable_balance": 201,
752
- "max_send_amount": 201,
753
- "unspent_coin_count": 1,
754
- "pending_change": 0,
755
- "pending_coin_removal_count": -3,
756
- },
757
- },
758
- ),
759
- WalletStateTransition(
760
- pre_block_balance_updates={
761
- "did_2": {
762
- "unconfirmed_wallet_balance": 0, # TODO: fix pre-block balances for recovery
763
- "spendable_balance": 0,
764
- "pending_change": 0,
765
- "max_send_amount": 0,
766
- "pending_coin_removal_count": 0,
767
- "set_remainder": True,
768
- },
769
- },
770
- post_block_balance_updates={
771
- "did_2": {
772
- "confirmed_wallet_balance": -201,
773
- "spendable_balance": -201,
774
- "max_send_amount": -201,
775
- "unspent_coin_count": -1,
776
- "set_remainder": True,
777
- },
778
- },
779
- ),
780
- ]
781
- )
782
-
783
- for wallet in [did_wallet, did_wallet_2, did_wallet_3, did_wallet_4]:
784
- assert wallet.wallet_state_manager.wallets[wallet.id()] == wallet
785
-
786
-
787
- @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
788
- @pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
789
- @pytest.mark.parametrize(
790
- "use_alternate_recovery",
791
- [True, False],
792
- )
793
- @pytest.mark.anyio
794
- async def test_did_recovery_with_empty_set(wallet_environments: WalletTestFramework, use_alternate_recovery: bool):
795
- env_0 = wallet_environments.environments[0]
796
- wallet_node_0 = env_0.node
797
- wallet_0 = env_0.xch_wallet
798
-
799
- env_0.wallet_aliases = {
800
- "xch": 1,
801
- "did": 2,
802
- }
803
-
804
- async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
805
- ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
806
-
807
- async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
808
- did_wallet: DIDWallet = await make_did_wallet(
809
- wallet_node_0.wallet_state_manager,
810
- wallet_0,
811
- uint64(101),
812
- action_scope,
813
- use_alternate_recovery=use_alternate_recovery,
814
- )
815
-
816
- await wallet_environments.process_pending_states(
817
- [
818
- WalletStateTransition(
819
- pre_block_balance_updates={
820
- "xch": {
821
- "set_remainder": True,
822
- },
823
- "did": {
824
- "init": True,
825
- "unconfirmed_wallet_balance": 101,
826
- "pending_change": 101,
827
- "pending_coin_removal_count": 1,
828
- },
829
- },
830
- post_block_balance_updates={
831
- "xch": {
832
- "set_remainder": True,
833
- },
834
- "did": {
835
- "confirmed_wallet_balance": 101,
836
- "spendable_balance": 101,
837
- "max_send_amount": 101,
838
- "unspent_coin_count": 1,
839
- "pending_change": -101,
840
- "pending_coin_removal_count": -1,
841
- },
842
- },
843
- ),
844
- ]
845
- )
846
- coin = await did_wallet.get_coin()
847
- info: list[tuple[bytes, bytes, int]] = []
848
- pubkey = (await did_wallet.wallet_state_manager.get_unused_derivation_record(did_wallet.wallet_info.id)).pubkey
849
- with pytest.raises(Exception): # We expect a CLVM 80 error for this test
850
- async with did_wallet.wallet_state_manager.new_action_scope(
851
- wallet_environments.tx_config, push=False
852
- ) as action_scope:
853
- await did_wallet.recovery_spend(
854
- coin,
855
- ph,
856
- info,
857
- pubkey,
858
- WalletSpendBundle([], AugSchemeMPL.aggregate([])),
859
- action_scope,
860
- )
861
-
862
-
863
- @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
864
- @pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
865
- @pytest.mark.parametrize(
866
- "use_alternate_recovery",
867
- [True, False],
868
- )
869
- @pytest.mark.anyio
870
- async def test_did_find_lost_did(wallet_environments: WalletTestFramework, use_alternate_recovery: bool):
871
- env_0 = wallet_environments.environments[0]
872
- wallet_node_0 = env_0.node
873
- wallet_0 = env_0.xch_wallet
874
-
875
- env_0.wallet_aliases = {
876
- "xch": 1,
877
- "did": 2,
878
- }
879
-
880
- async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
881
- did_wallet_0 = await make_did_wallet(
882
- wallet_node_0.wallet_state_manager,
883
- wallet_0,
884
- uint64(101),
885
- action_scope,
886
- use_alternate_recovery=use_alternate_recovery,
887
- )
888
-
889
- await wallet_environments.process_pending_states(
890
- [
891
- WalletStateTransition(
892
- pre_block_balance_updates={
893
- "xch": {
894
- "set_remainder": True,
895
- },
896
- "did": {
897
- "init": True,
898
- "unconfirmed_wallet_balance": 101,
899
- "pending_change": 101,
900
- "pending_coin_removal_count": 1,
901
- },
902
- },
903
- post_block_balance_updates={
904
- "xch": {
905
- "set_remainder": True,
906
- },
907
- "did": {
908
- "confirmed_wallet_balance": 101,
909
- "spendable_balance": 101,
910
- "max_send_amount": 101,
911
- "unspent_coin_count": 1,
912
- "pending_change": -101,
913
- "pending_coin_removal_count": -1,
914
- },
915
- },
916
- ),
917
- ]
918
- )
919
-
920
- # Delete the coin and wallet
921
- coin = await did_wallet_0.get_coin()
922
- await wallet_node_0.wallet_state_manager.coin_store.delete_coin_record(coin.name())
923
- await wallet_node_0.wallet_state_manager.delete_wallet(did_wallet_0.wallet_info.id)
924
- wallet_node_0.wallet_state_manager.wallets.pop(did_wallet_0.wallet_info.id)
925
- assert len(wallet_node_0.wallet_state_manager.wallets) == 1
926
- # Find lost DID
927
- assert did_wallet_0.did_info.origin_coin is not None # mypy
928
- await env_0.rpc_client.find_lost_did(DIDFindLostDID(did_wallet_0.did_info.origin_coin.name().hex()))
929
- did_wallets = list(
930
- filter(
931
- lambda w: (w.type == WalletType.DECENTRALIZED_ID),
932
- await wallet_node_0.wallet_state_manager.get_all_wallet_info_entries(),
933
- )
934
- )
935
- did_wallet = wallet_node_0.wallet_state_manager.wallets[did_wallets[0].id]
936
- assert isinstance(did_wallet, DIDWallet)
937
- env_0.wallet_aliases["did_found"] = did_wallets[0].id
938
- await env_0.change_balances(
939
- {
940
- "did_found": {
941
- "init": True,
942
- "confirmed_wallet_balance": 101,
943
- "unconfirmed_wallet_balance": 101,
944
- "spendable_balance": 101,
945
- "max_send_amount": 101,
946
- "unspent_coin_count": 1,
947
- }
948
- }
949
- )
950
- await env_0.check_balances()
951
-
952
- # Spend DID
953
- recovery_list = [bytes32.fromhex(did_wallet.get_my_DID())]
954
- await did_wallet.update_recovery_list(recovery_list, uint64(1))
955
- assert did_wallet.did_info.backup_ids == recovery_list
956
- async with did_wallet.wallet_state_manager.new_action_scope(
957
- wallet_environments.tx_config, push=True
958
- ) as action_scope:
959
- await did_wallet.create_update_spend(action_scope)
960
-
961
- await wallet_environments.process_pending_states(
962
- [
963
- WalletStateTransition(
964
- pre_block_balance_updates={
965
- "did_found": {
966
- "spendable_balance": -101,
967
- "max_send_amount": -101,
968
- "pending_change": 101,
969
- "pending_coin_removal_count": 1,
970
- },
971
- },
972
- post_block_balance_updates={
973
- "did_found": {
974
- "spendable_balance": 101,
975
- "max_send_amount": 101,
976
- "pending_change": -101,
977
- "pending_coin_removal_count": -1,
978
- },
979
- },
980
- ),
981
- ]
982
- )
983
-
984
- # Delete the coin and change inner puzzle
985
- coin = await did_wallet.get_coin()
986
- await wallet_node_0.wallet_state_manager.coin_store.delete_coin_record(coin.name())
987
- with wallet_environments.new_puzzle_hashes_allowed():
988
- async with did_wallet.wallet_state_manager.new_action_scope(
989
- wallet_environments.tx_config, push=True
990
- ) as action_scope:
991
- new_inner_puzzle = await did_wallet.get_did_innerpuz(action_scope, override_reuse_puzhash_with=False)
992
- did_wallet.did_info = dataclasses.replace(did_wallet.did_info, current_inner=new_inner_puzzle)
993
- # Recovery the coin
994
- assert did_wallet.did_info.origin_coin is not None # mypy
995
- await env_0.rpc_client.find_lost_did(DIDFindLostDID(did_wallet.did_info.origin_coin.name().hex()))
996
- found_coin = await did_wallet.get_coin()
997
- assert found_coin == coin
998
- assert did_wallet.did_info.current_inner != new_inner_puzzle
999
-
1000
-
1001
- @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
1002
- @pytest.mark.parametrize("wallet_environments", [{"num_environments": 2, "blocks_needed": [1, 1]}], indirect=True)
1003
- @pytest.mark.parametrize(
1004
- "use_alternate_recovery",
1005
- [True, False],
1006
- )
1007
- @pytest.mark.anyio
1008
- async def test_did_attest_after_recovery(wallet_environments: WalletTestFramework, use_alternate_recovery: bool):
1009
- env_0 = wallet_environments.environments[0]
1010
- env_1 = wallet_environments.environments[1]
1011
- wallet_node_0 = env_0.node
1012
- wallet_node_1 = env_1.node
1013
- wallet_0 = env_0.xch_wallet
1014
- wallet_1 = env_1.xch_wallet
1015
-
1016
- env_0.wallet_aliases = {
1017
- "xch": 1,
1018
- "did": 2,
1019
- }
1020
- env_1.wallet_aliases = {
1021
- "xch": 1,
1022
- "did": 2,
1023
- }
1024
-
1025
- async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
1026
- did_wallet: DIDWallet = await make_did_wallet(
1027
- wallet_node_0.wallet_state_manager,
1028
- wallet_0,
1029
- uint64(101),
1030
- action_scope,
1031
- use_alternate_recovery=use_alternate_recovery,
1032
- )
1033
- await wallet_environments.process_pending_states(
1034
- [
1035
- WalletStateTransition(
1036
- pre_block_balance_updates={
1037
- "xch": {
1038
- "set_remainder": True,
1039
- },
1040
- "did": {
1041
- "init": True,
1042
- "unconfirmed_wallet_balance": 101,
1043
- "pending_change": 101,
1044
- "pending_coin_removal_count": 1,
1045
- },
1046
- },
1047
- post_block_balance_updates={
1048
- "xch": {
1049
- "set_remainder": True,
1050
- },
1051
- "did": {
1052
- "confirmed_wallet_balance": 101,
1053
- "spendable_balance": 101,
1054
- "max_send_amount": 101,
1055
- "unspent_coin_count": 1,
1056
- "pending_change": -101,
1057
- "pending_coin_removal_count": -1,
1058
- },
1059
- },
1060
- ),
1061
- WalletStateTransition(),
1062
- ]
1063
- )
1064
-
1065
- await time_out_assert(15, did_wallet.get_confirmed_balance, 101)
1066
- await time_out_assert(15, did_wallet.get_unconfirmed_balance, 101)
1067
- recovery_list = [bytes32.from_hexstr(did_wallet.get_my_DID())]
1068
-
1069
- async with wallet_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
1070
- did_wallet_2: DIDWallet = await DIDWallet.create_new_did_wallet(
1071
- wallet_node_1.wallet_state_manager, wallet_1, uint64(101), action_scope, recovery_list
1072
- )
1073
- await wallet_environments.process_pending_states(
1074
- [
1075
- WalletStateTransition(),
1076
- WalletStateTransition(
1077
- pre_block_balance_updates={
1078
- "xch": {
1079
- "set_remainder": True,
1080
- },
1081
- "did": {
1082
- "init": True,
1083
- "unconfirmed_wallet_balance": 101,
1084
- "pending_change": 101,
1085
- "pending_coin_removal_count": 1,
1086
- },
1087
- },
1088
- post_block_balance_updates={
1089
- "xch": {
1090
- "set_remainder": True,
1091
- },
1092
- "did": {
1093
- "confirmed_wallet_balance": 101,
1094
- "spendable_balance": 101,
1095
- "max_send_amount": 101,
1096
- "unspent_coin_count": 1,
1097
- "pending_change": -101,
1098
- "pending_coin_removal_count": -1,
1099
- },
1100
- },
1101
- ),
1102
- ]
1103
- )
1104
-
1105
- assert did_wallet_2.did_info.backup_ids == recovery_list
1106
-
1107
- # Update coin with new ID info
1108
- recovery_list = [bytes32.from_hexstr(did_wallet_2.get_my_DID())]
1109
- await did_wallet.update_recovery_list(recovery_list, uint64(1))
1110
- assert did_wallet.did_info.backup_ids == recovery_list
1111
- async with did_wallet.wallet_state_manager.new_action_scope(
1112
- wallet_environments.tx_config, push=True
1113
- ) as action_scope:
1114
- await did_wallet.create_update_spend(action_scope)
1115
-
1116
- await wallet_environments.process_pending_states(
1117
- [
1118
- WalletStateTransition(
1119
- pre_block_balance_updates={
1120
- "did": {
1121
- "set_remainder": True,
1122
- }
1123
- },
1124
- post_block_balance_updates={
1125
- "did": {
1126
- "set_remainder": True,
1127
- }
1128
- },
1129
- ),
1130
- WalletStateTransition(),
1131
- ]
1132
- )
1133
-
1134
- # DID Wallet 2 recovers into DID Wallet 3 with new innerpuz
1135
- backup_data = did_wallet_2.create_backup()
1136
-
1137
- async with wallet_node_0.wallet_state_manager.lock:
1138
- did_wallet_3 = await DIDWallet.create_new_did_wallet_from_recovery(
1139
- wallet_node_0.wallet_state_manager,
1140
- wallet_0,
1141
- backup_data,
1142
- )
1143
- env_0.wallet_aliases["did_2"] = 3
1144
- with wallet_environments.new_puzzle_hashes_allowed():
1145
- async with did_wallet_3.wallet_state_manager.new_action_scope(
1146
- wallet_environments.tx_config, push=True
1147
- ) as action_scope:
1148
- new_ph = (
1149
- await did_wallet_3.get_did_innerpuz(action_scope, override_reuse_puzhash_with=False)
1150
- ).get_tree_hash()
1151
- coin = await did_wallet_2.get_coin()
1152
- pubkey = (await did_wallet_3.wallet_state_manager.get_unused_derivation_record(did_wallet_3.wallet_info.id)).pubkey
1153
-
1154
- async with did_wallet.wallet_state_manager.new_action_scope(
1155
- wallet_environments.tx_config, push=True
1156
- ) as action_scope:
1157
- message_spend_bundle, attest_data = await did_wallet.create_attestment(
1158
- coin.name(), new_ph, pubkey, action_scope
1159
- )
1160
- await wallet_environments.process_pending_states(
1161
- [
1162
- WalletStateTransition(
1163
- pre_block_balance_updates={
1164
- "did": {
1165
- "set_remainder": True,
1166
- },
1167
- "did_2": {
1168
- "init": True,
1169
- "set_remainder": True,
1170
- },
1171
- },
1172
- post_block_balance_updates={
1173
- "did": {
1174
- "set_remainder": True,
1175
- },
1176
- "did_2": {
1177
- "set_remainder": True,
1178
- },
1179
- },
1180
- ),
1181
- WalletStateTransition(),
1182
- ]
1183
- )
1184
-
1185
- (
1186
- info,
1187
- message_spend_bundle,
1188
- ) = await did_wallet_3.load_attest_files_for_recovery_spend([attest_data])
1189
- async with did_wallet_3.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1190
- await did_wallet_3.recovery_spend(coin, new_ph, info, pubkey, message_spend_bundle, action_scope)
1191
- await wallet_environments.process_pending_states(
1192
- [
1193
- WalletStateTransition(
1194
- pre_block_balance_updates={
1195
- "did_2": {
1196
- "unconfirmed_wallet_balance": 101,
1197
- "set_remainder": True,
1198
- },
1199
- },
1200
- post_block_balance_updates={
1201
- "did_2": {
1202
- "confirmed_wallet_balance": 101,
1203
- "set_remainder": True,
1204
- },
1205
- },
1206
- ),
1207
- WalletStateTransition(
1208
- pre_block_balance_updates={
1209
- "did": {
1210
- "unconfirmed_wallet_balance": 0, # TODO: fix pre-block balances for recovery
1211
- "set_remainder": True,
1212
- },
1213
- },
1214
- post_block_balance_updates={
1215
- "did": {
1216
- "confirmed_wallet_balance": -101,
1217
- "set_remainder": True,
1218
- },
1219
- },
1220
- ),
1221
- ]
1222
- )
1223
-
1224
- # DID Wallet 1 recovery spends into DID Wallet 4
1225
- backup_data = did_wallet.create_backup()
1226
-
1227
- async with wallet_node_1.wallet_state_manager.lock:
1228
- did_wallet_4 = await DIDWallet.create_new_did_wallet_from_recovery(
1229
- wallet_node_1.wallet_state_manager,
1230
- wallet_1,
1231
- backup_data,
1232
- )
1233
- env_1.wallet_aliases["did_2"] = 3
1234
- coin = await did_wallet.get_coin()
1235
- with wallet_environments.new_puzzle_hashes_allowed():
1236
- async with did_wallet_4.wallet_state_manager.new_action_scope(
1237
- wallet_environments.tx_config, push=True
1238
- ) as action_scope:
1239
- new_ph = (
1240
- await did_wallet_4.get_did_innerpuz(action_scope, override_reuse_puzhash_with=False)
1241
- ).get_tree_hash()
1242
- pubkey = (await did_wallet_4.wallet_state_manager.get_unused_derivation_record(did_wallet_4.wallet_info.id)).pubkey
1243
- async with did_wallet_3.wallet_state_manager.new_action_scope(
1244
- wallet_environments.tx_config, push=True
1245
- ) as action_scope:
1246
- message_spend_bundle, attest1 = await did_wallet_3.create_attestment(coin.name(), new_ph, pubkey, action_scope)
1247
-
1248
- await wallet_environments.process_pending_states(
1249
- [
1250
- WalletStateTransition(
1251
- pre_block_balance_updates={
1252
- "did_2": {
1253
- "unconfirmed_wallet_balance": 0,
1254
- "set_remainder": True,
1255
- },
1256
- },
1257
- post_block_balance_updates={
1258
- "did_2": {
1259
- "confirmed_wallet_balance": 0,
1260
- "set_remainder": True,
1261
- },
1262
- },
1263
- ),
1264
- WalletStateTransition(
1265
- pre_block_balance_updates={
1266
- "did_2": {
1267
- "init": True,
1268
- "set_remainder": True,
1269
- },
1270
- },
1271
- post_block_balance_updates={
1272
- "did_2": {
1273
- "confirmed_wallet_balance": 0,
1274
- "set_remainder": True,
1275
- },
1276
- },
1277
- ),
1278
- ]
1279
- )
1280
-
1281
- (
1282
- test_info_list,
1283
- test_message_spend_bundle,
1284
- ) = await did_wallet_4.load_attest_files_for_recovery_spend([attest1])
1285
- async with did_wallet_4.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1286
- await did_wallet_4.recovery_spend(coin, new_ph, test_info_list, pubkey, test_message_spend_bundle, action_scope)
1287
-
1288
324
  await wallet_environments.process_pending_states(
1289
325
  [
1290
326
  WalletStateTransition(
1291
327
  pre_block_balance_updates={
1292
- "did": {
328
+ "xch": {
1293
329
  "set_remainder": True,
1294
330
  },
331
+ "did": {
332
+ "init": True,
333
+ "unconfirmed_wallet_balance": 101,
334
+ "pending_change": 101,
335
+ "pending_coin_removal_count": 1,
336
+ },
1295
337
  },
1296
338
  post_block_balance_updates={
1297
- "did": {
1298
- "confirmed_wallet_balance": -101,
339
+ "xch": {
1299
340
  "set_remainder": True,
1300
341
  },
342
+ "did": {
343
+ "confirmed_wallet_balance": 101,
344
+ "spendable_balance": 101,
345
+ "max_send_amount": 101,
346
+ "unspent_coin_count": 1,
347
+ "pending_change": -101,
348
+ "pending_coin_removal_count": -1,
349
+ },
1301
350
  },
1302
351
  ),
352
+ ]
353
+ )
354
+
355
+ # Delete the coin and wallet
356
+ coin = await did_wallet_0.get_coin()
357
+ await wallet_node_0.wallet_state_manager.coin_store.delete_coin_record(coin.name())
358
+ await wallet_node_0.wallet_state_manager.delete_wallet(did_wallet_0.wallet_info.id)
359
+ wallet_node_0.wallet_state_manager.wallets.pop(did_wallet_0.wallet_info.id)
360
+ assert len(wallet_node_0.wallet_state_manager.wallets) == 1
361
+ # Find lost DID
362
+ assert did_wallet_0.did_info.origin_coin is not None # mypy
363
+ await env_0.rpc_client.find_lost_did(DIDFindLostDID(did_wallet_0.did_info.origin_coin.name().hex()))
364
+ did_wallets = list(
365
+ filter(
366
+ lambda w: (w.type == WalletType.DECENTRALIZED_ID),
367
+ await wallet_node_0.wallet_state_manager.get_all_wallet_info_entries(),
368
+ )
369
+ )
370
+ did_wallet = wallet_node_0.wallet_state_manager.wallets[did_wallets[0].id]
371
+ assert isinstance(did_wallet, DIDWallet)
372
+ env_0.wallet_aliases["did_found"] = did_wallets[0].id
373
+ await env_0.change_balances(
374
+ {
375
+ "did_found": {
376
+ "init": True,
377
+ "confirmed_wallet_balance": 101,
378
+ "unconfirmed_wallet_balance": 101,
379
+ "spendable_balance": 101,
380
+ "max_send_amount": 101,
381
+ "unspent_coin_count": 1,
382
+ }
383
+ }
384
+ )
385
+ await env_0.check_balances()
386
+
387
+ # Spend DID
388
+ async with did_wallet.wallet_state_manager.new_action_scope(
389
+ wallet_environments.tx_config, push=True
390
+ ) as action_scope:
391
+ await did_wallet.create_update_spend(action_scope)
392
+
393
+ await wallet_environments.process_pending_states(
394
+ [
1303
395
  WalletStateTransition(
1304
396
  pre_block_balance_updates={
1305
- "did_2": {
1306
- "set_remainder": True,
397
+ "did_found": {
398
+ "spendable_balance": -101,
399
+ "max_send_amount": -101,
400
+ "pending_change": 101,
401
+ "pending_coin_removal_count": 1,
1307
402
  },
1308
403
  },
1309
404
  post_block_balance_updates={
1310
- "did_2": {
1311
- "confirmed_wallet_balance": 101,
1312
- "set_remainder": True,
405
+ "did_found": {
406
+ "spendable_balance": 101,
407
+ "max_send_amount": 101,
408
+ "pending_change": -101,
409
+ "pending_coin_removal_count": -1,
1313
410
  },
1314
411
  },
1315
412
  ),
1316
413
  ]
1317
414
  )
1318
415
 
1319
- for wallet in [did_wallet, did_wallet_3, did_wallet_4]:
1320
- assert wallet.wallet_state_manager.wallets[wallet.id()] == wallet
416
+ # Delete the coin and change inner puzzle
417
+ coin = await did_wallet.get_coin()
418
+ await wallet_node_0.wallet_state_manager.coin_store.delete_coin_record(coin.name())
419
+ with wallet_environments.new_puzzle_hashes_allowed():
420
+ async with did_wallet.wallet_state_manager.new_action_scope(
421
+ wallet_environments.tx_config, push=True
422
+ ) as action_scope:
423
+ new_inner_puzzle = await did_wallet.get_did_innerpuz(action_scope, override_reuse_puzhash_with=False)
424
+ did_wallet.did_info = dataclasses.replace(did_wallet.did_info, current_inner=new_inner_puzzle)
425
+ # Recovery the coin
426
+ assert did_wallet.did_info.origin_coin is not None # mypy
427
+ await env_0.rpc_client.find_lost_did(DIDFindLostDID(did_wallet.did_info.origin_coin.name().hex()))
428
+ found_coin = await did_wallet.get_coin()
429
+ assert found_coin == coin
430
+ assert did_wallet.did_info.current_inner != new_inner_puzzle
1321
431
 
1322
432
 
1323
433
  @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
1324
434
  @pytest.mark.parametrize("wallet_environments", [{"num_environments": 2, "blocks_needed": [1, 1]}], indirect=True)
1325
- @pytest.mark.parametrize(
1326
- "with_recovery",
1327
- [True, False],
1328
- )
1329
435
  @pytest.mark.anyio
1330
- async def test_did_transfer(wallet_environments: WalletTestFramework, with_recovery: bool):
436
+ async def test_did_transfer(wallet_environments: WalletTestFramework):
1331
437
  env_0 = wallet_environments.environments[0]
1332
438
  env_1 = wallet_environments.environments[1]
1333
439
  wallet_node_0 = env_0.node
@@ -1343,8 +449,6 @@ async def test_did_transfer(wallet_environments: WalletTestFramework, with_recov
1343
449
  "xch": 1,
1344
450
  "did": 2,
1345
451
  }
1346
- async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
1347
- ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
1348
452
  fee = uint64(1000)
1349
453
 
1350
454
  async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
@@ -1353,8 +457,6 @@ async def test_did_transfer(wallet_environments: WalletTestFramework, with_recov
1353
457
  wallet_0,
1354
458
  uint64(101),
1355
459
  action_scope,
1356
- [ph],
1357
- uint64(1),
1358
460
  {"Twitter": "Test", "GitHub": "测试"},
1359
461
  fee=fee,
1360
462
  )
@@ -1398,7 +500,7 @@ async def test_did_transfer(wallet_environments: WalletTestFramework, with_recov
1398
500
  async with did_wallet_1.wallet_state_manager.new_action_scope(
1399
501
  wallet_environments.tx_config, push=True
1400
502
  ) as action_scope:
1401
- await did_wallet_1.transfer_did(new_puzhash, fee, with_recovery, action_scope)
503
+ await did_wallet_1.transfer_did(new_puzhash, fee, action_scope)
1402
504
 
1403
505
  await wallet_environments.process_pending_states(
1404
506
  [
@@ -1442,9 +544,6 @@ async def test_did_transfer(wallet_environments: WalletTestFramework, with_recov
1442
544
  assert isinstance(did_wallet_2, DIDWallet) # mypy
1443
545
  assert len(wallet_node_0.wallet_state_manager.wallets) == 1
1444
546
  assert did_wallet_1.did_info.origin_coin == did_wallet_2.did_info.origin_coin
1445
- if with_recovery:
1446
- assert did_wallet_1.did_info.backup_ids[0] == did_wallet_2.did_info.backup_ids[0]
1447
- assert did_wallet_1.did_info.num_of_backup_ids_needed == did_wallet_2.did_info.num_of_backup_ids_needed
1448
547
  metadata = json.loads(did_wallet_2.did_info.metadata)
1449
548
  assert metadata["Twitter"] == "Test"
1450
549
  assert metadata["GitHub"] == "测试"
@@ -1475,8 +574,6 @@ async def test_did_auto_transfer_limit(
1475
574
  wallet = wallet_node.wallet_state_manager.main_wallet
1476
575
  wallet2 = wallet_node_2.wallet_state_manager.main_wallet
1477
576
  api_1 = WalletRpcApi(wallet_node_2)
1478
- async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1479
- ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
1480
577
 
1481
578
  if trusted:
1482
579
  wallet_node.config["trusted_peers"] = {
@@ -1501,8 +598,6 @@ async def test_did_auto_transfer_limit(
1501
598
  wallet,
1502
599
  uint64(101),
1503
600
  action_scope,
1504
- [bytes32(bytes(ph))],
1505
- uint64(1),
1506
601
  {"Twitter": "Test", "GitHub": "测试"},
1507
602
  fee=fee,
1508
603
  )
@@ -1517,7 +612,7 @@ async def test_did_auto_transfer_limit(
1517
612
  async with wallet2.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1518
613
  new_puzhash = await action_scope.get_puzzle_hash(wallet2.wallet_state_manager)
1519
614
  async with did_wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1520
- await did_wallet_1.transfer_did(new_puzhash, fee, False, action_scope)
615
+ await did_wallet_1.transfer_did(new_puzhash, fee, action_scope)
1521
616
  await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
1522
617
  await full_node_api.wait_for_wallets_synced(wallet_nodes=[wallet_node, wallet_node_2])
1523
618
  # Check if the DID wallet is created in the wallet2
@@ -1587,14 +682,11 @@ async def test_did_auto_transfer_limit(
1587
682
  # Check we can still manually add new DIDs while at cap
1588
683
  await full_node_api.farm_blocks_to_wallet(1, wallet2)
1589
684
  async with wallet2.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
1590
- ph = await action_scope.get_puzzle_hash(wallet2.wallet_state_manager)
1591
685
  did_wallet_11: DIDWallet = await DIDWallet.create_new_did_wallet(
1592
686
  wallet_node_2.wallet_state_manager,
1593
687
  wallet2,
1594
688
  uint64(101),
1595
689
  action_scope,
1596
- [bytes32(bytes(ph))],
1597
- uint64(1),
1598
690
  {"Twitter": "Test", "GitHub": "测试"},
1599
691
  fee=fee,
1600
692
  )
@@ -1612,97 +704,10 @@ async def test_did_auto_transfer_limit(
1612
704
  assert len(did_wallets) == 11
1613
705
 
1614
706
 
1615
- @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
1616
- @pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
1617
- @pytest.mark.parametrize(
1618
- "use_alternate_recovery",
1619
- [True, False],
1620
- )
1621
- @pytest.mark.anyio
1622
- async def test_update_recovery_list(wallet_environments: WalletTestFramework, use_alternate_recovery: bool):
1623
- env = wallet_environments.environments[0]
1624
- wallet_node = env.node
1625
- wallet = env.xch_wallet
1626
-
1627
- env.wallet_aliases = {
1628
- "xch": 1,
1629
- "did": 2,
1630
- }
1631
-
1632
- async with wallet.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
1633
- ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
1634
- did_wallet_1: DIDWallet = await make_did_wallet(
1635
- wallet_node.wallet_state_manager,
1636
- wallet,
1637
- uint64(101),
1638
- action_scope,
1639
- use_alternate_recovery=use_alternate_recovery,
1640
- )
1641
-
1642
- await wallet_environments.process_pending_states(
1643
- [
1644
- WalletStateTransition(
1645
- pre_block_balance_updates={
1646
- "xch": {
1647
- "set_remainder": True,
1648
- },
1649
- "did": {
1650
- "init": True,
1651
- "unconfirmed_wallet_balance": 101,
1652
- "pending_change": 101,
1653
- "pending_coin_removal_count": 1,
1654
- },
1655
- },
1656
- post_block_balance_updates={
1657
- "xch": {
1658
- "set_remainder": True,
1659
- },
1660
- "did": {
1661
- "confirmed_wallet_balance": 101,
1662
- "spendable_balance": 101,
1663
- "max_send_amount": 101,
1664
- "unspent_coin_count": 1,
1665
- "pending_change": -101,
1666
- "pending_coin_removal_count": -1,
1667
- },
1668
- },
1669
- ),
1670
- ]
1671
- )
1672
- await did_wallet_1.update_recovery_list([ph], uint64(1))
1673
- async with did_wallet_1.wallet_state_manager.new_action_scope(
1674
- wallet_environments.tx_config, push=True
1675
- ) as action_scope:
1676
- await did_wallet_1.create_update_spend(action_scope)
1677
-
1678
- await wallet_environments.process_pending_states(
1679
- [
1680
- WalletStateTransition(
1681
- pre_block_balance_updates={
1682
- "did": {
1683
- "set_remainder": True,
1684
- },
1685
- },
1686
- post_block_balance_updates={
1687
- "did": {
1688
- "set_remainder": True,
1689
- },
1690
- },
1691
- ),
1692
- ]
1693
- )
1694
- assert did_wallet_1.did_info.backup_ids[0] == bytes(ph)
1695
- assert did_wallet_1.did_info.num_of_backup_ids_needed == 1
1696
-
1697
-
1698
707
  @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
1699
708
  @pytest.mark.parametrize("wallet_environments", [{"num_environments": 2, "blocks_needed": [1, 1]}], indirect=True)
1700
- @pytest.mark.parametrize(
1701
- "use_alternate_recovery",
1702
- [True, False],
1703
- )
1704
709
  @pytest.mark.anyio
1705
- async def test_get_info(wallet_environments: WalletTestFramework, use_alternate_recovery: bool):
710
+ async def test_get_info(wallet_environments: WalletTestFramework):
1706
711
  env_0 = wallet_environments.environments[0]
1707
712
  env_1 = wallet_environments.environments[1]
1708
713
  wallet_node_0 = env_0.node
@@ -1730,10 +735,8 @@ async def test_get_info(wallet_environments: WalletTestFramework, use_alternate_
1730
735
  wallet_0,
1731
736
  did_amount,
1732
737
  action_scope,
1733
- [],
1734
738
  metadata={"twitter": "twitter"},
1735
739
  fee=fee,
1736
- use_alternate_recovery=use_alternate_recovery,
1737
740
  )
1738
741
 
1739
742
  await wallet_environments.process_pending_states(
@@ -1781,10 +784,7 @@ async def test_get_info(wallet_environments: WalletTestFramework, use_alternate_
1781
784
  assert response.metadata["twitter"] == "twitter"
1782
785
  assert response.latest_coin == (await did_wallet_1.get_coin()).name()
1783
786
  assert response.num_verification == 0
1784
- if use_alternate_recovery:
1785
- assert response.recovery_list_hash is None
1786
- else:
1787
- assert response.recovery_list_hash == Program(Program.to([])).get_tree_hash()
787
+ assert response.recovery_list_hash == Program(Program.to([])).get_tree_hash()
1788
788
  assert decode_puzzle_hash(response.p2_address) == response.hints[0]
1789
789
 
1790
790
  # Test non-singleton coin
@@ -1792,7 +792,7 @@ async def test_get_info(wallet_environments: WalletTestFramework, use_alternate_
1792
792
  coin = (await wallet_0.select_coins(uint64(1), action_scope)).pop()
1793
793
  assert coin.amount % 2 == 1
1794
794
  coin_id = coin.name()
1795
- with pytest.raises(ValueError, match="The coin is not a DID."):
795
+ with pytest.raises(ValueError, match="The coin is not a DID"):
1796
796
  await api_0.get_did_info(DIDGetInfo(coin_id.hex()))
1797
797
 
1798
798
  # Test multiple odd coins
@@ -1846,18 +846,14 @@ async def test_get_info(wallet_environments: WalletTestFramework, use_alternate_
1846
846
  ]
1847
847
  )
1848
848
 
1849
- with pytest.raises(ValueError, match="This is not a singleton, multiple children coins found."):
849
+ with pytest.raises(ValueError, match=r"This is not a singleton, multiple children coins found."):
1850
850
  await api_0.get_did_info(DIDGetInfo(coin_1.name().hex()))
1851
851
 
1852
852
 
1853
853
  @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
1854
854
  @pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
1855
- @pytest.mark.parametrize(
1856
- "use_alternate_recovery",
1857
- [True, False],
1858
- )
1859
855
  @pytest.mark.anyio
1860
- async def test_message_spend(wallet_environments: WalletTestFramework, use_alternate_recovery: bool):
856
+ async def test_message_spend(wallet_environments: WalletTestFramework):
1861
857
  env = wallet_environments.environments[0]
1862
858
  wallet_node = env.node
1863
859
  wallet = env.xch_wallet
@@ -1876,9 +872,7 @@ async def test_message_spend(wallet_environments: WalletTestFramework, use_alter
1876
872
  wallet,
1877
873
  uint64(101),
1878
874
  action_scope,
1879
- [],
1880
875
  fee=fee,
1881
- use_alternate_recovery=use_alternate_recovery,
1882
876
  )
1883
877
  await wallet_environments.process_pending_states(
1884
878
  [
@@ -1926,12 +920,8 @@ async def test_message_spend(wallet_environments: WalletTestFramework, use_alter
1926
920
 
1927
921
  @pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
1928
922
  @pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
1929
- @pytest.mark.parametrize(
1930
- "use_alternate_recovery",
1931
- [True, False],
1932
- )
1933
923
  @pytest.mark.anyio
1934
- async def test_update_metadata(wallet_environments: WalletTestFramework, use_alternate_recovery: bool):
924
+ async def test_update_metadata(wallet_environments: WalletTestFramework):
1935
925
  env = wallet_environments.environments[0]
1936
926
  wallet_node = env.node
1937
927
  wallet = env.xch_wallet
@@ -1950,9 +940,7 @@ async def test_update_metadata(wallet_environments: WalletTestFramework, use_alt
1950
940
  wallet,
1951
941
  did_amount,
1952
942
  action_scope,
1953
- [],
1954
943
  fee=fee,
1955
- use_alternate_recovery=use_alternate_recovery,
1956
944
  )
1957
945
 
1958
946
  await wallet_environments.process_pending_states(
@@ -2052,14 +1040,11 @@ async def test_did_sign_message(wallet_environments: WalletTestFramework):
2052
1040
  fee = uint64(1000)
2053
1041
 
2054
1042
  async with wallet.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
2055
- ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
2056
1043
  did_wallet_1: DIDWallet = await DIDWallet.create_new_did_wallet(
2057
1044
  wallet_node.wallet_state_manager,
2058
1045
  wallet,
2059
1046
  uint64(101),
2060
1047
  action_scope,
2061
- [ph],
2062
- uint64(1),
2063
1048
  {"Twitter": "Test", "GitHub": "测试"},
2064
1049
  fee=fee,
2065
1050
  )
@@ -2107,9 +1092,9 @@ async def test_did_sign_message(wallet_environments: WalletTestFramework):
2107
1092
  )
2108
1093
  puzzle: Program = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, message))
2109
1094
  assert AugSchemeMPL.verify(
2110
- G1Element.from_bytes(bytes.fromhex(response["pubkey"])),
1095
+ G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
2111
1096
  puzzle.get_tree_hash(),
2112
- G2Element.from_bytes(bytes.fromhex(response["signature"])),
1097
+ G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
2113
1098
  )
2114
1099
  # Test hex string
2115
1100
  message = "0123456789ABCDEF"
@@ -2123,9 +1108,9 @@ async def test_did_sign_message(wallet_environments: WalletTestFramework):
2123
1108
  puzzle = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, bytes.fromhex(message)))
2124
1109
 
2125
1110
  assert AugSchemeMPL.verify(
2126
- G1Element.from_bytes(bytes.fromhex(response["pubkey"])),
1111
+ G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
2127
1112
  puzzle.get_tree_hash(),
2128
- G2Element.from_bytes(bytes.fromhex(response["signature"])),
1113
+ G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
2129
1114
  )
2130
1115
 
2131
1116
  # Test BLS sign string
@@ -2135,15 +1120,15 @@ async def test_did_sign_message(wallet_environments: WalletTestFramework):
2135
1120
  {
2136
1121
  "id": encode_puzzle_hash(did_wallet_1.did_info.origin_coin.name(), AddressType.DID.value),
2137
1122
  "message": message,
2138
- "is_hex": "False",
2139
- "safe_mode": "False",
1123
+ "is_hex": False,
1124
+ "safe_mode": False,
2140
1125
  }
2141
1126
  )
2142
1127
 
2143
1128
  assert AugSchemeMPL.verify(
2144
- G1Element.from_bytes(bytes.fromhex(response["pubkey"])),
1129
+ G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
2145
1130
  bytes(message, "utf-8"),
2146
- G2Element.from_bytes(bytes.fromhex(response["signature"])),
1131
+ G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
2147
1132
  )
2148
1133
  # Test BLS sign hex
2149
1134
  message = "0123456789ABCDEF"
@@ -2158,99 +1143,12 @@ async def test_did_sign_message(wallet_environments: WalletTestFramework):
2158
1143
  )
2159
1144
 
2160
1145
  assert AugSchemeMPL.verify(
2161
- G1Element.from_bytes(bytes.fromhex(response["pubkey"])),
2162
- bytes.fromhex(message),
2163
- G2Element.from_bytes(bytes.fromhex(response["signature"])),
1146
+ G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
1147
+ hexstr_to_bytes(message),
1148
+ G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
2164
1149
  )
2165
1150
 
2166
1151
 
2167
- @pytest.mark.parametrize(
2168
- "trusted",
2169
- [True, False],
2170
- )
2171
- @pytest.mark.anyio
2172
- async def test_create_did_with_recovery_list(
2173
- self_hostname: str, two_nodes_two_wallets_with_same_keys: OldSimulatorsAndWallets, trusted: bool
2174
- ) -> None:
2175
- """
2176
- A DID is created on-chain in client0, causing a DID Wallet to be created in client1, which shares the same key.
2177
- This can happen if someone uses the same key on multiple computers, or is syncing a wallet from scratch.
2178
-
2179
- For this test, we assign a recovery list hash at DID creation time, but the recovery list is not yet available
2180
- to the wallet_node that the DID Wallet is being created in (client1).
2181
-
2182
- """
2183
- full_nodes, wallets, _ = two_nodes_two_wallets_with_same_keys
2184
- full_node_api = full_nodes[0]
2185
- full_node_server = full_node_api.server
2186
- wallet_node_0, server_0 = wallets[0]
2187
- wallet_node_1, server_1 = wallets[1]
2188
-
2189
- wallet_0 = wallet_node_0.wallet_state_manager.main_wallet
2190
- wallet_1 = wallet_node_1.wallet_state_manager.main_wallet
2191
-
2192
- async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
2193
- ph0 = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
2194
- async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
2195
- ph1 = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
2196
-
2197
- sk0 = await wallet_node_0.wallet_state_manager.get_private_key(ph0)
2198
- sk1 = await wallet_node_1.wallet_state_manager.get_private_key(ph1)
2199
- assert sk0 == sk1
2200
-
2201
- if trusted:
2202
- wallet_node_0.config["trusted_peers"] = {
2203
- full_node_api.full_node.server.node_id.hex(): full_node_api.full_node.server.node_id.hex()
2204
- }
2205
- wallet_node_1.config["trusted_peers"] = {
2206
- full_node_api.full_node.server.node_id.hex(): full_node_api.full_node.server.node_id.hex()
2207
- }
2208
-
2209
- else:
2210
- wallet_node_0.config["trusted_peers"] = {}
2211
- wallet_node_1.config["trusted_peers"] = {}
2212
- await server_0.start_client(PeerInfo(self_hostname, full_node_server.get_port()), None)
2213
- await server_1.start_client(PeerInfo(self_hostname, full_node_server.get_port()), None)
2214
-
2215
- await full_node_api.farm_blocks_to_wallet(1, wallet_0)
2216
- await full_node_api.farm_blocks_to_wallet(1, wallet_1)
2217
-
2218
- # Node 0 sets up a DID Wallet with a backup set, but num_of_backup_ids_needed=0
2219
- # (a malformed solution, but legal for the clvm puzzle)
2220
- recovery_list = [bytes32(bytes.fromhex("00" * 32))]
2221
- async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
2222
- did_wallet_0: DIDWallet = await DIDWallet.create_new_did_wallet(
2223
- wallet_node_0.wallet_state_manager,
2224
- wallet_0,
2225
- uint64(101),
2226
- action_scope,
2227
- backups_ids=recovery_list,
2228
- num_of_backup_ids_needed=uint64(0),
2229
- )
2230
-
2231
- await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
2232
- await full_node_api.wait_for_wallets_synced(wallet_nodes=[wallet_node_0])
2233
-
2234
- await time_out_assert(15, did_wallet_0.get_confirmed_balance, 101)
2235
- await time_out_assert(15, did_wallet_0.get_unconfirmed_balance, 101)
2236
- await time_out_assert(15, did_wallet_0.get_pending_change_balance, 0)
2237
-
2238
- await full_node_api.farm_blocks_to_wallet(1, wallet_0)
2239
-
2240
- #######################
2241
- all_node_0_wallets = await wallet_node_0.wallet_state_manager.user_store.get_all_wallet_info_entries()
2242
- all_node_1_wallets = await wallet_node_1.wallet_state_manager.user_store.get_all_wallet_info_entries()
2243
- assert len(all_node_0_wallets) == len(all_node_1_wallets)
2244
-
2245
- # Note that the inner program we expect is different than the on-chain inner.
2246
- # This means that we have more work to do in the checks for the two different spend cases of
2247
- # the DID wallet Singleton
2248
- # assert (
2249
- # json.loads(all_node_0_wallets[1].data)["current_inner"]
2250
- # == json.loads(all_node_1_wallets[1].data)["current_inner"]
2251
- # )
2252
-
2253
-
2254
1152
  # TODO: See Issue CHIA-1544
2255
1153
  # This test should be ported to WalletTestFramework once we can replace keys in the wallet node
2256
1154
  @pytest.mark.parametrize(
@@ -2273,8 +1171,6 @@ async def test_did_resync(
2273
1171
  fee = uint64(0)
2274
1172
  wallet_api_1 = WalletRpcApi(wallet_node_1)
2275
1173
  wallet_api_2 = WalletRpcApi(wallet_node_2)
2276
- async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
2277
- ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
2278
1174
  if trusted:
2279
1175
  wallet_node_1.config["trusted_peers"] = {full_node_server.node_id.hex(): full_node_server.node_id.hex()}
2280
1176
  wallet_node_2.config["trusted_peers"] = {full_node_server.node_id.hex(): full_node_server.node_id.hex()}
@@ -2292,8 +1188,6 @@ async def test_did_resync(
2292
1188
  wallet,
2293
1189
  uint64(101),
2294
1190
  action_scope,
2295
- [bytes32(ph)],
2296
- uint64(1),
2297
1191
  {"Twitter": "Test", "GitHub": "测试"},
2298
1192
  fee=fee,
2299
1193
  )
@@ -2306,7 +1200,7 @@ async def test_did_resync(
2306
1200
  async with wallet2.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
2307
1201
  new_puzhash = await action_scope.get_puzzle_hash(wallet2.wallet_state_manager)
2308
1202
  async with did_wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
2309
- await did_wallet_1.transfer_did(new_puzhash, fee, True, action_scope=action_scope)
1203
+ await did_wallet_1.transfer_did(new_puzhash, fee, action_scope=action_scope)
2310
1204
  await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
2311
1205
  await full_node_api.wait_for_wallets_synced(wallet_nodes=[wallet_node_1, wallet_node_2])
2312
1206
  # Check if the DID wallet is created in the wallet2
@@ -2354,12 +1248,8 @@ async def test_did_resync(
2354
1248
  ],
2355
1249
  indirect=True,
2356
1250
  )
2357
- @pytest.mark.parametrize(
2358
- "use_alternate_recovery",
2359
- [True, False],
2360
- )
2361
1251
  @pytest.mark.anyio
2362
- async def test_did_coin_records(wallet_environments: WalletTestFramework, use_alternate_recovery: bool) -> None:
1252
+ async def test_did_coin_records(wallet_environments: WalletTestFramework) -> None:
2363
1253
  # Setup
2364
1254
  wallet_node = wallet_environments.environments[0].node
2365
1255
  wallet = wallet_environments.environments[0].xch_wallet
@@ -2371,7 +1261,6 @@ async def test_did_coin_records(wallet_environments: WalletTestFramework, use_al
2371
1261
  wallet,
2372
1262
  uint64(1),
2373
1263
  action_scope,
2374
- use_alternate_recovery=use_alternate_recovery,
2375
1264
  )
2376
1265
 
2377
1266
  await wallet_environments.process_pending_states(
@@ -2395,7 +1284,7 @@ async def test_did_coin_records(wallet_environments: WalletTestFramework, use_al
2395
1284
  wallet_environments.tx_config, push=True
2396
1285
  ) as action_scope:
2397
1286
  await did_wallet.transfer_did(
2398
- await action_scope.get_puzzle_hash(did_wallet.wallet_state_manager), uint64(0), True, action_scope
1287
+ await action_scope.get_puzzle_hash(did_wallet.wallet_state_manager), uint64(0), action_scope
2399
1288
  )
2400
1289
  await wallet_environments.process_pending_states(
2401
1290
  [