This commit is contained in:
Evan Duffield 2015-05-04 02:31:31 -07:00
parent 40adfbf2c9
commit f38b8e9572
3 changed files with 53 additions and 18 deletions

View File

@ -197,6 +197,33 @@ CBudgetVote::CBudgetVote(CTxIn vinIn, std::string strProposalNameIn, int nBlockS
nTime = GetAdjustedTime();
}
CBudgetVote::CBudgetVote(CTxIn vinIn, std::string strProposalNameIn, int nPaymentCount, CScript addressIn, CAmount nAmountIn, int nVoteIn)
{
vin = vinIn;
strProposalName = strProposalNameIn;
CBlockIndex* pindexPrev = chainActive.Tip();
if(pindexPrev != NULL)
{
//calculate beginning of payment cycle
nBlockStart = (pindexPrev->nHeight-(pindexPrev->nHeight % PAYMENT_CYCLE_BLOCKS));
//calculate the end of the cycle for this vote
nBlockEnd = nBlockStart + (PAYMENT_CYCLE_BLOCKS*nPaymentCount);
// These numbers don't require being all the same across the network due to the way
// they are sampled from the votes.
} else {
nBlockStart = 0;
nBlockEnd = 0;
}
address = addressIn;
nAmount = nAmountIn;
nVote = nVoteIn;
nTime = GetAdjustedTime();
}
bool CBudgetVote::Sign(CKey& keyMasternode, CPubKey& pubKeyMasternode)
{
// Choose coins to use

View File

@ -25,6 +25,9 @@ class CBudgetVote;
#define VOTE_YES 1
#define VOTE_NO 2
//Amount of blocks in a months period of time (using 2.6 minutes per)
#define PAYMENT_CYCLE_BLOCKS 16615
extern CBudgetManager budget;
void DumpBudgets();
@ -174,6 +177,7 @@ public:
CBudgetVote();
CBudgetVote(CTxIn vinIn, std::string strProposalNameIn, int nBlockStartIn, int nBlockEndIn, CScript addressIn, CAmount nAmountIn, int nVoteIn);
CBudgetVote(CTxIn vinIn, std::string strProposalNameIn, int nPaymentCount, CScript addressIn, CAmount nAmountIn, int nVoteIn);
bool Sign(CKey& keyCollateralAddress, CPubKey& pubKeyMasternode);
bool SignatureValid();

View File

@ -39,24 +39,26 @@ Value mnbudget(const Array& params, bool fHelp)
if(strCommand == "vote-many")
{
/* std::vector<CMasternodeConfig::CMasternodeEntry> mnEntries;
std::vector<CMasternodeConfig::CMasternodeEntry> mnEntries;
mnEntries = masternodeConfig.getEntries();
if (params.size() != 5)
throw runtime_error("Correct usage of vote-many is 'mnbudget vote-many PROPOSAL-NAME BLOCKSTART BLOCKEND XADDRESS AMOUNT YEA|NAY'");
throw runtime_error("Correct usage of vote-many is 'mnbudget vote-many PROPOSAL-NAME PAYMENT_COUNT DASH_ADDRESS USD_AMOUNT YES|NO|ABSTAIN'");
std::string strProposalName = params[1].get_str();
if(strProposalName.size() > 20)
return "Invalid proposal name, limit of 20 characters.";
int nBlockStart = params[2].get_int();
int nBlockEnd = params[3].get_int();
CBitcoinAddress address(params[4].get_str());
int nPaymentCount = params[2].get_int();
CBitcoinAddress address(params[3].get_str());
if (!address.IsValid())
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Dash address");
CAmount nAmount = AmountFromValue(params[5]);
std::string strVote = params[6].get_str().c_str();
// Parse Dash address
CScript scriptPubKey = GetScriptForDestination(address.Get());
CAmount nAmount = AmountFromValue(params[4]);
std::string strVote = params[5].get_str().c_str();
if(strVote != "yes" && strVote != "no") return "You can only vote 'yes' or 'no'";
int nVote = VOTE_ABSTAIN;
@ -95,7 +97,7 @@ Value mnbudget(const Array& params, bool fHelp)
if(!darkSendSigner.SetKey(strMasterNodePrivKey, errorMessage, keyMasternode, pubKeyMasternode))
return(" Error upon calling SetKey");
CBudgetVote vote(pmn->vin, strProposalName, nBlockStart, nBlockEnd, address, nAmount, nVote);
CBudgetVote vote(pmn->vin, strProposalName, nPaymentCount, scriptPubKey, nAmount, nVote);
if(!vote.Sign(keyMasternode, pubKeyMasternode)){
return "Failure to sign.";
}
@ -104,30 +106,32 @@ Value mnbudget(const Array& params, bool fHelp)
vote.Relay();
}
return("Voted successfully " + boost::lexical_cast<std::string>(success) + " time(s) and failed " + boost::lexical_cast<std::string>(failed) + " time(s).");*/
return("Voted successfully " + boost::lexical_cast<std::string>(success) + " time(s) and failed " + boost::lexical_cast<std::string>(failed) + " time(s).");
}
if(strCommand == "vote")
{
/* std::vector<CMasternodeConfig::CMasternodeEntry> mnEntries;
std::vector<CMasternodeConfig::CMasternodeEntry> mnEntries;
mnEntries = masternodeConfig.getEntries();
if (params.size() != 5)
throw runtime_error("Correct usage of vote-many is 'mnbudget vote PROPOSAL-NAME BLOCKSTART BLOCKEND XADDRESS AMOUNT YEA|NAY'");
throw runtime_error("Correct usage of vote-many is 'mnbudget vote PROPOSAL-NAME PAYMENT_COUNT DASH_ADDRESS USD_AMOUNT YES|NO|ABSTAIN'");
std::string strProposalName = params[1].get_str();
if(strProposalName.size() > 20)
return "Invalid proposal name, limit of 20 characters.";
int nBlockStart = params[2].get_int();
int nBlockEnd = params[3].get_int();
CBitcoinAddress address(params[4].get_str());
int nPaymentCount = params[2].get_int();
CBitcoinAddress address(params[3].get_str());
if (!address.IsValid())
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Dash address");
CAmount nAmount = AmountFromValue(params[5]);
std::string strVote = params[6].get_str().c_str();
// Parse Dash address
CScript scriptPubKey = GetScriptForDestination(address.Get());
CAmount nAmount = AmountFromValue(params[4]);
std::string strVote = params[5].get_str().c_str();
if(strVote != "yes" && strVote != "no") return "You can only vote 'yes' or 'no'";
int nVote = VOTE_ABSTAIN;
@ -141,12 +145,12 @@ Value mnbudget(const Array& params, bool fHelp)
if(!darkSendSigner.SetKey(strMasterNodePrivKey, errorMessage, keyMasternode, pubKeyMasternode))
return(" Error upon calling SetKey");
CBudgetVote vote(activeMasternode.vin, strProposalName, nBlockStart, nBlockEnd, address, nAmount, nVote);
CBudgetVote vote(activeMasternode.vin, strProposalName, nPaymentCount, scriptPubKey, nAmount, nVote);
if(!vote.Sign(keyMasternode, pubKeyMasternode)){
return "Failure to sign.";
}
vote.Relay();*/
vote.Relay();
}