Metadata-Version: 2.1
Name: eth2
Version: 0.0.1
Summary: Eth2 API
Home-page: https://github.com/protolambda/eth2.py
Author: protolambda
Author-email: proto+pip@protolambda.com
License: MIT
Description: .. image:: https://raw.githubusercontent.com/protolambda/eth2.py/master/docs/_static/logo.png
           :width: 100 px
        
        ``eth2``
        -----------------
        
        .. image:: https://img.shields.io/pypi/l/eth2.svg
            :target: https://pypi.python.org/pypi/eth2
        
        .. image:: https://img.shields.io/pypi/pyversions/eth2.svg
            :target: https://pypi.python.org/pypi/eth2
        
        .. image::  https://img.shields.io/pypi/status/eth2.svg
            :target: https://pypi.python.org/pypi/eth2
        
        .. image:: https://img.shields.io/pypi/implementation/eth2.svg
            :target: https://pypi.python.org/pypi/eth2
        
        .. image:: https://github.com/protolambda/eth2.py/workflows/Eth2%20API%20Python%20CI/badge.svg
            :target: https://github.com/protolambda/eth2.py/actions
        
        
        **Eth2.py**: Python API interface to the `Eth2.0 API <https://github.com/ethereum/eth2.0-apis>`_.
        
        If you are looking for the Eth2 spec, see ``eth2spec`` on `PyPi <https://pypi.org/project/eth2spec/>`_ and `GitHub <https://github.com/ethereum/eth2.0-specs>`_.
        
        Features
        ---------
        
        - Uses the excellent `httpx <https://www.python-httpx.org/>`_ library, with `support <https://www.python-httpx.org/async/>`_
          for `Trio <https://github.com/python-trio/trio>`_ and `AsyncIO <https://docs.python.org/3/library/asyncio.html>`_ async runtimes.
        - Full type annotations, type hints for every API method
        - Compatible with the ``eth2spec`` package types and ``remerkleable`` for SSZ.
        - Through the ``eth2spec`` package, Beacon types can be configured, to use the API for testnets or other Eth2 variants.
        - Extensive use of Python 3.8 ``Protocol`` typing (`PEP 544 <https://www.python.org/dev/peps/pep-0544/>`_).
          Testing has your code has never been easier, just mock the object, type-safe!.
        - Easy extension and definition of API routes. The API function signatures and object types are all you need.
        
        Example
        --------
        
        Getting started
        ^^^^^^^^^^^^^^^^^
        
        .. code-block:: python
        
            import trio
            from eth2.models import lighthouse
            from eth2.core import ContentType
            from eth2.providers.http import Eth2HttpClient, Eth2HttpOptions
        
            async def start():
                # Customize this to use your Beacon endpoint
                address = 'http://localhost:4000'
                # Optionally bring in your own HTTP client
                # async with httpx.AsyncClient() as client:
                #     prov = Eth2HttpProvider(client, options=Eth2HttpOptions(api_base_url=address))
                async with Eth2HttpClient(options=Eth2HttpOptions(
                        api_base_url=address,
                        default_req_type=ContentType.json,
                        default_resp_type=ContentType.ssz)) as prov:
                    # The provider can be extended with any API model.
                    await fun(prov.extended_api(lighthouse.Eth2API))
                print("done!")
        
            trio.run(start)
        
        
        Using the API model
        ^^^^^^^^^^^^^^^^^^^^^
        
        .. code-block:: python
        
            from eth2.models.lighthouse import Eth2API
        
            async def fun(api: Eth2API):
                print("fetching state!")
                data = await api.beacon.state(slot=spec.Slot(1))
                print(data.beacon_state.eth1_data)
        
                # Much faster than retrieving full state!
                head = await api.beacon.head()
                print(f"finalized: {head.finalized_block_root.hex()} {head.finalized_slot}")
        
                enr = await api.network.enr()
                print(enr)
        
                # Will error, the slashing is invalid, two equal headers (and no signatures ofc)
                await api.beacon.post_proposer_slashing(spec.ProposerSlashing())
        
        
        Advanced API calls
        ^^^^^^^^^^^^^^^^^^^^
        
        When you need to tweak individual API call settings
        
        .. code-block:: python
        
            from eth2.core import ContentType, APIEndpointFn
            from eth2.models.lighthouse import Eth2API, APIState
        
            async def advanced(api: Eth2API):
                # Make a copy of the callable function, to then change its settings
                fn = APIEndpointFn(api.beacon.state)
                fn.resp_type = ContentType.json  # Instead of default ssz, because why not
        
                # The most inefficient way to retrieve finalized checkpoint.
                # Full state, as json.
                # But hey, access any data, and process with the spec as you like.
                data: APIState = await fn(slot=spec.Slot(300))
                print(data.beacon_state.finalized_checkpoint)
        
        Defining custom models
        ^^^^^^^^^^^^^^^^^^^^^^^^
        
        The HTTP provider can "learn" how to use a model of routes, on the fly! No need to hardcode any API calls.
        Just define the model as a Pytho 3.8 Protocol. The Eth2 API provider will shadow this model with an implementation.
        
        - Any ``Protocol`` class with annotations can be interpreted as route model. Fields are sub-routes.
        - ``api()`` decorator to make function calls usable endpoints. Customize endpoint options if you need.
        - ``var_path()`` decorator to make function calls construct dynamic paths
        
        Currently the Lighthouse API model is well supported, and the new standard-API is being experimented with, but incomplete.
        
        
        Project Links
        --------------
        
        - Docs: https://eth2py.readthedocs.io/
        - Changelog: https://eth2py.readthedocs.io/en/latest/changelog.html
        - PyPI: https://pypi.python.org/pypi/eth2
        - Issues: https://github.com/protolambda/eth2.py/issues
        
        
        Contact
        --------
        
        Author: `@protolambda <https://github.com/protolambda>`_
        
        License
        --------
        
        MIT, see `LICENSE <./LICENSE>`_ file.
        
Keywords: eth2,ethereum,serenity,api
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Operating System :: OS Independent
Requires-Python: >=3.8, <4
Description-Content-Type: text/x-rst
Provides-Extra: testing
Provides-Extra: linting
Provides-Extra: docs
