chia-blockchain 2.5.6rc2__py3-none-any.whl → 2.5.7__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 (370) 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 +252 -77
  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 +9 -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 -33
  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 +15 -16
  275. chia/full_node/mempool_manager.py +73 -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 +52 -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/streamable.py +38 -8
  339. chia/util/virtual_project_analysis.py +1 -1
  340. chia/wallet/cat_wallet/cat_outer_puzzle.py +7 -4
  341. chia/wallet/cat_wallet/cat_wallet.py +13 -7
  342. chia/wallet/cat_wallet/r_cat_wallet.py +4 -1
  343. chia/wallet/conditions.py +1 -3
  344. chia/wallet/did_wallet/did_wallet.py +27 -332
  345. chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
  346. chia/wallet/nft_wallet/nft_wallet.py +9 -7
  347. chia/wallet/puzzle_drivers.py +7 -8
  348. chia/{server → wallet}/start_wallet.py +1 -1
  349. chia/wallet/trade_manager.py +12 -9
  350. chia/wallet/transaction_record.py +14 -51
  351. chia/wallet/util/clvm_streamable.py +28 -41
  352. chia/wallet/util/merkle_utils.py +2 -2
  353. chia/wallet/util/tx_config.py +3 -6
  354. chia/wallet/vc_wallet/cr_cat_wallet.py +12 -6
  355. chia/wallet/vc_wallet/vc_wallet.py +13 -15
  356. chia/wallet/wallet.py +5 -3
  357. chia/wallet/wallet_node.py +25 -30
  358. chia/wallet/wallet_request_types.py +538 -101
  359. chia/wallet/wallet_rpc_api.py +398 -570
  360. chia/wallet/wallet_rpc_client.py +144 -332
  361. chia/wallet/wallet_service.py +8 -0
  362. chia/wallet/wallet_state_manager.py +53 -42
  363. chia/wallet/wallet_transaction_store.py +13 -5
  364. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.dist-info}/METADATA +31 -31
  365. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.dist-info}/RECORD +368 -240
  366. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.dist-info}/WHEEL +1 -1
  367. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.dist-info}/entry_points.txt +8 -7
  368. chia/full_node/mempool_check_conditions.py +0 -102
  369. chia/server/aliases.py +0 -35
  370. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.dist-info/licenses}/LICENSE +0 -0
@@ -1,21 +1,21 @@
1
1
  from __future__ import annotations
2
2
 
3
- import sys
4
3
  from dataclasses import dataclass, field
5
- from typing import Any, Optional, final
4
+ from typing import Any, BinaryIO, Optional, final
6
5
 
7
6
  from chia_rs import Coin, G1Element, G2Element, PrivateKey
8
7
  from chia_rs.sized_bytes import bytes32
9
- from chia_rs.sized_ints import uint16, uint32, uint64
10
- from typing_extensions import Self, dataclass_transform
8
+ from chia_rs.sized_ints import uint8, uint16, uint32, uint64
9
+ from typing_extensions import Self
11
10
 
12
11
  from chia.data_layer.data_layer_wallet import Mirror
13
12
  from chia.data_layer.singleton_record import SingletonRecord
14
13
  from chia.pools.pool_wallet_info import PoolWalletInfo
15
14
  from chia.types.blockchain_format.program import Program
15
+ from chia.types.coin_record import CoinRecord
16
16
  from chia.util.byte_types import hexstr_to_bytes
17
17
  from chia.util.streamable import Streamable, streamable
18
- from chia.wallet.conditions import Condition, ConditionValidTimes
18
+ from chia.wallet.conditions import Condition, ConditionValidTimes, conditions_to_json_dicts
19
19
  from chia.wallet.nft_wallet.nft_info import NFTInfo
20
20
  from chia.wallet.notification_store import Notification
