mirror of https://github.com/status-im/go-waku.git
54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package pb
|
|
|
|
import (
|
|
"encoding/binary"
|
|
|
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
|
"github.com/waku-org/go-waku/waku/v2/hash"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
)
|
|
|
|
// MessageHash represents an unique identifier for a message within a pubsub topic
|
|
type MessageHash [32]byte
|
|
|
|
func (h MessageHash) String() string {
|
|
return hexutil.Encode(h[:])
|
|
}
|
|
|
|
func (h MessageHash) Bytes() []byte {
|
|
return h[:]
|
|
}
|
|
|
|
// ToMessageHash converts a byte slice into a MessageHash
|
|
func ToMessageHash(b []byte) MessageHash {
|
|
var result MessageHash
|
|
copy(result[:], b)
|
|
return result
|
|
}
|
|
|
|
// Hash calculates the hash of a waku message
|
|
func (msg *WakuMessage) Hash(pubsubTopic string) MessageHash {
|
|
hash := hash.SHA256([]byte(pubsubTopic), msg.Payload, []byte(msg.ContentTopic), msg.Meta, toBytes(msg.GetTimestamp()))
|
|
return ToMessageHash(hash)
|
|
}
|
|
|
|
func toBytes(i int64) []byte {
|
|
b := make([]byte, 8)
|
|
binary.BigEndian.PutUint64(b, uint64(i))
|
|
return b
|
|
}
|
|
|
|
func (msg *WakuMessage) LogFields(pubsubTopic string) []zapcore.Field {
|
|
return []zapcore.Field{
|
|
zap.Stringer("hash", msg.Hash(pubsubTopic)),
|
|
zap.String("pubsubTopic", pubsubTopic),
|
|
zap.String("contentTopic", msg.ContentTopic),
|
|
zap.Int64("timestamp", msg.GetTimestamp()),
|
|
}
|
|
}
|
|
|
|
func (msg *WakuMessage) Logger(logger *zap.Logger, pubsubTopic string) *zap.Logger {
|
|
return logger.With(msg.LogFields(pubsubTopic)...)
|
|
}
|