eth-portfolio-temp 0.0.30.dev0__cp39-cp39-win_amd64.whl → 0.0.31.dev0__cp39-cp39-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 eth-portfolio-temp might be problematic. Click here for more details.

Binary file
Binary file
Binary file
@@ -0,0 +1,36 @@
1
+ from collections import defaultdict
2
+ from typing import DefaultDict, Final, Set
3
+
4
+ from eth_typing import ChecksumAddress
5
+ from y import Network, convert
6
+
7
+ stableish: Final = {
8
+ Network.Mainnet: [
9
+ "0x674C6Ad92Fd080e4004b2312b45f796a192D27a0", # USDN
10
+ "0x1456688345527bE1f37E9e627DA0837D6f08C925", # USDP
11
+ "0x865377367054516e17014CcdED1e7d814EDC9ce4", # DOLA
12
+ "0x5f98805A4E8be255a32880FDeC7F6728C6568bA0", # LUSD
13
+ "0x4Fabb145d64652a948d72533023f6E7A623C7C53", # BUSD
14
+ "0x853d955aCEf822Db058eb8505911ED77F175b99e", # FRAX
15
+ "0x5BC25f649fc4e26069dDF4cF4010F9f706c23831", # DUSD
16
+ "0x99D8a9C45b2ecA8864373A26D1459e3Dff1e17F3", # MIM
17
+ "0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd", # GUSD
18
+ "0x03ab458634910AaD20eF5f1C8ee96F1D6ac54919", # RAI
19
+ "0x2A8e1E676Ec238d8A992307B495b45B3fEAa5e86", # OUSD
20
+ "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51", # sUSD
21
+ "0xe2f2a5C287993345a840Db3B0845fbC70f5935a5", # mUSD
22
+ "0x5B3b5DF2BF2B6543f78e053bD91C4Bdd820929f1", # USDM
23
+ "0xdF574c24545E5FfEcb9a659c229253D4111d87e1", # HUSD
24
+ "0xa47c8bf37f92aBed4A126BDA807A7b7498661acD", # UST
25
+ ],
26
+ }
27
+
28
+ STABLEISH_COINS: DefaultDict[int, Set[ChecksumAddress]] = defaultdict(set)
29
+ """
30
+ A dictionary that contains, for each chain, a set of 'stable-ish' coins that are considered stable by the wider market but not by ypriceamgic.
31
+
32
+ These coins, and wrapper tokens that contain them, will be considered stablecoins on all dashboards.
33
+ """
34
+
35
+ for chain, tokens in stableish.items():
36
+ STABLEISH_COINS[chain].update(convert.to_address(token) for token in tokens)
eth_portfolio/buckets.py CHANGED
@@ -3,19 +3,23 @@ from typing import Optional, Set
3
3
 
4
4
  from a_sync import igather
5
5
  from async_lru import alru_cache
6
- from brownie import chain
7
- from y.constants import STABLECOINS, WRAPPED_GAS_COIN
6
+ from eth_typing import ChecksumAddress
7
+ from y.constants import CHAINID, STABLECOINS, WRAPPED_GAS_COIN
8
+ from y.convert import to_address
8
9
  from y.datatypes import Address, AnyAddressType
10
+ from y.exceptions import ContractNotVerified
9
11
  from y.prices.lending.aave import aave
10
12
  from y.prices.lending.compound import CToken, compound
11
13
  from y.prices.stable_swap.curve import curve
12
14
  from y.prices.yearn import YearnInspiredVault, is_yearn_vault
13
15
 
14
16
  from eth_portfolio.constants import BTC_LIKE, ETH_LIKE, INTL_STABLECOINS
17
+ from eth_portfolio._stableish import STABLEISH_COINS
15
18
 
16
19
  logger = logging.getLogger(__name__)
17
20
 
18
- OTHER_LONG_TERM_ASSETS: Set[Address] = {}.get(chain.id, set())
21
+ STABLEISH = STABLEISH_COINS[CHAINID]
22
+ OTHER_LONG_TERM_ASSETS: Set[Address] = {}.get(CHAINID, set())
19
23
 
