gnosis-neon-safe-eth-py


Namegnosis-neon-safe-eth-py JSON
Version 5.4.3 PyPI version JSON
download
home_pagehttps://github.com/safe-global/safe-eth-py
SummarySafe Ecosystem Foundation utilities for Ethereum projects
upload_time2023-05-25 14:26:39
maintainer
docs_urlNone
authorUxío
requires_python>=3.8
licenseMIT License
keywords ethereum web3 django safe cowswap gnosis
VCS
bugtrack_url
requirements django django-filter djangorestframework hexbytes packaging psycopg2-binary py-evm pysha3 requests safe-pysha3 web3
Travis-CI No Travis.
coveralls test coverage
            Safe-eth-py (previosly known as Gnosis-py)
##########################################

.. class:: no-web no-pdf

|ci| |coveralls| |python| |django| |pipy| |readthedocs| |black|

Safe-eth-py includes a set of libraries to work with Ethereum and relevant Ethereum projects:
  - `EthereumClient`, a wrapper over Web3.py `Web3` client including utilities to deal with ERC20/721
    tokens and tracing.
  - `Gnosis Safe <https://github.com/safe-global/safe-contracts>`_ classes and utilities.
  - Price oracles for `Uniswap`, `Kyber`...
  - Django serializers, models and utils.

Quick start
-----------

Just run ``pip install safe-eth-py`` or add it to your **requirements.txt**

If you want django ethereum utils (models, serializers, filters...) you need to run
``pip install safe-eth-py[django]``

If you have issues building **coincurve** maybe
`you are missing some libraries <https://ofek.dev/coincurve/install/#source>`_


Contributing to safe-eth-py
---------------------------
Clone the repo, then to set it up:

.. code-block:: bash

    python -m venv venv
    source venv/bin/activate
    pip install -r requirements-dev.txt
    pre-commit install -f

Ethereum utils
--------------
gnosis.eth
~~~~~~~~~~~~~~~~~~~~
- ``class EthereumClient (ethereum_node_url: str)``: Class to connect and do operations
  with a ethereum node. Uses web3 and raw rpc calls for things not supported in web3.
  Only ``http/https`` urls are suppored for the node url.

``EthereumClient`` has some utils that improve a lot performance using Ethereum nodes, like
the possibility of doing ``batch_calls`` (a single request making read-only calls to multiple contracts):

.. code-block:: python

  from gnosis.eth import EthereumClient
  from gnosis.eth.contracts import get_erc721_contract
  ethereum_client = EthereumClient(ETHEREUM_NODE_URL)
  erc721_contract = get_erc721_contract(self.w3, token_address)
  name, symbol = ethereum_client.batch_call([
                      erc721_contract.functions.name(),
                      erc721_contract.functions.symbol(),
                  ])

If you want to use the underlying `web3.py <https://github.com/ethereum/web3.py>`_ library:

.. code-block:: python

  from gnosis.eth import EthereumClient
  ethereum_client = EthereumClient(ETHEREUM_NODE_URL)
  ethereum_client.w3.eth.get_block(57)


gnosis.eth.constants
~~~~~~~~~~~~~~~~~~~~
- ``NULL_ADDRESS (0x000...0)``: Solidity ``address(0)``.
- ``SENTINEL_ADDRESS (0x000...1)``: Used for Gnosis Safe's linked lists (modules, owners...).
- Maximum an minimum values for `R`, `S` and `V` in ethereum signatures.

gnosis.eth.oracles
~~~~~~~~~~~~~~~~~~

Price oracles for Uniswap, UniswapV2, Kyber, SushiSwap, Aave, Balancer, Curve, Mooniswap, Yearn...
Example:

.. code-block:: python

  from gnosis.eth import EthereumClient
  from gnosis.eth.oracles import UniswapV2Oracle
  ethereum_client = EthereumClient(ETHEREUM_NODE_URL)
  uniswap_oracle = UniswapV2Oracle(ethereum_client)
  gno_token_mainnet_address = '0x6810e776880C02933D47DB1b9fc05908e5386b96'
  weth_token_mainnet_address = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'
  price = uniswap_oracle.get_price(gno_token_mainnet_address, uniswap_oracle.weth_address)



gnosis.eth.utils
~~~~~~~~~~~~~~~~

