mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Merge master (0.70.2) into develop (0.80.0-rc2)
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
|
||||
#include <BeastConfig.h>
|
||||
#include <ripple/basics/contract.h>
|
||||
#include <ripple/beast/core/PlatformConfig.h>
|
||||
#include <ripple/beast/core/SemanticVersion.h>
|
||||
#include <ripple/protocol/BuildInfo.h>
|
||||
|
||||
@@ -33,7 +34,7 @@ char const* const versionString =
|
||||
// The build version number. You must edit this for each release
|
||||
// and follow the format described at http://semver.org/
|
||||
//
|
||||
"0.70.2"
|
||||
"0.80.0-rc2"
|
||||
|
||||
#if defined(DEBUG) || defined(SANITIZER)
|
||||
"+"
|
||||
|
||||
@@ -53,6 +53,7 @@ public:
|
||||
add (rpcACT_EXISTS, "actExists", "Account already exists.");
|
||||
add (rpcACT_MALFORMED, "actMalformed", "Account malformed.");
|
||||
add (rpcACT_NOT_FOUND, "actNotFound", "Account not found.");
|
||||
add (rpcAMENDMENT_BLOCKED, "amendmentBlocked", "Amendment blocked, need upgrade.");
|
||||
add (rpcATX_DEPRECATED, "deprecated", "Use the new API or specify a ledger range.");
|
||||
add (rpcBAD_BLOB, "badBlob", "Blob must be a non-empty hex string.");
|
||||
add (rpcBAD_FEATURE, "badFeature", "Feature unknown or invalid.");
|
||||
|
||||
@@ -18,50 +18,103 @@
|
||||
//==============================================================================
|
||||
|
||||
#include <BeastConfig.h>
|
||||
#include <ripple/protocol/digest.h>
|
||||
#include <ripple/protocol/Feature.h>
|
||||
#include <ripple/basics/contract.h>
|
||||
#include <ripple/protocol/digest.h>
|
||||
|
||||
#include <cstring>
|
||||
|
||||
namespace ripple {
|
||||
|
||||
static
|
||||
uint256
|
||||
feature (char const* s, std::size_t n)
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
constexpr char const* const detail::FeatureCollections::featureNames[];
|
||||
|
||||
detail::FeatureCollections::FeatureCollections()
|
||||
{
|
||||
sha512_half_hasher h;
|
||||
h(s, n);
|
||||
return static_cast<uint256>(h);
|
||||
features.reserve(numFeatures());
|
||||
featureToIndex.reserve(numFeatures());
|
||||
nameToFeature.reserve(numFeatures());
|
||||
|
||||
for (std::size_t i = 0; i < numFeatures(); ++i)
|
||||
{
|
||||
auto const name = featureNames[i];
|
||||
sha512_half_hasher h;
|
||||
h (name, std::strlen (name));
|
||||
auto const f = static_cast<uint256>(h);
|
||||
|
||||
features.push_back(f);
|
||||
featureToIndex[f] = i;
|
||||
nameToFeature[name] = f;
|
||||
}
|
||||
}
|
||||
|
||||
uint256
|
||||
feature (std::string const& name)
|
||||
boost::optional<uint256>
|
||||
detail::FeatureCollections::getRegisteredFeature(std::string const& name) const
|
||||
{
|
||||
return feature(name.c_str(), name.size());
|
||||
auto const i = nameToFeature.find(name);
|
||||
if (i == nameToFeature.end())
|
||||
return boost::none;
|
||||
return i->second;
|
||||
}
|
||||
|
||||
uint256
|
||||
feature (const char* name)
|
||||
size_t
|
||||
detail::FeatureCollections::featureToBitsetIndex(uint256 const& f) const
|
||||
{
|
||||
return feature(name, std::strlen(name));
|
||||
auto const i = featureToIndex.find(f);
|
||||
if (i == featureToIndex.end())
|
||||
LogicError("Invalid Feature ID");
|
||||
return i->second;
|
||||
}
|
||||
|
||||
uint256 const featureMultiSign = feature("MultiSign");
|
||||
uint256 const featureTickets = feature("Tickets");
|
||||
uint256 const featureTrustSetAuth = feature("TrustSetAuth");
|
||||
uint256 const featureFeeEscalation = feature("FeeEscalation");
|
||||
uint256 const featureOwnerPaysFee = feature("OwnerPaysFee");
|
||||
uint256 const featureCompareFlowV1V2 = feature("CompareFlowV1V2");
|
||||
uint256 const featureSHAMapV2 = feature("SHAMapV2");
|
||||
uint256 const featurePayChan = feature("PayChan");
|
||||
uint256 const featureFlow = feature("Flow");
|
||||
uint256 const featureCompareTakerFlowCross = feature("CompareTakerFlowCross");
|
||||
uint256 const featureFlowCross = feature("FlowCross");
|
||||
uint256 const featureCryptoConditions = feature("CryptoConditions");
|
||||
uint256 const featureTickSize = feature("TickSize");
|
||||
uint256 const fix1368 = feature("fix1368");
|
||||
uint256 const featureEscrow = feature("Escrow");
|
||||
uint256 const featureCryptoConditionsSuite = feature("CryptoConditionsSuite");
|
||||
uint256 const fix1373 = feature("fix1373");
|
||||
uint256 const featureEnforceInvariants = feature("EnforceInvariants");
|
||||
uint256 const&
|
||||
detail::FeatureCollections::bitsetIndexToFeature(size_t i) const
|
||||
{
|
||||
if (i >= features.size())
|
||||
LogicError("Invalid FeatureBitset index");
|
||||
return features[i];
|
||||
}
|
||||
|
||||
static detail::FeatureCollections const featureCollections;
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
boost::optional<uint256>
|
||||
getRegisteredFeature (std::string const& name)
|
||||
{
|
||||
return featureCollections.getRegisteredFeature(name);
|
||||
}
|
||||
|
||||
size_t featureToBitsetIndex(uint256 const& f)
|
||||
{
|
||||
return featureCollections.featureToBitsetIndex(f);
|
||||
}
|
||||
|
||||
uint256 bitsetIndexToFeature(size_t i)
|
||||
{
|
||||
return featureCollections.bitsetIndexToFeature(i);
|
||||
}
|
||||
|
||||
uint256 const featureMultiSign = *getRegisteredFeature("MultiSign");
|
||||
uint256 const featureTickets = *getRegisteredFeature("Tickets");
|
||||
uint256 const featureTrustSetAuth = *getRegisteredFeature("TrustSetAuth");
|
||||
uint256 const featureFeeEscalation = *getRegisteredFeature("FeeEscalation");
|
||||
uint256 const featureOwnerPaysFee = *getRegisteredFeature("OwnerPaysFee");
|
||||
uint256 const featureCompareFlowV1V2 = *getRegisteredFeature("CompareFlowV1V2");
|
||||
uint256 const featureSHAMapV2 = *getRegisteredFeature("SHAMapV2");
|
||||
uint256 const featurePayChan = *getRegisteredFeature("PayChan");
|
||||
uint256 const featureFlow = *getRegisteredFeature("Flow");
|
||||
uint256 const featureCompareTakerFlowCross = *getRegisteredFeature("CompareTakerFlowCross");
|
||||
uint256 const featureFlowCross = *getRegisteredFeature("FlowCross");
|
||||
uint256 const featureCryptoConditions = *getRegisteredFeature("CryptoConditions");
|
||||
uint256 const featureTickSize = *getRegisteredFeature("TickSize");
|
||||
uint256 const fix1368 = *getRegisteredFeature("fix1368");
|
||||
uint256 const featureEscrow = *getRegisteredFeature("Escrow");
|
||||
uint256 const featureCryptoConditionsSuite = *getRegisteredFeature("CryptoConditionsSuite");
|
||||
uint256 const fix1373 = *getRegisteredFeature("fix1373");
|
||||
uint256 const featureEnforceInvariants = *getRegisteredFeature("EnforceInvariants");
|
||||
uint256 const featureSortedDirectories = *getRegisteredFeature("SortedDirectories");
|
||||
uint256 const fix1201 = *getRegisteredFeature("fix1201");
|
||||
uint256 const fix1512 = *getRegisteredFeature("fix1512");
|
||||
|
||||
} // ripple
|
||||
|
||||
@@ -169,6 +169,7 @@ SF_U256 const sfAmendment = make::one<SF_U256::type>(&sfAmendment, STI_H
|
||||
SF_U256 const sfTicketID = make::one<SF_U256::type>(&sfTicketID, STI_HASH256, 20, "TicketID");
|
||||
SF_U256 const sfDigest = make::one<SF_U256::type>(&sfDigest, STI_HASH256, 21, "Digest");
|
||||
SF_U256 const sfPayChannel = make::one<SF_U256::type>(&sfPayChannel, STI_HASH256, 22, "Channel");
|
||||
SF_U256 const sfConsensusHash = make::one<SF_U256::type>(&sfConsensusHash, STI_HASH256, 23, "ConsensusHash");
|
||||
|
||||
// currency amount (common)
|
||||
SF_Amount const sfAmount = make::one<SF_Amount::type>(&sfAmount, STI_AMOUNT, 1, "Amount");
|
||||
|
||||
@@ -72,7 +72,7 @@ STTx::STTx (SerialIter& sit)
|
||||
{
|
||||
int length = sit.getBytesLeft ();
|
||||
|
||||
if ((length < Protocol::txMinSizeBytes) || (length > Protocol::txMaxSizeBytes))
|
||||
if ((length < txMinSizeBytes) || (length > txMaxSizeBytes))
|
||||
Throw<std::runtime_error> ("Transaction length invalid");
|
||||
|
||||
set (sit);
|
||||
|
||||
@@ -161,10 +161,11 @@ SOTemplate const& STValidation::getFormat ()
|
||||
format.push_back (SOElement (sfSigningTime, SOE_REQUIRED));
|
||||
format.push_back (SOElement (sfSigningPubKey, SOE_REQUIRED));
|
||||
format.push_back (SOElement (sfSignature, SOE_OPTIONAL));
|
||||
format.push_back (SOElement (sfConsensusHash, SOE_OPTIONAL));
|
||||
}
|
||||
};
|
||||
|
||||
static FormatHolder holder;
|
||||
static const FormatHolder holder;
|
||||
|
||||
return holder.format;
|
||||
}
|
||||
|
||||
@@ -126,7 +126,7 @@ transResults()
|
||||
{ temBAD_SIGNATURE, { "temBAD_SIGNATURE", "Malformed: Bad signature." } },
|
||||
{ temBAD_SIGNER, { "temBAD_SIGNER", "Malformed: No signer may duplicate account or other signers." } },
|
||||
{ temBAD_SRC_ACCOUNT, { "temBAD_SRC_ACCOUNT", "Malformed: Bad source account." } },
|
||||
{ temBAD_TRANSFER_RATE, { "temBAD_TRANSFER_RATE", "Malformed: Transfer rate must be >= 1.0" } },
|
||||
{ temBAD_TRANSFER_RATE, { "temBAD_TRANSFER_RATE", "Malformed: Transfer rate must be >= 1.0 and <= 2.0" } },
|
||||
{ temBAD_WEIGHT, { "temBAD_WEIGHT", "Malformed: Weight must be a positive value." } },
|
||||
{ temDST_IS_SRC, { "temDST_IS_SRC", "Destination may not be source." } },
|
||||
{ temDST_NEEDED, { "temDST_NEEDED", "Destination not specified." } },
|
||||
|
||||
Reference in New Issue
Block a user