From 99c0e81b9529dbcbc262bdc9854cbb0517c5a8fd Mon Sep 17 00:00:00 2001 From: John Newbery Date: Thu, 9 Feb 2017 18:59:32 -0500 Subject: [PATCH 1/2] Fix BIP68 activation test --- qa/rpc-tests/bip68-sequence.py | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/qa/rpc-tests/bip68-sequence.py b/qa/rpc-tests/bip68-sequence.py index a12bf10eb..ae3a3147a 100755 --- a/qa/rpc-tests/bip68-sequence.py +++ b/qa/rpc-tests/bip68-sequence.py @@ -51,15 +51,12 @@ class BIP68Test(BitcoinTestFramework): print("Running test BIP68 not consensus before versionbits activation") self.test_bip68_not_consensus() - print("Verifying nVersion=2 transactions aren't standard") - self.test_version2_relay(before_activation=True) + print("Verifying nVersion=2 transactions are standard") + self.test_version2_relay() print("Activating BIP68 (and 112/113)") self.activateCSV() - print("Verifying nVersion=2 transactions are now standard") - self.test_version2_relay(before_activation=False) - print("Passed\n") # Test that BIP68 is not in effect if tx version is 1, or if @@ -399,6 +396,17 @@ class BIP68Test(BitcoinTestFramework): self.nodes[0].submitblock(ToHex(block)) assert_equal(self.nodes[0].getbestblockhash(), block.hash) + # Use self.nodes[1] to test that version 2 transactions are standard even before BIP68 activation. + def test_version2_relay(self): + inputs = [ ] + outputs = { self.nodes[1].getnewaddress() : 1.0 } + rawtx = self.nodes[1].createrawtransaction(inputs, outputs) + rawtxfund = self.nodes[1].fundrawtransaction(rawtx)['hex'] + tx = FromHex(CTransaction(), rawtxfund) + tx.nVersion = 2 + tx_signed = self.nodes[1].signrawtransaction(ToHex(tx))["hex"] + tx_id = self.nodes[1].sendrawtransaction(tx_signed) + def activateCSV(self): # activation should happen at block height 432 (3 periods) min_activation_height = 432 @@ -408,21 +416,5 @@ class BIP68Test(BitcoinTestFramework): assert(get_bip9_status(self.nodes[0], 'csv')['status'] == 'active') sync_blocks(self.nodes) - # Use self.nodes[1] to test standardness relay policy - def test_version2_relay(self, before_activation): - inputs = [ ] - outputs = { self.nodes[1].getnewaddress() : 1.0 } - rawtx = self.nodes[1].createrawtransaction(inputs, outputs) - rawtxfund = self.nodes[1].fundrawtransaction(rawtx)['hex'] - tx = FromHex(CTransaction(), rawtxfund) - tx.nVersion = 2 - tx_signed = self.nodes[1].signrawtransaction(ToHex(tx))["hex"] - try: - tx_id = self.nodes[1].sendrawtransaction(tx_signed) - assert(before_activation == False) - except: - assert(before_activation) - - if __name__ == '__main__': BIP68Test().main() From f5aba8a3c5f10bf42595cbaf0439976cd48c57b1 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Tue, 21 Feb 2017 16:52:12 -0500 Subject: [PATCH 2/2] Move tx version 2 standardness check to after bip68 activation --- qa/rpc-tests/bip68-sequence.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/qa/rpc-tests/bip68-sequence.py b/qa/rpc-tests/bip68-sequence.py index ae3a3147a..009df7cba 100755 --- a/qa/rpc-tests/bip68-sequence.py +++ b/qa/rpc-tests/bip68-sequence.py @@ -51,12 +51,13 @@ class BIP68Test(BitcoinTestFramework): print("Running test BIP68 not consensus before versionbits activation") self.test_bip68_not_consensus() - print("Verifying nVersion=2 transactions are standard") - self.test_version2_relay() - print("Activating BIP68 (and 112/113)") self.activateCSV() + print("Verifying nVersion=2 transactions are standard.") + print("Note that with current versions of bitcoin software, nVersion=2 transactions are always standard (independent of BIP68 activation status).") + self.test_version2_relay() + print("Passed\n") # Test that BIP68 is not in effect if tx version is 1, or if @@ -396,7 +397,16 @@ class BIP68Test(BitcoinTestFramework): self.nodes[0].submitblock(ToHex(block)) assert_equal(self.nodes[0].getbestblockhash(), block.hash) - # Use self.nodes[1] to test that version 2 transactions are standard even before BIP68 activation. + def activateCSV(self): + # activation should happen at block height 432 (3 periods) + min_activation_height = 432 + height = self.nodes[0].getblockcount() + assert(height < 432) + self.nodes[0].generate(432-height) + assert(get_bip9_status(self.nodes[0], 'csv')['status'] == 'active') + sync_blocks(self.nodes) + + # Use self.nodes[1] to test that version 2 transactions are standard. def test_version2_relay(self): inputs = [ ] outputs = { self.nodes[1].getnewaddress() : 1.0 } @@ -407,14 +417,5 @@ class BIP68Test(BitcoinTestFramework): tx_signed = self.nodes[1].signrawtransaction(ToHex(tx))["hex"] tx_id = self.nodes[1].sendrawtransaction(tx_signed) - def activateCSV(self): - # activation should happen at block height 432 (3 periods) - min_activation_height = 432 - height = self.nodes[0].getblockcount() - assert(height < 432) - self.nodes[0].generate(432-height) - assert(get_bip9_status(self.nodes[0], 'csv')['status'] == 'active') - sync_blocks(self.nodes) - if __name__ == '__main__': BIP68Test().main()