aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarrad Hope <me@jarradhope.com>2014-03-07 02:01:38 +0800
committerJarrad Hope <me@jarradhope.com>2014-03-07 02:01:38 +0800
commit8162aff8cfb76bf53dd06a19cf12208f7946349d (patch)
treedc4fb1ab7b2330b8c4b9063b38877de0c737ffb6
parentbe543a6d178063a60d404a373ced296ed6d4744c (diff)
downloadgo-tangerine-8162aff8cfb76bf53dd06a19cf12208f7946349d.tar.gz
go-tangerine-8162aff8cfb76bf53dd06a19cf12208f7946349d.tar.zst
go-tangerine-8162aff8cfb76bf53dd06a19cf12208f7946349d.zip
Add DNS Bootstrapping
-rw-r--r--ethereum.go53
1 files changed, 39 insertions, 14 deletions
diff --git a/ethereum.go b/ethereum.go
index 342f4f573..4dd29f2e6 100644
--- a/ethereum.go
+++ b/ethereum.go
@@ -262,21 +262,46 @@ func (s *Ethereum) Start() {
go s.ReapDeadPeerHandler()
if ethutil.Config.Seed {
- ethutil.Config.Log.Debugln("Seeding")
- // Testnet seed bootstrapping
- resp, err := http.Get("https://www.ethereum.org/servers.poc3.txt")
- if err != nil {
- log.Println("Fetching seed failed:", err)
- return
- }
- defer resp.Body.Close()
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- log.Println("Reading seed failed:", err)
- return
- }
+ ethutil.Config.Log.Debugln("Seeding")
+ // 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 := 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, strconv.Itoa(int(port)))
+ log.Println("Found DNS Bootstrap Peer:", peer)
+ peers = append(peers, peer)
+ }
+ } else {
+ log.Println("Couldn't resolve :", target)
+ }
+ }
+ // Connect to Peer list
+ s.ProcessPeerList(peers)
+ } else {
+ // Fallback to servers.poc3.txt
+ resp, err := http.Get("http://www.ethereum.org/servers.poc3.txt")
+ if err != nil {
+ log.Println("Fetching seed failed:", err)
+ return
+ }
+ defer resp.Body.Close()
+ body, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ log.Println("Reading seed failed:", err)
+ return
+ }
- s.ConnectToPeer(string(body))
+ s.ConnectToPeer(string(body))
+ }
}
}