Files
rippled/src/test/jtx/SignerUtils.h
Denis Angell 2a61aee562 Add Batch feature (XLS-56) (#5060)
- Specification: [XRPLF/XRPL-Standards 56](https://github.com/XRPLF/XRPL-Standards/blob/master/XLS-0056d-batch/README.md)
- Amendment: `Batch`
- Implements execution of multiple transactions within a single batch transaction with four execution modes: `tfAllOrNothing`, `tfOnlyOne`, `tfUntilFailure`, and `tfIndependent`.
- Enables atomic multi-party transactions where multiple accounts can participate in a single batch, with up to 8 inner transactions and 8 batch signers per batch transaction.
- Inner transactions use `tfInnerBatchTxn` flag with zero fees, no signature, and empty signing public key.
- Inner transactions are applied after the outer batch succeeds via the `applyBatchTransactions` function in apply.cpp.
- Network layer prevents relay of transactions with `tfInnerBatchTxn` flag - each peer applies inner transactions locally from the batch.
- Batch transactions are excluded from AccountDelegate permissions but inner transactions retain full delegation support.
- Metadata includes `ParentBatchID` linking inner transactions to their containing batch for traceability and auditing.
- Extended STTx with batch-specific signature verification methods and added protocol structures (`sfRawTransactions`, `sfBatchSigners`).
2025-05-23 19:53:53 +00:00

57 lines
1019 B
C++

#ifndef RIPPLE_TEST_JTX_SIGNERUTILS_H_INCLUDED
#define RIPPLE_TEST_JTX_SIGNERUTILS_H_INCLUDED
#include <test/jtx/Account.h>
#include <vector>
namespace ripple {
namespace test {
namespace jtx {
struct Reg
{
Account acct;
Account sig;
Reg(Account const& masterSig) : acct(masterSig), sig(masterSig)
{
}
Reg(Account const& acct_, Account const& regularSig)
: acct(acct_), sig(regularSig)
{
}
Reg(char const* masterSig) : acct(masterSig), sig(masterSig)
{
}
Reg(char const* acct_, char const* regularSig)
: acct(acct_), sig(regularSig)
{
}
bool
operator<(Reg const& rhs) const
{
return acct < rhs.acct;
}
};
// Utility function to sort signers
inline void
sortSigners(std::vector<Reg>& signers)
{
std::sort(
signers.begin(), signers.end(), [](Reg const& lhs, Reg const& rhs) {
return lhs.acct < rhs.acct;
});
}
} // namespace jtx
} // namespace test
} // namespace ripple
#endif