github.com/decred/dcrlnd@v0.7.6/input/txout.go (about)

     1  package input
     2  
     3  import (
     4  	"encoding/binary"
     5  	"io"
     6  
     7  	"github.com/decred/dcrd/wire"
     8  )
     9  
    10  // writeTxOut serializes a wire.TxOut struct into the passed io.Writer stream.
    11  func writeTxOut(w io.Writer, txo *wire.TxOut) error {
    12  	var scratch [8]byte
    13  
    14  	binary.BigEndian.PutUint64(scratch[:], uint64(txo.Value))
    15  	if _, err := w.Write(scratch[:]); err != nil {
    16  		return err
    17  	}
    18  
    19  	if err := wire.WriteVarBytes(w, 0, txo.PkScript); err != nil {
    20  		return err
    21  	}
    22  
    23  	return nil
    24  }
    25  
    26  // readTxOut deserializes a wire.TxOut struct from the passed io.Reader stream.
    27  func readTxOut(r io.Reader, txo *wire.TxOut) error {
    28  	var scratch [8]byte
    29  
    30  	if _, err := io.ReadFull(r, scratch[:]); err != nil {
    31  		return err
    32  	}
    33  	value := int64(binary.BigEndian.Uint64(scratch[:]))
    34  
    35  	pkScript, err := wire.ReadVarBytes(r, 0, 80, "pkScript")
    36  	if err != nil {
    37  		return err
    38  	}
    39  
    40  	*txo = wire.TxOut{
    41  		Value:    value,
    42  		PkScript: pkScript,
    43  	}
    44  
    45  	return nil
    46  }