|
||||||||||
| 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.FullPrunedBlockChain
public class FullPrunedBlockChain
A FullPrunedBlockChain works in conjunction with a FullPrunedBlockStore to verify all the rules of the
Bitcoin system, with the downside being a larg cost in system resources. Fully verifying means all unspent transaction
outputs are stored. Once a transaction output is spent and that spend is buried deep enough, the data related to it
is deleted to ensure disk space usage doesn't grow forever. For this reason a pruning node cannot serve the full
block chain to other clients, but it nevertheless provides the same security guarantees as a regular Satoshi
client does.
| Nested Class Summary |
|---|
| Nested classes/interfaces inherited from class com.google.bitcoin.core.AbstractBlockChain |
|---|
AbstractBlockChain.NewBlockType |
| Field Summary | |
|---|---|
protected FullPrunedBlockStore |
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 | |
|---|---|
FullPrunedBlockChain(NetworkParameters params,
FullPrunedBlockStore blockStore)
Constructs a BlockChain that has no wallet at all. |
|
FullPrunedBlockChain(NetworkParameters params,
List<BlockChainListener> listeners,
FullPrunedBlockStore blockStore)
Constructs a BlockChain connected to the given list of wallets and a store. |
|
FullPrunedBlockChain(NetworkParameters params,
Wallet wallet,
FullPrunedBlockStore blockStore)
Constructs a BlockChain connected to the given wallet and store. |
|
| Method Summary | |
|---|---|
protected StoredBlock |
addToBlockStore(StoredBlock storedPrev,
Block block)
Adds/updates the given Block with the block store. |
protected StoredBlock |
addToBlockStore(StoredBlock storedPrev,
Block header,
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 oldBlock)
This is broken for blocks that do not pass BIP30, so all BIP30-failing blocks which are allowed to fail BIP30 must be checkpointed. |
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. |
void |
setRunScripts(boolean value)
Whether or not to run scripts whilst accepting blocks (i.e. |
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, 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 FullPrunedBlockStore blockStore
| Constructor Detail |
|---|
public FullPrunedBlockChain(NetworkParameters params,
Wallet wallet,
FullPrunedBlockStore blockStore)
throws BlockStoreException
Wallet you can construct
one from scratch, or you can deserialize a saved wallet from disk using Wallet.loadFromFile(java.io.File)
BlockStoreException
public FullPrunedBlockChain(NetworkParameters params,
FullPrunedBlockStore blockStore)
throws BlockStoreException
BlockStoreException
public FullPrunedBlockChain(NetworkParameters params,
List<BlockChainListener> listeners,
FullPrunedBlockStore blockStore)
throws BlockStoreException
BlockStoreException| Method Detail |
|---|
protected StoredBlock addToBlockStore(StoredBlock storedPrev,
Block header,
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.header - 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 block)
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.block - The Block to add/update.
StoredBlock
BlockStoreException
VerificationExceptionprotected boolean shouldVerifyTransactions()
AbstractBlockChain
shouldVerifyTransactions in class AbstractBlockChainpublic void setRunScripts(boolean value)
protected TransactionOutputChanges connectTransactions(int height,
Block block)
throws VerificationException,
BlockStoreException
AbstractBlockChain
connectTransactions in class AbstractBlockChainVerificationException - if an attempt was made to spend an already-spent output, or if a transaction incorrectly solved an output script.
BlockStoreException - if the block store had an underlying error.
protected TransactionOutputChanges connectTransactions(StoredBlock newBlock)
throws VerificationException,
BlockStoreException,
PrunedException
AbstractBlockChain
connectTransactions in class AbstractBlockChainVerificationException - if an attempt was made to spend an already-spent output, or if a transaction incorrectly solved an output script.
BlockStoreException - if the block store had an underlying error or newBlock does not exist in the block store at all.
PrunedException - if newBlock does not exist as a StoredUndoableBlock in the block store.
protected void disconnectTransactions(StoredBlock oldBlock)
throws PrunedException,
BlockStoreException
disconnectTransactions in class AbstractBlockChainPrunedException - if block does not exist as a StoredUndoableBlock in the block store.
BlockStoreException - if the block store had an underlying error or block does not exist in the block store at all.
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
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||