dash/src/governance-validators.h
Tim Flynn a109a611f3 Validate proposals on prepare and submit (#1488)
* Implement proposal validation

Includes commits:
  Implemented CProposalValidator

  Use CProposalValidator to check proposals at prepare and submit stages

  Modify proposal validator to support numerical data in string format

  Multiple bug fixes in governance-validators.cpp

  Fixed bug in CheckURL

  Fixed stream state check

  Increase strictness of payment address validation for compatibility with sentinel

  Improved error reporting

  Implemented "check" rpc command to validate proposals

  Fixes to RPC check command

  Fix error message

  Unit test and data files for proposal validator

  Added test cases

  Removed debugging code

* Fix name validation

* Changes to address code review comments
2017-06-26 16:56:29 +03:00

64 lines
1.3 KiB
C++

// Copyright (c) 2014-2017 The Dash Core developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef GOVERNANCE_VALIDATORS_H
#define GOVERNANCE_VALIDATORS_H
#include <string>
#include <univalue.h>
class CProposalValidator {
public:
CProposalValidator(const std::string& strDataHexIn = std::string());
void Clear();
void SetHexData(const std::string& strDataHexIn);
bool Validate();
bool ValidateJSON();
bool ValidateName();
bool ValidateStartEndEpoch();
bool ValidatePaymentAmount();
bool ValidatePaymentAddress();
bool ValidateURL();
const std::string& GetErrorMessages()
{
return strErrorMessages;
}
private:
void ParseJSONData();
bool GetDataValue(const std::string& strKey, std::string& strValue);
bool GetDataValue(const std::string& strKey, int64_t& nValue);
bool GetDataValue(const std::string& strKey, double& dValue);
static std::string StripWhitespace(const std::string& strIn);
static bool CheckURL(const std::string& strURLIn);
private:
std::string strData;
UniValue objJSON;
bool fJSONValid;
std::string strErrorMessages;
};
#endif