From 836ed9d6b70e3ae928624f9ed81ed206a66b85b8 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 22 Aug 2014 11:34:59 +0200 Subject: Write Protocol version to the db so we can perform sanity checks --- ethereum.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'ethereum.go') diff --git a/ethereum.go b/ethereum.go index 1e1891589..4c5e13b6d 100644 --- a/ethereum.go +++ b/ethereum.go @@ -90,7 +90,6 @@ type Ethereum struct { } func New(db ethutil.Database, clientIdentity ethwire.ClientIdentity, keyManager *ethcrypto.KeyManager, caps Caps, usePnp bool) (*Ethereum, error) { - var err error var nat NAT @@ -101,6 +100,8 @@ func New(db ethutil.Database, clientIdentity ethwire.ClientIdentity, keyManager } } + bootstrapDb(db) + ethutil.Config.Db = db nonce, _ := ethutil.RandomUint64() @@ -534,3 +535,12 @@ out: } } } + +func bootstrapDb(db ethutil.Database) { + d, _ := db.Get([]byte("ProtocolVersion")) + protov := ethutil.NewValue(d).Uint() + + if protov == 0 { + db.Put([]byte("ProtocolVersion"), ethutil.NewValue(ProtocolVersion).Bytes()) + } +} -- cgit v1.2.3 From 2fb57b2ea7b7f697ddc4811c471d87116eae07cc Mon Sep 17 00:00:00 2001 From: obscuren Date: Sun, 14 Sep 2014 00:13:23 +0200 Subject: Reworked filters --- ethereum.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'ethereum.go') diff --git a/ethereum.go b/ethereum.go index 4c5e13b6d..fdfb59b09 100644 --- a/ethereum.go +++ b/ethereum.go @@ -16,6 +16,7 @@ import ( "github.com/ethereum/eth-go/ethlog" "github.com/ethereum/eth-go/ethreact" "github.com/ethereum/eth-go/ethrpc" + "github.com/ethereum/eth-go/ethstate" "github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethwire" ) @@ -87,6 +88,8 @@ type Ethereum struct { clientIdentity ethwire.ClientIdentity isUpToDate bool + + filters map[int]*ethchain.Filter } func New(db ethutil.Database, clientIdentity ethwire.ClientIdentity, keyManager *ethcrypto.KeyManager, caps Caps, usePnp bool) (*Ethereum, error) { @@ -116,6 +119,7 @@ func New(db ethutil.Database, clientIdentity ethwire.ClientIdentity, keyManager keyManager: keyManager, clientIdentity: clientIdentity, isUpToDate: true, + filters: make(map[int]*ethchain.Filter), } ethereum.reactor = ethreact.New() @@ -386,6 +390,7 @@ func (s *Ethereum) Start(seed bool) { // Start the reaping processes go s.ReapDeadPeerHandler() go s.update() + go s.filterLoop() if seed { s.Seed() @@ -536,6 +541,60 @@ out: } } +var filterId = 0 + +func (self *Ethereum) InstallFilter(object map[string]interface{}) (*ethchain.Filter, int) { + defer func() { filterId++ }() + + filter := ethchain.NewFilterFromMap(object, self) + self.filters[filterId] = filter + + return filter, filterId +} + +func (self *Ethereum) UninstallFilter(id int) { + delete(self.filters, id) +} + +func (self *Ethereum) GetFilter(id int) *ethchain.Filter { + return self.filters[id] +} + +func (self *Ethereum) filterLoop() { + blockChan := make(chan ethreact.Event, 5) + messageChan := make(chan ethreact.Event, 5) + // Subscribe to events + reactor := self.Reactor() + reactor.Subscribe("newBlock", blockChan) + reactor.Subscribe("messages", messageChan) +out: + for { + select { + case <-self.quit: + break out + case block := <-blockChan: + if block, ok := block.Resource.(*ethchain.Block); ok { + for _, filter := range self.filters { + if filter.BlockCallback != nil { + filter.BlockCallback(block) + } + } + } + case msg := <-messageChan: + if messages, ok := msg.Resource.(ethstate.Messages); ok { + for _, filter := range self.filters { + if filter.MessageCallback != nil { + msgs := filter.FilterMessages(messages) + if len(msgs) > 0 { + filter.MessageCallback(msgs) + } + } + } + } + } + } +} + func bootstrapDb(db ethutil.Database) { d, _ := db.Get([]byte("ProtocolVersion")) protov := ethutil.NewValue(d).Uint() -- cgit v1.2.3 From 399256b38403f2e95312250d49fca3cada8956b8 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 15 Sep 2014 22:11:05 +0200 Subject: VM execution fixes Refactoring caused executing issues --- ethereum.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'ethereum.go') diff --git a/ethereum.go b/ethereum.go index fdfb59b09..8d62fa9f2 100644 --- a/ethereum.go +++ b/ethereum.go @@ -23,7 +23,8 @@ import ( const ( seedTextFileUri string = "http://www.ethereum.org/servers.poc3.txt" - seedNodeAddress = "54.76.56.74:30303" + //seedNodeAddress = "54.76.56.74:30303" + seedNodeAddress = "localhost:30303" ) var ethlogger = ethlog.NewLogger("SERV") -- cgit v1.2.3 From d02024929a3e617c16c5b33e1d245f23fa4f6c7b Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 16 Sep 2014 11:35:26 +0200 Subject: require 5 for post --- ethereum.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'ethereum.go') diff --git a/ethereum.go b/ethereum.go index 8d62fa9f2..fdfb59b09 100644 --- a/ethereum.go +++ b/ethereum.go @@ -23,8 +23,7 @@ import ( const ( seedTextFileUri string = "http://www.ethereum.org/servers.poc3.txt" - //seedNodeAddress = "54.76.56.74:30303" - seedNodeAddress = "localhost:30303" + seedNodeAddress = "54.76.56.74:30303" ) var ethlogger = ethlog.NewLogger("SERV") -- cgit v1.2.3 From 1549a29c9d6452eefa615baedfccfc5b5f6b7745 Mon Sep 17 00:00:00 2001 From: obscuren Date: Tue, 16 Sep 2014 16:36:27 +0200 Subject: Connect to previous peer --- ethereum.go | 91 ++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 54 insertions(+), 37 deletions(-) (limited to 'ethereum.go') diff --git a/ethereum.go b/ethereum.go index fdfb59b09..729f81926 100644 --- a/ethereum.go +++ b/ethereum.go @@ -2,9 +2,11 @@ package eth import ( "container/list" + "encoding/json" "fmt" "math/rand" "net" + "path" "strconv" "strings" "sync" @@ -31,9 +33,7 @@ var ethlogger = ethlog.NewLogger("SERV") func eachPeer(peers *list.List, callback func(*Peer, *list.Element)) { // Loop thru the peers and close them (if we had them) for e := peers.Front(); e != nil; e = e.Next() { - if peer, ok := e.Value.(*Peer); ok { - callback(peer, e) - } + callback(e.Value.(*Peer), e) } } @@ -399,47 +399,57 @@ func (s *Ethereum) Start(seed bool) { } func (s *Ethereum) Seed() { - ethlogger.Debugln("Retrieving seed nodes") - - // Eth-Go Bootstrapping - ips, er := net.LookupIP("seed.bysh.me") - if er == nil { - peers := []string{} + var ips []string + data, _ := ethutil.ReadAllFile(path.Join(ethutil.Config.ExecPath, "known_peers.json")) + json.Unmarshal([]byte(data), &ips) + if len(ips) > 0 { for _, ip := range ips { - node := fmt.Sprintf("%s:%d", ip.String(), 30303) - ethlogger.Debugln("Found DNS Go Peer:", node) - peers = append(peers, node) + ethlogger.Infoln("Connecting to previous peer ", ip) + s.ConnectToPeer(ip) + } + } else { + ethlogger.Debugln("Retrieving seed nodes") + + // Eth-Go Bootstrapping + ips, er := net.LookupIP("seed.bysh.me") + if er == nil { + peers := []string{} + for _, ip := range ips { + node := fmt.Sprintf("%s:%d", ip.String(), 30303) + ethlogger.Debugln("Found DNS Go Peer:", node) + peers = append(peers, node) + } + s.ProcessPeerList(peers) } - s.ProcessPeerList(peers) - } - // Official DNS Bootstrapping - _, nodes, err := net.LookupSRV("eth", "tcp", "ethereum.org") - if err == nil { - peers := []string{} - // Iterate SRV nodes - for _, n := range nodes { - target := n.Target - port := strconv.Itoa(int(n.Port)) - // Resolve target to ip (Go returns list, so may resolve to multiple ips?) - addr, err := net.LookupHost(target) - if err == nil { - for _, a := range addr { - // Build string out of SRV port and Resolved IP - peer := net.JoinHostPort(a, port) - ethlogger.Debugln("Found DNS Bootstrap Peer:", peer) - peers = append(peers, peer) + // Official DNS Bootstrapping + _, nodes, err := net.LookupSRV("eth", "tcp", "ethereum.org") + if err == nil { + peers := []string{} + // Iterate SRV nodes + for _, n := range nodes { + target := n.Target + port := strconv.Itoa(int(n.Port)) + // Resolve target to ip (Go returns list, so may resolve to multiple ips?) + addr, err := net.LookupHost(target) + if err == nil { + for _, a := range addr { + // Build string out of SRV port and Resolved IP + peer := net.JoinHostPort(a, port) + ethlogger.Debugln("Found DNS Bootstrap Peer:", peer) + peers = append(peers, peer) + } + } else { + ethlogger.Debugln("Couldn't resolve :", target) } - } else { - ethlogger.Debugln("Couldn't resolve :", target) } + // Connect to Peer list + s.ProcessPeerList(peers) } - // Connect to Peer list - s.ProcessPeerList(peers) - } - // XXX tmp - s.ConnectToPeer(seedNodeAddress) + // XXX tmp + s.ConnectToPeer(seedNodeAddress) + } } func (s *Ethereum) peerHandler(listener net.Listener) { @@ -459,6 +469,13 @@ func (s *Ethereum) Stop() { // Close the database defer s.db.Close() + var ips []string + eachPeer(s.peers, func(p *Peer, e *list.Element) { + ips = append(ips, p.conn.RemoteAddr().String()) + }) + d, _ := json.MarshalIndent(ips, "", " ") + ethutil.WriteFile(path.Join(ethutil.Config.ExecPath, "known_peers.json"), d) + eachPeer(s.peers, func(p *Peer, e *list.Element) { p.Stop() }) -- cgit v1.2.3 From 9559b5322857edfc819f7888a791d4f2a396fd17 Mon Sep 17 00:00:00 2001 From: obscuren Date: Wed, 17 Sep 2014 15:57:44 +0200 Subject: Added Past peers option --- ethereum.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'ethereum.go') diff --git a/ethereum.go b/ethereum.go index 729f81926..4cf1ce9e7 100644 --- a/ethereum.go +++ b/ethereum.go @@ -399,9 +399,7 @@ func (s *Ethereum) Start(seed bool) { } func (s *Ethereum) Seed() { - var ips []string - data, _ := ethutil.ReadAllFile(path.Join(ethutil.Config.ExecPath, "known_peers.json")) - json.Unmarshal([]byte(data), &ips) + ips := PastPeers() if len(ips) > 0 { for _, ip := range ips { ethlogger.Infoln("Connecting to previous peer ", ip) @@ -473,8 +471,11 @@ func (s *Ethereum) Stop() { eachPeer(s.peers, func(p *Peer, e *list.Element) { ips = append(ips, p.conn.RemoteAddr().String()) }) - d, _ := json.MarshalIndent(ips, "", " ") - ethutil.WriteFile(path.Join(ethutil.Config.ExecPath, "known_peers.json"), d) + + if len(ips) > 0 { + d, _ := json.MarshalIndent(ips, "", " ") + ethutil.WriteFile(path.Join(ethutil.Config.ExecPath, "known_peers.json"), d) + } eachPeer(s.peers, func(p *Peer, e *list.Element) { p.Stop() @@ -620,3 +621,11 @@ func bootstrapDb(db ethutil.Database) { db.Put([]byte("ProtocolVersion"), ethutil.NewValue(ProtocolVersion).Bytes()) } } + +func PastPeers() []string { + var ips []string + data, _ := ethutil.ReadAllFile(path.Join(ethutil.Config.ExecPath, "known_peers.json")) + json.Unmarshal([]byte(data), &ips) + + return ips +} -- cgit v1.2.3 From 16871ae2b49fb2a8fad3848e3184c8ab87c7f67a Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 22 Sep 2014 16:28:49 +0200 Subject: New Peer server --- ethereum.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'ethereum.go') diff --git a/ethereum.go b/ethereum.go index 4cf1ce9e7..a54399921 100644 --- a/ethereum.go +++ b/ethereum.go @@ -25,7 +25,7 @@ import ( const ( seedTextFileUri string = "http://www.ethereum.org/servers.poc3.txt" - seedNodeAddress = "54.76.56.74:30303" + seedNodeAddress = "poc-6.ethdev.com:30303" ) var ethlogger = ethlog.NewLogger("SERV") @@ -208,6 +208,7 @@ func (s *Ethereum) ProcessPeerList(addrs []string) { } func (s *Ethereum) ConnectToPeer(addr string) error { + fmt.Println("ConnectToPeer", addr) if s.peers.Len() < s.MaxPeers { var alreadyConnected bool -- cgit v1.2.3 From 1bc815e0b1d3fb6f47f8747e607a03f6d8a25ac2 Mon Sep 17 00:00:00 2001 From: obscuren Date: Mon, 22 Sep 2014 16:30:30 +0200 Subject: Remove log --- ethereum.go | 1 - 1 file changed, 1 deletion(-) (limited to 'ethereum.go') diff --git a/ethereum.go b/ethereum.go index a54399921..79e722c26 100644 --- a/ethereum.go +++ b/ethereum.go @@ -208,7 +208,6 @@ func (s *Ethereum) ProcessPeerList(addrs []string) { } func (s *Ethereum) ConnectToPeer(addr string) error { - fmt.Println("ConnectToPeer", addr) if s.peers.Len() < s.MaxPeers { var alreadyConnected bool -- cgit v1.2.3