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')
 | 
			
		||||
        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 New Issue
	
	Block a user