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
@@ -8,49 +8,21 @@ from pathlib import Path
8
8
  from typing import Optional
9
9
 
10
10
  import aiohttp
11
+ from chia_rs.datalayer import DeltaReader
11
12
  from chia_rs.sized_bytes import bytes32
12
13
  from typing_extensions import Literal
13
14
 
14
- from chia.data_layer.data_layer_util import NodeType, PluginRemote, Root, SerializedNode, ServerInfo, Status
15
+ from chia.data_layer.data_layer_util import (
16
+ PluginRemote,
17
+ Root,
18
+ ServerInfo,
19
+ get_delta_filename,
20
+ get_delta_filename_path,
21
+ get_full_tree_filename,
22
+ get_full_tree_filename_path,
23
+ )
15
24
  from chia.data_layer.data_store import DataStore
16
-
17
-
18
- def get_full_tree_filename(store_id: bytes32, node_hash: bytes32, generation: int, group_by_store: bool = False) -> str:
19
- if group_by_store:
20
- return f"{store_id}/{node_hash}-full-{generation}-v1.0.dat"
21
- return f"{store_id}-{node_hash}-full-{generation}-v1.0.dat"
22
-
23
-
24
- def get_delta_filename(store_id: bytes32, node_hash: bytes32, generation: int, group_by_store: bool = False) -> str:
25
- if group_by_store:
26
- return f"{store_id}/{node_hash}-delta-{generation}-v1.0.dat"
27
- return f"{store_id}-{node_hash}-delta-{generation}-v1.0.dat"
28
-
29
-
30
- def get_full_tree_filename_path(
31
- foldername: Path,
32
- store_id: bytes32,
33
- node_hash: bytes32,
34
- generation: int,
35
- group_by_store: bool = False,
36
- ) -> Path:
37
- if group_by_store:
38
- path = foldername.joinpath(f"{store_id}")
39
- return path.joinpath(f"{node_hash}-full-{generation}-v1.0.dat")
40
- return foldername.joinpath(f"{store_id}-{node_hash}-full-{generation}-v1.0.dat")
41
-
42
-
43
- def get_delta_filename_path(
44
- foldername: Path,
45
- store_id: bytes32,
46
- node_hash: bytes32,
47
- generation: int,
48
- group_by_store: bool = False,
49
- ) -> Path:
50
- if group_by_store:
51
- path = foldername.joinpath(f"{store_id}")
52
- return path.joinpath(f"{node_hash}-delta-{generation}-v1.0.dat")
53
- return foldername.joinpath(f"{store_id}-{node_hash}-delta-{generation}-v1.0.dat")
25
+ from chia.util.log_exceptions import log_exceptions
54
26
 
55
27
 
56
28
  def is_filename_valid(filename: str, group_by_store: bool = False) -> bool:
@@ -87,45 +59,6 @@ def is_filename_valid(filename: str, group_by_store: bool = False) -> bool:
87
59
  return reformatted == filename
88
60
 
89
61
 
90
- async def insert_into_data_store_from_file(
91
- data_store: DataStore,
92
- store_id: bytes32,
93
- root_hash: Optional[bytes32],
94
- filename: Path,
95
- ) -> int:
96
- num_inserted = 0
97
- with open(filename, "rb") as reader:
98
- while True:
99
- chunk = b""
100
- while len(chunk) < 4:
101
- size_to_read = 4 - len(chunk)
102
- cur_chunk = reader.read(size_to_read)
103
- if cur_chunk is None or cur_chunk == b"":
104
- if size_to_read < 4:
105
- raise Exception("Incomplete read of length.")
106
- break
107
- chunk += cur_chunk
108
- if chunk == b"":
109
- break
110
-
111
- size = int.from_bytes(chunk, byteorder="big")
112
- serialize_nodes_bytes = b""
113
- while len(serialize_nodes_bytes) < size:
114
- size_to_read = size - len(serialize_nodes_bytes)
115
- cur_chunk = reader.read(size_to_read)
116
- if cur_chunk is None or cur_chunk == b"":
117
- raise Exception("Incomplete read of blob.")
118
- serialize_nodes_bytes += cur_chunk
119
- serialized_node = SerializedNode.from_bytes(serialize_nodes_bytes)
120
-
121
- node_type = NodeType.TERMINAL if serialized_node.is_terminal else NodeType.INTERNAL
122
- await data_store.insert_node(node_type, serialized_node.value1, serialized_node.value2)
123
- num_inserted += 1
124
-
125
- await data_store.insert_root_with_ancestor_table(store_id=store_id, node_hash=root_hash, status=Status.COMMITTED)
126
- return num_inserted
127
-
128
-
129
62
  @dataclass
