chia-blockchain 2.5.6rc2__py3-none-any.whl → 2.5.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. chia/_tests/blockchain/blockchain_test_utils.py +6 -7
  2. chia/_tests/blockchain/test_augmented_chain.py +4 -3
  3. chia/_tests/blockchain/test_blockchain.py +10 -5
  4. chia/_tests/clvm/coin_store.py +1 -1
  5. chia/_tests/cmds/cmd_test_utils.py +84 -97
  6. chia/_tests/cmds/test_dev_gh.py +1 -1
  7. chia/_tests/cmds/test_farm_cmd.py +56 -2
  8. chia/_tests/cmds/wallet/test_consts.py +3 -1
  9. chia/_tests/cmds/wallet/test_did.py +3 -8
  10. chia/_tests/cmds/wallet/test_nft.py +6 -6
  11. chia/_tests/cmds/wallet/test_notifications.py +39 -21
  12. chia/_tests/cmds/wallet/test_vcs.py +2 -1
  13. chia/_tests/cmds/wallet/test_wallet.py +160 -136
  14. chia/_tests/conftest.py +51 -26
  15. chia/_tests/core/cmds/test_wallet.py +4 -3
  16. chia/_tests/core/consensus/test_pot_iterations.py +71 -24
  17. chia/_tests/core/custom_types/test_proof_of_space.py +60 -30
  18. chia/_tests/core/custom_types/test_spend_bundle.py +1 -4
  19. chia/_tests/core/data_layer/conftest.py +7 -2
  20. chia/_tests/core/data_layer/old_format/__init__.py +0 -0
  21. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-005876c1cdc4d5f1726551b207b9f63efc9cd2f72df80a3a26a1ba73d40d6745-delta-23-v1.0.dat +0 -0
  22. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-005876c1cdc4d5f1726551b207b9f63efc9cd2f72df80a3a26a1ba73d40d6745-full-23-v1.0.dat +0 -0
  23. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-01b36e72a975cdc00d6514eea81668d19e8ea3150217ae98cb3361688a016fab-delta-9-v1.0.dat +0 -0
  24. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-01b36e72a975cdc00d6514eea81668d19e8ea3150217ae98cb3361688a016fab-full-9-v1.0.dat +0 -0
  25. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-06147c3b12d73e9b83b686a8c10b4a36a513c8a93c0ff99ae197f06326278be9-delta-5-v1.0.dat +0 -0
  26. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-06147c3b12d73e9b83b686a8c10b4a36a513c8a93c0ff99ae197f06326278be9-full-5-v1.0.dat +0 -0
  27. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-073c051a5934ad3b8db39eee2189e4300e55f48aaa17ff4ae30eeae088ff544a-delta-22-v1.0.dat +0 -0
  28. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-073c051a5934ad3b8db39eee2189e4300e55f48aaa17ff4ae30eeae088ff544a-full-22-v1.0.dat +0 -0
  29. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-0cc077559b9c7b4aefe8f8f591c195e0779bebdf89f2ad8285a00ea5f859d965-delta-1-v1.0.dat +0 -0
  30. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-0cc077559b9c7b4aefe8f8f591c195e0779bebdf89f2ad8285a00ea5f859d965-full-1-v1.0.dat +0 -0
  31. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-16377275567b723b20936d3f1ec0a2fd83f6ac379b922351a5e4c54949069f3b-delta-2-v1.0.dat +0 -0
  32. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-16377275567b723b20936d3f1ec0a2fd83f6ac379b922351a5e4c54949069f3b-full-2-v1.0.dat +0 -0
  33. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-1cb824a7a5f02cd30ac6c38e8f6216780d9bfa2d24811d282a368dcd541438a7-delta-29-v1.0.dat +0 -0
  34. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-1cb824a7a5f02cd30ac6c38e8f6216780d9bfa2d24811d282a368dcd541438a7-full-29-v1.0.dat +0 -0
  35. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-27b89dc4809ebc5a3b87757d35e95e2761d978cf121e44fa2773a5c06e4cc7b5-delta-28-v1.0.dat +0 -0
  36. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-27b89dc4809ebc5a3b87757d35e95e2761d978cf121e44fa2773a5c06e4cc7b5-full-28-v1.0.dat +0 -0
  37. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-28a6b7c134abfaeb0ab58a018313f6c87a61a40a4d9ec9bedf53aa1d12f3ee37-delta-7-v1.0.dat +0 -0
  38. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-28a6b7c134abfaeb0ab58a018313f6c87a61a40a4d9ec9bedf53aa1d12f3ee37-full-7-v1.0.dat +0 -0
  39. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-30a6bfe7cecbeda259a295dc6de3a436357f52388c3b03d86901e7da68565aeb-delta-19-v1.0.dat +0 -0
  40. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-30a6bfe7cecbeda259a295dc6de3a436357f52388c3b03d86901e7da68565aeb-full-19-v1.0.dat +0 -0
  41. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-343a2bf9add798e3ac2e6a571823cf9fa7e8a1bed532143354ead2648bd036ef-delta-10-v1.0.dat +0 -0
  42. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-343a2bf9add798e3ac2e6a571823cf9fa7e8a1bed532143354ead2648bd036ef-full-10-v1.0.dat +0 -0
  43. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4d90efbc1fb3df324193831ea4a57dd5e10e67d9653343eb18d178272adb0447-delta-17-v1.0.dat +0 -0
  44. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4d90efbc1fb3df324193831ea4a57dd5e10e67d9653343eb18d178272adb0447-full-17-v1.0.dat +0 -0
  45. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4dd2ea099e91635c441f40b36d3f84078a2d818d2dc601c7278e72cbdfe3eca8-delta-20-v1.0.dat +0 -0
  46. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-4dd2ea099e91635c441f40b36d3f84078a2d818d2dc601c7278e72cbdfe3eca8-full-20-v1.0.dat +0 -0
  47. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-509effbdca78639023b933ce6c08a0465fb247e1cd5329e9e9c553940e4b6e46-delta-31-v1.0.dat +0 -0
  48. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-509effbdca78639023b933ce6c08a0465fb247e1cd5329e9e9c553940e4b6e46-full-31-v1.0.dat +0 -0
  49. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5379a4d9ff29c29d1ef0906d22e82c52472753d31806189ab813c43365341b78-delta-40-v1.0.dat +0 -0
  50. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5379a4d9ff29c29d1ef0906d22e82c52472753d31806189ab813c43365341b78-full-40-v1.0.dat +0 -0
  51. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-55908eda5686a8f89e4c50672cbe893ec1734fb23449dc03325efe7c414f9aa4-delta-49-v1.0.dat +0 -0
  52. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-55908eda5686a8f89e4c50672cbe893ec1734fb23449dc03325efe7c414f9aa4-full-49-v1.0.dat +0 -0
  53. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-57cc2691fb1fb986c99a58bcb0e029d0cd0cff41553d703147c54196d7d9ca63-delta-14-v1.0.dat +0 -0
  54. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-57cc2691fb1fb986c99a58bcb0e029d0cd0cff41553d703147c54196d7d9ca63-full-14-v1.0.dat +0 -0
  55. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5943bf8ae4f5e59969d8570e4f40a8223299febdcfbcf188b3b3e2ab11044e18-delta-34-v1.0.dat +0 -0
  56. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-5943bf8ae4f5e59969d8570e4f40a8223299febdcfbcf188b3b3e2ab11044e18-full-34-v1.0.dat +0 -0
  57. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6518527b7c939bee60ce6b024cbe90d3b9d8913c56b8ce11a4df5da7ff7db1c8-delta-8-v1.0.dat +0 -0
  58. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6518527b7c939bee60ce6b024cbe90d3b9d8913c56b8ce11a4df5da7ff7db1c8-full-8-v1.0.dat +0 -0
  59. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-66ff26a26620379e14a7c91252d27ee4dbe06ad69a3a390a88642fe757f2b288-delta-45-v1.0.dat +0 -0
  60. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-66ff26a26620379e14a7c91252d27ee4dbe06ad69a3a390a88642fe757f2b288-full-45-v1.0.dat +0 -0
  61. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6bd0a508ee2c4afbe9d4daa811139fd6e54e7f4e16850cbce999fa30f8bdccd2-delta-6-v1.0.dat +0 -0
  62. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6bd0a508ee2c4afbe9d4daa811139fd6e54e7f4e16850cbce999fa30f8bdccd2-full-6-v1.0.dat +0 -0
  63. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6ce850d0d77ca743fcc2fc792747472e5d2c1c0813aa43abbb370554428fc897-delta-48-v1.0.dat +0 -0
  64. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6ce850d0d77ca743fcc2fc792747472e5d2c1c0813aa43abbb370554428fc897-full-48-v1.0.dat +0 -0
  65. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6eb4ca2e1552b156c5969396b49070eb08ad6c96b347359387519be59f7ccaed-delta-26-v1.0.dat +0 -0
  66. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-6eb4ca2e1552b156c5969396b49070eb08ad6c96b347359387519be59f7ccaed-full-26-v1.0.dat +0 -0
  67. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-71c797fb7592d3f0a5a20c79ab8497ddaa0fd9ec17712e109d25c91b3f3c76e5-delta-3-v1.0.dat +0 -0
  68. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-71c797fb7592d3f0a5a20c79ab8497ddaa0fd9ec17712e109d25c91b3f3c76e5-full-3-v1.0.dat +0 -0
  69. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-73357026053d5a4969e7a6b9aeeef91c14cc6d5f32fc700fe6d21d2a1b22496c-delta-25-v1.0.dat +0 -0
  70. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-73357026053d5a4969e7a6b9aeeef91c14cc6d5f32fc700fe6d21d2a1b22496c-full-25-v1.0.dat +0 -0
  71. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-7c897e5c46e834ced65bde7de87716acfaa5dffbdb30b5cd9377d8c319df2034-delta-35-v1.0.dat +0 -0
  72. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-7c897e5c46e834ced65bde7de87716acfaa5dffbdb30b5cd9377d8c319df2034-full-35-v1.0.dat +0 -0
  73. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-87b8394d80d08117a5a1cd04ed8a682564eab7197a2c090159863591b5108874-delta-4-v1.0.dat +0 -0
  74. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-87b8394d80d08117a5a1cd04ed8a682564eab7197a2c090159863591b5108874-full-4-v1.0.dat +0 -0
  75. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-89eb40b9cc0921c5f5c3feb20927c13a9ada5760f82d219dcee153b7d400165c-delta-41-v1.0.dat +0 -0
  76. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-89eb40b9cc0921c5f5c3feb20927c13a9ada5760f82d219dcee153b7d400165c-full-41-v1.0.dat +0 -0
  77. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8b649433156b8c924436cdec9c6de26106fd6f73a0528570f48748f7b40d7f8a-delta-21-v1.0.dat +0 -0
  78. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8b649433156b8c924436cdec9c6de26106fd6f73a0528570f48748f7b40d7f8a-full-21-v1.0.dat +0 -0
  79. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8d364023a0834c8c3077e236a465493acbf488e4f9d1f4c6cc230343c10a8f7d-delta-42-v1.0.dat +0 -0
  80. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-8d364023a0834c8c3077e236a465493acbf488e4f9d1f4c6cc230343c10a8f7d-full-42-v1.0.dat +0 -0
  81. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-925689e24a3d98d98676d816cdd8b73e7b2df057d9d4503da9b27bf91d79666c-delta-38-v1.0.dat +0 -0
  82. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-925689e24a3d98d98676d816cdd8b73e7b2df057d9d4503da9b27bf91d79666c-full-38-v1.0.dat +0 -0
  83. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-937be3d428b19f521be4f98faecc3307ae11ee731c76992f417fa4268d13859e-delta-11-v1.0.dat +0 -0
  84. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-937be3d428b19f521be4f98faecc3307ae11ee731c76992f417fa4268d13859e-full-11-v1.0.dat +0 -0
  85. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-97f34af499b79e2111fc296a598fc9654c2467ea038dfea41fd58241fb3642de-delta-32-v1.0.dat +0 -0
  86. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-97f34af499b79e2111fc296a598fc9654c2467ea038dfea41fd58241fb3642de-full-32-v1.0.dat +0 -0
  87. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-9d1b737243b8a1d0022f2b36ac53333c6280354a74d77f2a3642dcab35204e59-delta-33-v1.0.dat +0 -0
  88. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-9d1b737243b8a1d0022f2b36ac53333c6280354a74d77f2a3642dcab35204e59-full-33-v1.0.dat +0 -0
  89. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-a6663f98ef6ddf6db55f01163e34bb2e87aa82f0347e79ce31e8dbfa390c480c-delta-47-v1.0.dat +0 -0
  90. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-a6663f98ef6ddf6db55f01163e34bb2e87aa82f0347e79ce31e8dbfa390c480c-full-47-v1.0.dat +0 -0
  91. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-aa77376d1ccd3664e5c6366e010c52a978fedbf40f5ce262fee71b2e7fe0c6a9-delta-50-v1.0.dat +0 -0
  92. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-aa77376d1ccd3664e5c6366e010c52a978fedbf40f5ce262fee71b2e7fe0c6a9-full-50-v1.0.dat +0 -0
  93. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b0f28514741ed1a71f5c6544bf92f9e0e493c5f3cf28328909771d8404eff626-delta-24-v1.0.dat +0 -0
  94. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b0f28514741ed1a71f5c6544bf92f9e0e493c5f3cf28328909771d8404eff626-full-24-v1.0.dat +0 -0
  95. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b3efee5358e6eb89ab3b60db2d128d57eef39e8538fb63c5632412d4f8e7d09e-delta-44-v1.0.dat +0 -0
  96. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-b3efee5358e6eb89ab3b60db2d128d57eef39e8538fb63c5632412d4f8e7d09e-full-44-v1.0.dat +0 -0
  97. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bb0b56b6eb7acbb4e80893b04c72412fe833418232e1ed7b06d97d7a7f08b4e1-delta-16-v1.0.dat +0 -0
  98. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bb0b56b6eb7acbb4e80893b04c72412fe833418232e1ed7b06d97d7a7f08b4e1-full-16-v1.0.dat +0 -0
  99. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bc45262b757ff494b53bd2a8fba0f5511cc1f9c2a2c5360e04ea8cebbf6409df-delta-13-v1.0.dat +0 -0
  100. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bc45262b757ff494b53bd2a8fba0f5511cc1f9c2a2c5360e04ea8cebbf6409df-full-13-v1.0.dat +0 -0
  101. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bd0494ba430aff13458b557113b073d226eaf11257dfe26ff3323fa1cfe1335b-delta-39-v1.0.dat +0 -0
  102. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-bd0494ba430aff13458b557113b073d226eaf11257dfe26ff3323fa1cfe1335b-full-39-v1.0.dat +0 -0
  103. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cd04f5fbba1553fa728b4dd8131d4723aaac288e0c7dc080447fbf0872c0a6eb-delta-36-v1.0.dat +0 -0
  104. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cd04f5fbba1553fa728b4dd8131d4723aaac288e0c7dc080447fbf0872c0a6eb-full-36-v1.0.dat +0 -0
  105. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cdd2399557fb3163a848f08831fdc833703354edb19a0d32a965fdb140f160c2-delta-18-v1.0.dat +0 -0
  106. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cdd2399557fb3163a848f08831fdc833703354edb19a0d32a965fdb140f160c2-full-18-v1.0.dat +0 -0
  107. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cf7a08fca7b1332095242e4d9800f4b94a3f4eaae88fe8407da42736d54b9e18-delta-37-v1.0.dat +0 -0
  108. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-cf7a08fca7b1332095242e4d9800f4b94a3f4eaae88fe8407da42736d54b9e18-full-37-v1.0.dat +0 -0
  109. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-d1f97465a9f52187e2ef3a0d811a1258f52380a65340c55f3e8e65b92753bc13-delta-15-v1.0.dat +0 -0
  110. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-d1f97465a9f52187e2ef3a0d811a1258f52380a65340c55f3e8e65b92753bc13-full-15-v1.0.dat +0 -0
  111. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e475eccd4ee597e5ff67b1a249e37d65d6e3f754c3f0379fdb43692513588fef-delta-46-v1.0.dat +0 -0
  112. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e475eccd4ee597e5ff67b1a249e37d65d6e3f754c3f0379fdb43692513588fef-full-46-v1.0.dat +0 -0
  113. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e82e63517d78fd65b23a05c3b9a98cf905ddad7026995a238bfe634006b84cd0-delta-27-v1.0.dat +0 -0
  114. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-e82e63517d78fd65b23a05c3b9a98cf905ddad7026995a238bfe634006b84cd0-full-27-v1.0.dat +0 -0
  115. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-ed2cf0fd6c0f6237c87c161e1fca303b3fbe6c04e01f652b88720b4572143349-delta-12-v1.0.dat +0 -0
  116. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-ed2cf0fd6c0f6237c87c161e1fca303b3fbe6c04e01f652b88720b4572143349-full-12-v1.0.dat +0 -0
  117. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f6e454eaf24a83c46a7bed4c19260a0a3ce0ed5c51739cb6d748d4913dc2ef58-delta-30-v1.0.dat +0 -0
  118. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f6e454eaf24a83c46a7bed4c19260a0a3ce0ed5c51739cb6d748d4913dc2ef58-full-30-v1.0.dat +0 -0
  119. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f7ad2bdf86d9609b4d6381086ec1e296bf558e2ff467ead29dd7fa6e31bacc56-delta-43-v1.0.dat +0 -0
  120. chia/_tests/core/data_layer/old_format/files/2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e612073746f7265206964-f7ad2bdf86d9609b4d6381086ec1e296bf558e2ff467ead29dd7fa6e31bacc56-full-43-v1.0.dat +0 -0
  121. chia/_tests/core/data_layer/old_format/files/__init__.py +0 -0
  122. chia/_tests/core/data_layer/old_format/old_db.sqlite +0 -0
  123. chia/_tests/core/data_layer/test_data_layer_util.py +18 -21
  124. chia/_tests/core/data_layer/test_data_rpc.py +77 -28
  125. chia/_tests/core/data_layer/test_data_store.py +637 -700
  126. chia/_tests/core/data_layer/test_data_store_schema.py +2 -209
  127. chia/_tests/core/full_node/ram_db.py +1 -1
  128. chia/_tests/core/full_node/stores/test_block_store.py +4 -10
  129. chia/_tests/core/full_node/stores/test_coin_store.py +1 -1
  130. chia/_tests/core/full_node/test_address_manager.py +3 -3
  131. chia/_tests/core/full_node/test_block_height_map.py +1 -1
  132. chia/_tests/core/full_node/test_full_node.py +91 -30
  133. chia/_tests/core/full_node/test_generator_tools.py +17 -10
  134. chia/_tests/core/mempool/test_mempool.py +190 -90
  135. chia/_tests/core/mempool/test_mempool_fee_estimator.py +2 -4
  136. chia/_tests/core/mempool/test_mempool_item_queries.py +1 -1
  137. chia/_tests/core/mempool/test_mempool_manager.py +252 -77
  138. chia/_tests/core/mempool/test_singleton_fast_forward.py +9 -27
  139. chia/_tests/core/server/serve.py +0 -2
  140. chia/_tests/core/server/test_rate_limits.py +400 -347
  141. chia/_tests/core/server/test_server.py +2 -2
  142. chia/_tests/core/services/test_services.py +7 -7
  143. chia/_tests/core/test_cost_calculation.py +31 -10
  144. chia/_tests/core/test_crawler.py +4 -4
  145. chia/_tests/core/test_db_conversion.py +7 -14
  146. chia/_tests/core/test_db_validation.py +2 -6
  147. chia/_tests/core/test_farmer_harvester_rpc.py +34 -1
  148. chia/_tests/core/test_full_node_rpc.py +28 -24
  149. chia/_tests/core/test_merkle_set.py +1 -4
  150. chia/_tests/core/test_seeder.py +1 -1
  151. chia/_tests/core/util/test_keychain.py +2 -2
  152. chia/_tests/core/util/test_lru_cache.py +16 -0
  153. chia/_tests/core/util/test_streamable.py +85 -4
  154. chia/_tests/environments/wallet.py +4 -1
  155. chia/_tests/farmer_harvester/test_farmer.py +8 -6
  156. chia/_tests/farmer_harvester/test_farmer_harvester.py +306 -8
  157. chia/_tests/farmer_harvester/test_filter_prefix_bits.py +3 -3
  158. chia/_tests/farmer_harvester/test_third_party_harvesters.py +11 -11
  159. chia/_tests/fee_estimation/test_fee_estimation_integration.py +2 -2
  160. chia/_tests/fee_estimation/test_fee_estimation_rpc.py +1 -1
  161. chia/_tests/fee_estimation/test_fee_estimation_unit_tests.py +1 -2
  162. chia/_tests/generator/test_rom.py +2 -1
  163. chia/_tests/harvester/__init__.py +0 -0
  164. chia/_tests/harvester/config.py +4 -0
  165. chia/_tests/harvester/test_harvester_api.py +157 -0
  166. chia/_tests/plot_sync/test_plot_sync.py +6 -3
  167. chia/_tests/plot_sync/test_receiver.py +16 -4
  168. chia/_tests/plot_sync/test_sender.py +8 -7
  169. chia/_tests/plot_sync/test_sync_simulated.py +15 -13
  170. chia/_tests/plot_sync/util.py +3 -2
  171. chia/_tests/plotting/test_plot_manager.py +21 -5
  172. chia/_tests/plotting/test_prover.py +106 -0
  173. chia/_tests/pools/test_pool_cmdline.py +7 -6
  174. chia/_tests/pools/test_pool_puzzles_lifecycle.py +10 -3
  175. chia/_tests/pools/test_pool_rpc.py +92 -64
  176. chia/_tests/solver/__init__.py +0 -0
  177. chia/_tests/solver/config.py +4 -0
  178. chia/_tests/solver/test_solver_service.py +29 -0
  179. chia/_tests/timelord/test_new_peak.py +1 -1
  180. chia/_tests/timelord/test_timelord.py +1 -1
  181. chia/_tests/util/benchmarks.py +5 -12
  182. chia/_tests/util/blockchain.py +1 -1
  183. chia/_tests/util/build_network_protocol_files.py +7 -0
  184. chia/_tests/util/network_protocol_data.py +26 -0
  185. chia/_tests/util/protocol_messages_bytes-v1.0 +0 -0
  186. chia/_tests/util/protocol_messages_json.py +19 -0
  187. chia/_tests/util/setup_nodes.py +21 -2
  188. chia/_tests/util/spend_sim.py +9 -3
  189. chia/_tests/util/test_condition_tools.py +3 -2
  190. chia/_tests/util/test_full_block_utils.py +10 -9
  191. chia/_tests/util/test_misc.py +10 -10
  192. chia/_tests/util/test_network.py +32 -1
  193. chia/_tests/util/test_network_protocol_files.py +333 -318
  194. chia/_tests/util/test_network_protocol_json.py +6 -0
  195. chia/_tests/util/test_network_protocol_test.py +27 -0
  196. chia/_tests/util/test_priority_mutex.py +1 -1
  197. chia/_tests/util/test_replace_str_to_bytes.py +6 -6
  198. chia/_tests/wallet/cat_wallet/test_cat_wallet.py +17 -13
  199. chia/_tests/wallet/cat_wallet/test_trades.py +55 -55
  200. chia/_tests/wallet/did_wallet/test_did.py +118 -1229
  201. chia/_tests/wallet/nft_wallet/config.py +1 -1
  202. chia/_tests/wallet/nft_wallet/test_nft_1_offers.py +73 -96
  203. chia/_tests/wallet/nft_wallet/test_nft_bulk_mint.py +15 -12
  204. chia/_tests/wallet/nft_wallet/test_nft_offers.py +67 -134
  205. chia/_tests/wallet/nft_wallet/test_nft_wallet.py +31 -26
  206. chia/_tests/wallet/rpc/test_wallet_rpc.py +765 -371
  207. chia/_tests/wallet/sync/test_wallet_sync.py +6 -0
  208. chia/_tests/wallet/test_new_wallet_protocol.py +1 -1
  209. chia/_tests/wallet/test_signer_protocol.py +2 -2
  210. chia/_tests/wallet/test_singleton_lifecycle_fast.py +3 -4
  211. chia/_tests/wallet/test_transaction_store.py +42 -33
  212. chia/_tests/wallet/test_wallet.py +22 -31
  213. chia/_tests/wallet/test_wallet_state_manager.py +14 -7
  214. chia/_tests/wallet/vc_wallet/test_vc_wallet.py +53 -32
  215. chia/apis.py +2 -0
  216. chia/cmds/beta.py +7 -3
  217. chia/cmds/chia.py +2 -0
  218. chia/cmds/cmd_classes.py +11 -27
  219. chia/cmds/cmds_util.py +3 -0
  220. chia/cmds/coin_funcs.py +27 -22
  221. chia/cmds/configure.py +42 -18
  222. chia/cmds/dev/data.py +22 -3
  223. chia/cmds/farm.py +32 -0
  224. chia/cmds/farm_funcs.py +54 -5
  225. chia/cmds/init_funcs.py +4 -0
  226. chia/cmds/keys_funcs.py +8 -10
  227. chia/cmds/peer_funcs.py +8 -10
  228. chia/cmds/plotnft_funcs.py +24 -16
  229. chia/cmds/rpc.py +11 -1
  230. chia/cmds/show_funcs.py +5 -5
  231. chia/cmds/solver.py +33 -0
  232. chia/cmds/solver_funcs.py +21 -0
  233. chia/cmds/wallet.py +1 -1
  234. chia/cmds/wallet_funcs.py +149 -96
  235. chia/consensus/block_body_validation.py +8 -9
  236. chia/consensus/block_creation.py +9 -10
  237. chia/consensus/block_header_validation.py +61 -69
  238. chia/{full_node → consensus}/block_height_map.py +2 -1
  239. chia/consensus/block_height_map_protocol.py +21 -0
  240. chia/consensus/block_rewards.py +12 -12
  241. chia/consensus/blockchain.py +8 -18
  242. chia/consensus/default_constants.py +6 -6
  243. chia/consensus/generator_tools.py +1 -1
  244. chia/consensus/get_block_challenge.py +24 -25
  245. chia/consensus/pos_quality.py +28 -2
  246. chia/consensus/pot_iterations.py +15 -17
  247. chia/daemon/keychain_proxy.py +5 -0
  248. chia/daemon/server.py +2 -3
  249. chia/data_layer/data_layer.py +32 -24
  250. chia/data_layer/data_layer_errors.py +5 -0
  251. chia/data_layer/data_layer_rpc_api.py +1 -1
  252. chia/data_layer/data_layer_service.py +8 -0
  253. chia/data_layer/data_layer_util.py +49 -89
  254. chia/data_layer/data_layer_wallet.py +20 -17
  255. chia/data_layer/data_store.py +1051 -1462
  256. chia/data_layer/download_data.py +44 -115
  257. chia/{server → data_layer}/start_data_layer.py +2 -1
  258. chia/data_layer/util/benchmark.py +38 -53
  259. chia/farmer/farmer.py +3 -0
  260. chia/farmer/farmer_api.py +104 -5
  261. chia/farmer/farmer_rpc_api.py +20 -0
  262. chia/farmer/farmer_rpc_client.py +6 -2
  263. chia/farmer/farmer_service.py +8 -0
  264. chia/{server → farmer}/start_farmer.py +9 -3
  265. chia/full_node/block_store.py +20 -10
  266. chia/full_node/coin_store.py +12 -4
  267. chia/full_node/eligible_coin_spends.py +17 -72
  268. chia/full_node/full_node.py +68 -71
  269. chia/full_node/full_node_api.py +26 -32
  270. chia/full_node/full_node_rpc_api.py +44 -33
  271. chia/full_node/full_node_rpc_client.py +67 -79
  272. chia/full_node/full_node_service.py +8 -0
  273. chia/full_node/full_node_store.py +5 -3
  274. chia/full_node/mempool.py +15 -16
  275. chia/full_node/mempool_manager.py +73 -89
  276. chia/{server → full_node}/start_full_node.py +1 -1
  277. chia/full_node/subscriptions.py +2 -2
  278. chia/full_node/weight_proof.py +14 -15
  279. chia/harvester/harvester.py +8 -1
  280. chia/harvester/harvester_api.py +178 -44
  281. chia/harvester/harvester_service.py +8 -0
  282. chia/{server → harvester}/start_harvester.py +1 -1
  283. chia/introducer/introducer_service.py +8 -0
  284. chia/{server → introducer}/start_introducer.py +1 -1
  285. chia/plot_sync/receiver.py +6 -1
  286. chia/plot_sync/sender.py +7 -4
  287. chia/plotting/cache.py +37 -28
  288. chia/plotting/check_plots.py +83 -48
  289. chia/plotting/create_plots.py +3 -4
  290. chia/plotting/manager.py +18 -13
  291. chia/plotting/prover.py +153 -0
  292. chia/plotting/util.py +14 -6
  293. chia/pools/pool_wallet.py +6 -4
  294. chia/protocols/harvester_protocol.py +14 -0
  295. chia/protocols/outbound_message.py +1 -0
  296. chia/protocols/pool_protocol.py +1 -1
  297. chia/protocols/protocol_message_types.py +7 -0
  298. chia/protocols/shared_protocol.py +2 -0
  299. chia/protocols/solver_protocol.py +18 -0
  300. chia/rpc/rpc_server.py +1 -1
  301. chia/seeder/crawl_store.py +4 -8
  302. chia/seeder/crawler.py +2 -2
  303. chia/seeder/crawler_service.py +8 -0
  304. chia/seeder/start_crawler.py +1 -1
  305. chia/server/address_manager.py +12 -15
  306. chia/server/introducer_peers.py +1 -1
  307. chia/server/node_discovery.py +9 -10
  308. chia/server/rate_limit_numbers.py +157 -168
  309. chia/server/rate_limits.py +44 -41
  310. chia/server/resolve_peer_info.py +5 -0
  311. chia/server/server.py +17 -7
  312. chia/server/start_service.py +0 -1
  313. chia/simulator/block_tools.py +92 -58
  314. chia/simulator/full_node_simulator.py +1 -1
  315. chia/simulator/setup_services.py +52 -15
  316. chia/solver/__init__.py +0 -0
  317. chia/solver/solver.py +100 -0
  318. chia/solver/solver_api.py +59 -0
  319. chia/solver/solver_rpc_api.py +31 -0
  320. chia/solver/solver_rpc_client.py +16 -0
  321. chia/solver/solver_service.py +8 -0
  322. chia/solver/start_solver.py +102 -0
  323. {mozilla-ca → chia/ssl}/cacert.pem +0 -27
  324. chia/ssl/create_ssl.py +3 -2
  325. chia/{server → timelord}/start_timelord.py +1 -1
  326. chia/timelord/timelord.py +12 -13
  327. chia/timelord/timelord_service.py +8 -0
  328. chia/types/blockchain_format/proof_of_space.py +61 -17
  329. chia/types/coin_spend.py +0 -8
  330. chia/types/internal_mempool_item.py +3 -3
  331. chia/types/mempool_item.py +15 -8
  332. chia/types/mempool_submission_status.py +1 -1
  333. chia/util/config.py +1 -3
  334. chia/util/db_wrapper.py +7 -8
  335. chia/util/initial-config.yaml +46 -0
  336. chia/util/lru_cache.py +8 -4
  337. chia/util/network.py +9 -0
  338. chia/util/streamable.py +38 -8
  339. chia/util/virtual_project_analysis.py +1 -1
  340. chia/wallet/cat_wallet/cat_outer_puzzle.py +7 -4
  341. chia/wallet/cat_wallet/cat_wallet.py +13 -7
  342. chia/wallet/cat_wallet/r_cat_wallet.py +4 -1
  343. chia/wallet/conditions.py +1 -3
  344. chia/wallet/did_wallet/did_wallet.py +27 -332
  345. chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
  346. chia/wallet/nft_wallet/nft_wallet.py +9 -7
  347. chia/wallet/puzzle_drivers.py +7 -8
  348. chia/{server → wallet}/start_wallet.py +1 -1
  349. chia/wallet/trade_manager.py +12 -9
  350. chia/wallet/transaction_record.py +14 -51
  351. chia/wallet/util/clvm_streamable.py +28 -41
  352. chia/wallet/util/merkle_utils.py +2 -2
  353. chia/wallet/util/tx_config.py +3 -6
  354. chia/wallet/vc_wallet/cr_cat_wallet.py +12 -6
  355. chia/wallet/vc_wallet/vc_wallet.py +13 -15
  356. chia/wallet/wallet.py +5 -3
  357. chia/wallet/wallet_node.py +25 -30
  358. chia/wallet/wallet_request_types.py +538 -101
  359. chia/wallet/wallet_rpc_api.py +398 -570
  360. chia/wallet/wallet_rpc_client.py +144 -332
  361. chia/wallet/wallet_service.py +8 -0
  362. chia/wallet/wallet_state_manager.py +53 -42
  363. chia/wallet/wallet_transaction_store.py +13 -5
  364. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.dist-info}/METADATA +31 -31
  365. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.dist-info}/RECORD +368 -240
  366. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.dist-info}/WHEEL +1 -1
  367. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.dist-info}/entry_points.txt +8 -7
  368. chia/full_node/mempool_check_conditions.py +0 -102
  369. chia/server/aliases.py +0 -35
  370. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7.dist-info/licenses}/LICENSE +0 -0
