defi-state-querier 0.0.6__py3-none-any.whl → 0.0.9__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,51 @@
1
+ MORPHO_AAVE_V3_ETH = {
2
+ "name": "Compound Lending Pool",
3
+ "comptrollerAddress": "0x33333aea097c193e66081e930c33020272b33333",
4
+ "poolToken": "0x9994e35db50125e0df82e4c2dde62496ce330999",
5
+ "type": "LENDING_POOL",
6
+ "forked": "morpho-aave-v3",
7
+ "reservesList": {
8
+ "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": {
9
+ "tToken": "0x4d5f47fa6a74757f35c14fd3a6ef8e3c9bc514e8",
10
+ "sdToken": "0x102633152313c81cd80419b6ecf66d14ad68949a",
11
+ "dToken": "0xea51d7853eefb32b6ee06b1c12e6dcca88be0ffe",
12
+ "liquidationThreshold": 0.83
13
+ },
14
+ "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0": {
15
+ "tToken": "0x0b925ed163218f6662a35e0f0371ac234f9e9371",
16
+ "sdToken": "0x39739943199c0fbfe9e5f1b5b160cd73a64cb85d",
17
+ "dToken": "0xc96113eed8cab59cd8a66813bcb0ceb29f06d2e4",
18
+ "liquidationThreshold": 0.8
19
+ },
20
+ "0x6b175474e89094c44da98b954eedeac495271d0f": {
21
+ "tToken": "0x018008bfb33d285247a21d44e50697654f754e63",
22
+ "sdToken": "0x413adac9e2ef8683adf5ddaece8f19613d60d1bb",
23
+ "dToken": "0xcf8d0c70c850859266f5c338b38f9d663181c314",
24
+ "liquidationThreshold": 0.8
25
+ },
26
+ "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": {
27
+ "tToken": "0x98c23e9d8f34fefb1b7bd6a91b7ff122f4e16f5c",
28
+ "sdToken": "0xb0fe3d292f4bd50de902ba5bdf120ad66e9d7a39",
29
+ "dToken": "0x72e95b8931767c79ba4eee721354d6e99a61d004",
30
+ "liquidationThreshold": 0.8
31
+ },
32
+ "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": {
33
+ "tToken": "0x5ee5bf7ae06d1be5997a1a72006fe6c607ec6de8",
34
+ "sdToken": "0xa1773f1ccf6db192ad8fe826d15fe1d328b03284",
35
+ "dToken": "0x40aabef1aa8f0eec637e0e7d92fbffb2f26a8b7b",
36
+ "liquidationThreshold": 0.78
37
+ },
38
+ "0xae78736cd615f374d3085123a210448e74fc6393": {
39
+ "tToken": "0xcc9ee9483f662091a1de4795249e24ac0ac2630f",
40
+ "sdToken": "0x1d1906f909cae494c7441604dafdddbd0485a925",
41
+ "dToken": "0xae8593dd575fe29a9745056aa91c4b746eee62c8",
42
+ "liquidationThreshold": 0.74
43
+ },
44
+ "0xbe9895146f7af43049ca1c1ae358b0541ea49704": {
45
+ "tToken": "0x977b6fc5de62598b08c85ac8cf2b745874e8b78c",
46
+ "sdToken": "0x82be6012cea6d147b968ebaea5ceecf6a5b4f493",
47
+ "dToken": "0x0c91bca95b5fe69164ce583a2ec9429a569798ed",
48
+ "liquidationThreshold": 0.74
49
+ },
50
+ }
51
+ }
@@ -0,0 +1,44 @@
1
+ MORPHO_COMPOUND_ETH = {
2
+ "name": "Compound Lending Pool",
3
+ "rewardToken": "0xc00e94cb662c3520282e6f5717214004a7f26888",
4
+ "comptrollerAddress": "0x8888882f8f843896699869179fb6e4f7e3b58888",
5
+ "lensAddress": "0x930f1b46e1d081ec1524efd95752be3ece51ef67",
6
+ "rewardManager": '0x78681e63b6f3ad81ecd64aecc404d765b529c80d',
7
+ "poolToken": "0x9994e35db50125e0df82e4c2dde62496ce330999",
8
+ "type": "LENDING_POOL",
9
+ "forked": "morpho",
10
+ "reservesList": {
11
+ "0x6b175474e89094c44da98b954eedeac495271d0f": {
12
+ "cToken": "0x5d3a536e4d6dbd6114cc1ead35777bab948e3643",
13
+ "liquidationThreshold": 0.835
14
+ },
15
+ "0xc00e94cb662c3520282e6f5717214004a7f26888": {
16
+ "cToken": "0x70e36f6bf80a52b3b46b3af8e106cc0ed743e8e4",
17
+ "liquidationThreshold": 0.6
18
+ },
19
+ "0x0000000000000000000000000000000000000000": {
20
+ "cToken": "0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5",
21
+ "liquidationThreshold": 0.825
22
+ },
23
+ "0x956f47f50a910163d8bf957cf5846d573e7f87ca": {
24
+ "cToken": "0x7713dd9ca933848f6819f38b8352d9a15ea73f67",
25
+ "liquidationThreshold": 0.0
26
+ },
27
+ "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984": {
28
+ "cToken": "0x35a18000230da775cac24873d00ff85bccded550",
29
+ "liquidationThreshold": 0.75
30
+ },
31
+ "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": {
32
+ "cToken": "0x39aa39c021dfbae8fac545936693ac917d5e7563",
33
+ "liquidationThreshold": 0.855
34
+ },
35
+ "0xdac17f958d2ee523a2206206994597c13d831ec7": {
36
+ "cToken": "0xf650c3d88d12db855b8bf7d11be6c55a4e07dcc9",
37
+ "liquidationThreshold": 0.0
38
+ },
39
+ "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": {
40
+ "cToken": "0xccf4429db6322d5c611ee964527d42e5d685dd6a",
41
+ "liquidationThreshold": 0.7
42
+ },
43
+ }
44
+ }
@@ -0,0 +1,41 @@
1
+ WEPIGGY_ETH = {
2
+ "name": "Wepiggy Lending Pool",
3
+ "rewardToken": "0x6f620ec89b8479e97a6985792d0c64f237566746",
4
+ "comptrollerAddress": "0x0c8c1ab017c3c0c8a48dd9f1db2f59022d190f0b",
5
+ "lensAddress": "0x6a05bd123d780055c38526cc05d3c9b90d0e471c",
6
+ "distributionAddress": "0x3e5496e50793e72e6143a15bed1c2535f0b0b9b0",
7
+ "poolToken": "0x6f620ec89b8479e97a6985792d0c64f237566746",
8
+ "type": "LENDING_POOL",
9
+ "forked": "compound",
10
+ "reservesList": {
11
+ "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984": {
12
+ "cToken": "0x82413f75f0da101e0fe7f6ff6cba3461f7e04f29",
13
+ "liquidationThreshold": 0.6
14
+ },
15
+ "0x6b175474e89094c44da98b954eedeac495271d0f": {
16
+ "cToken": "0x85166b72c87697a6acff24101b43fd54fe28a179",
17
+ "liquidationThreshold": 0.75
18
+ },
19
+ "0xdac17f958d2ee523a2206206994597c13d831ec7": {
20
+ "cToken": "0x5cfad792c4df1323188180778aec58e00eace32a",
21
+ "liquidationThreshold": 0.8
22
+ },
23
+ "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": {
24
+ "cToken": "0xf8e5b9738bf63adfff36a849f9b9c9617c8d8c1f",
25
+ "liquidationThreshold": 0.8
26
+ },
27
+ "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599": {
28
+ "cToken": "0xc12b9d620bfcb48be3e0ccbf0ea80c717333b46f",
29
+ "liquidationThreshold": 0.7
30
+ },
31
+ "0x0000000000000000000000000000000000000000": {
32
+ "cToken": "0x27a94869341838d5783368a8503fda5fbcd7987c",
33
+ "liquidationThreshold": 0.8
34
+ },
35
+ "0xbbbbca6a901c926f240b89eacb641d8aec7aeafd": {
36
+ "cToken": "0x690aa2591e57180cba5a6123e9d462907a5e1c95",
37
+ "liquidationThreshold": 0.5
38
+ },
39
+
40
+ }
41
+ }
@@ -3,18 +3,16 @@ import time
3
3
 
