Exemple #1
0
func (this *Tx) ReadFrom(r io.Reader) (int64, error) {

	var err error
	var dr dataio.DataReader
	dr.Init(r)

	this.Version, err = dr.ReadUint32()
	if err != nil {
		return dr.Count(), err
	}

	if this.Version > 2 {
		return 0, UnsupportedTxVersionError(this.Version)
	}

	inputCount, err := dr.ReadVarInt()
	if err != nil {
		return dr.Count(), err
	}

	this.Inputs = make([]TxIn, inputCount)

	for txInNum := uint64(0); txInNum < inputCount; txInNum++ {
		err = dr.ReadReaderFrom(&this.Inputs[txInNum])
		if err != nil {
			return dr.Count(), err
		}
	}

	outputCount, err := dr.ReadVarInt()
	if err != nil {
		return dr.Count(), err
	}

	this.Outputs = make([]TxOut, outputCount)

	for txOutNum := uint64(0); txOutNum < outputCount; txOutNum++ {
		err = dr.ReadReaderFrom(&this.Outputs[txOutNum])
		if err != nil {
			return dr.Count(), err
		}
	}

	this.LockTime, err = dr.ReadUint32()
	if err != nil {
		return dr.Count(), err
	}

	return dr.Count(), nil
}