com.google.bitcoin.store.BlockStore

Here are the examples of the java api class com.google.bitcoin.store.BlockStore taken from open source projects.

1. MultiBitService#createBlockStore()

Project: multibit
File: MultiBitService.java
private BlockStore createBlockStore(Date checkpointDate, boolean createNew) throws BlockStoreException, IOException {
    BlockStore blockStore = null;
    String filePrefix = getFilePrefix();
    log.debug("filePrefix = " + filePrefix);
    if ("".equals(controller.getApplicationDataDirectoryLocator().getApplicationDataDirectory())) {
        blockchainFilename = filePrefix + SPV_BLOCKCHAIN_SUFFIX;
        checkpointsFilename = filePrefix + CHECKPOINTS_SUFFIX;
    } else {
        blockchainFilename = controller.getApplicationDataDirectoryLocator().getApplicationDataDirectory() + File.separator + filePrefix + SPV_BLOCKCHAIN_SUFFIX;
        checkpointsFilename = controller.getApplicationDataDirectoryLocator().getApplicationDataDirectory() + File.separator + filePrefix + CHECKPOINTS_SUFFIX;
    }
    File blockStoreFile = new File(blockchainFilename);
    boolean blockStoreCreatedNew = !blockStoreFile.exists();
    // Ensure there is a checkpoints file.
    File checkpointsFile = new File(checkpointsFilename);
    if (!checkpointsFile.exists()) {
        bitcoinController.getFileHandler().copyCheckpointsFromInstallationDirectory(checkpointsFilename);
    }
    // Use the larger of the installed checkpoints file and the user data checkpoint file (larger = more recent).
    ApplicationDataDirectoryLocator applicationDataDirectoryLocator = new ApplicationDataDirectoryLocator();
    String installedCheckpointsFilename = applicationDataDirectoryLocator.getInstallationDirectory() + File.separator + MultiBitService.getFilePrefix() + MultiBitService.CHECKPOINTS_SUFFIX;
    log.debug("Installed checkpoints file = '" + installedCheckpointsFilename + "'.");
    File installedCheckpointsFile = new File(installedCheckpointsFilename);
    long sizeOfUserDataCheckpointsFile = 0;
    if (checkpointsFile.exists()) {
        sizeOfUserDataCheckpointsFile = checkpointsFile.length();
    }
    if (installedCheckpointsFile.exists() && installedCheckpointsFile.length() > sizeOfUserDataCheckpointsFile) {
        // The installed checkpoints file is longer (more checkpoints) so use that.
        checkpointsFilename = installedCheckpointsFilename;
        checkpointsFile = installedCheckpointsFile;
        log.debug("Using installed checkpoints file as it is longer than user data checkpoints - " + installedCheckpointsFile.length() + " bytes versus " + sizeOfUserDataCheckpointsFile + " bytes.");
    } else {
        log.debug("Using user data checkpoints file as it is longer/same size as installed checkpoints - " + sizeOfUserDataCheckpointsFile + " bytes versus " + installedCheckpointsFile.length() + " bytes.");
    }
    // or its size is 0 bytes delete the file so that it is recreated fresh (fix for issue 165).
    if (createNew || blockStoreFile.length() == 0) {
        // Garbage collect any closed references to the blockchainFile.
        System.gc();
        blockStoreFile.setWritable(true);
        boolean deletedOk = blockStoreFile.delete();
        log.debug("Deleting SPV block store '{}' from disk.1", blockchainFilename + ", deletedOk = " + deletedOk);
        blockStoreCreatedNew = true;
    }
    log.debug("Opening / Creating SPV block store '{}' from disk", blockchainFilename);
    try {
        blockStore = new SPVBlockStore(networkParameters, blockStoreFile);
    } catch (BlockStoreException bse) {
        try {
            log.error("Failed to open/ create SPV block store '{}' from disk", blockchainFilename);
            System.gc();
            blockStoreFile.setWritable(true);
            boolean deletedOk = blockStoreFile.delete();
            log.debug("Deleting SPV block store '{}' from disk.2", blockchainFilename + ", deletedOk = " + deletedOk);
            blockStoreCreatedNew = true;
            blockStore = new SPVBlockStore(networkParameters, blockStoreFile);
        } catch (BlockStoreException bse2) {
            bse2.printStackTrace();
            log.error("Unrecoverable failure in opening block store. This is bad.");
            throw bse2;
        }
    }
    // Load the existing checkpoint file and checkpoint from today.
    if (blockStore != null && checkpointsFile.exists()) {
        FileInputStream stream = null;
        try {
            stream = new FileInputStream(checkpointsFile);
            if (checkpointDate == null) {
                if (blockStoreCreatedNew) {
                    // Brand new block store - checkpoint from today. This
                    // will go back to the last checkpoint.
                    CheckpointManager.checkpoint(networkParameters, stream, blockStore, (new Date()).getTime() / 1000);
                }
            } else {
                // Use checkpoint date (block replay).
                CheckpointManager.checkpoint(networkParameters, stream, blockStore, checkpointDate.getTime() / 1000);
            }
        } finally {
            if (stream != null) {
                stream.close();
                stream = null;
            }
        }
    }
    return blockStore;
}