yearn-treasury 0.0.32__tar.gz → 0.0.34__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.

Potentially problematic release.


This version of yearn-treasury might be problematic. Click here for more details.

Files changed (87) hide show
  1. {yearn_treasury-0.0.32/yearn_treasury.egg-info → yearn_treasury-0.0.34}/PKG-INFO +2 -2
  2. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/pyproject.toml +3 -3
  3. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/_db.py +8 -0
  4. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/_logging.py +15 -1
  5. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/main.py +2 -2
  6. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/passthru.py +1 -1
  7. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/curve.py +3 -2
  8. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/vaults.py +2 -1
  9. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/shitcoins.py +21 -6
  10. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34/yearn_treasury.egg-info}/PKG-INFO +2 -2
  11. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury.egg-info/requires.txt +1 -1
  12. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/MANIFEST.in +0 -0
  13. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/README.md +0 -0
  14. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/setup.cfg +0 -0
  15. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/setup.py +0 -0
  16. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/__init__.py +0 -0
  17. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/_ens.py +0 -0
  18. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/address_labels.yaml +0 -0
  19. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/budget/__init__.py +0 -0
  20. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/budget/_request.py +0 -0
  21. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/budget/_requests.py +0 -0
  22. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/constants.py +0 -0
  23. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/py.typed +0 -0
  24. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/__init__.py +0 -0
  25. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/constants.py +0 -0
  26. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/cost_of_revenue/__init__.py +0 -0
  27. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/cost_of_revenue/gas.py +0 -0
  28. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/cost_of_revenue/match_on_hash.yaml +0 -0
  29. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/expense/__init__.py +0 -0
  30. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/expense/general.py +0 -0
  31. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/expense/infrastructure.py +0 -0
  32. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/expense/match_on_hash.yaml +0 -0
  33. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/expense/match_on_to_address.yaml +0 -0
  34. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/expense/people.py +0 -0
  35. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/expense/security.py +0 -0
  36. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/__init__.py +0 -0
  37. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/general.py +0 -0
  38. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/maker.py +0 -0
  39. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/staking.py +0 -0
  40. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/__init__.py +0 -0
  41. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/_skip_tokens.py +0 -0
  42. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/aave.py +0 -0
  43. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/compound.py +0 -0
  44. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/conversion_factory.py +0 -0
  45. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/cowswap.py +0 -0
  46. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/gearbox.py +0 -0
  47. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/iearn.py +0 -0
  48. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/otc.py +0 -0
  49. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/pooltogether.py +0 -0
  50. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/synthetix.py +0 -0
  51. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/uniswap.py +0 -0
  52. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/unwrapper.py +0 -0
  53. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/woofy.py +0 -0
  54. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/yfi.py +0 -0
  55. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/swaps/yla.py +0 -0
  56. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/unit.py +0 -0
  57. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/weth.py +0 -0
  58. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/ignore/ygov.py +0 -0
  59. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_expense/__init__.py +0 -0
  60. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_expense/boost.py +0 -0
  61. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_expense/bugs.py +0 -0
  62. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_expense/donations.py +0 -0
  63. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_expense/dyfi.py +0 -0
  64. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_expense/events.py +0 -0
  65. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_expense/match_on_hash.yaml +0 -0
  66. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_expense/match_on_to_address.yaml +0 -0
  67. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_expense/misc.py +0 -0
  68. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_expense/revshare.py +0 -0
  69. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_income/__init__.py +0 -0
  70. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_income/airdrops.py +0 -0
  71. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_income/match_on_hash.yaml +0 -0
  72. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/other_income/misc.py +0 -0
  73. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/revenue/__init__.py +0 -0
  74. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/revenue/bribes.py +0 -0
  75. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/revenue/farming.py +0 -0
  76. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/revenue/keepcoins.py +0 -0
  77. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/revenue/match_on_hash.yaml +0 -0
  78. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/revenue/seasolver.py +0 -0
  79. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/revenue/vaults.py +0 -0
  80. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/rules/revenue/yteams.py +0 -0
  81. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/vaults.py +0 -0
  82. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury/wallets.yaml +0 -0
  83. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury.egg-info/SOURCES.txt +0 -0
  84. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury.egg-info/dependency_links.txt +0 -0
  85. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury.egg-info/entry_points.txt +0 -0
  86. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury.egg-info/not-zip-safe +0 -0
  87. {yearn_treasury-0.0.32 → yearn_treasury-0.0.34}/yearn_treasury.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yearn_treasury
