Skip to main content

Fork safe Ecosystem Foundation utilities for Ethereum projects

Project description

Github Actions CI build coveralls Python 3.13 Django 5 Pypi package Documentation Status 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:

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

Add 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):

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:

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:

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

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

steven_eth_py-7.1.1.tar.gz (789.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

steven_eth_py-7.1.1-py3-none-any.whl (898.1 kB view details)

Uploaded Python 3

File details

Details for the file steven_eth_py-7.1.1.tar.gz.

File metadata

  • Download URL: steven_eth_py-7.1.1.tar.gz
  • Upload date:
  • Size: 789.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.8

File hashes

Hashes for steven_eth_py-7.1.1.tar.gz
Algorithm Hash digest
SHA256 61489f9bdc16dfa8d1859c3cd5100a5930435649d03d33640ea8e03347474081
MD5 06438ed95fe513ba349b63273d22613d
BLAKE2b-256 87003429a72041b42aa83ebe7a4f2a7687e73a1e9e50693d7c987f9d3f3d6242

See more details on using hashes here.

File details

Details for the file steven_eth_py-7.1.1-py3-none-any.whl.

File metadata

  • Download URL: steven_eth_py-7.1.1-py3-none-any.whl
  • Upload date:
  • Size: 898.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.8

File hashes

Hashes for steven_eth_py-7.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a58e0f550037c9820267bd81fccf960ff5c4ad0bd309e829299712e73d28075c
MD5 b7378c675ebbb6b3e7210353cbcaedba
BLAKE2b-256 142146654d06fd0b0065d972ffa18b467b6570ee499fe3569e927f0a0edc1d48

See more details on using hashes here.

Supported by

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