Skip to content

Commit

Permalink
refactor: reunify transaction common fields: (XRPLF#4715)
Browse files Browse the repository at this point in the history
Make transactions and pseudo-transactions share the same commonFields
again. This regularizes the code in a nice way.

While this technically allows pseudo-transactions to have a
TicketSequence field, pseudo-transactions are only ever constructed by
code paths that don't add such a field, so this is not a transaction
processing change. It may be possible to add a separate check to ensure
TicketSequence (and other fields that don't make sense on
pseudo-transactions) are never added to pseudo-transactions, but that
should not be necessary. (TicketSequence is not the only common field
that can not and does not appear in pseudo-transactions.) Note:
TicketSequence is already documented as a common field.

Related: XRPLF#4637

Fix XRPLF#4714
  • Loading branch information
mDuo13 authored and florent-uzio committed Oct 6, 2023
1 parent 0b87ca1 commit f55fa1d
Showing 1 changed file with 19 additions and 35 deletions.
54 changes: 19 additions & 35 deletions src/ripple/protocol/impl/TxFormats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,42 +27,26 @@ namespace ripple {

TxFormats::TxFormats()
{
#pragma push_macro("PSEUDO_TXN_COMMON_FIELDS")

// clang-format off

#define PSEUDO_TXN_COMMON_FIELDS \
{sfTransactionType, soeREQUIRED}, \
{sfFlags, soeOPTIONAL}, \
{sfSourceTag, soeOPTIONAL}, \
{sfAccount, soeREQUIRED}, \
{sfSequence, soeREQUIRED}, \
{sfPreviousTxnID, soeOPTIONAL}, /* emulate027 */ \
{sfLastLedgerSequence, soeOPTIONAL}, \
{sfAccountTxnID, soeOPTIONAL}, \
{sfFee, soeREQUIRED}, \
{sfOperationLimit, soeOPTIONAL}, \
{sfMemos, soeOPTIONAL}, \
{sfSigningPubKey, soeREQUIRED}, \
{sfTxnSignature, soeOPTIONAL}, \
{sfSigners, soeOPTIONAL}, /* submit_multisigned */ \
{sfNetworkID, soeOPTIONAL}

// clang-format on

// Fields shared by all pseudo-transaction txFormats:
static const std::initializer_list<SOElement> pseudoCommonFields{
PSEUDO_TXN_COMMON_FIELDS,
};

// Fields shared by all normal transaction txFormats:
// Fields shared by all txFormats:
static const std::initializer_list<SOElement> commonFields{
PSEUDO_TXN_COMMON_FIELDS,
{sfTransactionType, soeREQUIRED},
{sfFlags, soeOPTIONAL},
{sfSourceTag, soeOPTIONAL},
{sfAccount, soeREQUIRED},
{sfSequence, soeREQUIRED},
{sfPreviousTxnID, soeOPTIONAL}, // emulate027
{sfLastLedgerSequence, soeOPTIONAL},
{sfAccountTxnID, soeOPTIONAL},
{sfFee, soeREQUIRED},
{sfOperationLimit, soeOPTIONAL},
{sfMemos, soeOPTIONAL},
{sfSigningPubKey, soeREQUIRED},
{sfTicketSequence, soeOPTIONAL},
{sfTxnSignature, soeOPTIONAL},
{sfSigners, soeOPTIONAL}, // submit_multisigned
{sfNetworkID, soeOPTIONAL},
};

#pragma pop_macro("PSEUDO_TXN_COMMON_FIELDS")

add(jss::AccountSet,
ttACCOUNT_SET,
{
Expand Down Expand Up @@ -223,7 +207,7 @@ TxFormats::TxFormats()
{sfLedgerSequence, soeREQUIRED},
{sfAmendment, soeREQUIRED},
},
pseudoCommonFields);
commonFields);

add(jss::SetFee,
ttFEE,
Expand All @@ -239,7 +223,7 @@ TxFormats::TxFormats()
{sfReserveBaseDrops, soeOPTIONAL},
{sfReserveIncrementDrops, soeOPTIONAL},
},
pseudoCommonFields);
commonFields);

add(jss::UNLModify,
ttUNL_MODIFY,
Expand All @@ -248,7 +232,7 @@ TxFormats::TxFormats()
{sfLedgerSequence, soeREQUIRED},
{sfUNLModifyValidator, soeREQUIRED},
},
pseudoCommonFields);
commonFields);

add(jss::TicketCreate,
ttTICKET_CREATE,
Expand Down

0 comments on commit f55fa1d

Please sign in to comment.