Giter Site home page Giter Site logo

reth-db-py's Introduction

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

reth-db-py's People

Contributors

ebolon avatar gibz104 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.