20
24
 
21
25
  async def get_token_bucket(token: AnyAddressType) -> str:
@@ -53,27 +57,25 @@ async def get_token_bucket(token: AnyAddressType) -> str:
53
57
  - :func:`_unwrap_token`
54
58
  - :func:`_is_stable`
55
59
  """
56
- token = str(token)
60
+ token_address = to_address(token)
57
61
  try:
58
- token = str(await _unwrap_token(token))
59
- except ValueError as e:
60
- if str(e).startswith("Source for") and str(e).endswith("has not been verified"):
61
- return "Other short term assets"
62
- raise
62
+ token_address = await _unwrap_token(token_address)
63
+ except ContractNotVerified as e:
64
+ return "Other short term assets"
63
65
 
64
- if _is_stable(token):
66
+ if _is_stable(token_address):
65
67
  return "Cash & cash equivalents"
66
- if token in ETH_LIKE:
68
+ if token_address in ETH_LIKE:
67
69
  return "ETH"
68
- if token in BTC_LIKE:
70
+ if token_address in BTC_LIKE:
69
71
  return "BTC"
70
- if token in OTHER_LONG_TERM_ASSETS:
72
+ if token_address in OTHER_LONG_TERM_ASSETS:
71
73
  return "Other long term assets"
72
74
  return "Other short term assets"
73
75
 
74
76
 
75
77
  @alru_cache(maxsize=None)
76
- async def _unwrap_token(token) -> str:
78
+ async def _unwrap_token(token) -> ChecksumAddress:
77
79
  """
78
80
  Recursively unwrap a token to its underlying asset.
79
81
 
@@ -158,18 +160,19 @@ def _pool_bucket(pool_tokens: set) -> Optional[str]:
158
160
  return list(INTL_STABLECOINS)[0] if pool_tokens < INTL_STABLECOINS else None
159
161
 
160
162
 
161
- def _is_stable(token: Address) -> bool:
163
+ def _is_stable(token: ChecksumAddress) -> bool:
162
164
  """
163
- Check if a token is a stablecoin.
165
+ Check if a token is a stablecoin or stable-ish coin.
164
166
 
165
- This function checks if a given token is present in the :data:`STABLECOINS` or
166
- :data:`INTL_STABLECOINS` sets, indicating that it is a stablecoin.
167
+ This function checks if a given token is present in the :data:`STABLECOINS`,
168
+ :data:`INTL_STABLECOINS`, or :data:`STABLEISH_COINS` sets, indicating that it is
169
+ a stablecoin or considered stable by the wider market.
167
170
 
168
171
  Args:
169
172
  token: The address of the token to check.
170
173
 
171
174
  Example:
172
- Check if a token is a stablecoin:
175
+ Check if a token is a stablecoin or stable-ish coin:
173
176
 
174
177
  >>> _is_stable("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48")
175
178
  True
@@ -177,5 +180,6 @@ def _is_stable(token: Address) -> bool:
177
180
  See Also:
178
181
  - :data:`STABLECOINS`
179
182
  - :data:`INTL_STABLECOINS`
183
+ - :data:`STABLEISH_COINS`
180
184
  """
