Skip to content

Commit d85554d

Browse files
authored
Merge pull request #7 from reeshavacharya/master
Add features to retire DRep and de-register stake address
2 parents 466a587 + 645e5ee commit d85554d

File tree

3 files changed

+66
-3
lines changed

3 files changed

+66
-3
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Tutorial : [Quick Start with Gov-Cli](https://cardanoapi.github.io/gov-cli/docs/
1717
|------------------------------|----------------------------------------|----------------------------------------------------|
1818
| `CARDANO_NODE_SOCKET_PATH` | Node's socket path | (e.g., path to the socket file) |
1919
| `NETWORK` | Cardano network | `1`, `2`, `3`, `4`, `mainnet`, `preprod`, `sancho`, `preview` |
20-
| `KEYS_DIR` | Where keys are generated and stored | `$HOME/.cardano/key` |
20+
| `KEYS_DIR` | Where keys are generated and stored | `$HOME/.cardano/key` |
2121
| `LOG_CLI` | Show commands executed in CLI | `yes`, `no`, `false` |
2222

2323

clean-keys.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
rm -rf $HOME/.cardano/keys/

gov_cli/gov_cli.py

Lines changed: 64 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

@@ -408,7 +434,27 @@ def register_drep(self, wallet: Wallet, drep: Key):
408434
else:
409435
print(f"DRep registration transaction submitted successfully!\nTx 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!\nTx 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

Comments
 (0)