defi-state-querier 0.0.6__py3-none-any.whl → 0.0.9__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.
Files changed (61) hide show
  1. defi_services/__init__.py +1 -1
  2. defi_services/abis/lending/morpho/__init__.py +0 -0
  3. defi_services/abis/lending/morpho/morpho_aave_v2_comptroller_abi.py +2301 -0
  4. defi_services/abis/lending/morpho/morpho_aave_v2_lens_abi.py +1208 -0
  5. defi_services/abis/lending/morpho/morpho_aave_v3_comptroller_abi.py +2994 -0
  6. defi_services/abis/lending/morpho/morpho_compound_comptroller_abi.py +2301 -0
  7. defi_services/abis/lending/morpho/morpho_compound_lens_abi.py +1402 -0
  8. defi_services/abis/lending/morpho/morpho_compound_reward_manager_abi.py +307 -0
  9. defi_services/abis/lending/radiant_v2/__init__.py +0 -0
  10. defi_services/abis/lending/radiant_v2/radiant_v2_incentive_abi.py +1016 -0
  11. defi_services/abis/lending/wepiggy/__init__.py +0 -0
  12. defi_services/abis/lending/wepiggy/wepiggy_distribution_abi.py +1047 -0
  13. defi_services/constants/chain_constant.py +1 -0
  14. defi_services/constants/entities/lending_constant.py +26 -0
  15. defi_services/constants/entities/lending_services.py +85 -0
  16. defi_services/constants/query_constant.py +1 -0
  17. defi_services/constants/token_constant.py +2 -0
  18. defi_services/jobs/processors/__init__.py +0 -0
  19. defi_services/jobs/processors/solana_state_processor.py +101 -0
  20. defi_services/jobs/{state_processor.py → processors/state_processor.py} +9 -4
  21. defi_services/jobs/processors/substrate_state_processor.py +97 -0
  22. defi_services/jobs/queriers/__init__.py +0 -0
  23. defi_services/jobs/queriers/solana_state_querier.py +83 -0
  24. defi_services/jobs/{state_querier.py → queriers/state_querier.py} +3 -2
  25. defi_services/jobs/queriers/substrate_state_querier.py +84 -0
  26. defi_services/services/lending/aave_v2_services.py +8 -7
  27. defi_services/services/lending/aave_v3_services.py +12 -9
  28. defi_services/services/lending/compound_service.py +29 -10
  29. defi_services/services/lending/cream_services.py +5 -4
  30. defi_services/services/lending/flux_services.py +34 -27
  31. defi_services/services/lending/geist_services.py +4 -3
  32. defi_services/services/lending/granary_v1_services.py +6 -7
  33. defi_services/services/lending/iron_bank_service.py +20 -13
  34. defi_services/services/lending/lending_info/aave_v2_services.py +2 -2
  35. defi_services/services/lending/lending_info/ethereum/morpho_aave_v2_eth.py +53 -0
  36. defi_services/services/lending/lending_info/ethereum/morpho_aave_v3_eth.py +51 -0
  37. defi_services/services/lending/lending_info/ethereum/morpho_compound_eth.py +44 -0
  38. defi_services/services/lending/lending_info/ethereum/wepiggy_eth.py +41 -0
  39. defi_services/services/lending/liqee_service.py +5 -26
  40. defi_services/services/lending/morpho_aave_v2_services.py +89 -0
  41. defi_services/services/lending/morpho_aave_v3_services.py +159 -0
  42. defi_services/services/lending/morpho_compound_services.py +233 -0
  43. defi_services/services/lending/onyx_service.py +32 -13
  44. defi_services/services/lending/radiant_v2_services.py +30 -3
  45. defi_services/services/lending/strike_service.py +29 -10
  46. defi_services/services/lending/trava_services.py +8 -7
  47. defi_services/services/lending/uwu_services.py +8 -7
  48. defi_services/services/lending/valas_services.py +6 -5
  49. defi_services/services/lending/venus_services.py +28 -8
  50. defi_services/services/lending/wepiggy_services.py +519 -0
  51. defi_services/services/nft_services.py +1 -1
  52. defi_services/services/solana_token_services.py +46 -0
  53. defi_services/services/substrate_token_services.py +70 -0
  54. defi_services/services/token_services.py +1 -3
  55. defi_services/utils/init_services.py +3 -3
  56. {defi_state_querier-0.0.6.dist-info → defi_state_querier-0.0.9.dist-info}/METADATA +3 -3
  57. {defi_state_querier-0.0.6.dist-info → defi_state_querier-0.0.9.dist-info}/RECORD +60 -32
  58. defi_services/constants/entities/lending.py +0 -97
  59. {defi_state_querier-0.0.6.dist-info → defi_state_querier-0.0.9.dist-info}/LICENSE +0 -0
  60. {defi_state_querier-0.0.6.dist-info → defi_state_querier-0.0.9.dist-info}/WHEEL +0 -0
  61. {defi_state_querier-0.0.6.dist-info → defi_state_querier-0.0.9.dist-info}/top_level.txt +0 -0
@@ -5,11 +5,13 @@ from web3 import Web3
5
5
  from defi_services.abis.lending.aave_v3.aave_v3_incentives_abi import AAVE_V3_INCENTIVES_ABI
6
6
  from defi_services.abis.lending.aave_v3.aave_v3_lending_pool_abi import AAVE_V3_LENDING_POOL_ABI