21
21
  from chia.wallet.signer_protocol import (
@@ -28,20 +28,17 @@ from chia.wallet.signer_protocol import (
28
28
  from chia.wallet.trade_record import TradeRecord
29
29
  from chia.wallet.trading.offer import Offer
30
30
  from chia.wallet.transaction_record import TransactionRecord
31
+ from chia.wallet.transaction_sorting import SortKey
31
32
  from chia.wallet.util.clvm_streamable import json_deserialize_with_clvm_streamable
32
- from chia.wallet.util.tx_config import TXConfig
33
+ from chia.wallet.util.puzzle_decorator_type import PuzzleDecoratorType
34
+ from chia.wallet.util.query_filter import TransactionTypeFilter
35
+ from chia.wallet.util.tx_config import CoinSelectionConfig, CoinSelectionConfigLoader, TXConfig
33
36
  from chia.wallet.vc_wallet.vc_store import VCProofs, VCRecord
37
+ from chia.wallet.wallet_info import WalletInfo
38
+ from chia.wallet.wallet_node import Balance
34
39
  from chia.wallet.wallet_spend_bundle import WalletSpendBundle
35
40
 
36
41
 
37
- @dataclass_transform(frozen_default=True, kw_only_default=True)
38
- def kw_only_dataclass(cls: type[Any]) -> type[Any]:
39
- if sys.version_info >= (3, 10):
40
- return dataclass(frozen=True, kw_only=True)(cls)
41
- else:
42
- return dataclass(frozen=True)(cls) # pragma: no cover
43
-
44
-
45
42
  def default_raise() -> Any: # pragma: no cover
46
43
  raise RuntimeError("This should be impossible to hit and is just for < 3.10 compatibility")
47
44
 
@@ -119,6 +116,7 @@ class GenerateMnemonicResponse(Streamable):
119
116
  @dataclass(frozen=True)
120
117
  class AddKey(Streamable):
121
118
  mnemonic: list[str]
119
+ label: Optional[str] = None
122
120
 
123
121
 
124
122
  @streamable
@@ -198,6 +196,143 @@ class GetTimestampForHeightResponse(Streamable):
198
196
  timestamp: uint64
199
197
 
200
198
 
199
+ @streamable
200
+ @dataclass(frozen=True)
201
+ class GetWallets(Streamable):
202
+ type: Optional[uint16] = None
203
+ include_data: bool = True
204
+
205
+
206
+ # utility for GetWalletsResponse
207
+ @streamable
208
+ @dataclass(frozen=True)
209
+ class WalletInfoResponse(WalletInfo):
210
+ authorized_providers: list[bytes32] = field(default_factory=list)
211
+ flags_needed: list[str] = field(default_factory=list)
212
+
213
+
214
+ @streamable
215
+ @dataclass(frozen=True)
216
+ class GetWalletsResponse(Streamable):
217
+ wallets: list[WalletInfoResponse]
218
+ fingerprint: Optional[uint32] = None
219
+
220
+
221
+ @streamable
222
+ @dataclass(frozen=True)
223
+ class GetWalletBalance(Streamable):
224
+ wallet_id: uint32
225
+
226
+
227
+ @streamable
228
+ @dataclass(frozen=True)
229
+ class GetWalletBalances(Streamable):
230
+ wallet_ids: Optional[list[uint32]] = None
231
+
232
+
233
+ # utility for GetWalletBalanceResponse(s)
234
+ @streamable
235
+ @dataclass(frozen=True, kw_only=True)
236
+ class BalanceResponse(Balance):
237
+ wallet_id: uint32 = field(default_factory=default_raise)
238
+ wallet_type: uint8 = field(default_factory=default_raise)
239
+ fingerprint: Optional[uint32] = None
240
+ asset_id: Optional[bytes32] = None
241
+ pending_approval_balance: Optional[uint64] = None
242
+
243
+
244
+ @streamable
245
+ @dataclass(frozen=True)
246
+ class GetWalletBalanceResponse(Streamable):
247
+ wallet_balance: BalanceResponse
248
+
249
+
250
+ @streamable
251
+ @dataclass(frozen=True)
252
+ class GetWalletBalancesResponse(Streamable):
253
+ wallet_balances: dict[uint32, BalanceResponse]
254
+
255
+
256
+ @streamable
257
+ @dataclass(frozen=True)
258
+ class GetTransaction(Streamable):
259
+ transaction_id: bytes32
260
+
261
+
262
+ @streamable
263
+ @dataclass(frozen=True)
264
+ class GetTransactionResponse(Streamable):
265
+ transaction: TransactionRecord
266
+ transaction_id: bytes32
267
+
268
+
269
+ @streamable
270
+ @dataclass(frozen=True)
271
+ class GetTransactions(Streamable):
272
+ wallet_id: uint32
273
+ start: Optional[uint16] = None
274
+ end: Optional[uint16] = None
275
+ sort_key: Optional[str] = None
276
+ reverse: bool = False
277
+ to_address: Optional[str] = None
278
+ type_filter: Optional[TransactionTypeFilter] = None
279
+ confirmed: Optional[bool] = None
280
+
281
+ def __post_init__(self) -> None:
282
+ if self.sort_key is not None and not hasattr(SortKey, self.sort_key):
283
+ raise ValueError(f"There is no known sort {self.sort_key}")
284
+
285
+
286
+ # utility for GetTransactionsResponse
287
+ # this class cannot be a dataclass because if it is, streamable will assume it knows how to serialize it
288
+ # TODO: We should put some thought into deprecating this and separating the metadata more reasonably
289
+ class TransactionRecordMetadata:
290
+ content: dict[str, Any]
291
+ coin_id: bytes32
292
+ spent: bool
293
+
294
+ def __init__(self, content: dict[str, Any], coin_id: bytes32, spent: bool) -> None:
295
+ self.content = content
296
+ self.coin_id = coin_id
297
+ self.spent = spent
298
+
299
+ def __bytes__(self) -> bytes:
300
+ raise NotImplementedError("Should not be serializing this object as bytes, it's only for RPC")
301
+
302
+ @classmethod
303
+ def parse(cls, f: BinaryIO) -> TransactionRecordMetadata:
304
+ raise NotImplementedError("Should not be deserializing this object from a stream, it's only for RPC")
305
+
306
+ def to_json_dict(self) -> dict[str, Any]:
307
+ return {
308
+ **self.content,
309
+ "coin_id": "0x" + self.coin_id.hex(),
310
+ "spent": self.spent,
311
+ }
312
+
313
+ @classmethod
314
+ def from_json_dict(cls, json_dict: dict[str, Any]) -> TransactionRecordMetadata:
315
+ return TransactionRecordMetadata(
316
+ coin_id=bytes32.from_hexstr(json_dict["coin_id"]),
317
+ spent=json_dict["spent"],
318
+ content={k: v for k, v in json_dict.items() if k not in {"coin_id", "spent"}},
319
+ )
320
+
321
+
322
+ # utility for GetTransactionsResponse
323
+ @streamable
324
+ @dataclass(frozen=True)
325
+ class TransactionRecordWithMetadata(TransactionRecord):
326
+ metadata: Optional[TransactionRecordMetadata] = None
327
+
328
+
329
+ @streamable
330
+ @dataclass(frozen=True)
331
+ class GetTransactionsResponse(Streamable):
332
+ transactions: list[TransactionRecordWithMetadata]
333
+ wallet_id: uint32
334
+
335
+
201
336
  @streamable
202
337
  @dataclass(frozen=True)
203
338
  class GetNotifications(Streamable):
@@ -212,6 +347,12 @@ class GetNotificationsResponse(Streamable):
212
347
  notifications: list[Notification]
213
348
 
214
349
 
350
+ @streamable
351
+ @dataclass(frozen=True)
352
+ class DeleteNotifications(Streamable):
353
+ ids: Optional[list[bytes32]] = None
354
+
355
+
215
356
  @streamable
216
357
  @dataclass(frozen=True)
217
358
  class VerifySignature(Streamable):
@@ -231,43 +372,198 @@ class VerifySignatureResponse(Streamable):
231
372
 
232
373
  @streamable
233
374
  @dataclass(frozen=True)
234
- class GetTransactionMemo(Streamable):
235
- transaction_id: bytes32
375
+ class SignMessageByAddress(Streamable):
376
+ address: str
377
+ message: str
378
+ is_hex: bool = False
379
+ safe_mode: bool = True
236
380
 
237
381
 
238
- # utility type for GetTransactionMemoResponse
239
382
  @streamable
240
383
  @dataclass(frozen=True)
241
- class CoinIDWithMemos(Streamable):
242
- coin_id: bytes32
243
- memos: list[bytes]
384
+ class SignMessageByAddressResponse(Streamable):
385
+ pubkey: G1Element
386
+ signature: G2Element
387
+ signing_mode: str
244
388
 
245
389
 
246
390
  @streamable
247
391
  @dataclass(frozen=True)
248
- class GetTransactionMemoResponse(Streamable):
392
+ class SignMessageByID(Streamable):
393
+ id: str
394
+ message: str
395
+ is_hex: bool = False
396
+ safe_mode: bool = True
397
+
398
+
399
+ @streamable
400
+ @dataclass(frozen=True)
401
+ class SignMessageByIDResponse(Streamable):
402
+ pubkey: G1Element
403
+ signature: G2Element
404
+ latest_coin_id: bytes32
405
+ signing_mode: str
406
+
407
+
408
+ @streamable
409
+ @dataclass(frozen=True)
410
+ class GetTransactionMemo(Streamable):
249
411
  transaction_id: bytes32
250
- coins_with_memos: list[CoinIDWithMemos]
412
+
413
+
414
+ @streamable
415
+ @dataclass(frozen=True)
416
+ class GetTransactionMemoResponse(Streamable):
417
+ transaction_memos: dict[bytes32, dict[bytes32, list[bytes]]]
418
+
419
+ @property
420
+ def memo_dict(self) -> dict[bytes32, list[bytes]]:
421
+ return next(iter(self.transaction_memos.values()))
251
422
 
252
423
  # TODO: deprecate the kinda silly format of this RPC and delete these functions
253
424
  def to_json_dict(self) -> dict[str, Any]:
254
- return {
255
- self.transaction_id.hex(): {
256
- cwm.coin_id.hex(): [memo.hex() for memo in cwm.memos] for cwm in self.coins_with_memos
257
- }
258
- }
425
+ # This is semantically guaranteed but mypy can't know that
426
+ return super().to_json_dict()["transaction_memos"] # type: ignore[no-any-return]
259
427
 
260
428
  @classmethod
261
429
  def from_json_dict(cls, json_dict: dict[str, Any]) -> GetTransactionMemoResponse:
430
+ return super().from_json_dict(
431
+ # We have to filter out the "success" key here
432
+ # because it doesn't match our `transaction_memos` hint
433
+ #
434
+ # We do this by only allowing the keys with "0x"
435
+ # which we can assume exist because we serialize all responses
436
+ {"transaction_memos": {key: value for key, value in json_dict.items() if key.startswith("0x")}}
437
+ )
438
+
439
+
440
+ @streamable
441
+ @dataclass(frozen=True)
442
+ class GetTransactionCount(Streamable):
443
+ wallet_id: uint32
444
+ confirmed: Optional[bool] = None
445
+ type_filter: Optional[TransactionTypeFilter] = None
446
+
447
+
448
+ @streamable
449
+ @dataclass(frozen=True)
450
+ class GetTransactionCountResponse(Streamable):
451
+ wallet_id: uint32
452
+ count: uint16
453
+
454
+
455
+ @streamable
456
+ @dataclass(frozen=True)
457
+ class GetNextAddress(Streamable):
458
+ wallet_id: uint32
459
+ new_address: bool = False
460
+ save_derivations: bool = True
461
+
462
+
463
+ @streamable
464
+ @dataclass(frozen=True)
465
+ class GetNextAddressResponse(Streamable):
466
+ wallet_id: uint32
467
+ address: str
468
+
469
+
470
+ @streamable
471
+ @dataclass(frozen=True)
472
+ class DeleteUnconfirmedTransactions(Streamable):
473
+ wallet_id: uint32
474
+
475
+
476
+ @streamable
477
+ @dataclass(frozen=True)
478
+ class SelectCoins(CoinSelectionConfigLoader):
479
+ wallet_id: uint32 = field(default_factory=default_raise)
480
+ amount: uint64 = field(default_factory=default_raise)
481
+ exclude_coins: Optional[list[Coin]] = None # for backwards compatibility
482
+
483
+ def __post_init__(self) -> None:
484
+ if self.excluded_coin_ids is not None and self.exclude_coins is not None:
485
+ raise ValueError(
486
+ "Cannot specify both excluded_coin_ids/excluded_coins and exclude_coins (the latter is deprecated)"
487
+ )
488
+ super().__post_init__()
489
+
490
+ @classmethod
491
+ def from_coin_selection_config(
492
+ cls, wallet_id: uint32, amount: uint64, coin_selection_config: CoinSelectionConfig
493
+ ) -> Self:
262
494
  return cls(
263
- bytes32.from_hexstr(next(iter(json_dict.keys()))),
264
- [
265
- CoinIDWithMemos(bytes32.from_hexstr(coin_id), [bytes32.from_hexstr(memo) for memo in memos])
266
- for coin_id, memos in next(iter(json_dict.values())).items()
267
- ],
495
+ wallet_id=wallet_id,
496
+ amount=amount,
497
+ min_coin_amount=coin_selection_config.min_coin_amount,
498
+ max_coin_amount=coin_selection_config.max_coin_amount,
499
+ excluded_coin_amounts=coin_selection_config.excluded_coin_amounts,
500
+ excluded_coin_ids=coin_selection_config.excluded_coin_ids,
501
+ )
502
+
503
+
504
+ @streamable
505
+ @dataclass(frozen=True)
506
+ class SelectCoinsResponse(Streamable):
507
+ coins: list[Coin]
508
+
509
+
510
+ @streamable
511
+ @dataclass(frozen=True)
512
+ class GetSpendableCoins(CoinSelectionConfigLoader):
513
+ wallet_id: uint32 = field(default_factory=default_raise)
514
+
515
+ @classmethod
516
+ def from_coin_selection_config(cls, wallet_id: uint32, coin_selection_config: CoinSelectionConfig) -> Self:
517
+ return cls(
518
+ wallet_id=wallet_id,
519
+ min_coin_amount=coin_selection_config.min_coin_amount,
520
+ max_coin_amount=coin_selection_config.max_coin_amount,
521
+ excluded_coin_amounts=coin_selection_config.excluded_coin_amounts,
522
+ excluded_coin_ids=coin_selection_config.excluded_coin_ids,
268
523
  )
269
524
 
270
525
 
526
+ @streamable
527
+ @dataclass(frozen=True)
528
+ class GetSpendableCoinsResponse(Streamable):
529
+ confirmed_records: list[CoinRecord]
530
+ unconfirmed_removals: list[CoinRecord]
531
+ unconfirmed_additions: list[Coin]
532
+
533
+
534
+ @streamable
535
+ @dataclass(frozen=True)
536
+ class GetCoinRecordsByNames(Streamable):
537
+ names: list[bytes32]
538
+ start_height: Optional[uint32] = None
539
+ end_height: Optional[uint32] = None
540
+ include_spent_coins: bool = True
541
+
542
+
543
+ @streamable
544
+ @dataclass(frozen=True)
545
+ class GetCoinRecordsByNamesResponse(Streamable):
546
+ coin_records: list[CoinRecord]
547
+
548
+
549
+ @streamable
550
+ @dataclass(frozen=True)
551
+ class GetCurrentDerivationIndexResponse(Streamable):
552
+ index: Optional[uint32]
553
+
554
+
555
+ @streamable
556
+ @dataclass(frozen=True)
557
+ class ExtendDerivationIndex(Streamable):
558
+ index: uint32
559
+
560
+
561
+ @streamable
562
+ @dataclass(frozen=True)
563
+ class ExtendDerivationIndexResponse(Streamable):
564
+ index: Optional[uint32]
565
+
566
+
271
567
  @streamable
272
568
  @dataclass(frozen=True)
273
569
  class GetOffersCountResponse(Streamable):
@@ -290,6 +586,86 @@ class GetCATListResponse(Streamable):
290
586
  cat_list: list[DefaultCAT]
291
587
 
292
588
 
589
+ @streamable
590
+ @dataclass(frozen=True)
591
+ class CATSetName(Streamable):
592
+ wallet_id: uint32
593
+ name: str
594
+
595
+
596
+ @streamable
597
+ @dataclass(frozen=True)
598
+ class CATSetNameResponse(Streamable):
599
+ wallet_id: uint32
600
+
601
+
602
+ @streamable
603
+ @dataclass(frozen=True)
604
+ class CATGetName(Streamable):
605
+ wallet_id: uint32
606
+
607
+
608
+ @streamable
609
+ @dataclass(frozen=True)
610
+ class CATGetNameResponse(Streamable):
611
+ wallet_id: uint32
612
+ name: str
613
+
614
+
615
+ @streamable
616
+ @dataclass(frozen=True)
617
+ class StrayCAT(Streamable):
618
+ asset_id: bytes32
619
+ name: str
620
+ first_seen_height: uint32
621
+ sender_puzzle_hash: bytes32
622
+
623
+
624
+ @streamable
625
+ @dataclass(frozen=True)
626
+ class GetStrayCATsResponse(Streamable):
627
+ stray_cats: list[StrayCAT]
628
+
629
+
630
+ @streamable
631
+ @dataclass(frozen=True)
632
+ class CATGetAssetID(Streamable):
633
+ wallet_id: uint32
634
+
635
+
636
+ @streamable
637
+ @dataclass(frozen=True)
638
+ class CATGetAssetIDResponse(Streamable):
639
+ wallet_id: uint32
640
+ asset_id: bytes32
641
+
642
+
643
+ @streamable
644
+ @dataclass(frozen=True)
645
+ class CATAssetIDToName(Streamable):
646
+ asset_id: bytes32
647
+
648
+
649
+ @streamable
650
+ @dataclass(frozen=True)
651
+ class CATAssetIDToNameResponse(Streamable):
652
+ wallet_id: Optional[uint32]
653
+ name: Optional[str]
654
+
655
+
656
+ @streamable
657
+ @dataclass(frozen=True)
658
+ class CheckOfferValidity(Streamable):
659
+ offer: str
660
+
661
+
662
+ @streamable
663
+ @dataclass(frozen=True)
664
+ class CheckOfferValidityResponse(Streamable):
665
+ valid: bool
666
+ id: bytes32
667
+
668
+
293
669
  @streamable
294
670
  @dataclass(frozen=True)
295
671
  class DIDSetWalletName(Streamable):
@@ -366,23 +742,6 @@ class DIDGetPubkeyResponse(Streamable):
366
742
  pubkey: G1Element
367
743
 
368
744
 
369
- @streamable
370
- @dataclass(frozen=True)
371
- class DIDGetRecoveryInfo(Streamable):
372
- wallet_id: uint32
373
-
374
-
375
- @streamable
376
- @dataclass(frozen=True)
377
- class DIDGetRecoveryInfoResponse(Streamable):
378
- wallet_id: uint32
379
- my_did: str
380
- coin_name: bytes32
381
- newpuzhash: Optional[bytes32]
382
- pubkey: Optional[G1Element]
383
- backup_dids: list[bytes32]
384
-
385
-
386
745
  @streamable
387
746
  @dataclass(frozen=True)
388
747
  class DIDGetCurrentCoinInfo(Streamable):
@@ -426,20 +785,6 @@ class DIDGetDIDResponse(Streamable):
426
785
  coin_id: Optional[bytes32] = None
427
786
 
428
787
 
429
- @streamable
430
- @dataclass(frozen=True)
431
- class DIDGetRecoveryList(Streamable):
432
- wallet_id: uint32
433
-
434
-
435
- @streamable
436
- @dataclass(frozen=True)
437
- class DIDGetRecoveryListResponse(Streamable):
438
- wallet_id: uint32
439
- recovery_list: list[str]
440
- num_required: uint16
441
-
442
-
443
788
  @streamable
444
789
  @dataclass(frozen=True)
445
790
  class DIDGetMetadata(Streamable):
@@ -882,7 +1227,7 @@ class ExecuteSigningInstructionsResponse(Streamable):
882
1227
  # field(default_factory=default_raise)
883
1228
  # (this is for < 3.10 compatibility)
884
1229
  @streamable
885
- @kw_only_dataclass
1230
+ @dataclass(frozen=True, kw_only=True)
886
1231
  class TransactionEndpointRequest(Streamable):
887
1232
  fee: uint64 = uint64(0)
888
1233
  push: Optional[bool] = None
@@ -902,7 +1247,7 @@ class TransactionEndpointRequest(Streamable):
902
1247
  return {
903
1248
  **tx_config.to_json_dict(),
904
1249
  **timelock_info.to_json_dict(),
905
- "extra_conditions": [condition.to_json_dict() for condition in extra_conditions],
1250
+ "extra_conditions": conditions_to_json_dicts(extra_conditions),
906
1251
  **self.to_json_dict(_avoid_ban=True),
907
1252
  }
908
1253
 
@@ -914,6 +1259,67 @@ class TransactionEndpointResponse(Streamable):
914
1259
  transactions: list[TransactionRecord]
915
1260
 
916
1261
 
1262
+ # utility for SendTransaction
1263
+ @streamable
1264
+ @dataclass(frozen=True)
1265
+ class ClawbackPuzzleDecoratorOverride(Streamable):
1266
+ decorator: str
1267
+ clawback_timelock: uint64
1268
+
1269
+ def __post_init__(self) -> None:
1270
+ if self.decorator != PuzzleDecoratorType.CLAWBACK.name:
1271
+ raise ValueError("Invalid clawback puzzle decorator override specified")
1272
+ super().__post_init__()
1273
+
1274
+
1275
+ @streamable
1276
+ @dataclass(frozen=True)
1277
+ class SendTransaction(TransactionEndpointRequest):
1278
+ wallet_id: uint32 = field(default_factory=default_raise)
1279
+ amount: uint64 = field(default_factory=default_raise)
1280
+ address: str = field(default_factory=default_raise)
1281
+ memos: list[str] = field(default_factory=list)
1282
+ # Technically this value was meant to support many types here
1283
+ # However, only one is supported right now and there are no plans to extend
1284
+ # So, as a slight hack, we'll specify that only Clawback is supported
1285
+ puzzle_decorator: Optional[list[ClawbackPuzzleDecoratorOverride]] = None
1286
+
1287
+
1288
+ @streamable
1289
+ @dataclass(frozen=True)
1290
+ class SendTransactionResponse(TransactionEndpointResponse):
1291
+ transaction: TransactionRecord
1292
+ transaction_id: bytes32
1293
+
1294
+
1295
+ @streamable
1296
+ @dataclass(frozen=True)
1297
+ class SpendClawbackCoins(TransactionEndpointRequest):
1298
+ coin_ids: list[bytes32] = field(default_factory=default_raise)
1299
+ batch_size: Optional[uint16] = None
1300
+ force: bool = False
1301
+
1302
+
1303
+ @streamable
1304
+ @dataclass(frozen=True)
1305
+ class SpendClawbackCoinsResponse(TransactionEndpointResponse):
1306
+ transaction_ids: list[bytes32]
1307
+
1308
+
1309
+ @streamable
1310
+ @dataclass(frozen=True)
1311
+ class SendNotification(TransactionEndpointRequest):
1312
+ target: bytes32 = field(default_factory=default_raise)
1313
+ message: bytes = field(default_factory=default_raise)
1314
+ amount: uint64 = uint64(0)
1315
+
1316
+
1317
+ @streamable
1318
+ @dataclass(frozen=True)
1319
+ class SendNotificationResponse(TransactionEndpointResponse):
1320
+ tx: TransactionRecord
1321
+
1322
+
917
1323
  @streamable
918
1324
  @dataclass(frozen=True)
919
1325
  class PushTransactions(TransactionEndpointRequest):
@@ -928,10 +1334,7 @@ class PushTransactions(TransactionEndpointRequest):
928
1334
  if isinstance(transaction_hexstr_or_json, str):
929
1335
  tx = TransactionRecord.from_bytes(hexstr_to_bytes(transaction_hexstr_or_json))
930
1336
  else:
931
- try:
932
- tx = TransactionRecord.from_json_dict_convenience(transaction_hexstr_or_json)
933
- except AttributeError:
934
- tx = TransactionRecord.from_json_dict(transaction_hexstr_or_json)
1337
+ tx = TransactionRecord.from_json_dict(transaction_hexstr_or_json)
935
1338
  transactions.append(tx)
936
1339
 
937
1340
  json_dict["transactions"] = [tx.to_json_dict() for tx in transactions]
@@ -945,7 +1348,7 @@ class PushTransactionsResponse(TransactionEndpointResponse):
945
1348
 
946
1349
 
947
1350
  @streamable
948
- @kw_only_dataclass
1351
+ @dataclass(frozen=True, kw_only=True)
949
1352
  class SplitCoins(TransactionEndpointRequest):
950
1353
  wallet_id: uint32 = field(default_factory=default_raise)
951
1354
  number_of_coins: uint16 = field(default_factory=default_raise)
@@ -960,7 +1363,7 @@ class SplitCoinsResponse(TransactionEndpointResponse):
960
1363
 
961
1364
 
962
1365
  @streamable
963
- @kw_only_dataclass
1366
+ @dataclass(frozen=True, kw_only=True)
964
1367
  class CombineCoins(TransactionEndpointRequest):
965
1368
  wallet_id: uint32 = field(default_factory=default_raise)
966
1369
  number_of_coins: uint16 = uint16(500)
@@ -976,22 +1379,63 @@ class CombineCoinsResponse(TransactionEndpointResponse):
976
1379
  pass
977
1380
 
978
1381
 
1382
+ # utility for CATSpend
1383
+ # unfortunate that we can't use CreateCoin but the memos are taken as strings not bytes
1384
+ @streamable
1385
+ @dataclass(frozen=True)
1386
+ class Addition(Streamable):
1387
+ amount: uint64
1388
+ puzzle_hash: bytes32
1389
+ memos: Optional[list[str]] = None
1390
+
1391
+
979
1392
  @streamable
980
- @kw_only_dataclass
981
- class DIDUpdateRecoveryIDs(TransactionEndpointRequest):
1393
+ @dataclass(frozen=True, kw_only=True)
1394
+ class CATSpend(TransactionEndpointRequest):
982
1395
  wallet_id: uint32 = field(default_factory=default_raise)
983
- new_list: list[str] = field(default_factory=default_raise)
984
- num_verifications_required: Optional[uint64] = None
1396
+ additions: Optional[list[Addition]] = None
1397
+ amount: Optional[uint64] = None
1398
+ inner_address: Optional[str] = None
1399
+ memos: Optional[list[str]] = None
1400
+ coins: Optional[list[Coin]] = None
1401
+ extra_delta: Optional[str] = None # str to support negative ints :(
1402
+ tail_reveal: Optional[bytes] = None
1403
+ tail_solution: Optional[bytes] = None
1404
+
1405
+ def __post_init__(self) -> None:
1406
+ if (
1407
+ self.additions is not None
1408
+ and (self.amount is not None or self.inner_address is not None or self.memos is not None)
1409
+ ) or (self.additions is None and self.amount is None and self.inner_address is None and self.memos is None):
1410
+ raise ValueError('Must specify "additions" or "amount"+"inner_address"+"memos", but not both.')
1411
+ elif self.additions is None and None in {self.amount, self.inner_address}:
1412
+ raise ValueError('Must specify "amount" and "inner_address" together.')
1413
+ super().__post_init__()
1414
+
1415
+ @property
1416
+ def cat_discrepancy(self) -> Optional[tuple[int, Program, Program]]:
1417
+ if self.extra_delta is None and self.tail_reveal is None and self.tail_solution is None:
1418
+ return None
1419
+ elif None in {self.extra_delta, self.tail_reveal, self.tail_solution}:
1420
+ raise ValueError('Must specify "extra_delta", "tail_reveal" and "tail_solution" together.')
1421
+ else:
1422
+ # Curious that mypy doesn't see the elif and know that none of these are None
1423
+ return (
1424
+ int(self.extra_delta), # type: ignore[arg-type]
1425
+ Program.from_bytes(self.tail_reveal), # type: ignore[arg-type]
1426
+ Program.from_bytes(self.tail_solution), # type: ignore[arg-type]
1427
+ )
985
1428
 
986
1429
 
987
1430
  @streamable
988
1431
  @dataclass(frozen=True)
989
- class DIDUpdateRecoveryIDsResponse(TransactionEndpointResponse):
990
- pass
1432
+ class CATSpendResponse(TransactionEndpointResponse):
1433
+ transaction: TransactionRecord
1434
+ transaction_id: bytes32
991
1435
 
992
1436
 
993
1437
  @streamable
994
- @kw_only_dataclass
1438
+ @dataclass(frozen=True, kw_only=True)
995
1439
  class DIDMessageSpend(TransactionEndpointRequest):
996
1440
  wallet_id: uint32 = field(default_factory=default_raise)
997
1441
  coin_announcements: list[bytes] = field(default_factory=list)
@@ -1005,7 +1449,7 @@ class DIDMessageSpendResponse(TransactionEndpointResponse):
1005
1449
 
1006
1450
 
1007
1451
  @streamable
1008
- @kw_only_dataclass
1452
+ @dataclass(frozen=True, kw_only=True)
1009
1453
  class DIDUpdateMetadata(TransactionEndpointRequest):
1010
1454
  wallet_id: uint32 = field(default_factory=default_raise)
1011
1455
  metadata: dict[str, str] = field(default_factory=dict)
@@ -1019,12 +1463,17 @@ class DIDUpdateMetadataResponse(TransactionEndpointResponse):
1019
1463
 
1020
1464
 
1021
1465
  @streamable
1022
- @kw_only_dataclass
1466
+ @dataclass(frozen=True, kw_only=True)
1023
1467
  class DIDTransferDID(TransactionEndpointRequest):
1024
1468
  wallet_id: uint32 = field(default_factory=default_raise)
1025
1469
  inner_address: str = field(default_factory=default_raise)
1026
1470
  with_recovery_info: bool = True
1027
1471
 
1472
+ def __post_init__(self) -> None:
1473
+ if self.with_recovery_info is False:
1474
+ raise ValueError("Recovery related options are no longer supported. `with_recovery` must always be true.")
1475
+ return super().__post_init__()
1476
+
1028
1477
 
1029
1478
  @streamable
1030
1479
  @dataclass(frozen=True)
@@ -1034,7 +1483,7 @@ class DIDTransferDIDResponse(TransactionEndpointResponse):
1034
1483
 
1035
1484
 
1036
1485
  @streamable
1037
- @kw_only_dataclass
1486
+ @dataclass(frozen=True, kw_only=True)
1038
1487
  class NFTMintNFTRequest(TransactionEndpointRequest):
1039
1488
  wallet_id: uint32 = field(default_factory=default_raise)
1040
1489
  royalty_address: Optional[str] = field(default_factory=default_raise)
@@ -1060,7 +1509,7 @@ class NFTMintNFTResponse(TransactionEndpointResponse):
1060
1509
 
1061
1510
 
1062
1511
  @streamable
1063
- @kw_only_dataclass
1512
+ @dataclass(frozen=True, kw_only=True)
1064
1513
  class NFTSetNFTDID(TransactionEndpointRequest):
1065
1514
  wallet_id: uint32 = field(default_factory=default_raise)
1066
1515
  nft_coin_id: bytes32 = field(default_factory=default_raise)
@@ -1075,7 +1524,7 @@ class NFTSetNFTDIDResponse(TransactionEndpointResponse):
1075
1524
 
1076
1525
 
1077
1526
  @streamable
1078
- @kw_only_dataclass
1527
+ @dataclass(frozen=True, kw_only=True)
1079
1528
  class NFTSetDIDBulk(TransactionEndpointRequest):
1080
1529
  nft_coin_list: list[NFTCoin] = field(default_factory=default_raise)
1081
1530
  did_id: Optional[str] = None
@@ -1090,7 +1539,7 @@ class NFTSetDIDBulkResponse(TransactionEndpointResponse):
1090
1539
 
1091
1540
 
1092
1541
  @streamable
1093
- @kw_only_dataclass
1542
+ @dataclass(frozen=True, kw_only=True)
1094
1543
  class NFTTransferBulk(TransactionEndpointRequest):
1095
1544
  nft_coin_list: list[NFTCoin] = field(default_factory=default_raise)
1096
1545
  target_address: str = field(default_factory=default_raise)
@@ -1105,7 +1554,7 @@ class NFTTransferBulkResponse(TransactionEndpointResponse):
1105
1554
 
1106
1555
 
1107
1556
  @streamable
1108
- @kw_only_dataclass
1557
+ @dataclass(frozen=True, kw_only=True)
1109
1558
  class CreateNewDL(TransactionEndpointRequest):
1110
1559
  root: bytes32 = field(default_factory=default_raise)
1111
1560
 
@@ -1117,7 +1566,7 @@ class CreateNewDLResponse(TransactionEndpointResponse):
1117
1566
 
1118
1567
 
1119
1568
  @streamable
1120
- @kw_only_dataclass
1569
+ @dataclass(frozen=True, kw_only=True)
1121
1570
  class DLUpdateRoot(TransactionEndpointRequest):
1122
1571
  launcher_id: bytes32 = field(default_factory=default_raise)
1123
1572
  new_root: bytes32 = field(default_factory=default_raise)
@@ -1161,7 +1610,7 @@ class DLUpdateMultipleUpdates(Streamable):
1161
1610
 
1162
1611
 
1163
1612
  @streamable
1164
- @kw_only_dataclass
1613
+ @dataclass(frozen=True, kw_only=True)
1165
1614
  class DLUpdateMultiple(TransactionEndpointRequest):
1166
1615
  updates: DLUpdateMultipleUpdates = field(default_factory=default_raise)
1167
1616
 
@@ -1177,7 +1626,7 @@ class DLUpdateMultipleResponse(TransactionEndpointResponse):
1177
1626
 
1178
1627
 
1179
1628
  @streamable
1180
- @kw_only_dataclass
1629
+ @dataclass(frozen=True, kw_only=True)
1181
1630
  class DLNewMirror(TransactionEndpointRequest):
1182
1631
  launcher_id: bytes32 = field(default_factory=default_raise)
1183
1632
  amount: uint64 = field(default_factory=default_raise)
@@ -1191,7 +1640,7 @@ class DLNewMirrorResponse(TransactionEndpointResponse):
1191
1640
 
1192
1641
 
1193
1642
  @streamable
1194
- @kw_only_dataclass
1643
+ @dataclass(frozen=True, kw_only=True)
1195
1644
  class DLDeleteMirror(TransactionEndpointRequest):
1196
1645
  coin_id: bytes32 = field(default_factory=default_raise)
1197
1646
 
@@ -1361,11 +1810,6 @@ class VCRevokeResponse(TransactionEndpointResponse):
1361
1810
 
1362
1811
  # TODO: The section below needs corresponding request types
1363
1812
  # TODO: The section below should be added to the API (currently only for client)
1364
- @streamable
1365
- @dataclass(frozen=True)
1366
- class SendTransactionResponse(TransactionEndpointResponse):
1367
- transaction: TransactionRecord
1368
- transaction_id: bytes32
1369
1813
 
1370
1814
 
1371
1815
  @streamable
@@ -1382,13 +1826,6 @@ class CreateSignedTransactionsResponse(TransactionEndpointResponse):
1382
1826
  signed_tx: TransactionRecord
1383
1827
 
1384
1828
 
1385
- @streamable
1386
- @dataclass(frozen=True)
1387
- class CATSpendResponse(TransactionEndpointResponse):
1388
- transaction: TransactionRecord
1389
- transaction_id: bytes32
1390
-
1391
-
1392
1829
  @streamable
1393
1830
  @dataclass(frozen=True)
1394
1831
  class _OfferEndpointResponse(TransactionEndpointResponse):