@@ -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