From 4471709693aeb5978e4cd873c55bb89041feac12 Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Tue, 21 Apr 2015 14:48:46 +0200 Subject: [PATCH] Watch out for scripts with a creation time of zero (and warn the developer about them via logging). --- core/src/main/java/org/bitcoinj/core/CheckpointManager.java | 3 +++ core/src/main/java/org/bitcoinj/core/Wallet.java | 2 ++ core/src/main/java/org/bitcoinj/kits/WalletAppKit.java | 5 ++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/bitcoinj/core/CheckpointManager.java b/core/src/main/java/org/bitcoinj/core/CheckpointManager.java index 844a86b8..55652ac5 100644 --- a/core/src/main/java/org/bitcoinj/core/CheckpointManager.java +++ b/core/src/main/java/org/bitcoinj/core/CheckpointManager.java @@ -216,6 +216,9 @@ public class CheckpointManager { time -= 86400 * 7; + checkArgument(time > 0); + log.info("Attempting to initialize a new block store with a checkpoint for time {}", time); + BufferedInputStream stream = new BufferedInputStream(checkpoints); CheckpointManager manager = new CheckpointManager(params, stream); StoredBlock checkpoint = manager.getCheckpointBefore(time); diff --git a/core/src/main/java/org/bitcoinj/core/Wallet.java b/core/src/main/java/org/bitcoinj/core/Wallet.java index ed48439e..173483cf 100644 --- a/core/src/main/java/org/bitcoinj/core/Wallet.java +++ b/core/src/main/java/org/bitcoinj/core/Wallet.java @@ -823,6 +823,8 @@ public class Wallet extends BaseTaggableObject implements Serializable, BlockCha try { for (final Script script : scripts) { if (watchedScripts.contains(script)) continue; + if (script.getCreationTimeSeconds() == 0) + log.warn("Adding a script to the wallet with a creation time of zero, this will disable the checkpointing optimization! {}", script); watchedScripts.add(script); added++; } diff --git a/core/src/main/java/org/bitcoinj/kits/WalletAppKit.java b/core/src/main/java/org/bitcoinj/kits/WalletAppKit.java index 903e97a7..d04df757 100644 --- a/core/src/main/java/org/bitcoinj/kits/WalletAppKit.java +++ b/core/src/main/java/org/bitcoinj/kits/WalletAppKit.java @@ -295,7 +295,10 @@ public class WalletAppKit extends AbstractIdleService { } else { time = vWallet.getEarliestKeyCreationTime(); } - CheckpointManager.checkpoint(params, checkpoints, vStore, time); + if (time > 0) + CheckpointManager.checkpoint(params, checkpoints, vStore, time); + else + log.warn("Creating a new uncheckpointed block store due to a wallet with a creation time of zero: this will result in a very slow chain sync"); } else if (chainFileExists) { log.info("Deleting the chain file in preparation from restore."); vStore.close();