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.
Files changed (371) 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 +134 -75
  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 +4 -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 -32
  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 +14 -14
  275. chia/full_node/mempool_manager.py +67 -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 +51 -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/service_groups.py +3 -1
  339. chia/util/streamable.py +38 -8
  340. chia/util/virtual_project_analysis.py +1 -1
  341. chia/wallet/cat_wallet/cat_outer_puzzle.py +7 -4
  342. chia/wallet/cat_wallet/cat_wallet.py +13 -7
  343. chia/wallet/cat_wallet/r_cat_wallet.py +4 -1
  344. chia/wallet/conditions.py +1 -3
  345. chia/wallet/did_wallet/did_wallet.py +27 -332
  346. chia/wallet/nft_wallet/nft_puzzle_utils.py +1 -1
  347. chia/wallet/nft_wallet/nft_wallet.py +9 -7
  348. chia/wallet/puzzle_drivers.py +7 -8
  349. chia/{server → wallet}/start_wallet.py +1 -1
  350. chia/wallet/trade_manager.py +12 -9
  351. chia/wallet/transaction_record.py +14 -51
  352. chia/wallet/util/clvm_streamable.py +28 -41
  353. chia/wallet/util/merkle_utils.py +2 -2
  354. chia/wallet/util/tx_config.py +3 -6
  355. chia/wallet/vc_wallet/cr_cat_wallet.py +12 -6
  356. chia/wallet/vc_wallet/vc_wallet.py +13 -15
  357. chia/wallet/wallet.py +5 -3
  358. chia/wallet/wallet_node.py +25 -30
  359. chia/wallet/wallet_request_types.py +538 -101
  360. chia/wallet/wallet_rpc_api.py +398 -570
  361. chia/wallet/wallet_rpc_client.py +144 -332
  362. chia/wallet/wallet_service.py +8 -0
  363. chia/wallet/wallet_state_manager.py +53 -42
  364. chia/wallet/wallet_transaction_store.py +13 -5
  365. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/METADATA +31 -31
  366. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/RECORD +369 -241
  367. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/WHEEL +1 -1
  368. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info}/entry_points.txt +8 -7
  369. chia/full_node/mempool_check_conditions.py +0 -102
  370. chia/server/aliases.py +0 -35
  371. {chia_blockchain-2.5.6rc2.dist-info → chia_blockchain-2.5.7rc2.dist-info/licenses}/LICENSE +0 -0
@@ -1,22 +1,24 @@
1
1
  from __future__ import annotations
2
2
 
3
- import asyncio
3
+ from dataclasses import dataclass
4
+ from typing import Union
4
5
 
5
6
  import pytest
6
7
  from chia_rs.sized_ints import uint32
7
8
 
8
9
  from chia._tests.conftest import node_with_params
10
+ from chia._tests.util.misc import boolean_datacases
9
11
  from chia._tests.util.time_out_assert import time_out_assert
10
12
  from chia.protocols.full_node_protocol import RejectBlock, RejectBlocks, RespondBlock, RespondBlocks
11
13
  from chia.protocols.outbound_message import make_msg
12
14
  from chia.protocols.protocol_message_types import ProtocolMessageTypes
13
15
  from chia.protocols.shared_protocol import Capability
14
- from chia.server.rate_limit_numbers import compose_rate_limits, get_rate_limits_to_use
15
- from chia.server.rate_limit_numbers import rate_limits as rl_numbers
16
+ from chia.server.rate_limit_numbers import RLSettings, Unlimited, get_rate_limits_to_use
16
17
  from chia.server.rate_limits import RateLimiter
17
18
  from chia.server.server import ChiaServer
18
19
  from chia.server.ws_connection import WSChiaConnection
19
20
  from chia.simulator.block_tools import BlockTools
21
+ from chia.simulator.full_node_simulator import FullNodeSimulator
20
22
  from chia.types.peer_info import PeerInfo
21
23
 
22
24
  rl_v2 = [Capability.BASE, Capability.BLOCK_HEADERS, Capability.RATE_LIMITS_V2]
@@ -25,355 +27,402 @@ node_with_params_b = node_with_params
25
27
  test_different_versions_results: list[int] = []
26
28
 
27
29
 
