From 062d41766ec67d482da910197d86f8ba32dc1f8f Mon Sep 17 00:00:00 2001 From: hashmap Date: Thu, 31 Jan 2019 13:00:44 +0100 Subject: [PATCH] Refresh coinbase key if the existing one was removed (#2493) * Refresh coinbase key if the existing was removed It happens if `wallet check` runs in parallel. Alternative solution is not to remove it during the check. Fixes #2412 --- wallet/src/libwallet/error.rs | 2 +- wallet/src/libwallet/internal/updater.rs | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/wallet/src/libwallet/error.rs b/wallet/src/libwallet/error.rs index be108cdd..867e7b63 100644 --- a/wallet/src/libwallet/error.rs +++ b/wallet/src/libwallet/error.rs @@ -104,7 +104,7 @@ pub enum ErrorKind { CallbackImpl(&'static str), /// Wallet backend error - #[fail(display = "Wallet store error")] + #[fail(display = "Wallet store error: {}", _0)] Backend(String), /// Callback implementation error conversion diff --git a/wallet/src/libwallet/internal/updater.rs b/wallet/src/libwallet/internal/updater.rs index 678fa963..b878b734 100644 --- a/wallet/src/libwallet/internal/updater.rs +++ b/wallet/src/libwallet/internal/updater.rs @@ -473,7 +473,10 @@ where let parent_key_id = wallet.parent_key_id(); let key_id = match key_id { - Some(key_id) => keys::retrieve_existing_key(wallet, key_id, None)?.0, + Some(key_id) => match keys::retrieve_existing_key(wallet, key_id, None) { + Ok(k) => k.0, + Err(_) => keys::next_available_key(wallet)?, + }, None => keys::next_available_key(wallet)?, };