Class StoredBlock


  • public class StoredBlock
    extends java.lang.Object
    Wraps a Block object with extra data that can be derived from the block chain but is slow or inconvenient to calculate. By storing it alongside the block header we reduce the amount of work required significantly. Recalculation is slow because the fields are cumulative - to find the chainWork you have to iterate over every block in the chain back to the genesis block, which involves lots of seeking/loading etc. So we just keep a running total: it's a disk space vs cpu/io tradeoff.

    StoredBlocks are put inside a BlockStore which saves them to memory or disk.

    • Constructor Detail

      • StoredBlock

        public StoredBlock​(Block header,
                           java.math.BigInteger chainWork,
                           int height)
        Create a StoredBlock from a (header-only) Block, chain work value, and block height
        Parameters:
        header - A Block object with only a header (no transactions should be included)
        chainWork - Calculated chainWork for this block
        height - block height for this block
    • Method Detail

      • getHeader

        public Block getHeader()
        The block header this object wraps. The referenced block object must not have any transactions in it.
      • getChainWork

        public java.math.BigInteger getChainWork()
        The total sum of work done in this block, and all the blocks below it in the chain. Work is a measure of how many tries are needed to solve a block. If the target is set to cover 10% of the total hash value space, then the work represented by a block is 10.
      • getHeight

        public int getHeight()
        Position in the chain for this block. The genesis block has a height of zero.
      • moreWorkThan

        public boolean moreWorkThan​(StoredBlock other)
        Returns true if this objects chainWork is higher than the others.
      • equals

        public boolean equals​(java.lang.Object o)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • getPrev

        public StoredBlock getPrev​(BlockStore store)
                            throws BlockStoreException
        Given a block store, looks up the previous block in this chain. Convenience method for doing store.get(this.getHeader().getPrevBlockHash()).
        Returns:
        the previous block in the chain or null if it was not found in the store.
        Throws:
        BlockStoreException
      • serializeCompact

        public void serializeCompact​(java.nio.ByteBuffer buffer)
        Serializes the stored block to a custom packed format. Used internally. As of June 22, 2024, it takes 12 unsigned bytes to store the chain work value, so developers should use serializeCompactV2(ByteBuffer).
        Parameters:
        buffer - buffer to write to
      • serializeCompactV2

        public void serializeCompactV2​(java.nio.ByteBuffer buffer)
        Serializes the stored block to a custom packed format. Used internally.
        Parameters:
        buffer - buffer to write to
      • deserializeCompact

        public static StoredBlock deserializeCompact​(java.nio.ByteBuffer buffer)
                                              throws ProtocolException
        Deserializes the stored block from a custom packed format. Used internally. As of June 22, 2024, it takes 12 unsigned bytes to store the chain work value, so developers should use deserializeCompactV2(ByteBuffer).
        Parameters:
        buffer - data to deserialize
        Returns:
        deserialized stored block
        Throws:
        ProtocolException
      • deserializeCompactV2

        public static StoredBlock deserializeCompactV2​(java.nio.ByteBuffer buffer)
                                                throws ProtocolException
        Deserializes the stored block from a custom packed format. Used internally.
        Parameters:
        buffer - data to deserialize
        Returns:
        deserialized stored block
        Throws:
        ProtocolException
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object