From afc8b887abfbfeaec5040a39f0f20d3071902abe Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Dec 2014 12:01:55 +0100 Subject: [PATCH] added whisper --- eth/backend.go | 37 +++++++++++++++++++------------------ whisper/whisper.go | 26 ++++++++++++++++---------- 2 files changed, 35 insertions(+), 28 deletions(-) diff --git a/eth/backend.go b/eth/backend.go index bdd5956a35..0bdeeea2af 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum/go-ethereum/pow/ezp" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/state" + "github.com/ethereum/go-ethereum/whisper" ) const ( @@ -28,26 +29,23 @@ type Ethereum struct { quit chan bool // DB interface - db ethutil.Database + db ethutil.Database + blacklist p2p.Blacklist + + //*** SERVICES *** // State manager for processing new blocks and managing the over all states blockManager *core.BlockManager - // The transaction pool. Transaction can be pushed on this pool - // for later including in the blocks - txPool *core.TxPool - // The canonical chain + txPool *core.TxPool chainManager *core.ChainManager - // The block pool - blockPool *BlockPool - // Event + blockPool *BlockPool + whisper *whisper.Whisper + + server *p2p.Server eventMux *event.TypeMux + txSub event.Subscription + blockSub event.Subscription - blacklist p2p.Blacklist - server *p2p.Server - txSub event.Subscription - blockSub event.Subscription - - RpcServer *rpc.JsonRpcServer - + RpcServer *rpc.JsonRpcServer keyManager *crypto.KeyManager clientIdentity p2p.ClientIdentity @@ -73,7 +71,7 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke db: db, keyManager: keyManager, clientIdentity: identity, - blacklist: p2p.NewBlocklist(), + blacklist: p2p.NewBlacklist(), eventMux: &event.TypeMux{}, filters: make(map[int]*core.Filter), } @@ -82,12 +80,13 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke eth.chainManager = core.NewChainManager(eth.EventMux()) eth.blockManager = core.NewBlockManager(eth) eth.chainManager.SetProcessor(eth.blockManager) + eth.whisper = whisper.New() hasBlock := eth.chainManager.HasBlock insertChain := eth.chainManager.InsertChain eth.blockPool = NewBlockPool(hasBlock, insertChain, ezp.Verify) - // Start the tx pool + // Start services eth.txPool.Start() ethProto := EthProtocol(eth.txPool, eth.chainManager, eth.blockPool) @@ -98,7 +97,7 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke MaxPeers: maxPeers, Protocols: protocols, ListenAddr: ":" + port, - Blacklist: blacklist, + Blacklist: eth.blacklist, NAT: nat, } @@ -162,6 +161,7 @@ func (s *Ethereum) Start(seed bool) error { return err } s.blockPool.Start() + s.whisper.Start() go s.filterLoop() @@ -211,6 +211,7 @@ func (s *Ethereum) Stop() { s.txPool.Stop() s.eventMux.Stop() s.blockPool.Stop() + s.whisper.Stop() logger.Infoln("Server stopped") close(s.shutdownChan) diff --git a/whisper/whisper.go b/whisper/whisper.go index 356debd1c2..1b3f54b679 100644 --- a/whisper/whisper.go +++ b/whisper/whisper.go @@ -4,12 +4,12 @@ import ( "bytes" "crypto/ecdsa" "errors" - "fmt" "sync" "time" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/event/filter" + "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/p2p" "gopkg.in/fatih/set.v0" ) @@ -47,6 +47,8 @@ type MessageEvent struct { const DefaultTtl = 50 * time.Second +var wlogger = logger.NewLogger("SHH") + type Whisper struct { protocol p2p.Protocol filters *filter.Filters @@ -68,16 +70,15 @@ func New() *Whisper { quit: make(chan struct{}), } whisper.filters.Start() - go whisper.update() // XXX TODO REMOVE TESTING CODE - msg := NewMessage([]byte(fmt.Sprintf("Hello world. This is whisper-go. Incase you're wondering; the time is %v", time.Now()))) - envelope, _ := msg.Seal(DefaultPow, Opts{ - Ttl: DefaultTtl, - }) - if err := whisper.Send(envelope); err != nil { - fmt.Println(err) - } + //msg := NewMessage([]byte(fmt.Sprintf("Hello world. This is whisper-go. Incase you're wondering; the time is %v", time.Now()))) + //envelope, _ := msg.Seal(DefaultPow, Opts{ + // Ttl: DefaultTtl, + //}) + //if err := whisper.Send(envelope); err != nil { + // fmt.Println(err) + //} // XXX TODO REMOVE TESTING CODE // p2p whisper sub protocol handler @@ -91,6 +92,11 @@ func New() *Whisper { return whisper } +func (self *Whisper) Start() { + wlogger.Infoln("Whisper started") + go self.update() +} + func (self *Whisper) Stop() { close(self.quit) } @@ -236,7 +242,7 @@ func (self *Whisper) postEvent(envelope *Envelope) { Str1: string(crypto.FromECDSA(key)), Str2: string(crypto.FromECDSAPub(message.Recover())), }, message) } else { - fmt.Println(err) + wlogger.Infoln(err) } } }