ypricemagic 4.6.20.dev0__tar.gz → 4.6.22.dev0__tar.gz

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 (192) hide show
  1. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/.github/workflows/mypy.yaml +1 -1
  2. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/.github/workflows/pytest.yaml +1 -1
  3. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/.github/workflows/release.yaml +1 -17
  4. {ypricemagic-4.6.20.dev0/ypricemagic.egg-info → ypricemagic-4.6.22.dev0}/PKG-INFO +2 -2
  5. ypricemagic-4.6.22.dev0/pyproject.toml +14 -0
  6. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/requirements.txt +2 -0
  7. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/setup.py +3 -4
  8. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/brownie.py +65 -28
  9. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/common.py +1 -1
  10. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/monkey_patches.py +2 -2
  11. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/uniswap/v3.py +9 -11
  12. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/stable_swap/curve.py +1 -1
  13. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/synthetix.py +9 -11
  14. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/cache.py +1 -1
  15. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/events.py +2 -3
  16. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/logging.py +1 -1
  17. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/multicall.py +1 -1
  18. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0/ypricemagic.egg-info}/PKG-INFO +2 -2
  19. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/ypricemagic.egg-info/requires.txt +2 -0
  20. ypricemagic-4.6.22.dev0/ypricemagic.egg-info/top_level.txt +3 -0
  21. ypricemagic-4.6.20.dev0/pyproject.toml +0 -5
  22. ypricemagic-4.6.20.dev0/ypricemagic.egg-info/top_level.txt +0 -3
  23. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/.env.sample +0 -0
  24. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/.github/workflows/black.yaml +0 -0
  25. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/.github/workflows/codeql-analysis.yml +0 -0
  26. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/.github/workflows/compile.yaml +0 -0
  27. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/.github/workflows/deploy-docs.yml +0 -0
  28. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/.gitignore +0 -0
  29. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/CONTRIBUTING.md +0 -0
  30. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/FUNDING.json +0 -0
  31. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/LICENSE.txt +0 -0
  32. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/Makefile +0 -0
  33. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/README.md +0 -0
  34. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/brownie-config.yaml +0 -0
  35. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/Makefile +0 -0
  36. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/_build/html/_static/alabaster.css +0 -0
  37. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/_build/html/_static/basic.css +0 -0
  38. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/_build/html/_static/custom.css +0 -0
  39. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/_build/html/_static/doctools.js +0 -0
  40. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/_build/html/_static/documentation_options.js +0 -0
  41. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/_build/html/_static/file.png +0 -0
  42. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/_build/html/_static/language_data.js +0 -0
  43. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/_build/html/_static/minus.png +0 -0
  44. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/_build/html/_static/plus.png +0 -0
  45. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/_build/html/_static/pygments.css +0 -0
  46. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/_build/html/_static/searchtools.js +0 -0
  47. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/_build/html/_static/sphinx_highlight.js +0 -0
  48. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/caching.rst +0 -0
  49. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/cli.rst +0 -0
  50. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/conf.py +0 -0
  51. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/environment.rst +0 -0
  52. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/index.rst +0 -0
  53. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/docs/make.bat +0 -0
  54. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/requirements-dev.txt +0 -0
  55. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/scripts/debug-curve.py +0 -0
  56. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/scripts/debug-price.py +0 -0
  57. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/setup.cfg +0 -0
  58. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/__init__.py +0 -0
  59. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/classes/test_erc20.py +0 -0
  60. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/classes/test_singleton.py +0 -0
  61. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/conftest.py +0 -0
  62. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/fixtures.py +0 -0
  63. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/__init__.py +0 -0
  64. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/dex/__init__.py +0 -0
  65. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/dex/test_balancer.py +0 -0
  66. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/dex/test_uniswap.py +0 -0
  67. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/dex/test_velodrome.py +0 -0
  68. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/lending/__init__.py +0 -0
  69. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/lending/test_aave.py +0 -0
  70. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/lending/test_compound.py +0 -0
  71. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/stable_swap/test_curve.py +0 -0
  72. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/test_chainlink.py +0 -0
  73. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/test_gearbox.py +0 -0
  74. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/test_magic.py +0 -0
  75. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/test_popsicle.py +0 -0
  76. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/test_synthetix.py +0 -0
  77. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/test_yearn.py +0 -0
  78. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/tokenized_fund/test_piedao.py +0 -0
  79. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/prices/utils/test_buckets.py +0 -0
  80. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/tests/test_constants.py +0 -0
  81. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/ENVIRONMENT_VARIABLES.py +0 -0
  82. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/__init__.py +0 -0
  83. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/__init__.py +0 -0
  84. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/config.py +0 -0
  85. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/decorators.py +0 -0
  86. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/entities.py +0 -0
  87. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/exceptions.py +0 -0
  88. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/log.py +0 -0
  89. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/structs.py +0 -0
  90. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/utils/__init__.py +0 -0
  91. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/utils/_ep.py +0 -0
  92. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/utils/bulk.py +0 -0
  93. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/utils/contract.py +0 -0
  94. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/utils/logs.py +0 -0
  95. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/utils/price.py +0 -0
  96. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/utils/stringify.py +0 -0
  97. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/utils/token.py +0 -0
  98. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/utils/traces.py +0 -0
  99. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_db/utils/utils.py +0 -0
  100. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/_decorators.py +0 -0
  101. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/classes/__init__.py +0 -0
  102. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/classes/_abc.py +0 -0
  103. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/classes/common.py +0 -0
  104. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/classes/singleton.py +0 -0
  105. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/cli.py +0 -0
  106. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/constants.py +0 -0
  107. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/contracts.py +0 -0
  108. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/convert.py +0 -0
  109. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/datatypes.py +0 -0
  110. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/exceptions.py +0 -0
  111. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/ERC20.py +0 -0
  112. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/__init__.py +0 -0
  113. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/balancer/WeightedPool.py +0 -0
  114. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/balancer/__init__.py +0 -0
  115. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/compound/__init__.py +0 -0
  116. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/compound/unitroller.py +0 -0
  117. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/curve/CurveRegistry.py +0 -0
  118. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/curve/__init__.py +0 -0
  119. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/multicall2.py +0 -0
  120. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/uniswap/__init__.py +0 -0
  121. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/uniswap/factoryv2.py +0 -0
  122. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/uniswap/quoterv3.py +0 -0
  123. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/interfaces/uniswap/velov2.py +0 -0
  124. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/networks.py +0 -0
  125. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/__init__.py +0 -0
  126. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/band.py +0 -0
  127. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/chainlink.py +0 -0
  128. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/convex.py +0 -0
  129. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/__init__.py +0 -0
  130. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/balancer/__init__.py +0 -0
  131. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/balancer/_abc.py +0 -0
  132. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/balancer/balancer.py +0 -0
  133. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/balancer/v1.py +0 -0
  134. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/balancer/v2.py +0 -0
  135. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/genericamm.py +0 -0
  136. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/mooniswap.py +0 -0
  137. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/solidly.py +0 -0
  138. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/uniswap/__init__.py +0 -0
  139. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/uniswap/uniswap.py +0 -0
  140. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/uniswap/v1.py +0 -0
  141. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/uniswap/v2.py +0 -0
  142. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/uniswap/v2_forks.py +0 -0
  143. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/dex/velodrome.py +0 -0
  144. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/eth_derivs/__init__.py +0 -0
  145. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/eth_derivs/creth.py +0 -0
  146. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/eth_derivs/wsteth.py +0 -0
  147. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/gearbox.py +0 -0
  148. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/lending/__init__.py +0 -0
  149. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/lending/aave.py +0 -0
  150. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/lending/compound.py +0 -0
  151. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/lending/ib.py +0 -0
  152. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/magic.py +0 -0
  153. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/one_to_one.py +0 -0
  154. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/pendle.py +0 -0
  155. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/popsicle.py +0 -0
  156. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/rkp3r.py +0 -0
  157. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/solidex.py +0 -0
  158. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/stable_swap/__init__.py +0 -0
  159. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/stable_swap/belt.py +0 -0
  160. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/stable_swap/ellipsis.py +0 -0
  161. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/stable_swap/froyo.py +0 -0
  162. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/stable_swap/mstablefeederpool.py +0 -0
  163. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/stable_swap/saddle.py +0 -0
  164. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/tokenized_fund/__init__.py +0 -0
  165. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/tokenized_fund/basketdao.py +0 -0
  166. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/tokenized_fund/gelato.py +0 -0
  167. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/tokenized_fund/piedao.py +0 -0
  168. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/tokenized_fund/reserve.py +0 -0
  169. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/tokenized_fund/tokensets.py +0 -0
  170. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/utils/__init__.py +0 -0
  171. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/utils/buckets.py +0 -0
  172. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/utils/debug.py +0 -0
  173. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/utils/sense_check.py +0 -0
  174. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/utils/ypriceapi.py +0 -0
  175. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/prices/yearn.py +0 -0
  176. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/py.typed +0 -0
  177. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/time.py +0 -0
  178. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/__init__.py +0 -0
  179. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/_erc20.py +0 -0
  180. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/checks.py +0 -0
  181. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/client.py +0 -0
  182. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/dank_mids.py +0 -0
  183. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/fakes.py +0 -0
  184. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/gather.py +0 -0
  185. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/middleware.py +0 -0
  186. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/y/utils/raw_calls.py +0 -0
  187. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/ypricemagic/__init__.py +0 -0
  188. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/ypricemagic/magic.py +0 -0
  189. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/ypricemagic.egg-info/SOURCES.txt +0 -0
  190. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/ypricemagic.egg-info/dependency_links.txt +0 -0
  191. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/ypricemagic.egg-info/entry_points.txt +0 -0
  192. {ypricemagic-4.6.20.dev0 → ypricemagic-4.6.22.dev0}/ypricemagic.egg-info/not-zip-safe +0 -0
