Class MemoryFullPrunedBlockStore
- java.lang.Object
-
- org.bitcoinj.store.MemoryFullPrunedBlockStore
-
- All Implemented Interfaces:
UTXOProvider
,BlockStore
,FullPrunedBlockStore
public class MemoryFullPrunedBlockStore extends java.lang.Object implements FullPrunedBlockStore
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
MemoryFullPrunedBlockStore.StoredBlockAndWasUndoableFlag
-
Constructor Summary
Constructors Constructor Description MemoryFullPrunedBlockStore(NetworkParameters params, int fullStoreDepth)
Set up the MemoryFullPrunedBlockStore
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
abortDatabaseBatchWrite()
void
addUnspentTransactionOutput(UTXO out)
Adds aUTXO
to the list of unspent TransactionOutputsvoid
beginDatabaseBatchWrite()
Begins/Commits/Aborts a database transaction.void
close()
Closes the store.void
commitDatabaseBatchWrite()
StoredBlock
get(Sha256Hash hash)
Returns the StoredBlock given a hash.StoredBlock
getChainHead()
Returns theStoredBlock
that represents the top of the chain of greatest total work.int
getChainHeadHeight()
Get the height of the chain head.StoredBlock
getOnceUndoableStoredBlock(Sha256Hash hash)
Returns the StoredBlock that was added as a StoredUndoableBlock given a hash.java.util.List<UTXO>
getOpenTransactionOutputs(java.util.List<ECKey> keys)
Get the list ofUTXO
's for given keys.NetworkParameters
getParams()
Get theNetworkParameters
of this store.UTXO
getTransactionOutput(Sha256Hash hash, long index)
Gets aUTXO
with the given hash and index, or null if none is foundStoredUndoableBlock
getUndoBlock(Sha256Hash hash)
Returns aStoredUndoableBlock
whose block.getHash() method will be equal to the parameter.StoredBlock
getVerifiedChainHead()
Returns theStoredBlock
that represents the top of the chain of greatest total work that has been fully verified and the point in the chain at which the unspent transaction output set in this store represents.boolean
hasUnspentOutputs(Sha256Hash hash, int numOutputs)
True if this store has any unspent outputs from a transaction with a hash equal to the first parametervoid
put(StoredBlock block)
Saves the given block header+extra data.void
put(StoredBlock storedBlock, StoredUndoableBlock undoableBlock)
Saves the givenStoredUndoableBlock
andStoredBlock
.void
removeUnspentTransactionOutput(UTXO out)
Removes aUTXO
from the list of unspent TransactionOutputs Note that the coinbase of the genesis block should NEVER be spendable and thus never in the list.void
setChainHead(StoredBlock chainHead)
Sets theStoredBlock
that represents the top of the chain of greatest total work.void
setVerifiedChainHead(StoredBlock chainHead)
Sets theStoredBlock
that represents the top of the chain of greatest total work that has been fully verified.
-
-
-
Constructor Detail
-
MemoryFullPrunedBlockStore
public MemoryFullPrunedBlockStore(NetworkParameters params, int fullStoreDepth)
Set up the MemoryFullPrunedBlockStore- Parameters:
params
- The network parameters of this block store - used to get genesis blockfullStoreDepth
- The depth of blocks to keep FullStoredBlocks instead of StoredBlocks
-
-
Method Detail
-
put
public void put(StoredBlock block) throws BlockStoreException
Description copied from interface:BlockStore
Saves the given block header+extra data. The key isn't specified explicitly as it can be calculated from the StoredBlock directly. Can throw if there is a problem with the underlying storage layer such as running out of disk space.- Specified by:
put
in interfaceBlockStore
- Throws:
BlockStoreException
-
put
public final void put(StoredBlock storedBlock, StoredUndoableBlock undoableBlock) throws BlockStoreException
Description copied from interface:FullPrunedBlockStore
Saves the given
StoredUndoableBlock
andStoredBlock
. Calculates keys from theStoredBlock
Though not required for proper function of a FullPrunedBlockStore, any user of a FullPrunedBlockStore should ensure that a StoredUndoableBlock for each block up to the fully verified chain head has been added to this block store using this function (not put(StoredBlock)), so that the ability to perform reorgs is maintained.
- Specified by:
put
in interfaceFullPrunedBlockStore
- Throws:
BlockStoreException
- if there is a problem with the underlying storage layer, such as running out of disk space.
-
get
@Nullable public StoredBlock get(Sha256Hash hash) throws BlockStoreException
Description copied from interface:BlockStore
Returns the StoredBlock given a hash. The returned values block.getHash() method will be equal to the parameter. If no such block is found, returns null.- Specified by:
get
in interfaceBlockStore
- Throws:
BlockStoreException
-
getOnceUndoableStoredBlock
@Nullable public StoredBlock getOnceUndoableStoredBlock(Sha256Hash hash) throws BlockStoreException
Description copied from interface:FullPrunedBlockStore
Returns the StoredBlock that was added as a StoredUndoableBlock given a hash. The returned values block.getHash() method will be equal to the parameter. If no such block is found, returns null.- Specified by:
getOnceUndoableStoredBlock
in interfaceFullPrunedBlockStore
- Throws:
BlockStoreException
-
getUndoBlock
@Nullable public StoredUndoableBlock getUndoBlock(Sha256Hash hash) throws BlockStoreException
Description copied from interface:FullPrunedBlockStore
Returns aStoredUndoableBlock
whose block.getHash() method will be equal to the parameter. If no such block is found, returns null. Note that this may return null more often than get(Sha256Hash hash) as not allStoredBlock
s have aStoredUndoableBlock
copy stored as well.- Specified by:
getUndoBlock
in interfaceFullPrunedBlockStore
- Throws:
BlockStoreException
-
getChainHead
public StoredBlock getChainHead() throws BlockStoreException
Description copied from interface:BlockStore
Returns theStoredBlock
that represents the top of the chain of greatest total work. Note that this can be arbitrarily expensive, you probably should useAbstractBlockChain.getChainHead()
or perhapsAbstractBlockChain.getBestChainHeight()
which will run in constant time and not take any heavyweight locks.- Specified by:
getChainHead
in interfaceBlockStore
- Throws:
BlockStoreException
-
setChainHead
public final void setChainHead(StoredBlock chainHead) throws BlockStoreException
Description copied from interface:BlockStore
Sets theStoredBlock
that represents the top of the chain of greatest total work.- Specified by:
setChainHead
in interfaceBlockStore
- Throws:
BlockStoreException
-
getVerifiedChainHead
public StoredBlock getVerifiedChainHead() throws BlockStoreException
Description copied from interface:FullPrunedBlockStore
Returns theStoredBlock
that represents the top of the chain of greatest total work that has been fully verified and the point in the chain at which the unspent transaction output set in this store represents.- Specified by:
getVerifiedChainHead
in interfaceFullPrunedBlockStore
- Throws:
BlockStoreException
-
setVerifiedChainHead
public final void setVerifiedChainHead(StoredBlock chainHead) throws BlockStoreException
Description copied from interface:FullPrunedBlockStore
Sets theStoredBlock
that represents the top of the chain of greatest total work that has been fully verified. It should generally be set after a batch of updates to the transaction unspent output set, before a call to commitDatabaseBatchWrite. If chainHead has a greater height than the non-verified chain head (ie that set withBlockStore.setChainHead(org.bitcoinj.core.StoredBlock)
) the non-verified chain head should be set to the one set here. In this way a class using a FullPrunedBlockStore only in full-verification mode can ignore the regularBlockStore
functions implemented as a part of a FullPrunedBlockStore.- Specified by:
setVerifiedChainHead
in interfaceFullPrunedBlockStore
- Throws:
BlockStoreException
-
close
public void close()
Description copied from interface:BlockStore
Closes the store.- Specified by:
close
in interfaceBlockStore
-
getTransactionOutput
@Nullable public UTXO getTransactionOutput(Sha256Hash hash, long index) throws BlockStoreException
Description copied from interface:FullPrunedBlockStore
Gets aUTXO
with the given hash and index, or null if none is found- Specified by:
getTransactionOutput
in interfaceFullPrunedBlockStore
- Throws:
BlockStoreException
-
addUnspentTransactionOutput
public void addUnspentTransactionOutput(UTXO out) throws BlockStoreException
Description copied from interface:FullPrunedBlockStore
Adds aUTXO
to the list of unspent TransactionOutputs- Specified by:
addUnspentTransactionOutput
in interfaceFullPrunedBlockStore
- Throws:
BlockStoreException
-
removeUnspentTransactionOutput
public void removeUnspentTransactionOutput(UTXO out) throws BlockStoreException
Description copied from interface:FullPrunedBlockStore
Removes aUTXO
from the list of unspent TransactionOutputs Note that the coinbase of the genesis block should NEVER be spendable and thus never in the list.- Specified by:
removeUnspentTransactionOutput
in interfaceFullPrunedBlockStore
- Throws:
BlockStoreException
- if there is an underlying storage issue, or out was not in the list.
-
beginDatabaseBatchWrite
public void beginDatabaseBatchWrite() throws BlockStoreException
Description copied from interface:FullPrunedBlockStore
Begins/Commits/Aborts a database transaction.
If abortDatabaseBatchWrite() is called by the same thread that called beginDatabaseBatchWrite(), any data writes between this call and abortDatabaseBatchWrite() made by the same thread should be discarded.
Furthermore, any data written after a call to beginDatabaseBatchWrite() should not be readable by any other threads until commitDatabaseBatchWrite() has been called by this thread. Multiple calls to beginDatabaseBatchWrite() in any given thread should be ignored and treated as one call.
- Specified by:
beginDatabaseBatchWrite
in interfaceFullPrunedBlockStore
- Throws:
BlockStoreException
-
commitDatabaseBatchWrite
public void commitDatabaseBatchWrite() throws BlockStoreException
- Specified by:
commitDatabaseBatchWrite
in interfaceFullPrunedBlockStore
- Throws:
BlockStoreException
-
abortDatabaseBatchWrite
public void abortDatabaseBatchWrite() throws BlockStoreException
- Specified by:
abortDatabaseBatchWrite
in interfaceFullPrunedBlockStore
- Throws:
BlockStoreException
-
hasUnspentOutputs
public boolean hasUnspentOutputs(Sha256Hash hash, int numOutputs) throws BlockStoreException
Description copied from interface:FullPrunedBlockStore
True if this store has any unspent outputs from a transaction with a hash equal to the first parameter- Specified by:
hasUnspentOutputs
in interfaceFullPrunedBlockStore
numOutputs
- the number of outputs the given transaction has- Throws:
BlockStoreException
-
getParams
public NetworkParameters getParams()
Description copied from interface:BlockStore
Get theNetworkParameters
of this store.- Specified by:
getParams
in interfaceBlockStore
- Specified by:
getParams
in interfaceUTXOProvider
- Returns:
- The network params.
-
getChainHeadHeight
public int getChainHeadHeight() throws UTXOProviderException
Description copied from interface:UTXOProvider
Get the height of the chain head.- Specified by:
getChainHeadHeight
in interfaceUTXOProvider
- Returns:
- The chain head height.
- Throws:
UTXOProviderException
- If there is an error.
-
getOpenTransactionOutputs
public java.util.List<UTXO> getOpenTransactionOutputs(java.util.List<ECKey> keys) throws UTXOProviderException
Description copied from interface:UTXOProvider
Get the list ofUTXO
's for given keys.- Specified by:
getOpenTransactionOutputs
in interfaceUTXOProvider
- Parameters:
keys
- List of keys.- Returns:
- The list of transaction outputs.
- Throws:
UTXOProviderException
- If there is an error.
-
-