From 02017ed0e019ea2692c1e184873d09f41551a0ec Mon Sep 17 00:00:00 2001 From: zelig Date: Sun, 14 Dec 2014 18:03:24 +0000 Subject: initial commit for new backend (eth.Ethereum) --- eth/backend.go | 357 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 357 insertions(+) create mode 100644 eth/backend.go (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go new file mode 100644 index 000000000..9154ca0f5 --- /dev/null +++ b/eth/backend.go @@ -0,0 +1,357 @@ +package eth + +import ( + "encoding/json" + "net" + "path" + "sync" + + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethutil" + "github.com/ethereum/go-ethereum/event" + ethlogger "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/state" +) + +const ( + seedNodeAddress = "poc-7.ethdev.com:30300" +) + +var logger = ethlogger.NewLogger("SERV") + +type Ethereum struct { + // Channel for shutting down the ethereum + shutdownChan chan bool + quit chan bool + + // DB interface + db ethutil.Database + // 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 + chainManager *core.ChainManager + // The block pool + blockPool *BlockPool + // Event + eventMux *event.TypeMux + + // Nonce + Nonce uint64 + + ListenAddr string + + blacklist p2p.Blacklist + server *p2p.Server + txSub event.Subscription + blockSub event.Subscription + + // Capabilities for outgoing peers + // serverCaps Caps + peersFile string + + Mining bool + + RpcServer *rpc.JsonRpcServer + + keyManager *crypto.KeyManager + + clientIdentity p2p.ClientIdentity + + synclock sync.Mutex + syncGroup sync.WaitGroup + + filterMu sync.RWMutex + filterId int + filters map[int]*core.Filter +} + +func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.KeyManager, nat p2p.NAT, port string, maxPeers int) (*Ethereum, error) { + + saveProtocolVersion(db) + ethutil.Config.Db = db + + // FIXME: + blacklist := p2p.NewBlacklist() + // Sorry Py person. I must blacklist. you perform badly + blacklist.Put(ethutil.Hex2Bytes("64656330303561383532336435376331616537643864663236623336313863373537353163636634333530626263396330346237336262623931383064393031")) + + peersFile := path.Join(ethutil.Config.ExecPath, "known_peers.json") + + nonce, _ := ethutil.RandomUint64() + + listenAddr := ":" + port + + eth := &Ethereum{ + shutdownChan: make(chan bool), + quit: make(chan bool), + db: db, + Nonce: nonce, + // serverCaps: caps, + peersFile: peersFile, + ListenAddr: listenAddr, + keyManager: keyManager, + clientIdentity: identity, + blacklist: blacklist, + eventMux: &event.TypeMux{}, + filters: make(map[int]*core.Filter), + } + + eth.txPool = core.NewTxPool(eth) + eth.chainManager = core.NewChainManager(eth.EventMux()) + eth.blockManager = core.NewBlockManager(eth) + eth.chainManager.SetProcessor(eth.blockManager) + + hasBlock := eth.chainManager.HasBlock + insertChain := eth.chainManager.InsertChain + // pow := ezp.New() + // verifyPoW := pow.Verify + verifyPoW := func(*types.Block) bool { return true } + eth.blockPool = NewBlockPool(hasBlock, insertChain, verifyPoW) + + // Start the tx pool + eth.txPool.Start() + + ethProto := EthProtocol(eth.txPool, eth.chainManager, eth.blockPool) + protocols := []p2p.Protocol{ethProto} + + server := &p2p.Server{ + Identity: identity, + MaxPeers: maxPeers, + Protocols: protocols, + ListenAddr: listenAddr, + Blacklist: blacklist, + NAT: nat, + } + + eth.server = server + + return eth, nil +} + +func (s *Ethereum) KeyManager() *crypto.KeyManager { + return s.keyManager +} + +func (s *Ethereum) ClientIdentity() p2p.ClientIdentity { + return s.clientIdentity +} + +func (s *Ethereum) ChainManager() *core.ChainManager { + return s.chainManager +} + +func (s *Ethereum) BlockManager() *core.BlockManager { + return s.blockManager +} + +func (s *Ethereum) TxPool() *core.TxPool { + return s.txPool +} + +func (s *Ethereum) BlockPool() *BlockPool { + return s.blockPool +} + +func (s *Ethereum) EventMux() *event.TypeMux { + return s.eventMux +} +func (self *Ethereum) Db() ethutil.Database { + return self.db +} + +func (s *Ethereum) IsMining() bool { + return s.Mining +} + +func (s *Ethereum) IsListening() bool { + if s.ListenAddr == "" { + return false + } else { + return true + } +} + +func (s *Ethereum) PeerCount() int { + return s.server.PeerCount() +} + +func (s *Ethereum) Peers() []*p2p.Peer { + return s.server.Peers() +} + +// Start the ethereum +func (s *Ethereum) Start(seed bool) error { + err := s.server.Start() + if err != nil { + return err + } + s.blockPool.Start() + s.blockManager.Start() + + go s.filterLoop() + + // broadcast transactions + s.txSub = s.eventMux.Subscribe(core.TxPreEvent{}) + go s.txBroadcastLoop() + + // broadcast mined blocks + s.blockSub = s.eventMux.Subscribe(core.NewMinedBlockEvent{}) + go s.blockBroadcastLoop() + + // TODO: read peers here + if seed { + logger.Infof("Connect to seed node %v", seedNodeAddress) + if err := s.SuggestPeer(seedNodeAddress); err != nil { + return err + } + } + + logger.Infoln("Server started") + return nil +} + +func (self *Ethereum) SuggestPeer(addr string) error { + netaddr, err := net.ResolveTCPAddr("tcp", addr) + if err != nil { + logger.Errorf("couldn't resolve %s:", addr, err) + return err + } + + self.server.SuggestPeer(netaddr.IP, netaddr.Port, nil) + return nil +} + +func (s *Ethereum) Stop() { + // Close the database + defer s.db.Close() + + // + // WritePeers(s.peersFile, s.server.PeerAddresses()) + close(s.quit) + + s.txSub.Unsubscribe() // quits txBroadcastLoop + s.blockSub.Unsubscribe() // quits blockBroadcastLoop + + if s.RpcServer != nil { + s.RpcServer.Stop() + } + s.txPool.Stop() + s.blockManager.Stop() + s.eventMux.Stop() + s.blockPool.Stop() + + logger.Infoln("Server stopped") + close(s.shutdownChan) +} + +// This function will wait for a shutdown and resumes main thread execution +func (s *Ethereum) WaitForShutdown() { + <-s.shutdownChan +} + +func WritePeers(path string, addresses []string) { + if len(addresses) > 0 { + data, _ := json.MarshalIndent(addresses, "", " ") + ethutil.WriteFile(path, data) + } +} + +func ReadPeers(path string) (ips []string, err error) { + var data string + data, err = ethutil.ReadAllFile(path) + if err != nil { + json.Unmarshal([]byte(data), &ips) + } + return +} + +// now tx broadcasting is taken out of txPool +// handled here via subscription, efficiency? +func (self *Ethereum) txBroadcastLoop() { + // automatically stops if unsubscribe + for obj := range self.txSub.Chan() { + event := obj.(core.TxPreEvent) + self.server.Broadcast("eth", TxMsg, []interface{}{event.Tx.RlpData()}) + } +} + +func (self *Ethereum) blockBroadcastLoop() { + // automatically stops if unsubscribe + for obj := range self.txSub.Chan() { + event := obj.(core.NewMinedBlockEvent) + self.server.Broadcast("eth", NewBlockMsg, event.Block.Value().Val) + } +} + +func saveProtocolVersion(db ethutil.Database) { + d, _ := db.Get([]byte("ProtocolVersion")) + protocolVersion := ethutil.NewValue(d).Uint() + + if protocolVersion == 0 { + db.Put([]byte("ProtocolVersion"), ethutil.NewValue(ProtocolVersion).Bytes()) + } +} + +// InstallFilter adds filter for blockchain events. +// The filter's callbacks will run for matching blocks and messages. +// The filter should not be modified after it has been installed. +func (self *Ethereum) InstallFilter(filter *core.Filter) (id int) { + self.filterMu.Lock() + id = self.filterId + self.filters[id] = filter + self.filterId++ + self.filterMu.Unlock() + return id +} + +func (self *Ethereum) UninstallFilter(id int) { + self.filterMu.Lock() + delete(self.filters, id) + self.filterMu.Unlock() +} + +// GetFilter retrieves a filter installed using InstallFilter. +// The filter may not be modified. +func (self *Ethereum) GetFilter(id int) *core.Filter { + self.filterMu.RLock() + defer self.filterMu.RUnlock() + return self.filters[id] +} + +func (self *Ethereum) filterLoop() { + // Subscribe to events + events := self.eventMux.Subscribe(core.NewBlockEvent{}, state.Messages(nil)) + for event := range events.Chan() { + switch event.(type) { + case core.NewBlockEvent: + self.filterMu.RLock() + for _, filter := range self.filters { + if filter.BlockCallback != nil { + e := event.(core.NewBlockEvent) + filter.BlockCallback(e.Block) + } + } + self.filterMu.RUnlock() + case state.Messages: + self.filterMu.RLock() + for _, filter := range self.filters { + if filter.MessageCallback != nil { + e := event.(state.Messages) + msgs := filter.FilterMessages(e) + if len(msgs) > 0 { + filter.MessageCallback(msgs) + } + } + } + self.filterMu.RUnlock() + } + } +} -- cgit v1.2.3 From e77b720ead2e8f91f6f98664a66953c3826269c6 Mon Sep 17 00:00:00 2001 From: zelig Date: Sun, 14 Dec 2014 19:35:54 +0000 Subject: blockmanager start/stop obsolete --- eth/backend.go | 2 -- 1 file changed, 2 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 9154ca0f5..a7824e5d7 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -194,7 +194,6 @@ func (s *Ethereum) Start(seed bool) error { return err } s.blockPool.Start() - s.blockManager.Start() go s.filterLoop() @@ -244,7 +243,6 @@ func (s *Ethereum) Stop() { s.RpcServer.Stop() } s.txPool.Stop() - s.blockManager.Stop() s.eventMux.Stop() s.blockPool.Stop() -- cgit v1.2.3 From 4c89d5331f41fa93e6840893c6727b05eabe5f99 Mon Sep 17 00:00:00 2001 From: zelig Date: Sun, 14 Dec 2014 20:08:24 +0000 Subject: adapt blockpool/backend to use pow/ezp with pow.Block for VerifyPoW func --- eth/backend.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index a7824e5d7..6235fc824 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -7,12 +7,12 @@ import ( "sync" "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/event" ethlogger "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/pow/ezp" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/state" ) @@ -111,9 +111,8 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke hasBlock := eth.chainManager.HasBlock insertChain := eth.chainManager.InsertChain - // pow := ezp.New() - // verifyPoW := pow.Verify - verifyPoW := func(*types.Block) bool { return true } + pow := ezp.New() + verifyPoW := pow.Verify eth.blockPool = NewBlockPool(hasBlock, insertChain, verifyPoW) // Start the tx pool -- cgit v1.2.3 From f111fc060884d69fbe46066b9ccae4c9aa5da890 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Dec 2014 11:37:23 +0100 Subject: WIP --- eth/backend.go | 53 ++++++++++------------------------------------------- 1 file changed, 10 insertions(+), 43 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 6235fc824..bdd5956a3 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -3,7 +3,6 @@ package eth import ( "encoding/json" "net" - "path" "sync" "github.com/ethereum/go-ethereum/core" @@ -32,7 +31,6 @@ type Ethereum struct { db ethutil.Database // 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 @@ -43,22 +41,11 @@ type Ethereum struct { // Event eventMux *event.TypeMux - // Nonce - Nonce uint64 - - ListenAddr string - blacklist p2p.Blacklist server *p2p.Server txSub event.Subscription blockSub event.Subscription - // Capabilities for outgoing peers - // serverCaps Caps - peersFile string - - Mining bool - RpcServer *rpc.JsonRpcServer keyManager *crypto.KeyManager @@ -71,6 +58,8 @@ type Ethereum struct { filterMu sync.RWMutex filterId int filters map[int]*core.Filter + + Mining bool } func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.KeyManager, nat p2p.NAT, port string, maxPeers int) (*Ethereum, error) { @@ -78,28 +67,13 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke saveProtocolVersion(db) ethutil.Config.Db = db - // FIXME: - blacklist := p2p.NewBlacklist() - // Sorry Py person. I must blacklist. you perform badly - blacklist.Put(ethutil.Hex2Bytes("64656330303561383532336435376331616537643864663236623336313863373537353163636634333530626263396330346237336262623931383064393031")) - - peersFile := path.Join(ethutil.Config.ExecPath, "known_peers.json") - - nonce, _ := ethutil.RandomUint64() - - listenAddr := ":" + port - eth := &Ethereum{ - shutdownChan: make(chan bool), - quit: make(chan bool), - db: db, - Nonce: nonce, - // serverCaps: caps, - peersFile: peersFile, - ListenAddr: listenAddr, + shutdownChan: make(chan bool), + quit: make(chan bool), + db: db, keyManager: keyManager, clientIdentity: identity, - blacklist: blacklist, + blacklist: p2p.NewBlocklist(), eventMux: &event.TypeMux{}, filters: make(map[int]*core.Filter), } @@ -111,9 +85,7 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke hasBlock := eth.chainManager.HasBlock insertChain := eth.chainManager.InsertChain - pow := ezp.New() - verifyPoW := pow.Verify - eth.blockPool = NewBlockPool(hasBlock, insertChain, verifyPoW) + eth.blockPool = NewBlockPool(hasBlock, insertChain, ezp.Verify) // Start the tx pool eth.txPool.Start() @@ -125,7 +97,7 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke Identity: identity, MaxPeers: maxPeers, Protocols: protocols, - ListenAddr: listenAddr, + ListenAddr: ":" + port, Blacklist: blacklist, NAT: nat, } @@ -171,11 +143,8 @@ func (s *Ethereum) IsMining() bool { } func (s *Ethereum) IsListening() bool { - if s.ListenAddr == "" { - return false - } else { - return true - } + // XXX TODO + return false } func (s *Ethereum) PeerCount() int { @@ -231,8 +200,6 @@ func (s *Ethereum) Stop() { // Close the database defer s.db.Close() - // - // WritePeers(s.peersFile, s.server.PeerAddresses()) close(s.quit) s.txSub.Unsubscribe() // quits txBroadcastLoop -- cgit v1.2.3 From afc8b887abfbfeaec5040a39f0f20d3071902abe Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Dec 2014 12:01:55 +0100 Subject: added whisper --- eth/backend.go | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index bdd5956a3..0bdeeea2a 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 - eventMux *event.TypeMux + blockPool *BlockPool + whisper *whisper.Whisper - blacklist p2p.Blacklist - server *p2p.Server - txSub event.Subscription - blockSub event.Subscription - - RpcServer *rpc.JsonRpcServer + server *p2p.Server + eventMux *event.TypeMux + txSub event.Subscription + blockSub event.Subscription + 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) -- cgit v1.2.3 From 6c168c8f2220df0cfd9f9e97ba5cfd6e351bf44e Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Dec 2014 12:02:24 +0100 Subject: added protocol handler --- eth/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 0bdeeea2a..f3f25d7b5 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -90,7 +90,7 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke eth.txPool.Start() ethProto := EthProtocol(eth.txPool, eth.chainManager, eth.blockPool) - protocols := []p2p.Protocol{ethProto} + protocols := []p2p.Protocol{ethProto, eth.whisper.Protocol()} server := &p2p.Server{ Identity: identity, -- cgit v1.2.3 From 4b5ad31b3ab8e1370233be6479e7476bc0019080 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Dec 2014 12:07:46 +0100 Subject: WIP --- eth/backend.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index f3f25d7b5..5b7dc6435 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/event/filter" ethlogger "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/pow/ezp" @@ -53,9 +54,10 @@ type Ethereum struct { synclock sync.Mutex syncGroup sync.WaitGroup - filterMu sync.RWMutex - filterId int - filters map[int]*core.Filter + filterManager *filter.FilterManager + //filterMu sync.RWMutex + //filterId int + //filters map[int]*core.Filter Mining bool } -- cgit v1.2.3 From cdb2ebbdfa510294b8443e33c32f9e0ec414f78e Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Dec 2014 12:08:10 +0100 Subject: Added old filter. Needs some refactoring --- eth/backend.go | 63 ++++++---------------------------------------------------- 1 file changed, 6 insertions(+), 57 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 5b7dc6435..fb401a68d 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -14,7 +14,6 @@ import ( "github.com/ethereum/go-ethereum/p2p" "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" ) @@ -75,7 +74,6 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke clientIdentity: identity, blacklist: p2p.NewBlacklist(), eventMux: &event.TypeMux{}, - filters: make(map[int]*core.Filter), } eth.txPool = core.NewTxPool(eth) @@ -83,6 +81,7 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke eth.blockManager = core.NewBlockManager(eth) eth.chainManager.SetProcessor(eth.blockManager) eth.whisper = whisper.New() + eth.filterManager = filter.NewFilterManager(eth.EventMux()) hasBlock := eth.chainManager.HasBlock insertChain := eth.chainManager.InsertChain @@ -164,8 +163,7 @@ func (s *Ethereum) Start(seed bool) error { } s.blockPool.Start() s.whisper.Start() - - go s.filterLoop() + s.filterManager.Start() // broadcast transactions s.txSub = s.eventMux.Subscribe(core.TxPreEvent{}) @@ -267,58 +265,9 @@ func saveProtocolVersion(db ethutil.Database) { } } -// InstallFilter adds filter for blockchain events. -// The filter's callbacks will run for matching blocks and messages. -// The filter should not be modified after it has been installed. +// XXX Refactor me & MOVE func (self *Ethereum) InstallFilter(filter *core.Filter) (id int) { - self.filterMu.Lock() - id = self.filterId - self.filters[id] = filter - self.filterId++ - self.filterMu.Unlock() - return id -} - -func (self *Ethereum) UninstallFilter(id int) { - self.filterMu.Lock() - delete(self.filters, id) - self.filterMu.Unlock() -} - -// GetFilter retrieves a filter installed using InstallFilter. -// The filter may not be modified. -func (self *Ethereum) GetFilter(id int) *core.Filter { - self.filterMu.RLock() - defer self.filterMu.RUnlock() - return self.filters[id] -} - -func (self *Ethereum) filterLoop() { - // Subscribe to events - events := self.eventMux.Subscribe(core.NewBlockEvent{}, state.Messages(nil)) - for event := range events.Chan() { - switch event.(type) { - case core.NewBlockEvent: - self.filterMu.RLock() - for _, filter := range self.filters { - if filter.BlockCallback != nil { - e := event.(core.NewBlockEvent) - filter.BlockCallback(e.Block) - } - } - self.filterMu.RUnlock() - case state.Messages: - self.filterMu.RLock() - for _, filter := range self.filters { - if filter.MessageCallback != nil { - e := event.(state.Messages) - msgs := filter.FilterMessages(e) - if len(msgs) > 0 { - filter.MessageCallback(msgs) - } - } - } - self.filterMu.RUnlock() - } - } + return self.filterManager.InstallFilter(filter) } +func (self *Ethereum) UninstallFilter(id int) { self.filterManager.UninstallFilter(id) } +func (self *Ethereum) GetFilter(id int) *core.Filter { return self.filterManager.GetFilter(id) } -- cgit v1.2.3 From 96272e19a6b7a3163ec53f45e04407e9d2ff8414 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Dec 2014 12:34:06 +0100 Subject: removed filter manager from base --- eth/backend.go | 15 --------------- 1 file changed, 15 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index fb401a68d..3ec36d3fc 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -9,7 +9,6 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/event" - "github.com/ethereum/go-ethereum/event/filter" ethlogger "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/pow/ezp" @@ -53,11 +52,6 @@ type Ethereum struct { synclock sync.Mutex syncGroup sync.WaitGroup - filterManager *filter.FilterManager - //filterMu sync.RWMutex - //filterId int - //filters map[int]*core.Filter - Mining bool } @@ -81,7 +75,6 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke eth.blockManager = core.NewBlockManager(eth) eth.chainManager.SetProcessor(eth.blockManager) eth.whisper = whisper.New() - eth.filterManager = filter.NewFilterManager(eth.EventMux()) hasBlock := eth.chainManager.HasBlock insertChain := eth.chainManager.InsertChain @@ -163,7 +156,6 @@ func (s *Ethereum) Start(seed bool) error { } s.blockPool.Start() s.whisper.Start() - s.filterManager.Start() // broadcast transactions s.txSub = s.eventMux.Subscribe(core.TxPreEvent{}) @@ -264,10 +256,3 @@ func saveProtocolVersion(db ethutil.Database) { db.Put([]byte("ProtocolVersion"), ethutil.NewValue(ProtocolVersion).Bytes()) } } - -// XXX Refactor me & MOVE -func (self *Ethereum) InstallFilter(filter *core.Filter) (id int) { - return self.filterManager.InstallFilter(filter) -} -func (self *Ethereum) UninstallFilter(id int) { self.filterManager.UninstallFilter(id) } -func (self *Ethereum) GetFilter(id int) *core.Filter { return self.filterManager.GetFilter(id) } -- cgit v1.2.3 From c7bc684909ab3d135d25a718d5ff2c725816e0fc Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Dec 2014 12:35:21 +0100 Subject: Moved peer helper metheds --- eth/backend.go | 17 ----------------- 1 file changed, 17 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 3ec36d3fc..1d991b9ef 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -1,7 +1,6 @@ package eth import ( - "encoding/json" "net" "sync" @@ -214,22 +213,6 @@ func (s *Ethereum) WaitForShutdown() { <-s.shutdownChan } -func WritePeers(path string, addresses []string) { - if len(addresses) > 0 { - data, _ := json.MarshalIndent(addresses, "", " ") - ethutil.WriteFile(path, data) - } -} - -func ReadPeers(path string) (ips []string, err error) { - var data string - data, err = ethutil.ReadAllFile(path) - if err != nil { - json.Unmarshal([]byte(data), &ips) - } - return -} - // now tx broadcasting is taken out of txPool // handled here via subscription, efficiency? func (self *Ethereum) txBroadcastLoop() { -- cgit v1.2.3 From 56dac74f71d4d1fffa3e240c7d3cee803dec788d Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Dec 2014 13:00:09 +0100 Subject: made mist in a compilable, workable state using the new refactored packages --- eth/backend.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 1d991b9ef..e275238bd 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -147,6 +147,10 @@ func (s *Ethereum) Peers() []*p2p.Peer { return s.server.Peers() } +func (s *Ethereum) MaxPeers() int { + return s.server.MaxPeers +} + // Start the ethereum func (s *Ethereum) Start(seed bool) error { err := s.server.Start() -- cgit v1.2.3 From 6ff9d5770b332da6d767bc315a54c5a815143aff Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Dec 2014 17:09:14 +0100 Subject: Added whisper handler --- eth/backend.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index e275238bd..ef82a5bfc 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -123,6 +123,10 @@ func (s *Ethereum) BlockPool() *BlockPool { return s.blockPool } +func (s *Ethereum) Whisper() *whisper.Whisper { + return s.whisper +} + func (s *Ethereum) EventMux() *event.TypeMux { return s.eventMux } -- cgit v1.2.3 From 0dc566124aee24cf3f01b4e586bde7752da89824 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 18 Dec 2014 13:22:59 +0100 Subject: Merge fixes --- eth/backend.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index ef82a5bfc..0aad6a514 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -69,9 +69,9 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke eventMux: &event.TypeMux{}, } - eth.txPool = core.NewTxPool(eth) eth.chainManager = core.NewChainManager(eth.EventMux()) - eth.blockManager = core.NewBlockManager(eth) + eth.txPool = core.NewTxPool(eth.chainManager, eth.EventMux()) + eth.blockManager = core.NewBlockManager(eth.txPool, eth.chainManager, eth.EventMux()) eth.chainManager.SetProcessor(eth.blockManager) eth.whisper = whisper.New() -- cgit v1.2.3 From 4cd79d8ddd7608d60344b13fe4bda7315429d1d9 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 23 Dec 2014 13:48:44 +0100 Subject: Refactored block & Transaction * Includes new rlp decoder --- eth/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 0aad6a514..383cda46f 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -235,7 +235,7 @@ func (self *Ethereum) blockBroadcastLoop() { // automatically stops if unsubscribe for obj := range self.txSub.Chan() { event := obj.(core.NewMinedBlockEvent) - self.server.Broadcast("eth", NewBlockMsg, event.Block.Value().Val) + self.server.Broadcast("eth", NewBlockMsg, event.Block.RlpData()) } } -- cgit v1.2.3 From d336e24dcec2bb2cb89fff76302882aa82124dc8 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 2 Jan 2015 12:26:55 +0100 Subject: Removed the need of having a backend for the tx pool --- eth/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 383cda46f..78c2159c0 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -70,7 +70,7 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke } eth.chainManager = core.NewChainManager(eth.EventMux()) - eth.txPool = core.NewTxPool(eth.chainManager, eth.EventMux()) + eth.txPool = core.NewTxPool(eth.EventMux()) eth.blockManager = core.NewBlockManager(eth.txPool, eth.chainManager, eth.EventMux()) eth.chainManager.SetProcessor(eth.blockManager) eth.whisper = whisper.New() -- cgit v1.2.3 From 16f417f5af16de8f1c2c140f8b249bd989200bd3 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 2 Jan 2015 22:19:58 +0100 Subject: Fixed bug where logging could crash client during tx adding --- eth/backend.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 78c2159c0..36c1ac30f 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -234,8 +234,10 @@ func (self *Ethereum) txBroadcastLoop() { func (self *Ethereum) blockBroadcastLoop() { // automatically stops if unsubscribe for obj := range self.txSub.Chan() { - event := obj.(core.NewMinedBlockEvent) - self.server.Broadcast("eth", NewBlockMsg, event.Block.RlpData()) + switch ev := obj.(type) { + case core.NewMinedBlockEvent: + self.server.Broadcast("eth", NewBlockMsg, ev.Block.RlpData()) + } } } -- cgit v1.2.3 From 09841b1c9b2553a4572590128580df37c8fa83ad Mon Sep 17 00:00:00 2001 From: obscuren Date: Sun, 4 Jan 2015 14:20:16 +0100 Subject: Cleaned up some of that util --- eth/backend.go | 90 +++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 74 insertions(+), 16 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 36c1ac30f..bf6c91282 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -1,11 +1,13 @@ package eth import ( + "fmt" "net" "sync" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/event" ethlogger "github.com/ethereum/go-ethereum/logger" @@ -19,6 +21,24 @@ const ( seedNodeAddress = "poc-7.ethdev.com:30300" ) +type Config struct { + Name string + Version string + Identifier string + KeyStore string + DataDir string + LogFile string + LogLevel int + KeyRing string + + MaxPeers int + Port string + NATType string + PMPGateway string + + KeyManager *crypto.KeyManager +} + var logger = ethlogger.NewLogger("SERV") type Ethereum struct { @@ -38,7 +58,7 @@ type Ethereum struct { blockPool *BlockPool whisper *whisper.Whisper - server *p2p.Server + net *p2p.Server eventMux *event.TypeMux txSub event.Subscription blockSub event.Subscription @@ -47,6 +67,7 @@ type Ethereum struct { keyManager *crypto.KeyManager clientIdentity p2p.ClientIdentity + logger ethlogger.LogSystem synclock sync.Mutex syncGroup sync.WaitGroup @@ -54,7 +75,36 @@ type Ethereum struct { Mining bool } -func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.KeyManager, nat p2p.NAT, port string, maxPeers int) (*Ethereum, error) { +func New(config *Config) (*Ethereum, error) { + // Boostrap database + logger := ethlogger.New(config.DataDir, config.LogFile, config.LogLevel) + db, err := ethdb.NewLDBDatabase("database") + if err != nil { + return nil, err + } + + // Perform database sanity checks + d, _ := db.Get([]byte("ProtocolVersion")) + protov := ethutil.NewValue(d).Uint() + if protov != ProtocolVersion && protov != 0 { + return nil, fmt.Errorf("Database version mismatch. Protocol(%d / %d). `rm -rf %s`", protov, ProtocolVersion, ethutil.Config.ExecPath+"/database") + } + + // Create new keymanager + var keyManager *crypto.KeyManager + switch config.KeyStore { + case "db": + keyManager = crypto.NewDBKeyManager(db) + case "file": + keyManager = crypto.NewFileKeyManager(config.DataDir) + default: + return nil, fmt.Errorf("unknown keystore type: %s", config.KeyStore) + } + // Initialise the keyring + keyManager.Init(config.KeyRing, 0, false) + + // Create a new client id for this instance. This will help identifying the node on the network + clientId := p2p.NewSimpleClientIdentity(config.Name, config.Version, config.Identifier, keyManager.PublicKey()) saveProtocolVersion(db) ethutil.Config.Db = db @@ -64,9 +114,10 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke quit: make(chan bool), db: db, keyManager: keyManager, - clientIdentity: identity, + clientIdentity: clientId, blacklist: p2p.NewBlacklist(), eventMux: &event.TypeMux{}, + logger: logger, } eth.chainManager = core.NewChainManager(eth.EventMux()) @@ -85,17 +136,20 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke ethProto := EthProtocol(eth.txPool, eth.chainManager, eth.blockPool) protocols := []p2p.Protocol{ethProto, eth.whisper.Protocol()} - server := &p2p.Server{ - Identity: identity, - MaxPeers: maxPeers, + nat, err := p2p.ParseNAT(config.NATType, config.PMPGateway) + if err != nil { + return nil, err + } + + eth.net = &p2p.Server{ + Identity: clientId, + MaxPeers: config.MaxPeers, Protocols: protocols, - ListenAddr: ":" + port, + ListenAddr: ":" + config.Port, Blacklist: eth.blacklist, NAT: nat, } - eth.server = server - return eth, nil } @@ -103,6 +157,10 @@ func (s *Ethereum) KeyManager() *crypto.KeyManager { return s.keyManager } +func (s *Ethereum) Logger() ethlogger.LogSystem { + return s.logger +} + func (s *Ethereum) ClientIdentity() p2p.ClientIdentity { return s.clientIdentity } @@ -144,20 +202,20 @@ func (s *Ethereum) IsListening() bool { } func (s *Ethereum) PeerCount() int { - return s.server.PeerCount() + return s.net.PeerCount() } func (s *Ethereum) Peers() []*p2p.Peer { - return s.server.Peers() + return s.net.Peers() } func (s *Ethereum) MaxPeers() int { - return s.server.MaxPeers + return s.net.MaxPeers } // Start the ethereum func (s *Ethereum) Start(seed bool) error { - err := s.server.Start() + err := s.net.Start() if err != nil { return err } @@ -191,7 +249,7 @@ func (self *Ethereum) SuggestPeer(addr string) error { return err } - self.server.SuggestPeer(netaddr.IP, netaddr.Port, nil) + self.net.SuggestPeer(netaddr.IP, netaddr.Port, nil) return nil } @@ -227,7 +285,7 @@ func (self *Ethereum) txBroadcastLoop() { // automatically stops if unsubscribe for obj := range self.txSub.Chan() { event := obj.(core.TxPreEvent) - self.server.Broadcast("eth", TxMsg, []interface{}{event.Tx.RlpData()}) + self.net.Broadcast("eth", TxMsg, []interface{}{event.Tx.RlpData()}) } } @@ -236,7 +294,7 @@ func (self *Ethereum) blockBroadcastLoop() { for obj := range self.txSub.Chan() { switch ev := obj.(type) { case core.NewMinedBlockEvent: - self.server.Broadcast("eth", NewBlockMsg, ev.Block.RlpData()) + self.net.Broadcast("eth", NewBlockMsg, ev.Block.RlpData()) } } } -- cgit v1.2.3 From c1dee151445d1d9700e0c623916299370868490c Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 5 Jan 2015 00:18:44 +0100 Subject: BlockManager => BlockProcessor --- eth/backend.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index bf6c91282..db8e8e029 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -52,11 +52,11 @@ type Ethereum struct { //*** SERVICES *** // State manager for processing new blocks and managing the over all states - blockManager *core.BlockManager - txPool *core.TxPool - chainManager *core.ChainManager - blockPool *BlockPool - whisper *whisper.Whisper + blockProcessor *core.BlockProcessor + txPool *core.TxPool + chainManager *core.ChainManager + blockPool *BlockPool + whisper *whisper.Whisper net *p2p.Server eventMux *event.TypeMux @@ -122,8 +122,8 @@ func New(config *Config) (*Ethereum, error) { eth.chainManager = core.NewChainManager(eth.EventMux()) eth.txPool = core.NewTxPool(eth.EventMux()) - eth.blockManager = core.NewBlockManager(eth.txPool, eth.chainManager, eth.EventMux()) - eth.chainManager.SetProcessor(eth.blockManager) + eth.blockProcessor = core.NewBlockProcessor(eth.txPool, eth.chainManager, eth.EventMux()) + eth.chainManager.SetProcessor(eth.blockProcessor) eth.whisper = whisper.New() hasBlock := eth.chainManager.HasBlock @@ -169,8 +169,8 @@ func (s *Ethereum) ChainManager() *core.ChainManager { return s.chainManager } -func (s *Ethereum) BlockManager() *core.BlockManager { - return s.blockManager +func (s *Ethereum) BlockProcessor() *core.BlockProcessor { + return s.blockProcessor } func (s *Ethereum) TxPool() *core.TxPool { -- cgit v1.2.3 From 6abf8ef78f1474fdeb7a6a6ce084bf994cc055f2 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 5 Jan 2015 17:10:42 +0100 Subject: Merge --- eth/backend.go | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index db8e8e029..065a4f7d8 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -36,6 +36,9 @@ type Config struct { NATType string PMPGateway string + Shh bool + Dial bool + KeyManager *crypto.KeyManager } @@ -130,11 +133,13 @@ func New(config *Config) (*Ethereum, error) { insertChain := eth.chainManager.InsertChain eth.blockPool = NewBlockPool(hasBlock, insertChain, ezp.Verify) - // Start services - eth.txPool.Start() - ethProto := EthProtocol(eth.txPool, eth.chainManager, eth.blockPool) - protocols := []p2p.Protocol{ethProto, eth.whisper.Protocol()} + protocols := []p2p.Protocol{ethProto} + + if config.Shh { + eth.whisper = whisper.New() + protocols = append(protocols, eth.whisper.Protocol()) + } nat, err := p2p.ParseNAT(config.NATType, config.PMPGateway) if err != nil { @@ -142,12 +147,16 @@ func New(config *Config) (*Ethereum, error) { } eth.net = &p2p.Server{ - Identity: clientId, - MaxPeers: config.MaxPeers, - Protocols: protocols, - ListenAddr: ":" + config.Port, - Blacklist: eth.blacklist, - NAT: nat, + Identity: clientId, + MaxPeers: config.MaxPeers, + Protocols: protocols, + Blacklist: eth.blacklist, + NAT: nat, + NoDial: !config.Dial, + } + + if len(config.Port) > 0 { + eth.net.ListenAddr = ":" + config.Port } return eth, nil @@ -219,8 +228,14 @@ func (s *Ethereum) Start(seed bool) error { if err != nil { return err } + + // Start services + s.txPool.Start() s.blockPool.Start() - s.whisper.Start() + + if s.whisper != nil { + s.whisper.Start() + } // broadcast transactions s.txSub = s.eventMux.Subscribe(core.TxPreEvent{}) @@ -268,7 +283,9 @@ func (s *Ethereum) Stop() { s.txPool.Stop() s.eventMux.Stop() s.blockPool.Stop() - s.whisper.Stop() + if s.whisper != nil { + s.whisper.Stop() + } logger.Infoln("Server stopped") close(s.shutdownChan) @@ -285,16 +302,16 @@ func (self *Ethereum) txBroadcastLoop() { // automatically stops if unsubscribe for obj := range self.txSub.Chan() { event := obj.(core.TxPreEvent) - self.net.Broadcast("eth", TxMsg, []interface{}{event.Tx.RlpData()}) + self.net.Broadcast("eth", TxMsg, event.Tx.RlpData()) } } func (self *Ethereum) blockBroadcastLoop() { // automatically stops if unsubscribe - for obj := range self.txSub.Chan() { + for obj := range self.blockSub.Chan() { switch ev := obj.(type) { case core.NewMinedBlockEvent: - self.net.Broadcast("eth", NewBlockMsg, ev.Block.RlpData()) + self.net.Broadcast("eth", NewBlockMsg, ev.Block.RlpData(), ev.Block.Td) } } } -- cgit v1.2.3 From 4e7f53adf00d25ada6fe6c52c2795a78cce7e795 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 6 Jan 2015 13:31:08 +0100 Subject: Changed to poc-8 & removed GetTxs --- eth/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 065a4f7d8..2971df422 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -18,7 +18,7 @@ import ( ) const ( - seedNodeAddress = "poc-7.ethdev.com:30300" + seedNodeAddress = "poc-8.ethdev.com:30300" ) type Config struct { -- cgit v1.2.3 From 1b903767e0418c4e11221f271107a825c2a23933 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 6 Jan 2015 13:31:52 +0100 Subject: Fixed port num --- eth/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 2971df422..a6ff52748 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -18,7 +18,7 @@ import ( ) const ( - seedNodeAddress = "poc-8.ethdev.com:30300" + seedNodeAddress = "poc-8.ethdev.com:30303" ) type Config struct { -- cgit v1.2.3 From fed3e6a808921fb8274b50043c5c39a24a1bbccf Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 7 Jan 2015 13:17:48 +0100 Subject: Refactored ethutil.Config.Db out --- eth/backend.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index a6ff52748..02d3dc942 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -81,7 +81,7 @@ type Ethereum struct { func New(config *Config) (*Ethereum, error) { // Boostrap database logger := ethlogger.New(config.DataDir, config.LogFile, config.LogLevel) - db, err := ethdb.NewLDBDatabase("database") + db, err := ethdb.NewLDBDatabase("blockchain") if err != nil { return nil, err } @@ -110,7 +110,7 @@ func New(config *Config) (*Ethereum, error) { clientId := p2p.NewSimpleClientIdentity(config.Name, config.Version, config.Identifier, keyManager.PublicKey()) saveProtocolVersion(db) - ethutil.Config.Db = db + //ethutil.Config.Db = db eth := &Ethereum{ shutdownChan: make(chan bool), @@ -123,9 +123,9 @@ func New(config *Config) (*Ethereum, error) { logger: logger, } - eth.chainManager = core.NewChainManager(eth.EventMux()) + eth.chainManager = core.NewChainManager(db, eth.EventMux()) eth.txPool = core.NewTxPool(eth.EventMux()) - eth.blockProcessor = core.NewBlockProcessor(eth.txPool, eth.chainManager, eth.EventMux()) + eth.blockProcessor = core.NewBlockProcessor(db, eth.txPool, eth.chainManager, eth.EventMux()) eth.chainManager.SetProcessor(eth.blockProcessor) eth.whisper = whisper.New() -- cgit v1.2.3 From 26f066f0c7570bcca43299721c2b7a1a70186ee3 Mon Sep 17 00:00:00 2001 From: obscuren Date: Thu, 8 Jan 2015 22:18:23 +0100 Subject: just enable by default --- eth/backend.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 02d3dc942..ad0486309 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -134,24 +134,20 @@ func New(config *Config) (*Ethereum, error) { eth.blockPool = NewBlockPool(hasBlock, insertChain, ezp.Verify) ethProto := EthProtocol(eth.txPool, eth.chainManager, eth.blockPool) - protocols := []p2p.Protocol{ethProto} - - if config.Shh { - eth.whisper = whisper.New() - protocols = append(protocols, eth.whisper.Protocol()) - } + protocols := []p2p.Protocol{ethProto, eth.whisper.Protocol()} nat, err := p2p.ParseNAT(config.NATType, config.PMPGateway) if err != nil { return nil, err } + fmt.Println(nat) eth.net = &p2p.Server{ Identity: clientId, MaxPeers: config.MaxPeers, Protocols: protocols, Blacklist: eth.blacklist, - NAT: nat, + NAT: p2p.UPNP(), NoDial: !config.Dial, } -- cgit v1.2.3 From 9b509f64781a5bac37ed5b125ba4214cd7250b59 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 19 Jan 2015 11:20:12 +0100 Subject: Print error instead of returning for seed node err Returning an error would indicate a complete failure initialising the Ethereum backend. Instead we should print the message and continue. --- eth/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index ad0486309..c3c7d1287 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -245,7 +245,7 @@ func (s *Ethereum) Start(seed bool) error { if seed { logger.Infof("Connect to seed node %v", seedNodeAddress) if err := s.SuggestPeer(seedNodeAddress); err != nil { - return err + logger.Infoln(err) } } -- cgit v1.2.3 From bdf99e098126880c10dc2ef68623c47ec6f04537 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 21 Jan 2015 10:17:07 -0600 Subject: Add LogFormat flag --- eth/backend.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index c3c7d1287..da75da051 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -29,6 +29,7 @@ type Config struct { DataDir string LogFile string LogLevel int + LogFormat string KeyRing string MaxPeers int @@ -80,7 +81,7 @@ type Ethereum struct { func New(config *Config) (*Ethereum, error) { // Boostrap database - logger := ethlogger.New(config.DataDir, config.LogFile, config.LogLevel) + logger := ethlogger.New(config.DataDir, config.LogFile, config.LogLevel, config.LogFormat) db, err := ethdb.NewLDBDatabase("blockchain") if err != nil { return nil, err -- cgit v1.2.3 From 1077109e1153cc4fb4eece59dd48cd9f640d0e0b Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 21 Jan 2015 10:57:29 -0600 Subject: Add JsonLogger type --- eth/backend.go | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index da75da051..c16727e1c 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -44,6 +44,7 @@ type Config struct { } var logger = ethlogger.NewLogger("SERV") +var jsonlogger = ethlogger.NewJsonLogger() type Ethereum struct { // Channel for shutting down the ethereum @@ -221,6 +222,14 @@ func (s *Ethereum) MaxPeers() int { // Start the ethereum func (s *Ethereum) Start(seed bool) error { + evd := map[string]interface{}{ + "version_string": s.ClientIdentity().String(), + "guid": ethutil.Bytes2Hex(s.ClientIdentity().Pubkey()), + "level": "debug", + "coinbase": ethutil.Bytes2Hex(s.KeyManager().Address()), + "eth_version": ProtocolVersion, + } + jsonlogger.Log("starting", evd) err := s.net.Start() if err != nil { return err -- cgit v1.2.3 From 0aa76d3e5b3eb261103ebf5afd515394df0af914 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 21 Jan 2015 11:45:30 -0600 Subject: Rename jsonlogger method --- eth/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index c16727e1c..5057aa3aa 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -229,7 +229,7 @@ func (s *Ethereum) Start(seed bool) error { "coinbase": ethutil.Bytes2Hex(s.KeyManager().Address()), "eth_version": ProtocolVersion, } - jsonlogger.Log("starting", evd) + jsonlogger.LogJson("starting", evd) err := s.net.Start() if err != nil { return err -- cgit v1.2.3 From d790229a33b1f3e6256ca6916be17a0cc3663076 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Sun, 25 Jan 2015 14:50:43 -0600 Subject: Move HTTP transport to sub package of RPC --- eth/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index c3c7d1287..fbe080618 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -66,7 +66,7 @@ type Ethereum struct { txSub event.Subscription blockSub event.Subscription - RpcServer *rpc.JsonRpcServer + RpcServer rpc.RpcServer keyManager *crypto.KeyManager clientIdentity p2p.ClientIdentity -- cgit v1.2.3 From 5f50fe7a4a6218bedf78333d751b57166932464a Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 27 Jan 2015 12:28:58 -0600 Subject: Update CLI to use new Websocket RPC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use “wsport” flag to change default port --- eth/backend.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index fbe080618..ab30a1b38 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -67,6 +67,7 @@ type Ethereum struct { blockSub event.Subscription RpcServer rpc.RpcServer + WsServer rpc.RpcServer keyManager *crypto.KeyManager clientIdentity p2p.ClientIdentity @@ -276,6 +277,9 @@ func (s *Ethereum) Stop() { if s.RpcServer != nil { s.RpcServer.Stop() } + if s.WsServer != nil { + s.WsServer.Stop() + } s.txPool.Stop() s.eventMux.Stop() s.blockPool.Stop() -- cgit v1.2.3 From 7f638f0b2d8d989be25e660178d79df3278e4c84 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 28 Jan 2015 18:14:28 +0100 Subject: moving to a better xeth --- eth/backend.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index ab30a1b38..b7b5c5f85 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -219,6 +219,10 @@ func (s *Ethereum) MaxPeers() int { return s.net.MaxPeers } +func (s *Ethereum) Coinbase() []byte { + return nil // TODO +} + // Start the ethereum func (s *Ethereum) Start(seed bool) error { err := s.net.Start() -- cgit v1.2.3 From 8ccde784f9035c0a7a8f234994538c817c5b9de7 Mon Sep 17 00:00:00 2001 From: obscuren Date: Sun, 1 Feb 2015 15:30:29 +0100 Subject: Added (disabled) Jit validation --- eth/backend.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index b7b5c5f85..a8db3ab20 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -141,14 +141,13 @@ func New(config *Config) (*Ethereum, error) { if err != nil { return nil, err } - fmt.Println(nat) eth.net = &p2p.Server{ Identity: clientId, MaxPeers: config.MaxPeers, Protocols: protocols, Blacklist: eth.blacklist, - NAT: p2p.UPNP(), + NAT: nat, NoDial: !config.Dial, } -- cgit v1.2.3 From 1f4ed49b4c3400c8f567a29c70d4fb26df97f305 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Mon, 2 Feb 2015 13:04:00 -0600 Subject: Move hardcoded seed node address to app flag Replaces functionality `-seed=true` with `-seed="ip:port"` --- eth/backend.go | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index b7b5c5f85..cb00069d3 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -17,10 +17,6 @@ import ( "github.com/ethereum/go-ethereum/whisper" ) -const ( - seedNodeAddress = "poc-8.ethdev.com:30303" -) - type Config struct { Name string Version string @@ -224,7 +220,7 @@ func (s *Ethereum) Coinbase() []byte { } // Start the ethereum -func (s *Ethereum) Start(seed bool) error { +func (s *Ethereum) Start(seedNode string) error { err := s.net.Start() if err != nil { return err @@ -247,9 +243,9 @@ func (s *Ethereum) Start(seed bool) error { go s.blockBroadcastLoop() // TODO: read peers here - if seed { - logger.Infof("Connect to seed node %v", seedNodeAddress) - if err := s.SuggestPeer(seedNodeAddress); err != nil { + if len(seedNode) > 0 { + logger.Infof("Connect to seed node %v", seedNode) + if err := s.SuggestPeer(seedNode); err != nil { logger.Infoln(err) } } -- cgit v1.2.3 From 56f777b2fc77275bc636562b66a08b19afe2ec56 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 5 Feb 2015 03:16:16 +0100 Subject: cmd/ethereum, cmd/mist, core, eth, javascript, xeth: fixes for new p2p API --- eth/backend.go | 73 ++++++++++++++++++++++++---------------------------------- 1 file changed, 30 insertions(+), 43 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 43e757435..08052c15d 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -12,20 +12,19 @@ import ( "github.com/ethereum/go-ethereum/event" ethlogger "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/discover" "github.com/ethereum/go-ethereum/pow/ezp" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/whisper" ) type Config struct { - Name string - Version string - Identifier string - KeyStore string - DataDir string - LogFile string - LogLevel int - KeyRing string + Name string + KeyStore string + DataDir string + LogFile string + LogLevel int + KeyRing string MaxPeers int Port string @@ -66,8 +65,7 @@ type Ethereum struct { WsServer rpc.RpcServer keyManager *crypto.KeyManager - clientIdentity p2p.ClientIdentity - logger ethlogger.LogSystem + logger ethlogger.LogSystem synclock sync.Mutex syncGroup sync.WaitGroup @@ -103,21 +101,17 @@ func New(config *Config) (*Ethereum, error) { // Initialise the keyring keyManager.Init(config.KeyRing, 0, false) - // Create a new client id for this instance. This will help identifying the node on the network - clientId := p2p.NewSimpleClientIdentity(config.Name, config.Version, config.Identifier, keyManager.PublicKey()) - saveProtocolVersion(db) //ethutil.Config.Db = db eth := &Ethereum{ - shutdownChan: make(chan bool), - quit: make(chan bool), - db: db, - keyManager: keyManager, - clientIdentity: clientId, - blacklist: p2p.NewBlacklist(), - eventMux: &event.TypeMux{}, - logger: logger, + shutdownChan: make(chan bool), + quit: make(chan bool), + db: db, + keyManager: keyManager, + blacklist: p2p.NewBlacklist(), + eventMux: &event.TypeMux{}, + logger: logger, } eth.chainManager = core.NewChainManager(db, eth.EventMux()) @@ -132,21 +126,23 @@ func New(config *Config) (*Ethereum, error) { ethProto := EthProtocol(eth.txPool, eth.chainManager, eth.blockPool) protocols := []p2p.Protocol{ethProto, eth.whisper.Protocol()} - nat, err := p2p.ParseNAT(config.NATType, config.PMPGateway) if err != nil { return nil, err } - + netprv, err := crypto.GenerateKey() + if err != nil { + return nil, fmt.Errorf("could not generate server key: %v", err) + } eth.net = &p2p.Server{ - Identity: clientId, - MaxPeers: config.MaxPeers, - Protocols: protocols, - Blacklist: eth.blacklist, - NAT: nat, - NoDial: !config.Dial, + PrivateKey: netprv, + Name: config.Name, + MaxPeers: config.MaxPeers, + Protocols: protocols, + Blacklist: eth.blacklist, + NAT: nat, + NoDial: !config.Dial, } - if len(config.Port) > 0 { eth.net.ListenAddr = ":" + config.Port } @@ -162,8 +158,8 @@ func (s *Ethereum) Logger() ethlogger.LogSystem { return s.logger } -func (s *Ethereum) ClientIdentity() p2p.ClientIdentity { - return s.clientIdentity +func (s *Ethereum) Name() string { + return s.net.Name } func (s *Ethereum) ChainManager() *core.ChainManager { @@ -241,26 +237,17 @@ func (s *Ethereum) Start(seedNode string) error { s.blockSub = s.eventMux.Subscribe(core.NewMinedBlockEvent{}) go s.blockBroadcastLoop() - // TODO: read peers here - if len(seedNode) > 0 { - logger.Infof("Connect to seed node %v", seedNode) - if err := s.SuggestPeer(seedNode); err != nil { - logger.Infoln(err) - } - } - logger.Infoln("Server started") return nil } -func (self *Ethereum) SuggestPeer(addr string) error { +func (self *Ethereum) SuggestPeer(addr string, id discover.NodeID) error { netaddr, err := net.ResolveTCPAddr("tcp", addr) if err != nil { logger.Errorf("couldn't resolve %s:", addr, err) return err } - - self.net.SuggestPeer(netaddr.IP, netaddr.Port, nil) + self.net.SuggestPeer(netaddr.IP, netaddr.Port, id) return nil } -- cgit v1.2.3 From 2cf4fed11b01bb99e08b838f7df2b9396f42f758 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sat, 7 Feb 2015 00:15:04 +0100 Subject: cmd/mist, eth, javascript, p2p: use Node URLs for peer suggestions --- eth/backend.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 08052c15d..6cf2069d7 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -2,7 +2,6 @@ package eth import ( "fmt" - "net" "sync" "github.com/ethereum/go-ethereum/core" @@ -241,13 +240,12 @@ func (s *Ethereum) Start(seedNode string) error { return nil } -func (self *Ethereum) SuggestPeer(addr string, id discover.NodeID) error { - netaddr, err := net.ResolveTCPAddr("tcp", addr) +func (self *Ethereum) SuggestPeer(nodeURL string) error { + n, err := discover.ParseNode(nodeURL) if err != nil { - logger.Errorf("couldn't resolve %s:", addr, err) - return err + return fmt.Errorf("invalid node URL: %v", err) } - self.net.SuggestPeer(netaddr.IP, netaddr.Port, id) + self.net.SuggestPeer(n) return nil } -- cgit v1.2.3 From 028775a0863946c1e9ad51fe7b22faa5c59b2605 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sat, 7 Feb 2015 00:38:36 +0100 Subject: cmd/ethereum, cmd/mist: add flag for discovery bootstrap nodes --- eth/backend.go | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 6cf2069d7..5ad0f83f4 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -2,6 +2,7 @@ package eth import ( "fmt" + "strings" "sync" "github.com/ethereum/go-ethereum/core" @@ -17,6 +18,8 @@ import ( "github.com/ethereum/go-ethereum/whisper" ) +var logger = ethlogger.NewLogger("SERV") + type Config struct { Name string KeyStore string @@ -30,13 +33,28 @@ type Config struct { NATType string PMPGateway string + // This should be a space-separated list of + // discovery node URLs. + BootNodes string + Shh bool Dial bool KeyManager *crypto.KeyManager } -var logger = ethlogger.NewLogger("SERV") +func (cfg *Config) parseBootNodes() []*discover.Node { + var ns []*discover.Node + for _, url := range strings.Split(cfg.BootNodes, " ") { + n, err := discover.ParseNode(url) + if err != nil { + logger.Errorf("Bootstrap URL %s: %v\n", url, err) + continue + } + ns = append(ns, n) + } + return ns +} type Ethereum struct { // Channel for shutting down the ethereum @@ -134,13 +152,14 @@ func New(config *Config) (*Ethereum, error) { return nil, fmt.Errorf("could not generate server key: %v", err) } eth.net = &p2p.Server{ - PrivateKey: netprv, - Name: config.Name, - MaxPeers: config.MaxPeers, - Protocols: protocols, - Blacklist: eth.blacklist, - NAT: nat, - NoDial: !config.Dial, + PrivateKey: netprv, + Name: config.Name, + MaxPeers: config.MaxPeers, + Protocols: protocols, + Blacklist: eth.blacklist, + NAT: nat, + NoDial: !config.Dial, + BootstrapNodes: config.parseBootNodes(), } if len(config.Port) > 0 { eth.net.ListenAddr = ":" + config.Port @@ -214,7 +233,7 @@ func (s *Ethereum) Coinbase() []byte { } // Start the ethereum -func (s *Ethereum) Start(seedNode string) error { +func (s *Ethereum) Start() error { err := s.net.Start() if err != nil { return err -- cgit v1.2.3 From f1ebad2508b6941df5802d607b30b7a5e7b2c67d Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Mon, 9 Feb 2015 16:17:07 +0100 Subject: eth: don't warn if no BootNodes are specified --- eth/backend.go | 3 +++ 1 file changed, 3 insertions(+) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 5ad0f83f4..f5ebc9033 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -46,6 +46,9 @@ type Config struct { func (cfg *Config) parseBootNodes() []*discover.Node { var ns []*discover.Node for _, url := range strings.Split(cfg.BootNodes, " ") { + if url == "" { + continue + } n, err := discover.ParseNode(url) if err != nil { logger.Errorf("Bootstrap URL %s: %v\n", url, err) -- cgit v1.2.3 From a3cd2187194b79cd8b14c4ec4f1abca91a0147e0 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 10 Feb 2015 12:30:09 +0100 Subject: cmd/mist, cmd/ethereum: add CLI arguments for node key --- eth/backend.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index f5ebc9033..e8555061d 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -1,6 +1,7 @@ package eth import ( + "crypto/ecdsa" "fmt" "strings" "sync" @@ -37,6 +38,10 @@ type Config struct { // discovery node URLs. BootNodes string + // This key is used to identify the node on the network. + // If nil, an ephemeral key is used. + NodeKey *ecdsa.PrivateKey + Shh bool Dial bool @@ -150,9 +155,11 @@ func New(config *Config) (*Ethereum, error) { if err != nil { return nil, err } - netprv, err := crypto.GenerateKey() - if err != nil { - return nil, fmt.Errorf("could not generate server key: %v", err) + netprv := config.NodeKey + if netprv == nil { + if netprv, err = crypto.GenerateKey(); err != nil { + return nil, fmt.Errorf("could not generate server key: %v", err) + } } eth.net = &p2p.Server{ PrivateKey: netprv, -- cgit v1.2.3 From a21b30c9012572e1bbed62ac43bdb1bdc89dab92 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 10 Feb 2015 13:30:07 +0100 Subject: eth: remove unused Ethereum sync fields --- eth/backend.go | 4 ---- 1 file changed, 4 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index e8555061d..f3e4842a7 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -4,7 +4,6 @@ import ( "crypto/ecdsa" "fmt" "strings" - "sync" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/crypto" @@ -92,9 +91,6 @@ type Ethereum struct { logger ethlogger.LogSystem - synclock sync.Mutex - syncGroup sync.WaitGroup - Mining bool } -- cgit v1.2.3 From d53e5646ecfce75790fea45a1ee552494ef88668 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 10 Feb 2015 19:21:13 +0100 Subject: Use strongly-typed objects --- eth/backend.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 5057aa3aa..cdccd3940 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -222,14 +222,13 @@ func (s *Ethereum) MaxPeers() int { // Start the ethereum func (s *Ethereum) Start(seed bool) error { - evd := map[string]interface{}{ - "version_string": s.ClientIdentity().String(), - "guid": ethutil.Bytes2Hex(s.ClientIdentity().Pubkey()), - "level": "debug", - "coinbase": ethutil.Bytes2Hex(s.KeyManager().Address()), - "eth_version": ProtocolVersion, - } - jsonlogger.LogJson("starting", evd) + jsonlogger.LogJson("starting", ðlogger.LogStarting{ + ClientString: s.ClientIdentity().String(), + Guid: ethutil.Bytes2Hex(s.ClientIdentity().Pubkey()), + Coinbase: ethutil.Bytes2Hex(s.KeyManager().Address()), + ProtocolVersion: ProtocolVersion, + }) + err := s.net.Start() if err != nil { return err -- cgit v1.2.3 From 3d6fd601c5eec13480b6c736f6811b663a885766 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 11 Feb 2015 12:45:41 +0100 Subject: Move event names within each object --- eth/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index cdccd3940..b8b9416d5 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -222,7 +222,7 @@ func (s *Ethereum) MaxPeers() int { // Start the ethereum func (s *Ethereum) Start(seed bool) error { - jsonlogger.LogJson("starting", ðlogger.LogStarting{ + jsonlogger.LogJson(ðlogger.LogStarting{ ClientString: s.ClientIdentity().String(), Guid: ethutil.Bytes2Hex(s.ClientIdentity().Pubkey()), Coinbase: ethutil.Bytes2Hex(s.KeyManager().Address()), -- cgit v1.2.3 From db24fb792cf0dab91bc85e79aecf6758349002a4 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 11 Feb 2015 18:49:00 +0100 Subject: Move standard fields to LogEvent --- eth/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index b8b9416d5..677b5d8e3 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -224,9 +224,9 @@ func (s *Ethereum) MaxPeers() int { func (s *Ethereum) Start(seed bool) error { jsonlogger.LogJson(ðlogger.LogStarting{ ClientString: s.ClientIdentity().String(), - Guid: ethutil.Bytes2Hex(s.ClientIdentity().Pubkey()), Coinbase: ethutil.Bytes2Hex(s.KeyManager().Address()), ProtocolVersion: ProtocolVersion, + LogEvent: ethlogger.LogEvent{Guid: ethutil.Bytes2Hex(s.ClientIdentity().Pubkey())}, }) err := s.net.Start() -- cgit v1.2.3 From d0a2e655c9599f462bb20bd49bc69b8e1e330a21 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Wed, 11 Feb 2015 17:19:31 +0100 Subject: cmd/ethereum, cmd/mist, eth, p2p: use package p2p/nat This deletes the old NAT implementation. --- eth/backend.go | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index f3e4842a7..29cf7d836 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -13,6 +13,7 @@ import ( ethlogger "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/discover" + "github.com/ethereum/go-ethereum/p2p/nat" "github.com/ethereum/go-ethereum/pow/ezp" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/whisper" @@ -28,10 +29,8 @@ type Config struct { LogLevel int KeyRing string - MaxPeers int - Port string - NATType string - PMPGateway string + MaxPeers int + Port string // This should be a space-separated list of // discovery node URLs. @@ -41,6 +40,7 @@ type Config struct { // If nil, an ephemeral key is used. NodeKey *ecdsa.PrivateKey + NAT nat.Interface Shh bool Dial bool @@ -147,10 +147,6 @@ func New(config *Config) (*Ethereum, error) { ethProto := EthProtocol(eth.txPool, eth.chainManager, eth.blockPool) protocols := []p2p.Protocol{ethProto, eth.whisper.Protocol()} - nat, err := p2p.ParseNAT(config.NATType, config.PMPGateway) - if err != nil { - return nil, err - } netprv := config.NodeKey if netprv == nil { if netprv, err = crypto.GenerateKey(); err != nil { @@ -163,7 +159,7 @@ func New(config *Config) (*Ethereum, error) { MaxPeers: config.MaxPeers, Protocols: protocols, Blacklist: eth.blacklist, - NAT: nat, + NAT: config.NAT, NoDial: !config.Dial, BootstrapNodes: config.parseBootNodes(), } -- cgit v1.2.3 From bde3ff16ad98cb4ab0befc899f7f0584d21ff9a4 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 13 Feb 2015 16:02:37 +0100 Subject: merge --- eth/backend.go | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 684f15136..28a065066 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -20,14 +20,16 @@ import ( ) var logger = ethlogger.NewLogger("SERV") +var jsonlogger = ethlogger.NewJsonLogger() type Config struct { - Name string - KeyStore string - DataDir string - LogFile string - LogLevel int - KeyRing string + Name string + KeyStore string + DataDir string + LogFile string + LogLevel int + KeyRing string + LogFormat string MaxPeers int Port string @@ -47,9 +49,6 @@ type Config struct { KeyManager *crypto.KeyManager } -var logger = ethlogger.NewLogger("SERV") -var jsonlogger = ethlogger.NewJsonLogger() - func (cfg *Config) parseBootNodes() []*discover.Node { var ns []*discover.Node for _, url := range strings.Split(cfg.BootNodes, " ") { @@ -240,10 +239,10 @@ func (s *Ethereum) Coinbase() []byte { // Start the ethereum func (s *Ethereum) Start() error { jsonlogger.LogJson(ðlogger.LogStarting{ - ClientString: s.ClientIdentity().String(), + ClientString: s.net.Name, Coinbase: ethutil.Bytes2Hex(s.KeyManager().Address()), ProtocolVersion: ProtocolVersion, - LogEvent: ethlogger.LogEvent{Guid: ethutil.Bytes2Hex(s.ClientIdentity().Pubkey())}, + LogEvent: ethlogger.LogEvent{Guid: ethutil.Bytes2Hex(crypto.FromECDSAPub(&s.net.PrivateKey.PublicKey))}, }) err := s.net.Start() -- cgit v1.2.3 From 1c1a3033beed74b22adc9827929e72ae04ed42cc Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 13 Feb 2015 21:41:13 +0100 Subject: eth: add default bootnode --- eth/backend.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 28a065066..8c2073574 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -19,8 +19,14 @@ import ( "github.com/ethereum/go-ethereum/whisper" ) -var logger = ethlogger.NewLogger("SERV") -var jsonlogger = ethlogger.NewJsonLogger() +var ( + logger = ethlogger.NewLogger("SERV") + jsonlogger = ethlogger.NewJsonLogger() + + defaultBootNodes = []*discover.Node{ + discover.MustParseNode("enode://6cdd090303f394a1cac34ecc9f7cda18127eafa2a3a06de39f6d920b0e583e062a7362097c7c65ee490a758b442acd5c80c6fce4b148c6a391e946b45131365b@54.169.166.226:30303"), + } +) type Config struct { Name string @@ -50,6 +56,9 @@ type Config struct { } func (cfg *Config) parseBootNodes() []*discover.Node { + if cfg.BootNodes == "" { + return defaultBootNodes + } var ns []*discover.Node for _, url := range strings.Split(cfg.BootNodes, " ") { if url == "" { -- cgit v1.2.3 From 8135752a32837748e6d4a986912131736b1a0aa0 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 17 Feb 2015 12:24:51 +0100 Subject: "centralised" mining to backend. Closes #323 --- eth/backend.go | 82 ++++++++++++++-------------------------------------------- 1 file changed, 19 insertions(+), 63 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 8c2073574..690c7136d 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/event" ethlogger "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/miner" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/discover" "github.com/ethereum/go-ethereum/p2p/nat" @@ -95,6 +96,7 @@ type Ethereum struct { eventMux *event.TypeMux txSub event.Subscription blockSub event.Subscription + miner *miner.Miner RpcServer rpc.RpcServer WsServer rpc.RpcServer @@ -151,6 +153,7 @@ func New(config *Config) (*Ethereum, error) { eth.blockProcessor = core.NewBlockProcessor(db, eth.txPool, eth.chainManager, eth.EventMux()) eth.chainManager.SetProcessor(eth.blockProcessor) eth.whisper = whisper.New() + eth.miner = miner.New(keyManager.Address(), eth) hasBlock := eth.chainManager.HasBlock insertChain := eth.chainManager.InsertChain @@ -181,69 +184,22 @@ func New(config *Config) (*Ethereum, error) { return eth, nil } -func (s *Ethereum) KeyManager() *crypto.KeyManager { - return s.keyManager -} - -func (s *Ethereum) Logger() ethlogger.LogSystem { - return s.logger -} - -func (s *Ethereum) Name() string { - return s.net.Name -} - -func (s *Ethereum) ChainManager() *core.ChainManager { - return s.chainManager -} - -func (s *Ethereum) BlockProcessor() *core.BlockProcessor { - return s.blockProcessor -} - -func (s *Ethereum) TxPool() *core.TxPool { - return s.txPool -} - -func (s *Ethereum) BlockPool() *BlockPool { - return s.blockPool -} - -func (s *Ethereum) Whisper() *whisper.Whisper { - return s.whisper -} - -func (s *Ethereum) EventMux() *event.TypeMux { - return s.eventMux -} -func (self *Ethereum) Db() ethutil.Database { - return self.db -} - -func (s *Ethereum) IsMining() bool { - return s.Mining -} - -func (s *Ethereum) IsListening() bool { - // XXX TODO - return false -} - -func (s *Ethereum) PeerCount() int { - return s.net.PeerCount() -} - -func (s *Ethereum) Peers() []*p2p.Peer { - return s.net.Peers() -} - -func (s *Ethereum) MaxPeers() int { - return s.net.MaxPeers -} - -func (s *Ethereum) Coinbase() []byte { - return nil // TODO -} +func (s *Ethereum) KeyManager() *crypto.KeyManager { return s.keyManager } +func (s *Ethereum) Logger() ethlogger.LogSystem { return s.logger } +func (s *Ethereum) Name() string { return s.net.Name } +func (s *Ethereum) ChainManager() *core.ChainManager { return s.chainManager } +func (s *Ethereum) BlockProcessor() *core.BlockProcessor { return s.blockProcessor } +func (s *Ethereum) TxPool() *core.TxPool { return s.txPool } +func (s *Ethereum) BlockPool() *BlockPool { return s.blockPool } +func (s *Ethereum) Whisper() *whisper.Whisper { return s.whisper } +func (s *Ethereum) EventMux() *event.TypeMux { return s.eventMux } +func (s *Ethereum) Db() ethutil.Database { return s.db } +func (s *Ethereum) Miner() *miner.Miner { return s.miner } +func (s *Ethereum) IsListening() bool { return true } // Always listening +func (s *Ethereum) PeerCount() int { return s.net.PeerCount() } +func (s *Ethereum) Peers() []*p2p.Peer { return s.net.Peers() } +func (s *Ethereum) MaxPeers() int { return s.net.MaxPeers } +func (s *Ethereum) Coinbase() []byte { return nil } // TODO // Start the ethereum func (s *Ethereum) Start() error { -- cgit v1.2.3 From 567428fb3489d639cd7fdcd50e4362be52745ec4 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 17 Feb 2015 16:12:55 +0100 Subject: Filter and mutex locks added --- eth/backend.go | 1 + 1 file changed, 1 insertion(+) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 690c7136d..7685f3568 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -26,6 +26,7 @@ var ( defaultBootNodes = []*discover.Node{ discover.MustParseNode("enode://6cdd090303f394a1cac34ecc9f7cda18127eafa2a3a06de39f6d920b0e583e062a7362097c7c65ee490a758b442acd5c80c6fce4b148c6a391e946b45131365b@54.169.166.226:30303"), + discover.MustParseNode("enode://d1760a33c2f25c3b419ee4f6787fb0ea148828f5e678f0450d4be978fef908b42fc47a4c0fbf19832754f17881d381e50364fa93be42f31801d60ac64933f0a5@127.0.0.1:30303"), } ) -- cgit v1.2.3 From 7fc9b5b3f9ca0111cc4bc1b2a6b4bb2eccd3e048 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 17 Feb 2015 22:20:47 +0100 Subject: Changed to ChainEvent and fixed a nil pointer in transact --- eth/backend.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 7685f3568..9749cef9a 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -25,8 +25,8 @@ var ( jsonlogger = ethlogger.NewJsonLogger() defaultBootNodes = []*discover.Node{ - discover.MustParseNode("enode://6cdd090303f394a1cac34ecc9f7cda18127eafa2a3a06de39f6d920b0e583e062a7362097c7c65ee490a758b442acd5c80c6fce4b148c6a391e946b45131365b@54.169.166.226:30303"), - discover.MustParseNode("enode://d1760a33c2f25c3b419ee4f6787fb0ea148828f5e678f0450d4be978fef908b42fc47a4c0fbf19832754f17881d381e50364fa93be42f31801d60ac64933f0a5@127.0.0.1:30303"), + //discover.MustParseNode("enode://6cdd090303f394a1cac34ecc9f7cda18127eafa2a3a06de39f6d920b0e583e062a7362097c7c65ee490a758b442acd5c80c6fce4b148c6a391e946b45131365b@54.169.166.226:30303"), + discover.MustParseNode("enode://364d179a050fb3192ea25ee2c4836cb808f13bb1a98a058e5bf215a597080edd742a00d6fd4b5f348a08024097f0b8f567610902dddf8db573362d8b22cabef5@127.0.0.1:30303"), } ) -- cgit v1.2.3 From 5ec8c5f71b2db976ffe51180f20bfd6b4fd94188 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 17 Feb 2015 23:14:10 +0100 Subject: added bootnode back in --- eth/backend.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 9749cef9a..690c7136d 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -25,8 +25,7 @@ var ( jsonlogger = ethlogger.NewJsonLogger() defaultBootNodes = []*discover.Node{ - //discover.MustParseNode("enode://6cdd090303f394a1cac34ecc9f7cda18127eafa2a3a06de39f6d920b0e583e062a7362097c7c65ee490a758b442acd5c80c6fce4b148c6a391e946b45131365b@54.169.166.226:30303"), - discover.MustParseNode("enode://364d179a050fb3192ea25ee2c4836cb808f13bb1a98a058e5bf215a597080edd742a00d6fd4b5f348a08024097f0b8f567610902dddf8db573362d8b22cabef5@127.0.0.1:30303"), + discover.MustParseNode("enode://6cdd090303f394a1cac34ecc9f7cda18127eafa2a3a06de39f6d920b0e583e062a7362097c7c65ee490a758b442acd5c80c6fce4b148c6a391e946b45131365b@54.169.166.226:30303"), } ) -- cgit v1.2.3 From f499f343baefece18764135eb99af0c7e038ff5e Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 18 Feb 2015 10:52:23 +0100 Subject: Update JSON Log types --- eth/backend.go | 2 -- 1 file changed, 2 deletions(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 690c7136d..06c64e811 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -205,9 +205,7 @@ func (s *Ethereum) Coinbase() []byte { return nil } // TODO func (s *Ethereum) Start() error { jsonlogger.LogJson(ðlogger.LogStarting{ ClientString: s.net.Name, - Coinbase: ethutil.Bytes2Hex(s.KeyManager().Address()), ProtocolVersion: ProtocolVersion, - LogEvent: ethlogger.LogEvent{Guid: ethutil.Bytes2Hex(crypto.FromECDSAPub(&s.net.PrivateKey.PublicKey))}, }) err := s.net.Start() -- cgit v1.2.3 From 05b1ec008b771d9856e83a6269a5267eb18e1f51 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 18 Feb 2015 11:42:01 +0100 Subject: Disabled ability to disable whisper. Closes #334 --- eth/backend.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index 690c7136d..d109ab98e 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -160,7 +160,11 @@ func New(config *Config) (*Ethereum, error) { eth.blockPool = NewBlockPool(hasBlock, insertChain, ezp.Verify) ethProto := EthProtocol(eth.txPool, eth.chainManager, eth.blockPool) - protocols := []p2p.Protocol{ethProto, eth.whisper.Protocol()} + protocols := []p2p.Protocol{ethProto} + if config.Shh { + protocols = append(protocols, eth.whisper.Protocol()) + } + netprv := config.NodeKey if netprv == nil { if netprv, err = crypto.GenerateKey(); err != nil { -- cgit v1.2.3 From 5aff8bfb5918e53ba2590b25e6c17e1875870f6a Mon Sep 17 00:00:00 2001 From: Maran Date: Thu, 19 Feb 2015 10:38:36 +0100 Subject: Implement command line argument to set the amount of agents created by the miner Defaults to the amount of cores available on the CPU --- eth/backend.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'eth/backend.go') diff --git a/eth/backend.go b/eth/backend.go index d109ab98e..05d84cae8 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -53,6 +53,8 @@ type Config struct { Shh bool Dial bool + MinerThreads int + KeyManager *crypto.KeyManager } @@ -153,7 +155,7 @@ func New(config *Config) (*Ethereum, error) { eth.blockProcessor = core.NewBlockProcessor(db, eth.txPool, eth.chainManager, eth.EventMux()) eth.chainManager.SetProcessor(eth.blockProcessor) eth.whisper = whisper.New() - eth.miner = miner.New(keyManager.Address(), eth) + eth.miner = miner.New(keyManager.Address(), eth, config.MinerThreads) hasBlock := eth.chainManager.HasBlock insertChain := eth.chainManager.InsertChain -- cgit v1.2.3