From ca4ba19a5ebaf9429932a58ff0db51fc5c7a34cc Mon Sep 17 00:00:00 2001 From: Lex Berezhny Date: Sun, 13 Mar 2022 20:42:34 -0400 Subject: [PATCH 1/2] fixes #3577 --- lbry/wallet/wallet.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lbry/wallet/wallet.py b/lbry/wallet/wallet.py index 61dede67b..7b9ee1bb5 100644 --- a/lbry/wallet/wallet.py +++ b/lbry/wallet/wallet.py @@ -203,11 +203,12 @@ class Wallet: return True return False - def unlock(self, password): + async def unlock(self, password): for account in self.accounts: if account.encrypted: if not account.decrypt(password): return False + await account.deterministic_channel_keys.ensure_cache_primed() self.encryption_password = password return True From bb541901d9304b2c397a08a27ee3109c6087faa7 Mon Sep 17 00:00:00 2001 From: Lex Berezhny Date: Sun, 13 Mar 2022 21:30:38 -0400 Subject: [PATCH 2/2] fix tests --- .../integration/blockchain/test_wallet_commands.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/integration/blockchain/test_wallet_commands.py b/tests/integration/blockchain/test_wallet_commands.py index 81c98865f..a1bc6a7cf 100644 --- a/tests/integration/blockchain/test_wallet_commands.py +++ b/tests/integration/blockchain/test_wallet_commands.py @@ -327,7 +327,7 @@ class WalletEncryptionAndSynchronization(CommandTestCase): with self.assertRaisesRegex(AssertionError, "Cannot lock an unencrypted wallet, encrypt first."): daemon.jsonrpc_wallet_lock() # safe to call unlock and decrypt, they are no-ops at this point - daemon.jsonrpc_wallet_unlock('password') # already unlocked + await daemon.jsonrpc_wallet_unlock('password') # already unlocked daemon.jsonrpc_wallet_decrypt() # already not encrypted daemon.jsonrpc_wallet_encrypt('password') @@ -343,7 +343,7 @@ class WalletEncryptionAndSynchronization(CommandTestCase): # can't sign transactions with locked wallet with self.assertRaises(AssertionError): await daemon.jsonrpc_channel_create('@foo', '1.0') - daemon.jsonrpc_wallet_unlock('password') + await daemon.jsonrpc_wallet_unlock('password') self.assertEqual(daemon.jsonrpc_wallet_status(), {'is_locked': False, 'is_encrypted': True, 'is_syncing': False}) await daemon.jsonrpc_channel_create('@foo', '1.0') @@ -361,7 +361,7 @@ class WalletEncryptionAndSynchronization(CommandTestCase): await daemon2.jsonrpc_channel_import(exported) self.assertTrue(daemon2.jsonrpc_wallet_encrypt('password')) self.assertTrue(daemon2.jsonrpc_wallet_lock()) - self.assertTrue(daemon2.jsonrpc_wallet_unlock("password")) + self.assertTrue(await daemon2.jsonrpc_wallet_unlock("password")) self.assertEqual(daemon2.jsonrpc_wallet_status(), {'is_locked': False, 'is_encrypted': True, 'is_syncing': False}) @@ -369,7 +369,7 @@ class WalletEncryptionAndSynchronization(CommandTestCase): self.assertTrue(self.daemon.jsonrpc_wallet_encrypt("password")) self.assertTrue(self.daemon.jsonrpc_wallet_lock()) self.account.deterministic_channel_keys._private_key = None - self.assertTrue(self.daemon.jsonrpc_wallet_unlock("password")) + self.assertTrue(await self.daemon.jsonrpc_wallet_unlock("password")) await self.channel_create() async def test_sync_with_encryption_and_password_change(self): @@ -398,8 +398,8 @@ class WalletEncryptionAndSynchronization(CommandTestCase): # check new password is active daemon.jsonrpc_wallet_lock() - self.assertFalse(daemon.jsonrpc_wallet_unlock('password')) - self.assertTrue(daemon.jsonrpc_wallet_unlock('password2')) + self.assertFalse(await daemon.jsonrpc_wallet_unlock('password')) + self.assertTrue(await daemon.jsonrpc_wallet_unlock('password2')) # propagate disk encryption to daemon2 data = await daemon.jsonrpc_sync_apply('password3') @@ -415,4 +415,4 @@ class WalletEncryptionAndSynchronization(CommandTestCase): self.assertWalletEncrypted(wallet2.storage.path, True) daemon2.jsonrpc_wallet_lock() - self.assertTrue(daemon2.jsonrpc_wallet_unlock('password3')) + self.assertTrue(await daemon2.jsonrpc_wallet_unlock('password3'))