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
@@ -15,6 +15,7 @@ from pathlib import Path
15
15
  from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union, cast, final
16
16
 
17
17
  import aiohttp
18
+ from chia_rs.datalayer import ProofOfInclusion, ProofOfInclusionLayer
18
19
  from chia_rs.sized_bytes import bytes32
19
20
  from chia_rs.sized_ints import uint32, uint64
20
21
 
@@ -32,10 +33,9 @@ from chia.data_layer.data_layer_util import (
32
33
  PluginRemote,
33
34
  PluginStatus,
34
35
  Proof,
35
- ProofOfInclusion,
36
- ProofOfInclusionLayer,
37
36
  Root,
38
37
  ServerInfo,
38
+ Side,
39
39
  Status,
40
40
  StoreProofs,
41
41
  Subscription,
@@ -43,18 +43,16 @@ from chia.data_layer.data_layer_util import (
43
43
  TerminalNode,
44
44
  Unspecified,
45
45
  UnsubscribeData,
46
+ calculate_sibling_sides_integer,
47
+ collect_sibling_hashes,
48
+ get_delta_filename_path,
49
+ get_full_tree_filename_path,
46
50
  leaf_hash,
47
51
  unspecified,
48
52
  )
49
53
  from chia.data_layer.data_layer_wallet import DataLayerWallet, Mirror, verify_offer
50
54
  from chia.data_layer.data_store import DataStore
51
- from chia.data_layer.download_data import (
52
- delete_full_file_if_exists,
53
- get_delta_filename_path,
54
- get_full_tree_filename_path,
55
- insert_from_delta_file,
56
- write_files_for_root,
57
- )
55
+ from chia.data_layer.download_data import delete_full_file_if_exists, insert_from_delta_file, write_files_for_root
58
56
  from chia.data_layer.singleton_record import SingletonRecord
59
57
  from chia.protocols.outbound_message import NodeType
60
58
  from chia.rpc.rpc_server import StateChangedProtocol, default_get_connections
@@ -120,6 +118,8 @@ class DataLayer:
120
118
  _protocol_check: ClassVar[RpcServiceProtocol] = cast("DataLayer", None)
121
119
 
122
120
  db_path: Path
121
+ merkle_blobs_path: Path
122
+ key_value_blobs_path: Path
123
123
  config: dict[str, Any]
124
124
  root_path: Path
125
125
  log: logging.Logger
@@ -189,6 +189,12 @@ class DataLayer:
189
189
  server_files_replaced = server_files_path_from_config(config, root_path)
190
190
 
191
191
  db_path_replaced: str = config["database_path"].replace("CHALLENGE", config["selected_network"])
192
+ merkle_blobs_path_replaced: str = config.get(
193
+ "merkle_blobs_path", "data_layer/db/merkle_blobs_CHALLENGE"
194
+ ).replace("CHALLENGE", config["selected_network"])
195
+ key_value_blobs_path_replaced: str = config.get(
196
+ "key_value_blobs_path", "data_layer/db/key_value_blobs_CHALLENGE"
197
+ ).replace("CHALLENGE", config["selected_network"])
192
198
 
193
199
  self = cls(
194
200
  config=config,
@@ -196,6 +202,8 @@ class DataLayer:
196
202
  wallet_rpc_init=wallet_rpc_init,
197
203
  log=logging.getLogger(name if name is None else __name__),
198
204
  db_path=path_from_root(root_path, db_path_replaced),
205
+ merkle_blobs_path=path_from_root(root_path, merkle_blobs_path_replaced),
206
+ key_value_blobs_path=path_from_root(root_path, key_value_blobs_path_replaced),
199
207
  server_files_location=server_files_replaced,
200
208
  downloaders=downloaders,
201
209
  uploaders=uploaders,
@@ -209,6 +217,8 @@ class DataLayer:
209
217
  )
210
218
 
211
219
  self.db_path.parent.mkdir(parents=True, exist_ok=True)
220
+ self.merkle_blobs_path.mkdir(parents=True, exist_ok=True)
221
+ self.key_value_blobs_path.mkdir(parents=True, exist_ok=True)
212
222
  self.server_files_location.mkdir(parents=True, exist_ok=True)
213
223
 
214
224
  return self
@@ -219,11 +229,18 @@ class DataLayer:
219
229
  if self.config.get("log_sqlite_cmds", False):
220
230
  sql_log_path = path_from_root(self.root_path, "log/data_sql.log")
221
231
  self.log.info(f"logging SQL commands to {sql_log_path}")
222
-
223
- async with DataStore.managed(database=self.db_path, sql_log_path=sql_log_path) as self._data_store:
232
+ cache_capacity = self.config.get("merkle_blobs_cache_size", 1)
233
+
234
+ async with DataStore.managed(
235
+ database=self.db_path,
236
+ merkle_blobs_path=self.merkle_blobs_path,
237
+ key_value_blobs_path=self.key_value_blobs_path,
238
+ sql_log_path=sql_log_path,
239
+ cache_capacity=cache_capacity,
240
+ ) as self._data_store:
224
241
  self._wallet_rpc = await self.wallet_rpc_init
225
242
 
226
- await self._data_store.migrate_db()
243
+ await self._data_store.migrate_db(self.server_files_location)
227
244
  self.periodically_manage_data_task = create_referenced_task(self.periodically_manage_data())
228
245
  try:
229
246
  yield
@@ -278,7 +295,6 @@ class DataLayer:
278
295
  ) -> Optional[TransactionRecord]:
