Skip to content

gibz104/reth-db-py

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

reth-db-py

Python package allowing you to interact with the Reth DB via Python. Written with Rust and Pyo3.

This python wrapper can access node data 3x-5x faster than local web3.py calls. Using this package, a block can be retrieved in ~10ms on a local reth DB.

Test Suite Py Versions Test OS

Installation

This package has been published to PyPi and can be installed using pip:

pip install reth-db-py

Assets

This package only has a single python class made available: PyDatabaseHandler.

PyDatabaseHandler is a class used to interact with the Reth DB. It's a wrapper around the Rust DatabaseHandler struct. It has a few methods which all return json strings:

  • get_header_by_block_number: get a single header by block number
  • get_headers_by_block_number_range: get multiple headers by block number range
  • get_transaction_by_id: get a single transaction by transaction id
  • get_transactions_by_id_range: get multiple transactions by transaction id range
  • get_transactions_by_block_number_range: get multiple transactions by block number range
  • get_block_by_number: get a single block by block number
  • get_uncles_by_block_number: get uncles by block number
  • get_receipts_by_transaction_id: get receipts by transaction id
  • get_receipts_by_block_number: get receipts by block number
impl PyDatabaseHandler {
    pub fn get_header_by_block_number(&self, number: u64) -> PyResult<String>
    pub fn get_headers_by_block_number_range(&self, start: u64, end: u64) -> PyResult<String>
    pub fn get_transaction_by_id(&self, id: u64) -> PyResult<String>
    pub fn get_transactions_by_id_range(&self, start: u64, end: u64) -> PyResult<String>
    pub fn get_transactions_by_block_number_range(&self, start: u64, end: u64) -> PyResult<String>
    pub fn get_block_by_number(&self, number: u64) -> PyResult<String>
    pub fn get_uncles_by_block_number(&self, number: u64) -> PyResult<String>
    pub fn get_receipts_by_transaction_id(&self, id: u64) -> PyResult<String>
    pub fn get_receipts_by_block_number(&self, number: u64) -> PyResult<String>
}
class PyDatabaseHandler:
    def get_header_by_block_number(self, number: int) -> str
    def get_headers_by_block_number_range(self, start: int, end: int) -> str
    def get_transaction_by_id(self, id: int) -> str
    def get_transactions_by_id_range(self, start: int, end: int) -> str
    def get_transactions_by_block_number_range(self, start: int, end: int) -> str
    def get_block_by_number(self, number: int) -> str
    def get_uncles_by_block_number(self, number: int) -> str
    def get_receipts_by_transaction_id(self, id: int) -> str
    def get_receipts_by_block_number(self, number: int) -> str

Usage

Import reth-db-py assets:

from reth_db_py import PyDatabaseHandler

Create a PyDatabaseHandler instance:

handler = PyDatabaseHandler("/path/to/db/mdbx.dat")

Get the header by block number

header = handler.get_header_by_block_number(17_000_000)

Get the headers by block number range

headers = handler.get_headers_by_block_number_range(17_000_000, 17_000_005)

Get transaction by id

transaction = handler.get_transaction_by_id(1000)

Get transactions by id range

transactions = handler.get_transactions_by_id_range(1000, 1005)

Get transactions by block number range

transactions = handler.get_transactions_by_block_number_range(17_000_000, 17_000_005)

Get block by number

block = handler.get_block_by_number(17_000_000)

Get uncles by block number

uncles = handler.get_uncles_by_block_number(17_000_000)

Get receipts by transaction id

receipts = handler.get_receipts_by_transaction_id(1000)

Get receipts by block number

receipts = handler.get_receipts_by_block_number(17_000_000)

Tests

Coming soon.

Benchmarks

Speed tests were conducted by retrieving 1,000 block bodies (including transactions) using:

  • reth-db-py (local reth db)
  • web3.py (local reth JSON RPC)
  • http requests (remote alchemy API)

See benchmark tests here.

benchmarks

About

Python wrapper around reth db. Written in Rust.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published