From ecca1c6f47402cb43a1a8ab1442763833a2e77d7 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Sun, 12 May 2013 18:00:35 +0200 Subject: [PATCH] Add new BlockImporter. --- .../google/bitcoin/tools/BlockImporter.java | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 tools/src/main/java/com/google/bitcoin/tools/BlockImporter.java diff --git a/tools/src/main/java/com/google/bitcoin/tools/BlockImporter.java b/tools/src/main/java/com/google/bitcoin/tools/BlockImporter.java new file mode 100644 index 00000000..75df1839 --- /dev/null +++ b/tools/src/main/java/com/google/bitcoin/tools/BlockImporter.java @@ -0,0 +1,71 @@ +package com.google.bitcoin.tools; + +import java.io.File; + +import com.google.bitcoin.core.AbstractBlockChain; +import com.google.bitcoin.core.Block; +import com.google.bitcoin.core.BlockChain; +import com.google.bitcoin.core.FullPrunedBlockChain; +import com.google.bitcoin.core.NetworkParameters; +import com.google.bitcoin.core.PrunedException; +import com.google.bitcoin.core.VerificationException; +import com.google.bitcoin.store.BlockStore; +import com.google.bitcoin.store.BlockStoreException; +import com.google.bitcoin.store.BoundedOverheadBlockStore; +import com.google.bitcoin.store.DiskBlockStore; +import com.google.bitcoin.store.FullPrunedBlockStore; +import com.google.bitcoin.store.H2FullPrunedBlockStore; +import com.google.bitcoin.store.MemoryBlockStore; +import com.google.bitcoin.store.MemoryFullPrunedBlockStore; +import com.google.bitcoin.store.SPVBlockStore; +import com.google.bitcoin.utils.BlockFileLoader; +import com.google.common.base.Preconditions; + +/** Very thin wrapper around {@link com.google.bitcoin.util.BlockFileLoader} */ +public class BlockImporter { + public static void main(String[] args) throws BlockStoreException, VerificationException, PrunedException { + System.out.println("USAGE: BlockImporter (prod|test) (H2|BoundedOverhead|Disk|MemFull|Mem|SPV) [blockStore]"); + System.out.println(" blockStore is required unless type is Mem or MemFull"); + System.out.println(" eg BlockImporter prod H2 /home/user/bitcoinj.h2store"); + System.out.println(" Does full verification if the store supports it"); + Preconditions.checkArgument(args.length == 2 || args.length == 3); + + NetworkParameters params = null; + if (args[0].equals("test")) + params = NetworkParameters.testNet(); + else + params = NetworkParameters.prodNet(); + + BlockStore store = null; + if (args[1].equals("H2")) { + Preconditions.checkArgument(args.length == 3); + store = new H2FullPrunedBlockStore(params, args[2], 100); + } else if (args[1].equals("BoundedOverhead")) { + Preconditions.checkArgument(args.length == 3); + store = new BoundedOverheadBlockStore(params, new File(args[2])); + } else if (args[1].equals("Disk")) { + Preconditions.checkArgument(args.length == 3); + store = new DiskBlockStore(params, new File(args[2])); + } else if (args[1].equals("MemFull")) { + Preconditions.checkArgument(args.length == 2); + store = new MemoryFullPrunedBlockStore(params, 100); + } else if (args[1].equals("Mem")) { + Preconditions.checkArgument(args.length == 2); + store = new MemoryBlockStore(params); + } else if (args[1].equals("SPV")) { + Preconditions.checkArgument(args.length == 3); + store = new SPVBlockStore(params, new File(args[2])); + } + + AbstractBlockChain chain = null; + if (store instanceof FullPrunedBlockStore) + chain = new FullPrunedBlockChain(params, (FullPrunedBlockStore) store); + else + chain = new BlockChain(params, store); + + BlockFileLoader loader = new BlockFileLoader(params, BlockFileLoader.getReferenceClientBlockFileList()); + + for (Block block : loader) + chain.add(block); + } +}