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
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import AsyncGenerator, Iterator
|
|
4
|
+
from contextlib import contextmanager
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from unittest.mock import MagicMock, patch
|
|
8
|
+
|
|
9
|
+
import pytest
|
|
10
|
+
from chia_rs import ConsensusConstants, FullBlock, ProofOfSpace
|
|
11
|
+
from chia_rs.sized_bytes import bytes32
|
|
12
|
+
from chia_rs.sized_ints import uint64
|
|
13
|
+
|
|
14
|
+
from chia._tests.conftest import HarvesterFarmerEnvironment
|
|
15
|
+
from chia._tests.plotting.util import get_test_plots
|
|
16
|
+
from chia._tests.util.time_out_assert import time_out_assert
|
|
17
|
+
from chia.harvester.harvester_api import HarvesterAPI
|
|
18
|
+
from chia.plotting.util import PlotInfo
|
|
19
|
+
from chia.protocols import harvester_protocol
|
|
20
|
+
from chia.protocols.harvester_protocol import PoolDifficulty
|
|
21
|
+
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
22
|
+
from chia.server.ws_connection import WSChiaConnection
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass
|
|
26
|
+
class HarvesterTestEnvironment:
|
|
27
|
+
"""Test environment with real plots loaded for harvester testing."""
|
|
28
|
+
|
|
29
|
+
harvester_api: HarvesterAPI
|
|
30
|
+
plot_info: PlotInfo
|
|
31
|
+
plot_path: Path
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@pytest.fixture(scope="function")
|
|
35
|
+
async def harvester_environment(
|
|
36
|
+
harvester_farmer_environment: HarvesterFarmerEnvironment,
|
|
37
|
+
) -> AsyncGenerator[HarvesterTestEnvironment, None]:
|
|
38
|
+
"""Create a test environment with real plots loaded."""
|
|
39
|
+
_, _, harvester_service, _, _ = harvester_farmer_environment
|
|
40
|
+
harvester_api = harvester_service._server.api
|
|
41
|
+
assert isinstance(harvester_api, HarvesterAPI)
|
|
42
|
+
test_plots = get_test_plots()
|
|
43
|
+
assert len(test_plots) > 0, "no test plots available"
|
|
44
|
+
plot_manager = harvester_api.harvester.plot_manager
|
|
45
|
+
plot_manager.start_refreshing()
|
|
46
|
+
await time_out_assert(10, lambda: len(plot_manager.plots) > 0, True)
|
|
47
|
+
plot_path, plot_info = next(iter(plot_manager.plots.items()))
|
|
48
|
+
yield HarvesterTestEnvironment(harvester_api, plot_info, plot_path)
|
|
49
|
+
plot_manager.stop_refreshing()
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def signage_point_from_block(
|
|
53
|
+
block: FullBlock, constants: ConsensusConstants
|
|
54
|
+
) -> harvester_protocol.NewSignagePointHarvester2:
|
|
55
|
+
sp_index = block.reward_chain_block.signage_point_index
|
|
56
|
+
challenge_hash = block.reward_chain_block.pos_ss_cc_challenge_hash
|
|
57
|
+
sp_hash = (
|
|
58
|
+
block.reward_chain_block.reward_chain_sp_vdf.output.get_hash()
|
|
59
|
+
if block.reward_chain_block.reward_chain_sp_vdf
|
|
60
|
+
else challenge_hash
|
|
61
|
+
)
|
|
62
|
+
return harvester_protocol.NewSignagePointHarvester2(
|
|
63
|
+
challenge_hash=challenge_hash,
|
|
64
|
+
difficulty=uint64(constants.DIFFICULTY_STARTING),
|
|
65
|
+
sub_slot_iters=uint64(constants.SUB_SLOT_ITERS_STARTING),
|
|
66
|
+
signage_point_index=sp_index,
|
|
67
|
+
sp_hash=sp_hash,
|
|
68
|
+
pool_difficulties=[],
|
|
69
|
+
peak_height=block.height,
|
|
70
|
+
last_tx_height=block.height,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def create_test_setup(
|
|
75
|
+
harvester_environment: HarvesterTestEnvironment,
|
|
76
|
+
default_400_blocks: list[FullBlock],
|
|
77
|
+
blockchain_constants: ConsensusConstants,
|
|
78
|
+
) -> tuple[HarvesterTestEnvironment, harvester_protocol.NewSignagePointHarvester2, MagicMock]:
|
|
79
|
+
env = harvester_environment
|
|
80
|
+
block = default_400_blocks[2]
|
|
81
|
+
new_challenge = signage_point_from_block(block, blockchain_constants)
|
|
82
|
+
mock_peer = MagicMock(spec=WSChiaConnection)
|
|
83
|
+
return env, new_challenge, mock_peer
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@contextmanager
|
|
87
|
+
def mock_successful_proof(plot_info: PlotInfo) -> Iterator[None]:
|
|
88
|
+
with patch.object(plot_info.prover, "get_full_proof") as mock_get_proof:
|
|
89
|
+
mock_proof = MagicMock(spec=ProofOfSpace)
|
|
90
|
+
mock_get_proof.return_value = mock_proof, None
|
|
91
|
+
yield
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def assert_farming_info_sent(mock_peer: MagicMock) -> None:
|
|
95
|
+
mock_peer.send_message.assert_called()
|
|
96
|
+
farming_info_calls = [
|
|
97
|
+
call
|
|
98
|
+
for call in mock_peer.send_message.call_args_list
|
|
99
|
+
if call[0][0].type == ProtocolMessageTypes.farming_info.value
|
|
100
|
+
]
|
|
101
|
+
assert len(farming_info_calls) == 1
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
@pytest.mark.anyio
|
|
105
|
+
async def test_new_signage_point_harvester(
|
|
106
|
+
harvester_environment: HarvesterTestEnvironment,
|
|
107
|
+
default_400_blocks: list[FullBlock],
|
|
108
|
+
blockchain_constants: ConsensusConstants,
|
|
109
|
+
) -> None:
|
|
110
|
+
env, new_challenge, mock_peer = create_test_setup(harvester_environment, default_400_blocks, blockchain_constants)
|
|
111
|
+
with mock_successful_proof(env.plot_info):
|
|
112
|
+
await env.harvester_api.new_signage_point_harvester(new_challenge, mock_peer)
|
|
113
|
+
assert_farming_info_sent(mock_peer)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
@pytest.mark.anyio
|
|
117
|
+
async def test_new_signage_point_harvester_pool_difficulty(
|
|
118
|
+
harvester_environment: HarvesterTestEnvironment,
|
|
119
|
+
default_400_blocks: list[FullBlock],
|
|
120
|
+
blockchain_constants: ConsensusConstants,
|
|
121
|
+
) -> None:
|
|
122
|
+
env, new_challenge, mock_peer = create_test_setup(harvester_environment, default_400_blocks, blockchain_constants)
|
|
123
|
+
pool_puzzle_hash = bytes32(b"pool" + b"0" * 28)
|
|
124
|
+
env.plot_info.pool_contract_puzzle_hash = pool_puzzle_hash
|
|
125
|
+
pool_difficulty = PoolDifficulty(
|
|
126
|
+
pool_contract_puzzle_hash=pool_puzzle_hash,
|
|
127
|
+
difficulty=uint64(500),
|
|
128
|
+
sub_slot_iters=uint64(67108864),
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
new_challenge = harvester_protocol.NewSignagePointHarvester2(
|
|
132
|
+
challenge_hash=new_challenge.challenge_hash,
|
|
133
|
+
difficulty=new_challenge.difficulty,
|
|
134
|
+
sub_slot_iters=new_challenge.sub_slot_iters,
|
|
135
|
+
signage_point_index=new_challenge.signage_point_index,
|
|
136
|
+
sp_hash=new_challenge.sp_hash,
|
|
137
|
+
pool_difficulties=[pool_difficulty], # add pool difficulty
|
|
138
|
+
peak_height=new_challenge.peak_height,
|
|
139
|
+
last_tx_height=new_challenge.last_tx_height,
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
with mock_successful_proof(env.plot_info):
|
|
143
|
+
await env.harvester_api.new_signage_point_harvester(new_challenge, mock_peer)
|
|
144
|
+
|
|
145
|
+
assert_farming_info_sent(mock_peer)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
@pytest.mark.anyio
|
|
149
|
+
async def test_new_signage_point_harvester_prover_error(
|
|
150
|
+
harvester_environment: HarvesterTestEnvironment,
|
|
151
|
+
default_400_blocks: list[FullBlock],
|
|
152
|
+
blockchain_constants: ConsensusConstants,
|
|
153
|
+
) -> None:
|
|
154
|
+
env, new_challenge, mock_peer = create_test_setup(harvester_environment, default_400_blocks, blockchain_constants)
|
|
155
|
+
with patch.object(env.plot_info.prover, "get_qualities_for_challenge", side_effect=RuntimeError("test error")):
|
|
156
|
+
# should not raise exception, should handle error gracefully
|
|
157
|
+
await env.harvester_api.new_signage_point_harvester(new_challenge, mock_peer)
|
|
@@ -20,7 +20,9 @@ from chia._tests.plotting.util import get_test_plots
|
|
|
20
20
|
from chia._tests.util.split_managers import SplitAsyncManager, split_async_manager
|
|
21
21
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
22
22
|
from chia.farmer.farmer import Farmer
|
|
23
|
+
from chia.farmer.farmer_service import FarmerService
|
|
23
24
|
from chia.harvester.harvester import Harvester
|
|
25
|
+
from chia.harvester.harvester_service import HarvesterService
|
|
24
26
|
from chia.plot_sync.delta import Delta, PathListDelta, PlotListDelta
|
|
25
27
|
from chia.plot_sync.receiver import Receiver
|
|
26
28
|
from chia.plot_sync.sender import Sender
|
|
@@ -29,7 +31,6 @@ from chia.plotting.manager import PlotManager
|
|
|
29
31
|
from chia.plotting.util import add_plot_directory, remove_plot_directory
|
|
30
32
|
from chia.protocols.harvester_protocol import Plot
|
|
31
33
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
32
|
-
from chia.server.aliases import FarmerService, HarvesterService
|
|
33
34
|
from chia.simulator.block_tools import BlockTools
|
|
34
35
|
from chia.util.config import create_default_chia_config, lock_and_load_config, save_config
|
|
35
36
|
from chia.util.streamable import _T_Streamable
|
|
@@ -194,7 +195,8 @@ class Environment:
|
|
|
194
195
|
plot = harvester.plot_manager.plots.get(Path(path), None)
|
|
195
196
|
assert plot is not None
|
|
196
197
|
assert plot.prover.get_filename() == delta.valid.additions[path].filename
|
|
197
|
-
|
|
198
|
+
# TODO: todo_v2_plots support v2 plots
|
|
199
|
+
assert plot.prover.get_size().size_v1 == delta.valid.additions[path].size
|
|
198
200
|
assert plot.prover.get_id() == delta.valid.additions[path].plot_id
|
|
199
201
|
assert plot.prover.get_compression_level() == delta.valid.additions[path].compression_level
|
|
200
202
|
assert plot.pool_public_key == delta.valid.additions[path].pool_public_key
|
|
@@ -255,7 +257,8 @@ class Environment:
|
|
|
255
257
|
for path, plot_info in plot_manager.plots.items():
|
|
256
258
|
assert str(path) in receiver.plots()
|
|
257
259
|
assert plot_info.prover.get_filename() == receiver.plots()[str(path)].filename
|
|
258
|
-
|
|
260
|
+
# TODO: todo_v2_plots support v2 plots
|
|
261
|
+
assert plot_info.prover.get_size().size_v1 == receiver.plots()[str(path)].size
|
|
259
262
|
assert plot_info.prover.get_id() == receiver.plots()[str(path)].plot_id
|
|
260
263
|
assert plot_info.prover.get_compression_level() == receiver.plots()[str(path)].compression_level
|
|
261
264
|
assert plot_info.pool_public_key == receiver.plots()[str(path)].pool_public_key
|
|
@@ -7,7 +7,7 @@ import time
|
|
|
7
7
|
from typing import Any, Callable, Union
|
|
8
8
|
|
|
9
9
|
import pytest
|
|
10
|
-
from chia_rs import G1Element
|
|
10
|
+
from chia_rs import G1Element, PlotSize
|
|
11
11
|
from chia_rs.sized_bytes import bytes32
|
|
12
12
|
from chia_rs.sized_ints import uint8, uint32, uint64
|
|
13
13
|
|
|
@@ -185,8 +185,12 @@ def plot_sync_setup(seeded_random: random.Random) -> tuple[Receiver, list[SyncSt
|
|
|
185
185
|
# Manually add the plots we want to remove in tests
|
|
186
186
|
receiver._plots = {plot_info.filename: plot_info for plot_info in plot_info_list[0:10]}
|
|
187
187
|
receiver._total_plot_size = sum(plot.file_size for plot in receiver.plots().values())
|
|
188
|
+
# TODO: todo_v2_plots support v2 plots
|
|
188
189
|
receiver._total_effective_plot_size = int(
|
|
189
|
-
sum(
|
|
190
|
+
sum(
|
|
191
|
+
UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(PlotSize.make_v1(plot.size)))
|
|
192
|
+
for plot in receiver.plots().values()
|
|
193
|
+
)
|
|
190
194
|
)
|
|
191
195
|
sync_steps: list[SyncStepData] = [
|
|
192
196
|
SyncStepData(
|
|
@@ -266,7 +270,11 @@ async def test_to_dict(counts_only: bool, seeded_random: random.Random) -> None:
|
|
|
266
270
|
assert get_list_or_len(plot_sync_dict_1["duplicates"], not counts_only) == 0
|
|
267
271
|
assert plot_sync_dict_1["total_plot_size"] == sum(plot.file_size for plot in receiver.plots().values())
|
|
268
272
|
assert plot_sync_dict_1["total_effective_plot_size"] == int(
|
|
269
|
-
|
|
273
|
+
# TODO: todo_v2_plots support v2 plots
|
|
274
|
+
sum(
|
|
275
|
+
UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(PlotSize.make_v1(plot.size)))
|
|
276
|
+
for plot in receiver.plots().values()
|
|
277
|
+
)
|
|
270
278
|
)
|
|
271
279
|
assert plot_sync_dict_1["syncing"] is None
|
|
272
280
|
assert plot_sync_dict_1["last_sync_time"] is None
|
|
@@ -312,8 +320,12 @@ async def test_to_dict(counts_only: bool, seeded_random: random.Random) -> None:
|
|
|
312
320
|
assert get_list_or_len(sync_steps[State.duplicates].args[0], counts_only) == plot_sync_dict_3["duplicates"]
|
|
313
321
|
|
|
314
322
|
assert plot_sync_dict_3["total_plot_size"] == sum(plot.file_size for plot in receiver.plots().values())
|
|
323
|
+
# TODO: todo_v2_plots support v2 plots
|
|
315
324
|
assert plot_sync_dict_3["total_effective_plot_size"] == int(
|
|
316
|
-
sum(
|
|
325
|
+
sum(
|
|
326
|
+
UI_ACTUAL_SPACE_CONSTANT_FACTOR * int(_expected_plot_size(PlotSize.make_v1(plot.size)))
|
|
327
|
+
for plot in receiver.plots().values()
|
|
328
|
+
)
|
|
317
329
|
)
|
|
318
330
|
assert plot_sync_dict_3["last_sync_time"] > 0
|
|
319
331
|
assert plot_sync_dict_3["syncing"] is None
|
|
@@ -14,6 +14,7 @@ from chia.plotting.util import HarvestingMode
|
|
|
14
14
|
from chia.protocols.harvester_protocol import PlotSyncIdentifier, PlotSyncResponse
|
|
15
15
|
from chia.protocols.outbound_message import NodeType
|
|
16
16
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
17
|
+
from chia.server.ws_connection import WSChiaConnection
|
|
17
18
|
from chia.simulator.block_tools import BlockTools
|
|
18
19
|
|
|
19
20
|
|
|
@@ -37,11 +38,11 @@ def test_set_connection_values(bt: BlockTools, seeded_random: random.Random) ->
|
|
|
37
38
|
# Test invalid NodeType values
|
|
38
39
|
for connection_type in NodeType:
|
|
39
40
|
if connection_type != NodeType.FARMER:
|
|
40
|
-
pytest.raises(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
with pytest.raises(InvalidConnectionTypeError):
|
|
42
|
+
dummy_connection: WSChiaConnection = get_dummy_connection(
|
|
43
|
+
connection_type, farmer_connection.peer_node_id
|
|
44
|
+
) # type: ignore[assignment]
|
|
45
|
+
sender.set_connection(dummy_connection)
|
|
45
46
|
# Test setting a valid connection works
|
|
46
47
|
sender.set_connection(farmer_connection) # type:ignore[arg-type]
|
|
47
48
|
assert sender._connection is not None
|
|
@@ -74,7 +75,7 @@ def test_set_response(bt: BlockTools) -> None:
|
|
|
74
75
|
|
|
75
76
|
def new_response_message(sync_id: int, message_id: int, message_type: ProtocolMessageTypes) -> PlotSyncResponse:
|
|
76
77
|
return PlotSyncResponse(
|
|
77
|
-
plot_sync_identifier(uint64(sync_id), uint64(message_id)), int16(
|
|
78
|
+
plot_sync_identifier(uint64(sync_id), uint64(message_id)), int16(message_type.value), None
|
|
78
79
|
)
|
|
79
80
|
|
|
80
81
|
response_message = new_response_message(0, 1, ProtocolMessageTypes.plot_sync_start)
|
|
@@ -96,7 +97,7 @@ def test_set_response(bt: BlockTools) -> None:
|
|
|
96
97
|
expected_response.identifier.sync_id,
|
|
97
98
|
expected_response.identifier.message_id,
|
|
98
99
|
)
|
|
99
|
-
expired_message = PlotSyncResponse(expired_identifier, int16(
|
|
100
|
+
expired_message = PlotSyncResponse(expired_identifier, int16(ProtocolMessageTypes.plot_sync_start.value), None)
|
|
100
101
|
assert not sender.set_response(expired_message)
|
|
101
102
|
# Test invalid sync-id
|
|
102
103
|
sender._response = new_expected_response(2, 0, ProtocolMessageTypes.plot_sync_start)
|
|
@@ -20,16 +20,18 @@ from chia_rs.sized_ints import int16, uint8, uint64
|
|
|
20
20
|
from chia._tests.plot_sync.util import start_harvester_service
|
|
21
21
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
22
22
|
from chia.farmer.farmer import Farmer
|
|
23
|
+
from chia.farmer.farmer_service import FarmerService
|
|
23
24
|
from chia.harvester.harvester import Harvester
|
|
25
|
+
from chia.harvester.harvester_service import HarvesterService
|
|
24
26
|
from chia.plot_sync.receiver import Receiver
|
|
25
27
|
from chia.plot_sync.sender import Sender
|
|
26
28
|
from chia.plot_sync.util import Constants
|
|
27
29
|
from chia.plotting.manager import PlotManager
|
|
30
|
+
from chia.plotting.prover import V1Prover
|
|
28
31
|
from chia.plotting.util import PlotInfo
|
|
29
32
|
from chia.protocols.harvester_protocol import PlotSyncError, PlotSyncResponse
|
|
30
33
|
from chia.protocols.outbound_message import make_msg
|
|
31
34
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
32
|
-
from chia.server.aliases import FarmerService, HarvesterService
|
|
33
35
|
from chia.server.ws_connection import WSChiaConnection
|
|
34
36
|
from chia.simulator.block_tools import BlockTools
|
|
35
37
|
from chia.util.batches import to_batches
|
|
@@ -68,17 +70,17 @@ class TestData:
|
|
|
68
70
|
initial: bool,
|
|
69
71
|
) -> None:
|
|
70
72
|
for plot_info in loaded:
|
|
71
|
-
assert plot_info.prover.get_filename() not in self.plots
|
|
73
|
+
assert Path(plot_info.prover.get_filename()) not in self.plots
|
|
72
74
|
for plot_info in removed:
|
|
73
|
-
assert plot_info.prover.get_filename() in self.plots
|
|
75
|
+
assert Path(plot_info.prover.get_filename()) in self.plots
|
|
74
76
|
|
|
75
77
|
self.invalid = invalid
|
|
76
78
|
self.keys_missing = keys_missing
|
|
77
79
|
self.duplicates = duplicates
|
|
78
80
|
|
|
79
|
-
removed_paths: list[Path] = [p.prover.get_filename() for p in removed] if removed is not None else []
|
|
80
|
-
invalid_dict: dict[Path, int] = {p.prover.get_filename(): 0 for p in self.invalid}
|
|
81
|
-
keys_missing_set: set[Path] = {p.prover.get_filename() for p in self.keys_missing}
|
|
81
|
+
removed_paths: list[Path] = [Path(p.prover.get_filename()) for p in removed] if removed is not None else []
|
|
82
|
+
invalid_dict: dict[Path, int] = {Path(p.prover.get_filename()): 0 for p in self.invalid}
|
|
83
|
+
keys_missing_set: set[Path] = {Path(p.prover.get_filename()) for p in self.keys_missing}
|
|
82
84
|
duplicates_set: set[str] = {p.prover.get_filename() for p in self.duplicates}
|
|
83
85
|
|
|
84
86
|
# Inject invalid plots into `PlotManager` of the harvester so that the callback calls below can use them
|
|
@@ -122,9 +124,9 @@ class TestData:
|
|
|
122
124
|
await time_out_assert(60, sync_done)
|
|
123
125
|
|
|
124
126
|
for plot_info in loaded:
|
|
125
|
-
self.plots[plot_info.prover.get_filename()] = plot_info
|
|
127
|
+
self.plots[Path(plot_info.prover.get_filename())] = plot_info
|
|
126
128
|
for plot_info in removed:
|
|
127
|
-
del self.plots[plot_info.prover.get_filename()]
|
|
129
|
+
del self.plots[Path(plot_info.prover.get_filename())]
|
|
128
130
|
|
|
129
131
|
def validate_plot_sync(self) -> None:
|
|
130
132
|
assert len(self.plots) == len(self.plot_sync_receiver.plots())
|
|
@@ -140,7 +142,7 @@ class TestData:
|
|
|
140
142
|
assert plot_info.pool_contract_puzzle_hash == synced_plot.pool_contract_puzzle_hash
|
|
141
143
|
assert plot_info.plot_public_key == synced_plot.plot_public_key
|
|
142
144
|
assert plot_info.file_size == synced_plot.file_size
|
|
143
|
-
assert uint64(
|
|
145
|
+
assert uint64(plot_info.time_modified) == synced_plot.time_modified
|
|
144
146
|
for plot_info in self.invalid:
|
|
145
147
|
assert plot_info.prover.get_filename() not in self.plot_sync_receiver.plots()
|
|
146
148
|
assert plot_info.prover.get_filename() in self.plot_sync_receiver.invalid()
|
|
@@ -284,7 +286,7 @@ def create_example_plots(count: int, seeded_random: random.Random) -> list[PlotI
|
|
|
284
286
|
|
|
285
287
|
return [
|
|
286
288
|
PlotInfo(
|
|
287
|
-
prover=DiskProver(f"{x}", bytes32.random(seeded_random), 25 + x % 26),
|
|
289
|
+
prover=V1Prover(DiskProver(f"{x}", bytes32.random(seeded_random), 25 + x % 26)),
|
|
288
290
|
pool_public_key=None,
|
|
289
291
|
pool_contract_puzzle_hash=None,
|
|
290
292
|
plot_public_key=G1Element(),
|
|
@@ -416,7 +418,7 @@ async def test_sync_reset_cases(
|
|
|
416
418
|
# Inject some data into `PlotManager` of the harvester so that we can validate the reset worked and triggered a
|
|
417
419
|
# fresh sync of all available data of the plot manager
|
|
418
420
|
for plot_info in plots[0:10]:
|
|
419
|
-
test_data.plots[plot_info.prover.get_filename()] = plot_info
|
|
421
|
+
test_data.plots[Path(plot_info.prover.get_filename())] = plot_info
|
|
420
422
|
plot_manager.plots = test_data.plots
|
|
421
423
|
test_data.invalid = plots[10:20]
|
|
422
424
|
test_data.keys_missing = plots[20:30]
|
|
@@ -424,8 +426,8 @@ async def test_sync_reset_cases(
|
|
|
424
426
|
sender: Sender = test_runner.test_data[0].plot_sync_sender
|
|
425
427
|
started_sync_id: uint64 = uint64(0)
|
|
426
428
|
|
|
427
|
-
plot_manager.failed_to_open_filenames = {p.prover.get_filename(): 0 for p in test_data.invalid}
|
|
428
|
-
plot_manager.no_key_filenames = {p.prover.get_filename() for p in test_data.keys_missing}
|
|
429
|
+
plot_manager.failed_to_open_filenames = {Path(p.prover.get_filename()): 0 for p in test_data.invalid}
|
|
430
|
+
plot_manager.no_key_filenames = {Path(p.prover.get_filename()) for p in test_data.keys_missing}
|
|
429
431
|
|
|
430
432
|
async def wait_for_reset() -> bool:
|
|
431
433
|
assert started_sync_id != 0
|
chia/_tests/plot_sync/util.py
CHANGED
|
@@ -11,11 +11,12 @@ from chia_rs.sized_ints import uint16, uint64
|
|
|
11
11
|
|
|
12
12
|
from chia._tests.util.split_managers import SplitAsyncManager, split_async_manager
|
|
13
13
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
14
|
+
from chia.farmer.farmer_service import FarmerService
|
|
14
15
|
from chia.harvester.harvester import Harvester
|
|
16
|
+
from chia.harvester.harvester_service import HarvesterService
|
|
15
17
|
from chia.plot_sync.sender import Sender
|
|
16
18
|
from chia.protocols.harvester_protocol import PlotSyncIdentifier
|
|
17
19
|
from chia.protocols.outbound_message import Message, NodeType
|
|
18
|
-
from chia.server.aliases import FarmerService, HarvesterService
|
|
19
20
|
from chia.types.peer_info import PeerInfo, UnresolvedPeerInfo
|
|
20
21
|
|
|
21
22
|
|
|
@@ -38,7 +39,7 @@ def get_dummy_connection(node_type: NodeType, peer_id: bytes32) -> WSChiaConnect
|
|
|
38
39
|
|
|
39
40
|
|
|
40
41
|
def plot_sync_identifier(current_sync_id: uint64, message_id: uint64) -> PlotSyncIdentifier:
|
|
41
|
-
return PlotSyncIdentifier(uint64(
|
|
42
|
+
return PlotSyncIdentifier(uint64(time.time()), current_sync_id, message_id)
|
|
42
43
|
|
|
43
44
|
|
|
44
45
|
@contextlib.asynccontextmanager
|
|
@@ -13,12 +13,14 @@ from typing import Callable, Optional, cast
|
|
|
13
13
|
import pytest
|
|
14
14
|
from chia_rs import G1Element
|
|
15
15
|
from chia_rs.sized_ints import uint16, uint32
|
|
16
|
+
from chiapos import DiskProver
|
|
16
17
|
|
|
17
18
|
from chia._tests.plotting.util import get_test_plots
|
|
18
19
|
from chia._tests.util.misc import boolean_datacases
|
|
19
20
|
from chia._tests.util.time_out_assert import time_out_assert
|
|
20
21
|
from chia.plotting.cache import CURRENT_VERSION, CacheDataV1
|
|
21
22
|
from chia.plotting.manager import Cache, PlotManager
|
|
23
|
+
from chia.plotting.prover import V1Prover
|
|
22
24
|
from chia.plotting.util import (
|
|
23
25
|
PlotInfo,
|
|
24
26
|
PlotRefreshEvents,
|
|
@@ -115,10 +117,9 @@ class PlotRefreshTester:
|
|
|
115
117
|
if plot_info.prover.get_filename() == value.prover.get_filename():
|
|
116
118
|
values_found += 1
|
|
117
119
|
continue
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
continue
|
|
120
|
+
elif value in expected_list:
|
|
121
|
+
values_found += 1
|
|
122
|
+
continue
|
|
122
123
|
if values_found != len(expected_list):
|
|
123
124
|
log.error(f"{name} invalid: values_found {values_found} expected {len(expected_list)}")
|
|
124
125
|
return
|
|
@@ -507,7 +508,8 @@ async def test_plot_info_caching(environment, bt):
|
|
|
507
508
|
assert plot_manager.plots[path].prover.get_filename() == plot_info.prover.get_filename()
|
|
508
509
|
assert plot_manager.plots[path].prover.get_id() == plot_info.prover.get_id()
|
|
509
510
|
assert plot_manager.plots[path].prover.get_memo() == plot_info.prover.get_memo()
|
|
510
|
-
assert plot_manager.plots[path].prover.get_size() == plot_info.prover.get_size()
|
|
511
|
+
assert plot_manager.plots[path].prover.get_size().size_v1 == plot_info.prover.get_size().size_v1
|
|
512
|
+
assert plot_manager.plots[path].prover.get_size().size_v2 == plot_info.prover.get_size().size_v2
|
|
511
513
|
assert plot_manager.plots[path].prover.get_compression_level() == plot_info.prover.get_compression_level()
|
|
512
514
|
assert plot_manager.plots[path].pool_public_key == plot_info.pool_public_key
|
|
513
515
|
assert plot_manager.plots[path].pool_contract_puzzle_hash == plot_info.pool_contract_puzzle_hash
|
|
@@ -743,6 +745,20 @@ async def test_recursive_plot_scan(environment: Environment) -> None:
|
|
|
743
745
|
await env.refresh_tester.run(expected_result)
|
|
744
746
|
|
|
745
747
|
|
|
748
|
+
@pytest.mark.anyio
|
|
749
|
+
async def test_disk_prover_from_bytes(environment: Environment):
|
|
750
|
+
env: Environment = environment
|
|
751
|
+
expected_result = PlotRefreshResult()
|
|
752
|
+
expected_result.loaded = env.dir_1.plot_info_list() # type: ignore[assignment]
|
|
753
|
+
expected_result.processed = len(env.dir_1)
|
|
754
|
+
add_plot_directory(env.root_path, str(env.dir_1.path))
|
|
755
|
+
await env.refresh_tester.run(expected_result)
|
|
756
|
+
_, plot_info = next(iter(env.refresh_tester.plot_manager.plots.items()))
|
|
757
|
+
recreated_prover = V1Prover(DiskProver.from_bytes(bytes(plot_info.prover)))
|
|
758
|
+
assert recreated_prover.get_id() == plot_info.prover.get_id()
|
|
759
|
+
assert recreated_prover.get_filename() == plot_info.prover.get_filename()
|
|
760
|
+
|
|
761
|
+
|
|
746
762
|
@boolean_datacases(name="follow_links", false="no_follow", true="follow")
|
|
747
763
|
@pytest.mark.anyio
|
|
748
764
|
async def test_recursive_plot_scan_symlinks(environment: Environment, follow_links: bool) -> None:
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import tempfile
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from unittest.mock import MagicMock, patch
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
from chia_rs.sized_bytes import bytes32
|
|
9
|
+
from chia_rs.sized_ints import uint8
|
|
10
|
+
|
|
11
|
+
from chia.plotting.prover import PlotVersion, V1Prover, V2Prover, get_prover_from_bytes, get_prover_from_file
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class TestProver:
|
|
15
|
+
def test_v2_prover_init_with_nonexistent_file(self) -> None:
|
|
16
|
+
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
17
|
+
assert prover.get_version() == PlotVersion.V2
|
|
18
|
+
assert prover.get_filename() == "/nonexistent/path/test.plot2"
|
|
19
|
+
|
|
20
|
+
def test_v2_prover_get_size_raises_error(self) -> None:
|
|
21
|
+
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
22
|
+
with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
|
|
23
|
+
prover.get_size()
|
|
24
|
+
|
|
25
|
+
def test_v2_prover_get_memo_raises_error(self) -> None:
|
|
26
|
+
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
27
|
+
with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
|
|
28
|
+
prover.get_memo()
|
|
29
|
+
|
|
30
|
+
def test_v2_prover_get_compression_level(self) -> None:
|
|
31
|
+
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
32
|
+
assert prover.get_compression_level() == uint8(0)
|
|
33
|
+
|
|
34
|
+
def test_v2_prover_get_id_raises_error(self) -> None:
|
|
35
|
+
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
36
|
+
with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
|
|
37
|
+
prover.get_id()
|
|
38
|
+
|
|
39
|
+
def test_v2_prover_get_qualities_for_challenge_raises_error(self) -> None:
|
|
40
|
+
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
41
|
+
with pytest.raises(
|
|
42
|
+
AssertionError, match="V2 plot format does not support qualities directly, use partial proofs"
|
|
43
|
+
):
|
|
44
|
+
prover.get_qualities_for_challenge(bytes32(b"1" * 32))
|
|
45
|
+
|
|
46
|
+
def test_v2_prover_get_full_proof_raises_error(self) -> None:
|
|
47
|
+
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
48
|
+
with pytest.raises(AssertionError, match="V2 plot format require solver to get full proof"):
|
|
49
|
+
prover.get_full_proof(bytes32(b"1" * 32), 0)
|
|
50
|
+
|
|
51
|
+
def test_v2_prover_bytes_raises_error(self) -> None:
|
|
52
|
+
prover = V2Prover("/nonexistent/path/test.plot2")
|
|
53
|
+
with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
|
|
54
|
+
bytes(prover)
|
|
55
|
+
|
|
56
|
+
def test_v2_prover_from_bytes_raises_error(self) -> None:
|
|
57
|
+
with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
|
|
58
|
+
V2Prover.from_bytes(b"test_data")
|
|
59
|
+
|
|
60
|
+
def test_get_prover_from_file(self) -> None:
|
|
61
|
+
prover = get_prover_from_file("/nonexistent/path/test.plot2")
|
|
62
|
+
assert prover.get_version() == PlotVersion.V2
|
|
63
|
+
with pytest.raises(NotImplementedError, match="V2 plot format is not yet implemented"):
|
|
64
|
+
prover.get_size()
|
|
65
|
+
|
|
66
|
+
def test_get_prover_from_file_with_plot1_still_works(self) -> None:
|
|
67
|
+
with tempfile.NamedTemporaryFile(suffix=".plot", delete=False) as f:
|
|
68
|
+
temp_path = f.name
|
|
69
|
+
try:
|
|
70
|
+
with pytest.raises(Exception) as exc_info:
|
|
71
|
+
get_prover_from_file(temp_path)
|
|
72
|
+
assert not isinstance(exc_info.value, NotImplementedError)
|
|
73
|
+
finally:
|
|
74
|
+
Path(temp_path).unlink()
|
|
75
|
+
|
|
76
|
+
def test_unsupported_file_extension_raises_value_error(self) -> None:
|
|
77
|
+
with pytest.raises(ValueError, match="Unsupported plot file"):
|
|
78
|
+
get_prover_from_file("/nonexistent/path/test.txt")
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class TestV1Prover:
|
|
82
|
+
def test_v1_prover_get_version(self) -> None:
|
|
83
|
+
"""Test that V1Prover.get_version() returns PlotVersion.V1"""
|
|
84
|
+
mock_disk_prover = MagicMock()
|
|
85
|
+
prover = V1Prover(mock_disk_prover)
|
|
86
|
+
assert prover.get_version() == PlotVersion.V1
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class TestGetProverFromBytes:
|
|
90
|
+
def test_get_prover_from_bytes_v2_plot(self) -> None:
|
|
91
|
+
with patch("chia.plotting.prover.V2Prover.from_bytes") as mock_v2_from_bytes:
|
|
92
|
+
mock_prover = MagicMock()
|
|
93
|
+
mock_v2_from_bytes.return_value = mock_prover
|
|
94
|
+
result = get_prover_from_bytes("test.plot2", b"test_data")
|
|
95
|
+
assert result == mock_prover
|
|
96
|
+
|
|
97
|
+
def test_get_prover_from_bytes_v1_plot(self) -> None:
|
|
98
|
+
with patch("chia.plotting.prover.DiskProver") as mock_disk_prover_class:
|
|
99
|
+
mock_disk_prover = MagicMock()
|
|
100
|
+
mock_disk_prover_class.from_bytes.return_value = mock_disk_prover
|
|
101
|
+
result = get_prover_from_bytes("test.plot", b"test_data")
|
|
102
|
+
assert isinstance(result, V1Prover)
|
|
103
|
+
|
|
104
|
+
def test_get_prover_from_bytes_unsupported_extension(self) -> None:
|
|
105
|
+
with pytest.raises(ValueError, match="Unsupported plot file"):
|
|
106
|
+
get_prover_from_bytes("test.txt", b"test_data")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
|
+
import re
|
|
4
5
|
from dataclasses import dataclass
|
|
5
6
|
from io import StringIO
|
|
6
7
|
from typing import Optional, cast
|
|
@@ -9,7 +10,7 @@ import click
|
|
|
9
10
|
import pytest
|
|
10
11
|
from chia_rs import G1Element
|
|
11
12
|
from chia_rs.sized_bytes import bytes32
|
|
12
|
-
from chia_rs.sized_ints import uint32, uint64
|
|
13
|
+
from chia_rs.sized_ints import uint16, uint32, uint64
|
|
13
14
|
|
|
14
15
|
# TODO: update after resolution in https://github.com/pytest-dev/pytest/issues/7469
|
|
15
16
|
from pytest_mock import MockerFixture
|
|
@@ -46,7 +47,7 @@ from chia.util.errors import CliRpcConnectionError
|
|
|
46
47
|
from chia.wallet.util.address_type import AddressType
|
|
47
48
|
from chia.wallet.util.tx_config import DEFAULT_TX_CONFIG
|
|
48
49
|
from chia.wallet.util.wallet_types import WalletType
|
|
49
|
-
from chia.wallet.wallet_request_types import PWStatus
|
|
50
|
+
from chia.wallet.wallet_request_types import GetWallets, PWStatus
|
|
50
51
|
from chia.wallet.wallet_rpc_client import WalletRpcClient
|
|
51
52
|
from chia.wallet.wallet_state_manager import WalletStateManager
|
|
52
53
|
|
|
@@ -153,9 +154,9 @@ async def test_plotnft_cli_create(
|
|
|
153
154
|
]
|
|
154
155
|
)
|
|
155
156
|
|
|
156
|
-
summaries_response = await wallet_rpc.get_wallets(WalletType.POOLING_WALLET)
|
|
157
|
-
assert len(summaries_response) == 1
|
|
158
|
-
wallet_id: int = summaries_response[0]
|
|
157
|
+
summaries_response = await wallet_rpc.get_wallets(GetWallets(type=uint16(WalletType.POOLING_WALLET)))
|
|
158
|
+
assert len(summaries_response.wallets) == 1
|
|
159
|
+
wallet_id: int = summaries_response.wallets[0].id
|
|
159
160
|
|
|
160
161
|
await verify_pool_state(wallet_rpc, wallet_id, PoolSingletonState.SELF_POOLING)
|
|
161
162
|
|
|
@@ -484,7 +485,7 @@ async def test_plotnft_cli_join(
|
|
|
484
485
|
wallet_id = await create_new_plotnft(wallet_environments)
|
|
485
486
|
|
|
486
487
|
# Test joining the same pool again
|
|
487
|
-
with pytest.raises(click.ClickException, match="already farming to pool http://pool.example.com"):
|
|
488
|
+
with pytest.raises(click.ClickException, match=re.escape("already farming to pool http://pool.example.com")):
|
|
488
489
|
await JoinPlotNFTCMD(
|
|
489
490
|
rpc_info=NeedsWalletRPC(
|
|
490
491
|
client_info=client_info,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import copy
|
|
4
|
+
import re
|
|
4
5
|
from unittest import TestCase
|
|
5
6
|
|
|
6
7
|
import pytest
|
|
@@ -31,6 +32,7 @@ from chia.pools.pool_wallet_info import PoolState
|
|
|
31
32
|
from chia.types.blockchain_format.coin import Coin
|
|
32
33
|
from chia.types.blockchain_format.program import Program
|
|
33
34
|
from chia.types.coin_spend import make_spend
|
|
35
|
+
from chia.util.errors import Err
|
|
34
36
|
from chia.wallet.puzzles import singleton_top_layer
|
|
35
37
|
from chia.wallet.puzzles.p2_conditions import puzzle_for_conditions
|
|
36
38
|
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import (
|
|
@@ -242,7 +244,8 @@ class TestPoolPuzzles(TestCase):
|
|
|
242
244
|
)
|
|
243
245
|
# Spend it and hope it fails!
|
|
244
246
|
with pytest.raises(
|
|
245
|
-
BadSpendBundleError,
|
|
247
|
+
BadSpendBundleError,
|
|
248
|
+
match=re.escape(f"condition validation failure {Err.ASSERT_ANNOUNCE_CONSUMED_FAILED!s}"),
|
|
246
249
|
):
|
|
247
250
|
coin_db.update_coin_store_for_spend_bundle(
|
|
248
251
|
SpendBundle([singleton_coinsol], G2Element()), time, DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM
|
|
@@ -269,7 +272,8 @@ class TestPoolPuzzles(TestCase):
|
|
|
269
272
|
)
|
|
270
273
|
# Spend it and hope it fails!
|
|
271
274
|
with pytest.raises(
|
|
272
|
-
BadSpendBundleError,
|
|
275
|
+
BadSpendBundleError,
|
|
276
|
+
match=re.escape(f"condition validation failure {Err.ASSERT_ANNOUNCE_CONSUMED_FAILED!s}"),
|
|
273
277
|
):
|
|
274
278
|
coin_db.update_coin_store_for_spend_bundle(
|
|
275
279
|
SpendBundle([singleton_coinsol, bad_coinsol], G2Element()), time, DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM
|
|
@@ -320,7 +324,10 @@ class TestPoolPuzzles(TestCase):
|
|
|
320
324
|
(data + singleton.name() + DEFAULT_CONSTANTS.AGG_SIG_ME_ADDITIONAL_DATA),
|
|
321
325
|
)
|
|
322
326
|
# Spend it and hope it fails!
|
|
323
|
-
with pytest.raises(
|
|
327
|
+
with pytest.raises(
|
|
328
|
+
BadSpendBundleError,
|
|
329
|
+
match=re.escape(f"condition validation failure {Err.ASSERT_HEIGHT_RELATIVE_FAILED!s}"),
|
|
330
|
+
):
|
|
324
331
|
coin_db.update_coin_store_for_spend_bundle(
|
|
325
332
|
SpendBundle([return_coinsol], sig), time, DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM
|
|
326
333
|
)
|