Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/safe-global/safe-eth-py
Safe-eth-py includes a set of libraries to work with Ethereum and relevant Ethereum projects
https://github.com/safe-global/safe-eth-py
ethereum gnosis gnosis-safe multisig python
Last synced: 6 days ago
JSON representation
Safe-eth-py includes a set of libraries to work with Ethereum and relevant Ethereum projects
- Host: GitHub
- URL: https://github.com/safe-global/safe-eth-py
- Owner: safe-global
- License: mit
- Created: 2018-08-30T08:35:15.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2024-10-29T09:42:50.000Z (3 months ago)
- Last Synced: 2024-10-29T10:02:43.058Z (3 months ago)
- Topics: ethereum, gnosis, gnosis-safe, multisig, python
- Language: Python
- Homepage: https://safe-eth-py.readthedocs.io/en/latest/quickstart.html
- Size: 3.52 MB
- Stars: 165
- Watchers: 11
- Forks: 178
- Open Issues: 9
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
Safe-eth-py (previously 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.
- `Safe `_ 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 `_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 -fAdd new address for new chains
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you want to add Safe Smart Account support for a new chain you must `open a new issue `_.Once the issue is created or edited, an automatic validation will be executed and a **Pull Request** will be created if everything is ok. Finally, the Safe team will review and merge the automatic **Pull Request** generated from the issue.
Ethereum utils
--------------
safe_eth.eth
~~~~~~~~~~~~
- ``class EthereumClient (ethereum_node_url: str)``: Class to connect and do operations
with an ethereum node. Uses web3 and raw rpc calls for things not supported in web3.
Only ``http/https`` urls are supported 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 safe_eth.eth import EthereumClient
from safe_eth.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 `_ library:
.. code-block:: python
from safe_eth.eth import EthereumClient
ethereum_client = EthereumClient(ETHEREUM_NODE_URL)
ethereum_client.w3.eth.get_block(57)safe_eth.eth.constants
~~~~~~~~~~~~~~~~~~~~~~
- ``NULL_ADDRESS (0x000...0)``: Solidity ``address(0)``.
- ``SENTINEL_ADDRESS (0x000...1)``: Used for Safe's linked lists (modules, owners...).
- Maximum and minimum values for `R`, `S` and `V` in ethereum signatures.safe_eth.eth.oracles
~~~~~~~~~~~~~~~~~~~~
Price oracles for Uniswap, UniswapV2, Kyber, SushiSwap, Aave, Balancer, Curve, Mooniswap, Yearn...
Example:.. code-block:: python
from safe_eth.eth import EthereumClient
from safe_eth.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)safe_eth.eth.utils
~~~~~~~~~~~~~~~~~~Contains utils for ethereum operations:
- ``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 ``safe_eth.eth.django``.
You can find a set of helpers for working with Ethereum using Django and Django Rest framework.It includes:
- **safe_eth.eth.django.filters**: EthereumAddressFilter.
- **safe_eth.eth.django.models**: Model fields (Ethereum address, Ethereum big integer field).
- **safe_eth.eth.django.serializers**: Serializer fields (Ethereum address field, hexadecimal field).
- **safe_eth.eth.django.validators**: Ethereum related validators.
- **safe_eth.safe.serializers**: Serializers for Safe (signature, transaction...).
- All the tests are written using Django Test suite.Contributors
------------
`See contributors `_.. |ci| image:: https://github.com/safe-global/safe-eth-py/actions/workflows/python.yml/badge.svg
:alt: Github Actions CI build.. |coveralls| image:: https://coveralls.io/repos/github/safe-global/safe-eth-py/badge.svg
:target: https://coveralls.io/github/safe-global/safe-eth-py.. |python| image:: https://img.shields.io/badge/Python-3.13-blue.svg
:alt: Python 3.13.. |django| image:: https://img.shields.io/badge/Django-5-blue.svg
:alt: Django 5.. |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