Contains utils for ethereum operations:

- ``get_eth_address_with_key() -> Tuple[str, bytes]``: Returns a tuple of a valid public ethereum checksumed
  address with the private key.
- ``mk_contract_address_2(from_: Union[str, bytes], salt: Union[str, bytes], init_code: [str, bytes]) -> str``:
  Calculates the address of a new contract created using the new CREATE2 opcode.

Ethereum django (REST) utils
----------------------------
Django utils are available under ``gnosis.eth.django``.
You can find a set of helpers for working with Ethereum using Django and Django Rest framework.

It includes:

- **gnosis.eth.django.filters**: EthereumAddressFilter.
- **gnosis.eth.django.models**: Model fields (Ethereum address, Ethereum big integer field).
- **gnosis.eth.django.serializers**: Serializer fields (Ethereum address field, hexadecimal field).
- **gnosis.eth.django.validators**: Ethereum related validators.
- **gnosis.safe.serializers**: Serializers for Gnosis Safe (signature, transaction...).
- All the tests are written using Django Test suite.

Contributors
------------
`See contributors <https://github.com/safe-global/safe-eth-py/graphs/contributors>`_

.. |ci| image:: https://github.com/safe-global/safe-eth-py/workflows/Python%20CI/badge.svg?branch=master
    :alt: Github Actions CI build

.. |coveralls| image:: https://coveralls.io/repos/github/safe-global/safe-eth-py/badge.svg?branch=master
    :target: https://coveralls.io/github/safe-global/safe-eth-py?branch=master
    :alt: Coveralls

.. |python| image:: https://img.shields.io/badge/Python-3.9-blue.svg
    :alt: Python 3.9

.. |django| image:: https://img.shields.io/badge/Django-2-blue.svg
    :alt: Django 2.2

.. |pipy| image:: https://badge.fury.io/py/safe-eth-py.svg
    :target: https://badge.fury.io/py/safe-eth-py
    :alt: Pypi package

.. |readthedocs| image:: https://readthedocs.org/projects/safe-eth-py/badge/?version=latest
    :target: https://safe-eth-py.readthedocs.io/en/latest/?badge=latest
    :alt: Documentation Status

