forked from cerc-io/plugeth
added whisper
This commit is contained in:
parent
f111fc0608
commit
afc8b887ab
@ -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 (
|
||||||
@ -28,26 +29,23 @@ type Ethereum struct {
|
|||||||
quit chan bool
|
quit chan bool
|
||||||
|
|
||||||
// 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
|
txPool *core.TxPool
|
||||||
// for later including in the blocks
|
|
||||||
txPool *core.TxPool
|
|
||||||
// The canonical chain
|
|
||||||
chainManager *core.ChainManager
|
chainManager *core.ChainManager
|
||||||
// The block pool
|
blockPool *BlockPool
|
||||||
blockPool *BlockPool
|
whisper *whisper.Whisper
|
||||||
// Event
|
|
||||||
|
server *p2p.Server
|
||||||
eventMux *event.TypeMux
|
eventMux *event.TypeMux
|
||||||
|
txSub event.Subscription
|
||||||
|
blockSub event.Subscription
|
||||||
|
|
||||||
blacklist p2p.Blacklist
|
RpcServer *rpc.JsonRpcServer
|
||||||
server *p2p.Server
|
|
||||||
txSub event.Subscription
|
|
||||||
blockSub event.Subscription
|
|
||||||
|
|
||||||
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)
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user