yearn-treasury 0.0.44__cp311-cp311-win_amd64.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.

Potentially problematic release.


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

Files changed (128) hide show
  1. yearn_treasury/__init__.py +20 -0
  2. yearn_treasury/_db.cp311-win_amd64.pyd +0 -0
  3. yearn_treasury/_db.py +41 -0
  4. yearn_treasury/_ens.cp311-win_amd64.pyd +0 -0
  5. yearn_treasury/_ens.py +31 -0
  6. yearn_treasury/_logging.cp311-win_amd64.pyd +0 -0
  7. yearn_treasury/_logging.py +43 -0
  8. yearn_treasury/address_labels.yaml +39 -0
  9. yearn_treasury/budget/__init__.cp311-win_amd64.pyd +0 -0
  10. yearn_treasury/budget/__init__.py +6 -0
  11. yearn_treasury/budget/_request.cp311-win_amd64.pyd +0 -0
  12. yearn_treasury/budget/_request.py +44 -0
  13. yearn_treasury/budget/_requests.cp311-win_amd64.pyd +0 -0
  14. yearn_treasury/budget/_requests.py +96 -0
  15. yearn_treasury/constants.py +89 -0
  16. yearn_treasury/main.py +176 -0
  17. yearn_treasury/py.typed +1 -0
  18. yearn_treasury/rules/__init__.py +20 -0
  19. yearn_treasury/rules/constants.cp311-win_amd64.pyd +0 -0
  20. yearn_treasury/rules/constants.py +17 -0
  21. yearn_treasury/rules/cost_of_revenue/__init__.py +1 -0
  22. yearn_treasury/rules/cost_of_revenue/gas.cp311-win_amd64.pyd +0 -0
  23. yearn_treasury/rules/cost_of_revenue/gas.py +66 -0
  24. yearn_treasury/rules/cost_of_revenue/match_on_hash.yaml +12 -0
  25. yearn_treasury/rules/expense/__init__.cp311-win_amd64.pyd +0 -0
  26. yearn_treasury/rules/expense/__init__.py +4 -0
  27. yearn_treasury/rules/expense/general.cp311-win_amd64.pyd +0 -0
  28. yearn_treasury/rules/expense/general.py +13 -0
  29. yearn_treasury/rules/expense/infrastructure.cp311-win_amd64.pyd +0 -0
  30. yearn_treasury/rules/expense/infrastructure.py +47 -0
  31. yearn_treasury/rules/expense/match_on_hash.yaml +48 -0
  32. yearn_treasury/rules/expense/match_on_to_address.yaml +7 -0
  33. yearn_treasury/rules/expense/people.cp311-win_amd64.pyd +0 -0
  34. yearn_treasury/rules/expense/people.py +84 -0
  35. yearn_treasury/rules/expense/security.cp311-win_amd64.pyd +0 -0
  36. yearn_treasury/rules/expense/security.py +147 -0
  37. yearn_treasury/rules/ignore/__init__.py +8 -0
  38. yearn_treasury/rules/ignore/general.cp311-win_amd64.pyd +0 -0
  39. yearn_treasury/rules/ignore/general.py +11 -0
  40. yearn_treasury/rules/ignore/maker.py +92 -0
  41. yearn_treasury/rules/ignore/passthru.py +310 -0
  42. yearn_treasury/rules/ignore/staking.py +102 -0
  43. yearn_treasury/rules/ignore/swaps/__init__.py +25 -0
  44. yearn_treasury/rules/ignore/swaps/_skip_tokens.py +9 -0
  45. yearn_treasury/rules/ignore/swaps/aave.py +69 -0
  46. yearn_treasury/rules/ignore/swaps/auctions.cp311-win_amd64.pyd +0 -0
  47. yearn_treasury/rules/ignore/swaps/auctions.py +31 -0
  48. yearn_treasury/rules/ignore/swaps/compound.py +58 -0
  49. yearn_treasury/rules/ignore/swaps/conversion_factory.cp311-win_amd64.pyd +0 -0
  50. yearn_treasury/rules/ignore/swaps/conversion_factory.py +21 -0
  51. yearn_treasury/rules/ignore/swaps/cowswap.py +87 -0
  52. yearn_treasury/rules/ignore/swaps/curve.py +170 -0
  53. yearn_treasury/rules/ignore/swaps/gearbox.cp311-win_amd64.pyd +0 -0
  54. yearn_treasury/rules/ignore/swaps/gearbox.py +37 -0
  55. yearn_treasury/rules/ignore/swaps/iearn.cp311-win_amd64.pyd +0 -0
  56. yearn_treasury/rules/ignore/swaps/iearn.py +43 -0
  57. yearn_treasury/rules/ignore/swaps/otc.cp311-win_amd64.pyd +0 -0
  58. yearn_treasury/rules/ignore/swaps/otc.py +58 -0
  59. yearn_treasury/rules/ignore/swaps/pooltogether.cp311-win_amd64.pyd +0 -0
  60. yearn_treasury/rules/ignore/swaps/pooltogether.py +23 -0
  61. yearn_treasury/rules/ignore/swaps/synthetix.cp311-win_amd64.pyd +0 -0
  62. yearn_treasury/rules/ignore/swaps/synthetix.py +10 -0
  63. yearn_treasury/rules/ignore/swaps/uniswap.py +294 -0
  64. yearn_treasury/rules/ignore/swaps/unwrapper.cp311-win_amd64.pyd +0 -0
  65. yearn_treasury/rules/ignore/swaps/unwrapper.py +17 -0
  66. yearn_treasury/rules/ignore/swaps/vaults.cp311-win_amd64.pyd +0 -0
  67. yearn_treasury/rules/ignore/swaps/vaults.py +263 -0
  68. yearn_treasury/rules/ignore/swaps/woofy.cp311-win_amd64.pyd +0 -0
  69. yearn_treasury/rules/ignore/swaps/woofy.py +80 -0
  70. yearn_treasury/rules/ignore/swaps/yfi.cp311-win_amd64.pyd +0 -0
  71. yearn_treasury/rules/ignore/swaps/yfi.py +111 -0
  72. yearn_treasury/rules/ignore/swaps/yla.cp311-win_amd64.pyd +0 -0
  73. yearn_treasury/rules/ignore/swaps/yla.py +28 -0
  74. yearn_treasury/rules/ignore/unit.cp311-win_amd64.pyd +0 -0
  75. yearn_treasury/rules/ignore/unit.py +40 -0
  76. yearn_treasury/rules/ignore/weth.cp311-win_amd64.pyd +0 -0
  77. yearn_treasury/rules/ignore/weth.py +48 -0
  78. yearn_treasury/rules/ignore/ygov.cp311-win_amd64.pyd +0 -0
  79. yearn_treasury/rules/ignore/ygov.py +16 -0
  80. yearn_treasury/rules/other_expense/__init__.cp311-win_amd64.pyd +0 -0
  81. yearn_treasury/rules/other_expense/__init__.py +7 -0
  82. yearn_treasury/rules/other_expense/boost.cp311-win_amd64.pyd +0 -0
  83. yearn_treasury/rules/other_expense/boost.py +49 -0
  84. yearn_treasury/rules/other_expense/bugs.cp311-win_amd64.pyd +0 -0
  85. yearn_treasury/rules/other_expense/bugs.py +81 -0
  86. yearn_treasury/rules/other_expense/donations.cp311-win_amd64.pyd +0 -0
  87. yearn_treasury/rules/other_expense/donations.py +43 -0
  88. yearn_treasury/rules/other_expense/dyfi.cp311-win_amd64.pyd +0 -0
  89. yearn_treasury/rules/other_expense/dyfi.py +29 -0
  90. yearn_treasury/rules/other_expense/events.cp311-win_amd64.pyd +0 -0
  91. yearn_treasury/rules/other_expense/events.py +21 -0
  92. yearn_treasury/rules/other_expense/match_on_hash.yaml +43 -0
  93. yearn_treasury/rules/other_expense/match_on_to_address.yaml +8 -0
  94. yearn_treasury/rules/other_expense/misc.cp311-win_amd64.pyd +0 -0
  95. yearn_treasury/rules/other_expense/misc.py +49 -0
  96. yearn_treasury/rules/other_expense/revshare.cp311-win_amd64.pyd +0 -0
  97. yearn_treasury/rules/other_expense/revshare.py +20 -0
  98. yearn_treasury/rules/other_income/__init__.cp311-win_amd64.pyd +0 -0
  99. yearn_treasury/rules/other_income/__init__.py +2 -0
  100. yearn_treasury/rules/other_income/airdrops.cp311-win_amd64.pyd +0 -0
  101. yearn_treasury/rules/other_income/airdrops.py +30 -0
  102. yearn_treasury/rules/other_income/match_on_hash.yaml +21 -0
  103. yearn_treasury/rules/other_income/misc.cp311-win_amd64.pyd +0 -0
  104. yearn_treasury/rules/other_income/misc.py +80 -0
  105. yearn_treasury/rules/revenue/__init__.py +6 -0
  106. yearn_treasury/rules/revenue/bribes.cp311-win_amd64.pyd +0 -0
  107. yearn_treasury/rules/revenue/bribes.py +26 -0
  108. yearn_treasury/rules/revenue/farming.cp311-win_amd64.pyd +0 -0
  109. yearn_treasury/rules/revenue/farming.py +56 -0
  110. yearn_treasury/rules/revenue/keepcoins.cp311-win_amd64.pyd +0 -0
  111. yearn_treasury/rules/revenue/keepcoins.py +63 -0
  112. yearn_treasury/rules/revenue/match_on_hash.yaml +4 -0
  113. yearn_treasury/rules/revenue/seasolver.cp311-win_amd64.pyd +0 -0
  114. yearn_treasury/rules/revenue/seasolver.py +23 -0
  115. yearn_treasury/rules/revenue/vaults.py +168 -0
  116. yearn_treasury/rules/revenue/yteams.cp311-win_amd64.pyd +0 -0
  117. yearn_treasury/rules/revenue/yteams.py +17 -0
  118. yearn_treasury/shitcoins.py +141 -0
  119. yearn_treasury/vaults.cp311-win_amd64.pyd +0 -0
  120. yearn_treasury/vaults.py +50 -0
  121. yearn_treasury/wallets.yaml +54 -0
  122. yearn_treasury/yteams.py +208 -0
  123. yearn_treasury-0.0.44.dist-info/METADATA +86 -0
  124. yearn_treasury-0.0.44.dist-info/RECORD +128 -0
  125. yearn_treasury-0.0.44.dist-info/WHEEL +5 -0
  126. yearn_treasury-0.0.44.dist-info/entry_points.txt +2 -0
  127. yearn_treasury-0.0.44.dist-info/top_level.txt +2 -0
  128. yearn_treasury__mypyc.cp311-win_amd64.pyd +0 -0
