From f6cae214ea672bc7333beaed5a447d6caca6825f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 3 Oct 2025 11:26:51 -0400 Subject: [PATCH 01/13] simplify TxMeta setting of additional fields --- include/xrpl/protocol/TxMeta.h | 10 ++++++++++ src/libxrpl/protocol/TxMeta.cpp | 12 ++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/include/xrpl/protocol/TxMeta.h b/include/xrpl/protocol/TxMeta.h index 02fde2ffe53..410c3e7b464 100644 --- a/include/xrpl/protocol/TxMeta.h +++ b/include/xrpl/protocol/TxMeta.h @@ -112,6 +112,16 @@ class TxMeta return (mNodes); } + void + setAdditionalFields(STObject const& obj) + { + if (obj.isFieldPresent(sfDeliveredAmount)) + setDeliveredAmount(obj.getFieldAmount(sfDeliveredAmount)); + + if (obj.isFieldPresent(sfParentBatchID)) + setParentBatchId(obj.getFieldH256(sfParentBatchID)); + } + void setDeliveredAmount(STAmount const& delivered) { diff --git a/src/libxrpl/protocol/TxMeta.cpp b/src/libxrpl/protocol/TxMeta.cpp index 2343a6a7949..f910202a185 100644 --- a/src/libxrpl/protocol/TxMeta.cpp +++ b/src/libxrpl/protocol/TxMeta.cpp @@ -54,11 +54,7 @@ TxMeta::TxMeta( mIndex = obj.getFieldU32(sfTransactionIndex); mNodes = *dynamic_cast(&obj.getField(sfAffectedNodes)); - if (obj.isFieldPresent(sfDeliveredAmount)) - setDeliveredAmount(obj.getFieldAmount(sfDeliveredAmount)); - - if (obj.isFieldPresent(sfParentBatchID)) - setParentBatchId(obj.getFieldH256(sfParentBatchID)); + setAdditionalFields(obj); } TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, STObject const& obj) @@ -77,11 +73,7 @@ TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, STObject const& obj) if (affectedNodes) mNodes = *affectedNodes; - if (obj.isFieldPresent(sfDeliveredAmount)) - setDeliveredAmount(obj.getFieldAmount(sfDeliveredAmount)); - - if (obj.isFieldPresent(sfParentBatchID)) - setParentBatchId(obj.getFieldH256(sfParentBatchID)); + setAdditionalFields(obj); } TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, Blob const& vec) From f68b096b4af601de7f199d1cc23cf614046e6c42 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 3 Oct 2025 11:32:13 -0400 Subject: [PATCH 02/13] remove unused constructor --- include/xrpl/protocol/TxMeta.h | 1 - src/libxrpl/protocol/TxMeta.cpp | 8 -------- 2 files changed, 9 deletions(-) diff --git a/include/xrpl/protocol/TxMeta.h b/include/xrpl/protocol/TxMeta.h index 410c3e7b464..43bdedaa26f 100644 --- a/include/xrpl/protocol/TxMeta.h +++ b/include/xrpl/protocol/TxMeta.h @@ -51,7 +51,6 @@ class TxMeta std::uint32_t ledger, std::optional parentBatchId = std::nullopt); TxMeta(uint256 const& txID, std::uint32_t ledger, Blob const&); - TxMeta(uint256 const& txID, std::uint32_t ledger, std::string const&); TxMeta(uint256 const& txID, std::uint32_t ledger, STObject const&); uint256 const& diff --git a/src/libxrpl/protocol/TxMeta.cpp b/src/libxrpl/protocol/TxMeta.cpp index f910202a185..3701b6fe051 100644 --- a/src/libxrpl/protocol/TxMeta.cpp +++ b/src/libxrpl/protocol/TxMeta.cpp @@ -81,14 +81,6 @@ TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, Blob const& vec) { } -TxMeta::TxMeta( - uint256 const& txid, - std::uint32_t ledger, - std::string const& data) - : TxMeta(txid, ledger, data, CtorHelper()) -{ -} - TxMeta::TxMeta( uint256 const& transactionID, std::uint32_t ledger, From 35f871013aab2d4e10b3fdaac70f3f81eab59a27 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 13 Oct 2025 15:26:24 -0400 Subject: [PATCH 03/13] remove hungarian naming --- include/xrpl/protocol/TxMeta.h | 44 ++++++++++----------- src/libxrpl/protocol/TxMeta.cpp | 68 ++++++++++++++++----------------- 2 files changed, 56 insertions(+), 56 deletions(-) diff --git a/include/xrpl/protocol/TxMeta.h b/include/xrpl/protocol/TxMeta.h index 43bdedaa26f..149d0580365 100644 --- a/include/xrpl/protocol/TxMeta.h +++ b/include/xrpl/protocol/TxMeta.h @@ -49,34 +49,34 @@ class TxMeta TxMeta( uint256 const& transactionID, std::uint32_t ledger, - std::optional parentBatchId = std::nullopt); + std::optional parentBatchID = std::nullopt); TxMeta(uint256 const& txID, std::uint32_t ledger, Blob const&); TxMeta(uint256 const& txID, std::uint32_t ledger, STObject const&); uint256 const& getTxID() const { - return mTransactionID; + return transactionID; } std::uint32_t getLgrSeq() const { - return mLedger; + return ledgerSqn; } int getResult() const { - return mResult; + return result; } TER getResultTER() const { - return TER::fromInt(mResult); + return TER::fromInt(result); } std::uint32_t getIndex() const { - return mIndex; + return index; } void @@ -103,12 +103,12 @@ class TxMeta STArray& getNodes() { - return (mNodes); + return (nodes); } STArray const& getNodes() const { - return (mNodes); + return (nodes); } void @@ -124,7 +124,7 @@ class TxMeta void setDeliveredAmount(STAmount const& delivered) { - mDelivered = delivered; + deliveredAmount = delivered; } STAmount @@ -133,19 +133,19 @@ class TxMeta XRPL_ASSERT( hasDeliveredAmount(), "ripple::TxMeta::getDeliveredAmount : non-null delivered amount"); - return *mDelivered; + return *deliveredAmount; } bool hasDeliveredAmount() const { - return static_cast(mDelivered); + return static_cast(deliveredAmount); } void - setParentBatchId(uint256 const& parentBatchId) + setParentBatchId(uint256 const& parentBatchID) { - mParentBatchId = parentBatchId; + parentBatchID = parentBatchID; } uint256 @@ -154,25 +154,25 @@ class TxMeta XRPL_ASSERT( hasParentBatchId(), "ripple::TxMeta::getParentBatchId : non-null batch id"); - return *mParentBatchId; + return *parentBatchID; } bool hasParentBatchId() const { - return static_cast(mParentBatchId); + return static_cast(parentBatchID); } private: - uint256 mTransactionID; - std::uint32_t mLedger; - std::uint32_t mIndex; - int mResult; + uint256 transactionID; + std::uint32_t ledgerSqn; + std::uint32_t index; + int result; - std::optional mDelivered; - std::optional mParentBatchId; + std::optional deliveredAmount; + std::optional parentBatchID; - STArray mNodes; + STArray nodes; }; } // namespace ripple diff --git a/src/libxrpl/protocol/TxMeta.cpp b/src/libxrpl/protocol/TxMeta.cpp index 3ecf3c89798..903be91a396 100644 --- a/src/libxrpl/protocol/TxMeta.cpp +++ b/src/libxrpl/protocol/TxMeta.cpp @@ -45,25 +45,25 @@ TxMeta::TxMeta( std::uint32_t ledger, T const& data, CtorHelper) - : mTransactionID(txid), mLedger(ledger), mNodes(sfAffectedNodes, 32) + : transactionID(txid), ledgerSqn(ledger), nodes(sfAffectedNodes, 32) { SerialIter sit(makeSlice(data)); STObject obj(sit, sfMetadata); - mResult = obj.getFieldU8(sfTransactionResult); - mIndex = obj.getFieldU32(sfTransactionIndex); - mNodes = *dynamic_cast(&obj.getField(sfAffectedNodes)); + result = obj.getFieldU8(sfTransactionResult); + index = obj.getFieldU32(sfTransactionIndex); + nodes = *dynamic_cast(&obj.getField(sfAffectedNodes)); setAdditionalFields(obj); } TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, STObject const& obj) - : mTransactionID(txid) - , mLedger(ledger) - , mNodes(obj.getFieldArray(sfAffectedNodes)) + : transactionID(txid) + , ledgerSqn(ledger) + , nodes(obj.getFieldArray(sfAffectedNodes)) { - mResult = obj.getFieldU8(sfTransactionResult); - mIndex = obj.getFieldU32(sfTransactionIndex); + result = obj.getFieldU8(sfTransactionResult); + index = obj.getFieldU32(sfTransactionIndex); auto affectedNodes = dynamic_cast(obj.peekAtPField(sfAffectedNodes)); @@ -71,7 +71,7 @@ TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, STObject const& obj) affectedNodes, "ripple::TxMeta::TxMeta(STObject) : type cast succeeded"); if (affectedNodes) - mNodes = *affectedNodes; + nodes = *affectedNodes; setAdditionalFields(obj); } @@ -85,14 +85,14 @@ TxMeta::TxMeta( uint256 const& transactionID, std::uint32_t ledger, std::optional parentBatchId) - : mTransactionID(transactionID) - , mLedger(ledger) - , mIndex(static_cast(-1)) - , mResult(255) - , mParentBatchId(parentBatchId) - , mNodes(sfAffectedNodes) + : transactionID(transactionID) + , ledgerSqn(ledger) + , index(static_cast(-1)) + , result(255) + , parentBatchID(parentBatchId) + , nodes(sfAffectedNodes) { - mNodes.reserve(32); + nodes.reserve(32); } void @@ -102,7 +102,7 @@ TxMeta::setAffectedNode( std::uint16_t nodeType) { // make sure the node exists and force its type - for (auto& n : mNodes) + for (auto& n : nodes) { if (n.getFieldH256(sfLedgerIndex) == node) { @@ -112,8 +112,8 @@ TxMeta::setAffectedNode( } } - mNodes.push_back(STObject(type)); - STObject& obj = mNodes.back(); + nodes.push_back(STObject(type)); + STObject& obj = nodes.back(); XRPL_ASSERT( obj.getFName() == type, @@ -130,7 +130,7 @@ TxMeta::getAffectedAccounts() const // This code should match the behavior of the JS method: // Meta#getAffectedAccounts - for (auto const& it : mNodes) + for (auto const& it : nodes) { int index = it.getFieldIndex( (it.getFName() == sfCreatedNode) ? sfNewFields : sfFinalFields); @@ -197,13 +197,13 @@ STObject& TxMeta::getAffectedNode(SLE::ref node, SField const& type) { uint256 index = node->key(); - for (auto& n : mNodes) + for (auto& n : nodes) { if (n.getFieldH256(sfLedgerIndex) == index) return n; } - mNodes.push_back(STObject(type)); - STObject& obj = mNodes.back(); + nodes.push_back(STObject(type)); + STObject& obj = nodes.back(); XRPL_ASSERT( obj.getFName() == type, @@ -217,7 +217,7 @@ TxMeta::getAffectedNode(SLE::ref node, SField const& type) STObject& TxMeta::getAffectedNode(uint256 const& node) { - for (auto& n : mNodes) + for (auto& n : nodes) { if (n.getFieldH256(sfLedgerIndex) == node) return n; @@ -225,7 +225,7 @@ TxMeta::getAffectedNode(uint256 const& node) // LCOV_EXCL_START UNREACHABLE("ripple::TxMeta::getAffectedNode(uint256) : node not found"); Throw("Affected node not found"); - return *(mNodes.begin()); // Silence compiler warning. + return *(nodes.begin()); // Silence compiler warning. // LCOV_EXCL_STOP } @@ -233,10 +233,10 @@ STObject TxMeta::getAsObject() const { STObject metaData(sfTransactionMetaData); - XRPL_ASSERT(mResult != 255, "ripple::TxMeta::getAsObject : result is set"); - metaData.setFieldU8(sfTransactionResult, mResult); - metaData.setFieldU32(sfTransactionIndex, mIndex); - metaData.emplace_back(mNodes); + XRPL_ASSERT(result != 255, "ripple::TxMeta::getAsObject : result is set"); + metaData.setFieldU8(sfTransactionResult, result); + metaData.setFieldU32(sfTransactionIndex, index); + metaData.emplace_back(nodes); if (hasDeliveredAmount()) metaData.setFieldAmount(sfDeliveredAmount, getDeliveredAmount()); @@ -249,13 +249,13 @@ TxMeta::getAsObject() const void TxMeta::addRaw(Serializer& s, TER result, std::uint32_t index) { - mResult = TERtoInt(result); - mIndex = index; + result = TERtoInt(result); + index = index; XRPL_ASSERT( - (mResult == 0) || ((mResult > 100) && (mResult <= 255)), + (result == 0) || ((result > 100) && (result <= 255)), "ripple::TxMeta::addRaw : valid TER input"); - mNodes.sort([](STObject const& o1, STObject const& o2) { + nodes.sort([](STObject const& o1, STObject const& o2) { return o1.getFieldH256(sfLedgerIndex) < o2.getFieldH256(sfLedgerIndex); }); From df20ab0c8c23128e3c6ba65a5ef26d975a157718 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 13 Oct 2025 15:27:15 -0400 Subject: [PATCH 04/13] has_value --- include/xrpl/protocol/TxMeta.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/xrpl/protocol/TxMeta.h b/include/xrpl/protocol/TxMeta.h index 149d0580365..4db9fa8335c 100644 --- a/include/xrpl/protocol/TxMeta.h +++ b/include/xrpl/protocol/TxMeta.h @@ -139,7 +139,7 @@ class TxMeta bool hasDeliveredAmount() const { - return static_cast(deliveredAmount); + return deliveredAmount.has_value(); } void @@ -160,7 +160,7 @@ class TxMeta bool hasParentBatchId() const { - return static_cast(parentBatchID); + return parentBatchID.has_value(); } private: From e64c89f41496a1eb0bfda7f4866c693213059061 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 13 Oct 2025 15:31:08 -0400 Subject: [PATCH 05/13] simplify helper functions --- include/xrpl/protocol/TxMeta.h | 31 ++----------------------------- src/libxrpl/protocol/TxMeta.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 33 deletions(-) diff --git a/include/xrpl/protocol/TxMeta.h b/include/xrpl/protocol/TxMeta.h index 4db9fa8335c..ada75ce9f03 100644 --- a/include/xrpl/protocol/TxMeta.h +++ b/include/xrpl/protocol/TxMeta.h @@ -115,16 +115,10 @@ class TxMeta setAdditionalFields(STObject const& obj) { if (obj.isFieldPresent(sfDeliveredAmount)) - setDeliveredAmount(obj.getFieldAmount(sfDeliveredAmount)); + deliveredAmount = obj.getFieldAmount(sfDeliveredAmount); if (obj.isFieldPresent(sfParentBatchID)) - setParentBatchId(obj.getFieldH256(sfParentBatchID)); - } - - void - setDeliveredAmount(STAmount const& delivered) - { - deliveredAmount = delivered; + parentBatchID = obj.getFieldH256(sfParentBatchID); } STAmount @@ -142,27 +136,6 @@ class TxMeta return deliveredAmount.has_value(); } - void - setParentBatchId(uint256 const& parentBatchID) - { - parentBatchID = parentBatchID; - } - - uint256 - getParentBatchId() const - { - XRPL_ASSERT( - hasParentBatchId(), - "ripple::TxMeta::getParentBatchId : non-null batch id"); - return *parentBatchID; - } - - bool - hasParentBatchId() const - { - return parentBatchID.has_value(); - } - private: uint256 transactionID; std::uint32_t ledgerSqn; diff --git a/src/libxrpl/protocol/TxMeta.cpp b/src/libxrpl/protocol/TxMeta.cpp index 903be91a396..1e214e3de26 100644 --- a/src/libxrpl/protocol/TxMeta.cpp +++ b/src/libxrpl/protocol/TxMeta.cpp @@ -237,11 +237,11 @@ TxMeta::getAsObject() const metaData.setFieldU8(sfTransactionResult, result); metaData.setFieldU32(sfTransactionIndex, index); metaData.emplace_back(nodes); - if (hasDeliveredAmount()) - metaData.setFieldAmount(sfDeliveredAmount, getDeliveredAmount()); + if (deliveredAmount.has_value()) + metaData.setFieldAmount(sfDeliveredAmount, *deliveredAmount); - if (hasParentBatchId()) - metaData.setFieldH256(sfParentBatchID, getParentBatchId()); + if (parentBatchID.has_value()) + metaData.setFieldH256(sfParentBatchID, *parentBatchID); return metaData; } From 6dc6c3bc7dd4a24a13489656c39aa27b920b276d Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 13 Oct 2025 15:32:09 -0400 Subject: [PATCH 06/13] remove hasDeliveredAmount too --- include/xrpl/protocol/TxMeta.h | 13 ++----------- src/xrpld/rpc/detail/DeliveredAmount.cpp | 5 +++-- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/include/xrpl/protocol/TxMeta.h b/include/xrpl/protocol/TxMeta.h index ada75ce9f03..aea419f4aae 100644 --- a/include/xrpl/protocol/TxMeta.h +++ b/include/xrpl/protocol/TxMeta.h @@ -121,19 +121,10 @@ class TxMeta parentBatchID = obj.getFieldH256(sfParentBatchID); } - STAmount + std::optional getDeliveredAmount() const { - XRPL_ASSERT( - hasDeliveredAmount(), - "ripple::TxMeta::getDeliveredAmount : non-null delivered amount"); - return *deliveredAmount; - } - - bool - hasDeliveredAmount() const - { - return deliveredAmount.has_value(); + return deliveredAmount; } private: diff --git a/src/xrpld/rpc/detail/DeliveredAmount.cpp b/src/xrpld/rpc/detail/DeliveredAmount.cpp index 9a6d0e9dc81..1f70903ed83 100644 --- a/src/xrpld/rpc/detail/DeliveredAmount.cpp +++ b/src/xrpld/rpc/detail/DeliveredAmount.cpp @@ -50,9 +50,10 @@ getDeliveredAmount( if (!serializedTx) return {}; - if (transactionMeta.hasDeliveredAmount()) + if (auto const& deliveredAmount = transactionMeta.getDeliveredAmount(); + deliveredAmount.has_value()) { - return transactionMeta.getDeliveredAmount(); + return *deliveredAmount; } if (serializedTx->isFieldPresent(sfAmount)) From b67c3579f63591f4e56ec2d853db90a62daab239 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 13 Oct 2025 15:47:37 -0400 Subject: [PATCH 07/13] fix, cleanup --- include/xrpl/protocol/TxMeta.h | 53 ++++++++++------- src/libxrpl/ledger/ApplyStateTable.cpp | 6 +- src/libxrpl/protocol/TxMeta.cpp | 80 ++++++++++++-------------- 3 files changed, 72 insertions(+), 67 deletions(-) diff --git a/include/xrpl/protocol/TxMeta.h b/include/xrpl/protocol/TxMeta.h index aea419f4aae..e26efddb9ec 100644 --- a/include/xrpl/protocol/TxMeta.h +++ b/include/xrpl/protocol/TxMeta.h @@ -46,37 +46,34 @@ class TxMeta CtorHelper); public: - TxMeta( - uint256 const& transactionID, - std::uint32_t ledger, - std::optional parentBatchID = std::nullopt); + TxMeta(uint256 const& transactionID, std::uint32_t ledger); TxMeta(uint256 const& txID, std::uint32_t ledger, Blob const&); TxMeta(uint256 const& txID, std::uint32_t ledger, STObject const&); uint256 const& getTxID() const { - return transactionID; + return transactionID_; } std::uint32_t getLgrSeq() const { - return ledgerSqn; + return ledgerSeq_; } int getResult() const { - return result; + return result_; } TER getResultTER() const { - return TER::fromInt(result); + return TER::fromInt(result_); } std::uint32_t getIndex() const { - return index; + return index_; } void @@ -96,47 +93,59 @@ class TxMeta return getAsObject().getJson(p); } void - addRaw(Serializer&, TER, std::uint32_t index); + addRaw(Serializer&, TER, std::uint32_t index_); STObject getAsObject() const; STArray& getNodes() { - return (nodes); + return (nodes_); } STArray const& getNodes() const { - return (nodes); + return (nodes_); } void setAdditionalFields(STObject const& obj) { if (obj.isFieldPresent(sfDeliveredAmount)) - deliveredAmount = obj.getFieldAmount(sfDeliveredAmount); + deliveredAmount_ = obj.getFieldAmount(sfDeliveredAmount); if (obj.isFieldPresent(sfParentBatchID)) - parentBatchID = obj.getFieldH256(sfParentBatchID); + parentBatchID_ = obj.getFieldH256(sfParentBatchID); } std::optional getDeliveredAmount() const { - return deliveredAmount; + return deliveredAmount_; + } + + void + setDeliveredAmount(std::optional const& amount) + { + deliveredAmount_ = amount; + } + + void + setParentBatchID(std::optional const& id) + { + parentBatchID_ = id; } private: - uint256 transactionID; - std::uint32_t ledgerSqn; - std::uint32_t index; - int result; + uint256 transactionID_; + std::uint32_t ledgerSeq_; + std::uint32_t index_; + int result_; - std::optional deliveredAmount; - std::optional parentBatchID; + std::optional deliveredAmount_; + std::optional parentBatchID_; - STArray nodes; + STArray nodes_; }; } // namespace ripple diff --git a/src/libxrpl/ledger/ApplyStateTable.cpp b/src/libxrpl/ledger/ApplyStateTable.cpp index aaad056c58f..258c3556b37 100644 --- a/src/libxrpl/ledger/ApplyStateTable.cpp +++ b/src/libxrpl/ledger/ApplyStateTable.cpp @@ -126,10 +126,10 @@ ApplyStateTable::apply( std::optional metadata; if (!to.open() || isDryRun) { - TxMeta meta(tx.getTransactionID(), to.seq(), parentBatchId); + TxMeta meta(tx.getTransactionID(), to.seq()); - if (deliver) - meta.setDeliveredAmount(*deliver); + meta.setDeliveredAmount(deliver); + meta.setParentBatchID(parentBatchId); Mods newMod; for (auto& item : items_) diff --git a/src/libxrpl/protocol/TxMeta.cpp b/src/libxrpl/protocol/TxMeta.cpp index 1e214e3de26..b92b17620e1 100644 --- a/src/libxrpl/protocol/TxMeta.cpp +++ b/src/libxrpl/protocol/TxMeta.cpp @@ -45,25 +45,25 @@ TxMeta::TxMeta( std::uint32_t ledger, T const& data, CtorHelper) - : transactionID(txid), ledgerSqn(ledger), nodes(sfAffectedNodes, 32) + : transactionID_(txid), ledgerSeq_(ledger), nodes_(sfAffectedNodes, 32) { SerialIter sit(makeSlice(data)); STObject obj(sit, sfMetadata); - result = obj.getFieldU8(sfTransactionResult); - index = obj.getFieldU32(sfTransactionIndex); - nodes = *dynamic_cast(&obj.getField(sfAffectedNodes)); + result_ = obj.getFieldU8(sfTransactionResult); + index_ = obj.getFieldU32(sfTransactionIndex); + nodes_ = *dynamic_cast(&obj.getField(sfAffectedNodes)); setAdditionalFields(obj); } TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, STObject const& obj) - : transactionID(txid) - , ledgerSqn(ledger) - , nodes(obj.getFieldArray(sfAffectedNodes)) + : transactionID_(txid) + , ledgerSeq_(ledger) + , nodes_(obj.getFieldArray(sfAffectedNodes)) { - result = obj.getFieldU8(sfTransactionResult); - index = obj.getFieldU32(sfTransactionIndex); + result_ = obj.getFieldU8(sfTransactionResult); + index_ = obj.getFieldU32(sfTransactionIndex); auto affectedNodes = dynamic_cast(obj.peekAtPField(sfAffectedNodes)); @@ -71,7 +71,7 @@ TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, STObject const& obj) affectedNodes, "ripple::TxMeta::TxMeta(STObject) : type cast succeeded"); if (affectedNodes) - nodes = *affectedNodes; + nodes_ = *affectedNodes; setAdditionalFields(obj); } @@ -81,18 +81,14 @@ TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, Blob const& vec) { } -TxMeta::TxMeta( - uint256 const& transactionID, - std::uint32_t ledger, - std::optional parentBatchId) - : transactionID(transactionID) - , ledgerSqn(ledger) - , index(static_cast(-1)) - , result(255) - , parentBatchID(parentBatchId) - , nodes(sfAffectedNodes) +TxMeta::TxMeta(uint256 const& transactionID, std::uint32_t ledger) + : transactionID_(transactionID) + , ledgerSeq_(ledger) + , index_(static_cast(-1)) + , result_(255) + , nodes_(sfAffectedNodes) { - nodes.reserve(32); + nodes_.reserve(32); } void @@ -102,7 +98,7 @@ TxMeta::setAffectedNode( std::uint16_t nodeType) { // make sure the node exists and force its type - for (auto& n : nodes) + for (auto& n : nodes_) { if (n.getFieldH256(sfLedgerIndex) == node) { @@ -112,8 +108,8 @@ TxMeta::setAffectedNode( } } - nodes.push_back(STObject(type)); - STObject& obj = nodes.back(); + nodes_.push_back(STObject(type)); + STObject& obj = nodes_.back(); XRPL_ASSERT( obj.getFName() == type, @@ -130,7 +126,7 @@ TxMeta::getAffectedAccounts() const // This code should match the behavior of the JS method: // Meta#getAffectedAccounts - for (auto const& it : nodes) + for (auto const& it : nodes_) { int index = it.getFieldIndex( (it.getFName() == sfCreatedNode) ? sfNewFields : sfFinalFields); @@ -197,13 +193,13 @@ STObject& TxMeta::getAffectedNode(SLE::ref node, SField const& type) { uint256 index = node->key(); - for (auto& n : nodes) + for (auto& n : nodes_) { if (n.getFieldH256(sfLedgerIndex) == index) return n; } - nodes.push_back(STObject(type)); - STObject& obj = nodes.back(); + nodes_.push_back(STObject(type)); + STObject& obj = nodes_.back(); XRPL_ASSERT( obj.getFName() == type, @@ -217,7 +213,7 @@ TxMeta::getAffectedNode(SLE::ref node, SField const& type) STObject& TxMeta::getAffectedNode(uint256 const& node) { - for (auto& n : nodes) + for (auto& n : nodes_) { if (n.getFieldH256(sfLedgerIndex) == node) return n; @@ -225,7 +221,7 @@ TxMeta::getAffectedNode(uint256 const& node) // LCOV_EXCL_START UNREACHABLE("ripple::TxMeta::getAffectedNode(uint256) : node not found"); Throw("Affected node not found"); - return *(nodes.begin()); // Silence compiler warning. + return *(nodes_.begin()); // Silence compiler warning. // LCOV_EXCL_STOP } @@ -233,15 +229,15 @@ STObject TxMeta::getAsObject() const { STObject metaData(sfTransactionMetaData); - XRPL_ASSERT(result != 255, "ripple::TxMeta::getAsObject : result is set"); - metaData.setFieldU8(sfTransactionResult, result); - metaData.setFieldU32(sfTransactionIndex, index); - metaData.emplace_back(nodes); - if (deliveredAmount.has_value()) - metaData.setFieldAmount(sfDeliveredAmount, *deliveredAmount); + XRPL_ASSERT(result_ != 255, "ripple::TxMeta::getAsObject : result_ is set"); + metaData.setFieldU8(sfTransactionResult, result_); + metaData.setFieldU32(sfTransactionIndex, index_); + metaData.emplace_back(nodes_); + if (deliveredAmount_.has_value()) + metaData.setFieldAmount(sfDeliveredAmount, *deliveredAmount_); - if (parentBatchID.has_value()) - metaData.setFieldH256(sfParentBatchID, *parentBatchID); + if (parentBatchID_.has_value()) + metaData.setFieldH256(sfParentBatchID, *parentBatchID_); return metaData; } @@ -249,13 +245,13 @@ TxMeta::getAsObject() const void TxMeta::addRaw(Serializer& s, TER result, std::uint32_t index) { - result = TERtoInt(result); - index = index; + result_ = TERtoInt(result); + index_ = index; XRPL_ASSERT( - (result == 0) || ((result > 100) && (result <= 255)), + (result_ == 0) || ((result_ > 100) && (result_ <= 255)), "ripple::TxMeta::addRaw : valid TER input"); - nodes.sort([](STObject const& o1, STObject const& o2) { + nodes_.sort([](STObject const& o1, STObject const& o2) { return o1.getFieldH256(sfLedgerIndex) < o2.getFieldH256(sfLedgerIndex); }); From 15fdabdc20cc7de573e181ec43d14fb913f04fb3 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 13 Oct 2025 15:55:26 -0400 Subject: [PATCH 08/13] one more missed cleanup --- include/xrpl/protocol/TxMeta.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/xrpl/protocol/TxMeta.h b/include/xrpl/protocol/TxMeta.h index e26efddb9ec..89e9850b5ca 100644 --- a/include/xrpl/protocol/TxMeta.h +++ b/include/xrpl/protocol/TxMeta.h @@ -93,7 +93,7 @@ class TxMeta return getAsObject().getJson(p); } void - addRaw(Serializer&, TER, std::uint32_t index_); + addRaw(Serializer&, TER, std::uint32_t index); STObject getAsObject() const; From 7624006cb3d92b6b6c2351526fe050d06e605399 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Tue, 28 Oct 2025 15:02:30 -0400 Subject: [PATCH 09/13] respond to comments --- include/xrpl/protocol/TxMeta.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/xrpl/protocol/TxMeta.h b/include/xrpl/protocol/TxMeta.h index 89e9850b5ca..379cce5a44b 100644 --- a/include/xrpl/protocol/TxMeta.h +++ b/include/xrpl/protocol/TxMeta.h @@ -100,12 +100,12 @@ class TxMeta STArray& getNodes() { - return (nodes_); + return nodes_; } STArray const& getNodes() const { - return (nodes_); + return nodes_; } void From 0570c00b7c05b1ed4edc2148f646cf06154f8c36 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 30 Oct 2025 17:55:39 -0400 Subject: [PATCH 10/13] respond to comments --- include/xrpl/protocol/TxMeta.h | 2 +- src/libxrpl/protocol/TxMeta.cpp | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/include/xrpl/protocol/TxMeta.h b/include/xrpl/protocol/TxMeta.h index 379cce5a44b..9010c9d9e65 100644 --- a/include/xrpl/protocol/TxMeta.h +++ b/include/xrpl/protocol/TxMeta.h @@ -118,7 +118,7 @@ class TxMeta parentBatchID_ = obj.getFieldH256(sfParentBatchID); } - std::optional + std::optional const& getDeliveredAmount() const { return deliveredAmount_; diff --git a/src/libxrpl/protocol/TxMeta.cpp b/src/libxrpl/protocol/TxMeta.cpp index b92b17620e1..edc1ba7efb8 100644 --- a/src/libxrpl/protocol/TxMeta.cpp +++ b/src/libxrpl/protocol/TxMeta.cpp @@ -52,7 +52,7 @@ TxMeta::TxMeta( STObject obj(sit, sfMetadata); result_ = obj.getFieldU8(sfTransactionResult); index_ = obj.getFieldU32(sfTransactionIndex); - nodes_ = *dynamic_cast(&obj.getField(sfAffectedNodes)); + nodes_ = obj.getFieldArray(sfAffectedNodes); setAdditionalFields(obj); } @@ -84,7 +84,7 @@ TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, Blob const& vec) TxMeta::TxMeta(uint256 const& transactionID, std::uint32_t ledger) : transactionID_(transactionID) , ledgerSeq_(ledger) - , index_(static_cast(-1)) + , index_(std::numeric_limits::max()) , result_(255) , nodes_(sfAffectedNodes) { @@ -126,14 +126,15 @@ TxMeta::getAffectedAccounts() const // This code should match the behavior of the JS method: // Meta#getAffectedAccounts - for (auto const& it : nodes_) + for (auto const& node : nodes_) { - int index = it.getFieldIndex( - (it.getFName() == sfCreatedNode) ? sfNewFields : sfFinalFields); + int index = node.getFieldIndex( + (node.getFName() == sfCreatedNode) ? sfNewFields : sfFinalFields); if (index != -1) { - auto inner = dynamic_cast(&it.peekAtIndex(index)); + auto inner = + dynamic_cast(&node.peekAtIndex(index)); XRPL_ASSERT( inner, "ripple::getAffectedAccounts : STObject type cast succeeded"); From 00679c0d0d6a4f00d1b87872a9487d399b34320a Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 31 Oct 2025 10:59:50 -0400 Subject: [PATCH 11/13] respond to comment --- src/libxrpl/protocol/TxMeta.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libxrpl/protocol/TxMeta.cpp b/src/libxrpl/protocol/TxMeta.cpp index edc1ba7efb8..086fced7d1b 100644 --- a/src/libxrpl/protocol/TxMeta.cpp +++ b/src/libxrpl/protocol/TxMeta.cpp @@ -133,7 +133,7 @@ TxMeta::getAffectedAccounts() const if (index != -1) { - auto inner = + auto const* inner = dynamic_cast(&node.peekAtIndex(index)); XRPL_ASSERT( inner, From dc7fcac2949934d2a5479f4c013b47e264ab6b90 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 31 Oct 2025 13:52:15 -0400 Subject: [PATCH 12/13] remove CtorHelper --- include/xrpl/protocol/TxMeta.h | 10 +--------- src/libxrpl/protocol/TxMeta.cpp | 8 ++------ 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/include/xrpl/protocol/TxMeta.h b/include/xrpl/protocol/TxMeta.h index 9010c9d9e65..7bae77a838a 100644 --- a/include/xrpl/protocol/TxMeta.h +++ b/include/xrpl/protocol/TxMeta.h @@ -34,16 +34,8 @@ namespace ripple { class TxMeta { private: - struct CtorHelper - { - explicit CtorHelper() = default; - }; template - TxMeta( - uint256 const& txID, - std::uint32_t ledger, - T const& data, - CtorHelper); + TxMeta(uint256 const& txID, std::uint32_t ledger, T const& data); public: TxMeta(uint256 const& transactionID, std::uint32_t ledger); diff --git a/src/libxrpl/protocol/TxMeta.cpp b/src/libxrpl/protocol/TxMeta.cpp index 086fced7d1b..bc58422ba7f 100644 --- a/src/libxrpl/protocol/TxMeta.cpp +++ b/src/libxrpl/protocol/TxMeta.cpp @@ -40,11 +40,7 @@ namespace ripple { template -TxMeta::TxMeta( - uint256 const& txid, - std::uint32_t ledger, - T const& data, - CtorHelper) +TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, T const& data) : transactionID_(txid), ledgerSeq_(ledger), nodes_(sfAffectedNodes, 32) { SerialIter sit(makeSlice(data)); @@ -77,7 +73,7 @@ TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, STObject const& obj) } TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, Blob const& vec) - : TxMeta(txid, ledger, vec, CtorHelper()) + : TxMeta(txid, ledger, vec) { } From c8876dd008a0b49f378eb28c8c809e84bf36f13f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 31 Oct 2025 14:11:20 -0400 Subject: [PATCH 13/13] fix compile issues --- include/xrpl/protocol/TxMeta.h | 4 ---- src/libxrpl/protocol/TxMeta.cpp | 24 +++++++++--------------- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/include/xrpl/protocol/TxMeta.h b/include/xrpl/protocol/TxMeta.h index 7bae77a838a..975ade355fb 100644 --- a/include/xrpl/protocol/TxMeta.h +++ b/include/xrpl/protocol/TxMeta.h @@ -33,10 +33,6 @@ namespace ripple { class TxMeta { -private: - template - TxMeta(uint256 const& txID, std::uint32_t ledger, T const& data); - public: TxMeta(uint256 const& transactionID, std::uint32_t ledger); TxMeta(uint256 const& txID, std::uint32_t ledger, Blob const&); diff --git a/src/libxrpl/protocol/TxMeta.cpp b/src/libxrpl/protocol/TxMeta.cpp index bc58422ba7f..965a955e442 100644 --- a/src/libxrpl/protocol/TxMeta.cpp +++ b/src/libxrpl/protocol/TxMeta.cpp @@ -39,20 +39,6 @@ namespace ripple { -template -TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, T const& data) - : transactionID_(txid), ledgerSeq_(ledger), nodes_(sfAffectedNodes, 32) -{ - SerialIter sit(makeSlice(data)); - - STObject obj(sit, sfMetadata); - result_ = obj.getFieldU8(sfTransactionResult); - index_ = obj.getFieldU32(sfTransactionIndex); - nodes_ = obj.getFieldArray(sfAffectedNodes); - - setAdditionalFields(obj); -} - TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, STObject const& obj) : transactionID_(txid) , ledgerSeq_(ledger) @@ -73,8 +59,16 @@ TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, STObject const& obj) } TxMeta::TxMeta(uint256 const& txid, std::uint32_t ledger, Blob const& vec) - : TxMeta(txid, ledger, vec) + : transactionID_(txid), ledgerSeq_(ledger), nodes_(sfAffectedNodes, 32) { + SerialIter sit(makeSlice(vec)); + + STObject obj(sit, sfMetadata); + result_ = obj.getFieldU8(sfTransactionResult); + index_ = obj.getFieldU32(sfTransactionIndex); + nodes_ = obj.getFieldArray(sfAffectedNodes); + + setAdditionalFields(obj); } TxMeta::TxMeta(uint256 const& transactionID, std::uint32_t ledger)