mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-03 17:35:51 +00:00
Finish SetFlag/ClearFlag
This commit is contained in:
@@ -24,6 +24,8 @@ bool transResultInfo (TER terCode, std::string& strToken, std::string& strHuman)
|
|||||||
{ tecNO_LINE_REDUNDANT, "tecNO_LINE_REDUNDANT", "Can't set non-existant line to default." },
|
{ tecNO_LINE_REDUNDANT, "tecNO_LINE_REDUNDANT", "Can't set non-existant line to default." },
|
||||||
{ tecPATH_DRY, "tecPATH_DRY", "Path could not send partial amount." },
|
{ tecPATH_DRY, "tecPATH_DRY", "Path could not send partial amount." },
|
||||||
{ tecPATH_PARTIAL, "tecPATH_PARTIAL", "Path could not send full amount." },
|
{ tecPATH_PARTIAL, "tecPATH_PARTIAL", "Path could not send full amount." },
|
||||||
|
{ tecMASTER_DISABLED, "tefMASTER_DISABLED", "Master key is disabled." },
|
||||||
|
{ tecNO_REGULAR_KEY, "tefNO_REGULAR_KEY", "Regular key is not set." },
|
||||||
|
|
||||||
{ tecUNFUNDED, "tecUNFUNDED", "One of _ADD, _OFFER, or _SEND. Deprecated." },
|
{ tecUNFUNDED, "tecUNFUNDED", "One of _ADD, _OFFER, or _SEND. Deprecated." },
|
||||||
{ tecUNFUNDED_ADD, "tecUNFUNDED_ADD", "Insufficient XRP balance for WalletAdd." },
|
{ tecUNFUNDED_ADD, "tecUNFUNDED_ADD", "Insufficient XRP balance for WalletAdd." },
|
||||||
@@ -47,7 +49,6 @@ bool transResultInfo (TER terCode, std::string& strToken, std::string& strHuman)
|
|||||||
{ tefPAST_SEQ, "tefPAST_SEQ", "This sequence number has already past." },
|
{ tefPAST_SEQ, "tefPAST_SEQ", "This sequence number has already past." },
|
||||||
{ tefWRONG_PRIOR, "tefWRONG_PRIOR", "This previous transaction does not match." },
|
{ tefWRONG_PRIOR, "tefWRONG_PRIOR", "This previous transaction does not match." },
|
||||||
{ tefMASTER_DISABLED, "tefMASTER_DISABLED", "Master key is disabled." },
|
{ tefMASTER_DISABLED, "tefMASTER_DISABLED", "Master key is disabled." },
|
||||||
{ tefNO_REGULAR_KEY, "tefNO_REGULAR_KEY", "Regular key is not set." },
|
|
||||||
|
|
||||||
{ telLOCAL_ERROR, "telLOCAL_ERROR", "Local failure." },
|
{ telLOCAL_ERROR, "telLOCAL_ERROR", "Local failure." },
|
||||||
{ telBAD_DOMAIN, "telBAD_DOMAIN", "Domain too long." },
|
{ telBAD_DOMAIN, "telBAD_DOMAIN", "Domain too long." },
|
||||||
|
|||||||
@@ -95,7 +95,6 @@ enum TER // aka TransactionEngineResult
|
|||||||
tefPAST_SEQ,
|
tefPAST_SEQ,
|
||||||
tefWRONG_PRIOR,
|
tefWRONG_PRIOR,
|
||||||
tefMASTER_DISABLED,
|
tefMASTER_DISABLED,
|
||||||
tefNO_REGULAR_KEY,
|
|
||||||
|
|
||||||
// -99 .. -1: R Retry (sequence too high, no funds for txn fee, originating account non-existent)
|
// -99 .. -1: R Retry (sequence too high, no funds for txn fee, originating account non-existent)
|
||||||
// Causes:
|
// Causes:
|
||||||
@@ -149,6 +148,8 @@ enum TER // aka TransactionEngineResult
|
|||||||
tecNO_LINE_REDUNDANT = 127,
|
tecNO_LINE_REDUNDANT = 127,
|
||||||
tecPATH_DRY = 128,
|
tecPATH_DRY = 128,
|
||||||
tecUNFUNDED = 129, // Deprecated, old ambiguous unfunded.
|
tecUNFUNDED = 129, // Deprecated, old ambiguous unfunded.
|
||||||
|
tecMASTER_DISABLED = 130,
|
||||||
|
tecNO_REGULAR_KEY = 131,
|
||||||
};
|
};
|
||||||
|
|
||||||
// VFALCO TODO change these to normal functions.
|
// VFALCO TODO change these to normal functions.
|
||||||
|
|||||||
@@ -37,6 +37,12 @@ const uint32 tfAccountSetMask = ~ (TxFlag::requireDestTag | tfOptionalDest
|
|||||||
| tfRequireAuth | tfOptionalAuth
|
| tfRequireAuth | tfOptionalAuth
|
||||||
| tfDisallowXRP | tfAllowXRP);
|
| tfDisallowXRP | tfAllowXRP);
|
||||||
|
|
||||||
|
// AccountSet SetFlag/ClearFlag values
|
||||||
|
const uint32 asfRequireDest = 1;
|
||||||
|
const uint32 asfRequireAuth = 2;
|
||||||
|
const uint32 asfDisallowXRP = 3;
|
||||||
|
const uint32 asfDisableMaster = 4;
|
||||||
|
|
||||||
// OfferCreate flags:
|
// OfferCreate flags:
|
||||||
const uint32 tfPassive = 0x00010000;
|
const uint32 tfPassive = 0x00010000;
|
||||||
const uint32 tfImmediateOrCancel = 0x00020000;
|
const uint32 tfImmediateOrCancel = 0x00020000;
|
||||||
|
|||||||
@@ -15,6 +15,17 @@ TER AccountSetTransactor::doApply ()
|
|||||||
const uint32 uFlagsIn = mTxnAccount->getFieldU32 (sfFlags);
|
const uint32 uFlagsIn = mTxnAccount->getFieldU32 (sfFlags);
|
||||||
uint32 uFlagsOut = uFlagsIn;
|
uint32 uFlagsOut = uFlagsIn;
|
||||||
|
|
||||||
|
const uint32 uSetFlag = mTxn.getFieldU32 (sfSetFlag);
|
||||||
|
const uint32 uClearFlag = mTxn.getFieldU32 (sfClearFlag);
|
||||||
|
|
||||||
|
// legacy AccountSet flags
|
||||||
|
bool bSetRequireDest = (uFlagsIn & TxFlag::requireDestTag) || (uSetFlag == asfRequireDest);
|
||||||
|
bool bClearRequireDest = (uFlagsIn & tfOptionalDestTag) || (uClearFlag == asfRequireDest);
|
||||||
|
bool bSetRequireAuth = (uFlagsIn & tfRequireAuth) || (uSetFlag == asfRequireAuth);
|
||||||
|
bool bClearRequireAuth = (uFlagsIn & tfOptionalAuth) || (uClearFlag == asfRequireAuth);
|
||||||
|
bool bSetDisallowXRP = (uFlagsIn & tfDisallowXRP) || (uSetFlag == asfDisallowXRP);
|
||||||
|
bool bClearDisallowXRP = (uFlagsIn & tfAllowXRP) || (uClearFlag == asfDisallowXRP);
|
||||||
|
|
||||||
if (uTxFlags & tfAccountSetMask)
|
if (uTxFlags & tfAccountSetMask)
|
||||||
{
|
{
|
||||||
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Malformed transaction: Invalid flags set.";
|
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Malformed transaction: Invalid flags set.";
|
||||||
@@ -26,14 +37,14 @@ TER AccountSetTransactor::doApply ()
|
|||||||
// RequireAuth
|
// RequireAuth
|
||||||
//
|
//
|
||||||
|
|
||||||
if ((tfRequireAuth | tfOptionalAuth) == (uTxFlags & (tfRequireAuth | tfOptionalAuth)))
|
if (bSetRequireAuth && bClearRequireAuth)
|
||||||
{
|
{
|
||||||
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Malformed transaction: Contradictory flags set.";
|
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Malformed transaction: Contradictory flags set.";
|
||||||
|
|
||||||
return temINVALID_FLAG;
|
return temINVALID_FLAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uTxFlags & tfRequireAuth) && !isSetBit (uFlagsIn, lsfRequireAuth))
|
if (bSetRequireAuth && !isSetBit (uFlagsIn, lsfRequireAuth))
|
||||||
{
|
{
|
||||||
if (mTxnAccount->getFieldU32 (sfOwnerCount))
|
if (mTxnAccount->getFieldU32 (sfOwnerCount))
|
||||||
{
|
{
|
||||||
@@ -47,7 +58,7 @@ TER AccountSetTransactor::doApply ()
|
|||||||
uFlagsOut |= lsfRequireAuth;
|
uFlagsOut |= lsfRequireAuth;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uTxFlags & tfOptionalAuth) && isSetBit (uFlagsIn, lsfRequireAuth))
|
if (bClearRequireAuth && isSetBit (uFlagsIn, lsfRequireAuth))
|
||||||
{
|
{
|
||||||
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Clear RequireAuth.";
|
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Clear RequireAuth.";
|
||||||
|
|
||||||
@@ -58,22 +69,21 @@ TER AccountSetTransactor::doApply ()
|
|||||||
// RequireDestTag
|
// RequireDestTag
|
||||||
//
|
//
|
||||||
|
|
||||||
// VFALCO TODO Make a function bool areBothFlagsSet (uint value, uint flag1, uint flag2)
|
if (bSetRequireDest && bClearRequireDest)
|
||||||
if ((TxFlag::requireDestTag | tfOptionalDestTag) == (uTxFlags & (TxFlag::requireDestTag | tfOptionalDestTag)))
|
|
||||||
{
|
{
|
||||||
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Malformed transaction: Contradictory flags set.";
|
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Malformed transaction: Contradictory flags set.";
|
||||||
|
|
||||||
return temINVALID_FLAG;
|
return temINVALID_FLAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uTxFlags & TxFlag::requireDestTag) && !isSetBit (uFlagsIn, lsfRequireDestTag))
|
if (bSetRequireDest && !isSetBit (uFlagsIn, lsfRequireDestTag))
|
||||||
{
|
{
|
||||||
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Set lsfRequireDestTag.";
|
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Set lsfRequireDestTag.";
|
||||||
|
|
||||||
uFlagsOut |= lsfRequireDestTag;
|
uFlagsOut |= lsfRequireDestTag;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uTxFlags & tfOptionalDestTag) && isSetBit (uFlagsIn, lsfRequireDestTag))
|
if (bClearRequireDest && isSetBit (uFlagsIn, lsfRequireDestTag))
|
||||||
{
|
{
|
||||||
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Clear lsfRequireDestTag.";
|
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Clear lsfRequireDestTag.";
|
||||||
|
|
||||||
@@ -84,21 +94,21 @@ TER AccountSetTransactor::doApply ()
|
|||||||
// DisallowXRP
|
// DisallowXRP
|
||||||
//
|
//
|
||||||
|
|
||||||
if ((tfDisallowXRP | tfAllowXRP) == (uTxFlags & (tfDisallowXRP | tfAllowXRP)))
|
if (bSetDisallowXRP && bClearDisallowXRP)
|
||||||
{
|
{
|
||||||
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Malformed transaction: Contradictory flags set.";
|
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Malformed transaction: Contradictory flags set.";
|
||||||
|
|
||||||
return temINVALID_FLAG;
|
return temINVALID_FLAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uTxFlags & tfDisallowXRP) && !isSetBit (uFlagsIn, lsfDisallowXRP))
|
if (bSetDisallowXRP && !isSetBit (uFlagsIn, lsfDisallowXRP))
|
||||||
{
|
{
|
||||||
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Set lsfDisallowXRP.";
|
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Set lsfDisallowXRP.";
|
||||||
|
|
||||||
uFlagsOut |= lsfDisallowXRP;
|
uFlagsOut |= lsfDisallowXRP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uTxFlags & tfAllowXRP) && isSetBit (uFlagsIn, lsfDisallowXRP))
|
if (bClearDisallowXRP && isSetBit (uFlagsIn, lsfDisallowXRP))
|
||||||
{
|
{
|
||||||
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Clear lsfDisallowXRP.";
|
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Clear lsfDisallowXRP.";
|
||||||
|
|
||||||
@@ -109,24 +119,24 @@ TER AccountSetTransactor::doApply ()
|
|||||||
// DisableMaster
|
// DisableMaster
|
||||||
//
|
//
|
||||||
|
|
||||||
if ((tfDisableMaster | tfEnableMaster) == (uTxFlags & (tfDisableMaster | tfEnableMaster)))
|
if ((uSetFlag == asfDisableMaster) && (uClearFlag == asfDisableMaster))
|
||||||
{
|
{
|
||||||
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Malformed transaction: Contradictory flags set.";
|
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Malformed transaction: Contradictory flags set.";
|
||||||
|
|
||||||
return temINVALID_FLAG;
|
return temINVALID_FLAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uTxFlags & tfDisableMaster) && !isSetBit (uFlagsIn, lsfDisableMaster))
|
if ((uSetFlag == asfDisableMaster) && !isSetBit (uFlagsIn, lsfDisableMaster))
|
||||||
{
|
{
|
||||||
if (!mTxnAccount->isFieldPresent (sfRegularKey))
|
if (!mTxnAccount->isFieldPresent (sfRegularKey))
|
||||||
return tefNO_REGULAR_KEY;
|
return tecNO_REGULAR_KEY;
|
||||||
|
|
||||||
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Set lsfDisableMaster.";
|
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Set lsfDisableMaster.";
|
||||||
|
|
||||||
uFlagsOut |= lsfDisableMaster;
|
uFlagsOut |= lsfDisableMaster;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uTxFlags & tfEnableMaster) && isSetBit (uFlagsIn, lsfDisableMaster))
|
if ((uClearFlag == asfDisableMaster) && isSetBit (uFlagsIn, lsfDisableMaster))
|
||||||
{
|
{
|
||||||
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Clear lsfDisableMaster.";
|
WriteLog (lsINFO, AccountSetTransactor) << "AccountSet: Clear lsfDisableMaster.";
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ TER RegularKeySetTransactor::doApply ()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (mTxnAccount->isFlag (lsfDisableMaster))
|
if (mTxnAccount->isFlag (lsfDisableMaster))
|
||||||
return tefMASTER_DISABLED;
|
return tecMASTER_DISABLED;
|
||||||
mTxnAccount->makeFieldAbsent (sfRegularKey);
|
mTxnAccount->makeFieldAbsent (sfRegularKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user