1
1
#!/usr/bin/env python3
2
- # Copyright (c) 2015-2018 The Bitcoin Core developers
2
+ # Copyright (c) 2015-2019 The Bitcoin Core developers
3
3
# Distributed under the MIT software license, see the accompanying
4
4
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
- """Test transaction signing using the signrawtransaction* RPCs. """
5
+ """Test multisig RPCs"""
6
6
7
7
from test_framework .test_framework import BitcoinTestFramework
8
8
import decimal
9
9
10
+
10
11
class RpcCreateMultiSigTest (BitcoinTestFramework ):
11
12
def set_test_params (self ):
12
13
self .setup_clean_chain = True
@@ -17,29 +18,29 @@ def skip_test_if_missing_module(self):
17
18
18
19
def get_keys (self ):
19
20
node0 , node1 , node2 = self .nodes
20
- self . add = [node1 .getnewaddress () for _ in range (self .nkeys )]
21
- self .pub = [node1 .getaddressinfo (a )["pubkey" ] for a in self . add ]
22
- self .priv = [node1 .dumpprivkey (a ) for a in self . add ]
21
+ add = [node1 .getnewaddress () for _ in range (self .nkeys )]
22
+ self .pub = [node1 .getaddressinfo (a )["pubkey" ] for a in add ]
23
+ self .priv = [node1 .dumpprivkey (a ) for a in add ]
23
24
self .final = node2 .getnewaddress ()
24
25
25
26
def run_test (self ):
26
- node0 ,node1 ,node2 = self .nodes
27
+ node0 , node1 , node2 = self .nodes
27
28
28
29
# 50 BTC each, rest will be 25 BTC each
29
30
node0 .generate (149 )
30
31
self .sync_all ()
31
32
32
33
self .moved = 0
33
- for self .nkeys in [3 ,5 ]:
34
- for self .nsigs in [2 ,3 ]:
34
+ for self .nkeys in [3 , 5 ]:
35
+ for self .nsigs in [2 , 3 ]:
35
36
for self .output_type in ["bech32" , "p2sh-segwit" , "legacy" ]:
36
37
self .get_keys ()
37
38
self .do_multisig ()
38
39
39
40
self .checkbalances ()
40
41
41
42
def checkbalances (self ):
42
- node0 ,node1 ,node2 = self .nodes
43
+ node0 , node1 , node2 = self .nodes
43
44
node0 .generate (100 )
44
45
self .sync_all ()
45
46
@@ -49,13 +50,13 @@ def checkbalances(self):
49
50
50
51
height = node0 .getblockchaininfo ()["blocks" ]
51
52
assert 150 < height < 350
52
- total = 149 * 50 + (height - 149 - 100 )* 25
53
+ total = 149 * 50 + (height - 149 - 100 ) * 25
53
54
assert bal1 == 0
54
55
assert bal2 == self .moved
55
- assert bal0 + bal1 + bal2 == total
56
+ assert bal0 + bal1 + bal2 == total
56
57
57
58
def do_multisig (self ):
58
- node0 ,node1 ,node2 = self .nodes
59
+ node0 , node1 , node2 = self .nodes
59
60
60
61
msig = node2 .createmultisig (self .nsigs , self .pub , self .output_type )
61
62
madd = msig ["address" ]
@@ -74,7 +75,7 @@ def do_multisig(self):
74
75
txid = node0 .sendtoaddress (madd , 40 )
75
76
76
77
tx = node0 .getrawtransaction (txid , True )
77
- vout = [v ["n" ] for v in tx ["vout" ] if madd in v ["scriptPubKey" ].get ("addresses" ,[])]
78
+ vout = [v ["n" ] for v in tx ["vout" ] if madd in v ["scriptPubKey" ].get ("addresses" , [])]
78
79
assert len (vout ) == 1
79
80
vout = vout [0 ]
80
81
scriptPubKey = tx ["vout" ][vout ]["scriptPubKey" ]["hex" ]
@@ -86,7 +87,7 @@ def do_multisig(self):
86
87
outval = value - decimal .Decimal ("0.00001000" )
87
88
rawtx = node2 .createrawtransaction ([{"txid" : txid , "vout" : vout }], [{self .final : outval }])
88
89
89
- rawtx2 = node2 .signrawtransactionwithkey (rawtx , self .priv [0 :self .nsigs - 1 ], prevtxs )
90
+ rawtx2 = node2 .signrawtransactionwithkey (rawtx , self .priv [0 :self .nsigs - 1 ], prevtxs )
90
91
rawtx3 = node2 .signrawtransactionwithkey (rawtx2 ["hex" ], [self .priv [- 1 ]], prevtxs )
91
92
92
93
self .moved += outval
@@ -97,5 +98,6 @@ def do_multisig(self):
97
98
txinfo = node0 .getrawtransaction (tx , True , blk )
98
99
self .log .info ("n/m=%d/%d %s size=%d vsize=%d weight=%d" % (self .nsigs , self .nkeys , self .output_type , txinfo ["size" ], txinfo ["vsize" ], txinfo ["weight" ]))
99
100
101
+
100
102
if __name__ == '__main__' :
101
103
RpcCreateMultiSigTest ().main ()
0 commit comments