defi-state-querier 0.5.28__py3-none-any.whl → 0.5.30__py3-none-any.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.
- defi_services/__init__.py +1 -1
- defi_services/abis/lending/ionic/__init__.py +0 -0
- defi_services/abis/lending/ionic/ionic_ctoken_abi.py +1108 -0
- defi_services/abis/lending/kinza/__init__.py +0 -0
- defi_services/abis/lending/kinza/kinza_incentive.py +928 -0
- defi_services/abis/lending/kinza/kinza_lending_pool.py +1791 -0
- defi_services/abis/lending/moonwell/__init__.py +0 -0
- defi_services/abis/lending/moonwell/moonwell_comptroller_abi.py +1500 -0
- defi_services/abis/lending/moonwell/moonwell_ctoken_abi.py +1431 -0
- defi_services/abis/lending/radiant_v2/radiant_reward_converter.py +817 -0
- defi_services/abis/lending/seamless/__init__.py +0 -0
- defi_services/abis/lending/seamless/seamless_incentive.py +1049 -0
- defi_services/abis/lending/seamless/seamless_lending_pool.py +1738 -0
- defi_services/abis/lending/seamless/seamless_oracle.py +233 -0
- defi_services/abis/token/trc20_abi.py +304 -0
- defi_services/abis/vault/tcv_abi.py +1523 -0
- defi_services/constants/chain_constant.py +8 -1
- defi_services/constants/entities/dex_info_constant.py +2 -2
- defi_services/constants/entities/dex_services.py +13 -1
- defi_services/constants/entities/lending_constant.py +14 -5
- defi_services/constants/entities/lending_services.py +41 -4
- defi_services/constants/entities/vault_constant.py +2 -2
- defi_services/constants/entities/vault_services.py +7 -1
- defi_services/constants/network_constants.py +20 -361
- defi_services/constants/token_constant.py +3 -1
- defi_services/jobs/processors/cosmos_state_processor.py +3 -2
- defi_services/jobs/processors/ton_state_processor.py +5 -4
- defi_services/jobs/queriers/call_state_querier.py +2 -0
- defi_services/jobs/queriers/state_querier.py +3 -0
- defi_services/jobs/tcv.py +144 -0
- defi_services/services/dex/dex_info/uniswap_info.py +29 -1
- defi_services/services/dex/uniswap_v3_service.py +6 -2
- defi_services/services/lending/aave_v2_services.py +44 -29
- defi_services/services/lending/aave_v3_services.py +41 -20
- defi_services/services/lending/avalon_services.py +34 -0
- defi_services/services/lending/compound_v3_services.py +9 -5
- defi_services/services/lending/granary_services.py +6 -4
- defi_services/services/lending/ionic_service.py +167 -0
- defi_services/services/lending/justlend_service.py +4 -3
- defi_services/services/lending/kinza_services.py +315 -0
- defi_services/services/lending/lending_info/arbitrum/aave_v3_arbitrum.py +1 -1
- defi_services/services/lending/lending_info/arbitrum/compound_v3_arbitrum.py +96 -6
- defi_services/services/lending/lending_info/arbitrum/venus_arbitrum.py +10 -0
- defi_services/services/lending/lending_info/base/__init__.py +0 -0
- defi_services/services/lending/lending_info/base/aave_v3_base.py +61 -0
- defi_services/services/lending/lending_info/base/compound_v3_base.py +116 -0
- defi_services/services/lending/lending_info/base/granary_base.py +62 -0
- defi_services/services/lending/lending_info/base/ionic_base.py +173 -0
- defi_services/services/lending/lending_info/base/moonwell_base.py +89 -0
- defi_services/services/lending/lending_info/base/radiant_v2_base.py +57 -0
- defi_services/services/lending/lending_info/base/seamless_base.py +145 -0
- defi_services/services/lending/lending_info/base/sonne_base.py +53 -0
- defi_services/services/lending/lending_info/base/xlend_base.py +91 -0
- defi_services/services/lending/lending_info/base/zerolend_base.py +109 -0
- defi_services/services/lending/lending_info/bsc/aave_v3_bsc.py +68 -0
- defi_services/services/lending/lending_info/bsc/apeswap_bsc.py +1 -1
- defi_services/services/lending/lending_info/bsc/avalon_bsc.py +75 -0
- defi_services/services/lending/lending_info/bsc/kinza_bsc.py +182 -0
- defi_services/services/lending/lending_info/ethereum/aave_v3_eth.py +1 -140
- defi_services/services/lending/lending_info/ethereum/compound_v3_eth.py +180 -5
- defi_services/services/lending/lending_info/ethereum/kinza_eth.py +119 -0
- defi_services/services/lending/lending_info/ethereum/old_aave_v3_eth.py +150 -0
- defi_services/services/lending/lending_info/ethereum/radiant_eth.py +69 -0
- defi_services/services/lending/lending_info/ethereum/venus_eth.py +10 -0
- defi_services/services/lending/lending_info/ethereum/zerolend_eth.py +96 -0
- defi_services/services/lending/lending_info/optimism/compound_v3_optimism.py +116 -0
- defi_services/services/lending/lending_info/optimism/moonwell_optimism.py +9 -0
- defi_services/services/lending/lending_info/optimism/xlend_optimism.py +112 -0
- defi_services/services/lending/lending_info/polygon/compound_v3_polygon.py +35 -5
- defi_services/services/lending/lending_info/zksync/__init__.py +0 -0
- defi_services/services/lending/lending_info/zksync/aave_v3_zksync.py +47 -0
- defi_services/services/lending/lending_info/zksync/venus_zksync.py +10 -0
- defi_services/services/lending/lending_info/zksync/zerolend_zksync.py +138 -0
- defi_services/services/lending/liqee_service.py +2 -2
- defi_services/services/lending/moonwell_service.py +120 -0
- defi_services/services/lending/morpho_aave_v2_services.py +3 -3
- defi_services/services/lending/morpho_aave_v3_services.py +2 -2
- defi_services/services/lending/onyx_service.py +2 -1
- defi_services/services/lending/radiant_v2_services.py +52 -10
- defi_services/services/lending/seamless_services.py +313 -0
- defi_services/services/lending/sonne_service.py +64 -0
- defi_services/services/lending/trava_services.py +2 -2
- defi_services/services/lending/uwu_services.py +3 -3
- defi_services/services/lending/valas_services.py +2 -2
- defi_services/services/lending/venus_services.py +9 -3
- defi_services/services/lending/xlend_services.py +325 -0
- defi_services/services/lending/zerolend_services.py +36 -0
- defi_services/services/multicall/multicall_v2.py +0 -317
- defi_services/services/vault/tcv_vault_services.py +108 -0
- defi_services/services/vault/vault_info/arbitrum/__init__.py +0 -0
- defi_services/services/vault/vault_info/arbitrum/tcv_arb.py +58 -0
- {defi_state_querier-0.5.28.dist-info → defi_state_querier-0.5.30.dist-info}/METADATA +1 -1
- {defi_state_querier-0.5.28.dist-info → defi_state_querier-0.5.30.dist-info}/RECORD +103 -49
- /defi_services/abis/lending/{aave_v2_and_forlks → aave_v2_and_forks}/__init__.py +0 -0
- /defi_services/abis/lending/{aave_v2_and_forlks → aave_v2_and_forks}/aave_v2_event_abi.py +0 -0
- /defi_services/abis/lending/{aave_v2_and_forlks → aave_v2_and_forks}/aave_v2_incentives_abi.py +0 -0
- /defi_services/abis/lending/{aave_v2_and_forlks → aave_v2_and_forks}/lending_pool_abi.py +0 -0
- /defi_services/abis/lending/{aave_v2_and_forlks → aave_v2_and_forks}/oracle_abi.py +0 -0
- /defi_services/abis/lending/{aave_v2_and_forlks → aave_v2_and_forks}/staked_incentives_abi.py +0 -0
- /defi_services/abis/lending/{aave_v2_and_forlks → aave_v2_and_forks}/uwu_incentives_abi.py +0 -0
- {defi_state_querier-0.5.28.dist-info → defi_state_querier-0.5.30.dist-info}/WHEEL +0 -0
- {defi_state_querier-0.5.28.dist-info → defi_state_querier-0.5.30.dist-info}/licenses/LICENSE +0 -0
- {defi_state_querier-0.5.28.dist-info → defi_state_querier-0.5.30.dist-info}/top_level.txt +0 -0
@@ -94,6 +94,8 @@ class CallStateQuerier(StateQuerier):
|
|
94
94
|
results = {}
|
95
95
|
for block_number, batch_calls in w3_multicall.batch_calls_iterator(batch_size=batch_size):
|
96
96
|
multicall_data = decoded_data.get(f'{batch_idx}_{block_number}')
|
97
|
+
if not multicall_data:
|
98
|
+
continue
|
97
99
|
decode_multicall_data = w3_multicall.decode(multicall_data, calls=batch_calls, ignore_error=ignore_error)
|
98
100
|
results.update(decode_multicall_data)
|
99
101
|
batch_idx += 1
|
@@ -26,6 +26,9 @@ class StateQuerier:
|
|
26
26
|
def get_client_querier(self):
|
27
27
|
return self.client_querier
|
28
28
|
|
29
|
+
def get_provider(self):
|
30
|
+
return self.provider_uri
|
31
|
+
|
29
32
|
@staticmethod
|
30
33
|
def get_function_info(address: str, abi: list, fn_name: str, fn_paras: list = None, block_number: int = 'latest'):
|
31
34
|
if fn_paras is None:
|
@@ -0,0 +1,144 @@
|
|
1
|
+
from collections import defaultdict
|
2
|
+
|
3
|
+
from defi_services.constants.entities.dex_constant import Dex
|
4
|
+
from defi_services.constants.query_constant import Query
|
5
|
+
from defi_services.jobs.processors.state_processor import StateProcessor
|
6
|
+
|
7
|
+
|
8
|
+
class TCV:
|
9
|
+
def __init__(self, provider_uri, chain_id):
|
10
|
+
self.state_processor = StateProcessor(provider_uri, chain_id)
|
11
|
+
|
12
|
+
def get_tvl_info(
|
13
|
+
self,
|
14
|
+
address,
|
15
|
+
reserves_info,
|
16
|
+
block_number: int = "latest",
|
17
|
+
):
|
18
|
+
lp_token_dict = {information["pool"]: information["poolInfo"] for information in reserves_info.values()}
|
19
|
+
tcv_liquidity_user, dex_lp_info = self.get_tcv_liquidity_user_and_lp_token_info(
|
20
|
+
wallet=address,
|
21
|
+
dex_protocol=Dex.uniswap_v3, lp_token_list=lp_token_dict,
|
22
|
+
block_number=block_number
|
23
|
+
)
|
24
|
+
|
25
|
+
tcv_nfts = {}
|
26
|
+
for vault_address, liquidity_info in tcv_liquidity_user.items():
|
27
|
+
# For optimize
|
28
|
+
liquidity_user = liquidity_info.get('liquidity_user')
|
29
|
+
if not liquidity_user:
|
30
|
+
liquidity_info.update({'tvl': {}})
|
31
|
+
continue
|
32
|
+
|
33
|
+
vault_nft = self.get_user_nft(vault_address, Dex.uniswap_v3, block_number=block_number)
|
34
|
+
tcv_nfts.update(vault_nft)
|
35
|
+
|
36
|
+
nfts_info = self.get_nfts_info(address, Dex.uniswap_v3, tcv_nfts, block_number=block_number)
|
37
|
+
user_balance = self.get_user_token_balance(address, Dex.uniswap_v3, nfts_info, dex_lp_info, block_number=block_number)
|
38
|
+
|
39
|
+
for token_id, info in user_balance.items():
|
40
|
+
pool_address = info['pool_address']
|
41
|
+
addresses = [vault_address_ for vault_address_, info in reserves_info.items() if info['pool'] == pool_address]
|
42
|
+
vault_address = addresses[0] if addresses else None
|
43
|
+
|
44
|
+
if (not vault_address) or (vault_address not in tcv_liquidity_user):
|
45
|
+
continue
|
46
|
+
|
47
|
+
if tcv_liquidity_user[vault_address].get('tvl') is None:
|
48
|
+
tcv_liquidity_user[vault_address]['tvl'] = defaultdict(lambda: 0)
|
49
|
+
|
50
|
+
tcv_liquidity_user[vault_address]['tvl'][info['token0']] += info['token0_amount']
|
51
|
+
tcv_liquidity_user[vault_address]['tvl'][info['token1']] += info['token1_amount']
|
52
|
+
|
53
|
+
return tcv_liquidity_user
|
54
|
+
|
55
|
+
def get_user_nft(self, wallet, dex_protocol, block_number: int = 'latest'):
|
56
|
+
queries = [
|
57
|
+
{
|
58
|
+
'query_id': f'{dex_protocol}_{Query.dex_user_nft}',
|
59
|
+
"entity_id": dex_protocol,
|
60
|
+
'query_type': Query.dex_user_nft
|
61
|
+
}
|
62
|
+
]
|
63
|
+
|
64
|
+
res = self.state_processor.run(
|
65
|
+
wallet, queries, block_number=block_number,
|
66
|
+
batch_size=100, max_workers=8, ignore_error=True
|
67
|
+
)
|
68
|
+
user_nfts = res[0][Query.dex_user_nft]
|
69
|
+
return user_nfts
|
70
|
+
|
71
|
+
def get_nfts_info(self, wallet, dex_protocol, user_nfts, block_number: int = 'latest'):
|
72
|
+
queries = [
|
73
|
+
{
|
74
|
+
'query_id': f'{dex_protocol}_{Query.dex_user_info}',
|
75
|
+
"entity_id": dex_protocol,
|
76
|
+
'query_type': Query.dex_user_info,
|
77
|
+
'supplied_data': {
|
78
|
+
'user_data': user_nfts,
|
79
|
+
}
|
80
|
+
}
|
81
|
+
]
|
82
|
+
|
83
|
+
res = self.state_processor.run(
|
84
|
+
wallet, queries, block_number=block_number,
|
85
|
+
batch_size=100, max_workers=8, ignore_error=True
|
86
|
+
)
|
87
|
+
nfts_info = res[0][Query.dex_user_info]
|
88
|
+
return nfts_info
|
89
|
+
|
90
|
+
def get_user_token_balance(self, wallet, dex_protocol, nfts_info, lp_token_info, block_number: int = 'latest'):
|
91
|
+
queries = [
|
92
|
+
{
|
93
|
+
'query_id': f'{dex_protocol}_{Query.dex_user_token_balance}',
|
94
|
+
"entity_id": dex_protocol,
|
95
|
+
'query_type': Query.dex_user_token_balance,
|
96
|
+
'supplied_data': {
|
97
|
+
'user_data': nfts_info,
|
98
|
+
'lp_token_info': lp_token_info
|
99
|
+
}
|
100
|
+
}
|
101
|
+
]
|
102
|
+
|
103
|
+
res = self.state_processor.run(
|
104
|
+
wallet, queries, block_number=block_number,
|
105
|
+
batch_size=100, max_workers=8, ignore_error=True
|
106
|
+
)
|
107
|
+
user_balance = res[0][Query.dex_user_token_balance]
|
108
|
+
return user_balance
|
109
|
+
|
110
|
+
def get_tcv_liquidity_user_and_lp_token_info(self, wallet, dex_protocol, lp_token_list, block_number: int = 'latest'):
|
111
|
+
queries = [
|
112
|
+
{
|
113
|
+
"query_id": f"tcv-vault_{Query.staking_reward}",
|
114
|
+
"entity_id": "tcv-vault",
|
115
|
+
"query_type": Query.staking_reward
|
116
|
+
},
|
117
|
+
{
|
118
|
+
'query_id': f'{dex_protocol}_{Query.lp_token_info}',
|
119
|
+
"entity_id": dex_protocol,
|
120
|
+
'query_type': Query.lp_token_info,
|
121
|
+
'supplied_data': {
|
122
|
+
'lp_token_info': lp_token_list
|
123
|
+
}
|
124
|
+
},
|
125
|
+
# {
|
126
|
+
# 'query_id': f'{dex_protocol}_{Query.token_pair_balance}',
|
127
|
+
# "entity_id": dex_protocol,
|
128
|
+
# 'query_type': Query.token_pair_balance,
|
129
|
+
# 'supplied_data': {
|
130
|
+
# 'lp_token_info': lp_token_list
|
131
|
+
# }
|
132
|
+
# }
|
133
|
+
]
|
134
|
+
res = self.state_processor.run(
|
135
|
+
address=wallet, queries=queries,
|
136
|
+
block_number=block_number,
|
137
|
+
batch_size=100, max_workers=8,
|
138
|
+
ignore_error=True
|
139
|
+
)
|
140
|
+
data = {r['query_id']: r for r in res}
|
141
|
+
|
142
|
+
tcv_liquidity_user = data.get(f'tcv-vault_{Query.staking_reward}', {}).get(Query.staking_reward)
|
143
|
+
lp_token_info = data.get(f'{dex_protocol}_{Query.lp_token_info}', {}).get(Query.lp_token_info)
|
144
|
+
return tcv_liquidity_user, lp_token_info
|
@@ -7,7 +7,6 @@ UNISWAP_ETH_INFO = {
|
|
7
7
|
'factory_address': '0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f',
|
8
8
|
'factory_abi': UNISWAP_FACTORY_ABI,
|
9
9
|
'forked': 'uniswap-v2'
|
10
|
-
|
11
10
|
}
|
12
11
|
|
13
12
|
UNISWAP_V3_ETH_INFO = {
|
@@ -18,5 +17,34 @@ UNISWAP_V3_ETH_INFO = {
|
|
18
17
|
'NFT_manager_abi': UNISWAP_V3_NFT_TOKEN_MANGAGER_ABI,
|
19
18
|
'pool_abi': UNISWAP_V3_POOL_ABI,
|
20
19
|
'forked': 'uniswap-v3'
|
20
|
+
}
|
21
|
+
|
22
|
+
UNISWAP_V3_ARBITRUM_INFO = {
|
23
|
+
'factory_address': '0x1f98431c8ad98523631ae4a59f267346ea31f984',
|
24
|
+
'factory_abi': UNISWAP_V3_FACTORY_ABI,
|
25
|
+
'staker_address': '0xe34139463ba50bd61336e0c446bd8c0867c6fe65',
|
26
|
+
'NFT_manager_address': '0xc36442b4a4522e871399cd717abdd847ab11fe88',
|
27
|
+
'NFT_manager_abi': UNISWAP_V3_NFT_TOKEN_MANGAGER_ABI,
|
28
|
+
'pool_abi': UNISWAP_V3_POOL_ABI,
|
29
|
+
'forked': 'uniswap-v3'
|
30
|
+
}
|
31
|
+
|
32
|
+
UNISWAP_V3_BASE_INFO = {
|
33
|
+
'factory_address': '0x33128a8fC17869897dcE68Ed026d694621f6FDfD',
|
34
|
+
'factory_abi': UNISWAP_V3_FACTORY_ABI,
|
35
|
+
'staker_address': '0x42bE4D6527829FeFA1493e1fb9F3676d2425C3C1',
|
36
|
+
'NFT_manager_address': '0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1',
|
37
|
+
'NFT_manager_abi': UNISWAP_V3_NFT_TOKEN_MANGAGER_ABI,
|
38
|
+
'pool_abi': UNISWAP_V3_POOL_ABI,
|
39
|
+
'forked': 'uniswap-v3'
|
40
|
+
}
|
21
41
|
|
42
|
+
UNISWAP_V3_ZKSYNC_INFO = {
|
43
|
+
'factory_address': '0x8FdA5a7a8dCA67BBcDd10F02Fa0649A937215422',
|
44
|
+
'factory_abi': UNISWAP_V3_FACTORY_ABI,
|
45
|
+
'staker_address': '0xf84268FA8EB857c2e4298720C1C617178F5e78e1',
|
46
|
+
'NFT_manager_address': '0x0616e5762c1E7Dc3723c50663dF10a162D690a86',
|
47
|
+
'NFT_manager_abi': UNISWAP_V3_NFT_TOKEN_MANGAGER_ABI,
|
48
|
+
'pool_abi': UNISWAP_V3_POOL_ABI,
|
49
|
+
'forked': 'uniswap-v3'
|
22
50
|
}
|
@@ -5,7 +5,8 @@ from defi_services.abis.token.erc20_abi import ERC20_ABI
|
|
5
5
|
from defi_services.constants.chain_constant import Chain
|
6
6
|
from defi_services.constants.entities.dex_constant import Dex
|
7
7
|
from defi_services.jobs.queriers.state_querier import StateQuerier
|
8
|
-
from defi_services.services.dex.dex_info.uniswap_info import UNISWAP_V3_ETH_INFO
|
8
|
+
from defi_services.services.dex.dex_info.uniswap_info import UNISWAP_V3_ETH_INFO, UNISWAP_V3_ARBITRUM_INFO, \
|
9
|
+
UNISWAP_V3_ZKSYNC_INFO, UNISWAP_V3_BASE_INFO
|
9
10
|
from defi_services.services.dex_protocol_services import DexProtocolServices
|
10
11
|
from defi_services.utils.get_fees import get_fees
|
11
12
|
from defi_services.utils.sqrt_price_math import get_token_amount_of_user, get_token_amount_of_pool
|
@@ -15,7 +16,10 @@ logger = logging.getLogger("UniSwap V3 State Service")
|
|
15
16
|
|
16
17
|
class UniswapV3Info:
|
17
18
|
mapping = {
|
18
|
-
Chain.ethereum: UNISWAP_V3_ETH_INFO
|
19
|
+
Chain.ethereum: UNISWAP_V3_ETH_INFO,
|
20
|
+
Chain.arbitrum: UNISWAP_V3_ARBITRUM_INFO,
|
21
|
+
Chain.zksync: UNISWAP_V3_ZKSYNC_INFO,
|
22
|
+
Chain.base: UNISWAP_V3_BASE_INFO
|
19
23
|
}
|
20
24
|
|
21
25
|
|
@@ -3,13 +3,14 @@ import time
|
|
3
3
|
|
4
4
|
from web3 import Web3
|
5
5
|
|
6
|
-
from defi_services.abis.lending.
|
7
|
-
from defi_services.abis.lending.
|
8
|
-
from defi_services.abis.lending.
|
6
|
+
from defi_services.abis.lending.aave_v2_and_forks.aave_v2_incentives_abi import AAVE_V2_INCENTIVES_ABI
|
7
|
+
from defi_services.abis.lending.aave_v2_and_forks.lending_pool_abi import LENDING_POOL_ABI
|
8
|
+
from defi_services.abis.lending.aave_v2_and_forks.oracle_abi import ORACLE_ABI
|
9
9
|
from defi_services.abis.token.erc20_abi import ERC20_ABI
|
10
10
|
from defi_services.constants.chain_constant import Chain
|
11
11
|
from defi_services.constants.db_constant import DBConst
|
12
12
|
from defi_services.constants.entities.lending_constant import Lending
|
13
|
+
from defi_services.constants.network_constants import NATIVE_TOKEN
|
13
14
|
from defi_services.constants.time_constant import TimeConstants
|
14
15
|
from defi_services.jobs.queriers.state_querier import StateQuerier
|
15
16
|
from defi_services.services.lending.lending_info.avalanche.aave_v2_avalanche import AAVE_V2_AVALANCHE
|
@@ -83,19 +84,20 @@ class AaveV2StateService(ProtocolServices):
|
|
83
84
|
reserve_key = f"getReserveData_{self.name}_{token_address}_{block_number}".lower()
|
84
85
|
atoken_total_supply_key = f'totalSupply_{value["tToken"]}_{block_number}'.lower()
|
85
86
|
debt_token_total_supply_key = f'totalSupply_{value["dToken"]}_{block_number}'.lower()
|
86
|
-
sdebt_token_total_supply_key = f'totalSupply_{value["sdToken"]}_{block_number}'.lower()
|
87
87
|
decimals_key = f"decimals_{token_address}_{block_number}".lower()
|
88
|
-
|
89
88
|
rpc_calls[reserve_key] = self.get_function_lending_pool_info("getReserveData", [token_address])
|
90
89
|
rpc_calls[atoken_total_supply_key] = self.state_service.get_function_info(
|
91
90
|
value["tToken"], ERC20_ABI, "totalSupply", block_number=block_number)
|
92
91
|
rpc_calls[debt_token_total_supply_key] = self.state_service.get_function_info(
|
93
92
|
value["dToken"], ERC20_ABI, "totalSupply", block_number=block_number)
|
94
|
-
rpc_calls[sdebt_token_total_supply_key] = self.state_service.get_function_info(
|
95
|
-
value["sdToken"], ERC20_ABI, "totalSupply", block_number=block_number)
|
96
93
|
rpc_calls[decimals_key] = self.state_service.get_function_info(
|
97
94
|
token_address, ERC20_ABI, "decimals", block_number=block_number)
|
98
95
|
|
96
|
+
if value["sdToken"] != NATIVE_TOKEN:
|
97
|
+
sdebt_token_total_supply_key = f'totalSupply_{value["sdToken"]}_{block_number}'.lower()
|
98
|
+
rpc_calls[sdebt_token_total_supply_key] = self.state_service.get_function_info(
|
99
|
+
value["sdToken"], ERC20_ABI, "totalSupply", block_number=block_number)
|
100
|
+
|
99
101
|
return rpc_calls
|
100
102
|
|
101
103
|
@staticmethod
|
@@ -173,18 +175,23 @@ class AaveV2StateService(ProtocolServices):
|
|
173
175
|
decimals_call_id = f"decimals_{token_address}_{block_number}".lower()
|
174
176
|
atoken_total_supply_key = f'totalSupply_{atoken}_{block_number}'.lower()
|
175
177
|
debt_token_total_supply_key = f'totalSupply_{debt_token}_{block_number}'.lower()
|
176
|
-
|
177
|
-
|
178
|
-
reserve_tokens_info.append({
|
178
|
+
data = {
|
179
179
|
'underlying': token_address,
|
180
180
|
'underlying_decimals': decoded_data.get(decimals_call_id),
|
181
181
|
'a_token_supply': decoded_data.get(atoken_total_supply_key),
|
182
182
|
'd_token_supply': decoded_data.get(debt_token_total_supply_key),
|
183
|
-
'sd_token_supply': decoded_data.get(sdebt_token_total_supply_key),
|
184
183
|
'supply_apy': reserve_data[3],
|
185
|
-
'borrow_apy': reserve_data[4]
|
186
|
-
|
187
|
-
|
184
|
+
'borrow_apy': reserve_data[4]
|
185
|
+
}
|
186
|
+
if sdebt_token != NATIVE_TOKEN:
|
187
|
+
sdebt_token_total_supply_key = f'totalSupply_{sdebt_token}_{block_number}'.lower()
|
188
|
+
data['sd_token_supply'] = decoded_data.get(sdebt_token_total_supply_key)
|
189
|
+
data['stable_borrow_apy'] = reserve_data[5]
|
190
|
+
else:
|
191
|
+
data['sd_token_supply'] = 0
|
192
|
+
data['stable_borrow_apy'] = 0
|
193
|
+
|
194
|
+
reserve_tokens_info.append(data)
|
188
195
|
|
189
196
|
return reserve_tokens_info
|
190
197
|
|
@@ -208,19 +215,19 @@ class AaveV2StateService(ProtocolServices):
|
|
208
215
|
|
209
216
|
@classmethod
|
210
217
|
def _calculate_interest_rates(cls, token_info: dict):
|
211
|
-
total_supply_t = token_info.get('a_token_supply')
|
212
|
-
total_supply_d = token_info.get('d_token_supply')
|
213
|
-
total_supply_sd = token_info.get('sd_token_supply')
|
218
|
+
total_supply_t = token_info.get('a_token_supply', 0)
|
219
|
+
total_supply_d = token_info.get('d_token_supply', 0)
|
220
|
+
total_supply_sd = token_info.get('sd_token_supply', 0)
|
214
221
|
total_borrow = total_supply_d + total_supply_sd
|
215
222
|
|
216
223
|
total_supply = total_supply_t / 10 ** token_info['underlying_decimals']
|
217
224
|
total_borrow = total_borrow / 10 ** token_info['underlying_decimals']
|
218
225
|
|
219
|
-
supply_apr = float(token_info
|
226
|
+
supply_apr = float(token_info.get('supply_apy', 0)) / 10 ** 27
|
220
227
|
supply_apy = apr_to_apy(supply_apr)
|
221
|
-
borrow_apr = float(token_info
|
228
|
+
borrow_apr = float(token_info.get('borrow_apy', 0)) / 10 ** 27
|
222
229
|
borrow_apy = apr_to_apy(borrow_apr)
|
223
|
-
stable_borrow_apr = float(token_info
|
230
|
+
stable_borrow_apr = float(token_info.get('stable_borrow_apy', 0)) / 10 ** 27
|
224
231
|
stable_borrow_apy = apr_to_apy(stable_borrow_apr)
|
225
232
|
|
226
233
|
return {
|
@@ -260,21 +267,23 @@ class AaveV2StateService(ProtocolServices):
|
|
260
267
|
decimals_call_id = f"decimals_{token_address}_{block_number}".lower()
|
261
268
|
atoken_assets_key = f"assets_{atoken}_{block_number}".lower()
|
262
269
|
debt_token_assets_key = f"assets_{debt_token}_{block_number}".lower()
|
263
|
-
sdebt_token_assets_key = f"assets_{sdebt_token}_{block_number}".lower()
|
264
270
|
atoken_total_supply_key = f'totalSupply_{atoken}_{block_number}'.lower()
|
265
271
|
debt_token_total_supply_key = f'totalSupply_{debt_token}_{block_number}'.lower()
|
266
|
-
sdebt_token_total_supply_key = f'totalSupply_{sdebt_token}_{block_number}'.lower()
|
267
|
-
|
268
272
|
atokens[lower_address] = atoken
|
269
273
|
debt_tokens[lower_address] = debt_token
|
270
274
|
sdebt_tokens[lower_address] = sdebt_token
|
271
275
|
decimals[lower_address] = decoded_data.get(decimals_call_id)
|
272
276
|
asset_data_tokens[atoken] = decoded_data.get(atoken_assets_key)
|
273
277
|
asset_data_tokens[debt_token] = decoded_data.get(debt_token_assets_key)
|
274
|
-
asset_data_tokens[sdebt_token] = decoded_data.get(sdebt_token_assets_key)
|
275
278
|
total_supply_tokens[atoken] = decoded_data.get(atoken_total_supply_key)
|
276
279
|
total_supply_tokens[debt_token] = decoded_data.get(debt_token_total_supply_key)
|
277
|
-
|
280
|
+
if sdebt_token != NATIVE_TOKEN:
|
281
|
+
sdebt_token_assets_key = f"assets_{sdebt_token}_{block_number}".lower()
|
282
|
+
sdebt_token_total_supply_key = f'totalSupply_{sdebt_token}_{block_number}'.lower()
|
283
|
+
asset_data_tokens[sdebt_token] = decoded_data.get(sdebt_token_assets_key)
|
284
|
+
total_supply_tokens[sdebt_token] = decoded_data.get(sdebt_token_total_supply_key)
|
285
|
+
interest_rate[lower_address]['stable_borrow_apy'] = float(reserve_data[5]) / 10 ** 27
|
286
|
+
|
278
287
|
|
279
288
|
asset_price_key = f"getAssetsPrices_{self.name}_{block_number}".lower()
|
280
289
|
if not token_prices and asset_price_key in decoded_data:
|
@@ -303,17 +312,19 @@ class AaveV2StateService(ProtocolServices):
|
|
303
312
|
value = reserves_info[token]
|
304
313
|
atoken_balance_of_key = f'balanceOf_{value["tToken"]}_{wallet}_{block_number}'.lower()
|
305
314
|
debt_token_balance_of_key = f'balanceOf_{value["dToken"]}_{wallet}_{block_number}'.lower()
|
306
|
-
sdebt_token_balance_of_key = f'balanceOf_{value["sdToken"]}_{wallet}_{block_number}'.lower()
|
307
315
|
decimals_key = f"decimals_{token}_{block_number}".lower()
|
308
316
|
|
309
317
|
rpc_calls[atoken_balance_of_key] = self.state_service.get_function_info(
|
310
318
|
value["tToken"], ERC20_ABI, "balanceOf", [wallet], block_number=block_number)
|
311
319
|
rpc_calls[debt_token_balance_of_key] = self.state_service.get_function_info(
|
312
320
|
value["dToken"], ERC20_ABI, "balanceOf", [wallet], block_number=block_number)
|
313
|
-
rpc_calls[sdebt_token_balance_of_key] = self.state_service.get_function_info(
|
314
|
-
value["sdToken"], ERC20_ABI, "balanceOf", [wallet], block_number=block_number)
|
315
321
|
rpc_calls[decimals_key] = self.state_service.get_function_info(
|
316
322
|
token, ERC20_ABI, "decimals", block_number=block_number)
|
323
|
+
if value["sdToken"] != NATIVE_TOKEN:
|
324
|
+
sdebt_token_balance_of_key = f'balanceOf_{value["sdToken"]}_{wallet}_{block_number}'.lower()
|
325
|
+
rpc_calls[sdebt_token_balance_of_key] = self.state_service.get_function_info(
|
326
|
+
value["sdToken"], ERC20_ABI, "balanceOf", [wallet], block_number=block_number)
|
327
|
+
|
317
328
|
if health_factor:
|
318
329
|
rpc_calls.update(self.get_health_factor_function_info(wallet, reserves_info, block_number))
|
319
330
|
|
@@ -375,8 +386,12 @@ class AaveV2StateService(ProtocolServices):
|
|
375
386
|
get_decimals_id = f"decimals_{token}_{block_number}".lower()
|
376
387
|
deposit_amount[token] = decoded_data.get(get_total_deposit_id)
|
377
388
|
borrow_amount[token] = decoded_data.get(get_total_borrow_id)
|
378
|
-
stable_borrow_amount[token] = decoded_data.get(get_total_stable_borrow_id)
|
379
389
|
decimals[token] = decoded_data.get(get_decimals_id)
|
390
|
+
if value['sdToken'] != NATIVE_TOKEN:
|
391
|
+
stable_borrow_amount[token] = decoded_data.get(get_total_stable_borrow_id)
|
392
|
+
else:
|
393
|
+
stable_borrow_amount[token] = 0
|
394
|
+
|
380
395
|
data = self.get_wallet_deposit_borrow_balance(
|
381
396
|
reserves_info, token_prices, decimals, deposit_amount,
|
382
397
|
borrow_amount, stable_borrow_amount
|
@@ -10,15 +10,19 @@ from defi_services.abis.token.erc20_abi import ERC20_ABI
|
|
10
10
|
from defi_services.constants.chain_constant import Chain
|
11
11
|
from defi_services.constants.db_constant import DBConst
|
12
12
|
from defi_services.constants.entities.lending_constant import Lending
|
13
|
+
from defi_services.constants.network_constants import NATIVE_TOKEN
|
13
14
|
from defi_services.constants.time_constant import TimeConstants
|
14
15
|
from defi_services.jobs.queriers.state_querier import StateQuerier
|
15
16
|
from defi_services.services.lending.aave_v2_services import AaveV2StateService
|
16
17
|
from defi_services.services.lending.lending_info.arbitrum.aave_v3_arbitrum import AAVE_V3_ARB
|
17
18
|
from defi_services.services.lending.lending_info.avalanche.aave_v3_avalanche import AAVE_V3_AVALANCHE
|
18
|
-
from defi_services.services.lending.lending_info.
|
19
|
+
from defi_services.services.lending.lending_info.base.aave_v3_base import AAVE_V3_BASE
|
20
|
+
from defi_services.services.lending.lending_info.bsc.aave_v3_bsc import AAVE_V3_BSC
|
21
|
+
from defi_services.services.lending.lending_info.ethereum.old_aave_v3_eth import AAVE_V3_ETH
|
19
22
|
from defi_services.services.lending.lending_info.fantom.aave_v3_ftm import AAVE_V3_FTM
|
20
23
|
from defi_services.services.lending.lending_info.optimism.aave_v3_optimism import AAVE_V3_OPTIMISM
|
21
24
|
from defi_services.services.lending.lending_info.polygon.aave_v3_polygon import AAVE_V3_POLYGON
|
25
|
+
from defi_services.services.lending.lending_info.zksync.aave_v3_zksync import AAVE_V3_ZKSYNC
|
22
26
|
|
23
27
|
logger = logging.getLogger("Aave V3 Lending Pool State Service")
|
24
28
|
|
@@ -30,7 +34,10 @@ class AaveV3Info:
|
|
30
34
|
Chain.avalanche: AAVE_V3_AVALANCHE,
|
31
35
|
Chain.fantom: AAVE_V3_FTM,
|
32
36
|
Chain.optimism: AAVE_V3_OPTIMISM,
|
33
|
-
Chain.arbitrum: AAVE_V3_ARB
|
37
|
+
Chain.arbitrum: AAVE_V3_ARB,
|
38
|
+
Chain.base: AAVE_V3_BASE,
|
39
|
+
Chain.zksync: AAVE_V3_ZKSYNC,
|
40
|
+
Chain.bsc: AAVE_V3_BSC
|
34
41
|
}
|
35
42
|
|
36
43
|
|
@@ -88,25 +95,33 @@ class AaveV3StateService(AaveV2StateService):
|
|
88
95
|
for token_address, reserve_info in reserves_info.items():
|
89
96
|
get_reserve_data_call_id = f'getReserveData_{self.name}_{token_address}_{block_number}'.lower()
|
90
97
|
reserve_data = decoded_data.get(get_reserve_data_call_id)
|
91
|
-
|
92
98
|
atoken = reserve_data[8].lower()
|
93
|
-
sdebt_token = reserve_data[9].lower()
|
94
99
|
debt_token = reserve_data[10].lower()
|
95
100
|
decimals_call_id = f"decimals_{token_address}_{block_number}".lower()
|
96
101
|
atoken_total_supply_key = f'totalSupply_{atoken}_{block_number}'.lower()
|
97
102
|
debt_token_total_supply_key = f'totalSupply_{debt_token}_{block_number}'.lower()
|
98
|
-
|
103
|
+
sdebt_token = reserve_data[9].lower()
|
99
104
|
|
100
|
-
|
105
|
+
|
106
|
+
data = {
|
101
107
|
'underlying': token_address,
|
102
108
|
'underlying_decimals': decoded_data.get(decimals_call_id),
|
103
109
|
'a_token_supply': decoded_data.get(atoken_total_supply_key),
|
104
110
|
'd_token_supply': decoded_data.get(debt_token_total_supply_key),
|
105
|
-
|
111
|
+
|
106
112
|
'supply_apy': reserve_data[2],
|
107
113
|
'borrow_apy': reserve_data[4],
|
108
|
-
|
109
|
-
}
|
114
|
+
|
115
|
+
}
|
116
|
+
if sdebt_token != NATIVE_TOKEN:
|
117
|
+
sdebt_token_total_supply_key = f'totalSupply_{sdebt_token}_{block_number}'.lower()
|
118
|
+
data['sd_token_supply'] = decoded_data.get(sdebt_token_total_supply_key)
|
119
|
+
data['stable_borrow_apy'] = reserve_data[5]
|
120
|
+
else:
|
121
|
+
data['sd_token_supply'] = 0
|
122
|
+
data['stable_borrow_apy'] = 0
|
123
|
+
|
124
|
+
reserve_tokens_info.append(data)
|
110
125
|
|
111
126
|
return reserve_tokens_info
|
112
127
|
|
@@ -121,17 +136,17 @@ class AaveV3StateService(AaveV2StateService):
|
|
121
136
|
reserve_key = f"getReserveData_{self.name}_{token_address}_{block_number}".lower()
|
122
137
|
atoken_total_supply_key = f'totalSupply_{value["tToken"]}_{block_number}'.lower()
|
123
138
|
debt_token_total_supply_key = f'totalSupply_{value["dToken"]}_{block_number}'.lower()
|
124
|
-
sdebt_token_total_supply_key = f'totalSupply_{value["sdToken"]}_{block_number}'.lower()
|
125
139
|
decimals_key = f"decimals_{token_address}_{block_number}".lower()
|
126
140
|
for reward_token in reward_tokens:
|
127
141
|
atoken_assets_key = f"getRewardsData_{value['tToken']}_{reward_token}_{block_number}".lower()
|
128
142
|
debt_token_assets_key = f"getRewardsData_{value['dToken']}_{reward_token}_{block_number}".lower()
|
129
|
-
sdebt_token_assets_key = f"getRewardsData_{value['sdToken']}_{reward_token}_{block_number}".lower()
|
130
143
|
rpc_calls[atoken_assets_key] = self.get_function_incentive_info(
|
131
144
|
"getRewardsData", [value['tToken'], reward_token], block_number)
|
132
145
|
rpc_calls[debt_token_assets_key] = self.get_function_incentive_info(
|
133
146
|
"getRewardsData", [value['dToken'], reward_token], block_number)
|
134
|
-
|
147
|
+
if value['sdToken'] != NATIVE_TOKEN:
|
148
|
+
sdebt_token_assets_key = f"getRewardsData_{value['sdToken']}_{reward_token}_{block_number}".lower()
|
149
|
+
rpc_calls[sdebt_token_assets_key] = self.get_function_incentive_info(
|
135
150
|
"getRewardsData", [value['sdToken'], reward_token], block_number)
|
136
151
|
|
137
152
|
rpc_calls[reserve_key] = self.get_function_lending_pool_info("getReserveData", [token_address])
|
@@ -139,11 +154,14 @@ class AaveV3StateService(AaveV2StateService):
|
|
139
154
|
value["tToken"], ERC20_ABI, "totalSupply", block_number=block_number)
|
140
155
|
rpc_calls[debt_token_total_supply_key] = self.state_service.get_function_info(
|
141
156
|
value["dToken"], ERC20_ABI, "totalSupply", block_number=block_number)
|
142
|
-
rpc_calls[sdebt_token_total_supply_key] = self.state_service.get_function_info(
|
143
|
-
value["sdToken"], ERC20_ABI, "totalSupply", block_number=block_number)
|
144
157
|
rpc_calls[decimals_key] = self.state_service.get_function_info(
|
145
158
|
token_address, ERC20_ABI, "decimals", block_number=block_number)
|
146
159
|
|
160
|
+
if value['sdToken'] != NATIVE_TOKEN:
|
161
|
+
sdebt_token_total_supply_key = f'totalSupply_{value["sdToken"]}_{block_number}'.lower()
|
162
|
+
rpc_calls[sdebt_token_total_supply_key] = self.state_service.get_function_info(
|
163
|
+
value["sdToken"], ERC20_ABI, "totalSupply", block_number=block_number)
|
164
|
+
|
147
165
|
return rpc_calls
|
148
166
|
|
149
167
|
def get_apy_lending_pool_deprecated(
|
@@ -240,29 +258,32 @@ class AaveV3StateService(AaveV2StateService):
|
|
240
258
|
sdebt_token = reserve_data[8].lower()
|
241
259
|
debt_token = reserve_data[9].lower()
|
242
260
|
decimals_call_id = f"decimals_{token_address}_{block_number}".lower()
|
243
|
-
|
244
261
|
atoken_total_supply_key = f'totalSupply_{atoken}_{block_number}'.lower()
|
245
262
|
debt_token_total_supply_key = f'totalSupply_{debt_token}_{block_number}'.lower()
|
246
|
-
sdebt_token_total_supply_key = f'totalSupply_{sdebt_token}_{block_number}'.lower()
|
247
263
|
asset_data_tokens[atoken] = {}
|
248
264
|
asset_data_tokens[debt_token] = {}
|
249
|
-
|
265
|
+
if sdebt_token != NATIVE_TOKEN:
|
266
|
+
asset_data_tokens[sdebt_token] = {}
|
267
|
+
|
250
268
|
total_supply_tokens[atoken] = {}
|
251
269
|
for reward_token in reward_tokens:
|
252
270
|
atoken_assets_key = f"getRewardsData_{atoken}_{reward_token}_{block_number}".lower()
|
253
271
|
debt_token_assets_key = f"getRewardsData_{debt_token}_{reward_token}_{block_number}".lower()
|
254
|
-
sdebt_token_assets_key = f"getRewardsData_{sdebt_tokens}_{reward_token}_{block_number}".lower()
|
255
272
|
asset_data_tokens[atoken][reward_token] = decoded_data.get(atoken_assets_key)
|
256
273
|
asset_data_tokens[debt_token][reward_token] = decoded_data.get(debt_token_assets_key)
|
257
|
-
asset_data_tokens[sdebt_token][reward_token] = decoded_data.get(sdebt_token_assets_key)
|
258
274
|
total_supply_tokens[atoken][reward_token] = decoded_data.get(atoken_total_supply_key)
|
275
|
+
if sdebt_token != NATIVE_TOKEN:
|
276
|
+
sdebt_token_assets_key = f"getRewardsData_{sdebt_tokens}_{reward_token}_{block_number}".lower()
|
277
|
+
asset_data_tokens[sdebt_token][reward_token] = decoded_data.get(sdebt_token_assets_key)
|
259
278
|
|
260
279
|
atokens[lower_address] = atoken
|
261
280
|
debt_tokens[lower_address] = debt_token
|
262
281
|
sdebt_tokens[lower_address] = sdebt_token
|
263
282
|
decimals[lower_address] = decoded_data.get(decimals_call_id)
|
264
283
|
total_supply_tokens[debt_token] = decoded_data.get(debt_token_total_supply_key)
|
265
|
-
|
284
|
+
if sdebt_token != NATIVE_TOKEN:
|
285
|
+
sdebt_token_total_supply_key = f'totalSupply_{sdebt_token}_{block_number}'.lower()
|
286
|
+
total_supply_tokens[sdebt_token] = decoded_data.get(sdebt_token_total_supply_key)
|
266
287
|
|
267
288
|
asset_price_key = f"getAssetsPrices_{self.name}_{block_number}".lower()
|
268
289
|
if not token_prices and asset_price_key in decoded_data:
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
from defi_services.constants.chain_constant import Chain
|
4
|
+
from defi_services.constants.entities.lending_constant import Lending
|
5
|
+
from defi_services.jobs.queriers.state_querier import StateQuerier
|
6
|
+
from defi_services.services.lending.aave_v3_services import AaveV3StateService
|
7
|
+
from defi_services.services.lending.lending_info.bsc.avalon_bsc import AVALON_BSC
|
8
|
+
|
9
|
+
logger = logging.getLogger("Avalon Lending Pool State Service")
|
10
|
+
|
11
|
+
|
12
|
+
class AvalonInfo:
|
13
|
+
mapping = {
|
14
|
+
Chain.bsc: AVALON_BSC
|
15
|
+
}
|
16
|
+
|
17
|
+
|
18
|
+
class AvalonStateService(AaveV3StateService):
|
19
|
+
def __init__(self, state_service: StateQuerier, chain_id: str = "0x38"):
|
20
|
+
super().__init__(state_service, chain_id)
|
21
|
+
self.name = f"{chain_id}_{Lending.avalon}"
|
22
|
+
self.chain_id = chain_id
|
23
|
+
self.pool_info = AvalonInfo.mapping.get(chain_id)
|
24
|
+
self.state_service = state_service
|
25
|
+
|
26
|
+
def get_service_info(self):
|
27
|
+
info = {
|
28
|
+
Lending.avalon: {
|
29
|
+
"chain_id": self.chain_id,
|
30
|
+
"type": "lending",
|
31
|
+
"protocol_info": self.pool_info
|
32
|
+
}
|
33
|
+
}
|
34
|
+
return info
|
@@ -9,7 +9,9 @@ from defi_services.constants.token_constant import Token
|
|
9
9
|
from defi_services.jobs.queriers.state_querier import StateQuerier
|
10
10
|
from defi_services.services.lending.compound_service import CompoundStateService
|
11
11
|
from defi_services.services.lending.lending_info.arbitrum.compound_v3_arbitrum import COMPOUND_V3_ARBITRUM
|
12
|
+
from defi_services.services.lending.lending_info.base.compound_v3_base import COMPOUND_V3_BASE
|
12
13
|
from defi_services.services.lending.lending_info.ethereum.compound_v3_eth import COMPOUND_V3_ETH
|
14
|
+
from defi_services.services.lending.lending_info.optimism.compound_v3_optimism import COMPOUND_V3_OPTIMISM
|
13
15
|
from defi_services.services.lending.lending_info.polygon.compound_v3_polygon import COMPOUND_V3_POLYGON
|
14
16
|
|
15
17
|
|
@@ -17,7 +19,9 @@ class CompoundV3Info:
|
|
17
19
|
mapping = {
|
18
20
|
Chain.ethereum: COMPOUND_V3_ETH,
|
19
21
|
Chain.polygon: COMPOUND_V3_POLYGON,
|
20
|
-
Chain.arbitrum: COMPOUND_V3_ARBITRUM
|
22
|
+
Chain.arbitrum: COMPOUND_V3_ARBITRUM,
|
23
|
+
Chain.base: COMPOUND_V3_BASE,
|
24
|
+
Chain.optimism: COMPOUND_V3_OPTIMISM
|
21
25
|
}
|
22
26
|
|
23
27
|
|
@@ -25,7 +29,7 @@ class CompoundV3StateService(CompoundStateService):
|
|
25
29
|
def __init__(self, state_service: StateQuerier, chain_id: str = "0x1"):
|
26
30
|
super().__init__(state_service, chain_id)
|
27
31
|
self.name = f"{chain_id}_{Lending.compound_v3}"
|
28
|
-
self.pool_info = CompoundV3Info.mapping.get(chain_id)
|
32
|
+
self.pool_info = CompoundV3Info.mapping.get(chain_id, {})
|
29
33
|
self.comet_abi = COMET_ABI
|
30
34
|
self.comet_ext = COMET_EXT_ABI
|
31
35
|
self.reward_abi = REWARD_ABI
|
@@ -47,7 +51,7 @@ class CompoundV3StateService(CompoundStateService):
|
|
47
51
|
):
|
48
52
|
result = {}
|
49
53
|
w3 = self.state_service.get_w3()
|
50
|
-
pools = [value.get('comet') for key, value in self.pool_info.get('reservesList').items()]
|
54
|
+
pools = [value.get('comet') for key, value in self.pool_info.get('reservesList', {}).items()]
|
51
55
|
if comets:
|
52
56
|
pools += comets
|
53
57
|
for pool in pools:
|
@@ -185,7 +189,7 @@ class CompoundV3StateService(CompoundStateService):
|
|
185
189
|
|
186
190
|
assets = {
|
187
191
|
underlying_token: {
|
188
|
-
'deposit_apy':
|
192
|
+
'deposit_apy': asset_info['deposit_apy'],
|
189
193
|
'borrow_apy': asset_info['borrow_apy'],
|
190
194
|
'total_deposit': 0,
|
191
195
|
'total_borrow': asset_info['total_borrow'],
|
@@ -203,7 +207,7 @@ class CompoundV3StateService(CompoundStateService):
|
|
203
207
|
'is_base': False
|
204
208
|
}
|
205
209
|
assets[collateral_address]['total_deposit'] += total_supply
|
206
|
-
assets[collateral_address]['deposit_apy'] = asset_info['deposit_apy']
|
210
|
+
# assets[collateral_address]['deposit_apy'] = asset_info['deposit_apy']
|
207
211
|
|
208
212
|
comet = token_info['token']
|
209
213
|
data[comet] = assets
|