Please describe your proposed solution
DRep and Constitutional Committee identifiers are public key hashes of HD wallet derivations (see CIP-105), and as such can be translated into an address using the same key hash. CIP-129 offers additional ID type and credential type information in the header byte similar to addresses. Handles will make use of this information to send Handles to these addresses so they can “resolve” as DRep/CC IDs.
The solution will deliver these resolution steps:
- Resolve to bech32 address that the Handle resides in. This is how $handles presently resolve to their underlying addr1 addresses.
- Extract from it the payment key hash and key/script header.
- Bech32 Encode the payment key hash using the 'drep1' prefix.
- preserve the key/script header in CIP129 version.
- [Optional] Double check against known registered DReps.
Our systems will execute the following steps to set up a $handle to include their DRep ID:
- Bech32 decode the 'drep1' ID.
- If CIP129, preserve the key/script header.
- If CIP105, use prefix to create the key/script header.
- Bech 32 encode the header and key hash using the 'addr1' prefix.
- Send the Handle to that address.
DRep Handle Setup:
- Light wallet registration (see CIP-95).
- Supports CIP-8 signing using DRep ID or “DRep address.”
- CLI registration (see docs).
- DRep created by CLI will need to do offline signing.
- Sign message + nonce with vkey.
- Verify signature.
- Use above process to send the Handle to the DRep address.
- Claiming a DRep Handle.
- Optional. Not required.
- Used if a Handle already resides at a DRep address, but the Handle ecosystem hasn’t associated it with your wallet.
- Once associated with the wallet, Personalization and other features are possible.
- Create TX for any assets/lovelace sent to DRep address.
- Since DRep IDs are HD wallet derivations, it is possible to send lovelace and assets to the equivalent address. The Handles website will accommodate this by helping to create transactions to move that lovelace and assets to other wallet addresses.
API:
- DRep Handles will have the “drep” holder type in API.
- New “drep” section in Handle API response:
{
drep: {
type: "drep",
cred: "key",
hex: "8ee224ce211dd966764e08f81471482cce277582c2621df2aaa3500a",
cip_105: "drep13m3zfn3prhvkvajwprupgu2g9n8zwavzcf3pmu425dgq5e892jm",
cip_129: "drep1y28wyfxwyywajenkfcy0s9r3fqkvufm4stpxy80j4234qzsl80wwe"
}
}
Constitutional Committee Hot/Cold IDs:
- The same process applies
- The context of the user action suggests the correct bech32 prefix.
- For example:
- When asking a user to delegate to a DRep using a Handle, then the prefix is
drep1
- When asking the user to reference the CC Hot hash/ID, then
cc\_hot
is the prefix, etc.
Important note: We have extensively tested the solution proposed in this section of the Catalyst Proposal. Thus, we have confirmation that the steps above will work.