
Signing and fees
4 minDifficulty Checked 2026-11-10- Inner transactions have a zero fee, an empty SigningPubKey and the tfInnerBatchTxn flag.
- Other accounts in a batch sign the whole package through BatchSigners.
- The outer fee covers twice the base fee, every inner cost and each extra signature.
Inside a Batch, the inner transactions are unsigned and carry no fee. The outer package carries the signature and pays the whole bill.
There is a reason for this. Picture Alice and Bob trading. Alice sends XRP and Bob sends a token. If Alice handed Bob a signed payment, Bob could submit her payment alone and keep his token. So inner transactions are never signed on their own. They count only as part of the package.
Signing only her own half is not enough either. Bob could change his half to send less after she signed. So every account in a multi-account batch signs the whole package: every inner transaction, the mode, and who submits it.
Fees work like a cart total. The submitter pays a small charge for the package, plus the normal fee of each item inside, plus a little for each extra signature. The fee is charged even if every inner transaction fails, the same as for transactions sent one at a time.
Each inner transaction still uses its own account's sequence number or a ticket. That keeps every inner transaction unique.
Every inner transaction must:
- Set the
tfInnerBatchTxnflag (0x40000000). - Have a
Feeof"0". - Have a
SigningPubKeyof""and noTxnSignature. - Use a non-zero
Sequenceor aTicketSequence, not both.
A standalone transaction with tfInnerBatchTxn set is rejected. Inner transactions cannot be sent with the submit method.
Single account. The outer SigningPubKey and TxnSignature authorize every inner transaction. BatchSigners is omitted.
Multiple accounts. BatchSigners holds one entry for each other account that would normally sign an inner transaction. Entries are sorted by Account, with no duplicates and no entry for the outer signer. Each entry signs with SigningPubKey and TxnSignature, or with Signers for a multi-signed account. The array holds at most 24 entries.
A batch signer signs the outer Account, its sequence, the Flags, the number of inner transactions and each inner transaction hash. Changing any of these breaks the signatures. The outer Fee is not covered, so the submitter can set it alone.
The outer Batch cannot be delegated. A delegate can still be the required signer for an inner transaction it holds permission for.
Cost. The minimum outer Fee is:
2 × base fee + inner transaction costs + 1 base fee per BatchSigners signature
With a 10-drop base fee, a single-account batch of two Payment transactions costs at least 40 drops. Inner types with special costs, such as AMMCreate or EscrowFinish, raise the total. Charging inner costs on the outer transaction lets fee escalation apply to the full cost.
Related: One package, four modes, Why Batch was replaced.
- BatchRead 2026-11-10
- Batch TransactionsRead 2026-11-10
- XLS-56: Atomic/Batch TransactionsRead 2026-11-10
- rippled source: Batch.cppRead 2026-11-10
- Permission ValuesRead 2026-11-10