@@ -32,10 +32,8 @@ from chia.consensus.condition_costs import ConditionCost
32
32
  from chia.consensus.default_constants import DEFAULT_CONSTANTS
33
33
  from chia.full_node.eligible_coin_spends import (
34
34
  DedupCoinSpend,
35
- EligibilityAndAdditions,
36
35
  IdenticalSpendDedup,
37
36
  SkipDedup,
38
- run_for_cost,
39
37
  )
40
38
  from chia.full_node.mempool import MAX_SKIPPED_ITEMS, PRIORITY_TX_THRESHOLD
41
39
  from chia.full_node.mempool_manager import (
@@ -280,11 +278,13 @@ async def setup_mempool_with_coins(
280
278
  max_block_clvm_cost: Optional[int] = None,
281
279
  max_tx_clvm_cost: Optional[uint64] = None,
282
280
  mempool_block_buffer: Optional[int] = None,
281
+ puzzle_hash: bytes32 = IDENTITY_PUZZLE_HASH,
282
+ height: uint32 = TEST_HEIGHT,
283
283
  ) -> tuple[MempoolManager, list[Coin]]:
284
284
  coins = []
285
285
  test_coin_records = {}
286
286
  for amount in coin_amounts:
287
- coin = Coin(IDENTITY_PUZZLE_HASH, IDENTITY_PUZZLE_HASH, uint64(amount))
287
+ coin = Coin(bytes32.random(), puzzle_hash, uint64(amount))
288
288
  coins.append(coin)
289
289
  test_coin_records[coin.name()] = CoinRecord(coin, uint32(0), uint32(0), False, uint64(0))
290
290
 
@@ -302,7 +302,7 @@ async def setup_mempool_with_coins(
302
302
  if mempool_block_buffer is not None:
303
303
  constants = constants.replace(MEMPOOL_BLOCK_BUFFER=uint8(mempool_block_buffer))
304
304
  mempool_manager = await instantiate_mempool_manager(
305
- get_coin_records, constants=constants, max_tx_clvm_cost=max_tx_clvm_cost
305
+ get_coin_records, block_height=height, constants=constants, max_tx_clvm_cost=max_tx_clvm_cost
306
306
  )
307
307
  return (mempool_manager, coins)
308
308
 
@@ -361,6 +361,7 @@ def make_test_conds(
361
361
  flags,
362
362
  execution_cost=0,
363
363
  condition_cost=0,
364
+ fingerprint=b"",
364
365
  )
365
366
  for coin_id, parent_id, puzzle_hash, amount, flags, create_coin in spend_info
366
367
  ],
@@ -376,6 +377,9 @@ def make_test_conds(
376
377
  False,
377
378
  0,
378
379
  0,
380
+ 0,
381
+ 0,
382
+ 0,
379
383
  )
380
384
 
381
385
 
@@ -559,44 +563,43 @@ def make_bundle_spends_map_and_fee(
559
563
  spend_bundle: SpendBundle, conds: SpendBundleConditions
560
564
  ) -> tuple[dict[bytes32, BundleCoinSpend], uint64]:
561
565
  bundle_coin_spends: dict[bytes32, BundleCoinSpend] = {}
562
- eligibility_and_additions: dict[bytes32, EligibilityAndAdditions] = {}
566
+
567
+ spend_conditions = {bytes32(spend.coin_id): spend for spend in conds.spends}
568
+
563
569
  removals_amount = 0
564
570
  additions_amount = 0
565
- for spend in conds.spends:
566
- coin_id = bytes32(spend.coin_id)
567
- spend_additions = []
568
- for puzzle_hash, amount, _ in spend.create_coin:
569
- spend_additions.append(Coin(coin_id, puzzle_hash, uint64(amount)))
570
- additions_amount += amount
571
- eligibility_and_additions[coin_id] = EligibilityAndAdditions(
572
- is_eligible_for_dedup=bool(spend.flags & ELIGIBLE_FOR_DEDUP),
573
- spend_additions=spend_additions,
574
- ff_puzzle_hash=bytes32(spend.puzzle_hash) if bool(spend.flags & ELIGIBLE_FOR_FF) else None,
575
- )
576
571
  for coin_spend in spend_bundle.coin_spends:
577
572
  coin_id = coin_spend.coin.name()
578
573
  removals_amount += coin_spend.coin.amount
579
- eligibility_info = eligibility_and_additions.get(
580
- coin_id, EligibilityAndAdditions(is_eligible_for_dedup=False, spend_additions=[], ff_puzzle_hash=None)
581
- )
574
+ spend_conds = spend_conditions.pop(coin_id)
575
+
576
+ additions = []
577
+ for puzzle_hash, amount, _ in spend_conds.create_coin:
578
+ additions.append(Coin(coin_id, puzzle_hash, uint64(amount)))
579
+ additions_amount += amount
580
+
582
581
  bundle_coin_spends[coin_id] = BundleCoinSpend(
583
582
  coin_spend=coin_spend,
584
- eligible_for_dedup=eligibility_info.is_eligible_for_dedup,
585
- eligible_for_fast_forward=eligibility_info.ff_puzzle_hash is not None,
586
- additions=eligibility_info.spend_additions,
583
+ eligible_for_dedup=bool(spend_conds.flags & ELIGIBLE_FOR_DEDUP),
584
+ additions=additions,
585
+ cost=uint64(spend_conds.condition_cost + spend_conds.execution_cost),
587
586
  latest_singleton_lineage=UnspentLineageInfo(coin_id, coin_spend.coin.parent_coin_info, bytes32([0] * 32))
588
- if eligibility_info.ff_puzzle_hash is not None
587
+ if bool(spend_conds.flags & ELIGIBLE_FOR_FF)
589
588
  else None,
590
589
  )
590
+ assert additions_amount == conds.addition_amount
591
+ assert removals_amount == conds.removal_amount
591
592
  fee = uint64(removals_amount - additions_amount)
592
593
  return bundle_coin_spends, fee
593
594
 
594
595
 
595
596
  def mempool_item_from_spendbundle(spend_bundle: SpendBundle) -> MempoolItem:
596
- conds = get_conditions_from_spendbundle(spend_bundle, INFINITE_COST, DEFAULT_CONSTANTS, uint32(0))
597
+ conds = get_conditions_from_spendbundle(
598
+ spend_bundle, INFINITE_COST, DEFAULT_CONSTANTS, DEFAULT_CONSTANTS.HARD_FORK2_HEIGHT
599
+ )
597
600
  bundle_coin_spends, fee = make_bundle_spends_map_and_fee(spend_bundle, conds)
598
601
  return MempoolItem(
599
- spend_bundle=spend_bundle,
602
+ aggregated_signature=spend_bundle.aggregated_signature,
600
603
  fee=fee,
601
604
  conds=conds,
602
605
  spend_bundle_name=spend_bundle.name(),
@@ -888,8 +891,13 @@ def mk_bcs(coin_spend: CoinSpend, flags: int = 0) -> BundleCoinSpend:
888
891
  return BundleCoinSpend(
889
892
  coin_spend=coin_spend,
890
893
  eligible_for_dedup=bool(flags & ELIGIBLE_FOR_DEDUP),
891
- eligible_for_fast_forward=bool(flags & ELIGIBLE_FOR_FF),
892
894
  additions=[],
895
+ cost=uint64(0),
896
+ latest_singleton_lineage=UnspentLineageInfo(
897
+ coin_spend.coin.name(), coin_spend.coin.parent_coin_info, bytes32([0] * 32)
898
+ )
899
+ if flags & ELIGIBLE_FOR_FF
900
+ else None,
893
901
  )
894
902
 
895
903
 
@@ -921,7 +929,7 @@ def mk_item(
921
929
  spend_bundle = SpendBundle(coin_spends, G2Element())
922
930
  conds = make_test_conds(cost=cost, spend_ids=spend_ids)
923
931
  return MempoolItem(
924
- spend_bundle=spend_bundle,
932
+ aggregated_signature=spend_bundle.aggregated_signature,
925
933
  fee=uint64(fee),
926
934
  conds=conds,
927
935
  spend_bundle_name=spend_bundle.name(),
@@ -1116,8 +1124,7 @@ coins = make_test_coins()
1116
1124
  ],
1117
1125
  )
1118
1126
  def test_can_replace(existing_items: list[MempoolItem], new_item: MempoolItem, expected: bool) -> None:
1119
- removals = {c.name() for c in new_item.spend_bundle.removals()}
1120
- assert can_replace(existing_items, removals, new_item) == expected
1127
+ assert can_replace(existing_items, new_item) == expected
1121
1128
 
1122
1129
 
1123
1130
  @pytest.mark.anyio
@@ -1583,21 +1590,6 @@ async def test_replacing_one_with_an_eligible_coin() -> None:
1583
1590
  assert_sb_in_pool(mempool_manager, sb123e4)
1584
1591
 
1585
1592
 
1586
- @pytest.mark.parametrize("amount", [0, 1])
1587
- def test_run_for_cost(amount: int) -> None:
1588
- conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, amount]]
1589
- solution = SerializedProgram.to(conditions)
1590
- cost = run_for_cost(IDENTITY_PUZZLE, solution, additions_count=1, max_cost=uint64(10000000))
1591
- assert cost == uint64(1800044)
1592
-
1593
-
1594
- def test_run_for_cost_max_cost() -> None:
1595
- conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, 1]]
1596
- solution = SerializedProgram.to(conditions)
1597
- with pytest.raises(ValueError, match="cost exceeded"):
1598
- run_for_cost(IDENTITY_PUZZLE, solution, additions_count=1, max_cost=uint64(43))
1599
-
1600
-
1601
1593
  def test_dedup_info_nothing_to_do() -> None:
