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
|
@@ -32,10 +32,8 @@ from chia.consensus.condition_costs import ConditionCost
|
|
|
32
32
|
from chia.consensus.default_constants import DEFAULT_CONSTANTS
|
|
33
33
|
from chia.full_node.eligible_coin_spends import (
|
|
34
34
|
DedupCoinSpend,
|
|
35
|
-
EligibilityAndAdditions,
|
|
36
35
|
IdenticalSpendDedup,
|
|
37
36
|
SkipDedup,
|
|
38
|
-
run_for_cost,
|
|
39
37
|
)
|
|
40
38
|
from chia.full_node.mempool import MAX_SKIPPED_ITEMS, PRIORITY_TX_THRESHOLD
|
|
41
39
|
from chia.full_node.mempool_manager import (
|
|
@@ -280,11 +278,13 @@ async def setup_mempool_with_coins(
|
|
|
280
278
|
max_block_clvm_cost: Optional[int] = None,
|
|
281
279
|
max_tx_clvm_cost: Optional[uint64] = None,
|
|
282
280
|
mempool_block_buffer: Optional[int] = None,
|
|
281
|
+
puzzle_hash: bytes32 = IDENTITY_PUZZLE_HASH,
|
|
282
|
+
height: uint32 = TEST_HEIGHT,
|
|
283
283
|
) -> tuple[MempoolManager, list[Coin]]:
|
|
284
284
|
coins = []
|
|
285
285
|
test_coin_records = {}
|
|
286
286
|
for amount in coin_amounts:
|
|
287
|
-
coin = Coin(
|
|
287
|
+
coin = Coin(bytes32.random(), puzzle_hash, uint64(amount))
|
|
288
288
|
coins.append(coin)
|
|
289
289
|
test_coin_records[coin.name()] = CoinRecord(coin, uint32(0), uint32(0), False, uint64(0))
|
|
290
290
|
|
|
@@ -302,7 +302,7 @@ async def setup_mempool_with_coins(
|
|
|
302
302
|
if mempool_block_buffer is not None:
|
|
303
303
|
constants = constants.replace(MEMPOOL_BLOCK_BUFFER=uint8(mempool_block_buffer))
|
|
304
304
|
mempool_manager = await instantiate_mempool_manager(
|
|
305
|
-
get_coin_records, constants=constants, max_tx_clvm_cost=max_tx_clvm_cost
|
|
305
|
+
get_coin_records, block_height=height, constants=constants, max_tx_clvm_cost=max_tx_clvm_cost
|
|
306
306
|
)
|
|
307
307
|
return (mempool_manager, coins)
|
|
308
308
|
|
|
@@ -361,6 +361,7 @@ def make_test_conds(
|
|
|
361
361
|
flags,
|
|
362
362
|
execution_cost=0,
|
|
363
363
|
condition_cost=0,
|
|
364
|
+
fingerprint=b"",
|
|
364
365
|
)
|
|
365
366
|
for coin_id, parent_id, puzzle_hash, amount, flags, create_coin in spend_info
|
|
366
367
|
],
|
|
@@ -376,6 +377,9 @@ def make_test_conds(
|
|
|
376
377
|
False,
|
|
377
378
|
0,
|
|
378
379
|
0,
|
|
380
|
+
0,
|
|
381
|
+
0,
|
|
382
|
+
0,
|
|
379
383
|
)
|
|
380
384
|
|
|
381
385
|
|
|
@@ -559,44 +563,43 @@ def make_bundle_spends_map_and_fee(
|
|
|
559
563
|
spend_bundle: SpendBundle, conds: SpendBundleConditions
|
|
560
564
|
) -> tuple[dict[bytes32, BundleCoinSpend], uint64]:
|
|
561
565
|
bundle_coin_spends: dict[bytes32, BundleCoinSpend] = {}
|
|
562
|
-
|
|
566
|
+
|
|
567
|
+
spend_conditions = {bytes32(spend.coin_id): spend for spend in conds.spends}
|
|
568
|
+
|
|
563
569
|
removals_amount = 0
|
|
564
570
|
additions_amount = 0
|
|
565
|
-
for spend in conds.spends:
|
|
566
|
-
coin_id = bytes32(spend.coin_id)
|
|
567
|
-
spend_additions = []
|
|
568
|
-
for puzzle_hash, amount, _ in spend.create_coin:
|
|
569
|
-
spend_additions.append(Coin(coin_id, puzzle_hash, uint64(amount)))
|
|
570
|
-
additions_amount += amount
|
|
571
|
-
eligibility_and_additions[coin_id] = EligibilityAndAdditions(
|
|
572
|
-
is_eligible_for_dedup=bool(spend.flags & ELIGIBLE_FOR_DEDUP),
|
|
573
|
-
spend_additions=spend_additions,
|
|
574
|
-
ff_puzzle_hash=bytes32(spend.puzzle_hash) if bool(spend.flags & ELIGIBLE_FOR_FF) else None,
|
|
575
|
-
)
|
|
576
571
|
for coin_spend in spend_bundle.coin_spends:
|
|
577
572
|
coin_id = coin_spend.coin.name()
|
|
578
573
|
removals_amount += coin_spend.coin.amount
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
574
|
+
spend_conds = spend_conditions.pop(coin_id)
|
|
575
|
+
|
|
576
|
+
additions = []
|
|
577
|
+
for puzzle_hash, amount, _ in spend_conds.create_coin:
|
|
578
|
+
additions.append(Coin(coin_id, puzzle_hash, uint64(amount)))
|
|
579
|
+
additions_amount += amount
|
|
580
|
+
|
|
582
581
|
bundle_coin_spends[coin_id] = BundleCoinSpend(
|
|
583
582
|
coin_spend=coin_spend,
|
|
584
|
-
eligible_for_dedup=
|
|
585
|
-
|
|
586
|
-
|
|
583
|
+
eligible_for_dedup=bool(spend_conds.flags & ELIGIBLE_FOR_DEDUP),
|
|
584
|
+
additions=additions,
|
|
585
|
+
cost=uint64(spend_conds.condition_cost + spend_conds.execution_cost),
|
|
587
586
|
latest_singleton_lineage=UnspentLineageInfo(coin_id, coin_spend.coin.parent_coin_info, bytes32([0] * 32))
|
|
588
|
-
if
|
|
587
|
+
if bool(spend_conds.flags & ELIGIBLE_FOR_FF)
|
|
589
588
|
else None,
|
|
590
589
|
)
|
|
590
|
+
assert additions_amount == conds.addition_amount
|
|
591
|
+
assert removals_amount == conds.removal_amount
|
|
591
592
|
fee = uint64(removals_amount - additions_amount)
|
|
592
593
|
return bundle_coin_spends, fee
|
|
593
594
|
|
|
594
595
|
|
|
595
596
|
def mempool_item_from_spendbundle(spend_bundle: SpendBundle) -> MempoolItem:
|
|
596
|
-
conds = get_conditions_from_spendbundle(
|
|
597
|
+
conds = get_conditions_from_spendbundle(
|
|
598
|
+
spend_bundle, INFINITE_COST, DEFAULT_CONSTANTS, DEFAULT_CONSTANTS.HARD_FORK2_HEIGHT
|
|
599
|
+
)
|
|
597
600
|
bundle_coin_spends, fee = make_bundle_spends_map_and_fee(spend_bundle, conds)
|
|
598
601
|
return MempoolItem(
|
|
599
|
-
|
|
602
|
+
aggregated_signature=spend_bundle.aggregated_signature,
|
|
600
603
|
fee=fee,
|
|
601
604
|
conds=conds,
|
|
602
605
|
spend_bundle_name=spend_bundle.name(),
|
|
@@ -888,8 +891,13 @@ def mk_bcs(coin_spend: CoinSpend, flags: int = 0) -> BundleCoinSpend:
|
|
|
888
891
|
return BundleCoinSpend(
|
|
889
892
|
coin_spend=coin_spend,
|
|
890
893
|
eligible_for_dedup=bool(flags & ELIGIBLE_FOR_DEDUP),
|
|
891
|
-
eligible_for_fast_forward=bool(flags & ELIGIBLE_FOR_FF),
|
|
892
894
|
additions=[],
|
|
895
|
+
cost=uint64(0),
|
|
896
|
+
latest_singleton_lineage=UnspentLineageInfo(
|
|
897
|
+
coin_spend.coin.name(), coin_spend.coin.parent_coin_info, bytes32([0] * 32)
|
|
898
|
+
)
|
|
899
|
+
if flags & ELIGIBLE_FOR_FF
|
|
900
|
+
else None,
|
|
893
901
|
)
|
|
894
902
|
|
|
895
903
|
|
|
@@ -921,7 +929,7 @@ def mk_item(
|
|
|
921
929
|
spend_bundle = SpendBundle(coin_spends, G2Element())
|
|
922
930
|
conds = make_test_conds(cost=cost, spend_ids=spend_ids)
|
|
923
931
|
return MempoolItem(
|
|
924
|
-
|
|
932
|
+
aggregated_signature=spend_bundle.aggregated_signature,
|
|
925
933
|
fee=uint64(fee),
|
|
926
934
|
conds=conds,
|
|
927
935
|
spend_bundle_name=spend_bundle.name(),
|
|
@@ -1116,8 +1124,7 @@ coins = make_test_coins()
|
|
|
1116
1124
|
],
|
|
1117
1125
|
)
|
|
1118
1126
|
def test_can_replace(existing_items: list[MempoolItem], new_item: MempoolItem, expected: bool) -> None:
|
|
1119
|
-
|
|
1120
|
-
assert can_replace(existing_items, removals, new_item) == expected
|
|
1127
|
+
assert can_replace(existing_items, new_item) == expected
|
|
1121
1128
|
|
|
1122
1129
|
|
|
1123
1130
|
@pytest.mark.anyio
|
|
@@ -1583,21 +1590,6 @@ async def test_replacing_one_with_an_eligible_coin() -> None:
|
|
|
1583
1590
|
assert_sb_in_pool(mempool_manager, sb123e4)
|
|
1584
1591
|
|
|
1585
1592
|
|
|
1586
|
-
@pytest.mark.parametrize("amount", [0, 1])
|
|
1587
|
-
def test_run_for_cost(amount: int) -> None:
|
|
1588
|
-
conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, amount]]
|
|
1589
|
-
solution = SerializedProgram.to(conditions)
|
|
1590
|
-
cost = run_for_cost(IDENTITY_PUZZLE, solution, additions_count=1, max_cost=uint64(10000000))
|
|
1591
|
-
assert cost == uint64(1800044)
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
def test_run_for_cost_max_cost() -> None:
|
|
1595
|
-
conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, 1]]
|
|
1596
|
-
solution = SerializedProgram.to(conditions)
|
|
1597
|
-
with pytest.raises(ValueError, match="cost exceeded"):
|
|
1598
|
-
run_for_cost(IDENTITY_PUZZLE, solution, additions_count=1, max_cost=uint64(43))
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
1593
|
def test_dedup_info_nothing_to_do() -> None:
|
|
1602
1594
|
# No eligible coins, nothing to deduplicate, item gets considered normally
|
|
1603
1595
|
|
|
@@ -1613,7 +1605,7 @@ def test_dedup_info_nothing_to_do() -> None:
|
|
|
1613
1605
|
mempool_item = mempool_item_from_spendbundle(sb)
|
|
1614
1606
|
dedup_coin_spends = IdenticalSpendDedup()
|
|
1615
1607
|
unique_coin_spends, cost_saving, unique_additions = dedup_coin_spends.get_deduplication_info(
|
|
1616
|
-
bundle_coin_spends=mempool_item.bundle_coin_spends
|
|
1608
|
+
bundle_coin_spends=mempool_item.bundle_coin_spends
|
|
1617
1609
|
)
|
|
1618
1610
|
assert unique_coin_spends == sb.coin_spends
|
|
1619
1611
|
assert cost_saving == 0
|
|
@@ -1633,7 +1625,7 @@ def test_dedup_info_eligible_1st_time() -> None:
|
|
|
1633
1625
|
dedup_coin_spends = IdenticalSpendDedup()
|
|
1634
1626
|
solution = SerializedProgram.to(conditions)
|
|
1635
1627
|
unique_coin_spends, cost_saving, unique_additions = dedup_coin_spends.get_deduplication_info(
|
|
1636
|
-
bundle_coin_spends=mempool_item.bundle_coin_spends
|
|
1628
|
+
bundle_coin_spends=mempool_item.bundle_coin_spends
|
|
1637
1629
|
)
|
|
1638
1630
|
assert unique_coin_spends == sb.coin_spends
|
|
1639
1631
|
assert cost_saving == 0
|
|
@@ -1641,7 +1633,10 @@ def test_dedup_info_eligible_1st_time() -> None:
|
|
|
1641
1633
|
Coin(TEST_COIN_ID, IDENTITY_PUZZLE_HASH, uint64(1)),
|
|
1642
1634
|
Coin(TEST_COIN_ID, IDENTITY_PUZZLE_HASH, uint64(TEST_COIN_AMOUNT - 1)),
|
|
1643
1635
|
}
|
|
1644
|
-
|
|
1636
|
+
expected_cost = mempool_item.bundle_coin_spends[TEST_COIN_ID].cost
|
|
1637
|
+
assert dedup_coin_spends == IdenticalSpendDedup(
|
|
1638
|
+
{TEST_COIN_ID: DedupCoinSpend(solution=solution, cost=expected_cost)}
|
|
1639
|
+
)
|
|
1645
1640
|
|
|
1646
1641
|
|
|
1647
1642
|
def test_dedup_info_eligible_but_different_solution() -> None:
|
|
@@ -1651,14 +1646,12 @@ def test_dedup_info_eligible_but_different_solution() -> None:
|
|
|
1651
1646
|
[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT],
|
|
1652
1647
|
]
|
|
1653
1648
|
initial_solution = SerializedProgram.to(initial_conditions)
|
|
1654
|
-
dedup_coin_spends = IdenticalSpendDedup({TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=
|
|
1649
|
+
dedup_coin_spends = IdenticalSpendDedup({TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=uint64(10))})
|
|
1655
1650
|
conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT]]
|
|
1656
1651
|
sb = spend_bundle_from_conditions(conditions, TEST_COIN)
|
|
1657
1652
|
mempool_item = mempool_item_from_spendbundle(sb)
|
|
1658
1653
|
with pytest.raises(SkipDedup, match="Solution is different from what we're deduplicating on"):
|
|
1659
|
-
dedup_coin_spends.get_deduplication_info(
|
|
1660
|
-
bundle_coin_spends=mempool_item.bundle_coin_spends, max_cost=mempool_item.conds.cost
|
|
1661
|
-
)
|
|
1654
|
+
dedup_coin_spends.get_deduplication_info(bundle_coin_spends=mempool_item.bundle_coin_spends)
|
|
1662
1655
|
|
|
1663
1656
|
|
|
1664
1657
|
def test_dedup_info_eligible_2nd_time_and_another_1st_time() -> None:
|
|
@@ -1668,7 +1661,10 @@ def test_dedup_info_eligible_2nd_time_and_another_1st_time() -> None:
|
|
|
1668
1661
|
[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT - 1],
|
|
1669
1662
|
]
|
|
1670
1663
|
initial_solution = SerializedProgram.to(initial_conditions)
|
|
1671
|
-
|
|
1664
|
+
test_coin_cost = uint64(1337)
|
|
1665
|
+
dedup_coin_spends = IdenticalSpendDedup(
|
|
1666
|
+
{TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=test_coin_cost)}
|
|
1667
|
+
)
|
|
1672
1668
|
sb1 = spend_bundle_from_conditions(initial_conditions, TEST_COIN)
|
|
1673
1669
|
second_conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT2]]
|
|
1674
1670
|
second_solution = SerializedProgram.to(second_conditions)
|
|
@@ -1677,19 +1673,19 @@ def test_dedup_info_eligible_2nd_time_and_another_1st_time() -> None:
|
|
|
1677
1673
|
mempool_item = mempool_item_from_spendbundle(sb)
|
|
1678
1674
|
assert mempool_item.conds is not None
|
|
1679
1675
|
unique_coin_spends, cost_saving, unique_additions = dedup_coin_spends.get_deduplication_info(
|
|
1680
|
-
bundle_coin_spends=mempool_item.bundle_coin_spends
|
|
1676
|
+
bundle_coin_spends=mempool_item.bundle_coin_spends
|
|
1681
1677
|
)
|
|
1682
1678
|
# Only the eligible one that we encountered more than once gets deduplicated
|
|
1683
1679
|
assert unique_coin_spends == sb2.coin_spends
|
|
1684
|
-
|
|
1685
|
-
assert cost_saving == saved_cost
|
|
1680
|
+
assert cost_saving == test_coin_cost
|
|
1686
1681
|
assert unique_additions == [Coin(TEST_COIN_ID2, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT2)]
|
|
1687
|
-
# The coin we encountered a second time
|
|
1688
|
-
# The coin we encountered for the first time gets
|
|
1682
|
+
# The coin we encountered a second time is already in the map
|
|
1683
|
+
# The coin we encountered for the first time gets added with its solution and cost
|
|
1684
|
+
test_coin2_cost = mempool_item.bundle_coin_spends[TEST_COIN_ID2].cost
|
|
1689
1685
|
expected_dedup_coin_spends = IdenticalSpendDedup(
|
|
1690
1686
|
{
|
|
1691
|
-
TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=
|
|
1692
|
-
TEST_COIN_ID2: DedupCoinSpend(solution=second_solution, cost=
|
|
1687
|
+
TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=test_coin_cost),
|
|
1688
|
+
TEST_COIN_ID2: DedupCoinSpend(solution=second_solution, cost=test_coin2_cost),
|
|
1693
1689
|
}
|
|
1694
1690
|
)
|
|
1695
1691
|
assert dedup_coin_spends == expected_dedup_coin_spends
|
|
@@ -1704,11 +1700,12 @@ def test_dedup_info_eligible_3rd_time_another_2nd_time_and_one_non_eligible() ->
|
|
|
1704
1700
|
initial_solution = SerializedProgram.to(initial_conditions)
|
|
1705
1701
|
second_conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT2]]
|
|
1706
1702
|
second_solution = SerializedProgram.to(second_conditions)
|
|
1707
|
-
|
|
1703
|
+
test_coin_cost = uint64(42)
|
|
1704
|
+
test_coin2_cost = uint64(1337)
|
|
1708
1705
|
dedup_coin_spends = IdenticalSpendDedup(
|
|
1709
1706
|
{
|
|
1710
|
-
TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=
|
|
1711
|
-
TEST_COIN_ID2: DedupCoinSpend(solution=second_solution, cost=
|
|
1707
|
+
TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=test_coin_cost),
|
|
1708
|
+
TEST_COIN_ID2: DedupCoinSpend(solution=second_solution, cost=test_coin2_cost),
|
|
1712
1709
|
}
|
|
1713
1710
|
)
|
|
1714
1711
|
sb1 = spend_bundle_from_conditions(initial_conditions, TEST_COIN)
|
|
@@ -1725,16 +1722,16 @@ def test_dedup_info_eligible_3rd_time_another_2nd_time_and_one_non_eligible() ->
|
|
|
1725
1722
|
mempool_item = mempool_item_from_spendbundle(sb)
|
|
1726
1723
|
assert mempool_item.conds is not None
|
|
1727
1724
|
unique_coin_spends, cost_saving, unique_additions = dedup_coin_spends.get_deduplication_info(
|
|
1728
|
-
bundle_coin_spends=mempool_item.bundle_coin_spends
|
|
1725
|
+
bundle_coin_spends=mempool_item.bundle_coin_spends
|
|
1729
1726
|
)
|
|
1730
1727
|
assert unique_coin_spends == sb3.coin_spends
|
|
1731
|
-
|
|
1732
|
-
assert cost_saving == saved_cost + saved_cost2
|
|
1728
|
+
assert cost_saving == test_coin_cost + test_coin2_cost
|
|
1733
1729
|
assert unique_additions == [Coin(TEST_COIN_ID3, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT3)]
|
|
1730
|
+
# TEST_COIN_ID3 is non-eligible, so it doesn't end up in this map
|
|
1734
1731
|
expected_dedup_coin_spends = IdenticalSpendDedup(
|
|
1735
1732
|
{
|
|
1736
|
-
TEST_COIN_ID: DedupCoinSpend(initial_solution,
|
|
1737
|
-
TEST_COIN_ID2: DedupCoinSpend(second_solution,
|
|
1733
|
+
TEST_COIN_ID: DedupCoinSpend(initial_solution, test_coin_cost),
|
|
1734
|
+
TEST_COIN_ID2: DedupCoinSpend(second_solution, test_coin2_cost),
|
|
1738
1735
|
}
|
|
1739
1736
|
)
|
|
1740
1737
|
assert dedup_coin_spends == expected_dedup_coin_spends
|
|
@@ -1804,18 +1801,21 @@ async def test_bundle_coin_spends() -> None:
|
|
|
1804
1801
|
await send_spendbundle(mempool_manager, sb123e)
|
|
1805
1802
|
mi123e = mempool_manager.get_mempool_item(sb123e.name())
|
|
1806
1803
|
assert mi123e is not None
|
|
1804
|
+
execution_cost = 44
|
|
1807
1805
|
for i in range(3):
|
|
1808
1806
|
assert mi123e.bundle_coin_spends[coins[i].name()] == BundleCoinSpend(
|
|
1809
1807
|
coin_spend=sb123.coin_spends[i],
|
|
1810
1808
|
eligible_for_dedup=False,
|
|
1811
|
-
eligible_for_fast_forward=False,
|
|
1812
1809
|
additions=[Coin(coins[i].name(), IDENTITY_PUZZLE_HASH, coins[i].amount)],
|
|
1810
|
+
cost=uint64(ConditionCost.CREATE_COIN.value + ConditionCost.AGG_SIG.value + execution_cost),
|
|
1811
|
+
latest_singleton_lineage=None,
|
|
1813
1812
|
)
|
|
1814
1813
|
assert mi123e.bundle_coin_spends[coins[3].name()] == BundleCoinSpend(
|
|
1815
1814
|
coin_spend=eligible_sb.coin_spends[0],
|
|
1816
1815
|
eligible_for_dedup=True,
|
|
1817
|
-
eligible_for_fast_forward=False,
|
|
1818
1816
|
additions=[Coin(coins[3].name(), IDENTITY_PUZZLE_HASH, coins[3].amount)],
|
|
1817
|
+
cost=uint64(ConditionCost.CREATE_COIN.value + execution_cost),
|
|
1818
|
+
latest_singleton_lineage=None,
|
|
1819
1819
|
)
|
|
1820
1820
|
|
|
1821
1821
|
|
|
@@ -2467,7 +2467,7 @@ async def test_new_peak_ff_eviction(
|
|
|
2467
2467
|
item = mempool_manager.get_mempool_item(bundle.name())
|
|
2468
2468
|
assert item is not None
|
|
2469
2469
|
singleton_name = singleton_spend.coin.name()
|
|
2470
|
-
assert item.bundle_coin_spends[singleton_name].
|
|
2470
|
+
assert item.bundle_coin_spends[singleton_name].supports_fast_forward
|
|
2471
2471
|
latest_singleton_lineage = item.bundle_coin_spends[singleton_name].latest_singleton_lineage
|
|
2472
2472
|
assert latest_singleton_lineage is not None
|
|
2473
2473
|
assert latest_singleton_lineage.coin_id == singleton_name
|
|
@@ -2499,7 +2499,7 @@ async def test_new_peak_ff_eviction(
|
|
|
2499
2499
|
else:
|
|
2500
2500
|
item = mempool_manager.get_mempool_item(bundle.name())
|
|
2501
2501
|
assert item is not None
|
|
2502
|
-
assert item.bundle_coin_spends[singleton_spend.coin.name()].
|
|
2502
|
+
assert item.bundle_coin_spends[singleton_spend.coin.name()].supports_fast_forward
|
|
2503
2503
|
latest_singleton_lineage = item.bundle_coin_spends[singleton_spend.coin.name()].latest_singleton_lineage
|
|
2504
2504
|
assert latest_singleton_lineage is not None
|
|
2505
2505
|
assert latest_singleton_lineage.coin_id == singleton_spend.coin.name()
|
|
@@ -2556,9 +2556,9 @@ async def test_multiple_ff(use_optimization: bool) -> None:
|
|
|
2556
2556
|
|
|
2557
2557
|
item = mempool_manager.get_mempool_item(bundle.name())
|
|
2558
2558
|
assert item is not None
|
|
2559
|
-
assert item.bundle_coin_spends[singleton_spend1.coin.name()].
|
|
2560
|
-
assert item.bundle_coin_spends[singleton_spend2.coin.name()].
|
|
2561
|
-
assert not item.bundle_coin_spends[coin_spend.coin.name()].
|
|
2559
|
+
assert item.bundle_coin_spends[singleton_spend1.coin.name()].supports_fast_forward
|
|
2560
|
+
assert item.bundle_coin_spends[singleton_spend2.coin.name()].supports_fast_forward
|
|
2561
|
+
assert not item.bundle_coin_spends[coin_spend.coin.name()].supports_fast_forward
|
|
2562
2562
|
|
|
2563
2563
|
# spend the singleton coin2 and make coin3 the latest version
|
|
2564
2564
|
coins.update_lineage(singleton_ph, singleton_spend3.coin)
|
|
@@ -2620,7 +2620,7 @@ async def test_advancing_ff(use_optimization: bool) -> None:
|
|
|
2620
2620
|
item = mempool_manager.get_mempool_item(bundle.name())
|
|
2621
2621
|
assert item is not None
|
|
2622
2622
|
spend = item.bundle_coin_spends[spend_a.coin.name()]
|
|
2623
|
-
assert spend.
|
|
2623
|
+
assert spend.supports_fast_forward
|
|
2624
2624
|
assert spend.latest_singleton_lineage is not None
|
|
2625
2625
|
assert spend.latest_singleton_lineage.coin_id == spend_a.coin.name()
|
|
2626
2626
|
|
|
@@ -2632,7 +2632,7 @@ async def test_advancing_ff(use_optimization: bool) -> None:
|
|
|
2632
2632
|
item = mempool_manager.get_mempool_item(bundle.name())
|
|
2633
2633
|
assert item is not None
|
|
2634
2634
|
spend = item.bundle_coin_spends[spend_a.coin.name()]
|
|
2635
|
-
assert spend.
|
|
2635
|
+
assert spend.supports_fast_forward
|
|
2636
2636
|
assert spend.latest_singleton_lineage is not None
|
|
2637
2637
|
assert spend.latest_singleton_lineage.coin_id == spend_b.coin.name()
|
|
2638
2638
|
|
|
@@ -2644,7 +2644,7 @@ async def test_advancing_ff(use_optimization: bool) -> None:
|
|
|
2644
2644
|
item = mempool_manager.get_mempool_item(bundle.name())
|
|
2645
2645
|
assert item is not None
|
|
2646
2646
|
spend = item.bundle_coin_spends[spend_a.coin.name()]
|
|
2647
|
-
assert spend.
|
|
2647
|
+
assert spend.supports_fast_forward
|
|
2648
2648
|
assert spend.latest_singleton_lineage is not None
|
|
2649
2649
|
assert spend.latest_singleton_lineage.coin_id == spend_c.coin.name()
|
|
2650
2650
|
|
|
@@ -3163,6 +3163,120 @@ def test_check_removals(case: CheckRemovalsCase) -> None:
|
|
|
3163
3163
|
assert set(conflicts) == set(expected_conflicts)
|
|
3164
3164
|
|
|
3165
3165
|
|
|
3166
|
+
# this puzzle just creates coins, however many are requested by the solution
|
|
3167
|
+
# (mod (A)
|
|
3168
|
+
# (defun loop (n)
|
|
3169
|
+
# (if (= n 1)
|
|
3170
|
+
# (list)
|
|
3171
|
+
# (c (list 51 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff n) (loop (- n 1))))
|
|
3172
|
+
# )
|
|
3173
|
+
# (loop A)
|
|
3174
|
+
# )
|
|
3175
|
+
create_coins_loop: str = (
|
|
3176
|
+
"ff02ffff01ff02ff02ffff04ff02ffff04ff05ff80808080ffff04ffff01ff02"
|
|
3177
|
+
"ffff03ffff09ff05ffff010180ff80ffff01ff04ffff04ffff0133ffff04ffff"
|
|
3178
|
+
"01a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
|
|
3179
|
+
"ffffffff04ff05ff80808080ffff02ff02ffff04ff02ffff04ffff11ff05ffff"
|
|
3180
|
+
"010180ff808080808080ff0180ff018080"
|
|
3181
|
+
)
|
|
3182
|
+
|
|
3183
|
+
# (mod (A)
|
|
3184
|
+
# (defun loop (n)
|
|
3185
|
+
# (if (= n 0) (list) (c n (loop (- n 1))))
|
|
3186
|
+
# )
|
|
3187
|
+
# (c (c 1 (loop A)) ())
|
|
3188
|
+
# )
|
|
3189
|
+
deep_recursion: str = (
|
|
3190
|
+
"ff02ffff01ff04ffff04ffff0101ffff02ff02ffff04ff02ffff04ff05ff8080"
|
|
3191
|
+
"808080ff8080ffff04ffff01ff02ffff03ffff09ff05ff8080ff80ffff01ff04"
|
|
3192
|
+
"ff05ffff02ff02ffff04ff02ffff04ffff11ff05ffff010180ff808080808080"
|
|
3193
|
+
"ff0180ff018080"
|
|
3194
|
+
)
|
|
3195
|
+
|
|
3196
|
+
|
|
3197
|
+
# this test uses artificial puzzles just to exercise the block creation. These
|
|
3198
|
+
# spends are expected not to verify any signatures
|
|
3199
|
+
# This is to keep the test simple.
|
|
3200
|
+
@pytest.mark.parametrize(
|
|
3201
|
+
"puzzle, solution",
|
|
3202
|
+
[
|
|
3203
|
+
pytest.param(create_coins_loop, "ff8207d180", id="2000-coins"),
|
|
3204
|
+
pytest.param(create_coins_loop, "ff8203e980", id="1000-coins"),
|
|
3205
|
+
pytest.param(create_coins_loop, "ff8201f580", id="500 coins"),
|
|
3206
|
+
pytest.param(deep_recursion, "ff830f424080", id="recurse-1000000"),
|
|
3207
|
+
pytest.param(deep_recursion, "ff82271080", id="recurse-10000"),
|
|
3208
|
+
pytest.param(deep_recursion, "ff6480", id="recurse-100"),
|
|
3209
|
+
],
|
|
3210
|
+
)
|
|
3211
|
+
@pytest.mark.parametrize("old", [True, False])
|
|
3212
|
+
@pytest.mark.anyio
|
|
3213
|
+
async def test_create_block_generator_custom_spend(
|
|
3214
|
+
puzzle: str, solution: str, old: bool, softfork_height: uint32
|
|
3215
|
+
) -> None:
|
|
3216
|
+
solution_str = SerializedProgram.fromhex(solution)
|
|
3217
|
+
puzzle_reveal = SerializedProgram.fromhex(puzzle)
|
|
3218
|
+
puzzle_hash = puzzle_reveal.get_tree_hash()
|
|
3219
|
+
|
|
3220
|
+
mempool_manager, coins = await setup_mempool_with_coins(
|
|
3221
|
+
coin_amounts=list(range(100000000, 100000022)), puzzle_hash=puzzle_hash, height=softfork_height
|
|
3222
|
+
)
|
|
3223
|
+
|
|
3224
|
+
spend_bundles = [
|
|
3225
|
+
SpendBundle(
|
|
3226
|
+
coin_spends=[CoinSpend(coin, puzzle_reveal=puzzle_reveal, solution=solution_str)],
|
|
3227
|
+
aggregated_signature=G2Element(),
|
|
3228
|
+
)
|
|
3229
|
+
for coin in coins
|
|
3230
|
+
]
|
|
3231
|
+
|
|
3232
|
+
for sb in spend_bundles:
|
|
3233
|
+
try:
|
|
3234
|
+
conds2 = await mempool_manager.pre_validate_spendbundle(sb)
|
|
3235
|
+
await mempool_manager.add_spend_bundle(sb, conds2, sb.name(), softfork_height)
|
|
3236
|
+
invariant_check_mempool(mempool_manager.mempool)
|
|
3237
|
+
except Exception as e:
|
|
3238
|
+
print(f"not adding bundle: {e}")
|
|
3239
|
+
# we don't expect this coin to be spent by the resulting generator
|
|
3240
|
+
# so remove it from the list
|
|
3241
|
+
for cs in sb.coin_spends:
|
|
3242
|
+
coins.remove(cs.coin)
|
|
3243
|
+
|
|
3244
|
+
create_block = mempool_manager.create_block_generator if old else mempool_manager.create_block_generator2
|
|
3245
|
+
assert mempool_manager.peak is not None
|
|
3246
|
+
generator = create_block(mempool_manager.peak.header_hash, 10.0)
|
|
3247
|
+
|
|
3248
|
+
if len(coins) == 0:
|
|
3249
|
+
assert generator is None
|
|
3250
|
+
else:
|
|
3251
|
+
assert generator is not None
|
|
3252
|
+
|
|
3253
|
+
assert generator.signature == G2Element()
|
|
3254
|
+
|
|
3255
|
+
removals = set(generator.removals)
|
|
3256
|
+
|
|
3257
|
+
err, conds = run_block_generator2(
|
|
3258
|
+
bytes(generator.program),
|
|
3259
|
+
generator.generator_refs,
|
|
3260
|
+
DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM,
|
|
3261
|
+
0,
|
|
3262
|
+
generator.signature,
|
|
3263
|
+
None,
|
|
3264
|
+
DEFAULT_CONSTANTS,
|
|
3265
|
+
)
|
|
3266
|
+
|
|
3267
|
+
assert err is None
|
|
3268
|
+
assert conds is not None
|
|
3269
|
+
|
|
3270
|
+
assert len(conds.spends) == len(removals)
|
|
3271
|
+
|
|
3272
|
+
for spend in conds.spends:
|
|
3273
|
+
removal = Coin(spend.parent_id, spend.puzzle_hash, uint64(spend.coin_amount))
|
|
3274
|
+
assert removal in coins
|
|
3275
|
+
assert removal in removals
|
|
3276
|
+
|
|
3277
|
+
invariant_check_mempool(mempool_manager.mempool)
|
|
3278
|
+
|
|
3279
|
+
|
|
3166
3280
|
@pytest.mark.anyio
|
|
3167
3281
|
async def test_new_peak_deferred_ff_items() -> None:
|
|
3168
3282
|
"""
|
|
@@ -3269,3 +3383,64 @@ async def test_different_ff_versions() -> None:
|
|
|
3269
3383
|
latest_singleton_lineage2 = new_mi2.bundle_coin_spends[version2_id].latest_singleton_lineage
|
|
3270
3384
|
assert latest_singleton_lineage2 is not None
|
|
3271
3385
|
assert latest_singleton_lineage2.coin_id == new_latest_lineage_id
|
|
3386
|
+
|
|
3387
|
+
|
|
3388
|
+
@pytest.mark.anyio
|
|
3389
|
+
@pytest.mark.parametrize(
|
|
3390
|
+
"condition_and_error",
|
|
3391
|
+
[
|
|
3392
|
+
(ConditionOpcode.ASSERT_HEIGHT_RELATIVE, Err.ASSERT_HEIGHT_RELATIVE_FAILED),
|
|
3393
|
+
(ConditionOpcode.ASSERT_HEIGHT_ABSOLUTE, Err.ASSERT_HEIGHT_ABSOLUTE_FAILED),
|
|
3394
|
+
],
|
|
3395
|
+
)
|
|
3396
|
+
@pytest.mark.parametrize("optimized_path", [True, False])
|
|
3397
|
+
async def test_new_peak_txs_added(condition_and_error: tuple[ConditionOpcode, Err], optimized_path: bool) -> None:
|
|
3398
|
+
"""
|
|
3399
|
+
Tests that deferred transactions because of time-lock are retried once the
|
|
3400
|
+
time-lock allows them to be reconsidered.
|
|
3401
|
+
"""
|
|
3402
|
+
coins = TestCoins([TEST_COIN], {})
|
|
3403
|
+
mempool_manager = await setup_mempool(coins)
|
|
3404
|
+
# Add an item that should go to the pending cache
|
|
3405
|
+
assert mempool_manager.peak is not None
|
|
3406
|
+
condition_height = mempool_manager.peak.height + 1
|
|
3407
|
+
condition, expected_error = condition_and_error
|
|
3408
|
+
_, sb_name, result = await generate_and_add_spendbundle(mempool_manager, [[condition, condition_height]])
|
|
3409
|
+
_, status, error = result
|
|
3410
|
+
assert status == MempoolInclusionStatus.PENDING
|
|
3411
|
+
assert error == expected_error
|
|
3412
|
+
# Advance the mempool beyond the asserted height to retry the test item
|
|
3413
|
+
if optimized_path:
|
|
3414
|
+
spent_coins: Optional[list[bytes32]] = []
|
|
3415
|
+
new_peak_info = await mempool_manager.new_peak(
|
|
3416
|
+
create_test_block_record(height=uint32(condition_height)), spent_coins
|
|
3417
|
+
)
|
|
3418
|
+
# We're not there yet (needs to be higher, not equal)
|
|
3419
|
+
assert new_peak_info.spend_bundle_ids == []
|
|
3420
|
+
assert mempool_manager.get_mempool_item(sb_name, include_pending=False) is None
|
|
3421
|
+
else:
|
|
3422
|
+
spent_coins = None
|
|
3423
|
+
new_peak_info = await mempool_manager.new_peak(
|
|
3424
|
+
create_test_block_record(height=uint32(condition_height + 1)), spent_coins
|
|
3425
|
+
)
|
|
3426
|
+
# The item gets retried successfully now
|
|
3427
|
+
assert new_peak_info.spend_bundle_ids == [sb_name]
|
|
3428
|
+
assert mempool_manager.get_mempool_item(sb_name, include_pending=False) is not None
|
|
3429
|
+
|
|
3430
|
+
|
|
3431
|
+
@pytest.mark.anyio
|
|
3432
|
+
async def test_mempool_item_to_spend_bundle() -> None:
|
|
3433
|
+
"""
|
|
3434
|
+
Tests that we can properly go back to a `SpendBundle` from a `MempoolItem`.
|
|
3435
|
+
"""
|
|
3436
|
+
coins = [Coin(bytes32.random(), IDENTITY_PUZZLE_HASH, uint64(i + 1)) for i in range(random.randint(42, 1337))]
|
|
3437
|
+
mempool_manager = await setup_mempool(TestCoins(coins, {}))
|
|
3438
|
+
random_sample = random.sample(coins, 42)
|
|
3439
|
+
sb = SpendBundle([CoinSpend(c, IDENTITY_PUZZLE, SerializedProgram.to(None)) for c in random_sample], G2Element())
|
|
3440
|
+
sb_name = sb.name()
|
|
3441
|
+
await add_spendbundle(mempool_manager, sb, sb_name)
|
|
3442
|
+
mi = mempool_manager.get_mempool_item(sb_name)
|
|
3443
|
+
assert mi is not None
|
|
3444
|
+
result = mi.to_spend_bundle()
|
|
3445
|
+
assert result == sb
|
|
3446
|
+
assert result.name() == sb_name
|
|
@@ -52,8 +52,10 @@ def test_process_fast_forward_spends_nothing_to_do() -> None:
|
|
|
52
52
|
sb = spend_bundle_from_conditions(conditions, TEST_COIN, sig)
|
|
53
53
|
item = mempool_item_from_spendbundle(sb)
|
|
54
54
|
# This coin is not eligible for fast forward
|
|
55
|
-
assert item.bundle_coin_spends[TEST_COIN_ID].
|
|
56
|
-
internal_mempool_item = InternalMempoolItem(
|
|
55
|
+
assert not item.bundle_coin_spends[TEST_COIN_ID].supports_fast_forward
|
|
56
|
+
internal_mempool_item = InternalMempoolItem(
|
|
57
|
+
sb.aggregated_signature, item.conds, item.height_added_to_mempool, item.bundle_coin_spends
|
|
58
|
+
)
|
|
57
59
|
original_version = dataclasses.replace(internal_mempool_item)
|
|
58
60
|
singleton_ff = SingletonFastForward()
|
|
59
61
|
bundle_coin_spends = singleton_ff.process_fast_forward_spends(
|
|
@@ -63,28 +65,6 @@ def test_process_fast_forward_spends_nothing_to_do() -> None:
|
|
|
63
65
|
assert bundle_coin_spends == original_version.bundle_coin_spends
|
|
64
66
|
|
|
65
67
|
|
|
66
|
-
def test_process_fast_forward_spends_unknown_ff() -> None:
|
|
67
|
-
"""
|
|
68
|
-
This tests the case when we process for the first time but we are unable
|
|
69
|
-
to lookup the latest version from the item's latest singleton lineage
|
|
70
|
-
"""
|
|
71
|
-
test_coin = Coin(TEST_COIN_ID, IDENTITY_PUZZLE_HASH, uint64(1))
|
|
72
|
-
conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, 1]]
|
|
73
|
-
sb = spend_bundle_from_conditions(conditions, test_coin)
|
|
74
|
-
item = mempool_item_from_spendbundle(sb)
|
|
75
|
-
# The coin is eligible for fast forward
|
|
76
|
-
assert item.bundle_coin_spends[test_coin.name()].eligible_for_fast_forward is True
|
|
77
|
-
item.bundle_coin_spends[test_coin.name()].latest_singleton_lineage = None
|
|
78
|
-
internal_mempool_item = InternalMempoolItem(sb, item.conds, item.height_added_to_mempool, item.bundle_coin_spends)
|
|
79
|
-
singleton_ff = SingletonFastForward()
|
|
80
|
-
# We have no fast forward records yet, so we'll process this coin for the
|
|
81
|
-
# first time here, but the item's latest singleton lineage returns None
|
|
82
|
-
with pytest.raises(ValueError, match="Cannot proceed with singleton spend fast forward."):
|
|
83
|
-
singleton_ff.process_fast_forward_spends(
|
|
84
|
-
mempool_item=internal_mempool_item, height=TEST_HEIGHT, constants=DEFAULT_CONSTANTS
|
|
85
|
-
)
|
|
86
|
-
|
|
87
|
-
|
|
88
68
|
def test_process_fast_forward_spends_latest_unspent() -> None:
|
|
89
69
|
"""
|
|
90
70
|
This tests the case when we are the latest singleton version already, so
|
|
@@ -103,9 +83,11 @@ def test_process_fast_forward_spends_latest_unspent() -> None:
|
|
|
103
83
|
conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, test_amount]]
|
|
104
84
|
sb = spend_bundle_from_conditions(conditions, test_coin)
|
|
105
85
|
item = mempool_item_from_spendbundle(sb)
|
|
106
|
-
assert item.bundle_coin_spends[test_coin.name()].
|
|
86
|
+
assert item.bundle_coin_spends[test_coin.name()].supports_fast_forward
|
|
107
87
|
item.bundle_coin_spends[test_coin.name()].latest_singleton_lineage = test_unspent_lineage_info
|
|
108
|
-
internal_mempool_item = InternalMempoolItem(
|
|
88
|
+
internal_mempool_item = InternalMempoolItem(
|
|
89
|
+
sb.aggregated_signature, item.conds, item.height_added_to_mempool, item.bundle_coin_spends
|
|
90
|
+
)
|
|
109
91
|
original_version = dataclasses.replace(internal_mempool_item)
|
|
110
92
|
singleton_ff = SingletonFastForward()
|
|
111
93
|
bundle_coin_spends = singleton_ff.process_fast_forward_spends(
|
|
@@ -168,12 +150,12 @@ def test_perform_the_fast_forward() -> None:
|
|
|
168
150
|
"517b0dadb0c310ded24dd86dff8205398080ff808080"
|
|
169
151
|
)
|
|
170
152
|
test_coin_spend = CoinSpend(test_coin, test_puzzle_reveal, test_solution)
|
|
171
|
-
test_spend_data = BundleCoinSpend(test_coin_spend, False, True, [test_child_coin])
|
|
172
153
|
test_unspent_lineage_info = UnspentLineageInfo(
|
|
173
154
|
coin_id=latest_unspent_coin.name(),
|
|
174
155
|
parent_id=latest_unspent_coin.parent_coin_info,
|
|
175
156
|
parent_parent_id=test_child_coin.parent_coin_info,
|
|
176
157
|
)
|
|
158
|
+
test_spend_data = BundleCoinSpend(test_coin_spend, False, [test_child_coin], uint64(0), test_unspent_lineage_info)
|
|
177
159
|
# Start from a fresh state of fast forward spends
|
|
178
160
|
fast_forward_spends: dict[bytes32, UnspentLineageInfo] = {}
|
|
179
161
|
# Perform the fast forward on the test coin (the grandparent)
|