.. |black| image:: https://img.shields.io/badge/code%20style-black-000000.svg
    :target: https://github.com/psf/black
    :alt: Black

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/safe-global/safe-eth-py",
    "name": "gnosis-neon-safe-eth-py",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "ethereum,web3,django,safe,cowswap,gnosis",
    "author": "Ux\u00edo",
    "author_email": "uxio@safe.global",
    "download_url": "https://files.pythonhosted.org/packages/ed/df/1730a3fac99d1b7f6764ce22547721c18a24ca7e0974ba39cf8de68546b8/gnosis-neon-safe-eth-py-5.4.3.tar.gz",
    "platform": null,
    "description": "Safe-eth-py (previosly known as Gnosis-py)\n##########################################\n\n.. class:: no-web no-pdf\n\n|ci| |coveralls| |python| |django| |pipy| |readthedocs| |black|\n\nSafe-eth-py includes a set of libraries to work with Ethereum and relevant Ethereum projects:\n  - `EthereumClient`, a wrapper over Web3.py `Web3` client including utilities to deal with ERC20/721\n    tokens and tracing.\n  - `Gnosis Safe <https://github.com/safe-global/safe-contracts>`_ classes and utilities.\n  - Price oracles for `Uniswap`, `Kyber`...\n  - Django serializers, models and utils.\n\nQuick start\n-----------\n\nJust run ``pip install safe-eth-py`` or add it to your **requirements.txt**\n\nIf you want django ethereum utils (models, serializers, filters...) you need to run\n``pip install safe-eth-py[django]``\n\nIf you have issues building **coincurve** maybe\n`you are missing some libraries <https://ofek.dev/coincurve/install/#source>`_\n\n\nContributing to safe-eth-py\n---------------------------\nClone the repo, then to set it up:\n\n.. code-block:: bash\n\n    python -m venv venv\n    source venv/bin/activate\n    pip install -r requirements-dev.txt\n    pre-commit install -f\n\nEthereum utils\n--------------\ngnosis.eth\n~~~~~~~~~~~~~~~~~~~~\n- ``class EthereumClient (ethereum_node_url: str)``: Class to connect and do operations\n  with a ethereum node. Uses web3 and raw rpc calls for things not supported in web3.\n  Only ``http/https`` urls are suppored for the node url.\n\n``EthereumClient`` has some utils that improve a lot performance using Ethereum nodes, like\nthe possibility of doing ``batch_calls`` (a single request making read-only calls to multiple contracts):\n\n.. code-block:: python\n\n  from gnosis.eth import EthereumClient\n  from gnosis.eth.contracts import get_erc721_contract\n  ethereum_client = EthereumClient(ETHEREUM_NODE_URL)\n  erc721_contract = get_erc721_contract(self.w3, token_address)\n  name, symbol = ethereum_client.batch_call([\n                      erc721_contract.functions.name(),\n                      erc721_contract.functions.symbol(),\n                  ])\n\nIf you want to use the underlying `web3.py <https://github.com/ethereum/web3.py>`_ library:\n\n.. code-block:: python\n\n  from gnosis.eth import EthereumClient\n  ethereum_client = EthereumClient(ETHEREUM_NODE_URL)\n  ethereum_client.w3.eth.get_block(57)\n\n\ngnosis.eth.constants\n~~~~~~~~~~~~~~~~~~~~\n- ``NULL_ADDRESS (0x000...0)``: Solidity ``address(0)``.\n- ``SENTINEL_ADDRESS (0x000...1)``: Used for Gnosis Safe's linked lists (modules, owners...).\n- Maximum an minimum values for `R`, `S` and `V` in ethereum signatures.\n\ngnosis.eth.oracles\n~~~~~~~~~~~~~~~~~~\n\nPrice oracles for Uniswap, UniswapV2, Kyber, SushiSwap, Aave, Balancer, Curve, Mooniswap, Yearn...\nExample:\n\n.. code-block:: python\n\n  from gnosis.eth import EthereumClient\n  from gnosis.eth.oracles import UniswapV2Oracle\n  ethereum_client = EthereumClient(ETHEREUM_NODE_URL)\n  uniswap_oracle = UniswapV2Oracle(ethereum_client)\n  gno_token_mainnet_address = '0x6810e776880C02933D47DB1b9fc05908e5386b96'\n  weth_token_mainnet_address = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'\n  price = uniswap_oracle.get_price(gno_token_mainnet_address, uniswap_oracle.weth_address)\n\n\n\ngnosis.eth.utils\n~~~~~~~~~~~~~~~~\n\nContains utils for ethereum operations:\n\n- ``get_eth_address_with_key() -> Tuple[str, bytes]``: Returns a tuple of a valid public ethereum checksumed\n  address with the private key.\n- ``mk_contract_address_2(from_: Union[str, bytes], salt: Union[str, bytes], init_code: [str, bytes]) -> str``:\n  Calculates the address of a new contract created using the new CREATE2 opcode.\n\nEthereum django (REST) utils\n----------------------------\nDjango utils are available under ``gnosis.eth.django``.\nYou can find a set of helpers for working with Ethereum using Django and Django Rest framework.\n\nIt includes:\n\n- **gnosis.eth.django.filters**: EthereumAddressFilter.\n- **gnosis.eth.django.models**: Model fields (Ethereum address, Ethereum big integer field).\n- **gnosis.eth.django.serializers**: Serializer fields (Ethereum address field, hexadecimal field).\n- **gnosis.eth.django.validators**: Ethereum related validators.\n- **gnosis.safe.serializers**: Serializers for Gnosis Safe (signature, transaction...).\n- All the tests are written using Django Test suite.\n\nContributors\n------------\n`See contributors <https://github.com/safe-global/safe-eth-py/graphs/contributors>`_\n\n.. |ci| image:: https://github.com/safe-global/safe-eth-py/workflows/Python%20CI/badge.svg?branch=master\n    :alt: Github Actions CI build\n\n.. |coveralls| image:: https://coveralls.io/repos/github/safe-global/safe-eth-py/badge.svg?branch=master\n    :target: https://coveralls.io/github/safe-global/safe-eth-py?branch=master\n    :alt: Coveralls\n\n.. |python| image:: https://img.shields.io/badge/Python-3.9-blue.svg\n    :alt: Python 3.9\n\n.. |django| image:: https://img.shields.io/badge/Django-2-blue.svg\n    :alt: Django 2.2\n\n.. |pipy| image:: https://badge.fury.io/py/safe-eth-py.svg\n    :target: https://badge.fury.io/py/safe-eth-py\n    :alt: Pypi package\n\n.. |readthedocs| image:: https://readthedocs.org/projects/safe-eth-py/badge/?version=latest\n    :target: https://safe-eth-py.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n.. |black| image:: https://img.shields.io/badge/code%20style-black-000000.svg\n    :target: https://github.com/psf/black\n    :alt: Black\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "Safe Ecosystem Foundation utilities for Ethereum projects",
    "version": "5.4.3",
    "project_urls": {
        "Documentation": "https://safe-eth-py.readthedocs.io/en/latest/",
        "Homepage": "https://github.com/safe-global/safe-eth-py",
        "Source": "https://github.com/safe-global/safe-eth-py",
        "Tracker": "https://github.com/safe-global/safe-eth-py/issues"
    },
    "split_keywords": [
        "ethereum",
        "web3",
        "django",
        "safe",
        "cowswap",
        "gnosis"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a2d995c0f48ac1d9edc9406c40d77393a79227946e5e80544b9d486c62b9282c",
                "md5": "32b5bfa6fb4a8587dc1b1fe1715a1ece",
                "sha256": "9d6b5d63f4b27330a80a77bec8016e9fff4f89b81e4680d1bb495b05a3f70a63"
            },
            "downloads": -1,
            "filename": "gnosis_neon_safe_eth_py-5.4.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "32b5bfa6fb4a8587dc1b1fe1715a1ece",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 771887,
            "upload_time": "2023-05-25T14:26:36",
            "upload_time_iso_8601": "2023-05-25T14:26:36.839845Z",
            "url": "https://files.pythonhosted.org/packages/a2/d9/95c0f48ac1d9edc9406c40d77393a79227946e5e80544b9d486c62b9282c/gnosis_neon_safe_eth_py-5.4.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eddf1730a3fac99d1b7f6764ce22547721c18a24ca7e0974ba39cf8de68546b8",
                "md5": "591aa0a4c617e278b1245fdfefb49813",
                "sha256": "bcfbbbcbd44053ce87d31bd40a2e43f8031f5d097b7955dd060416918194679c"
            },
            "downloads": -1,
            "filename": "gnosis-neon-safe-eth-py-5.4.3.tar.gz",
            "has_sig": false,
            "md5_digest": "591aa0a4c617e278b1245fdfefb49813",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 698483,
            "upload_time": "2023-05-25T14:26:39",
            "upload_time_iso_8601": "2023-05-25T14:26:39.374701Z",
            "url": "https://files.pythonhosted.org/packages/ed/df/1730a3fac99d1b7f6764ce22547721c18a24ca7e0974ba39cf8de68546b8/gnosis-neon-safe-eth-py-5.4.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-05-25 14:26:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "safe-global",
    "github_project": "safe-eth-py",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "requirements": [
        {
            "name": "django",
            "specs": [
                [
                    "==",
                    "4.2.1"
                ]
            ]
        },
        {
            "name": "django-filter",
            "specs": [
                [
                    "==",
                    "23.2"
                ]
            ]
        },
        {
            "name": "djangorestframework",
            "specs": [
                [
                    "==",
                    "3.14.0"
                ]
            ]
        },
        {
            "name": "hexbytes",
            "specs": [
                [
                    "==",
                    "0.2.3"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": []
        },
        {
            "name": "psycopg2-binary",
            "specs": [
                [
                    "==",
                    "2.9.6"
                ]
            ]
        },
        {
            "name": "py-evm",
            "specs": [
                [
                    "==",
                    "0.7.0a2"
                ]
            ]
        },
        {
            "name": "pysha3",
            "specs": [
                [
                    ">=",
                    "1.0.0"
                ],
                [
                    "<",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.31.0"
                ]
            ]
        },
        {
            "name": "safe-pysha3",
            "specs": [
                [
                    ">=",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "web3",
            "specs": [
                [
                    "==",
                    "6.4.0"
                ]
            ]
        }
    ],
    "lcname": "gnosis-neon-safe-eth-py"
}
        
Elapsed time: 0.16431s