Skip to content

Commit cac56c3

Browse files
Merge pull request #3372 from XRPLF/batch-transactions-tutorial
Javascript: Batch transactions tutorial
2 parents 0039275 + fb33561 commit cac56c3

File tree

10 files changed

+929
-4
lines changed

10 files changed

+929
-4
lines changed

_code-samples/batch/README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Batch
22

3-
Code samples showing how to create and submit a [Batch transaction](../../docs/concepts/transactions/batch-transactions.md).
4-
Both for simple and multi account batch transactions.
3+
Code samples showing how to create and submit a [Batch transaction](https://xrpl.org/docs/concepts/transactions/batch-transactions).
4+
5+
Both for single and multi-account batch transactions.

_code-samples/batch/js/README.md

Lines changed: 301 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,301 @@
1+
# Send a Batch Transaction
2+
3+
Code samples showing how to create and submit a [Batch transaction](https://xrpl.org/docs/concepts/transactions/batch-transactions) with Javascript.
4+
5+
Both for single and multi-account batch transactions.
6+
7+
## Single Account Batch Transaction
8+
9+
Quick setup and usage:
10+
11+
```sh
12+
npm install xrpl
13+
node singleAccountBatch.js
14+
```
15+
16+
The script should output the following:
17+
18+
```sh
19+
=== Funding new wallets from faucet... ===
20+
Sender: rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim, Balance: 100 XRP
21+
Wallet1: rGx6SACvYEvX8SRrvTPD91UhBmJ16pxL94, Balance: 100 XRP
22+
Wallet2: r3qetgSfAtyCpGc4rvKNz4LX3F3urMSJJy, Balance: 100 XRP
23+
24+
=== Creating Batch transaction... ===
25+
{
26+
"TransactionType": "Batch",
27+
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
28+
"Flags": 65536,
29+
"RawTransactions": [
30+
{
31+
"RawTransaction": {
32+
"TransactionType": "Payment",
33+
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
34+
"Destination": "rGx6SACvYEvX8SRrvTPD91UhBmJ16pxL94",
35+
"Amount": "2000000",
36+
"Flags": 1073741824
37+
}
38+
},
39+
{
40+
"RawTransaction": {
41+
"TransactionType": "Payment",
42+
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
43+
"Destination": "r3qetgSfAtyCpGc4rvKNz4LX3F3urMSJJy",
44+
"Amount": "5000000",
45+
"Flags": 1073741824
46+
}
47+
}
48+
]
49+
}
50+
51+
=== Submitting Batch transaction... ===
52+
53+
Batch transaction submitted successfully!
54+
Result:
55+
{
56+
"close_time_iso": "2025-11-17T12:04:50Z",
57+
"ctid": "C013313800030002",
58+
"hash": "AE118213B0A183528418ABC5F14E3BFD6524020C5DB1C060157A0D3FDE15B900",
59+
"ledger_hash": "621183809B68A794371C5EC6522105FF04E502C48EBDC8171B80224991E33394",
60+
"ledger_index": 1257784,
61+
"meta": {
62+
"AffectedNodes": [
63+
{
64+
"ModifiedNode": {
65+
"FinalFields": {
66+
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
67+
"Balance": "99999996",
68+
"Flags": 0,
69+
"OwnerCount": 0,
70+
"Sequence": 1257779
71+
},
72+
"LedgerEntryType": "AccountRoot",
73+
"LedgerIndex": "42CC98AF0A28EDDDC7E359B5622CC5748BDE2A93E124AF5C32647ECA8F68D480",
74+
"PreviousFields": {
75+
"Balance": "100000000",
76+
"Sequence": 1257778
77+
},
78+
"PreviousTxnID": "081C42DAE12001735AC4E9A7F027636DF612DB17B4BFA2333F4DB8EA0C9D1E9F",
79+
"PreviousTxnLgrSeq": 1257778
80+
}
81+
}
82+
],
83+
"TransactionIndex": 3,
84+
"TransactionResult": "tesSUCCESS"
85+
},
86+
"tx_json": {
87+
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
88+
"Fee": "4",
89+
"Flags": 65536,
90+
"LastLedgerSequence": 1257802,
91+
"RawTransactions": [
92+
{
93+
"RawTransaction": {
94+
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
95+
"Amount": "2000000",
96+
"Destination": "rGx6SACvYEvX8SRrvTPD91UhBmJ16pxL94",
97+
"Fee": "0",
98+
"Flags": 1073741824,
99+
"Sequence": 1257779,
100+
"SigningPubKey": "",
101+
"TransactionType": "Payment"
102+
}
103+
},
104+
{
105+
"RawTransaction": {
106+
"Account": "rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim",
107+
"Amount": "5000000",
108+
"Destination": "r3qetgSfAtyCpGc4rvKNz4LX3F3urMSJJy",
109+
"Fee": "0",
110+
"Flags": 1073741824,
111+
"Sequence": 1257780,
112+
"SigningPubKey": "",
113+
"TransactionType": "Payment"
114+
}
115+
}
116+
],
117+
"Sequence": 1257778,
118+
"SigningPubKey": "ED7031CA5BA4EC745610AB495F5053F318C119E87567BE485A494773AD8ED4FBCE",
119+
"TransactionType": "Batch",
120+
"TxnSignature": "0610A277086943BC462C1A5F85BEB667B62B4BDA59525138B6014101C08297897A73D3D2D247CB37A06E1EA36267C53A51C0FDF32F3D8E974029BEDC41105B07",
121+
"ctid": "C013313800030002",
122+
"date": 816696290,
123+
"ledger_index": 1257784
124+
},
125+
"validated": true
126+
}
127+
128+
Batch transaction URL:
129+
https://devnet.xrpl.org/transactions/AE118213B0A183528418ABC5F14E3BFD6524020C5DB1C060157A0D3FDE15B900
130+
131+
=== Verifying inner transactions... ===
132+
133+
Transaction 1 hash: D18EA54D5653BBB5C87F116978822EAB7A26EDFB1D6C41910F36D7484D4890E3
134+
- Status: tesSUCCESS (Ledger 1257784)
135+
- Transaction URL: https://devnet.xrpl.org/transactions/D18EA54D5653BBB5C87F116978822EAB7A26EDFB1D6C41910F36D7484D4890E3
136+
137+
Transaction 2 hash: 5660DB400F08EE5543C54D4D65824A2142F9D5AC17294A4ABF654260F129B44E
138+
- Status: tesSUCCESS (Ledger 1257784)
139+
- Transaction URL: https://devnet.xrpl.org/transactions/5660DB400F08EE5543C54D4D65824A2142F9D5AC17294A4ABF654260F129B44E
140+
141+
=== Final balances ===
142+
Sender: rP9EsVosrmx2HyrmLgWJpJacX5ZrVVQsim, Balance: 92.999996 XRP
143+
Wallet1: rGx6SACvYEvX8SRrvTPD91UhBmJ16pxL94, Balance: 102 XRP
144+
Wallet2: r3qetgSfAtyCpGc4rvKNz4LX3F3urMSJJy, Balance: 105 XRP
145+
```
146+
147+
## Multi-Account Batch Transaction
148+
149+
```sh
150+
npm install xrpl
151+
node multiAccountBatch.js
152+
```
153+
154+
The script should output the following:
155+
156+
```sh
157+
=== Funding new wallets from faucet... ===
158+
Alice: rHpve1GL2ZXUs3NB5iU91BrXBSwb5PbBrG, Balance: 100 XRP
159+
Bob: r3ruQ92bqXwWxcR2w4cC1tW35og9h3UbBq, Balance: 100 XRP
160+
Charlie: rsi5D9bkczpbGykPxoGNBVVmFFFXGwm3QA, Balance: 100 XRP
161+
Third-party wallet: rfUpGXTzU3siTr4UovV6Wt86Vw3gQU4ttA, Balance: 100 XRP
162+
163+
=== Creating Batch transaction... ===
164+
{
165+
"TransactionType": "Batch",
166+
"Account": "rfUpGXTzU3siTr4UovV6Wt86Vw3gQU4ttA",
167+
"Flags": 65536,
168+
"RawTransactions": [
169+
{
170+
"RawTransaction": {
171+
"TransactionType": "Payment",
172+
"Account": "rsi5D9bkczpbGykPxoGNBVVmFFFXGwm3QA",
173+
"Destination": "rHpve1GL2ZXUs3NB5iU91BrXBSwb5PbBrG",
174+
"Amount": "50000000",
175+
"Flags": 1073741824
176+
}
177+
},
178+
{
179+
"RawTransaction": {
180+
"TransactionType": "Payment",
181+
"Account": "r3ruQ92bqXwWxcR2w4cC1tW35og9h3UbBq",
182+
"Destination": "rHpve1GL2ZXUs3NB5iU91BrXBSwb5PbBrG",
183+
"Amount": "50000000",
184+
"Flags": 1073741824
185+
}
186+
}
187+
]
188+
}
189+
190+
=== Submitting Batch transaction... ===
191+
192+
Batch transaction submitted successfully!
193+
Result:
194+
{
195+
"close_time_iso": "2025-11-17T12:08:31Z",
196+
"ctid": "C013317600000002",
197+
"hash": "1299D20C6B489DA5C632AE4DBE49475DBF42D9444C7E9C109CC9B8DD0FD55FEC",
198+
"ledger_hash": "E45ECF69057084CD02BA49A17E4D0C9154D33A98BB3C95A11B2EB9BE18F32C9B",
199+
"ledger_index": 1257846,
200+
"meta": {
201+
"AffectedNodes": [
202+
{
203+
"ModifiedNode": {
204+
"FinalFields": {
205+
"Account": "rfUpGXTzU3siTr4UovV6Wt86Vw3gQU4ttA",
206+
"Balance": "99999994",
207+
"Flags": 0,
208+
"OwnerCount": 0,
209+
"Sequence": 1257845
210+
},
211+
"LedgerEntryType": "AccountRoot",
212+
"LedgerIndex": "2D9E0A02007241C38A8DF679E7E62AA0B273E8B12A5430B7B9D99300424F0E1F",
213+
"PreviousFields": {
214+
"Balance": "100000000",
215+
"Sequence": 1257844
216+
},
217+
"PreviousTxnID": "3153DE8DE922538A6BE54AA8F783CAD4B848A321AFF028D3E6DD0E80C4B9C237",
218+
"PreviousTxnLgrSeq": 1257844
219+
}
220+
}
221+
],
222+
"TransactionIndex": 0,
223+
"TransactionResult": "tesSUCCESS"
224+
},
225+
"tx_json": {
226+
"Account": "rfUpGXTzU3siTr4UovV6Wt86Vw3gQU4ttA",
227+
"BatchSigners": [
228+
{
229+
"BatchSigner": {
230+
"Account": "rsi5D9bkczpbGykPxoGNBVVmFFFXGwm3QA",
231+
"SigningPubKey": "EDEB88C2868BD25BF03DB26050E16579FA6F8F9E3FF3172E0DC3DCBDA5408572EB",
232+
"TxnSignature": "9508568084596147CFDCFC18A62DC298A78AD1148BA4B0EB99BEE1CD37E5555FE3930810790D5708F9739B0E3F79772012C154CA33C2280BDD5B72473C17A607"
233+
}
234+
},
235+
{
236+
"BatchSigner": {
237+
"Account": "r3ruQ92bqXwWxcR2w4cC1tW35og9h3UbBq",
238+
"SigningPubKey": "ED82F98DA6A3FC3E88D2EE3A5469D92C7070513BEF4DEE75CAB0BDAA81E8AE378D",
239+
"TxnSignature": "A482C8747F79857530474F1677599766C0BE283CB7E2A05AACF76E61BECCA16DCE3802D2D8244FBF4546A1C0E5EB70691255E3EFD2F8AC80B55357BDAB9ACD05"
240+
}
241+
}
242+
],
243+
"Fee": "6",
244+
"Flags": 65536,
245+
"LastLedgerSequence": 1257864,
246+
"RawTransactions": [
247+
{
248+
"RawTransaction": {
249+
"Account": "rsi5D9bkczpbGykPxoGNBVVmFFFXGwm3QA",
250+
"Amount": "50000000",
251+
"Destination": "rHpve1GL2ZXUs3NB5iU91BrXBSwb5PbBrG",
252+
"Fee": "0",
253+
"Flags": 1073741824,
254+
"Sequence": 1257842,
255+
"SigningPubKey": "",
256+
"TransactionType": "Payment"
257+
}
258+
},
259+
{
260+
"RawTransaction": {
261+
"Account": "r3ruQ92bqXwWxcR2w4cC1tW35og9h3UbBq",
262+
"Amount": "50000000",
263+
"Destination": "rHpve1GL2ZXUs3NB5iU91BrXBSwb5PbBrG",
264+
"Fee": "0",
265+
"Flags": 1073741824,
266+
"Sequence": 1257841,
267+
"SigningPubKey": "",
268+
"TransactionType": "Payment"
269+
}
270+
}
271+
],
272+
"Sequence": 1257844,
273+
"SigningPubKey": "ED22A32B61EDF083315515831723BC18F8311F03886BBA375DFF46335BB7A75F0B",
274+
"TransactionType": "Batch",
275+
"TxnSignature": "156791D2DBFAEFC9B0AC29F2D8D0CDB25E13F92E70E6D5414FE31BD8573CA23D3F62F8B34FC1F117BD556B25E4F748095A24C4342108AB32F1B2BAFBF1443501",
276+
"ctid": "C013317600000002",
277+
"date": 816696511,
278+
"ledger_index": 1257846
279+
},
280+
"validated": true
281+
}
282+
283+
Batch transaction URL:
284+
https://devnet.xrpl.org/transactions/1299D20C6B489DA5C632AE4DBE49475DBF42D9444C7E9C109CC9B8DD0FD55FEC
285+
286+
=== Verifying inner transactions ===
287+
288+
Transaction 1 hash: 0F71979E3F641C980929F926640DCA886C30236ED0CD7C94B6CB36F0D42948AC
289+
- Status: tesSUCCESS (Ledger 1257846)
290+
- Transaction URL: https://devnet.xrpl.org/transactions/0F71979E3F641C980929F926640DCA886C30236ED0CD7C94B6CB36F0D42948AC
291+
292+
Transaction 2 hash: BC124CB29334AA1079139A9BE186B69A0AC467797F147754E2406714854D2A50
293+
- Status: tesSUCCESS (Ledger 1257846)
294+
- Transaction URL: https://devnet.xrpl.org/transactions/BC124CB29334AA1079139A9BE186B69A0AC467797F147754E2406714854D2A50
295+
296+
=== Final balances ===
297+
Alice: rHpve1GL2ZXUs3NB5iU91BrXBSwb5PbBrG, Balance: 200 XRP
298+
Bob: r3ruQ92bqXwWxcR2w4cC1tW35og9h3UbBq, Balance: 50 XRP
299+
Charlie: rsi5D9bkczpbGykPxoGNBVVmFFFXGwm3QA, Balance: 50 XRP
300+
Third-party wallet: rfUpGXTzU3siTr4UovV6Wt86Vw3gQU4ttA, Balance: 99.999994 XRP
301+
```

0 commit comments

Comments
 (0)