Source code for ethereum_gasprice.providers.etherchain_provider

from typing import Dict, Optional, Tuple

from ethereum_gasprice.consts import GaspriceStrategy
from ethereum_gasprice.providers.base import BaseAsyncAPIGaspriceProvider, BaseSyncAPIGaspriceProvider

__all__ = ["EtherchainProvider", "AsyncEtherchainProvider"]


[docs]class EtherchainProvider(BaseSyncAPIGaspriceProvider): """Provider for Etherscan Gas Tracker (https://etherscan.io/gasTracker)""" title: str = "etherchain" api_url: str = "https://www.etherchain.org/api/gasPriceOracle"
[docs] def request(self) -> Tuple[bool, dict]: """Make request to API.""" try: response = self.client.get(url=self.api_url) response_data = response.json() if response.status_code == 200: return True, response_data except Exception: pass return False, {}
def _proceed_response_data(self, response_data: dict) -> Dict[GaspriceStrategy, Optional[int]]: """Unify data from response.""" data = self._data_template.copy() if not response_data: return data data.update( { GaspriceStrategy.SLOW: response_data.get("safeLow"), GaspriceStrategy.REGULAR: response_data.get("standard"), GaspriceStrategy.FAST: response_data.get("fast"), GaspriceStrategy.FASTEST: response_data.get("fastest"), } ) return data
[docs]class AsyncEtherchainProvider(BaseAsyncAPIGaspriceProvider, EtherchainProvider):
[docs] async def request(self) -> Tuple[bool, dict]: """Make request to API.""" try: response = await self.client.get(url=self.api_url) response_data = response.json() if response.status_code == 200: return True, response_data except Exception: pass return False, {}