added whisper

This commit is contained in:
obscuren 2014-12-15 12:01:55 +01:00
parent f111fc0608
commit afc8b887ab
2 changed files with 35 additions and 28 deletions

View File

@ -14,6 +14,7 @@ import (
"github.com/ethereum/go-ethereum/pow/ezp" "github.com/ethereum/go-ethereum/pow/ezp"
"github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/whisper"
) )
const ( const (
@ -29,25 +30,22 @@ type Ethereum struct {
// DB interface // DB interface
db ethutil.Database db ethutil.Database
blacklist p2p.Blacklist
//*** SERVICES ***
// State manager for processing new blocks and managing the over all states // State manager for processing new blocks and managing the over all states
blockManager *core.BlockManager blockManager *core.BlockManager
// The transaction pool. Transaction can be pushed on this pool
// for later including in the blocks
txPool *core.TxPool txPool *core.TxPool
// The canonical chain
chainManager *core.ChainManager chainManager *core.ChainManager
// The block pool
blockPool *BlockPool blockPool *BlockPool
// Event whisper *whisper.Whisper
eventMux *event.TypeMux
blacklist p2p.Blacklist
server *p2p.Server server *p2p.Server
eventMux *event.TypeMux
txSub event.Subscription txSub event.Subscription
blockSub event.Subscription blockSub event.Subscription
RpcServer *rpc.JsonRpcServer RpcServer *rpc.JsonRpcServer
keyManager *crypto.KeyManager keyManager *crypto.KeyManager
clientIdentity p2p.ClientIdentity clientIdentity p2p.ClientIdentity
@ -73,7 +71,7 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke
db: db, db: db,
keyManager: keyManager, keyManager: keyManager,
clientIdentity: identity, clientIdentity: identity,
blacklist: p2p.NewBlocklist(), blacklist: p2p.NewBlacklist(),
eventMux: &event.TypeMux{}, eventMux: &event.TypeMux{},
filters: make(map[int]*core.Filter), 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.chainManager = core.NewChainManager(eth.EventMux())
eth.blockManager = core.NewBlockManager(eth) eth.blockManager = core.NewBlockManager(eth)
eth.chainManager.SetProcessor(eth.blockManager) eth.chainManager.SetProcessor(eth.blockManager)
eth.whisper = whisper.New()
hasBlock := eth.chainManager.HasBlock hasBlock := eth.chainManager.HasBlock
insertChain := eth.chainManager.InsertChain insertChain := eth.chainManager.InsertChain
eth.blockPool = NewBlockPool(hasBlock, insertChain, ezp.Verify) eth.blockPool = NewBlockPool(hasBlock, insertChain, ezp.Verify)
// Start the tx pool // Start services
eth.txPool.Start() eth.txPool.Start()
ethProto := EthProtocol(eth.txPool, eth.chainManager, eth.blockPool) 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, MaxPeers: maxPeers,
Protocols: protocols, Protocols: protocols,
ListenAddr: ":" + port, ListenAddr: ":" + port,
Blacklist: blacklist, Blacklist: eth.blacklist,
NAT: nat, NAT: nat,
} }
@ -162,6 +161,7 @@ func (s *Ethereum) Start(seed bool) error {
return err return err
} }
s.blockPool.Start() s.blockPool.Start()
s.whisper.Start()
go s.filterLoop() go s.filterLoop()
@ -211,6 +211,7 @@ func (s *Ethereum) Stop() {
s.txPool.Stop() s.txPool.Stop()
s.eventMux.Stop() s.eventMux.Stop()
s.blockPool.Stop() s.blockPool.Stop()
s.whisper.Stop()
logger.Infoln("Server stopped") logger.Infoln("Server stopped")
close(s.shutdownChan) close(s.shutdownChan)

View File

@ -4,12 +4,12 @@ import (
"bytes" "bytes"
"crypto/ecdsa" "crypto/ecdsa"
"errors" "errors"
"fmt"
"sync" "sync"
"time" "time"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/event/filter" "github.com/ethereum/go-ethereum/event/filter"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p"
"gopkg.in/fatih/set.v0" "gopkg.in/fatih/set.v0"
) )
@ -47,6 +47,8 @@ type MessageEvent struct {
const DefaultTtl = 50 * time.Second const DefaultTtl = 50 * time.Second
var wlogger = logger.NewLogger("SHH")
type Whisper struct { type Whisper struct {
protocol p2p.Protocol protocol p2p.Protocol
filters *filter.Filters filters *filter.Filters
@ -68,16 +70,15 @@ func New() *Whisper {
quit: make(chan struct{}), quit: make(chan struct{}),
} }
whisper.filters.Start() whisper.filters.Start()
go whisper.update()
// XXX TODO REMOVE TESTING CODE // 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()))) //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{ //envelope, _ := msg.Seal(DefaultPow, Opts{
Ttl: DefaultTtl, // Ttl: DefaultTtl,
}) //})
if err := whisper.Send(envelope); err != nil { //if err := whisper.Send(envelope); err != nil {
fmt.Println(err) // fmt.Println(err)
} //}
// XXX TODO REMOVE TESTING CODE // XXX TODO REMOVE TESTING CODE
// p2p whisper sub protocol handler // p2p whisper sub protocol handler
@ -91,6 +92,11 @@ func New() *Whisper {
return whisper return whisper
} }
func (self *Whisper) Start() {
wlogger.Infoln("Whisper started")
go self.update()
}
func (self *Whisper) Stop() { func (self *Whisper) Stop() {
close(self.quit) close(self.quit)
} }
@ -236,7 +242,7 @@ func (self *Whisper) postEvent(envelope *Envelope) {
Str1: string(crypto.FromECDSA(key)), Str2: string(crypto.FromECDSAPub(message.Recover())), Str1: string(crypto.FromECDSA(key)), Str2: string(crypto.FromECDSAPub(message.Recover())),
}, message) }, message)
} else { } else {
fmt.Println(err) wlogger.Infoln(err)
} }
} }
} }