279
296
  status = Status.PENDING if submit_on_chain else Status.PENDING_BATCH
280
297
  await self.batch_insert(store_id=store_id, changelist=changelist, status=status)
281
- await self.data_store.clean_node_table()
282
298
 
283
299
  if submit_on_chain:
284
300
  return await self.publish_update(store_id=store_id, fee=fee)
@@ -312,8 +328,6 @@ class DataLayer:
312
328
  status = Status.PENDING if submit_on_chain else Status.PENDING_BATCH
313
329
  await self.batch_insert(store_id=store_id, changelist=changelist, status=status)
314
330
 
315
- await self.data_store.clean_node_table()
316
-
317
331
  if submit_on_chain:
318
332
  updates: list[LauncherRootPair] = []
319
333
  for store_id in store_ids:
@@ -570,7 +584,6 @@ class DataLayer:
570
584
  and pending_root.status == Status.PENDING
571
585
  ):
572
586
  await self.data_store.change_root_status(pending_root, Status.COMMITTED)
573
- await self.data_store.build_ancestor_table_for_latest_root(store_id=store_id)
574
587
  await self.data_store.clear_pending_roots(store_id=store_id)
575
588
 
576
589
  async def fetch_and_validate(self, store_id: bytes32) -> None:
@@ -877,8 +890,6 @@ class DataLayer:
877
890
  # stop tracking first, then unsubscribe from the data store
878
891
  await self.wallet_rpc.dl_stop_tracking(DLStopTracking(store_id))
879
892
  await self.data_store.unsubscribe(store_id)
880
- if not retain_data:
881
- await self.data_store.delete_store_data(store_id)
882
893
 
883
894
  self.log.info(f"Unsubscribed to {store_id}")
884
895
  for file_path in paths:
@@ -1116,7 +1127,7 @@ class DataLayer:
1116
1127
  node_hash=proof_of_inclusion.node_hash,
1117
1128
  layers=tuple(
1118
1129
  Layer(
1119
- other_hash_side=layer.other_hash_side,
1130
+ other_hash_side=Side(layer.other_hash_side),
1120
1131
  other_hash=layer.other_hash,
1121
1132
  combined_hash=layer.combined_hash,
1122
1133
  )
@@ -1183,7 +1194,6 @@ class DataLayer:
1183
1194
 
1184
1195
  verify_offer(maker=offer.maker, taker=offer.taker, summary=summary)
1185
1196
 
1186
- await self.data_store.clean_node_table()
1187
1197
  return offer
1188
1198
 
1189
1199
  async def take_offer(
@@ -1216,12 +1226,12 @@ class DataLayer:
1216
1226
  for layer in proof.layers
1217
1227
  ]
1218
1228
  proof_of_inclusion = ProofOfInclusion(node_hash=proof.node_hash, layers=layers)
1219
- sibling_sides_integer = proof_of_inclusion.sibling_sides_integer()
1229
+ sibling_sides_integer = calculate_sibling_sides_integer(proof_of_inclusion)
1220
1230
  proofs_of_inclusion.append(
1221
1231
  (
1222
1232
  root.hex(),
1223
1233
  str(sibling_sides_integer),
1224
- ["0x" + sibling_hash.hex() for sibling_hash in proof_of_inclusion.sibling_hashes()],
1234
+ ["0x" + sibling_hash.hex() for sibling_hash in collect_sibling_hashes(proof_of_inclusion)],
1225
1235
  )
1226
1236
  )
1227
1237
 
@@ -1242,8 +1252,6 @@ class DataLayer:
1242
1252
  },
