mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 20:12:57 +01:00
Merge pull request #806 from evan82/v0.12.1.x-sync-process-2
V0.12.1.x Sync Processing
This commit is contained in:
commit
7f52065c38
@ -45,7 +45,7 @@ CActiveMasternode activeMasternode;
|
||||
udjinm6 - udjinm6@dash.org
|
||||
*/
|
||||
|
||||
void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand, CDataStream& vRecv)
|
||||
void CDarksendPool::ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv)
|
||||
{
|
||||
if(fLiteMode) return; //disable all Darksend/Masternode related functionality
|
||||
if(!masternodeSync.IsBlockchainSynced()) return;
|
||||
|
@ -360,7 +360,7 @@ public:
|
||||
* dssub | Darksend Subscribe To
|
||||
* \param vRecv
|
||||
*/
|
||||
void ProcessMessageDarksend(CNode* pfrom, std::string& strCommand, CDataStream& vRecv);
|
||||
void ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv);
|
||||
|
||||
void InitCollateralAddress(){
|
||||
SetCollateralAddress(Params().DarksendPoolDummyAddress());
|
||||
|
@ -27,20 +27,20 @@ class CGovernanceVote;
|
||||
|
||||
#define VOTE_SIGNAL_NONE 0 // SIGNAL VARIOUS THINGS TO HAPPEN:
|
||||
#define VOTE_SIGNAL_FUNDING 1 // -- fund this object for it's stated amount
|
||||
#define VOTE_SIGNAL_VALID 2 // -- this object checks out to sentinel
|
||||
#define VOTE_SIGNAL_VALID 2 // -- this object checks out in sentinel engine
|
||||
#define VOTE_SIGNAL_DELETE 3 // -- this object should be deleted from memory entirely
|
||||
#define VOTE_SIGNAL_CLEAR_REGISTERS 4 // -- this object's registers should be cleared (stored elsewhere, e.g. dashdrive)
|
||||
#define VOTE_SIGNAL_ENDORSED 5 // -- officially endorsed by the network somehow (delegation)
|
||||
#define VOTE_SIGNAL_RELEASE_BOUNTY1 6 // -- release the first bounty associated with this
|
||||
#define VOTE_SIGNAL_RELEASE_BOUNTY2 7 // -- second
|
||||
#define VOTE_SIGNAL_RELEASE_BOUNTY3 8 // -- third
|
||||
#define VOTE_SIGNAL_NOOP1 9 // FOR FURTHER EXPANSION
|
||||
#define VOTE_SIGNAL_NOOP2 10 //
|
||||
#define VOTE_SIGNAL_NOOP3 11 //
|
||||
#define VOTE_SIGNAL_NOOP4 12 //
|
||||
#define VOTE_SIGNAL_NOOP5 13 //
|
||||
#define VOTE_SIGNAL_NOOP6 14 //
|
||||
#define VOTE_SIGNAL_NOOP7 15 //
|
||||
#define VOTE_SIGNAL_ENDORSED 4 // -- officially endorsed by the network somehow (delegation)
|
||||
#define VOTE_SIGNAL_NOOP1 5 // FOR FURTHER EXPANSION
|
||||
#define VOTE_SIGNAL_NOOP2 6 //
|
||||
#define VOTE_SIGNAL_NOOP3 7 //
|
||||
#define VOTE_SIGNAL_NOOP4 8 //
|
||||
#define VOTE_SIGNAL_NOOP5 9 //
|
||||
#define VOTE_SIGNAL_NOOP6 10 //
|
||||
#define VOTE_SIGNAL_NOOP7 11 //
|
||||
#define VOTE_SIGNAL_NOOP8 12 //
|
||||
#define VOTE_SIGNAL_NOOP9 13 //
|
||||
#define VOTE_SIGNAL_NOOP10 14 //
|
||||
#define VOTE_SIGNAL_NOOP11 15 //
|
||||
#define VOTE_SIGNAL_CUSTOM_START 16 // SENTINEL CUSTOM ACTIONS
|
||||
#define VOTE_SIGNAL_CUSTOM_END 35 // 16-35
|
||||
|
||||
|
@ -127,8 +127,20 @@ void CGovernanceManager::CheckAndRemove()
|
||||
{
|
||||
LogPrintf("CGovernanceManager::CheckAndRemove \n");
|
||||
|
||||
// 12.1 -- disabled -- use "delete" voting mechanism
|
||||
|
||||
// DELETE OBJECTS WHICH MASTERNODE HAS FLAGGED DELETE=TRUE
|
||||
|
||||
std::map<uint256, CGovernanceObject>::iterator it = mapObjects.begin();
|
||||
while(it != mapObjects.end())
|
||||
{
|
||||
CGovernanceObject* pObj = &((*it).second);
|
||||
|
||||
pObj->UpdateLocalValidity(pCurrentBlockIndex);
|
||||
pObj->UpdateSentinelVariables(pCurrentBlockIndex);
|
||||
++it;
|
||||
}
|
||||
|
||||
// UPDATE CACHING MECHANISMS FOR GOVERNANCE OBJECTS
|
||||
|
||||
if(!pCurrentBlockIndex) return;
|
||||
|
||||
std::string strError = "";
|
||||
@ -136,14 +148,18 @@ void CGovernanceManager::CheckAndRemove()
|
||||
std::map<uint256, CGovernanceObject>::iterator it2 = mapObjects.begin();
|
||||
while(it2 != mapObjects.end())
|
||||
{
|
||||
CGovernanceObject* pbudgetProposal = &((*it2).second);
|
||||
CGovernanceObject* pObj = &((*it2).second);
|
||||
|
||||
pbudgetProposal->UpdateLocalValidity(pCurrentBlockIndex);
|
||||
// UPDATE LOCAL VALIDITY AGAINST CRYPTO DATA
|
||||
pObj->UpdateLocalValidity(pCurrentBlockIndex);
|
||||
|
||||
// UPDATE SENTINEL SIGNALING VARIABLES
|
||||
pObj->UpdateSentinelVariables(pCurrentBlockIndex);
|
||||
++it2;
|
||||
}
|
||||
}
|
||||
|
||||
CGovernanceObject *CGovernanceManager::FindProposal(const std::string &strName)
|
||||
CGovernanceObject *CGovernanceManager::FindGovernanceObject(const std::string &strName)
|
||||
{
|
||||
//find the prop with the highest yes count
|
||||
|
||||
@ -164,7 +180,7 @@ CGovernanceObject *CGovernanceManager::FindProposal(const std::string &strName)
|
||||
return pbudgetProposal;
|
||||
}
|
||||
|
||||
CGovernanceObject *CGovernanceManager::FindProposal(uint256 nHash)
|
||||
CGovernanceObject *CGovernanceManager::FindGovernanceObject(uint256 nHash)
|
||||
{
|
||||
LOCK(cs);
|
||||
|
||||
@ -396,13 +412,6 @@ void CGovernanceManager::ProcessMessage(CNode* pfrom, std::string& strCommand, C
|
||||
|
||||
}
|
||||
|
||||
//todo - 12.1 - terrible name - maybe DoesObjectExist?
|
||||
bool CGovernanceManager::PropExists(uint256 nHash)
|
||||
{
|
||||
if(mapObjects.count(nHash)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
// description: incremental sync with our peers
|
||||
// note: incremental syncing seems excessive, well just have clients ask for specific objects and their votes
|
||||
// note: 12.1 - remove
|
||||
@ -458,10 +467,11 @@ void CGovernanceManager::Sync(CNode* pfrom, uint256 nProp)
|
||||
|
||||
int nInvCount = 0;
|
||||
|
||||
// sync gov objects
|
||||
// SYNC GOVERNANCE OBJECTS WITH OTHER CLIENT
|
||||
|
||||
std::map<uint256, int>::iterator it1 = mapSeenGovernanceObjects.begin();
|
||||
while(it1 != mapSeenGovernanceObjects.end()){
|
||||
CGovernanceObject* pbudgetProposal = FindProposal((*it1).first);
|
||||
CGovernanceObject* pbudgetProposal = FindGovernanceObject((*it1).first);
|
||||
if(pbudgetProposal && pbudgetProposal->fCachedValid && ((nProp == uint256() || ((*it1).first == nProp)))){
|
||||
// Push the inventory budget proposal message over to the other client
|
||||
pfrom->PushInventory(CInv(MSG_BUDGET_PROPOSAL, (*it1).first));
|
||||
@ -470,7 +480,8 @@ void CGovernanceManager::Sync(CNode* pfrom, uint256 nProp)
|
||||
++it1;
|
||||
}
|
||||
|
||||
// sync votes
|
||||
// SYNC OUR GOVERNANCE OBJECT VOTES WITH THEIR GOVERNANCE OBJECT VOTES
|
||||
|
||||
std::map<uint256, CGovernanceVote>::iterator it2 = mapVotes.begin();
|
||||
while(it2 != mapVotes.end()){
|
||||
pfrom->PushInventory(CInv(MSG_BUDGET_VOTE, (*it2).first));
|
||||
@ -549,11 +560,7 @@ CGovernanceObject::CGovernanceObject()
|
||||
fCachedFunding = false;
|
||||
fCachedValid = true;
|
||||
fCachedDelete = false;
|
||||
fCachedClearRegisters = false;
|
||||
fCachedEndorsed = false;
|
||||
fCachedReleaseBounty1 = false;
|
||||
fCachedReleaseBounty2 = false;
|
||||
fCachedReleaseBounty3 = false;
|
||||
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "base58.h"
|
||||
#include "masternode.h"
|
||||
#include "governance-vote.h"
|
||||
#include "masternodeman.h"
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include "init.h"
|
||||
|
||||
@ -97,8 +98,8 @@ public:
|
||||
void ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv);
|
||||
void NewBlock();
|
||||
|
||||
CGovernanceObject *FindProposal(const std::string &strName);
|
||||
CGovernanceObject *FindProposal(uint256 nHash);
|
||||
CGovernanceObject *FindGovernanceObject(const std::string &strName);
|
||||
CGovernanceObject *FindGovernanceObject(uint256 nHash);
|
||||
|
||||
std::vector<CGovernanceObject*> GetAllProposals(int64_t nMoreThanTime);
|
||||
|
||||
@ -108,7 +109,6 @@ public:
|
||||
bool AddGovernanceObject (CGovernanceObject& budgetProposal);
|
||||
bool UpdateGovernanceObject(CGovernanceVote& vote, CNode* pfrom, std::string& strError);
|
||||
bool AddOrUpdateVote(CGovernanceVote& vote, std::string& strError);
|
||||
bool PropExists(uint256 nHash);
|
||||
std::string GetRequiredPaymentsString(int nBlockHeight);
|
||||
void CleanAndRemove(bool fSignatureCheck);
|
||||
void CheckAndRemove();
|
||||
@ -172,11 +172,7 @@ public:
|
||||
bool fCachedFunding;
|
||||
bool fCachedValid;
|
||||
bool fCachedDelete;
|
||||
bool fCachedClearRegisters;
|
||||
bool fCachedEndorsed;
|
||||
bool fCachedReleaseBounty1;
|
||||
bool fCachedReleaseBounty2;
|
||||
bool fCachedReleaseBounty3;
|
||||
|
||||
CGovernanceObject();
|
||||
CGovernanceObject(uint256 nHashParentIn, int nRevisionIn, std::string strNameIn, int64_t nTime, uint256 nFeeTXHashIn);
|
||||
@ -184,6 +180,29 @@ public:
|
||||
|
||||
// Update local validity : store the values in memory
|
||||
void UpdateLocalValidity(const CBlockIndex *pCurrentBlockIndex) {fCachedLocalValidity = IsValid(pCurrentBlockIndex, strLocalValidityError);};
|
||||
void UpdateSentinelVariables(const CBlockIndex *pCurrentBlockIndex)
|
||||
{
|
||||
/*
|
||||
#define VOTE_SIGNAL_FUNDING 1 // -- fund this object for it's stated amount
|
||||
#define VOTE_SIGNAL_VALID 2 // -- this object checks out to sentinel
|
||||
#define VOTE_SIGNAL_DELETE 3 // -- this object should be deleted from memory entirely
|
||||
#define VOTE_SIGNAL_ENDORSED 5 // -- officially endorsed by the network somehow (delegation)
|
||||
*/
|
||||
|
||||
int nMnCount = mnodeman.CountEnabled();
|
||||
int nAbsYesVoteReq = nMnCount / 10;
|
||||
|
||||
// set all flags to false
|
||||
fCachedFunding = false;
|
||||
fCachedValid = false;
|
||||
fCachedDelete = false;
|
||||
fCachedEndorsed = false;
|
||||
|
||||
if(GetAbsoluteYesCount(VOTE_SIGNAL_FUNDING) >= nAbsYesVoteReq) fCachedFunding = true;
|
||||
if(GetAbsoluteYesCount(VOTE_SIGNAL_VALID) >= nAbsYesVoteReq) fCachedValid = true;
|
||||
if(GetAbsoluteYesCount(VOTE_SIGNAL_DELETE) >= nAbsYesVoteReq) fCachedDelete = true;
|
||||
if(GetAbsoluteYesCount(VOTE_SIGNAL_ENDORSED) >= nAbsYesVoteReq) fCachedEndorsed = true;
|
||||
}
|
||||
|
||||
void swap(CGovernanceObject& first, CGovernanceObject& second) // nothrow
|
||||
{
|
||||
@ -203,12 +222,7 @@ public:
|
||||
swap(first.fCachedFunding, second.fCachedFunding);
|
||||
swap(first.fCachedValid, second.fCachedValid);
|
||||
swap(first.fCachedDelete, second.fCachedDelete);
|
||||
swap(first.fCachedClearRegisters, second.fCachedClearRegisters);
|
||||
swap(first.fCachedEndorsed, second.fCachedEndorsed);
|
||||
swap(first.fCachedReleaseBounty1, second.fCachedReleaseBounty1);
|
||||
swap(first.fCachedReleaseBounty2, second.fCachedReleaseBounty2);
|
||||
swap(first.fCachedReleaseBounty3, second.fCachedReleaseBounty3);
|
||||
|
||||
}
|
||||
|
||||
bool HasMinimumRequiredSupport();
|
||||
@ -225,6 +239,7 @@ public:
|
||||
void CleanAndRemove(bool fSignatureCheck);
|
||||
void Relay();
|
||||
|
||||
|
||||
uint256 GetHash(){
|
||||
|
||||
/*
|
||||
@ -236,7 +251,10 @@ public:
|
||||
*/
|
||||
|
||||
CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION);
|
||||
ss << nHashParent;
|
||||
ss << nRevision;
|
||||
ss << strName;
|
||||
ss << nTime;
|
||||
ss << strData;
|
||||
uint256 h1 = ss.GetHash();
|
||||
|
||||
@ -256,6 +274,7 @@ public:
|
||||
|
||||
bool SetData(std::string& strError, std::string strDataIn)
|
||||
{
|
||||
// (assumption) this is equal to pythons len(strData) > 512*4, I think
|
||||
if(strDataIn.size() > 512*4)
|
||||
{
|
||||
strError = "Too big.";
|
||||
|
@ -221,7 +221,8 @@ void PrepareShutdown()
|
||||
GenerateBitcoins(false, 0, Params());
|
||||
StopNode();
|
||||
|
||||
// todo - 12.1 - magic strings as const
|
||||
// STORE DATA CACHES INTO SERIALIZED DAT FILES
|
||||
|
||||
CFlatDB<CMasternodeMan> flatdb1("mncache.dat", "magicMasternodeCache");
|
||||
flatdb1.Dump(mnodeman);
|
||||
CFlatDB<CMasternodePayments> flatdb2("mnpayments.dat", "magicMasternodePaymentsCache");
|
||||
@ -1824,7 +1825,8 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||
|
||||
// ********************************************************* Step 10: Load cache data
|
||||
|
||||
// todo - 12.1 - magic strings as const
|
||||
// LOAD SERIALIZED DAT FILES INTO DATA CACHES FOR INTERNAL USE
|
||||
|
||||
uiInterface.InitMessage(_("Loading masternode cache..."));
|
||||
CFlatDB<CMasternodeMan> flatdb1("mncache.dat", "magicMasternodeCache");
|
||||
flatdb1.Load(mnodeman);
|
||||
|
@ -1499,7 +1499,6 @@ CAmount GetBlockSubsidy(int nPrevBits, int nPrevHeight, const Consensus::Params&
|
||||
// LogPrintf("height %u diff %4.2f reward %i \n", nPrevHeight, dDiff, nSubsidy);
|
||||
nSubsidy *= COIN;
|
||||
|
||||
// updated - 12.1 - unified logic
|
||||
// yearly decline of production by 7.1% per year, projected 21.3M coins max by year 2050.
|
||||
for(int i = consensusParams.nSubsidyHalvingInterval; i <= nPrevHeight; i += consensusParams.nSubsidyHalvingInterval) nSubsidy -= nSubsidy/14;
|
||||
|
||||
@ -5605,9 +5604,9 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||
if (found)
|
||||
{
|
||||
//probably one the extensions
|
||||
darkSendPool.ProcessMessageDarksend(pfrom, strCommand, vRecv);
|
||||
darkSendPool.ProcessMessage(pfrom, strCommand, vRecv);
|
||||
mnodeman.ProcessMessage(pfrom, strCommand, vRecv);
|
||||
mnpayments.ProcessMessageMasternodePayments(pfrom, strCommand, vRecv);
|
||||
mnpayments.ProcessMessage(pfrom, strCommand, vRecv);
|
||||
ProcessMessageInstantX(pfrom, strCommand, vRecv);
|
||||
ProcessSpork(pfrom, strCommand, vRecv);
|
||||
masternodeSync.ProcessMessage(pfrom, strCommand, vRecv);
|
||||
|
@ -6,18 +6,6 @@
|
||||
#include "main.h"
|
||||
#include "init.h"
|
||||
|
||||
// todo 12.1 - remove the unused
|
||||
#include "governance.h"
|
||||
#include "masternode.h"
|
||||
#include "darksend.h"
|
||||
#include "governance.h"
|
||||
#include "masternodeman.h"
|
||||
#include "masternode-sync.h"
|
||||
#include "util.h"
|
||||
//#include "addrman.h"
|
||||
//#include <boost/filesystem.hpp>
|
||||
//#include <boost/lexical_cast.hpp>
|
||||
|
||||
CBudgetManager budget;
|
||||
CCriticalSection cs_budget;
|
||||
|
||||
@ -783,7 +771,7 @@ std::string CFinalizedBudget::GetProposals()
|
||||
std::string ret = "";
|
||||
|
||||
BOOST_FOREACH(CTxBudgetPayment& budgetPayment, vecBudgetPayments){
|
||||
CGovernanceObject* pbudgetProposal = governance.FindProposal(budgetPayment.nProposalHash);
|
||||
CGovernanceObject* pbudgetProposal = governance.FindGovernanceObject(budgetPayment.nProposalHash);
|
||||
|
||||
std::string token = budgetPayment.nProposalHash.ToString();
|
||||
|
||||
@ -807,7 +795,7 @@ std::string CFinalizedBudget::GetStatus()
|
||||
continue;
|
||||
}
|
||||
|
||||
CGovernanceObject* pbudgetProposal = governance.FindProposal(budgetPayment.nProposalHash);
|
||||
CGovernanceObject* pbudgetProposal = governance.FindGovernanceObject(budgetPayment.nProposalHash);
|
||||
if(!pbudgetProposal){
|
||||
if(retBadHashes == ""){
|
||||
retBadHashes = "Unknown proposal hash! Check this proposal before voting" + budgetPayment.nProposalHash.ToString();
|
||||
|
@ -288,12 +288,15 @@ void FillBlockPayee(CMutableTransaction& txNew, CAmount nFees)
|
||||
|
||||
std::string GetRequiredPaymentsString(int nBlockHeight)
|
||||
{
|
||||
// 12.1
|
||||
// 12.1 -- added triggered payments
|
||||
|
||||
// if(IsSporkActive(SPORK_13_ENABLE_SUPERBLOCKS) && budget.IsBudgetPaymentBlock(nBlockHeight)){
|
||||
// return budget.GetRequiredPaymentsString(nBlockHeight);
|
||||
// } else {
|
||||
// return mnpayments.GetRequiredPaymentsString(nBlockHeight);
|
||||
// }
|
||||
|
||||
return mnpayments.GetRequiredPaymentsString(nBlockHeight);
|
||||
}
|
||||
|
||||
void CMasternodePayments::FillBlockPayee(CMutableTransaction& txNew, CAmount nFees)
|
||||
@ -343,7 +346,7 @@ int CMasternodePayments::GetMinMasternodePaymentsProto() {
|
||||
: MIN_MASTERNODE_PAYMENT_PROTO_VERSION_1;
|
||||
}
|
||||
|
||||
void CMasternodePayments::ProcessMessageMasternodePayments(CNode* pfrom, std::string& strCommand, CDataStream& vRecv)
|
||||
void CMasternodePayments::ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv)
|
||||
{
|
||||
if(!masternodeSync.IsBlockchainSynced()) return;
|
||||
|
||||
@ -500,9 +503,7 @@ bool CMasternodePayments::AddWinningMasternode(CMasternodePaymentWinner& winnerI
|
||||
}
|
||||
}
|
||||
|
||||
int n = 1;
|
||||
if(IsReferenceNode(winnerIn.vinMasternode)) n = 100;
|
||||
mapMasternodeBlocks[winnerIn.nBlockHeight].AddPayee(winnerIn.payee, n);
|
||||
mapMasternodeBlocks[winnerIn.nBlockHeight].AddPayee(winnerIn.payee, 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -622,20 +623,8 @@ void CMasternodePayments::CheckAndRemove()
|
||||
}
|
||||
}
|
||||
|
||||
bool IsReferenceNode(CTxIn& vin)
|
||||
{
|
||||
//reference node - hybrid mode
|
||||
if(vin.prevout.ToStringShort() == "099c01bea63abd1692f60806bb646fa1d288e2d049281225f17e499024084e28-0") return true; // mainnet
|
||||
if(vin.prevout.ToStringShort() == "fbc16ae5229d6d99181802fd76a4feee5e7640164dcebc7f8feb04a7bea026f8-0") return true; // testnet
|
||||
if(vin.prevout.ToStringShort() == "e466f5d8beb4c2d22a314310dc58e0ea89505c95409754d0d68fb874952608cc-1") return true; // regtest
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CMasternodePaymentWinner::IsValid(CNode* pnode, std::string& strError)
|
||||
{
|
||||
if(IsReferenceNode(vinMasternode)) return true;
|
||||
|
||||
CMasternode* pmn = mnodeman.Find(vinMasternode);
|
||||
|
||||
if(!pmn)
|
||||
@ -673,59 +662,55 @@ bool CMasternodePaymentWinner::IsValid(CNode* pnode, std::string& strError)
|
||||
|
||||
bool CMasternodePayments::ProcessBlock(int nBlockHeight)
|
||||
{
|
||||
// DETERMINE IF WE SHOULD BE VOTING FOR THE NEXT PAYEE
|
||||
|
||||
if(!fMasterNode) return false;
|
||||
|
||||
int n = mnodeman.GetMasternodeRank(activeMasternode.vin, nBlockHeight-100, MIN_MNW_PEER_PROTO_VERSION);
|
||||
|
||||
if(n == -1)
|
||||
{
|
||||
LogPrint("mnpayments", "CMasternodePayments::ProcessBlock - Unknown Masternode\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
//reference node - hybrid mode
|
||||
if(n > MNPAYMENTS_SIGNATURES_TOTAL)
|
||||
{
|
||||
LogPrint("mnpayments", "CMasternodePayments::ProcessBlock - Masternode not in the top %d (%d)\n", MNPAYMENTS_SIGNATURES_TOTAL, n);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!IsReferenceNode(activeMasternode.vin)){
|
||||
int n = mnodeman.GetMasternodeRank(activeMasternode.vin, nBlockHeight-100, MIN_MNW_PEER_PROTO_VERSION);
|
||||
|
||||
if(n == -1)
|
||||
// LOCATE THE NEXT MASTERNODE WHICH SHOULD BE PAID
|
||||
|
||||
CMasternodePaymentWinner newWinner(activeMasternode.vin);
|
||||
{
|
||||
LogPrintf("CMasternodePayments::ProcessBlock() Start nHeight %d - vin %s. \n", nBlockHeight, activeMasternode.vin.ToString());
|
||||
|
||||
// pay to the oldest MN that still had no payment but its input is old enough and it was active long enough
|
||||
int nCount = 0;
|
||||
CMasternode *pmn = mnodeman.GetNextMasternodeInQueueForPayment(nBlockHeight, true, nCount);
|
||||
|
||||
if(pmn != NULL)
|
||||
{
|
||||
LogPrint("mnpayments", "CMasternodePayments::ProcessBlock - Unknown Masternode\n");
|
||||
return false;
|
||||
}
|
||||
LogPrintf("CMasternodePayments::ProcessBlock() Found by FindOldestNotInVec \n");
|
||||
|
||||
if(n > MNPAYMENTS_SIGNATURES_TOTAL)
|
||||
{
|
||||
LogPrint("mnpayments", "CMasternodePayments::ProcessBlock - Masternode not in the top %d (%d)\n", MNPAYMENTS_SIGNATURES_TOTAL, n);
|
||||
return false;
|
||||
newWinner.nBlockHeight = nBlockHeight;
|
||||
|
||||
CScript payee = GetScriptForDestination(pmn->pubkey.GetID());
|
||||
newWinner.AddPayee(payee);
|
||||
|
||||
CTxDestination address1;
|
||||
ExtractDestination(payee, address1);
|
||||
CBitcoinAddress address2(address1);
|
||||
|
||||
LogPrintf("CMasternodePayments::ProcessBlock() Winner payee %s nHeight %d. \n", address2.ToString(), newWinner.nBlockHeight);
|
||||
} else {
|
||||
LogPrintf("CMasternodePayments::ProcessBlock() Failed to find masternode to pay\n");
|
||||
}
|
||||
}
|
||||
|
||||
if(nBlockHeight <= nLastBlockHeight) return false;
|
||||
|
||||
CMasternodePaymentWinner newWinner(activeMasternode.vin);
|
||||
|
||||
// 12.1
|
||||
// if(budget.IsBudgetPaymentBlock(nBlockHeight)){
|
||||
// //is budget payment block -- handled by the budgeting software
|
||||
// } else {
|
||||
// LogPrintf("CMasternodePayments::ProcessBlock() Start nHeight %d - vin %s. \n", nBlockHeight, activeMasternode.vin.ToString());
|
||||
|
||||
// // pay to the oldest MN that still had no payment but its input is old enough and it was active long enough
|
||||
// int nCount = 0;
|
||||
// CMasternode *pmn = mnodeman.GetNextMasternodeInQueueForPayment(nBlockHeight, true, nCount);
|
||||
|
||||
// if(pmn != NULL)
|
||||
// {
|
||||
// LogPrintf("CMasternodePayments::ProcessBlock() Found by FindOldestNotInVec \n");
|
||||
|
||||
// newWinner.nBlockHeight = nBlockHeight;
|
||||
|
||||
// CScript payee = GetScriptForDestination(pmn->pubkey.GetID());
|
||||
// newWinner.AddPayee(payee);
|
||||
|
||||
// CTxDestination address1;
|
||||
// ExtractDestination(payee, address1);
|
||||
// CBitcoinAddress address2(address1);
|
||||
|
||||
// LogPrintf("CMasternodePayments::ProcessBlock() Winner payee %s nHeight %d. \n", address2.ToString(), newWinner.nBlockHeight);
|
||||
// } else {
|
||||
// LogPrintf("CMasternodePayments::ProcessBlock() Failed to find masternode to pay\n");
|
||||
// }
|
||||
|
||||
// }
|
||||
// SIGN MESSAGE TO NETWORK WITH OUR MASTERNODE KEYS
|
||||
|
||||
std::string errorMessage;
|
||||
CPubKey pubKeyMasternode;
|
||||
@ -745,7 +730,6 @@ bool CMasternodePayments::ProcessBlock(int nBlockHeight)
|
||||
if(AddWinningMasternode(newWinner))
|
||||
{
|
||||
newWinner.Relay();
|
||||
nLastBlockHeight = nBlockHeight;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ extern CMasternodePayments mnpayments;
|
||||
#define MNPAYMENTS_SIGNATURES_REQUIRED 6
|
||||
#define MNPAYMENTS_SIGNATURES_TOTAL 10
|
||||
|
||||
void ProcessMessageMasternodePayments(CNode* pfrom, std::string& strCommand, CDataStream& vRecv);
|
||||
void ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv);
|
||||
bool IsReferenceNode(CTxIn& vin);
|
||||
bool IsBlockPayeeValid(const CTransaction& txNew, int nBlockHeight);
|
||||
std::string GetRequiredPaymentsString(int nBlockHeight);
|
||||
@ -225,7 +225,6 @@ class CMasternodePayments
|
||||
{
|
||||
private:
|
||||
int nSyncedFromPeer;
|
||||
int nLastBlockHeight;
|
||||
// Keep track of current block index
|
||||
const CBlockIndex *pCurrentBlockIndex;
|
||||
|
||||
@ -236,7 +235,6 @@ public:
|
||||
|
||||
CMasternodePayments() {
|
||||
nSyncedFromPeer = 0;
|
||||
nLastBlockHeight = 0;
|
||||
}
|
||||
|
||||
void Clear() {
|
||||
@ -271,7 +269,7 @@ public:
|
||||
}
|
||||
|
||||
int GetMinMasternodePaymentsProto();
|
||||
void ProcessMessageMasternodePayments(CNode* pfrom, std::string& strCommand, CDataStream& vRecv);
|
||||
void ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv);
|
||||
std::string GetRequiredPaymentsString(int nBlockHeight);
|
||||
void FillBlockPayee(CMutableTransaction& txNew, CAmount nFees);
|
||||
std::string ToString() const;
|
||||
|
@ -195,10 +195,10 @@ void CMasternodeSync::ClearFulfilledRequest()
|
||||
|
||||
BOOST_FOREACH(CNode* pnode, vNodes)
|
||||
{
|
||||
pnode->ClearFulfilledRequest("getspork");
|
||||
pnode->ClearFulfilledRequest("mnsync");
|
||||
pnode->ClearFulfilledRequest("mnwsync");
|
||||
pnode->ClearFulfilledRequest("busync");
|
||||
pnode->ClearFulfilledRequest("spork-sync");
|
||||
pnode->ClearFulfilledRequest("masternode-winner-sync");
|
||||
pnode->ClearFulfilledRequest("governance-sync");
|
||||
pnode->ClearFulfilledRequest("masternode-sync");
|
||||
}
|
||||
}
|
||||
|
||||
@ -213,6 +213,7 @@ void CMasternodeSync::Process()
|
||||
int nMnCount = mnodeman.CountEnabled();
|
||||
|
||||
// RESET SYNCING INCASE OF FAILURE
|
||||
|
||||
{
|
||||
if(IsSynced()) {
|
||||
/*
|
||||
@ -272,9 +273,9 @@ void CMasternodeSync::Process()
|
||||
*/
|
||||
|
||||
// ALWAYS ASK FOR SPORKS AS WE SYNC (we skip this mode now)
|
||||
if(!pnode->HasFulfilledRequest("getspork"))
|
||||
if(!pnode->HasFulfilledRequest("spork-sync"))
|
||||
{
|
||||
pnode->FulfilledRequest("getspork");
|
||||
pnode->FulfilledRequest("spork-sync");
|
||||
pnode->PushMessage(NetMsgType::GETSPORKS); //get current network sporks
|
||||
}
|
||||
|
||||
@ -286,7 +287,8 @@ void CMasternodeSync::Process()
|
||||
|
||||
if (pnode->nVersion >= mnpayments.GetMinMasternodePaymentsProto()) {
|
||||
|
||||
// MODE : MASTERNODE_SYNC_LIST
|
||||
// SYNC MASTERNODE LIST FROM OTHER CONNECTED CLIENTS
|
||||
|
||||
if(RequestedMasternodeAssets == MASTERNODE_SYNC_LIST) {
|
||||
|
||||
// shall we move onto the next asset?
|
||||
@ -303,8 +305,8 @@ void CMasternodeSync::Process()
|
||||
|
||||
// requesting is the last thing we do (incase we needed to move to the next asset and we've requested from each peer already)
|
||||
|
||||
if(pnode->HasFulfilledRequest("mnsync")) continue;
|
||||
pnode->FulfilledRequest("mnsync");
|
||||
if(pnode->HasFulfilledRequest("masternode-sync")) continue;
|
||||
pnode->FulfilledRequest("masternode-sync");
|
||||
|
||||
//see if we've synced the masternode list
|
||||
/* note: Is this activing up? It's probably related to int CMasternodeMan::GetEstimatedMasternodes(int nBlock) */
|
||||
@ -315,7 +317,8 @@ void CMasternodeSync::Process()
|
||||
return; //this will cause each peer to get one request each six seconds for the various assets we need
|
||||
}
|
||||
|
||||
// MODE : MASTERNODE_SYNC_MNW
|
||||
// SYNC MASTERNODE WINNERS FROM OTHER CONNECTED CLIENTS
|
||||
|
||||
if(RequestedMasternodeAssets == MASTERNODE_SYNC_MNW) {
|
||||
|
||||
// Shall we move onto the next asset?
|
||||
@ -340,14 +343,52 @@ void CMasternodeSync::Process()
|
||||
|
||||
// requesting is the last thing we do (incase we needed to move to the next asset and we've requested from each peer already)
|
||||
|
||||
if(pnode->HasFulfilledRequest("mnwsync")) continue;
|
||||
pnode->FulfilledRequest("mnwsync");
|
||||
if(pnode->HasFulfilledRequest("masternode-winner-sync")) continue;
|
||||
pnode->FulfilledRequest("masternode-winner-sync");
|
||||
|
||||
int nMnCount = mnodeman.CountEnabled();
|
||||
pnode->PushMessage(NetMsgType::MNWINNERSSYNC, nMnCount); //sync payees
|
||||
RequestedMasternodeAttempt++;
|
||||
|
||||
|
||||
return; //this will cause each peer to get one request each six seconds for the various assets we need
|
||||
}
|
||||
}
|
||||
|
||||
if (pnode->nVersion >= MIN_BUDGET_PEER_PROTO_VERSION) {
|
||||
// MODE : MASTERNODE_SYNC_BUDGET
|
||||
if(RequestedMasternodeAssets == MASTERNODE_SYNC_BUDGET){
|
||||
// shall we move onto the next asset
|
||||
// if(countBudgetItemProp > 0 && countBudgetItemFin)
|
||||
// {
|
||||
// if(governance.CountProposalInventoryItems() >= (sumBudgetItemProp / countBudgetItemProp)*0.9)
|
||||
// {
|
||||
// if(governance.CountFinalizedInventoryItems() >= (sumBudgetItemFin / countBudgetItemFin)*0.9)
|
||||
// {
|
||||
// GetNextAsset();
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
//we'll start rejecting votes if we accidentally get set as synced too soon, this allows plenty of time
|
||||
if(lastBudgetItem < GetTime() - MASTERNODE_SYNC_TIMEOUT){
|
||||
GetNextAsset();
|
||||
|
||||
//try to activate our masternode if possible
|
||||
activeMasternode.ManageStatus();
|
||||
return;
|
||||
}
|
||||
|
||||
// requesting is the last thing we do, incase we needed to move to the next asset and we've requested from each peer already
|
||||
|
||||
if(pnode->HasFulfilledRequest("governance-sync")) continue;
|
||||
pnode->FulfilledRequest("governance-sync");
|
||||
|
||||
uint256 n = uint256();
|
||||
pnode->PushMessage(NetMsgType::MNGOVERNANCEVOTESYNC, n); //sync masternode votes
|
||||
RequestedMasternodeAttempt++;
|
||||
|
||||
return; //this will cause each peer to get one request each six seconds for the various assets we need
|
||||
}
|
||||
|
||||
|
@ -42,13 +42,11 @@ const char *SPORK="spork";
|
||||
const char *GETSPORKS="getsporks";
|
||||
const char *MNWINNER="mnw";
|
||||
const char *MNWINNERSSYNC="mnget";
|
||||
const char *MNSCANERROR="mn scan error"; // TODO ???
|
||||
const char *MNGOVERNANCEVOTESYNC="mnvs";
|
||||
const char *MNGOVERNANCEVOTE="mvote";
|
||||
const char *MNGOVERNANCEPROPOSAL="mprop";
|
||||
const char *MNGOVERNANCEFINAL="fbs";
|
||||
const char *MNGOVERNANCEFINALVOTE="fbvote";
|
||||
const char *MNQUORUM="mn quorum"; // TODO ???
|
||||
const char *MNANNOUNCE="mnb";
|
||||
const char *MNPING="mnp";
|
||||
const char *DSACCEPT="dsa";
|
||||
@ -74,12 +72,10 @@ static const char* ppszTypeName[] =
|
||||
NetMsgType::IXLOCKVOTE,
|
||||
NetMsgType::SPORK,
|
||||
NetMsgType::MNWINNER,
|
||||
NetMsgType::MNSCANERROR,
|
||||
NetMsgType::MNGOVERNANCEVOTE,
|
||||
NetMsgType::MNGOVERNANCEPROPOSAL,
|
||||
NetMsgType::MNGOVERNANCEFINAL,
|
||||
NetMsgType::MNGOVERNANCEFINALVOTE,
|
||||
NetMsgType::MNQUORUM,
|
||||
NetMsgType::MNANNOUNCE,
|
||||
NetMsgType::MNPING,
|
||||
NetMsgType::DSTX
|
||||
@ -118,13 +114,11 @@ const static std::string allNetMessageTypes[] = {
|
||||
NetMsgType::GETSPORKS,
|
||||
NetMsgType::MNWINNER,
|
||||
NetMsgType::MNWINNERSSYNC,
|
||||
NetMsgType::MNSCANERROR,
|
||||
NetMsgType::MNGOVERNANCEVOTESYNC,
|
||||
NetMsgType::MNGOVERNANCEVOTE,
|
||||
NetMsgType::MNGOVERNANCEPROPOSAL,
|
||||
NetMsgType::MNGOVERNANCEFINAL,
|
||||
NetMsgType::MNGOVERNANCEFINALVOTE,
|
||||
NetMsgType::MNQUORUM,
|
||||
NetMsgType::MNANNOUNCE,
|
||||
NetMsgType::MNPING,
|
||||
NetMsgType::DSACCEPT,
|
||||
|
@ -227,13 +227,11 @@ extern const char *SPORK;
|
||||
extern const char *GETSPORKS;
|
||||
extern const char *MNWINNER;
|
||||
extern const char *MNWINNERSSYNC;
|
||||
extern const char *MNSCANERROR;
|
||||
extern const char *MNGOVERNANCEVOTESYNC;
|
||||
extern const char *MNGOVERNANCEVOTE;
|
||||
extern const char *MNGOVERNANCEPROPOSAL;
|
||||
extern const char *MNGOVERNANCEFINAL;
|
||||
extern const char *MNGOVERNANCEFINALVOTE;
|
||||
extern const char *MNQUORUM;
|
||||
extern const char *MNANNOUNCE;
|
||||
extern const char *MNPING;
|
||||
extern const char *DSACCEPT;
|
||||
|
@ -38,11 +38,9 @@ int ConvertVoteSignal(std::string strVoteSignal)
|
||||
if(strVoteSignal == "funding") return 1;
|
||||
if(strVoteSignal == "valid") return 2;
|
||||
if(strVoteSignal == "delete") return 3;
|
||||
if(strVoteSignal == "clear_registers") return 4;
|
||||
if(strVoteSignal == "endorsed") return 5;
|
||||
if(strVoteSignal == "release_bounty1") return 6;
|
||||
if(strVoteSignal == "release_bounty2") return 7;
|
||||
if(strVoteSignal == "release_bounty3") return 8;
|
||||
if(strVoteSignal == "endorsed") return 4;
|
||||
|
||||
// ID FIVE THROUGH CUSTOM_START ARE TO BE USED BY GOVERNANCE ENGINE / TRIGGER SYSTEM
|
||||
|
||||
// convert custom sentinel outcomes to integer and store
|
||||
try {
|
||||
@ -59,35 +57,7 @@ int ConvertVoteSignal(std::string strVoteSignal)
|
||||
}
|
||||
|
||||
/**
|
||||
* NOTE: 12.1 - code needs to be rewritten, much of it's in the incorrect context
|
||||
*
|
||||
* Governance Object Creation and Voting
|
||||
* -------------------------------------------------------
|
||||
*
|
||||
* This code allows users to create new types of objects. To correctly use the system
|
||||
* please see the governance wiki and code-as-law implementation. Any conflicting entries will be
|
||||
* automatically downvoted and deleted, requiring resubmission to correct.
|
||||
*
|
||||
* command structure:
|
||||
*
|
||||
* For instructions on creating registers, see dashbrain
|
||||
*
|
||||
*
|
||||
* governance prepare new nTypeIn nParentID "name" epoch-start epoch-end register1 register2 register3
|
||||
* >> fee transaction hash
|
||||
*
|
||||
* governance submit fee-hash nTypeIn nParentID, "name", epoch-start, epoch-end, fee-hash, register1, register2, register3
|
||||
* >> governance object hash
|
||||
*
|
||||
* governance vote(-alias|many) type hash yes|no|abstain
|
||||
* >> success|failure
|
||||
*
|
||||
* governance list
|
||||
* >> flat data representation of the governance system
|
||||
* >> NOTE: this shouldn't be altered, we'll analyze the system outside of this project
|
||||
*
|
||||
* governance get hash
|
||||
* >> show one proposal
|
||||
* MN GOVERNANCE RPC COMMAND
|
||||
*
|
||||
*/
|
||||
|
||||
@ -359,7 +329,7 @@ UniValue mngovernance(const UniValue& params, bool fHelp)
|
||||
|
||||
uint256 hash = ParseHashV(params[1], "Proposal hash");
|
||||
|
||||
CGovernanceObject* pbudgetProposal = governance.FindProposal(hash);
|
||||
CGovernanceObject* pbudgetProposal = governance.FindGovernanceObject(hash);
|
||||
|
||||
if(pbudgetProposal == NULL)
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Unknown proposal");
|
||||
@ -402,7 +372,7 @@ UniValue mngovernance(const UniValue& params, bool fHelp)
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid vote signal. Please using one of the following: (funding|valid|delete|clear_registers|endorsed|release_bounty1|release_bounty2|release_bounty3) OR `custom sentinel code` ");
|
||||
}
|
||||
|
||||
CGovernanceObject* pbudgetProposal = governance.FindProposal(hash);
|
||||
CGovernanceObject* pbudgetProposal = governance.FindGovernanceObject(hash);
|
||||
|
||||
if(pbudgetProposal == NULL)
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Unknown governance-hash");
|
||||
|
@ -467,45 +467,46 @@ UniValue masternode(const UniValue& params, bool fHelp)
|
||||
return obj;
|
||||
}
|
||||
|
||||
/*
|
||||
Shows which masternode wins by score each block
|
||||
*/
|
||||
if (strCommand == "calcscore")
|
||||
{
|
||||
// 12.1 -- remove?
|
||||
// /*
|
||||
// Shows which masternode wins by score each block
|
||||
// */
|
||||
// if (strCommand == "calcscore")
|
||||
// {
|
||||
|
||||
int nHeight;
|
||||
{
|
||||
LOCK(cs_main);
|
||||
CBlockIndex* pindex = chainActive.Tip();
|
||||
if(!pindex) return NullUniValue;
|
||||
// int nHeight;
|
||||
// {
|
||||
// LOCK(cs_main);
|
||||
// CBlockIndex* pindex = chainActive.Tip();
|
||||
// if(!pindex) return NullUniValue;
|
||||
|
||||
nHeight = pindex->nHeight;
|
||||
}
|
||||
// nHeight = pindex->nHeight;
|
||||
// }
|
||||
|
||||
int nLast = 10;
|
||||
// int nLast = 10;
|
||||
|
||||
if (params.size() >= 2){
|
||||
nLast = atoi(params[1].get_str());
|
||||
}
|
||||
UniValue obj(UniValue::VOBJ);
|
||||
// if (params.size() >= 2){
|
||||
// nLast = atoi(params[1].get_str());
|
||||
// }
|
||||
// UniValue obj(UniValue::VOBJ);
|
||||
|
||||
std::vector<CMasternode> vMasternodes = mnodeman.GetFullMasternodeVector();
|
||||
for(int i = nHeight - nLast; i < nHeight + 20; i++){
|
||||
arith_uint256 nHigh = 0;
|
||||
CMasternode *pBestMasternode = NULL;
|
||||
BOOST_FOREACH(CMasternode& mn, vMasternodes) {
|
||||
arith_uint256 n = UintToArith256(mn.CalculateScore(1, i - 100));
|
||||
if(n > nHigh){
|
||||
nHigh = n;
|
||||
pBestMasternode = &mn;
|
||||
}
|
||||
}
|
||||
if(pBestMasternode)
|
||||
obj.push_back(Pair(strprintf("%d", i), pBestMasternode->vin.prevout.ToStringShort().c_str()));
|
||||
}
|
||||
// std::vector<CMasternode> vMasternodes = mnodeman.GetFullMasternodeVector();
|
||||
// for(int i = nHeight - nLast; i < nHeight + 20; i++){
|
||||
// arith_uint256 nHigh = 0;
|
||||
// CMasternode *pBestMasternode = NULL;
|
||||
// BOOST_FOREACH(CMasternode& mn, vMasternodes) {
|
||||
// arith_uint256 n = UintToArith256(mn.CalculateScore(1, i - 100));
|
||||
// if(n > nHigh){
|
||||
// nHigh = n;
|
||||
// pBestMasternode = &mn;
|
||||
// }
|
||||
// }
|
||||
// if(pBestMasternode)
|
||||
// obj.push_back(Pair(strprintf("%d", i), pBestMasternode->vin.prevout.ToStringShort().c_str()));
|
||||
// }
|
||||
|
||||
return obj;
|
||||
}
|
||||
// return obj;
|
||||
// }
|
||||
|
||||
return NullUniValue;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user