From 164ae00f46ecb353cffd659a85ef4198ce7dde8c Mon Sep 17 00:00:00 2001 From: coblee Date: Sun, 9 Oct 2011 20:46:21 -1000 Subject: [PATCH] Litecoin: Fix zeitgeist2 attack thanks to Lolcust and ArtForz. This fixes an issue where a 51% attack can change difficulty at will. Go back the full period unless it's the first retarget after genesis. --- src/main.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 40cd9cab3..0f2ea5429 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1136,9 +1136,15 @@ unsigned int static GetNextWorkRequired(const CBlockIndex* pindexLast, const CBl return pindexLast->nBits; } + // Litecoin: This fixes an issue where a 51% attack can change difficulty at will. + // Go back the full period unless it's the first retarget after genesis. Code courtesy of Art Forz + int blockstogoback = nInterval-1; + if ((pindexLast->nHeight+1) != nInterval) + blockstogoback = nInterval; + // Go back by what we want to be 14 days worth of blocks const CBlockIndex* pindexFirst = pindexLast; - for (int i = 0; pindexFirst && i < nInterval-1; i++) + for (int i = 0; pindexFirst && i < blockstogoback; i++) pindexFirst = pindexFirst->pprev; assert(pindexFirst);