示例#1
0
文件: tx.go 项目: spearson78/guardian
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
}
示例#2
0
func (this *VersionNetworkAddress) ReadFrom(r io.Reader) (int64, error) {

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

	this.Services, err = dr.ReadUint64()
	if err != nil {
		return dr.Count(), err
	}

	this.Address, err = dr.ReadTCPAddr()
	return dr.Count(), err
}
示例#3
0
func (this *NetworkAddress) ReadFrom(r io.Reader) (int64, error) {

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

	this.Time, err = dr.ReadTime32()
	if err != nil {
		return dr.Count(), err
	}

	err = dr.ReadReaderFrom(&this.VersionNetworkAddress)
	return dr.Count(), err
}
示例#4
0
func (this *TxIn) ReadFrom(r io.Reader) (int64, error) {

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

	err = dr.ReadFull(this.Previous.Hash[:])
	if err != nil {
		return dr.Count(), err
	}

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

	this.Script, err = dr.ReadVarBytes()
	if err != nil {
		return dr.Count(), err
	}

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

	return dr.Count(), nil
}
示例#5
0
func (this *Version) ReadFrom(r io.Reader) (int64, error) {

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

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

	this.Services, err = dr.ReadUint64()
	if err != nil {
		return dr.Count(), err
	}

	this.Time, err = dr.ReadTime64()
	if err != nil {
		return dr.Count(), err
	}

	err = dr.ReadReaderFrom(&this.Receive)
	if err != nil {
		return dr.Count(), err
	}

	err = dr.ReadReaderFrom(&this.From)
	if err != nil {
		return dr.Count(), err
	}

	this.Nonce, err = dr.ReadUint64()
	if err != nil {
		return dr.Count(), err
	}

	this.UserAgent, err = dr.ReadVarString()
	if err != nil {
		return dr.Count(), err
	}

	this.StartHeight, err = dr.ReadInt32()
	if err != nil {
		return dr.Count(), err
	}

	return dr.Count(), nil
}
示例#6
0
func (this *TxOut) ReadFrom(r io.Reader) (int64, error) {
	var err error
	var dr dataio.DataReader
	dr.Init(r)

	this.Value, err = dr.ReadInt64()
	if err != nil {
		return dr.Count(), err
	}

	this.Script, err = dr.ReadVarBytes()
	if err != nil {
		return dr.Count(), err
	}

	return dr.Count(), nil
}