@@ -0,0 +1,50 @@
1
+ """
2
+ Vault discovery and tracking utilities for Yearn Treasury.
3
+
4
+ This module discovers Yearn vault contracts and maps them to their
5
+ underlying assets using Yearn's on-chain registry contracts. It
6
+ provides dictionaries for v1 and v2 vaults, supporting transaction
7
+ classification, analytics, and reporting across the Yearn Treasury
8
+ system.
9
+
10
+ Key Responsibilities:
11
+ - Discover and map all v1 and v2 vault contracts to underlying assets at startup.
12
+ - Provide lookup tables for use in vault deposit/withdrawal sort rules.
13
+ """
14
+
15
+ from typing import Dict, Final
16
+
17
+ from brownie import chain
18
+ from eth_typing import ChecksumAddress
19
+ from y import Contract, Events, Network
20
+
21
+ from yearn_treasury._ens import resolver, topics
22
+
23
+
24
+ v1: Final[Dict[Contract, ChecksumAddress]] = {}
25
+ """Vault contract -> underlying address"""
26
+
27
+ v2: Final[Dict[ChecksumAddress, Contract]] = {}
28
+ """Vault address -> vault contract"""
29
+
30
+
31
+ if chain.id == Network.Mainnet:
32
+ _v1_addresses_provider = Contract("0x9be19Ee7Bc4099D62737a7255f5c227fBcd6dB93")
33
+ _addresses_generator_v1_vaults = Contract(
34
+ _v1_addresses_provider.addressById("ADDRESSES_GENERATOR_V1_VAULTS")
35
+ )
36
+
37
+ for vault in map(Contract, _addresses_generator_v1_vaults.assetsAddresses()):
38
+ v1[vault] = vault.token()
39
+
40
+ now = chain.height
41
+
42
+ # TODO: make resolve_ens util in eth-port and refactor this out
43
+ v2_registries = [
44
+ event["newAddress"].hex() for event in Events(addresses=resolver, topics=topics).events(now)
45
+ ]
46
+
47
+ for event in Events(addresses=list(map(str, v2_registries))).events(now):
48
+ if event.name == "NewVault":
49
+ vault_address = event["vault"]
50
+ v2[vault_address] = Contract(vault_address)
@@ -0,0 +1,54 @@
1
+ # Treasury
2
+ "0x93A62dA5a14C80f265DAbC077fCEE437B1a0Efde":
3
+ networks:
4
+ - 1
5
+ "0x89716Ad7EDC3be3B35695789C475F3e7A3Deb12a":
6
+ networks:
7
+ - 250
8
+
9
+ # yChad
10
+ "0xFEB4acf3df3cDEA7399794D0869ef76A6EfAff52":
11
+ networks:
12
+ - 1
13
+ "0xC0E2830724C946a6748dDFE09753613cd38f6767":
14
+ networks:
15
+ - 250
16
+
17
+ # Yearn Treasury V1
18
+ "0xb99a40fcE04cb740EB79fC04976CA15aF69AaaaE":
19
+ networks:
20
+ - 1
21
+
22
+ # Yearn KP3R Wallet
23
+ "0x5f0845101857d2A91627478e302357860b1598a1":
24
+
25
+ # ySwap Multisig
26
+ "0x7d2aB9CA511EBD6F03971Fb417d3492aA82513f0":
27
+
28
+ # yMechs Multisig
29
+ "0x2C01B4AD51a67E2d8F02208F54dF9aC4c0B778B6":
30
+ end:
31
+ block:
32
+ 1: 17162286
33
+
34
+ # Fee Reimbursement Stash
35
+ "0xE376e8e8E3B0793CD61C6F1283bA18548b726C2e":
36
+
37
+ # New token dumping wallet
38
+ "0xC001d00d425Fa92C4F840baA8f1e0c27c4297a0B":
39
+
40
+ # veFarming wallet
41
+ "0x4fc1b14cD213e7B6212145Ba4f180C3d53d1A11e":
42
+
43
+ ### yRoboTreasury Wallets ###
44
+ # https://github.com/yearn/yRoboTreasury/blob/master/deployment.json
45
+
46
+ # Treasury
47
+ "0xEf77cc176c748d291EfB6CdC982c5744fC7211c8":
48
+ networks:
49
+ - 1
50
+
51
+ # Stables reserve
52
+ "0x278374fFb10B7D16E7633444c13e6E565EA57c28":
53
+ networks:
54
+ - 1
@@ -0,0 +1,208 @@
1
+ # This is a loose copy of an old script and will not likely be refactored into something pretty
2
+ import os
3
+ from datetime import datetime, timedelta, timezone
4
+ from decimal import Decimal
5
+ from functools import lru_cache
6
+ from logging import getLogger
7
+ from typing import Any, Dict, Final, List, Set, Tuple
8
+
9
+ import a_sync
10
+ from brownie import chain
11
+ from eth_portfolio.structs import TokenTransfer
12
+ from eth_portfolio._ydb.token_transfers import InboundTokenTransfers
13
+ from pandas import DataFrame, MultiIndex
14
+ from y import Contract, Network, get_block_at_timestamp
15
+ from y.exceptions import ContractNotVerified
16
+
17
+ from yearn_treasury.constants import ZERO_ADDRESS
18
+
19
+
20
+ DATA_FOLDER: Final = os.path.join(".", "data")
21
+ OUTPUT_FILE: Final = os.path.join(DATA_FOLDER, f"teams_revenue_{chain.id}.csv")
22
+ NUMBER_OF_MONTHS_TO_INCLUDE_IN_REPORT: Final = 36
23
+
24
+ if not os.path.exists(DATA_FOLDER):
25
+ os.makedirs(DATA_FOLDER)
26
+
27
+
28
+ # TODO: maybe move this into constants for reuse
29
+ yteams_addresses = {
30
+ Network.Mainnet: {
31
+ "v3": {
32
+ "ms": "0x33333333D5eFb92f19a5F94a43456b3cec2797AE",
33
+ "splits": {"0x2A12CAA2c13Af03c117D836CA3811a5Ca946133B": 12.5},
34
+ },
35
+ "dinobots": {
36
+ "ms": "0x2C01B4AD51a67E2d8F02208F54dF9aC4c0B778B6",
37
+ "splits": {"0xC4f238633A85A854C4702d2c66264771D1fa7904": 17.5},
38
+ },
39
+ "ylockers": {
40
+ "ms": "0x4444AAAACDBa5580282365e25b16309Bd770ce4a",
41
+ "splits": {
42
+ "0xac580302548FCCBBf00020de20C3A8AA516821AD": 2.5,
43
+ "0x794f80E899c772de9E326eC83cCfD8D94e208B49": 6.25,
44
+ "0x5FF0f87b05806ce89967638CA727Af8309d92A89": 12.5,
45
+ "0x5A7575368797695BefD785f546C6b8B7e9D37f8c": 15.625,
46
+ },
47
+ },
48
+ # "ylockers others": {"ms": "0x4444AAAACDBa5580282365e25b16309Bd770ce4a","splits":{"0x5FF0f87b05806ce89967638CA727Af8309d92A89":12.5, "0x5A7575368797695BefD785f546C6b8B7e9D37f8c":15.625}},
49
+ "yaudit": {
50
+ "ms": "0x8973B848775a87a0D5bcf262C555859b87E6F7dA",
51
+ "splits": {
52
+ "0xd7A1DBe236A38528D54317415a530b2326068373": 35,
53
+ "0xF104F38592287e25868BD8C3dcCCa1a311916f88": 35,
54
+ "0x1a9D272C3b7fE427639702A332D51348213B0bC1": 20,
55
+ },
56
+ },
57
+ "yeth": {
58
+ "ms": "0xeEEEEeeeEe274C3CCe13f77C85d8eBd9F7fd4479",
59
+ "splits": {"0x14EFe6390C6758E3fE4379A14e3B329274b1b072": 25},
60
+ },
61
+ "yfarm": {
62
+ "ms": "0x55157997cb324a374cCd7c40914ff879Fd9D515C",
63
+ "splits": {"0x0B3cCe59E038373F6008D9266B6D6eB4d21689b1": 50},
64
+ },
65
+ "sms": {
66
+ "ms": "0x16388463d60FFE0661Cf7F1f31a7D658aC790ff7",
67
+ "splits": {"0xd6748776CF06a80EbE36cd83D325B31bb916bf54": 25},
68
+ },
69
+ }
70
+ }[Network(chain.id)]
71
+
72
+
73
+ logger: Final = getLogger(__name__)
74
+
75
+ _not_verified: Final[Set[str]] = set()
76
+ _warned: Final[Set[TokenTransfer]] = set()
77
+
78
+ _known_tokens_without_prices: Final = frozenset({"SAFE", "vCOW"})
79
+ """When there is a PriceError for these tokens, no logs will be emitted."""
80
+
81
+
82
+ @lru_cache(maxsize=None)
83
+ def transfers_for(wallet: str) -> InboundTokenTransfers:
84
+ return InboundTokenTransfers(wallet, 0, load_prices=True) # type: ignore [arg-type]
85
+
86
+
87
+ async def calculate_teams_revenue_expenses() -> None:
88
+ logger.info("Starting process to calculate teams revenues and expenses")
89
+ timestamps = get_timestamps_for_report()
90
+
91
+ async def get_coros_for_timestamp(dt: datetime) -> Dict[str, Dict[str, Decimal]]:
92
+ return await a_sync.gather(
93
+ {
94
+ label: total(label, wallet_info, dt)
95
+ for label, wallet_info in yteams_addresses.items()
96
+ }
97
+ )
98
+
99
+ all_data = await a_sync.gather({dt: get_coros_for_timestamp(dt) for dt in timestamps})
100
+
101
+ result = {
102
+ (dt, teams, movement): values
103
+ for dt, data in all_data.items()
104
+ for teams, info in data.items()
105
+ for movement, values in info.items()
106
+ }
107
+ df = DataFrame.from_dict(result, orient="index")
108
+ print("------------")
109
+ # print(df.index)
110
+ # print(df.head(10))
111
+ df.index = MultiIndex.from_tuples(df.index)
112
+ print("********")
113
+ # print(df.index)
114
+ df.reset_index(inplace=True)
115
+ df.columns = ["datetime", "team", "label", "value"]
116
+ df.to_csv(OUTPUT_FILE)
117
+ logger.info(
118
+ f"Finished processing yteams calculations and saved file to {os.path.abspath(OUTPUT_FILE)}"
119
+ )
120
+
121
+
122
+ def get_timestamps_for_report() -> List[datetime]:
123
+ now = datetime.now(tz=timezone.utc)
124
+ prev_month_end = datetime(
125
+ year=now.year,
126
+ month=now.month,
127
+ day=1,
128
+ hour=0,
129
+ minute=0,
130
+ second=0,
131
+ microsecond=0,
132
+ tzinfo=timezone.utc,
133
+ ) - timedelta(microseconds=1)
134
+ datetimes = []
135
+ print("Exporting report for timestamps:")
136
+ for _ in range(NUMBER_OF_MONTHS_TO_INCLUDE_IN_REPORT):
137
+ print(f" - {prev_month_end}")
138
+ datetimes.append(prev_month_end)
139
+ prev_month_end -= timedelta(days=prev_month_end.day)
140
+ return datetimes
141
+
142
+
143
+ async def total(label: str, wallet_info: Dict[str, Any], timestamp: datetime) -> Dict[str, Decimal]:
144
+ rev = await sum_revenue_transfers.sum(wallet_info["splits"].items(), timestamp=timestamp)
145
+ grants = await sum_grants_received(wallet_info["ms"], timestamp)
146
+ if rev > 10_000_000:
147
+ raise ValueError(rev)
148
+ if grants > 10_000_000:
149
+ raise ValueError(grants)
150
+ net = rev - grants
151
+ if label == "yaudit":
152
+ logger.info("--- %s thru %s ---", label, timestamp)
153
+ logger.info("inbound %s", rev)
154
+ logger.info("grants -%s", grants)
155
+ logger.info("net %s", net)
156
+ return {"revenue": rev, "grants": grants, "total": net}
157
+
158
+
159
+ @a_sync.a_sync(default="async")
160
+ async def sum_revenue_transfers(params: Tuple[str, Decimal], timestamp: datetime) -> Decimal:
161
+ wallet, rev_share = params
162
+ block = await get_block_at_timestamp(timestamp)
163
+ total = Decimal(0)
164
+ async for transfer in transfers_for(wallet).yield_thru_block(block):
165
+ transfer = await transfer
166
+ if transfer is None:
167
+ # failed to decode, probably shitcoin
168
+ continue
169
+ if not transfer.value:
170
+ # zero value transfer
171
+ continue
172
+ if transfer.price:
173
+ total += transfer.value * transfer.price
174
+ elif transfer not in _warned and transfer.token not in _known_tokens_without_prices:
175
+ logger.warning(f"BAD: {transfer}")
176
+ _warned.add(transfer)
177
+ return round(total * Decimal((100 - rev_share) / 100), 8)
178
+
179
+
180
+ async def sum_grants_received(wallet: str, timestamp: datetime) -> Decimal:
181
+ grants = Decimal(0)
182
+ block = await get_block_at_timestamp(timestamp)
183
+ async for transfer in transfers_for(wallet).yield_thru_block(block):
184
+ transfer = await transfer
185
+ if transfer is None:
186
+ # failed to decode, probably shitcoin
187
+ continue
188
+ if not transfer.value:
189
+ # zero value transfer
190
+ continue
191
+ if transfer.price:
192
+ if transfer.from_address != ZERO_ADDRESS:
193
+ try:
194
+ contract = await Contract.coroutine(transfer.from_address)
195
+ if (
196
+ hasattr(contract, "recipient") and await contract.recipient == wallet
197
+ ) or transfer.from_address == "0xFEB4acf3df3cDEA7399794D0869ef76A6EfAff52":
198
+ grants += transfer.value * transfer.price
199
+ except ContractNotVerified as e:
200
+ if str(e) not in _not_verified:
201
+ _not_verified.add(str(e))
202
+ logger.debug(f"{e.__class__.__name__}: {e}")
203
+ except Exception as e:
204
+ logger.warning(f"{e.__class__.__name__}: {e}")
205
+ elif transfer not in _warned and transfer.token not in _known_tokens_without_prices:
206
+ logger.warning(f"BAD: {transfer}")
207
+ _warned.add(transfer)
208
+ return round(grants, 8)
@@ -0,0 +1,86 @@
1
+ Metadata-Version: 2.4
2
+ Name: yearn_treasury
3
+ Version: 0.0.44
4
+ Summary: This WIP library runs the eth-portfolio and dao-treasury exporters for the Yearn Finance treasury.
5
+ Classifier: Development Status :: 3 - Alpha
6
+ Classifier: Intended Audience :: Developers
7
+ Classifier: Intended Audience :: Science/Research
8
+ Classifier: Intended Audience :: End Users/Desktop
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Programming Language :: Python :: 3.10
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: Implementation :: CPython
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Topic :: Software Development :: Libraries
16
+ Requires-Python: >=3.10,<3.13
17
+ Description-Content-Type: text/markdown
18
+ Requires-Dist: dao-treasury==0.0.66
19
+ Requires-Dist: faster-async-lru<3,>=2.0.5
20
+ Dynamic: classifier
21
+ Dynamic: description
22
+ Dynamic: description-content-type
23
+ Dynamic: requires-dist
24
+ Dynamic: requires-python
25
+ Dynamic: summary
26
+
27
+ This WIP library runs the [dao-treasury](https://github.com/BobTheBuidler/dao-treasury) exporter for the [Yearn Finance](https://yearn.fi/) treasury.
28
+
29
+ ## Installation
30
+
31
+ - **pip:**
32
+ ```bash
33
+ pip install yearn-treasury
34
+ ```
35
+
36
+ - **From Source:**
37
+ ```bash
38
+ git clone https://github.com/BobTheBuidler/yearn-treasury
39
+ cd yearn-treasury
40
+ poetry install
41
+ ```
42
+
43
+ ## Requirements
44
+ - Python 3.10 or higher.
45
+ - At least 16GB of RAM.
46
+ - All dependencies installed as specified in the project’s pyproject.toml file.
47
+
48
+ ## Prerequisites
49
+
50
+ - First, you will need to bring your own archive node. This can be one you run yourself, or one from one of the common providers (Tenderly, Alchemy, QuickNode, etc.). Your archive node must have tracing enabled (free-tier Alchemy nodes do not support this option).
51
+ - You must configure a [brownie network](https://eth-brownie.readthedocs.io/en/stable/network-management.html) to use your RPC.
52
+ - You will need an auth token for [Etherscan](https://etherscan.io/)'s API. Follow their [guide](https://docs.etherscan.io/etherscan-v2/getting-an-api-key) to get your key, and set env var `ETHERSCAN_TOKEN` with its value.
53
+ - You'll also need [Docker](https://www.docker.com/get-started/) installed on your system. If on MacOS, you will need to leave Docker Desktop open while Yearn Treasury is running.
54
+
55
+ ## Usage
56
+
57
+ Run the treasury export tool:
58
+
59
+ ```bash
60
+ # For pip installations:
61
+ yearn-treasury --network mainnet --interval 12h
62
+ ```
63
+
64
+ For local development (from source installation), use:
65
+ ```bash
66
+ poetry run yearn-treasury --network mainnet --interval 12h
67
+ ```
68
+
69
+ **CLI Options:**
70
+ - `--network`: The id of the brownie network the exporter will connect to (default: mainnet)
71
+ - `--interval`: The time interval between each data snapshot (default: 12h)
72
+ - `--daemon`: Run the export process in the background (default: False) (NOTE: currently unsupported)
73
+ - `--grafana-port`: Set the port for the Grafana dashboard where you can view data (default: 3004)
74
+ - `--renderer-port`: Set the port for the report rendering service (default: 8080)
75
+ - `--victoria-port`: Set the port for the Victoria metrics reporting endpoint (default: 8430)
76
+
77
+ After running the command, the export script will run continuously until you close your terminal.
78
+ To access the dashboard, open your browser and navigate to [http://localhost:3004](http://localhost:3004) for the [dao-treasury](https://github.com/BobTheBuidler/dao-treasury) dashboard.
79
+
80
+ Enjoy!
81
+
82
+ ## Screenshots
83
+
84
+ #### [Transactions Dashboard](https://bobthebuidler.github.io/yearn-treasury/transactions.html)
85
+
86
+ ![image](https://github.com/user-attachments/assets/4293b62d-827a-4bae-af4f-014c99511f99)
@@ -0,0 +1,128 @@
1
+ yearn_treasury__mypyc.cp311-win_amd64.pyd,sha256=g9l3MRx1GOY2WX-296UbXDvOfT30FPtne0pff3pN620,419328
2
+ yearn_treasury/__init__.py,sha256=1G3sqPVtNq0SsOCLXjZ8NOMiRYfdQZuRezMEpyrNjmU,426
3
+ yearn_treasury/_db.cp311-win_amd64.pyd,sha256=g24p5bRT6FoX3Rcwkfe5m6RvVdoeSm8ErAsC5s1cFwk,10752
4
+ yearn_treasury/_db.py,sha256=L5DQolJAx1gg2FAJxEocgiJUVuhWV7zJw4p676dwPvQ,1616
5
+ yearn_treasury/_ens.cp311-win_amd64.pyd,sha256=PhiZK1FcOCT3lBzOAa4NmBGCXEDllb_LrFwkj8AhvCE,10752
6
+ yearn_treasury/_ens.py,sha256=oBn-R1n8dLnM93xsq08p1jYPZRQez9ISVVXS0nJNuSc,1068
7
+ yearn_treasury/_logging.cp311-win_amd64.pyd,sha256=ohAzIpDNatquk6DPbLxt_vllwZTem05Ph74c7AgZ8f8,10752
8
+ yearn_treasury/_logging.py,sha256=I4nWIxBC1ApCnSCS2vVztF-kl6LoGf0_yVxeBYF07Pw,1829
9
+ yearn_treasury/address_labels.yaml,sha256=R8XC7ATHxLxfR8g1Rl4YDXyOyO8w5a08iw-9_y50XuU,1529
10
+ yearn_treasury/constants.py,sha256=kz9lYQv3Z-O8YI3xfzwa__1FYI7TcTqMXMMwCKjg0UQ,3722
11
+ yearn_treasury/main.py,sha256=4ZWK926ujBOScRJ5QANMK8JMje6FEDAOXgNSLs8WlWc,6653
12
+ yearn_treasury/py.typed,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
13
+ yearn_treasury/shitcoins.py,sha256=s08VMGosNXdQy-7SOQvRUonl99hUd9GnxSCrCwkqv98,7700
14
+ yearn_treasury/vaults.cp311-win_amd64.pyd,sha256=1N5K8r9QSPh9_H-628JDkI0jR3iuIjQNxPNU8vcykGM,10752
15
+ yearn_treasury/vaults.py,sha256=xv7am1RxU_O4RuWbgV0-1IqIOA1rwsvoaV5jiSnxpPA,1745
16
+ yearn_treasury/wallets.yaml,sha256=VP2A4S-W6R6k1yWDHM_ptrhNlO-dwXZhrJg0Bm8qz0w,1137
17
+ yearn_treasury/yteams.py,sha256=8YWXEueHT4MajTVmRRIPYFmQs6AIR0zUSdS2x9usCts,8201
18
+ yearn_treasury/budget/__init__.cp311-win_amd64.pyd,sha256=qAotI6aWgIc96ysSPT5yZapY5Xx6Ygfs5IKrk-Md8JE,10752
19
+ yearn_treasury/budget/__init__.py,sha256=LY4Isom1ARgNwIpaz9W0ZUcbxHfzw3hC0eLVjLwHdFs,264
20
+ yearn_treasury/budget/_request.cp311-win_amd64.pyd,sha256=EGUy6jAStKhF6KqygHh0hsydr0OAzRYRX_H5HDXIwQ8,10752
21
+ yearn_treasury/budget/_request.py,sha256=3yw_HKHBy8ePqQytGFLSao9TOoYTHsXqPnap6odrNjk,1054
22
+ yearn_treasury/budget/_requests.cp311-win_amd64.pyd,sha256=sEtRmB8O6gsZNVrDwQDiDScUjp5ZeUN3_z_A4vdQ0xc,10752
23
+ yearn_treasury/budget/_requests.py,sha256=xhjf-Uj_1y2KMijrVrS_ZtSkLJUdww3W8LA7B2SNMKg,3541
24
+ yearn_treasury/rules/__init__.py,sha256=MUwQaDL-f-S3AB_YS3H4k_6Y1VFgPjNsIIVXpL-9Gko,591
25
+ yearn_treasury/rules/constants.cp311-win_amd64.pyd,sha256=78iX7e7qogq-7UyA57CpsVTkbg7_ZA4-awK0wv9pQZI,10752
26
+ yearn_treasury/rules/constants.py,sha256=LYme6yibxVEZR5CxTZkD0GOyjHO8HspPyDtQnwlOSzE,563
27
+ yearn_treasury/rules/cost_of_revenue/__init__.py,sha256=rWPI3t4FRk_QCkdA5fDmgEKRU3p9JACoQbn184AxGD8,56
28
+ yearn_treasury/rules/cost_of_revenue/gas.cp311-win_amd64.pyd,sha256=Rv-5OuMR2is3fV2nj5gGi_kdgP4tMhCag48r2oAq_c4,10752
29
+ yearn_treasury/rules/cost_of_revenue/gas.py,sha256=WUJ6SN-xSwLveYjwPGbjmMh-V4XB7qLslYDrx792gFY,2290
30
+ yearn_treasury/rules/cost_of_revenue/match_on_hash.yaml,sha256=Z7r1CIDzNsSoLWpmUUbXonqE4Vzo0-u8RzISDQGJmNk,562
31
+ yearn_treasury/rules/expense/__init__.cp311-win_amd64.pyd,sha256=ZVmKu_UJ3pd-qqMlNoLt1XLU0HHkdcoAxFdVcHsYeMY,10752
32
+ yearn_treasury/rules/expense/__init__.py,sha256=3YzO4g2TOCNg4oWGd7nfWkl18J1A6nmqQF7zezLND8E,215
33
+ yearn_treasury/rules/expense/general.cp311-win_amd64.pyd,sha256=PlpLpWtYMseaqTWi7xQa6AoN1G2rakuJVc98rlc6jpY,10752
34
+ yearn_treasury/rules/expense/general.py,sha256=Ale0ignb0wDN8RyyhMND3j7SUc4bLi39kmSVP-wsmus,377
35
+ yearn_treasury/rules/expense/infrastructure.cp311-win_amd64.pyd,sha256=7Bad6dYFfulr3K_SMgmSgze6EIbQ53PzWTtNmZJFi4I,10752
36
+ yearn_treasury/rules/expense/infrastructure.py,sha256=rU-HJLFnk-AvwQFRrwNuP1xWaYZMd16LiD97HXqJ9VA,1677
37
+ yearn_treasury/rules/expense/match_on_hash.yaml,sha256=XVYA55_0qW8X99VOM7ojD6ttqW4fgnljXiQlaFU0c7Q,2770
38
+ yearn_treasury/rules/expense/match_on_to_address.yaml,sha256=zq0AB0TD2k87jQ39ZtUZNSyspuvzJy80fvcDh102zMI,213
39
+ yearn_treasury/rules/expense/people.cp311-win_amd64.pyd,sha256=ceZz6gZMCK84Nc7ZpqB2FQpN9HqwOiSSp428zaXPSIA,10752
40
+ yearn_treasury/rules/expense/people.py,sha256=JKPAiCKHSBX2pqEZdWRt0yytI3kGcstskUz50K23EvE,3604
41
+ yearn_treasury/rules/expense/security.cp311-win_amd64.pyd,sha256=gjVoh1NQY0afN73zcxC2tppY7924jdSebbvVZQfCQOE,10752
42
+ yearn_treasury/rules/expense/security.py,sha256=uQVMejp_fptKHLeuaR7X9-Yh8Tgh125_qEGG7nzwi9s,4737
43
+ yearn_treasury/rules/ignore/__init__.py,sha256=8Wuwv6JO4VeMx8U4trNo3ZP5z3ZBIgQk9eFbZxvskPQ,396
44
+ yearn_treasury/rules/ignore/general.cp311-win_amd64.pyd,sha256=BOeBwfi22NIWZyDkjvGxclnGwTRu1XywbpJD-5hGtRg,10752
45
+ yearn_treasury/rules/ignore/general.py,sha256=DJEvcZUgfsPlJADu_dmXrWGiUguuiXG2Tid7tKKMDjE,452
46
+ yearn_treasury/rules/ignore/maker.py,sha256=Ll89KDgmBt3DcOxjk2GwfNROp3U4GKO0BM1UmXl1s0s,3549
47
+ yearn_treasury/rules/ignore/passthru.py,sha256=TLy98IufuImGKiJahU7CD6plwTf0a76vBQQzc5M8SJc,12338
48
+ yearn_treasury/rules/ignore/staking.py,sha256=RamaHJyGSmQZHzUEBIKemPIbeAMiUN4toW36AuxakiA,3793
49
+ yearn_treasury/rules/ignore/unit.cp311-win_amd64.pyd,sha256=JXFM1whdIo0SmR9h-g9EDusPwVKcXwlr8UIKkUXztrs,10752
50
+ yearn_treasury/rules/ignore/unit.py,sha256=yAKzDrjbCBYyHGzNHAuF2U1r4Ru_59QXjRy4uVFDf38,1294
51
+ yearn_treasury/rules/ignore/weth.cp311-win_amd64.pyd,sha256=bw9B18N0ioUsJI0sPNjNmCzI2pTN7qQm9DY426oMfDI,10752
52
+ yearn_treasury/rules/ignore/weth.py,sha256=896V7Z5L553t0D02FZaj2c-y3QO-vN5ESWlIQzscfC4,1512
53
+ yearn_treasury/rules/ignore/ygov.cp311-win_amd64.pyd,sha256=O7XaaBuT_4vJek2HwfmYxETBMPZb4cwK9w0KrPojvwY,10752
54
+ yearn_treasury/rules/ignore/ygov.py,sha256=XioDvPA0wLtwvJ_Rdf1QRUa-ZhFvrZP7Jc0IFwfsfTM,422
55
+ yearn_treasury/rules/ignore/swaps/__init__.py,sha256=EMtAV7n-EIIEnghH_0JJen--EbLb2L1aV6Z0nAyIOfA,1136
56
+ yearn_treasury/rules/ignore/swaps/_skip_tokens.py,sha256=_ZtBUDgYmuAeqggA6QwiX1gUwaaPocXQWbkoHnI3s9o,161
57
+ yearn_treasury/rules/ignore/swaps/aave.py,sha256=JztS0Thqil5p15BO_ts-7MEqLHZ_lIQWjpNivRsgZS8,2890
58
+ yearn_treasury/rules/ignore/swaps/auctions.cp311-win_amd64.pyd,sha256=cheDFMlIc5GCIGrN9VUvnHwfx4nD9cDrlxgGF7bhC1Q,10752
59
+ yearn_treasury/rules/ignore/swaps/auctions.py,sha256=yKfPC-xhU95llOuR5ssNqg9_Q0nPGa4xOIn5YkmMEAQ,1068
60
+ yearn_treasury/rules/ignore/swaps/compound.py,sha256=guuz5LgpiLbToF0cS71mGv78AioSlvYNkKCiq7liwf8,2648
61
+ yearn_treasury/rules/ignore/swaps/conversion_factory.cp311-win_amd64.pyd,sha256=L_9N6l0POBTvcwhsmmaomqtWp1-jn1rpbqQmNubxXw4,10752
62
+ yearn_treasury/rules/ignore/swaps/conversion_factory.py,sha256=eHD3koaUX9moWbRVNsenrwA-ABk7_SM2Q1-r9oZscKI,930
63
+ yearn_treasury/rules/ignore/swaps/cowswap.py,sha256=oqhiA2MsNCW5fhvgNCSr0II2zQjdcEdgEn80pnHE1uE,4145
64
+ yearn_treasury/rules/ignore/swaps/curve.py,sha256=xOj230gU5KN8XakqnYmk33uZDDm9Q7HeevMWmcaA2-E,7440
65
+ yearn_treasury/rules/ignore/swaps/gearbox.cp311-win_amd64.pyd,sha256=ohPBOb5i_tBchIlZJrvTd3hzNbDk184LyCnGaz96hfM,10752
66
+ yearn_treasury/rules/ignore/swaps/gearbox.py,sha256=mFxtrSPCQUi-U-tO7bRgdzLbG7DHISRaGWJplaLwJgY,1141
67
+ yearn_treasury/rules/ignore/swaps/iearn.cp311-win_amd64.pyd,sha256=8bLNLGvjiNaUMHy-ww5t3QCyYV9U1LqhnNLp_rnaQJo,10752
68
+ yearn_treasury/rules/ignore/swaps/iearn.py,sha256=apyG-7hFbPZqgPBn4r6TKnZpFTL3iBOJSEbQi7EEQE8,1623
69
+ yearn_treasury/rules/ignore/swaps/otc.cp311-win_amd64.pyd,sha256=mnwvUnRXIrU2SfAjn4xv_Jkz9UD8Mpkbr51u2peOxT4,10752
70
+ yearn_treasury/rules/ignore/swaps/otc.py,sha256=v0ztjqmxyO0GpebeaTAR-ycoOGd6_0zjTNljcj9eXWQ,2692
71
+ yearn_treasury/rules/ignore/swaps/pooltogether.cp311-win_amd64.pyd,sha256=2UA-eIxJi77HYNNFpGJSSyiODflMtaiFOmtHmB4cRA0,10752
72
+ yearn_treasury/rules/ignore/swaps/pooltogether.py,sha256=T42OdErDLoPV_hEEsxDz-Pa2pvIDvyRzMQnIprzRvw4,834
73
+ yearn_treasury/rules/ignore/swaps/synthetix.cp311-win_amd64.pyd,sha256=WDkh_01qodjNQmCs8Pvne5Kmt5Vj4rtvSh0AvXkIypU,10752
74
+ yearn_treasury/rules/ignore/swaps/synthetix.py,sha256=USI34Jrfdjc9hKAvyy77m0JpXu0jvPJ-GTWTUNn_Te8,378
75
+ yearn_treasury/rules/ignore/swaps/uniswap.py,sha256=p6LqtiQRIFXBGw5hmY6Cppg286hAHLPW1xAF6OHpXug,13428
76
+ yearn_treasury/rules/ignore/swaps/unwrapper.cp311-win_amd64.pyd,sha256=LxIJNDBTKqkn003KxZg4tb0JxmrAtw-S1kMBFVRSgXI,10752
77
+ yearn_treasury/rules/ignore/swaps/unwrapper.py,sha256=FRVEq0jn7EWSp7Q_MvdJFLDXl-P2ujlVZXa1mqSvO0w,477
78
+ yearn_treasury/rules/ignore/swaps/vaults.cp311-win_amd64.pyd,sha256=YxtJexKj1bd5YTKpnqm_K7aqgcwpDaGpqgASwFGqxJU,10752
79
+ yearn_treasury/rules/ignore/swaps/vaults.py,sha256=MfjXLRsSMwDuiTGMftUABxfprs3FreAjl_nfqyJW51o,10982
80
+ yearn_treasury/rules/ignore/swaps/woofy.cp311-win_amd64.pyd,sha256=WIMQmXBjylj1dZEKhk2SJf7FGRc9P29QaLxImMtHZQg,10752
81
+ yearn_treasury/rules/ignore/swaps/woofy.py,sha256=PWqrX7eH-IhD0PyhL-_zWEstDWNeC619gcnuFKp866U,3198
82
+ yearn_treasury/rules/ignore/swaps/yfi.cp311-win_amd64.pyd,sha256=ZnUikThZUuHfsoGgGvBoglIz_9oNvvwzP266uv47azY,10752
83
+ yearn_treasury/rules/ignore/swaps/yfi.py,sha256=kpWI0nqIKpAEWkXqNjr14lUCThkFS2p7GBAh2fTK78o,4862
84
+ yearn_treasury/rules/ignore/swaps/yla.cp311-win_amd64.pyd,sha256=koc-IIp3FVmbp-9tQgXVBuJV3z2YLjg5pZFaF031cYA,10752
85
+ yearn_treasury/rules/ignore/swaps/yla.py,sha256=I2_18sZBsIsYEhPCexX0EayNaPoRqzmMr6yylGNq1AU,916
86
+ yearn_treasury/rules/other_expense/__init__.cp311-win_amd64.pyd,sha256=N4ZAk0-IRMUawEUa05SVm_meb0Ji5sdKTUBwR0eIRxI,10752
87
+ yearn_treasury/rules/other_expense/__init__.py,sha256=K1lsFhNu4p7STAnuk_Bywbu45me5rBOTPRnuCJdcM8o,397
88
+ yearn_treasury/rules/other_expense/boost.cp311-win_amd64.pyd,sha256=U8WCfcVl_GjUmmBZsRZ8pxewqjGOx_1nbS3qyGt8cQc,10752
89
+ yearn_treasury/rules/other_expense/boost.py,sha256=Ptd1Y-FI_pdNtQNavt4BMDw725kbvADirCva1ig4TQg,2741
90
+ yearn_treasury/rules/other_expense/bugs.cp311-win_amd64.pyd,sha256=GTOwY-d1MZ7EX-WajqdHo5QLCb7z49-nMZty-IMgD-Y,10752
91
+ yearn_treasury/rules/other_expense/bugs.py,sha256=fxmOni4vM1D5hOkUVeQ-aIpIax015cF9W_Dt5zLvS1U,3095
92
+ yearn_treasury/rules/other_expense/donations.cp311-win_amd64.pyd,sha256=WYVUCkYgWMgp5fkY00O1RJwUpE4bO6v5kKx1aQotwfE,10752
93
+ yearn_treasury/rules/other_expense/donations.py,sha256=RP6SU_q4TwQP48x_AnU6lefRWPgPPhPJ6Kv6NGovAPI,1309
94
+ yearn_treasury/rules/other_expense/dyfi.cp311-win_amd64.pyd,sha256=9zgGM-tA-QefioMAQf3bYkO37SAaGXlwc_1VlhgvMm8,10752
95
+ yearn_treasury/rules/other_expense/dyfi.py,sha256=xDTJlEywuYffKTBOdBlI0XeC4ZJw9wr4XWqgRc02mZg,948
96
+ yearn_treasury/rules/other_expense/events.cp311-win_amd64.pyd,sha256=6Tkw3UtMum4zGWbM0lPb9EfKpv-M7S687csu46LVqlw,10752
97
+ yearn_treasury/rules/other_expense/events.py,sha256=LkNWmplmaLrre1IuaMBtCAmnaghZ7odIN5lIIJCYwy8,509
98
+ yearn_treasury/rules/other_expense/match_on_hash.yaml,sha256=t5uQPm5ShPJ54ehAQXotcLym-ttyvvqUy-Qr3HmkazY,2568
99
+ yearn_treasury/rules/other_expense/match_on_to_address.yaml,sha256=-vO99x1ULbHYtkdRjP8-9BFIZxAhAm6bxbpZuME5vg8,222
100
+ yearn_treasury/rules/other_expense/misc.cp311-win_amd64.pyd,sha256=jukr2mkQWe0E1UHXX8K_yHM-TGJXnqib59WdlQCvPsc,10752
101
+ yearn_treasury/rules/other_expense/misc.py,sha256=3zWC5xp3ACF4ODD1nJyGPqrjhX82RoYBBYNSkODWHTU,1703
102
+ yearn_treasury/rules/other_expense/revshare.cp311-win_amd64.pyd,sha256=7P6Bux4xNqG3vjHH4EcnV3rIYlO3Md7pDzT4Y93DCek,10752
103
+ yearn_treasury/rules/other_expense/revshare.py,sha256=PPihhs6TjeTCiRtWAAE-RO2rFIKmPA3f6--UYXi6p2I,531
104
+ yearn_treasury/rules/other_income/__init__.cp311-win_amd64.pyd,sha256=nN8zZy2NleXOkknTBsTfdliFsBDhuKEb3huhe_j9RWc,10752
105
+ yearn_treasury/rules/other_income/__init__.py,sha256=TgUNNtZrU4tMilawg6mLoiNCQpPHlRFITCNJWlHQCW8,112
106
+ yearn_treasury/rules/other_income/airdrops.cp311-win_amd64.pyd,sha256=E0FFC0vvFGgXaJafFlUFCrffMJtZYdDrsmE-Q0Nr5NU,10752
107
+ yearn_treasury/rules/other_income/airdrops.py,sha256=5uAccRiPiraKziHOTJ3f7JVbsWtMNDiHA9lYaz-2rcI,1214
108
+ yearn_treasury/rules/other_income/match_on_hash.yaml,sha256=r1BVF0OJSUO9PVvU2hssNJQ7MFv-uX-au_-5Aq_hSwg,1179
109
+ yearn_treasury/rules/other_income/misc.cp311-win_amd64.pyd,sha256=uyYb8F4FrFoO6l5VheslJYOVRfMKFu21CvqyGZj9msc,10752
110
+ yearn_treasury/rules/other_income/misc.py,sha256=sTMy4xoXDzhxIh4ls5J4AaTx0nwYh7AjKnvPj3tKBtU,2614
111
+ yearn_treasury/rules/revenue/__init__.py,sha256=OsK33eSraGuaE2dcfMsmShUWSH0BQnACIVHsZ_2G6Ok,313
112
+ yearn_treasury/rules/revenue/bribes.cp311-win_amd64.pyd,sha256=tvv79w7iC2SkgU34tViln65wZ_HhPzd7uuF0fM1XyC8,10752
113
+ yearn_treasury/rules/revenue/bribes.py,sha256=oS5oWXNv8ScOH5ypKTdM4-bn9lF5XQ7p-gVSZZYk0Js,603
114
+ yearn_treasury/rules/revenue/farming.cp311-win_amd64.pyd,sha256=KM0Yp2Hl8B7GOjDYnSnX76vlw0m2lhXFJsrzYb99H7w,10752
115
+ yearn_treasury/rules/revenue/farming.py,sha256=sACJwLdQb8TpWU4v7lAwuSuRY_BkXja1QmeO_z036rQ,1895
116
+ yearn_treasury/rules/revenue/keepcoins.cp311-win_amd64.pyd,sha256=yDHOoKdHHJV9kZGDOVlHDr2wrAZD68vbNJejeFBg-qg,10752
117
+ yearn_treasury/rules/revenue/keepcoins.py,sha256=DYs0GzewhkO9LkgmAscqQUSQxi80R18vN-_8Gg_CMxk,2037
118
+ yearn_treasury/rules/revenue/match_on_hash.yaml,sha256=RjfnJygGXNFTFzXO7ClX_EpXovu2QUrDQ9Dw4EbRAFs,167
119
+ yearn_treasury/rules/revenue/seasolver.cp311-win_amd64.pyd,sha256=2VjIyf775z6qmD7R9Eya7jGIyk-DvthDz3XONPInWY4,10752
120
+ yearn_treasury/rules/revenue/seasolver.py,sha256=w2OrfbmIKzuR6FlRhUYXAlO2Z076_vO8gTlzcLyQrUg,782
121
+ yearn_treasury/rules/revenue/vaults.py,sha256=hEeAqTSWFGq89O4sA67QiZtP7qcbhbUouGiA-_ys76A,5493
122
+ yearn_treasury/rules/revenue/yteams.cp311-win_amd64.pyd,sha256=2297pzyHRSXZJD9OrHBSeNdUT2NpYO3BOv5lAeJh2c4,10752
123
+ yearn_treasury/rules/revenue/yteams.py,sha256=K3QgNf8kz5mU97IU6rtXRV8gz0Gr69XhzyyyYo92BmE,637
124
+ yearn_treasury-0.0.44.dist-info/METADATA,sha256=ok79E73BzTkwhlDchyOknKP5QA4X79L84gu7jS6Rv9U,3746
125
+ yearn_treasury-0.0.44.dist-info/WHEEL,sha256=JLOMsP7F5qtkAkINx5UnzbFguf8CqZeraV8o04b0I8I,101
126
+ yearn_treasury-0.0.44.dist-info/entry_points.txt,sha256=SNx2hP429dAQDEjY93mQADPgbPbdSRKoF8mUUtvH3g8,60
127
+ yearn_treasury-0.0.44.dist-info/top_level.txt,sha256=m6UZasCg7vJZr-GyXS_TRPPIzcC2n18kr8ZKdr4qu4Q,37
128
+ yearn_treasury-0.0.44.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp311-cp311-win_amd64
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ yearn-treasury = yearn_treasury.main:main
@@ -0,0 +1,2 @@
1
+ yearn_treasury
2
+ yearn_treasury__mypyc