1602
1594
  # No eligible coins, nothing to deduplicate, item gets considered normally
1603
1595
 
@@ -1613,7 +1605,7 @@ def test_dedup_info_nothing_to_do() -> None:
1613
1605
  mempool_item = mempool_item_from_spendbundle(sb)
1614
1606
  dedup_coin_spends = IdenticalSpendDedup()
1615
1607
  unique_coin_spends, cost_saving, unique_additions = dedup_coin_spends.get_deduplication_info(
1616
- bundle_coin_spends=mempool_item.bundle_coin_spends, max_cost=mempool_item.conds.cost
1608
+ bundle_coin_spends=mempool_item.bundle_coin_spends
1617
1609
  )
1618
1610
  assert unique_coin_spends == sb.coin_spends
1619
1611
  assert cost_saving == 0
@@ -1633,7 +1625,7 @@ def test_dedup_info_eligible_1st_time() -> None:
1633
1625
  dedup_coin_spends = IdenticalSpendDedup()
1634
1626
  solution = SerializedProgram.to(conditions)
1635
1627
  unique_coin_spends, cost_saving, unique_additions = dedup_coin_spends.get_deduplication_info(
1636
- bundle_coin_spends=mempool_item.bundle_coin_spends, max_cost=mempool_item.conds.cost
1628
+ bundle_coin_spends=mempool_item.bundle_coin_spends
1637
1629
  )
