• Stars
    star
    118
  • Rank 299,923 (Top 6 %)
  • Language
    Python
  • License
    MIT License
  • Created over 6 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Safe-eth-py includes a set of libraries to work with Ethereum and relevant Ethereum projects

Safe-eth-py (previosly known as Gnosis-py)

Github Actions CI build Coveralls Python 3.9 Django 2.2 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.
  • Gnosis 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

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

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 library:

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:

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

More Repositories

1

safe-smart-account

Safe allows secure management of blockchain assets.
TypeScript
1,827
star
2

safe-wallet-web

Safe{Wallet} โ€“ multisig EVM wallet
TypeScript
352
star
3

safe-apps-sdk

Client-side SDKs to create third-party Safe Apps
TypeScript
205
star
4

safe-core-sdk

The Safe{Core} Account Abstraction SDK allows builders to add account abstraction functionality into their apps.
TypeScript
202
star
5

safe-transaction-service

Keeps track of transactions sent via Safe contacts and confirmed transactions. It also keeps track of Ether and ERC20 token transfers to Safe contracts.
Python
184
star
6

safe-modules

A collection of modules that can be used with the Safe contract
TypeScript
140
star
7

safe-cli

Command line utility for Gnosis Safe
Python
138
star
8

safe-deployments

A collection of Safe singleton deployments
TypeScript
131
star
9

safe-ios

Safe Multisig iOS app.
Swift
114
star
10

safe-react-apps

A repository for applications for Safe Web Interface
TypeScript
99
star
11

safe-android

๐Ÿ” App to manage and interact with Safe
Kotlin
90
star
12

safe-singleton-factory

Singleton factory used by Safe related contracts
TypeScript
77
star
13

safe-docs

Developer Docs for building on Safe.
MDX
51
star
14

safe-react-components

Gnosis Safe component library
TypeScript
35
star
15

safe-user-allocation-reports

Python
34
star
16

account-abstraction-sdk

TypeScript
31
star
17

safe-config-service

The safe-config-service is a service that provides configuration information in the context of the Safe clients environment
Python
31
star
18

safe-client-gateway

Serves as a bridge for the Safe{Wallet} clients (Android, iOS, Web)
TypeScript
23
star
19

safe-gateway-typescript-sdk

Safe Gateway TypeScript SDK
TypeScript
20
star
20

safe-token

TypeScript
19
star
21

safe-infrastructure

One `docker-compose.yml` file to rule them all
Shell
19
star
22

safe-modules-deployments

This repo contains a collection of deployments of audited contracts from the Safe modules repository.
TypeScript
9
star
23

safe-ecosystem-database

Safe ecosystem database
HTML
6
star
24

safe-homepage

Safe homepage
TypeScript
6
star
25

safe-gelato-relay-service

The Safe Gelato Relay Service is a web service which allows relaying transactions via the Gelato Relay Service.
TypeScript
6
star
26

safe-services-status

๐Ÿ“ˆ Uptime monitor and status page for Safe, powered by @upptime
Markdown
5
star
27

claiming-app-data

Vesting data converter and proofs generator.
Python
5
star
28

safe-dao-governance-app

The portal to Safe{DAO} governance, voting power delegation and allocation claiming.
TypeScript
3
star
29

safe-pm

Production coordination for the Safe team primarily focused on Problems that need to be solved
2
star
30

safe-locking

Safe Token Locking Contracts
TypeScript
2
star
31

safe-guardians-page

This page is dedicated to the Safe Guardians program, a program designed to reward active members of the Safe community, who use their powers to contribute positively to the ecosystem.
TypeScript
2
star
32

safecon-landing-page

Safe{Con} landing page
CSS
1
star
33

cla-signatures

CLA signatures repository
1
star
34

token-list

This repo contain the Safe default token list. This list contains tokens which appear by default in the Safe wallet interface and are not part of the imported default token lists.
Shell
1
star