yearn-treasury 0.1.7__cp310-cp310-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. yearn_treasury/__init__.py +19 -0
  2. yearn_treasury/_db.cp310-win32.pyd +0 -0
  3. yearn_treasury/_db.py +50 -0
  4. yearn_treasury/_ens.cp310-win32.pyd +0 -0
  5. yearn_treasury/_ens.py +30 -0
  6. yearn_treasury/_logging.cp310-win32.pyd +0 -0
  7. yearn_treasury/_logging.py +41 -0
  8. yearn_treasury/address_labels.yaml +39 -0
  9. yearn_treasury/budget/__init__.cp310-win32.pyd +0 -0
  10. yearn_treasury/budget/__init__.py +6 -0
  11. yearn_treasury/budget/_request.cp310-win32.pyd +0 -0
  12. yearn_treasury/budget/_request.py +43 -0
  13. yearn_treasury/budget/_requests.cp310-win32.pyd +0 -0
  14. yearn_treasury/budget/_requests.py +96 -0
  15. yearn_treasury/constants.py +91 -0
  16. yearn_treasury/main.py +175 -0
  17. yearn_treasury/py.typed +1 -0
  18. yearn_treasury/rules/__init__.py +20 -0
  19. yearn_treasury/rules/constants.cp310-win32.pyd +0 -0
  20. yearn_treasury/rules/constants.py +15 -0
  21. yearn_treasury/rules/cost_of_revenue/__init__.py +1 -0
  22. yearn_treasury/rules/cost_of_revenue/gas.cp310-win32.pyd +0 -0
  23. yearn_treasury/rules/cost_of_revenue/gas.py +64 -0
  24. yearn_treasury/rules/cost_of_revenue/match_on_hash.yaml +12 -0
  25. yearn_treasury/rules/expense/__init__.cp310-win32.pyd +0 -0
  26. yearn_treasury/rules/expense/__init__.py +4 -0
  27. yearn_treasury/rules/expense/general.cp310-win32.pyd +0 -0
  28. yearn_treasury/rules/expense/general.py +13 -0
  29. yearn_treasury/rules/expense/infrastructure.cp310-win32.pyd +0 -0
  30. yearn_treasury/rules/expense/infrastructure.py +46 -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.cp310-win32.pyd +0 -0
  34. yearn_treasury/rules/expense/people.py +83 -0
  35. yearn_treasury/rules/expense/security.cp310-win32.pyd +0 -0
  36. yearn_treasury/rules/expense/security.py +146 -0
  37. yearn_treasury/rules/ignore/__init__.py +8 -0
  38. yearn_treasury/rules/ignore/general.cp310-win32.pyd +0 -0
  39. yearn_treasury/rules/ignore/general.py +11 -0
  40. yearn_treasury/rules/ignore/maker.py +91 -0
  41. yearn_treasury/rules/ignore/passthru.py +309 -0
  42. yearn_treasury/rules/ignore/staking.py +101 -0
  43. yearn_treasury/rules/ignore/swaps/__init__.py +24 -0
  44. yearn_treasury/rules/ignore/swaps/_skip_tokens.py +8 -0
  45. yearn_treasury/rules/ignore/swaps/aave.py +68 -0
  46. yearn_treasury/rules/ignore/swaps/auctions.cp310-win32.pyd +0 -0
  47. yearn_treasury/rules/ignore/swaps/auctions.py +30 -0
  48. yearn_treasury/rules/ignore/swaps/compound.py +57 -0
  49. yearn_treasury/rules/ignore/swaps/conversion_factory.cp310-win32.pyd +0 -0
  50. yearn_treasury/rules/ignore/swaps/conversion_factory.py +20 -0
  51. yearn_treasury/rules/ignore/swaps/cowswap.py +86 -0
  52. yearn_treasury/rules/ignore/swaps/curve.py +174 -0
  53. yearn_treasury/rules/ignore/swaps/gearbox.cp310-win32.pyd +0 -0
  54. yearn_treasury/rules/ignore/swaps/gearbox.py +36 -0
  55. yearn_treasury/rules/ignore/swaps/iearn.cp310-win32.pyd +0 -0
  56. yearn_treasury/rules/ignore/swaps/iearn.py +41 -0
  57. yearn_treasury/rules/ignore/swaps/otc.cp310-win32.pyd +0 -0
  58. yearn_treasury/rules/ignore/swaps/otc.py +58 -0
  59. yearn_treasury/rules/ignore/swaps/pooltogether.cp310-win32.pyd +0 -0
  60. yearn_treasury/rules/ignore/swaps/pooltogether.py +23 -0
  61. yearn_treasury/rules/ignore/swaps/synthetix.cp310-win32.pyd +0 -0
  62. yearn_treasury/rules/ignore/swaps/synthetix.py +10 -0
  63. yearn_treasury/rules/ignore/swaps/uniswap.py +293 -0
  64. yearn_treasury/rules/ignore/swaps/unwrapper.cp310-win32.pyd +0 -0
  65. yearn_treasury/rules/ignore/swaps/unwrapper.py +17 -0
  66. yearn_treasury/rules/ignore/swaps/vaults.cp310-win32.pyd +0 -0
  67. yearn_treasury/rules/ignore/swaps/vaults.py +263 -0
  68. yearn_treasury/rules/ignore/swaps/woofy.cp310-win32.pyd +0 -0
  69. yearn_treasury/rules/ignore/swaps/woofy.py +79 -0
  70. yearn_treasury/rules/ignore/swaps/yfi.cp310-win32.pyd +0 -0
  71. yearn_treasury/rules/ignore/swaps/yfi.py +110 -0
  72. yearn_treasury/rules/ignore/swaps/yla.cp310-win32.pyd +0 -0
  73. yearn_treasury/rules/ignore/swaps/yla.py +27 -0
  74. yearn_treasury/rules/ignore/unit.cp310-win32.pyd +0 -0
  75. yearn_treasury/rules/ignore/unit.py +39 -0
  76. yearn_treasury/rules/ignore/weth.cp310-win32.pyd +0 -0
  77. yearn_treasury/rules/ignore/weth.py +47 -0
  78. yearn_treasury/rules/ignore/ygov.cp310-win32.pyd +0 -0
  79. yearn_treasury/rules/ignore/ygov.py +15 -0
  80. yearn_treasury/rules/other_expense/__init__.cp310-win32.pyd +0 -0
  81. yearn_treasury/rules/other_expense/__init__.py +7 -0
  82. yearn_treasury/rules/other_expense/boost.cp310-win32.pyd +0 -0
  83. yearn_treasury/rules/other_expense/boost.py +49 -0
  84. yearn_treasury/rules/other_expense/bugs.cp310-win32.pyd +0 -0
  85. yearn_treasury/rules/other_expense/bugs.py +80 -0
  86. yearn_treasury/rules/other_expense/donations.cp310-win32.pyd +0 -0
  87. yearn_treasury/rules/other_expense/donations.py +42 -0
  88. yearn_treasury/rules/other_expense/dyfi.cp310-win32.pyd +0 -0
  89. yearn_treasury/rules/other_expense/dyfi.py +28 -0
  90. yearn_treasury/rules/other_expense/events.cp310-win32.pyd +0 -0
  91. yearn_treasury/rules/other_expense/events.py +20 -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.cp310-win32.pyd +0 -0
  95. yearn_treasury/rules/other_expense/misc.py +48 -0
  96. yearn_treasury/rules/other_expense/revshare.cp310-win32.pyd +0 -0
  97. yearn_treasury/rules/other_expense/revshare.py +19 -0
  98. yearn_treasury/rules/other_income/__init__.cp310-win32.pyd +0 -0
  99. yearn_treasury/rules/other_income/__init__.py +2 -0
  100. yearn_treasury/rules/other_income/airdrops.cp310-win32.pyd +0 -0
  101. yearn_treasury/rules/other_income/airdrops.py +29 -0
  102. yearn_treasury/rules/other_income/match_on_hash.yaml +21 -0
  103. yearn_treasury/rules/other_income/misc.cp310-win32.pyd +0 -0
  104. yearn_treasury/rules/other_income/misc.py +78 -0
  105. yearn_treasury/rules/revenue/__init__.py +6 -0
  106. yearn_treasury/rules/revenue/bribes.cp310-win32.pyd +0 -0
  107. yearn_treasury/rules/revenue/bribes.py +25 -0
  108. yearn_treasury/rules/revenue/farming.cp310-win32.pyd +0 -0
  109. yearn_treasury/rules/revenue/farming.py +55 -0
  110. yearn_treasury/rules/revenue/keepcoins.cp310-win32.pyd +0 -0
  111. yearn_treasury/rules/revenue/keepcoins.py +61 -0
  112. yearn_treasury/rules/revenue/match_on_hash.yaml +4 -0
  113. yearn_treasury/rules/revenue/seasolver.cp310-win32.pyd +0 -0
  114. yearn_treasury/rules/revenue/seasolver.py +23 -0
  115. yearn_treasury/rules/revenue/vaults.py +171 -0
  116. yearn_treasury/rules/revenue/yteams.cp310-win32.pyd +0 -0
  117. yearn_treasury/rules/revenue/yteams.py +16 -0
  118. yearn_treasury/shitcoins.py +143 -0
  119. yearn_treasury/vaults.cp310-win32.pyd +0 -0
  120. yearn_treasury/vaults.py +49 -0
  121. yearn_treasury/wallets.yaml +54 -0
  122. yearn_treasury/yteams.py +207 -0
  123. yearn_treasury-0.1.7.dist-info/METADATA +85 -0
  124. yearn_treasury-0.1.7.dist-info/RECORD +128 -0
  125. yearn_treasury-0.1.7.dist-info/WHEEL +5 -0
  126. yearn_treasury-0.1.7.dist-info/entry_points.txt +2 -0
  127. yearn_treasury-0.1.7.dist-info/top_level.txt +2 -0
  128. yearn_treasury__mypyc.cp310-win32.pyd +0 -0
