// NewBlockFromReader returns a new instance of a bitcoin block given a // Reader to deserialize the block. See Block. func NewBlockFromReader(r io.Reader) (*Block, error) { // Deserialize the bytes into a MsgBlock. var msgBlock btcwire.MsgBlock err := msgBlock.Deserialize(r) if err != nil { return nil, err } b := Block{ msgBlock: &msgBlock, blockHeight: BlockHeightUnknown, } return &b, nil }
// TxLoc returns the offsets and lengths of each transaction in a raw block. // It is used to allow fast indexing into transactions within the raw byte // stream. func (b *Block) TxLoc() ([]btcwire.TxLoc, error) { rawMsg, err := b.Bytes() if err != nil { return nil, err } rbuf := bytes.NewBuffer(rawMsg) var mblock btcwire.MsgBlock txLocs, err := mblock.DeserializeTxLoc(rbuf) if err != nil { return nil, err } return txLocs, err }