diff --git a/blockheader.go b/blockheader.go index 28f75cba..9eb643e6 100644 --- a/blockheader.go +++ b/blockheader.go @@ -63,6 +63,26 @@ func (h *BlockHeader) BlockSha() (ShaHash, error) { return sha, nil } +// Deserialize decodes a block header from r into the receiver using a format +// that is suitable for long-term storage such as a database while respecting +// the Version field. +func (h *BlockHeader) Deserialize(r io.Reader) error { + // At the current time, there is no difference between the wire encoding + // at protocol version 0 and the stable long-term storage format. As + // a result, make use of readBlockHeader. + return readBlockHeader(r, 0, h) +} + +// Serialize encodes a block header from r into the receiver using a format +// that is suitable for long-term storage such as a database while respecting +// the Version field. +func (h *BlockHeader) Serialize(w io.Writer) error { + // At the current time, there is no difference between the wire encoding + // at protocol version 0 and the stable long-term storage format. As + // a result, make use of writeBlockHeader. + return writeBlockHeader(w, 0, h) +} + // NewBlockHeader returns a new BlockHeader using the provided previous block // hash, merkle root hash, difficulty bits, and nonce used to generate the // block with defaults for the remaining fields. @@ -79,7 +99,9 @@ func NewBlockHeader(prevHash *ShaHash, merkleRootHash *ShaHash, bits uint32, } } -// readBlockHeader reads a bitcoin block header from r. +// readBlockHeader reads a bitcoin block header from r. See Deserialize for +// decoding block headers stored to disk, such as in a database, as opposed to +// decoding from the wire. func readBlockHeader(r io.Reader, pver uint32, bh *BlockHeader) error { var sec uint32 err := readElements(r, &bh.Version, &bh.PrevBlock, &bh.MerkleRoot, &sec, @@ -92,7 +114,9 @@ func readBlockHeader(r io.Reader, pver uint32, bh *BlockHeader) error { return nil } -// writeBlockHeader writes a bitcoin block header to w. +// writeBlockHeader writes a bitcoin block header to w. See Serialize for +// encoding block headers to be stored to disk, such as in a database, as +// opposed to encoding for the wire. func writeBlockHeader(w io.Writer, pver uint32, bh *BlockHeader) error { sec := uint32(bh.Timestamp.Unix()) err := writeElements(w, bh.Version, &bh.PrevBlock, &bh.MerkleRoot,