Interface BlockchainStorage

All Known Implementing Classes:
BlockchainStorageInMemory, BlockchainStorageSingleFile

public interface BlockchainStorage
  • Nested Class Summary

    Nested Classes 
    Modifier and Type Interface Description
    static class  BlockchainStorage.TransactionOutputIdentifier  
  • Method Summary

    Modifier and Type Method Description
    void buildUnspentTransactionOutputSet()
    Builds the local UTXO set from the entire blockchain.
    boolean close()
    Called once to perform any cleanup or saving after all blockchain operations have been completed.
    Block getBlock​(byte[] blockHash)
    Retrieves the block associated with the specified block hash.
    Block getBlockByHeight​(int height)
    Retrieves the block associated with the specified block height.
    Block getBlockByTransaction​(byte[] transactionHash)
    Retrieves the block associated with the specified transaction.
    java.util.List<Block> getBlockchain()
    Returns an ordered list of the entire local blockchain.
    java.util.List<Block> getBlockchainRange​(int beginHeight, int endHeight)
    Returns an ordered list of a range of the local blockchain.
    BlockHeader getBlockHeader​(byte[] blockHash)
    Retrieves the block header associated with the specified block hash.
    BlockHeader getBlockHeaderByHeight​(int height)
    Retrieves the block header associated with the specified block height.
    int getBlockHeight()
    Gets the current local block height, can be thought of as the index of the most recent block (zero-indexed).
    Block getHighestBlock()
    Returns the most recent block in the local blockchain.
    byte[] getHighestBlockHash()
    Returns the block hash of the most recent block in the local blockchain.
    Transaction getMempoolTransaction​(byte[] transactionHash)
    Returns the mempool transaction specified.
    java.util.Set<Transaction> getMempoolTransactions()
    Returns the current set of mempool (pending) transactions.
    Transaction getTransaction​(byte[] transactionHash)
    Retrieve a transaction by its hash.
    TransactionInput getTransactionInput​(byte[] transactionHash, int index)
    Returns the transaction input from the transaction hash and index.
    TransactionOutput getTransactionOutput​(byte[] transactionHash, int index)
    Returns the transaction output from the transaction hash and index.
    java.util.Set<BlockchainStorage.TransactionOutputIdentifier> getUnspentTransactionOutputs()
    Returns the local UTXO (unspent transaction output) set.
    boolean hasBlock​(byte[] blockHash)
    Returns whether the local blockchain contains a block corresponding to the provided block hash.
    boolean hasBlockHeader​(byte[] blockHash)
    Returns whether the local blockchain contains a block header corresponding to the provided block hash.
    boolean hasMempoolTransaction​(byte[] transactionHash)
    Returns whether the mempool contains the specified transaction.
    boolean hasTransaction​(byte[] transactionHash)
    Returns whether a transaction with the specified hash exist on the local blockchain.
    boolean isOperational()
    Called to determine whether it is safe to perform blockchain operations.
    boolean isTransactionOutputSpent​(byte[] transactionHash, int index)
    Returns whether the specified transaction output has been spent.
    boolean open()
    Called once to perform any initialization before accessing the blockchain.
    boolean putBlock​(Block block)
    Store a block on the local blockchain.
    boolean putBlockHeader​(BlockHeader blockHeader)
    Store a block header on the local blockchain.
    boolean putMempoolTransaction​(Transaction transaction)
    Stores the specified transaction in the mempool.
    boolean removeMempoolTransaction​(byte[] transactionHash)
    Remove the specified transaction from the mempool.
    boolean verify()
    Verify the validity of the entire blockchain.
    boolean verifyRange​(int beginHeight, int endHeight)
    Verify whether a range of the local blockchain is valid.
  • Method Details

    • open

      boolean open()
      Called once to perform any initialization before accessing the blockchain.
      Returns:
      Whether initialization was successful.
    • close

      boolean close()
      Called once to perform any cleanup or saving after all blockchain operations have been completed.
      Returns:
      Whether cleanup and saving was successful.
    • isOperational

      boolean isOperational()
      Called to determine whether it is safe to perform blockchain operations.
      Returns:
      Whether it is safe to perform blockchain operations.
    • verify

      boolean verify()
      Verify the validity of the entire blockchain.
      Returns:
      Whether the entire blockchain is valid.
    • verifyRange

      boolean verifyRange​(int beginHeight, int endHeight) throws NoSuchBlockException
      Verify whether a range of the local blockchain is valid.
      Parameters:
      beginHeight - The first block to validate, inclusive.
      endHeight - The last block to validate, inclusive.
      Returns:
      Whether the range of blocks is valid.
      Throws:
      NoSuchBlockException - If the range provided is not within the bounds of the local blockchain.
    • getBlockHeight

      int getBlockHeight()
      Gets the current local block height, can be thought of as the index of the most recent block (zero-indexed).
      Returns:
      The current local block height.
    • getBlockchain

      java.util.List<Block> getBlockchain()
      Returns an ordered list of the entire local blockchain.
      Returns:
      An ordered list of the entire local blockchain.
    • getBlockchainRange

      java.util.List<Block> getBlockchainRange​(int beginHeight, int endHeight) throws NoSuchBlockException
      Returns an ordered list of a range of the local blockchain.
      Parameters:
      beginHeight - The first block to include in the list, inclusive.
      endHeight - The last block to include in the list, inclusive.
      Returns:
      Whether the range of blocks is valid.
      Throws:
      NoSuchBlockException - If the range provided is not within the bounds of the local blockchain.
    • getHighestBlockHash

      byte[] getHighestBlockHash() throws NoSuchBlockException
      Returns the block hash of the most recent block in the local blockchain.
      Returns:
      The block hash of the most recent block in the local blockchain.
      Throws:
      NoSuchBlockException - If there are no blocks in the local blockchain.
    • getHighestBlock

      Block getHighestBlock() throws NoSuchBlockException
      Returns the most recent block in the local blockchain.
      Returns:
      The most recent block in the local blockchain.
      Throws:
      NoSuchBlockException - If there are no blocks in the local blockchain.
    • hasBlockHeader

      boolean hasBlockHeader​(byte[] blockHash)
      Returns whether the local blockchain contains a block header corresponding to the provided block hash.
      Parameters:
      blockHash - The block hash to search by.
      Returns:
      Whether the local blockchain contains a block header corresponding to the provided block hash.
    • getBlockHeader

      BlockHeader getBlockHeader​(byte[] blockHash) throws NoSuchBlockException
      Retrieves the block header associated with the specified block hash.
      Parameters:
      blockHash - The block hash to search by.
      Returns:
      The block header associated with the specified block hash.
      Throws:
      NoSuchBlockException - If there was no block header associated with the provided block hash.
    • getBlockHeaderByHeight

      BlockHeader getBlockHeaderByHeight​(int height) throws NoSuchBlockException
      Retrieves the block header associated with the specified block height.
      Parameters:
      height - The block height to search by.
      Returns:
      The block header associated with the specified block height.
      Throws:
      NoSuchBlockException - If there was no block header associated with the provided block height.
    • hasBlock

      boolean hasBlock​(byte[] blockHash)
      Returns whether the local blockchain contains a block corresponding to the provided block hash.
      Parameters:
      blockHash - The block hash to search by.
      Returns:
      Whether the local blockchain contains a block corresponding to the provided block hash.
    • getBlock

      Block getBlock​(byte[] blockHash) throws NoSuchBlockException
      Retrieves the block associated with the specified block hash.
      Parameters:
      blockHash - The block hash to search by.
      Returns:
      The block associated with the specified block hash.
      Throws:
      NoSuchBlockException - If there was no block associated with the provided block hash.
    • getBlockByHeight

      Block getBlockByHeight​(int height) throws NoSuchBlockException
      Retrieves the block associated with the specified block height.
      Parameters:
      height - The block height to search by.
      Returns:
      The block associated with the specified block height.
      Throws:
      NoSuchBlockException - If there was no block associated with the provided block height.
    • getBlockByTransaction

      Block getBlockByTransaction​(byte[] transactionHash) throws NoSuchBlockException, NoSuchTransactionException
      Retrieves the block associated with the specified transaction.
      Parameters:
      transactionHash - The hash of the transaction to search by.
      Returns:
      The block containing the specified transaction.
      Throws:
      NoSuchBlockException - If there is no block associated with the specified transaction in the local blockchain.
      NoSuchTransactionException - If there is no transaction with the specified hash in the local blockchain.
    • putBlock

      boolean putBlock​(Block block)
      Store a block on the local blockchain.
      Parameters:
      block - The block to store.
      Returns:
      Whether the block was stored successfully.
    • putBlockHeader

      boolean putBlockHeader​(BlockHeader blockHeader)
      Store a block header on the local blockchain. Optional, for header only clients.
      Parameters:
      blockHeader - The block header to store.
      Returns:
      Whether the block header was stored successfully.
    • hasTransaction

      boolean hasTransaction​(byte[] transactionHash)
      Returns whether a transaction with the specified hash exist on the local blockchain.
      Parameters:
      transactionHash - The transaction hash to search by.
      Returns:
      Whether a transaction with the specified hash exist on the local blockchain.
    • getTransaction

      Transaction getTransaction​(byte[] transactionHash) throws NoSuchTransactionException, NoSuchBlockException
      Retrieve a transaction by its hash.
      Parameters:
      transactionHash - The transaction hash to search by.
      Returns:
      The transaction with the specified hash.
      Throws:
      NoSuchTransactionException - If there is no transaction with that hash in the local blockchain.
      NoSuchBlockException - If there is no block associated with the specified transaction in the local blockchain.
    • getTransactionInput

      TransactionInput getTransactionInput​(byte[] transactionHash, int index) throws NoSuchTransactionException, NoSuchBlockException
      Returns the transaction input from the transaction hash and index.
      Parameters:
      transactionHash - The transaction hash to search by.
      index - The input index.
      Returns:
      The transaction input specified.
      Throws:
      NoSuchTransactionException - If there is no transaction with that hash in the local blockchain.
      NoSuchBlockException - If there is no block associated with the specified transaction in the local blockchain.
    • getTransactionOutput

      TransactionOutput getTransactionOutput​(byte[] transactionHash, int index) throws NoSuchTransactionException, NoSuchBlockException
      Returns the transaction output from the transaction hash and index.
      Parameters:
      transactionHash - The transaction hash to search by.
      index - The output index.
      Returns:
      The transaction output specified.
      Throws:
      NoSuchTransactionException - If there is no transaction with that hash in the local blockchain.
      NoSuchBlockException - If there is no block associated with the specified transaction in the local blockchain.
    • isTransactionOutputSpent

      boolean isTransactionOutputSpent​(byte[] transactionHash, int index)
      Returns whether the specified transaction output has been spent. Typically, this will check whether it exists in the UTXO set.
      Parameters:
      transactionHash - The transaction hash to search by.
      index - The output index.
      Returns:
      Whether the transaction output has been spent. (true for spent, false for unspent)
    • getUnspentTransactionOutputs

      java.util.Set<BlockchainStorage.TransactionOutputIdentifier> getUnspentTransactionOutputs()
      Returns the local UTXO (unspent transaction output) set.
      Returns:
      A set of TransactionOutputIdentifier representing the local UTXO set.
    • buildUnspentTransactionOutputSet

      void buildUnspentTransactionOutputSet()
      Builds the local UTXO set from the entire blockchain.
    • hasMempoolTransaction

      boolean hasMempoolTransaction​(byte[] transactionHash)
      Returns whether the mempool contains the specified transaction.
      Parameters:
      transactionHash - The transaction hash to search by.
      Returns:
      Whether the mempool contains the specified transaction.
    • getMempoolTransactions

      java.util.Set<Transaction> getMempoolTransactions()
      Returns the current set of mempool (pending) transactions.
      Returns:
      The current set of mempool (pending) transactions.
    • getMempoolTransaction

      Transaction getMempoolTransaction​(byte[] transactionHash) throws NoSuchTransactionException
      Returns the mempool transaction specified.
      Parameters:
      transactionHash - The transaction hash to search by.
      Returns:
      The specified mempool transaction.
      Throws:
      NoSuchTransactionException - If the specified transaction does not exist in the mempool.
    • putMempoolTransaction

      boolean putMempoolTransaction​(Transaction transaction)
      Stores the specified transaction in the mempool.
      Parameters:
      transaction - The transaction to store in the mempool.
      Returns:
      Whether the transaction was successfully stored in the mempool.
    • removeMempoolTransaction

      boolean removeMempoolTransaction​(byte[] transactionHash)
      Remove the specified transaction from the mempool.
      Parameters:
      transactionHash - The hash of the transaction to remove from the mempool.
      Returns:
      Whether the transaction was removed from the mempool.