invalid_signer.py raw
1 #!/usr/bin/env python3
2 # Copyright (c) 2018-present The Bitcoin Core developers
3 # Distributed under the MIT software license, see the accompanying
4 # file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6 import os
7 import sys
8 import argparse
9 import json
10
11 def perform_pre_checks():
12 mock_result_path = os.path.join(os.getcwd(), "mock_result")
13 if os.path.isfile(mock_result_path):
14 with open(mock_result_path, "r") as f:
15 mock_result = f.read()
16 if mock_result[0]:
17 sys.stdout.write(mock_result[2:])
18 sys.exit(int(mock_result[0]))
19
20 def enumerate(args):
21 sys.stdout.write(json.dumps([{"fingerprint": "b3c19bfc", "type": "trezor", "model": "trezor_t"}]))
22
23 def getdescriptors(args):
24 xpub_pkh = "xpub6CRhJvXV8x2AKWvqi1ZSMFU6cbxzQiYrv3dxSUXCawjMJ1JzpqVsveH4way1yCmJm29KzH1zrVZmVwes4Qo6oXVE1HFn4fdiKrYJngqFFc6"
25 xpub_sh = "xpub6CoNoq3Tg4tGSpom2BSwL42gy864KHo3TXkHxLxBbhvCkgmdVXADQmiHbLZhX3Me1cYhRx7s25Lpm4LnT5zu395ANHsXB2QvT9tqJDAibTN"
26 xpub_wpkh = "xpub6DUcLgY1DfgDy2RV6q4djwwsLitaoZDumbribqrR8mP78fEtgZa1XEsqT5MWQ7gwLwKsTQPT28XLoVE5A97rDNTwMXjmzPaNijoCApCbWvp"
27
28 sys.stdout.write(json.dumps({
29 "receive": [
30 "pkh([b3c19bfc/44'/1'/" + args.account + "']" + xpub_pkh + "/0/*)#h26nxtl9",
31 "sh(wpkh([b3c19bfc/49'/1'/" + args.account + "']" + xpub_sh + "/0/*))#32ry02yp",
32 "wpkh([b3c19bfc/84'/1'/" + args.account + "']" + xpub_wpkh + "/0/*)#jftn8ppv"
33 ],
34 "internal": [
35 "pkh([b3c19bfc/44'/1'/" + args.account + "']" + xpub_pkh + "/1/*)#x7ljm70a",
36 "sh(wpkh([b3c19bfc/49'/1'/" + args.account + "']" + xpub_sh + "/1/*))#ytdjh437",
37 "wpkh([b3c19bfc/84'/1'/" + args.account + "']" + xpub_wpkh + "/1/*)#rawj6535"
38 ]
39 }))
40
41 parser = argparse.ArgumentParser(prog='./invalid_signer.py', description='External invalid signer mock')
42 parser.add_argument('--fingerprint')
43 parser.add_argument('--chain', default='main')
44 parser.add_argument('--stdin', action='store_true')
45
46 subparsers = parser.add_subparsers(description='Commands', dest='command')
47 subparsers.required = True
48
49 parser_enumerate = subparsers.add_parser('enumerate', help='list available signers')
50 parser_enumerate.set_defaults(func=enumerate)
51
52 parser_getdescriptors = subparsers.add_parser('getdescriptors')
53 parser_getdescriptors.set_defaults(func=getdescriptors)
54 parser_getdescriptors.add_argument('--account', metavar='account')
55
56 if not sys.stdin.isatty():
57 buffer = sys.stdin.read()
58 if buffer and buffer.rstrip() != "":
59 sys.argv.extend(buffer.rstrip().split(" "))
60
61 args = parser.parse_args()
62
63 perform_pre_checks()
64
65 args.func(args)
66