-
Notifications
You must be signed in to change notification settings - Fork 566
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
BEP-297: BSC Native Governance Module #297
Conversation
8516f0b
to
c0c451c
Compare
c0c451c
to
f7ece0a
Compare
FinalSunsetHeight = 56218686 |
BEP-297: BSC Native Governance Module
1. Summary
Native Governance is incorporating governance logic into the BNB Smart Chain instead of delegating this responsibility to the BNB Beacon Chain. BSC Native Governance is a primary goal for the BNB Chain Fusion. The proposal allows community members to submit proposals directly on the BSC network. Any staking credit holders are allowed to vote on these proposals, and the passed proposals will be executed automatically on the chain or manually off-chain.
2. Abstract
Native Governance has several significant differences and improvements compared to current implementations:
The overall governance framework is derived from OpenZeppelin Governor.
3. Status
Draft.
4. Motivation
In the framework of the dual-chain structure, the Governance module from Cosmos-SDK is currently being utilized to manage proposals, votes for the BSC network. Subsequently, the tally results are transmitted to the BSC network through a cross-chain protocol, triggering automatic execution, like changing the parameter of system contract, adding whitelist relayers.
With the progress of BNB Chain Fusion, BNB Beacon Chain no longer exists, thus the governance functionality will be migrated from Beacon Chain to Smart Chain. In addition to addressing migration requirements, this proposal also aims to enhance the existing governance mechanism and encourage more community participation.
5. Specification
5.1 Definitions
5.2 Proposal Type
5.2.1 Text Proposal
Text proposals are used to make an on-chain record of support or agreement on a certain topic or ideas. Text proposals do not contain any code. That is, they do not directly cause any direct changes to the BSC once passed. Technically, nothing happens on-chain, but we all get information from it having been considered:
5.2.2 Executable Proposal
An executable proposal is used to make substantial modifications to on-chain protocols in BSC. The Executable proposal consists of a list of triplets in the form of (string key, bytes value, address target).
Target is the desired target contract. The key and value represent the parameters for invoking the target contract. The target contract must implement the interface: function govCall(string key, bytes value).
We use executable proposals in the following scenarios:
5.3 Governance Token
The lifecycle of staking credit and gov token are identical.
Due to the non-transferability of governance tokens and staking credits, these two scenarios can cover all possible situations.
In an ideal scenario, the balance of a user's gov token should be equal to the total BNB value of all staking credits held by the user. This condition does not hold true in the following situations:
When the above situation occurs, the protocol will call the sync interface of the GovToken, either mint or burn gov token to ensure the equation holds true. Scenario #1 is an exception where the sync function is not automatically invoked. Users can either manually invoke the sync interface or wait for the next stake or unstake operation to occur.
Token balance does not contribute to voting power directly. Voting power can be increased by directly invoking the delegate function or by providing a signature to be used with delegateBySig. The contract allows querying the voting power of any account at any height without requiring an archive node. It achieves this by keeping checkpoints of each account's voting power. These features are implemented through inheritance of ERC20Votes.
5.4 Governance Workflow
5.4.1 Community Discussion
BSC governance is driven by the BNB Chain community. Governance discussions occur in various community-moderated platforms such as GitHub, forums, Discord, Twitter, and other channels where the BNB Chain community gathers. Once a proposal is on-chain, it cannot be modified to include feedback. Hence, it is essential to give the proposal enough time off-chain for gathering feedback, input, and edits before advancing it on-chain for voting. While this guide may not cover all possible engagement methods, it offers several suggestions:
5.4.2 Create Proposals
BSC proposals can be managed on UIs integrated with the onchain smart contracts, such as Tally. Tally is a comprehensive application designed for users to engage in on-chain governance. It offers a user-friendly voting dashboard, intuitive proposal creation wizards, real-time research and analysis tools. With Tally, users can actively participate in the decision-making process and contribute to the growth of BSC.
To submit an on-chain proposal, a user must have enough voting power to meet the Proposal Threshold, such as 100 BNB. Proposers should draft a Title and Description for the proposal, explain its intent, and include any relevant context for the voters.
To create an executable proposal, we need to add actions. The call data of the action contains three parts:
To create a text proposal, simply create a proposal without any actions.
The proposal is delayed to become active after creation. For example, allocate a 3-day timeframe for the community to participate in detailed discussions and establish voting preferences.
5.4.3 Vote on Proposal
Once a proposal is active, delegates can vote as only delegates have voting power. Staking credit holders who want to participate in governance voting must either select a trusted representative as their delegate or become a delegate themselves by self-delegating their voting power. When governance participants cast their votes, they get three options:
GovernorPreventLateQuorum extension will be enabled to prevent a single voter from swaying the vote and triggering quorum at the last minute. It ensures that there is sufficient time for the community to react.
5.4.4 Tally
Following requirements need to be met for a proposal to be accepted by the end of voting period:
5.4.5 Timelock and Execution
Once a proposal passes, it can be queued and executed. The first step to execution is queueing, this will cause the Governor Contract to interact with the timelock contract and queue the actions for execution. After the required delay, anyone is allowed to trigger the execution.
The community has time to take action on proposals that have been manipulated due to vulnerabilities, fall under spam or violate rules of engagement. However, these actions are often beyond the scope of on-chain protocols, such as validators reaching a consensus to veto a passed proposal through a hard fork. Such a situation should be avoided at all costs.
5.5 Proposal Status
6. License
The content is licensed under CC0.