whisper: use common.Hash
This commit is contained in:
		
							parent
							
								
									7c4ff3abb4
								
							
						
					
					
						commit
						069c87b960
					
				| @ -18,26 +18,31 @@ const ( | |||||||
| 
 | 
 | ||||||
| type Envelope struct { | type Envelope struct { | ||||||
| 	Expiry uint32 // Whisper protocol specifies int32, really should be int64
 | 	Expiry uint32 // Whisper protocol specifies int32, really should be int64
 | ||||||
| 	Ttl    uint32 // ^^^^^^
 | 	TTL    uint32 // ^^^^^^
 | ||||||
| 	Topics [][]byte | 	Topics [][]byte | ||||||
| 	Data   []byte | 	Data   []byte | ||||||
| 	Nonce  uint32 | 	Nonce  uint32 | ||||||
| 
 | 
 | ||||||
| 	hash Hash | 	hash common.Hash | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (self *Envelope) Hash() Hash { | func (self *Envelope) Hash() common.Hash { | ||||||
| 	if self.hash == EmptyHash { | 	if (self.hash == common.Hash{}) { | ||||||
| 		enc, _ := rlp.EncodeToBytes(self) | 		enc, _ := rlp.EncodeToBytes(self) | ||||||
| 		self.hash = H(crypto.Sha3(enc)) | 		self.hash = crypto.Sha3Hash(enc) | ||||||
| 	} | 	} | ||||||
| 	return self.hash | 	return self.hash | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func NewEnvelope(ttl time.Duration, topics [][]byte, data *Message) *Envelope { | func NewEnvelope(ttl time.Duration, topics [][]byte, data *Message) *Envelope { | ||||||
| 	exp := time.Now().Add(ttl) | 	exp := time.Now().Add(ttl) | ||||||
| 
 | 	return &Envelope{ | ||||||
| 	return &Envelope{uint32(exp.Unix()), uint32(ttl.Seconds()), topics, data.Bytes(), 0, Hash{}} | 		Expiry: uint32(exp.Unix()), | ||||||
|  | 		TTL:    uint32(ttl.Seconds()), | ||||||
|  | 		Topics: topics, | ||||||
|  | 		Data:   data.Bytes(), | ||||||
|  | 		Nonce:  0, | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (self *Envelope) Seal(pow time.Duration) { | func (self *Envelope) Seal(pow time.Duration) { | ||||||
| @ -104,7 +109,7 @@ func (self *Envelope) valid() bool { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (self *Envelope) withoutNonce() interface{} { | func (self *Envelope) withoutNonce() interface{} { | ||||||
| 	return []interface{}{self.Expiry, self.Ttl, self.Topics, self.Data} | 	return []interface{}{self.Expiry, self.TTL, self.Topics, self.Data} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // rlpenv is an Envelope but is not an rlp.Decoder.
 | // rlpenv is an Envelope but is not an rlp.Decoder.
 | ||||||
| @ -119,6 +124,6 @@ func (self *Envelope) DecodeRLP(s *rlp.Stream) error { | |||||||
| 	if err := rlp.DecodeBytes(raw, (*rlpenv)(self)); err != nil { | 	if err := rlp.DecodeBytes(raw, (*rlpenv)(self)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	self.hash = H(crypto.Sha3(raw)) | 	self.hash = crypto.Sha3Hash(raw) | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,6 +1,10 @@ | |||||||
| package whisper | package whisper | ||||||
| 
 | 
 | ||||||
| import "sort" | import ( | ||||||
|  | 	"sort" | ||||||
|  | 
 | ||||||
|  | 	"github.com/ethereum/go-ethereum/common" | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| type sortedKeys struct { | type sortedKeys struct { | ||||||
| 	k []int32 | 	k []int32 | ||||||
| @ -10,7 +14,7 @@ func (self *sortedKeys) Len() int           { return len(self.k) } | |||||||
| func (self *sortedKeys) Less(i, j int) bool { return self.k[i] < self.k[j] } | func (self *sortedKeys) Less(i, j int) bool { return self.k[i] < self.k[j] } | ||||||
| func (self *sortedKeys) Swap(i, j int)      { self.k[i], self.k[j] = self.k[j], self.k[i] } | func (self *sortedKeys) Swap(i, j int)      { self.k[i], self.k[j] = self.k[j], self.k[i] } | ||||||
| 
 | 
 | ||||||
| func sortKeys(m map[int32]Hash) []int32 { | func sortKeys(m map[int32]common.Hash) []int32 { | ||||||
| 	sorted := new(sortedKeys) | 	sorted := new(sortedKeys) | ||||||
| 	sorted.k = make([]int32, len(m)) | 	sorted.k = make([]int32, len(m)) | ||||||
| 	i := 0 | 	i := 0 | ||||||
|  | |||||||
| @ -1,13 +1,17 @@ | |||||||
| package whisper | package whisper | ||||||
| 
 | 
 | ||||||
| import "testing" | import ( | ||||||
|  | 	"testing" | ||||||
|  | 
 | ||||||
|  | 	"github.com/ethereum/go-ethereum/common" | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| func TestSorting(t *testing.T) { | func TestSorting(t *testing.T) { | ||||||
| 	m := map[int32]Hash{ | 	m := map[int32]common.Hash{ | ||||||
| 		1: HS("1"), | 		1: {1}, | ||||||
| 		3: HS("3"), | 		3: {3}, | ||||||
| 		2: HS("2"), | 		2: {2}, | ||||||
| 		5: HS("5"), | 		5: {5}, | ||||||
| 	} | 	} | ||||||
| 	exp := []int32{1, 2, 3, 5} | 	exp := []int32{1, 2, 3, 5} | ||||||
| 	res := sortKeys(m) | 	res := sortKeys(m) | ||||||
|  | |||||||
| @ -1,12 +1,12 @@ | |||||||
| package whisper | package whisper | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"bytes" |  | ||||||
| 	"crypto/ecdsa" | 	"crypto/ecdsa" | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"sync" | 	"sync" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
|  | 	"github.com/ethereum/go-ethereum/common" | ||||||
| 	"github.com/ethereum/go-ethereum/crypto" | 	"github.com/ethereum/go-ethereum/crypto" | ||||||
| 	"github.com/ethereum/go-ethereum/crypto/ecies" | 	"github.com/ethereum/go-ethereum/crypto/ecies" | ||||||
| 	"github.com/ethereum/go-ethereum/event/filter" | 	"github.com/ethereum/go-ethereum/event/filter" | ||||||
| @ -15,26 +15,6 @@ import ( | |||||||
| 	"gopkg.in/fatih/set.v0" | 	"gopkg.in/fatih/set.v0" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // MOVE ME
 |  | ||||||
| type Hash struct { |  | ||||||
| 	hash string |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| var EmptyHash Hash |  | ||||||
| 
 |  | ||||||
| func H(hash []byte) Hash { |  | ||||||
| 	return Hash{string(hash)} |  | ||||||
| } |  | ||||||
| func HS(hash string) Hash { |  | ||||||
| 	return Hash{hash} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (self Hash) Compare(other Hash) int { |  | ||||||
| 	return bytes.Compare([]byte(self.hash), []byte(other.hash)) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // MOVE ME END
 |  | ||||||
| 
 |  | ||||||
| const ( | const ( | ||||||
| 	statusMsg    = 0x0 | 	statusMsg    = 0x0 | ||||||
| 	envelopesMsg = 0x01 | 	envelopesMsg = 0x01 | ||||||
| @ -55,7 +35,7 @@ type Whisper struct { | |||||||
| 	filters  *filter.Filters | 	filters  *filter.Filters | ||||||
| 
 | 
 | ||||||
| 	mmu      sync.RWMutex | 	mmu      sync.RWMutex | ||||||
| 	messages map[Hash]*Envelope | 	messages map[common.Hash]*Envelope | ||||||
| 	expiry   map[uint32]*set.SetNonTS | 	expiry   map[uint32]*set.SetNonTS | ||||||
| 
 | 
 | ||||||
| 	quit chan struct{} | 	quit chan struct{} | ||||||
| @ -65,7 +45,7 @@ type Whisper struct { | |||||||
| 
 | 
 | ||||||
| func New() *Whisper { | func New() *Whisper { | ||||||
| 	whisper := &Whisper{ | 	whisper := &Whisper{ | ||||||
| 		messages: make(map[Hash]*Envelope), | 		messages: make(map[common.Hash]*Envelope), | ||||||
| 		filters:  filter.New(), | 		filters:  filter.New(), | ||||||
| 		expiry:   make(map[uint32]*set.SetNonTS), | 		expiry:   make(map[uint32]*set.SetNonTS), | ||||||
| 		quit:     make(chan struct{}), | 		quit:     make(chan struct{}), | ||||||
| @ -239,7 +219,7 @@ func (self *Whisper) expire() { | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		hashSet.Each(func(v interface{}) bool { | 		hashSet.Each(func(v interface{}) bool { | ||||||
| 			delete(self.messages, v.(Hash)) | 			delete(self.messages, v.(common.Hash)) | ||||||
| 			return true | 			return true | ||||||
| 		}) | 		}) | ||||||
| 		self.expiry[then].Clear() | 		self.expiry[then].Clear() | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user