@@ -16,7 +16,7 @@ jobs:
16
16
  fail-fast: false
17
17
  matrix:
18
18
  os: [ ubuntu-latest, macos-latest, windows-latest ]
19
- pyversion: [ "3.9", "3.10", "3.11", "3.12" ]
19
+ pyversion: [ "3.10", "3.11", "3.12" ]
20
20
 
21
21
  steps:
22
22
  - uses: actions/checkout@v2
@@ -20,7 +20,7 @@ jobs:
20
20
  fail-fast: false
21
21
  matrix:
22
22
  os: [ ubuntu-latest, macos-latest, windows-latest ]
23
- pyversion: [ "3.9", "3.10" ]
23
+ pyversion: [ "3.10", "3.11", "3.12" ]
24
24
  network: [ mainnet, bsc-main, polygon-main, ftm-main, arbitrum-main, optimism-main ]
25
25
  include:
26
26
  - os: ubuntu-latest
@@ -41,15 +41,6 @@ jobs:
41
41
  cibw_archs_linux: x86_64
42
42
  artifact_name: "wheels-ubuntu-latest-musllinux-x64"
43
43
 
44
- # ----------------------------------------------------
45
- # musllinux 32-bit
46
- # ----------------------------------------------------
47
- - os: ubuntu-latest
48
- build_type: musllinux-x86
49
- cibw_build: "*musllinux*"
50
- cibw_archs_linux: i686
51
- artifact_name: "wheels-ubuntu-latest-musllinux-x86"
52
-
53
44
  # ----------------------------------------------------
