chia-blockchain 2.5.6rc2__py3-none-any.whl → 2.5.7rc2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/blockchain/blockchain_test_utils.py +6 -7
- chia/_tests/blockchain/test_augmented_chain.py +4 -3
- chia/_tests/blockchain/test_blockchain.py +10 -5
- chia/_tests/clvm/coin_store.py +1 -1
- chia/_tests/cmds/cmd_test_utils.py +84 -97
- chia/_tests/cmds/test_dev_gh.py +1 -1
- chia/_tests/cmds/test_farm_cmd.py +56 -2
- chia/_tests/cmds/wallet/test_consts.py +3 -1
- chia/_tests/cmds/wallet/test_did.py +3 -8
- chia/_tests/cmds/wallet/test_nft.py +6 -6
- chia/_tests/cmds/wallet/test_notifications.py +39 -21
- chia/_tests/cmds/wallet/test_vcs.py +2 -1
- chia/_tests/cmds/wallet/test_wallet.py +160 -136
- chia/_tests/conftest.py +51 -26
- chia/_tests/core/cmds/test_wallet.py +4 -3
- chia/_tests/core/consensus/test_pot_iterations.py +71 -24
- chia/_tests/core/custom_types/test_proof_of_space.py +60 -30
- chia/_tests/core/custom_types/test_spend_bundle.py +1 -4
- chia/_tests/core/data_layer/conftest.py +7 -2
- chia/_tests/core/data_layer/old_format/__init__.py +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-005876c1cdc4d5f1726551b207b9f63efc9cd2f72df80a3a26a1ba73d40d6745-delta-23-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-005876c1cdc4d5f1726551b207b9f63efc9cd2f72df80a3a26a1ba73d40d6745-full-23-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-01b36e72a975cdc00d6514eea81668d19e8ea3150217ae98cb3361688a016fab-delta-9-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-01b36e72a975cdc00d6514eea81668d19e8ea3150217ae98cb3361688a016fab-full-9-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-06147c3b12d73e9b83b686a8c10b4a36a513c8a93c0ff99ae197f06326278be9-delta-5-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-06147c3b12d73e9b83b686a8c10b4a36a513c8a93c0ff99ae197f06326278be9-full-5-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-073c051a5934ad3b8db39eee2189e4300e55f48aaa17ff4ae30eeae088ff544a-delta-22-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-073c051a5934ad3b8db39eee2189e4300e55f48aaa17ff4ae30eeae088ff544a-full-22-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-0cc077559b9c7b4aefe8f8f591c195e0779bebdf89f2ad8285a00ea5f859d965-delta-1-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-0cc077559b9c7b4aefe8f8f591c195e0779bebdf89f2ad8285a00ea5f859d965-full-1-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-16377275567b723b20936d3f1ec0a2fd83f6ac379b922351a5e4c54949069f3b-delta-2-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-16377275567b723b20936d3f1ec0a2fd83f6ac379b922351a5e4c54949069f3b-full-2-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-1cb824a7a5f02cd30ac6c38e8f6216780d9bfa2d24811d282a368dcd541438a7-delta-29-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-1cb824a7a5f02cd30ac6c38e8f6216780d9bfa2d24811d282a368dcd541438a7-full-29-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-27b89dc4809ebc5a3b87757d35e95e2761d978cf121e44fa2773a5c06e4cc7b5-delta-28-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-27b89dc4809ebc5a3b87757d35e95e2761d978cf121e44fa2773a5c06e4cc7b5-full-28-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-28a6b7c134abfaeb0ab58a018313f6c87a61a40a4d9ec9bedf53aa1d12f3ee37-delta-7-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-28a6b7c134abfaeb0ab58a018313f6c87a61a40a4d9ec9bedf53aa1d12f3ee37-full-7-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-30a6bfe7cecbeda259a295dc6de3a436357f52388c3b03d86901e7da68565aeb-delta-19-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-30a6bfe7cecbeda259a295dc6de3a436357f52388c3b03d86901e7da68565aeb-full-19-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-343a2bf9add798e3ac2e6a571823cf9fa7e8a1bed532143354ead2648bd036ef-delta-10-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-343a2bf9add798e3ac2e6a571823cf9fa7e8a1bed532143354ead2648bd036ef-full-10-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4d90efbc1fb3df324193831ea4a57dd5e10e67d9653343eb18d178272adb0447-delta-17-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4d90efbc1fb3df324193831ea4a57dd5e10e67d9653343eb18d178272adb0447-full-17-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4dd2ea099e91635c441f40b36d3f84078a2d818d2dc601c7278e72cbdfe3eca8-delta-20-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4dd2ea099e91635c441f40b36d3f84078a2d818d2dc601c7278e72cbdfe3eca8-full-20-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-509effbdca78639023b933ce6c08a0465fb247e1cd5329e9e9c553940e4b6e46-delta-31-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-509effbdca78639023b933ce6c08a0465fb247e1cd5329e9e9c553940e4b6e46-full-31-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5379a4d9ff29c29d1ef0906d22e82c52472753d31806189ab813c43365341b78-delta-40-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5379a4d9ff29c29d1ef0906d22e82c52472753d31806189ab813c43365341b78-full-40-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-55908eda5686a8f89e4c50672cbe893ec1734fb23449dc03325efe7c414f9aa4-delta-49-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-55908eda5686a8f89e4c50672cbe893ec1734fb23449dc03325efe7c414f9aa4-full-49-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-57cc2691fb1fb986c99a58bcb0e029d0cd0cff41553d703147c54196d7d9ca63-delta-14-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-57cc2691fb1fb986c99a58bcb0e029d0cd0cff41553d703147c54196d7d9ca63-full-14-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5943bf8ae4f5e59969d8570e4f40a8223299febdcfbcf188b3b3e2ab11044e18-delta-34-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5943bf8ae4f5e59969d8570e4f40a8223299febdcfbcf188b3b3e2ab11044e18-full-34-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6518527b7c939bee60ce6b024cbe90d3b9d8913c56b8ce11a4df5da7ff7db1c8-delta-8-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6518527b7c939bee60ce6b024cbe90d3b9d8913c56b8ce11a4df5da7ff7db1c8-full-8-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-66ff26a26620379e14a7c91252d27ee4dbe06ad69a3a390a88642fe757f2b288-delta-45-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-66ff26a26620379e14a7c91252d27ee4dbe06ad69a3a390a88642fe757f2b288-full-45-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6bd0a508ee2c4afbe9d4daa811139fd6e54e7f4e16850cbce999fa30f8bdccd2-delta-6-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6bd0a508ee2c4afbe9d4daa811139fd6e54e7f4e16850cbce999fa30f8bdccd2-full-6-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6ce850d0d77ca743fcc2fc792747472e5d2c1c0813aa43abbb370554428fc897-delta-48-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6ce850d0d77ca743fcc2fc792747472e5d2c1c0813aa43abbb370554428fc897-full-48-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6eb4ca2e1552b156c5969396b49070eb08ad6c96b347359387519be59f7ccaed-delta-26-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6eb4ca2e1552b156c5969396b49070eb08ad6c96b347359387519be59f7ccaed-full-26-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-71c797fb7592d3f0a5a20c79ab8497ddaa0fd9ec17712e109d25c91b3f3c76e5-delta-3-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-71c797fb7592d3f0a5a20c79ab8497ddaa0fd9ec17712e109d25c91b3f3c76e5-full-3-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-73357026053d5a4969e7a6b9aeeef91c14cc6d5f32fc700fe6d21d2a1b22496c-delta-25-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-73357026053d5a4969e7a6b9aeeef91c14cc6d5f32fc700fe6d21d2a1b22496c-full-25-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-7c897e5c46e834ced65bde7de87716acfaa5dffbdb30b5cd9377d8c319df2034-delta-35-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-7c897e5c46e834ced65bde7de87716acfaa5dffbdb30b5cd9377d8c319df2034-full-35-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-87b8394d80d08117a5a1cd04ed8a682564eab7197a2c090159863591b5108874-delta-4-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-87b8394d80d08117a5a1cd04ed8a682564eab7197a2c090159863591b5108874-full-4-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-89eb40b9cc0921c5f5c3feb20927c13a9ada5760f82d219dcee153b7d400165c-delta-41-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-89eb40b9cc0921c5f5c3feb20927c13a9ada5760f82d219dcee153b7d400165c-full-41-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8b649433156b8c924436cdec9c6de26106fd6f73a0528570f48748f7b40d7f8a-delta-21-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8b649433156b8c924436cdec9c6de26106fd6f73a0528570f48748f7b40d7f8a-full-21-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8d364023a0834c8c3077e236a465493acbf488e4f9d1f4c6cc230343c10a8f7d-delta-42-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8d364023a0834c8c3077e236a465493acbf488e4f9d1f4c6cc230343c10a8f7d-full-42-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-925689e24a3d98d98676d816cdd8b73e7b2df057d9d4503da9b27bf91d79666c-delta-38-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-925689e24a3d98d98676d816cdd8b73e7b2df057d9d4503da9b27bf91d79666c-full-38-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-937be3d428b19f521be4f98faecc3307ae11ee731c76992f417fa4268d13859e-delta-11-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-937be3d428b19f521be4f98faecc3307ae11ee731c76992f417fa4268d13859e-full-11-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-97f34af499b79e2111fc296a598fc9654c2467ea038dfea41fd58241fb3642de-delta-32-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-97f34af499b79e2111fc296a598fc9654c2467ea038dfea41fd58241fb3642de-full-32-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-9d1b737243b8a1d0022f2b36ac53333c6280354a74d77f2a3642dcab35204e59-delta-33-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-9d1b737243b8a1d0022f2b36ac53333c6280354a74d77f2a3642dcab35204e59-full-33-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-a6663f98ef6ddf6db55f01163e34bb2e87aa82f0347e79ce31e8dbfa390c480c-delta-47-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-a6663f98ef6ddf6db55f01163e34bb2e87aa82f0347e79ce31e8dbfa390c480c-full-47-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-aa77376d1ccd3664e5c6366e010c52a978fedbf40f5ce262fee71b2e7fe0c6a9-delta-50-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-aa77376d1ccd3664e5c6366e010c52a978fedbf40f5ce262fee71b2e7fe0c6a9-full-50-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b0f28514741ed1a71f5c6544bf92f9e0e493c5f3cf28328909771d8404eff626-delta-24-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b0f28514741ed1a71f5c6544bf92f9e0e493c5f3cf28328909771d8404eff626-full-24-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b3efee5358e6eb89ab3b60db2d128d57eef39e8538fb63c5632412d4f8e7d09e-delta-44-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b3efee5358e6eb89ab3b60db2d128d57eef39e8538fb63c5632412d4f8e7d09e-full-44-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bb0b56b6eb7acbb4e80893b04c72412fe833418232e1ed7b06d97d7a7f08b4e1-delta-16-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bb0b56b6eb7acbb4e80893b04c72412fe833418232e1ed7b06d97d7a7f08b4e1-full-16-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bc45262b757ff494b53bd2a8fba0f5511cc1f9c2a2c5360e04ea8cebbf6409df-delta-13-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bc45262b757ff494b53bd2a8fba0f5511cc1f9c2a2c5360e04ea8cebbf6409df-full-13-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bd0494ba430aff13458b557113b073d226eaf11257dfe26ff3323fa1cfe1335b-delta-39-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bd0494ba430aff13458b557113b073d226eaf11257dfe26ff3323fa1cfe1335b-full-39-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cd04f5fbba1553fa728b4dd8131d4723aaac288e0c7dc080447fbf0872c0a6eb-delta-36-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cd04f5fbba1553fa728b4dd8131d4723aaac288e0c7dc080447fbf0872c0a6eb-full-36-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cdd2399557fb3163a848f08831fdc833703354edb19a0d32a965fdb140f160c2-delta-18-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cdd2399557fb3163a848f08831fdc833703354edb19a0d32a965fdb140f160c2-full-18-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cf7a08fca7b1332095242e4d9800f4b94a3f4eaae88fe8407da42736d54b9e18-delta-37-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cf7a08fca7b1332095242e4d9800f4b94a3f4eaae88fe8407da42736d54b9e18-full-37-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-d1f97465a9f52187e2ef3a0d811a1258f52380a65340c55f3e8e65b92753bc13-delta-15-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-d1f97465a9f52187e2ef3a0d811a1258f52380a65340c55f3e8e65b92753bc13-full-15-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e475eccd4ee597e5ff67b1a249e37d65d6e3f754c3f0379fdb43692513588fef-delta-46-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e475eccd4ee597e5ff67b1a249e37d65d6e3f754c3f0379fdb43692513588fef-full-46-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e82e63517d78fd65b23a05c3b9a98cf905ddad7026995a238bfe634006b84cd0-delta-27-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e82e63517d78fd65b23a05c3b9a98cf905ddad7026995a238bfe634006b84cd0-full-27-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-ed2cf0fd6c0f6237c87c161e1fca303b3fbe6c04e01f652b88720b4572143349-delta-12-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-ed2cf0fd6c0f6237c87c161e1fca303b3fbe6c04e01f652b88720b4572143349-full-12-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f6e454eaf24a83c46a7bed4c19260a0a3ce0ed5c51739cb6d748d4913dc2ef58-delta-30-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f6e454eaf24a83c46a7bed4c19260a0a3ce0ed5c51739cb6d748d4913dc2ef58-full-30-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f7ad2bdf86d9609b4d6381086ec1e296bf558e2ff467ead29dd7fa6e31bacc56-delta-43-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f7ad2bdf86d9609b4d6381086ec1e296bf558e2ff467ead29dd7fa6e31bacc56-full-43-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/__init__.py +0 -0
- chia/_tests/core/data_layer/old_format/old_db.sqlite +0 -0
- chia/_tests/core/data_layer/test_data_layer_util.py +18 -21
- chia/_tests/core/data_layer/test_data_rpc.py +77 -28
- chia/_tests/core/data_layer/test_data_store.py +637 -700
- chia/_tests/core/data_layer/test_data_store_schema.py +2 -209
- chia/_tests/core/full_node/ram_db.py +1 -1
- chia/_tests/core/full_node/stores/test_block_store.py +4 -10
- chia/_tests/core/full_node/stores/test_coin_store.py +1 -1
- chia/_tests/core/full_node/test_address_manager.py +3 -3
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_full_node.py +91 -30
- chia/_tests/core/full_node/test_generator_tools.py +17 -10
- chia/_tests/core/mempool/test_mempool.py +190 -90
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +2 -4
- chia/_tests/core/mempool/test_mempool_item_queries.py +1 -1
- chia/_tests/core/mempool/test_mempool_manager.py +134 -75
- chia/_tests/core/mempool/test_singleton_fast_forward.py +9 -27
- chia/_tests/core/server/serve.py +0 -2
- chia/_tests/core/server/test_rate_limits.py +400 -347
- chia/_tests/core/server/test_server.py +2 -2
- chia/_tests/core/services/test_services.py +7 -7
- chia/_tests/core/test_cost_calculation.py +31 -10
- chia/_tests/core/test_crawler.py +4 -4
- chia/_tests/core/test_db_conversion.py +7 -14
- chia/_tests/core/test_db_validation.py +2 -6
- chia/_tests/core/test_farmer_harvester_rpc.py +34 -1
- chia/_tests/core/test_full_node_rpc.py +28 -24
- chia/_tests/core/test_merkle_set.py +1 -4
- chia/_tests/core/test_seeder.py +1 -1
- chia/_tests/core/util/test_keychain.py +2 -2
- chia/_tests/core/util/test_lru_cache.py +16 -0
- chia/_tests/core/util/test_streamable.py +85 -4
- chia/_tests/environments/wallet.py +4 -1
- chia/_tests/farmer_harvester/test_farmer.py +8 -6
- chia/_tests/farmer_harvester/test_farmer_harvester.py +306 -8
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +3 -3
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +11 -11
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +2 -2
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +1 -1
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -2
- chia/_tests/generator/test_rom.py +2 -1
- chia/_tests/harvester/__init__.py +0 -0
- chia/_tests/harvester/config.py +4 -0
- chia/_tests/harvester/test_harvester_api.py +157 -0
- chia/_tests/plot_sync/test_plot_sync.py +6 -3
- chia/_tests/plot_sync/test_receiver.py +16 -4
- chia/_tests/plot_sync/test_sender.py +8 -7
- chia/_tests/plot_sync/test_sync_simulated.py +15 -13
- chia/_tests/plot_sync/util.py +3 -2
- chia/_tests/plotting/test_plot_manager.py +21 -5
- chia/_tests/plotting/test_prover.py +106 -0
- chia/_tests/pools/test_pool_cmdline.py +7 -6
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -3
- chia/_tests/pools/test_pool_rpc.py +92 -64
- chia/_tests/solver/__init__.py +0 -0
- chia/_tests/solver/config.py +4 -0
- chia/_tests/solver/test_solver_service.py +29 -0
- chia/_tests/timelord/test_new_peak.py +1 -1
- chia/_tests/timelord/test_timelord.py +1 -1
- chia/_tests/util/benchmarks.py +5 -12
- chia/_tests/util/blockchain.py +1 -1
- chia/_tests/util/build_network_protocol_files.py +7 -0
- chia/_tests/util/network_protocol_data.py +26 -0
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +19 -0
- chia/_tests/util/setup_nodes.py +21 -2
- chia/_tests/util/spend_sim.py +9 -3
- chia/_tests/util/test_condition_tools.py +3 -2
- chia/_tests/util/test_full_block_utils.py +10 -9
- chia/_tests/util/test_misc.py +10 -10
- chia/_tests/util/test_network.py +32 -1
- chia/_tests/util/test_network_protocol_files.py +333 -318
- chia/_tests/util/test_network_protocol_json.py +6 -0
- chia/_tests/util/test_network_protocol_test.py +27 -0
- chia/_tests/util/test_priority_mutex.py +1 -1
- chia/_tests/util/test_replace_str_to_bytes.py +6 -6
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +17 -13
- chia/_tests/wallet/cat_wallet/test_trades.py +55 -55
- chia/_tests/wallet/did_wallet/test_did.py +118 -1229
- chia/_tests/wallet/nft_wallet/config.py +1 -1
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +73 -96
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +15 -12
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +67 -134
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +31 -26
- chia/_tests/wallet/rpc/test_wallet_rpc.py +765 -371
- chia/_tests/wallet/sync/test_wallet_sync.py +6 -0
- chia/_tests/wallet/test_new_wallet_protocol.py +1 -1
- chia/_tests/wallet/test_signer_protocol.py +2 -2
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +3 -4
- chia/_tests/wallet/test_transaction_store.py +42 -33
- chia/_tests/wallet/test_wallet.py +22 -31
- chia/_tests/wallet/test_wallet_state_manager.py +14 -7
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +53 -32
- chia/apis.py +2 -0
- chia/cmds/beta.py +7 -3
- chia/cmds/chia.py +2 -0
- chia/cmds/cmd_classes.py +11 -27
- chia/cmds/cmds_util.py +3 -0
- chia/cmds/coin_funcs.py +27 -22
- chia/cmds/configure.py +42 -18
- chia/cmds/dev/data.py +22 -3
- chia/cmds/farm.py +32 -0
- chia/cmds/farm_funcs.py +54 -5
- chia/cmds/init_funcs.py +4 -0
- chia/cmds/keys_funcs.py +8 -10
- chia/cmds/peer_funcs.py +8 -10
- chia/cmds/plotnft_funcs.py +24 -16
- chia/cmds/rpc.py +11 -1
- chia/cmds/show_funcs.py +5 -5
- chia/cmds/solver.py +33 -0
- chia/cmds/solver_funcs.py +21 -0
- chia/cmds/wallet.py +1 -1
- chia/cmds/wallet_funcs.py +149 -96
- chia/consensus/block_body_validation.py +8 -9
- chia/consensus/block_creation.py +9 -10
- chia/consensus/block_header_validation.py +61 -69
- chia/{full_node → consensus}/block_height_map.py +2 -1
- chia/consensus/block_height_map_protocol.py +21 -0
- chia/consensus/block_rewards.py +12 -12
- chia/consensus/blockchain.py +8 -18
- chia/consensus/default_constants.py +6 -6
- chia/consensus/generator_tools.py +1 -1
- chia/consensus/get_block_challenge.py +24 -25
- chia/consensus/pos_quality.py +28 -2
- chia/consensus/pot_iterations.py +15 -17
- chia/daemon/keychain_proxy.py +5 -0
- chia/daemon/server.py +2 -3
- chia/data_layer/data_layer.py +32 -24
- chia/data_layer/data_layer_errors.py +5 -0
- chia/data_layer/data_layer_rpc_api.py +1 -1
- chia/data_layer/data_layer_service.py +8 -0
- chia/data_layer/data_layer_util.py +49 -89
- chia/data_layer/data_layer_wallet.py +20 -17
- chia/data_layer/data_store.py +1051 -1462
- chia/data_layer/download_data.py +44 -115
- chia/{server → data_layer}/start_data_layer.py +2 -1
- chia/data_layer/util/benchmark.py +38 -53
- chia/farmer/farmer.py +3 -0
- chia/farmer/farmer_api.py +104 -5
- chia/farmer/farmer_rpc_api.py +20 -0
- chia/farmer/farmer_rpc_client.py +6 -2
- chia/farmer/farmer_service.py +8 -0
- chia/{server → farmer}/start_farmer.py +4 -3
- chia/full_node/block_store.py +20 -10
- chia/full_node/coin_store.py +12 -4
- chia/full_node/eligible_coin_spends.py +17 -72
- chia/full_node/full_node.py +68 -71
- chia/full_node/full_node_api.py +26 -32
- chia/full_node/full_node_rpc_api.py +44 -32
- chia/full_node/full_node_rpc_client.py +67 -79
- chia/full_node/full_node_service.py +8 -0
- chia/full_node/full_node_store.py +5 -3
- chia/full_node/mempool.py +14 -14
- chia/full_node/mempool_manager.py +67 -89
- chia/{server → full_node}/start_full_node.py +1 -1
- chia/full_node/subscriptions.py +2 -2
- chia/full_node/weight_proof.py +14 -15
- chia/harvester/harvester.py +8 -1
- chia/harvester/harvester_api.py +178 -44
- chia/harvester/harvester_service.py +8 -0
- chia/{server → harvester}/start_harvester.py +1 -1
- chia/introducer/introducer_service.py +8 -0
- chia/{server → introducer}/start_introducer.py +1 -1
- chia/plot_sync/receiver.py +6 -1
- chia/plot_sync/sender.py +7 -4
- chia/plotting/cache.py +37 -28
- chia/plotting/check_plots.py +83 -48
- chia/plotting/create_plots.py +3 -4
- chia/plotting/manager.py +18 -13
- chia/plotting/prover.py +153 -0
- chia/plotting/util.py +14 -6
- chia/pools/pool_wallet.py +6 -4
- chia/protocols/harvester_protocol.py +14 -0
- chia/protocols/outbound_message.py +1 -0
- chia/protocols/pool_protocol.py +1 -1
- chia/protocols/protocol_message_types.py +7 -0
- chia/protocols/shared_protocol.py +2 -0
- chia/protocols/solver_protocol.py +18 -0
- chia/rpc/rpc_server.py +1 -1
- chia/seeder/crawl_store.py +4 -8
- chia/seeder/crawler.py +2 -2
- chia/seeder/crawler_service.py +8 -0
- chia/seeder/start_crawler.py +1 -1
- chia/server/address_manager.py +12 -15
- chia/server/introducer_peers.py +1 -1
- chia/server/node_discovery.py +9 -10
- chia/server/rate_limit_numbers.py +157 -168
- chia/server/rate_limits.py +44 -41
- chia/server/resolve_peer_info.py +5 -0
- chia/server/server.py +17 -7
- chia/server/start_service.py +0 -1
- chia/simulator/block_tools.py +92 -58
- chia/simulator/full_node_simulator.py +1 -1
- chia/simulator/setup_services.py +51 -15
- chia/solver/__init__.py +0 -0
- chia/solver/solver.py +100 -0
- chia/solver/solver_api.py +59 -0
- chia/solver/solver_rpc_api.py +31 -0
- chia/solver/solver_rpc_client.py +16 -0
- chia/solver/solver_service.py +8 -0
- chia/solver/start_solver.py +102 -0
- {mozilla-ca → chia/ssl}/cacert.pem +0 -27
- chia/ssl/create_ssl.py +3 -2
- chia/{server → timelord}/start_timelord.py +1 -1
- chia/timelord/timelord.py +12 -13
- chia/timelord/timelord_service.py +8 -0
- chia/types/blockchain_format/proof_of_space.py +61 -17
- chia/types/coin_spend.py +0 -8
- chia/types/internal_mempool_item.py +3 -3
- chia/types/mempool_item.py +15 -8
- chia/types/mempool_submission_status.py +1 -1
- chia/util/config.py +1 -3
- chia/util/db_wrapper.py +7 -8
- chia/util/initial-config.yaml +46 -0
- chia/util/lru_cache.py +8 -4
- chia/util/network.py +9 -0
- chia/util/service_groups.py +3 -1
- chia/util/streamable.py +38 -8
- chia/util/virtual_project_analysis.py +1 -1
- chia/wallet/cat_wallet/cat_outer_puzzle.py +7 -4
- chia/wallet/cat_wallet/cat_wallet.py +13 -7
- chia/wallet/cat_wallet/r_cat_wallet.py +4 -1
- chia/wallet/conditions.py +1 -3
- chia/wallet/did_wallet/did_wallet.py +27 -332
- chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
- chia/wallet/nft_wallet/nft_wallet.py +9 -7
- chia/wallet/puzzle_drivers.py +7 -8
- chia/{server → wallet}/start_wallet.py +1 -1
- chia/wallet/trade_manager.py +12 -9
- chia/wallet/transaction_record.py +14 -51
- chia/wallet/util/clvm_streamable.py +28 -41
- chia/wallet/util/merkle_utils.py +2 -2
- chia/wallet/util/tx_config.py +3 -6
- chia/wallet/vc_wallet/cr_cat_wallet.py +12 -6
- chia/wallet/vc_wallet/vc_wallet.py +13 -15
- chia/wallet/wallet.py +5 -3
- chia/wallet/wallet_node.py +25 -30
- chia/wallet/wallet_request_types.py +538 -101
- chia/wallet/wallet_rpc_api.py +398 -570
- chia/wallet/wallet_rpc_client.py +144 -332
- chia/wallet/wallet_service.py +8 -0
- chia/wallet/wallet_state_manager.py +53 -42
- chia/wallet/wallet_transaction_store.py +13 -5
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/METADATA +31 -31
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/RECORD +369 -241
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/WHEEL +1 -1
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/entry_points.txt +8 -7
- chia/full_node/mempool_check_conditions.py +0 -102
- chia/server/aliases.py +0 -35
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info/licenses}/LICENSE +0 -0
chia/data_layer/download_data.py
CHANGED
|
@@ -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
|
|
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
|
-
|
|
169
|
-
|
|
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
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
data_store
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
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.
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
|
41
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
82
|
-
|
|
72
|
+
insert_time += t2 - t1
|
|
73
|
+
insert_count += 1
|
|
83
74
|
else:
|
|
84
75
|
t1 = time.time()
|
|
85
|
-
assert
|
|
86
|
-
node =
|
|
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 +
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
chia/farmer/farmer_rpc_api.py
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}"}
|
chia/farmer/farmer_rpc_client.py
CHANGED
|
@@ -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,8 +13,8 @@ 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
|
|
@@ -62,7 +62,8 @@ def create_farmer_service(
|
|
|
62
62
|
node_type=NodeType.FARMER,
|
|
63
63
|
advertised_port=service_config["port"],
|
|
64
64
|
service_name=SERVICE_NAME,
|
|
65
|
-
connect_peers=get_unresolved_peer_infos(service_config, NodeType.FULL_NODE)
|
|
65
|
+
connect_peers=get_unresolved_peer_infos(service_config, NodeType.FULL_NODE)
|
|
66
|
+
| get_unresolved_peer_infos(service_config, NodeType.SOLVER),
|
|
66
67
|
on_connect_callback=node.on_connect,
|
|
67
68
|
network_id=network_id,
|
|
68
69
|
rpc_info=rpc_info,
|
|
@@ -73,7 +74,7 @@ def create_farmer_service(
|
|
|
73
74
|
|
|
74
75
|
async def async_main(root_path: pathlib.Path) -> int:
|
|
75
76
|
# TODO: refactor to avoid the double load
|
|
76
|
-
config = load_config(root_path, "config.yaml")
|
|
77
|
+
config = load_config(root_path, "config.yaml", fill_missing_services=True)
|
|
77
78
|
service_config = load_config_cli(root_path, "config.yaml", SERVICE_NAME)
|
|
78
79
|
config[SERVICE_NAME] = service_config
|
|
79
80
|
config_pool = load_config_cli(root_path, "config.yaml", "pool")
|