bitcoin_balance_etl 0.1.2

A high-performance Bitcoin balance ETL tool for extracting wallet balances directly from Bitcoin Core's chainstate LevelDB, even on pruned nodes.


pub fn decode_varint(data: &[u8]) -> Option<(i64, usize)> {
    let mut n: i64 = 0;
    for (i, &byte) in data.iter().enumerate().take(9) {
        n = n << 7;
        n |= (byte & 0x7F) as i64;
        if byte & 0x80 != 0 {
            n += 1;
        } else {
            return Some((n, i + 1));
        }
    }
    None
}

pub fn decompress_amount(x: i64) -> i64 {
    if x == 0 {
        return 0;
    }
    let mut x = x - 1;
    let e = x % 10;
    x /= 10;
    let mut n;
    if e < 9 {
        let d = x % 9;
        x /= 9;
        n = x * 10 + d + 1;
    } else {
        n = x + 1;
    }
    for _ in 0..e {
        n *= 10;
    }
    n
}