Skip to content

Commit

Permalink
Merge branch 'v0.12.1.x-sync-process' into v0.12.1.x
Browse files Browse the repository at this point in the history
  • Loading branch information
Evan Duffield committed May 23, 2016
2 parents 38b532a + 528c5ed commit 717b21d
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 18 deletions.
1 change: 0 additions & 1 deletion src/drafted/governance-classes.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,6 @@ class CDashNetwork : public CGovernanceObject
public:
CDashNetwork(UniValue objIn)
{
//TODO : 12.1 - error checking
strName = objIn["name"].get_str();
strURL = objIn["name"].get_str();

Expand Down
4 changes: 4 additions & 0 deletions src/governance-vote.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ class CGovernanceVote
return ss.GetHash();
}

uint256 GetParentHash(){
return nParentHash;
}

ADD_SERIALIZE_METHODS;

template <typename Stream, typename Operation>
Expand Down
31 changes: 16 additions & 15 deletions src/governance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,17 +129,18 @@ void CGovernanceManager::CheckAndRemove()

// 12.1 -- disabled -- use "delete" voting mechanism

// if(!pCurrentBlockIndex) return;
if(!pCurrentBlockIndex) return;

// std::string strError = "";
std::string strError = "";

// std::map<uint256, CGovernanceObject>::iterator it2 = mapObjects.begin();
// while(it2 != mapObjects.end())
// {
// CGovernanceObject* pbudgetProposal = &((*it2).second);
// pbudgetProposal->fValid = pbudgetProposal->IsValid(pCurrentBlockIndex, strError);
// ++it2;
// }
std::map<uint256, CGovernanceObject>::iterator it2 = mapObjects.begin();
while(it2 != mapObjects.end())
{
CGovernanceObject* pbudgetProposal = &((*it2).second);

pbudgetProposal->UpdateLocalValidity(pCurrentBlockIndex);
++it2;
}
}

CGovernanceObject *CGovernanceManager::FindProposal(const std::string &strName)
Expand Down Expand Up @@ -671,22 +672,22 @@ void CGovernanceManager::CleanAndRemove(bool fSignatureCheck)

int CGovernanceObject::GetAbsoluteYesCount(int nVoteSignalIn)
{
return governance.CountMatchingVotes(nVoteSignalIn, VOTE_OUTCOME_YES) - governance.CountMatchingVotes(nVoteSignalIn, VOTE_OUTCOME_NO);
return governance.CountMatchingVotes((*this), nVoteSignalIn, VOTE_OUTCOME_YES) - governance.CountMatchingVotes((*this), nVoteSignalIn, VOTE_OUTCOME_NO);
}

int CGovernanceObject::GetYesCount(int nVoteSignalIn)
{
return governance.CountMatchingVotes(nVoteSignalIn, VOTE_OUTCOME_YES);
return governance.CountMatchingVotes((*this), nVoteSignalIn, VOTE_OUTCOME_YES);
}

int CGovernanceObject::GetNoCount(int nVoteSignalIn)
{
return governance.CountMatchingVotes(nVoteSignalIn, VOTE_OUTCOME_NO);
return governance.CountMatchingVotes((*this), nVoteSignalIn, VOTE_OUTCOME_NO);
}

int CGovernanceObject::GetAbstainCount(int nVoteSignalIn)
{
return governance.CountMatchingVotes(nVoteSignalIn, VOTE_OUTCOME_ABSTAIN);
return governance.CountMatchingVotes((*this), nVoteSignalIn, VOTE_OUTCOME_ABSTAIN);
}

void CGovernanceObject::Relay()
Expand Down Expand Up @@ -716,7 +717,7 @@ void CGovernanceManager::UpdatedBlockTip(const CBlockIndex *pindex)
NewBlock();
}

int CGovernanceManager::CountMatchingVotes(int nVoteSignalIn, int nVoteOutcomeIn)
int CGovernanceManager::CountMatchingVotes(CGovernanceObject& govobj, int nVoteSignalIn, int nVoteOutcomeIn)
{
/*
*
Expand All @@ -728,7 +729,7 @@ int CGovernanceManager::CountMatchingVotes(int nVoteSignalIn, int nVoteOutcomeIn

std::map<uint256, CGovernanceVote>::iterator it2 = mapVotes.begin();
while(it2 != mapVotes.end()){
if((*it2).second.fValid && (*it2).second.nVoteSignal == nVoteSignalIn)
if((*it2).second.fValid && (*it2).second.nVoteSignal == nVoteSignalIn && (*it2).second.GetParentHash() == govobj.GetHash())
{
nCount += ((*it2).second.nVoteOutcome == nVoteOutcomeIn ? 1 : 0);
++it2;
Expand Down
11 changes: 9 additions & 2 deletions src/governance.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ class CGovernanceManager

std::vector<CGovernanceObject*> GetAllProposals(int64_t nMoreThanTime);

int CountMatchingVotes(int nVoteSignalIn, int nVoteOutcomeIn);
int CountMatchingVotes(CGovernanceObject& govobj, int nVoteSignalIn, int nVoteOutcomeIn);

bool IsBudgetPaymentBlock(int nBlockHeight);
bool AddGovernanceObject (CGovernanceObject& budgetProposal);
Expand All @@ -117,7 +117,7 @@ class CGovernanceManager
void Clear(){
LOCK(cs);

LogPrintf("Budget object cleared\n");
LogPrintf("Governance object manager was cleared\n");
mapObjects.clear();
mapSeenGovernanceObjects.clear();
mapSeenVotes.clear();
Expand Down Expand Up @@ -163,6 +163,11 @@ class CGovernanceObject
uint256 nFeeTXHash; //fee-tx
std::string strData; // Data field - can be used for anything

// set by IsValid()
bool fCachedLocalValidity;
std::string strLocalValidityError;

// set via sentinel voting mechanisms
// caching -- one per voting mechanism -- see governance-vote.h for more information
bool fCachedFunding;
bool fCachedValid;
Expand All @@ -177,6 +182,8 @@ class CGovernanceObject
CGovernanceObject(uint256 nHashParentIn, int nRevisionIn, std::string strNameIn, int64_t nTime, uint256 nFeeTXHashIn);
CGovernanceObject(const CGovernanceObject& other);

// Update local validity : store the values in memory
void UpdateLocalValidity(const CBlockIndex *pCurrentBlockIndex) {fCachedLocalValidity = IsValid(pCurrentBlockIndex, strLocalValidityError);};

void swap(CGovernanceObject& first, CGovernanceObject& second) // nothrow
{
Expand Down

0 comments on commit 717b21d

Please sign in to comment.