mirror of
https://github.com/XRPLF/rippled.git
synced 2026-04-29 15:37:57 +00:00
- 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`).
57 lines
1019 B
C++
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
|