4
4
  from web3 import Web3
5
5
 
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
6
  from defi_services.abis.lending.liqee.liqee_comptroller_abi import LIQEE_CONTROLLER_ABI
9
7
  from defi_services.abis.lending.liqee.liqee_lending_data_abi import LIQEE_LENDING_DATA_ABI
10
8
  from defi_services.abis.lending.liqee.liqee_token_abi import LIQEE_TOKEN_ABI
11
9
  from defi_services.abis.token.ctoken_abi import CTOKEN_ABI
12
10
  from defi_services.abis.token.erc20_abi import ERC20_ABI
13
11
  from defi_services.constants.chain_constant import Chain
14
- from defi_services.constants.db_constant import DBConst
12
+ from defi_services.constants.entities.lending_constant import Lending
15
13
  from defi_services.constants.query_constant import Query
16
- from defi_services.constants.token_constant import ContractAddresses, Token
17
- from defi_services.jobs.state_querier import StateQuerier
14
+ from defi_services.constants.token_constant import Token
15
+ from defi_services.jobs.queriers.state_querier import StateQuerier
18
16
  from defi_services.services.lending.lending_info.ethereum.liqee_eth import LIQEE_ETH
19
17
  from defi_services.services.protocol_services import ProtocolServices
20
18
 
@@ -29,7 +27,7 @@ class LiqeeInfo:
29
27
 