7
7
  from defi_services.abis.lending.aave_v3.aave_v3_oracle_abi import AAVE_V3_ORACLE_ABI
8
+ from defi_services.abis.lending.morpho.morpho_aave_v3_comptroller_abi import MORPHO_AAVE_V3_COMPTROLLER_ABI
8
9
  from defi_services.abis.token.erc20_abi import ERC20_ABI
9
10
  from defi_services.constants.chain_constant import Chain
10
11
  from defi_services.constants.db_constant import DBConst
12
+ from defi_services.constants.entities.lending_constant import Lending
11
13
  from defi_services.constants.time_constant import TimeConstants
12
- from defi_services.jobs.state_querier import StateQuerier
14
+ from defi_services.jobs.queriers.state_querier import StateQuerier
13
15
  from defi_services.services.lending.aave_v2_services import AaveV2StateService
14
16
  from defi_services.services.lending.lending_info.arbitrum.aave_v3_arbitrum import AAVE_V3_ARB
15
17
  from defi_services.services.lending.lending_info.avalanche.aave_v3_avalanche import AAVE_V3_AVALANCHE
@@ -21,7 +23,7 @@ from defi_services.services.lending.lending_info.polygon.aave_v3_polygon import
21
23
  logger = logging.getLogger("Aave V3 Lending Pool State Service")
22
24
 
23
25
 
