From 74f13419a85be0075f8bcb581fdcec8febefa1b4 Mon Sep 17 00:00:00 2001 From: Frederic Lepied Date: Tue, 12 Oct 2021 21:23:02 +0200 Subject: [PATCH] enhance contribs to allow to connect to an external server --- contrib/.gitignore | 1 + contrib/get_tx.py | 3 ++- contrib/history.py | 6 +++--- contrib/history.sh | 18 ++++++++++++++++-- contrib/tx_fee.py | 3 ++- contrib/xpub.py | 16 +++++++++++++--- doc/usage.md | 4 ++-- 7 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 contrib/.gitignore diff --git a/contrib/.gitignore b/contrib/.gitignore new file mode 100644 index 0000000..1d17dae --- /dev/null +++ b/contrib/.gitignore @@ -0,0 +1 @@ +.venv diff --git a/contrib/get_tx.py b/contrib/get_tx.py index 3b4f99a..655540b 100755 --- a/contrib/get_tx.py +++ b/contrib/get_tx.py @@ -5,10 +5,11 @@ import json def main(): parser = argparse.ArgumentParser() + parser.add_argument('--host', default='localhost') parser.add_argument("txid") args = parser.parse_args() - conn = client.Client(("localhost", 50001)) + conn = client.Client((args.host, 50001)) tx, = conn.call([client.request("blockchain.transaction.get", args.txid, True)]) print(json.dumps(tx)) diff --git a/contrib/history.py b/contrib/history.py index ce1142e..436963e 100755 --- a/contrib/history.py +++ b/contrib/history.py @@ -5,7 +5,6 @@ import hashlib import io import sys -import pycoin from logbook import Logger, StreamHandler import prettytable @@ -30,6 +29,7 @@ def show_rows(rows, field_names): def main(): parser = argparse.ArgumentParser() + parser.add_argument('--host', default='localhost') parser.add_argument('--network', default='mainnet') parser.add_argument('address', nargs='+') args = parser.parse_args() @@ -46,14 +46,14 @@ def main(): else: raise ValueError(f"unknown network: {args.network}") - hostport = ('localhost', port) + hostport = (args.host, port) log.info('connecting to {}:{}', *hostport) conn = client.Client(hostport) tip, = conn.call([client.request('blockchain.headers.subscribe')]) script_hashes = [ - _script_hash(network.parse.address(addr).script()) + _script_hash(network.parse.address(addr).script()) for addr in args.address ] diff --git a/contrib/history.sh b/contrib/history.sh index 711a776..b320eb8 100755 --- a/contrib/history.sh +++ b/contrib/history.sh @@ -1,4 +1,18 @@ #!/bin/bash set -eu -cd `dirname $0` -.env/bin/python history.py $* + +cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" + +venv=false +if [ "$1" = "--venv" ]; +then + shift + venv=true +fi + +if [ $venv = true ] && [ ! -d .venv ]; then + virtualenv .venv + .venv/bin/pip install pycoin logbook prettytable +fi + +exec .venv/bin/python history.py "$@" diff --git a/contrib/tx_fee.py b/contrib/tx_fee.py index a53bc94..370b230 100755 --- a/contrib/tx_fee.py +++ b/contrib/tx_fee.py @@ -4,10 +4,11 @@ import client def main(): parser = argparse.ArgumentParser() + parser.add_argument('--host', default='localhost') parser.add_argument("txid") args = parser.parse_args() - conn = client.Client(("localhost", 50001)) + conn = client.Client((args.host, 50001)) tx, = conn.call([client.request("blockchain.transaction.get", args.txid, True)]) requests = [] for vin in tx["vin"]: diff --git a/contrib/xpub.py b/contrib/xpub.py index 45fc69d..b761349 100755 --- a/contrib/xpub.py +++ b/contrib/xpub.py @@ -1,4 +1,5 @@ #!/usr/bin/env python3 +import argparse import hashlib import sys @@ -10,11 +11,20 @@ import client log = Logger("xpub") + def main(): - conn = client.Client(('localhost', 50001)) - xpub, = sys.argv[1:] + parser = argparse.ArgumentParser() + parser.add_argument('--host', default='localhost') + parser.add_argument('xpub') + args = parser.parse_args() + + conn = client.Client((args.host, 50001)) total = 0 - xpub = network.parse.bip32_pub(xpub) + xpub = network.parse.bip32(args.xpub) + + if xpub is None: + log.error('Invalid BIP32 pub key %s' % args.xpub) + sys.exit(1) for change in (0, 1): empty = 0 diff --git a/doc/usage.md b/doc/usage.md index aa23e82..a5d47a6 100644 --- a/doc/usage.md +++ b/doc/usage.md @@ -476,10 +476,10 @@ $ echo '{"jsonrpc": "2.0", "method": "server.version", "params": ["", "1.4"], "i For more complex tasks, you may need to convert addresses to [script hashes](https://electrumx-spesmilo.readthedocs.io/en/latest/protocol-basics.html#script-hashes) - see -[contrib/addr.py](https://github.com/romanz/electrs/blob/master/contrib/addr.py) for getting an address balance and history: +[contrib/history.py](https://github.com/romanz/electrs/blob/master/contrib/history.py) for getting an address balance and history: ``` -$ ./contrib/history.sh 144STc7gcb9XCp6t4hvrcUEKg9KemivsCR +$ ./contrib/history.sh --venv 144STc7gcb9XCp6t4hvrcUEKg9KemivsCR [2021-08-18 13:56:40.254317] INFO: electrum: connecting to localhost:50001 [2021-08-18 13:56:40.574461] INFO: electrum: subscribed to 1 scripthashes [2021-08-18 13:56:40.645072] DEBUG: electrum: 0.00000 mBTC (total)