Add DeliveredAmount to transaction metadata

This commit is contained in:
JoelKatz
2014-01-20 18:14:33 -08:00
parent 0bab6a9fec
commit e7f0b8eca6
6 changed files with 36 additions and 3 deletions

View File

@@ -592,7 +592,7 @@ void LedgerEntrySet::calcRawMeta (Serializer& s, TER result, uint32 index)
// add any new modified nodes to the modification set
typedef std::map<uint256, SLE::pointer>::value_type u256_sle_pair;
BOOST_FOREACH (u256_sle_pair & it, newMod)
entryModify (it.second);
entryModify (it.second);
mSet.addRaw (s, result, index);
WriteLog (lsTRACE, LedgerEntrySet) << "Metadata:" << mSet.getJson (0);

View File

@@ -246,6 +246,11 @@ public:
return mEntries.end ();
}
void setDeliveredAmount (STAmount const& amt)
{
mSet.setDeliveredAmount (amt);
}
private:
Ledger::pointer mLedger;
std::map<uint256, LedgerEntrySetEntry> mEntries; // cannot be unordered!

View File

@@ -204,8 +204,11 @@ TER PaymentTransactor::doApply ()
false, // Not standalone, delete unfundeds.
isSetBit (mParams, tapOPEN_LEDGER));
if (terNO_LINE == terResult)
terResult = tecPATH_DRY;
if (terNO_LINE == terResult)
terResult = tecPATH_DRY;
if ((tesSUCCESS == terResult) && (saDstAmountAct != saDstAmount))
mEngine->getNodes().setDeliveredAmount (saDstAmountAct);
}
catch (const std::exception& e)
{

View File

@@ -36,6 +36,9 @@ TransactionMetaSet::TransactionMetaSet (uint256 const& txid, uint32 ledger, Blob
mResult = obj->getFieldU8 (sfTransactionResult);
mIndex = obj->getFieldU32 (sfTransactionIndex);
mNodes = * dynamic_cast<STArray*> (&obj->getField (sfAffectedNodes));
if (obj->isFieldPresent (sfDeliveredAmount))
setDeliveredAmount (obj->getFieldAmount (sfDeliveredAmount));
}
bool TransactionMetaSet::isNodeAffected (uint256 const& node) const
@@ -177,6 +180,7 @@ void TransactionMetaSet::init (uint256 const& id, uint32 ledger)
mTransactionID = id;
mLedger = ledger;
mNodes = STArray (sfAffectedNodes, 32);
mDelivered = boost::optional <STAmount> ();
}
void TransactionMetaSet::swap (TransactionMetaSet& s)
@@ -212,6 +216,8 @@ STObject TransactionMetaSet::getAsObject () const
metaData.setFieldU8 (sfTransactionResult, mResult);
metaData.setFieldU32 (sfTransactionIndex, mIndex);
metaData.addObject (mNodes);
if (hasDeliveredAmount ())
metaData.setFieldAmount (sfDeliveredAmount, getDeliveredAmount ());
return metaData;
}

View File

@@ -86,6 +86,22 @@ public:
return (mNodes);
}
void setDeliveredAmount (STAmount const& delivered)
{
mDelivered.reset (delivered);
}
STAmount getDeliveredAmount () const
{
assert (hasDeliveredAmount ());
return *mDelivered;
}
bool hasDeliveredAmount () const
{
return mDelivered;
}
static bool thread (STObject& node, uint256 const& prevTxID, uint32 prevLgrID);
private:
@@ -94,6 +110,8 @@ private:
uint32 mIndex;
int mResult;
boost::optional <STAmount> mDelivered;
STArray mNodes;
};

View File

@@ -146,6 +146,7 @@ FIELD (SendMax, AMOUNT, 9)
// currency amount (uncommon)
FIELD (MinimumOffer, AMOUNT, 16)
FIELD (RippleEscrow, AMOUNT, 17)
FIELD (DeliveredAmount, AMOUNT, 18)
// variable length
FIELD (PublicKey, VL, 1)