28
- class TestRateLimits:
29
- @pytest.mark.anyio
30
- async def test_get_rate_limits_to_use(self):
31
- assert get_rate_limits_to_use(rl_v2, rl_v2) != get_rate_limits_to_use(rl_v2, rl_v1)
32
- assert get_rate_limits_to_use(rl_v1, rl_v1) == get_rate_limits_to_use(rl_v2, rl_v1)
33
- assert get_rate_limits_to_use(rl_v1, rl_v1) == get_rate_limits_to_use(rl_v1, rl_v2)
34
-
35
- @pytest.mark.anyio
36
- async def test_too_many_messages(self):
37
- # Too many messages
38
- r = RateLimiter(incoming=True)
39
- new_tx_message = make_msg(ProtocolMessageTypes.new_transaction, bytes([1] * 40))
40
- for i in range(4999):
41
- assert r.process_msg_and_check(new_tx_message, rl_v2, rl_v2) is None
42
-
43
- saw_disconnect = False
44
- for i in range(4999):
45
- response = r.process_msg_and_check(new_tx_message, rl_v2, rl_v2)
46
- if response is not None:
47
- saw_disconnect = True
48
- assert saw_disconnect
49
-
50
- # Non-tx message
51
- r = RateLimiter(incoming=True)
52
- new_peak_message = make_msg(ProtocolMessageTypes.new_peak, bytes([1] * 40))
53
- for i in range(200):
54
- assert r.process_msg_and_check(new_peak_message, rl_v2, rl_v2) is None
55
-
56
- saw_disconnect = False
57
- for i in range(200):
58
- response = r.process_msg_and_check(new_peak_message, rl_v2, rl_v2)
59
- if response is not None:
60
- saw_disconnect = True
61
- assert saw_disconnect
62
-
63
- @pytest.mark.anyio
64
- async def test_large_message(self):
65
- # Large tx
66
- small_tx_message = make_msg(ProtocolMessageTypes.respond_transaction, bytes([1] * 500 * 1024))
67
- large_tx_message = make_msg(ProtocolMessageTypes.new_transaction, bytes([1] * 3 * 1024 * 1024))
68
-
69
- r = RateLimiter(incoming=True)
70
- assert r.process_msg_and_check(small_tx_message, rl_v2, rl_v2) is None
71
- assert r.process_msg_and_check(large_tx_message, rl_v2, rl_v2) is not None
72
-
73
- small_vdf_message = make_msg(ProtocolMessageTypes.respond_signage_point, bytes([1] * 5 * 1024))
74
- large_vdf_message = make_msg(ProtocolMessageTypes.respond_signage_point, bytes([1] * 600 * 1024))
75
- large_blocks_message = make_msg(ProtocolMessageTypes.respond_blocks, bytes([1] * 51 * 1024 * 1024))
76
- r = RateLimiter(incoming=True)
77
- assert r.process_msg_and_check(small_vdf_message, rl_v2, rl_v2) is None
78
- assert r.process_msg_and_check(small_vdf_message, rl_v2, rl_v2) is None
79
- assert r.process_msg_and_check(large_vdf_message, rl_v2, rl_v2) is not None
80
- # this limit applies even though this message type is unlimited
81
- assert r.process_msg_and_check(large_blocks_message, rl_v2, rl_v2) is not None
82
-
83
- @pytest.mark.anyio
84
- async def test_too_much_data(self):
85
- # Too much data
86
- r = RateLimiter(incoming=True)
87
- tx_message = make_msg(ProtocolMessageTypes.respond_transaction, bytes([1] * 500 * 1024))
88
- for i in range(40):
89
- assert r.process_msg_and_check(tx_message, rl_v2, rl_v2) is None
90
-
91
- saw_disconnect = False
92
- for i in range(300):
93
- response = r.process_msg_and_check(tx_message, rl_v2, rl_v2)
94
- if response is not None:
95
- saw_disconnect = True
96
- assert saw_disconnect
97
-
98
- r = RateLimiter(incoming=True)
99
- block_message = make_msg(ProtocolMessageTypes.respond_unfinished_block, bytes([1] * 1024 * 1024))
100
- for i in range(10):
101
- assert r.process_msg_and_check(block_message, rl_v2, rl_v2) is None
102
-
103
- saw_disconnect = False
104
- for i in range(40):
105
- response = r.process_msg_and_check(block_message, rl_v2, rl_v2)
106
- if response is not None:
107
- saw_disconnect = True
108
- assert saw_disconnect
109
-
110
- @pytest.mark.anyio
111
- async def test_non_tx_aggregate_limits(self):
112
- # Frequency limits
113
- r = RateLimiter(incoming=True)
114
- message_1 = make_msg(ProtocolMessageTypes.coin_state_update, bytes([1] * 32))
115
- message_2 = make_msg(ProtocolMessageTypes.request_blocks, bytes([1] * 64))
116
- message_3 = make_msg(ProtocolMessageTypes.plot_sync_start, bytes([1] * 64))
117
-
118
- for i in range(500):
119
- assert r.process_msg_and_check(message_1, rl_v2, rl_v2) is None
120
-
121
- for i in range(500):
122
- assert r.process_msg_and_check(message_2, rl_v2, rl_v2) is None
123
-
124
- saw_disconnect = False
125
- for i in range(500):
126
- response = r.process_msg_and_check(message_3, rl_v2, rl_v2)
127
- if response is not None:
128
- saw_disconnect = True
129
- assert saw_disconnect
130
-
131
- # Size limits
132
- r = RateLimiter(incoming=True)
133
- message_4 = make_msg(ProtocolMessageTypes.respond_proof_of_weight, bytes([1] * 49 * 1024 * 1024))
134
- message_5 = make_msg(ProtocolMessageTypes.request_blocks, bytes([1] * 49 * 1024 * 1024))
135
-
136
- for i in range(2):
137
- assert r.process_msg_and_check(message_4, rl_v2, rl_v2) is None
138
-
139
- saw_disconnect = False
140
- for i in range(2):
141
- response = r.process_msg_and_check(message_5, rl_v2, rl_v2)
142
- if response is not None:
143
- saw_disconnect = True
144
- assert saw_disconnect
145
-
146
- @pytest.mark.anyio
147
- async def test_periodic_reset(self):
148
- r = RateLimiter(True, 5)
149
- tx_message = make_msg(ProtocolMessageTypes.respond_transaction, bytes([1] * 500 * 1024))
150
- for i in range(10):
151
- assert r.process_msg_and_check(tx_message, rl_v2, rl_v2) is None
152
-
153
- saw_disconnect = False
154
- for i in range(300):
155
- response = r.process_msg_and_check(tx_message, rl_v2, rl_v2)
156
- if response is not None:
157
- saw_disconnect = True
158
- assert saw_disconnect
159
- assert r.process_msg_and_check(tx_message, rl_v2, rl_v2) is not None
160
- await asyncio.sleep(6)
30
+ @dataclass
31
+ class SimClock:
32
+ current_time: float = 1000.0
33
+
34
+ def monotonic(self) -> float:
35
+ return self.current_time
36
+
37
+ def advance(self, duration: float) -> None:
38
+ self.current_time += duration
39
+
40
+
41
+ @pytest.mark.anyio
42
+ async def test_get_rate_limits_to_use() -> None:
43
+ assert get_rate_limits_to_use(rl_v2, rl_v2) != get_rate_limits_to_use(rl_v2, rl_v1)
44
+ assert get_rate_limits_to_use(rl_v2, rl_v2) != get_rate_limits_to_use(rl_v1, rl_v2)
45
+ assert get_rate_limits_to_use(rl_v1, rl_v1) == get_rate_limits_to_use(rl_v2, rl_v1)
46
+ assert get_rate_limits_to_use(rl_v1, rl_v1) == get_rate_limits_to_use(rl_v1, rl_v2)
47
+
48
+
49
+ # we want to exercise every possibly limit we may hit
50
+ # they are:
51
+ # * total number of messages / 60 seconds for non-transaction messages
52
+ # * total number of bytes / 60 seconds for non-transaction messages
53
+ # * number of messages / 60 seconds for "transaction" messages
54
+ # * number of bytes / 60 seconds for transaction messages
55
+
56
+
57
+ @pytest.mark.anyio
58
+ @boolean_datacases(name="incoming", true="incoming", false="outgoing")
59
+ @boolean_datacases(name="tx_msg", true="tx", false="non-tx")
60
+ @boolean_datacases(name="limit_size", true="size-limit", false="count-limit")
61
+ async def test_limits_v2(incoming: bool, tx_msg: bool, limit_size: bool, monkeypatch: pytest.MonkeyPatch) -> None:
62
+ # this test uses a single message type, and alters the rate limit settings
63
+ # for it to hit the different cases
64
+
65
+ count = 1000
66
+ message_data = b"\0" * 1024
67
+ msg_type = ProtocolMessageTypes.new_transaction
68
+
69
+ limits: dict[ProtocolMessageTypes, Union[RLSettings, Unlimited]]
70
+
71
+ if limit_size:
72
+ agg_limit = RLSettings(False, count * 2, len(message_data), count * len(message_data))
73
+ else:
74
+ agg_limit = RLSettings(False, count, len(message_data), count * 2 * len(message_data))
75
+
76
+ if limit_size:
77
+ limits = {msg_type: RLSettings(not tx_msg, count * 2, len(message_data), count * len(message_data))}
78
+ else:
79
+ limits = {msg_type: RLSettings(not tx_msg, count, len(message_data), count * 2 * len(message_data))}
80
+
81
+ def mock_get_limits(
82
+ our_capabilities: list[Capability], peer_capabilities: list[Capability]
83
+ ) -> tuple[dict[ProtocolMessageTypes, Union[RLSettings, Unlimited]], RLSettings]:
84
+ return limits, agg_limit
85
+
86
+ import chia.server.rate_limits
87
+
88
+ monkeypatch.setattr(chia.server.rate_limits, "get_rate_limits_to_use", mock_get_limits)
89
+
90
+ r = RateLimiter(incoming=incoming, get_time=lambda: 0)
91
+ msg = make_msg(msg_type, message_data)
92
+
93
+ for i in range(count):
94
+ assert r.process_msg_and_check(msg, rl_v2, rl_v2) is None
95
+
96
+ expected_msg = ""
97
+
98
+ if limit_size:
99
+ if not tx_msg:
100
+ expected_msg += "non-tx size:"
101
+ else:
102
+ expected_msg += "cumulative size:"
103
+ expected_msg += f" {(count + 1) * len(message_data)} > {count * len(message_data) * 1.0}"
104
+ else:
105
+ if not tx_msg:
106
+ expected_msg += "non-tx count:"
107
+ else:
108
+ expected_msg += "message count:"
109
+ expected_msg += f" {count + 1} > {count * 1.0}"
110
+ expected_msg += " (scale factor: 1.0)"
111
+
112
+ response = r.process_msg_and_check(msg, rl_v2, rl_v2)
113
+ assert response == expected_msg
114
+
115
+ for _ in range(10):
116
+ response = r.process_msg_and_check(msg, rl_v2, rl_v2)
117
+ # we can't stop incoming messages from arriving, counters keep
118
+ # increasing for incoming messages. For outgoing messages, we expect
119
+ # them not to be sent when hitting the rate limit, so those counters in
120
+ # the returned message stay the same
121
+ if incoming:
122
+ assert response is not None
123
+ else:
124
+ assert response == expected_msg
125
+
126
+
127
+ @pytest.mark.anyio
128
+ async def test_large_message() -> None:
129
+ # Large tx
130
+ small_tx_message = make_msg(ProtocolMessageTypes.respond_transaction, bytes([1] * 500 * 1024))
131
+ large_tx_message = make_msg(ProtocolMessageTypes.new_transaction, bytes([1] * 3 * 1024 * 1024))
132
+
133
+ r = RateLimiter(incoming=True, get_time=lambda: 0)
134
+ assert r.process_msg_and_check(small_tx_message, rl_v2, rl_v2) is None
135
+ assert r.process_msg_and_check(large_tx_message, rl_v2, rl_v2) is not None
136
+
137
+ small_vdf_message = make_msg(ProtocolMessageTypes.respond_signage_point, bytes([1] * 5 * 1024))
138
+ large_vdf_message = make_msg(ProtocolMessageTypes.respond_signage_point, bytes([1] * 600 * 1024))
139
+ large_blocks_message = make_msg(ProtocolMessageTypes.respond_blocks, bytes([1] * 51 * 1024 * 1024))
140
+ r = RateLimiter(incoming=True, get_time=lambda: 0)
141
+ assert r.process_msg_and_check(small_vdf_message, rl_v2, rl_v2) is None
142
+ assert r.process_msg_and_check(small_vdf_message, rl_v2, rl_v2) is None
143
+ assert r.process_msg_and_check(large_vdf_message, rl_v2, rl_v2) is not None
144
+ # this limit applies even though this message type is unlimited
145
+ assert r.process_msg_and_check(large_blocks_message, rl_v2, rl_v2) is not None
146
+
147
+
148
+ @pytest.mark.anyio
149
+ async def test_too_much_data() -> None:
150
+ # Too much data
151
+ r = RateLimiter(incoming=True, get_time=lambda: 0)
152
+ tx_message = make_msg(ProtocolMessageTypes.respond_transaction, bytes([1] * 500 * 1024))
153
+ for i in range(40):
154
+ assert r.process_msg_and_check(tx_message, rl_v2, rl_v2) is None
155
+
156
+ saw_disconnect = False
157
+ for i in range(300):
158
+ response = r.process_msg_and_check(tx_message, rl_v2, rl_v2)
159
+ if response is not None:
160
+ saw_disconnect = True
161
+ assert saw_disconnect
162
+
163
+ r = RateLimiter(incoming=True, get_time=lambda: 0)
164
+ block_message = make_msg(ProtocolMessageTypes.respond_unfinished_block, bytes([1] * 1024 * 1024))
165
+ for i in range(10):
166
+ assert r.process_msg_and_check(block_message, rl_v2, rl_v2) is None
167
+
168
+ saw_disconnect = False
169
+ for i in range(40):
170
+ response = r.process_msg_and_check(block_message, rl_v2, rl_v2)
171
+ if response is not None:
172
+ saw_disconnect = True
173
+ assert saw_disconnect
174
+
175
+
176
+ @pytest.mark.anyio
177
+ async def test_non_tx_aggregate_limits() -> None:
178
+ # Frequency limits
179
+ r = RateLimiter(incoming=True, get_time=lambda: 0)
180
+ message_1 = make_msg(ProtocolMessageTypes.coin_state_update, bytes([1] * 32))
181
+ message_2 = make_msg(ProtocolMessageTypes.request_blocks, bytes([1] * 64))
182
+ message_3 = make_msg(ProtocolMessageTypes.plot_sync_start, bytes([1] * 64))
183
+
184
+ for i in range(500):
185
+ assert r.process_msg_and_check(message_1, rl_v2, rl_v2) is None
186
+
187
+ for i in range(500):
188
+ assert r.process_msg_and_check(message_2, rl_v2, rl_v2) is None
189
+
190
+ saw_disconnect = False
191
+ for i in range(500):
192
+ response = r.process_msg_and_check(message_3, rl_v2, rl_v2)
193
+ if response is not None:
194
+ saw_disconnect = True
195
+ assert saw_disconnect
196
+
197
+ # Size limits
198
+ r = RateLimiter(incoming=True, get_time=lambda: 0)
199
+ message_4 = make_msg(ProtocolMessageTypes.respond_proof_of_weight, bytes([1] * 49 * 1024 * 1024))
200
+ message_5 = make_msg(ProtocolMessageTypes.request_blocks, bytes([1] * 49 * 1024 * 1024))
201
+
202
+ for i in range(2):
203
+ assert r.process_msg_and_check(message_4, rl_v2, rl_v2) is None
204
+
205
+ saw_disconnect = False
206
+ for i in range(2):
207
+ response = r.process_msg_and_check(message_5, rl_v2, rl_v2)
208
+ if response is not None:
209
+ saw_disconnect = True
210
+ assert saw_disconnect
211
+
212
+
213
+ @pytest.mark.anyio
214
+ async def test_periodic_reset() -> None:
215
+ timer = SimClock()
216
+ r = RateLimiter(True, 5, get_time=timer.monotonic)
217
+ tx_message = make_msg(ProtocolMessageTypes.respond_transaction, bytes([1] * 500 * 1024))
218
+ for i in range(10):
161
219
  assert r.process_msg_and_check(tx_message, rl_v2, rl_v2) is None