1638
1630
  assert unique_coin_spends == sb.coin_spends
1639
1631
  assert cost_saving == 0
@@ -1641,7 +1633,10 @@ def test_dedup_info_eligible_1st_time() -> None:
1641
1633
  Coin(TEST_COIN_ID, IDENTITY_PUZZLE_HASH, uint64(1)),
1642
1634
  Coin(TEST_COIN_ID, IDENTITY_PUZZLE_HASH, uint64(TEST_COIN_AMOUNT - 1)),
1643
1635
  }
1644
- assert dedup_coin_spends == IdenticalSpendDedup({TEST_COIN_ID: DedupCoinSpend(solution=solution, cost=None)})
1636
+ expected_cost = mempool_item.bundle_coin_spends[TEST_COIN_ID].cost
1637
+ assert dedup_coin_spends == IdenticalSpendDedup(
1638
+ {TEST_COIN_ID: DedupCoinSpend(solution=solution, cost=expected_cost)}
1639
+ )
1645
1640
 
1646
1641
 
1647
1642
  def test_dedup_info_eligible_but_different_solution() -> None:
@@ -1651,14 +1646,12 @@ def test_dedup_info_eligible_but_different_solution() -> None:
1651
1646
  [ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT],
1652
1647
  ]
1653
1648
  initial_solution = SerializedProgram.to(initial_conditions)
