Perform Transactor checks early (RIPD-751):

Certain checks that determine if a transaction is malformed can be performed
without needing to look up accounts or access the ledger.

Perform those checks as early as possible to optimize transaction processing.
This commit is contained in:
Nik Bougalis
2015-03-15 21:01:34 -07:00
parent 45070d0e51
commit db840b5604
9 changed files with 397 additions and 289 deletions

View File

@@ -54,27 +54,30 @@ public:
}
TER doApply () override
TER preCheck () override
{
std::uint32_t const uTxFlags = mTxn.getFlags ();
if (uTxFlags & tfUniversalMask)
{
m_journal.trace <<
if (m_journal.trace) m_journal.trace <<
"Malformed transaction: Invalid flags set.";
return temINVALID_FLAG;
}
return Transactor::preCheck ();
}
TER doApply () override
{
if (mFeeDue == zero)
{
mTxnAccount->setFlag (lsfPasswordSpent);
}
if (mTxn.isFieldPresent (sfRegularKey))
{
Account uAuthKeyID = mTxn.getFieldAccount160 (sfRegularKey);
mTxnAccount->setFieldAccount (sfRegularKey, uAuthKeyID);
mTxnAccount->setFieldAccount (sfRegularKey,
mTxn.getFieldAccount160 (sfRegularKey));
}
else
{