162
220
 
163
- # Counts reset also
164
- r = RateLimiter(True, 5)
165
- new_tx_message = make_msg(ProtocolMessageTypes.new_transaction, bytes([1] * 40))
166
- for i in range(4999):
167
- assert r.process_msg_and_check(new_tx_message, rl_v2, rl_v2) is None
168
-
169
- saw_disconnect = False
170
- for i in range(4999):
171
- response = r.process_msg_and_check(new_tx_message, rl_v2, rl_v2)
172
- if response is not None:
173
- saw_disconnect = True
174
- assert saw_disconnect
175
- await asyncio.sleep(6)
221
+ saw_disconnect = False
222
+ for i in range(300):
223
+ response = r.process_msg_and_check(tx_message, rl_v2, rl_v2)
224
+ if response is not None:
225
+ saw_disconnect = True
226
+ assert saw_disconnect
227
+ assert r.process_msg_and_check(tx_message, rl_v2, rl_v2) is not None
228
+ timer.advance(6)
229
+ assert r.process_msg_and_check(tx_message, rl_v2, rl_v2) is None
230
+
231
+ # Counts reset also
232
+ r = RateLimiter(True, 5, get_time=timer.monotonic)
233
+ new_tx_message = make_msg(ProtocolMessageTypes.new_transaction, bytes([1] * 40))
234
+ for i in range(4999):
176
235
  assert r.process_msg_and_check(new_tx_message, rl_v2, rl_v2) is None
