mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Include the transaction result in the metadata.
This commit is contained in:
@@ -348,7 +348,7 @@ bool LedgerEntrySet::threadOwners(SLE::ref node, Ledger::ref ledger,
|
||||
return false;
|
||||
}
|
||||
|
||||
void LedgerEntrySet::calcRawMeta(Serializer& s)
|
||||
void LedgerEntrySet::calcRawMeta(Serializer& s, TER result)
|
||||
{ // calculate the raw meta data and return it. This must be called before the set is committed
|
||||
|
||||
// Entries modified only as a result of building the transaction metadata
|
||||
@@ -476,7 +476,7 @@ void LedgerEntrySet::calcRawMeta(Serializer& s)
|
||||
cLog(lsINFO) << "Metadata:" << mSet.getJson(0);
|
||||
#endif
|
||||
|
||||
mSet.addRaw(s);
|
||||
mSet.addRaw(s, result);
|
||||
}
|
||||
|
||||
// <-- uNodeDir: For deletion, present to make dirDelete efficient.
|
||||
|
||||
@@ -120,7 +120,7 @@ public:
|
||||
STAmount accountFunds(const uint160& uAccountID, const STAmount& saDefault);
|
||||
|
||||
Json::Value getJson(int) const;
|
||||
void calcRawMeta(Serializer&);
|
||||
void calcRawMeta(Serializer&, TER result);
|
||||
|
||||
// iterator functions
|
||||
bool isEmpty() const { return mEntries.empty(); }
|
||||
|
||||
@@ -457,7 +457,7 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa
|
||||
{
|
||||
// Transaction succeeded fully or (retries are not allowed and the transaction succeeded partially).
|
||||
Serializer m;
|
||||
mNodes.calcRawMeta(m);
|
||||
mNodes.calcRawMeta(m, terResult);
|
||||
|
||||
txnWrite();
|
||||
|
||||
|
||||
@@ -7,13 +7,18 @@
|
||||
#include <boost/foreach.hpp>
|
||||
|
||||
TransactionMetaSet::TransactionMetaSet(const uint256& txid, uint32 ledger, const std::vector<unsigned char>& vec) :
|
||||
mTransactionID(txid), mLedger(ledger), mNodes(sfTransactionMetaData)
|
||||
mTransactionID(txid), mLedger(ledger), mNodes(sfAffectedNodes)
|
||||
{
|
||||
Serializer s(vec);
|
||||
SerializerIterator sit(s);
|
||||
|
||||
std::auto_ptr<SerializedType> obj = STArray::deserialize(sit, sfTransactionMetaData);
|
||||
mNodes = * static_cast<STArray*>(obj.get());
|
||||
std::auto_ptr<SerializedType> pobj = STObject::deserialize(sit, sfAffectedNodes);
|
||||
STObject *obj = static_cast<STObject*>(pobj.get());
|
||||
if (!obj)
|
||||
throw std::runtime_error("bad metadata");
|
||||
|
||||
mResult = obj->getFieldU8(sfTransactionResult);
|
||||
mNodes = * dynamic_cast<STArray*>(&obj->getField(sfAffectedNodes));
|
||||
}
|
||||
|
||||
bool TransactionMetaSet::isNodeAffected(const uint256& node) const
|
||||
@@ -57,7 +62,7 @@ void TransactionMetaSet::init(const uint256& id, uint32 ledger)
|
||||
{
|
||||
mTransactionID = id;
|
||||
mLedger = ledger;
|
||||
mNodes = STArray(sfTransactionMetaData);
|
||||
mNodes = STArray(sfAffectedNodes);
|
||||
}
|
||||
|
||||
void TransactionMetaSet::swap(TransactionMetaSet& s)
|
||||
@@ -85,10 +90,28 @@ static bool compare(const STObject& o1, const STObject& o2)
|
||||
return o1.getFieldH256(sfLedgerIndex) < o2.getFieldH256(sfLedgerIndex);
|
||||
}
|
||||
|
||||
void TransactionMetaSet::addRaw(Serializer& s)
|
||||
STObject TransactionMetaSet::getAsObject() const
|
||||
{
|
||||
STObject metaData(sfTransactionMetaData);
|
||||
metaData.setFieldU8(sfTransactionResult, mResult);
|
||||
metaData.addObject(mNodes);
|
||||
return metaData;
|
||||
}
|
||||
|
||||
void TransactionMetaSet::addRaw(Serializer& s, TER result)
|
||||
{
|
||||
mResult = 255;
|
||||
|
||||
if (result == tesSUCCESS)
|
||||
mResult = 0;
|
||||
else if (result == tepPATH_DRY)
|
||||
mResult = 1;
|
||||
else if (result == tepPATH_PARTIAL)
|
||||
mResult = 2;
|
||||
|
||||
mNodes.sort(compare);
|
||||
mNodes.add(s);
|
||||
|
||||
getAsObject().add(s);
|
||||
}
|
||||
|
||||
// vim:ts=4
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "Serializer.h"
|
||||
#include "SerializedTypes.h"
|
||||
#include "SerializedObject.h"
|
||||
#include "TransactionErr.h"
|
||||
|
||||
class TransactionMetaSet
|
||||
{
|
||||
@@ -19,13 +20,14 @@ public:
|
||||
typedef boost::shared_ptr<TransactionMetaSet> pointer;
|
||||
|
||||
protected:
|
||||
uint256 mTransactionID;
|
||||
uint32 mLedger;
|
||||
uint256 mTransactionID;
|
||||
uint32 mLedger;
|
||||
int mResult;
|
||||
|
||||
STArray mNodes;
|
||||
|
||||
public:
|
||||
TransactionMetaSet() : mLedger(0) { ; }
|
||||
TransactionMetaSet() : mLedger(0), mResult(255) { ; }
|
||||
TransactionMetaSet(const uint256& txID, uint32 ledger) : mTransactionID(txID), mLedger(ledger) { ; }
|
||||
TransactionMetaSet(const uint256& txID, uint32 ledger, const std::vector<unsigned char>&);
|
||||
|
||||
@@ -40,8 +42,10 @@ public:
|
||||
STObject& getAffectedNode(const uint256&, SField::ref type, bool overrideType);
|
||||
const STObject& peekAffectedNode(const uint256&) const;
|
||||
|
||||
Json::Value getJson(int p) const { return mNodes.getJson(p); }
|
||||
void addRaw(Serializer&);
|
||||
Json::Value getJson(int p) const { return getAsObject().getJson(p); }
|
||||
void addRaw(Serializer&, TER);
|
||||
|
||||
STObject getAsObject() const;
|
||||
|
||||
static bool thread(STObject& node, const uint256& prevTxID, uint32 prevLgrID);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user