-
Notifications
You must be signed in to change notification settings - Fork 51
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve the Gov Module Mechanism by BLV Labs #529
base: main
Are you sure you want to change the base?
Improve the Gov Module Mechanism by BLV Labs #529
Conversation
in the SubmitProposal function: - Get LUNC price based on UUSD - Calculate the amount of LUNC to send for the proposal during that time - Store the LUNC amount
…/gov-improve # Conflicts: # custom/gov/keeper/params.go # custom/gov/keeper/proposal.go # custom/gov/types/v2lunc1/query.pb.go
…/gov-improve # Conflicts: # custom/gov/keeper/params.go # custom/gov/types/v2lunc1/query.pb.go
- use empty gas prices for sim tests
in addtion, as per current logic, even 20% or 100% if LUNC price dumps to near 0 then the value of the proposal is very very small around 0.1-0.2$, it can no longer hold 100$. So what do you think? ==> We have read this logic and continue to improve it by: That means it always ensures the value of the proposal when created is 100$ I hope you have a clear view |
in this case, if needed we suggest that we provide a CLI that helps users query the required deposit amount when initial deposit |
- improve fee check handling
|
1 similar comment
|
beaf7dc
to
d26e250
Compare
|
d26e250
to
43ef592
Compare
|
|
|
|
|
Spec or proposal link: https://commonwealth.im/terra-luna-classic-lunc/discussion/24630-proposal-to-improve-the-gov-module-mechanism-by-blv-labs
sidebar_position: 1
x/gov
Custom Governace Module Updates
Concepts
Disclaimer: This is work in progress. Mechanisms are susceptible to change.
The governance process is divided in a few steps that are outlined below:
deposit.
500 USD (
MinUusdDeposit
), proposal is confirmed and vote opens.on the result, the messages in the proposal will be executed.
Proposal submission
Right to submit a proposal
Every account can submit proposals by sending a
MsgSubmitProposal
transaction.Once a proposal is submitted, it is identified by its unique
proposalID
.Proposal Messages
A proposal includes an array of
sdk.Msg
s which are executed automatically if theproposal passes. The messages are executed by the governance
ModuleAccount
itself. Modulessuch as
x/upgrade
, that want to allow certain messages to be executed by governanceonly should add a whitelist within the respective msg server, granting the governance
module the right to execute the message once a quorum has been reached. The governance
module uses the
MsgServiceRouter
to check that these messages are correctly constructedand have a respective path to execute on but do not perform a full validity check.
Deposit
To prevent spam, proposals must be submitted with a deposit in the coins defined by the equation
luncMinDepositAmountBasedOnUusd
=MinUusdDeposit
/ real-time price of LUNC at the time of proposal submission.The value of
luncMinDepositAmountBasedOnUusd
will be stored in KVStores, using a key defined asUUSDMinKeyPrefix|proposalID
, where the proposal ID is appended to the prefix, represented as a single byte.When a proposal is submitted, it has to be accompanied with a deposit that must be
strictly positive, but can be inferior to
luncMinDepositAmountBasedOnUusd
. The submitter doesn't needto pay for the entire deposit on their own. The newly created proposal is stored in
an inactive proposal queue and stays there until its deposit passes the
luncMinDepositAmountBasedOnUusd
.Other token holders can increase the proposal's deposit by sending a
Deposit
transaction. If a proposal doesn't pass the
luncMinDepositAmountBasedOnUusd
before the deposit end time(the time when deposits are no longer accepted), the proposal will be destroyed: the
proposal will be removed from state and the deposit will be burned (see x/gov
EndBlocker
).When a proposal deposit passes the
luncMinDepositAmountBasedOnUusd
threshold (even during the proposalsubmission) before the deposit end time, the proposal will be moved into the
active proposal queue and the voting period will begin.
The deposit is kept in escrow and held by the governance
ModuleAccount
until theproposal is finalized (passed or rejected).
Deposit refund and burn
When a proposal is finalized, the coins from the deposit are either refunded or burned
according to the final tally of the proposal:
automatically refunded to its respective depositor (transferred from the governance
ModuleAccount
).governance
ModuleAccount
and the proposal information along with its depositinformation will be removed from state.
burning or refunding a deposit.
Vote
Voting period
Once a proposal reaches
luncMinDepositAmountBasedOnUusd
, it immediately entersVoting period
. Wedefine
Voting period
as the interval between the moment the vote opens andthe moment the vote closes.
Voting period
should always be shorter thanUnbonding period
to prevent double voting. The initial value ofVoting period
is 2 weeks.Stores
:::note
Stores are KVStores in the multi-store. The key to find the store is the first parameter in the list
:::
We will use one KVStore
Governance
to store five mappings:proposalID|'proposal'
toProposal
.proposalID|'addresses'|address
toVote
. This mapping allowsus to query all addresses that voted on the proposal along with their vote by
doing a range query on
proposalID:addresses
.ParamsKey|'Params'
toParams
. This map allows to query allx/gov params.
VotingPeriodProposalKeyPrefix|proposalID
to a single byte. This allowsus to know if a proposal is in the voting period or not with very low gas cost.
UUSDMinKeyPrefix|proposalID
to a single byte. This allows us to determine the minimum amount of LUNC that a specific proposal must deposit to pass the deposit phase.For pseudocode purposes, here are the two function we will use to read or write in stores:
load(StoreKey, Key)
: Retrieve item stored at keyKey
in store found at keyStoreKey
in the multistorestore(StoreKey, Key, value)
: Write valueValue
at keyKey
in store found at keyStoreKey
in the multistoreParameters
The governance module contains the following parameters:
min_uusd_deposit
is set to500
usd, but this value can beClient
CLI
A user can query and interact with the
gov
module using the CLI.We have added two new commands
MinimalDeposit
The
MinimalDeposit
command enables users to query the minimum LUNC deposit required for a specific proposal, calculated based on the UUSD value.Example:
CustomParams
The
CustomParams
command allows users to query the custom parameters of the module.Example:
Future Improvements
We have successfully upgraded the chain by increasing the consensus version to 5. Moving forward,
should the community require updates related to these matters, the BLV Team will be available to
assist with the implementation process.