177
236
 
178
- @pytest.mark.anyio
179
- async def test_percentage_limits(self):
180
- r = RateLimiter(True, 60, 40)
181
- new_peak_message = make_msg(ProtocolMessageTypes.new_peak, bytes([1] * 40))
182
- for i in range(50):
183
- assert r.process_msg_and_check(new_peak_message, rl_v2, rl_v2) is None
184
-
185
- saw_disconnect = False
186
- for i in range(50):
187
- response = r.process_msg_and_check(new_peak_message, rl_v2, rl_v2)
188
- if response is not None:
189
- saw_disconnect = True
190
- assert saw_disconnect
191
-
192
- r = RateLimiter(True, 60, 40)
193
- block_message = make_msg(ProtocolMessageTypes.respond_unfinished_block, bytes([1] * 1024 * 1024))
194
- for i in range(5):
195
- assert r.process_msg_and_check(block_message, rl_v2, rl_v2) is None
196
-
197
- saw_disconnect = False
198
- for i in range(5):
199
- response = r.process_msg_and_check(block_message, rl_v2, rl_v2)
200
- if response is not None:
201
- saw_disconnect = True
202
- assert saw_disconnect
203
-
204
- # Aggregate percentage limit count
205
- r = RateLimiter(True, 60, 40)
206
- message_1 = make_msg(ProtocolMessageTypes.coin_state_update, bytes([1] * 5))
207
- message_2 = make_msg(ProtocolMessageTypes.request_blocks, bytes([1] * 32))
208
- message_3 = make_msg(ProtocolMessageTypes.plot_sync_start, bytes([1] * 32))
209
-
210
- for i in range(180):
211
- assert r.process_msg_and_check(message_1, rl_v2, rl_v2) is None
212
- for i in range(180):
213
- assert r.process_msg_and_check(message_2, rl_v2, rl_v2) is None
214
-
215
- saw_disconnect = False
216
- for i in range(100):
217
- response = r.process_msg_and_check(message_3, rl_v2, rl_v2)
218
- if response is not None:
219
- saw_disconnect = True
220
- assert saw_disconnect
221
-
222
- # Aggregate percentage limit max total size
223
- r = RateLimiter(True, 60, 40)
224
- message_4 = make_msg(ProtocolMessageTypes.respond_proof_of_weight, bytes([1] * 18 * 1024 * 1024))
225
- message_5 = make_msg(ProtocolMessageTypes.respond_unfinished_block, bytes([1] * 24 * 1024 * 1024))
226
-
227
- for i in range(2):
228
- assert r.process_msg_and_check(message_4, rl_v2, rl_v2) is None
229
-
230
- saw_disconnect = False
231
- for i in range(2):
232
- response = r.process_msg_and_check(message_5, rl_v2, rl_v2)
233
- if response is not None:
234
- saw_disconnect = True
235
- assert saw_disconnect
236
-
237
- @pytest.mark.anyio
238
- async def test_too_many_outgoing_messages(self):
239
- # Too many messages
240
- r = RateLimiter(incoming=False)
241
- new_peers_message = make_msg(ProtocolMessageTypes.respond_peers, bytes([1]))
242
- non_tx_freq = get_rate_limits_to_use(rl_v2, rl_v2)["non_tx_freq"]
243
-
244
- passed = 0
245
- blocked = 0
246
- for i in range(non_tx_freq):
247
- if r.process_msg_and_check(new_peers_message, rl_v2, rl_v2) is None:
248
- passed += 1
249
- else:
250
- blocked += 1
251
-
252
- assert passed == 10
253
- assert blocked == non_tx_freq - passed
254
-
255
- # ensure that *another* message type is not blocked because of this
256
-
257
- new_signatures_message = make_msg(ProtocolMessageTypes.respond_signatures, bytes([1]))
258
- assert r.process_msg_and_check(new_signatures_message, rl_v2, rl_v2) is None
259
-
260
- @pytest.mark.anyio
261
- async def test_too_many_incoming_messages(self):
262
- # Too many messages
263
- r = RateLimiter(incoming=True)
264
- new_peers_message = make_msg(ProtocolMessageTypes.respond_peers, bytes([1]))
265
- non_tx_freq = get_rate_limits_to_use(rl_v2, rl_v2)["non_tx_freq"]
266
-
267
- passed = 0
268
- blocked = 0
269
- for i in range(non_tx_freq):
270
- if r.process_msg_and_check(new_peers_message, rl_v2, rl_v2) is None:
271
- passed += 1
272
- else:
273
- blocked += 1
274
-
275
- assert passed == 10
276
- assert blocked == non_tx_freq - passed
277
-
278
- # ensure that other message types *are* blocked because of this
279
-
280
- new_signatures_message = make_msg(ProtocolMessageTypes.respond_signatures, bytes([1]))
281
- assert r.process_msg_and_check(new_signatures_message, rl_v2, rl_v2) is not None
282
-
283
- @pytest.mark.parametrize(
284
- "node_with_params",
285
- [
286
- pytest.param(
287
- dict(
288
- disable_capabilities=[Capability.BLOCK_HEADERS, Capability.RATE_LIMITS_V2],
289
- ),
290
- id="V1",
237
+ saw_disconnect = False
238
+ for i in range(4999):
239
+ response = r.process_msg_and_check(new_tx_message, rl_v2, rl_v2)
240
+ if response is not None:
241
+ saw_disconnect = True
242
+ assert saw_disconnect
243
+ timer.advance(6)
244
+ assert r.process_msg_and_check(new_tx_message, rl_v2, rl_v2) is None
245
+
246
+
247
+ @pytest.mark.anyio
248
+ async def test_percentage_limits() -> None:
249
+ r = RateLimiter(True, 60, 40, get_time=lambda: 0)
250
+ new_peak_message = make_msg(ProtocolMessageTypes.new_peak, bytes([1] * 40))
251
+ for i in range(50):
252
+ assert r.process_msg_and_check(new_peak_message, rl_v2, rl_v2) is None
253
+
254
+ saw_disconnect = False
255
+ for i in range(50):
256
+ response = r.process_msg_and_check(new_peak_message, rl_v2, rl_v2)
257
+ if response is not None:
258
+ saw_disconnect = True
259
+ assert saw_disconnect
260
+
261
+ r = RateLimiter(True, 60, 40, get_time=lambda: 0)
262
+ block_message = make_msg(ProtocolMessageTypes.respond_unfinished_block, bytes([1] * 1024 * 1024))
263
+ for i in range(5):
264
+ assert r.process_msg_and_check(block_message, rl_v2, rl_v2) is None
265
+
266
+ saw_disconnect = False
267
+ for i in range(5):
268
+ response = r.process_msg_and_check(block_message, rl_v2, rl_v2)
269
+ if response is not None:
270
+ saw_disconnect = True
271
+ assert saw_disconnect
272
+
273
+ # Aggregate percentage limit count
274
+ r = RateLimiter(True, 60, 40, get_time=lambda: 0)
275
+ message_1 = make_msg(ProtocolMessageTypes.coin_state_update, bytes([1] * 5))
276
+ message_2 = make_msg(ProtocolMessageTypes.request_blocks, bytes([1] * 32))
277
+ message_3 = make_msg(ProtocolMessageTypes.plot_sync_start, bytes([1] * 32))
278
+
279
+ for i in range(180):
280
+ assert r.process_msg_and_check(message_1, rl_v2, rl_v2) is None
281
+ for i in range(180):
282
+ assert r.process_msg_and_check(message_2, rl_v2, rl_v2) is None
283
+
284
+ saw_disconnect = False
285
+ for i in range(100):
286
+ response = r.process_msg_and_check(message_3, rl_v2, rl_v2)
287
+ if response is not None:
288
+ saw_disconnect = True
289
+ assert saw_disconnect
290
+
291
+ # Aggregate percentage limit max total size
292
+ r = RateLimiter(True, 60, 40, get_time=lambda: 0)
293
+ message_4 = make_msg(ProtocolMessageTypes.respond_proof_of_weight, bytes([1] * 18 * 1024 * 1024))
294
+ message_5 = make_msg(ProtocolMessageTypes.respond_unfinished_block, bytes([1] * 24 * 1024 * 1024))
295
+
296
+ for i in range(2):
297
+ assert r.process_msg_and_check(message_4, rl_v2, rl_v2) is None
298
+
299
+ saw_disconnect = False
300
+ for i in range(2):
301
+ response = r.process_msg_and_check(message_5, rl_v2, rl_v2)
302
+ if response is not None:
303
+ saw_disconnect = True
304
+ assert saw_disconnect
305
+
306
+
307
+ @pytest.mark.anyio
308
+ async def test_too_many_outgoing_messages() -> None:
309
+ # Too many messages
310
+ r = RateLimiter(incoming=False, get_time=lambda: 0)
311
+ new_peers_message = make_msg(ProtocolMessageTypes.respond_peers, bytes([1]))
312
+ _, agg_limit = get_rate_limits_to_use(rl_v2, rl_v2)
313
+
314
+ passed = 0
315
+ blocked = 0
316
+ for i in range(agg_limit.frequency):
317
+ if r.process_msg_and_check(new_peers_message, rl_v2, rl_v2) is None:
318
+ passed += 1
319
+ else:
320
+ blocked += 1
321
+
322
+ assert passed == 10
323
+ assert blocked == agg_limit.frequency - passed
324
+
325
+ # ensure that *another* message type is not blocked because of this
326
+
327
+ new_signatures_message = make_msg(ProtocolMessageTypes.respond_signatures, bytes([1]))
328
+ assert r.process_msg_and_check(new_signatures_message, rl_v2, rl_v2) is None
329
+
330
+
331
+ @pytest.mark.anyio
332
+ async def test_too_many_incoming_messages() -> None:
333
+ # Too many messages
334
+ r = RateLimiter(incoming=True, get_time=lambda: 0)
335
+ new_peers_message = make_msg(ProtocolMessageTypes.respond_peers, bytes([1]))
336
+ _, agg_limit = get_rate_limits_to_use(rl_v2, rl_v2)
337
+
338
+ passed = 0
339
+ blocked = 0
340
+ for i in range(agg_limit.frequency):
341
+ if r.process_msg_and_check(new_peers_message, rl_v2, rl_v2) is None:
342
+ passed += 1
343
+ else:
344
+ blocked += 1
345
+
346
+ assert passed == 10
347
+ assert blocked == agg_limit.frequency - passed
348
+
349
+ # ensure that other message types *are* blocked because of this
350
+
351
+ new_signatures_message = make_msg(ProtocolMessageTypes.respond_signatures, bytes([1]))
352
+ assert r.process_msg_and_check(new_signatures_message, rl_v2, rl_v2) is not None
353
+
354
+
355
+ @pytest.mark.parametrize(
356
+ "node_with_params",
357
+ [
358
+ pytest.param(
359
+ dict(
360
+ disable_capabilities=[Capability.BLOCK_HEADERS, Capability.RATE_LIMITS_V2],
291
361
  ),
292
- pytest.param(
293
- dict(
294
- disable_capabilities=[],
295
- ),
296
- id="V2",
362
+ id="V1",
363
+ ),
364
+ pytest.param(
365
+ dict(
366
+ disable_capabilities=[],
297
367
  ),
298
- ],
299
- indirect=True,
300
- )
301
- @pytest.mark.parametrize(
302
- "node_with_params_b",
303
- [
304
- pytest.param(
305
- dict(
306
- disable_capabilities=[Capability.BLOCK_HEADERS, Capability.RATE_LIMITS_V2],
307
- ),
308
- id="V1",
368
+ id="V2",
369
+ ),
370
+ ],
371
+ indirect=True,
372
+ )
373
+ @pytest.mark.parametrize(
374
+ "node_with_params_b",
375
+ [
376
+ pytest.param(
377
+ dict(
378
+ disable_capabilities=[Capability.BLOCK_HEADERS, Capability.RATE_LIMITS_V2],
309
379
  ),
310
- pytest.param(
311
- dict(
312
- disable_capabilities=[],
313
- ),
314
- id="V2",
380
+ id="V1",
381
+ ),
382
+ pytest.param(
383
+ dict(
384
+ disable_capabilities=[],
315
385
  ),
316
- ],
317
- indirect=True,
386
+ id="V2",
387
+ ),
388
+ ],
389
+ indirect=True,
390
+ )
391
+ @pytest.mark.anyio
392
+ @pytest.mark.limit_consensus_modes(reason="save time")
393
+ async def test_different_versions(
394
+ node_with_params: FullNodeSimulator, node_with_params_b: FullNodeSimulator, self_hostname: str
395
+ ) -> None:
396
+ node_a = node_with_params
397
+ node_b = node_with_params_b
398
+
399
+ full_node_server_a: ChiaServer = node_a.full_node.server
400
+ full_node_server_b: ChiaServer = node_b.full_node.server
401
+
402
+ await full_node_server_b.start_client(PeerInfo(self_hostname, full_node_server_a.get_port()), None)
403
+
404
+ assert len(full_node_server_b.get_connections()) == 1
405
+ assert len(full_node_server_a.get_connections()) == 1
406
+
407
+ a_con: WSChiaConnection = full_node_server_a.get_connections()[0]
408
+ b_con: WSChiaConnection = full_node_server_b.get_connections()[0]
409
+
410
+ print(a_con.local_capabilities, a_con.peer_capabilities)
411
+ print(b_con.local_capabilities, b_con.peer_capabilities)
412
+
413
+ # The two nodes will use the same rate limits even if their versions are different
414
+ assert get_rate_limits_to_use(a_con.local_capabilities, a_con.peer_capabilities) == get_rate_limits_to_use(
415
+ b_con.local_capabilities, b_con.peer_capabilities
318
416
  )
319
- @pytest.mark.anyio
320
- @pytest.mark.limit_consensus_modes(reason="save time")
321
- async def test_different_versions(self, node_with_params, node_with_params_b, self_hostname):
322
- node_a = node_with_params
323
- node_b = node_with_params_b
324
-
325
- full_node_server_a: ChiaServer = node_a.full_node.server
326
- full_node_server_b: ChiaServer = node_b.full_node.server
327
-
328
- await full_node_server_b.start_client(PeerInfo(self_hostname, full_node_server_a.get_port()), None)
329
-
330
- assert len(full_node_server_b.get_connections()) == 1
331
- assert len(full_node_server_a.get_connections()) == 1
332
-
333
- a_con: WSChiaConnection = full_node_server_a.get_connections()[0]
334
- b_con: WSChiaConnection = full_node_server_b.get_connections()[0]
335
-
336
- print(a_con.local_capabilities, a_con.peer_capabilities)
337
- print(b_con.local_capabilities, b_con.peer_capabilities)
338
-
339
- # The two nodes will use the same rate limits even if their versions are different
340
- assert get_rate_limits_to_use(a_con.local_capabilities, a_con.peer_capabilities) == get_rate_limits_to_use(
341
- b_con.local_capabilities, b_con.peer_capabilities
342
- )
343
-
344
- # The following code checks whether all of the runs resulted in the same number of items in "rate_limits_tx",
345
- # which would mean the same rate limits are always used. This should not happen, since two nodes with V2
346
- # will use V2.
347
- total_tx_msg_count = len(
348
- get_rate_limits_to_use(a_con.local_capabilities, a_con.peer_capabilities)["rate_limits_tx"]
349
- )
350
-
351
- test_different_versions_results.append(total_tx_msg_count)
352
- if len(test_different_versions_results) >= 4:
353
- assert len(set(test_different_versions_results)) >= 2
354
-
355
- @pytest.mark.anyio
356
- async def test_compose(self):
357
- rl_1 = rl_numbers[1]
358
- rl_2 = rl_numbers[2]
359
- assert ProtocolMessageTypes.respond_children in rl_1["rate_limits_other"]
360
- assert ProtocolMessageTypes.respond_children not in rl_1["rate_limits_tx"]
361
- assert ProtocolMessageTypes.respond_children not in rl_2["rate_limits_other"]
362
- assert ProtocolMessageTypes.respond_children in rl_2["rate_limits_tx"]
363
-
364
- assert ProtocolMessageTypes.request_block in rl_1["rate_limits_other"]
365
- assert ProtocolMessageTypes.request_block not in rl_1["rate_limits_tx"]
366
- assert ProtocolMessageTypes.request_block not in rl_2["rate_limits_other"]
367
- assert ProtocolMessageTypes.request_block not in rl_2["rate_limits_tx"]
368
-
369
- comps = compose_rate_limits(rl_1, rl_2)
370
- # v2 limits are used if present
371
- assert ProtocolMessageTypes.respond_children not in comps["rate_limits_other"]
372
- assert ProtocolMessageTypes.respond_children in comps["rate_limits_tx"]
373
-
374
- # Otherwise, fall back to v1
375
- assert ProtocolMessageTypes.request_block in rl_1["rate_limits_other"]
376
- assert ProtocolMessageTypes.request_block not in rl_1["rate_limits_tx"]
417
+
418
+ # The following code checks whether all of the runs resulted in the same number of items in "rate_limits_tx",
419
+ # which would mean the same rate limits are always used. This should not happen, since two nodes with V2
420
+ # will use V2.
421
+ total_tx_msg_count = len(get_rate_limits_to_use(a_con.local_capabilities, a_con.peer_capabilities))
422
+
423
+ test_different_versions_results.append(total_tx_msg_count)
424
+ if len(test_different_versions_results) >= 4:
425
+ assert len(set(test_different_versions_results)) >= 2
377
426
 
378
427
 
379
428
  @pytest.mark.anyio
@@ -386,8 +435,8 @@ class TestRateLimits:
386
435
  (ProtocolMessageTypes.reject_block, 90),
387
436
  ],
388
437
  )
389
- async def test_unlimited(msg_type: ProtocolMessageTypes, size: int):
390
- r = RateLimiter(incoming=False)
438
+ async def test_unlimited(msg_type: ProtocolMessageTypes, size: int) -> None:
439
+ r = RateLimiter(incoming=False, get_time=lambda: 0)
391
440
 
392
441
  message = make_msg(msg_type, bytes([1] * size))
393
442
 
@@ -443,8 +492,12 @@ async def test_unlimited(msg_type: ProtocolMessageTypes, size: int):
443
492
  indirect=True,
444
493
  )
445
494
  async def test_unsolicited_responses(
446
- node_with_params, node_with_params_b, self_hostname: str, msg_type: ProtocolMessageTypes, bt: BlockTools
447
- ):
495
+ node_with_params: FullNodeSimulator,
496
+ node_with_params_b: FullNodeSimulator,
497
+ self_hostname: str,
498
+ msg_type: ProtocolMessageTypes,
499
+ bt: BlockTools,
500
+ ) -> None:
448
501
  node_a = node_with_params
449
502
  node_b = node_with_params_b
450
503