From 4a0ade4788b0e8d53c6b0eabaf9652643b6a073a Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 8 Jan 2015 21:41:32 +0100 Subject: Fixed some whisper issues --- ui/qt/qwhisper/whisper.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'ui') diff --git a/ui/qt/qwhisper/whisper.go b/ui/qt/qwhisper/whisper.go index 0627acd29..8a064c81c 100644 --- a/ui/qt/qwhisper/whisper.go +++ b/ui/qt/qwhisper/whisper.go @@ -6,10 +6,13 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/whisper" "gopkg.in/qml.v1" ) +var qlogger = logger.NewLogger("QSHH") + func fromHex(s string) []byte { if len(s) > 1 { return ethutil.Hex2Bytes(s[2:]) @@ -36,9 +39,10 @@ func (self *Whisper) SetView(view qml.Object) { func (self *Whisper) Post(payload []string, to, from string, topics []string, priority, ttl uint32) { var data []byte for _, d := range payload { - data = append(data, fromHex(d)...) + data = append(data, ethutil.Hex2Bytes(d)...) } + fmt.Println(payload, data, "from", from, fromHex(from), crypto.ToECDSA(fromHex(from))) msg := whisper.NewMessage(data) envelope, err := msg.Seal(time.Duration(priority*100000), whisper.Opts{ Ttl: time.Duration(ttl), @@ -47,13 +51,13 @@ func (self *Whisper) Post(payload []string, to, from string, topics []string, pr Topics: whisper.TopicsFromString(topics...), }) if err != nil { - fmt.Println(err) + qlogger.Infoln(err) // handle error return } if err := self.Whisper.Send(envelope); err != nil { - fmt.Println(err) + qlogger.Infoln(err) // handle error return } -- cgit v1.2.3 From c9f566269b39780accfb7632b94dd7635be2022b Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 9 Jan 2015 13:28:48 +0100 Subject: merged --- ui/qt/qwhisper/whisper.go | 2 -- 1 file changed, 2 deletions(-) (limited to 'ui') diff --git a/ui/qt/qwhisper/whisper.go b/ui/qt/qwhisper/whisper.go index 8a064c81c..62b68efaf 100644 --- a/ui/qt/qwhisper/whisper.go +++ b/ui/qt/qwhisper/whisper.go @@ -1,7 +1,6 @@ package qwhisper import ( - "fmt" "time" "github.com/ethereum/go-ethereum/crypto" @@ -42,7 +41,6 @@ func (self *Whisper) Post(payload []string, to, from string, topics []string, pr data = append(data, ethutil.Hex2Bytes(d)...) } - fmt.Println(payload, data, "from", from, fromHex(from), crypto.ToECDSA(fromHex(from))) msg := whisper.NewMessage(data) envelope, err := msg.Seal(time.Duration(priority*100000), whisper.Opts{ Ttl: time.Duration(ttl), -- cgit v1.2.3 From f9b0d1a8e738a207e6101b27b667ea390def9f69 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 9 Jan 2015 13:36:47 +0100 Subject: Updated to new ethereum.js api --- ui/qt/qwhisper/whisper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ui') diff --git a/ui/qt/qwhisper/whisper.go b/ui/qt/qwhisper/whisper.go index 62b68efaf..8b4628a1b 100644 --- a/ui/qt/qwhisper/whisper.go +++ b/ui/qt/qwhisper/whisper.go @@ -38,7 +38,7 @@ func (self *Whisper) SetView(view qml.Object) { func (self *Whisper) Post(payload []string, to, from string, topics []string, priority, ttl uint32) { var data []byte for _, d := range payload { - data = append(data, ethutil.Hex2Bytes(d)...) + data = append(data, fromHex(d)...) } msg := whisper.NewMessage(data) -- cgit v1.2.3 From e3da85faedf21a3ddb73a0fa29decf65364e6c39 Mon Sep 17 00:00:00 2001 From: obscuren Date: Sat, 10 Jan 2015 00:51:56 +0100 Subject: Implemented filter for ws + fixes * proper 0xhex * filters fixed * start of filter manager * accounts for ws. Closes #246 --- ui/filter.go | 20 +++++++++++++++----- ui/qt/filter.go | 5 ----- 2 files changed, 15 insertions(+), 10 deletions(-) (limited to 'ui') diff --git a/ui/filter.go b/ui/filter.go index 88faad5ca..e0797dad2 100644 --- a/ui/filter.go +++ b/ui/filter.go @@ -5,6 +5,16 @@ import ( "github.com/ethereum/go-ethereum/ethutil" ) +func fromHex(s string) []byte { + if len(s) > 1 { + if s[0:2] == "0x" { + s = s[2:] + } + return ethutil.Hex2Bytes(s) + } + return nil +} + func NewFilterFromMap(object map[string]interface{}, eth core.EthManager) *core.Filter { filter := core.NewFilter(eth) @@ -20,12 +30,12 @@ func NewFilterFromMap(object map[string]interface{}, eth core.EthManager) *core. if object["to"] != nil { val := ethutil.NewValue(object["to"]) - filter.AddTo(ethutil.Hex2Bytes(val.Str())) + filter.AddTo(fromHex(val.Str())) } if object["from"] != nil { val := ethutil.NewValue(object["from"]) - filter.AddFrom(ethutil.Hex2Bytes(val.Str())) + filter.AddFrom(fromHex(val.Str())) } if object["max"] != nil { @@ -48,11 +58,11 @@ func NewFilterFromMap(object map[string]interface{}, eth core.EthManager) *core. // Conversion methodn func mapToAccountChange(m map[string]interface{}) (d core.AccountChange) { if str, ok := m["id"].(string); ok { - d.Address = ethutil.Hex2Bytes(str) + d.Address = fromHex(str) } if str, ok := m["at"].(string); ok { - d.StateAddress = ethutil.Hex2Bytes(str) + d.StateAddress = fromHex(str) } return @@ -62,7 +72,7 @@ func mapToAccountChange(m map[string]interface{}) (d core.AccountChange) { // ["aabbccdd", {id: "ccddee", at: "11223344"}], "aabbcc", {id: "ccddee", at: "1122"} func makeAltered(v interface{}) (d []core.AccountChange) { if str, ok := v.(string); ok { - d = append(d, core.AccountChange{ethutil.Hex2Bytes(str), nil}) + d = append(d, core.AccountChange{fromHex(str), nil}) } else if obj, ok := v.(map[string]interface{}); ok { d = append(d, mapToAccountChange(obj)) } else if slice, ok := v.([]interface{}); ok { diff --git a/ui/qt/filter.go b/ui/qt/filter.go index c68936401..423d5bd43 100644 --- a/ui/qt/filter.go +++ b/ui/qt/filter.go @@ -1,8 +1,6 @@ package qt import ( - "fmt" - "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/ui" "gopkg.in/qml.v1" @@ -23,13 +21,10 @@ func makeAltered(v interface{}) (d []core.AccountChange) { var s []interface{} qList.Convert(&s) - fmt.Println(s) - d = makeAltered(s) } else if qMap, ok := v.(*qml.Map); ok { var m map[string]interface{} qMap.Convert(&m) - fmt.Println(m) d = makeAltered(m) } -- cgit v1.2.3 From 34689cb3f369ad71164b81d0c05238d78cb67945 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 12 Jan 2015 20:36:45 +0100 Subject: Added manual triggering of filters --- ui/qt/qwhisper/whisper.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'ui') diff --git a/ui/qt/qwhisper/whisper.go b/ui/qt/qwhisper/whisper.go index 8b4628a1b..becb2a29b 100644 --- a/ui/qt/qwhisper/whisper.go +++ b/ui/qt/qwhisper/whisper.go @@ -84,6 +84,10 @@ func (self *Whisper) Watch(opts map[string]interface{}, view *qml.Common) int { return i } +func (self *Whisper) Trigger(id int) { + go self.Whisper.Trigger(id) +} + func filterFromMap(opts map[string]interface{}) (f whisper.Filter) { if to, ok := opts["to"].(string); ok { f.To = crypto.ToECDSA(fromHex(to)) -- cgit v1.2.3 From e3cad04decbbc83a0c956850717cb0ae0b2b3eec Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 13 Jan 2015 13:36:44 +0100 Subject: Fixed whisper messages * Whisper protocol wasn't properly suppling envelope slices * Message history wasn't properly propagated * Added 'Messages' method, filtering any current envelope with the supplied filter. --- ui/qt/qwhisper/message.go | 6 +++--- ui/qt/qwhisper/whisper.go | 12 +++++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) (limited to 'ui') diff --git a/ui/qt/qwhisper/message.go b/ui/qt/qwhisper/message.go index c87647399..3a80381ff 100644 --- a/ui/qt/qwhisper/message.go +++ b/ui/qt/qwhisper/message.go @@ -8,9 +8,9 @@ import ( type Message struct { ref *whisper.Message - Flags int32 - Payload string - From string + Flags int32 `json:"flags"` + Payload string `json:"payload"` + From string `json:"from"` } func ToQMessage(msg *whisper.Message) *Message { diff --git a/ui/qt/qwhisper/whisper.go b/ui/qt/qwhisper/whisper.go index becb2a29b..b904678f4 100644 --- a/ui/qt/qwhisper/whisper.go +++ b/ui/qt/qwhisper/whisper.go @@ -43,7 +43,7 @@ func (self *Whisper) Post(payload []string, to, from string, topics []string, pr msg := whisper.NewMessage(data) envelope, err := msg.Seal(time.Duration(priority*100000), whisper.Opts{ - Ttl: time.Duration(ttl), + Ttl: time.Duration(ttl) * time.Second, To: crypto.ToECDSAPub(fromHex(to)), From: crypto.ToECDSA(fromHex(from)), Topics: whisper.TopicsFromString(topics...), @@ -84,8 +84,14 @@ func (self *Whisper) Watch(opts map[string]interface{}, view *qml.Common) int { return i } -func (self *Whisper) Trigger(id int) { - go self.Whisper.Trigger(id) +func (self *Whisper) Messages(id int) (messages *ethutil.List) { + msgs := self.Whisper.Messages(id) + messages = ethutil.EmptyList() + for _, message := range msgs { + messages.Append(ToQMessage(message)) + } + + return } func filterFromMap(opts map[string]interface{}) (f whisper.Filter) { -- cgit v1.2.3 From 62e0e18030c84fa19f54373ebdf25f7adbc64793 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 14 Jan 2015 18:12:18 +0100 Subject: Changed public whisper api not to reveal temporary private keys --- ui/qt/qwhisper/message.go | 4 ++-- ui/qt/qwhisper/whisper.go | 45 +++++++++++++++++++++++++++------------------ 2 files changed, 29 insertions(+), 20 deletions(-) (limited to 'ui') diff --git a/ui/qt/qwhisper/message.go b/ui/qt/qwhisper/message.go index 3a80381ff..26e72ac93 100644 --- a/ui/qt/qwhisper/message.go +++ b/ui/qt/qwhisper/message.go @@ -17,7 +17,7 @@ func ToQMessage(msg *whisper.Message) *Message { return &Message{ ref: msg, Flags: int32(msg.Flags), - Payload: ethutil.Bytes2Hex(msg.Payload), - From: ethutil.Bytes2Hex(crypto.FromECDSAPub(msg.Recover())), + Payload: "0x" + ethutil.Bytes2Hex(msg.Payload), + From: "0x" + ethutil.Bytes2Hex(crypto.FromECDSAPub(msg.Recover())), } } diff --git a/ui/qt/qwhisper/whisper.go b/ui/qt/qwhisper/whisper.go index b904678f4..644c147b7 100644 --- a/ui/qt/qwhisper/whisper.go +++ b/ui/qt/qwhisper/whisper.go @@ -41,32 +41,41 @@ func (self *Whisper) Post(payload []string, to, from string, topics []string, pr data = append(data, fromHex(d)...) } - msg := whisper.NewMessage(data) - envelope, err := msg.Seal(time.Duration(priority*100000), whisper.Opts{ - Ttl: time.Duration(ttl) * time.Second, - To: crypto.ToECDSAPub(fromHex(to)), - From: crypto.ToECDSA(fromHex(from)), - Topics: whisper.TopicsFromString(topics...), - }) - if err != nil { - qlogger.Infoln(err) - // handle error - return - } + pk := crypto.ToECDSAPub(fromHex(from)) + if key := self.Whisper.GetIdentity(pk); key != nil { + msg := whisper.NewMessage(data) + envelope, err := msg.Seal(time.Duration(priority*100000), whisper.Opts{ + Ttl: time.Duration(ttl) * time.Second, + To: crypto.ToECDSAPub(fromHex(to)), + From: key, + Topics: whisper.TopicsFromString(topics...), + }) + + if err != nil { + qlogger.Infoln(err) + // handle error + return + } - if err := self.Whisper.Send(envelope); err != nil { - qlogger.Infoln(err) - // handle error - return + if err := self.Whisper.Send(envelope); err != nil { + qlogger.Infoln(err) + // handle error + return + } + } else { + qlogger.Infoln("unmatched pub / priv for seal") } + } func (self *Whisper) NewIdentity() string { - return toHex(self.Whisper.NewIdentity().D.Bytes()) + key := self.Whisper.NewIdentity() + + return toHex(crypto.FromECDSAPub(&key.PublicKey)) } func (self *Whisper) HasIdentity(key string) bool { - return self.Whisper.HasIdentity(crypto.ToECDSA(fromHex(key))) + return self.Whisper.HasIdentity(crypto.ToECDSAPub(fromHex(key))) } func (self *Whisper) Watch(opts map[string]interface{}, view *qml.Common) int { -- cgit v1.2.3