chia-blockchain 2.5.6rc2__py3-none-any.whl → 2.5.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +252 -77
- 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 +9 -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 -33
- 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 +15 -16
- chia/full_node/mempool_manager.py +73 -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 +52 -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/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.7.dist-info}/METADATA +31 -31
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.dist-info}/RECORD +368 -240
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.dist-info}/WHEEL +1 -1
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.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.7.dist-info/licenses}/LICENSE +0 -0
chia/solver/solver.py
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import asyncio
|
|
4
|
+
import contextlib
|
|
5
|
+
import logging
|
|
6
|
+
from collections.abc import AsyncIterator
|
|
7
|
+
from concurrent.futures.thread import ThreadPoolExecutor
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
|
|
10
|
+
|
|
11
|
+
from chia_rs import ConsensusConstants
|
|
12
|
+
|
|
13
|
+
from chia.protocols.outbound_message import NodeType
|
|
14
|
+
from chia.rpc.rpc_server import StateChangedProtocol, default_get_connections
|
|
15
|
+
from chia.server.server import ChiaServer
|
|
16
|
+
from chia.server.ws_connection import WSChiaConnection
|
|
17
|
+
from chia.types.blockchain_format.proof_of_space import solve_proof
|
|
18
|
+
|
|
19
|
+
log = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Solver:
|
|
23
|
+
if TYPE_CHECKING:
|
|
24
|
+
from chia.rpc.rpc_server import RpcServiceProtocol
|
|
25
|
+
|
|
26
|
+
_protocol_check: ClassVar[RpcServiceProtocol] = cast("Solver", None)
|
|
27
|
+
|
|
28
|
+
root_path: Path
|
|
29
|
+
_server: Optional[ChiaServer]
|
|
30
|
+
_shut_down: bool
|
|
31
|
+
started: bool = False
|
|
32
|
+
executor: ThreadPoolExecutor
|
|
33
|
+
state_changed_callback: Optional[StateChangedProtocol] = None
|
|
34
|
+
constants: ConsensusConstants
|
|
35
|
+
event_loop: asyncio.events.AbstractEventLoop
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def server(self) -> ChiaServer:
|
|
39
|
+
if self._server is None:
|
|
40
|
+
raise RuntimeError("server not assigned")
|
|
41
|
+
|
|
42
|
+
return self._server
|
|
43
|
+
|
|
44
|
+
def __init__(self, root_path: Path, config: dict[str, Any], constants: ConsensusConstants):
|
|
45
|
+
self.log = log
|
|
46
|
+
self.root_path = root_path
|
|
47
|
+
self.config = config
|
|
48
|
+
self._shut_down = False
|
|
49
|
+
num_threads = config["num_threads"]
|
|
50
|
+
self.log.info(f"Initializing solver with {num_threads} threads")
|
|
51
|
+
self.executor = ThreadPoolExecutor(max_workers=num_threads, thread_name_prefix="solver-")
|
|
52
|
+
self._server = None
|
|
53
|
+
self.constants = constants
|
|
54
|
+
self.state_changed_callback: Optional[StateChangedProtocol] = None
|
|
55
|
+
self.log.info("Solver initialization complete")
|
|
56
|
+
|
|
57
|
+
@contextlib.asynccontextmanager
|
|
58
|
+
async def manage(self) -> AsyncIterator[None]:
|
|
59
|
+
try:
|
|
60
|
+
self.log.info("Starting solver service")
|
|
61
|
+
self.started = True
|
|
62
|
+
self.log.info("Solver service started successfully")
|
|
63
|
+
yield
|
|
64
|
+
finally:
|
|
65
|
+
self.log.info("Shutting down solver service")
|
|
66
|
+
self._shut_down = True
|
|
67
|
+
self.executor.shutdown(wait=True)
|
|
68
|
+
self.log.info("Solver service shutdown complete")
|
|
69
|
+
|
|
70
|
+
def solve(self, partial_proof: bytes) -> Optional[bytes]:
|
|
71
|
+
self.log.debug(f"Solve request: partial={partial_proof.hex()}")
|
|
72
|
+
try:
|
|
73
|
+
return solve_proof(partial_proof)
|
|
74
|
+
except Exception:
|
|
75
|
+
self.log.exception("solve_proof()")
|
|
76
|
+
return None
|
|
77
|
+
|
|
78
|
+
def get_connections(self, request_node_type: Optional[NodeType]) -> list[dict[str, Any]]:
|
|
79
|
+
return default_get_connections(server=self.server, request_node_type=request_node_type)
|
|
80
|
+
|
|
81
|
+
async def on_connect(self, connection: WSChiaConnection) -> None:
|
|
82
|
+
if self.server.is_trusted_peer(connection, self.config.get("trusted_peers", {})):
|
|
83
|
+
self.log.info(f"Accepting connection from {connection.get_peer_logging()}")
|
|
84
|
+
return
|
|
85
|
+
if not self.config.get("trusted_peers_only", True):
|
|
86
|
+
self.log.info(
|
|
87
|
+
f"trusted peers check disabled, Accepting connection from untrusted {connection.get_peer_logging()}"
|
|
88
|
+
)
|
|
89
|
+
return
|
|
90
|
+
self.log.warning(f"Rejecting untrusted connection from {connection.get_peer_logging()}")
|
|
91
|
+
await connection.close()
|
|
92
|
+
|
|
93
|
+
async def on_disconnect(self, connection: WSChiaConnection) -> None:
|
|
94
|
+
self.log.info(f"peer disconnected {connection.get_peer_logging()}")
|
|
95
|
+
|
|
96
|
+
def set_server(self, server: ChiaServer) -> None:
|
|
97
|
+
self._server = server
|
|
98
|
+
|
|
99
|
+
def _set_state_changed_callback(self, callback: StateChangedProtocol) -> None:
|
|
100
|
+
self.state_changed_callback = callback
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import TYPE_CHECKING, ClassVar, Optional, cast
|
|
5
|
+
|
|
6
|
+
from chia.protocols.outbound_message import Message, make_msg
|
|
7
|
+
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
8
|
+
from chia.protocols.solver_protocol import SolverInfo, SolverResponse
|
|
9
|
+
from chia.server.api_protocol import ApiMetadata
|
|
10
|
+
from chia.solver.solver import Solver
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class SolverAPI:
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from chia.server.api_protocol import ApiProtocol
|
|
16
|
+
|
|
17
|
+
_protocol_check: ClassVar[ApiProtocol] = cast("SolverAPI", None)
|
|
18
|
+
|
|
19
|
+
log: logging.Logger
|
|
20
|
+
solver: Solver
|
|
21
|
+
metadata: ClassVar[ApiMetadata] = ApiMetadata()
|
|
22
|
+
|
|
23
|
+
def __init__(self, solver: Solver) -> None:
|
|
24
|
+
self.log = logging.getLogger(__name__)
|
|
25
|
+
self.solver = solver
|
|
26
|
+
|
|
27
|
+
def ready(self) -> bool:
|
|
28
|
+
return self.solver.started
|
|
29
|
+
|
|
30
|
+
@metadata.request(peer_required=False, reply_types=[ProtocolMessageTypes.solution_response])
|
|
31
|
+
async def solve(
|
|
32
|
+
self,
|
|
33
|
+
request: SolverInfo,
|
|
34
|
+
) -> Optional[Message]:
|
|
35
|
+
"""
|
|
36
|
+
Solve a V2 plot partial proof to get the full proof of space.
|
|
37
|
+
This is called by the farmer when it receives V2 parital proofs from harvester.
|
|
38
|
+
"""
|
|
39
|
+
if not self.solver.started:
|
|
40
|
+
self.log.error("Solver is not started")
|
|
41
|
+
return None
|
|
42
|
+
|
|
43
|
+
self.log.debug(f"Solving partial {request.partial_proof.hex()}")
|
|
44
|
+
|
|
45
|
+
try:
|
|
46
|
+
proof = self.solver.solve(request.partial_proof)
|
|
47
|
+
if proof is None:
|
|
48
|
+
self.log.warning(f"Solver returned no proof for parital {request.partial_proof.hex()}")
|
|
49
|
+
return None
|
|
50
|
+
|
|
51
|
+
self.log.debug(f"Successfully solved partial proof, returning {len(proof)} byte proof")
|
|
52
|
+
return make_msg(
|
|
53
|
+
ProtocolMessageTypes.solution_response,
|
|
54
|
+
SolverResponse(proof=proof, partial_proof=request.partial_proof),
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
except Exception as e:
|
|
58
|
+
self.log.error(f"Error solving parital {request.partial_proof.hex()}: {e}")
|
|
59
|
+
return None
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast
|
|
4
|
+
|
|
5
|
+
from chia.rpc.rpc_server import Endpoint, EndpointResult
|
|
6
|
+
from chia.solver.solver import Solver
|
|
7
|
+
from chia.util.ws_message import WsRpcMessage
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class SolverRpcApi:
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from chia.rpc.rpc_server import RpcApiProtocol
|
|
13
|
+
|
|
14
|
+
_protocol_check: ClassVar[RpcApiProtocol] = cast("SolverRpcApi", None)
|
|
15
|
+
|
|
16
|
+
def __init__(self, solver: Solver):
|
|
17
|
+
self.service = solver
|
|
18
|
+
self.service_name = "chia_solver"
|
|
19
|
+
|
|
20
|
+
def get_routes(self) -> dict[str, Endpoint]:
|
|
21
|
+
return {
|
|
22
|
+
"/get_state": self.get_state,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async def _state_changed(self, change: str, change_data: Optional[dict[str, Any]] = None) -> list[WsRpcMessage]:
|
|
26
|
+
return []
|
|
27
|
+
|
|
28
|
+
async def get_state(self, _: dict[str, Any]) -> EndpointResult:
|
|
29
|
+
return {
|
|
30
|
+
"started": self.service.started,
|
|
31
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from chia.rpc.rpc_client import RpcClient
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class SolverRpcClient(RpcClient):
|
|
9
|
+
"""
|
|
10
|
+
Client to Chia RPC, connects to a local solver. Uses HTTP/JSON, and converts back from
|
|
11
|
+
JSON into native python objects before returning. All api calls use POST requests.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
async def get_state(self) -> dict[str, Any]:
|
|
15
|
+
"""Get solver state."""
|
|
16
|
+
return await self.fetch("get_state", {})
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from chia.server.start_service import Service
|
|
4
|
+
from chia.solver.solver import Solver
|
|
5
|
+
from chia.solver.solver_api import SolverAPI
|
|
6
|
+
from chia.solver.solver_rpc_api import SolverRpcApi
|
|
7
|
+
|
|
8
|
+
SolverService = Service[Solver, SolverAPI, SolverRpcApi]
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import pathlib
|
|
5
|
+
import sys
|
|
6
|
+
from multiprocessing import freeze_support
|
|
7
|
+
from typing import Any, Optional
|
|
8
|
+
|
|
9
|
+
from chia_rs import ConsensusConstants
|
|
10
|
+
from chia_rs.sized_ints import uint16
|
|
11
|
+
|
|
12
|
+
from chia.apis import ApiProtocolRegistry
|
|
13
|
+
from chia.consensus.constants import replace_str_to_bytes
|
|
14
|
+
from chia.consensus.default_constants import DEFAULT_CONSTANTS, update_testnet_overrides
|
|
15
|
+
from chia.protocols.outbound_message import NodeType
|
|
16
|
+
from chia.server.signal_handlers import SignalHandlers
|
|
17
|
+
from chia.server.start_service import Service, async_run
|
|
18
|
+
from chia.solver.solver import Solver
|
|
19
|
+
from chia.solver.solver_api import SolverAPI
|
|
20
|
+
from chia.solver.solver_rpc_api import SolverRpcApi
|
|
21
|
+
from chia.solver.solver_service import SolverService
|
|
22
|
+
from chia.util.chia_logging import initialize_service_logging
|
|
23
|
+
from chia.util.config import load_config, load_config_cli
|
|
24
|
+
from chia.util.default_root import resolve_root_path
|
|
25
|
+
from chia.util.task_timing import maybe_manage_task_instrumentation
|
|
26
|
+
|
|
27
|
+
# See: https://bugs.python.org/issue29288
|
|
28
|
+
"".encode("idna")
|
|
29
|
+
|
|
30
|
+
SERVICE_NAME = "solver"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def create_solver_service(
|
|
34
|
+
root_path: pathlib.Path,
|
|
35
|
+
config: dict[str, Any],
|
|
36
|
+
consensus_constants: ConsensusConstants,
|
|
37
|
+
connect_to_daemon: bool = True,
|
|
38
|
+
override_capabilities: Optional[list[tuple[uint16, str]]] = None,
|
|
39
|
+
) -> SolverService:
|
|
40
|
+
service_config = config[SERVICE_NAME]
|
|
41
|
+
|
|
42
|
+
network_id = service_config["selected_network"]
|
|
43
|
+
upnp_list = []
|
|
44
|
+
if service_config["enable_upnp"]:
|
|
45
|
+
upnp_list = [service_config["port"]]
|
|
46
|
+
|
|
47
|
+
node = Solver(root_path, service_config, consensus_constants)
|
|
48
|
+
peer_api = SolverAPI(node)
|
|
49
|
+
network_id = service_config["selected_network"]
|
|
50
|
+
|
|
51
|
+
rpc_info = None
|
|
52
|
+
if service_config.get("start_rpc_server", True):
|
|
53
|
+
rpc_info = (SolverRpcApi, service_config["rpc_port"])
|
|
54
|
+
|
|
55
|
+
return Service(
|
|
56
|
+
root_path=root_path,
|
|
57
|
+
config=config,
|
|
58
|
+
node=node,
|
|
59
|
+
peer_api=peer_api,
|
|
60
|
+
node_type=NodeType.SOLVER,
|
|
61
|
+
advertised_port=service_config["port"],
|
|
62
|
+
service_name=SERVICE_NAME,
|
|
63
|
+
upnp_ports=upnp_list,
|
|
64
|
+
on_connect_callback=node.on_connect,
|
|
65
|
+
network_id=network_id,
|
|
66
|
+
rpc_info=rpc_info,
|
|
67
|
+
connect_to_daemon=connect_to_daemon,
|
|
68
|
+
override_capabilities=override_capabilities,
|
|
69
|
+
class_for_type=ApiProtocolRegistry,
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
async def async_main(service_config: dict[str, Any], root_path: pathlib.Path) -> int:
|
|
74
|
+
config = load_config(root_path, "config.yaml", fill_missing_services=True)
|
|
75
|
+
config[SERVICE_NAME] = service_config
|
|
76
|
+
network_id = service_config["selected_network"]
|
|
77
|
+
overrides = service_config["network_overrides"]["constants"][network_id]
|
|
78
|
+
update_testnet_overrides(network_id, overrides)
|
|
79
|
+
updated_constants = replace_str_to_bytes(DEFAULT_CONSTANTS, **overrides)
|
|
80
|
+
initialize_service_logging(service_name=SERVICE_NAME, config=config, root_path=root_path)
|
|
81
|
+
|
|
82
|
+
service = create_solver_service(root_path, config, updated_constants)
|
|
83
|
+
async with SignalHandlers.manage() as signal_handlers:
|
|
84
|
+
await service.setup_process_global_state(signal_handlers=signal_handlers)
|
|
85
|
+
await service.run()
|
|
86
|
+
|
|
87
|
+
return 0
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def main() -> int:
|
|
91
|
+
freeze_support()
|
|
92
|
+
root_path = resolve_root_path(override=None)
|
|
93
|
+
|
|
94
|
+
with maybe_manage_task_instrumentation(
|
|
95
|
+
enable=os.environ.get(f"CHIA_INSTRUMENT_{SERVICE_NAME.upper()}") is not None
|
|
96
|
+
):
|
|
97
|
+
service_config = load_config_cli(root_path, "config.yaml", SERVICE_NAME)
|
|
98
|
+
return async_run(coro=async_main(service_config, root_path=root_path))
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
if __name__ == "__main__":
|
|
102
|
+
sys.exit(main())
|
|
@@ -1,28 +1,3 @@
|
|
|
1
|
-
##
|
|
2
|
-
## Bundle of CA Root Certificates
|
|
3
|
-
##
|
|
4
|
-
## Certificate data from Mozilla as of: Tue May 20 03:12:02 2025 GMT
|
|
5
|
-
##
|
|
6
|
-
## Find updated versions here: https://curl.se/docs/caextract.html
|
|
7
|
-
##
|
|
8
|
-
## This is a bundle of X.509 certificates of public Certificate Authorities
|
|
9
|
-
## (CA). These were automatically extracted from Mozilla's root certificates
|
|
10
|
-
## file (certdata.txt). This file can be found in the mozilla source tree:
|
|
11
|
-
## https://raw.githubusercontent.com/mozilla-firefox/firefox/refs/heads/release/security/nss/lib/ckfw/builtins/certdata.txt
|
|
12
|
-
##
|
|
13
|
-
## It contains the certificates in PEM format and therefore
|
|
14
|
-
## can be directly used with curl / libcurl / php_curl, or with
|
|
15
|
-
## an Apache+mod_ssl webserver for SSL client authentication.
|
|
16
|
-
## Just configure this file as the SSLCACertificateFile.
|
|
17
|
-
##
|
|
18
|
-
## Conversion done with mk-ca-bundle.pl version 1.29.
|
|
19
|
-
## SHA256: 8944ec6b572b577daee4fc681a425881f841ec2660e4cb5f0eee727f84620697
|
|
20
|
-
##
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
Entrust Root Certification Authority
|
|
24
|
-
====================================
|
|
25
|
-
-----BEGIN CERTIFICATE-----
|
|
26
1
|
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
|
|
27
2
|
BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
|
|
28
3
|
b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
|
|
@@ -44,11 +19,9 @@ Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
|
|
|
44
19
|
v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
|
|
45
20
|
W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
|
|
46
21
|
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
|
47
|
-
-----END CERTIFICATE-----
|
|
48
22
|
|
|
49
23
|
QuoVadis Root CA 2
|
|
50
24
|
==================
|
|
51
|
-
-----BEGIN CERTIFICATE-----
|
|
52
25
|
MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
|
53
26
|
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
|
|
54
27
|
ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
chia/ssl/create_ssl.py
CHANGED
|
@@ -24,8 +24,9 @@ _all_private_node_names: list[str] = [
|
|
|
24
24
|
"crawler",
|
|
25
25
|
"data_layer",
|
|
26
26
|
"daemon",
|
|
27
|
+
"solver",
|
|
27
28
|
]
|
|
28
|
-
_all_public_node_names: list[str] = ["full_node", "wallet", "farmer", "introducer", "timelord", "data_layer"]
|
|
29
|
+
_all_public_node_names: list[str] = ["full_node", "wallet", "farmer", "introducer", "timelord", "data_layer", "solver"]
|
|
29
30
|
|
|
30
31
|
|
|
31
32
|
def get_chia_ca_crt_key() -> tuple[Any, Any]:
|
|
@@ -36,7 +37,7 @@ def get_chia_ca_crt_key() -> tuple[Any, Any]:
|
|
|
36
37
|
|
|
37
38
|
|
|
38
39
|
def get_mozilla_ca_crt() -> str:
|
|
39
|
-
mozilla_path = Path(__file__).parent.
|
|
40
|
+
mozilla_path = Path(__file__).parent.absolute() / "cacert.pem"
|
|
40
41
|
return str(mozilla_path)
|
|
41
42
|
|
|
42
43
|
|
|
@@ -11,13 +11,13 @@ from chia.apis import ApiProtocolRegistry
|
|
|
11
11
|
from chia.consensus.constants import replace_str_to_bytes
|
|
12
12
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS, update_testnet_overrides
|
|
13
13
|
from chia.protocols.outbound_message import NodeType
|
|
14
|
-
from chia.server.aliases import TimelordService
|
|
15
14
|
from chia.server.resolve_peer_info import get_unresolved_peer_infos
|
|
16
15
|
from chia.server.signal_handlers import SignalHandlers
|
|
17
16
|
from chia.server.start_service import RpcInfo, Service, async_run
|
|
18
17
|
from chia.timelord.timelord import Timelord
|
|
19
18
|
from chia.timelord.timelord_api import TimelordAPI
|
|
20
19
|
from chia.timelord.timelord_rpc_api import TimelordRpcApi
|
|
20
|
+
from chia.timelord.timelord_service import TimelordService
|
|
21
21
|
from chia.util.chia_logging import initialize_service_logging
|
|
22
22
|
from chia.util.config import load_config, load_config_cli
|
|
23
23
|
from chia.util.default_root import resolve_root_path
|
chia/timelord/timelord.py
CHANGED
|
@@ -160,20 +160,19 @@ class Timelord:
|
|
|
160
160
|
slow_bluebox = self.config.get("slow_bluebox", False)
|
|
161
161
|
if not self.bluebox_mode:
|
|
162
162
|
self.main_loop = create_referenced_task(self._manage_chains())
|
|
163
|
+
elif os.name == "nt" or slow_bluebox:
|
|
164
|
+
# `vdf_client` doesn't build on windows, use `prove()` from chiavdf.
|
|
165
|
+
workers = self.config.get("slow_bluebox_process_count", 1)
|
|
166
|
+
self._executor_shutdown_tempfile = _create_shutdown_file()
|
|
167
|
+
self.bluebox_pool = ThreadPoolExecutor(
|
|
168
|
+
max_workers=workers,
|
|
169
|
+
thread_name_prefix="blue-box-",
|
|
170
|
+
)
|
|
171
|
+
self.main_loop = create_referenced_task(
|
|
172
|
+
self._start_manage_discriminant_queue_sanitizer_slow(self.bluebox_pool, workers)
|
|
173
|
+
)
|
|
163
174
|
else:
|
|
164
|
-
|
|
165
|
-
# `vdf_client` doesn't build on windows, use `prove()` from chiavdf.
|
|
166
|
-
workers = self.config.get("slow_bluebox_process_count", 1)
|
|
167
|
-
self._executor_shutdown_tempfile = _create_shutdown_file()
|
|
168
|
-
self.bluebox_pool = ThreadPoolExecutor(
|
|
169
|
-
max_workers=workers,
|
|
170
|
-
thread_name_prefix="blue-box-",
|
|
171
|
-
)
|
|
172
|
-
self.main_loop = create_referenced_task(
|
|
173
|
-
self._start_manage_discriminant_queue_sanitizer_slow(self.bluebox_pool, workers)
|
|
174
|
-
)
|
|
175
|
-
else:
|
|
176
|
-
self.main_loop = create_referenced_task(self._manage_discriminant_queue_sanitizer())
|
|
175
|
+
self.main_loop = create_referenced_task(self._manage_discriminant_queue_sanitizer())
|
|
177
176
|
log.info(f"Started timelord, listening on port {self.get_vdf_server_port()}")
|
|
178
177
|
try:
|
|
179
178
|
yield
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from chia.server.start_service import Service
|
|
4
|
+
from chia.timelord.timelord import Timelord
|
|
5
|
+
from chia.timelord.timelord_api import TimelordAPI
|
|
6
|
+
from chia.timelord.timelord_rpc_api import TimelordRpcApi
|
|
7
|
+
|
|
8
|
+
TimelordService = Service[Timelord, TimelordAPI, TimelordRpcApi]
|
|
@@ -13,23 +13,64 @@ from chia.util.hash import std_hash
|
|
|
13
13
|
|
|
14
14
|
log = logging.getLogger(__name__)
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
def get_plot_id(pos: ProofOfSpace) -> bytes32:
|
|
18
|
-
assert pos.pool_public_key is None or pos.pool_contract_puzzle_hash is None
|
|
19
|
-
if pos.pool_public_key is None:
|
|
20
|
-
assert pos.pool_contract_puzzle_hash is not None
|
|
21
|
-
return calculate_plot_id_ph(pos.pool_contract_puzzle_hash, pos.plot_public_key)
|
|
22
|
-
return calculate_plot_id_pk(pos.pool_public_key, pos.plot_public_key)
|
|
16
|
+
# These are temporary stubs for chiapos2, that we build against until it's ready to be integrated.
|
|
23
17
|
|
|
24
18
|
|
|
25
19
|
# returns quality string for v2 plot, or None if invalid
|
|
26
20
|
def validate_proof_v2(
|
|
27
|
-
plot_id: bytes32, size: uint8,
|
|
21
|
+
plot_id: bytes32, size: uint8, required_plot_strength: uint8, challenge: bytes32, proof: bytes
|
|
28
22
|
) -> Optional[bytes32]:
|
|
29
23
|
# TODO: todo_v2_plots call into new chiapos library
|
|
30
24
|
raise NotImplementedError
|
|
31
25
|
|
|
32
26
|
|
|
27
|
+
# this is compute intensive, solving a partial proof returning a full proof
|
|
28
|
+
def solve_proof(partial_proof: bytes) -> bytes:
|
|
29
|
+
# TODO: todo_v2_plots call into new chiapos library
|
|
30
|
+
raise NotImplementedError
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# given a partial proof, computes the quality. This is used to compute required iters.
|
|
34
|
+
def quality_for_partial_proof(partial_proof: bytes, challenge: bytes32) -> bytes32:
|
|
35
|
+
# TODO: todo_v2_plots call into new chiapos library
|
|
36
|
+
return std_hash(partial_proof + challenge)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def make_pos(
|
|
40
|
+
challenge: bytes32,
|
|
41
|
+
pool_public_key: Optional[G1Element],
|
|
42
|
+
pool_contract_puzzle_hash: Optional[bytes32],
|
|
43
|
+
plot_public_key: G1Element,
|
|
44
|
+
version_and_size: PlotSize,
|
|
45
|
+
proof: bytes,
|
|
46
|
+
) -> ProofOfSpace:
|
|
47
|
+
k: int
|
|
48
|
+
if version_and_size.size_v1 is not None:
|
|
49
|
+
k = version_and_size.size_v1
|
|
50
|
+
else:
|
|
51
|
+
assert version_and_size.size_v2 is not None
|
|
52
|
+
k = version_and_size.size_v2
|
|
53
|
+
assert k is not None
|
|
54
|
+
k |= 0x80
|
|
55
|
+
|
|
56
|
+
return ProofOfSpace(
|
|
57
|
+
challenge,
|
|
58
|
+
pool_public_key,
|
|
59
|
+
pool_contract_puzzle_hash,
|
|
60
|
+
plot_public_key,
|
|
61
|
+
uint8(k),
|
|
62
|
+
proof,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def get_plot_id(pos: ProofOfSpace) -> bytes32:
|
|
67
|
+
assert pos.pool_public_key is None or pos.pool_contract_puzzle_hash is None
|
|
68
|
+
if pos.pool_public_key is None:
|
|
69
|
+
assert pos.pool_contract_puzzle_hash is not None
|
|
70
|
+
return calculate_plot_id_ph(pos.pool_contract_puzzle_hash, pos.plot_public_key)
|
|
71
|
+
return calculate_plot_id_pk(pos.pool_public_key, pos.plot_public_key)
|
|
72
|
+
|
|
73
|
+
|
|
33
74
|
def check_plot_size(constants: ConsensusConstants, ps: PlotSize) -> bool:
|
|
34
75
|
size_v1 = ps.size_v1
|
|
35
76
|
if size_v1 is not None:
|
|
@@ -50,6 +91,9 @@ def check_plot_size(constants: ConsensusConstants, ps: PlotSize) -> bool:
|
|
|
50
91
|
if size_v2 > constants.MAX_PLOT_SIZE_V2:
|
|
51
92
|
log.error("Plot size is higher than the maximum")
|
|
52
93
|
return False
|
|
94
|
+
if (size_v2 & 1) == 1:
|
|
95
|
+
log.error("Plot size is odd")
|
|
96
|
+
return False
|
|
53
97
|
return True
|
|
54
98
|
|
|
55
99
|
|
|
@@ -98,8 +142,8 @@ def verify_and_get_quality_string(
|
|
|
98
142
|
# === V2 plots ===
|
|
99
143
|
assert plot_size.size_v2 is not None
|
|
100
144
|
|
|
101
|
-
|
|
102
|
-
return validate_proof_v2(plot_id, plot_size.size_v2,
|
|
145
|
+
required_plot_strength = calculate_required_plot_strength(constants, height)
|
|
146
|
+
return validate_proof_v2(plot_id, plot_size.size_v2, required_plot_strength, pos.challenge, bytes(pos.proof))
|
|
103
147
|
|
|
104
148
|
|
|
105
149
|
def passes_plot_filter(
|
|
@@ -137,16 +181,16 @@ def calculate_prefix_bits(constants: ConsensusConstants, height: uint32, plot_si
|
|
|
137
181
|
return max(0, prefix_bits)
|
|
138
182
|
|
|
139
183
|
|
|
140
|
-
def
|
|
141
|
-
if height < constants.
|
|
142
|
-
return constants.
|
|
143
|
-
if height < constants.
|
|
184
|
+
def calculate_required_plot_strength(constants: ConsensusConstants, height: uint32) -> uint8:
|
|
185
|
+
if height < constants.PLOT_STRENGTH_4_HEIGHT:
|
|
186
|
+
return constants.PLOT_STRENGTH_INITIAL
|
|
187
|
+
if height < constants.PLOT_STRENGTH_5_HEIGHT:
|
|
144
188
|
return uint8(4)
|
|
145
|
-
if height < constants.
|
|
189
|
+
if height < constants.PLOT_STRENGTH_6_HEIGHT:
|
|
146
190
|
return uint8(5)
|
|
147
|
-
if height < constants.
|
|
191
|
+
if height < constants.PLOT_STRENGTH_7_HEIGHT:
|
|
148
192
|
return uint8(6)
|
|
149
|
-
if height < constants.
|
|
193
|
+
if height < constants.PLOT_STRENGTH_8_HEIGHT:
|
|
150
194
|
return uint8(7)
|
|
151
195
|
else:
|
|
152
196
|
return uint8(8)
|
chia/types/coin_spend.py
CHANGED
|
@@ -10,7 +10,6 @@ from chia.types.blockchain_format.program import Program
|
|
|
10
10
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
11
11
|
from chia.types.condition_opcodes import ConditionOpcode
|
|
12
12
|
from chia.types.condition_with_args import ConditionWithArgs
|
|
13
|
-
from chia.util.streamable import Streamable, streamable
|
|
14
13
|
|
|
15
14
|
|
|
16
15
|
def make_spend(
|
|
@@ -36,13 +35,6 @@ def make_spend(
|
|
|
36
35
|
return CoinSpend(coin, pr, sol)
|
|
37
36
|
|
|
38
37
|
|
|
39
|
-
@streamable
|
|
40
|
-
@dataclass(frozen=True)
|
|
41
|
-
class SpendInfo(Streamable):
|
|
42
|
-
puzzle: SerializedProgram
|
|
43
|
-
solution: SerializedProgram
|
|
44
|
-
|
|
45
|
-
|
|
46
38
|
@dataclass(frozen=True)
|
|
47
39
|
class CoinSpendWithConditions:
|
|
48
40
|
coin_spend: CoinSpend
|
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass
|
|
4
4
|
|
|
5
|
-
from chia_rs import
|
|
5
|
+
from chia_rs import G2Element, SpendBundleConditions
|
|
6
6
|
from chia_rs.sized_bytes import bytes32
|
|
7
7
|
from chia_rs.sized_ints import uint32
|
|
8
8
|
|
|
@@ -11,8 +11,8 @@ from chia.types.mempool_item import BundleCoinSpend
|
|
|
11
11
|
|
|
12
12
|
@dataclass(frozen=True)
|
|
13
13
|
class InternalMempoolItem:
|
|
14
|
-
|
|
14
|
+
aggregated_signature: G2Element
|
|
15
15
|
conds: SpendBundleConditions
|
|
16
16
|
height_added_to_mempool: uint32
|
|
17
|
-
# Map of coin ID to coin spend data between the bundle and its
|
|
17
|
+
# Map of coin ID to coin spend data between the bundle and its SpendBundleConditions
|
|
18
18
|
bundle_coin_spends: dict[bytes32, BundleCoinSpend]
|
chia/types/mempool_item.py
CHANGED
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
4
|
from typing import Any, Optional
|
|
5
5
|
|
|
6
|
-
from chia_rs import CoinSpend, SpendBundle, SpendBundleConditions
|
|
6
|
+
from chia_rs import CoinSpend, G2Element, SpendBundle, SpendBundleConditions
|
|
7
7
|
from chia_rs.sized_bytes import bytes32
|
|
8
8
|
from chia_rs.sized_ints import uint32, uint64
|
|
9
9
|
|
|
@@ -22,21 +22,25 @@ class UnspentLineageInfo:
|
|
|
22
22
|
class BundleCoinSpend:
|
|
23
23
|
coin_spend: CoinSpend
|
|
24
24
|
eligible_for_dedup: bool
|
|
25
|
-
eligible_for_fast_forward: bool
|
|
26
25
|
additions: list[Coin]
|
|
27
|
-
# cost on the specific solution in this item
|
|
28
|
-
cost
|
|
26
|
+
# cost on the specific solution in this item. The cost includes execution
|
|
27
|
+
# cost and conditions cost, not byte-cost.
|
|
28
|
+
cost: uint64
|
|
29
29
|
|
|
30
30
|
# if this spend is eligible for fast forward, this may be set to the
|
|
31
31
|
# current unspent lineage belonging to this singleton, that we would rebase
|
|
32
32
|
# this spend on top of if we were to make a block now
|
|
33
33
|
# When finding MempoolItems by coin ID, we use Coin ID from it if it's set
|
|
34
|
-
latest_singleton_lineage: Optional[UnspentLineageInfo]
|
|
34
|
+
latest_singleton_lineage: Optional[UnspentLineageInfo]
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def supports_fast_forward(self) -> bool:
|
|
38
|
+
return self.latest_singleton_lineage is not None
|
|
35
39
|
|
|
36
40
|
|
|
37
41
|
@dataclass(frozen=True)
|
|
38
42
|
class MempoolItem:
|
|
39
|
-
|
|
43
|
+
aggregated_signature: G2Element
|
|
40
44
|
fee: uint64
|
|
41
45
|
conds: SpendBundleConditions
|
|
42
46
|
spend_bundle_name: bytes32
|
|
@@ -83,11 +87,11 @@ class MempoolItem:
|
|
|
83
87
|
|
|
84
88
|
@property
|
|
85
89
|
def removals(self) -> list[Coin]:
|
|
86
|
-
return self.
|
|
90
|
+
return [bcs.coin_spend.coin for bcs in self.bundle_coin_spends.values()]
|
|
87
91
|
|
|
88
92
|
def to_json_dict(self) -> dict[str, Any]:
|
|
89
93
|
return {
|
|
90
|
-
"spend_bundle": recurse_jsonify(self.
|
|
94
|
+
"spend_bundle": recurse_jsonify(self.to_spend_bundle()),
|
|
91
95
|
"fee": recurse_jsonify(self.fee),
|
|
92
96
|
"npc_result": {"Error": None, "conds": recurse_jsonify(self.conds)},
|
|
93
97
|
"cost": recurse_jsonify(self.cost),
|
|
@@ -95,3 +99,6 @@ class MempoolItem:
|
|
|
95
99
|
"additions": recurse_jsonify(self.additions),
|
|
96
100
|
"removals": recurse_jsonify(self.removals),
|
|
97
101
|
}
|
|
102
|
+
|
|
103
|
+
def to_spend_bundle(self) -> SpendBundle:
|
|
104
|
+
return SpendBundle([bcs.coin_spend for bcs in self.bundle_coin_spends.values()], self.aggregated_signature)
|
|
@@ -22,7 +22,7 @@ class MempoolSubmissionStatus(Streamable):
|
|
|
22
22
|
inclusion_status: uint8 # MempoolInclusionStatus
|
|
23
23
|
error_msg: Optional[str]
|
|
24
24
|
|
|
25
|
-
def to_json_dict_convenience(self) -> dict[str, Union[str, MempoolInclusionStatus,
|
|
25
|
+
def to_json_dict_convenience(self) -> dict[str, Union[str, MempoolInclusionStatus, None]]:
|
|
26
26
|
formatted = self.to_json_dict()
|
|
27
27
|
formatted["inclusion_status"] = MempoolInclusionStatus(self.inclusion_status).name
|
|
28
28
|
return formatted
|