Skip to content

Governance

This guide provides an overview of the key operations of governance, including creating proposals, casting votes, and executing proposals. For the general introduction of governance, please refer to Governance Mechanism.

Contract

The BSC governance facilitates decentralized decision-making within the BSC ecosystem, utilizing two primary smart contracts: GovToken for governance token management and Governor for proposal management and voting.

  • GovToken: Manages governance tokens, enabling holders to participate in governance decisions. It supports syncing token balances with staked assets and delegating voting rights. ( Address: 0x0000000000000000000000000000000000002005)

  • Governor: Manages the creation, voting, and execution of governance proposals. It also ensurs only eligible participants can propose changes and vote. (Address: 0x0000000000000000000000000000000000002004)

Create Proposal

To create a proposal, you need to call the propose function of Governor with the following parameters:

function propose(address[] memory targets, uint256[] memory values, bytes[] memory calldatas, string memory
    description) public returns (uint256 proposalId)
  • targets: Contract addresses the proposal will interact with.
  • values: BNB values (in wei) for each call.
  • calldatas: Encoded function calls.
  • description: Description of the proposal.

Cast Vote

To cast a vote, you need to call the castVote function of Governor with the following parameters:

function castVote(uint256 proposalId, uint8 support, string memory reason) public returns (uint256)
  • proposalId: ID of the proposal.
  • support: Vote choice (e.g., for, against, abstain).
  • reason: (Optional) Reason for your vote.

Check Proposal State

To get the state of a proposal, you need to call the state function of Governor with the following parameters:

function state(uint256 proposalId) public view returns (ProposalState)
  • proposalId: ID of the proposal.

Queue Proposal

To schedules the proposal for execution, you need to call the queue function of Governor with the following parameters:

function queue(address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)
public returns (uint256 proposalId)
  • targets: Contract addresses the proposal will interact with.
  • values: Ether values (in wei) for each call.
  • calldatas: Encoded function calls.
  • descriptionHash: Hash of the description of the proposal.

Execute Proposal

To apply the changes after the timelock delay, you need to call the execute function of Governor with the following parameters:

function execute(address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)
public payable returns (uint256)
  • targets: Contract addresses the proposal will interact with.
  • values: Ether values (in wei) for each call.
  • calldatas: Encoded function calls.
  • descriptionHash: Hash of the description of the proposal.

Delegate Vote

To delegate voting power to someoneles, you need to call the delegateVote function of GovToken with the following parameters:

  • Delegator address: The address of the delegator, who delegates their voting power to another address.
  • Delegatee address: The address of the delegatee, who receives the voting power from the delegator and participates in governance on their behalf.
function delegateVote(address delegator, address delegatee) external
  • delegator: The address of the delegator, who delegates their voting power to another address.
  • delegatee: The address of the delegatee, who receives the voting power from the delegator.

Contract ABI

For the full interfaces of Governor, please refer to the ABI file.

For the full interfaces of GovToken, please refer to the ABI file.