Skip to content

Commit 645e5ee

Browse files
Add stake deregistration feature
1 parent 4a77130 commit 645e5ee

File tree

1 file changed

+35
-2
lines changed

1 file changed

+35
-2
lines changed

gov_cli/gov_cli.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)