Browse Source

Increased nPowTargetTimespan to 10 seconds for RegTest.

Checked fPowNoRetargeting in pow.cpp.
cn
Jianping Wu 6 years ago
parent
commit
3cf8093553
  1. 4
      src/chainparams.cpp
  2. 3
      src/pow.cpp
  3. 17
      test/functional/feature_block.py
  4. 2
      test/functional/interface_rest.py
  5. 2
      test/functional/p2p_invalid_block.py
  6. 2
      test/functional/test_framework/blocktools.py
  7. 14
      test/functional/test_framework/mininode.py
  8. 2
      test/functional/test_framework/util.py

4
src/chainparams.cpp

@ -260,8 +260,8 @@ public:
consensus.BIP65Height = 1351; // BIP65 activated on regtest (Used in rpc activation tests) consensus.BIP65Height = 1351; // BIP65 activated on regtest (Used in rpc activation tests)
consensus.BIP66Height = 1251; // BIP66 activated on regtest (Used in rpc activation tests) consensus.BIP66Height = 1251; // BIP66 activated on regtest (Used in rpc activation tests)
consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
consensus.nPowTargetTimespan = 1; // 1 second consensus.nPowTargetTimespan = 10; // 10 second
consensus.nPowTargetSpacing = 1; // 1 second consensus.nPowTargetSpacing = 10; // 10 second
consensus.fPowAllowMinDifficultyBlocks = true; consensus.fPowAllowMinDifficultyBlocks = true;
consensus.fPowNoRetargeting = true; consensus.fPowNoRetargeting = true;
consensus.nRuleChangeActivationThreshold = 108; // 75% for testchains consensus.nRuleChangeActivationThreshold = 108; // 75% for testchains

3
src/pow.cpp

