blockapi 0.44.0__tar.gz → 0.45.0__tar.gz
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.
- {blockapi-0.44.0 → blockapi-0.45.0}/PKG-INFO +1 -1
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/test_solana.py +7 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/solana.py +44 -10
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/base.py +2 -1
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/models.py +2 -1
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi.egg-info/PKG-INFO +1 -1
- {blockapi-0.44.0 → blockapi-0.45.0}/setup.py +1 -1
- {blockapi-0.44.0 → blockapi-0.45.0}/LICENSE.md +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/README.md +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/alethio.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/amberdata.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/binance.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/blockchaininfo.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/blockchainos.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/blockchair.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/blockcypher.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/blockonomics.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/blockscout.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/btc.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/cardanoexplorer.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/chainso.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/cosmos.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/cryptoid.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/dcrdata.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/digonchain.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/eospark.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/etherscan.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/ethplorer.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/greymass.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/insight.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/kyber.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/neoscan.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/ontology.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/solana.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/stellar.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/subscan.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/terra_money.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/trezor.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/tronscan.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/tzscan.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/tzstats.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/zchain.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/api/zensystem.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/services.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_amberdata.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_balances.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_binance.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_blockchainos.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_blockchair.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_blockscout.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_btc.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_cosmos.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_dcrdata.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_digonchain.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_insight.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_kyber.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_ontio.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_solana.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_subscan.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_terra_money.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_tronscan.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_tzscan.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/api/test_tzstats.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/test_blockapi.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/test_num.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/test_random_user_agent.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/conftest.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/covalenth/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/covalenth/test_ethereum.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/fake_sleep_provider.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/nft/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/nft/test_magic_eden.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/nft/test_opensea.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/nft/test_simple_hash.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/perpetual/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/perpetual/test_perpetual.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/synthetix/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/synthetix/test_synthetix.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/test_blockchainos.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/test_blockchair_btc.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/test_blockchair_doge.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/test_blockchair_ltc.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/test_cosmos.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/test_ethplorer.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/test_multisources.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/test_optimistic_etherscan.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/test_subscan_polkadot.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/api/test_trezor_btc.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/test_blockchain_api.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/test_blockchain_mapping.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/test_data.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/test_enumerate_classes.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/test_generic.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test/v2/test_models.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/test_data.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/utils/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/utils/address.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/utils/datetime.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/utils/ethereum.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/utils/num.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/utils/user_agent.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/blockchainos.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/blockchair.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/cosmos.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/arbitrum.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/astar.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/avalanche.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/axie.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/base.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/binance_smart_chain.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/ethereum.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/fantom.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/heco.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/iotex.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/klaytn.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/moonbeam.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/palm.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/polygon.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/covalenth/rsk.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/debank.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/debank_maps.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/ethplorer.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/nft/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/nft/magic_eden.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/nft/opensea.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/nft/simple_hash.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/optimistic_etherscan.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/perpetual/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/perpetual/perp_abi.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/perpetual/perpetual.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/subscan.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/synthetix/__init__.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/synthetix/synthetix.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/synthetix/synthetix_abi.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/terra.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/trezor.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/api/web3_utils.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/blockchain_mapping.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/coin_mapping.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi/v2/coins.py +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi.egg-info/SOURCES.txt +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi.egg-info/dependency_links.txt +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi.egg-info/requires.txt +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/blockapi.egg-info/top_level.txt +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/pyproject.toml +0 -0
- {blockapi-0.44.0 → blockapi-0.45.0}/setup.cfg +0 -0
|
@@ -70,6 +70,7 @@ def test_use_base_url_in_post(
|
|
|
70
70
|
solana_value_response,
|
|
71
71
|
solana_response,
|
|
72
72
|
staked_solana_response,
|
|
73
|
+
rent_reserve_solana_response,
|
|
73
74
|
token_list_sol_response,
|
|
74
75
|
token_list_jup_ag_response,
|
|
75
76
|
token_list_sonar_response,
|
|
@@ -83,6 +84,7 @@ def test_use_base_url_in_post(
|
|
|
83
84
|
solana_response,
|
|
84
85
|
'{"result": {"value": []}}',
|
|
85
86
|
staked_solana_response,
|
|
87
|
+
rent_reserve_solana_response,
|
|
86
88
|
]
|
|
87
89
|
)
|
|
88
90
|
|
|
@@ -312,6 +314,11 @@ def staked_solana_response():
|
|
|
312
314
|
return read_file('data/solana/staked_solana_response.json')
|
|
313
315
|
|
|
314
316
|
|
|
317
|
+
@pytest.fixture
|
|
318
|
+
def rent_reserve_solana_response():
|
|
319
|
+
return read_file('data/solana/rent_reserve_solana_response.json')
|
|
320
|
+
|
|
321
|
+
|
|
315
322
|
@pytest.fixture
|
|
316
323
|
def token_list_sol_response():
|
|
317
324
|
return read_file('data/solana/token-list-solana.json')
|
|
@@ -31,7 +31,10 @@ JUP_AG_TOKEN_LIST_URL = (
|
|
|
31
31
|
JUP_AG_BAN_LIST_URL = (
|
|
32
32
|
'https://raw.githubusercontent.com/jup-ag/token-list/main/banned-tokens.csv'
|
|
33
33
|
)
|
|
34
|
-
SONAR_TOKEN_LIST_URL =
|
|
34
|
+
SONAR_TOKEN_LIST_URL = (
|
|
35
|
+
'https://cdn.jsdelivr.net/npm/@sonarwatch'
|
|
36
|
+
'/token-lists/build/sonarwatch.solana.tokenlist.json'
|
|
37
|
+
)
|
|
35
38
|
|
|
36
39
|
|
|
37
40
|
class SolanaApi(CustomizableBlockchainApi, BalanceMixin):
|
|
@@ -127,7 +130,21 @@ class SolanaApi(CustomizableBlockchainApi, BalanceMixin):
|
|
|
127
130
|
{'encoding': 'jsonParsed'},
|
|
128
131
|
],
|
|
129
132
|
)
|
|
130
|
-
raw_staked_sol = self.
|
|
133
|
+
raw_staked_sol = self._fetch_staked_sol(address)
|
|
134
|
+
raw_rent_reserve = self._fetch_stake_rent_reserve(raw_staked_sol)
|
|
135
|
+
|
|
136
|
+
return FetchResult(
|
|
137
|
+
data=data,
|
|
138
|
+
extra=dict(
|
|
139
|
+
raw_token_balances=raw_token_balances,
|
|
140
|
+
raw_token2022_balances=raw_token2022_balances,
|
|
141
|
+
raw_staked_sol=raw_staked_sol,
|
|
142
|
+
raw_rent_reserve=raw_rent_reserve,
|
|
143
|
+
),
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
def _fetch_staked_sol(self, address: str) -> dict:
|
|
147
|
+
return self._request(
|
|
131
148
|
method='getProgramAccounts',
|
|
132
149
|
params=[
|
|
133
150
|
'Stake11111111111111111111111111111111111111',
|
|
@@ -150,19 +167,19 @@ class SolanaApi(CustomizableBlockchainApi, BalanceMixin):
|
|
|
150
167
|
],
|
|
151
168
|
)
|
|
152
169
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
)
|
|
170
|
+
def _fetch_stake_rent_reserve(self, raw_staked_sol: dict) -> list[dict]:
|
|
171
|
+
stake_accounts = [r['pubkey'] for r in raw_staked_sol['result']]
|
|
172
|
+
results = []
|
|
173
|
+
for a in stake_accounts:
|
|
174
|
+
results.append(self._request(method='getBalance', params=[a]))
|
|
175
|
+
|
|
176
|
+
return results
|
|
161
177
|
|
|
162
178
|
def parse_balances(self, fetch_result: FetchResult) -> ParseResult:
|
|
163
179
|
raw_token_balances = fetch_result.extra['raw_token_balances']
|
|
164
180
|
raw_token2022_balances = fetch_result.extra['raw_token2022_balances']
|
|
165
181
|
raw_staked_sol = fetch_result.extra['raw_staked_sol']
|
|
182
|
+
raw_rent_reserve = fetch_result.extra['raw_rent_reserve']
|
|
166
183
|
|
|
167
184
|
balances = []
|
|
168
185
|
if sol_balance := self._get_sol_balance(fetch_result.data):
|
|
@@ -170,6 +187,10 @@ class SolanaApi(CustomizableBlockchainApi, BalanceMixin):
|
|
|
170
187
|
|
|
171
188
|
if staked_sol_balance := self._get_staked_sol_balance(raw_staked_sol):
|
|
172
189
|
balances.append(staked_sol_balance)
|
|
190
|
+
rent_reserve_balance = self._get_stake_rent_reserve(
|
|
191
|
+
staked_sol_balance, raw_rent_reserve
|
|
192
|
+
)
|
|
193
|
+
balances.append(rent_reserve_balance)
|
|
173
194
|
|
|
174
195
|
token_balances = list(self._yield_token_balances(raw_token_balances))
|
|
175
196
|
token_balances.extend(self._yield_token_balances(raw_token2022_balances))
|
|
@@ -222,6 +243,19 @@ class SolanaApi(CustomizableBlockchainApi, BalanceMixin):
|
|
|
222
243
|
raw=response['result'],
|
|
223
244
|
)
|
|
224
245
|
|
|
246
|
+
def _get_stake_rent_reserve(
|
|
247
|
+
self, staked_sol: BalanceItem, responses: list[dict]
|
|
248
|
+
) -> BalanceItem:
|
|
249
|
+
total_raw = sum(r['result']['value'] for r in responses)
|
|
250
|
+
available_raw = total_raw - int(staked_sol.balance_raw)
|
|
251
|
+
|
|
252
|
+
return BalanceItem.from_api(
|
|
253
|
+
balance_raw=available_raw,
|
|
254
|
+
coin=self.coin,
|
|
255
|
+
asset_type=AssetType.RENT_RESERVE,
|
|
256
|
+
raw=responses,
|
|
257
|
+
)
|
|
258
|
+
|
|
225
259
|
def _yield_token_balances(self, response: dict) -> Iterable[BalanceItem]:
|
|
226
260
|
for raw_balance in response['result']['value']:
|
|
227
261
|
balance = self._parse_token_balance(raw_balance)
|
|
@@ -113,7 +113,8 @@ class CustomizableBlockchainApi(ABC):
|
|
|
113
113
|
seconds = 60
|
|
114
114
|
|
|
115
115
|
logger.warning(
|
|
116
|
-
f'Too Many Requests: Will retry after {seconds}s sleep.
|
|
116
|
+
f'Too Many Requests: Will retry after {seconds}s sleep.'
|
|
117
|
+
f' Remaining attempts {retries}.'
|
|
117
118
|
)
|
|
118
119
|
self.sleep_provider.sleep(self.base_url, seconds=seconds)
|
|
119
120
|
continue
|
|
@@ -280,6 +280,7 @@ class AssetType(str, Enum):
|
|
|
280
280
|
NFT = 'nft'
|
|
281
281
|
PENDING_TRANSACTION = 'pending_transaction'
|
|
282
282
|
PRICED_VESTING = 'priced_vesting'
|
|
283
|
+
RENT_RESERVE = 'rent_reserve'
|
|
283
284
|
REWARDS = 'rewards'
|
|
284
285
|
STAKED = 'staked'
|
|
285
286
|
UNREALIZED_AVAILABLE = 'unrealized_available'
|
|
@@ -539,7 +540,7 @@ class BalanceItem:
|
|
|
539
540
|
balance_raw: Union[int, float, str, Decimal],
|
|
540
541
|
coin: Coin,
|
|
541
542
|
asset_type: AssetType = AssetType.AVAILABLE,
|
|
542
|
-
raw: Dict,
|
|
543
|
+
raw: Union[Dict, List[Dict]],
|
|
543
544
|
last_updated: Optional[Union[int, str]] = None,
|
|
544
545
|
protocol: Optional[Protocol] = None,
|
|
545
546
|
is_wallet: bool = True,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|