181
- return token in STABLECOINS or token in INTL_STABLECOINS
185
+ return token in STABLECOINS or token in INTL_STABLECOINS or token in STABLEISH
Binary file
@@ -52,6 +52,7 @@ INTL_STABLECOINS: Final = {
52
52
  "0xC581b735A1688071A1746c968e0798D642EDE491", # EURT
53
53
  "0xdB25f211AB05b1c97D595516F45794528a807ad8", # EURS
54
54
  "0x96E61422b6A9bA0e068B6c5ADd4fFaBC6a4aae27", # ibEUR
55
+ "0x9fcf418B971134625CdF38448B949C8640971671", # EURN
55
56
  "0x269895a3dF4D73b077Fc823dD6dA1B95f72Aaf9B", # sKRW
56
57
  "0x3F1B0278A9ee595635B61817630cC19DE792f506", # sAUD
57
58
  "0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F", # sGBP
@@ -1,9 +1,6 @@
1
1
  networks:
2
2
  eth_portfolio:
3
3
 
4
- volumes:
5
- grafana_data: {}
6
-
7
4
  services:
8
5
  grafana:
9
6
  image: grafana/grafana:10.2.0
@@ -22,7 +19,6 @@ services:
22
19
  #command: >
23
20
  # sh -c "grafana-cli plugins install frser-sqlite-datasource && /run.sh"
24
21
  volumes:
25
- - grafana_data:/var/lib/grafana
26
22
  - ./.grafana/:/etc/grafana/provisioning/
27
23
  networks:
28
24
  - eth_portfolio
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eth_portfolio_temp
3
- Version: 0.0.30.dev0
3
+ Version: 0.0.31.dev0
4
4
  Summary: eth-portfolio makes it easy to analyze your portfolio.
5
5
  Home-page: https://github.com/BobTheBuidler/eth-portfolio
6
6
  Author: BobTheBuidler
@@ -1,21 +1,23 @@
1
- bb56d21cd75f4f6de8f2__mypyc.cp39-win_amd64.pyd,sha256=zmW2fZ1M_Lt5fGkr74quUsGn7X5hp772HiTKvNIT61o,279040
1
+ 295eace8438df6ec133b__mypyc.cp39-win_amd64.pyd,sha256=GVTRcFqvZFku3U8DEykc3MwUIfgbZEvaw7CPWuY0Fjg,284672
2
2
  eth_portfolio/__init__.py,sha256=5GmHYzhUX2gOC4MScgXnqS8x2MawbpWOuWPmqlvCotA,525
3
- eth_portfolio/_argspec.cp39-win_amd64.pyd,sha256=90b-NGp6CyVyLQiGZf5TEFNm5tfFHG7hcOCK91fhrPQ,10752
3
+ eth_portfolio/_argspec.cp39-win_amd64.pyd,sha256=pdy4vjrrrF4CKOesGTEnXt8tej0-1gfUexQUbzJlx60,10752
4
4
  eth_portfolio/_argspec.py,sha256=au8ycJ56-7UzbQVzYUOoMX9sToH0QNi2tS1O820xB3A,1637
5
5
  eth_portfolio/_cache.py,sha256=H8n8x0Xo-iHQ8Q-NPuk57mmbIG6qDj4Wal6_-tK9Pfs,4866
6
- eth_portfolio/_config.cp39-win_amd64.pyd,sha256=TJ_FWhsNiFvWuBC-yIV_IJNTNuXC-2qsEHKLfFgW4KU,10752
6
+ eth_portfolio/_config.cp39-win_amd64.pyd,sha256=UwMbxeHlb5fclwBaeAR2fROESqgeXeAayMug5exoeWU,10752
7
7
  eth_portfolio/_config.py,sha256=BSOvFS4D0oqgVTtBbtW2g2kpL8Mk6xiP0PipfXs_91A,102
8
8
  eth_portfolio/_decimal.py,sha256=XhuxnVTAhJF6OILJ1MpbdwkAiy1D5NuS9jRmDRpCSYg,4886
9
9
  eth_portfolio/_decorators.py,sha256=AvB-q69MvaFe0Ykh1os6hSewcUujURQ9onqobMaONOM,2899
10
10
  eth_portfolio/_exceptions.py,sha256=xb5VmCtBtXy9WXu_1ofoG4j9BJsMQXMVydCJNUulrNY,2500
11
- eth_portfolio/_shitcoins.cp39-win_amd64.pyd,sha256=559dn9_19HWomtJTJ7MifhcV9o7vLaZYo_WPzjOzUko,10752
11
+ eth_portfolio/_shitcoins.cp39-win_amd64.pyd,sha256=yl-5gScUvGG3XhFYiejeH5q0RpqLlrUBjRQtKpmnNXs,10752
12
12
  eth_portfolio/_shitcoins.py,sha256=Kx7OpfbV5SytD0EQdJLjd4LBlAIRcrsCH2kf-xmUZgA,14274
13
+ eth_portfolio/_stableish.cp39-win_amd64.pyd,sha256=Ksh40WlnOEwMC53p2FPLubht_CmyDpecpp7VJ5JSXiI,10752
14
+ eth_portfolio/_stableish.py,sha256=lcRQHwDztfFHKV0CbfSLBoR3AYaBjKapnXytx944pU0,1680
13
15
  eth_portfolio/_submodules.py,sha256=zne-2YyVFoKHwkLuHx8cdz5lpcwwSDw1edJ9v8G4c1A,2263
14
16
  eth_portfolio/_utils.py,sha256=LQtg467tXBCQh7sGFepOe440XgTOu9bqJsY9qSg-Xs8,7583
15
17
  eth_portfolio/address.py,sha256=m8BE6Tk12mXDGYD_X-ctLGcWszwd0MC9uNP32OVxLJc,14487
16
- eth_portfolio/buckets.py,sha256=_75U2su7rKn2Rx6FVQmYGqoovJaXSQSWFGSxtWu0R98,6074
17
- eth_portfolio/constants.cp39-win_amd64.pyd,sha256=B0MYWNQDnsKld5Wy6GFCsnh_NTTRrAU7QBW2kouFmKQ,10752
18
- eth_portfolio/constants.py,sha256=akMKnQYnTCPTmwzb1orPRMP8bY4vK0T87MCRH8VdlFE,2461
18
+ eth_portfolio/buckets.py,sha256=B_-WjIcHyDBgNlpJdyhHnOscegUp2K6bUrPFbAQ92uU,6412
19
+ eth_portfolio/constants.cp39-win_amd64.pyd,sha256=Qpq_QIWF1m0Xwa-wYETU83B-uOjCHxamFBrinOXPhjQ,10752
20
+ eth_portfolio/constants.py,sha256=fSSVRyWVy4JjE9-ZVwpFXnGmeCg_BxZGjd5F6Flv5Zo,2524
19
21
  eth_portfolio/portfolio.py,sha256=FVx4QwnJH4llTWcYln9UpDkKridHSEAENbTHCBOSq_o,24904
20
22
  eth_portfolio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
23
  eth_portfolio/_db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -26,13 +28,13 @@ eth_portfolio/_ledgers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
26
28
  eth_portfolio/_ledgers/address.py,sha256=ZI4lVsxtXoffDHFBm0pUrSKU42KleBKThNdDHm1Nqtg,33823
27
29
  eth_portfolio/_ledgers/portfolio.py,sha256=rAr5S1tksgLPUOK1J1FbIWgvTQNzTqrRp8oukiP2BTo,13427
28
30
  eth_portfolio/_loaders/__init__.py,sha256=YrBeRuA48cN2Bg2R2nXiNt1CsUIG_7N6ENIpY6aISPo,1735
29
- eth_portfolio/_loaders/_nonce.cp39-win_amd64.pyd,sha256=iPLn8aAZUYjgS8mlDMaKOO_zzOOIqR1i6dr4zATYVHo,10752
31
+ eth_portfolio/_loaders/_nonce.cp39-win_amd64.pyd,sha256=z_xbVqnr06IQDWBrPV_8ALfSLXZcse8xENMS3V4cnyc,10752
30
32
  eth_portfolio/_loaders/_nonce.py,sha256=S9x7SA-VgRD-KJMgbKS-X2Cq-51kxLNyeWa1LjeAxHk,6435
31
- eth_portfolio/_loaders/balances.cp39-win_amd64.pyd,sha256=lGnTKgk6_mE_jE6KJNQwjTy-7SnP4bwUO8WJbkc0pVg,10752
33
+ eth_portfolio/_loaders/balances.cp39-win_amd64.pyd,sha256=cHcTezNV7qTB-b9BZGYevxVBL2GCc2Jylgce9NLZS0I,10752
32
34
  eth_portfolio/_loaders/balances.py,sha256=_v-x1M3lzDHPt8svHmCcpxZKw0BaGHfZimhkwgphY8A,3226
33
35
  eth_portfolio/_loaders/token_transfer.py,sha256=58NoMc28CRSjuxP-_kNmXL7jS1oEFZayTZ9VAKQcVow,8741
34
36
  eth_portfolio/_loaders/transaction.py,sha256=WXsiNahcb5jNbXCX2-ceao3Cybfi-7_th8bnw9elmP0,9386
35
- eth_portfolio/_loaders/utils.cp39-win_amd64.pyd,sha256=P4e2-fmDvbXN-zfnT80e9TV8WJ05fVkUp-CwtCwLZow,10752
37
+ eth_portfolio/_loaders/utils.cp39-win_amd64.pyd,sha256=gisax59CWFQ12EZ3zugtJAs2esRscASO6UB5ZR3cMGY,10752
36
38
  eth_portfolio/_loaders/utils.py,sha256=_nhPmGq_h_y_JPU9vXvhzqoKAWtgLRhYy_PdJXbyUdw,2326
37
39
  eth_portfolio/_ydb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
40
  eth_portfolio/_ydb/token_transfers.py,sha256=ECxnrYSIZZ2ZbOBLZnZ8DIxOsM8fKdyt8ztMPZZdYxQ,5139
@@ -58,24 +60,24 @@ eth_portfolio_scripts/_args.py,sha256=M33vPkja62XEJeCZAqacNSBCqbzse07wepwyBOtkvV
58
60
  eth_portfolio_scripts/_logging.py,sha256=EgW8ozQZLAgt_cUgqe5BYZLMVQwB6X-0gq0T-BvqlTY,369
59
61
  eth_portfolio_scripts/_portfolio.py,sha256=LIFug8lsfnbr67-93DWWD4Mj0QMvbqlgivY69uOAKbU,6821
60
62
  eth_portfolio_scripts/_utils.py,sha256=7maEWyS5i_Kp7iVaa5puf2ZyefqHDsUOqTDLz-UwIQY,2630
61
- eth_portfolio_scripts/balances.cp39-win_amd64.pyd,sha256=vVQSriaHfg8Hhfa5aRZsGtcigUAoc7oXHyoFqLpA5bQ,10752
63
+ eth_portfolio_scripts/balances.cp39-win_amd64.pyd,sha256=4O80f0WZEREBLc2OgWChqIMmPcyS_vWTMbhQQSC_fJo,10752
62
64
  eth_portfolio_scripts/balances.py,sha256=reli3W6K9-8F8I_n0tIwS9SuUykpPJnbiMsnJgY9N_w,1573
63
65
  eth_portfolio_scripts/main.py,sha256=vSYt6Ajq2wZ1ErSoEdLaLQmfpZnFcN6S-kSYaKQ0KEY,3633
64
66
  eth_portfolio_scripts/py.typed,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
65
- eth_portfolio_scripts/docker/__init__.cp39-win_amd64.pyd,sha256=1kgy3il0Su26DKfLmA4aNq20rH6q0DVTJx44GP3CTL8,10752
67
+ eth_portfolio_scripts/docker/__init__.cp39-win_amd64.pyd,sha256=HkRWZqQQeSsgPjVBCXUqPvfnrO-N0oRGGgrCnAXOpPc,10752
66
68
  eth_portfolio_scripts/docker/__init__.py,sha256=R27uZPLUEK2--fb9IrxrDUk6R5_IVFJSv7s_ia7p5Xk,409
67
- eth_portfolio_scripts/docker/check.cp39-win_amd64.pyd,sha256=Vp5RGf21TT65vfBY_2nr5GHnnchfSO-DwofbRi_uaLc,10752
69
+ eth_portfolio_scripts/docker/check.cp39-win_amd64.pyd,sha256=EHLz4Pl1QroAIz-9ZPSNmAXcT6TdVNcbthlpg0f87qQ,10752
68
70
  eth_portfolio_scripts/docker/check.py,sha256=JFxUxGRSz20EgjKqCLBkCqR4N1ihzO_3ykU3jPzp_UU,1801
69
- eth_portfolio_scripts/docker/docker-compose.yaml,sha256=ntdCvEJtYwpiDlt1xsHGKhuA488XJOziQVeIMPBiMR0,1940
70
- eth_portfolio_scripts/docker/docker_compose.cp39-win_amd64.pyd,sha256=VmYGLqu0B1MWI2XJ636obIu3L-2OBWOMYYNTkYwYnec,10752
71
+ eth_portfolio_scripts/docker/docker-compose.yaml,sha256=vx1HGuqBoB7Tpu2-J322oMtMWW46O7knDGtys99mYb4,1869
72
+ eth_portfolio_scripts/docker/docker_compose.cp39-win_amd64.pyd,sha256=letHqc-TEpWLzV-lV0NM7L2lkyr5UlfxUYZwVRSxfG0,10752
71
73
  eth_portfolio_scripts/docker/docker_compose.py,sha256=tewgCWZP6g9sVFHbQnGC1au-bTnvuvXMZgTKKgpmeOc,2304
72
74
  eth_portfolio_scripts/docker/.grafana/dashboards/dashboards.yaml,sha256=wktTI-OAdF_khhbciZFo4Gt2V9bUjbe7GLqwdzTKf0U,212
73
75
  eth_portfolio_scripts/docker/.grafana/dashboards/Portfolio/Balances.json,sha256=XGMV8e4tDak53e9bmymwAB4uqZmAIcU5JlRT3OiwTeU,70750
74
76
  eth_portfolio_scripts/docker/.grafana/datasources/datasources.yml,sha256=8PPH_QDhfbRRh3IidskW46rifJejloa1a9I1KCw2FTk,199
75
77
  eth_portfolio_scripts/victoria/__init__.py,sha256=LcTK1HO42JEWMJ20NVIneKCmXtXPYEhLxsvvC9HBoVs,1992
76
78
  eth_portfolio_scripts/victoria/types.py,sha256=KNq8aIiNXeiDnCKL7xycmouo0YeKI-sbQkIcTymcSYk,745
77
- eth_portfolio_temp-0.0.30.dev0.dist-info/METADATA,sha256=7CMoJmhr6OElMMSP7OkmAt9HmJMwxdH0IDTMlP1saJc,800
78
- eth_portfolio_temp-0.0.30.dev0.dist-info/WHEEL,sha256=XkFE14KmFh7mutkkb-qn_ueuH2lwfT8rLdfc5xpQ7wE,99
79
- eth_portfolio_temp-0.0.30.dev0.dist-info/entry_points.txt,sha256=yqoC6X3LU1NA_-oJ6mloEYEPNmS-0hPS9OtEwgIeDGU,66
80
- eth_portfolio_temp-0.0.30.dev0.dist-info/top_level.txt,sha256=RFDADjpLoCyoOexqChHlvRDt5rzZtjEscRPIISyJCRc,64
81
- eth_portfolio_temp-0.0.30.dev0.dist-info/RECORD,,
79
+ eth_portfolio_temp-0.0.31.dev0.dist-info/METADATA,sha256=1MRQ739fislZAsPqj-dZKGB1WZzUg3FnqlsIlXzHAxs,800
80
+ eth_portfolio_temp-0.0.31.dev0.dist-info/WHEEL,sha256=XkFE14KmFh7mutkkb-qn_ueuH2lwfT8rLdfc5xpQ7wE,99
81
+ eth_portfolio_temp-0.0.31.dev0.dist-info/entry_points.txt,sha256=yqoC6X3LU1NA_-oJ6mloEYEPNmS-0hPS9OtEwgIeDGU,66
82
+ eth_portfolio_temp-0.0.31.dev0.dist-info/top_level.txt,sha256=CmTLi8Lvs3RulV5ZNdziaDVvF_WRsgRpM17GSMECxrg,64
83
+ eth_portfolio_temp-0.0.31.dev0.dist-info/RECORD,,
@@ -1,3 +1,3 @@
1
- bb56d21cd75f4f6de8f2__mypyc
1
+ 295eace8438df6ec133b__mypyc
2
2
  eth_portfolio
3
3
  eth_portfolio_scripts