How to Create Budget Proposal and Vote
1. Introduction
This document provides step-by-step instructions on how to view, vote and create budget proposals on Energi Blockchain using the Nexus web portal and command-line on Energi Core Node. The instructions here are on the Energi Testnet (test environment). The same steps are followed on Energi Mainnet (production environment).
Following are highlights of a budget proposal:
Description | Comment |
---|---|
Minimum for Quorum | 7% of Total Masternode Collateral at Time of Creation |
Deadline for Passage | 2 weeks from when filed |
Requirements to Pass | Simple Majority of YES Votes within the deadline or Vote hits 51% of the Masternode Vote |
Fee to Create Proposal | 100 NRG (Refunded if Approved) |
Maximum Request | 184,000 NRG |
Pay & Receive Address | The proposal address is used to pay and receive the funds |
A budget proposal allows anyone to request funds for their project. The pay out is in NRG coins. Once a proposal is created, masternode operators can vote in Nexus or via command-line on their masternode. If quorum is reached, a simple majority of YES votes by the deadline will pass the proposal. An “early pass” can be achieved if the proposal receives 51% YES votes from all masternodes at any time by the deadline. If the proposal passes, the Energi Treasury Smart Contract will automatically payout the requested funds from the Treasury.
We recommend anyone planning to create a budget proposal write up details of their proposal in the #pre-proposals channel on Discord. The pre-proposal documentation should minimally include:
- Detailed description of their project
- Your background/expertise
- How much funds they are requesting
- Project timeline and key performance indicators
The Energi Executive Team is engaged any time a budget proposal is opened. They use the Discord #proposals-general channel to discuss the merits of the proposal and communicate their views to the community so that masternode operators can make an informed decision. Generally, Energi will test something on a small scale and observe the results before we commit any significant resources to any campaign. As a reminder, Energi is very conservative and careful with expenses, thus please only submit a proposal if you feel strongly it will yield significant bang-for-the-buck for the Energi ecosystem!
2. Requirements
- Web Browser: To create a budget proposal, you need a web browser. We have tested on Chrome and Brave browsers.
- Web3 Wallet: Install a Web3 Wallet on your web browser. We recommend MetaMask.
- Energi Network on Web3 Wallet: Go to Chainlist.org to add Energi Network to MetaMask.
- NRG on Proposal Address: You need to pay a refundable fee of 100 NRG on the proposal address to create the budget proposal. The fee will be returned if the proposal is approved. You will need some extra NRG to pay for gas fee. Send an email to support@energi.team to request some tNRG (test NRG). In Mainnet, you can purchase NRG from any of the exchanges listed here.
- Join Energi Discord (only for Mainnet): Join Energi Discord to discuss your proposal with Energi and the community. Please also send an email to contact@energi.team.
- Masternode to Vote (optional): If you want to vote on a proposal, you will need a Masternode.
- Energi Nexus
- Command Line
3. Create a Budget Proposal using Nexus
3.1. Energi Nexus Portal
Go to Energi Nexus portal
3.2. Connect Wallet
3.2.1. On the top right, click on “Connect Wallet”
3.2.2. Choose Wallet
3.3.3. Login to MetaMask
Enter you password and click “Unlock”.
3.2.4. Connect with MetaMask
Choose the address you want to create your proposal. Click “Next”.
3.2.5. Connect to Address
Click “Connect”.
3.2.6. Close MetaMask
3.2.7. Validate Wallet Connection
Check the top right of the browser to validate you are connected to your MetaMask proposal account.
3.3. Create Proposal
Go to the Treasury & Budget portal on Nexus:
3.3.1 Click on “Create Proposal”
3.3.2. Fill in Data
3.3.2.1. Enter the amount of NRG (in #2) you would like to receive if the proposal is approved.
3.3.2.2. Write a detailed description of your proposal (#3).
3.3.2.3. From the dropdown select the period you want to run the proposal (#4)
3.3.2.4. Read and acknowledge the messages (#5).
3.3.2.5. Click “Create Proposal” (#6).
3.3.2.6. Confirm Fee
A MetaMask screen will pop-up. Click “Confirm” to accept the 100 NRG refundable fee and the gas fee.
3.3.2.7. Validate Transaction
Open MetaMask and click on the pending proposal.
3.3.2.8. Click “View on Block Explorer
3.3.2.9. Verify that the transaction is confirmed on the blockchain
3.3.3. Download File and Sign Proposal
3.3.3.1 Download Proposal file for your record
3.3.3.2 Sign Proposal
3.3.3.3. “Confirm” Sign Proposal on MetaMask
4. List Proposals
On Nexus, click “Proposals” under Treasury & Budget. Your proposal will be listed. Verify the UUID matches with the file you downloaded earlier.
You have successfully created a budget proposal.
5. Post on Discord
5.1. Enter New Post
Go to Energi Discord and fill in the details of your proposal in the #pre-proposals. Click “New Post”.
5.2. Enter Description of Proposal
5.2.1. Enter a short title of your proposal (#2)
5.2.2. Describe your proposal (#3) and upload any materials (#4) you feel will help the Energi Team and the community learn about your proposal.
5.2.3. Click the tag (#5) to categorize your proposal.
6. Vote on a Budget Proposal
You need a masternode that was announced prior to when the proposal was created to be able to vote on the proposal.
6.1. Look up your proposal and click on the three dots right of the proposal.
6.2. On the dropdown menu, select “Vote Proposal”.
6.3. Cast your vote. You can “VOTE YES” or “VOTE NO” on the proposal.
6.4. On MetaMask pop-up, “Confirm” your vote by paying the gas fee.
6.5. Open MetaMask and click on “Vote Accept” pending transaction.
6.6. Click “View on block explorer”.
6.7. Confirm that your vote transaction was committed to the blockchain.
6.8. Check the status of your vote Nexus
You have successfully voted on the proposal.
7. Details of the Proposal
7.1. Dashboard
Click on Dashboard under Treasury and Budget to see what the deadline of the next proposal is.
7.2. View Proposal Details
Find your proposal by clicking on “Proposals” under Treasury & Budget. Click on the 3 dots right of your proposal.
On the dropdown menu, select “View Proposal Details”
It will take you to the page where you can see the details about your proposal.
8. Budget Approval
8.1. Quorum Reached
Once budget status reaches over 100% votes, quorum is reached.
8.2. Voting Closed
In our case there were no “No Votes”. The proposal was approved by the community of masternodes once “Voting Deadline” reached “voting closed” status.
8.3. Fund Received
Open MetaMask. You will see the requested funds (in this case 1000 NRG) plus the fee (100 NRG) refunded to the account.
You have successfully requested funds from Energi Treasury. It has been approved by the community and distributed to your account.
9. Create a Budget Proposal using Energi Core Node
9.1. Connect to Energi Console
Testnet:
energi3 --testnet attach
Mainnet:
energi3 attach
9.2. Create Proposal
The budgetPropose
method generates a proposal to the treasury to be voted on by the governance system. It has the following input parameters:
- amount: must be >= fee and <=184K (nrg). The function accepts this parameter in Wei. Use the
web3.toWei('amount', 'energi')
function. - uuid: it is used as an identifier, so it must be unique for each submitted proposal. Can be generated here https://www.uuidgenerator.net/
- period: The minimum deadline is 14 days and the maximum is 30 days. Must be provided in seconds, written without quotes.
- fee: Must be min 100 (nrg). The function accepts this parameter in Wei. Use the
web3.toWei('amount', 'ether')
function. - payer: must be a gen3 address in the local node keystore.
In order to generate a treasury proposal, there must be a total active collateral, of at least 50% of the total that has historically existed. Otherwise, the transaction is rejected and the proposal is not generated.
Client | Method invocation |
---|---|
Console | energi.budgetPropose(amount, uuid, period, fee, payer [,password]) |
Command:
energi.budgetPropose(web3.toWei('1000', 'ether'), 'ddd9cf70-df3f-43c0-b1d7-46168b0493ab', 1296000, web3.toWei('100', 'ether'), "0x680cf4b9c12736dbab9eec2a481e6101aacf300a", 'password')
Result:
0xbf858a31074930c0367a85d83b1051977d22ed3dcadea10a40fcc2b9729d4aaf
undefined
10. Post on Discord
10.1. Enter New Post
Go to Energi Discord and fill in the details of your proposal in the #pre-proposals. Click “New Post”.
10.2. Enter Description of Proposal
10.2.1. Enter a short title of your proposal (#2)
10.2.2. Describe your proposal (#3) and upload any materials (#4) you feel will help the Energi Team and the community learn about your proposal.
10.2.3. Click the tag (#5) to categorize your proposal.
11. List of Proposals
The budgetInfo
method lists all budget proposals and their current state.
Client | Method invocation |
---|---|
Console | energi.budgetInfo() |
Command:
energi.budgetInfo()
Result 1 - No active proposals:
{
balance: 1.1606178258e+25,
proposals: []
}
Result 2 - Active proposals:
{
balance: 1.1606178258e+25,
proposals: [{
acceptWeight: 0,
accepted: false,
balance: 0,
createdBlock: 91158,
deadline: 1588014268,
finished: false,
paidAmount: 0,
proposal: "0x6024af57b02f9979d48f0f0756b87b56e793fa6d",
proposedAmount: 1e+22,
proposer: "0x680cf4b9c12736dbab9eec2a481e6101aacf300a",
quorumWeight: 2.191e+22,
refUUID: "ddd9cf70-df3f-43c0-b1d7-46168b0493ab",
rejectWeight: 0,
totalWeight: 3.13e+23
}]
}
12. Vote on a Budget Proposal
You need a masternode that was announced prior to when the proposal was created to be able to vote on the proposal.
The budget proposal created requires at least 7% of the masternodes to vote positively for a quorum. A simple 51% vote is required for the proposal to pass. This voting process ensures community consensus and participation in addressing wallet compromises.
Voting can be either an voteAccept
or voteReject
.
12.1. voteAccept
Client | Method invocation |
---|---|
Console | energi.voteAccept(proposal, mn_owner[, password]) |
Command:
energi.voteAccept('0x3cb824ceaea391b864b07a6d9998f1e8ede18be3', '0x8978e517c2b442264e54b890c4428816b66aaf8b', 'Energi123')
Result:
0x51627be46bc003030bf4c43e7ebb686d35cfaf633edbb6544a0beda16fb967e1
undefined
12.2. voteReject
Client | Method invocation |
---|---|
Console | energi.voteReject(proposal, mn_owner[, password]) |
Command:
energi.voteReject('0x6024af57b02f9979d48f0f0756b87b56e793fa6d', '0x8978e517c2b442264e54b890c4428816b66aaf8b', 'Energi123')
Result:
0x52c3f415baacdddd147c9c5c7d609e59f056c2cb6f098565a8591dcd55ebbc4e
undefined
12.3. Exceptions
12.3.1. Exception #1: A masternode can only vote once. You will get an error if you try to vote again
Command:
energi.voteReject('0x6024af57b02f9979d48f0f0756b87b56e793fa6d', '0x8978e517c2b442264e54b890c4428816b66aaf8b', 'Energi123')
Result:
Error: This account is not allowed to vote!
at web3.js:3164:20
at web3.js:6368:15
at web3.js:5102:36
at <anonymous>:1:1
12.3.2. Exception #2: You will get an error if you try to vote with a masternode that was announced after the proposal was created.
Command:
energi.voteReject('0x6024af57b02f9979d48f0f0756b87b56e793fa6d', '0x680cf4b9c12736dbab9eec2a481e6101aacf300a', 'energi123')
Result:
Error: This account is not allowed to vote!
at web3.js:3164:20
at web3.js:6368:15
at web3.js:5102:36
at <anonymous>:1:1
13. Budget Approval
13.1. Quorum Reached
Once budget status reaches over 100% votes, quorum is reached.
Attach to Energi Core Node console from the Linux terminal:
energi3 --testnet attach
energi3 attach
Run the following command to check the acceptWeight
and the quorumWeight
. If acceptWeight
is greater than quorumWeight
, the proposal has reached quorum.
energi.budgetInfo()
13.2. Voting Closed
In the Core Node console, run:
energi.budgetInfo()
If there are no active proposals, you will see the following:
13.3. Fund Received
On Core Node console, run the following command (replace the address with your account address):
web3.fromWei(nrg.getBalance('0xf02B5c0beea7e30437A55D77bb82f2bACdE40249'), 'energi')
You will see the requested funds (in this case 1000 NRG) plus the fee (100 NRG) refunded to the account.
You have successfully requested funds from Energi Treasury. It has been approved by the community and distributed to your account.