Stablecoin Governance

HLUSD Stablecoin Governance

To enhance the transparency and decentralization in stablecoin governance, HeLa proposes a set of on-chain and community-driven governance mechanisms.

Before you begin, please ensure that you have set up the command line wallet with the appropriate network and default account.

Chain Initiator

Chain Initiator is an HeLa address (hela01qrmyx4d...), hard-coded in paratime/src/libs/chain_initiator field. Its primary function is to initiate the chain roles, as defined below. Please note that the Chain Initiator can only be used once, and after initiation, the address will be set to that of a normal user.

Subsequently, all roles management should be carried out through the propose-voting system. Currently, this action can only be executed via the command line using the following command: ./hela managest initowners [addr1 role1] [addr2 role2] ...

Note: The Chain Initiator has the ability to initiate multiple addresses; however, each address can only be associated with a single role within our system. If multiple roles are assigned to an address, the address's role will be overwritten by the last assignment.

Roles

There are 12 kinds of roles defined in our system, which are as follows. Update: All the voters' role can also raise proposals as proposers'.

  • Admin Only admin can propose and vote for all other roles and config the values for mintQuorum, burnQuorum, whitelistQuorum, blacklistQuorum and configQuorum.

  • MintProposer Both mint proposer and mint voter can propose to mint stable coins to a WhitelistedUser user.

  • MintVoter Only mint voter can vote the proposals from the MintProposer, and only the mintQuorum is reached, the mint action can take effect.

  • BurnProposer Both burn proposer and burn voter can propose to burn stable coins from a WhitelistedUser user.

  • BurnVoter Only burn voter can vote the proposals from the BurnProposer, and only the burnQuorum is reached, the burn action can take effect.

  • WhitelistProposer Both whitelist proposer and whitelist voter can propose addresses to be a WhitelistedUser user, but this proposed address should not be BlacklistedUser user

  • WhitelistVoter Only whitelist voter can vote the proposals from the WhitelistProposer, and only the whitelistQuorum is reached, the whitelist action can take effect.

  • BlacklistProposer Both blacklist proposer and blacklist voter can propose addresses to be a BlacklistedUser, but this proposed address can only be a normal User.

  • BlacklistVoter Only blacklist voter can vote the proposals from the BlacklistProposer, and only the blacklistQuorum is reached, the blacklist action can take effect.

  • WhitelistedUser The WhitelistedUser can be the beneficiary address of minting and burning besides the functions of a normal user.

  • BlacklistedUser The BlacklistedUser can not send any transactions to change the state of the specific runtime, even query.

  • User Normal users can exercise general functions provided by our system, like transferring money, deploying smart contracts etc.

Actions

We introduce the following actions into our system, they are:

  • SetRoles SetRoles action allows Admin to propose a role to some address, the proposal is like the following which should follow the json format (the role is in the snake manner, e.g., mint_proposer, mint_voter, burn_proposer, whitelist_proposer, blacklist_proposer, whitelisted_user etc.).

{
  "action": "setroles",
  "data": {
    "address": "hela01qq3slqgrp55hshh7znra4j9dskjvy55n6crgf0lk",
    "role": "admin"
  }
}
  • Mint Mint action allows MintProposer to propose minting specific amount 5000000000000000 to a WhitelistedUser.

{
  "action": "mint",
  "data": {
    "address": "hela01qrfp4gltu9h5433zm434mtvzezsrj3uytqts2x6x",
    "amount": "5000"
  }
}

Note: the exponent for the runtime is 18, which means 1 HLUSD = 10^18 base unit.

  • Burn Burn action allows BurnProposer to propose burning specific amount 5000000000000000 from a WhitelistedUser. The proposal json file is similar with the Mint one.

  • Whitelist Whitelist action allows WhitelistProposer to propose whitelisting some address.

{
  "action": "whitelist",
  "data": {
    "address": "hela01qrfp4gltu9h5433zm434mtvzezsrj3uytqts2x6x"
  }
}
  • Blacklist Blacklist action allows BlacklistProposer to propose an address with a normal User role to be a BlacklistedUser. The proposal json file is similar with the Whitelist one.

  • Config Config action allows Admin to propose new values for mintQuorum, burnQuorum, whitelistQuorum, blacklistQuorum and configQuorum, at least one value is required in the data field, otherwise, this proposal will be declined.

{
  "action": "config",
  "data": {
    "mint_quorum": 90,
    "burn_quorum": 90,
    "blacklist_quorum": 90,
    "config_quorum": 90
  }
}

Propose

All proposals can be made with the following command: ./hela managest propose [proposal.json]. After the proposal is broadcast, the users can show the proposals with the command: ./hela managest show [number]. By default, the latest proposal will be displayed if the [number] is left blank.

Vote

The voters with the specific role can vote proposals with the following command: ./hela managest vote [proposal ID] [options]. Each proposal gets a unique ID, which can be found by the ./hela managest show [number] command. The [options] field can be yes, no or abstain. The users can look up the vote result by the same ./hela managest show [number] command, where the latest result of the voting is shown in the Results row. Update: Voters can not vote for the same proposal many times.

Last updated