Skip to content

Commit c1ea4ac

Browse files
author
alex v
authored
New quorum for the Community Fund (#333)
* reduced quorum * fix min quorum * fix version bit * fix default version * fix division * adds version bit 17 as rejected by default * add reduced_quorum to getblockchaininfo * fixes nMinimumQuorum type and ternary operator (#46)
1 parent 1128725 commit c1ea4ac

File tree

9 files changed

+121
-42
lines changed

9 files changed

+121
-42
lines changed

src/chainparams.cpp

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ class CMainParams : public CChainParams {
105105
consensus.nLastPOWBlock = 20000;
106106
consensus.nBlocksPerVotingCycle = 2880 * 7; // 7 Days
107107
consensus.nMinimumQuorum = 0.5;
108-
consensus.nQuorumVotes = consensus.nBlocksPerVotingCycle * consensus.nMinimumQuorum;
108+
consensus.nMinimumQuorumFirstHalf = 0.5;
109+
consensus.nMinimumQuorumSecondHalf = 0.4;
109110
consensus.nVotesAcceptProposal = 0.7;
110111
consensus.nVotesRejectProposal = 0.7;
111112
consensus.nVotesAcceptPaymentRequest = 0.7;
@@ -119,8 +120,8 @@ class CMainParams : public CChainParams {
119120
consensus.nCommunityFundAmountV2 = 0.5 * COIN;
120121
consensus.nCyclesProposalVoting = 6;
121122
consensus.nCyclesPaymentRequestVoting = 8;
122-
consensus.nPaymentRequestMaxVersion = 2;
123-
consensus.nProposalMaxVersion = 2;
123+
consensus.nPaymentRequestMaxVersion = 3;
124+
consensus.nProposalMaxVersion = 3;
124125
consensus.nMaxFutureDrift = 60;
125126
consensus.nStaticReward = 2 * COIN;
126127

@@ -182,6 +183,11 @@ class CMainParams : public CChainParams {
182183
consensus.vDeployments[Consensus::DEPLOYMENT_STATIC_REWARD].nStartTime = 1533081600; // August 1st, 2018
183184
consensus.vDeployments[Consensus::DEPLOYMENT_STATIC_REWARD].nTimeout = 1564617600; // August 1st, 2019
184185

186+
// Deployment of Quorum reduction for the Community Fund
187+
consensus.vDeployments[Consensus::DEPLOYMENT_QUORUM_CFUND].bit = 17;
188+
consensus.vDeployments[Consensus::DEPLOYMENT_QUORUM_CFUND].nStartTime = 1543622400; // Dec 1st, 2018
189+
consensus.vDeployments[Consensus::DEPLOYMENT_QUORUM_CFUND].nTimeout = 1575158400; // Dec 1st, 2019
190+
185191
/**
186192
* The message start string is designed to be unlikely to occur in normal data.
187193
* The characters are rarely used upper ASCII, not valid as UTF-8, and produce
@@ -289,7 +295,8 @@ class CTestNetParams : public CChainParams {
289295
consensus.nLastPOWBlock = 1000000;
290296
consensus.nBlocksPerVotingCycle = 180; // 1.5 hours
291297
consensus.nMinimumQuorum = 0.5;
292-
consensus.nQuorumVotes = consensus.nBlocksPerVotingCycle * consensus.nMinimumQuorum;
298+
consensus.nMinimumQuorumFirstHalf = 0.5;
299+
consensus.nMinimumQuorumSecondHalf = 0.4;
293300
consensus.nVotesAcceptProposal = 0.7;
294301
consensus.nVotesRejectProposal = 0.7;
295302
consensus.nVotesAcceptPaymentRequest = 0.7;
@@ -303,8 +310,8 @@ class CTestNetParams : public CChainParams {
303310
consensus.nCommunityFundAmountV2 = 0.5 * COIN;
304311
consensus.nCyclesProposalVoting = 4;
305312
consensus.nCyclesPaymentRequestVoting = 4;
306-
consensus.nPaymentRequestMaxVersion = 2;
307-
consensus.nProposalMaxVersion = 2;
313+
consensus.nPaymentRequestMaxVersion = 3;
314+
consensus.nProposalMaxVersion = 3;
308315
consensus.nMaxFutureDrift = 60;
309316
consensus.nStaticReward = 2 * COIN;
310317

@@ -353,6 +360,11 @@ class CTestNetParams : public CChainParams {
353360
consensus.vDeployments[Consensus::DEPLOYMENT_STATIC_REWARD].nStartTime = 1533081600; // August 1st, 2018
354361
consensus.vDeployments[Consensus::DEPLOYMENT_STATIC_REWARD].nTimeout = 1564617600; // August 1st, 2019
355362

363+
// Deployment of Quorum reduction for the Community Fund
364+
consensus.vDeployments[Consensus::DEPLOYMENT_QUORUM_CFUND].bit = 17;
365+
consensus.vDeployments[Consensus::DEPLOYMENT_QUORUM_CFUND].nStartTime = 1543622400; // Dec 1st, 2018
366+
consensus.vDeployments[Consensus::DEPLOYMENT_QUORUM_CFUND].nTimeout = 1575158400; // Dec 1st, 2019
367+
356368
/**
357369
* The message start string is designed to be unlikely to occur in normal data.
358370
* The characters are rarely used upper ASCII, not valid as UTF-8, and produce
@@ -453,7 +465,8 @@ class CDevNetParams : public CChainParams {
453465
consensus.nLastPOWBlock = 100000;
454466
consensus.nBlocksPerVotingCycle = 180; // 1.5 hours
455467
consensus.nMinimumQuorum = 0.5;
456-
consensus.nQuorumVotes = consensus.nBlocksPerVotingCycle * consensus.nMinimumQuorum;
468+
consensus.nMinimumQuorumFirstHalf = 0.5;
469+
consensus.nMinimumQuorumSecondHalf = 0.4;
457470
consensus.nVotesAcceptProposal = 0.7;
458471
consensus.nVotesRejectProposal = 0.7;
459472
consensus.nVotesAcceptPaymentRequest = 0.7;
@@ -467,8 +480,8 @@ class CDevNetParams : public CChainParams {
467480
consensus.nCommunityFundAmountV2 = 0.5 * COIN;
468481
consensus.nCyclesProposalVoting = 4;
469482
consensus.nCyclesPaymentRequestVoting = 4;
470-
consensus.nPaymentRequestMaxVersion = 2;
471-
consensus.nProposalMaxVersion = 2;
483+
consensus.nPaymentRequestMaxVersion = 3;
484+
consensus.nProposalMaxVersion = 3;
472485
consensus.nMaxFutureDrift = 60000;
473486
consensus.nStaticReward = 2 * COIN;
474487

@@ -517,6 +530,11 @@ class CDevNetParams : public CChainParams {
517530
consensus.vDeployments[Consensus::DEPLOYMENT_STATIC_REWARD].nStartTime = 1533081600; // August 1st, 2018
518531
consensus.vDeployments[Consensus::DEPLOYMENT_STATIC_REWARD].nTimeout = 1564617600; // August 1st, 2019
519532

533+
// Deployment of Quorum reduction for the Community Fund
534+
consensus.vDeployments[Consensus::DEPLOYMENT_QUORUM_CFUND].bit = 17;
535+
consensus.vDeployments[Consensus::DEPLOYMENT_QUORUM_CFUND].nStartTime = 1543622400; // Dec 1st, 2018
536+
consensus.vDeployments[Consensus::DEPLOYMENT_QUORUM_CFUND].nTimeout = 1575158400; // Dec 1st, 2019
537+
520538
/**
521539
* The message start string is designed to be unlikely to occur in normal data.
522540
* The characters are rarely used upper ASCII, not valid as UTF-8, and produce
@@ -627,7 +645,8 @@ class CRegTestParams : public CChainParams {
627645
consensus.nLastPOWBlock = 100000;
628646
consensus.nBlocksPerVotingCycle = 180; // 1.5 hours
629647
consensus.nMinimumQuorum = 0.5;
630-
consensus.nQuorumVotes = consensus.nBlocksPerVotingCycle * consensus.nMinimumQuorum;
648+
consensus.nMinimumQuorumFirstHalf = 0.5;
649+
consensus.nMinimumQuorumSecondHalf = 0.4;
631650
consensus.nVotesAcceptProposal = 0.7;
632651
consensus.nVotesRejectProposal = 0.7;
633652
consensus.nVotesAcceptPaymentRequest = 0.7;
@@ -641,8 +660,8 @@ class CRegTestParams : public CChainParams {
641660
consensus.nCommunityFundAmountV2 = 0.5 * COIN;
642661
consensus.nCyclesProposalVoting = 4;
643662
consensus.nCyclesPaymentRequestVoting = 4;
644-
consensus.nPaymentRequestMaxVersion = 2;
645-
consensus.nProposalMaxVersion = 2;
663+
consensus.nPaymentRequestMaxVersion = 3;
664+
consensus.nProposalMaxVersion = 3;
646665
consensus.nMaxFutureDrift = 60000;
647666
consensus.nStaticReward = 2 * COIN;
648667

@@ -691,6 +710,11 @@ class CRegTestParams : public CChainParams {
691710
consensus.vDeployments[Consensus::DEPLOYMENT_STATIC_REWARD].nStartTime = 1533081600; // August 1st, 2018
692711
consensus.vDeployments[Consensus::DEPLOYMENT_STATIC_REWARD].nTimeout = 1564617600; // August 1st, 2019
693712

713+
// Deployment of Quorum reduction for the Community Fund
714+
consensus.vDeployments[Consensus::DEPLOYMENT_QUORUM_CFUND].bit = 17;
715+
consensus.vDeployments[Consensus::DEPLOYMENT_QUORUM_CFUND].nStartTime = 1543622400; // Dec 1st, 2018
716+
consensus.vDeployments[Consensus::DEPLOYMENT_QUORUM_CFUND].nTimeout = 1575158400; // Dec 1st, 2019
717+
694718
/**
695719
* The message start string is designed to be unlikely to occur in normal data.
696720
* The characters are rarely used upper ASCII, not valid as UTF-8, and produce

src/consensus/cfund.cpp

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ bool CFund::RemoveVotePaymentRequest(uint256 proposalHash)
188188
return RemoveVotePaymentRequest(proposalHash.ToString());
189189
}
190190

191-
bool CFund::IsValidPaymentRequest(CTransaction tx)
191+
bool CFund::IsValidPaymentRequest(CTransaction tx, int nMaxVersion)
192192
{
193193
if(tx.strDZeel.length() > 1024)
194194
return error("%s: Too long strdzeel for payment request %s", __func__, tx.GetHash().ToString());
@@ -261,8 +261,8 @@ bool CFund::IsValidPaymentRequest(CTransaction tx)
261261
if(nAmount > proposal.GetAvailable(true))
262262
return error("%s: Invalid requested amount for payment request %s (%d vs %d available)",
263263
__func__, tx.GetHash().ToString(), nAmount, proposal.GetAvailable());
264-
265-
bool ret = nVersion <= Params().GetConsensus().nPaymentRequestMaxVersion;
264+
265+
bool ret = (nVersion <= nMaxVersion);
266266

267267
if(!ret)
268268
return error("%s: Invalid version for payment request %s", __func__, tx.GetHash().ToString());
@@ -285,7 +285,7 @@ bool CFund::CPaymentRequest::IsExpired() const {
285285
return false;
286286
}
287287

288-
bool CFund::IsValidProposal(CTransaction tx)
288+
bool CFund::IsValidProposal(CTransaction tx, int nMaxVersion)
289289
{
290290
if(tx.strDZeel.length() > 1024)
291291
return error("%s: Too long strdzeel for proposal %s", __func__, tx.GetHash().ToString());
@@ -335,7 +335,7 @@ bool CFund::IsValidProposal(CTransaction tx)
335335
nAmount < MAX_MONEY &&
336336
nAmount > 0 &&
337337
nDeadline > 0 &&
338-
nVersion <= Params().GetConsensus().nProposalMaxVersion);
338+
nVersion <= nMaxVersion);
339339

340340
if (!ret)
341341
return error("%s: Wrong strdzeel %s for proposal %s", __func__, tx.strDZeel.c_str(), tx.GetHash().ToString());
@@ -346,25 +346,41 @@ bool CFund::IsValidProposal(CTransaction tx)
346346

347347
bool CFund::CPaymentRequest::IsAccepted() const {
348348
int nTotalVotes = nVotesYes + nVotesNo;
349-
return nTotalVotes > Params().GetConsensus().nQuorumVotes
349+
float nMinimumQuorum = Params().GetConsensus().nMinimumQuorum;
350+
if (nVersion >= 3) {
351+
nMinimumQuorum = nVotingCycle > Params().GetConsensus().nCyclesPaymentRequestVoting / 2 ? Params().GetConsensus().nMinimumQuorumSecondHalf : Params().GetConsensus().nMinimumQuorumFirstHalf;
352+
}
353+
return nTotalVotes > Params().GetConsensus().nBlocksPerVotingCycle * nMinimumQuorum
350354
&& ((float)nVotesYes > ((float)(nTotalVotes) * Params().GetConsensus().nVotesAcceptPaymentRequest));
351355
}
352356

353357
bool CFund::CPaymentRequest::IsRejected() const {
354358
int nTotalVotes = nVotesYes + nVotesNo;
355-
return nTotalVotes > Params().GetConsensus().nQuorumVotes
359+
float nMinimumQuorum = Params().GetConsensus().nMinimumQuorum;
360+
if (nVersion >= 3) {
361+
nMinimumQuorum = nVotingCycle > Params().GetConsensus().nCyclesPaymentRequestVoting / 2 ? Params().GetConsensus().nMinimumQuorumSecondHalf : Params().GetConsensus().nMinimumQuorumFirstHalf;
362+
}
363+
return nTotalVotes > Params().GetConsensus().nBlocksPerVotingCycle * nMinimumQuorum
356364
&& ((float)nVotesNo > ((float)(nTotalVotes) * Params().GetConsensus().nVotesRejectPaymentRequest));
357365
}
358366

359367
bool CFund::CProposal::IsAccepted() const {
360368
int nTotalVotes = nVotesYes + nVotesNo;
361-
return nTotalVotes > Params().GetConsensus().nQuorumVotes
369+
float nMinimumQuorum = Params().GetConsensus().nMinimumQuorum;
370+
if (nVersion >= 3) {
371+
nMinimumQuorum = nVotingCycle > Params().GetConsensus().nCyclesProposalVoting / 2 ? Params().GetConsensus().nMinimumQuorumSecondHalf : Params().GetConsensus().nMinimumQuorumFirstHalf;
372+
}
373+
return nTotalVotes > Params().GetConsensus().nBlocksPerVotingCycle * nMinimumQuorum
362374
&& ((float)nVotesYes > ((float)(nTotalVotes) * Params().GetConsensus().nVotesAcceptProposal));
363375
}
364376

365377
bool CFund::CProposal::IsRejected() const {
366378
int nTotalVotes = nVotesYes + nVotesNo;
367-
return nTotalVotes > Params().GetConsensus().nQuorumVotes
379+
float nMinimumQuorum = Params().GetConsensus().nMinimumQuorum;
380+
if (nVersion >= 3) {
381+
nMinimumQuorum = nVotingCycle > Params().GetConsensus().nCyclesProposalVoting / 2 ? Params().GetConsensus().nMinimumQuorumSecondHalf : Params().GetConsensus().nMinimumQuorumFirstHalf;
382+
}
383+
return nTotalVotes > Params().GetConsensus().nBlocksPerVotingCycle * nMinimumQuorum
368384
&& ((float)nVotesNo > ((float)(nTotalVotes) * Params().GetConsensus().nVotesRejectProposal));
369385
}
370386

src/consensus/cfund.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ bool VotePaymentRequest(string strProp, bool vote, bool &duplicate);
4747
bool VotePaymentRequest(uint256 proposalHash, bool vote, bool &duplicate);
4848
bool RemoveVotePaymentRequest(string strProp);
4949
bool RemoveVotePaymentRequest(uint256 proposalHash);
50-
bool IsValidPaymentRequest(CTransaction tx);
51-
bool IsValidProposal(CTransaction tx);
50+
bool IsValidPaymentRequest(CTransaction tx, int nMaxVersion);
51+
bool IsValidProposal(CTransaction tx, int nMaxVersion);
5252

5353
class CPaymentRequest
5454
{
5555
public:
56-
static const int32_t CURRENT_VERSION=2;
56+
static const int32_t CURRENT_VERSION=3;
5757

5858
CAmount nAmount;
5959
flags fState;
@@ -172,7 +172,7 @@ class CPaymentRequest
172172
class CProposal
173173
{
174174
public:
175-
static const int32_t CURRENT_VERSION=2;
175+
static const int32_t CURRENT_VERSION=3;
176176

177177
CAmount nAmount;
178178
CAmount nFee;

src/consensus/params.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ enum DeploymentPos
2828
DEPLOYMENT_COMMUNITYFUND_AMOUNT_V2,
2929
DEPLOYMENT_NTPSYNC,
3030
DEPLOYMENT_STATIC_REWARD,
31+
DEPLOYMENT_QUORUM_CFUND,
3132
MAX_VERSION_BITS_DEPLOYMENTS
3233
};
3334

@@ -74,12 +75,13 @@ struct Params {
7475
int nLastPOWBlock;
7576

7677
int nBlocksPerVotingCycle;
77-
int nQuorumVotes;
7878
float nVotesAcceptProposal;
7979
float nVotesRejectProposal;
8080
float nVotesAcceptPaymentRequest;
8181
float nVotesRejectPaymentRequest;
8282
float nMinimumQuorum;
83+
float nMinimumQuorumFirstHalf;
84+
float nMinimumQuorumSecondHalf;
8385
int nCommunityFundMinAge;
8486
int64_t nProposalMinimalFee;
8587
int nBlockSpreadCFundAccumulation;

0 commit comments

Comments
 (0)