package org.ripple.power.txns.btc; import java.math.BigInteger; public class StoredBlock { /** The work represented by the block chain up to and including this block */ private BigInteger chainWork; /** The block hash */ private Sha256Hash blockHash; /** The previous block hash */ private Sha256Hash prevBlockHash; /** The block height */ private int blockHeight; /** Block is on hold */ private boolean onHold = false; /** Block is on the chain */ private boolean onChain = false; /** The block */ private Block block; /** * Creates a StoredBlock without any block data for a block on the chain * * @param blockHash Block hash * @param prevBlockHash Previous block hash * @param chainWork Chain work * @param blockHeight BlockHeight */ public StoredBlock(Sha256Hash blockHash, Sha256Hash prevBlockHash, BigInteger chainWork, int blockHeight) { this.chainWork = chainWork; this.blockHeight = blockHeight; this.blockHash = blockHash; this.prevBlockHash = prevBlockHash; this.onChain = true; } /** * Creates a StoredBlock containing a new block * * @param block The block to be stored * @param chainWork Chain work * @param blockHeight Block height */ public StoredBlock(Block block, BigInteger chainWork, int blockHeight) { this(block, chainWork, blockHeight, false, false); } /** * Creates a StoredBlock containing an existing block * * @param block The block * @param chainWork Chain work * @param blockHeight Block height * @param onChain TRUE if the block is on the chain * @param onHold TRUE if the block is on hold */ public StoredBlock(Block block, BigInteger chainWork, int blockHeight, boolean onChain, boolean onHold) { this.block = block; this.chainWork = chainWork; this.blockHeight = blockHeight; this.blockHash = block.getHash(); this.prevBlockHash = block.getPrevBlockHash(); this.onChain = onChain; this.onHold = onHold; } /** * Returns the stored block * * @return Stored block or null if the block has been pruned */ public Block getBlock() { return block; } /** * Returns the block hash * * @return The block hash */ public Sha256Hash getHash() { return blockHash; } /** * Returns the previous block hash * * @return The previous block hash */ public Sha256Hash getPrevBlockHash() { return prevBlockHash; } /** * Returns the chain work represented by this block * * @return The chain work */ public BigInteger getChainWork() { return chainWork; } /** * Sets the chain work represented by this block * @param chainWork The chain work */ public void setChainWork(BigInteger chainWork) { this.chainWork = chainWork; } /** * Returns the block height * * @return The block height */ public int getHeight() { return blockHeight; } /** * Set the block height * @param blockHeight The block height */ public void setHeight(int blockHeight) { this.blockHeight = blockHeight; } /** * Sets the block hold status * * @param onHold TRUE if the block is on hold */ public void setHold(boolean onHold) { this.onHold = onHold; } /** * Checks if the block is on hold * * @return TRUE if the block is on hold */ public boolean isOnHold() { return onHold; } /** * Sets the block chain status * * @param onChain TRUE if the block is on the chain */ public void setChain(boolean onChain) { this.onChain = onChain; } /** * Checks if the block is on the chain * * @return TRUE if the block is on the chain */ public boolean isOnChain() { return onChain; } }