diff --git a/waku/v2/rpc/filter.go b/waku/v2/rpc/filter.go index 1a8c5df5..dbebbbcd 100644 --- a/waku/v2/rpc/filter.go +++ b/waku/v2/rpc/filter.go @@ -123,9 +123,7 @@ func (f *FilterService) GetV1Messages(req *http.Request, args *ContentTopicArgs, return fmt.Errorf("topic %s not subscribed", args.ContentTopic) } - for i := range f.messages[args.ContentTopic] { - *reply = append(*reply, ProtoWakuMessageToRPCWakuMessage(f.messages[args.ContentTopic][i])) - } + *reply = f.messages[args.ContentTopic] f.messages[args.ContentTopic] = make([]*pb.WakuMessage, 0) return nil diff --git a/waku/v2/rpc/private.go b/waku/v2/rpc/private.go index 5bf0de7c..593598f0 100644 --- a/waku/v2/rpc/private.go +++ b/waku/v2/rpc/private.go @@ -38,15 +38,15 @@ type KeyPairReply struct { } type SymmetricMessageArgs struct { - Topic string `json:"topic"` - Message RPCWakuMessage `json:"message"` - SymKey string `json:"symkey"` + Topic string `json:"topic"` + Message *pb.WakuMessage `json:"message"` + SymKey string `json:"symkey"` } type AsymmetricMessageArgs struct { - Topic string `json:"topic"` - Message RPCWakuMessage `json:"message"` - PublicKey string `json:"publicKey"` + Topic string `json:"topic"` + Message *pb.WakuMessage `json:"message"` + PublicKey string `json:"publicKey"` } type SymmetricMessagesArgs struct { @@ -125,7 +125,7 @@ func (p *PrivateService) PostV1SymmetricMessage(req *http.Request, args *Symmetr keyInfo.Kind = payload.Symmetric keyInfo.SymKey = symKeyBytes - msg := args.Message.toProto() + msg := args.Message msg.Version = 1 err = payload.EncodeWakuMessage(msg, keyInfo) @@ -163,7 +163,7 @@ func (p *PrivateService) PostV1AsymmetricMessage(req *http.Request, args *Asymme keyInfo.PubKey = *pubKey - msg := args.Message.toProto() + msg := args.Message msg.Version = 1 err = payload.EncodeWakuMessage(msg, keyInfo) @@ -214,9 +214,7 @@ func (p *PrivateService) GetV1SymmetricMessages(req *http.Request, args *Symmetr decodedMessages = append(decodedMessages, msg) } - for i := range decodedMessages { - *reply = append(*reply, ProtoWakuMessageToRPCWakuMessage(decodedMessages[i])) - } + *reply = decodedMessages return nil } @@ -250,9 +248,7 @@ func (p *PrivateService) GetV1AsymmetricMessages(req *http.Request, args *Asymme decodedMessages = append(decodedMessages, msg) } - for i := range decodedMessages { - *reply = append(*reply, ProtoWakuMessageToRPCWakuMessage(decodedMessages[i])) - } + *reply = decodedMessages return nil } diff --git a/waku/v2/rpc/private_test.go b/waku/v2/rpc/private_test.go index 9d108a69..32da49b6 100644 --- a/waku/v2/rpc/private_test.go +++ b/waku/v2/rpc/private_test.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/stretchr/testify/require" "github.com/waku-org/go-waku/waku/v2/node" + "github.com/waku-org/go-waku/waku/v2/protocol/pb" "github.com/waku-org/go-waku/waku/v2/utils" ) @@ -59,7 +60,7 @@ func TestPostV1SymmetricMessage(t *testing.T) { makeRequest(t), &SymmetricMessageArgs{ Topic: "test", - Message: RPCWakuMessage{Payload: []byte("test")}, + Message: &pb.WakuMessage{Payload: []byte("test")}, SymKey: "0x1122334455667788991011223344556677889910112233445566778899101122", }, &reply, @@ -77,7 +78,7 @@ func TestPostV1AsymmetricMessage(t *testing.T) { makeRequest(t), &AsymmetricMessageArgs{ Topic: "test", - Message: RPCWakuMessage{Payload: []byte("test")}, + Message: &pb.WakuMessage{Payload: []byte("test")}, PublicKey: "0x045ded6a56c88173e87a88c55b96956964b1bd3351b5fcb70950a4902fbc1bc0ceabb0ac846c3a4b8f2f6024c0e19f0a7f6a4865035187de5463f34012304fc7c5", }, &reply, @@ -100,7 +101,7 @@ func TestGetV1SymmetricMessages(t *testing.T) { makeRequest(t), &SymmetricMessageArgs{ Topic: "test", - Message: RPCWakuMessage{Payload: []byte("test")}, + Message: &pb.WakuMessage{Payload: []byte("test")}, SymKey: "0x1122334455667788991011223344556677889910112233445566778899101122", }, &reply, @@ -140,7 +141,7 @@ func TestGetV1AsymmetricMessages(t *testing.T) { makeRequest(t), &AsymmetricMessageArgs{ Topic: "test", - Message: RPCWakuMessage{Payload: []byte("test")}, + Message: &pb.WakuMessage{Payload: []byte("test")}, PublicKey: hexutil.Encode(crypto.FromECDSAPub(&prvKey.PublicKey)), }, &reply, diff --git a/waku/v2/rpc/relay.go b/waku/v2/rpc/relay.go index 92619ffe..ab70c1a4 100644 --- a/waku/v2/rpc/relay.go +++ b/waku/v2/rpc/relay.go @@ -25,8 +25,8 @@ type RelayService struct { } type RelayMessageArgs struct { - Topic string `json:"topic,omitempty"` - Message RPCWakuRelayMessage `json:"message,omitempty"` + Topic string `json:"topic,omitempty"` + Message *pb.WakuMessage `json:"message,omitempty"` } type TopicsArgs struct { @@ -85,12 +85,10 @@ func (r *RelayService) Stop() { func (r *RelayService) PostV1Message(req *http.Request, args *RelayMessageArgs, reply *SuccessReply) error { var err error - msg := args.Message.toProto() - if args.Topic == "" { - _, err = r.node.Relay().Publish(req.Context(), msg) + _, err = r.node.Relay().Publish(req.Context(), args.Message) } else { - _, err = r.node.Relay().PublishToTopic(req.Context(), msg, args.Topic) + _, err = r.node.Relay().PublishToTopic(req.Context(), args.Message, args.Topic) } if err != nil { r.log.Error("publishing message", zap.Error(err)) @@ -151,9 +149,7 @@ func (r *RelayService) GetV1Messages(req *http.Request, args *TopicArgs, reply * return fmt.Errorf("topic %s not subscribed", args.Topic) } - for i := range r.messages[args.Topic] { - *reply = append(*reply, ProtoWakuMessageToRPCWakuRelayMessage(r.messages[args.Topic][i])) - } + *reply = r.messages[args.Topic] r.messages[args.Topic] = make([]*pb.WakuMessage, 0) diff --git a/waku/v2/rpc/relay_test.go b/waku/v2/rpc/relay_test.go index 89b02b85..3cd95f3b 100644 --- a/waku/v2/rpc/relay_test.go +++ b/waku/v2/rpc/relay_test.go @@ -9,6 +9,7 @@ import ( "github.com/multiformats/go-multiaddr" "github.com/stretchr/testify/require" "github.com/waku-org/go-waku/waku/v2/node" + "github.com/waku-org/go-waku/waku/v2/protocol/pb" "github.com/waku-org/go-waku/waku/v2/utils" ) @@ -27,9 +28,18 @@ func TestPostV1Message(t *testing.T) { d := makeRelayService(t) + msg := &pb.WakuMessage{ + Payload: []byte{1, 2, 3}, + ContentTopic: "abc", + Version: 0, + Timestamp: utils.GetUnixEpoch(), + } + err := d.PostV1Message( makeRequest(t), - &RelayMessageArgs{}, + &RelayMessageArgs{ + Message: msg, + }, &reply, ) require.NoError(t, err) @@ -100,7 +110,7 @@ func TestRelayGetV1Messages(t *testing.T) { makeRequest(t), &RelayMessageArgs{ Topic: "test", - Message: RPCWakuRelayMessage{ + Message: &pb.WakuMessage{ Payload: []byte("test"), }, }, diff --git a/waku/v2/rpc/rpc_type.go b/waku/v2/rpc/rpc_type.go index 1eda8a65..f33e97e3 100644 --- a/waku/v2/rpc/rpc_type.go +++ b/waku/v2/rpc/rpc_type.go @@ -1,10 +1,12 @@ package rpc +import "github.com/waku-org/go-waku/waku/v2/protocol/pb" + type SuccessReply = bool type Empty struct { } -type MessagesReply = []*RPCWakuMessage +type MessagesReply = []*pb.WakuMessage -type RelayMessagesReply = []*RPCWakuRelayMessage +type RelayMessagesReply = []*pb.WakuMessage diff --git a/waku/v2/rpc/store.go b/waku/v2/rpc/store.go index c72089e6..c2a29e6f 100644 --- a/waku/v2/rpc/store.go +++ b/waku/v2/rpc/store.go @@ -33,7 +33,7 @@ type StoreMessagesArgs struct { } type StoreMessagesReply struct { - Messages []RPCWakuMessage `json:"messages,omitempty"` + Messages []*pb.WakuMessage `json:"messages,omitempty"` PagingInfo StorePagingOptions `json:"pagingInfo,omitempty"` Error string `json:"error,omitempty"` } @@ -61,10 +61,7 @@ func (s *StoreService) GetV1Messages(req *http.Request, args *StoreMessagesArgs, return nil } - reply.Messages = make([]RPCWakuMessage, len(res.Messages)) - for i := range res.Messages { - reply.Messages[i] = *ProtoWakuMessageToRPCWakuMessage(res.Messages[i]) - } + reply.Messages = res.Messages reply.PagingInfo = StorePagingOptions{ PageSize: args.PagingOptions.PageSize, diff --git a/waku/v2/rpc/utils.go b/waku/v2/rpc/utils.go deleted file mode 100644 index 9b2b2ca3..00000000 --- a/waku/v2/rpc/utils.go +++ /dev/null @@ -1,199 +0,0 @@ -package rpc - -import ( - "encoding/hex" - "fmt" - "strings" - - "github.com/waku-org/go-waku/waku/v2/protocol/pb" - "github.com/waku-org/go-waku/waku/v2/utils" -) - -// HexBytes is marshalled to a hex string -type HexBytes []byte - -// ByteArray is marshalled to a uint8 array -type ByteArray []byte - -type RateLimitProof struct { - Proof HexBytes `json:"proof,omitempty"` - MerkleRoot HexBytes `json:"merkle_root,omitempty"` - Epoch HexBytes `json:"epoch,omitempty"` - ShareX HexBytes `json:"share_x,omitempty"` - ShareY HexBytes `json:"share_y,omitempty"` - Nullifier HexBytes `json:"nullifier,omitempty"` - RlnIdentifier HexBytes `json:"rln_identifier,omitempty"` -} - -type RPCWakuMessage struct { - Payload ByteArray `json:"payload,omitempty"` - ContentTopic string `json:"contentTopic,omitempty"` - Version uint32 `json:"version"` - Timestamp int64 `json:"timestamp,omitempty"` - RateLimitProof *RateLimitProof `json:"rateLimitProof,omitempty"` -} - -type RPCWakuRelayMessage struct { - Payload HexBytes `json:"payload,omitempty"` - ContentTopic string `json:"contentTopic,omitempty"` - Timestamp int64 `json:"timestamp,omitempty"` - RateLimitProof *RateLimitProof `json:"rateLimitProof,omitempty"` - Version uint32 `json:"version"` -} - -func ProtoWakuMessageToRPCWakuMessage(input *pb.WakuMessage) *RPCWakuMessage { - if input == nil { - return nil - } - - rpcWakuMsg := &RPCWakuMessage{ - Payload: input.Payload, - ContentTopic: input.ContentTopic, - Version: input.Version, - Timestamp: input.Timestamp, - } - - if input.RateLimitProof != nil { - rpcWakuMsg.RateLimitProof = &RateLimitProof{ - Proof: input.RateLimitProof.Proof, - MerkleRoot: input.RateLimitProof.MerkleRoot, - Epoch: input.RateLimitProof.Epoch, - ShareX: input.RateLimitProof.ShareX, - ShareY: input.RateLimitProof.ShareY, - Nullifier: input.RateLimitProof.Nullifier, - RlnIdentifier: input.RateLimitProof.RlnIdentifier, - } - } - - return rpcWakuMsg -} - -func (r *RPCWakuMessage) toProto() *pb.WakuMessage { - if r == nil { - return nil - } - - msg := &pb.WakuMessage{ - Payload: r.Payload, - ContentTopic: r.ContentTopic, - Version: r.Version, - Timestamp: r.Timestamp, - } - - if r.RateLimitProof != nil { - msg.RateLimitProof = &pb.RateLimitProof{ - Proof: r.RateLimitProof.Proof, - MerkleRoot: r.RateLimitProof.MerkleRoot, - Epoch: r.RateLimitProof.Epoch, - ShareX: r.RateLimitProof.ShareX, - ShareY: r.RateLimitProof.ShareY, - Nullifier: r.RateLimitProof.Nullifier, - RlnIdentifier: r.RateLimitProof.RlnIdentifier, - } - } - - return msg -} - -func (u HexBytes) MarshalJSON() ([]byte, error) { - var result string - if u == nil { - result = "null" - } else { - result = strings.Join(strings.Fields(fmt.Sprintf("%d", u)), ",") - } - return []byte(result), nil -} - -func (h *HexBytes) UnmarshalText(b []byte) error { - hexString := "" - if b != nil { - hexString = string(b) - } - - decoded, err := utils.DecodeHexString(hexString) - if err != nil { - return err - } - - *h = decoded - - return nil -} - -func ProtoWakuMessageToRPCWakuRelayMessage(input *pb.WakuMessage) *RPCWakuRelayMessage { - if input == nil { - return nil - } - - rpcMsg := &RPCWakuRelayMessage{ - Payload: input.Payload, - ContentTopic: input.ContentTopic, - Timestamp: input.Timestamp, - } - - if input.RateLimitProof != nil { - rpcMsg.RateLimitProof = &RateLimitProof{ - Proof: input.RateLimitProof.Proof, - MerkleRoot: input.RateLimitProof.MerkleRoot, - Epoch: input.RateLimitProof.Epoch, - ShareX: input.RateLimitProof.ShareX, - ShareY: input.RateLimitProof.ShareY, - Nullifier: input.RateLimitProof.Nullifier, - RlnIdentifier: input.RateLimitProof.RlnIdentifier, - } - } - - return rpcMsg -} - -func (r *RPCWakuRelayMessage) toProto() *pb.WakuMessage { - if r == nil { - return nil - } - - msg := &pb.WakuMessage{ - Payload: r.Payload, - ContentTopic: r.ContentTopic, - Timestamp: r.Timestamp, - Version: r.Version, - } - - if r.RateLimitProof != nil { - msg.RateLimitProof = &pb.RateLimitProof{ - Proof: r.RateLimitProof.Proof, - MerkleRoot: r.RateLimitProof.MerkleRoot, - Epoch: r.RateLimitProof.Epoch, - ShareX: r.RateLimitProof.ShareX, - ShareY: r.RateLimitProof.ShareY, - Nullifier: r.RateLimitProof.Nullifier, - RlnIdentifier: r.RateLimitProof.RlnIdentifier, - } - } - - return msg -} - -func (h ByteArray) MarshalText() ([]byte, error) { - if h == nil { - return []byte{}, nil - } - - return []byte(hex.EncodeToString(h)), nil -} - -func (h *ByteArray) UnmarshalText(b []byte) error { - hexString := "" - if b != nil { - hexString = string(b) - } - - decoded, err := utils.DecodeHexString(hexString) - if err != nil { - return err - } - - *h = decoded - - return nil -}