mirror of
https://github.com/XRPLF/rippled.git
synced 2026-04-29 15:37:57 +00:00
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`).
This commit is contained in:
@@ -465,6 +465,36 @@ class Simulate_test : public beast::unit_test::suite
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
testInvalidTransactionType()
|
||||
{
|
||||
testcase("Invalid transaction type");
|
||||
|
||||
using namespace jtx;
|
||||
|
||||
Env env(*this);
|
||||
|
||||
Account const alice{"alice"};
|
||||
Account const bob{"bob"};
|
||||
env.fund(XRP(1000000), alice, bob);
|
||||
env.close();
|
||||
|
||||
auto const batchFee = batch::calcBatchFee(env, 0, 2);
|
||||
auto const seq = env.seq(alice);
|
||||
auto jt = env.jtnofill(
|
||||
batch::outer(alice, env.seq(alice), batchFee, tfAllOrNothing),
|
||||
batch::inner(pay(alice, bob, XRP(10)), seq + 1),
|
||||
batch::inner(pay(alice, bob, XRP(10)), seq + 1));
|
||||
|
||||
jt.jv.removeMember(jss::TxnSignature);
|
||||
Json::Value params;
|
||||
params[jss::tx_json] = jt.jv;
|
||||
auto const resp = env.rpc("json", "simulate", to_string(params));
|
||||
BEAST_EXPECT(resp[jss::result][jss::error] == "notImpl");
|
||||
BEAST_EXPECT(
|
||||
resp[jss::result][jss::error_message] == "Not implemented.");
|
||||
}
|
||||
|
||||
void
|
||||
testSuccessfulTransaction()
|
||||
{
|
||||
@@ -1081,6 +1111,7 @@ public:
|
||||
{
|
||||
testParamErrors();
|
||||
testFeeError();
|
||||
testInvalidTransactionType();
|
||||
testSuccessfulTransaction();
|
||||
testTransactionNonTecFailure();
|
||||
testTransactionTecFailure();
|
||||
|
||||
Reference in New Issue
Block a user