func (th *TransactionHeader) UnmarshalBinary(d []byte) error { buf := bytes.NewBuffer(d) th.From = helpers.StripByte(buf.Next(NETWORK_KEY_SIZE), 0) th.To = helpers.StripByte(buf.Next(NETWORK_KEY_SIZE), 0) binary.Read(bytes.NewBuffer(buf.Next(4)), binary.LittleEndian, &th.Timestamp) th.PayloadHash = buf.Next(32) binary.Read(bytes.NewBuffer(buf.Next(4)), binary.LittleEndian, &th.PayloadLength) binary.Read(bytes.NewBuffer(buf.Next(4)), binary.LittleEndian, &th.Nonce) return nil }
func (h *BlockHeader) UnmarshalBinary(d []byte) error { buf := bytes.NewBuffer(d) h.Origin = helpers.StripByte(buf.Next(NETWORK_KEY_SIZE), 0) binary.Read(bytes.NewBuffer(buf.Next(4)), binary.LittleEndian, &h.Timestamp) h.PrevBlock = buf.Next(32) h.MerkelRoot = buf.Next(32) binary.Read(bytes.NewBuffer(buf.Next(4)), binary.LittleEndian, &h.Nonce) return nil }
func (t *Transaction) UnmarshalBinary(d []byte) ([]byte, error) { buf := bytes.NewBuffer(d) if len(d) < TRANSACTION_HEADER_SIZE+NETWORK_KEY_SIZE { return nil, errors.New("Insuficient bytes for unmarshalling transaction") } header := &TransactionHeader{} if err := header.UnmarshalBinary(buf.Next(TRANSACTION_HEADER_SIZE)); err != nil { return nil, err } t.Header = *header t.Signature = helpers.StripByte(buf.Next(NETWORK_KEY_SIZE), 0) t.Payload = buf.Next(int(t.Header.PayloadLength)) return buf.Next(helpers.MaxInt), nil }
func (b *Block) UnmarshalBinary(d []byte) error { buf := bytes.NewBuffer(d) header := new(BlockHeader) err := header.UnmarshalBinary(buf.Next(BLOCK_HEADER_SIZE)) if err != nil { return err } b.BlockHeader = header b.Signature = helpers.StripByte(buf.Next(NETWORK_KEY_SIZE), 0) ts := new(TransactionSlice) err = ts.UnmarshalBinary(buf.Next(helpers.MaxInt)) if err != nil { return err } b.TransactionSlice = ts return nil }