chia-blockchain 2.5.6rc2__py3-none-any.whl → 2.5.7rc2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chia/_tests/blockchain/blockchain_test_utils.py +6 -7
- chia/_tests/blockchain/test_augmented_chain.py +4 -3
- chia/_tests/blockchain/test_blockchain.py +10 -5
- chia/_tests/clvm/coin_store.py +1 -1
- chia/_tests/cmds/cmd_test_utils.py +84 -97
- chia/_tests/cmds/test_dev_gh.py +1 -1
- chia/_tests/cmds/test_farm_cmd.py +56 -2
- chia/_tests/cmds/wallet/test_consts.py +3 -1
- chia/_tests/cmds/wallet/test_did.py +3 -8
- chia/_tests/cmds/wallet/test_nft.py +6 -6
- chia/_tests/cmds/wallet/test_notifications.py +39 -21
- chia/_tests/cmds/wallet/test_vcs.py +2 -1
- chia/_tests/cmds/wallet/test_wallet.py +160 -136
- chia/_tests/conftest.py +51 -26
- chia/_tests/core/cmds/test_wallet.py +4 -3
- chia/_tests/core/consensus/test_pot_iterations.py +71 -24
- chia/_tests/core/custom_types/test_proof_of_space.py +60 -30
- chia/_tests/core/custom_types/test_spend_bundle.py +1 -4
- chia/_tests/core/data_layer/conftest.py +7 -2
- chia/_tests/core/data_layer/old_format/__init__.py +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-005876c1cdc4d5f1726551b207b9f63efc9cd2f72df80a3a26a1ba73d40d6745-delta-23-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-005876c1cdc4d5f1726551b207b9f63efc9cd2f72df80a3a26a1ba73d40d6745-full-23-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-01b36e72a975cdc00d6514eea81668d19e8ea3150217ae98cb3361688a016fab-delta-9-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-01b36e72a975cdc00d6514eea81668d19e8ea3150217ae98cb3361688a016fab-full-9-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-06147c3b12d73e9b83b686a8c10b4a36a513c8a93c0ff99ae197f06326278be9-delta-5-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-06147c3b12d73e9b83b686a8c10b4a36a513c8a93c0ff99ae197f06326278be9-full-5-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-073c051a5934ad3b8db39eee2189e4300e55f48aaa17ff4ae30eeae088ff544a-delta-22-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-073c051a5934ad3b8db39eee2189e4300e55f48aaa17ff4ae30eeae088ff544a-full-22-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-0cc077559b9c7b4aefe8f8f591c195e0779bebdf89f2ad8285a00ea5f859d965-delta-1-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-0cc077559b9c7b4aefe8f8f591c195e0779bebdf89f2ad8285a00ea5f859d965-full-1-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-16377275567b723b20936d3f1ec0a2fd83f6ac379b922351a5e4c54949069f3b-delta-2-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-16377275567b723b20936d3f1ec0a2fd83f6ac379b922351a5e4c54949069f3b-full-2-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-1cb824a7a5f02cd30ac6c38e8f6216780d9bfa2d24811d282a368dcd541438a7-delta-29-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-1cb824a7a5f02cd30ac6c38e8f6216780d9bfa2d24811d282a368dcd541438a7-full-29-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-27b89dc4809ebc5a3b87757d35e95e2761d978cf121e44fa2773a5c06e4cc7b5-delta-28-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-27b89dc4809ebc5a3b87757d35e95e2761d978cf121e44fa2773a5c06e4cc7b5-full-28-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-28a6b7c134abfaeb0ab58a018313f6c87a61a40a4d9ec9bedf53aa1d12f3ee37-delta-7-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-28a6b7c134abfaeb0ab58a018313f6c87a61a40a4d9ec9bedf53aa1d12f3ee37-full-7-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-30a6bfe7cecbeda259a295dc6de3a436357f52388c3b03d86901e7da68565aeb-delta-19-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-30a6bfe7cecbeda259a295dc6de3a436357f52388c3b03d86901e7da68565aeb-full-19-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-343a2bf9add798e3ac2e6a571823cf9fa7e8a1bed532143354ead2648bd036ef-delta-10-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-343a2bf9add798e3ac2e6a571823cf9fa7e8a1bed532143354ead2648bd036ef-full-10-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4d90efbc1fb3df324193831ea4a57dd5e10e67d9653343eb18d178272adb0447-delta-17-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4d90efbc1fb3df324193831ea4a57dd5e10e67d9653343eb18d178272adb0447-full-17-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4dd2ea099e91635c441f40b36d3f84078a2d818d2dc601c7278e72cbdfe3eca8-delta-20-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4dd2ea099e91635c441f40b36d3f84078a2d818d2dc601c7278e72cbdfe3eca8-full-20-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-509effbdca78639023b933ce6c08a0465fb247e1cd5329e9e9c553940e4b6e46-delta-31-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-509effbdca78639023b933ce6c08a0465fb247e1cd5329e9e9c553940e4b6e46-full-31-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5379a4d9ff29c29d1ef0906d22e82c52472753d31806189ab813c43365341b78-delta-40-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5379a4d9ff29c29d1ef0906d22e82c52472753d31806189ab813c43365341b78-full-40-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-55908eda5686a8f89e4c50672cbe893ec1734fb23449dc03325efe7c414f9aa4-delta-49-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-55908eda5686a8f89e4c50672cbe893ec1734fb23449dc03325efe7c414f9aa4-full-49-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-57cc2691fb1fb986c99a58bcb0e029d0cd0cff41553d703147c54196d7d9ca63-delta-14-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-57cc2691fb1fb986c99a58bcb0e029d0cd0cff41553d703147c54196d7d9ca63-full-14-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5943bf8ae4f5e59969d8570e4f40a8223299febdcfbcf188b3b3e2ab11044e18-delta-34-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5943bf8ae4f5e59969d8570e4f40a8223299febdcfbcf188b3b3e2ab11044e18-full-34-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6518527b7c939bee60ce6b024cbe90d3b9d8913c56b8ce11a4df5da7ff7db1c8-delta-8-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6518527b7c939bee60ce6b024cbe90d3b9d8913c56b8ce11a4df5da7ff7db1c8-full-8-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-66ff26a26620379e14a7c91252d27ee4dbe06ad69a3a390a88642fe757f2b288-delta-45-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-66ff26a26620379e14a7c91252d27ee4dbe06ad69a3a390a88642fe757f2b288-full-45-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6bd0a508ee2c4afbe9d4daa811139fd6e54e7f4e16850cbce999fa30f8bdccd2-delta-6-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6bd0a508ee2c4afbe9d4daa811139fd6e54e7f4e16850cbce999fa30f8bdccd2-full-6-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6ce850d0d77ca743fcc2fc792747472e5d2c1c0813aa43abbb370554428fc897-delta-48-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6ce850d0d77ca743fcc2fc792747472e5d2c1c0813aa43abbb370554428fc897-full-48-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6eb4ca2e1552b156c5969396b49070eb08ad6c96b347359387519be59f7ccaed-delta-26-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6eb4ca2e1552b156c5969396b49070eb08ad6c96b347359387519be59f7ccaed-full-26-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-71c797fb7592d3f0a5a20c79ab8497ddaa0fd9ec17712e109d25c91b3f3c76e5-delta-3-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-71c797fb7592d3f0a5a20c79ab8497ddaa0fd9ec17712e109d25c91b3f3c76e5-full-3-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-73357026053d5a4969e7a6b9aeeef91c14cc6d5f32fc700fe6d21d2a1b22496c-delta-25-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-73357026053d5a4969e7a6b9aeeef91c14cc6d5f32fc700fe6d21d2a1b22496c-full-25-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-7c897e5c46e834ced65bde7de87716acfaa5dffbdb30b5cd9377d8c319df2034-delta-35-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-7c897e5c46e834ced65bde7de87716acfaa5dffbdb30b5cd9377d8c319df2034-full-35-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-87b8394d80d08117a5a1cd04ed8a682564eab7197a2c090159863591b5108874-delta-4-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-87b8394d80d08117a5a1cd04ed8a682564eab7197a2c090159863591b5108874-full-4-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-89eb40b9cc0921c5f5c3feb20927c13a9ada5760f82d219dcee153b7d400165c-delta-41-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-89eb40b9cc0921c5f5c3feb20927c13a9ada5760f82d219dcee153b7d400165c-full-41-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8b649433156b8c924436cdec9c6de26106fd6f73a0528570f48748f7b40d7f8a-delta-21-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8b649433156b8c924436cdec9c6de26106fd6f73a0528570f48748f7b40d7f8a-full-21-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8d364023a0834c8c3077e236a465493acbf488e4f9d1f4c6cc230343c10a8f7d-delta-42-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8d364023a0834c8c3077e236a465493acbf488e4f9d1f4c6cc230343c10a8f7d-full-42-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-925689e24a3d98d98676d816cdd8b73e7b2df057d9d4503da9b27bf91d79666c-delta-38-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-925689e24a3d98d98676d816cdd8b73e7b2df057d9d4503da9b27bf91d79666c-full-38-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-937be3d428b19f521be4f98faecc3307ae11ee731c76992f417fa4268d13859e-delta-11-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-937be3d428b19f521be4f98faecc3307ae11ee731c76992f417fa4268d13859e-full-11-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-97f34af499b79e2111fc296a598fc9654c2467ea038dfea41fd58241fb3642de-delta-32-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-97f34af499b79e2111fc296a598fc9654c2467ea038dfea41fd58241fb3642de-full-32-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-9d1b737243b8a1d0022f2b36ac53333c6280354a74d77f2a3642dcab35204e59-delta-33-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-9d1b737243b8a1d0022f2b36ac53333c6280354a74d77f2a3642dcab35204e59-full-33-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-a6663f98ef6ddf6db55f01163e34bb2e87aa82f0347e79ce31e8dbfa390c480c-delta-47-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-a6663f98ef6ddf6db55f01163e34bb2e87aa82f0347e79ce31e8dbfa390c480c-full-47-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-aa77376d1ccd3664e5c6366e010c52a978fedbf40f5ce262fee71b2e7fe0c6a9-delta-50-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-aa77376d1ccd3664e5c6366e010c52a978fedbf40f5ce262fee71b2e7fe0c6a9-full-50-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b0f28514741ed1a71f5c6544bf92f9e0e493c5f3cf28328909771d8404eff626-delta-24-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b0f28514741ed1a71f5c6544bf92f9e0e493c5f3cf28328909771d8404eff626-full-24-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b3efee5358e6eb89ab3b60db2d128d57eef39e8538fb63c5632412d4f8e7d09e-delta-44-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b3efee5358e6eb89ab3b60db2d128d57eef39e8538fb63c5632412d4f8e7d09e-full-44-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bb0b56b6eb7acbb4e80893b04c72412fe833418232e1ed7b06d97d7a7f08b4e1-delta-16-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bb0b56b6eb7acbb4e80893b04c72412fe833418232e1ed7b06d97d7a7f08b4e1-full-16-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bc45262b757ff494b53bd2a8fba0f5511cc1f9c2a2c5360e04ea8cebbf6409df-delta-13-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bc45262b757ff494b53bd2a8fba0f5511cc1f9c2a2c5360e04ea8cebbf6409df-full-13-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bd0494ba430aff13458b557113b073d226eaf11257dfe26ff3323fa1cfe1335b-delta-39-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bd0494ba430aff13458b557113b073d226eaf11257dfe26ff3323fa1cfe1335b-full-39-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cd04f5fbba1553fa728b4dd8131d4723aaac288e0c7dc080447fbf0872c0a6eb-delta-36-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cd04f5fbba1553fa728b4dd8131d4723aaac288e0c7dc080447fbf0872c0a6eb-full-36-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cdd2399557fb3163a848f08831fdc833703354edb19a0d32a965fdb140f160c2-delta-18-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cdd2399557fb3163a848f08831fdc833703354edb19a0d32a965fdb140f160c2-full-18-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cf7a08fca7b1332095242e4d9800f4b94a3f4eaae88fe8407da42736d54b9e18-delta-37-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cf7a08fca7b1332095242e4d9800f4b94a3f4eaae88fe8407da42736d54b9e18-full-37-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-d1f97465a9f52187e2ef3a0d811a1258f52380a65340c55f3e8e65b92753bc13-delta-15-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-d1f97465a9f52187e2ef3a0d811a1258f52380a65340c55f3e8e65b92753bc13-full-15-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e475eccd4ee597e5ff67b1a249e37d65d6e3f754c3f0379fdb43692513588fef-delta-46-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e475eccd4ee597e5ff67b1a249e37d65d6e3f754c3f0379fdb43692513588fef-full-46-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e82e63517d78fd65b23a05c3b9a98cf905ddad7026995a238bfe634006b84cd0-delta-27-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e82e63517d78fd65b23a05c3b9a98cf905ddad7026995a238bfe634006b84cd0-full-27-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-ed2cf0fd6c0f6237c87c161e1fca303b3fbe6c04e01f652b88720b4572143349-delta-12-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-ed2cf0fd6c0f6237c87c161e1fca303b3fbe6c04e01f652b88720b4572143349-full-12-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f6e454eaf24a83c46a7bed4c19260a0a3ce0ed5c51739cb6d748d4913dc2ef58-delta-30-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f6e454eaf24a83c46a7bed4c19260a0a3ce0ed5c51739cb6d748d4913dc2ef58-full-30-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f7ad2bdf86d9609b4d6381086ec1e296bf558e2ff467ead29dd7fa6e31bacc56-delta-43-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f7ad2bdf86d9609b4d6381086ec1e296bf558e2ff467ead29dd7fa6e31bacc56-full-43-v1.0.dat +0 -0
- chia/_tests/core/data_layer/old_format/files/__init__.py +0 -0
- chia/_tests/core/data_layer/old_format/old_db.sqlite +0 -0
- chia/_tests/core/data_layer/test_data_layer_util.py +18 -21
- chia/_tests/core/data_layer/test_data_rpc.py +77 -28
- chia/_tests/core/data_layer/test_data_store.py +637 -700
- chia/_tests/core/data_layer/test_data_store_schema.py +2 -209
- chia/_tests/core/full_node/ram_db.py +1 -1
- chia/_tests/core/full_node/stores/test_block_store.py +4 -10
- chia/_tests/core/full_node/stores/test_coin_store.py +1 -1
- chia/_tests/core/full_node/test_address_manager.py +3 -3
- chia/_tests/core/full_node/test_block_height_map.py +1 -1
- chia/_tests/core/full_node/test_full_node.py +91 -30
- chia/_tests/core/full_node/test_generator_tools.py +17 -10
- chia/_tests/core/mempool/test_mempool.py +190 -90
- chia/_tests/core/mempool/test_mempool_fee_estimator.py +2 -4
- chia/_tests/core/mempool/test_mempool_item_queries.py +1 -1
- chia/_tests/core/mempool/test_mempool_manager.py +134 -75
- chia/_tests/core/mempool/test_singleton_fast_forward.py +9 -27
- chia/_tests/core/server/serve.py +0 -2
- chia/_tests/core/server/test_rate_limits.py +400 -347
- chia/_tests/core/server/test_server.py +2 -2
- chia/_tests/core/services/test_services.py +7 -7
- chia/_tests/core/test_cost_calculation.py +31 -10
- chia/_tests/core/test_crawler.py +4 -4
- chia/_tests/core/test_db_conversion.py +7 -14
- chia/_tests/core/test_db_validation.py +2 -6
- chia/_tests/core/test_farmer_harvester_rpc.py +34 -1
- chia/_tests/core/test_full_node_rpc.py +28 -24
- chia/_tests/core/test_merkle_set.py +1 -4
- chia/_tests/core/test_seeder.py +1 -1
- chia/_tests/core/util/test_keychain.py +2 -2
- chia/_tests/core/util/test_lru_cache.py +16 -0
- chia/_tests/core/util/test_streamable.py +85 -4
- chia/_tests/environments/wallet.py +4 -1
- chia/_tests/farmer_harvester/test_farmer.py +8 -6
- chia/_tests/farmer_harvester/test_farmer_harvester.py +306 -8
- chia/_tests/farmer_harvester/test_filter_prefix_bits.py +3 -3
- chia/_tests/farmer_harvester/test_third_party_harvesters.py +11 -11
- chia/_tests/fee_estimation/test_fee_estimation_integration.py +2 -2
- chia/_tests/fee_estimation/test_fee_estimation_rpc.py +1 -1
- chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -2
- chia/_tests/generator/test_rom.py +2 -1
- chia/_tests/harvester/__init__.py +0 -0
- chia/_tests/harvester/config.py +4 -0
- chia/_tests/harvester/test_harvester_api.py +157 -0
- chia/_tests/plot_sync/test_plot_sync.py +6 -3
- chia/_tests/plot_sync/test_receiver.py +16 -4
- chia/_tests/plot_sync/test_sender.py +8 -7
- chia/_tests/plot_sync/test_sync_simulated.py +15 -13
- chia/_tests/plot_sync/util.py +3 -2
- chia/_tests/plotting/test_plot_manager.py +21 -5
- chia/_tests/plotting/test_prover.py +106 -0
- chia/_tests/pools/test_pool_cmdline.py +7 -6
- chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -3
- chia/_tests/pools/test_pool_rpc.py +92 -64
- chia/_tests/solver/__init__.py +0 -0
- chia/_tests/solver/config.py +4 -0
- chia/_tests/solver/test_solver_service.py +29 -0
- chia/_tests/timelord/test_new_peak.py +1 -1
- chia/_tests/timelord/test_timelord.py +1 -1
- chia/_tests/util/benchmarks.py +5 -12
- chia/_tests/util/blockchain.py +1 -1
- chia/_tests/util/build_network_protocol_files.py +7 -0
- chia/_tests/util/network_protocol_data.py +26 -0
- chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
- chia/_tests/util/protocol_messages_json.py +19 -0
- chia/_tests/util/setup_nodes.py +21 -2
- chia/_tests/util/spend_sim.py +9 -3
- chia/_tests/util/test_condition_tools.py +3 -2
- chia/_tests/util/test_full_block_utils.py +10 -9
- chia/_tests/util/test_misc.py +10 -10
- chia/_tests/util/test_network.py +32 -1
- chia/_tests/util/test_network_protocol_files.py +333 -318
- chia/_tests/util/test_network_protocol_json.py +6 -0
- chia/_tests/util/test_network_protocol_test.py +27 -0
- chia/_tests/util/test_priority_mutex.py +1 -1
- chia/_tests/util/test_replace_str_to_bytes.py +6 -6
- chia/_tests/wallet/cat_wallet/test_cat_wallet.py +17 -13
- chia/_tests/wallet/cat_wallet/test_trades.py +55 -55
- chia/_tests/wallet/did_wallet/test_did.py +118 -1229
- chia/_tests/wallet/nft_wallet/config.py +1 -1
- chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +73 -96
- chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +15 -12
- chia/_tests/wallet/nft_wallet/test_nft_offers.py +67 -134
- chia/_tests/wallet/nft_wallet/test_nft_wallet.py +31 -26
- chia/_tests/wallet/rpc/test_wallet_rpc.py +765 -371
- chia/_tests/wallet/sync/test_wallet_sync.py +6 -0
- chia/_tests/wallet/test_new_wallet_protocol.py +1 -1
- chia/_tests/wallet/test_signer_protocol.py +2 -2
- chia/_tests/wallet/test_singleton_lifecycle_fast.py +3 -4
- chia/_tests/wallet/test_transaction_store.py +42 -33
- chia/_tests/wallet/test_wallet.py +22 -31
- chia/_tests/wallet/test_wallet_state_manager.py +14 -7
- chia/_tests/wallet/vc_wallet/test_vc_wallet.py +53 -32
- chia/apis.py +2 -0
- chia/cmds/beta.py +7 -3
- chia/cmds/chia.py +2 -0
- chia/cmds/cmd_classes.py +11 -27
- chia/cmds/cmds_util.py +3 -0
- chia/cmds/coin_funcs.py +27 -22
- chia/cmds/configure.py +42 -18
- chia/cmds/dev/data.py +22 -3
- chia/cmds/farm.py +32 -0
- chia/cmds/farm_funcs.py +54 -5
- chia/cmds/init_funcs.py +4 -0
- chia/cmds/keys_funcs.py +8 -10
- chia/cmds/peer_funcs.py +8 -10
- chia/cmds/plotnft_funcs.py +24 -16
- chia/cmds/rpc.py +11 -1
- chia/cmds/show_funcs.py +5 -5
- chia/cmds/solver.py +33 -0
- chia/cmds/solver_funcs.py +21 -0
- chia/cmds/wallet.py +1 -1
- chia/cmds/wallet_funcs.py +149 -96
- chia/consensus/block_body_validation.py +8 -9
- chia/consensus/block_creation.py +9 -10
- chia/consensus/block_header_validation.py +61 -69
- chia/{full_node → consensus}/block_height_map.py +2 -1
- chia/consensus/block_height_map_protocol.py +21 -0
- chia/consensus/block_rewards.py +12 -12
- chia/consensus/blockchain.py +8 -18
- chia/consensus/default_constants.py +6 -6
- chia/consensus/generator_tools.py +1 -1
- chia/consensus/get_block_challenge.py +24 -25
- chia/consensus/pos_quality.py +28 -2
- chia/consensus/pot_iterations.py +15 -17
- chia/daemon/keychain_proxy.py +5 -0
- chia/daemon/server.py +2 -3
- chia/data_layer/data_layer.py +32 -24
- chia/data_layer/data_layer_errors.py +5 -0
- chia/data_layer/data_layer_rpc_api.py +1 -1
- chia/data_layer/data_layer_service.py +8 -0
- chia/data_layer/data_layer_util.py +49 -89
- chia/data_layer/data_layer_wallet.py +20 -17
- chia/data_layer/data_store.py +1051 -1462
- chia/data_layer/download_data.py +44 -115
- chia/{server → data_layer}/start_data_layer.py +2 -1
- chia/data_layer/util/benchmark.py +38 -53
- chia/farmer/farmer.py +3 -0
- chia/farmer/farmer_api.py +104 -5
- chia/farmer/farmer_rpc_api.py +20 -0
- chia/farmer/farmer_rpc_client.py +6 -2
- chia/farmer/farmer_service.py +8 -0
- chia/{server → farmer}/start_farmer.py +4 -3
- chia/full_node/block_store.py +20 -10
- chia/full_node/coin_store.py +12 -4
- chia/full_node/eligible_coin_spends.py +17 -72
- chia/full_node/full_node.py +68 -71
- chia/full_node/full_node_api.py +26 -32
- chia/full_node/full_node_rpc_api.py +44 -32
- chia/full_node/full_node_rpc_client.py +67 -79
- chia/full_node/full_node_service.py +8 -0
- chia/full_node/full_node_store.py +5 -3
- chia/full_node/mempool.py +14 -14
- chia/full_node/mempool_manager.py +67 -89
- chia/{server → full_node}/start_full_node.py +1 -1
- chia/full_node/subscriptions.py +2 -2
- chia/full_node/weight_proof.py +14 -15
- chia/harvester/harvester.py +8 -1
- chia/harvester/harvester_api.py +178 -44
- chia/harvester/harvester_service.py +8 -0
- chia/{server → harvester}/start_harvester.py +1 -1
- chia/introducer/introducer_service.py +8 -0
- chia/{server → introducer}/start_introducer.py +1 -1
- chia/plot_sync/receiver.py +6 -1
- chia/plot_sync/sender.py +7 -4
- chia/plotting/cache.py +37 -28
- chia/plotting/check_plots.py +83 -48
- chia/plotting/create_plots.py +3 -4
- chia/plotting/manager.py +18 -13
- chia/plotting/prover.py +153 -0
- chia/plotting/util.py +14 -6
- chia/pools/pool_wallet.py +6 -4
- chia/protocols/harvester_protocol.py +14 -0
- chia/protocols/outbound_message.py +1 -0
- chia/protocols/pool_protocol.py +1 -1
- chia/protocols/protocol_message_types.py +7 -0
- chia/protocols/shared_protocol.py +2 -0
- chia/protocols/solver_protocol.py +18 -0
- chia/rpc/rpc_server.py +1 -1
- chia/seeder/crawl_store.py +4 -8
- chia/seeder/crawler.py +2 -2
- chia/seeder/crawler_service.py +8 -0
- chia/seeder/start_crawler.py +1 -1
- chia/server/address_manager.py +12 -15
- chia/server/introducer_peers.py +1 -1
- chia/server/node_discovery.py +9 -10
- chia/server/rate_limit_numbers.py +157 -168
- chia/server/rate_limits.py +44 -41
- chia/server/resolve_peer_info.py +5 -0
- chia/server/server.py +17 -7
- chia/server/start_service.py +0 -1
- chia/simulator/block_tools.py +92 -58
- chia/simulator/full_node_simulator.py +1 -1
- chia/simulator/setup_services.py +51 -15
- chia/solver/__init__.py +0 -0
- chia/solver/solver.py +100 -0
- chia/solver/solver_api.py +59 -0
- chia/solver/solver_rpc_api.py +31 -0
- chia/solver/solver_rpc_client.py +16 -0
- chia/solver/solver_service.py +8 -0
- chia/solver/start_solver.py +102 -0
- {mozilla-ca → chia/ssl}/cacert.pem +0 -27
- chia/ssl/create_ssl.py +3 -2
- chia/{server → timelord}/start_timelord.py +1 -1
- chia/timelord/timelord.py +12 -13
- chia/timelord/timelord_service.py +8 -0
- chia/types/blockchain_format/proof_of_space.py +61 -17
- chia/types/coin_spend.py +0 -8
- chia/types/internal_mempool_item.py +3 -3
- chia/types/mempool_item.py +15 -8
- chia/types/mempool_submission_status.py +1 -1
- chia/util/config.py +1 -3
- chia/util/db_wrapper.py +7 -8
- chia/util/initial-config.yaml +46 -0
- chia/util/lru_cache.py +8 -4
- chia/util/network.py +9 -0
- chia/util/service_groups.py +3 -1
- chia/util/streamable.py +38 -8
- chia/util/virtual_project_analysis.py +1 -1
- chia/wallet/cat_wallet/cat_outer_puzzle.py +7 -4
- chia/wallet/cat_wallet/cat_wallet.py +13 -7
- chia/wallet/cat_wallet/r_cat_wallet.py +4 -1
- chia/wallet/conditions.py +1 -3
- chia/wallet/did_wallet/did_wallet.py +27 -332
- chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
- chia/wallet/nft_wallet/nft_wallet.py +9 -7
- chia/wallet/puzzle_drivers.py +7 -8
- chia/{server → wallet}/start_wallet.py +1 -1
- chia/wallet/trade_manager.py +12 -9
- chia/wallet/transaction_record.py +14 -51
- chia/wallet/util/clvm_streamable.py +28 -41
- chia/wallet/util/merkle_utils.py +2 -2
- chia/wallet/util/tx_config.py +3 -6
- chia/wallet/vc_wallet/cr_cat_wallet.py +12 -6
- chia/wallet/vc_wallet/vc_wallet.py +13 -15
- chia/wallet/wallet.py +5 -3
- chia/wallet/wallet_node.py +25 -30
- chia/wallet/wallet_request_types.py +538 -101
- chia/wallet/wallet_rpc_api.py +398 -570
- chia/wallet/wallet_rpc_client.py +144 -332
- chia/wallet/wallet_service.py +8 -0
- chia/wallet/wallet_state_manager.py +53 -42
- chia/wallet/wallet_transaction_store.py +13 -5
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/METADATA +31 -31
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/RECORD +369 -241
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/WHEEL +1 -1
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/entry_points.txt +8 -7
- chia/full_node/mempool_check_conditions.py +0 -102
- chia/server/aliases.py +0 -35
- {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info/licenses}/LICENSE +0 -0
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
import json
|
|
5
|
-
from typing import Any
|
|
5
|
+
from typing import Any
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
8
|
from chia_rs import AugSchemeMPL, G1Element, G2Element
|
|
@@ -23,13 +23,9 @@ from chia.types.condition_opcodes import ConditionOpcode
|
|
|
23
23
|
from chia.types.peer_info import PeerInfo
|
|
24
24
|
from chia.types.signing_mode import CHIP_0002_SIGN_MESSAGE_PREFIX
|
|
25
25
|
from chia.util.bech32m import decode_puzzle_hash, encode_puzzle_hash
|
|
26
|
+
from chia.util.byte_types import hexstr_to_bytes
|
|
26
27
|
from chia.wallet.did_wallet.did_wallet import DIDWallet
|
|
27
|
-
from chia.wallet.did_wallet.did_wallet_puzzles import (
|
|
28
|
-
DID_INNERPUZ_MOD,
|
|
29
|
-
)
|
|
30
28
|
from chia.wallet.singleton import (
|
|
31
|
-
SINGLETON_LAUNCHER_PUZZLE_HASH,
|
|
32
|
-
SINGLETON_TOP_LAYER_MOD_HASH,
|
|
33
29
|
create_singleton_puzzle,
|
|
34
30
|
)
|
|
35
31
|
from chia.wallet.util.address_type import AddressType
|
|
@@ -38,9 +34,8 @@ from chia.wallet.util.wallet_types import WalletType
|
|
|
38
34
|
from chia.wallet.wallet import Wallet
|
|
39
35
|
from chia.wallet.wallet_action_scope import WalletActionScope
|
|
40
36
|
from chia.wallet.wallet_node import WalletNode
|
|
41
|
-
from chia.wallet.wallet_request_types import DIDFindLostDID, DIDGetCurrentCoinInfo, DIDGetInfo
|
|
37
|
+
from chia.wallet.wallet_request_types import DIDFindLostDID, DIDGetCurrentCoinInfo, DIDGetInfo
|
|
42
38
|
from chia.wallet.wallet_rpc_api import WalletRpcApi
|
|
43
|
-
from chia.wallet.wallet_spend_bundle import WalletSpendBundle
|
|
44
39
|
|
|
45
40
|
|
|
46
41
|
async def get_wallet_num(wallet_manager):
|
|
@@ -56,34 +51,12 @@ async def make_did_wallet(
|
|
|
56
51
|
wallet: Wallet,
|
|
57
52
|
amount: uint64,
|
|
58
53
|
action_scope: WalletActionScope,
|
|
59
|
-
recovery_list: list[bytes32] = [],
|
|
60
54
|
metadata: dict[str, str] = {},
|
|
61
55
|
fee: uint64 = uint64(0),
|
|
62
|
-
use_alternate_recovery: bool = False,
|
|
63
56
|
) -> DIDWallet:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
num_of_backup_ids_needed: uint64,
|
|
68
|
-
launcher_id: bytes32,
|
|
69
|
-
metadata: Program = Program.to([]),
|
|
70
|
-
recovery_list_hash: Optional[Program] = None,
|
|
71
|
-
) -> Program:
|
|
72
|
-
# override the default of NIL_TREEHASH with NIL to match other wallet implementations
|
|
73
|
-
nil_recovery = Program.to(None)
|
|
74
|
-
singleton_struct = Program.to((SINGLETON_TOP_LAYER_MOD_HASH, (launcher_id, SINGLETON_LAUNCHER_PUZZLE_HASH)))
|
|
75
|
-
return DID_INNERPUZ_MOD.curry(p2_puzzle_or_hash, nil_recovery, 0, singleton_struct, metadata)
|
|
76
|
-
|
|
77
|
-
if use_alternate_recovery:
|
|
78
|
-
with pytest.MonkeyPatch.context() as m:
|
|
79
|
-
m.setattr("chia.wallet.did_wallet.did_wallet_puzzles.create_innerpuz", alt_create_innerpuz)
|
|
80
|
-
did_wallet = await DIDWallet.create_new_did_wallet(
|
|
81
|
-
wallet_state_manager, wallet, uint64(101), action_scope, metadata=metadata, fee=fee
|
|
82
|
-
)
|
|
83
|
-
else:
|
|
84
|
-
did_wallet = await DIDWallet.create_new_did_wallet(
|
|
85
|
-
wallet_state_manager, wallet, amount, action_scope, backups_ids=recovery_list, metadata=metadata, fee=fee
|
|
86
|
-
)
|
|
57
|
+
did_wallet = await DIDWallet.create_new_did_wallet(
|
|
58
|
+
wallet_state_manager, wallet, amount, action_scope, metadata=metadata, fee=fee
|
|
59
|
+
)
|
|
87
60
|
|
|
88
61
|
return did_wallet
|
|
89
62
|
|
|
@@ -94,16 +67,11 @@ async def make_did_wallet(
|
|
|
94
67
|
"trusted",
|
|
95
68
|
[True, False],
|
|
96
69
|
)
|
|
97
|
-
@pytest.mark.parametrize(
|
|
98
|
-
"use_alternate_recovery",
|
|
99
|
-
[True, False],
|
|
100
|
-
)
|
|
101
70
|
@pytest.mark.anyio
|
|
102
71
|
async def test_creation_from_coin_spend(
|
|
103
72
|
self_hostname: str,
|
|
104
73
|
two_nodes_two_wallets_with_same_keys: OldSimulatorsAndWallets,
|
|
105
74
|
trusted: bool,
|
|
106
|
-
use_alternate_recovery: bool,
|
|
107
75
|
) -> None:
|
|
108
76
|
"""
|
|
109
77
|
Verify that DIDWallet.create_new_did_wallet_from_coin_spend() is called after Singleton creation on
|
|
@@ -151,12 +119,10 @@ async def test_creation_from_coin_spend(
|
|
|
151
119
|
wallet_0,
|
|
152
120
|
uint64(101),
|
|
153
121
|
action_scope,
|
|
154
|
-
use_alternate_recovery=use_alternate_recovery,
|
|
155
122
|
)
|
|
156
123
|
|
|
157
124
|
with pytest.raises(RuntimeError):
|
|
158
125
|
assert await did_wallet_0.get_coin() == set()
|
|
159
|
-
assert await did_wallet_0.get_info_for_recovery() is None
|
|
160
126
|
|
|
161
127
|
await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
|
|
162
128
|
await full_node_api.wait_for_wallets_synced(wallet_nodes=[wallet_node_0, wallet_node_1])
|
|
@@ -187,15 +153,9 @@ async def test_creation_from_coin_spend(
|
|
|
187
153
|
],
|
|
188
154
|
indirect=True,
|
|
189
155
|
)
|
|
190
|
-
@pytest.mark.parametrize(
|
|
191
|
-
"use_alternate_recovery",
|
|
192
|
-
[True, False],
|
|
193
|
-
)
|
|
194
156
|
@pytest.mark.anyio
|
|
195
157
|
@pytest.mark.limit_consensus_modes(reason="irrelevant")
|
|
196
|
-
async def test_creation_from_backup_file(
|
|
197
|
-
wallet_environments: WalletTestFramework, use_alternate_recovery: bool
|
|
198
|
-
) -> None:
|
|
158
|
+
async def test_creation_from_backup_file(wallet_environments: WalletTestFramework) -> None:
|
|
199
159
|
env_0 = wallet_environments.environments[0]
|
|
200
160
|
env_1 = wallet_environments.environments[1]
|
|
201
161
|
env_2 = wallet_environments.environments[2]
|
|
@@ -220,7 +180,6 @@ async def test_creation_from_backup_file(
|
|
|
220
180
|
env_0.xch_wallet,
|
|
221
181
|
uint64(101),
|
|
222
182
|
action_scope,
|
|
223
|
-
use_alternate_recovery=use_alternate_recovery,
|
|
224
183
|
)
|
|
225
184
|
|
|
226
185
|
await wallet_environments.process_pending_states(
|
|
@@ -270,12 +229,9 @@ async def test_creation_from_backup_file(
|
|
|
270
229
|
]
|
|
271
230
|
)
|
|
272
231
|
|
|
273
|
-
# Wallet1 sets up DIDWallet_1 with DIDWallet_0 as backup
|
|
274
|
-
backup_ids = [bytes32.from_hexstr(did_wallet_0.get_my_DID())]
|
|
275
|
-
|
|
276
232
|
async with env_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
277
233
|
did_wallet_1: DIDWallet = await DIDWallet.create_new_did_wallet(
|
|
278
|
-
env_1.wallet_state_manager, env_1.xch_wallet, uint64(201), action_scope
|
|
234
|
+
env_1.wallet_state_manager, env_1.xch_wallet, uint64(201), action_scope
|
|
279
235
|
)
|
|
280
236
|
|
|
281
237
|
await wallet_environments.process_pending_states(
|
|
@@ -335,999 +291,149 @@ async def test_creation_from_backup_file(
|
|
|
335
291
|
backup_data=backup_data,
|
|
336
292
|
)
|
|
337
293
|
did_wallet_2 = env_2.wallet_state_manager.get_wallet(id=uint32(2), required_type=DIDWallet)
|
|
338
|
-
recovery_info = await env_2.rpc_client.did_get_recovery_info(
|
|
339
|
-
DIDGetRecoveryInfo(uint32(env_2.wallet_aliases["did"]))
|
|
340
|
-
)
|
|
341
|
-
assert recovery_info.wallet_id == env_2.wallet_aliases["did"]
|
|
342
|
-
assert recovery_info.backup_dids == backup_ids
|
|
343
294
|
current_coin_info_response = await env_0.rpc_client.did_get_current_coin_info(
|
|
344
295
|
DIDGetCurrentCoinInfo(uint32(env_0.wallet_aliases["did"]))
|
|
345
296
|
)
|
|
346
|
-
# TODO: this check is kind of weak, we should research when this endpoint might actually be useful
|
|
347
297
|
assert current_coin_info_response.wallet_id == env_0.wallet_aliases["did"]
|
|
348
|
-
async with env_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
349
|
-
assert recovery_info.pubkey is not None
|
|
350
|
-
assert recovery_info.newpuzhash is not None
|
|
351
|
-
message_spend_bundle, attest_data = await did_wallet_0.create_attestment(
|
|
352
|
-
recovery_info.coin_name, recovery_info.newpuzhash, recovery_info.pubkey, action_scope
|
|
353
|
-
)
|
|
354
|
-
|
|
355
|
-
await wallet_environments.process_pending_states(
|
|
356
|
-
[
|
|
357
|
-
WalletStateTransition(
|
|
358
|
-
pre_block_balance_updates={
|
|
359
|
-
"did": {
|
|
360
|
-
"spendable_balance": -101,
|
|
361
|
-
"pending_change": 101,
|
|
362
|
-
"pending_coin_removal_count": 1,
|
|
363
|
-
"max_send_amount": -101,
|
|
364
|
-
}
|
|
365
|
-
},
|
|
366
|
-
post_block_balance_updates={
|
|
367
|
-
"did": {
|
|
368
|
-
"spendable_balance": 101,
|
|
369
|
-
"pending_change": -101,
|
|
370
|
-
"pending_coin_removal_count": -1,
|
|
371
|
-
"max_send_amount": 101,
|
|
372
|
-
}
|
|
373
|
-
},
|
|
374
|
-
),
|
|
375
|
-
WalletStateTransition(
|
|
376
|
-
pre_block_balance_updates={},
|
|
377
|
-
post_block_balance_updates={},
|
|
378
|
-
),
|
|
379
|
-
WalletStateTransition(
|
|
380
|
-
pre_block_balance_updates={
|
|
381
|
-
"did": {
|
|
382
|
-
"init": True,
|
|
383
|
-
}
|
|
384
|
-
},
|
|
385
|
-
post_block_balance_updates={},
|
|
386
|
-
),
|
|
387
|
-
]
|
|
388
|
-
)
|
|
389
|
-
|
|
390
|
-
(
|
|
391
|
-
test_info_list,
|
|
392
|
-
test_message_spend_bundle,
|
|
393
|
-
) = await did_wallet_2.load_attest_files_for_recovery_spend([attest_data])
|
|
394
|
-
assert message_spend_bundle == test_message_spend_bundle
|
|
395
|
-
|
|
396
|
-
async with env_2.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
397
|
-
assert did_wallet_2.did_info.temp_coin is not None
|
|
398
|
-
await did_wallet_2.recovery_spend(
|
|
399
|
-
did_wallet_2.did_info.temp_coin,
|
|
400
|
-
recovery_info.newpuzhash,
|
|
401
|
-
test_info_list,
|
|
402
|
-
recovery_info.pubkey,
|
|
403
|
-
test_message_spend_bundle,
|
|
404
|
-
action_scope,
|
|
405
|
-
)
|
|
406
|
-
|
|
407
|
-
await wallet_environments.process_pending_states(
|
|
408
|
-
[
|
|
409
|
-
WalletStateTransition(
|
|
410
|
-
pre_block_balance_updates={},
|
|
411
|
-
post_block_balance_updates={},
|
|
412
|
-
),
|
|
413
|
-
WalletStateTransition(
|
|
414
|
-
pre_block_balance_updates={},
|
|
415
|
-
post_block_balance_updates={
|
|
416
|
-
"did": {
|
|
417
|
-
"confirmed_wallet_balance": -201,
|
|
418
|
-
"unconfirmed_wallet_balance": -201,
|
|
419
|
-
"spendable_balance": -201,
|
|
420
|
-
"max_send_amount": -201,
|
|
421
|
-
"unspent_coin_count": -1,
|
|
422
|
-
}
|
|
423
|
-
},
|
|
424
|
-
),
|
|
425
|
-
WalletStateTransition(
|
|
426
|
-
pre_block_balance_updates={
|
|
427
|
-
"did": {
|
|
428
|
-
"unconfirmed_wallet_balance": 201,
|
|
429
|
-
"pending_coin_removal_count": 2,
|
|
430
|
-
}
|
|
431
|
-
},
|
|
432
|
-
post_block_balance_updates={
|
|
433
|
-
"did": {
|
|
434
|
-
"confirmed_wallet_balance": 201,
|
|
435
|
-
"spendable_balance": 201,
|
|
436
|
-
"max_send_amount": 201,
|
|
437
|
-
"unspent_coin_count": 1,
|
|
438
|
-
"pending_coin_removal_count": -2,
|
|
439
|
-
}
|
|
440
|
-
},
|
|
441
|
-
),
|
|
442
|
-
]
|
|
443
|
-
)
|
|
444
298
|
|
|
445
299
|
for wallet in [did_wallet_0, did_wallet_1, did_wallet_2]:
|
|
446
300
|
assert wallet.wallet_state_manager.wallets[wallet.id()] == wallet
|
|
447
301
|
|
|
448
|
-
some_ph = bytes32(32 * b"\2")
|
|
449
|
-
async with env_2.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
450
|
-
await did_wallet_2.create_exit_spend(some_ph, action_scope)
|
|
451
|
-
|
|
452
|
-
await wallet_environments.process_pending_states(
|
|
453
|
-
[
|
|
454
|
-
WalletStateTransition(
|
|
455
|
-
pre_block_balance_updates={},
|
|
456
|
-
post_block_balance_updates={},
|
|
457
|
-
),
|
|
458
|
-
WalletStateTransition(
|
|
459
|
-
pre_block_balance_updates={},
|
|
460
|
-
post_block_balance_updates={},
|
|
461
|
-
),
|
|
462
|
-
WalletStateTransition(
|
|
463
|
-
pre_block_balance_updates={
|
|
464
|
-
"did": {
|
|
465
|
-
"unconfirmed_wallet_balance": -201,
|
|
466
|
-
"spendable_balance": -201,
|
|
467
|
-
"max_send_amount": -201,
|
|
468
|
-
"pending_coin_removal_count": 1,
|
|
469
|
-
}
|
|
470
|
-
},
|
|
471
|
-
post_block_balance_updates={
|
|
472
|
-
"did": {
|
|
473
|
-
"confirmed_wallet_balance": -201,
|
|
474
|
-
"unspent_coin_count": -1,
|
|
475
|
-
"pending_coin_removal_count": -1,
|
|
476
|
-
}
|
|
477
|
-
},
|
|
478
|
-
),
|
|
479
|
-
]
|
|
480
|
-
)
|
|
481
|
-
|
|
482
|
-
async def get_coins_with_ph() -> bool:
|
|
483
|
-
coins = await wallet_environments.full_node.full_node.coin_store.get_coin_records_by_puzzle_hash(True, some_ph)
|
|
484
|
-
return len(coins) == 1
|
|
485
|
-
|
|
486
|
-
await time_out_assert(15, get_coins_with_ph, True)
|
|
487
|
-
|
|
488
|
-
for wallet in [did_wallet_0, did_wallet_1]:
|
|
489
|
-
assert wallet.wallet_state_manager.wallets[wallet.id()] == wallet
|
|
490
|
-
|
|
491
302
|
|
|
492
303
|
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
493
|
-
@pytest.mark.parametrize("wallet_environments", [{"num_environments":
|
|
494
|
-
@pytest.mark.parametrize(
|
|
495
|
-
"use_alternate_recovery",
|
|
496
|
-
[True, False],
|
|
497
|
-
)
|
|
304
|
+
@pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
|
|
498
305
|
@pytest.mark.anyio
|
|
499
|
-
async def
|
|
500
|
-
wallet_environments: WalletTestFramework, use_alternate_recovery: bool
|
|
501
|
-
) -> None:
|
|
306
|
+
async def test_did_find_lost_did(wallet_environments: WalletTestFramework):
|
|
502
307
|
env_0 = wallet_environments.environments[0]
|
|
503
|
-
env_1 = wallet_environments.environments[1]
|
|
504
308
|
wallet_node_0 = env_0.node
|
|
505
|
-
wallet_node_1 = env_1.node
|
|
506
309
|
wallet_0 = env_0.xch_wallet
|
|
507
|
-
wallet_1 = env_1.xch_wallet
|
|
508
310
|
|
|
509
311
|
env_0.wallet_aliases = {
|
|
510
312
|
"xch": 1,
|
|
511
313
|
"did": 2,
|
|
512
314
|
}
|
|
513
|
-
env_1.wallet_aliases = {
|
|
514
|
-
"xch": 1,
|
|
515
|
-
"did": 2,
|
|
516
|
-
}
|
|
517
315
|
|
|
518
316
|
async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
519
|
-
|
|
317
|
+
did_wallet_0 = await make_did_wallet(
|
|
520
318
|
wallet_node_0.wallet_state_manager,
|
|
521
319
|
wallet_0,
|
|
522
320
|
uint64(101),
|
|
523
321
|
action_scope,
|
|
524
|
-
use_alternate_recovery=use_alternate_recovery,
|
|
525
|
-
)
|
|
526
|
-
assert did_wallet.get_name() == "Profile 1"
|
|
527
|
-
recovery_list = [bytes32.from_hexstr(did_wallet.get_my_DID())]
|
|
528
|
-
|
|
529
|
-
async with wallet_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
530
|
-
did_wallet_2: DIDWallet = await DIDWallet.create_new_did_wallet(
|
|
531
|
-
wallet_node_1.wallet_state_manager, wallet_1, uint64(101), action_scope, recovery_list
|
|
532
|
-
)
|
|
533
|
-
|
|
534
|
-
await wallet_environments.process_pending_states(
|
|
535
|
-
[
|
|
536
|
-
WalletStateTransition(
|
|
537
|
-
pre_block_balance_updates={
|
|
538
|
-
"xch": {
|
|
539
|
-
"set_remainder": True,
|
|
540
|
-
},
|
|
541
|
-
"did": {
|
|
542
|
-
"init": True,
|
|
543
|
-
"unconfirmed_wallet_balance": 101,
|
|
544
|
-
"pending_change": 101,
|
|
545
|
-
"pending_coin_removal_count": 1,
|
|
546
|
-
},
|
|
547
|
-
},
|
|
548
|
-
post_block_balance_updates={
|
|
549
|
-
"xch": {
|
|
550
|
-
"set_remainder": True,
|
|
551
|
-
},
|
|
552
|
-
"did": {
|
|
553
|
-
"confirmed_wallet_balance": 101,
|
|
554
|
-
"spendable_balance": 101,
|
|
555
|
-
"max_send_amount": 101,
|
|
556
|
-
"unspent_coin_count": 1,
|
|
557
|
-
"pending_change": -101,
|
|
558
|
-
"pending_coin_removal_count": -1,
|
|
559
|
-
},
|
|
560
|
-
},
|
|
561
|
-
),
|
|
562
|
-
WalletStateTransition(
|
|
563
|
-
pre_block_balance_updates={
|
|
564
|
-
"xch": {
|
|
565
|
-
"set_remainder": True,
|
|
566
|
-
},
|
|
567
|
-
"did": {
|
|
568
|
-
"init": True,
|
|
569
|
-
"unconfirmed_wallet_balance": 101,
|
|
570
|
-
"pending_change": 101,
|
|
571
|
-
"pending_coin_removal_count": 1,
|
|
572
|
-
},
|
|
573
|
-
},
|
|
574
|
-
post_block_balance_updates={
|
|
575
|
-
"xch": {
|
|
576
|
-
"set_remainder": True,
|
|
577
|
-
},
|
|
578
|
-
"did": {
|
|
579
|
-
"confirmed_wallet_balance": 101,
|
|
580
|
-
"spendable_balance": 101,
|
|
581
|
-
"max_send_amount": 101,
|
|
582
|
-
"unspent_coin_count": 1,
|
|
583
|
-
"pending_change": -101,
|
|
584
|
-
"pending_coin_removal_count": -1,
|
|
585
|
-
},
|
|
586
|
-
},
|
|
587
|
-
),
|
|
588
|
-
]
|
|
589
|
-
)
|
|
590
|
-
assert did_wallet_2.did_info.backup_ids == recovery_list
|
|
591
|
-
|
|
592
|
-
recovery_list.append(bytes32.from_hexstr(did_wallet_2.get_my_DID()))
|
|
593
|
-
|
|
594
|
-
async with wallet_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
595
|
-
did_wallet_3: DIDWallet = await DIDWallet.create_new_did_wallet(
|
|
596
|
-
wallet_node_1.wallet_state_manager, wallet_1, uint64(201), action_scope, recovery_list
|
|
597
|
-
)
|
|
598
|
-
|
|
599
|
-
env_1.wallet_aliases["did_2"] = 3
|
|
600
|
-
|
|
601
|
-
await wallet_environments.process_pending_states(
|
|
602
|
-
[
|
|
603
|
-
WalletStateTransition(
|
|
604
|
-
pre_block_balance_updates={},
|
|
605
|
-
post_block_balance_updates={},
|
|
606
|
-
),
|
|
607
|
-
WalletStateTransition(
|
|
608
|
-
pre_block_balance_updates={
|
|
609
|
-
"xch": {
|
|
610
|
-
"set_remainder": True,
|
|
611
|
-
},
|
|
612
|
-
"did": {
|
|
613
|
-
"set_remainder": True,
|
|
614
|
-
},
|
|
615
|
-
"did_2": {
|
|
616
|
-
"init": True,
|
|
617
|
-
"unconfirmed_wallet_balance": 201,
|
|
618
|
-
"pending_change": 201,
|
|
619
|
-
"pending_coin_removal_count": 1,
|
|
620
|
-
},
|
|
621
|
-
},
|
|
622
|
-
post_block_balance_updates={
|
|
623
|
-
"xch": {
|
|
624
|
-
"set_remainder": True,
|
|
625
|
-
},
|
|
626
|
-
"did": {
|
|
627
|
-
"set_remainder": True,
|
|
628
|
-
},
|
|
629
|
-
"did_2": {
|
|
630
|
-
"confirmed_wallet_balance": 201,
|
|
631
|
-
"spendable_balance": 201,
|
|
632
|
-
"max_send_amount": 201,
|
|
633
|
-
"unspent_coin_count": 1,
|
|
634
|
-
"pending_change": -201,
|
|
635
|
-
"pending_coin_removal_count": -1,
|
|
636
|
-
},
|
|
637
|
-
},
|
|
638
|
-
),
|
|
639
|
-
]
|
|
640
|
-
)
|
|
641
|
-
coin = await did_wallet_3.get_coin()
|
|
642
|
-
|
|
643
|
-
backup_data = did_wallet_3.create_backup()
|
|
644
|
-
|
|
645
|
-
async with wallet_node_0.wallet_state_manager.lock:
|
|
646
|
-
did_wallet_4 = await DIDWallet.create_new_did_wallet_from_recovery(
|
|
647
|
-
wallet_node_0.wallet_state_manager,
|
|
648
|
-
wallet_0,
|
|
649
|
-
backup_data,
|
|
650
|
-
)
|
|
651
|
-
assert did_wallet_4.get_name() == "Profile 2"
|
|
652
|
-
env_0.wallet_aliases["did_2"] = 3
|
|
653
|
-
|
|
654
|
-
pubkey = (await did_wallet_4.wallet_state_manager.get_unused_derivation_record(did_wallet_2.wallet_info.id)).pubkey
|
|
655
|
-
new_ph = did_wallet_4.did_info.temp_puzhash
|
|
656
|
-
async with did_wallet.wallet_state_manager.new_action_scope(
|
|
657
|
-
wallet_environments.tx_config, push=True
|
|
658
|
-
) as action_scope:
|
|
659
|
-
message_spend_bundle, attest1 = await did_wallet.create_attestment(coin.name(), new_ph, pubkey, action_scope)
|
|
660
|
-
|
|
661
|
-
async with did_wallet_2.wallet_state_manager.new_action_scope(
|
|
662
|
-
wallet_environments.tx_config, push=True
|
|
663
|
-
) as action_scope_2:
|
|
664
|
-
message_spend_bundle2, attest2 = await did_wallet_2.create_attestment(
|
|
665
|
-
coin.name(), new_ph, pubkey, action_scope_2
|
|
666
322
|
)
|
|
667
323
|
|
|
668
|
-
message_spend_bundle = message_spend_bundle.aggregate([message_spend_bundle, message_spend_bundle2])
|
|
669
|
-
|
|
670
|
-
(
|
|
671
|
-
test_info_list,
|
|
672
|
-
test_message_spend_bundle,
|
|
673
|
-
) = await did_wallet_4.load_attest_files_for_recovery_spend([attest1, attest2])
|
|
674
|
-
assert message_spend_bundle == test_message_spend_bundle
|
|
675
|
-
|
|
676
|
-
await wallet_environments.process_pending_states(
|
|
677
|
-
[
|
|
678
|
-
WalletStateTransition(
|
|
679
|
-
pre_block_balance_updates={
|
|
680
|
-
"did": {
|
|
681
|
-
"spendable_balance": -101,
|
|
682
|
-
"pending_change": 101,
|
|
683
|
-
"max_send_amount": -101,
|
|
684
|
-
"pending_coin_removal_count": 1,
|
|
685
|
-
"set_remainder": True,
|
|
686
|
-
},
|
|
687
|
-
"did_2": {
|
|
688
|
-
"init": True,
|
|
689
|
-
"unconfirmed_wallet_balance": 0,
|
|
690
|
-
"pending_change": 0,
|
|
691
|
-
"pending_coin_removal_count": 0,
|
|
692
|
-
},
|
|
693
|
-
},
|
|
694
|
-
post_block_balance_updates={
|
|
695
|
-
"did": {
|
|
696
|
-
"spendable_balance": 101,
|
|
697
|
-
"pending_change": -101,
|
|
698
|
-
"max_send_amount": 101,
|
|
699
|
-
"pending_coin_removal_count": -1,
|
|
700
|
-
},
|
|
701
|
-
"did_2": {
|
|
702
|
-
"confirmed_wallet_balance": 0,
|
|
703
|
-
"spendable_balance": 0,
|
|
704
|
-
"max_send_amount": 0,
|
|
705
|
-
"unspent_coin_count": 0,
|
|
706
|
-
"pending_change": 0,
|
|
707
|
-
"pending_coin_removal_count": 0,
|
|
708
|
-
},
|
|
709
|
-
},
|
|
710
|
-
),
|
|
711
|
-
WalletStateTransition(
|
|
712
|
-
pre_block_balance_updates={
|
|
713
|
-
"did": {
|
|
714
|
-
"spendable_balance": -101,
|
|
715
|
-
"pending_change": 101,
|
|
716
|
-
"max_send_amount": -101,
|
|
717
|
-
"pending_coin_removal_count": 1,
|
|
718
|
-
"set_remainder": True,
|
|
719
|
-
},
|
|
720
|
-
},
|
|
721
|
-
post_block_balance_updates={
|
|
722
|
-
"did": {
|
|
723
|
-
"spendable_balance": 101,
|
|
724
|
-
"pending_change": -101,
|
|
725
|
-
"max_send_amount": 101,
|
|
726
|
-
"pending_coin_removal_count": -1,
|
|
727
|
-
},
|
|
728
|
-
},
|
|
729
|
-
),
|
|
730
|
-
]
|
|
731
|
-
)
|
|
732
|
-
|
|
733
|
-
async with did_wallet_4.wallet_state_manager.new_action_scope(
|
|
734
|
-
wallet_environments.tx_config, push=True
|
|
735
|
-
) as action_scope:
|
|
736
|
-
await did_wallet_4.recovery_spend(coin, new_ph, test_info_list, pubkey, message_spend_bundle, action_scope)
|
|
737
|
-
|
|
738
|
-
await wallet_environments.process_pending_states(
|
|
739
|
-
[
|
|
740
|
-
WalletStateTransition(
|
|
741
|
-
pre_block_balance_updates={
|
|
742
|
-
"did_2": {
|
|
743
|
-
"unconfirmed_wallet_balance": 201,
|
|
744
|
-
"pending_change": 0,
|
|
745
|
-
"pending_coin_removal_count": 3,
|
|
746
|
-
},
|
|
747
|
-
},
|
|
748
|
-
post_block_balance_updates={
|
|
749
|
-
"did_2": {
|
|
750
|
-
"confirmed_wallet_balance": 201,
|
|
751
|
-
"spendable_balance": 201,
|
|
752
|
-
"max_send_amount": 201,
|
|
753
|
-
"unspent_coin_count": 1,
|
|
754
|
-
"pending_change": 0,
|
|
755
|
-
"pending_coin_removal_count": -3,
|
|
756
|
-
},
|
|
757
|
-
},
|
|
758
|
-
),
|
|
759
|
-
WalletStateTransition(
|
|
760
|
-
pre_block_balance_updates={
|
|
761
|
-
"did_2": {
|
|
762
|
-
"unconfirmed_wallet_balance": 0, # TODO: fix pre-block balances for recovery
|
|
763
|
-
"spendable_balance": 0,
|
|
764
|
-
"pending_change": 0,
|
|
765
|
-
"max_send_amount": 0,
|
|
766
|
-
"pending_coin_removal_count": 0,
|
|
767
|
-
"set_remainder": True,
|
|
768
|
-
},
|
|
769
|
-
},
|
|
770
|
-
post_block_balance_updates={
|
|
771
|
-
"did_2": {
|
|
772
|
-
"confirmed_wallet_balance": -201,
|
|
773
|
-
"spendable_balance": -201,
|
|
774
|
-
"max_send_amount": -201,
|
|
775
|
-
"unspent_coin_count": -1,
|
|
776
|
-
"set_remainder": True,
|
|
777
|
-
},
|
|
778
|
-
},
|
|
779
|
-
),
|
|
780
|
-
]
|
|
781
|
-
)
|
|
782
|
-
|
|
783
|
-
for wallet in [did_wallet, did_wallet_2, did_wallet_3, did_wallet_4]:
|
|
784
|
-
assert wallet.wallet_state_manager.wallets[wallet.id()] == wallet
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
788
|
-
@pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
|
|
789
|
-
@pytest.mark.parametrize(
|
|
790
|
-
"use_alternate_recovery",
|
|
791
|
-
[True, False],
|
|
792
|
-
)
|
|
793
|
-
@pytest.mark.anyio
|
|
794
|
-
async def test_did_recovery_with_empty_set(wallet_environments: WalletTestFramework, use_alternate_recovery: bool):
|
|
795
|
-
env_0 = wallet_environments.environments[0]
|
|
796
|
-
wallet_node_0 = env_0.node
|
|
797
|
-
wallet_0 = env_0.xch_wallet
|
|
798
|
-
|
|
799
|
-
env_0.wallet_aliases = {
|
|
800
|
-
"xch": 1,
|
|
801
|
-
"did": 2,
|
|
802
|
-
}
|
|
803
|
-
|
|
804
|
-
async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
805
|
-
ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
|
|
806
|
-
|
|
807
|
-
async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
808
|
-
did_wallet: DIDWallet = await make_did_wallet(
|
|
809
|
-
wallet_node_0.wallet_state_manager,
|
|
810
|
-
wallet_0,
|
|
811
|
-
uint64(101),
|
|
812
|
-
action_scope,
|
|
813
|
-
use_alternate_recovery=use_alternate_recovery,
|
|
814
|
-
)
|
|
815
|
-
|
|
816
|
-
await wallet_environments.process_pending_states(
|
|
817
|
-
[
|
|
818
|
-
WalletStateTransition(
|
|
819
|
-
pre_block_balance_updates={
|
|
820
|
-
"xch": {
|
|
821
|
-
"set_remainder": True,
|
|
822
|
-
},
|
|
823
|
-
"did": {
|
|
824
|
-
"init": True,
|
|
825
|
-
"unconfirmed_wallet_balance": 101,
|
|
826
|
-
"pending_change": 101,
|
|
827
|
-
"pending_coin_removal_count": 1,
|
|
828
|
-
},
|
|
829
|
-
},
|
|
830
|
-
post_block_balance_updates={
|
|
831
|
-
"xch": {
|
|
832
|
-
"set_remainder": True,
|
|
833
|
-
},
|
|
834
|
-
"did": {
|
|
835
|
-
"confirmed_wallet_balance": 101,
|
|
836
|
-
"spendable_balance": 101,
|
|
837
|
-
"max_send_amount": 101,
|
|
838
|
-
"unspent_coin_count": 1,
|
|
839
|
-
"pending_change": -101,
|
|
840
|
-
"pending_coin_removal_count": -1,
|
|
841
|
-
},
|
|
842
|
-
},
|
|
843
|
-
),
|
|
844
|
-
]
|
|
845
|
-
)
|
|
846
|
-
coin = await did_wallet.get_coin()
|
|
847
|
-
info: list[tuple[bytes, bytes, int]] = []
|
|
848
|
-
pubkey = (await did_wallet.wallet_state_manager.get_unused_derivation_record(did_wallet.wallet_info.id)).pubkey
|
|
849
|
-
with pytest.raises(Exception): # We expect a CLVM 80 error for this test
|
|
850
|
-
async with did_wallet.wallet_state_manager.new_action_scope(
|
|
851
|
-
wallet_environments.tx_config, push=False
|
|
852
|
-
) as action_scope:
|
|
853
|
-
await did_wallet.recovery_spend(
|
|
854
|
-
coin,
|
|
855
|
-
ph,
|
|
856
|
-
info,
|
|
857
|
-
pubkey,
|
|
858
|
-
WalletSpendBundle([], AugSchemeMPL.aggregate([])),
|
|
859
|
-
action_scope,
|
|
860
|
-
)
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
864
|
-
@pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
|
|
865
|
-
@pytest.mark.parametrize(
|
|
866
|
-
"use_alternate_recovery",
|
|
867
|
-
[True, False],
|
|
868
|
-
)
|
|
869
|
-
@pytest.mark.anyio
|
|
870
|
-
async def test_did_find_lost_did(wallet_environments: WalletTestFramework, use_alternate_recovery: bool):
|
|
871
|
-
env_0 = wallet_environments.environments[0]
|
|
872
|
-
wallet_node_0 = env_0.node
|
|
873
|
-
wallet_0 = env_0.xch_wallet
|
|
874
|
-
|
|
875
|
-
env_0.wallet_aliases = {
|
|
876
|
-
"xch": 1,
|
|
877
|
-
"did": 2,
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
881
|
-
did_wallet_0 = await make_did_wallet(
|
|
882
|
-
wallet_node_0.wallet_state_manager,
|
|
883
|
-
wallet_0,
|
|
884
|
-
uint64(101),
|
|
885
|
-
action_scope,
|
|
886
|
-
use_alternate_recovery=use_alternate_recovery,
|
|
887
|
-
)
|
|
888
|
-
|
|
889
|
-
await wallet_environments.process_pending_states(
|
|
890
|
-
[
|
|
891
|
-
WalletStateTransition(
|
|
892
|
-
pre_block_balance_updates={
|
|
893
|
-
"xch": {
|
|
894
|
-
"set_remainder": True,
|
|
895
|
-
},
|
|
896
|
-
"did": {
|
|
897
|
-
"init": True,
|
|
898
|
-
"unconfirmed_wallet_balance": 101,
|
|
899
|
-
"pending_change": 101,
|
|
900
|
-
"pending_coin_removal_count": 1,
|
|
901
|
-
},
|
|
902
|
-
},
|
|
903
|
-
post_block_balance_updates={
|
|
904
|
-
"xch": {
|
|
905
|
-
"set_remainder": True,
|
|
906
|
-
},
|
|
907
|
-
"did": {
|
|
908
|
-
"confirmed_wallet_balance": 101,
|
|
909
|
-
"spendable_balance": 101,
|
|
910
|
-
"max_send_amount": 101,
|
|
911
|
-
"unspent_coin_count": 1,
|
|
912
|
-
"pending_change": -101,
|
|
913
|
-
"pending_coin_removal_count": -1,
|
|
914
|
-
},
|
|
915
|
-
},
|
|
916
|
-
),
|
|
917
|
-
]
|
|
918
|
-
)
|
|
919
|
-
|
|
920
|
-
# Delete the coin and wallet
|
|
921
|
-
coin = await did_wallet_0.get_coin()
|
|
922
|
-
await wallet_node_0.wallet_state_manager.coin_store.delete_coin_record(coin.name())
|
|
923
|
-
await wallet_node_0.wallet_state_manager.delete_wallet(did_wallet_0.wallet_info.id)
|
|
924
|
-
wallet_node_0.wallet_state_manager.wallets.pop(did_wallet_0.wallet_info.id)
|
|
925
|
-
assert len(wallet_node_0.wallet_state_manager.wallets) == 1
|
|
926
|
-
# Find lost DID
|
|
927
|
-
assert did_wallet_0.did_info.origin_coin is not None # mypy
|
|
928
|
-
await env_0.rpc_client.find_lost_did(DIDFindLostDID(did_wallet_0.did_info.origin_coin.name().hex()))
|
|
929
|
-
did_wallets = list(
|
|
930
|
-
filter(
|
|
931
|
-
lambda w: (w.type == WalletType.DECENTRALIZED_ID),
|
|
932
|
-
await wallet_node_0.wallet_state_manager.get_all_wallet_info_entries(),
|
|
933
|
-
)
|
|
934
|
-
)
|
|
935
|
-
did_wallet = wallet_node_0.wallet_state_manager.wallets[did_wallets[0].id]
|
|
936
|
-
assert isinstance(did_wallet, DIDWallet)
|
|
937
|
-
env_0.wallet_aliases["did_found"] = did_wallets[0].id
|
|
938
|
-
await env_0.change_balances(
|
|
939
|
-
{
|
|
940
|
-
"did_found": {
|
|
941
|
-
"init": True,
|
|
942
|
-
"confirmed_wallet_balance": 101,
|
|
943
|
-
"unconfirmed_wallet_balance": 101,
|
|
944
|
-
"spendable_balance": 101,
|
|
945
|
-
"max_send_amount": 101,
|
|
946
|
-
"unspent_coin_count": 1,
|
|
947
|
-
}
|
|
948
|
-
}
|
|
949
|
-
)
|
|
950
|
-
await env_0.check_balances()
|
|
951
|
-
|
|
952
|
-
# Spend DID
|
|
953
|
-
recovery_list = [bytes32.fromhex(did_wallet.get_my_DID())]
|
|
954
|
-
await did_wallet.update_recovery_list(recovery_list, uint64(1))
|
|
955
|
-
assert did_wallet.did_info.backup_ids == recovery_list
|
|
956
|
-
async with did_wallet.wallet_state_manager.new_action_scope(
|
|
957
|
-
wallet_environments.tx_config, push=True
|
|
958
|
-
) as action_scope:
|
|
959
|
-
await did_wallet.create_update_spend(action_scope)
|
|
960
|
-
|
|
961
|
-
await wallet_environments.process_pending_states(
|
|
962
|
-
[
|
|
963
|
-
WalletStateTransition(
|
|
964
|
-
pre_block_balance_updates={
|
|
965
|
-
"did_found": {
|
|
966
|
-
"spendable_balance": -101,
|
|
967
|
-
"max_send_amount": -101,
|
|
968
|
-
"pending_change": 101,
|
|
969
|
-
"pending_coin_removal_count": 1,
|
|
970
|
-
},
|
|
971
|
-
},
|
|
972
|
-
post_block_balance_updates={
|
|
973
|
-
"did_found": {
|
|
974
|
-
"spendable_balance": 101,
|
|
975
|
-
"max_send_amount": 101,
|
|
976
|
-
"pending_change": -101,
|
|
977
|
-
"pending_coin_removal_count": -1,
|
|
978
|
-
},
|
|
979
|
-
},
|
|
980
|
-
),
|
|
981
|
-
]
|
|
982
|
-
)
|
|
983
|
-
|
|
984
|
-
# Delete the coin and change inner puzzle
|
|
985
|
-
coin = await did_wallet.get_coin()
|
|
986
|
-
await wallet_node_0.wallet_state_manager.coin_store.delete_coin_record(coin.name())
|
|
987
|
-
with wallet_environments.new_puzzle_hashes_allowed():
|
|
988
|
-
async with did_wallet.wallet_state_manager.new_action_scope(
|
|
989
|
-
wallet_environments.tx_config, push=True
|
|
990
|
-
) as action_scope:
|
|
991
|
-
new_inner_puzzle = await did_wallet.get_did_innerpuz(action_scope, override_reuse_puzhash_with=False)
|
|
992
|
-
did_wallet.did_info = dataclasses.replace(did_wallet.did_info, current_inner=new_inner_puzzle)
|
|
993
|
-
# Recovery the coin
|
|
994
|
-
assert did_wallet.did_info.origin_coin is not None # mypy
|
|
995
|
-
await env_0.rpc_client.find_lost_did(DIDFindLostDID(did_wallet.did_info.origin_coin.name().hex()))
|
|
996
|
-
found_coin = await did_wallet.get_coin()
|
|
997
|
-
assert found_coin == coin
|
|
998
|
-
assert did_wallet.did_info.current_inner != new_inner_puzzle
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
1002
|
-
@pytest.mark.parametrize("wallet_environments", [{"num_environments": 2, "blocks_needed": [1, 1]}], indirect=True)
|
|
1003
|
-
@pytest.mark.parametrize(
|
|
1004
|
-
"use_alternate_recovery",
|
|
1005
|
-
[True, False],
|
|
1006
|
-
)
|
|
1007
|
-
@pytest.mark.anyio
|
|
1008
|
-
async def test_did_attest_after_recovery(wallet_environments: WalletTestFramework, use_alternate_recovery: bool):
|
|
1009
|
-
env_0 = wallet_environments.environments[0]
|
|
1010
|
-
env_1 = wallet_environments.environments[1]
|
|
1011
|
-
wallet_node_0 = env_0.node
|
|
1012
|
-
wallet_node_1 = env_1.node
|
|
1013
|
-
wallet_0 = env_0.xch_wallet
|
|
1014
|
-
wallet_1 = env_1.xch_wallet
|
|
1015
|
-
|
|
1016
|
-
env_0.wallet_aliases = {
|
|
1017
|
-
"xch": 1,
|
|
1018
|
-
"did": 2,
|
|
1019
|
-
}
|
|
1020
|
-
env_1.wallet_aliases = {
|
|
1021
|
-
"xch": 1,
|
|
1022
|
-
"did": 2,
|
|
1023
|
-
}
|
|
1024
|
-
|
|
1025
|
-
async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
1026
|
-
did_wallet: DIDWallet = await make_did_wallet(
|
|
1027
|
-
wallet_node_0.wallet_state_manager,
|
|
1028
|
-
wallet_0,
|
|
1029
|
-
uint64(101),
|
|
1030
|
-
action_scope,
|
|
1031
|
-
use_alternate_recovery=use_alternate_recovery,
|
|
1032
|
-
)
|
|
1033
|
-
await wallet_environments.process_pending_states(
|
|
1034
|
-
[
|
|
1035
|
-
WalletStateTransition(
|
|
1036
|
-
pre_block_balance_updates={
|
|
1037
|
-
"xch": {
|
|
1038
|
-
"set_remainder": True,
|
|
1039
|
-
},
|
|
1040
|
-
"did": {
|
|
1041
|
-
"init": True,
|
|
1042
|
-
"unconfirmed_wallet_balance": 101,
|
|
1043
|
-
"pending_change": 101,
|
|
1044
|
-
"pending_coin_removal_count": 1,
|
|
1045
|
-
},
|
|
1046
|
-
},
|
|
1047
|
-
post_block_balance_updates={
|
|
1048
|
-
"xch": {
|
|
1049
|
-
"set_remainder": True,
|
|
1050
|
-
},
|
|
1051
|
-
"did": {
|
|
1052
|
-
"confirmed_wallet_balance": 101,
|
|
1053
|
-
"spendable_balance": 101,
|
|
1054
|
-
"max_send_amount": 101,
|
|
1055
|
-
"unspent_coin_count": 1,
|
|
1056
|
-
"pending_change": -101,
|
|
1057
|
-
"pending_coin_removal_count": -1,
|
|
1058
|
-
},
|
|
1059
|
-
},
|
|
1060
|
-
),
|
|
1061
|
-
WalletStateTransition(),
|
|
1062
|
-
]
|
|
1063
|
-
)
|
|
1064
|
-
|
|
1065
|
-
await time_out_assert(15, did_wallet.get_confirmed_balance, 101)
|
|
1066
|
-
await time_out_assert(15, did_wallet.get_unconfirmed_balance, 101)
|
|
1067
|
-
recovery_list = [bytes32.from_hexstr(did_wallet.get_my_DID())]
|
|
1068
|
-
|
|
1069
|
-
async with wallet_1.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
1070
|
-
did_wallet_2: DIDWallet = await DIDWallet.create_new_did_wallet(
|
|
1071
|
-
wallet_node_1.wallet_state_manager, wallet_1, uint64(101), action_scope, recovery_list
|
|
1072
|
-
)
|
|
1073
|
-
await wallet_environments.process_pending_states(
|
|
1074
|
-
[
|
|
1075
|
-
WalletStateTransition(),
|
|
1076
|
-
WalletStateTransition(
|
|
1077
|
-
pre_block_balance_updates={
|
|
1078
|
-
"xch": {
|
|
1079
|
-
"set_remainder": True,
|
|
1080
|
-
},
|
|
1081
|
-
"did": {
|
|
1082
|
-
"init": True,
|
|
1083
|
-
"unconfirmed_wallet_balance": 101,
|
|
1084
|
-
"pending_change": 101,
|
|
1085
|
-
"pending_coin_removal_count": 1,
|
|
1086
|
-
},
|
|
1087
|
-
},
|
|
1088
|
-
post_block_balance_updates={
|
|
1089
|
-
"xch": {
|
|
1090
|
-
"set_remainder": True,
|
|
1091
|
-
},
|
|
1092
|
-
"did": {
|
|
1093
|
-
"confirmed_wallet_balance": 101,
|
|
1094
|
-
"spendable_balance": 101,
|
|
1095
|
-
"max_send_amount": 101,
|
|
1096
|
-
"unspent_coin_count": 1,
|
|
1097
|
-
"pending_change": -101,
|
|
1098
|
-
"pending_coin_removal_count": -1,
|
|
1099
|
-
},
|
|
1100
|
-
},
|
|
1101
|
-
),
|
|
1102
|
-
]
|
|
1103
|
-
)
|
|
1104
|
-
|
|
1105
|
-
assert did_wallet_2.did_info.backup_ids == recovery_list
|
|
1106
|
-
|
|
1107
|
-
# Update coin with new ID info
|
|
1108
|
-
recovery_list = [bytes32.from_hexstr(did_wallet_2.get_my_DID())]
|
|
1109
|
-
await did_wallet.update_recovery_list(recovery_list, uint64(1))
|
|
1110
|
-
assert did_wallet.did_info.backup_ids == recovery_list
|
|
1111
|
-
async with did_wallet.wallet_state_manager.new_action_scope(
|
|
1112
|
-
wallet_environments.tx_config, push=True
|
|
1113
|
-
) as action_scope:
|
|
1114
|
-
await did_wallet.create_update_spend(action_scope)
|
|
1115
|
-
|
|
1116
|
-
await wallet_environments.process_pending_states(
|
|
1117
|
-
[
|
|
1118
|
-
WalletStateTransition(
|
|
1119
|
-
pre_block_balance_updates={
|
|
1120
|
-
"did": {
|
|
1121
|
-
"set_remainder": True,
|
|
1122
|
-
}
|
|
1123
|
-
},
|
|
1124
|
-
post_block_balance_updates={
|
|
1125
|
-
"did": {
|
|
1126
|
-
"set_remainder": True,
|
|
1127
|
-
}
|
|
1128
|
-
},
|
|
1129
|
-
),
|
|
1130
|
-
WalletStateTransition(),
|
|
1131
|
-
]
|
|
1132
|
-
)
|
|
1133
|
-
|
|
1134
|
-
# DID Wallet 2 recovers into DID Wallet 3 with new innerpuz
|
|
1135
|
-
backup_data = did_wallet_2.create_backup()
|
|
1136
|
-
|
|
1137
|
-
async with wallet_node_0.wallet_state_manager.lock:
|
|
1138
|
-
did_wallet_3 = await DIDWallet.create_new_did_wallet_from_recovery(
|
|
1139
|
-
wallet_node_0.wallet_state_manager,
|
|
1140
|
-
wallet_0,
|
|
1141
|
-
backup_data,
|
|
1142
|
-
)
|
|
1143
|
-
env_0.wallet_aliases["did_2"] = 3
|
|
1144
|
-
with wallet_environments.new_puzzle_hashes_allowed():
|
|
1145
|
-
async with did_wallet_3.wallet_state_manager.new_action_scope(
|
|
1146
|
-
wallet_environments.tx_config, push=True
|
|
1147
|
-
) as action_scope:
|
|
1148
|
-
new_ph = (
|
|
1149
|
-
await did_wallet_3.get_did_innerpuz(action_scope, override_reuse_puzhash_with=False)
|
|
1150
|
-
).get_tree_hash()
|
|
1151
|
-
coin = await did_wallet_2.get_coin()
|
|
1152
|
-
pubkey = (await did_wallet_3.wallet_state_manager.get_unused_derivation_record(did_wallet_3.wallet_info.id)).pubkey
|
|
1153
|
-
|
|
1154
|
-
async with did_wallet.wallet_state_manager.new_action_scope(
|
|
1155
|
-
wallet_environments.tx_config, push=True
|
|
1156
|
-
) as action_scope:
|
|
1157
|
-
message_spend_bundle, attest_data = await did_wallet.create_attestment(
|
|
1158
|
-
coin.name(), new_ph, pubkey, action_scope
|
|
1159
|
-
)
|
|
1160
|
-
await wallet_environments.process_pending_states(
|
|
1161
|
-
[
|
|
1162
|
-
WalletStateTransition(
|
|
1163
|
-
pre_block_balance_updates={
|
|
1164
|
-
"did": {
|
|
1165
|
-
"set_remainder": True,
|
|
1166
|
-
},
|
|
1167
|
-
"did_2": {
|
|
1168
|
-
"init": True,
|
|
1169
|
-
"set_remainder": True,
|
|
1170
|
-
},
|
|
1171
|
-
},
|
|
1172
|
-
post_block_balance_updates={
|
|
1173
|
-
"did": {
|
|
1174
|
-
"set_remainder": True,
|
|
1175
|
-
},
|
|
1176
|
-
"did_2": {
|
|
1177
|
-
"set_remainder": True,
|
|
1178
|
-
},
|
|
1179
|
-
},
|
|
1180
|
-
),
|
|
1181
|
-
WalletStateTransition(),
|
|
1182
|
-
]
|
|
1183
|
-
)
|
|
1184
|
-
|
|
1185
|
-
(
|
|
1186
|
-
info,
|
|
1187
|
-
message_spend_bundle,
|
|
1188
|
-
) = await did_wallet_3.load_attest_files_for_recovery_spend([attest_data])
|
|
1189
|
-
async with did_wallet_3.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
1190
|
-
await did_wallet_3.recovery_spend(coin, new_ph, info, pubkey, message_spend_bundle, action_scope)
|
|
1191
|
-
await wallet_environments.process_pending_states(
|
|
1192
|
-
[
|
|
1193
|
-
WalletStateTransition(
|
|
1194
|
-
pre_block_balance_updates={
|
|
1195
|
-
"did_2": {
|
|
1196
|
-
"unconfirmed_wallet_balance": 101,
|
|
1197
|
-
"set_remainder": True,
|
|
1198
|
-
},
|
|
1199
|
-
},
|
|
1200
|
-
post_block_balance_updates={
|
|
1201
|
-
"did_2": {
|
|
1202
|
-
"confirmed_wallet_balance": 101,
|
|
1203
|
-
"set_remainder": True,
|
|
1204
|
-
},
|
|
1205
|
-
},
|
|
1206
|
-
),
|
|
1207
|
-
WalletStateTransition(
|
|
1208
|
-
pre_block_balance_updates={
|
|
1209
|
-
"did": {
|
|
1210
|
-
"unconfirmed_wallet_balance": 0, # TODO: fix pre-block balances for recovery
|
|
1211
|
-
"set_remainder": True,
|
|
1212
|
-
},
|
|
1213
|
-
},
|
|
1214
|
-
post_block_balance_updates={
|
|
1215
|
-
"did": {
|
|
1216
|
-
"confirmed_wallet_balance": -101,
|
|
1217
|
-
"set_remainder": True,
|
|
1218
|
-
},
|
|
1219
|
-
},
|
|
1220
|
-
),
|
|
1221
|
-
]
|
|
1222
|
-
)
|
|
1223
|
-
|
|
1224
|
-
# DID Wallet 1 recovery spends into DID Wallet 4
|
|
1225
|
-
backup_data = did_wallet.create_backup()
|
|
1226
|
-
|
|
1227
|
-
async with wallet_node_1.wallet_state_manager.lock:
|
|
1228
|
-
did_wallet_4 = await DIDWallet.create_new_did_wallet_from_recovery(
|
|
1229
|
-
wallet_node_1.wallet_state_manager,
|
|
1230
|
-
wallet_1,
|
|
1231
|
-
backup_data,
|
|
1232
|
-
)
|
|
1233
|
-
env_1.wallet_aliases["did_2"] = 3
|
|
1234
|
-
coin = await did_wallet.get_coin()
|
|
1235
|
-
with wallet_environments.new_puzzle_hashes_allowed():
|
|
1236
|
-
async with did_wallet_4.wallet_state_manager.new_action_scope(
|
|
1237
|
-
wallet_environments.tx_config, push=True
|
|
1238
|
-
) as action_scope:
|
|
1239
|
-
new_ph = (
|
|
1240
|
-
await did_wallet_4.get_did_innerpuz(action_scope, override_reuse_puzhash_with=False)
|
|
1241
|
-
).get_tree_hash()
|
|
1242
|
-
pubkey = (await did_wallet_4.wallet_state_manager.get_unused_derivation_record(did_wallet_4.wallet_info.id)).pubkey
|
|
1243
|
-
async with did_wallet_3.wallet_state_manager.new_action_scope(
|
|
1244
|
-
wallet_environments.tx_config, push=True
|
|
1245
|
-
) as action_scope:
|
|
1246
|
-
message_spend_bundle, attest1 = await did_wallet_3.create_attestment(coin.name(), new_ph, pubkey, action_scope)
|
|
1247
|
-
|
|
1248
|
-
await wallet_environments.process_pending_states(
|
|
1249
|
-
[
|
|
1250
|
-
WalletStateTransition(
|
|
1251
|
-
pre_block_balance_updates={
|
|
1252
|
-
"did_2": {
|
|
1253
|
-
"unconfirmed_wallet_balance": 0,
|
|
1254
|
-
"set_remainder": True,
|
|
1255
|
-
},
|
|
1256
|
-
},
|
|
1257
|
-
post_block_balance_updates={
|
|
1258
|
-
"did_2": {
|
|
1259
|
-
"confirmed_wallet_balance": 0,
|
|
1260
|
-
"set_remainder": True,
|
|
1261
|
-
},
|
|
1262
|
-
},
|
|
1263
|
-
),
|
|
1264
|
-
WalletStateTransition(
|
|
1265
|
-
pre_block_balance_updates={
|
|
1266
|
-
"did_2": {
|
|
1267
|
-
"init": True,
|
|
1268
|
-
"set_remainder": True,
|
|
1269
|
-
},
|
|
1270
|
-
},
|
|
1271
|
-
post_block_balance_updates={
|
|
1272
|
-
"did_2": {
|
|
1273
|
-
"confirmed_wallet_balance": 0,
|
|
1274
|
-
"set_remainder": True,
|
|
1275
|
-
},
|
|
1276
|
-
},
|
|
1277
|
-
),
|
|
1278
|
-
]
|
|
1279
|
-
)
|
|
1280
|
-
|
|
1281
|
-
(
|
|
1282
|
-
test_info_list,
|
|
1283
|
-
test_message_spend_bundle,
|
|
1284
|
-
) = await did_wallet_4.load_attest_files_for_recovery_spend([attest1])
|
|
1285
|
-
async with did_wallet_4.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
1286
|
-
await did_wallet_4.recovery_spend(coin, new_ph, test_info_list, pubkey, test_message_spend_bundle, action_scope)
|
|
1287
|
-
|
|
1288
324
|
await wallet_environments.process_pending_states(
|
|
1289
325
|
[
|
|
1290
326
|
WalletStateTransition(
|
|
1291
327
|
pre_block_balance_updates={
|
|
1292
|
-
"
|
|
328
|
+
"xch": {
|
|
1293
329
|
"set_remainder": True,
|
|
1294
330
|
},
|
|
331
|
+
"did": {
|
|
332
|
+
"init": True,
|
|
333
|
+
"unconfirmed_wallet_balance": 101,
|
|
334
|
+
"pending_change": 101,
|
|
335
|
+
"pending_coin_removal_count": 1,
|
|
336
|
+
},
|
|
1295
337
|
},
|
|
1296
338
|
post_block_balance_updates={
|
|
1297
|
-
"
|
|
1298
|
-
"confirmed_wallet_balance": -101,
|
|
339
|
+
"xch": {
|
|
1299
340
|
"set_remainder": True,
|
|
1300
341
|
},
|
|
342
|
+
"did": {
|
|
343
|
+
"confirmed_wallet_balance": 101,
|
|
344
|
+
"spendable_balance": 101,
|
|
345
|
+
"max_send_amount": 101,
|
|
346
|
+
"unspent_coin_count": 1,
|
|
347
|
+
"pending_change": -101,
|
|
348
|
+
"pending_coin_removal_count": -1,
|
|
349
|
+
},
|
|
1301
350
|
},
|
|
1302
351
|
),
|
|
352
|
+
]
|
|
353
|
+
)
|
|
354
|
+
|
|
355
|
+
# Delete the coin and wallet
|
|
356
|
+
coin = await did_wallet_0.get_coin()
|
|
357
|
+
await wallet_node_0.wallet_state_manager.coin_store.delete_coin_record(coin.name())
|
|
358
|
+
await wallet_node_0.wallet_state_manager.delete_wallet(did_wallet_0.wallet_info.id)
|
|
359
|
+
wallet_node_0.wallet_state_manager.wallets.pop(did_wallet_0.wallet_info.id)
|
|
360
|
+
assert len(wallet_node_0.wallet_state_manager.wallets) == 1
|
|
361
|
+
# Find lost DID
|
|
362
|
+
assert did_wallet_0.did_info.origin_coin is not None # mypy
|
|
363
|
+
await env_0.rpc_client.find_lost_did(DIDFindLostDID(did_wallet_0.did_info.origin_coin.name().hex()))
|
|
364
|
+
did_wallets = list(
|
|
365
|
+
filter(
|
|
366
|
+
lambda w: (w.type == WalletType.DECENTRALIZED_ID),
|
|
367
|
+
await wallet_node_0.wallet_state_manager.get_all_wallet_info_entries(),
|
|
368
|
+
)
|
|
369
|
+
)
|
|
370
|
+
did_wallet = wallet_node_0.wallet_state_manager.wallets[did_wallets[0].id]
|
|
371
|
+
assert isinstance(did_wallet, DIDWallet)
|
|
372
|
+
env_0.wallet_aliases["did_found"] = did_wallets[0].id
|
|
373
|
+
await env_0.change_balances(
|
|
374
|
+
{
|
|
375
|
+
"did_found": {
|
|
376
|
+
"init": True,
|
|
377
|
+
"confirmed_wallet_balance": 101,
|
|
378
|
+
"unconfirmed_wallet_balance": 101,
|
|
379
|
+
"spendable_balance": 101,
|
|
380
|
+
"max_send_amount": 101,
|
|
381
|
+
"unspent_coin_count": 1,
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
)
|
|
385
|
+
await env_0.check_balances()
|
|
386
|
+
|
|
387
|
+
# Spend DID
|
|
388
|
+
async with did_wallet.wallet_state_manager.new_action_scope(
|
|
389
|
+
wallet_environments.tx_config, push=True
|
|
390
|
+
) as action_scope:
|
|
391
|
+
await did_wallet.create_update_spend(action_scope)
|
|
392
|
+
|
|
393
|
+
await wallet_environments.process_pending_states(
|
|
394
|
+
[
|
|
1303
395
|
WalletStateTransition(
|
|
1304
396
|
pre_block_balance_updates={
|
|
1305
|
-
"
|
|
1306
|
-
"
|
|
397
|
+
"did_found": {
|
|
398
|
+
"spendable_balance": -101,
|
|
399
|
+
"max_send_amount": -101,
|
|
400
|
+
"pending_change": 101,
|
|
401
|
+
"pending_coin_removal_count": 1,
|
|
1307
402
|
},
|
|
1308
403
|
},
|
|
1309
404
|
post_block_balance_updates={
|
|
1310
|
-
"
|
|
1311
|
-
"
|
|
1312
|
-
"
|
|
405
|
+
"did_found": {
|
|
406
|
+
"spendable_balance": 101,
|
|
407
|
+
"max_send_amount": 101,
|
|
408
|
+
"pending_change": -101,
|
|
409
|
+
"pending_coin_removal_count": -1,
|
|
1313
410
|
},
|
|
1314
411
|
},
|
|
1315
412
|
),
|
|
1316
413
|
]
|
|
1317
414
|
)
|
|
1318
415
|
|
|
1319
|
-
|
|
1320
|
-
|
|
416
|
+
# Delete the coin and change inner puzzle
|
|
417
|
+
coin = await did_wallet.get_coin()
|
|
418
|
+
await wallet_node_0.wallet_state_manager.coin_store.delete_coin_record(coin.name())
|
|
419
|
+
with wallet_environments.new_puzzle_hashes_allowed():
|
|
420
|
+
async with did_wallet.wallet_state_manager.new_action_scope(
|
|
421
|
+
wallet_environments.tx_config, push=True
|
|
422
|
+
) as action_scope:
|
|
423
|
+
new_inner_puzzle = await did_wallet.get_did_innerpuz(action_scope, override_reuse_puzhash_with=False)
|
|
424
|
+
did_wallet.did_info = dataclasses.replace(did_wallet.did_info, current_inner=new_inner_puzzle)
|
|
425
|
+
# Recovery the coin
|
|
426
|
+
assert did_wallet.did_info.origin_coin is not None # mypy
|
|
427
|
+
await env_0.rpc_client.find_lost_did(DIDFindLostDID(did_wallet.did_info.origin_coin.name().hex()))
|
|
428
|
+
found_coin = await did_wallet.get_coin()
|
|
429
|
+
assert found_coin == coin
|
|
430
|
+
assert did_wallet.did_info.current_inner != new_inner_puzzle
|
|
1321
431
|
|
|
1322
432
|
|
|
1323
433
|
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
1324
434
|
@pytest.mark.parametrize("wallet_environments", [{"num_environments": 2, "blocks_needed": [1, 1]}], indirect=True)
|
|
1325
|
-
@pytest.mark.parametrize(
|
|
1326
|
-
"with_recovery",
|
|
1327
|
-
[True, False],
|
|
1328
|
-
)
|
|
1329
435
|
@pytest.mark.anyio
|
|
1330
|
-
async def test_did_transfer(wallet_environments: WalletTestFramework
|
|
436
|
+
async def test_did_transfer(wallet_environments: WalletTestFramework):
|
|
1331
437
|
env_0 = wallet_environments.environments[0]
|
|
1332
438
|
env_1 = wallet_environments.environments[1]
|
|
1333
439
|
wallet_node_0 = env_0.node
|
|
@@ -1343,8 +449,6 @@ async def test_did_transfer(wallet_environments: WalletTestFramework, with_recov
|
|
|
1343
449
|
"xch": 1,
|
|
1344
450
|
"did": 2,
|
|
1345
451
|
}
|
|
1346
|
-
async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
1347
|
-
ph = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
|
|
1348
452
|
fee = uint64(1000)
|
|
1349
453
|
|
|
1350
454
|
async with wallet_0.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
@@ -1353,8 +457,6 @@ async def test_did_transfer(wallet_environments: WalletTestFramework, with_recov
|
|
|
1353
457
|
wallet_0,
|
|
1354
458
|
uint64(101),
|
|
1355
459
|
action_scope,
|
|
1356
|
-
[ph],
|
|
1357
|
-
uint64(1),
|
|
1358
460
|
{"Twitter": "Test", "GitHub": "测试"},
|
|
1359
461
|
fee=fee,
|
|
1360
462
|
)
|
|
@@ -1398,7 +500,7 @@ async def test_did_transfer(wallet_environments: WalletTestFramework, with_recov
|
|
|
1398
500
|
async with did_wallet_1.wallet_state_manager.new_action_scope(
|
|
1399
501
|
wallet_environments.tx_config, push=True
|
|
1400
502
|
) as action_scope:
|
|
1401
|
-
await did_wallet_1.transfer_did(new_puzhash, fee,
|
|
503
|
+
await did_wallet_1.transfer_did(new_puzhash, fee, action_scope)
|
|
1402
504
|
|
|
1403
505
|
await wallet_environments.process_pending_states(
|
|
1404
506
|
[
|
|
@@ -1442,9 +544,6 @@ async def test_did_transfer(wallet_environments: WalletTestFramework, with_recov
|
|
|
1442
544
|
assert isinstance(did_wallet_2, DIDWallet) # mypy
|
|
1443
545
|
assert len(wallet_node_0.wallet_state_manager.wallets) == 1
|
|
1444
546
|
assert did_wallet_1.did_info.origin_coin == did_wallet_2.did_info.origin_coin
|
|
1445
|
-
if with_recovery:
|
|
1446
|
-
assert did_wallet_1.did_info.backup_ids[0] == did_wallet_2.did_info.backup_ids[0]
|
|
1447
|
-
assert did_wallet_1.did_info.num_of_backup_ids_needed == did_wallet_2.did_info.num_of_backup_ids_needed
|
|
1448
547
|
metadata = json.loads(did_wallet_2.did_info.metadata)
|
|
1449
548
|
assert metadata["Twitter"] == "Test"
|
|
1450
549
|
assert metadata["GitHub"] == "测试"
|
|
@@ -1475,8 +574,6 @@ async def test_did_auto_transfer_limit(
|
|
|
1475
574
|
wallet = wallet_node.wallet_state_manager.main_wallet
|
|
1476
575
|
wallet2 = wallet_node_2.wallet_state_manager.main_wallet
|
|
1477
576
|
api_1 = WalletRpcApi(wallet_node_2)
|
|
1478
|
-
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
1479
|
-
ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
1480
577
|
|
|
1481
578
|
if trusted:
|
|
1482
579
|
wallet_node.config["trusted_peers"] = {
|
|
@@ -1501,8 +598,6 @@ async def test_did_auto_transfer_limit(
|
|
|
1501
598
|
wallet,
|
|
1502
599
|
uint64(101),
|
|
1503
600
|
action_scope,
|
|
1504
|
-
[bytes32(bytes(ph))],
|
|
1505
|
-
uint64(1),
|
|
1506
601
|
{"Twitter": "Test", "GitHub": "测试"},
|
|
1507
602
|
fee=fee,
|
|
1508
603
|
)
|
|
@@ -1517,7 +612,7 @@ async def test_did_auto_transfer_limit(
|
|
|
1517
612
|
async with wallet2.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
1518
613
|
new_puzhash = await action_scope.get_puzzle_hash(wallet2.wallet_state_manager)
|
|
1519
614
|
async with did_wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
1520
|
-
await did_wallet_1.transfer_did(new_puzhash, fee,
|
|
615
|
+
await did_wallet_1.transfer_did(new_puzhash, fee, action_scope)
|
|
1521
616
|
await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
|
|
1522
617
|
await full_node_api.wait_for_wallets_synced(wallet_nodes=[wallet_node, wallet_node_2])
|
|
1523
618
|
# Check if the DID wallet is created in the wallet2
|
|
@@ -1587,14 +682,11 @@ async def test_did_auto_transfer_limit(
|
|
|
1587
682
|
# Check we can still manually add new DIDs while at cap
|
|
1588
683
|
await full_node_api.farm_blocks_to_wallet(1, wallet2)
|
|
1589
684
|
async with wallet2.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
1590
|
-
ph = await action_scope.get_puzzle_hash(wallet2.wallet_state_manager)
|
|
1591
685
|
did_wallet_11: DIDWallet = await DIDWallet.create_new_did_wallet(
|
|
1592
686
|
wallet_node_2.wallet_state_manager,
|
|
1593
687
|
wallet2,
|
|
1594
688
|
uint64(101),
|
|
1595
689
|
action_scope,
|
|
1596
|
-
[bytes32(bytes(ph))],
|
|
1597
|
-
uint64(1),
|
|
1598
690
|
{"Twitter": "Test", "GitHub": "测试"},
|
|
1599
691
|
fee=fee,
|
|
1600
692
|
)
|
|
@@ -1612,97 +704,10 @@ async def test_did_auto_transfer_limit(
|
|
|
1612
704
|
assert len(did_wallets) == 11
|
|
1613
705
|
|
|
1614
706
|
|
|
1615
|
-
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
1616
|
-
@pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
|
|
1617
|
-
@pytest.mark.parametrize(
|
|
1618
|
-
"use_alternate_recovery",
|
|
1619
|
-
[True, False],
|
|
1620
|
-
)
|
|
1621
|
-
@pytest.mark.anyio
|
|
1622
|
-
async def test_update_recovery_list(wallet_environments: WalletTestFramework, use_alternate_recovery: bool):
|
|
1623
|
-
env = wallet_environments.environments[0]
|
|
1624
|
-
wallet_node = env.node
|
|
1625
|
-
wallet = env.xch_wallet
|
|
1626
|
-
|
|
1627
|
-
env.wallet_aliases = {
|
|
1628
|
-
"xch": 1,
|
|
1629
|
-
"did": 2,
|
|
1630
|
-
}
|
|
1631
|
-
|
|
1632
|
-
async with wallet.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
1633
|
-
ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
1634
|
-
did_wallet_1: DIDWallet = await make_did_wallet(
|
|
1635
|
-
wallet_node.wallet_state_manager,
|
|
1636
|
-
wallet,
|
|
1637
|
-
uint64(101),
|
|
1638
|
-
action_scope,
|
|
1639
|
-
use_alternate_recovery=use_alternate_recovery,
|
|
1640
|
-
)
|
|
1641
|
-
|
|
1642
|
-
await wallet_environments.process_pending_states(
|
|
1643
|
-
[
|
|
1644
|
-
WalletStateTransition(
|
|
1645
|
-
pre_block_balance_updates={
|
|
1646
|
-
"xch": {
|
|
1647
|
-
"set_remainder": True,
|
|
1648
|
-
},
|
|
1649
|
-
"did": {
|
|
1650
|
-
"init": True,
|
|
1651
|
-
"unconfirmed_wallet_balance": 101,
|
|
1652
|
-
"pending_change": 101,
|
|
1653
|
-
"pending_coin_removal_count": 1,
|
|
1654
|
-
},
|
|
1655
|
-
},
|
|
1656
|
-
post_block_balance_updates={
|
|
1657
|
-
"xch": {
|
|
1658
|
-
"set_remainder": True,
|
|
1659
|
-
},
|
|
1660
|
-
"did": {
|
|
1661
|
-
"confirmed_wallet_balance": 101,
|
|
1662
|
-
"spendable_balance": 101,
|
|
1663
|
-
"max_send_amount": 101,
|
|
1664
|
-
"unspent_coin_count": 1,
|
|
1665
|
-
"pending_change": -101,
|
|
1666
|
-
"pending_coin_removal_count": -1,
|
|
1667
|
-
},
|
|
1668
|
-
},
|
|
1669
|
-
),
|
|
1670
|
-
]
|
|
1671
|
-
)
|
|
1672
|
-
await did_wallet_1.update_recovery_list([ph], uint64(1))
|
|
1673
|
-
async with did_wallet_1.wallet_state_manager.new_action_scope(
|
|
1674
|
-
wallet_environments.tx_config, push=True
|
|
1675
|
-
) as action_scope:
|
|
1676
|
-
await did_wallet_1.create_update_spend(action_scope)
|
|
1677
|
-
|
|
1678
|
-
await wallet_environments.process_pending_states(
|
|
1679
|
-
[
|
|
1680
|
-
WalletStateTransition(
|
|
1681
|
-
pre_block_balance_updates={
|
|
1682
|
-
"did": {
|
|
1683
|
-
"set_remainder": True,
|
|
1684
|
-
},
|
|
1685
|
-
},
|
|
1686
|
-
post_block_balance_updates={
|
|
1687
|
-
"did": {
|
|
1688
|
-
"set_remainder": True,
|
|
1689
|
-
},
|
|
1690
|
-
},
|
|
1691
|
-
),
|
|
1692
|
-
]
|
|
1693
|
-
)
|
|
1694
|
-
assert did_wallet_1.did_info.backup_ids[0] == bytes(ph)
|
|
1695
|
-
assert did_wallet_1.did_info.num_of_backup_ids_needed == 1
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
707
|
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
1699
708
|
@pytest.mark.parametrize("wallet_environments", [{"num_environments": 2, "blocks_needed": [1, 1]}], indirect=True)
|
|
1700
|
-
@pytest.mark.parametrize(
|
|
1701
|
-
"use_alternate_recovery",
|
|
1702
|
-
[True, False],
|
|
1703
|
-
)
|
|
1704
709
|
@pytest.mark.anyio
|
|
1705
|
-
async def test_get_info(wallet_environments: WalletTestFramework
|
|
710
|
+
async def test_get_info(wallet_environments: WalletTestFramework):
|
|
1706
711
|
env_0 = wallet_environments.environments[0]
|
|
1707
712
|
env_1 = wallet_environments.environments[1]
|
|
1708
713
|
wallet_node_0 = env_0.node
|
|
@@ -1730,10 +735,8 @@ async def test_get_info(wallet_environments: WalletTestFramework, use_alternate_
|
|
|
1730
735
|
wallet_0,
|
|
1731
736
|
did_amount,
|
|
1732
737
|
action_scope,
|
|
1733
|
-
[],
|
|
1734
738
|
metadata={"twitter": "twitter"},
|
|
1735
739
|
fee=fee,
|
|
1736
|
-
use_alternate_recovery=use_alternate_recovery,
|
|
1737
740
|
)
|
|
1738
741
|
|
|
1739
742
|
await wallet_environments.process_pending_states(
|
|
@@ -1781,10 +784,7 @@ async def test_get_info(wallet_environments: WalletTestFramework, use_alternate_
|
|
|
1781
784
|
assert response.metadata["twitter"] == "twitter"
|
|
1782
785
|
assert response.latest_coin == (await did_wallet_1.get_coin()).name()
|
|
1783
786
|
assert response.num_verification == 0
|
|
1784
|
-
|
|
1785
|
-
assert response.recovery_list_hash is None
|
|
1786
|
-
else:
|
|
1787
|
-
assert response.recovery_list_hash == Program(Program.to([])).get_tree_hash()
|
|
787
|
+
assert response.recovery_list_hash == Program(Program.to([])).get_tree_hash()
|
|
1788
788
|
assert decode_puzzle_hash(response.p2_address) == response.hints[0]
|
|
1789
789
|
|
|
1790
790
|
# Test non-singleton coin
|
|
@@ -1792,7 +792,7 @@ async def test_get_info(wallet_environments: WalletTestFramework, use_alternate_
|
|
|
1792
792
|
coin = (await wallet_0.select_coins(uint64(1), action_scope)).pop()
|
|
1793
793
|
assert coin.amount % 2 == 1
|
|
1794
794
|
coin_id = coin.name()
|
|
1795
|
-
with pytest.raises(ValueError, match="The coin is not a DID
|
|
795
|
+
with pytest.raises(ValueError, match="The coin is not a DID"):
|
|
1796
796
|
await api_0.get_did_info(DIDGetInfo(coin_id.hex()))
|
|
1797
797
|
|
|
1798
798
|
# Test multiple odd coins
|
|
@@ -1846,18 +846,14 @@ async def test_get_info(wallet_environments: WalletTestFramework, use_alternate_
|
|
|
1846
846
|
]
|
|
1847
847
|
)
|
|
1848
848
|
|
|
1849
|
-
with pytest.raises(ValueError, match="This is not a singleton, multiple children coins found."):
|
|
849
|
+
with pytest.raises(ValueError, match=r"This is not a singleton, multiple children coins found."):
|
|
1850
850
|
await api_0.get_did_info(DIDGetInfo(coin_1.name().hex()))
|
|
1851
851
|
|
|
1852
852
|
|
|
1853
853
|
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
1854
854
|
@pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
|
|
1855
|
-
@pytest.mark.parametrize(
|
|
1856
|
-
"use_alternate_recovery",
|
|
1857
|
-
[True, False],
|
|
1858
|
-
)
|
|
1859
855
|
@pytest.mark.anyio
|
|
1860
|
-
async def test_message_spend(wallet_environments: WalletTestFramework
|
|
856
|
+
async def test_message_spend(wallet_environments: WalletTestFramework):
|
|
1861
857
|
env = wallet_environments.environments[0]
|
|
1862
858
|
wallet_node = env.node
|
|
1863
859
|
wallet = env.xch_wallet
|
|
@@ -1876,9 +872,7 @@ async def test_message_spend(wallet_environments: WalletTestFramework, use_alter
|
|
|
1876
872
|
wallet,
|
|
1877
873
|
uint64(101),
|
|
1878
874
|
action_scope,
|
|
1879
|
-
[],
|
|
1880
875
|
fee=fee,
|
|
1881
|
-
use_alternate_recovery=use_alternate_recovery,
|
|
1882
876
|
)
|
|
1883
877
|
await wallet_environments.process_pending_states(
|
|
1884
878
|
[
|
|
@@ -1926,12 +920,8 @@ async def test_message_spend(wallet_environments: WalletTestFramework, use_alter
|
|
|
1926
920
|
|
|
1927
921
|
@pytest.mark.limit_consensus_modes(allowed=[ConsensusMode.PLAIN], reason="irrelevant")
|
|
1928
922
|
@pytest.mark.parametrize("wallet_environments", [{"num_environments": 1, "blocks_needed": [1]}], indirect=True)
|
|
1929
|
-
@pytest.mark.parametrize(
|
|
1930
|
-
"use_alternate_recovery",
|
|
1931
|
-
[True, False],
|
|
1932
|
-
)
|
|
1933
923
|
@pytest.mark.anyio
|
|
1934
|
-
async def test_update_metadata(wallet_environments: WalletTestFramework
|
|
924
|
+
async def test_update_metadata(wallet_environments: WalletTestFramework):
|
|
1935
925
|
env = wallet_environments.environments[0]
|
|
1936
926
|
wallet_node = env.node
|
|
1937
927
|
wallet = env.xch_wallet
|
|
@@ -1950,9 +940,7 @@ async def test_update_metadata(wallet_environments: WalletTestFramework, use_alt
|
|
|
1950
940
|
wallet,
|
|
1951
941
|
did_amount,
|
|
1952
942
|
action_scope,
|
|
1953
|
-
[],
|
|
1954
943
|
fee=fee,
|
|
1955
|
-
use_alternate_recovery=use_alternate_recovery,
|
|
1956
944
|
)
|
|
1957
945
|
|
|
1958
946
|
await wallet_environments.process_pending_states(
|
|
@@ -2052,14 +1040,11 @@ async def test_did_sign_message(wallet_environments: WalletTestFramework):
|
|
|
2052
1040
|
fee = uint64(1000)
|
|
2053
1041
|
|
|
2054
1042
|
async with wallet.wallet_state_manager.new_action_scope(wallet_environments.tx_config, push=True) as action_scope:
|
|
2055
|
-
ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
2056
1043
|
did_wallet_1: DIDWallet = await DIDWallet.create_new_did_wallet(
|
|
2057
1044
|
wallet_node.wallet_state_manager,
|
|
2058
1045
|
wallet,
|
|
2059
1046
|
uint64(101),
|
|
2060
1047
|
action_scope,
|
|
2061
|
-
[ph],
|
|
2062
|
-
uint64(1),
|
|
2063
1048
|
{"Twitter": "Test", "GitHub": "测试"},
|
|
2064
1049
|
fee=fee,
|
|
2065
1050
|
)
|
|
@@ -2107,9 +1092,9 @@ async def test_did_sign_message(wallet_environments: WalletTestFramework):
|
|
|
2107
1092
|
)
|
|
2108
1093
|
puzzle: Program = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, message))
|
|
2109
1094
|
assert AugSchemeMPL.verify(
|
|
2110
|
-
G1Element.from_bytes(
|
|
1095
|
+
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
|
2111
1096
|
puzzle.get_tree_hash(),
|
|
2112
|
-
G2Element.from_bytes(
|
|
1097
|
+
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
|
2113
1098
|
)
|
|
2114
1099
|
# Test hex string
|
|
2115
1100
|
message = "0123456789ABCDEF"
|
|
@@ -2123,9 +1108,9 @@ async def test_did_sign_message(wallet_environments: WalletTestFramework):
|
|
|
2123
1108
|
puzzle = Program.to((CHIP_0002_SIGN_MESSAGE_PREFIX, bytes.fromhex(message)))
|
|
2124
1109
|
|
|
2125
1110
|
assert AugSchemeMPL.verify(
|
|
2126
|
-
G1Element.from_bytes(
|
|
1111
|
+
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
|
2127
1112
|
puzzle.get_tree_hash(),
|
|
2128
|
-
G2Element.from_bytes(
|
|
1113
|
+
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
|
2129
1114
|
)
|
|
2130
1115
|
|
|
2131
1116
|
# Test BLS sign string
|
|
@@ -2135,15 +1120,15 @@ async def test_did_sign_message(wallet_environments: WalletTestFramework):
|
|
|
2135
1120
|
{
|
|
2136
1121
|
"id": encode_puzzle_hash(did_wallet_1.did_info.origin_coin.name(), AddressType.DID.value),
|
|
2137
1122
|
"message": message,
|
|
2138
|
-
"is_hex":
|
|
2139
|
-
"safe_mode":
|
|
1123
|
+
"is_hex": False,
|
|
1124
|
+
"safe_mode": False,
|
|
2140
1125
|
}
|
|
2141
1126
|
)
|
|
2142
1127
|
|
|
2143
1128
|
assert AugSchemeMPL.verify(
|
|
2144
|
-
G1Element.from_bytes(
|
|
1129
|
+
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
|
2145
1130
|
bytes(message, "utf-8"),
|
|
2146
|
-
G2Element.from_bytes(
|
|
1131
|
+
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
|
2147
1132
|
)
|
|
2148
1133
|
# Test BLS sign hex
|
|
2149
1134
|
message = "0123456789ABCDEF"
|
|
@@ -2158,99 +1143,12 @@ async def test_did_sign_message(wallet_environments: WalletTestFramework):
|
|
|
2158
1143
|
)
|
|
2159
1144
|
|
|
2160
1145
|
assert AugSchemeMPL.verify(
|
|
2161
|
-
G1Element.from_bytes(
|
|
2162
|
-
|
|
2163
|
-
G2Element.from_bytes(
|
|
1146
|
+
G1Element.from_bytes(hexstr_to_bytes(response["pubkey"])),
|
|
1147
|
+
hexstr_to_bytes(message),
|
|
1148
|
+
G2Element.from_bytes(hexstr_to_bytes(response["signature"])),
|
|
2164
1149
|
)
|
|
2165
1150
|
|
|
2166
1151
|
|
|
2167
|
-
@pytest.mark.parametrize(
|
|
2168
|
-
"trusted",
|
|
2169
|
-
[True, False],
|
|
2170
|
-
)
|
|
2171
|
-
@pytest.mark.anyio
|
|
2172
|
-
async def test_create_did_with_recovery_list(
|
|
2173
|
-
self_hostname: str, two_nodes_two_wallets_with_same_keys: OldSimulatorsAndWallets, trusted: bool
|
|
2174
|
-
) -> None:
|
|
2175
|
-
"""
|
|
2176
|
-
A DID is created on-chain in client0, causing a DID Wallet to be created in client1, which shares the same key.
|
|
2177
|
-
This can happen if someone uses the same key on multiple computers, or is syncing a wallet from scratch.
|
|
2178
|
-
|
|
2179
|
-
For this test, we assign a recovery list hash at DID creation time, but the recovery list is not yet available
|
|
2180
|
-
to the wallet_node that the DID Wallet is being created in (client1).
|
|
2181
|
-
|
|
2182
|
-
"""
|
|
2183
|
-
full_nodes, wallets, _ = two_nodes_two_wallets_with_same_keys
|
|
2184
|
-
full_node_api = full_nodes[0]
|
|
2185
|
-
full_node_server = full_node_api.server
|
|
2186
|
-
wallet_node_0, server_0 = wallets[0]
|
|
2187
|
-
wallet_node_1, server_1 = wallets[1]
|
|
2188
|
-
|
|
2189
|
-
wallet_0 = wallet_node_0.wallet_state_manager.main_wallet
|
|
2190
|
-
wallet_1 = wallet_node_1.wallet_state_manager.main_wallet
|
|
2191
|
-
|
|
2192
|
-
async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
2193
|
-
ph0 = await action_scope.get_puzzle_hash(wallet_0.wallet_state_manager)
|
|
2194
|
-
async with wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
2195
|
-
ph1 = await action_scope.get_puzzle_hash(wallet_1.wallet_state_manager)
|
|
2196
|
-
|
|
2197
|
-
sk0 = await wallet_node_0.wallet_state_manager.get_private_key(ph0)
|
|
2198
|
-
sk1 = await wallet_node_1.wallet_state_manager.get_private_key(ph1)
|
|
2199
|
-
assert sk0 == sk1
|
|
2200
|
-
|
|
2201
|
-
if trusted:
|
|
2202
|
-
wallet_node_0.config["trusted_peers"] = {
|
|
2203
|
-
full_node_api.full_node.server.node_id.hex(): full_node_api.full_node.server.node_id.hex()
|
|
2204
|
-
}
|
|
2205
|
-
wallet_node_1.config["trusted_peers"] = {
|
|
2206
|
-
full_node_api.full_node.server.node_id.hex(): full_node_api.full_node.server.node_id.hex()
|
|
2207
|
-
}
|
|
2208
|
-
|
|
2209
|
-
else:
|
|
2210
|
-
wallet_node_0.config["trusted_peers"] = {}
|
|
2211
|
-
wallet_node_1.config["trusted_peers"] = {}
|
|
2212
|
-
await server_0.start_client(PeerInfo(self_hostname, full_node_server.get_port()), None)
|
|
2213
|
-
await server_1.start_client(PeerInfo(self_hostname, full_node_server.get_port()), None)
|
|
2214
|
-
|
|
2215
|
-
await full_node_api.farm_blocks_to_wallet(1, wallet_0)
|
|
2216
|
-
await full_node_api.farm_blocks_to_wallet(1, wallet_1)
|
|
2217
|
-
|
|
2218
|
-
# Node 0 sets up a DID Wallet with a backup set, but num_of_backup_ids_needed=0
|
|
2219
|
-
# (a malformed solution, but legal for the clvm puzzle)
|
|
2220
|
-
recovery_list = [bytes32(bytes.fromhex("00" * 32))]
|
|
2221
|
-
async with wallet_0.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
2222
|
-
did_wallet_0: DIDWallet = await DIDWallet.create_new_did_wallet(
|
|
2223
|
-
wallet_node_0.wallet_state_manager,
|
|
2224
|
-
wallet_0,
|
|
2225
|
-
uint64(101),
|
|
2226
|
-
action_scope,
|
|
2227
|
-
backups_ids=recovery_list,
|
|
2228
|
-
num_of_backup_ids_needed=uint64(0),
|
|
2229
|
-
)
|
|
2230
|
-
|
|
2231
|
-
await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
|
|
2232
|
-
await full_node_api.wait_for_wallets_synced(wallet_nodes=[wallet_node_0])
|
|
2233
|
-
|
|
2234
|
-
await time_out_assert(15, did_wallet_0.get_confirmed_balance, 101)
|
|
2235
|
-
await time_out_assert(15, did_wallet_0.get_unconfirmed_balance, 101)
|
|
2236
|
-
await time_out_assert(15, did_wallet_0.get_pending_change_balance, 0)
|
|
2237
|
-
|
|
2238
|
-
await full_node_api.farm_blocks_to_wallet(1, wallet_0)
|
|
2239
|
-
|
|
2240
|
-
#######################
|
|
2241
|
-
all_node_0_wallets = await wallet_node_0.wallet_state_manager.user_store.get_all_wallet_info_entries()
|
|
2242
|
-
all_node_1_wallets = await wallet_node_1.wallet_state_manager.user_store.get_all_wallet_info_entries()
|
|
2243
|
-
assert len(all_node_0_wallets) == len(all_node_1_wallets)
|
|
2244
|
-
|
|
2245
|
-
# Note that the inner program we expect is different than the on-chain inner.
|
|
2246
|
-
# This means that we have more work to do in the checks for the two different spend cases of
|
|
2247
|
-
# the DID wallet Singleton
|
|
2248
|
-
# assert (
|
|
2249
|
-
# json.loads(all_node_0_wallets[1].data)["current_inner"]
|
|
2250
|
-
# == json.loads(all_node_1_wallets[1].data)["current_inner"]
|
|
2251
|
-
# )
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
1152
|
# TODO: See Issue CHIA-1544
|
|
2255
1153
|
# This test should be ported to WalletTestFramework once we can replace keys in the wallet node
|
|
2256
1154
|
@pytest.mark.parametrize(
|
|
@@ -2273,8 +1171,6 @@ async def test_did_resync(
|
|
|
2273
1171
|
fee = uint64(0)
|
|
2274
1172
|
wallet_api_1 = WalletRpcApi(wallet_node_1)
|
|
2275
1173
|
wallet_api_2 = WalletRpcApi(wallet_node_2)
|
|
2276
|
-
async with wallet.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
2277
|
-
ph = await action_scope.get_puzzle_hash(wallet.wallet_state_manager)
|
|
2278
1174
|
if trusted:
|
|
2279
1175
|
wallet_node_1.config["trusted_peers"] = {full_node_server.node_id.hex(): full_node_server.node_id.hex()}
|
|
2280
1176
|
wallet_node_2.config["trusted_peers"] = {full_node_server.node_id.hex(): full_node_server.node_id.hex()}
|
|
@@ -2292,8 +1188,6 @@ async def test_did_resync(
|
|
|
2292
1188
|
wallet,
|
|
2293
1189
|
uint64(101),
|
|
2294
1190
|
action_scope,
|
|
2295
|
-
[bytes32(ph)],
|
|
2296
|
-
uint64(1),
|
|
2297
1191
|
{"Twitter": "Test", "GitHub": "测试"},
|
|
2298
1192
|
fee=fee,
|
|
2299
1193
|
)
|
|
@@ -2306,7 +1200,7 @@ async def test_did_resync(
|
|
|
2306
1200
|
async with wallet2.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
2307
1201
|
new_puzhash = await action_scope.get_puzzle_hash(wallet2.wallet_state_manager)
|
|
2308
1202
|
async with did_wallet_1.wallet_state_manager.new_action_scope(DEFAULT_TX_CONFIG, push=True) as action_scope:
|
|
2309
|
-
await did_wallet_1.transfer_did(new_puzhash, fee,
|
|
1203
|
+
await did_wallet_1.transfer_did(new_puzhash, fee, action_scope=action_scope)
|
|
2310
1204
|
await full_node_api.process_transaction_records(records=action_scope.side_effects.transactions)
|
|
2311
1205
|
await full_node_api.wait_for_wallets_synced(wallet_nodes=[wallet_node_1, wallet_node_2])
|
|
2312
1206
|
# Check if the DID wallet is created in the wallet2
|
|
@@ -2354,12 +1248,8 @@ async def test_did_resync(
|
|
|
2354
1248
|
],
|
|
2355
1249
|
indirect=True,
|
|
2356
1250
|
)
|
|
2357
|
-
@pytest.mark.parametrize(
|
|
2358
|
-
"use_alternate_recovery",
|
|
2359
|
-
[True, False],
|
|
2360
|
-
)
|
|
2361
1251
|
@pytest.mark.anyio
|
|
2362
|
-
async def test_did_coin_records(wallet_environments: WalletTestFramework
|
|
1252
|
+
async def test_did_coin_records(wallet_environments: WalletTestFramework) -> None:
|
|
2363
1253
|
# Setup
|
|
2364
1254
|
wallet_node = wallet_environments.environments[0].node
|
|
2365
1255
|
wallet = wallet_environments.environments[0].xch_wallet
|
|
@@ -2371,7 +1261,6 @@ async def test_did_coin_records(wallet_environments: WalletTestFramework, use_al
|
|
|
2371
1261
|
wallet,
|
|
2372
1262
|
uint64(1),
|
|
2373
1263
|
action_scope,
|
|
2374
|
-
use_alternate_recovery=use_alternate_recovery,
|
|
2375
1264
|
)
|
|
2376
1265
|
|
|
2377
1266
|
await wallet_environments.process_pending_states(
|
|
@@ -2395,7 +1284,7 @@ async def test_did_coin_records(wallet_environments: WalletTestFramework, use_al
|
|
|
2395
1284
|
wallet_environments.tx_config, push=True
|
|
2396
1285
|
) as action_scope:
|
|
2397
1286
|
await did_wallet.transfer_did(
|
|
2398
|
-
await action_scope.get_puzzle_hash(did_wallet.wallet_state_manager), uint64(0),
|
|
1287
|
+
await action_scope.get_puzzle_hash(did_wallet.wallet_state_manager), uint64(0), action_scope
|
|
2399
1288
|
)
|
|
2400
1289
|
await wallet_environments.process_pending_states(
|
|
2401
1290
|
[
|