|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectcom.google.bitcoin.core.AbstractBlockChain
com.google.bitcoin.core.BlockChain
public class BlockChain
A BlockChain implements the simplified payment verification mode of the Bitcoin protocol. It is the right choice to use for programs that have limited resources as it won't verify transactions signatures or attempt to store all of the block chain. Really, this class should be called SPVBlockChain but for backwards compatibility it is not.
| Nested Class Summary |
|---|
| Nested classes/interfaces inherited from class com.google.bitcoin.core.AbstractBlockChain |
|---|
AbstractBlockChain.NewBlockType |
| Field Summary | |
|---|---|
protected BlockStore |
blockStore
Keeps a map of block hashes to StoredBlocks. |
| Fields inherited from class com.google.bitcoin.core.AbstractBlockChain |
|---|
chainHead, FP_ESTIMATOR_ALPHA, FP_ESTIMATOR_BETA, lock, params |
| Constructor Summary | |
|---|---|
BlockChain(NetworkParameters params,
BlockStore blockStore)
Constructs a BlockChain that has no wallet at all. |
|
BlockChain(NetworkParameters params,
List<BlockChainListener> wallets,
BlockStore blockStore)
Constructs a BlockChain connected to the given list of listeners and a store. |
|
BlockChain(NetworkParameters params,
Wallet wallet,
BlockStore blockStore)
Constructs a BlockChain connected to the given wallet and store. |
|
| Method Summary | |
|---|---|
boolean |
add(FilteredBlock block)
Processes a received block and tries to add it to the chain. |
protected StoredBlock |
addToBlockStore(StoredBlock storedPrev,
Block blockHeader)
Adds/updates the given Block with the block store. |
protected StoredBlock |
addToBlockStore(StoredBlock storedPrev,
Block blockHeader,
TransactionOutputChanges txOutChanges)
Adds/updates the given StoredBlock with the block store. |
protected TransactionOutputChanges |
connectTransactions(int height,
Block block)
Connect each transaction in block.transactions, verifying them as we go and removing spent outputs If an error is encountered in a transaction, no changes should be made to the underlying BlockStore. |
protected TransactionOutputChanges |
connectTransactions(StoredBlock newBlock)
Load newBlock from BlockStore and connect its transactions, returning changes to the set of unspent transactions. |
protected void |
disconnectTransactions(StoredBlock block)
Disconnect each transaction in the block (after reading it from the block store) Only called if(shouldVerifyTransactions()) |
protected void |
doSetChainHead(StoredBlock chainHead)
Called before setting chain head in memory. |
protected StoredBlock |
getStoredBlockInCurrentScope(Sha256Hash hash)
For a standard BlockChain, this should return blockStore.get(hash), for a FullPrunedBlockChain blockStore.getOnceUndoableStoredBlock(hash) |
protected void |
notSettingChainHead()
Called if we (possibly) previously called disconnectTransaction/connectTransactions, but will not be calling preSetChainHead as a block failed verification. |
protected boolean |
shouldVerifyTransactions()
Whether or not we are maintaining a set of unspent outputs and are verifying all transactions. |
| Methods inherited from class com.google.bitcoin.core.AbstractBlockChain |
|---|
add, addListener, addListener, addWallet, estimateBlockTime, getBestChainHeight, getBlockStore, getChainHead, getFalsePositiveRate, getHeightFuture, getOrphanRoot, isOrphan, removeListener, removeWallet, resetFalsePositiveEstimate, setChainHead, trackFilteredTransactions |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
protected final BlockStore blockStore
| Constructor Detail |
|---|
public BlockChain(NetworkParameters params,
Wallet wallet,
BlockStore blockStore)
throws BlockStoreException
Constructs a BlockChain connected to the given wallet and store. To obtain a Wallet you can construct
one from scratch, or you can deserialize a saved wallet from disk using Wallet.loadFromFile(java.io.File)
For the store, you should use SPVBlockStore or you could also try a
MemoryBlockStore if you want to hold all headers in RAM and don't care about
disk serialization (this is rare).
BlockStoreException
public BlockChain(NetworkParameters params,
BlockStore blockStore)
throws BlockStoreException
BlockStoreException
public BlockChain(NetworkParameters params,
List<BlockChainListener> wallets,
BlockStore blockStore)
throws BlockStoreException
BlockStoreException| Method Detail |
|---|
protected StoredBlock addToBlockStore(StoredBlock storedPrev,
Block blockHeader,
TransactionOutputChanges txOutChanges)
throws BlockStoreException,
VerificationException
AbstractBlockChainStoredBlock with the block store.
This version is used when the transactions have already been verified to properly spend txOutputChanges.
addToBlockStore in class AbstractBlockChainstoredPrev - The StoredBlock which immediately precedes block.blockHeader - The StoredBlock to add/update.txOutChanges - The total sum of all changes made by this block to the set of open transaction outputs
(from a call to connectTransactions), if in fully verifying mode (null otherwise).
StoredBlock
BlockStoreException
VerificationException
protected StoredBlock addToBlockStore(StoredBlock storedPrev,
Block blockHeader)
throws BlockStoreException,
VerificationException
AbstractBlockChainBlock with the block store.
This version is used when the transactions have not been verified.
addToBlockStore in class AbstractBlockChainstoredPrev - The StoredBlock which immediately precedes block.blockHeader - The Block to add/update.
StoredBlock
BlockStoreException
VerificationExceptionprotected boolean shouldVerifyTransactions()
AbstractBlockChain
shouldVerifyTransactions in class AbstractBlockChain
protected TransactionOutputChanges connectTransactions(int height,
Block block)
AbstractBlockChain
connectTransactions in class AbstractBlockChainprotected TransactionOutputChanges connectTransactions(StoredBlock newBlock)
AbstractBlockChain
connectTransactions in class AbstractBlockChainprotected void disconnectTransactions(StoredBlock block)
AbstractBlockChain
disconnectTransactions in class AbstractBlockChain
protected void doSetChainHead(StoredBlock chainHead)
throws BlockStoreException
AbstractBlockChain
doSetChainHead in class AbstractBlockChainBlockStoreException
protected void notSettingChainHead()
throws BlockStoreException
AbstractBlockChain
notSettingChainHead in class AbstractBlockChainBlockStoreException
protected StoredBlock getStoredBlockInCurrentScope(Sha256Hash hash)
throws BlockStoreException
AbstractBlockChain
getStoredBlockInCurrentScope in class AbstractBlockChainBlockStoreException
public boolean add(FilteredBlock block)
throws VerificationException,
PrunedException
AbstractBlockChain
add in class AbstractBlockChainVerificationException
PrunedException
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||