diff --git a/app/appmessage/message.go b/app/appmessage/message.go index 73fd76607..55636cfa7 100644 --- a/app/appmessage/message.go +++ b/app/appmessage/message.go @@ -71,6 +71,7 @@ const ( CmdBlockWithTrustedDataV4 CmdRequestIBDChainBlockLocator CmdIBDChainBlockLocator + CmdRequestPastDiff // rpc CmdGetCurrentNetworkRequestMessage diff --git a/app/appmessage/p2p_msgrequestpastdiff.go b/app/appmessage/p2p_msgrequestpastdiff.go new file mode 100644 index 000000000..9d4a74254 --- /dev/null +++ b/app/appmessage/p2p_msgrequestpastdiff.go @@ -0,0 +1,33 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package appmessage + +import ( + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" +) + +// MsgRequestPastDiff implements the Message interface and represents a kaspa +// RequestHeaders message. It is used to request a past diff past(RequestedHash) \setminus past(HasHash) +type MsgRequestPastDiff struct { + baseMessage + HasHash *externalapi.DomainHash + RequestedHash *externalapi.DomainHash +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgRequestPastDiff) Command() MessageCommand { + return CmdRequestPastDiff +} + +// NewMsgRequestPastDiff returns a new kaspa RequestPastDiff message that conforms to the +// Message interface using the passed parameters and defaults for the remaining +// fields. +func NewMsgRequestPastDiff(hasHash, requestedHash *externalapi.DomainHash) *MsgRequestPastDiff { + return &MsgRequestPastDiff{ + HasHash: hasHash, + RequestedHash: requestedHash, + } +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_past_diff.go b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_past_diff.go new file mode 100644 index 000000000..21e6c4c67 --- /dev/null +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/p2p_request_past_diff.go @@ -0,0 +1,42 @@ +package protowire + +import ( + "github.com/kaspanet/kaspad/app/appmessage" + "github.com/pkg/errors" +) + +func (x *KaspadMessage_RequestPastDiff) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "KaspadMessage_RequestPastDiff is nil") + } + return x.RequestPastDiff.toAppMessage() +} + +func (x *RequestPastDiffMessage) toAppMessage() (appmessage.Message, error) { + if x == nil { + return nil, errors.Wrapf(errorNil, "RequestPastDiffMessage is nil") + } + hasHash, err := x.HasHash.toDomain() + if err != nil { + return nil, err + } + + requestedHash, err := x.RequestedHash.toDomain() + if err != nil { + return nil, err + } + + return &appmessage.MsgRequestPastDiff{ + HasHash: hasHash, + RequestedHash: requestedHash, + }, nil + +} + +func (x *KaspadMessage_RequestPastDiff) fromAppMessage(msgRequestPastDiff *appmessage.MsgRequestPastDiff) error { + x.RequestPastDiff = &RequestPastDiffMessage{ + HasHash: domainHashToProto(msgRequestPastDiff.HasHash), + RequestedHash: domainHashToProto(msgRequestPastDiff.RequestedHash), + } + return nil +} diff --git a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go index bd708ccf1..50a82803c 100644 --- a/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go +++ b/infrastructure/network/netadapter/server/grpcserver/protowire/wire.go @@ -345,6 +345,13 @@ func toP2PPayload(message appmessage.Message) (isKaspadMessage_Payload, error) { return nil, err } return payload, nil + case *appmessage.MsgRequestPastDiff: + payload := new(KaspadMessage_RequestPastDiff) + err := payload.fromAppMessage(message) + if err != nil { + return nil, err + } + return payload, nil default: return nil, nil }