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/full_node/block_store.py
CHANGED
|
@@ -3,8 +3,10 @@ from __future__ import annotations
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
import logging
|
|
5
5
|
import sqlite3
|
|
6
|
+
from contextlib import AbstractAsyncContextManager
|
|
6
7
|
from typing import Optional
|
|
7
8
|
|
|
9
|
+
import aiosqlite
|
|
8
10
|
import typing_extensions
|
|
9
11
|
import zstd
|
|
10
12
|
from chia_rs import BlockRecord, FullBlock, SubEpochChallengeSegment, SubEpochSegments
|
|
@@ -12,6 +14,7 @@ from chia_rs.sized_bytes import bytes32
|
|
|
12
14
|
from chia_rs.sized_ints import uint32
|
|
13
15
|
|
|
14
16
|
from chia.full_node.full_block_utils import GeneratorBlockInfo, block_info_from_block, generator_from_block
|
|
17
|
+
from chia.util.batches import to_batches
|
|
15
18
|
from chia.util.db_wrapper import DBWrapper2, execute_fetchone
|
|
16
19
|
from chia.util.errors import Err
|
|
17
20
|
from chia.util.lru_cache import LRUCache
|
|
@@ -189,6 +192,12 @@ class BlockStore:
|
|
|
189
192
|
return challenge_segments
|
|
190
193
|
return None
|
|
191
194
|
|
|
195
|
+
def transaction(self) -> AbstractAsyncContextManager[aiosqlite.Connection]:
|
|
196
|
+
return self.db_wrapper.writer()
|
|
197
|
+
|
|
198
|
+
def get_block_from_cache(self, header_hash: bytes32) -> Optional[FullBlock]:
|
|
199
|
+
return self.block_cache.get(header_hash)
|
|
200
|
+
|
|
192
201
|
def rollback_cache_block(self, header_hash: bytes32) -> None:
|
|
193
202
|
try:
|
|
194
203
|
self.block_cache.remove(header_hash)
|
|
@@ -322,20 +331,21 @@ class BlockStore:
|
|
|
322
331
|
Returns a list of Block Records, ordered by the same order in which header_hashes are passed in.
|
|
323
332
|
Throws an exception if the blocks are not present
|
|
324
333
|
"""
|
|
334
|
+
|
|
325
335
|
if len(header_hashes) == 0:
|
|
326
336
|
return []
|
|
327
337
|
|
|
328
338
|
all_blocks: dict[bytes32, BlockRecord] = {}
|
|
329
|
-
|
|
330
|
-
async with
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
+
for batch in to_batches(header_hashes, self.db_wrapper.host_parameter_limit):
|
|
340
|
+
async with self.db_wrapper.reader_no_transaction() as conn:
|
|
341
|
+
async with conn.execute(
|
|
342
|
+
"SELECT header_hash,block_record FROM full_blocks "
|
|
343
|
+
f"WHERE header_hash in ({'?,' * (len(batch.entries) - 1)}?)",
|
|
344
|
+
batch.entries,
|
|
345
|
+
) as cursor:
|
|
346
|
+
for row in await cursor.fetchall():
|
|
347
|
+
block_rec = BlockRecord.from_bytes(row[1])
|
|
348
|
+
all_blocks[block_rec.header_hash] = block_rec
|
|
339
349
|
|
|
340
350
|
ret: list[BlockRecord] = []
|
|
341
351
|
for hh in header_hashes:
|
chia/full_node/coin_store.py
CHANGED
|
@@ -163,13 +163,21 @@ class CoinStore:
|
|
|
163
163
|
await self._set_spent(tx_removals, height)
|
|
164
164
|
|
|
165
165
|
end = time.monotonic()
|
|
166
|
-
|
|
167
|
-
|
|
166
|
+
took_too_long = end - start > 10
|
|
167
|
+
|
|
168
|
+
message = (
|
|
168
169
|
f"Height {height}: It took {end - start:0.2f}s to apply {len(tx_additions)} additions and "
|
|
169
|
-
+ f"{len(tx_removals)} removals to the coin store.
|
|
170
|
-
+ "blockchain database is on a fast drive",
|
|
170
|
+
+ f"{len(tx_removals)} removals to the coin store."
|
|
171
171
|
)
|
|
172
172
|
|
|
173
|
+
if took_too_long:
|
|
174
|
+
level = logging.WARNING
|
|
175
|
+
message += " Make sure blockchain database is on a fast drive"
|
|
176
|
+
else:
|
|
177
|
+
level = logging.DEBUG
|
|
178
|
+
|
|
179
|
+
log.log(level, message)
|
|
180
|
+
|
|
173
181
|
# Checks DB and DiffStores for CoinRecord with coin_name and returns it
|
|
174
182
|
async def get_coin_record(self, coin_name: bytes32) -> Optional[CoinRecord]:
|
|
175
183
|
async with self.db_wrapper.reader_no_transaction() as conn:
|
|
@@ -1,44 +1,22 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
from chia_rs import CoinSpend, ConsensusConstants, SpendBundle, fast_forward_singleton, get_conditions_from_spendbundle
|
|
7
6
|
from chia_rs.sized_bytes import bytes32
|
|
8
7
|
from chia_rs.sized_ints import uint32, uint64
|
|
9
8
|
|
|
10
|
-
from chia.consensus.condition_costs import ConditionCost
|
|
11
9
|
from chia.types.blockchain_format.coin import Coin
|
|
12
|
-
from chia.types.blockchain_format.program import run_mempool_with_cost
|
|
13
10
|
from chia.types.blockchain_format.serialized_program import SerializedProgram
|
|
14
11
|
from chia.types.internal_mempool_item import InternalMempoolItem
|
|
15
12
|
from chia.types.mempool_item import BundleCoinSpend, UnspentLineageInfo
|
|
16
13
|
from chia.util.errors import Err
|
|
17
14
|
|
|
18
15
|
|
|
19
|
-
@dataclasses.dataclass(frozen=True)
|
|
20
|
-
class EligibilityAndAdditions:
|
|
21
|
-
is_eligible_for_dedup: bool
|
|
22
|
-
spend_additions: list[Coin]
|
|
23
|
-
# This is the spend puzzle hash. It's set to `None` if the spend is not
|
|
24
|
-
# eligible for fast forward. When the spend is eligible, we use its puzzle
|
|
25
|
-
# hash to check if the singleton has an unspent coin or not.
|
|
26
|
-
ff_puzzle_hash: Optional[bytes32] = None
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def run_for_cost(
|
|
30
|
-
puzzle_reveal: SerializedProgram, solution: SerializedProgram, additions_count: int, max_cost: int
|
|
31
|
-
) -> uint64:
|
|
32
|
-
create_coins_cost = additions_count * ConditionCost.CREATE_COIN.value
|
|
33
|
-
clvm_cost, _ = run_mempool_with_cost(puzzle_reveal, max_cost, solution)
|
|
34
|
-
saved_cost = uint64(clvm_cost + create_coins_cost)
|
|
35
|
-
return saved_cost
|
|
36
|
-
|
|
37
|
-
|
|
38
16
|
@dataclasses.dataclass(frozen=True)
|
|
39
17
|
class DedupCoinSpend:
|
|
40
18
|
solution: SerializedProgram
|
|
41
|
-
cost:
|
|
19
|
+
cost: uint64
|
|
42
20
|
|
|
43
21
|
|
|
44
22
|
def set_next_singleton_version(
|
|
@@ -138,7 +116,7 @@ class IdenticalSpendDedup:
|
|
|
138
116
|
deduplication_spends: dict[bytes32, DedupCoinSpend] = dataclasses.field(default_factory=dict)
|
|
139
117
|
|
|
140
118
|
def get_deduplication_info(
|
|
141
|
-
self, *, bundle_coin_spends: dict[bytes32, BundleCoinSpend]
|
|
119
|
+
self, *, bundle_coin_spends: dict[bytes32, BundleCoinSpend]
|
|
142
120
|
) -> tuple[list[CoinSpend], uint64, list[Coin]]:
|
|
143
121
|
"""
|
|
144
122
|
Checks all coin spends of a mempool item for deduplication eligibility and
|
|
@@ -147,7 +125,6 @@ class IdenticalSpendDedup:
|
|
|
147
125
|
|
|
148
126
|
Args:
|
|
149
127
|
bundle_coin_spends: the mempool item's coin spends data
|
|
150
|
-
max_cost: the maximum limit when running for cost
|
|
151
128
|
|
|
152
129
|
Returns:
|
|
153
130
|
list[CoinSpend]: list of unique coin spends in this mempool item
|
|
@@ -156,7 +133,7 @@ class IdenticalSpendDedup:
|
|
|
156
133
|
|
|
157
134
|
Raises:
|
|
158
135
|
ValueError to skip the mempool item we're currently in, if it's
|
|
159
|
-
attempting to spend an
|
|
136
|
+
attempting to spend an dedup coin with a different solution than the
|
|
160
137
|
one we're already deduplicating on.
|
|
161
138
|
"""
|
|
162
139
|
cost_saving = 0
|
|
@@ -175,45 +152,16 @@ class IdenticalSpendDedup:
|
|
|
175
152
|
if dedup_coin_spend is None:
|
|
176
153
|
# We didn't process an item with this coin before. If we end up including
|
|
177
154
|
# this item, add this pair to deduplication_spends
|
|
178
|
-
new_dedup_spends[coin_id] = DedupCoinSpend(spend_data.coin_spend.solution,
|
|
155
|
+
new_dedup_spends[coin_id] = DedupCoinSpend(spend_data.coin_spend.solution, spend_data.cost)
|
|
179
156
|
unique_coin_spends.append(spend_data.coin_spend)
|
|
180
157
|
unique_additions.extend(spend_data.additions)
|
|
181
158
|
continue
|
|
182
159
|
# See if the solution was identical
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
#
|
|
186
|
-
# spending this coin with a different solution and that would
|
|
187
|
-
# conflict with the coin spends that we're deduplicating already
|
|
188
|
-
# NOTE: We can miss an opportunity to deduplicate on other solutions
|
|
189
|
-
# even if they end up saving more cost, as we're going for the first
|
|
190
|
-
# solution we see from the relatively highest FPC item, to avoid
|
|
191
|
-
# severe performance and/or time-complexity impact
|
|
160
|
+
if dedup_coin_spend.solution != spend_data.coin_spend.solution:
|
|
161
|
+
# This should not happen. DEDUP spends of the same coin with
|
|
162
|
+
# different solutions are rejected in check_removals().
|
|
192
163
|
raise SkipDedup("Solution is different from what we're deduplicating on")
|
|
193
|
-
|
|
194
|
-
if duplicate_cost is None:
|
|
195
|
-
# See first if this mempool item had this cost computed before
|
|
196
|
-
# This can happen if this item didn't get included in the previous block
|
|
197
|
-
spend_cost = spend_data.cost
|
|
198
|
-
if spend_cost is None:
|
|
199
|
-
spend_cost = run_for_cost(
|
|
200
|
-
puzzle_reveal=spend_data.coin_spend.puzzle_reveal,
|
|
201
|
-
solution=spend_data.coin_spend.solution,
|
|
202
|
-
additions_count=len(spend_data.additions),
|
|
203
|
-
max_cost=max_cost,
|
|
204
|
-
)
|
|
205
|
-
# Update this mempool item's coin spends map
|
|
206
|
-
bundle_coin_spends[coin_id] = BundleCoinSpend(
|
|
207
|
-
coin_spend=spend_data.coin_spend,
|
|
208
|
-
eligible_for_dedup=spend_data.eligible_for_dedup,
|
|
209
|
-
eligible_for_fast_forward=spend_data.eligible_for_fast_forward,
|
|
210
|
-
additions=spend_data.additions,
|
|
211
|
-
cost=spend_cost,
|
|
212
|
-
)
|
|
213
|
-
duplicate_cost = spend_cost
|
|
214
|
-
# If we end up including this item, update this entry's cost
|
|
215
|
-
new_dedup_spends[coin_id] = DedupCoinSpend(current_solution, duplicate_cost)
|
|
216
|
-
cost_saving += duplicate_cost
|
|
164
|
+
cost_saving += dedup_coin_spend.cost
|
|
217
165
|
# Update the eligible coin spends data
|
|
218
166
|
self.deduplication_spends.update(new_dedup_spends)
|
|
219
167
|
return unique_coin_spends, uint64(cost_saving), unique_additions
|
|
@@ -248,7 +196,7 @@ class SingletonFastForward:
|
|
|
248
196
|
new_bundle_coin_spends = {}
|
|
249
197
|
fast_forwarded_spends = 0
|
|
250
198
|
for coin_id, spend_data in mempool_item.bundle_coin_spends.items():
|
|
251
|
-
if not spend_data.
|
|
199
|
+
if not spend_data.supports_fast_forward:
|
|
252
200
|
# Nothing to do for this spend, moving on
|
|
253
201
|
new_coin_spends.append(spend_data.coin_spend)
|
|
254
202
|
new_bundle_coin_spends[coin_id] = spend_data
|
|
@@ -262,8 +210,7 @@ class SingletonFastForward:
|
|
|
262
210
|
unspent_lineage_info = self.fast_forward_spends.get(spend_data.coin_spend.coin.puzzle_hash)
|
|
263
211
|
if unspent_lineage_info is None:
|
|
264
212
|
# We didn't, so let's check the item's latest lineage info
|
|
265
|
-
|
|
266
|
-
raise ValueError("Cannot proceed with singleton spend fast forward.")
|
|
213
|
+
assert spend_data.latest_singleton_lineage is not None
|
|
267
214
|
unspent_lineage_info = spend_data.latest_singleton_lineage
|
|
268
215
|
# See if we're the most recent version
|
|
269
216
|
if unspent_lineage_info.coin_id == coin_id:
|
|
@@ -287,9 +234,9 @@ class SingletonFastForward:
|
|
|
287
234
|
new_bundle_coin_spends[new_coin_spend.coin.name()] = BundleCoinSpend(
|
|
288
235
|
coin_spend=new_coin_spend,
|
|
289
236
|
eligible_for_dedup=spend_data.eligible_for_dedup,
|
|
290
|
-
eligible_for_fast_forward=spend_data.eligible_for_fast_forward,
|
|
291
237
|
additions=patched_additions,
|
|
292
238
|
cost=spend_data.cost,
|
|
239
|
+
latest_singleton_lineage=self.fast_forward_spends.get(spend_data.coin_spend.coin.puzzle_hash),
|
|
293
240
|
)
|
|
294
241
|
# Update the list of coins spends that will make the new fast
|
|
295
242
|
# forward spend bundle
|
|
@@ -310,9 +257,9 @@ class SingletonFastForward:
|
|
|
310
257
|
new_bundle_coin_spends[new_coin_spend.coin.name()] = BundleCoinSpend(
|
|
311
258
|
coin_spend=new_coin_spend,
|
|
312
259
|
eligible_for_dedup=spend_data.eligible_for_dedup,
|
|
313
|
-
eligible_for_fast_forward=spend_data.eligible_for_fast_forward,
|
|
314
260
|
additions=patched_additions,
|
|
315
261
|
cost=spend_data.cost,
|
|
262
|
+
latest_singleton_lineage=self.fast_forward_spends.get(spend_data.coin_spend.coin.puzzle_hash),
|
|
316
263
|
)
|
|
317
264
|
# Update the list of coins spends that make the new fast forward bundle
|
|
318
265
|
new_coin_spends.append(new_coin_spend)
|
|
@@ -321,19 +268,17 @@ class SingletonFastForward:
|
|
|
321
268
|
# This item doesn't have any fast forward coins, nothing to do here
|
|
322
269
|
return new_bundle_coin_spends
|
|
323
270
|
# Update the mempool item after validating the new spend bundle
|
|
324
|
-
new_sb = SpendBundle(
|
|
325
|
-
coin_spends=new_coin_spends, aggregated_signature=mempool_item.spend_bundle.aggregated_signature
|
|
326
|
-
)
|
|
271
|
+
new_sb = SpendBundle(coin_spends=new_coin_spends, aggregated_signature=mempool_item.aggregated_signature)
|
|
327
272
|
assert mempool_item.conds is not None
|
|
328
273
|
try:
|
|
329
274
|
# Run the new spend bundle to make sure it remains valid. What we
|
|
330
275
|
# care about here is whether this call throws or not.
|
|
331
276
|
get_conditions_from_spendbundle(new_sb, mempool_item.conds.cost, constants, height)
|
|
332
|
-
# get_conditions_from_spendbundle raises a
|
|
333
|
-
except
|
|
277
|
+
# get_conditions_from_spendbundle raises a ValueError with an error code
|
|
278
|
+
except ValueError as e:
|
|
334
279
|
# Convert that to a ValidationError
|
|
335
|
-
if len(e.args) >
|
|
336
|
-
error = Err(e.args[
|
|
280
|
+
if len(e.args) > 1:
|
|
281
|
+
error = Err(e.args[1])
|
|
337
282
|
raise ValueError(f"Mempool item became invalid after singleton fast forward with error {error}.")
|
|
338
283
|
else:
|
|
339
284
|
raise ValueError(
|
chia/full_node/full_node.py
CHANGED
|
@@ -39,6 +39,7 @@ from packaging.version import Version
|
|
|
39
39
|
from chia.consensus.augmented_chain import AugmentedBlockchain
|
|
40
40
|
from chia.consensus.block_body_validation import ForkInfo
|
|
41
41
|
from chia.consensus.block_creation import unfinished_block_to_full_block
|
|
42
|
+
from chia.consensus.block_height_map import BlockHeightMap
|
|
42
43
|
from chia.consensus.blockchain import AddBlockResult, Blockchain, BlockchainMutexPriority, StateChangeSummary
|
|
43
44
|
from chia.consensus.blockchain_interface import BlockchainInterface
|
|
44
45
|
from chia.consensus.coin_store_protocol import CoinStoreProtocol
|
|
@@ -49,7 +50,6 @@ from chia.consensus.make_sub_epoch_summary import next_sub_epoch_summary
|
|
|
49
50
|
from chia.consensus.multiprocess_validation import PreValidationResult, pre_validate_block
|
|
50
51
|
from chia.consensus.pot_iterations import calculate_sp_iters
|
|
51
52
|
from chia.consensus.signage_point import SignagePoint
|
|
52
|
-
from chia.full_node.block_height_map import BlockHeightMap
|
|
53
53
|
from chia.full_node.block_store import BlockStore
|
|
54
54
|
from chia.full_node.check_fork_next_block import check_fork_next_block
|
|
55
55
|
from chia.full_node.coin_store import CoinStore
|
|
@@ -58,7 +58,7 @@ from chia.full_node.full_node_store import FullNodeStore, FullNodeStorePeakResul
|
|
|
58
58
|
from chia.full_node.hint_management import get_hints_and_subscription_coin_ids
|
|
59
59
|
from chia.full_node.hint_store import HintStore
|
|
60
60
|
from chia.full_node.mempool import MempoolRemoveInfo
|
|
61
|
-
from chia.full_node.mempool_manager import MempoolManager
|
|
61
|
+
from chia.full_node.mempool_manager import MempoolManager
|
|
62
62
|
from chia.full_node.subscriptions import PeerSubscriptions, peers_for_spend_bundle
|
|
63
63
|
from chia.full_node.sync_store import Peak, SyncStore
|
|
64
64
|
from chia.full_node.tx_processing_queue import TransactionQueue, TransactionQueueEntry
|
|
@@ -68,6 +68,7 @@ from chia.protocols.farmer_protocol import SignagePointSourceData, SPSubSlotSour
|
|
|
68
68
|
from chia.protocols.full_node_protocol import RequestBlocks, RespondBlock, RespondBlocks, RespondSignagePoint
|
|
69
69
|
from chia.protocols.outbound_message import Message, NodeType, make_msg
|
|
70
70
|
from chia.protocols.protocol_message_types import ProtocolMessageTypes
|
|
71
|
+
from chia.protocols.protocol_timing import CONSENSUS_ERROR_BAN_SECONDS
|
|
71
72
|
from chia.protocols.shared_protocol import Capability
|
|
72
73
|
from chia.protocols.wallet_protocol import CoinStateUpdate, RemovedMempoolItem
|
|
73
74
|
from chia.rpc.rpc_server import StateChangedProtocol
|
|
@@ -99,7 +100,8 @@ from chia.util.task_referencer import create_referenced_task
|
|
|
99
100
|
# This is the result of calling peak_post_processing, which is then fed into peak_post_processing_2
|
|
100
101
|
@dataclasses.dataclass
|
|
101
102
|
class PeakPostProcessingResult:
|
|
102
|
-
|
|
103
|
+
# The added transactions IDs from calling MempoolManager.new_peak
|
|
104
|
+
mempool_peak_added_tx_ids: list[bytes32]
|
|
103
105
|
mempool_removals: list[MempoolRemoveInfo] # The removed mempool items from calling MempoolManager.new_peak
|
|
104
106
|
fns_peak_result: FullNodeStorePeakResult # The result of calling FullNodeStore.new_peak
|
|
105
107
|
hints: list[tuple[bytes32, bytes]] # The hints added to the DB
|
|
@@ -321,7 +323,8 @@ class FullNode:
|
|
|
321
323
|
)
|
|
322
324
|
async with self.blockchain.priority_mutex.acquire(priority=BlockchainMutexPriority.high):
|
|
323
325
|
pending_tx = await self.mempool_manager.new_peak(self.blockchain.get_tx_peak(), None)
|
|
324
|
-
|
|
326
|
+
# No pending transactions when starting up
|
|
327
|
+
assert len(pending_tx.spend_bundle_ids) == 0
|
|
325
328
|
|
|
326
329
|
full_peak: Optional[FullBlock] = await self.blockchain.get_full_peak()
|
|
327
330
|
assert full_peak is not None
|
|
@@ -500,11 +503,16 @@ class FullNode:
|
|
|
500
503
|
except asyncio.CancelledError:
|
|
501
504
|
error_stack = traceback.format_exc()
|
|
502
505
|
self.log.debug(f"Cancelling _handle_one_transaction, closing: {error_stack}")
|
|
506
|
+
except ValidationError as e:
|
|
507
|
+
self.log.exception("ValidationError in _handle_one_transaction, closing")
|
|
508
|
+
if peer is not None:
|
|
509
|
+
await peer.close(CONSENSUS_ERROR_BAN_SECONDS)
|
|
510
|
+
entry.done.set((MempoolInclusionStatus.FAILED, e.code))
|
|
503
511
|
except Exception:
|
|
504
|
-
|
|
505
|
-
self.log.error(f"Error in _handle_one_transaction, closing: {error_stack}")
|
|
512
|
+
self.log.exception("Error in _handle_one_transaction, closing")
|
|
506
513
|
if peer is not None:
|
|
507
|
-
await peer.close()
|
|
514
|
+
await peer.close(CONSENSUS_ERROR_BAN_SECONDS)
|
|
515
|
+
entry.done.set((MempoolInclusionStatus.FAILED, Err.UNKNOWN))
|
|
508
516
|
finally:
|
|
509
517
|
self.add_transaction_semaphore.release()
|
|
510
518
|
|
|
@@ -887,7 +895,7 @@ class FullNode:
|
|
|
887
895
|
|
|
888
896
|
async def synced(self, block_is_current_at: Optional[uint64] = None) -> bool:
|
|
889
897
|
if block_is_current_at is None:
|
|
890
|
-
block_is_current_at = uint64(
|
|
898
|
+
block_is_current_at = uint64(time.time() - 60 * 7)
|
|
891
899
|
if "simulator" in str(self.config.get("selected_network")):
|
|
892
900
|
return True # sim is always synced because it has no peers
|
|
893
901
|
curr: Optional[BlockRecord] = self.blockchain.get_peak()
|
|
@@ -1090,13 +1098,13 @@ class FullNode:
|
|
|
1090
1098
|
response = await weight_proof_peer.call_api(FullNodeAPI.request_proof_of_weight, request, timeout=wp_timeout)
|
|
1091
1099
|
# Disconnect from this peer, because they have not behaved properly
|
|
1092
1100
|
if response is None or not isinstance(response, full_node_protocol.RespondProofOfWeight):
|
|
1093
|
-
await weight_proof_peer.close(
|
|
1101
|
+
await weight_proof_peer.close(CONSENSUS_ERROR_BAN_SECONDS)
|
|
1094
1102
|
raise RuntimeError(f"Weight proof did not arrive in time from peer: {weight_proof_peer.peer_info.host}")
|
|
1095
1103
|
if response.wp.recent_chain_data[-1].reward_chain_block.height != peak_height:
|
|
1096
|
-
await weight_proof_peer.close(
|
|
1104
|
+
await weight_proof_peer.close(CONSENSUS_ERROR_BAN_SECONDS)
|
|
1097
1105
|
raise RuntimeError(f"Weight proof had the wrong height: {weight_proof_peer.peer_info.host}")
|
|
1098
1106
|
if response.wp.recent_chain_data[-1].reward_chain_block.weight != peak_weight:
|
|
1099
|
-
await weight_proof_peer.close(
|
|
1107
|
+
await weight_proof_peer.close(CONSENSUS_ERROR_BAN_SECONDS)
|
|
1100
1108
|
raise RuntimeError(f"Weight proof had the wrong weight: {weight_proof_peer.peer_info.host}")
|
|
1101
1109
|
if self.in_bad_peak_cache(response.wp):
|
|
1102
1110
|
raise ValueError("Weight proof failed bad peak cache validation")
|
|
@@ -1111,10 +1119,10 @@ class FullNode:
|
|
|
1111
1119
|
try:
|
|
1112
1120
|
validated, fork_point, summaries = await self.weight_proof_handler.validate_weight_proof(response.wp)
|
|
1113
1121
|
except Exception as e:
|
|
1114
|
-
await weight_proof_peer.close(
|
|
1122
|
+
await weight_proof_peer.close(CONSENSUS_ERROR_BAN_SECONDS)
|
|
1115
1123
|
raise ValueError(f"Weight proof validation threw an error {e}")
|
|
1116
1124
|
if not validated:
|
|
1117
|
-
await weight_proof_peer.close(
|
|
1125
|
+
await weight_proof_peer.close(CONSENSUS_ERROR_BAN_SECONDS)
|
|
1118
1126
|
raise ValueError("Weight proof validation failed")
|
|
1119
1127
|
self.log.info(f"Re-checked peers: total of {len(peers_with_peak)} peers with peak {peak_height}")
|
|
1120
1128
|
self.sync_store.set_sync_mode(True)
|
|
@@ -1376,7 +1384,7 @@ class FullNode:
|
|
|
1376
1384
|
vs,
|
|
1377
1385
|
)
|
|
1378
1386
|
if err is not None:
|
|
1379
|
-
await peer.close(
|
|
1387
|
+
await peer.close(CONSENSUS_ERROR_BAN_SECONDS)
|
|
1380
1388
|
raise ValueError(f"Failed to validate block batch {start_height} to {end_height}: {err}")
|
|
1381
1389
|
if end_height - block_rate_height > 100:
|
|
1382
1390
|
now = time.monotonic()
|
|
@@ -1623,6 +1631,7 @@ class FullNode:
|
|
|
1623
1631
|
for i, block in enumerate(blocks_to_validate):
|
|
1624
1632
|
header_hash = block.header_hash
|
|
1625
1633
|
assert vs.prev_ses_block is None or vs.prev_ses_block.height < block.height
|
|
1634
|
+
assert pre_validation_results[i].error is None
|
|
1626
1635
|
assert pre_validation_results[i].required_iters is not None
|
|
1627
1636
|
state_change_summary: Optional[StateChangeSummary]
|
|
1628
1637
|
# when adding blocks in batches, we won't have any overlapping
|
|
@@ -1938,7 +1947,7 @@ class FullNode:
|
|
|
1938
1947
|
mempool_new_peak_result = await self.mempool_manager.new_peak(self.blockchain.get_tx_peak(), spent_coins)
|
|
1939
1948
|
|
|
1940
1949
|
return PeakPostProcessingResult(
|
|
1941
|
-
mempool_new_peak_result.
|
|
1950
|
+
mempool_new_peak_result.spend_bundle_ids,
|
|
1942
1951
|
mempool_new_peak_result.removals,
|
|
1943
1952
|
fns_peak_result,
|
|
1944
1953
|
hints_to_add,
|
|
@@ -1960,9 +1969,9 @@ class FullNode:
|
|
|
1960
1969
|
record = state_change_summary.peak
|
|
1961
1970
|
for signage_point in ppp_result.signage_points:
|
|
1962
1971
|
await self.signage_point_post_processing(*signage_point)
|
|
1963
|
-
for
|
|
1964
|
-
self.log.debug(f"Added transaction to mempool: {
|
|
1965
|
-
mempool_item = self.mempool_manager.get_mempool_item(
|
|
1972
|
+
for transaction_id in ppp_result.mempool_peak_added_tx_ids:
|
|
1973
|
+
self.log.debug(f"Added transaction to mempool: {transaction_id}")
|
|
1974
|
+
mempool_item = self.mempool_manager.get_mempool_item(transaction_id)
|
|
1966
1975
|
assert mempool_item is not None
|
|
1967
1976
|
await self.broadcast_added_tx(mempool_item)
|
|
1968
1977
|
|
|
@@ -2764,66 +2773,56 @@ class FullNode:
|
|
|
2764
2773
|
return MempoolInclusionStatus.SUCCESS, None
|
|
2765
2774
|
if self.mempool_manager.seen(spend_name):
|
|
2766
2775
|
return MempoolInclusionStatus.FAILED, Err.ALREADY_INCLUDING_TRANSACTION
|
|
2767
|
-
self.mempool_manager.add_and_maybe_pop_seen(spend_name)
|
|
2768
2776
|
self.log.debug(f"Processing transaction: {spend_name}")
|
|
2769
2777
|
# Ignore if syncing or if we have not yet received a block
|
|
2770
2778
|
# the mempool must have a peak to validate transactions
|
|
2771
2779
|
if self.sync_store.get_sync_mode() or self.mempool_manager.peak is None:
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2780
|
+
return MempoolInclusionStatus.FAILED, Err.NO_TRANSACTIONS_WHILE_SYNCING
|
|
2781
|
+
|
|
2782
|
+
cost_result = await self.mempool_manager.pre_validate_spendbundle(transaction, spend_name, self._bls_cache)
|
|
2783
|
+
|
|
2784
|
+
self.mempool_manager.add_and_maybe_pop_seen(spend_name)
|
|
2785
|
+
|
|
2786
|
+
if self.config.get("log_mempool", False): # pragma: no cover
|
|
2776
2787
|
try:
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
)
|
|
2780
|
-
|
|
2781
|
-
self.mempool_manager.remove_seen(spend_name)
|
|
2782
|
-
return MempoolInclusionStatus.FAILED, e.code
|
|
2788
|
+
mempool_dir = path_from_root(self.root_path, "mempool-log") / f"{self.blockchain.get_peak_height()}"
|
|
2789
|
+
mempool_dir.mkdir(parents=True, exist_ok=True)
|
|
2790
|
+
with open(mempool_dir / f"{spend_name}.bundle", "wb+") as f:
|
|
2791
|
+
f.write(bytes(transaction))
|
|
2783
2792
|
except Exception:
|
|
2784
|
-
self.
|
|
2785
|
-
raise
|
|
2793
|
+
self.log.exception(f"Failed to log mempool item: {spend_name}")
|
|
2786
2794
|
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
|
|
2793
|
-
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
|
|
2797
|
-
|
|
2798
|
-
|
|
2799
|
-
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
)
|
|
2805
|
-
status = info.status
|
|
2806
|
-
error = info.error
|
|
2807
|
-
if status == MempoolInclusionStatus.SUCCESS:
|
|
2808
|
-
self.log.debug(
|
|
2809
|
-
f"Added transaction to mempool: {spend_name} mempool size: "
|
|
2810
|
-
f"{self.mempool_manager.mempool.total_mempool_cost()} normalized "
|
|
2811
|
-
f"{self.mempool_manager.mempool.total_mempool_cost() / 5000000}"
|
|
2812
|
-
)
|
|
2795
|
+
async with self.blockchain.priority_mutex.acquire(priority=BlockchainMutexPriority.low):
|
|
2796
|
+
if self.mempool_manager.get_spendbundle(spend_name) is not None:
|
|
2797
|
+
self.mempool_manager.remove_seen(spend_name)
|
|
2798
|
+
return MempoolInclusionStatus.SUCCESS, None
|
|
2799
|
+
if self.mempool_manager.peak is None:
|
|
2800
|
+
return MempoolInclusionStatus.FAILED, Err.MEMPOOL_NOT_INITIALIZED
|
|
2801
|
+
info = await self.mempool_manager.add_spend_bundle(
|
|
2802
|
+
transaction, cost_result, spend_name, self.mempool_manager.peak.height
|
|
2803
|
+
)
|
|
2804
|
+
status = info.status
|
|
2805
|
+
error = info.error
|
|
2806
|
+
if status == MempoolInclusionStatus.SUCCESS:
|
|
2807
|
+
self.log.debug(
|
|
2808
|
+
f"Added transaction to mempool: {spend_name} mempool size: "
|
|
2809
|
+
f"{self.mempool_manager.mempool.total_mempool_cost()} normalized "
|
|
2810
|
+
f"{self.mempool_manager.mempool.total_mempool_cost() / 5000000}"
|
|
2811
|
+
)
|
|
2813
2812
|
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
|
|
2818
|
-
|
|
2819
|
-
|
|
2813
|
+
# Only broadcast successful transactions, not pending ones. Otherwise it's a DOS
|
|
2814
|
+
# vector.
|
|
2815
|
+
mempool_item = self.mempool_manager.get_mempool_item(spend_name)
|
|
2816
|
+
assert mempool_item is not None
|
|
2817
|
+
await self.broadcast_removed_tx(info.removals)
|
|
2818
|
+
await self.broadcast_added_tx(mempool_item, current_peer=peer)
|
|
2820
2819
|
|
|
2821
|
-
|
|
2822
|
-
|
|
2820
|
+
if self.simulator_transaction_callback is not None: # callback
|
|
2821
|
+
await self.simulator_transaction_callback(spend_name)
|
|
2823
2822
|
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
|
|
2823
|
+
else:
|
|
2824
|
+
self.mempool_manager.remove_seen(spend_name)
|
|
2825
|
+
self.log.debug(f"Wasn't able to add transaction with id {spend_name}, status {status} error: {error}")
|
|
2827
2826
|
return status, error
|
|
2828
2827
|
|
|
2829
2828
|
async def broadcast_added_tx(
|
|
@@ -2904,7 +2903,7 @@ class FullNode:
|
|
|
2904
2903
|
removals_to_send: dict[bytes32, list[RemovedMempoolItem]] = dict()
|
|
2905
2904
|
|
|
2906
2905
|
for removal_info in mempool_removals:
|
|
2907
|
-
for internal_mempool_item in removal_info.items:
|
|
2906
|
+
for transaction_id, internal_mempool_item in removal_info.items.items():
|
|
2908
2907
|
conds = internal_mempool_item.conds
|
|
2909
2908
|
assert conds is not None
|
|
2910
2909
|
|
|
@@ -2916,8 +2915,6 @@ class FullNode:
|
|
|
2916
2915
|
if len(peer_ids) == 0:
|
|
2917
2916
|
continue
|
|
2918
2917
|
|
|
2919
|
-
transaction_id = internal_mempool_item.spend_bundle.name()
|
|
2920
|
-
|
|
2921
2918
|
self.log.debug(f"Broadcasting removed transaction {transaction_id} to wallet peers {peer_ids}")
|
|
2922
2919
|
|
|
2923
2920
|
for peer_id in peer_ids:
|