@ -15,6 +15,9 @@
// Copy and modified from CalculateDogecoinNextWorkRequired (dogecoin.cpp) // Copy and modified from CalculateDogecoinNextWorkRequired (dogecoin.cpp)
unsigned int CalculateDigishieldNextWorkRequired(const CBlockIndex* pindexLast, int64_t nFirstBlockTime, const Consensus::Params& params) unsigned int CalculateDigishieldNextWorkRequired(const CBlockIndex* pindexLast, int64_t nFirstBlockTime, const Consensus::Params& params)
{ {
if (params.fPowNoRetargeting)
return pindexLast->nBits;
const int64_t retargetTimespan = params.nPowTargetTimespan; const int64_t retargetTimespan = params.nPowTargetTimespan;
const int64_t nActualTimespan = pindexLast->GetBlockTime() - nFirstBlockTime; const int64_t nActualTimespan = pindexLast->GetBlockTime() - nFirstBlockTime;
int64_t nModulatedTimespan = nActualTimespan; int64_t nModulatedTimespan = nActualTimespan;

17
test/functional/feature_block.py

@ -825,7 +825,7 @@ class FullBlockTest(ComparisonTestFramework):
# tx with output value > input value out of range # tx with output value > input value out of range
tip(57) tip(57)
b59 = block(59) b59 = block(59)
tx = create_and_sign_tx(out[17].tx, out[17].n, 51*COIN) tx = create_and_sign_tx(out[17].tx, out[17].n, 510*COIN)
b59 = update_block(59, [tx]) b59 = update_block(59, [tx])
yield rejected(RejectResult(16, b'bad-txns-in-belowout')) yield rejected(RejectResult(16, b'bad-txns-in-belowout'))
@ -844,13 +844,14 @@ class FullBlockTest(ComparisonTestFramework):
# not-fully-spent transaction in the same chain. To test, make identical coinbases; # not-fully-spent transaction in the same chain. To test, make identical coinbases;
# the second one should be rejected. # the second one should be rejected.
# #
tip(60) # Kevacoin - BIP34 is activated since beginning, no need for BIP30, test case skipped.
b61 = block(61, spend=out[18]) #tip(60)
b61.vtx[0].vin[0].scriptSig = b60.vtx[0].vin[0].scriptSig #equalize the coinbases #b61 = block(61, spend=out[18])
b61.vtx[0].rehash() #b61.vtx[0].vin[0].scriptSig = b60.vtx[0].vin[0].scriptSig #equalize the coinbases
b61 = update_block(61, []) #b61.vtx[0].rehash()
assert_equal(b60.vtx[0].serialize(), b61.vtx[0].serialize()) #b61 = update_block(61, [])
yield rejected(RejectResult(16, b'bad-txns-BIP30')) #assert_equal(b60.vtx[0].serialize(), b61.vtx[0].serialize())
#yield rejected(RejectResult(16, b'bad-txns-BIP30'))
# Test tx.isFinal is properly rejected (not an exhaustive tx.isFinal test, that should be in data-driven transaction tests) # Test tx.isFinal is properly rejected (not an exhaustive tx.isFinal test, that should be in data-driven transaction tests)

2
test/functional/interface_rest.py

@ -60,7 +60,7 @@ class RESTTest (BitcoinTestFramework):
self.nodes[2].generate(100) self.nodes[2].generate(100)
self.sync_all() self.sync_all()
assert_equal(self.nodes[0].getbalance(), 50) assert_equal(self.nodes[0].getbalance(), 500)
txid = self.nodes[0].sendtoaddress(self.nodes[1].getnewaddress(), 0.1) txid = self.nodes[0].sendtoaddress(self.nodes[1].getnewaddress(), 0.1)
self.sync_all() self.sync_all()

2
test/functional/p2p_invalid_block.py

@ -118,7 +118,7 @@ class InvalidBlockRequestTest(ComparisonTestFramework):
block3 = create_block(self.tip, create_coinbase(height), self.block_time) block3 = create_block(self.tip, create_coinbase(height), self.block_time)
block3.nVersion = 0x20000000 block3.nVersion = 0x20000000
self.block_time += 1 self.block_time += 1
block3.vtx[0].vout[0].nValue = 100 * COIN # Too high! block3.vtx[0].vout[0].nValue = 1000 * COIN # Too high!
block3.vtx[0].sha256=None block3.vtx[0].sha256=None
block3.vtx[0].calc_sha256() block3.vtx[0].calc_sha256()
block3.hashMerkleRoot = block3.calc_merkle_root() block3.hashMerkleRoot = block3.calc_merkle_root()

2
test/functional/test_framework/blocktools.py

@ -89,7 +89,7 @@ def create_coinbase(height, pubkey = None):
coinbase.vin.append(CTxIn(COutPoint(0, 0xffffffff), coinbase.vin.append(CTxIn(COutPoint(0, 0xffffffff),
ser_string(serialize_script_num(height)), 0xffffffff)) ser_string(serialize_script_num(height)), 0xffffffff))
coinbaseoutput = CTxOut() coinbaseoutput = CTxOut()
coinbaseoutput.nValue = 50 * COIN coinbaseoutput.nValue = 500 * COIN
halvings = int(height/150) # regtest halvings = int(height/150) # regtest
coinbaseoutput.nValue >>= halvings coinbaseoutput.nValue >>= halvings
if (pubkey != None): if (pubkey != None):

14
test/functional/test_framework/mininode.py

@ -345,25 +345,25 @@ class P2PInterface(P2PConnection):
# Connection helper methods # Connection helper methods
def wait_for_disconnect(self, timeout=60): def wait_for_disconnect(self, timeout=360):
test_function = lambda: self.state != "connected" test_function = lambda: self.state != "connected"
wait_until(test_function, timeout=timeout, lock=mininode_lock) wait_until(test_function, timeout=timeout, lock=mininode_lock)
# Message receiving helper methods # Message receiving helper methods
def wait_for_block(self, blockhash, timeout=60): def wait_for_block(self, blockhash, timeout=360):
test_function = lambda: self.last_message.get("block") and self.last_message["block"].block.rehash() == blockhash test_function = lambda: self.last_message.get("block") and self.last_message["block"].block.rehash() == blockhash
wait_until(test_function, timeout=timeout, lock=mininode_lock) wait_until(test_function, timeout=timeout, lock=mininode_lock)
def wait_for_getdata(self, timeout=60): def wait_for_getdata(self, timeout=360):
test_function = lambda: self.last_message.get("getdata") test_function = lambda: self.last_message.get("getdata")
wait_until(test_function, timeout=timeout, lock=mininode_lock) wait_until(test_function, timeout=timeout, lock=mininode_lock)
def wait_for_getheaders(self, timeout=60): def wait_for_getheaders(self, timeout=360):
test_function = lambda: self.last_message.get("getheaders") test_function = lambda: self.last_message.get("getheaders")
wait_until(test_function, timeout=timeout, lock=mininode_lock) wait_until(test_function, timeout=timeout, lock=mininode_lock)
def wait_for_inv(self, expected_inv, timeout=60): def wait_for_inv(self, expected_inv, timeout=360):
"""Waits for an INV message and checks that the first inv object in the message was as expected.""" """Waits for an INV message and checks that the first inv object in the message was as expected."""
if len(expected_inv) > 1: if len(expected_inv) > 1:
raise NotImplementedError("wait_for_inv() will only verify the first inv object") raise NotImplementedError("wait_for_inv() will only verify the first inv object")
@ -372,7 +372,7 @@ class P2PInterface(P2PConnection):
self.last_message["inv"].inv[0].hash == expected_inv[0].hash self.last_message["inv"].inv[0].hash == expected_inv[0].hash
wait_until(test_function, timeout=timeout, lock=mininode_lock) wait_until(test_function, timeout=timeout, lock=mininode_lock)
def wait_for_verack(self, timeout=60): def wait_for_verack(self, timeout=360):
test_function = lambda: self.message_count["verack"] test_function = lambda: self.message_count["verack"]
wait_until(test_function, timeout=timeout, lock=mininode_lock) wait_until(test_function, timeout=timeout, lock=mininode_lock)
@ -383,7 +383,7 @@ class P2PInterface(P2PConnection):
self.sync_with_ping() self.sync_with_ping()
# Sync up with the node # Sync up with the node
def sync_with_ping(self, timeout=60): def sync_with_ping(self, timeout=360):
self.send_message(msg_ping(nonce=self.ping_counter)) self.send_message(msg_ping(nonce=self.ping_counter))
test_function = lambda: self.last_message.get("pong") and self.last_message["pong"].nonce == self.ping_counter test_function = lambda: self.last_message.get("pong") and self.last_message["pong"].nonce == self.ping_counter
wait_until(test_function, timeout=timeout, lock=mininode_lock) wait_until(test_function, timeout=timeout, lock=mininode_lock)

2
test/functional/test_framework/util.py

@ -202,7 +202,7 @@ def satoshi_round(amount):
def wait_until(predicate, *, attempts=float('inf'), timeout=float('inf'), lock=None): def wait_until(predicate, *, attempts=float('inf'), timeout=float('inf'), lock=None):
if attempts == float('inf') and timeout == float('inf'): if attempts == float('inf') and timeout == float('inf'):
timeout = 60 timeout = 600
attempt = 0 attempt = 0
timeout += time.time() timeout += time.time()

Loading…
Cancel
Save