Browse Source
0.13bf6cdeb
Increase coverage of DERSIG edge cases (Pieter Wuille)819bcf9
Add RPC test for DERSIG BIP switchover logic (Pieter Wuille)5a47811
BIP66 changeover logic (Pieter Wuille)092e9fe
Example unit tests from BIP66 (Pieter Wuille)80ad135
Change IsDERSignature to BIP66 implementation (Pieter Wuille)
Wladimir J. van der Laan
10 years ago
9 changed files with 405 additions and 64 deletions
@ -0,0 +1,90 @@
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env python2 |
||||
# Copyright (c) 2014 The Bitcoin Core developers |
||||
# Distributed under the MIT software license, see the accompanying |
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. |
||||
|
||||
# |
||||
# Test the BIP66 changeover logic |
||||
# |
||||
|
||||
from test_framework import BitcoinTestFramework |
||||
from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException |
||||
from util import * |
||||
import os |
||||
import shutil |
||||
|
||||
class BIP66Test(BitcoinTestFramework): |
||||
|
||||
def setup_network(self): |
||||
self.nodes = [] |
||||
self.nodes.append(start_node(0, self.options.tmpdir, [])) |
||||
self.nodes.append(start_node(1, self.options.tmpdir, ["-blockversion=2"])) |
||||
self.nodes.append(start_node(2, self.options.tmpdir, ["-blockversion=3"])) |
||||
connect_nodes(self.nodes[1], 0) |
||||
connect_nodes(self.nodes[2], 0) |
||||
self.is_network_split = False |
||||
self.sync_all() |
||||
|
||||
def run_test(self): |
||||
cnt = self.nodes[0].getblockcount() |
||||
|
||||
# Mine some old-version blocks |
||||
self.nodes[1].setgenerate(True, 100) |
||||
self.sync_all() |
||||
if (self.nodes[0].getblockcount() != cnt + 100): |
||||
raise AssertionError("Failed to mine 100 version=2 blocks") |
||||
|
||||
# Mine 750 new-version blocks |
||||
for i in xrange(15): |
||||
self.nodes[2].setgenerate(True, 50) |
||||
self.sync_all() |
||||
if (self.nodes[0].getblockcount() != cnt + 850): |
||||
raise AssertionError("Failed to mine 750 version=3 blocks") |
||||
|
||||
# TODO: check that new DERSIG rules are not enforced |
||||
|
||||
# Mine 1 new-version block |
||||
self.nodes[2].setgenerate(True, 1) |
||||
self.sync_all() |
||||
if (self.nodes[0].getblockcount() != cnt + 851): |
||||
raise AssertionFailure("Failed to mine a version=3 blocks") |
||||
|
||||
# TODO: check that new DERSIG rules are enforced |
||||
|
||||
# Mine 198 new-version blocks |
||||
for i in xrange(2): |
||||
self.nodes[2].setgenerate(True, 99) |
||||
self.sync_all() |
||||
if (self.nodes[0].getblockcount() != cnt + 1049): |
||||
raise AssertionError("Failed to mine 198 version=3 blocks") |
||||
|
||||
# Mine 1 old-version block |
||||
self.nodes[1].setgenerate(True, 1) |
||||
self.sync_all() |
||||
if (self.nodes[0].getblockcount() != cnt + 1050): |
||||
raise AssertionError("Failed to mine a version=2 block after 949 version=3 blocks") |
||||
|
||||
# Mine 1 new-version blocks |
||||
self.nodes[2].setgenerate(True, 1) |
||||
self.sync_all() |
||||
if (self.nodes[0].getblockcount() != cnt + 1051): |
||||
raise AssertionError("Failed to mine a version=3 block") |
||||
|
||||
# Mine 1 old-version blocks |
||||
try: |
||||
self.nodes[1].setgenerate(True, 1) |
||||
raise AssertionError("Succeeded to mine a version=2 block after 950 version=3 blocks") |
||||
except JSONRPCException: |
||||
pass |
||||
self.sync_all() |
||||
if (self.nodes[0].getblockcount() != cnt + 1051): |
||||
raise AssertionError("Accepted a version=2 block after 950 version=3 blocks") |
||||
|
||||
# Mine 1 new-version blocks |
||||
self.nodes[2].setgenerate(True, 1) |
||||
self.sync_all() |
||||
if (self.nodes[0].getblockcount() != cnt + 1052): |
||||
raise AssertionError("Failed to mine a version=3 block") |
||||
|
||||
if __name__ == '__main__': |
||||
BIP66Test().main() |
Loading…
Reference in new issue