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.
- yearn_treasury/__init__.py +20 -0
- yearn_treasury/_db.cp311-win_amd64.pyd +0 -0
- yearn_treasury/_db.py +41 -0
- yearn_treasury/_ens.cp311-win_amd64.pyd +0 -0
- yearn_treasury/_ens.py +31 -0
- yearn_treasury/_logging.cp311-win_amd64.pyd +0 -0
- yearn_treasury/_logging.py +43 -0
- yearn_treasury/address_labels.yaml +39 -0
- yearn_treasury/budget/__init__.cp311-win_amd64.pyd +0 -0
- yearn_treasury/budget/__init__.py +6 -0
- yearn_treasury/budget/_request.cp311-win_amd64.pyd +0 -0
- yearn_treasury/budget/_request.py +44 -0
- yearn_treasury/budget/_requests.cp311-win_amd64.pyd +0 -0
- yearn_treasury/budget/_requests.py +96 -0
- yearn_treasury/constants.py +89 -0
- yearn_treasury/main.py +176 -0
- yearn_treasury/py.typed +1 -0
- yearn_treasury/rules/__init__.py +20 -0
- yearn_treasury/rules/constants.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/constants.py +17 -0
- yearn_treasury/rules/cost_of_revenue/__init__.py +1 -0
- yearn_treasury/rules/cost_of_revenue/gas.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/cost_of_revenue/gas.py +66 -0
- yearn_treasury/rules/cost_of_revenue/match_on_hash.yaml +12 -0
- yearn_treasury/rules/expense/__init__.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/expense/__init__.py +4 -0
- yearn_treasury/rules/expense/general.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/expense/general.py +13 -0
- yearn_treasury/rules/expense/infrastructure.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/expense/infrastructure.py +47 -0
- yearn_treasury/rules/expense/match_on_hash.yaml +48 -0
- yearn_treasury/rules/expense/match_on_to_address.yaml +7 -0
- yearn_treasury/rules/expense/people.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/expense/people.py +84 -0
- yearn_treasury/rules/expense/security.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/expense/security.py +147 -0
- yearn_treasury/rules/ignore/__init__.py +8 -0
- yearn_treasury/rules/ignore/general.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/general.py +11 -0
- yearn_treasury/rules/ignore/maker.py +92 -0
- yearn_treasury/rules/ignore/passthru.py +310 -0
- yearn_treasury/rules/ignore/staking.py +102 -0
- yearn_treasury/rules/ignore/swaps/__init__.py +25 -0
- yearn_treasury/rules/ignore/swaps/_skip_tokens.py +9 -0
- yearn_treasury/rules/ignore/swaps/aave.py +69 -0
- yearn_treasury/rules/ignore/swaps/auctions.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/swaps/auctions.py +31 -0
- yearn_treasury/rules/ignore/swaps/compound.py +58 -0
- yearn_treasury/rules/ignore/swaps/conversion_factory.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/swaps/conversion_factory.py +21 -0
- yearn_treasury/rules/ignore/swaps/cowswap.py +87 -0
- yearn_treasury/rules/ignore/swaps/curve.py +170 -0
- yearn_treasury/rules/ignore/swaps/gearbox.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/swaps/gearbox.py +37 -0
- yearn_treasury/rules/ignore/swaps/iearn.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/swaps/iearn.py +43 -0
- yearn_treasury/rules/ignore/swaps/otc.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/swaps/otc.py +58 -0
- yearn_treasury/rules/ignore/swaps/pooltogether.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/swaps/pooltogether.py +23 -0
- yearn_treasury/rules/ignore/swaps/synthetix.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/swaps/synthetix.py +10 -0
- yearn_treasury/rules/ignore/swaps/uniswap.py +294 -0
- yearn_treasury/rules/ignore/swaps/unwrapper.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/swaps/unwrapper.py +17 -0
- yearn_treasury/rules/ignore/swaps/vaults.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/swaps/vaults.py +263 -0
- yearn_treasury/rules/ignore/swaps/woofy.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/swaps/woofy.py +80 -0
- yearn_treasury/rules/ignore/swaps/yfi.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/swaps/yfi.py +111 -0
- yearn_treasury/rules/ignore/swaps/yla.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/swaps/yla.py +28 -0
- yearn_treasury/rules/ignore/unit.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/unit.py +40 -0
- yearn_treasury/rules/ignore/weth.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/weth.py +48 -0
- yearn_treasury/rules/ignore/ygov.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/ignore/ygov.py +16 -0
- yearn_treasury/rules/other_expense/__init__.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/other_expense/__init__.py +7 -0
- yearn_treasury/rules/other_expense/boost.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/other_expense/boost.py +49 -0
- yearn_treasury/rules/other_expense/bugs.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/other_expense/bugs.py +81 -0
- yearn_treasury/rules/other_expense/donations.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/other_expense/donations.py +43 -0
- yearn_treasury/rules/other_expense/dyfi.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/other_expense/dyfi.py +29 -0
- yearn_treasury/rules/other_expense/events.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/other_expense/events.py +21 -0
- yearn_treasury/rules/other_expense/match_on_hash.yaml +43 -0
- yearn_treasury/rules/other_expense/match_on_to_address.yaml +8 -0
- yearn_treasury/rules/other_expense/misc.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/other_expense/misc.py +49 -0
- yearn_treasury/rules/other_expense/revshare.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/other_expense/revshare.py +20 -0
- yearn_treasury/rules/other_income/__init__.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/other_income/__init__.py +2 -0
- yearn_treasury/rules/other_income/airdrops.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/other_income/airdrops.py +30 -0
- yearn_treasury/rules/other_income/match_on_hash.yaml +21 -0
- yearn_treasury/rules/other_income/misc.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/other_income/misc.py +80 -0
- yearn_treasury/rules/revenue/__init__.py +6 -0
- yearn_treasury/rules/revenue/bribes.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/revenue/bribes.py +26 -0
- yearn_treasury/rules/revenue/farming.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/revenue/farming.py +56 -0
- yearn_treasury/rules/revenue/keepcoins.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/revenue/keepcoins.py +63 -0
- yearn_treasury/rules/revenue/match_on_hash.yaml +4 -0
- yearn_treasury/rules/revenue/seasolver.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/revenue/seasolver.py +23 -0
- yearn_treasury/rules/revenue/vaults.py +168 -0
- yearn_treasury/rules/revenue/yteams.cp311-win_amd64.pyd +0 -0
- yearn_treasury/rules/revenue/yteams.py +17 -0
- yearn_treasury/shitcoins.py +141 -0
- yearn_treasury/vaults.cp311-win_amd64.pyd +0 -0
- yearn_treasury/vaults.py +50 -0
- yearn_treasury/wallets.yaml +54 -0
- yearn_treasury/yteams.py +208 -0
- yearn_treasury-0.0.44.dist-info/METADATA +86 -0
- yearn_treasury-0.0.44.dist-info/RECORD +128 -0
- yearn_treasury-0.0.44.dist-info/WHEEL +5 -0
- yearn_treasury-0.0.44.dist-info/entry_points.txt +2 -0
- yearn_treasury-0.0.44.dist-info/top_level.txt +2 -0
- yearn_treasury__mypyc.cp311-win_amd64.pyd +0 -0
yearn_treasury/vaults.py
ADDED
|
@@ -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
|
yearn_treasury/yteams.py
ADDED
|
@@ -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
|
+

|
|
@@ -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,,
|
|
Binary file
|