@@ -317,7 +317,7 @@ def register_stake(self, wallet: Wallet):
317317 str (self .gov_state ["currentPParams" ]["stakeAddressDeposit" ])
318318 ,"--out-file" , stake_cert ], include_network = False , include_socket = False )
319319
320- submit_result :SubmitResult = self .build_and_submit (wallet ,'drep_reg ' ,
320+ submit_result :SubmitResult = self .build_and_submit (wallet ,'stake_reg ' ,
321321 ["--witness-override" ,"2" ,
322322 "--certificate-file" , stake_cert ]
323323 ,raise_error = False ,extra_keys = [wallet .stake_skey ])
@@ -335,6 +335,32 @@ def register_stake(self, wallet: Wallet):
335335 else :
336336 print (f"Stake registration transaction submitted successfully! Tx ID: { submit_result .txid } " )
337337
338+ def deregister_stake (self , wallet : Wallet ):
339+ stake_cert = os .path .join (TEMP_DIR , "stake_dereg.cert" )
340+ # Generate stake key de-registration certificate
341+ self .load_gov_state ()
342+
343+ self .cardano_cli_conway ("stake-address" , "deregistration-certificate" ,
344+ ["--stake-verification-key-file" , wallet .stake_vkey , "--key-reg-deposit-amt" ,
345+ str (self .gov_state ["currentPParams" ]["stakeAddressDeposit" ])
346+ ,"--out-file" , stake_cert ], include_network = False , include_socket = False )
347+
348+ submit_result :SubmitResult = self .build_and_submit (wallet ,'stake_dereg' ,
349+ ["--witness-override" ,"2" ,
350+ "--certificate-file" , stake_cert ]
351+ ,raise_error = False ,extra_keys = [wallet .stake_skey ])
352+
353+ # Sign and Submit the transaction
354+ process :subprocess .CompletedProcess = submit_result .process
355+ result :str = process .stdout
356+ if process .returncode != 0 :
357+ if "StakeKeyNotRegisteredDELEG" in process .stderr :
358+ print ("Stake key not registered ..." )
359+ print ("Nothing was done on-chain." )
360+ else :
361+ raise Exception (f"Process failed \n { result } \n { process .stderr } " )
362+ else :
363+ print (f"Stake de-registration transaction submitted successfully! Tx ID: { submit_result .txid } " )
338364
339365 def vote (self ,vote ,wallet :Wallet ,key :Key ,role :str ,action_tx ,action_tx_index ):
340366
@@ -660,15 +686,22 @@ def vote(store:WalletStore,role):
660686 print ("Registering stake key" )
661687 # Register stake key
662688 cli .register_stake (wallet )
689+
690+
663691 elif command == "deregister" :
664692 store = WalletStore (KEYS_DIR )
665693 wallet = store .load_wallet ()
666694
667695 if len (sys .argv )> 2 :
668696 if sys .argv [2 ] == "drep" :
669697 drep = store .load_drep_key ()
670- cli .deregister_drep (wallet ,drep )
698+ cli .deregister_drep (wallet ,drep )
671699
700+ elif sys .argv [2 ] == "stake" :
701+ cli .deregister_stake (wallet )
702+ else :
703+ print ("Invalid option for deregister \" " + sys .argv [2 ]+ "\" . Expected \" drep\" or \" stake\" " )
704+
672705 elif command == 'delegate' :
673706 store = WalletStore (KEYS_DIR )
674707 wallet = store .load_wallet ()
0 commit comments