Prepare script imports mnemonic.

This commit is contained in:
tecnovert 2019-07-21 21:20:36 +02:00
parent ecfd783cce
commit 521e465c2a
No known key found for this signature in database
GPG Key ID: 8ED6D8750C4E3F93
2 changed files with 59 additions and 6 deletions

View File

@ -19,12 +19,17 @@ import hashlib
import mmap import mmap
import tarfile import tarfile
import stat import stat
import time
from urllib.request import urlretrieve from urllib.request import urlretrieve
import urllib.parse import urllib.parse
import logging import logging
import gnupg import gnupg
import basicswap.config as cfg
from basicswap.util import callrpc_cli
from bin.basicswap_run import startDaemon
BIN_ARCH = 'x86_64-linux-gnu.tar.gz' BIN_ARCH = 'x86_64-linux-gnu.tar.gz'
logger = logging.getLogger() logger = logging.getLogger()
@ -163,6 +168,30 @@ def printHelp():
logger.info('\n--particl_mnemonic= Recovery phrase to use for the Particl wallet, default is randomly generated.') logger.info('\n--particl_mnemonic= Recovery phrase to use for the Particl wallet, default is randomly generated.')
def make_rpc_func(bin_dir, data_dir, chain):
bin_dir = bin_dir
data_dir = data_dir
chain = '' if chain == 'mainnet' else chain
def rpc_func(cmd):
nonlocal bin_dir
nonlocal data_dir
nonlocal chain
return callrpc_cli(bin_dir, data_dir, chain, cmd, cfg.PARTICL_CLI)
return rpc_func
def waitForRPC(rpc_func, wallet=None):
for i in range(5):
try:
rpc_func('getwalletinfo')
return
except Exception as ex:
logging.warning('Can\'t connect to daemon RPC: %s. Trying again in %d second/s.', str(ex), (1 + i))
time.sleep(1 + i)
raise ValueError('waitForRPC failed')
def main(): def main():
data_dir = None data_dir = None
chain = 'mainnet' chain = 'mainnet'
@ -170,7 +199,7 @@ def main():
for v in sys.argv[1:]: for v in sys.argv[1:]:
if len(v) < 2 or v[0] != '-': if len(v) < 2 or v[0] != '-':
logger.warning('Unknown argument', v) logger.warning('Unknown argument %s', v)
continue continue
s = v.split('=') s = v.split('=')
@ -203,7 +232,7 @@ def main():
particl_wallet_mnemonic = s[1] particl_wallet_mnemonic = s[1]
continue continue
logger.warning('Unknown argument', v) logger.warning('Unknown argument %s', v)
if data_dir is None: if data_dir is None:
default_datadir = '~/.basicswap' default_datadir = '~/.basicswap'
@ -299,6 +328,30 @@ def main():
else: else:
logger.warning('Unknown coin %s', coin) logger.warning('Unknown coin %s', coin)
logger.info('Loading Particl mnemonic')
particl_settings = settings['chainclients']['particl']
partRpc = make_rpc_func(particl_settings['bindir'], particl_settings['datadir'], chain)
d = startDaemon(particl_settings['datadir'], particl_settings['bindir'], cfg.PARTICLD)
try:
waitForRPC(partRpc)
if particl_wallet_mnemonic is None:
particl_wallet_mnemonic = partRpc('mnemonic new')['mnemonic']
partRpc('extkeyimportmaster "{}"'.format(particl_wallet_mnemonic))
finally:
logger.info('Terminating {}'.format(d.pid))
d.terminate()
d.wait(timeout=120)
if d.stdout:
d.stdout.close()
if d.stderr:
d.stderr.close()
if d.stdin:
d.stdin.close()
logger.info('IMPORTANT - Save your particl wallet recovery phrase:\n{}\n'.format(particl_wallet_mnemonic))
logger.info('Done.') logger.info('Done.')

View File

@ -131,7 +131,7 @@ def main():
for v in sys.argv[1:]: for v in sys.argv[1:]:
if len(v) < 2 or v[0] != '-': if len(v) < 2 or v[0] != '-':
logger.warning('Unknown argument', v) logger.warning('Unknown argument %s', v)
continue continue
s = v.split('=') s = v.split('=')
@ -159,13 +159,13 @@ def main():
data_dir = os.path.expanduser(s[1]) data_dir = os.path.expanduser(s[1])
continue continue
logger.warning('Unknown argument', v) logger.warning('Unknown argument %s', v)
if data_dir is None: if data_dir is None:
default_datadir = '~/.basicswap' default_datadir = '~/.basicswap'
data_dir = os.path.join(os.path.expanduser(default_datadir)) data_dir = os.path.join(os.path.expanduser(default_datadir))
logger.info('Using datadir:', data_dir) logger.info('Using datadir: %s', data_dir)
logger.info('Chain:', chain) logger.info('Chain: %s', chain)
if not os.path.exists(data_dir): if not os.path.exists(data_dir):
os.makedirs(data_dir) os.makedirs(data_dir)