mirror of
				https://github.com/kaspanet/kaspad.git
				synced 2025-10-14 00:59:33 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright (c) 2014-2015 The btcsuite developers
 | |
| // Use of this source code is governed by an ISC
 | |
| // license that can be found in the LICENSE file.
 | |
| 
 | |
| package wire
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"io"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	// MaxFilterAddDataSize is the maximum byte size of a data
 | |
| 	// element to add to the Bloom filter.  It is equal to the
 | |
| 	// maximum element size of a script.
 | |
| 	MaxFilterAddDataSize = 520
 | |
| )
 | |
| 
 | |
| // MsgFilterAdd implements the Message interface and represents a bitcoin
 | |
| // filteradd message.  It is used to add a data element to an existing Bloom
 | |
| // filter.
 | |
| //
 | |
| // This message was not added until protocol version BIP0037Version.
 | |
| type MsgFilterAdd struct {
 | |
| 	Data []byte
 | |
| }
 | |
| 
 | |
| // BtcDecode decodes r using the bitcoin protocol encoding into the receiver.
 | |
| // This is part of the Message interface implementation.
 | |
| func (msg *MsgFilterAdd) BtcDecode(r io.Reader, pver uint32) error {
 | |
| 	if pver < BIP0037Version {
 | |
| 		str := fmt.Sprintf("filteradd message invalid for protocol "+
 | |
| 			"version %d", pver)
 | |
| 		return messageError("MsgFilterAdd.BtcDecode", str)
 | |
| 	}
 | |
| 
 | |
| 	var err error
 | |
| 	msg.Data, err = ReadVarBytes(r, pver, MaxFilterAddDataSize,
 | |
| 		"filteradd data")
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // BtcEncode encodes the receiver to w using the bitcoin protocol encoding.
 | |
| // This is part of the Message interface implementation.
 | |
| func (msg *MsgFilterAdd) BtcEncode(w io.Writer, pver uint32) error {
 | |
| 	if pver < BIP0037Version {
 | |
| 		str := fmt.Sprintf("filteradd message invalid for protocol "+
 | |
| 			"version %d", pver)
 | |
| 		return messageError("MsgFilterAdd.BtcEncode", str)
 | |
| 	}
 | |
| 
 | |
| 	size := len(msg.Data)
 | |
| 	if size > MaxFilterAddDataSize {
 | |
| 		str := fmt.Sprintf("filteradd size too large for message "+
 | |
| 			"[size %v, max %v]", size, MaxFilterAddDataSize)
 | |
| 		return messageError("MsgFilterAdd.BtcEncode", str)
 | |
| 	}
 | |
| 
 | |
| 	err := WriteVarBytes(w, pver, msg.Data)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // Command returns the protocol command string for the message.  This is part
 | |
| // of the Message interface implementation.
 | |
| func (msg *MsgFilterAdd) Command() string {
 | |
| 	return CmdFilterAdd
 | |
| }
 | |
| 
 | |
| // MaxPayloadLength returns the maximum length the payload can be for the
 | |
| // receiver.  This is part of the Message interface implementation.
 | |
| func (msg *MsgFilterAdd) MaxPayloadLength(pver uint32) uint32 {
 | |
| 	return uint32(VarIntSerializeSize(MaxFilterAddDataSize)) +
 | |
| 		MaxFilterAddDataSize
 | |
| }
 | |
| 
 | |
| // NewMsgFilterAdd returns a new bitcoin filteradd message that conforms to the
 | |
| // Message interface.  See MsgFilterAdd for details.
 | |
| func NewMsgFilterAdd(data []byte) *MsgFilterAdd {
 | |
| 	return &MsgFilterAdd{
 | |
| 		Data: data,
 | |
| 	}
 | |
| }
 | 
