From 4951fb7241cb155658b52be98ad25187f0117c0c Mon Sep 17 00:00:00 2001 From: Ross Nicoll Date: Fri, 16 Oct 2015 21:04:38 +0100 Subject: [PATCH] Add unit tests for the retarget at block 720. --- .../params/AbstractDogecoinParams.java | 17 +++++++++- .../params/AbstractDogecoinParamsTest.java | 29 +++++++++++++++--- .../org/libdohj/params/dogecoin_block719.bin | Bin 0 -> 190 bytes 3 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 src/test/resources/org/libdohj/params/dogecoin_block719.bin diff --git a/src/main/java/org/libdohj/params/AbstractDogecoinParams.java b/src/main/java/org/libdohj/params/AbstractDogecoinParams.java index 01a8fcb7..f03df1d4 100644 --- a/src/main/java/org/libdohj/params/AbstractDogecoinParams.java +++ b/src/main/java/org/libdohj/params/AbstractDogecoinParams.java @@ -20,7 +20,6 @@ import java.io.ByteArrayOutputStream; import java.math.BigInteger; import org.bitcoinj.core.AltcoinBlock; -import org.libdohj.core.AltcoinNetworkParameters; import org.bitcoinj.core.Block; import org.bitcoinj.core.Coin; import static org.bitcoinj.core.Coin.COIN; @@ -92,6 +91,8 @@ public abstract class AbstractDogecoinParams extends NetworkParameters implement protected final int diffChangeTarget; protected Logger log = LoggerFactory.getLogger(AbstractDogecoinParams.class); + public static final int DOGECOIN_PROTOCOL_VERSION_AUXPOW = 70003; + public static final int DOGECOIN_PROTOCOL_VERSION_CURRENT = 70004; public AbstractDogecoinParams(final int setDiffChangeTarget) { super(); @@ -320,6 +321,20 @@ public abstract class AbstractDogecoinParams extends NetworkParameters implement return new AltcoinSerializer(this, parseRetain); } + @Override + public int getProtocolVersionNum(final ProtocolVersion version) { + switch (version) { + case PONG: + case BLOOM_FILTER: + return version.getBitcoinProtocolVersion(); + case CURRENT: + return DOGECOIN_PROTOCOL_VERSION_CURRENT; + case MINIMUM: + default: + return DOGECOIN_PROTOCOL_VERSION_AUXPOW; + } + } + @Override public boolean isAuxPoWBlockVersion(long version) { return version >= BLOCK_MIN_VERSION_AUXPOW diff --git a/src/test/java/org/libdohj/params/AbstractDogecoinParamsTest.java b/src/test/java/org/libdohj/params/AbstractDogecoinParamsTest.java index e2b4d6f0..937527d7 100644 --- a/src/test/java/org/libdohj/params/AbstractDogecoinParamsTest.java +++ b/src/test/java/org/libdohj/params/AbstractDogecoinParamsTest.java @@ -43,14 +43,28 @@ public class AbstractDogecoinParamsTest { long lastRetargetDifficulty = 0x1e0ffff0; long lastRetargetTime = 1386474927; // Block 1 long newDifficulty = params.getNewDifficultyTarget(previousHeight, previousBlockTime, lastRetargetDifficulty, lastRetargetTime); - assertEquals(newDifficulty, 0x1e00ffff); + assertEquals(0x1e00ffff, newDifficulty); previousHeight = 9599; previousBlockTime = 1386954113; lastRetargetDifficulty = 0x1c1a1206; lastRetargetTime = 1386942008; // Block 9359 newDifficulty = params.getNewDifficultyTarget(previousHeight, previousBlockTime, lastRetargetDifficulty, lastRetargetTime); - assertEquals(newDifficulty, 0x1c15ea59); + assertEquals(0x1c15ea59, newDifficulty); + } + + /** + * Test block 720, where the time interval is below the minimum time interval + * (900 seconds). + */ + @Test + public void shouldConstrainActualTime() { + int previousHeight = 719; + long previousBlockTime = 1386476362; // Block 719 + long lastRetargetDifficulty = 0x1e00ffff; + long lastRetargetTime = 1386475840; // Block 439 + long newDifficulty = params.getNewDifficultyTarget(previousHeight, previousBlockTime, lastRetargetDifficulty, lastRetargetTime); + assertEquals(0x1d0ffff0, newDifficulty); } @Test @@ -60,7 +74,7 @@ public class AbstractDogecoinParamsTest { long lastRetargetDifficulty = 0x1b499dfd; long lastRetargetTime = 1395094427; long newDifficulty = params.getNewDifficultyTarget(previousHeight, previousBlockTime, lastRetargetDifficulty, lastRetargetTime); - assertEquals(newDifficulty, 0x1b671062); + assertEquals(0x1b671062, newDifficulty); } @Test @@ -71,20 +85,25 @@ public class AbstractDogecoinParamsTest { long lastRetargetDifficulty = 0x1b671062; long lastRetargetTime = 1395094679; long newDifficulty = params.getNewDifficultyTarget(previousHeight, previousBlockTime, lastRetargetDifficulty, lastRetargetTime); - assertEquals(newDifficulty, 0x1b6558a4); + assertEquals(0x1b6558a4, newDifficulty); } @Test - public void shouldCalculateFirstRetarget() throws IOException { + public void shouldCalculateRetarget() throws IOException { // Do a more in-depth test for the first retarget byte[] payload = Util.getBytes(getClass().getResourceAsStream("dogecoin_block239.bin")); AltcoinSerializer serializer = (AltcoinSerializer)params.getDefaultSerializer(); final AltcoinBlock block239 = (AltcoinBlock)serializer.makeBlock(payload); final AltcoinBlock block479; + final AltcoinBlock block719; payload = Util.getBytes(getClass().getResourceAsStream("dogecoin_block479.bin")); block479 = (AltcoinBlock)serializer.makeBlock(payload); + payload = Util.getBytes(getClass().getResourceAsStream("dogecoin_block719.bin")); + block719 = (AltcoinBlock)serializer.makeBlock(payload); + assertEquals(0x1e00ffff, params.getNewDifficultyTarget(479, block239, block479)); + assertEquals(0x1d0ffff0, params.getNewDifficultyTarget(719, block479, block719)); } } diff --git a/src/test/resources/org/libdohj/params/dogecoin_block719.bin b/src/test/resources/org/libdohj/params/dogecoin_block719.bin new file mode 100644 index 0000000000000000000000000000000000000000..c906981ea25044f84e1cc9fb2965dc51b2992b37 GIT binary patch literal 190 zcmZQ%U|`s-S1@P)0)?=UnY{IE!kq`dJ>_OJQrviOdVAOUyrb{ZE_^ii-Z3EXOLrHC_cu>2s99c@q+(Az{dj8$H>m6 zA7B*hp$`&bWO$K!q|%LnL0OS$*@DFveyY4-IRE#(VQt9QJsUi_+#J?_{`|kJ@P%cx Jn%^3b1pu|yN2~w< literal 0 HcmV?d00001