54
45
  # macOS (64-bit only)
55
46
  # ----------------------------------------------------
@@ -129,7 +120,7 @@ jobs:
129
120
  - name: Install dependencies
130
121
  run: |
131
122
  python -m pip install --upgrade pip
132
- pip install setuptools wheel twine mypy[mypyc]
123
+ pip install setuptools wheel twine mypy[mypyc] types-cachetools types-python-dateutil types-requests
133
124
 
134
125
  - name: Build sdist
135
126
  run: |
@@ -156,12 +147,6 @@ jobs:
156
147
  name: "wheels-ubuntu-latest-musllinux-x64"
157
148
  path: wheelhouse/linux-musl-x64
158
149
 
159
- - name: Download musllinux 32-bit wheels
160
- uses: actions/download-artifact@v4
161
- with:
162
- name: "wheels-ubuntu-latest-musllinux-x86"
163
- path: wheelhouse/linux-musl-x86
164
-
165
150
  - name: Download macOS wheels
166
151
  uses: actions/download-artifact@v4
167
152
  with:
@@ -193,7 +178,6 @@ jobs:
193
178
  wheelhouse/linux-many-x64/*.whl \
194
179
  wheelhouse/linux-many-x86/*.whl \
195
180
  wheelhouse/linux-musl-x64/*.whl \
196
- wheelhouse/linux-musl-x86/*.whl \
197
181
  wheelhouse/macos/*.whl \
198
182
  wheelhouse/windows-x64/*.whl \
199
183
  wheelhouse/windows-x86/*.whl
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ypricemagic
3
- Version: 4.6.20.dev0
3
+ Version: 4.6.22.dev0
4
4
  Summary: Use this tool to extract historical on-chain price data from an archive node. Shoutout to @bantg and @nymmrx for their awesome work on yearn-exporter that made this library possible.
5
5
  Home-page: https://github.com/BobTheBuidler/ypricemagic
6
6
  Author: BobTheBuidler
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: Implementation :: CPython
16
16
  Classifier: Operating System :: OS Independent
17
17
  Classifier: Topic :: Software Development :: Libraries
18
- Requires-Python: >=3.9,<3.13
18
+ Requires-Python: >=3.10,<3.13
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE.txt
21
21
 
@@ -0,0 +1,14 @@
1
+ [build-system]
2
+ requires = [
3
+ "setuptools",
4
+ "wheel",
5
+ "mypy[mypyc]==1.17.0",
6
+ "types-python-dateutil",
7
+ "types-cachetools",
8
+ "types-requests",
9
+ "faster-eth-abi>=5.2.1,<6",
10
+ "eth-typing==4.4.0",
11
+ ]
12
+
13
+ [tool.black]
14
+ line-length = 100
@@ -4,9 +4,11 @@ cchecksum>=0.0.3
4
4
  checksum_dict>=2.1.10.dev0,<3
5
5
  dank_mids>=4.20.161
6
6
  eth-brownie>=1.21.0,<1.23
7
+ eth-event>=1.4.0
7
8
  eth_retry>=0.2.1
8
9
  evmspec>=0.3.4
9
10
  ez-a-sync>=0.32.18,<1
11
+ faster-eth-abi>=5.2.1,<6
10
12
  faster-eth-utils
11
13
  inflection>=0.1,<0.6
12
14
  joblib>=1.0.1
@@ -12,9 +12,10 @@ try:
12
12
 
13
13
  ext_modules = mypycify(
14
14
  [
15
+ "y/_db/brownie.py",
16
+ "y/_db/config.py",
15
17
  "y/_db/decorators.py",
16
18
  "y/_db/utils/stringify.py",
17
- "y/_db/config.py",
18
19
  "y/ENVIRONMENT_VARIABLES.py",
19
20
  "y/convert.py",
20
21
  "y/exceptions.py",
@@ -24,8 +25,6 @@ try:
24
25
  "--pretty",
25
26
  "--install-types",
26
27
  "--disable-error-code=import-not-found",
27
- "--disable-error-code=import-untyped",
28
- "--disable-error-code=no-any-return",
29
28
  "--disable-error-code=misc",
30
29
  "--disable-error-code=attr-defined",
31
30
  "--disable-error-code=return-value",
@@ -70,7 +69,7 @@ setup(
70
69
  author_email="bobthebuidlerdefi@gmail.com",
71
70
  url="https://github.com/BobTheBuidler/ypricemagic",
72
71
  license="MIT",
73
- python_requires=">=3.9,<3.13",
72
+ python_requires=">=3.10,<3.13",
74
73
  classifiers=[
75
74
  "Intended Audience :: Developers",
76
75
  "Programming Language :: Python :: 3",
@@ -1,17 +1,15 @@
1
+ import hashlib
2
+ import json
1
3
  from asyncio import Lock
2
- from hashlib import sha1
3
- from json import dumps, loads
4
4
  from pathlib import Path
5
- from typing import Any, Container, Dict, Literal, Optional, Tuple
5
+ from typing import Any, Callable, Container, Dict, Final, Literal, Optional, Tuple, final
6
6
 
7
7
  import aiosqlite
8
8
  from a_sync import SmartProcessingQueue
9
- from a_sync.async_property.cached import async_cached_property
10
9
  from brownie._config import CONFIG, _get_data_folder
11
10
  from brownie.exceptions import BrownieEnvironmentError
12
11
  from brownie.network.contract import _resolve_address
13
12
  from brownie.project.build import DEPLOYMENT_KEYS
14
- from eth_utils.toolz import keymap
15
13
  from functools import lru_cache
16
14
  from sqlite3 import InterfaceError, OperationalError
17
15
 
@@ -37,13 +35,31 @@ SourceKey = Literal[
37
35
  "type",
38
36
  ]
39
37
 
38
+ # TODO: replace these with the typed dicts in brownie >=1.22
40
39
  BuildJson = Dict[str, Any]
41
40
  Sources = Dict[SourceKey, Any]
42
41
 
43
42
 
44
- SOURCE_KEYS: Tuple[SourceKey, ...] = SourceKey.__args__
43
+ SOURCE_KEYS: Final = (
44
+ "address",
45
+ "alias",
46
+ "paths",
47
+ "abi",
48
+ "ast",
49
+ "bytecode",
50
+ "compiler",
51
+ "contractName",
52
+ "deployedBytecode",
53
+ "deployedSourceMap",
54
+ "language",
55
+ "natspec",
56
+ "opcodes",
57
+ "pcMap",
58
+ "sourceMap",
59
+ "type",
60
+ )
45
61
 
46
- DISCARD_SOURCE_KEYS: Tuple[SourceKey, ...] = (
62
+ DISCARD_SOURCE_KEYS: Final = (
47
63
  "ast",
48
64
  "bytecode",
49
65
  "coverageMap",
@@ -60,22 +76,39 @@ These keys will not be included in y.Contract object build data. If you need the
60
76
  """
61
77
 
62
78
 
63
- sqlite_lock = Lock()
79
+ # C constants
80
+
81
+ sha1: Final = hashlib.sha1
82
+
83
+ dumps: Final = json.dumps
84
+ loads: Final = json.loads
85
+
86
+ sqlite_lock: Final = Lock()
64
87
 
65
88
 
89
+ @final
66
90
  class AsyncCursor:
67
- def __init__(self, filename):
68
- self._filename = filename
91
+ def __init__(self, filename: Path) -> None:
92
+ self._filename: Final = filename
93
+ self._db: Optional[aiosqlite.Connection] = None
94
+ self._connected: bool = False
95
+ self._execute: Optional[Callable[..., aiosqlite.Cursor]] = None
69
96
 
70
- @async_cached_property
71
- async def connect(self):
97
+ async def connect(self) -> None:
72
98
  """Establish an async connection to the SQLite database"""
99
+ db = self._db # must assign before checking to avoid a TypeError below
100
+ if db is not None:
101
+ raise RuntimeError("already connected")
73
102
  async with sqlite_lock:
103
+ if self._db is not None:
104
+ return
74
105
  self._db = await aiosqlite.connect(self._filename, isolation_level=None)
106
+ self._execute = self._db.execute
75
107
 
76
- async def insert(self, table, *values):
108
+ async def insert(self, table: str, *values: Any) -> None:
77
109
  raise NotImplementedError
78
- await self.connect
110
+ if self._db is None:
111
+ await self.connect()
79
112
 
80
113
  # Convert any dictionaries/lists to JSON strings before inserting
81
114
  values = [dumps(val) if isinstance(val, (dict, list)) else val for val in values]
@@ -85,20 +118,23 @@ class AsyncCursor:
85
118
  query = f"INSERT OR REPLACE INTO {table} VALUES ({placeholders})"
86
119
 
87
120
  # Execute the query and commit the changes
88
- async with self._db.execute(query, values):
121
+ async with self._execute(query, values):
89
122
  await self._db.commit()
90
123
 
91
- async def fetchone(self, cmd: str, *args) -> Optional[Tuple]:
92
- await self.connect
124
+ async def fetchone(self, cmd: str, *args: Any) -> Optional[Tuple[Any, ...]]:
125
+ if self._db is None:
126
+ await self.connect()
93
127
  async with sqlite_lock:
94
- async with self._db.execute(cmd, args) as cursor:
95
- if row := await cursor.fetchone():
96
- # Convert any JSON-serialized columns back to their original data structures
97
- return tuple(loads(i) if str(i).startswith(("[", "{")) else i for i in row)
128
+ async with self._execute(cmd, args) as cursor:
129
+ row = await cursor.fetchone()
130
+ if row is None:
131
+ return None
132
+ # Convert any JSON-serialized columns back to their original data structures
133
+ return tuple(loads(i) if str(i).startswith(("[", "{")) else i for i in row)
98
134
 
99
135
 
100
- cur = AsyncCursor(_get_data_folder().joinpath("deployments.db"))
101
- fetchone = SmartProcessingQueue(cur.fetchone, num_workers=32)
136
+ cur: Final = AsyncCursor(_get_data_folder().joinpath("deployments.db"))
137
+ fetchone: Final = SmartProcessingQueue(cur.fetchone, num_workers=32)
102
138
 
103
139
 
104
140
  @lru_cache(maxsize=None)
@@ -110,8 +146,8 @@ def _get_select_statement() -> str:
110
146
 
111
147
 
112
148
  async def _get_deployment(
113
- address: str = None,
114
- alias: str = None,
149
+ address: Optional[str] = None,
150
+ alias: Optional[str] = None,
115
151
  skip_source_keys: Container[SourceKey] = DISCARD_SOURCE_KEYS,
116
152
  ) -> Tuple[Optional[BuildJson], Optional[Sources]]:
117
153
  if address and alias:
@@ -130,7 +166,7 @@ async def _get_deployment(
130
166
  return None, None
131
167
 
132
168
  build_json = dict(zip(SOURCE_KEYS, row))
133
- path_map = build_json.pop("paths")
169
+ path_map: dict = build_json.pop("paths")
134
170
 
135
171
  sources = {
136
172
  source_key: await __fetch_source_for_hash(val)
@@ -139,8 +175,9 @@ async def _get_deployment(
139
175
  }
140
176
 
141
177
  build_json["allSourcePaths"] = {k: v[1] for k, v in path_map.items()}
142
- if isinstance(build_json.get("pcMap"), dict):
143
- build_json["pcMap"] = keymap(int, build_json["pcMap"])
178
+ pc_map: Optional[dict] = build_json.get("pcMap")
179
+ if pc_map is not None:
180
+ build_json["pcMap"] = {int(key): pc_map[key] for key in pc_map}
144
181
 
145
182
  return build_json, sources
146
183
 
@@ -30,7 +30,7 @@ from a_sync import (
30
30
  CounterLock,
31
31
  PruningThreadPoolExecutor,
32
32
  )
33
- from async_property import async_property
33
+ from async_property import async_property # type: ignore [import-untyped]
34
34
  from brownie import ZERO_ADDRESS
35
35
  from dank_mids import BlockSemaphore
36
36
  from evmspec.data import Address, HexBytes32
@@ -63,7 +63,7 @@ def monkey_patch_checksum_cache():
63
63
  pass
64
64
 
65
65
  try:
66
- import ens.ens
66
+ import ens.ens # type: ignore [import-untyped]
67
67
 
68
68
  ens.ens.to_checksum_address = y.convert.to_address
69
69
  except ModuleNotFoundError:
@@ -71,7 +71,7 @@ def monkey_patch_checksum_cache():
71
71
  pass
72
72
 
73
73
  try:
74
- import ens.async_ens
74
+ import ens.async_ens # type: ignore [import-untyped]
75
75
 
76
76
  ens.async_ens.to_checksum_address = y.convert.to_address
77
77
  except ModuleNotFoundError:
@@ -8,6 +8,7 @@ from typing import (
8
8
  AsyncIterator,
9
9
  DefaultDict,
10
10
  Dict,
11
+ Final,
11
12
  Iterable,
12
13
  List,
13
14
  Literal,
@@ -22,6 +23,7 @@ from a_sync import igather
22
23
  from a_sync.a_sync import HiddenMethodDescriptor
23
24
  from brownie.network.event import _EventItem
24
25
  from eth_typing import ChecksumAddress, HexAddress
26
+ from faster_eth_abi.packed import encode_packed
25
27
  from typing_extensions import Self
26
28
 
27
29
  from y import convert
@@ -41,21 +43,17 @@ from y.interfaces.uniswap.quoterv3 import UNIV3_QUOTER_ABI
41
43
  from y.networks import Network
42
44
  from y.utils.events import ProcessedEvents
43
45
 
44
- try:
45
- from eth_abi.packed import encode_packed
46
- except ImportError:
47
- from eth_abi.packed import encode_abi_packed as encode_packed
48
46
 
49
47
  # https://github.com/Uniswap/uniswap-v3-periphery/blob/main/deploys.md
50
- UNISWAP_V3_FACTORY = "0x1F98431c8aD98523631AE4a59f267346ea31F984"
51
- UNISWAP_V3_QUOTER = "0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6"
48
+ UNISWAP_V3_FACTORY: Final = "0x1F98431c8aD98523631AE4a59f267346ea31F984"
49
+ UNISWAP_V3_QUOTER: Final = "0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6"
52
50
 
53
- logger = getLogger(__name__)
51
+ logger: Final = getLogger(__name__)
54
52
 
55
53
  Path = Iterable[Union[Address, int]]
56
54
 
57
55
  # same addresses on all networks
58
- addresses = {
56
+ addresses: Final = {
59
57
  Network.Mainnet: {
60
58
  "factory": UNISWAP_V3_FACTORY,
61
59
  "quoter": UNISWAP_V3_QUOTER,
@@ -78,7 +76,7 @@ addresses = {
78
76
  },
79
77
  }
80
78
 
81
- forked_deployments = {
79
+ forked_deployments: Final = {
82
80
  Network.Optimism: [
83
81
  {
84
82
  # Velodrome slipstream
@@ -97,9 +95,9 @@ forked_deployments = {
97
95
  ],
98
96
  }
99
97
 
100
- _FEE_DENOMINATOR = Decimal(1_000_000)
98
+ _FEE_DENOMINATOR: Final = Decimal(1_000_000)
101
99
 
102
- _PATH_TYPE_STRINGS: Dict[int, Tuple[Literal["address", "uint24"], ...]] = {
100
+ _PATH_TYPE_STRINGS: Final[Dict[int, Tuple[Literal["address", "uint24"], ...]]] = {
103
101
  3: tuple(islice(cycle(("address", "uint24")), 3)),
104
102
  5: tuple(islice(cycle(("address", "uint24")), 5)),
105
103
  }
@@ -14,7 +14,7 @@ from brownie import ZERO_ADDRESS
14
14
  from brownie.convert.datatypes import EthAddress
15
15
  from brownie.exceptions import ContractNotFound, EventLookupError
16
16
  from brownie.network.event import _EventItem
17
- from eth_abi.exceptions import InvalidPointer
17
+ from faster_eth_abi.exceptions import InvalidPointer
18
18
  from typing_extensions import Self
19
19
  from web3.exceptions import ContractLogicError
20
20
 
@@ -1,10 +1,11 @@
1
1
  import logging
2
- from typing import Callable, List, Optional
2
+ from typing import Callable, Final, List, Optional, final
3
3
 
4
4
  import a_sync
5
5
  from a_sync import cgather
6
6
  from a_sync.a_sync import HiddenMethodDescriptor
7
7
  from eth_typing import ChecksumAddress, HexStr
8
+ from faster_eth_abi import encode
8
9
  from multicall import Call
9
10
  from typing_extensions import Self
10
11
 
@@ -16,23 +17,20 @@ from y.exceptions import UnsupportedNetwork, call_reverted
16
17
  from y.networks import Network
17
18
  from y.utils import a_sync_ttl_cache
18
19
 
19
- try:
20
- from eth_abi import encode
21
20
 
22
- encode_bytes: Callable[[str], bytes] = lambda s: encode(["bytes32"], [s.encode()])
23
- except ImportError:
24
- from eth_abi import encode_single
21
+ logger: Final = logging.getLogger(__name__)
25
22
 
26
- encode_bytes: Callable[[str], bytes] = lambda s: encode_single("bytes32", s.encode())
27
-
28
- logger = logging.getLogger(__name__)
29
-
30
- addresses = {
23
+ addresses: Final = {
31
24
  Network.Mainnet: "0x823bE81bbF96BEc0e25CA13170F5AaCb5B79ba83",
32
25
  Network.Optimism: "0x95A6a3f44a70172E7d50a9e28c85Dfd712756B8C",
33
26
  }
34
27
 
35
28
 
29
+ def encode_bytes(s: str) -> bytes:
30
+ return encode(["bytes32"], [s.encode()])
31
+
32
+
33
+ @final
36
34
  class Synthetix(a_sync.ASyncGenericSingleton):
37
35
  """A class to interact with the Synthetix protocol.
38
36
 
@@ -9,7 +9,7 @@ import eth_retry
9
9
  from a_sync._typing import AnyFn, P, T
10
10
  from a_sync.a_sync.function import ASyncDecorator
11
11
  from brownie import chain
12
- from joblib import Memory
12
+ from joblib import Memory # type: ignore [import-untyped]
13
13
 
14
14
  from y import ENVIRONMENT_VARIABLES as ENVS
15
15
 
@@ -27,7 +27,7 @@ import dank_mids
27
27
  import eth_retry
28
28
  from a_sync import igather
29
29
  from a_sync.executor import _AsyncExecutorMixin
30
- from async_property import async_property
30
+ from async_property import async_property # type: ignore [import-untyped]
31
31
  from brownie import web3
32
32
  from brownie.network.event import (
33
33
  _EventItem,
@@ -37,10 +37,9 @@ from brownie.network.event import (
37
37
  EventDict,
38
38
  )
39
39
  from eth_typing import ChecksumAddress
40
- from eth_utils.toolz import concat
40
+ from eth_utils.toolz import concat, groupby
41
41
  from evmspec import Log
42
42
  from msgspec.structs import force_setattr
43
- from toolz import groupby
44
43
  from web3.middleware.filter import block_ranges
45
44
  from web3.types import LogReceipt
46
45
 
@@ -7,7 +7,7 @@ from weakref import WeakValueDictionary, ref as weak_ref
7
7
  import a_sync
8
8
  from brownie import chain
9
9
  from eth_typing import BlockNumber, ChecksumAddress
10
- from lazy_logging import LazyLoggerFactory
10
+ from lazy_logging import LazyLoggerFactory # type: ignore [import-untyped]
11
11
  from typing_extensions import ParamSpec
12
12
 
13
13
  from y.datatypes import AnyAddressType, Block
@@ -6,7 +6,7 @@ import a_sync
6
6
  import brownie
7
7
  import dank_mids
8
8
  from a_sync import igather
9
- from eth_abi.exceptions import InsufficientDataBytes
9
+ from faster_eth_abi.exceptions import InsufficientDataBytes
10
10
  from multicall import Call
11
11
  from web3.exceptions import CannotHandleRequest
12
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ypricemagic
3
- Version: 4.6.20.dev0
3
+ Version: 4.6.22.dev0
4
4
  Summary: Use this tool to extract historical on-chain price data from an archive node. Shoutout to @bantg and @nymmrx for their awesome work on yearn-exporter that made this library possible.
5
5
  Home-page: https://github.com/BobTheBuidler/ypricemagic
6
6
  Author: BobTheBuidler
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: Implementation :: CPython
16
16
  Classifier: Operating System :: OS Independent
17
17
  Classifier: Topic :: Software Development :: Libraries
18
- Requires-Python: >=3.9,<3.13
18
+ Requires-Python: >=3.10,<3.13
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE.txt
21
21
 
@@ -4,9 +4,11 @@ cchecksum>=0.0.3
4
4
  checksum_dict<3,>=2.1.10.dev0
5
5
  dank_mids>=4.20.161
6
6
  eth-brownie<1.23,>=1.21.0
7
+ eth-event>=1.4.0
7
8
  eth_retry>=0.2.1
8
9
  evmspec>=0.3.4
9
10
  ez-a-sync<1,>=0.32.18
11
+ faster-eth-abi<6,>=5.2.1
10
12
  faster-eth-utils
11
13
  inflection<0.6,>=0.1
12
14
  joblib>=1.0.1
@@ -0,0 +1,3 @@
1
+ 839fc216801717d47e67__mypyc
2
+ y
3
+ ypricemagic
@@ -1,5 +0,0 @@
1
- [build-system]
2
- requires = ["setuptools", "wheel", "mypy[mypyc]==1.17.0"]
3
-
4
- [tool.black]
5
- line-length = 100
@@ -1,3 +0,0 @@
1
- e48b665766e5f62102a4__mypyc
2
- y
3
- ypricemagic