mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
91 lines
3.0 KiB
C++
91 lines
3.0 KiB
C++
#ifndef RIPPLE_IFEATURES_H
|
|
#define RIPPLE_IFEATURES_H
|
|
|
|
class FeatureSet
|
|
{ // the status of all features requested in a given window
|
|
public:
|
|
uint32 mCloseTime;
|
|
int mTrustedValidations; // number of trusted validations
|
|
boost::unordered_map<uint256, int> mVotes; // yes votes by feature
|
|
|
|
FeatureSet(uint32 ct, int tv) : mCloseTime(ct), mTrustedValidations(tv) { ; }
|
|
void addVote(uint256 const& feature) { ++mVotes[feature]; }
|
|
};
|
|
|
|
class FeatureState
|
|
{
|
|
public:
|
|
bool mVetoed; // We don't want this feature enabled
|
|
bool mEnabled;
|
|
bool mSupported;
|
|
bool mDefault; // Include in genesis ledger
|
|
|
|
uint32 mFirstMajority; // First time we saw a majority (close time)
|
|
uint32 mLastMajority; // Most recent time we saw a majority (close time)
|
|
|
|
std::string mFriendlyName;
|
|
|
|
FeatureState()
|
|
: mVetoed(false), mEnabled(false), mSupported(false), mDefault(false),
|
|
mFirstMajority(0), mLastMajority(0) { ; }
|
|
|
|
void setVeto() { mVetoed = true; }
|
|
void setDefault() { mDefault = true; }
|
|
bool isDefault() { return mDefault; }
|
|
bool isSupported() { return mSupported; }
|
|
bool isVetoed() { return mVetoed; }
|
|
bool isEnabled() { return mEnabled; }
|
|
const std::string& getFiendlyName() { return mFriendlyName; }
|
|
void setFriendlyName(const std::string& n) { mFriendlyName = n; }
|
|
};
|
|
|
|
/** Feature table interface.
|
|
|
|
The feature table stores the list of enabled and potential features.
|
|
Individuals features are voted on by validators during the consensus
|
|
process.
|
|
*/
|
|
class IFeatures
|
|
{
|
|
public:
|
|
static IFeatures* New (uint32 majorityTime, int majorityFraction);
|
|
|
|
virtual ~IFeatures () { }
|
|
|
|
virtual void addInitialFeatures() = 0;
|
|
|
|
virtual FeatureState* addKnownFeature(const char *featureID, const char *friendlyName, bool veto) = 0;
|
|
virtual uint256 getFeature(const std::string& name) = 0;
|
|
|
|
virtual bool vetoFeature(uint256 const& feature) = 0;
|
|
virtual bool unVetoFeature(uint256 const& feature) = 0;
|
|
|
|
virtual bool enableFeature(uint256 const& feature) = 0;
|
|
virtual bool disableFeature(uint256 const& feature) = 0;
|
|
|
|
virtual bool isFeatureEnabled(uint256 const& feature) = 0;
|
|
virtual bool isFeatureSupported(uint256 const& feature) = 0;
|
|
|
|
virtual void setEnabledFeatures(const std::vector<uint256>& features) = 0;
|
|
virtual void setSupportedFeatures(const std::vector<uint256>& features) = 0;
|
|
|
|
// VFALCO NOTE these can't possibly be used since featureList_t was/is private.
|
|
/*
|
|
featureList_t getVetoedFeatures() = 0;
|
|
featureList_t getEnabledFeatures() = 0;
|
|
featureList_t getFeaturesToEnable(uint32 closeTime) = 0; // gets features we would vote to enable
|
|
featureList_t getDesiredFeatures() = 0; // features we support, do not veto, are not enabled
|
|
*/
|
|
|
|
virtual void reportValidations(const FeatureSet&) = 0;
|
|
|
|
virtual Json::Value getJson(int) = 0;
|
|
virtual Json::Value getJson(uint256 const& ) = 0;
|
|
|
|
virtual void doValidation(Ledger::ref lastClosedLedger, STObject& baseValidation) = 0;
|
|
virtual void doVoting(Ledger::ref lastClosedLedger, SHAMap::ref initialPosition) = 0;
|
|
|
|
};
|
|
|
|
#endif
|