"""
Ethereal is a lightweight wrapper around the :class:`web3.Web3` class that simplifies 
working with Ethereum smart contracts.

To use it, simply create a regular :class:`web3.Web3` instance and write ``w3 = Ethereal(w3)``.
Then, you can use w3 as usual, but with additional methods 
accessible under the ``e`` property. 

For example, you can call ``w3.e.get_abi("0x...")`` or 
``w3.e.list_events("0x...", "Mint", "2023-01-01", "2023-02-14")``.

For more available methods, please refer to the :class:`ethereal.facade.EtherealFacade` class.

Example:
    ::

        from web3.auto import w3
        from ethereal import Ethereal
        from ethereal import load_provider_from_uri

        # If WEB3_PROVIDER_URI env is not set, uncomment the lines below
        # w3 = Web3(load_provider_from_uri("https://alchemy.com/..."))

        w3 = Ethereal(w3)

        ADDRESS = "0xB0B195aEFA3650A6908f15CdaC7D92F8a5791B0B"
        print(w3.e.list_events(ADDRESS))
        # Lists event signatures for the contract at ADDRESS

        events = w3.e.get_events(ADDRESS, "Transfer", "2023-01-01", "2023-02-14")
        # Gets all Transfer events for the contract at ADDRESS between 2023-01-01 and 2023-02-14
        print(events[:10])

"""

from .app import Ethereal
from .networks import load_provider_from_uri