1654
- dedup_coin_spends = IdenticalSpendDedup({TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=None)})
1649
+ dedup_coin_spends = IdenticalSpendDedup({TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=uint64(10))})
1655
1650
  conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT]]
1656
1651
  sb = spend_bundle_from_conditions(conditions, TEST_COIN)
1657
1652
  mempool_item = mempool_item_from_spendbundle(sb)
1658
1653
  with pytest.raises(SkipDedup, match="Solution is different from what we're deduplicating on"):
1659
- dedup_coin_spends.get_deduplication_info(
1660
- bundle_coin_spends=mempool_item.bundle_coin_spends, max_cost=mempool_item.conds.cost
1661
- )
1654
+ dedup_coin_spends.get_deduplication_info(bundle_coin_spends=mempool_item.bundle_coin_spends)
1662
1655
 
1663
1656
 
1664
1657
  def test_dedup_info_eligible_2nd_time_and_another_1st_time() -> None:
@@ -1668,7 +1661,10 @@ def test_dedup_info_eligible_2nd_time_and_another_1st_time() -> None:
1668
1661
  [ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT - 1],
1669
1662
  ]
1670
1663
  initial_solution = SerializedProgram.to(initial_conditions)
1671
- dedup_coin_spends = IdenticalSpendDedup({TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=None)})
1664
+ test_coin_cost = uint64(1337)
1665
+ dedup_coin_spends = IdenticalSpendDedup(
1666
+ {TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=test_coin_cost)}
1667
+ )
1672
1668
  sb1 = spend_bundle_from_conditions(initial_conditions, TEST_COIN)
