Skip to content

EDGE (1.4.6)

Compare
Choose a tag to compare
@karalabe karalabe released this 06 Jun 15:58
· 9115 commits to master since this release

As Ethereum got more popular, the peer-to-peer networking infrastructure became extremely versatile (we have 3G peers in New Zealand and Satellite peers in the US). Certain assumptions that Geth made about the network when we've launched became untrue in the last months, especially with TheDAO bringing in an unexpected number of new users and environments. In this newly expanded network, the original assumptions caused Geth to be too aggressive with which peers are useful and which are not.

Geth 1.4.6 "EDGE" aims to solve the synchronization issues resulting from this newly found heterogeneity: it introduces a lot more download concurrency to avoid bottlenecks caused by badly connected remote machines, and also introduces adaptive quality-of-service tuning to make peer selection less aggressive for users with more restricted connectivity.

The result is a newly polished sync mechanism that can churn out a 7-8MB/s download speed in the current Ethereum main network (if your connectivity allows it), but also provide a solid and stable stream for all users, verified for as low as EDGE connections (440ms latency, 200 kbps upstream, 220kbps downstream).

We'd like to shout out a big thanks to @ellis2323 for the tireless benchmarking and re-benchmarking of our polishes on high end machines and connectivity (reaching 3 hours full sync times and 20 minutes fast sync times) as well as to @JasonCoombs for verifying connectivity and sync stability on extremely high latency satellite links.

A breakdown of the sync changes:

  • Concurrent header retrievals to prevent sync bottlenecks #2315
  • Disable transaction processing during initial sync cycle #2574, #2649
  • Download state trie concurrently with blockchain during fast sync #2627
  • Adaptive quality of service tuning for restricted connectivity #2630
  • Fast-sync critical-section download failure resiliency #2647
  • Enterprise grade hand-tuned multi-level heuristic smart caching :trollface: #2585

Polishes and bugfixes:

  • Refactor JavaScript console for external library reuse #2535, #2656
  • Re-enable bad block reporting to track any strange activity #2614
  • Fix a transaction pool data-race for extreme tests #2655
  • Fix eth_getTransactionCount on the testnet for non existent accounts #2626
  • Fix compiler path and listing for Solidity compilation #2613, #2612
  • Fix an extremely rare downloader hang after a successful sync #2637
  • Fix a CI server go vet annoyance with mutex copying #2580