Skip to content

A hot/cold solution for delegate representatives on Cardano

License

Notifications You must be signed in to change notification settings

CardanoSolutions/zhuli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Overview

A validator & companion command-line tool to provide hot/cold account management to delegate representatives (a.k.a DReps) on Cardano. The on-chain validator provides an authentication mechanism for an administrator multisig script (m-of-n type), itself granting powers to multisig-like delegate to manage voting stake rights.

Features

  • Fixed DRep ID for unlimited delegates, entirely defined by the administrator configuration.
  • Delegation of voting rights as a single transaction.
  • Revocation of a delegate as a single transaction.
  • Revokation & redelegation possible as a single transaction.
  • No datum, the state is fully captured in minted assets trapped in the validator.
  • Simplified off-chain management and contract flow thanks to a companion command-line tool

Todo

  • Extend the setup to also support a second type of delegate for block production rights.

Configuration

The administrator script can be configured direction in the aiken.toml as follows:

[config.default]
quorum = 1 # How many administrators signatories are required to approve actions

# List of administrators (verification key hashes)
[[config.default.administrators]]
bytes = "000000000000000000000000000000000000000000000000000a11ce"
encoding = "base16"

[[config.default.administrators]]
bytes = "00000000000000000000000000000000000000000000000000000b0b"
encoding = "base16"

Tip

Different keys can be configured for different environments. Instead of default, use whatever environment name suits you and re-compile the contract accordingly using aiken's cli. For example, you can define custom keys for an environment foo as:

[config.foo]
quorum = 1

[[config.foo.administrators]]
bytes = "0000000000000000000000000000000000000000000000000000f00"
encoding = "base16"

Then, using aiken, simply do:

aiken build --env foo