1673
1669
  second_conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT2]]
1674
1670
  second_solution = SerializedProgram.to(second_conditions)
@@ -1677,19 +1673,19 @@ def test_dedup_info_eligible_2nd_time_and_another_1st_time() -> None:
1677
1673
  mempool_item = mempool_item_from_spendbundle(sb)
1678
1674
  assert mempool_item.conds is not None
1679
1675
  unique_coin_spends, cost_saving, unique_additions = dedup_coin_spends.get_deduplication_info(
1680
- bundle_coin_spends=mempool_item.bundle_coin_spends, max_cost=mempool_item.conds.cost
1676
+ bundle_coin_spends=mempool_item.bundle_coin_spends
1681
1677
  )
1682
1678
  # Only the eligible one that we encountered more than once gets deduplicated
1683
1679
  assert unique_coin_spends == sb2.coin_spends
1684
- saved_cost = uint64(3600044)
1685
- assert cost_saving == saved_cost
1680
+ assert cost_saving == test_coin_cost
1686
1681
  assert unique_additions == [Coin(TEST_COIN_ID2, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT2)]
1687
- # The coin we encountered a second time has its cost and additions properly updated
1688
- # The coin we encountered for the first time gets cost None and an empty set of additions
1682
+ # The coin we encountered a second time is already in the map
1683
+ # The coin we encountered for the first time gets added with its solution and cost
1684
+ test_coin2_cost = mempool_item.bundle_coin_spends[TEST_COIN_ID2].cost
1689
1685
  expected_dedup_coin_spends = IdenticalSpendDedup(
1690
1686
  {
1691
- TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=saved_cost),
1692
- TEST_COIN_ID2: DedupCoinSpend(solution=second_solution, cost=None),
1687
+ TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=test_coin_cost),
1688
+ TEST_COIN_ID2: DedupCoinSpend(solution=second_solution, cost=test_coin2_cost),
1693
1689
  }
1694
1690
  )
1695
1691
  assert dedup_coin_spends == expected_dedup_coin_spends
@@ -1704,11 +1700,12 @@ def test_dedup_info_eligible_3rd_time_another_2nd_time_and_one_non_eligible() ->
1704
1700
  initial_solution = SerializedProgram.to(initial_conditions)
1705
1701
  second_conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT2]]
1706
1702
  second_solution = SerializedProgram.to(second_conditions)
1707
- saved_cost = uint64(3600044)
1703
+ test_coin_cost = uint64(42)
1704
+ test_coin2_cost = uint64(1337)
1708
1705
  dedup_coin_spends = IdenticalSpendDedup(
1709
1706
  {
1710
- TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=saved_cost),
1711
- TEST_COIN_ID2: DedupCoinSpend(solution=second_solution, cost=None),
1707
+ TEST_COIN_ID: DedupCoinSpend(solution=initial_solution, cost=test_coin_cost),
1708
+ TEST_COIN_ID2: DedupCoinSpend(solution=second_solution, cost=test_coin2_cost),
1712
1709
  }
1713
1710
  )
1714
1711
  sb1 = spend_bundle_from_conditions(initial_conditions, TEST_COIN)
@@ -1725,16 +1722,16 @@ def test_dedup_info_eligible_3rd_time_another_2nd_time_and_one_non_eligible() ->
1725
1722
  mempool_item = mempool_item_from_spendbundle(sb)
1726
1723
  assert mempool_item.conds is not None
1727
1724
  unique_coin_spends, cost_saving, unique_additions = dedup_coin_spends.get_deduplication_info(
1728
- bundle_coin_spends=mempool_item.bundle_coin_spends, max_cost=mempool_item.conds.cost
1725
+ bundle_coin_spends=mempool_item.bundle_coin_spends
1729
1726
  )
1730
1727
  assert unique_coin_spends == sb3.coin_spends
1731
- saved_cost2 = uint64(1800044)
1732
- assert cost_saving == saved_cost + saved_cost2
1728
+ assert cost_saving == test_coin_cost + test_coin2_cost
1733
1729
  assert unique_additions == [Coin(TEST_COIN_ID3, IDENTITY_PUZZLE_HASH, TEST_COIN_AMOUNT3)]
1730
+ # TEST_COIN_ID3 is non-eligible, so it doesn't end up in this map
1734
1731
  expected_dedup_coin_spends = IdenticalSpendDedup(
1735
1732
  {
1736
- TEST_COIN_ID: DedupCoinSpend(initial_solution, saved_cost),
1737
- TEST_COIN_ID2: DedupCoinSpend(second_solution, saved_cost2),
1733
+ TEST_COIN_ID: DedupCoinSpend(initial_solution, test_coin_cost),
1734
+ TEST_COIN_ID2: DedupCoinSpend(second_solution, test_coin2_cost),
1738
1735
  }
1739
1736
  )
1740
1737
  assert dedup_coin_spends == expected_dedup_coin_spends
@@ -1804,18 +1801,21 @@ async def test_bundle_coin_spends() -> None:
1804
1801
  await send_spendbundle(mempool_manager, sb123e)
1805
1802
  mi123e = mempool_manager.get_mempool_item(sb123e.name())
1806
1803
  assert mi123e is not None
1804
+ execution_cost = 44
1807
1805
  for i in range(3):
1808
1806
  assert mi123e.bundle_coin_spends[coins[i].name()] == BundleCoinSpend(
1809
1807
  coin_spend=sb123.coin_spends[i],
1810
1808
  eligible_for_dedup=False,
1811
- eligible_for_fast_forward=False,
1812
1809
  additions=[Coin(coins[i].name(), IDENTITY_PUZZLE_HASH, coins[i].amount)],
1810
+ cost=uint64(ConditionCost.CREATE_COIN.value + ConditionCost.AGG_SIG.value + execution_cost),
1811
+ latest_singleton_lineage=None,
1813
1812
  )
1814
1813
  assert mi123e.bundle_coin_spends[coins[3].name()] == BundleCoinSpend(
1815
1814
  coin_spend=eligible_sb.coin_spends[0],
1816
1815
  eligible_for_dedup=True,
1817
- eligible_for_fast_forward=False,
1818
1816
  additions=[Coin(coins[3].name(), IDENTITY_PUZZLE_HASH, coins[3].amount)],
1817
+ cost=uint64(ConditionCost.CREATE_COIN.value + execution_cost),
1818
+ latest_singleton_lineage=None,
1819
1819
  )
1820
1820
 
1821
1821
 
