aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPieter Wuille <[email protected]>2015-03-19 09:51:59 -0700
committerRoss Nicoll <[email protected]>2015-06-27 14:15:32 +0000
commit9b95692530f38781a09f92c16193bbc94d1cdaf1 (patch)
tree43a9707ad857a569dd7071375be428d1eeae0f1e /src
parentDo not bias outgoing connections towards fresh addresses (diff)
downloaddiscoin-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.cpp8
-rw-r--r--src/addrman.h12
-rw-r--r--src/net.cpp3
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))