From 40cc7cc4b8ffb50696b73a426fc4d25c356abbc4 Mon Sep 17 00:00:00 2001 From: Daniel McNally Date: Thu, 20 Jul 2023 11:11:33 -0400 Subject: [PATCH 1/2] Don't pass second param to loadWallet This second boolean parameter causes an error on Bitcoin Core v0.20 and older versions. This parameter, in newer versions of bitcoin, is supposed to cause a wallet to be automatically loaded, but this is unnecessary as sidetree makes a loadwallet call anyway. --- lib/bitcoin/BitcoinClient.ts | 2 +- tests/bitcoin/BitcoinClient.spec.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/bitcoin/BitcoinClient.ts b/lib/bitcoin/BitcoinClient.ts index 90a7c64..af32a64 100644 --- a/lib/bitcoin/BitcoinClient.ts +++ b/lib/bitcoin/BitcoinClient.ts @@ -308,7 +308,7 @@ export default class BitcoinClient { private async loadWallet () { const request = { method: 'loadwallet', - params: [this.walletNameToUse, true] // the wallet name + params: [this.walletNameToUse] // the wallet name }; // Intentionally not throwing because bitcoin returns 500 when a wallet is already loaded diff --git a/tests/bitcoin/BitcoinClient.spec.ts b/tests/bitcoin/BitcoinClient.spec.ts index cd325b4..bb0d55d 100644 --- a/tests/bitcoin/BitcoinClient.spec.ts +++ b/tests/bitcoin/BitcoinClient.spec.ts @@ -412,7 +412,7 @@ describe('BitcoinClient', async () => { await bitcoinClient['loadWallet'](); expect(rpcSpy).toHaveBeenCalledWith({ method: 'loadwallet', - params: ['sidetreeDefaultWallet', true] + params: ['sidetreeDefaultWallet'] }, true, false); expect(loggerSpy).toHaveBeenCalledWith(`Wallet loaded with name "sidetreeDefaultWallet".`); }); @@ -425,7 +425,7 @@ describe('BitcoinClient', async () => { } catch { expect(rpcSpy).toHaveBeenCalledWith({ method: 'loadwallet', - params: ['sidetreeDefaultWallet', true] + params: ['sidetreeDefaultWallet'] }, true, false); } }); @@ -436,7 +436,7 @@ describe('BitcoinClient', async () => { await bitcoinClient['loadWallet'](); expect(rpcSpy).toHaveBeenCalledWith({ method: 'loadwallet', - params: ['sidetreeDefaultWallet', true] + params: ['sidetreeDefaultWallet'] }, true, false); expect(loggerSpy).toHaveBeenCalledWith(`Wallet with name sidetreeDefaultWallet already loaded.`); }); From ac06bdc5bbccda08220a8bb28a0bcc9be9038ef3 Mon Sep 17 00:00:00 2001 From: Daniel McNally Date: Thu, 20 Jul 2023 11:18:38 -0400 Subject: [PATCH 2/2] Catch duplicate loadWallet error --- lib/bitcoin/BitcoinClient.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/bitcoin/BitcoinClient.ts b/lib/bitcoin/BitcoinClient.ts index af32a64..9145a49 100644 --- a/lib/bitcoin/BitcoinClient.ts +++ b/lib/bitcoin/BitcoinClient.ts @@ -320,7 +320,9 @@ export default class BitcoinClient { } catch (e) { // using error message because bitcoin core error code is not reliable as a single code can contain multiple errors const duplicateLoadString = 'already loaded'; - if (e.toString().toLowerCase().includes(duplicateLoadString)) { + // this error is seen on some versions of bitcoin core when loading a loaded wallet, including v0.20.1 + const alternateDuplicateLoadString = 'Duplicate -wallet filename specified'; + if (e.toString().toLowerCase().includes(duplicateLoadString) || e.toString().includes(alternateDuplicateLoadString)) { Logger.info(`Wallet with name ${this.walletNameToUse} already loaded.`); } else { throw e;