@@ -34,14 +34,14 @@ def add_options(self, parser):
3434 parser .add_option ("--parent_binpath" , dest = "parent_binpath" , default = "" ,
3535 help = "Use a different binary for launching nodes" )
3636 parser .add_option ("--parent_type" , dest = "parent_type" , default = "elements" ,
37- help = "Type of parent nodes {elements, bitcoin}" )
37+ help = "Type of parent nodes {elements, bitcoin, signet }" )
3838
3939 def setup_network (self , split = False ):
4040 self .nodes = []
4141 self .extra_args = []
4242
43- if self .options .parent_type not in ['elements' , 'bitcoin' ]:
44- raise Exception ("Invalid option --parent_type=%s, valid options: elements, bitcoin" % self .options .parent_type )
43+ if self .options .parent_type not in ['elements' , 'bitcoin' , 'signet' ]:
44+ raise Exception ("Invalid option --parent_type=%s, valid values: { elements, bitcoin, signet} " % self .options .parent_type )
4545
4646 if self .options .parent_type == 'bitcoin' and self .options .parent_binpath == "" :
4747 raise Exception ("Can't run with --parent_type=bitcoin without specifying --parent_binpath" )
@@ -60,16 +60,35 @@ def setup_network(self, split=False):
6060 "-addresstype=legacy" , # To make sure bitcoind gives back p2pkh no matter version
6161 "-deprecatedrpc=validateaddress" ,
6262 ])
63- else :
63+ elif self .options .parent_type == 'signet' :
64+ self .parent_chain = 'signet'
65+ rpc_u , rpc_p = rpc_auth_pair (n )
66+ self .extra_args .append ([
67+ "-printtoconsole=0" ,
68+ "-signet_blockscript=4104db082f6133b7d9cdb7be60d8384c818ae61233c20485b438e8c1d7772b7f2dbdc04f2f7273d534df0e6a54c8b333994f6275bb921df2438e9a672438e4ed4969ac" ,
69+ "-signet_siglen=77" ,
70+ "-signet_seednode=178.128.221.177" ,
71+ "-port=" + str (p2p_port (n )),
72+ "-rpcuser=" + rpc_u ,
73+ "-rpcpassword=" + rpc_p ,
74+ "-rpcport=" + str (rpc_port (n )),
75+ "-addresstype=legacy" , # To make sure bitcoind gives back p2pkh no matter version
76+ "-deprecatedrpc=validateaddress" ,
77+ "-fallbackfee=0.00001" ,
78+ ])
79+ elif self .options .parent_type == 'elements' :
6480 self .parent_chain = 'parent'
6581 self .extra_args .append ([
6682 "-printtoconsole=0" ,
6783 '-validatepegin=0' ,
6884 '-anyonecanspendaremine' ,
6985 '-initialfreecoins=2100000000000000' ,
7086 ])
87+
7188 self .binary = self .options .parent_binpath if self .options .parent_binpath != "" else None
7289 self .nodes .append (start_node (n , self .options .tmpdir , self .extra_args [n ], binary = self .binary , chain = self .parent_chain ))
90+ if self .options .parent_type == 'signet' :
91+ self .nodes [n ].importprivkey ('8Hh8jNjkx1aSCgEk3iq9Vo2APZUSDQJVt3rJ2BRpb5Tavqb68vW' )
7392
7493 connect_nodes_bi (self .nodes , 0 , 1 )
7594 self .parentgenesisblockhash = self .nodes [0 ].getblockhash (0 )
@@ -102,6 +121,14 @@ def setup_network(self, split=False):
102121 '-con_parent_chain_signblockscript=%s' % parent_chain_signblockscript ,
103122 '-con_parent_pegged_asset=%s' % parent_pegged_asset ,
104123 ])
124+ elif self .options .parent_type == 'signet' :
125+ args .extend ([
126+ '-con_parent_is_signet=1' ,
127+ '-con_parent_signet_siglen=77' ,
128+ '-parentpubkeyprefix=125' ,
129+ '-parentscriptprefix=87' ,
130+ '-con_parent_chain_signblockscript=4104db082f6133b7d9cdb7be60d8384c818ae61233c20485b438e8c1d7772b7f2dbdc04f2f7273d534df0e6a54c8b333994f6275bb921df2438e9a672438e4ed4969ac' ,
131+ ])
105132 self .extra_args .append (args )
106133 self .nodes .append (start_node (n + 2 , self .options .tmpdir , self .extra_args [n + 2 ], chain = 'sidechain' ))
107134
@@ -126,13 +153,21 @@ def test_pegout(self, parent_chain_addr, sidechain):
126153 break
127154 assert pegout_tested
128155
156+ # TODO Remove when signet supports generate
157+ def parent_generate (self , parent , n_blocks ):
158+ if self .options .parent_type == 'signet' :
159+ for i in range (0 , n_blocks ):
160+ blockhex = parent .getnewblockhex (True )
161+ else :
162+ parent .generate (n_blocks )
163+
129164 def run_test (self ):
130165 parent = self .nodes [0 ]
131166 parent2 = self .nodes [1 ]
132167 sidechain = self .nodes [2 ]
133168 sidechain2 = self .nodes [3 ]
134169
135- parent . generate ( 101 )
170+ self . parent_generate ( parent , 101 )
136171 sidechain .generate (101 )
137172
138173 addrs = sidechain .getpeginaddress ()
@@ -141,7 +176,7 @@ def run_test(self):
141176 print (parent .validateaddress (addr ))
142177 txid1 = parent .sendtoaddress (addr , 24 )
143178 # 10+2 confirms required to get into mempool and confirm
144- parent . generate ( 1 )
179+ self . parent_generate ( parent , 1 )
145180 time .sleep (2 )
146181 proof = parent .gettxoutproof ([txid1 ])
147182
@@ -158,7 +193,7 @@ def run_test(self):
158193 assert ("Peg-in Bitcoin transaction needs more confirmations to be sent." in e .error ["message" ])
159194
160195 # Second attempt simply doesn't hit mempool bar
161- parent . generate ( 10 )
196+ self . parent_generate ( parent , 10 )
162197 try :
163198 pegtxid = sidechain .claimpegin (raw , proof )
164199 raise Exception ("Peg-in should not be mature enough yet, need another block." )
@@ -183,7 +218,7 @@ def run_test(self):
183218 assert ("Given claim_script does not match the given Bitcoin transaction." in e .error ["message" ])
184219
185220 # 12 confirms allows in mempool
186- parent . generate ( 1 )
221+ self . parent_generate ( parent , 1 )
187222 # Should succeed via wallet lookup for address match, and when given
188223 pegtxid1 = sidechain .claimpegin (raw , proof )
189224
@@ -234,7 +269,7 @@ def run_test(self):
234269 for i in range (n_claims ):
235270 addrs = sidechain .getpeginaddress ()
236271 txid = parent .sendtoaddress (addrs ["mainchain_address" ], 1 )
237- parent . generate ( 12 )
272+ self . parent_generate ( parent , 12 )
238273 proof = parent .gettxoutproof ([txid ])
239274 raw = parent .getrawtransaction (txid )
240275 pegtxs += [sidechain .claimpegin (raw , proof )]
@@ -249,11 +284,13 @@ def run_test(self):
249284 print ("Test pegout" )
250285 self .test_pegout (get_new_unconfidential_address (parent ), sidechain )
251286
252- print ("Test pegout P2SH" )
253- parent_chain_addr = get_new_unconfidential_address (parent )
254- parent_pubkey = parent .validateaddress (parent_chain_addr )["pubkey" ]
255- parent_chain_p2sh_addr = parent .createmultisig (1 , [parent_pubkey ])["address" ]
256- self .test_pegout (parent_chain_p2sh_addr , sidechain )
287+ # TODO Stop skipping this test once signet is rebased on top of 0.17
288+ if not self .options .parent_type == 'signet' :
289+ print ("Test pegout P2SH" )
290+ parent_chain_addr = get_new_unconfidential_address (parent )
291+ parent_pubkey = parent .validateaddress (parent_chain_addr )["pubkey" ]
292+ parent_chain_p2sh_addr = parent .createmultisig (1 , [parent_pubkey ])["address" ]
293+ self .test_pegout (parent_chain_p2sh_addr , sidechain )
257294
258295 print ("Test pegout Garbage" )
259296 parent_chain_addr = "garbage"
@@ -290,7 +327,7 @@ def run_test(self):
290327 print ("Now test failure to validate peg-ins based on intermittant bitcoind rpc failure" )
291328 stop_node (self .nodes [1 ], 1 )
292329 txid = parent .sendtoaddress (addr , 1 )
293- parent . generate ( 12 )
330+ self . parent_generate ( parent , 12 )
294331 proof = parent .gettxoutproof ([txid ])
295332 raw = parent .getrawtransaction (txid )
296333 stuck_peg = sidechain .claimpegin (raw , proof )
0 commit comments