mirror of
https://github.com/basicswap/basicswap.git
synced 2024-11-16 15:58:17 +00:00
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
7 changed files with 31 additions and 6 deletions
|
@ -980,6 +980,8 @@ class BasicSwap(BaseApp):
|
|||
raise ValueError('Invalid swap type for PART_BLIND')
|
||||
if coin_from == Coins.PIVX and swap_type == SwapTypes.XMR_SWAP:
|
||||
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):
|
||||
|
||||
|
@ -1497,7 +1499,7 @@ class BasicSwap(BaseApp):
|
|||
if expect_seedid is None:
|
||||
self.log.warning('Can\'t find expected wallet seed id for coin {}'.format(ci.coin_name()))
|
||||
return False
|
||||
if expect_seedid == ci.getWalletSeedID():
|
||||
if ci.checkExpectedSeed(expect_seedid):
|
||||
ci.setWalletSeedWarning(False)
|
||||
return True
|
||||
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):
|
||||
return self.rpc_callback('getwalletinfo')['hdseedid']
|
||||
|
||||
def checkExpectedSeed(self, expect_seedid):
|
||||
return expect_seedid == self.getWalletSeedID()
|
||||
|
||||
def getNewAddress(self, use_segwit, label='swap_receive'):
|
||||
args = [label]
|
||||
if use_segwit:
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
from .btc import BTCInterface
|
||||
from basicswap.chainparams import Coins
|
||||
from mnemonic import Mnemonic
|
||||
|
||||
|
||||
class DASHInterface(BTCInterface):
|
||||
|
@ -15,7 +16,18 @@ class DASHInterface(BTCInterface):
|
|||
return Coins.DASH
|
||||
|
||||
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):
|
||||
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 '')
|
||||
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))
|
||||
swap_client.setDaemonPID(c, daemons[-1].pid)
|
||||
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:
|
||||
c = swap_client.getCoinIdFromName(coin_name)
|
||||
if c in (Coins.PART, Coins.DASH):
|
||||
if c in (Coins.PART, ):
|
||||
continue
|
||||
swap_client.waitForDaemonRPC(c)
|
||||
swap_client.initialiseWallet(c)
|
||||
|
|
|
@ -7,3 +7,4 @@ Jinja2
|
|||
requests
|
||||
pycryptodome
|
||||
PySocks
|
||||
mnemonic
|
||||
|
|
1
setup.py
1
setup.py
|
@ -40,6 +40,7 @@ setuptools.setup(
|
|||
"requests",
|
||||
"pycryptodome",
|
||||
"PySocks",
|
||||
"mnemonic",
|
||||
],
|
||||
entry_points={
|
||||
"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))
|
||||
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):
|
||||
global stop_test
|
||||
logging.info('Delay')
|
||||
|
|
Loading…
Reference in a new issue