3
- Version: 0.0.32
3
+ Version: 0.0.34
4
4
  Summary: This WIP library runs the eth-portfolio and dao-treasury exporters for the Yearn Finance treasury.
5
5
  Classifier: Development Status :: 3 - Alpha
6
6
  Classifier: Intended Audience :: Developers
@@ -15,7 +15,7 @@ Classifier: Operating System :: OS Independent
15
15
  Classifier: Topic :: Software Development :: Libraries
16
16
  Requires-Python: >=3.10,<3.13
17
17
  Description-Content-Type: text/markdown
18
- Requires-Dist: dao-treasury<0.1,>=0.0.48
18
+ Requires-Dist: dao-treasury<0.1,>=0.0.51
19
19
  Requires-Dist: eth-brownie<1.23,>=1.21.0
20
20
  Dynamic: classifier
21
21
  Dynamic: description
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "yearn-treasury"
3
- version = "0.0.32"
3
+ version = "0.0.34"
4
4
  description = "This WIP library runs the eth-portfolio and dao-treasury exporters for the Yearn Finance treasury."
5
5
  authors = ["Bob The Buidler <you@example.com>"]
6
6
  packages = [{ include = "yearn_treasury/*" }]
@@ -9,7 +9,7 @@ packages = [{ include = "yearn_treasury/*" }]
9
9
  requires = [
10
10
  "setuptools",
11
11
  "wheel",
12
- "mypy[mypyc]==1.17.1",
12
+ "mypy[mypyc]==1.18.1",
13
13
  "tomli>=2.0.0; python_version < '3.11'",
14
14
  "types-requests",
15
15
  "dao-treasury>=0.0.45,<0.1; platform_system == 'Linux'",
@@ -22,7 +22,7 @@ yearn-treasury = "yearn_treasury.main:main"
22
22
 
23
23
  [tool.poetry.dependencies]
24
24
  python = ">=3.10,<3.13"
25
- dao-treasury = ">=0.0.48,<0.1"
25
+ dao-treasury = ">=0.0.51,<0.1"
26
26
  eth-brownie = ">=1.21.0,<1.23"
27
27
 
28
28
  [tool.poetry.group.dev.dependencies]
@@ -20,6 +20,14 @@ from yearn_treasury import constants
20
20
 
21
21
 
22
22
  def prepare_db() -> None:
23
+ """
24
+ Set up address nicknames in the Yearn Treasury database.
25
+
26
+ Maps key Yearn Treasury addresses to human-readable labels for improved
27
+ clarity in analytics and reporting. This function is typically called
28
+ during database preparation to ensure wallet addresses are labeled
29
+ within the DAO Treasury database entity system.
30
+ """
23
31
  chad = {Network.Mainnet: "y", Network.Fantom: "f"}[CHAINID] # type: ignore [index]
24
32
 
25
33
  labels = {
@@ -1,6 +1,13 @@
1
1
  # mypy: disable-error-code="list-item"
2
2
  """
3
- This file contains logic for suppressing eth-portfolio error logs where desired.
3
+ Error log suppression utilities for the Yearn Treasury exporter.
4
+
5
+ This module suppresses noisy or irrelevant eth-portfolio error logs for specific
6
+ token addresses that are known to be deprecated or otherwise unpricable.
7
+
8
+ To suppress logs for additional tokens, add their addresses to the
9
+ `suppress_logs_for[Network.<chain>]` mapping. The rest will be done
10
+ automatically on package import.
4
11
  """
5
12
 
6
13
  from typing import Dict, Final, List
@@ -23,5 +30,12 @@ suppress_logs_for: Final[Dict[Network, List[HexAddress]]] = {
23
30
 
24
31
 
25
32
  def setup_eth_portfolio_logging() -> None:
33
+ """
34
+ Suppress eth-portfolio error logs for specific tokens on the current chain.
35
+
36
+ Appends token addresses from the suppress_logs_for mapping (for the current
37
+ CHAINID) to the SUPPRESS_ERROR_LOGS list, preventing error logs for these
38
+ tokens from being emitted during analytics and reporting.
39
+ """
26
40
  for token in suppress_logs_for.get(CHAINID, []): # type: ignore [call-overload]
27
41
  SUPPRESS_ERROR_LOGS.append(to_checksum_address(token))
@@ -42,8 +42,8 @@ run_parser.add_argument(
42
42
  run_parser.add_argument(
43
43
  "--concurrency",
44
44
  type=int,
45
- help="The max number of historical blocks to export concurrently. default: 50",
46
- default=50,
45
+ help="The max number of historical blocks to export concurrently. default: 40",
46
+ default=40,
47
47
  )
48
48
  run_parser.add_argument(
49
49
  "--daemon",
@@ -44,7 +44,7 @@ def is_ycrv(tx: TreasuryTx) -> bool:
44
44
  if tx.from_address == owner and tx.token == sell_token and buy_token == ycrv:
45
45
  scaled = Decimal(sell_amount) / 10**18
46
46
  # TODO: remove this rounding when we implement postgres
47
- if scaled == tx.amount:
47
+ if round(scaled, 11) == round(tx.amount, 11):
48
48
  return True
49
49
  print(f"bribes for ycrv amount no match: [{scaled}, {tx.amount}]")
50
50
 
@@ -120,7 +120,7 @@ async def _is_curve_withdrawal_multi(tx: TreasuryTx) -> bool:
120
120
  pool = await Contract.coroutine(event.address) # type: ignore [assignment]
121
121
  if await _is_old_style(tx, pool) or _is_new_style(tx, pool):
122
122
  return True
123
- print(f"wtf is this: {tx}")
123
+ print(f"unhandled curve pool: {tx} symbol={tx.symbol} name={tx.token.name}")
124
124
  # Tokens rec'd
125
125
  elif tx.from_address == event.address and TreasuryWallet.check_membership(
126
126
  tx.to_address.address, tx.block # type: ignore [union-attr, arg-type]
@@ -130,7 +130,8 @@ async def _is_curve_withdrawal_multi(tx: TreasuryTx) -> bool:
130
130
  if tx.amount == tx.token.scale_value(amount):
131
131
  pool = await Contract.coroutine(event.address) # type: ignore [assignment]
132
132
  if hasattr(pool, "underlying_coins"):
133
- return tx.token == await pool.underlying_coins.coroutine(i)
133
+ coin: ChecksumAddress = await pool.underlying_coins.coroutine(i)
134
+ return tx.token == coin
134
135
  else:
135
136
  return tx.token == await _get_coin_at_index(pool, i)
136
137
  except EventLookupError:
@@ -164,7 +164,8 @@ def is_v3_vault_deposit(tx: TreasuryTx) -> bool:
164
164
 
165
165
  @alru_cache(maxsize=None)
166
166
  async def _get_underlying(vault: Contract) -> ChecksumAddress:
167
- return (await YearnInspiredVault(vault, asynchronous=True).underlying).address # type: ignore [return-value]
167
+ underlying = await YearnInspiredVault(vault, asynchronous=True).underlying
168
+ return underlying.address # type: ignore [return-value]
168
169
 
169
170
 
170
171
  @vaults("Withdrawal")
@@ -9,14 +9,16 @@ which contains the logic that prevents these shitcoins from being included in
9
9
  any Yearn Treasury outputs.
10
10
 
11
11
  Since these tokens do nothing but add noise to the outputs, transactions
12
- involving them are excluded from portfolio calculations, reports, and dashboards.
12
+ involving them are excluded from treasury calculations, reports, and dashboards.
13
13
  """
14
14
 
15
+ from typing import Final
16
+
15
17
  from y import Network, convert
16
18
  from y.constants import CHAINID
17
19
 
18
20
 
19
- _SHITCOINS = {
21
+ _SHITCOINS: Final = {
20
22
  Network.Mainnet: (
21
23
  "0xC36442b4a4522E871399CD717aBDD847Ab11FE88", # UNI-V3 NFT, not shitcoin but not pricable
22
24
  "0x0329b631464C43f4e8132df7B4ac29a2D89FFdC7",
@@ -98,6 +100,8 @@ _SHITCOINS = {
98
100
  "0xa3Efa0929569c15c20f89B591931899Fb05B4663", # GPT-5
99
101
  "0x0A953979fdCfD82B08C77dB29705327BeC39ff13", # GROK4 AI
100
102
  "0xc83377b9eE3CEe4Cc03CCd58AfdE1FB12864aEE3", # E AI
103
+ "0x927402ab67c0CDA3c187E9DFE34554AC581441f2", # SAITABIT
104
+ "0x691539810DF6e879A377C24CfEE130BBE92708d8", # NVIDIA AI
101
105
  # matt furry spam
102
106
  "0x73228b3D33cC71cB721Fc62950577bE63bd9c8C9", # Maskman by Matt Furie
103
107
  "0x7c28e66436C93BB9F657dDF2BA0eeeCf61369b92", # Bloodboy by Matt Furie
@@ -105,11 +109,22 @@ _SHITCOINS = {
105
109
  "0xBd6555eC87C8A9a2280dCD6df45b9b074fC93Df2", # Bork by Matt Furie
106
110
  # test token
107
111
  "0x2F375Ce83EE85e505150d24E85A1742fd03cA593", # TEST
108
- # generally looks like shit (move to eth-portfolio)
109
- "0xE8ED1fca5af1c7dd46A3D5bbDFf7e99749D9e0aa", # Hachi
110
- "0x00d0F0250364C431376cC64AADd3aa13c6A8998D", # SMEGMA
111
112
  ),
112
113
  }
114
+ """
115
+ Mapping of blockchain networks to tuples of token addresses that should be
116
+ ignored in Yearn Treasury analytics. These tokens are considered unpricable,
117
+ spam, or otherwise unwanted for reporting and analytics purposes.
118
+
119
+ Each tuple contains token contract addresses that will be excluded from
120
+ treasury calculations, reports, and dashboards for the corresponding network.
121
+ """
122
+
113
123
 
124
+ SHITCOINS: Final = {convert.to_address(shitcoin) for shitcoin in _SHITCOINS.get(CHAINID, ())} # type: ignore [call-overload]
125
+ """Set of checksummed token addresses to ignore for the current chain.
114
126
 
115
- SHITCOINS = {convert.to_address(shitcoin) for shitcoin in _SHITCOINS.get(CHAINID, ())} # type: ignore [call-overload]
127
+ This set is derived from the _SHITCOINS mapping for the current CHAINID,
128
+ and is used to filter out unpricable, spam, or otherwise unwanted tokens
129
+ from all Yearn Treasury analytics and reporting.
130
+ """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yearn_treasury
3
- Version: 0.0.32
3
+ Version: 0.0.34
4
4
  Summary: This WIP library runs the eth-portfolio and dao-treasury exporters for the Yearn Finance treasury.
5
5
  Classifier: Development Status :: 3 - Alpha
6
6
  Classifier: Intended Audience :: Developers
@@ -15,7 +15,7 @@ Classifier: Operating System :: OS Independent
15
15
  Classifier: Topic :: Software Development :: Libraries
16
16
  Requires-Python: >=3.10,<3.13
17
17
  Description-Content-Type: text/markdown
18
- Requires-Dist: dao-treasury<0.1,>=0.0.48
18
+ Requires-Dist: dao-treasury<0.1,>=0.0.51
19
19
  Requires-Dist: eth-brownie<1.23,>=1.21.0
20
20
  Dynamic: classifier
21
21
  Dynamic: description
@@ -1,2 +1,2 @@
1
- dao-treasury<0.1,>=0.0.48
1
+ dao-treasury<0.1,>=0.0.51
2
2
  eth-brownie<1.23,>=1.21.0