@@ -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
@@ -408,7 +434,27 @@ def register_drep(self, wallet: Wallet, drep: Key):
408434 else :
409435 print (f"DRep registration transaction submitted successfully!\n Tx ID: { submit_result .txid } " )
410436
411-
437+ def deregister_drep (self , wallet :Wallet , drep : Key ):
438+ drep_cert = os .path .join (TEMP_DIR , "drep_retire.cert" )
439+ # Generate DRep retirement certificate
440+ self .load_gov_state ()
441+ self .cardano_cli_conway ("governance" , "drep" ,
442+ [ "retirement-certificate" ,"--drep-verification-key-file" , drep .public , "--deposit-amt" ,
443+ str (self .gov_state ["currentPParams" ]["dRepDeposit" ])
444+ ,"--out-file" , drep_cert ])
445+ submit_result :SubmitResult = self .build_and_submit (wallet ,'drep_reg' ,
446+ ["--witness-override" ,"2" ,
447+ "--certificate-file" , drep_cert ]
448+
449+ ,raise_error = False ,extra_keys = [drep .private ])
450+ if submit_result .process .returncode != 0 :
451+ if "ConwayDRepNotRegistered" in submit_result .process .stderr :
452+ print ("DRep key is not registered ..." )
453+ print ("Nothing was done on-chain." )
454+ else :
455+ raise Exception (f"Process failed \n { submit_result .process .stdout } \n { submit_result .process .stderr } " )
456+ else :
457+ print (f"DRep retirement transaction submitted successfully!\n Tx ID: { submit_result .txid } " )
412458
413459 def sign_and_submit (self ,wallet :Wallet ,tx_raw_file ,signed_tx_file ,raise_error = True ,extra_keys = [])-> Optional [SubmitResult ]:
414460 # Sign the transaction
@@ -640,6 +686,22 @@ def vote(store:WalletStore,role):
640686 print ("Registering stake key" )
641687 # Register stake key
642688 cli .register_stake (wallet )
689+
690+
691+ elif command == "deregister" :
692+ store = WalletStore (KEYS_DIR )
693+ wallet = store .load_wallet ()
694+
695+ if len (sys .argv )> 2 :
696+ if sys .argv [2 ] == "drep" :
697+ drep = store .load_drep_key ()
698+ cli .deregister_drep (wallet ,drep )
699+
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+
643705 elif command == 'delegate' :
644706 store = WalletStore (KEYS_DIR )
645707 wallet = store .load_wallet ()
0 commit comments