Skip to main content

Tool for fetching actual gasprice in ethereum blockchain

Project description

Ethereum gasprice: Actual gasprice for ethereum blockchain

PyPI Build Status Documentation Status

Library for fetching actual ethereum blockchain gasprice from different sources: Etherscan Gas Tracker, Eth Gas Station, Etherchain Gasprice Oracle, Web3 RPC Method.

Read more about gas and fee from this article

Installation

poetry add ethereum-gasprice

or

pip3 install ethereum-gasprice

Quickstart

from ethereum_gasprice import GaspriceController, GaspriceStrategy, EthereumUnit
from ethereum_gasprice.providers import EtherscanProvider

ETHERSCAN_API_KEY = "..."

# Pass api key to GaspriceController to initialize provider
controller = GaspriceController(
    settings={EtherscanProvider.title: ETHERSCAN_API_KEY},
)

# Get gasprice by one of these strategies:
gasprice = controller.get_gasprice_by_strategy(GaspriceStrategy.FAST)
print(gasprice)  # output: 69

Docs

Read base API references and other part documentation on ethereum-gasprice.readthedocs.io

Usage

Gasprice controller

Main entrypoint to fetching gasprice from providers. Has sync and async implementations.

It is recommended to initialize controller with with ... as controller: method

from ethereum_gasprice import GaspriceController, AsyncGaspriceController

Parameters:

  • return_unit - return gasprice in given ethereum unit. It is recommended to use EthereumUnit class from ethereum_gasprice.consts to choose unit
  • providers - tuple of providers what will be used in fetching gasprice. Order of providers is important
  • gasprice will be fetch in given priority. Providers must be a subclass of BaseGaspriceProvider
  • settings - dict containing secrets for providers. Key is provider title slug, value is a secret for provider.
from ethereum_gasprice.consts import EthereumUnit
from ethereum_gasprice.providers import (
    EtherscanProvider, EthGasStationProvider, AsyncEtherscanProvider, AsyncEthGasStationProvider
)

settings = {
    EtherscanProvider.title: "API_KEY",
    EthGasStationProvider.title: "API_KEY"
}

sync_providers = (EtherscanProvider, EthGasStationProvider)
async_providers = (AsyncEtherscanProvider, AsyncEthGasStationProvider)

with GaspriceStrategy(
        return_unit=EthereumUnit.GWEI,
        providers=sync_providers,
        settings=settings
) as controller:
    # Do something
    pass

async with AsyncGaspriceController(
        return_unit=EthereumUnit.WEI,
        providers=async_providers,
        settings=settings
) as async_controller:
    # Do something
    pass

Methods:

  • .get_gasprice_by_strategy() - get gasprices from first available provider and return only one gasprice strategy.

available strategies: slow (GaspriceStrategy.SLOW), regular (GaspriceStrategy.REGULAR), fast (GaspriceStrategy.FAST), fastest (GaspriceStrategy.FASTEST).

Some providers does not have info for some strategies. For example, Etherscan does not provide gasprice for slow strategy.

In any case method will return dict with these for strategies. If fail case strategy (when all provides is unavailable) dict with None values will be returned.

from ethereum_gasprice.consts import GaspriceStrategy

gasprice = controller.get_gasprice_by_strategy(GaspriceStrategy.FAST)  # type: int, example: 69
  • .get_gasprices() - gets gasprices for all strategies from first available provider. Returns a dict.
gasprices = await async_controller.get_gasprices()  # type: dict
print(gasprices)

# {'slow': None, 'regular': 17, 'fast': 19, 'fastest': 20}
  • .get_gasprice_from_all_sources() - get gasprices for all strategies from all available provider.

It can be useful to calculate an average gasprice value from all providers to get the most objective gasprice value.

gasprices = controller.get_gasprice_from_all_sources()  # type: dict
print(gasprices)
# {
#   'etherscan': {'slow': None, 'regular': 17, 'fast': 19, 'fastest': 29},
#   'ethgasstation': {'slow': 16, 'regular': 17, 'fast': 19, 'fastest': 20}
# }

Providers

Provider wrapper

from ethereum_gasprice.providers import EtherscanProvider, AsyncEtherscanProvider

Parameters:

Methods:

  • .request() - make request to api, returns status and response data.
  • .get_gasprice() - get gasprices from provider, returns gasprices in GWEI.
from httpx import Client

provider = EtherscanProvider(
    secret="API-KEY",
    client=Client()
)
print(provider.get_gasprice())
# {'slow': None, 'regular': 17, 'fast': 19, 'fastest': 20}

TODO

  • Initital release
  • Async implementation of controller, providers
  • Write documentation
  • Write unit tests with pytest
  • Integrate tests, docs and auto publishing to pypi in github pipeline

Changelog

see CHANGELOG.md file

License

Ethereum gasprice is licensed under the terms of the MIT License (see the file LICENSE).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ethereum-gasprice-1.2.2.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

ethereum_gasprice-1.2.2-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

Details for the file ethereum-gasprice-1.2.2.tar.gz.

File metadata

  • Download URL: ethereum-gasprice-1.2.2.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.8.0 Darwin/17.7.0

File hashes

Hashes for ethereum-gasprice-1.2.2.tar.gz
Algorithm Hash digest
SHA256 4f80724e6bc8a884c0179b746b018bc54faaca76452451c5e64e9f7823c497d4
MD5 24c798ea12f06c273e002ea8e4de26f6
BLAKE2b-256 e1a096e46863ef4f752c596e139eaf805463a503eec6add07e8f4bd5634cff0f

See more details on using hashes here.

File details

Details for the file ethereum_gasprice-1.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for ethereum_gasprice-1.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9d9318d63defa8e14672a27017556fc05c136771f13f713628638fc98f7bdbe6
MD5 888a7788268d1e46d6b7a5f7f72e1a88
BLAKE2b-256 102892353a56f946821e1541e000db6c3baf944f006399e8608867dc4de33419

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page