mirror of https://github.com/status-im/op-geth.git
whisper: add utility functions for creating topics
This commit is contained in:
parent
cb707ba50c
commit
4af7743663
|
@ -30,7 +30,7 @@ type Options struct {
|
||||||
From *ecdsa.PrivateKey
|
From *ecdsa.PrivateKey
|
||||||
To *ecdsa.PublicKey
|
To *ecdsa.PublicKey
|
||||||
TTL time.Duration
|
TTL time.Duration
|
||||||
Topics [][]byte
|
Topics []Topic
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewMessage creates and initializes a non-signed, non-encrypted Whisper message.
|
// NewMessage creates and initializes a non-signed, non-encrypted Whisper message.
|
||||||
|
@ -75,13 +75,8 @@ func (self *Message) Wrap(pow time.Duration, options Options) (*Envelope, error)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Convert the user topic into whisper ones
|
|
||||||
topics := make([]Topic, len(options.Topics))
|
|
||||||
for i, topic := range options.Topics {
|
|
||||||
topics[i] = NewTopic(topic)
|
|
||||||
}
|
|
||||||
// Wrap the processed message, seal it and return
|
// Wrap the processed message, seal it and return
|
||||||
envelope := NewEnvelope(options.TTL, topics, self)
|
envelope := NewEnvelope(options.TTL, options.Topics, self)
|
||||||
envelope.Seal(pow)
|
envelope.Seal(pow)
|
||||||
|
|
||||||
return envelope, nil
|
return envelope, nil
|
||||||
|
|
|
@ -17,6 +17,32 @@ func NewTopic(data []byte) Topic {
|
||||||
return Topic(prefix)
|
return Topic(prefix)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewTopics creates a list of topics from a list of binary data elements, by
|
||||||
|
// iteratively calling NewTopic on each of them.
|
||||||
|
func NewTopics(data ...[]byte) []Topic {
|
||||||
|
topics := make([]Topic, len(data))
|
||||||
|
for i, element := range data {
|
||||||
|
topics[i] = NewTopic(element)
|
||||||
|
}
|
||||||
|
return topics
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTopicFromString creates a topic using the binary data contents of the
|
||||||
|
// specified string.
|
||||||
|
func NewTopicFromString(data string) Topic {
|
||||||
|
return NewTopic([]byte(data))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTopicsFromStrings creates a list of topics from a list of textual data
|
||||||
|
// elements, by iteratively calling NewTopicFromString on each of them.
|
||||||
|
func NewTopicsFromStrings(data ...string) []Topic {
|
||||||
|
topics := make([]Topic, len(data))
|
||||||
|
for i, element := range data {
|
||||||
|
topics[i] = NewTopicFromString(element)
|
||||||
|
}
|
||||||
|
return topics
|
||||||
|
}
|
||||||
|
|
||||||
// String converts a topic byte array to a string representation.
|
// String converts a topic byte array to a string representation.
|
||||||
func (self *Topic) String() string {
|
func (self *Topic) String() string {
|
||||||
return string(self[:])
|
return string(self[:])
|
||||||
|
|
|
@ -15,10 +15,39 @@ var topicCreationTests = []struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTopicCreation(t *testing.T) {
|
func TestTopicCreation(t *testing.T) {
|
||||||
|
// Create the topics individually
|
||||||
for i, tt := range topicCreationTests {
|
for i, tt := range topicCreationTests {
|
||||||
topic := NewTopic(tt.data)
|
topic := NewTopic(tt.data)
|
||||||
if bytes.Compare(topic[:], tt.hash[:]) != 0 {
|
if bytes.Compare(topic[:], tt.hash[:]) != 0 {
|
||||||
t.Errorf("test %d: hash mismatch: have %v, want %v.", i, topic, tt.hash)
|
t.Errorf("binary test %d: hash mismatch: have %v, want %v.", i, topic, tt.hash)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for i, tt := range topicCreationTests {
|
||||||
|
topic := NewTopicFromString(string(tt.data))
|
||||||
|
if bytes.Compare(topic[:], tt.hash[:]) != 0 {
|
||||||
|
t.Errorf("textual test %d: hash mismatch: have %v, want %v.", i, topic, tt.hash)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Create the topics in batches
|
||||||
|
binaryData := make([][]byte, len(topicCreationTests))
|
||||||
|
for i, tt := range topicCreationTests {
|
||||||
|
binaryData[i] = tt.data
|
||||||
|
}
|
||||||
|
textualData := make([]string, len(topicCreationTests))
|
||||||
|
for i, tt := range topicCreationTests {
|
||||||
|
textualData[i] = string(tt.data)
|
||||||
|
}
|
||||||
|
|
||||||
|
topics := NewTopics(binaryData...)
|
||||||
|
for i, tt := range topicCreationTests {
|
||||||
|
if bytes.Compare(topics[i][:], tt.hash[:]) != 0 {
|
||||||
|
t.Errorf("binary batch test %d: hash mismatch: have %v, want %v.", i, topics[i], tt.hash)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
topics = NewTopicsFromStrings(textualData...)
|
||||||
|
for i, tt := range topicCreationTests {
|
||||||
|
if bytes.Compare(topics[i][:], tt.hash[:]) != 0 {
|
||||||
|
t.Errorf("textual batch test %d: hash mismatch: have %v, want %v.", i, topics[i], tt.hash)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue