diff options
| author | Pieter Wuille <[email protected]> | 2015-03-19 09:51:59 -0700 |
|---|---|---|
| committer | Ross Nicoll <[email protected]> | 2015-06-27 14:15:32 +0000 |
| commit | 9b95692530f38781a09f92c16193bbc94d1cdaf1 (patch) | |
| tree | 43a9707ad857a569dd7071375be428d1eeae0f1e /src | |
| parent | Do not bias outgoing connections towards fresh addresses (diff) | |
| download | discoin-9b95692530f38781a09f92c16193bbc94d1cdaf1.tar.xz discoin-9b95692530f38781a09f92c16193bbc94d1cdaf1.zip | |
Always use a 50% chance to choose between tried and new entries
This change was suggested as Countermeasure 2 in
Eclipse Attacks on Bitcoin’s Peer-to-Peer Network, Ethan Heilman,
Alison Kendler, Aviv Zohar, Sharon Goldberg. ePrint Archive Report
2015/263. March 2015.
Rebased-From: c6a63ceeb4956933588995bcf01dc3095aaeb1fc
Github-Pull: #5941
Diffstat (limited to 'src')
| -rw-r--r-- | src/addrman.cpp | 8 | ||||
| -rw-r--r-- | src/addrman.h | 12 | ||||
| -rw-r--r-- | src/net.cpp | 3 |
3 files changed, 10 insertions, 13 deletions
diff --git a/src/addrman.cpp b/src/addrman.cpp index f993fab10..ac1250faa 100644 --- a/src/addrman.cpp +++ b/src/addrman.cpp @@ -329,15 +329,13 @@ void CAddrMan::Attempt_(const CService &addr, int64_t nTime) info.nAttempts++; } -CAddress CAddrMan::Select_(int nUnkBias) +CAddress CAddrMan::Select_() { if (size() == 0) return CAddress(); - double nCorTried = sqrt(nTried) * (100.0 - nUnkBias); - double nCorNew = sqrt(nNew) * nUnkBias; - if ((nCorTried + nCorNew)*GetRandInt(1<<30)/(1<<30) < nCorTried) - { + // Use a 50% chance for choosing between tried and new table entries. + if (nTried > 0 && (nNew == 0 || GetRandInt(2) == 0)) { // use a tried node double fChanceFactor = 1.0; while (1) { diff --git a/src/addrman.h b/src/addrman.h index d9c0f0a7f..5d49b99a6 100644 --- a/src/addrman.h +++ b/src/addrman.h @@ -225,8 +225,7 @@ protected: void Attempt_(const CService &addr, int64_t nTime); // Select an address to connect to. - // nUnkBias determines how much to favor new addresses over tried ones (min=0, max=100) - CAddress Select_(int nUnkBias); + CAddress Select_(); #ifdef DEBUG_ADDRMAN // Perform consistency check. Returns an error code or zero. @@ -524,15 +523,16 @@ public: } } - // Choose an address to connect to. - // nUnkBias determines how much "new" entries are favored over "tried" ones (0-100). - CAddress Select(int nUnkBias = 50) + /** + * Choose an address to connect to. + */ + CAddress Select() { CAddress addrRet; { LOCK(cs); Check(); - addrRet = Select_(nUnkBias); + addrRet = Select_(); Check(); } return addrRet; diff --git a/src/net.cpp b/src/net.cpp index b6ebf1cee..279ee4d76 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1360,8 +1360,7 @@ void ThreadOpenConnections() int nTries = 0; while (true) { - // use an nUnkBias between 10 (no outgoing connections) and 90 (8 outgoing connections) - CAddress addr = addrman.Select(10 + min(nOutbound,8)*10); + CAddress addr = addrman.Select(); // if we selected an invalid address, restart if (!addr.IsValid() || setConnected.count(addr.GetGroup()) || IsLocal(addr)) |