30
28
  class LiqeeStateService(ProtocolServices):
31
29
  def __init__(self, state_service: StateQuerier, chain_id: str = "0x1"):
32
- self.name = f"{chain_id}_liqee"
30
+ self.name = f"{chain_id}_{Lending.liqee}"
33
31
  self.chain_id = chain_id
34
32
  self.pool_info = LiqeeInfo.mapping.get(chain_id)
35
33
  self.state_service = state_service
@@ -40,7 +38,7 @@ class LiqeeStateService(ProtocolServices):
40
38
  # BASIC FUNCTIONS
41
39
  def get_service_info(self):
42
40
  info = {
43
- "liqee": {
41
+ Lending.liqee: {
44
42
  "chain_id": self.chain_id,
45
43
  "type": "lending",
46
44
  "protocol_info": self.pool_info
@@ -300,25 +298,6 @@ class LiqeeStateService(ProtocolServices):
300
298
  ctoken, CTOKEN_ABI, fn_name, fn_paras, block_number
301
299
  )
302
300
 
303
- def get_ctoken_metadata_all(
304
- self,
305
- reserves_info: dict = None,
306
- block_number: int = "latest"
307
- ):
308
- tokens = [Web3.toChecksumAddress(value['cToken']) for key, value in reserves_info.items()]
309
- key = f"cTokenMetadataAll_{self.pool_info.get('lensAddress')}_{block_number}".lower()
310
- return {
311
- key: self.get_lens_function_info("cTokenMetadataAll", tokens, block_number)
312
- }
313
-
314
- def ctoken_underlying_price_all(
315
- self, reserves_info, block_number: int = 'latest'):
316
- tokens = [Web3.toChecksumAddress(value['cToken']) for key, value in reserves_info.items()]
317
- key = f"cTokenUnderlyingPriceAll_{self.pool_info.get('lensAddress')}_{block_number}".lower()
318
- return {
319
- key: self.get_lens_function_info("cTokenUnderlyingPriceAll", tokens, block_number)
320
- }
321
-
322
301
  def get_all_markets(
323
302
  self, block_number: int = 'latest'):
324
303
  key = f"getAllMarkets_{self.pool_info.get('comptrollerAddress')}_{block_number}".lower()
@@ -0,0 +1,89 @@
1
+ import logging
2
+ import time
3
+
4
+ from web3 import Web3
5
+
6
+ from defi_services.abis.lending.aave_v2_and_forlks.aave_v2_incentives_abi import AAVE_V2_INCENTIVES_ABI
7
+ from defi_services.abis.lending.aave_v2_and_forlks.lending_pool_abi import LENDING_POOL_ABI
8
+ from defi_services.abis.lending.aave_v2_and_forlks.oracle_abi import ORACLE_ABI
9
+ from defi_services.abis.lending.morpho.morpho_aave_v2_comptroller_abi import MORPHO_AAVE_V2_COMPTROLLER
10
+ from defi_services.abis.lending.morpho.morpho_aave_v2_lens_abi import MORPHO_AAVE_V2_LENS_ABI
11
+ from defi_services.constants.chain_constant import Chain
12
+ from defi_services.constants.entities.lending_constant import Lending
13
+ from defi_services.jobs.queriers.state_querier import StateQuerier
14
+ from defi_services.services.lending.lending_info.aave_v2_services import AaveInfo
15
+ from defi_services.services.lending.lending_info.ethereum.morpho_aave_v2_eth import MORPHO_AAVE_V2_ETH
16
+ from defi_services.services.lending.morpho_compound_services import MorphoCompoundServices
17
+
18
+ logger = logging.getLogger("Compound Lending Pool State Service")
19
+
20
+
21
+ class MorphoAaveV2Info:
22
+ mapping = {
23
+ Chain.ethereum: MORPHO_AAVE_V2_ETH
24
+ }
25
+
26
+
27
+ class MorphoAaveV2Services(MorphoCompoundServices):
28
+ def __init__(self, state_service: StateQuerier, chain_id: str = "0x1"):
29
+ super().__init__(state_service, chain_id)
30
+ self.name = f"{chain_id}_{Lending.morpho_aave_v2}"
31
+ self.chain_id = chain_id
32
+ self.compound_info = AaveInfo.mapping.get(chain_id)
33
+ self.pool_info = MorphoAaveV2Info.mapping.get(chain_id)
34
+ self.state_service = state_service
35
+ self.lending_abi = LENDING_POOL_ABI
36
+ self.incentive_abi = AAVE_V2_INCENTIVES_ABI
37
+ self.oracle_abi = ORACLE_ABI
38
+ self.lens_abi = MORPHO_AAVE_V2_LENS_ABI
39
+ self.comptroller_abi = MORPHO_AAVE_V2_COMPTROLLER
40
+ self.market_key = 'tToken'
41
+
42
+ # BASIC FUNCTIONS
43
+ def get_service_info(self):
44
+ info = {
45
+ Lending.morpho_aave_v2: {
46
+ "chain_id": self.chain_id,
47
+ "type": "lending",
48
+ "protocol_info": self.pool_info
49
+ }
50
+ }
51
+ return info
52
+
53
+ def get_dapp_asset_info(
54
+ self,
55
+ block_number: int = "latest"):
56
+ begin = time.time()
57
+ _w3 = self.state_service.get_w3()
58
+ pool_address = Web3.toChecksumAddress(self.pool_info['address'])
59
+ contract = _w3.eth.contract(address=pool_address, abi=self.lending_abi)
60
+ comptroller_contract = _w3.eth.contract(
61
+ address=_w3.toChecksumAddress(self.pool_info.get("comptrollerAddress")), abi=self.comptroller_abi)
62
+ markets = comptroller_contract.functions.getAllMarkets().call(block_identifier=block_number)
63
+ reserves_list = contract.functions.getReservesList().call(block_identifier=block_number)
64
+ reserves_info = {}
65
+ for token in reserves_list:
66
+ value = contract.functions.getReserveData(token).call(block_identifier=block_number)
67
+ key = token.lower()
68
+ ttoken = value[7]
69
+ if ttoken in markets:
70
+ reserves_info[key] = {}
71
+ reserves_info[key]["tToken"] = ttoken.lower()
72
+ reserves_info[key]["dToken"] = value[9].lower()
73
+ reserves_info[key]["sdToken"] = value[8].lower()
74
+ risk_param = bin(value[0][0])[2:]
75
+ reserves_info[key]["liquidationThreshold"] = int(risk_param[-31:-16], 2) / 10 ** 4
76
+ logger.info(f"Get reserves information in {time.time() - begin}s")
77
+ return reserves_info
78
+
79
+ # REWARDS BALANCE
80
+ def get_claimable_rewards_balance_function_info(
81
+ self,
82
+ wallet_address: str,
83
+ block_number: int = "latest",
84
+ ):
85
+ return {}
86
+
87
+ def calculate_claimable_rewards_balance(self, wallet_address: str, decoded_data: dict,
88
+ block_number: int = "latest"):
89
+ return {}
@@ -0,0 +1,159 @@
1
+ import logging
2
+ import time
3
+
4
+ from web3 import Web3
5
+
6
+ from defi_services.abis.lending.aave_v2_and_forlks.aave_v2_incentives_abi import AAVE_V2_INCENTIVES_ABI
7
+ from defi_services.abis.lending.aave_v2_and_forlks.lending_pool_abi import LENDING_POOL_ABI
8
+ from defi_services.abis.lending.aave_v2_and_forlks.oracle_abi import ORACLE_ABI
9
+ from defi_services.abis.lending.morpho.morpho_aave_v3_comptroller_abi import MORPHO_AAVE_V3_COMPTROLLER_ABI
10
+ from defi_services.abis.token.erc20_abi import ERC20_ABI
11
+ from defi_services.constants.chain_constant import Chain
12
+ from defi_services.constants.entities.lending_constant import Lending
13
+ from defi_services.constants.token_constant import Token
14
+ from defi_services.jobs.queriers.state_querier import StateQuerier
15
+ from defi_services.services.lending.aave_v3_services import AaveV3Info
16
+ from defi_services.services.lending.lending_info.ethereum.morpho_aave_v3_eth import MORPHO_AAVE_V3_ETH
17
+ from defi_services.services.lending.morpho_compound_services import MorphoCompoundServices
18
+
19
+ logger = logging.getLogger("Compound Lending Pool State Service")
20
+
21
+
22
+ class MorphoAaveV3Info:
23
+ mapping = {
24
+ Chain.ethereum: MORPHO_AAVE_V3_ETH
25
+ }
26
+
27
+
28
+ class MorphoAaveV3Services(MorphoCompoundServices):
29
+ def __init__(self, state_service: StateQuerier, chain_id: str = "0x1"):
30
+ super().__init__(state_service, chain_id)
31
+ self.name = f"{chain_id}_{Lending.morpho_aave_v3}"
32
+ self.chain_id = chain_id
33
+ self.aave_info = AaveV3Info.mapping.get(chain_id)
34
+ self.pool_info = MorphoAaveV3Info.mapping.get(chain_id)
35
+ self.state_service = state_service
36
+ self.lending_abi = LENDING_POOL_ABI
37
+ self.incentive_abi = AAVE_V2_INCENTIVES_ABI
38
+ self.oracle_abi = ORACLE_ABI
39
+ self.comptroller_abi = MORPHO_AAVE_V3_COMPTROLLER_ABI
40
+ self.market_key = 'tToken'
41
+
42
+ # BASIC FUNCTIONS
43
+ def get_service_info(self):
44
+ info = {
45
+ Lending.morpho_aave_v3: {
46
+ "chain_id": self.chain_id,
47
+ "type": "lending",
48
+ "protocol_info": self.pool_info
49
+ }
50
+ }
51
+ return info
52
+
53
+ def get_dapp_asset_info(
54
+ self,
55
+ block_number: int = "latest"):
56
+ begin = time.time()
57
+ _w3 = self.state_service.get_w3()
58
+ pool_address = Web3.toChecksumAddress(self.aave_info['address'])
59
+ contract = _w3.eth.contract(address=pool_address, abi=self.lending_abi)
60
+ comptroller_contract = _w3.eth.contract(
61
+ address=_w3.toChecksumAddress(self.pool_info.get("comptrollerAddress")), abi=self.comptroller_abi)
62
+ markets = comptroller_contract.functions.getAllMarkets().call(block_identifier=block_number)
63
+ markets = [i.lower() for i in markets]
64
+ reserves_list = contract.functions.getReservesList().call(block_identifier=block_number)
65
+ reserves_info = {}
66
+ for token in reserves_list:
67
+ value = contract.functions.getReserveData(token).call(block_identifier=block_number)
68
+ key = token.lower()
69
+ if token in markets:
70
+ reserves_info[key] = {}
71
+ reserves_info[key]["tToken"] = value[8].lower()
72
+ reserves_info[key]["dToken"] = value[9].lower()
73
+ reserves_info[key]["sdToken"] = value[10].lower()
74
+ risk_param = bin(value[0][0])[2:]
75
+ reserves_info[key]["liquidationThreshold"] = int(risk_param[-31:-16], 2) / 10 ** 4
76
+ logger.info(f"Get reserves information in {time.time() - begin}s")
77
+ return reserves_info
78
+
79
+ def get_token_list(self):
80
+ begin = time.time()
81
+ tokens = [self.aave_info.get("poolToken")]
82
+ for token in self.aave_info.get("reservesList"):
83
+ if token == Token.native_token:
84
+ tokens.append(Token.wrapped_token.get(self.chain_id))
85
+ continue
86
+ tokens.append(token)
87
+ logger.info(f"Get token list related in {time.time()-begin}s")
88
+ return tokens
89
+
90
+ # REWARDS BALANCE
91
+ def get_claimable_rewards_balance_function_info(
92
+ self,
93
+ wallet_address: str,
94
+ block_number: int = "latest",
95
+ ):
96
+ return {}
97
+
98
+ def calculate_claimable_rewards_balance(self, wallet_address: str, decoded_data: dict,
99
+ block_number: int = "latest"):
100
+ return {}
101
+
102
+ # WALLET DEPOSIT BORROW BALANCE
103
+ def get_wallet_deposit_borrow_balance_function_info(
104
+ self,
105
+ wallet_address: str,
106
+ reserves_info: dict,
107
+ block_number: int = "latest"
108
+ ):
109
+
110
+ rpc_calls = {}
111
+ for token, value in reserves_info.items():
112
+ underlying = token
113
+ ctoken = value.get(self.market_key)
114
+ if token == Token.native_token:
115
+ underlying = Token.wrapped_token.get(self.chain_id)
116
+ underlying_borrow_key = f"borrowBalance_{self.name}_{ctoken}_{wallet_address}_{block_number}".lower()
117
+ underlying_balance_key = f"collateralBalance_{self.name}_{ctoken}_{wallet_address}_{block_number}".lower()
118
+ underlying_decimals_key = f"decimals_{underlying}_{block_number}".lower()
119
+ rpc_calls[underlying_borrow_key] = self.get_comptroller_function_info(
120
+ "borrowBalance", [token, wallet_address], block_number)
121
+ rpc_calls[underlying_balance_key] = self.get_comptroller_function_info(
122
+ "collateralBalance", [token, wallet_address], block_number)
123
+ rpc_calls[underlying_decimals_key] = self.state_service.get_function_info(
124
+ underlying, ERC20_ABI, "decimals", [], block_number
125
+ )
126
+
127
+ return rpc_calls
128
+
129
+ def calculate_wallet_deposit_borrow_balance(
130
+ self, wallet_address: str, reserves_info: dict, decoded_data: dict, token_prices: dict = None,
131
+ block_number: int = "latest"):
132
+ if token_prices is None:
133
+ token_prices = {}
134
+ result = {}
135
+ for token, value in reserves_info.items():
136
+ underlying = token
137
+ ctoken = value.get(self.market_key)
138
+ if token == Token.native_token:
139
+ underlying = Token.wrapped_token.get(self.chain_id)
140
+ get_total_deposit_id = f"collateralBalance_{self.name}_{ctoken}_{wallet_address}_{block_number}".lower()
141
+ get_total_borrow_id = f"borrowBalance_{self.name}_{ctoken}_{wallet_address}_{block_number}".lower()
142
+ get_decimals_id = f"decimals_{underlying}_{block_number}".lower()
143
+ decimals = decoded_data[get_decimals_id]
144
+ deposit_amount = decoded_data[get_total_deposit_id] / 10 ** decimals
145
+ borrow_amount = decoded_data[get_total_borrow_id] / 10 ** decimals
146
+ result[token] = {
147
+ "borrow_amount": borrow_amount,
148
+ "deposit_amount": deposit_amount,
149
+ }
150
+ if token_prices:
151
+ token_price = token_prices.get(underlying)
152
+ else:
153
+ token_price = None
154
+ if token_price is not None:
155
+ deposit_amount_in_usd = deposit_amount * token_price
156
+ borrow_amount_in_usd = borrow_amount * token_price
157
+ result[token]['borrow_amount_in_usd'] += borrow_amount_in_usd
158
+ result[token]['deposit_amount_in_usd'] += deposit_amount_in_usd
159
+ return result