esplora-tapyrus 0.5.8

An efficient re-implementation of Electrum Server in Rust
Documentation
#!/usr/bin/env python3
import argparse
import daemon


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('txid')
    parser.add_argument('--dev', action='store_true')
    parser.add_argument('--networkid')
    parser.add_argument('--port')
    args = parser.parse_args()

    if args.dev:
        d = daemon.Daemon(port=args.port, cookie_dir=f'~/.tapyrus/dev-{args.networkid}')
    else:
        d = daemon.Daemon(port=args.port, cookie_dir=f'~/.tapyrus/prod-{args.networkid}')

    txid = args.txid

    txn, = d.request('getrawtransaction', [[txid, True]])
    vin = txn['vin']

    fee = 0.0
    for txi in txn['vin']:
        prev_txid = txi['txid']
        prev_tx, = d.request('getrawtransaction', [[prev_txid, True]])
        index = txi['vout']
        prev_txo = prev_tx['vout'][index]
        print(f"{prev_txid}:{index:<5} {prev_txo['value']:+20.8f}")
        fee += prev_txo['value']

    for i, txo in enumerate(txn['vout']):
        print(f"{txid}:{i:<5} {-txo['value']:+20.8f}")
        fee -= txo['value']

    print(f"Fee = {1e6 * fee:.2f} uBTC = {1e8 * fee / txn['vsize']:.2f} sat/vB")

if __name__ == '__main__':
    main()