dash: Fix initialiseWallet
Only the upgradetohd command sets the hdseed upgradetohd can only run once the chain is synced Basicswap stores the hash of the root_key in it's db to check for the expected seed. Prefer not to store the real key.
This commit is contained in:
parent
4866ff4db8
commit
aa14da27af
@ -980,6 +980,8 @@ class BasicSwap(BaseApp):
|
|||||||
raise ValueError('Invalid swap type for PART_BLIND')
|
raise ValueError('Invalid swap type for PART_BLIND')
|
||||||
if coin_from == Coins.PIVX and swap_type == SwapTypes.XMR_SWAP:
|
if coin_from == Coins.PIVX and swap_type == SwapTypes.XMR_SWAP:
|
||||||
raise ValueError('TODO: PIVX -> XMR')
|
raise ValueError('TODO: PIVX -> XMR')
|
||||||
|
if coin_from == Coins.DASH and swap_type == SwapTypes.XMR_SWAP:
|
||||||
|
raise ValueError('TODO: DASH -> XMR')
|
||||||
|
|
||||||
def notify(self, event_type, event_data, session=None):
|
def notify(self, event_type, event_data, session=None):
|
||||||
|
|
||||||
@ -1497,7 +1499,7 @@ class BasicSwap(BaseApp):
|
|||||||
if expect_seedid is None:
|
if expect_seedid is None:
|
||||||
self.log.warning('Can\'t find expected wallet seed id for coin {}'.format(ci.coin_name()))
|
self.log.warning('Can\'t find expected wallet seed id for coin {}'.format(ci.coin_name()))
|
||||||
return False
|
return False
|
||||||
if expect_seedid == ci.getWalletSeedID():
|
if ci.checkExpectedSeed(expect_seedid):
|
||||||
ci.setWalletSeedWarning(False)
|
ci.setWalletSeedWarning(False)
|
||||||
return True
|
return True
|
||||||
self.log.warning('Wallet for coin {} not derived from swap seed.'.format(ci.coin_name()))
|
self.log.warning('Wallet for coin {} not derived from swap seed.'.format(ci.coin_name()))
|
||||||
|
@ -293,6 +293,9 @@ class BTCInterface(CoinInterface):
|
|||||||
def getWalletSeedID(self):
|
def getWalletSeedID(self):
|
||||||
return self.rpc_callback('getwalletinfo')['hdseedid']
|
return self.rpc_callback('getwalletinfo')['hdseedid']
|
||||||
|
|
||||||
|
def checkExpectedSeed(self, expect_seedid):
|
||||||
|
return expect_seedid == self.getWalletSeedID()
|
||||||
|
|
||||||
def getNewAddress(self, use_segwit, label='swap_receive'):
|
def getNewAddress(self, use_segwit, label='swap_receive'):
|
||||||
args = [label]
|
args = [label]
|
||||||
if use_segwit:
|
if use_segwit:
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
from .btc import BTCInterface
|
from .btc import BTCInterface
|
||||||
from basicswap.chainparams import Coins
|
from basicswap.chainparams import Coins
|
||||||
|
from mnemonic import Mnemonic
|
||||||
|
|
||||||
|
|
||||||
class DASHInterface(BTCInterface):
|
class DASHInterface(BTCInterface):
|
||||||
@ -15,7 +16,18 @@ class DASHInterface(BTCInterface):
|
|||||||
return Coins.DASH
|
return Coins.DASH
|
||||||
|
|
||||||
def initialiseWallet(self, key):
|
def initialiseWallet(self, key):
|
||||||
raise ValueError('Load seed with with -hdseed daemon argument')
|
words = Mnemonic('english').to_mnemonic(key)
|
||||||
|
self.rpc_callback('upgradetohd', [words, ])
|
||||||
|
|
||||||
|
def checkExpectedSeed(self, key_hash):
|
||||||
|
try:
|
||||||
|
rv = self.rpc_callback('dumphdinfo')
|
||||||
|
entropy = Mnemonic('english').to_entropy(rv['mnemonic'].split(' '))
|
||||||
|
entropy_hash = self.getAddressHashFromKey(entropy)[::-1].hex()
|
||||||
|
return entropy_hash == key_hash
|
||||||
|
except Exception as e:
|
||||||
|
self._log.warning('checkExpectedSeed failed: {}'.format(str(e)))
|
||||||
|
return False
|
||||||
|
|
||||||
def withdrawCoin(self, value, addr_to, subfee):
|
def withdrawCoin(self, value, addr_to, subfee):
|
||||||
params = [addr_to, value, '', '', subfee]
|
params = [addr_to, value, '', '', subfee]
|
||||||
|
@ -885,9 +885,6 @@ def initialise_wallets(particl_wallet_mnemonic, with_coins, data_dir, settings,
|
|||||||
filename = coin_name + 'd' + ('.exe' if os.name == 'nt' else '')
|
filename = coin_name + 'd' + ('.exe' if os.name == 'nt' else '')
|
||||||
coin_args = ['-nofindpeers', '-nostaking'] if c == Coins.PART else []
|
coin_args = ['-nofindpeers', '-nostaking'] if c == Coins.PART else []
|
||||||
|
|
||||||
if c == Coins.DASH:
|
|
||||||
coin_args += ['-hdseed={}'.format(swap_client.getWalletKey(Coins.DASH, 1).hex())]
|
|
||||||
|
|
||||||
daemons.append(startDaemon(coin_settings['datadir'], coin_settings['bindir'], filename, daemon_args + coin_args))
|
daemons.append(startDaemon(coin_settings['datadir'], coin_settings['bindir'], filename, daemon_args + coin_args))
|
||||||
swap_client.setDaemonPID(c, daemons[-1].pid)
|
swap_client.setDaemonPID(c, daemons[-1].pid)
|
||||||
swap_client.setCoinRunParams(c)
|
swap_client.setCoinRunParams(c)
|
||||||
@ -909,7 +906,7 @@ def initialise_wallets(particl_wallet_mnemonic, with_coins, data_dir, settings,
|
|||||||
|
|
||||||
for coin_name in with_coins:
|
for coin_name in with_coins:
|
||||||
c = swap_client.getCoinIdFromName(coin_name)
|
c = swap_client.getCoinIdFromName(coin_name)
|
||||||
if c in (Coins.PART, Coins.DASH):
|
if c in (Coins.PART, ):
|
||||||
continue
|
continue
|
||||||
swap_client.waitForDaemonRPC(c)
|
swap_client.waitForDaemonRPC(c)
|
||||||
swap_client.initialiseWallet(c)
|
swap_client.initialiseWallet(c)
|
||||||
|
@ -7,3 +7,4 @@ Jinja2
|
|||||||
requests
|
requests
|
||||||
pycryptodome
|
pycryptodome
|
||||||
PySocks
|
PySocks
|
||||||
|
mnemonic
|
||||||
|
1
setup.py
1
setup.py
@ -40,6 +40,7 @@ setuptools.setup(
|
|||||||
"requests",
|
"requests",
|
||||||
"pycryptodome",
|
"pycryptodome",
|
||||||
"PySocks",
|
"PySocks",
|
||||||
|
"mnemonic",
|
||||||
],
|
],
|
||||||
entry_points={
|
entry_points={
|
||||||
"console_scripts": [
|
"console_scripts": [
|
||||||
|
@ -540,6 +540,15 @@ class Test(unittest.TestCase):
|
|||||||
json_rv = json.loads(post_json_req('http://127.0.0.1:{}/json/wallets/dash/withdraw'.format(TEST_HTTP_PORT + 0), post_json))
|
json_rv = json.loads(post_json_req('http://127.0.0.1:{}/json/wallets/dash/withdraw'.format(TEST_HTTP_PORT + 0), post_json))
|
||||||
assert (len(json_rv['txid']) == 64)
|
assert (len(json_rv['txid']) == 64)
|
||||||
|
|
||||||
|
def test_09_initialise_wallet(self):
|
||||||
|
logging.info('---------- Test DASH initialiseWallet')
|
||||||
|
|
||||||
|
self.swap_clients[0].initialiseWallet(Coins.DASH, raise_errors=True)
|
||||||
|
assert self.swap_clients[0].checkWalletSeed(Coins.DASH) is True
|
||||||
|
|
||||||
|
pivx_addr = dashRpc('getnewaddress \"hd test\"')
|
||||||
|
assert pivx_addr == 'ybzWYJbZEhZai8kiKkTtPFKTuDNwhpiwac'
|
||||||
|
|
||||||
def pass_99_delay(self):
|
def pass_99_delay(self):
|
||||||
global stop_test
|
global stop_test
|
||||||
logging.info('Delay')
|
logging.info('Delay')
|
||||||
|
Loading…
Reference in New Issue
Block a user