@@ -2467,7 +2467,7 @@ async def test_new_peak_ff_eviction(
2467
2467
  item = mempool_manager.get_mempool_item(bundle.name())
2468
2468
  assert item is not None
2469
2469
  singleton_name = singleton_spend.coin.name()
2470
- assert item.bundle_coin_spends[singleton_name].eligible_for_fast_forward
2470
+ assert item.bundle_coin_spends[singleton_name].supports_fast_forward
2471
2471
  latest_singleton_lineage = item.bundle_coin_spends[singleton_name].latest_singleton_lineage
2472
2472
  assert latest_singleton_lineage is not None
2473
2473
  assert latest_singleton_lineage.coin_id == singleton_name
@@ -2499,7 +2499,7 @@ async def test_new_peak_ff_eviction(
2499
2499
  else:
2500
2500
  item = mempool_manager.get_mempool_item(bundle.name())
2501
2501
  assert item is not None
2502
- assert item.bundle_coin_spends[singleton_spend.coin.name()].eligible_for_fast_forward
2502
+ assert item.bundle_coin_spends[singleton_spend.coin.name()].supports_fast_forward
2503
2503
  latest_singleton_lineage = item.bundle_coin_spends[singleton_spend.coin.name()].latest_singleton_lineage
2504
2504
  assert latest_singleton_lineage is not None
2505
2505
  assert latest_singleton_lineage.coin_id == singleton_spend.coin.name()
@@ -2556,9 +2556,9 @@ async def test_multiple_ff(use_optimization: bool) -> None:
2556
2556
 
2557
2557
  item = mempool_manager.get_mempool_item(bundle.name())
2558
2558
  assert item is not None
2559
- assert item.bundle_coin_spends[singleton_spend1.coin.name()].eligible_for_fast_forward
2560
- assert item.bundle_coin_spends[singleton_spend2.coin.name()].eligible_for_fast_forward
2561
- assert not item.bundle_coin_spends[coin_spend.coin.name()].eligible_for_fast_forward
2559
+ assert item.bundle_coin_spends[singleton_spend1.coin.name()].supports_fast_forward
2560
+ assert item.bundle_coin_spends[singleton_spend2.coin.name()].supports_fast_forward
2561
+ assert not item.bundle_coin_spends[coin_spend.coin.name()].supports_fast_forward
2562
2562
 
2563
2563
  # spend the singleton coin2 and make coin3 the latest version
2564
2564
  coins.update_lineage(singleton_ph, singleton_spend3.coin)
@@ -2620,7 +2620,7 @@ async def test_advancing_ff(use_optimization: bool) -> None:
2620
2620
  item = mempool_manager.get_mempool_item(bundle.name())
2621
2621
  assert item is not None
2622
2622
  spend = item.bundle_coin_spends[spend_a.coin.name()]
2623
- assert spend.eligible_for_fast_forward
2623
+ assert spend.supports_fast_forward
2624
2624
  assert spend.latest_singleton_lineage is not None
2625
2625
  assert spend.latest_singleton_lineage.coin_id == spend_a.coin.name()
2626
2626
 
@@ -2632,7 +2632,7 @@ async def test_advancing_ff(use_optimization: bool) -> None:
2632
2632
  item = mempool_manager.get_mempool_item(bundle.name())
2633
2633
  assert item is not None
2634
2634
  spend = item.bundle_coin_spends[spend_a.coin.name()]
2635
- assert spend.eligible_for_fast_forward
2635
+ assert spend.supports_fast_forward
2636
2636
  assert spend.latest_singleton_lineage is not None
2637
2637
  assert spend.latest_singleton_lineage.coin_id == spend_b.coin.name()
2638
2638
 
@@ -2644,7 +2644,7 @@ async def test_advancing_ff(use_optimization: bool) -> None:
2644
2644
  item = mempool_manager.get_mempool_item(bundle.name())
2645
2645
  assert item is not None
2646
2646
  spend = item.bundle_coin_spends[spend_a.coin.name()]
2647
- assert spend.eligible_for_fast_forward
2647
+ assert spend.supports_fast_forward
2648
2648
  assert spend.latest_singleton_lineage is not None
2649
2649
  assert spend.latest_singleton_lineage.coin_id == spend_c.coin.name()
2650
2650
 
@@ -3163,6 +3163,120 @@ def test_check_removals(case: CheckRemovalsCase) -> None:
3163
3163
  assert set(conflicts) == set(expected_conflicts)
3164
3164
 
3165
3165
 
3166
+ # this puzzle just creates coins, however many are requested by the solution
3167
+ # (mod (A)
3168
+ # (defun loop (n)
3169
+ # (if (= n 1)
3170
+ # (list)
3171
+ # (c (list 51 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff n) (loop (- n 1))))
3172
+ # )
3173
+ # (loop A)
3174
+ # )
3175
+ create_coins_loop: str = (
3176
+ "ff02ffff01ff02ff02ffff04ff02ffff04ff05ff80808080ffff04ffff01ff02"
3177
+ "ffff03ffff09ff05ffff010180ff80ffff01ff04ffff04ffff0133ffff04ffff"
3178
+ "01a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
3179
+ "ffffffff04ff05ff80808080ffff02ff02ffff04ff02ffff04ffff11ff05ffff"
3180
+ "010180ff808080808080ff0180ff018080"
3181
+ )
3182
+
3183
+ # (mod (A)
3184
+ # (defun loop (n)
3185
+ # (if (= n 0) (list) (c n (loop (- n 1))))
3186
+ # )
3187
+ # (c (c 1 (loop A)) ())
3188
+ # )
3189
+ deep_recursion: str = (
3190
+ "ff02ffff01ff04ffff04ffff0101ffff02ff02ffff04ff02ffff04ff05ff8080"
3191
+ "808080ff8080ffff04ffff01ff02ffff03ffff09ff05ff8080ff80ffff01ff04"
3192
+ "ff05ffff02ff02ffff04ff02ffff04ffff11ff05ffff010180ff808080808080"
3193
+ "ff0180ff018080"
3194
+ )
3195
+
3196
+
3197
+ # this test uses artificial puzzles just to exercise the block creation. These
3198
+ # spends are expected not to verify any signatures
3199
+ # This is to keep the test simple.
3200
+ @pytest.mark.parametrize(
3201
+ "puzzle, solution",
3202
+ [
3203
+ pytest.param(create_coins_loop, "ff8207d180", id="2000-coins"),
3204
+ pytest.param(create_coins_loop, "ff8203e980", id="1000-coins"),
3205
+ pytest.param(create_coins_loop, "ff8201f580", id="500 coins"),
3206
+ pytest.param(deep_recursion, "ff830f424080", id="recurse-1000000"),
3207
+ pytest.param(deep_recursion, "ff82271080", id="recurse-10000"),
3208
+ pytest.param(deep_recursion, "ff6480", id="recurse-100"),
3209
+ ],
3210
+ )
3211
+ @pytest.mark.parametrize("old", [True, False])
3212
+ @pytest.mark.anyio
3213
+ async def test_create_block_generator_custom_spend(
3214
+ puzzle: str, solution: str, old: bool, softfork_height: uint32
3215
+ ) -> None:
3216
+ solution_str = SerializedProgram.fromhex(solution)
3217
+ puzzle_reveal = SerializedProgram.fromhex(puzzle)
3218
+ puzzle_hash = puzzle_reveal.get_tree_hash()
3219
+
3220
+ mempool_manager, coins = await setup_mempool_with_coins(
3221
+ coin_amounts=list(range(100000000, 100000022)), puzzle_hash=puzzle_hash, height=softfork_height
3222
+ )
3223
+
3224
+ spend_bundles = [
3225
+ SpendBundle(
3226
+ coin_spends=[CoinSpend(coin, puzzle_reveal=puzzle_reveal, solution=solution_str)],
3227
+ aggregated_signature=G2Element(),
3228
+ )
3229
+ for coin in coins
3230
+ ]
3231
+
3232
+ for sb in spend_bundles:
3233
+ try:
3234
+ conds2 = await mempool_manager.pre_validate_spendbundle(sb)
3235
+ await mempool_manager.add_spend_bundle(sb, conds2, sb.name(), softfork_height)
3236
+ invariant_check_mempool(mempool_manager.mempool)
3237
+ except Exception as e:
3238
+ print(f"not adding bundle: {e}")
3239
+ # we don't expect this coin to be spent by the resulting generator
3240
+ # so remove it from the list
3241
+ for cs in sb.coin_spends:
3242
+ coins.remove(cs.coin)
3243
+
3244
+ create_block = mempool_manager.create_block_generator if old else mempool_manager.create_block_generator2
3245
+ assert mempool_manager.peak is not None
3246
+ generator = create_block(mempool_manager.peak.header_hash, 10.0)
3247
+
3248
+ if len(coins) == 0:
3249
+ assert generator is None
3250
+ else:
3251
+ assert generator is not None
3252
+
3253
+ assert generator.signature == G2Element()
3254
+
3255
+ removals = set(generator.removals)
3256
+
3257
+ err, conds = run_block_generator2(
3258
+ bytes(generator.program),
3259
+ generator.generator_refs,
3260
+ DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM,
3261
+ 0,
3262
+ generator.signature,
3263
+ None,
3264
+ DEFAULT_CONSTANTS,
3265
+ )
3266
+
3267
+ assert err is None
3268
+ assert conds is not None
3269
+
3270
+ assert len(conds.spends) == len(removals)
3271
+
3272
+ for spend in conds.spends:
3273
+ removal = Coin(spend.parent_id, spend.puzzle_hash, uint64(spend.coin_amount))
3274
+ assert removal in coins
3275
+ assert removal in removals
3276
+
3277
+ invariant_check_mempool(mempool_manager.mempool)
3278
+
3279
+
3166
3280
  @pytest.mark.anyio
3167
3281
  async def test_new_peak_deferred_ff_items() -> None:
3168
3282
  """
@@ -3269,3 +3383,64 @@ async def test_different_ff_versions() -> None:
3269
3383
  latest_singleton_lineage2 = new_mi2.bundle_coin_spends[version2_id].latest_singleton_lineage
3270
3384
  assert latest_singleton_lineage2 is not None
3271
3385
  assert latest_singleton_lineage2.coin_id == new_latest_lineage_id
3386
+
3387
+
3388
+ @pytest.mark.anyio
3389
+ @pytest.mark.parametrize(
3390
+ "condition_and_error",
3391
+ [
3392
+ (ConditionOpcode.ASSERT_HEIGHT_RELATIVE, Err.ASSERT_HEIGHT_RELATIVE_FAILED),
3393
+ (ConditionOpcode.ASSERT_HEIGHT_ABSOLUTE, Err.ASSERT_HEIGHT_ABSOLUTE_FAILED),
3394
+ ],
3395
+ )
3396
+ @pytest.mark.parametrize("optimized_path", [True, False])
3397
+ async def test_new_peak_txs_added(condition_and_error: tuple[ConditionOpcode, Err], optimized_path: bool) -> None:
3398
+ """
3399
+ Tests that deferred transactions because of time-lock are retried once the
3400
+ time-lock allows them to be reconsidered.
3401
+ """
3402
+ coins = TestCoins([TEST_COIN], {})
3403
+ mempool_manager = await setup_mempool(coins)
3404
+ # Add an item that should go to the pending cache
3405
+ assert mempool_manager.peak is not None
3406
+ condition_height = mempool_manager.peak.height + 1
3407
+ condition, expected_error = condition_and_error
3408
+ _, sb_name, result = await generate_and_add_spendbundle(mempool_manager, [[condition, condition_height]])
3409
+ _, status, error = result
3410
+ assert status == MempoolInclusionStatus.PENDING
3411
+ assert error == expected_error
3412
+ # Advance the mempool beyond the asserted height to retry the test item
3413
+ if optimized_path:
3414
+ spent_coins: Optional[list[bytes32]] = []
3415
+ new_peak_info = await mempool_manager.new_peak(
3416
+ create_test_block_record(height=uint32(condition_height)), spent_coins
3417
+ )
3418
+ # We're not there yet (needs to be higher, not equal)
3419
+ assert new_peak_info.spend_bundle_ids == []
3420
+ assert mempool_manager.get_mempool_item(sb_name, include_pending=False) is None
3421
+ else:
3422
+ spent_coins = None
3423
+ new_peak_info = await mempool_manager.new_peak(
3424
+ create_test_block_record(height=uint32(condition_height + 1)), spent_coins
3425
+ )
3426
+ # The item gets retried successfully now
3427
+ assert new_peak_info.spend_bundle_ids == [sb_name]
3428
+ assert mempool_manager.get_mempool_item(sb_name, include_pending=False) is not None
3429
+
3430
+
3431
+ @pytest.mark.anyio
3432
+ async def test_mempool_item_to_spend_bundle() -> None:
3433
+ """
3434
+ Tests that we can properly go back to a `SpendBundle` from a `MempoolItem`.
3435
+ """
3436
+ coins = [Coin(bytes32.random(), IDENTITY_PUZZLE_HASH, uint64(i + 1)) for i in range(random.randint(42, 1337))]
3437
+ mempool_manager = await setup_mempool(TestCoins(coins, {}))
3438
+ random_sample = random.sample(coins, 42)
3439
+ sb = SpendBundle([CoinSpend(c, IDENTITY_PUZZLE, SerializedProgram.to(None)) for c in random_sample], G2Element())
3440
+ sb_name = sb.name()
3441
+ await add_spendbundle(mempool_manager, sb, sb_name)
3442
+ mi = mempool_manager.get_mempool_item(sb_name)
3443
+ assert mi is not None
3444
+ result = mi.to_spend_bundle()
3445
+ assert result == sb
3446
+ assert result.name() == sb_name
@@ -52,8 +52,10 @@ def test_process_fast_forward_spends_nothing_to_do() -> None:
52
52
  sb = spend_bundle_from_conditions(conditions, TEST_COIN, sig)
53
53
  item = mempool_item_from_spendbundle(sb)
54
54
  # This coin is not eligible for fast forward
55
- assert item.bundle_coin_spends[TEST_COIN_ID].eligible_for_fast_forward is False
56
- internal_mempool_item = InternalMempoolItem(sb, item.conds, item.height_added_to_mempool, item.bundle_coin_spends)
55
+ assert not item.bundle_coin_spends[TEST_COIN_ID].supports_fast_forward
56
+ internal_mempool_item = InternalMempoolItem(
57
+ sb.aggregated_signature, item.conds, item.height_added_to_mempool, item.bundle_coin_spends
58
+ )
57
59
  original_version = dataclasses.replace(internal_mempool_item)
58
60
  singleton_ff = SingletonFastForward()
59
61
  bundle_coin_spends = singleton_ff.process_fast_forward_spends(
@@ -63,28 +65,6 @@ def test_process_fast_forward_spends_nothing_to_do() -> None:
63
65
  assert bundle_coin_spends == original_version.bundle_coin_spends
64
66
 
65
67
 
66
- def test_process_fast_forward_spends_unknown_ff() -> None:
67
- """
68
- This tests the case when we process for the first time but we are unable
69
- to lookup the latest version from the item's latest singleton lineage
70
- """
71
- test_coin = Coin(TEST_COIN_ID, IDENTITY_PUZZLE_HASH, uint64(1))
72
- conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, 1]]
73
- sb = spend_bundle_from_conditions(conditions, test_coin)
74
- item = mempool_item_from_spendbundle(sb)
75
- # The coin is eligible for fast forward
76
- assert item.bundle_coin_spends[test_coin.name()].eligible_for_fast_forward is True
77
- item.bundle_coin_spends[test_coin.name()].latest_singleton_lineage = None
78
- internal_mempool_item = InternalMempoolItem(sb, item.conds, item.height_added_to_mempool, item.bundle_coin_spends)
79
- singleton_ff = SingletonFastForward()
80
- # We have no fast forward records yet, so we'll process this coin for the
81
- # first time here, but the item's latest singleton lineage returns None
82
- with pytest.raises(ValueError, match="Cannot proceed with singleton spend fast forward."):
83
- singleton_ff.process_fast_forward_spends(
84
- mempool_item=internal_mempool_item, height=TEST_HEIGHT, constants=DEFAULT_CONSTANTS
85
- )
86
-
87
-
88
68
  def test_process_fast_forward_spends_latest_unspent() -> None:
89
69
  """
90
70
  This tests the case when we are the latest singleton version already, so
@@ -103,9 +83,11 @@ def test_process_fast_forward_spends_latest_unspent() -> None:
103
83
  conditions = [[ConditionOpcode.CREATE_COIN, IDENTITY_PUZZLE_HASH, test_amount]]
104
84
  sb = spend_bundle_from_conditions(conditions, test_coin)
105
85
  item = mempool_item_from_spendbundle(sb)
106
- assert item.bundle_coin_spends[test_coin.name()].eligible_for_fast_forward is True
86
+ assert item.bundle_coin_spends[test_coin.name()].supports_fast_forward
107
87
  item.bundle_coin_spends[test_coin.name()].latest_singleton_lineage = test_unspent_lineage_info
108
- internal_mempool_item = InternalMempoolItem(sb, item.conds, item.height_added_to_mempool, item.bundle_coin_spends)
88
+ internal_mempool_item = InternalMempoolItem(
89
+ sb.aggregated_signature, item.conds, item.height_added_to_mempool, item.bundle_coin_spends
90
+ )
109
91
  original_version = dataclasses.replace(internal_mempool_item)
110
92
  singleton_ff = SingletonFastForward()
111
93
  bundle_coin_spends = singleton_ff.process_fast_forward_spends(
@@ -168,12 +150,12 @@ def test_perform_the_fast_forward() -> None:
168
150
  "517b0dadb0c310ded24dd86dff8205398080ff808080"
169
151
  )
170
152
  test_coin_spend = CoinSpend(test_coin, test_puzzle_reveal, test_solution)
171
- test_spend_data = BundleCoinSpend(test_coin_spend, False, True, [test_child_coin])
172
153
  test_unspent_lineage_info = UnspentLineageInfo(
173
154
  coin_id=latest_unspent_coin.name(),
174
155
  parent_id=latest_unspent_coin.parent_coin_info,
175
156
  parent_parent_id=test_child_coin.parent_coin_info,
176
157
  )
158
+ test_spend_data = BundleCoinSpend(test_coin_spend, False, [test_child_coin], uint64(0), test_unspent_lineage_info)
177
159
  # Start from a fresh state of fast forward spends
178
160
  fast_forward_spends: dict[bytes32, UnspentLineageInfo] = {}
179
161
  # Perform the fast forward on the test coin (the grandparent)
@@ -1,8 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import asyncio
4
- import asyncio.events
5
- import asyncio.protocols
6
4
  import dataclasses
7
5
  import functools
8
6
  import logging.config