130
63
  class WriteFilesResult:
131
64
  result: bool
@@ -165,14 +98,8 @@ async def write_files_for_root(
165
98
  pass
166
99
 
167
100
  try:
168
- last_seen_generation = await data_store.get_last_tree_root_by_hash(
169
- store_id, root.node_hash, max_generation=root.generation
170
- )
171
- if last_seen_generation is None:
172
- with open(filename_diff_tree, mode) as writer:
173
- await data_store.write_tree_to_file(root, node_hash, store_id, True, writer)
174
- else:
175
- open(filename_diff_tree, mode).close()
101
+ with open(filename_diff_tree, mode) as writer:
102
+ await data_store.write_tree_to_file(root, node_hash, store_id, True, writer)
176
103
  written = True
177
104
  except FileExistsError:
178
105
  pass
@@ -250,6 +177,8 @@ async def insert_from_delta_file(
250
177
  if group_files_by_store:
251
178
  client_foldername.joinpath(f"{store_id}").mkdir(parents=True, exist_ok=True)
252
179
 
180
+ delta_reader: Optional[DeltaReader] = None
181
+
253
182
  for root_hash in root_hashes:
254
183
  timestamp = int(time.time())
255
184
  existing_generation += 1
@@ -281,33 +210,34 @@ async def insert_from_delta_file(
281
210
 
282
211
  log.info(f"Successfully downloaded delta file {target_filename_path.name}.")
283
212
  try:
284
- filename_full_tree = get_full_tree_filename_path(
285
- client_foldername,
286
- store_id,
287
- root_hash,
288
- existing_generation,
289
- group_files_by_store,
290
- )
291
- num_inserted = await insert_into_data_store_from_file(
292
- data_store,
293
- store_id,
294
- None if root_hash == bytes32.zeros else root_hash,
295
- target_filename_path,
296
- )
297
- log.info(
298
- f"Successfully inserted hash {root_hash} from delta file. "
299
- f"Generation: {existing_generation}. Store id: {store_id}. Nodes inserted: {num_inserted}."
300
- )
301
-
302
- if target_generation - existing_generation <= maximum_full_file_count - 1:
303
- root = await data_store.get_tree_root(store_id=store_id)
304
- with open(filename_full_tree, "wb") as writer:
305
- await data_store.write_tree_to_file(root, root_hash, store_id, False, writer)
306
- log.info(f"Successfully written full tree filename {filename_full_tree}.")
307
- else:
308
- log.info(f"Skipping full file generation for {existing_generation}")
309
-
310
- await data_store.received_correct_file(store_id, server_info)
213
+ with log_exceptions(log=log, message="exception while inserting from delta file"):
214
+ filename_full_tree = get_full_tree_filename_path(
215
+ client_foldername,
216
+ store_id,
217
+ root_hash,
218
+ existing_generation,
219
+ group_files_by_store,
220
+ )
221
+ delta_reader = await data_store.insert_into_data_store_from_file(
222
+ store_id,
223
+ None if root_hash == bytes32.zeros else root_hash,
224
+ target_filename_path,
225
+ delta_reader=delta_reader,
226
+ )
227
+ log.info(
228
+ f"Successfully inserted hash {root_hash} from delta file. "
229
+ f"Generation: {existing_generation}. Store id: {store_id}."
230
+ )
231
+
232
+ if target_generation - existing_generation <= maximum_full_file_count - 1:
233
+ root = await data_store.get_tree_root(store_id=store_id)
234
+ with open(filename_full_tree, "wb") as writer:
235
+ await data_store.write_tree_to_file(root, root_hash, store_id, False, writer)
236
+ log.info(f"Successfully written full tree filename {filename_full_tree}.")
237
+ else:
238
+ log.info(f"Skipping full file generation for {existing_generation}")
239
+
240
+ await data_store.received_correct_file(store_id, server_info)
311
241
  except Exception:
312
242
  try:
313
243
  target_filename_path.unlink()
@@ -326,7 +256,6 @@ async def insert_from_delta_file(
326
256
  if not filename_exists:
327
257
  # Don't penalize this server if we didn't download the file from it.
328
258
  await data_store.server_misses_file(store_id, server_info, timestamp)
329
- await data_store.rollback_to_generation(store_id, existing_generation - 1)
330
259
  return False
331
260
 
332
261
  return True
@@ -386,4 +315,4 @@ async def http_download(
386
315
  new_percentage = f"{progress_byte / size:.0%}"
387
316
  if new_percentage != progress_percentage:
388
317
  progress_percentage = new_percentage
389
- log.debug(f"Downloading delta file {filename}. {progress_percentage} of {size} bytes.")
318
+ log.info(f"Downloading delta file {filename}. {progress_percentage} of {size} bytes.")
@@ -12,10 +12,10 @@ from chia.apis import ApiProtocolRegistry
12
12
  from chia.data_layer.data_layer import DataLayer
13
13
  from chia.data_layer.data_layer_api import DataLayerAPI
14
14
  from chia.data_layer.data_layer_rpc_api import DataLayerRpcApi
15
+ from chia.data_layer.data_layer_service import DataLayerService
15
16
  from chia.data_layer.data_layer_util import PluginRemote
16
17
  from chia.data_layer.util.plugin import load_plugin_configurations
17
18
  from chia.protocols.outbound_message import NodeType
18
- from chia.server.aliases import DataLayerService, WalletService
19
19
  from chia.server.signal_handlers import SignalHandlers
20
20
  from chia.server.start_service import RpcInfo, Service, async_run
21
21
  from chia.ssl.create_ssl import create_all_ssl
@@ -24,6 +24,7 @@ from chia.util.config import load_config, load_config_cli
24
24
  from chia.util.default_root import resolve_root_path
25
25
  from chia.util.task_timing import maybe_manage_task_instrumentation
26
26
  from chia.wallet.wallet_rpc_client import WalletRpcClient
27
+ from chia.wallet.wallet_service import WalletService
27
28
 
28
29
  # See: https://bugs.python.org/issue29288
29
30
  "".encode("idna")
@@ -6,15 +6,14 @@ import sys
6
6
  import tempfile
7
7
  import time
8
8
  from pathlib import Path
9
- from typing import Optional
10
9
 
11
10
  from chia_rs.sized_bytes import bytes32
12
11
 
13
- from chia.data_layer.data_layer_util import Side, TerminalNode, leaf_hash
12
+ from chia.data_layer.data_layer_util import Side, Status, leaf_hash
14
13
  from chia.data_layer.data_store import DataStore
15
14
 
16
15
 
17
- async def generate_datastore(num_nodes: int, slow_mode: bool) -> None:
16
+ async def generate_datastore(num_nodes: int) -> None:
18
17
  with tempfile.TemporaryDirectory() as temp_directory:
19
18
  temp_directory_path = Path(temp_directory)
20
19
  db_path = temp_directory_path.joinpath("dl_benchmark.sqlite")
@@ -23,9 +22,14 @@ async def generate_datastore(num_nodes: int, slow_mode: bool) -> None:
23
22
  if os.path.exists(db_path):
24
23
  os.remove(db_path)
25
24
 
26
- async with DataStore.managed(database=db_path) as data_store:
25
+ start_time = time.monotonic()
26
+ async with DataStore.managed(
27
+ database=db_path,
28
+ merkle_blobs_path=temp_directory_path.joinpath("merkle-blobs"),
29
+ key_value_blobs_path=temp_directory_path.joinpath("key-value-blobs"),
30
+ ) as data_store:
27
31
  store_id = bytes32(b"0" * 32)
28
- await data_store.create_tree(store_id)
32
+ await data_store.create_tree(store_id, status=Status.COMMITTED)
29
33
 
30
34
  insert_time = 0.0
31
35
  insert_count = 0
@@ -37,58 +41,40 @@ async def generate_datastore(num_nodes: int, slow_mode: bool) -> None:
37
41
  for i in range(num_nodes):
38
42
  key = i.to_bytes(4, byteorder="big")
39
43
  value = (2 * i).to_bytes(4, byteorder="big")
40
- seed = leaf_hash(key=key, value=value)
41
- reference_node_hash: Optional[bytes32] = await data_store.get_terminal_node_for_seed(store_id, seed)
42
- side: Optional[Side] = data_store.get_side_for_seed(seed)
44
+ seed = leaf_hash(key, value)
45
+ node = await data_store.get_terminal_node_for_seed(seed, store_id)
43
46
 
44
- if i == 0:
45
- reference_node_hash = None
46
- side = None
47
47
  if i % 3 == 0:
48
48
  t1 = time.time()
49
- if not slow_mode:
50
- await data_store.insert(
51
- key=key,
52
- value=value,
53
- store_id=store_id,
54
- reference_node_hash=reference_node_hash,
55
- side=side,
56
- )
57
- else:
58
- await data_store.insert(
59
- key=key,
60
- value=value,
61
- store_id=store_id,
62
- reference_node_hash=reference_node_hash,
63
- side=side,
64
- use_optimized=False,
65
- )
49
+ await data_store.autoinsert(
50
+ key=key,
51
+ value=value,
52
+ store_id=store_id,
53
+ status=Status.COMMITTED,
54
+ )
66
55
  t2 = time.time()
67
- insert_time += t2 - t1
68
- insert_count += 1
56
+ autoinsert_count += 1
69
57
  elif i % 3 == 1:
58
+ assert node is not None
59
+ reference_node_hash = node.hash
60
+ side_seed = bytes(seed)[0]
61
+ side = Side.LEFT if side_seed < 128 else Side.RIGHT
70
62
  t1 = time.time()
71
- if not slow_mode:
72
- await data_store.autoinsert(key=key, value=value, store_id=store_id)
73
- else:
74
- await data_store.autoinsert(
75
- key=key,
76
- value=value,
77
- store_id=store_id,
78
- use_optimized=False,
79
- )
63
+ await data_store.insert(
64
+ key=key,
65
+ value=value,
66
+ store_id=store_id,
67
+ reference_node_hash=reference_node_hash,
68
+ side=side,
69
+ status=Status.COMMITTED,
70
+ )
80
71
  t2 = time.time()
81
- autoinsert_time += t2 - t1
82
- autoinsert_count += 1
72
+ insert_time += t2 - t1
73
+ insert_count += 1
83
74
  else:
84
75
  t1 = time.time()
85
- assert reference_node_hash is not None
86
- node = await data_store.get_node(reference_node_hash)
87
- assert isinstance(node, TerminalNode)
88
- if not slow_mode:
89
- await data_store.delete(key=node.key, store_id=store_id)
90
- else:
91
- await data_store.delete(key=node.key, store_id=store_id, use_optimized=False)
76
+ assert node is not None
77
+ await data_store.delete(key=node.key, store_id=store_id, status=Status.COMMITTED)
92
78
  t2 = time.time()
93
79
  delete_time += t2 - t1
94
80
  delete_count += 1
@@ -96,13 +82,12 @@ async def generate_datastore(num_nodes: int, slow_mode: bool) -> None:
96
82
  print(f"Average insert time: {insert_time / insert_count}")
97
83
  print(f"Average autoinsert time: {autoinsert_time / autoinsert_count}")
98
84
  print(f"Average delete time: {delete_time / delete_count}")
99
- print(f"Total time for {num_nodes} operations: {insert_time + autoinsert_time + delete_time}")
85
+ print(f"Total time for {num_nodes} operations: {insert_time + delete_time + autoinsert_time}")
100
86
  root = await data_store.get_tree_root(store_id=store_id)
101
87
  print(f"Root hash: {root.node_hash}")
88
+ finish_time = time.monotonic()
89
+ print(f"Total runtime: {finish_time - start_time}")
102
90
 
103
91
 
104
92
  if __name__ == "__main__":
105
- slow_mode = False
106
- if len(sys.argv) > 2 and sys.argv[2] == "slow":
107
- slow_mode = True
108
- asyncio.run(generate_datastore(int(sys.argv[1]), slow_mode))
93
+ asyncio.run(generate_datastore(int(sys.argv[1])))
chia/farmer/farmer.py CHANGED
@@ -143,6 +143,9 @@ class Farmer:
143
143
  # Quality string to plot identifier and challenge_hash, for use with harvester.RequestSignatures
144
144
  self.quality_str_to_identifiers: dict[bytes32, tuple[str, bytes32, bytes32, bytes32]] = {}
145
145
 
146
+ # Track pending solver requests, keyed by partial proof
147
+ self.pending_solver_requests: dict[bytes, dict[str, Any]] = {}
148
+
146
149
  # number of responses to each signage point
147
150
  self.number_of_responses: dict[bytes32, int] = {}
148
151
 
chia/farmer/farmer_api.py CHANGED
@@ -6,7 +6,7 @@ import time
6
6
  from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union, cast
7
7
 
8
8
  import aiohttp
9
- from chia_rs import AugSchemeMPL, G2Element, PlotSize, PoolTarget, PrivateKey
9
+ from chia_rs import AugSchemeMPL, G2Element, PlotSize, PoolTarget, PrivateKey, ProofOfSpace
10
10
  from chia_rs.sized_bytes import bytes32
11
11
  from chia_rs.sized_ints import uint8, uint16, uint32, uint64
12
12
  from packaging.version import Version
@@ -18,6 +18,7 @@ from chia.harvester.harvester_api import HarvesterAPI
18
18
  from chia.protocols import farmer_protocol, harvester_protocol
19
19
  from chia.protocols.farmer_protocol import DeclareProofOfSpace, SignedValues
20
20
  from chia.protocols.harvester_protocol import (
21
+ PartialProofsData,
21
22
  PlotSyncDone,
22
23
  PlotSyncPathList,
23
24
  PlotSyncPlotList,
@@ -34,6 +35,7 @@ from chia.protocols.pool_protocol import (
34
35
  get_current_authentication_token,
35
36
  )
36
37
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
38
+ from chia.protocols.solver_protocol import SolverInfo, SolverResponse
37
39
  from chia.server.api_protocol import ApiMetadata
38
40
  from chia.server.server import ssl_context_for_root
39
41
  from chia.server.ws_connection import WSChiaConnection
@@ -75,7 +77,7 @@ class FarmerAPI:
75
77
  """
76
78
  if new_proof_of_space.sp_hash not in self.farmer.number_of_responses:
77
79
  self.farmer.number_of_responses[new_proof_of_space.sp_hash] = 0
78
- self.farmer.cache_add_time[new_proof_of_space.sp_hash] = uint64(int(time.time()))
80
+ self.farmer.cache_add_time[new_proof_of_space.sp_hash] = uint64(time.time())
79
81
 
80
82
  max_pos_per_sp = 5
81
83
 
@@ -172,14 +174,14 @@ class FarmerAPI:
172
174
  new_proof_of_space.proof,
173
175
  )
174
176
  )
175
- self.farmer.cache_add_time[new_proof_of_space.sp_hash] = uint64(int(time.time()))
177
+ self.farmer.cache_add_time[new_proof_of_space.sp_hash] = uint64(time.time())
176
178
  self.farmer.quality_str_to_identifiers[computed_quality_string] = (
177
179
  new_proof_of_space.plot_identifier,
178
180
  new_proof_of_space.challenge_hash,
179
181
  new_proof_of_space.sp_hash,
180
182
  peer.peer_node_id,
181
183
  )
182
- self.farmer.cache_add_time[computed_quality_string] = uint64(int(time.time()))
184
+ self.farmer.cache_add_time[computed_quality_string] = uint64(time.time())
183
185
 
184
186
  await peer.send_message(make_msg(ProtocolMessageTypes.request_signatures, request))
185
187
 
@@ -480,6 +482,103 @@ class FarmerAPI:
480
482
 
481
483
  return
482
484
 
485
+ @metadata.request(peer_required=True)
486
+ async def partial_proofs(self, partial_proof_data: PartialProofsData, peer: WSChiaConnection) -> None:
487
+ """
488
+ This is a response from the harvester for V2 plots, containing only partial proof data.
489
+ We send these to the solver service and wait for a response with the full proof.
490
+ """
491
+ if partial_proof_data.sp_hash not in self.farmer.number_of_responses:
492
+ self.farmer.number_of_responses[partial_proof_data.sp_hash] = 0
493
+ self.farmer.cache_add_time[partial_proof_data.sp_hash] = uint64(time.time())
494
+
495
+ if partial_proof_data.sp_hash not in self.farmer.sps:
496
+ self.farmer.log.warning(
497
+ f"Received partial proofs for a signage point that we do not have {partial_proof_data.sp_hash}"
498
+ )
499
+ return None
500
+
501
+ self.farmer.cache_add_time[partial_proof_data.sp_hash] = uint64(time.time())
502
+
503
+ self.farmer.log.info(
504
+ f"Received V2 partial proof collection with {len(partial_proof_data.partial_proofs)} partail proofs "
505
+ f"for plot {partial_proof_data.plot_identifier[:10]}... from {peer.peer_node_id}"
506
+ )
507
+
508
+ # Process each partial proof chain through solver service to get full proofs
509
+ for partial_proof in partial_proof_data.partial_proofs:
510
+ solver_info = SolverInfo(partial_proof=partial_proof)
511
+
512
+ try:
513
+ # store pending request data for matching with response
514
+ self.farmer.pending_solver_requests[partial_proof] = {
515
+ "proof_data": partial_proof_data,
516
+ "peer": peer,
517
+ }
518
+
519
+ # send solve request to all solver connections
520
+ msg = make_msg(ProtocolMessageTypes.solve, solver_info)
521
+ await self.farmer.server.send_to_all([msg], NodeType.SOLVER)
522
+ self.farmer.log.debug(f"Sent solve request for partial proof {partial_proof.hex()[:10]}...")
523
+
524
+ except Exception as e:
525
+ self.farmer.log.error(
526
+ f"Failed to call solver service for partial proof {partial_proof.hex()[:10]}...: {e}"
527
+ )
528
+ # clean up pending request
529
+ if partial_proof in self.farmer.pending_solver_requests:
530
+ del self.farmer.pending_solver_requests[partial_proof]
531
+
532
+ @metadata.request()
533
+ async def solution_response(self, response: SolverResponse, peer: WSChiaConnection) -> None:
534
+ """
535
+ Handle solution response from solver service.
536
+ This is called when a solver responds to a solve request.
537
+ """
538
+ self.farmer.log.debug(f"Received solution response: {len(response.proof)} bytes from {peer.peer_node_id}")
539
+
540
+ # find the matching pending request using partial_proof
541
+
542
+ if response.partial_proof not in self.farmer.pending_solver_requests:
543
+ self.farmer.log.warning(
544
+ f"Received solver response for unknown partial proof {response.partial_proof.hex()}"
545
+ )
546
+ return
547
+
548
+ # get the original request data
549
+ request_data = self.farmer.pending_solver_requests.pop(response.partial_proof)
550
+ proof_data = request_data["proof_data"]
551
+ original_peer = request_data["peer"]
552
+ partial_proof = response.partial_proof
553
+
554
+ # create the proof of space with the solver's proof
555
+ proof_bytes = response.proof
556
+ if proof_bytes is None or len(proof_bytes) == 0:
557
+ self.farmer.log.warning(f"Received empty proof from solver for proof {partial_proof.hex()}...")
558
+ return
559
+
560
+ sp_challenge_hash = proof_data.challenge_hash
561
+ new_proof_of_space = harvester_protocol.NewProofOfSpace(
562
+ proof_data.challenge_hash,
563
+ proof_data.sp_hash,
564
+ proof_data.plot_identifier,
565
+ ProofOfSpace(
566
+ sp_challenge_hash,
567
+ proof_data.pool_public_key,
568
+ proof_data.pool_contract_puzzle_hash,
569
+ proof_data.plot_public_key,
570
+ proof_data.plot_size,
571
+ proof_bytes,
572
+ ),
573
+ proof_data.signage_point_index,
574
+ include_source_signature_data=False,
575
+ farmer_reward_address_override=None,
576
+ fee_info=None,
577
+ )
578
+
579
+ # process the proof of space
580
+ await self.new_proof_of_space(new_proof_of_space, original_peer)
581
+
483
582
  @metadata.request()
484
583
  async def respond_signatures(self, response: harvester_protocol.RespondSignatures) -> None:
485
584
  request = self._process_respond_signatures(response)
@@ -584,7 +683,7 @@ class FarmerAPI:
584
683
 
585
684
  pool_dict[key] = strip_old_entries(pairs=pool_dict[key], before=cutoff_24h)
586
685
 
587
- now = uint64(int(time.time()))
686
+ now = uint64(time.time())
588
687
  self.farmer.cache_add_time[new_signage_point.challenge_chain_sp] = now
589
688
  missing_signage_points = self.farmer.check_missing_signage_points(now, new_signage_point)
590
689
  self.farmer.state_changed(
@@ -11,7 +11,10 @@ from typing_extensions import Protocol
11
11
  from chia.farmer.farmer import Farmer
12
12
  from chia.plot_sync.receiver import Receiver
13
13
  from chia.protocols.harvester_protocol import Plot
14
+ from chia.protocols.outbound_message import NodeType
14
15
  from chia.rpc.rpc_server import Endpoint, EndpointResult
16
+ from chia.types.peer_info import PeerInfo
17
+ from chia.util.network import resolve
15
18
  from chia.util.paginator import Paginator
16
19
  from chia.util.streamable import Streamable, streamable
17
20
  from chia.util.ws_message import WsRpcMessage, create_payload_dict
@@ -102,6 +105,7 @@ class FarmerRpcApi:
102
105
  "/get_harvester_plots_keys_missing": self.get_harvester_plots_keys_missing,
103
106
  "/get_harvester_plots_duplicates": self.get_harvester_plots_duplicates,
104
107
  "/get_pool_login_link": self.get_pool_login_link,
108
+ "/connect_to_solver": self.connect_to_solver,
105
109
  }
106
110
 
107
111
  async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]]) -> list[WsRpcMessage]:
@@ -363,3 +367,19 @@ class FarmerRpcApi:
363
367
  if login_link is None:
364
368
  raise ValueError(f"Failed to generate login link for {launcher_id.hex()}")
365
369
  return {"login_link": login_link}
370
+
371
+ async def connect_to_solver(self, request: dict[str, Any]) -> EndpointResult:
372
+ for connection in self.service.server.get_connections(NodeType.SOLVER):
373
+ host = connection.peer_info.host
374
+ port = connection.peer_server_port
375
+ await connection.close()
376
+ self.service.log.info(f"Disconnected from solver at {host}:{port}")
377
+ host = request["host"]
378
+ port = request["port"]
379
+ target_node = PeerInfo(await resolve(host), port)
380
+ on_connect = getattr(self.service, "on_connect", None)
381
+ if await self.service.server.start_client(target_node, on_connect):
382
+ self.service.log.info(f"Connected to solver at {host}:{port}")
383
+ return {"success": True}
384
+ else:
385
+ return {"success": False, "error": f"Could not connect to solver at {host}:{port}"}
@@ -21,7 +21,7 @@ class FarmerRpcClient(RpcClient):
21
21
  async def get_signage_point(self, sp_hash: bytes32) -> Optional[dict[str, Any]]:
22
22
  try:
23
23
  return await self.fetch("get_signage_point", {"sp_hash": sp_hash.hex()})
24
- except ValueError:
24
+ except ValueError: # not synced
25
25
  return None
26
26
 
27
27
  async def get_signage_points(self) -> list[dict[str, Any]]:
@@ -83,5 +83,9 @@ class FarmerRpcClient(RpcClient):
83
83
  try:
84
84
  result = await self.fetch("get_pool_login_link", {"launcher_id": launcher_id.hex()})
85
85
  return cast(Optional[str], result["login_link"])
86
- except ValueError:
86
+ except ValueError: # not connected to pool.
87
87
  return None
88
+
89
+ async def connect_to_solver(self, host: str, port: int) -> dict[str, Any]:
90
+ """Connect farmer to specific solver"""
91
+ return await self.fetch("connect_to_solver", {"host": host, "port": port})
@@ -0,0 +1,8 @@
1
+ from __future__ import annotations
2
+
3
+ from chia.farmer.farmer import Farmer
4
+ from chia.farmer.farmer_api import FarmerAPI
5
+ from chia.farmer.farmer_rpc_api import FarmerRpcApi
6
+ from chia.server.start_service import Service
7
+
8
+ FarmerService = Service[Farmer, FarmerAPI, FarmerRpcApi]
@@ -13,11 +13,12 @@ from chia.consensus.default_constants import DEFAULT_CONSTANTS, update_testnet_o
13
13
  from chia.farmer.farmer import Farmer
14
14
  from chia.farmer.farmer_api import FarmerAPI
15
15
  from chia.farmer.farmer_rpc_api import FarmerRpcApi
16
+ from chia.farmer.farmer_service import FarmerService
16
17
  from chia.protocols.outbound_message import NodeType
17
- from chia.server.aliases import FarmerService
18
18
  from chia.server.resolve_peer_info import get_unresolved_peer_infos
19
19
  from chia.server.signal_handlers import SignalHandlers
20
20
  from chia.server.start_service import RpcInfo, Service, async_run
21
+ from chia.types.peer_info import UnresolvedPeerInfo
21
22
  from chia.util.chia_logging import initialize_service_logging
22
23
  from chia.util.config import load_config, load_config_cli
23
24
  from chia.util.default_root import resolve_root_path
@@ -37,6 +38,7 @@ def create_farmer_service(
37
38
  consensus_constants: ConsensusConstants,
38
39
  keychain: Optional[Keychain] = None,
39
40
  connect_to_daemon: bool = True,
41
+ solver_peer: Optional[UnresolvedPeerInfo] = None,
40
42
  ) -> FarmerService:
41
43
  service_config = config[SERVICE_NAME]
42
44
 
@@ -54,6 +56,10 @@ def create_farmer_service(
54
56
  if service_config.get("start_rpc_server", True):
55
57
  rpc_info = (FarmerRpcApi, service_config["rpc_port"])
56
58
 
59
+ connect_peers = get_unresolved_peer_infos(service_config, NodeType.FULL_NODE)
60
+ if solver_peer is not None:
61
+ connect_peers.add(solver_peer)
62
+
57
63
  return Service(
58
64
  root_path=root_path,
59
65
  config=config,
@@ -62,7 +68,7 @@ def create_farmer_service(
62
68
  node_type=NodeType.FARMER,
63
69
  advertised_port=service_config["port"],
64
70
  service_name=SERVICE_NAME,
65
- connect_peers=get_unresolved_peer_infos(service_config, NodeType.FULL_NODE),
71
+ connect_peers=connect_peers,
66
72
  on_connect_callback=node.on_connect,
67
73
  network_id=network_id,
68
74
  rpc_info=rpc_info,
@@ -73,7 +79,7 @@ def create_farmer_service(
73
79
 
74
80
  async def async_main(root_path: pathlib.Path) -> int:
75
81
  # TODO: refactor to avoid the double load
76
- config = load_config(root_path, "config.yaml")
82
+ config = load_config(root_path, "config.yaml", fill_missing_services=True)
77
83
  service_config = load_config_cli(root_path, "config.yaml", SERVICE_NAME)
78
84
  config[SERVICE_NAME] = service_config
79
85
  config_pool = load_config_cli(root_path, "config.yaml", "pool")