@@ -0,0 +1,49 @@
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 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
+ v1: Final[dict[Contract, ChecksumAddress]] = {}
24
+ """Vault contract -> underlying address"""
25
+
26
+ v2: Final[dict[ChecksumAddress, Contract]] = {}
27
+ """Vault address -> vault contract"""
28
+
29
+
30
+ if chain.id == Network.Mainnet:
31
+ _v1_addresses_provider = Contract("0x9be19Ee7Bc4099D62737a7255f5c227fBcd6dB93")
32
+ _addresses_generator_v1_vaults = Contract(
33
+ _v1_addresses_provider.addressById("ADDRESSES_GENERATOR_V1_VAULTS")
34
+ )
35
+
36
+ for vault in map(Contract, _addresses_generator_v1_vaults.assetsAddresses()):
37
+ v1[vault] = vault.token()
38
+
39
+ now = chain.height
40
+
41
+ # TODO: make resolve_ens util in eth-port and refactor this out
42
+ v2_registries = [
43
+ event["newAddress"].hex() for event in Events(addresses=resolver, topics=topics).events(now)
44
+ ]
45
+
46
+ for event in Events(addresses=list(map(str, v2_registries))).events(now):
47
+ if event.name == "NewVault":
48
+ vault_address = event["vault"]
49
+ 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,207 @@
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, Final
8
+
9
+ import a_sync
10
+ from brownie import chain
11
+ from eth_portfolio._ydb.token_transfers import InboundTokenTransfers
12
+ from eth_portfolio.structs import TokenTransfer
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
+ DATA_FOLDER: Final = os.path.join(".", "data")
20
+ OUTPUT_FILE: Final = os.path.join(DATA_FOLDER, f"teams_revenue_{chain.id}.csv")
21
+ NUMBER_OF_MONTHS_TO_INCLUDE_IN_REPORT: Final = 36
22
+
23
+ if not os.path.exists(DATA_FOLDER):
24
+ os.makedirs(DATA_FOLDER)
25
+
26
+
27
+ # TODO: maybe move this into constants for reuse
28
+ yteams_addresses = {
29
+ Network.Mainnet: {
30
+ "v3": {
31
+ "ms": "0x33333333D5eFb92f19a5F94a43456b3cec2797AE",
32
+ "splits": {"0x2A12CAA2c13Af03c117D836CA3811a5Ca946133B": 12.5},
33
+ },
34
+ "dinobots": {
35
+ "ms": "0x2C01B4AD51a67E2d8F02208F54dF9aC4c0B778B6",
36
+ "splits": {"0xC4f238633A85A854C4702d2c66264771D1fa7904": 17.5},
37
+ },
38
+ "ylockers": {
39
+ "ms": "0x4444AAAACDBa5580282365e25b16309Bd770ce4a",
40
+ "splits": {
41
+ "0xac580302548FCCBBf00020de20C3A8AA516821AD": 2.5,
42
+ "0x794f80E899c772de9E326eC83cCfD8D94e208B49": 6.25,
43
+ "0x5FF0f87b05806ce89967638CA727Af8309d92A89": 12.5,
44
+ "0x5A7575368797695BefD785f546C6b8B7e9D37f8c": 15.625,
45
+ },
46
+ },
47
+ # "ylockers others": {"ms": "0x4444AAAACDBa5580282365e25b16309Bd770ce4a","splits":{"0x5FF0f87b05806ce89967638CA727Af8309d92A89":12.5, "0x5A7575368797695BefD785f546C6b8B7e9D37f8c":15.625}},
48
+ "yaudit": {
49
+ "ms": "0x8973B848775a87a0D5bcf262C555859b87E6F7dA",
50
+ "splits": {
51
+ "0xd7A1DBe236A38528D54317415a530b2326068373": 35,
52
+ "0xF104F38592287e25868BD8C3dcCCa1a311916f88": 35,
53
+ "0x1a9D272C3b7fE427639702A332D51348213B0bC1": 20,
54
+ },
55
+ },
56
+ "yeth": {
57
+ "ms": "0xeEEEEeeeEe274C3CCe13f77C85d8eBd9F7fd4479",
58
+ "splits": {"0x14EFe6390C6758E3fE4379A14e3B329274b1b072": 25},
59
+ },
60
+ "yfarm": {
61
+ "ms": "0x55157997cb324a374cCd7c40914ff879Fd9D515C",
62
+ "splits": {"0x0B3cCe59E038373F6008D9266B6D6eB4d21689b1": 50},
63
+ },
64
+ "sms": {
65
+ "ms": "0x16388463d60FFE0661Cf7F1f31a7D658aC790ff7",
66
+ "splits": {"0xd6748776CF06a80EbE36cd83D325B31bb916bf54": 25},
67
+ },
68
+ }
69
+ }[Network(chain.id)]
70
+
71
+
72
+ logger: Final = getLogger(__name__)
73
+
74
+ _not_verified: Final[set[str]] = set()
75
+ _warned: Final[set[TokenTransfer]] = set()
76
+
77
+ _known_tokens_without_prices: Final = frozenset({"SAFE", "vCOW"})
78
+ """When there is a PriceError for these tokens, no logs will be emitted."""
79
+
80
+
81
+ @lru_cache(maxsize=None)
82
+ def transfers_for(wallet: str) -> InboundTokenTransfers:
83
+ return InboundTokenTransfers(wallet, 0, load_prices=True) # type: ignore [arg-type]
84
+
85
+
86
+ async def calculate_teams_revenue_expenses() -> None:
87
+ logger.info("Starting process to calculate teams revenues and expenses")
88
+ timestamps = get_timestamps_for_report()
89
+
90
+ async def get_coros_for_timestamp(dt: datetime) -> dict[str, dict[str, Decimal]]:
91
+ return await a_sync.gather(
92
+ {
93
+ label: total(label, wallet_info, dt)
94
+ for label, wallet_info in yteams_addresses.items()
95
+ }
96
+ )
97
+
98
+ all_data = await a_sync.gather({dt: get_coros_for_timestamp(dt) for dt in timestamps})
99
+
100
+ result = {
101
+ (dt, teams, movement): values
102
+ for dt, data in all_data.items()
103
+ for teams, info in data.items()
104
+ for movement, values in info.items()
105
+ }
106
+ df = DataFrame.from_dict(result, orient="index")
107
+ print("------------")
108
+ # print(df.index)
109
+ # print(df.head(10))
110
+ df.index = MultiIndex.from_tuples(df.index)
111
+ print("********")
112
+ # print(df.index)
113
+ df.reset_index(inplace=True)
114
+ df.columns = ["datetime", "team", "label", "value"]
115
+ df.to_csv(OUTPUT_FILE)
116
+ logger.info(
117
+ f"Finished processing yteams calculations and saved file to {os.path.abspath(OUTPUT_FILE)}"
118
+ )
119
+
120
+
121
+ def get_timestamps_for_report() -> list[datetime]:
122
+ now = datetime.now(tz=timezone.utc)
123
+ prev_month_end = datetime(
124
+ year=now.year,
125
+ month=now.month,
126
+ day=1,
127
+ hour=0,
128
+ minute=0,
129
+ second=0,
130
+ microsecond=0,
131
+ tzinfo=timezone.utc,
132
+ ) - timedelta(microseconds=1)
133
+ datetimes = []
134
+ print("Exporting report for timestamps:")
135
+ for _ in range(NUMBER_OF_MONTHS_TO_INCLUDE_IN_REPORT):
136
+ print(f" - {prev_month_end}")
137
+ datetimes.append(prev_month_end)
138
+ prev_month_end -= timedelta(days=prev_month_end.day)
139
+ return datetimes
140
+
141
+
142
+ async def total(label: str, wallet_info: dict[str, Any], timestamp: datetime) -> dict[str, Decimal]:
143
+ rev = await sum_revenue_transfers.sum(wallet_info["splits"].items(), timestamp=timestamp)
144
+ grants = await sum_grants_received(wallet_info["ms"], timestamp)
145
+ if rev > 10_000_000:
146
+ raise ValueError(rev)
147
+ if grants > 10_000_000:
148
+ raise ValueError(grants)
149
+ net = rev - grants
150
+ if label == "yaudit":
151
+ logger.info("--- %s thru %s ---", label, timestamp)
152
+ logger.info("inbound %s", rev)
153
+ logger.info("grants -%s", grants)
154
+ logger.info("net %s", net)
155
+ return {"revenue": rev, "grants": grants, "total": net}
156
+
157
+
158
+ @a_sync.a_sync(default="async")
159
+ async def sum_revenue_transfers(params: tuple[str, Decimal], timestamp: datetime) -> Decimal:
160
+ wallet, rev_share = params
161
+ block = await get_block_at_timestamp(timestamp)
162
+ total = Decimal(0)
163
+ async for transfer in transfers_for(wallet).yield_thru_block(block):
164
+ transfer = await transfer
165
+ if transfer is None:
166
+ # failed to decode, probably shitcoin
167
+ continue
168
+ if not transfer.value:
169
+ # zero value transfer
170
+ continue
171
+ if transfer.price:
172
+ total += transfer.value * transfer.price
173
+ elif transfer not in _warned and transfer.token not in _known_tokens_without_prices:
174
+ logger.warning(f"PRICE ZERO: {transfer}")
175
+ _warned.add(transfer)
176
+ return round(total * Decimal((100 - rev_share) / 100), 8)
177
+
178
+
179
+ async def sum_grants_received(wallet: str, timestamp: datetime) -> Decimal:
180
+ grants = Decimal(0)
181
+ block = await get_block_at_timestamp(timestamp)
182
+ async for transfer in transfers_for(wallet).yield_thru_block(block):
183
+ transfer = await transfer
184
+ if transfer is None:
185
+ # failed to decode, probably shitcoin
186
+ continue
187
+ if not transfer.value:
188
+ # zero value transfer
189
+ continue
190
+ if transfer.price:
191
+ if transfer.from_address != ZERO_ADDRESS:
192
+ try:
193
+ contract = await Contract.coroutine(transfer.from_address)
194
+ if (
195
+ hasattr(contract, "recipient") and await contract.recipient == wallet
196
+ ) or transfer.from_address == "0xFEB4acf3df3cDEA7399794D0869ef76A6EfAff52":
197
+ grants += transfer.value * transfer.price
198
+ except ContractNotVerified as e:
199
+ if str(e) not in _not_verified:
200
+ _not_verified.add(str(e))
201
+ logger.debug(f"{e.__class__.__name__}: {e}")
202
+ except Exception as e:
203
+ logger.exception("Exception for yTeam transfer: %s", transfer)
204
+ elif transfer not in _warned and transfer.token not in _known_tokens_without_prices:
205
+ logger.warning(f"PRICE ZERO: {transfer}")
206
+ _warned.add(transfer)
207
+ return round(grants, 8)
@@ -0,0 +1,85 @@
1
+ Metadata-Version: 2.4
2
+ Name: yearn_treasury
3
+ Version: 0.1.7
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.1.12
19
+ Dynamic: classifier
20
+ Dynamic: description
21
+ Dynamic: description-content-type
22
+ Dynamic: requires-dist
23
+ Dynamic: requires-python
24
+ Dynamic: summary
25
+
26
+ This WIP library runs the [dao-treasury](https://github.com/BobTheBuidler/dao-treasury) exporter for the [Yearn Finance](https://yearn.fi/) treasury.
27
+
28
+ ## Installation
29
+
30
+ - **pip:**
31
+ ```bash
32
+ pip install yearn-treasury
33
+ ```
34
+
35
+ - **From Source:**
36
+ ```bash
37
+ git clone https://github.com/BobTheBuidler/yearn-treasury
38
+ cd yearn-treasury
39
+ poetry install
40
+ ```
41
+
42
+ ## Requirements
43
+ - Python 3.10 or higher.
44
+ - At least 16GB of RAM.
45
+ - All dependencies installed as specified in the project’s pyproject.toml file.
46
+
47
+ ## Prerequisites
48
+
49
+ - 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).
50
+ - You must configure a [brownie network](https://eth-brownie.readthedocs.io/en/stable/network-management.html) to use your RPC.
51
+ - 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.
52
+ - 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.
53
+
54
+ ## Usage
55
+
56
+ Run the treasury export tool:
57
+
58
+ ```bash
59
+ # For pip installations:
60
+ yearn-treasury --network mainnet --interval 12h
61
+ ```
62
+
63
+ For local development (from source installation), use:
64
+ ```bash
65
+ poetry run yearn-treasury --network mainnet --interval 12h
66
+ ```
67
+
68
+ **CLI Options:**
69
+ - `--network`: The id of the brownie network the exporter will connect to (default: mainnet)
70
+ - `--interval`: The time interval between each data snapshot (default: 12h)
71
+ - `--daemon`: Run the export process in the background (default: False) (NOTE: currently unsupported)
72
+ - `--grafana-port`: Set the port for the Grafana dashboard where you can view data (default: 3004)
73
+ - `--renderer-port`: Set the port for the report rendering service (default: 8080)
74
+ - `--victoria-port`: Set the port for the Victoria metrics reporting endpoint (default: 8430)
75
+
76
+ After running the command, the export script will run continuously until you close your terminal.
77
+ 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.
78
+
79
+ Enjoy!
80
+
81
+ ## Screenshots
82
+
83
+ #### [Transactions Dashboard](https://bobthebuidler.github.io/yearn-treasury/transactions.html)
84
+
85
+ ![image](https://github.com/user-attachments/assets/4293b62d-827a-4bae-af4f-014c99511f99)
@@ -0,0 +1,128 @@
1
+ yearn_treasury__mypyc.cp310-win32.pyd,sha256=qdWzeBazKuxOFYA7c1Tt8D7cPSXHKBo-EsO6aueCoZs,377856
2
+ yearn_treasury/__init__.py,sha256=-euYC7G_IzcnPRC0tKmjFYq8NJQ69R5688KrhJiVacM,424
3
+ yearn_treasury/_db.cp310-win32.pyd,sha256=EdtsVPll6Gq0o8YlkpqcOmf6RwPIqC0DmzGSrYGfmNE,9216
4
+ yearn_treasury/_db.py,sha256=3H1L9BdBsQ5NNbZd3lpM45pd3C8C2iFQg3lbdcrdT9Q,1789
5
+ yearn_treasury/_ens.cp310-win32.pyd,sha256=et-cNjTskTy3FvgKedyFmtnUqKXojoUo0a8urhq3Amc,9216
6
+ yearn_treasury/_ens.py,sha256=tyWAM2sWuC8uucB7Z2FoH6HEuBDkvJXTodo7no0MhOM,1066
7
+ yearn_treasury/_logging.cp310-win32.pyd,sha256=wFqGa3HnBLhsqQ1ib-MOjblKM-qBjAZhSfKdW9a60nE,9216
8
+ yearn_treasury/_logging.py,sha256=1Ix3t3t9-zxDQpz8W41lxtFZ-j_w8QIyM6Gb4dNq4pA,1775
9
+ yearn_treasury/address_labels.yaml,sha256=R8XC7ATHxLxfR8g1Rl4YDXyOyO8w5a08iw-9_y50XuU,1529
10
+ yearn_treasury/constants.py,sha256=qHwvTuHU1rB2fq74WJxTfcTFGEaMB4-8KNp_IQZEVNo,3887
11
+ yearn_treasury/main.py,sha256=yH_mlFt4YbnNHJiHUrdVbki_HtZB9N3cD436iEj1VRQ,6651
12
+ yearn_treasury/py.typed,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
13
+ yearn_treasury/shitcoins.py,sha256=ll4MPmk3YLK-ZZwDNqoGPxlS6P3YXmH2BDbXs_8o3pA,7911
14
+ yearn_treasury/vaults.cp310-win32.pyd,sha256=bJ66h7rpTTo2eqAU6E9WOcDmMCzEFkWBzF7UMTrzfJo,9216
15
+ yearn_treasury/vaults.py,sha256=7eOByQpBj5UlgxdlNunQPIZaD2sy535ObtCHQLqwnAE,1737
16
+ yearn_treasury/wallets.yaml,sha256=VP2A4S-W6R6k1yWDHM_ptrhNlO-dwXZhrJg0Bm8qz0w,1137
17
+ yearn_treasury/yteams.py,sha256=OEK2H_X1JhYRTsKv8CxlN7E9CXzOXRfKh82NUeX3Mqg,8205
18
+ yearn_treasury/budget/__init__.cp310-win32.pyd,sha256=w7mT208M7Epano3lqz5Uj-VMYbGIOumPRMIM2QRkHS4,9216
19
+ yearn_treasury/budget/__init__.py,sha256=LY4Isom1ARgNwIpaz9W0ZUcbxHfzw3hC0eLVjLwHdFs,264
20
+ yearn_treasury/budget/_request.cp310-win32.pyd,sha256=CZeH2GhfHmbEdBGZ23R0TS5bUEfIm8hmYT3Wyaw0pjg,9216
21
+ yearn_treasury/budget/_request.py,sha256=l-6pSQxbeq0oyzQ5g0EqBJP4LHy-hjXSioF-NBQMYkk,1031
22
+ yearn_treasury/budget/_requests.cp310-win32.pyd,sha256=3Z0XQ0DZa_ExAhYgK-Gy7lvW8ihqcH5BrFXGipBiAGw,9216
23
+ yearn_treasury/budget/_requests.py,sha256=SOoJZ6p_7Gd-GR1VNHDXFRrKEGjTz93sJTPoE9c3AvQ,3529
24
+ yearn_treasury/rules/__init__.py,sha256=MUwQaDL-f-S3AB_YS3H4k_6Y1VFgPjNsIIVXpL-9Gko,591
25
+ yearn_treasury/rules/constants.cp310-win32.pyd,sha256=GlTu75_iI2c8MXYNuBU2CCJx6gq8Y7t_hE28njujxeU,9216
26
+ yearn_treasury/rules/constants.py,sha256=UZVg8kuF9CNc9nVJtmije9ZbdAdkGf03dWylG7VBuiI,525
27
+ yearn_treasury/rules/cost_of_revenue/__init__.py,sha256=rWPI3t4FRk_QCkdA5fDmgEKRU3p9JACoQbn184AxGD8,56
28
+ yearn_treasury/rules/cost_of_revenue/gas.cp310-win32.pyd,sha256=H1exgEVY1YbAtAz0-vMFM6WiACp-q2QYoMVcqjpprw8,9216
29
+ yearn_treasury/rules/cost_of_revenue/gas.py,sha256=Sx7Oy27MaGkGMKga1zKP_AT5kWgsCmc5k048nAqDQgc,2239
30
+ yearn_treasury/rules/cost_of_revenue/match_on_hash.yaml,sha256=Z7r1CIDzNsSoLWpmUUbXonqE4Vzo0-u8RzISDQGJmNk,562
31
+ yearn_treasury/rules/expense/__init__.cp310-win32.pyd,sha256=7eo_NE3eYDDuJWZ2g50StHSc9UiOmCnelMRj1GOWlt4,9216
32
+ yearn_treasury/rules/expense/__init__.py,sha256=3YzO4g2TOCNg4oWGd7nfWkl18J1A6nmqQF7zezLND8E,215
33
+ yearn_treasury/rules/expense/general.cp310-win32.pyd,sha256=HX_wyhYRfiHZ1_qgRA9_v_SEC8U349L2XSHwd_iwYEM,9216
34
+ yearn_treasury/rules/expense/general.py,sha256=Ale0ignb0wDN8RyyhMND3j7SUc4bLi39kmSVP-wsmus,377
35
+ yearn_treasury/rules/expense/infrastructure.cp310-win32.pyd,sha256=BVIPm8JotlPLRx59zhuPh_ajFiAYZ1SGkSIy58YKqi4,9216
36
+ yearn_treasury/rules/expense/infrastructure.py,sha256=dIca6tyaoHSzh4yMuSd-xe1c-k4uEHyFImMrd2_fnxM,1675
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.cp310-win32.pyd,sha256=mpf2hDS77gZCXITroZR-YYEamU4MSVAYDhinM--qksQ,9216
40
+ yearn_treasury/rules/expense/people.py,sha256=VRFddEQx53kUSTuvpD-hqhbm_X-BQT_01ecVmFgkEP0,3602
41
+ yearn_treasury/rules/expense/security.cp310-win32.pyd,sha256=kyzP0_62uW7ALKbsMuqDo9iyX2rKiUmmq61KSBcGRkI,9216
42
+ yearn_treasury/rules/expense/security.py,sha256=tbMZMljGcIwYVFSEg0r3uh2OH8276RlpNaiIVYW1uf8,4735
43
+ yearn_treasury/rules/ignore/__init__.py,sha256=8Wuwv6JO4VeMx8U4trNo3ZP5z3ZBIgQk9eFbZxvskPQ,396
44
+ yearn_treasury/rules/ignore/general.cp310-win32.pyd,sha256=tcOe8dLyTadJw0Z1s3Hh6sIadEy2nnhN31alSw9KLac,9216
45
+ yearn_treasury/rules/ignore/general.py,sha256=DJEvcZUgfsPlJADu_dmXrWGiUguuiXG2Tid7tKKMDjE,452
46
+ yearn_treasury/rules/ignore/maker.py,sha256=-F95ikaRiw-26znlTX_XZK19_SRURDZZChJoawSJ8eQ,3547
47
+ yearn_treasury/rules/ignore/passthru.py,sha256=epXjq3DWxv8VNeQQqEYXvfQ-da-jpE6Pi_04A9FTZFs,12329
48
+ yearn_treasury/rules/ignore/staking.py,sha256=k7KptJ5NBAaM5KH72MfwYuXDQiZ6wsvhq_pV2l7VNYU,3791
49
+ yearn_treasury/rules/ignore/unit.cp310-win32.pyd,sha256=S_ZVWAquSCQm7JMvl3ZBdkayu_-QUX6Fv7ztvNKd1Fo,9216
50
+ yearn_treasury/rules/ignore/unit.py,sha256=pPQPIjr8BE27wgLgJQDS9rOEJVu2KS303dfjj30dcsI,1292
51
+ yearn_treasury/rules/ignore/weth.cp310-win32.pyd,sha256=zMIfHAaqeN5Bmn5j-vby9acemQhsi0xG9QWp60BFcT0,9216
52
+ yearn_treasury/rules/ignore/weth.py,sha256=_jtVlbfnqxaS2fTfajEM5BIBrJFi1MKR2qLi_4IHIlk,1510
53
+ yearn_treasury/rules/ignore/ygov.cp310-win32.pyd,sha256=Hphv7Cz6KT_tCRCot8BSGwsFCpjaKvhjsFfpfwREEhg,9216
54
+ yearn_treasury/rules/ignore/ygov.py,sha256=-f854yY04aqCHKeimhZpMp_0IFiru4At63GZb_HP2Tc,420
55
+ yearn_treasury/rules/ignore/swaps/__init__.py,sha256=U32Jwk9yznJWs6XEbqPvUL1XICq_xndZOUZuAHS6Lf4,1134
56
+ yearn_treasury/rules/ignore/swaps/_skip_tokens.py,sha256=Likh4Ibcoi9wdNOwl_ezl7m9c6VMZn5NwJP0rKPzsZE,159
57
+ yearn_treasury/rules/ignore/swaps/aave.py,sha256=rAG-284C6JOsVCJAeLCk7XSLcOWFIj3v5c2fKRcZ3lA,2888
58
+ yearn_treasury/rules/ignore/swaps/auctions.cp310-win32.pyd,sha256=i5ehRVtLUMUl6mIbnKZzDJjt61fxHfwYXXnm8WAhiEk,9216
59
+ yearn_treasury/rules/ignore/swaps/auctions.py,sha256=VUbqWG-BASI2Wfli8StSNga2P5XhF_A4LCE5aZtgGO8,1066
60
+ yearn_treasury/rules/ignore/swaps/compound.py,sha256=fnMtKAlmxyoxrO4XSgiVtHOXUAQmoXmCesV0BoSNJOQ,2646
61
+ yearn_treasury/rules/ignore/swaps/conversion_factory.cp310-win32.pyd,sha256=9N6H3cSNdbMh0L1al21uHgE-rdoJxtpx29cJV6ZZ3K0,9216
62
+ yearn_treasury/rules/ignore/swaps/conversion_factory.py,sha256=H07BteW2sWeg8m9dnDfvRTrpvMcRHbpP-ZDdNg3O0fg,928
63
+ yearn_treasury/rules/ignore/swaps/cowswap.py,sha256=7IvsLzT6th2iS1_S_ZRy7FZqlZkVV-TbKzLiwlcuSLo,4177
64
+ yearn_treasury/rules/ignore/swaps/curve.py,sha256=J2CcdgfAzI7kkYfhHMhzw6nGAEkIJbBUCxqyQyXoz6A,7605
65
+ yearn_treasury/rules/ignore/swaps/gearbox.cp310-win32.pyd,sha256=2j1BRnosDiUm-Cag6rImN96Gq1K_bfhl47sRSnQZyFM,9216
66
+ yearn_treasury/rules/ignore/swaps/gearbox.py,sha256=gbdkBEkoDuADpoT4gVpcyke7W812fR410ZJJcQbHMWw,1139
67
+ yearn_treasury/rules/ignore/swaps/iearn.cp310-win32.pyd,sha256=b1QYBV73Lf97zLbYAHAoJ-VP_V7tnOhsgA9oYkh-3cc,9216
68
+ yearn_treasury/rules/ignore/swaps/iearn.py,sha256=3bMwhz4O6GQ0TCgcbsfF-Hfly4k2o9Iooe8vtkOYz10,1532
69
+ yearn_treasury/rules/ignore/swaps/otc.cp310-win32.pyd,sha256=NQPajwiGGYOa1Hys-5LfmLjTk8r21s6gSLz40prpBWo,9216
70
+ yearn_treasury/rules/ignore/swaps/otc.py,sha256=v0ztjqmxyO0GpebeaTAR-ycoOGd6_0zjTNljcj9eXWQ,2692
71
+ yearn_treasury/rules/ignore/swaps/pooltogether.cp310-win32.pyd,sha256=VS0tmQFE3b1hm24CGOrwtQEnatxe5qrSiCZGMPGkh00,9216
72
+ yearn_treasury/rules/ignore/swaps/pooltogether.py,sha256=T42OdErDLoPV_hEEsxDz-Pa2pvIDvyRzMQnIprzRvw4,834
73
+ yearn_treasury/rules/ignore/swaps/synthetix.cp310-win32.pyd,sha256=HA1m1nXu_U9Dn3Ffu3veRpgdhr_wy0rmb6UJBK-E-20,9216
74
+ yearn_treasury/rules/ignore/swaps/synthetix.py,sha256=USI34Jrfdjc9hKAvyy77m0JpXu0jvPJ-GTWTUNn_Te8,378
75
+ yearn_treasury/rules/ignore/swaps/uniswap.py,sha256=pvvdn9am8lKo5O-sufngK4TlulXVBYRgWIE7NMDSLQg,13426
76
+ yearn_treasury/rules/ignore/swaps/unwrapper.cp310-win32.pyd,sha256=a2DXsssRUZG0btX5AhuuPQAeqYCMtGGFOtv2MPgQfVI,9216
77
+ yearn_treasury/rules/ignore/swaps/unwrapper.py,sha256=FRVEq0jn7EWSp7Q_MvdJFLDXl-P2ujlVZXa1mqSvO0w,477
78
+ yearn_treasury/rules/ignore/swaps/vaults.cp310-win32.pyd,sha256=4j0vqOQEPjyb9TWizRI-h04LeOz0tZA0Apas8HYShUA,9216
79
+ yearn_treasury/rules/ignore/swaps/vaults.py,sha256=IPaYeZ77xYogl2IqcxYO1Cacah9hUWMUUoqL_d1UCVQ,10906
80
+ yearn_treasury/rules/ignore/swaps/woofy.cp310-win32.pyd,sha256=dMuG9wOFYU7XUgnz0DFa3t8QJq2EV6Ww1PDmDIf-4vg,9216
81
+ yearn_treasury/rules/ignore/swaps/woofy.py,sha256=YkrzGp3yYXJyxPFCOESxWWsMZCvImHw45UJGPv1GWO4,3196
82
+ yearn_treasury/rules/ignore/swaps/yfi.cp310-win32.pyd,sha256=efG1iR6vVAsnRWYCTIX-evtPlsjPjtx4Di40fgFhmsU,9216
83
+ yearn_treasury/rules/ignore/swaps/yfi.py,sha256=awdVx2txPg4YBvq4_OOmB9rxNMfINAMqRsKh2rtEijo,4860
84
+ yearn_treasury/rules/ignore/swaps/yla.cp310-win32.pyd,sha256=jt_bl_CRmEBgh8JlE1n8NnWmRFZDWPfOdrEPSn9vluU,9216
85
+ yearn_treasury/rules/ignore/swaps/yla.py,sha256=G0rMbAvkgCxlve5LDMHI79XvpC6BhcAhNtdyBywDAT4,914
86
+ yearn_treasury/rules/other_expense/__init__.cp310-win32.pyd,sha256=IGIsFIBai4-C--T2iObnLs-Gc7f5IIDAK0Cc6iqsfR4,9216
87
+ yearn_treasury/rules/other_expense/__init__.py,sha256=K1lsFhNu4p7STAnuk_Bywbu45me5rBOTPRnuCJdcM8o,397
88
+ yearn_treasury/rules/other_expense/boost.cp310-win32.pyd,sha256=TfYNX6NqjIQe7BqlBLd1WFgarLnJzxvHXozxU0lPFvE,9216
89
+ yearn_treasury/rules/other_expense/boost.py,sha256=Ptd1Y-FI_pdNtQNavt4BMDw725kbvADirCva1ig4TQg,2741
90
+ yearn_treasury/rules/other_expense/bugs.cp310-win32.pyd,sha256=urY1gPbkNMPLZtscNIlbhf1wEZZqiFm3oSFOBqTTk-A,9216
91
+ yearn_treasury/rules/other_expense/bugs.py,sha256=wNmzR3KTSJApb_pfiM8TCz_CBR5ACabzYaHViJTz_pc,3093
92
+ yearn_treasury/rules/other_expense/donations.cp310-win32.pyd,sha256=WnpclZgZrG-FqHI97SFz5A5L8yiEN_tq18VpsbwDokg,9216
93
+ yearn_treasury/rules/other_expense/donations.py,sha256=wl4BYvvIhxZv9Bi5dhRB6987oUCkG23xKjf-SUhV0dY,1307
94
+ yearn_treasury/rules/other_expense/dyfi.cp310-win32.pyd,sha256=oWD1vuVc64aLAGBYym7tFJ19T82d5bm79AIE0rlkCbE,9216
95
+ yearn_treasury/rules/other_expense/dyfi.py,sha256=bvzyRhx3P5EKBGf7E7WxCkUIynWxNGC_khEj71Rf17I,946
96
+ yearn_treasury/rules/other_expense/events.cp310-win32.pyd,sha256=tMGy_KjYwsoGohiaZabmeZ8ECkmKwbKRetj4ZogY434,9216
97
+ yearn_treasury/rules/other_expense/events.py,sha256=R5-a2iTuLZZzF-j7O9yd3_EUIExMg0BYX6Kma777zqM,507
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.cp310-win32.pyd,sha256=QYBEQI3XdXEAxEwGvuGm-qWlL-6FIFQuVP0UfvSjk-A,9216
101
+ yearn_treasury/rules/other_expense/misc.py,sha256=o3kiYT3rqjOpfFZMuTx_SZVX_v71P2ToIXr9v_KACFQ,1701
102
+ yearn_treasury/rules/other_expense/revshare.cp310-win32.pyd,sha256=4J7IXE8st9x-W4AaULY-kOAKajUBGLD0NypDmzMoIS4,9216
103
+ yearn_treasury/rules/other_expense/revshare.py,sha256=301DbnuajbOZD7038VToHwi9HrzgXNdInQsCZdQfMAc,529
104
+ yearn_treasury/rules/other_income/__init__.cp310-win32.pyd,sha256=NvcBJnN2eoDJq0cAjVkBma8jKcbO4oWJAAkAwqB_CaA,9216
105
+ yearn_treasury/rules/other_income/__init__.py,sha256=TgUNNtZrU4tMilawg6mLoiNCQpPHlRFITCNJWlHQCW8,112
106
+ yearn_treasury/rules/other_income/airdrops.cp310-win32.pyd,sha256=bWBqJhQIYZjb5eTG4bqXg8YT7m5_fB_bt2a666xmtLk,9216
107
+ yearn_treasury/rules/other_income/airdrops.py,sha256=TgNPzUPBLZZ9GyPH55aCx9sYTp5WSY7rs54P6SuPCw8,1212
108
+ yearn_treasury/rules/other_income/match_on_hash.yaml,sha256=r1BVF0OJSUO9PVvU2hssNJQ7MFv-uX-au_-5Aq_hSwg,1179
109
+ yearn_treasury/rules/other_income/misc.cp310-win32.pyd,sha256=ywucYChXDA7tXinN7c8VPbDabqRAIfMUSeLyAhenrb4,9216
110
+ yearn_treasury/rules/other_income/misc.py,sha256=dYgglYLhExBw7b-nTLieGYSAQNB_02TtgWeB1uea0mE,2558
111
+ yearn_treasury/rules/revenue/__init__.py,sha256=OsK33eSraGuaE2dcfMsmShUWSH0BQnACIVHsZ_2G6Ok,313
112
+ yearn_treasury/rules/revenue/bribes.cp310-win32.pyd,sha256=o1B_nuE4bCWTNozL1WUwvMkzQvgvmsuP27TRIVj34vU,9216
113
+ yearn_treasury/rules/revenue/bribes.py,sha256=GitnFwGOQQAX9aHwh1ixVYL9sTKEF6mqI0diPNtC_80,601
114
+ yearn_treasury/rules/revenue/farming.cp310-win32.pyd,sha256=oTyq58Ns8jJa014QhvkVbppa5DrPw4RsS3S0iPztDP0,9216
115
+ yearn_treasury/rules/revenue/farming.py,sha256=Q7gfsoVwW3g73-7E2JcleukhWnReb32b1kdaaw5hJFM,1893
116
+ yearn_treasury/rules/revenue/keepcoins.cp310-win32.pyd,sha256=hVsvvCcd12KExQ9RJ3yefGBP1VXaTFo-NrCB2Qk3jCQ,9216
117
+ yearn_treasury/rules/revenue/keepcoins.py,sha256=cIdLmNZYsolCSEA-l-zajicEwabY1e8as0RBD9Y8Tkw,2026
118
+ yearn_treasury/rules/revenue/match_on_hash.yaml,sha256=RjfnJygGXNFTFzXO7ClX_EpXovu2QUrDQ9Dw4EbRAFs,167
119
+ yearn_treasury/rules/revenue/seasolver.cp310-win32.pyd,sha256=8wfqL77vlm4t8R3mrYsWLwhpcKW2elmdVqPyEwPVDmo,9216
120
+ yearn_treasury/rules/revenue/seasolver.py,sha256=Xlme3aU0aLd5Hp6U2IHO2taVFDoGqLbeJnq6lWygJtc,782
121
+ yearn_treasury/rules/revenue/vaults.py,sha256=qXnex14gCBaLb-hRk8tYK9SLPJS9DUwCS4d7VDKLmKA,5492
122
+ yearn_treasury/rules/revenue/yteams.cp310-win32.pyd,sha256=kgsqRIVPrk01egkiqbEX8TTYeew94aLIrrQ1Gjw_fDY,9216
123
+ yearn_treasury/rules/revenue/yteams.py,sha256=iYDLr1g-Wzm5sRpfI7s0b5hOjrN9cNIfmPIt6lCdO0g,635
124
+ yearn_treasury-0.1.7.dist-info/METADATA,sha256=gaDPXQDRyDO_xtrHitTEjbWutt_rHgzTESibs6MJpGM,3702
125
+ yearn_treasury-0.1.7.dist-info/WHEEL,sha256=HfBhtPENJ5CvxLEbJ3OQidnM6aXqyZguVsnjyhUr40U,98
126
+ yearn_treasury-0.1.7.dist-info/entry_points.txt,sha256=SNx2hP429dAQDEjY93mQADPgbPbdSRKoF8mUUtvH3g8,60
127
+ yearn_treasury-0.1.7.dist-info/top_level.txt,sha256=m6UZasCg7vJZr-GyXS_TRPPIzcC2n18kr8ZKdr4qu4Q,37
128
+ yearn_treasury-0.1.7.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.10.1)
3
+ Root-Is-Purelib: false
4
+ Tag: cp310-cp310-win32
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
Binary file