Skip to main content

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 uv add safe-eth-py

If you want django ethereum utils (models, serializers, filters…) you need to run uv add 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:

uv sync --group dev --frozen
source .venv/bin/activate
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.

Safe APIs

safe_eth.safe.api

Interaction with the Safe Transaction Service API to manage Safes, transactions, delegates, and messages.

To use the default Transaction Service, you need an API key. You can set this API key either as an environment variable or pass it directly to the constructor using the api_key parameter. To obtain your API key, create an account on the Safe Developer Portal at https://developer.safe.global. Additionally, you can choose to use a custom service by setting the base_url parameter, the API key may not be required.

export SAFE_TRANSACTION_SERVICE_API_KEY=[api-key-jwt-token-value]

Example:

from safe_eth.eth import EthereumNetwork
from safe_eth.safe.api import TransactionServiceApi

transaction_service_api = TransactionServiceApi(EthereumNetwork.GNOSIS)
transactions = transaction_service_api.get_transactions("0xAedF684C1c41B51CbD228116e11484425d2FACB9")

Environment variables

Behaviour can be tuned with the following environment variables. All of them are optional and fall back to the defaults shown below.

Ethereum RPC client

These are read when the module-level EthereumClient singleton (safe_eth.eth.ethereum_client and its async counterpart) is instantiated.

  • ETHEREUM_NODE_URL: RPC node url used by the default EthereumClient singleton. No default (the singleton is not usable until it is set). In a Django application this variable is ignored: get_auto_ethereum_client / get_auto_async_ethereum_client read settings.ETHEREUM_NODE_URL instead, and that setting is required. The environment variable is only used as a fallback when Django is not installed.

  • ETHEREUM_RPC_TIMEOUT: Timeout (seconds) for regular RPC calls. Default 10.

  • ETHEREUM_RPC_SLOW_TIMEOUT: Timeout (seconds) for slow RPC calls (e.g. tracing). Default 60.

  • ETHEREUM_RPC_RETRY_COUNT: Number of retries for RPC calls. Default 1.

  • ETHEREUM_RPC_BATCH_REQUEST_MAX_SIZE: Maximum number of calls bundled in a single batch request. Default 500.

Caching

  • CACHE_KECCAK: lru_cache max size for keccak256 hashing. Default 1024.

  • CACHE_CHECKSUM_ADDRESS: lru_cache max size for checksummed address conversion. Default 500000.

Safe contract addresses

Override the default deterministic contract addresses (useful on chains where they were deployed to a different address).

  • SAFE_SINGLETON_FACTORY_ADDRESS: Safe singleton factory address. Default 0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7.

  • SAFE_SIMULATE_TX_ACCESSOR_ADDRESS: SimulateTxAccessor contract address. Default 0x3d4BA2E0884aa488718476ca2FB8Efc291A46199.

Safe Transaction Service API

  • SAFE_TRANSACTION_SERVICE_API_KEY: API key (JWT) for the default Transaction Service. See Safe APIs above. No default.

  • SAFE_TRANSACTION_SERVICE_REQUEST_TIMEOUT: Request timeout (seconds). Default 10.

Block explorer and source verification clients

The *_MAX_REQUESTS variables tune the connection pool of the async clients only; the synchronous Etherscan and Blockscout clients do not pool connections and ignore them.

  • ETHERSCAN_CLIENT_REQUEST_TIMEOUT: Request timeout (seconds). Default 10.

  • ETHERSCAN_CLIENT_MAX_REQUESTS: Max pool size of concurrent requests (AsyncEtherscanClientV2 only). Default 100.

  • BLOCKSCOUT_CLIENT_REQUEST_TIMEOUT: Request timeout (seconds). Default 10.

  • BLOCKSCOUT_CLIENT_MAX_REQUESTS: Max pool size of concurrent requests (AsyncBlockscoutClient only). Default 100.

  • SOURCIFY_BASE_URL_API: Sourcify API base url. Default https://sourcify.dev.

  • SOURCIFY_CLIENT_REQUEST_TIMEOUT: Request timeout (seconds). Default 10.

  • SOURCIFY_CLIENT_MAX_REQUESTS: Max pool size of concurrent requests. Default 100.

  • ENS_CLIENT_REQUEST_TIMEOUT: ENS client request timeout (seconds). Default 5.

Contributors

See contributors

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

safe_eth_py-7.23.0.tar.gz (881.1 kB view details)

Uploaded Source

Built Distribution

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

safe_eth_py-7.23.0-py3-none-any.whl (1.0 MB view details)

Uploaded Python 3

File details

Details for the file safe_eth_py-7.23.0.tar.gz.

File metadata

  • Download URL: safe_eth_py-7.23.0.tar.gz
  • Upload date:
  • Size: 881.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for safe_eth_py-7.23.0.tar.gz
Algorithm Hash digest
SHA256 a5f56245b06ee40332cc288038060402ab37d8ecb73bd1cab91b8f6846feef08
MD5 133cc53ed54b259a241adabf3f2690fb
BLAKE2b-256 460c5c10d5d70f019621ad08bbbd245aaf083c366a63821a63c20d67a1598e89

See more details on using hashes here.

File details

Details for the file safe_eth_py-7.23.0-py3-none-any.whl.

File metadata

  • Download URL: safe_eth_py-7.23.0-py3-none-any.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for safe_eth_py-7.23.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6e9aed4f74bb673149b433f174188c8b64cb44478224bfca48dd774d2b532bed
MD5 e4777a3619ead72308cd5373c52122f0
BLAKE2b-256 b14d69e4205df5186f4703601395276b464f7da253247ae5930e255f3ccbad4a

See more details on using hashes here.

Release history Release notifications | RSS feed

7.24.0

2 files

This release

7.23.0 This release

2 files

7.22.1

2 files

7.22.0

2 files

7.21.0

2 files

7.20.0

2 files

7.19.0

2 files

7.18.0

2 files

7.17.1

2 files

7.17.0

2 files

7.16.0

2 files

7.15.0

2 files

7.14.0

2 files

7.13.0

2 files

7.12.0

2 files

7.11.0

2 files

7.10.0

2 files

7.9.0

2 files

7.8.0

2 files

7.7.0

2 files

7.6.1

2 files

7.5.1

2 files

7.5.0

2 files

7.4.0

2 files

7.3.0

2 files

7.2.0

2 files

7.1.1

2 files

7.0.0

2 files

6.4.0

2 files

6.3.0

2 files

6.2.0

2 files

6.1.1

2 files

6.1.0

2 files

6.0.0

2 files

5.8.0

2 files

5.7.0

2 files

5.6.0

2 files

5.5.0

2 files

5.4.3

2 files

5.4.2

2 files

5.4.1

2 files

5.4.0

2 files

5.3.1

2 files

5.3.0

2 files

5.2.1

2 files

5.2.0

2 files

5.1.0

2 files

5.0.2

2 files

5.0.1

2 files

5.0.0

2 files

4.9.3

2 files

4.9.2

2 files

4.9.1

2 files

4.9.0

2 files

4.8.2

2 files

4.8.1

2 files

4.8.0

2 files

4.7.1

2 files

4.7.0

2 files

4.6.0

2 files

4.5.2

2 files

4.5.1

2 files

4.5.0

2 files

4.4.0

2 files

4.3.2

2 files

4.3.1

2 files

4.3.0

2 files

4.2.0

2 files

4.1.3

2 files

4.1.2

2 files

4.1.1

2 files

4.1.0

2 files

4.0.1

2 files

4.0.0

2 files

Supported by

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