-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
bf6cdeb 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)
- Loading branch information
Showing
9 changed files
with
405 additions
and
64 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.