24
- class AaveInfo:
26
+ class AaveV3Info:
25
27
  mapping = {
26
28
  Chain.ethereum: AAVE_V3_ETH,
27
29
  Chain.polygon: AAVE_V3_POLYGON,
@@ -35,17 +37,18 @@ class AaveInfo:
35
37
  class AaveV3StateService(AaveV2StateService):
36
38
  def __init__(self, state_service: StateQuerier, chain_id: str = "0x1"):
37
39
  super().__init__(state_service, chain_id)
38
- self.name = f"{chain_id}_aave-v3"
40
+ self.name = f"{chain_id}_{Lending.aave_v3}"
39
41
  self.chain_id = chain_id
40
- self.pool_info = AaveInfo.mapping.get(chain_id)
42
+ self.pool_info = AaveV3Info.mapping.get(chain_id)
41
43
  self.lending_abi = AAVE_V3_LENDING_POOL_ABI
42
44
  self.incentive_abi = AAVE_V3_INCENTIVES_ABI
43
45
  self.oracle_abi = AAVE_V3_ORACLE_ABI
46
+ self.comptroller_abi = MORPHO_AAVE_V3_COMPTROLLER_ABI
44
47
  self.state_service = state_service
45
48
 
46
49
  def get_service_info(self):
47
50
  info = {
48
- "aave-v3": {
51
+ Lending.aave_v3: {
49
52
  "chain_id": self.chain_id,
50
53
  "type": "lending",
51
54
  "protocol_info": self.pool_info
@@ -89,7 +92,7 @@ class AaveV3StateService(AaveV2StateService):
89
92
  "getAssetsPrices", list(reserves_info.keys()), block_number)
90
93
  reward_tokens = self.pool_info.get("rewardTokensList")
91
94
  for token_address, value in reserves_info.items():
92
- reserve_key = f"getReserveData_{token_address}_{block_number}".lower()
95
+ reserve_key = f"getReserveData_{self.name}_{token_address}_{block_number}".lower()
93
96
  atoken_total_supply_key = f'totalSupply_{value["tToken"]}_{block_number}'.lower()
94
97
  debt_token_total_supply_key = f'totalSupply_{value["dToken"]}_{block_number}'.lower()
95
98
  sdebt_token_total_supply_key = f'totalSupply_{value["sdToken"]}_{block_number}'.lower()
@@ -200,7 +203,7 @@ class AaveV3StateService(AaveV2StateService):
200
203
  ):
201
204
  reserves_data = {}
202
205
  for token in reserves_info:
203
- get_reserve_data_call_id = f'getReserveData_{token}_{block_number}'.lower()
206
+ get_reserve_data_call_id = f'getReserveData_{self.name}_{token}_{block_number}'.lower()
204
207
  reserves_data[token.lower()] = decoded_data.get(get_reserve_data_call_id)
205
208
  reward_tokens = self.pool_info.get("rewardTokensList")
206
209
  interest_rate, atokens, debt_tokens, sdebt_tokens, decimals, asset_data_tokens = {}, {}, {}, {}, {}, {}
@@ -270,13 +273,13 @@ class AaveV3StateService(AaveV2StateService):
270
273
  tokens = []
271
274
  for key, value in reserves_info.items():
272
275
  tokens += [Web3.toChecksumAddress(value["tToken"]), Web3.toChecksumAddress(value["dToken"])]
273
- key = f"getAllUserRewards_{wallet_address}_{block_number}".lower()
276
+ key = f"getAllUserRewards_{self.name}_{wallet_address}_{block_number}".lower()
274
277
  rpc_calls[key] = self.get_function_incentive_info("getAllUserRewards", [tokens, Web3.toChecksumAddress(wallet_address)], block_number)
275
278
  return rpc_calls
276
279
 
277
280
  def calculate_all_rewards_balance(
278
281
  self, decoded_data: dict, wallet_address: str, block_number: int = "latest"):
279
- key = f"getAllUserRewards_{wallet_address}_{block_number}".lower()
282
+ key = f"getAllUserRewards_{self.name}_{wallet_address}_{block_number}".lower()
280
283
  rewards = decoded_data.get(key)
281
284
  result = dict(zip(*rewards))
282
285
  for key, value in result.items():
@@ -9,9 +9,10 @@ from defi_services.abis.token.ctoken_abi import CTOKEN_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
+ from defi_services.constants.entities.lending_constant import Lending
12
13
  from defi_services.constants.query_constant import Query
13
14
  from defi_services.constants.token_constant import ContractAddresses, Token
14
- from defi_services.jobs.state_querier import StateQuerier
15
+ from defi_services.jobs.queriers.state_querier import StateQuerier
15
16
  from defi_services.services.lending.lending_info.ethereum.compound_eth import COMPOUND_ETH
16
17
  from defi_services.services.protocol_services import ProtocolServices
17
18
 
@@ -26,7 +27,7 @@ class CompoundInfo:
26
27
 
27
28
  class CompoundStateService(ProtocolServices):
28
29
  def __init__(self, state_service: StateQuerier, chain_id: str = "0x1"):
29
- self.name = f"{chain_id}_compound"
30
+ self.name = f"{chain_id}_{Lending.compound}"
30
31
  self.chain_id = chain_id
31
32
  self.pool_info = CompoundInfo.mapping.get(chain_id)
32
33
  self.state_service = state_service
@@ -36,7 +37,7 @@ class CompoundStateService(ProtocolServices):
36
37
  # BASIC FUNCTIONS
37
38
  def get_service_info(self):
38
39
  info = {
39
- "compound": {
40
+ Lending.compound: {
40
41
  "chain_id": self.chain_id,
41
42
  "type": "lending",
42
43
  "protocol_info": self.pool_info
@@ -105,7 +106,7 @@ class CompoundStateService(ProtocolServices):
105
106
  ))
106
107
 
107
108
  if Query.protocol_reward in query_types and wallet:
108
- result.update(self.calculate_rewards_balance(
109
+ result.update(self.calculate_claimable_rewards_balance(
109
110
  wallet, decoded_data, block_number
110
111
  ))
111
112
 
@@ -138,7 +139,7 @@ class CompoundStateService(ProtocolServices):
138
139
  rpc_calls.update(self.get_apy_lending_pool_function_info(reserves_info, block_number, is_oracle_price))
139
140
 
140
141
  if Query.protocol_reward in query_types and wallet:
141
- rpc_calls.update(self.get_rewards_balance_function_info(wallet, block_number))
142
+ rpc_calls.update(self.get_claimable_rewards_balance_function_info(wallet, block_number))
142
143
 
143
144
  logger.info(f"Get encoded rpc calls in {time.time() - begin}s")
144
145
  return rpc_calls
@@ -155,10 +156,10 @@ class CompoundStateService(ProtocolServices):
155
156
  ctoken = value.get("ctoken")
156
157
  speed_key = f"compSpeeds_{ctoken}_{block_number}".lower()
157
158
  mint_key = f"mintGuardianPaused_{ctoken}_{block_number}".lower()
158
- borrow_key = f"borrowGuardianPaused_{token}_{block_number}".lower()
159
- metadata_key = f"cTokenMetadata_{token}_{block_number}".lower()
159
+ borrow_key = f"borrowGuardianPaused_{ctoken}_{block_number}".lower()
160
+ metadata_key = f"cTokenMetadata_{ctoken}_{block_number}".lower()
160
161
  if is_price_oracle:
161
- price_key = f"cTokenUnderlyingPrice_{token}_{block_number}".lower()
162
+ price_key = f"cTokenUnderlyingPrice_{ctoken}_{block_number}".lower()
162
163
  rpc_calls[price_key] = self.get_comptroller_function_info('cTokenUnderlyingPrice', [ctoken],
163
164
  block_number)
164
165
  rpc_calls[speed_key] = self.get_comptroller_function_info('compSpeeds', [ctoken], block_number)
@@ -303,6 +304,24 @@ class CompoundStateService(ProtocolServices):
303
304
  }
304
305
 
305
306
  # REWARDS BALANCE
307
+ def get_claimable_rewards_balance_function_info(
308
+ self,
309
+ wallet_address: str,
310
+ block_number: int = "latest",
311
+ ):
312
+ rpc_call = self.get_comptroller_function_info("compAccrued", [wallet_address], block_number)
313
+ get_reward_id = f"compAccrued_{self.name}_{wallet_address}_{block_number}".lower()
314
+ return {get_reward_id: rpc_call}
315
+
316
+ def calculate_claimable_rewards_balance(self, wallet_address: str, decoded_data: dict, block_number: int = "latest"):
317
+ get_reward_id = f"compAccrued_{self.name}_{wallet_address}_{block_number}".lower()
318
+ rewards = decoded_data.get(get_reward_id) / 10 ** 18
319
+ reward_token = self.pool_info.get("rewardToken")
320
+ result = {
321
+ reward_token: {"amount": rewards}
322
+ }
323
+ return result
324
+
306
325
  def get_rewards_balance_function_info(
307
326
  self,
308
327
  wallet_address: str,
@@ -313,11 +332,11 @@ class CompoundStateService(ProtocolServices):
313
332
  Web3.toChecksumAddress(self.pool_info.get("comptrollerAddress")),
314
333
  Web3.toChecksumAddress(wallet_address)]
315
334
  rpc_call = self.get_lens_function_info("getCompBalanceMetadataExt", fn_paras, block_number)
316
- get_reward_id = f"getCompBalanceMetadataExt_{wallet_address}_{block_number}".lower()
335
+ get_reward_id = f"getCompBalanceMetadataExt_{self.name}_{wallet_address}_{block_number}".lower()
317
336
  return {get_reward_id: rpc_call}
318
337
 
319
338
  def calculate_rewards_balance(self, wallet_address: str, decoded_data: dict, block_number: int = "latest"):
320
- get_reward_id = f"getCompBalanceMetadataExt_{wallet_address}_{block_number}".lower()
339
+ get_reward_id = f"getCompBalanceMetadataExt_{self.name}_{wallet_address}_{block_number}".lower()
321
340
  rewards = decoded_data.get(get_reward_id)[-1] / 10 ** 18
322
341
  reward_token = self.pool_info.get("rewardToken")
323
342
  result = {
@@ -3,7 +3,8 @@ import logging
3
3
  from web3 import Web3
4
4
 
5
5
  from defi_services.constants.chain_constant import Chain
6
- from defi_services.jobs.state_querier import StateQuerier
6
+ from defi_services.constants.entities.lending_constant import Lending
7
+ from defi_services.jobs.queriers.state_querier import StateQuerier
7
8
  from defi_services.services.lending.compound_service import CompoundStateService
8
9
  from defi_services.services.lending.lending_info.bsc.cream_bsc import CREAM_BSC
9
10
 
@@ -19,13 +20,13 @@ class CreamInfo:
19
20
  class CreamStateService(CompoundStateService):
20
21
  def __init__(self, state_service: StateQuerier, chain_id: str = "0x1"):
21
22
  super().__init__(state_service, chain_id)
22
- self.name = f"{chain_id}_cream-lending"
23
+ self.name = f"{chain_id}_{Lending.cream}"
23
24
  self.chain_id = chain_id
24
25
  self.pool_info = CreamInfo.mapping.get(chain_id)
25
26
 
26
27
  def get_service_info(self):
27
28
  info = {
28
- "cream-lending": {
29
+ Lending.cream: {
29
30
  "chain_id": self.chain_id,
30
31
  "type": "lending",
31
32
  "protocol_info": self.pool_info
@@ -43,6 +44,6 @@ class CreamStateService(CompoundStateService):
43
44
  Web3.toChecksumAddress(self.pool_info.get("comptrollerImplementationAddress")),
44
45
  Web3.toChecksumAddress(wallet_address)]
45
46
  rpc_call = self.get_lens_function_info("getCompBalanceMetadataExt", fn_paras, block_number)
46
- get_reward_id = f"getCompBalanceMetadataExt_{wallet_address}_{block_number}".lower()
47
+ get_reward_id = f"getCompBalanceMetadataExt_{self.name}_{wallet_address}_{block_number}".lower()
47
48
  return {get_reward_id: rpc_call}
48
49
 
@@ -8,10 +8,10 @@ from defi_services.abis.lending.cream.cream_lens_abi import CREAM_LENS_ABI
8
8
  from defi_services.abis.token.ctoken_abi import CTOKEN_ABI
9
9
  from defi_services.abis.token.erc20_abi import ERC20_ABI
10
10
  from defi_services.constants.chain_constant import Chain
11
- from defi_services.constants.db_constant import DBConst
11
+ from defi_services.constants.entities.lending_constant import Lending
12
12
  from defi_services.constants.query_constant import Query
13
13
  from defi_services.constants.token_constant import ContractAddresses, Token
14
- from defi_services.jobs.state_querier import StateQuerier
14
+ from defi_services.jobs.queriers.state_querier import StateQuerier
15
15
  from defi_services.services.lending.lending_info.ethereum.flux_eth import FLUX_ETH
16
16
  from defi_services.services.protocol_services import ProtocolServices
17
17
 
@@ -26,10 +26,9 @@ class FluxInfo:
26
26
 
27
27
  class FluxStateService(ProtocolServices):
28
28
  def __init__(self, state_service: StateQuerier, chain_id: str = "0x1"):
29
- self.name = f"{chain_id}_flux-finance"
30
- self.name = f"{chain_id}_flux"
29
+ self.name = f"{chain_id}_{Lending.flux}"
31
30
  self.chain_id = chain_id
32
- self.flux_info = FluxInfo.mapping.get(chain_id)
31
+ self.pool_info = FluxInfo.mapping.get(chain_id)
33
32
  self.state_service = state_service
34
33
  self.lens_abi = CREAM_LENS_ABI
35
34
  self.comptroller_abi = CREAM_COMPTROLLER_ABI
@@ -37,10 +36,10 @@ class FluxStateService(ProtocolServices):
37
36
  # BASIC FUNCTIONS
38
37
  def get_service_info(self):
39
38
  info = {
40
- "flux-finance": {
39
+ Lending.flux: {
41
40
  "chain_id": self.chain_id,
42
41
  "type": "lending",
43
- "protocol_info": self.flux_info
42
+ "protocol_info": self.pool_info
44
43
  }
45
44
  }
46
45
  return info
@@ -50,7 +49,7 @@ class FluxStateService(ProtocolServices):
50
49
  block_number: int = "latest"):
51
50
  _w3 = self.state_service.get_w3()
52
51
  comptroller_contract = _w3.eth.contract(
53
- address=_w3.toChecksumAddress(self.flux_info.get("comptrollerAddress")), abi=self.comptroller_abi)
52
+ address=_w3.toChecksumAddress(self.pool_info.get("comptrollerAddress")), abi=self.comptroller_abi)
54
53
  ctokens = []
55
54
  for token in comptroller_contract.functions.getAllMarkets().call(block_identifier=block_number):
56
55
  if token in [ContractAddresses.LUNA.lower(), ContractAddresses.UST.lower(), ContractAddresses.LUNA,
@@ -59,7 +58,7 @@ class FluxStateService(ProtocolServices):
59
58
  ctokens.append(token)
60
59
 
61
60
  lens_contract = _w3.eth.contract(
62
- address=Web3.toChecksumAddress(self.flux_info.get("lensAddress")), abi=self.lens_abi
61
+ address=Web3.toChecksumAddress(self.pool_info.get("lensAddress")), abi=self.lens_abi
63
62
  )
64
63
  tokens = [Web3.toChecksumAddress(i) for i in ctokens]
65
64
  metadata = lens_contract.functions.cTokenMetadataAll(tokens).call(block_identifier=block_number)
@@ -76,8 +75,8 @@ class FluxStateService(ProtocolServices):
76
75
 
77
76
  def get_token_list(self):
78
77
  begin = time.time()
79
- tokens = [self.flux_info.get('rewardToken'), self.flux_info.get("poolToken")]
80
- for token in self.flux_info.get("reservesList"):
78
+ tokens = [self.pool_info.get('rewardToken'), self.pool_info.get("poolToken")]
79
+ for token in self.pool_info.get("reservesList"):
81
80
  if token == Token.native_token:
82
81
  tokens.append(Token.wrapped_token.get(self.chain_id))
83
82
  continue
@@ -94,7 +93,7 @@ class FluxStateService(ProtocolServices):
94
93
  **kwargs
95
94
  ):
96
95
  begin = time.time()
97
- reserves_info = kwargs.get("reserves_info", self.flux_info.get("reservesList"))
96
+ reserves_info = kwargs.get("reserves_info", self.pool_info.get("reservesList"))
98
97
  token_prices = kwargs.get("token_prices", {})
99
98
  wrapped_native_token_price = token_prices.get(Token.wrapped_token.get(self.chain_id), 1)
100
99
  pool_decimals = kwargs.get("pool_decimals", 18)
@@ -105,7 +104,7 @@ class FluxStateService(ProtocolServices):
105
104
  ))
106
105
 
107
106
  if Query.protocol_reward in query_types and wallet:
108
- result.update(self.calculate_rewards_balance(
107
+ result.update(self.calculate_claimable_rewards_balance(
109
108
  wallet, decoded_data, block_number
110
109
  ))
111
110
 
@@ -123,7 +122,7 @@ class FluxStateService(ProtocolServices):
123
122
  reserves_info = kwargs.get("reserves_info", {})
124
123
  is_oracle_price = kwargs.get("is_oracle_price", False) # get price by oracle
125
124
  if not reserves_info:
126
- reserves_info = self.flux_info['reservesList']
125
+ reserves_info = self.pool_info['reservesList']
127
126
  rpc_calls = {}
128
127
  if Query.deposit_borrow in query_types and wallet:
129
128
  rpc_calls.update(self.get_wallet_deposit_borrow_balance_function_info(
@@ -131,21 +130,30 @@ class FluxStateService(ProtocolServices):
131
130
  ))
132
131
 
133
132
  if Query.protocol_reward in query_types and wallet:
134
- rpc_calls.update(self.get_rewards_balance_function_info(wallet, block_number))
133
+ rpc_calls.update(self.get_claimable_rewards_balance_function_info(wallet, block_number))
135
134
 
136
135
  logger.info(f"Get encoded rpc calls in {time.time() - begin}s")
137
136
  return rpc_calls
138
137
 
139
138
  # REWARDS BALANCE
140
- def get_rewards_balance_function_info(
139
+ def get_claimable_rewards_balance_function_info(
141
140
  self,
142
141
  wallet_address: str,
143
142
  block_number: int = "latest",
144
143
  ):
145
- return {}
146
-
147
- def calculate_rewards_balance(self, wallet_address: str, decoded_data: dict, block_number: int = "latest"):
148
- return {}
144
+ rpc_call = self.get_comptroller_function_info("compAccrued", [wallet_address], block_number)
145
+ get_reward_id = f"compAccrued_{self.name}_{wallet_address}_{block_number}".lower()
146
+ return {get_reward_id: rpc_call}
147
+
148
+ def calculate_claimable_rewards_balance(self, wallet_address: str, decoded_data: dict,
149
+ block_number: int = "latest"):
150
+ get_reward_id = f"compAccrued_{self.name}_{wallet_address}_{block_number}".lower()
151
+ rewards = decoded_data.get(get_reward_id) / 10 ** 18
152
+ reward_token = self.pool_info.get("rewardToken")
153
+ result = {
154
+ reward_token: {"amount": rewards}
155
+ }
156
+ return result
149
157
 
150
158
  # WALLET DEPOSIT BORROW BALANCE
151
159
  def get_wallet_deposit_borrow_balance_function_info(
@@ -292,15 +300,14 @@ class FluxStateService(ProtocolServices):
292
300
  result[token]['deposit_amount_in_usd'] += deposit_amount_in_usd
293
301
  return result
294
302
 
295
-
296
303
  def get_lens_function_info(self, fn_name: str, fn_paras: list, block_number: int = "latest"):
297
304
  return self.state_service.get_function_info(
298
- self.flux_info['lensAddress'], self.lens_abi, fn_name, fn_paras, block_number
305
+ self.pool_info['lensAddress'], self.lens_abi, fn_name, fn_paras, block_number
299
306
  )
300
307
 
301
308
  def get_comptroller_function_info(self, fn_name: str, fn_paras: list, block_number: int = "latest"):
302
309
  return self.state_service.get_function_info(
303
- self.flux_info['comptrollerAddress'], self.comptroller_abi, fn_name, fn_paras, block_number
310
+ self.pool_info['comptrollerAddress'], self.comptroller_abi, fn_name, fn_paras, block_number
304
311
  )
305
312
 
306
313
  def get_ctoken_function_info(self, ctoken: str, fn_name: str, fn_paras: list, block_number: int = "latest"):
@@ -314,7 +321,7 @@ class FluxStateService(ProtocolServices):
314
321
  block_number: int = "latest"
315
322
  ):
316
323
  tokens = [Web3.toChecksumAddress(value['cToken']) for key, value in reserves_info.items()]
317
- key = f"cTokenMetadataAll_{self.flux_info.get('lensAddress')}_{block_number}".lower()
324
+ key = f"cTokenMetadataAll_{self.pool_info.get('lensAddress')}_{block_number}".lower()
318
325
  return {
319
326
  key: self.get_lens_function_info("cTokenMetadataAll", tokens, block_number)
320
327
  }
@@ -322,14 +329,14 @@ class FluxStateService(ProtocolServices):
322
329
  def ctoken_underlying_price_all(
323
330
  self, reserves_info, block_number: int = 'latest'):
324
331
  tokens = [Web3.toChecksumAddress(value['cToken']) for key, value in reserves_info.items()]
325
- key = f"cTokenUnderlyingPriceAll_{self.flux_info.get('lensAddress')}_{block_number}".lower()
332
+ key = f"cTokenUnderlyingPriceAll_{self.pool_info.get('lensAddress')}_{block_number}".lower()
326
333
  return {
327
334
  key: self.get_lens_function_info("cTokenUnderlyingPriceAll", tokens, block_number)
328
335
  }
329
336
 
330
337
  def get_all_markets(
331
338
  self, block_number: int = 'latest'):
332
- key = f"getAllMarkets_{self.flux_info.get('comptrollerAddress')}_{block_number}".lower()
339
+ key = f"getAllMarkets_{self.pool_info.get('comptrollerAddress')}_{block_number}".lower()
333
340
  return {
334
341
  key: self.get_comptroller_function_info("getAllMarkets", [], block_number)
335
- }
342
+ }
@@ -1,7 +1,8 @@
1
1
  import logging
2
2
 
3
3
  from defi_services.constants.chain_constant import Chain
4
- from defi_services.jobs.state_querier import StateQuerier
4
+ from defi_services.constants.entities.lending_constant import Lending
5
+ from defi_services.jobs.queriers.state_querier import StateQuerier
5
6
  from defi_services.services.lending.lending_info.fantom.geist_ftm import GEIST_ETH
6
7
  from defi_services.services.lending.valas_services import ValasStateService
7
8
 
@@ -17,12 +18,12 @@ class GeistInfo:
17
18
  class GeistStateService(ValasStateService):
18
19
  def __init__(self, state_service: StateQuerier, chain_id: str = "0xfa"):
19
20
  super().__init__(state_service, chain_id)
20
- self.name = f"{chain_id}_geist-finance"
21
+ self.name = f"{chain_id}_{Lending.geist}"
21
22
  self.pool_info = GeistInfo.mapping.get(chain_id)
22
23
 
23
24
  def get_service_info(self):
24
25
  info = {
25
- "geist-finance": {
26
+ Lending.geist: {
26
27
  "chain_id": self.chain_id,
27
28
  "type": "lending",
28
29
  "protocol_info": self.pool_info
@@ -8,11 +8,10 @@ from defi_services.abis.lending.aave_v2_and_forlks.oracle_abi import ORACLE_ABI
8
8
  from defi_services.abis.lending.granary.granary_rewarder_abi import GRANARY_REWARDER_ABI
9
9
  from defi_services.abis.token.erc20_abi import ERC20_ABI
10
10
  from defi_services.constants.chain_constant import Chain
11
- from defi_services.constants.db_constant import DBConst
11
+ from defi_services.constants.entities.lending_constant import Lending
12
12
  from defi_services.constants.query_constant import Query
13
- from defi_services.constants.time_constant import TimeConstants
14
13
  from defi_services.constants.token_constant import Token
15
- from defi_services.jobs.state_querier import StateQuerier
14
+ from defi_services.jobs.queriers.state_querier import StateQuerier
16
15
  from defi_services.services.lending.lending_info.ethereum.granary_v1_eth import GRANARY_V1_ETH
17
16
  from defi_services.services.protocol_services import ProtocolServices
18
17
 
@@ -27,7 +26,7 @@ class GranaryV1Info:
27
26
 
28
27
  class GranaryV1StateService(ProtocolServices):
29
28
  def __init__(self, state_service: StateQuerier, chain_id: str = "0x1"):
30
- self.name = f"{chain_id}_granary-finance"
29
+ self.name = f"{chain_id}_{Lending.granary}"
31
30
  self.chain_id = chain_id
32
31
  self.pool_info = GranaryV1Info.mapping.get(chain_id)
33
32
  self.lending_abi = LENDING_POOL_ABI
@@ -39,7 +38,7 @@ class GranaryV1StateService(ProtocolServices):
39
38
  # BASIC FUNCTION
40
39
  def get_service_info(self):
41
40
  info = {
42
- "granary-finance": {
41
+ Lending.granary: {
43
42
  "chain_id": self.chain_id,
44
43
  "type": "lending",
45
44
  "protocol_info": self.pool_info
@@ -244,7 +243,7 @@ class GranaryV1StateService(ProtocolServices):
244
243
  for token, value in reserves_info.items():
245
244
  atoken, debt_token = Web3.toChecksumAddress(value['tToken']), Web3.toChecksumAddress(value['dToken'])
246
245
  tokens += [atoken, debt_token]
247
- key = f"getAllUserRewardsBalance_{wallet_address}_{block_number}".lower()
246
+ key = f"getAllUserRewardsBalance_{self.name}_{wallet_address}_{block_number}".lower()
248
247
  rpc_calls[key] = self.get_function_rewarder_info(
249
248
  "getAllUserRewardsBalance", [tokens, wallet_address], block_number)
250
249
 
@@ -253,7 +252,7 @@ class GranaryV1StateService(ProtocolServices):
253
252
  def calculate_all_rewards_balance(
254
253
  self, decoded_data: dict, wallet_address: str, block_number: int = "latest"):
255
254
 
256
- key = f"getAllUserRewardsBalance_{wallet_address}_{block_number}".lower()
255
+ key = f"getAllUserRewardsBalance_{self.name}_{wallet_address}_{block_number}".lower()
257
256
  reward_token = decoded_data.get(key)[0][0]
258
257
  rewards = decoded_data.get(key)[-1][0] / 10 ** 18
259
258
  result = {
@@ -4,15 +4,14 @@ import time
4
4
  from web3 import Web3
5
5
 
6
6
  from defi_services.abis.lending.cream.cream_comptroller_abi import CREAM_COMPTROLLER_ABI
7
- from defi_services.abis.lending.cream.cream_lens_abi import CREAM_LENS_ABI
8
7
  from defi_services.abis.lending.iron_bank.iron_lens_abi import IRON_LENS_ABI
9
8
  from defi_services.abis.token.ctoken_abi import CTOKEN_ABI
10
9
  from defi_services.abis.token.erc20_abi import ERC20_ABI
11
10
  from defi_services.constants.chain_constant import Chain
12
- from defi_services.constants.db_constant import DBConst
11
+ from defi_services.constants.entities.lending_constant import Lending
13
12
  from defi_services.constants.query_constant import Query
14
13
  from defi_services.constants.token_constant import ContractAddresses, Token
15
- from defi_services.jobs.state_querier import StateQuerier
14
+ from defi_services.jobs.queriers.state_querier import StateQuerier
16
15
  from defi_services.services.lending.lending_info.ethereum.iron_bank_eth import IRON_BANK_ETH
17
16
  from defi_services.services.protocol_services import ProtocolServices
18
17
 
@@ -27,7 +26,7 @@ class IronBankInfo:
27
26
 
28
27
  class IronBankStateService(ProtocolServices):
29
28
  def __init__(self, state_service: StateQuerier, chain_id: str = "0x1"):
30
- self.name = f"{chain_id}_iron-bank"
29
+ self.name = f"{chain_id}_{Lending.iron_bank}"
31
30
  self.chain_id = chain_id
32
31
  self.iron_bank_info = IronBankInfo.mapping.get(chain_id)
33
32
  self.state_service = state_service
@@ -37,7 +36,7 @@ class IronBankStateService(ProtocolServices):
37
36
  # BASIC FUNCTIONS
38
37
  def get_service_info(self):
39
38
  info = {
40
- "iron-bank": {
39
+ Lending.iron_bank: {
41
40
  "chain_id": self.chain_id,
42
41
  "type": "lending",
43
42
  "protocol_info": self.iron_bank_info
@@ -107,7 +106,7 @@ class IronBankStateService(ProtocolServices):
107
106
  ))
108
107
 
109
108
  if Query.protocol_reward in query_types and wallet:
110
- result.update(self.calculate_rewards_balance(
109
+ result.update(self.calculate_claimable_rewards_balance(
111
110
  wallet, decoded_data, block_number
112
111
  ))
113
112
 
@@ -140,22 +139,30 @@ class IronBankStateService(ProtocolServices):
140
139
  # rpc_calls.update(self.get_apy_lending_pool_function_info(reserves_info, block_number, is_oracle_price))
141
140
 
142
141
  if Query.protocol_reward in query_types and wallet:
143
- rpc_calls.update(self.get_rewards_balance_function_info(wallet, reserves_info, block_number))
142
+ rpc_calls.update(self.get_claimable_rewards_balance_function_info(wallet, block_number))
144
143
 
145
144
  logger.info(f"Get encoded rpc calls in {time.time() - begin}s")
146
145
  return rpc_calls
147
146
 
148
147
  # REWARDS BALANCE
149
- def get_rewards_balance_function_info(
148
+ def get_claimable_rewards_balance_function_info(
150
149
  self,
151
150
  wallet_address: str,
152
- reserves_info: dict,
153
151
  block_number: int = "latest",
154
152
  ):
155
- return {}
156
-
157
- def calculate_rewards_balance(self, wallet_address: str, decoded_data: dict, block_number: int = "latest"):
158
- return {}
153
+ rpc_call = self.get_comptroller_function_info("compAccrued", [wallet_address], block_number)
154
+ get_reward_id = f"compAccrued_{self.name}_{wallet_address}_{block_number}".lower()
155
+ return {get_reward_id: rpc_call}
156
+
157
+ def calculate_claimable_rewards_balance(self, wallet_address: str, decoded_data: dict,
158
+ block_number: int = "latest"):
159
+ get_reward_id = f"compAccrued_{self.name}_{wallet_address}_{block_number}".lower()
160
+ rewards = decoded_data.get(get_reward_id) / 10 ** 18
161
+ reward_token = self.iron_bank_info.get("rewardToken")
162
+ result = {
163
+ reward_token: {"amount": rewards}
164
+ }
165
+ return result
159
166
 
160
167
  # WALLET DEPOSIT BORROW BALANCE
161
168
  def get_wallet_deposit_borrow_balance_function_info(
@@ -11,7 +11,7 @@ from defi_services.constants.db_constant import DBConst
11
11
  from defi_services.constants.query_constant import Query
12
12
  from defi_services.constants.time_constant import TimeConstants
13
13
  from defi_services.constants.token_constant import Token
14
- from defi_services.jobs.state_querier import StateQuerier
14
+ from defi_services.jobs.queriers.state_querier import StateQuerier
15
15
  from defi_services.services.lending.lending_info.ethereum.aave_v2_eth import AAVE_V2_ETH
16
16
  from defi_services.services.lending.lending_info.polygon.aave_v2_polygon import AAVE_V2_POLYGON
17
17
  from defi_services.services.protocol_services import ProtocolServices
@@ -75,7 +75,7 @@ class AaveV2StateService(ProtocolServices):
75
75
  logger.info(f"Get token list related in {time.time()-begin}s")
76
76
  return tokens
77
77
 
78
- def (
78
+ def get_data(
79
79
  self,
80
80
  query_types: list,
81
81
  wallet: str,
@@ -0,0 +1,53 @@
1
+ MORPHO_AAVE_V2_ETH = {
2
+ "name": "Compound Lending Pool",
3
+ "rewardToken": "0x4da27a545c0c5b758a6ba100e3a049001de870f5",
4
+ "comptrollerAddress": "0x777777c9898d384f785ee44acfe945efdff5f3e0",
5
+ "lensAddress": "0x507fa343d0a90786d86c7cd885f5c49263a91ff4",
6
+ "poolToken": "0x9994e35db50125e0df82e4c2dde62496ce330999",
7
+ "type": "LENDING_POOL",
8
+ "forked": "morpho",
9
+ "reservesList": {
10
+ "0x6b175474e89094c44da98b954eedeac495271d0f": {
11
+ "tToken": "0x028171bca77440897b824ca71d1c56cac55b68a3",
12
+ "dToken": "0x6c3c78838c761c6ac7be9f59fe808ea2a6e4379d",
13
+ "sdToken": "0x778a13d3eeb110a4f7bb6529f99c000119a08e92",
14
+ "liquidationThreshold": 0.87
15
+ },
16
+ "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": {
17
+ "tToken": "0x030ba81f1c18d280636f32af80b9aad02cf0854e",
18
+ "dToken": "0xf63b34710400cad3e044cffdcab00a0f32e33ecf",
19
+ "sdToken": "0x4e977830ba4bd783c0bb7f15d3e243f73ff57121",
20
+ "liquidationThreshold": 0.86
21
+ },
22
+ "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": {
23
+ "tToken": "0xbcca60bb61934080951369a648fb03df4f96263c",
24
+ "dToken": "0x619beb58998ed2278e08620f97007e1116d5d25b",
25
+ "sdToken": "0xe4922afab0bbadd8ab2a88e0c79d884ad337fca6",
26
+ "liquidationThreshold": 0.875
27
+ },
28
+ "0xdac17f958d2ee523a2206206994597c13d831ec7": {
29
+ "tToken": "0x3ed3b47dd13ec9a98b44e6204a523e766b225811",
30
+ "dToken": "0x531842cebbdd378f8ee36d171d6cc9c4fcf475ec",
31
+ "sdToken": "0xe91d55ab2240594855abd11b3faae801fd4c4687",
32
+ "liquidationThreshold": 0.0
33
+ },
34
+ "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": {
35
+ "tToken": "0x9ff58f4ffb29fa2266ab25e75e2a8b3503311656",
36
+ "dToken": "0x9c39809dec7f95f5e0713634a4d0701329b3b4d2",
37
+ "sdToken": "0x51b039b9afe64b78758f8ef091211b5387ea717c",
38
+ "liquidationThreshold": 0.82
39
+ },
40
+ "0xae7ab96520de3a18e5e111b5eaab095312d7fe84": {
41
+ "tToken": "0x1982b2f5814301d4e9a8b0201555376e62f82428",
42
+ "dToken": "0xa9deac9f00dc4310c35603fcd9d34d1a750f81db",
43
+ "sdToken": "0x66457616dd8489df5d0afd8678f4a260088aaf55",
44
+ "liquidationThreshold": 0.83
45
+ },
46
+ "0xd533a949740bb3306d119cc777fa900ba034cd52": {
47
+ "tToken": "0x8dae6cb04688c62d939ed9b68d32bc62e49970b1",
48
+ "dToken": "0x00ad8ebf64f141f1c81e9f8f792d3d1631c6c684",
49
+ "sdToken": "0x9288059a74f589c919c7cf1db433251cdfeb874b",
50
+ "liquidationThreshold": 0.58
51
+ },
52
+ }
53
+ }