1243
1253
  }
1244
1254
 
1245
- await self.data_store.clean_node_table()
1246
-
1247
1255
  # Excluding wallet from transaction since failures in the wallet may occur
1248
1256
  # after the transaction is submitted to the chain. If we roll back data we
1249
1257
  # may lose published data.
@@ -38,6 +38,11 @@ class KeyNotFoundError(Exception):
38
38
  super().__init__(f"Key not found: {key.hex()}")
39
39
 
40
40
 
41
+ class MerkleBlobNotFoundError(Exception):
42
+ def __init__(self, root_hash: bytes32) -> None:
43
+ super().__init__(f"Cannot find merkle blob for root hash {root_hash.hex()}")
44
+
45
+
41
46
  class OfferIntegrityError(Exception):
42
47
  pass
43
48
 
@@ -609,7 +609,7 @@ class DataLayerRpcApi:
609
609
  for key in request.keys:
610
610
  node = await self.service.data_store.get_node_by_key(store_id=request.store_id, key=key)
611
611
  pi = await self.service.data_store.get_proof_of_inclusion_by_hash(
612
- store_id=request.store_id, node_hash=node.hash, use_optimized=True
612
+ store_id=request.store_id, node_hash=node.hash
613
613
  )
614
614
 
615
615
  proof = HashOnlyProof.from_key_value(
@@ -0,0 +1,8 @@
1
+ from __future__ import annotations
2
+
3
+ from chia.data_layer.data_layer import DataLayer
4
+ from chia.data_layer.data_layer_api import DataLayerAPI
5
+ from chia.data_layer.data_layer_rpc_api import DataLayerRpcApi
6
+ from chia.server.start_service import Service
7
+
8
+ DataLayerService = Service[DataLayer, DataLayerAPI, DataLayerRpcApi]
@@ -4,9 +4,11 @@ import dataclasses
4
4
  from dataclasses import dataclass, field
5
5
  from enum import Enum, IntEnum
6
6
  from hashlib import sha256
7
+ from pathlib import Path
7
8
  from typing import TYPE_CHECKING, Any, Optional, Union
8
9
 
9
10
  import aiosqlite
11
+ from chia_rs.datalayer import ProofOfInclusion, ProofOfInclusionLayer
10
12
  from chia_rs.sized_bytes import bytes32
11
13
  from chia_rs.sized_ints import uint8, uint64
12
14
  from typing_extensions import final
@@ -48,6 +50,45 @@ def key_hash(key: bytes) -> bytes32:
48
50
  return bytes32(sha256(b"\1" + key).digest())
49
51
 
50
52
 
53
+ # TODO: allow Optional[bytes32] for `node_hash` and resolve the filenames here
54
+ def get_full_tree_filename(store_id: bytes32, node_hash: bytes32, generation: int, group_by_store: bool = False) -> str:
55
+ if group_by_store:
56
+ return f"{store_id}/{node_hash}-full-{generation}-v1.0.dat"
57
+ return f"{store_id}-{node_hash}-full-{generation}-v1.0.dat"
58
+
59
+
60
+ def get_delta_filename(store_id: bytes32, node_hash: bytes32, generation: int, group_by_store: bool = False) -> str:
61
+ if group_by_store:
62
+ return f"{store_id}/{node_hash}-delta-{generation}-v1.0.dat"
63
+ return f"{store_id}-{node_hash}-delta-{generation}-v1.0.dat"
64
+
65
+
66
+ def get_full_tree_filename_path(
67
+ foldername: Path,
68
+ store_id: bytes32,
69
+ node_hash: bytes32,
70
+ generation: int,
71
+ group_by_store: bool = False,
72
+ ) -> Path:
73
+ if group_by_store:
74
+ path = foldername.joinpath(f"{store_id}")
75
+ return path.joinpath(f"{node_hash}-full-{generation}-v1.0.dat")
76
+ return foldername.joinpath(f"{store_id}-{node_hash}-full-{generation}-v1.0.dat")
77
+
78
+
79
+ def get_delta_filename_path(
80
+ foldername: Path,
81
+ store_id: bytes32,
82
+ node_hash: bytes32,
83
+ generation: int,
84
+ group_by_store: bool = False,
85
+ ) -> Path:
86
+ if group_by_store:
87
+ path = foldername.joinpath(f"{store_id}")
88
+ return path.joinpath(f"{node_hash}-delta-{generation}-v1.0.dat")
89
+ return foldername.joinpath(f"{store_id}-{node_hash}-delta-{generation}-v1.0.dat")
90
+
91
+
51
92
  @dataclasses.dataclass(frozen=True)
52
93
  class PaginationData:
53
94
  total_pages: int
@@ -94,7 +135,6 @@ async def _dot_dump(
94
135
  root_hash: bytes32,
95
136
  ) -> str:
96
137
  terminal_nodes = await data_store.get_keys_values(store_id=store_id, root_hash=root_hash)
97
- internal_nodes = await data_store.get_internal_nodes(store_id=store_id, root_hash=root_hash)
98
138
 
99
139
  n = 8
100
140
 
@@ -108,16 +148,7 @@ async def _dot_dump(
108
148
  value = terminal_node.value.hex()
109
149
  dot_nodes.append(f"""node_{hash} [shape=box, label="{hash[:n]}\\nkey: {key}\\nvalue: {value}"];""")
110
150
 
111
- for internal_node in internal_nodes:
112
- hash = internal_node.hash.hex()
113
- left = internal_node.left_hash.hex()
114
- right = internal_node.right_hash.hex()
115
- dot_nodes.append(f"""node_{hash} [label="{hash[:n]}"]""")
116
- dot_connections.append(f"""node_{hash} -> node_{left} [label="L"];""")
117
- dot_connections.append(f"""node_{hash} -> node_{right} [label="R"];""")
118
- dot_pair_boxes.append(
119
- f"node [shape = box]; {{rank = same; node_{left}->node_{right}[style=invis]; rankdir = LR}}"
120
- )
151
+ # TODO: implement for internal nodes. currently this prints only terminal nodes
121
152
 
122
153
  lines = [
123
154
  "digraph {",
@@ -130,11 +161,6 @@ async def _dot_dump(
130
161
  return "\n".join(lines)
131
162
 
132
163
 
133
- def row_to_node(row: aiosqlite.Row) -> Node:
134
- cls = node_type_to_class[row["node_type"]]
135
- return cls.from_row(row=row)
136
-
137
-
138
164
  class Status(IntEnum):
139
165
  PENDING = 1
140
166
  COMMITTED = 2
@@ -147,9 +173,9 @@ class NodeType(IntEnum):
147
173
 
148
174
 
149
175
  @final
150
- class Side(IntEnum):
151
- LEFT = 0
152
- RIGHT = 1
176
+ class Side(uint8, Enum):
177
+ LEFT = uint8(0)
178
+ RIGHT = uint8(1)
153
179
 
154
180
  def other(self) -> Side:
155
181
  if self == Side.LEFT:
@@ -208,78 +234,12 @@ class TerminalNode:
208
234
  )
209
235
 
210
236
 
211
- @final
212
- @dataclass(frozen=True)
213
- class ProofOfInclusionLayer:
214
- other_hash_side: Side
215
- other_hash: bytes32
216
- combined_hash: bytes32
217
-
218
- @classmethod
219
- def from_internal_node(
220
- cls,
221
- internal_node: InternalNode,
222
- traversal_child_hash: bytes32,
223
- ) -> ProofOfInclusionLayer:
224
- return ProofOfInclusionLayer(
225
- other_hash_side=internal_node.other_child_side(hash=traversal_child_hash),
226
- other_hash=internal_node.other_child_hash(hash=traversal_child_hash),
227
- combined_hash=internal_node.hash,
228
- )
229
-
230
- @classmethod
231
- def from_hashes(cls, primary_hash: bytes32, other_hash_side: Side, other_hash: bytes32) -> ProofOfInclusionLayer:
232
- combined_hash = calculate_internal_hash(
233
- hash=primary_hash,
234
- other_hash_side=other_hash_side,
235
- other_hash=other_hash,
236
- )
237
-
238
- return cls(other_hash_side=other_hash_side, other_hash=other_hash, combined_hash=combined_hash)
239
-
240
-
241
- other_side_to_bit = {Side.LEFT: 1, Side.RIGHT: 0}
242
-
243
-
244
- @dataclass(frozen=True)
245
- class ProofOfInclusion:
246
- node_hash: bytes32
247
- # children before parents
248
- layers: list[ProofOfInclusionLayer]
249
-
250
- @property
251
- def root_hash(self) -> bytes32:
252
- if len(self.layers) == 0:
253
- return self.node_hash
254
-
255
- return self.layers[-1].combined_hash
256
-
257
- def sibling_sides_integer(self) -> int:
258
- return sum(other_side_to_bit[layer.other_hash_side] << index for index, layer in enumerate(self.layers))
259
-
260
- def sibling_hashes(self) -> list[bytes32]:
261
- return [layer.other_hash for layer in self.layers]
262
-
263
- def as_program(self) -> Program:
264
- return Program.to([self.sibling_sides_integer(), self.sibling_hashes()])
265
-
266
- def valid(self) -> bool:
267
- existing_hash = self.node_hash
268
-
269
- for layer in self.layers:
270
- calculated_hash = calculate_internal_hash(
271
- hash=existing_hash, other_hash_side=layer.other_hash_side, other_hash=layer.other_hash
272
- )
273
-
274
- if calculated_hash != layer.combined_hash:
275
- return False
276
-
277
- existing_hash = calculated_hash
237
+ def calculate_sibling_sides_integer(proof: ProofOfInclusion) -> int:
238
+ return sum((1 << index if layer.other_hash_side == Side.LEFT else 0) for index, layer in enumerate(proof.layers))
278
239
 
279
- if existing_hash != self.root_hash:
280
- return False
281
240
 
282
- return True
241
+ def collect_sibling_hashes(proof: ProofOfInclusion) -> list[bytes32]:
242
+ return [layer.other_hash for layer in proof.layers]
283
243
 
284
244
 
285
245
  @final
@@ -6,13 +6,14 @@ import time
6
6
  from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
7
7
 
8
8
  from chia_rs import BlockRecord, CoinSpend, CoinState, G1Element, G2Element
9
+ from chia_rs.datalayer import ProofOfInclusion, ProofOfInclusionLayer
9
10
  from chia_rs.sized_bytes import bytes32
10
11
  from chia_rs.sized_ints import uint8, uint32, uint64, uint128
11
12
  from clvm.EvalError import EvalError
12
13
  from typing_extensions import Unpack, final
13
14
 
14
15
  from chia.data_layer.data_layer_errors import LauncherCoinNotFoundError, OfferIntegrityError
15
- from chia.data_layer.data_layer_util import OfferStore, ProofOfInclusion, ProofOfInclusionLayer, StoreProofs, leaf_hash
16
+ from chia.data_layer.data_layer_util import OfferStore, StoreProofs, leaf_hash
16
17
  from chia.data_layer.singleton_record import SingletonRecord
17
18
  from chia.server.ws_connection import WSChiaConnection
18
19
  from chia.types.blockchain_format.coin import Coin
@@ -536,8 +537,9 @@ class DataLayerWallet:
536
537
 
537
538
  dl_tx = TransactionRecord(
538
539
  confirmed_at_height=uint32(0),
539
- created_at_time=uint64(int(time.time())),
540
+ created_at_time=uint64(time.time()),
540
541
  to_puzzle_hash=new_puz_hash,
542
+ to_address=self.wallet_state_manager.encode_puzzle_hash(new_puz_hash),
541
543
  amount=uint64(singleton_record.lineage_proof.amount),
542
544
  fee_amount=fee,
543
545
  confirmed=False,
@@ -545,7 +547,7 @@ class DataLayerWallet:
545
547
  spend_bundle=spend_bundle,
546
548
  additions=spend_bundle.additions(),
547
549
  removals=spend_bundle.removals(),
548
- memos=list(compute_memos(spend_bundle).items()),
550
+ memos=compute_memos(spend_bundle),
549
551
  wallet_id=self.id(),
550
552
  sent_to=[],
551
553
  trade_id=None,
@@ -589,15 +591,14 @@ class DataLayerWallet:
589
591
  if coins is None or len(coins) == 0:
590
592
  if launcher_id is None:
591
593
  raise ValueError("Not enough info to know which DL coin to send")
594
+ elif len(coins) != 1:
595
+ raise ValueError("The wallet can only send one DL coin at a time")
592
596
  else:
593
- if len(coins) != 1:
594
- raise ValueError("The wallet can only send one DL coin at a time")
597
+ record = await self.wallet_state_manager.dl_store.get_singleton_record(next(iter(coins)).name())
598
+ if record is None:
599
+ raise ValueError("The specified coin is not a tracked DL")
595
600
  else:
596
- record = await self.wallet_state_manager.dl_store.get_singleton_record(next(iter(coins)).name())
597
- if record is None:
598
- raise ValueError("The specified coin is not a tracked DL")
599
- else:
600
- launcher_id = record.launcher_id
601
+ launcher_id = record.launcher_id
601
602
 
602
603
  if len(amounts) != 1 or len(puzzle_hashes) != 1:
603
604
  raise ValueError("The wallet can only send one DL coin to one place at a time")
@@ -731,8 +732,9 @@ class DataLayerWallet:
731
732
  interface.side_effects.transactions.append(
732
733
  TransactionRecord(
733
734
  confirmed_at_height=uint32(0),
734
- created_at_time=uint64(int(time.time())),
735
+ created_at_time=uint64(time.time()),
735
736
  to_puzzle_hash=new_puzhash,
737
+ to_address=self.wallet_state_manager.encode_puzzle_hash(new_puzhash),
736
738
  amount=uint64(mirror_coin.amount),
737
739
  fee_amount=fee,
738
740
  confirmed=False,
@@ -740,7 +742,7 @@ class DataLayerWallet:
740
742
  spend_bundle=mirror_bundle,
741
743
  additions=mirror_bundle.additions(),
742
744
  removals=mirror_bundle.removals(),
743
- memos=list(compute_memos(mirror_bundle).items()),
745
+ memos=compute_memos(mirror_bundle),
744
746
  wallet_id=self.id(), # This is being called before the wallet is created so we're using a ID of 0
745
747
  sent_to=[],
746
748
  trade_id=None,
@@ -1088,12 +1090,13 @@ class DataLayerWallet:
1088
1090
  # Create all of the new solutions
1089
1091
  new_spends: list[CoinSpend] = []
1090
1092
  for spend in offer.coin_spends():
1093
+ spend_to_add = spend
1091
1094
  solution = Program.from_serialized(spend.solution)
1092
1095
  if match_dl_singleton(spend.puzzle_reveal)[0]:
1093
1096
  try:
1094
1097
  graftroot: Program = solution.at("rrffrf")
1095
1098
  except EvalError:
1096
- new_spends.append(spend)
1099
+ new_spends.append(spend_to_add)
1097
1100
  continue
1098
1101
  mod, curried_args_prg = graftroot.uncurry()
1099
1102
  if mod == GRAFTROOT_DL_OFFERS:
@@ -1136,9 +1139,9 @@ class DataLayerWallet:
1136
1139
  ]
1137
1140
  )
1138
1141
  )
1139
- new_spend: CoinSpend = spend.replace(solution=new_solution.to_serialized())
1140
- spend = new_spend
1141
- new_spends.append(spend)
1142
+ spend_to_add = spend.replace(solution=new_solution.to_serialized())
1143
+
1144
+ new_spends.append(spend_to_add)
1142
1145
 
1143
1146
  return Offer({}, WalletSpendBundle(new_spends, offer.aggregated_signature()), offer.driver_dict)
1144
1147
 
@@ -1224,7 +1227,7 @@ def verify_offer(
1224
1227
  raise OfferIntegrityError("maker: invalid proof of inclusion found")
1225
1228
 
1226
1229
  # TODO: verify each kv hash to the proof's node hash
1227
- roots = {proof.root_hash for proof in proofs}
1230
+ roots = {proof.root_hash() for proof in proofs}
1228
1231
  if len(roots) > 1:
1229
1232
  raise OfferIntegrityError("maker: multiple roots referenced for a single store id")
1230
1233
  if len(roots) < 1: