tigerbeetle-node 0.13.126 → 0.13.128
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -70
- package/dist/benchmark.js +43 -35
- package/dist/benchmark.js.map +1 -1
- package/dist/bin/aarch64-linux-gnu/client.node +0 -0
- package/dist/bin/aarch64-linux-musl/client.node +0 -0
- package/dist/bin/aarch64-macos/client.node +0 -0
- package/dist/bin/x86_64-linux-gnu/client.node +0 -0
- package/dist/bin/x86_64-linux-musl/client.node +0 -0
- package/dist/bin/x86_64-macos/client.node +0 -0
- package/dist/bin/x86_64-windows/client.node +0 -0
- package/dist/bindings.d.ts +74 -69
- package/dist/bindings.js +62 -59
- package/dist/bindings.js.map +1 -1
- package/dist/test.js +65 -51
- package/dist/test.js.map +1 -1
- package/package.json +1 -1
- package/src/benchmark.ts +57 -48
- package/src/bindings.ts +140 -110
- package/src/node.zig +89 -62
- package/src/test.ts +68 -54
package/README.md
CHANGED
|
@@ -106,15 +106,17 @@ reference](https://docs.tigerbeetle.com/reference/accounts).
|
|
|
106
106
|
```javascript
|
|
107
107
|
let account = {
|
|
108
108
|
id: 137n,
|
|
109
|
-
user_data: 0n,
|
|
110
|
-
reserved: Buffer.alloc(48, 0),
|
|
111
|
-
ledger: 1,
|
|
112
|
-
code: 718,
|
|
113
|
-
flags: 0,
|
|
114
109
|
debits_pending: 0n,
|
|
115
110
|
debits_posted: 0n,
|
|
116
111
|
credits_pending: 0n,
|
|
117
112
|
credits_posted: 0n,
|
|
113
|
+
user_data_128: 0n,
|
|
114
|
+
user_data_64: 0n,
|
|
115
|
+
user_data_32: 0,
|
|
116
|
+
reserved: 0,
|
|
117
|
+
ledger: 1,
|
|
118
|
+
code: 718,
|
|
119
|
+
flags: 0,
|
|
118
120
|
timestamp: 0n,
|
|
119
121
|
};
|
|
120
122
|
|
|
@@ -142,27 +144,31 @@ additionally has the `debits_must_not_exceed_credits` constraint:
|
|
|
142
144
|
```javascript
|
|
143
145
|
let account0 = {
|
|
144
146
|
id: 100n,
|
|
145
|
-
reserved: Buffer.alloc(48, 0),
|
|
146
|
-
user_data: 0n,
|
|
147
|
-
ledger: 1,
|
|
148
|
-
code: 1,
|
|
149
147
|
debits_pending: 0n,
|
|
150
148
|
debits_posted: 0n,
|
|
151
149
|
credits_pending: 0n,
|
|
152
150
|
credits_posted: 0n,
|
|
151
|
+
user_data_128: 0n,
|
|
152
|
+
user_data_64: 0n,
|
|
153
|
+
user_data_32: 0,
|
|
154
|
+
reserved: 0,
|
|
155
|
+
ledger: 1,
|
|
156
|
+
code: 1,
|
|
153
157
|
timestamp: 0n,
|
|
154
158
|
flags: 0,
|
|
155
159
|
};
|
|
156
160
|
let account1 = {
|
|
157
161
|
id: 101n,
|
|
158
|
-
user_data: 0n,
|
|
159
|
-
reserved: Buffer.alloc(48, 0),
|
|
160
|
-
ledger: 1,
|
|
161
|
-
code: 1,
|
|
162
162
|
debits_pending: 0n,
|
|
163
163
|
debits_posted: 0n,
|
|
164
164
|
credits_pending: 0n,
|
|
165
165
|
credits_posted: 0n,
|
|
166
|
+
user_data_128: 0n,
|
|
167
|
+
user_data_64: 0n,
|
|
168
|
+
user_data_32: 0,
|
|
169
|
+
reserved: 0,
|
|
170
|
+
ledger: 1,
|
|
171
|
+
code: 1,
|
|
166
172
|
timestamp: 0n,
|
|
167
173
|
flags: 0,
|
|
168
174
|
};
|
|
@@ -185,40 +191,46 @@ reference](https://docs.tigerbeetle.com/reference/operations/create_accounts).
|
|
|
185
191
|
```javascript
|
|
186
192
|
let account2 = {
|
|
187
193
|
id: 102n,
|
|
188
|
-
reserved: Buffer.alloc(48, 0),
|
|
189
|
-
user_data: 0n,
|
|
190
|
-
ledger: 1,
|
|
191
|
-
code: 1,
|
|
192
194
|
debits_pending: 0n,
|
|
193
195
|
debits_posted: 0n,
|
|
194
196
|
credits_pending: 0n,
|
|
195
197
|
credits_posted: 0n,
|
|
198
|
+
user_data_128: 0n,
|
|
199
|
+
user_data_64: 0n,
|
|
200
|
+
user_data_32: 0,
|
|
201
|
+
reserved: 0,
|
|
202
|
+
ledger: 1,
|
|
203
|
+
code: 1,
|
|
196
204
|
timestamp: 0n,
|
|
197
205
|
flags: 0,
|
|
198
206
|
};
|
|
199
207
|
let account3 = {
|
|
200
208
|
id: 103n,
|
|
201
|
-
user_data: 0n,
|
|
202
|
-
reserved: Buffer.alloc(48, 0),
|
|
203
|
-
ledger: 1,
|
|
204
|
-
code: 1,
|
|
205
209
|
debits_pending: 0n,
|
|
206
210
|
debits_posted: 0n,
|
|
207
211
|
credits_pending: 0n,
|
|
208
212
|
credits_posted: 0n,
|
|
213
|
+
user_data_128: 0n,
|
|
214
|
+
user_data_64: 0n,
|
|
215
|
+
user_data_32: 0,
|
|
216
|
+
reserved: 0,
|
|
217
|
+
ledger: 1,
|
|
218
|
+
code: 1,
|
|
209
219
|
timestamp: 0n,
|
|
210
220
|
flags: 0,
|
|
211
221
|
};
|
|
212
222
|
let account4 = {
|
|
213
223
|
id: 104n,
|
|
214
|
-
user_data: 0n,
|
|
215
|
-
reserved: Buffer.alloc(48, 0),
|
|
216
|
-
ledger: 1,
|
|
217
|
-
code: 1,
|
|
218
224
|
debits_pending: 0n,
|
|
219
225
|
debits_posted: 0n,
|
|
220
226
|
credits_pending: 0n,
|
|
221
227
|
credits_posted: 0n,
|
|
228
|
+
user_data_128: 0n,
|
|
229
|
+
user_data_64: 0n,
|
|
230
|
+
user_data_32: 0,
|
|
231
|
+
reserved: 0,
|
|
232
|
+
ledger: 1,
|
|
233
|
+
code: 1,
|
|
222
234
|
timestamp: 0n,
|
|
223
235
|
flags: 0,
|
|
224
236
|
};
|
|
@@ -256,15 +268,17 @@ console.log(accounts);
|
|
|
256
268
|
/*
|
|
257
269
|
* [{
|
|
258
270
|
* id: 137n,
|
|
259
|
-
* user_data: 0n,
|
|
260
|
-
* reserved: Buffer,
|
|
261
|
-
* ledger: 1,
|
|
262
|
-
* code: 718,
|
|
263
|
-
* flags: 0,
|
|
264
271
|
* debits_pending: 0n,
|
|
265
272
|
* debits_posted: 0n,
|
|
266
273
|
* credits_pending: 0n,
|
|
267
274
|
* credits_posted: 0n,
|
|
275
|
+
* user_data_128: 0n,
|
|
276
|
+
* user_data_64: 0n,
|
|
277
|
+
* user_data_32: 0,
|
|
278
|
+
* reserved: 0,
|
|
279
|
+
* ledger: 1,
|
|
280
|
+
* code: 718,
|
|
281
|
+
* flags: 0,
|
|
268
282
|
* timestamp: 1623062009212508993n,
|
|
269
283
|
* }]
|
|
270
284
|
*/
|
|
@@ -280,16 +294,17 @@ reference](https://docs.tigerbeetle.com/reference/transfers).
|
|
|
280
294
|
```javascript
|
|
281
295
|
let transfer = {
|
|
282
296
|
id: 1n,
|
|
283
|
-
pending_id: 0n,
|
|
284
297
|
debit_account_id: 102n,
|
|
285
298
|
credit_account_id: 103n,
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
299
|
+
amount: 10n,
|
|
300
|
+
pending_id: 0n,
|
|
301
|
+
user_data_128: 0n,
|
|
302
|
+
user_data_64: 0n,
|
|
303
|
+
user_data_32: 0,
|
|
304
|
+
timeout: 0,
|
|
289
305
|
ledger: 1,
|
|
290
306
|
code: 720,
|
|
291
307
|
flags: 0,
|
|
292
|
-
amount: 10n,
|
|
293
308
|
timestamp: 0n,
|
|
294
309
|
};
|
|
295
310
|
let transferErrors = await client.createTransfers([transfer]);
|
|
@@ -379,30 +394,32 @@ For example, to link `transfer0` and `transfer1`:
|
|
|
379
394
|
```javascript
|
|
380
395
|
let transfer0 = {
|
|
381
396
|
id: 2n,
|
|
382
|
-
pending_id: 0n,
|
|
383
397
|
debit_account_id: 102n,
|
|
384
398
|
credit_account_id: 103n,
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
399
|
+
amount: 10n,
|
|
400
|
+
pending_id: 0n,
|
|
401
|
+
user_data_128: 0n,
|
|
402
|
+
user_data_64: 0n,
|
|
403
|
+
user_data_32: 0,
|
|
404
|
+
timeout: 0,
|
|
388
405
|
ledger: 1,
|
|
389
406
|
code: 720,
|
|
390
407
|
flags: 0,
|
|
391
|
-
amount: 10n,
|
|
392
408
|
timestamp: 0n,
|
|
393
409
|
};
|
|
394
410
|
let transfer1 = {
|
|
395
411
|
id: 3n,
|
|
396
|
-
pending_id: 0n,
|
|
397
412
|
debit_account_id: 102n,
|
|
398
413
|
credit_account_id: 103n,
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
414
|
+
amount: 10n,
|
|
415
|
+
pending_id: 0n,
|
|
416
|
+
user_data_128: 0n,
|
|
417
|
+
user_data_64: 0n,
|
|
418
|
+
user_data_32: 0,
|
|
419
|
+
timeout: 0,
|
|
402
420
|
ledger: 1,
|
|
403
421
|
code: 720,
|
|
404
422
|
flags: 0,
|
|
405
|
-
amount: 10n,
|
|
406
423
|
timestamp: 0n,
|
|
407
424
|
};
|
|
408
425
|
transfer0.flags = TransferFlags.linked;
|
|
@@ -429,32 +446,34 @@ appropriate accounts and apply them to the `debits_posted` and
|
|
|
429
446
|
```javascript
|
|
430
447
|
let transfer2 = {
|
|
431
448
|
id: 4n,
|
|
432
|
-
pending_id: 0n,
|
|
433
449
|
debit_account_id: 102n,
|
|
434
450
|
credit_account_id: 103n,
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
451
|
+
amount: 10n,
|
|
452
|
+
pending_id: 0n,
|
|
453
|
+
user_data_128: 0n,
|
|
454
|
+
user_data_64: 0n,
|
|
455
|
+
user_data_32: 0,
|
|
456
|
+
timeout: 0,
|
|
438
457
|
ledger: 1,
|
|
439
458
|
code: 720,
|
|
440
459
|
flags: TransferFlags.pending,
|
|
441
|
-
amount: 10n,
|
|
442
460
|
timestamp: 0n,
|
|
443
461
|
};
|
|
444
462
|
transferErrors = await client.createTransfers([transfer2]);
|
|
445
463
|
|
|
446
464
|
let transfer3 = {
|
|
447
465
|
id: 5n,
|
|
448
|
-
pending_id: 4n,
|
|
449
466
|
debit_account_id: 102n,
|
|
450
467
|
credit_account_id: 103n,
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
468
|
+
amount: 10n,
|
|
469
|
+
pending_id: 4n,
|
|
470
|
+
user_data_128: 0n,
|
|
471
|
+
user_data_64: 0n,
|
|
472
|
+
user_data_32: 0,
|
|
473
|
+
timeout: 0,
|
|
454
474
|
ledger: 1,
|
|
455
475
|
code: 720,
|
|
456
476
|
flags: TransferFlags.post_pending_transfer,
|
|
457
|
-
amount: 10n,
|
|
458
477
|
timestamp: 0n,
|
|
459
478
|
};
|
|
460
479
|
transferErrors = await client.createTransfers([transfer3]);
|
|
@@ -471,32 +490,34 @@ appropriate accounts and **not** apply them to the `debits_posted` and
|
|
|
471
490
|
```javascript
|
|
472
491
|
let transfer4 = {
|
|
473
492
|
id: 4n,
|
|
474
|
-
pending_id: 0n,
|
|
475
493
|
debit_account_id: 102n,
|
|
476
494
|
credit_account_id: 103n,
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
495
|
+
amount: 10n,
|
|
496
|
+
pending_id: 0n,
|
|
497
|
+
user_data_128: 0n,
|
|
498
|
+
user_data_64: 0n,
|
|
499
|
+
user_data_32: 0,
|
|
500
|
+
timeout: 0,
|
|
480
501
|
ledger: 1,
|
|
481
502
|
code: 720,
|
|
482
503
|
flags: TransferFlags.pending,
|
|
483
|
-
amount: 10n,
|
|
484
504
|
timestamp: 0n,
|
|
485
505
|
};
|
|
486
506
|
transferErrors = await client.createTransfers([transfer4]);
|
|
487
507
|
|
|
488
508
|
let transfer5 = {
|
|
489
509
|
id: 7n,
|
|
490
|
-
pending_id: 6n,
|
|
491
510
|
debit_account_id: 102n,
|
|
492
511
|
credit_account_id: 103n,
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
512
|
+
amount: 10n,
|
|
513
|
+
pending_id: 6n,
|
|
514
|
+
user_data_128: 0n,
|
|
515
|
+
user_data_64: 0n,
|
|
516
|
+
user_data_32: 0,
|
|
517
|
+
timeout: 0,
|
|
496
518
|
ledger: 1,
|
|
497
519
|
code: 720,
|
|
498
520
|
flags: TransferFlags.void_pending_transfer,
|
|
499
|
-
amount: 10n,
|
|
500
521
|
timestamp: 0n,
|
|
501
522
|
};
|
|
502
523
|
transferErrors = await client.createTransfers([transfer5]);
|
|
@@ -522,16 +543,17 @@ console.log(transfers);
|
|
|
522
543
|
/*
|
|
523
544
|
* [{
|
|
524
545
|
* id: 1n,
|
|
525
|
-
* pending_id: 0n,
|
|
526
546
|
* debit_account_id: 102n,
|
|
527
547
|
* credit_account_id: 103n,
|
|
528
|
-
*
|
|
529
|
-
*
|
|
530
|
-
*
|
|
548
|
+
* amount: 10n,
|
|
549
|
+
* pending_id: 0n,
|
|
550
|
+
* user_data_128: 0n,
|
|
551
|
+
* user_data_64: 0n,
|
|
552
|
+
* user_data_32: 0,
|
|
553
|
+
* timeout: 0,
|
|
531
554
|
* ledger: 1,
|
|
532
555
|
* code: 720,
|
|
533
556
|
* flags: 0,
|
|
534
|
-
* amount: 10n,
|
|
535
557
|
* timestamp: 1623062009212508993n,
|
|
536
558
|
* }]
|
|
537
559
|
*/
|
package/dist/benchmark.js
CHANGED
|
@@ -18,31 +18,34 @@ const client = (0, _1.createClient)({
|
|
|
18
18
|
replica_addresses: ['3001']
|
|
19
19
|
});
|
|
20
20
|
const TRANSFER_SIZE = 128;
|
|
21
|
-
const Zeroed48Bytes = Buffer.alloc(48, 0);
|
|
22
21
|
const accountA = {
|
|
23
22
|
id: 137n,
|
|
24
|
-
user_data: 0n,
|
|
25
|
-
reserved: Zeroed48Bytes,
|
|
26
|
-
ledger: 1,
|
|
27
|
-
code: 1,
|
|
28
|
-
flags: 0,
|
|
29
23
|
debits_pending: 0n,
|
|
30
24
|
debits_posted: 0n,
|
|
31
25
|
credits_pending: 0n,
|
|
32
26
|
credits_posted: 0n,
|
|
27
|
+
user_data_128: 0n,
|
|
28
|
+
user_data_64: 0n,
|
|
29
|
+
user_data_32: 0,
|
|
30
|
+
reserved: 0,
|
|
31
|
+
ledger: 1,
|
|
32
|
+
code: 1,
|
|
33
|
+
flags: 0,
|
|
33
34
|
timestamp: 0n,
|
|
34
35
|
};
|
|
35
36
|
const accountB = {
|
|
36
37
|
id: 138n,
|
|
37
|
-
user_data: 0n,
|
|
38
|
-
reserved: Zeroed48Bytes,
|
|
39
|
-
ledger: 1,
|
|
40
|
-
code: 1,
|
|
41
|
-
flags: 0,
|
|
42
38
|
debits_pending: 0n,
|
|
43
39
|
debits_posted: 0n,
|
|
44
40
|
credits_pending: 0n,
|
|
45
41
|
credits_posted: 0n,
|
|
42
|
+
user_data_128: 0n,
|
|
43
|
+
user_data_64: 0n,
|
|
44
|
+
user_data_32: 0,
|
|
45
|
+
reserved: 0,
|
|
46
|
+
ledger: 1,
|
|
47
|
+
code: 1,
|
|
48
|
+
flags: 0,
|
|
46
49
|
timestamp: 0n,
|
|
47
50
|
};
|
|
48
51
|
const rawCreateTransfers = async (batch) => {
|
|
@@ -66,14 +69,15 @@ const encodeTransfer = (transfer, offset, output) => {
|
|
|
66
69
|
output.writeBigUInt64LE(transfer.id, offset);
|
|
67
70
|
output.writeBigUInt64LE(transfer.debit_account_id, offset + 16);
|
|
68
71
|
output.writeBigUInt64LE(transfer.credit_account_id, offset + 32);
|
|
69
|
-
output.writeBigUInt64LE(transfer.
|
|
70
|
-
output.writeBigUInt64LE(transfer.
|
|
71
|
-
output.writeBigUInt64LE(transfer.
|
|
72
|
-
output.writeBigUInt64LE(transfer.
|
|
73
|
-
output.
|
|
74
|
-
output.
|
|
75
|
-
output.writeUInt32LE(transfer.
|
|
76
|
-
output.
|
|
72
|
+
output.writeBigUInt64LE(transfer.amount, offset + 48);
|
|
73
|
+
output.writeBigUInt64LE(transfer.pending_id, offset + 64);
|
|
74
|
+
output.writeBigUInt64LE(transfer.user_data_128, offset + 80);
|
|
75
|
+
output.writeBigUInt64LE(transfer.user_data_64, offset + 96);
|
|
76
|
+
output.writeInt32LE(transfer.user_data_32, offset + 104);
|
|
77
|
+
output.writeInt32LE(transfer.timeout, offset + 108);
|
|
78
|
+
output.writeUInt32LE(transfer.ledger, offset + 112);
|
|
79
|
+
output.writeUInt32LE(transfer.code, offset + 116);
|
|
80
|
+
output.writeUInt32LE(transfer.flags, offset + 118);
|
|
77
81
|
output.writeBigUInt64LE(transfer.timestamp, offset + 120);
|
|
78
82
|
};
|
|
79
83
|
const runBenchmarkRawRequest = async () => {
|
|
@@ -93,14 +97,15 @@ const runBenchmarkRawRequest = async () => {
|
|
|
93
97
|
id: BigInt(count),
|
|
94
98
|
debit_account_id: accountA.id,
|
|
95
99
|
credit_account_id: accountB.id,
|
|
96
|
-
|
|
97
|
-
reserved: 0n,
|
|
100
|
+
amount: 1n,
|
|
98
101
|
pending_id: 0n,
|
|
99
|
-
|
|
102
|
+
user_data_128: 0n,
|
|
103
|
+
user_data_64: 0n,
|
|
104
|
+
user_data_32: 0,
|
|
105
|
+
timeout: IS_TWO_PHASE_TRANSFER ? 2 : 0,
|
|
100
106
|
ledger: 1,
|
|
101
107
|
code: 1,
|
|
102
108
|
flags: IS_TWO_PHASE_TRANSFER ? _1.TransferFlags.pending : 0,
|
|
103
|
-
amount: 1n,
|
|
104
109
|
timestamp: 0n,
|
|
105
110
|
}, i * TRANSFER_SIZE, transferBatch);
|
|
106
111
|
if (IS_TWO_PHASE_TRANSFER) {
|
|
@@ -108,14 +113,15 @@ const runBenchmarkRawRequest = async () => {
|
|
|
108
113
|
id: BigInt((MAX_TRANSFERS + count)),
|
|
109
114
|
debit_account_id: accountA.id,
|
|
110
115
|
credit_account_id: accountB.id,
|
|
111
|
-
|
|
112
|
-
reserved: 0n,
|
|
116
|
+
amount: 1n,
|
|
113
117
|
pending_id: BigInt(count),
|
|
114
|
-
|
|
118
|
+
user_data_128: 0n,
|
|
119
|
+
user_data_64: 0n,
|
|
120
|
+
user_data_32: 0,
|
|
121
|
+
timeout: 0,
|
|
115
122
|
ledger: 1,
|
|
116
123
|
code: 1,
|
|
117
124
|
flags: _1.TransferFlags.post_pending_transfer,
|
|
118
|
-
amount: 1n,
|
|
119
125
|
timestamp: 0n,
|
|
120
126
|
}, i * TRANSFER_SIZE, postTransferBatch);
|
|
121
127
|
}
|
|
@@ -173,14 +179,15 @@ const runBenchmark = async () => {
|
|
|
173
179
|
id: BigInt(count),
|
|
174
180
|
debit_account_id: accountA.id,
|
|
175
181
|
credit_account_id: accountB.id,
|
|
182
|
+
amount: 1n,
|
|
176
183
|
pending_id: 0n,
|
|
184
|
+
user_data_128: 0n,
|
|
185
|
+
user_data_64: 0n,
|
|
186
|
+
user_data_32: 0,
|
|
187
|
+
timeout: IS_TWO_PHASE_TRANSFER ? 2 : 0,
|
|
177
188
|
code: 1,
|
|
178
189
|
ledger: 1,
|
|
179
|
-
reserved: 0n,
|
|
180
|
-
user_data: 0n,
|
|
181
190
|
flags: IS_TWO_PHASE_TRANSFER ? _1.TransferFlags.pending : 0,
|
|
182
|
-
amount: 1n,
|
|
183
|
-
timeout: IS_TWO_PHASE_TRANSFER ? BigInt(2e9) : 0n,
|
|
184
191
|
timestamp: 0n,
|
|
185
192
|
});
|
|
186
193
|
if (IS_TWO_PHASE_TRANSFER) {
|
|
@@ -188,14 +195,15 @@ const runBenchmark = async () => {
|
|
|
188
195
|
id: BigInt(MAX_TRANSFERS + count),
|
|
189
196
|
debit_account_id: accountA.id,
|
|
190
197
|
credit_account_id: accountB.id,
|
|
198
|
+
amount: 1n,
|
|
191
199
|
pending_id: BigInt(count),
|
|
200
|
+
user_data_128: 0n,
|
|
201
|
+
user_data_64: 0n,
|
|
202
|
+
user_data_32: 0,
|
|
203
|
+
timeout: 0,
|
|
192
204
|
code: 1,
|
|
193
205
|
ledger: 1,
|
|
194
|
-
reserved: 0n,
|
|
195
|
-
user_data: 0n,
|
|
196
206
|
flags: IS_TWO_PHASE_TRANSFER ? _1.TransferFlags.post_pending_transfer : 0,
|
|
197
|
-
amount: 1n,
|
|
198
|
-
timeout: 0n,
|
|
199
207
|
timestamp: 0n,
|
|
200
208
|
});
|
|
201
209
|
}
|
package/dist/benchmark.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert'\nimport {\n Account,\n createClient,\n Transfer,\n TransferFlags,\n CreateTransfersError,\n Operation\n} from '.'\n\nconst MAX_TRANSFERS = 51200\nconst MAX_REQUEST_BATCH_SIZE = 5120\nconst IS_TWO_PHASE_TRANSFER = false\nconst IS_RAW_REQUEST = false\nconst PREVIOUS_RAW_REQUEST_RESULT = IS_TWO_PHASE_TRANSFER ? 300000 : 620000\nconst PREVIOUS_RESULT = IS_TWO_PHASE_TRANSFER ? 150000 : 310000\nconst PREVIOUS_BENCHMARK = IS_RAW_REQUEST ? PREVIOUS_RAW_REQUEST_RESULT : PREVIOUS_RESULT\nconst TOLERANCE = 10 // percent that the benchmark is allowed to deviate from the previous benchmark\n\nconst client = createClient({\n cluster_id: 0,\n replica_addresses: ['3001']\n})\n\nconst TRANSFER_SIZE = 128\nconst Zeroed48Bytes = Buffer.alloc(48, 0)\nconst accountA: Account = {\n id: 137n,\n user_data: 0n,\n reserved: Zeroed48Bytes,\n ledger: 1,\n code: 1,\n flags: 0,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n timestamp: 0n,\n}\n\nconst accountB: Account = {\n id: 138n,\n user_data: 0n,\n reserved: Zeroed48Bytes,\n ledger: 1,\n code: 1,\n flags: 0,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n timestamp: 0n,\n}\n\n// Helper function to promisify the raw_request:\nconst rawCreateTransfers = async (batch: Buffer): Promise<CreateTransfersError[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateTransfersError[]) => {\n if (error) {\n reject(error)\n }\n resolve(results)\n }\n\n try {\n client.rawRequest(Operation.create_transfers, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n}\n\n/**\n * This encoding function is only for this benchmark script.\n * \n * ID_OFFSET = 0 (0 -> 16)\n * DEBIT_ACCOUNT_ID_OFFSET = 0 + 16 = 16 (16 -> 32)\n * CREDIT_ACCOUNT_ID_OFFSET = 16 + 16 = 32 (32 -> 48)\n * USER_DATA_OFFSET = 32 + 16 = 48 (48 -> 64)\n * RESERVED_OFFSET = 48 + 16 = 64 (64 -> 80)\n * PENDING_ID_OFFSET = 64 + 16 = 80 (80 -> 96)\n * TIMEOUT_OFFSET = 96 + 8 = 104 (96 -> 104)\n * LEDGER_OFFSET = 104 + 4 = 108 (104 -> 108)\n * CODE_OFFSET = 108 + 2 = 110 (108 -> 110)\n * FLAGS_OFFSET = 110 + 2 = 112 (110 -> 112)\n * AMOUNT_OFFSET = 112 + 8 = 120 (112 -> 120)\n * TIMESTAMP = 120 + 8 = 128 (120 -> 128)\n */ \nconst encodeTransfer = (transfer: Transfer, offset: number, output: Buffer): void => {\n assert(BigInt((offset + TRANSFER_SIZE)) <= BigInt(output.length), `Transfer ${transfer} exceeds buffer of ${output}!`)\n\n output.writeBigUInt64LE(transfer.id, offset)\n output.writeBigUInt64LE(transfer.debit_account_id, offset + 16)\n output.writeBigUInt64LE(transfer.credit_account_id, offset + 32)\n output.writeBigUInt64LE(transfer.user_data, offset + 48)\n output.writeBigUInt64LE(transfer.reserved, offset + 64)\n output.writeBigUInt64LE(transfer.pending_id, offset + 80)\n output.writeBigUInt64LE(transfer.timeout, offset + 96)\n output.writeUInt32LE(transfer.ledger, offset + 104)\n output.writeUInt32LE(transfer.code, offset + 108)\n output.writeUInt32LE(transfer.flags, offset + 110)\n output.writeBigUInt64LE(transfer.amount, offset + 112)\n output.writeBigUInt64LE(transfer.timestamp, offset + 120)\n}\n\nconst runBenchmarkRawRequest = async () => {\n assert(\n MAX_TRANSFERS % MAX_REQUEST_BATCH_SIZE === 0,\n \"The raw request benchmark requires MAX_TRANSFERS to be a multiple of MAX_REQUEST_BATCH_SIZE\"\n )\n console.log(`pre-allocating ${MAX_TRANSFERS} transfers and posts...`)\n const transfers: Buffer[] = []\n const posts: Buffer[] = []\n\n let count = 0\n while (count < MAX_TRANSFERS) {\n const transferBatch = Buffer.alloc(MAX_REQUEST_BATCH_SIZE * TRANSFER_SIZE, 0)\n const postTransferBatch = Buffer.alloc(MAX_REQUEST_BATCH_SIZE * TRANSFER_SIZE, 0)\n for (let i = 0; i < MAX_REQUEST_BATCH_SIZE; i++) {\n if (count === MAX_TRANSFERS) break\n\n count += 1\n encodeTransfer(\n {\n id: BigInt(count),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n user_data: 0n,\n reserved: 0n,\n pending_id: 0n,\n timeout: IS_TWO_PHASE_TRANSFER ? BigInt(2e9) : 0n,\n ledger: 1,\n code: 1,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.pending : 0,\n amount: 1n,\n timestamp: 0n,\n },\n i * TRANSFER_SIZE,\n transferBatch\n )\n \n if (IS_TWO_PHASE_TRANSFER) {\n encodeTransfer(\n {\n id: BigInt((MAX_TRANSFERS + count)),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n user_data: 0n,\n reserved: 0n,\n pending_id: BigInt(count),\n timeout: 0n,\n ledger: 1,\n code: 1,\n flags: TransferFlags.post_pending_transfer,\n amount: 1n,\n timestamp: 0n,\n },\n i * TRANSFER_SIZE,\n postTransferBatch\n )\n }\n }\n\n transfers.push(transferBatch)\n if (IS_TWO_PHASE_TRANSFER) posts.push(postTransferBatch)\n if (count % 100) console.log(`${Number((count / MAX_TRANSFERS) * 100).toFixed(1)}%`)\n }\n assert(count === MAX_TRANSFERS)\n\n console.log(`starting benchmark. MAX_TRANSFERS=${MAX_TRANSFERS} REQUEST_BATCH_SIZE=${MAX_REQUEST_BATCH_SIZE} NUMBER_OF_BATCHES=${transfers.length}`)\n let maxCreateTransfersLatency = 0\n let maxCommitTransfersLatency = 0\n const start = Date.now()\n\n for (let i = 0; i < transfers.length; i++) {\n const ms1 = Date.now()\n\n const transferErrors = await rawCreateTransfers(transfers[i])\n assert(transferErrors.length === 0)\n\n const ms2 = Date.now()\n const createTransferLatency = ms2 - ms1\n if (createTransferLatency > maxCreateTransfersLatency) {\n maxCreateTransfersLatency = createTransferLatency\n }\n\n if (IS_TWO_PHASE_TRANSFER) {\n const commitErrors = await rawCreateTransfers(posts[i])\n assert(commitErrors.length === 0)\n\n const ms3 = Date.now()\n const commitTransferLatency = ms3 - ms2\n if (commitTransferLatency > maxCommitTransfersLatency) {\n maxCommitTransfersLatency = commitTransferLatency\n }\n }\n }\n\n const ms = Date.now() - start\n\n return {\n ms,\n maxCommitTransfersLatency,\n maxCreateTransfersLatency\n }\n}\n\nconst runBenchmark = async () => {\n console.log(`pre-allocating ${MAX_TRANSFERS} transfers and posts...`)\n const transfers: Transfer[][] = []\n const posts: Transfer[][] = []\n\n let count = 0\n while (count < MAX_TRANSFERS) {\n const pendingBatch: Transfer[] = []\n const postBatch: Transfer[] = []\n for (let i = 0; i < MAX_REQUEST_BATCH_SIZE; i++) {\n if (count === MAX_TRANSFERS) break\n\n count += 1\n pendingBatch.push({\n id: BigInt(count),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n pending_id: 0n,\n code: 1,\n ledger: 1,\n reserved: 0n,\n user_data: 0n,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.pending : 0,\n amount: 1n,\n timeout: IS_TWO_PHASE_TRANSFER ? BigInt(2e9) : 0n,\n timestamp: 0n,\n })\n \n if (IS_TWO_PHASE_TRANSFER) {\n postBatch.push({\n id: BigInt(MAX_TRANSFERS + count),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n pending_id: BigInt(count),\n code: 1,\n ledger: 1,\n reserved: 0n,\n user_data: 0n,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.post_pending_transfer : 0,\n amount: 1n,\n timeout: 0n,\n timestamp: 0n,\n })\n }\n }\n\n transfers.push(pendingBatch)\n if (IS_TWO_PHASE_TRANSFER) posts.push(postBatch)\n }\n assert(count === MAX_TRANSFERS)\n\n console.log(`starting benchmark. MAX_TRANSFERS=${MAX_TRANSFERS} REQUEST_BATCH_SIZE=${MAX_REQUEST_BATCH_SIZE} NUMBER_OF_BATCHES=${transfers.length}`)\n let maxCreateTransfersLatency = 0\n let maxCommitTransfersLatency = 0\n const start = Date.now()\n\n for (let i = 0; i < transfers.length; i++) {\n const ms1 = Date.now()\n\n const transferErrors = await client.createTransfers(transfers[i])\n assert(transferErrors.length === 0)\n\n const ms2 = Date.now()\n const createTransferLatency = ms2 - ms1\n if (createTransferLatency > maxCreateTransfersLatency) {\n maxCreateTransfersLatency = createTransferLatency\n }\n\n if (IS_TWO_PHASE_TRANSFER) {\n const commitErrors = await client.createTransfers(posts[i])\n assert(commitErrors.length === 0)\n\n const ms3 = Date.now()\n const commitTransferLatency = ms3 - ms2\n if (commitTransferLatency > maxCommitTransfersLatency) {\n maxCommitTransfersLatency = commitTransferLatency\n }\n }\n }\n\n const ms = Date.now() - start\n\n return {\n ms,\n maxCommitTransfersLatency,\n maxCreateTransfersLatency\n }\n}\n\nconst main = async () => { \n console.log(\"creating the accounts...\")\n await client.createAccounts([accountA, accountB])\n const accountResults = await client.lookupAccounts([accountA.id, accountB.id])\n assert(accountResults.length === 2)\n assert(accountResults[0].debits_posted === 0n)\n assert(accountResults[1].debits_posted === 0n)\n\n const benchmark = IS_RAW_REQUEST ? await runBenchmarkRawRequest() : await runBenchmark()\n \n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n const result = Math.floor((1000 * MAX_TRANSFERS)/benchmark.ms)\n console.log(\"=============================\")\n console.log(`${IS_TWO_PHASE_TRANSFER ? 'two-phase ' : ''}transfers per second: ${result}`)\n console.log(`create transfers max p100 latency per 10 000 transfers = ${benchmark.maxCreateTransfersLatency}ms`)\n console.log(`commit transfers max p100 latency per 10 000 transfers = ${benchmark.maxCommitTransfersLatency}ms`)\n assert(accounts.length === 2)\n assert(accounts[0].debits_posted === BigInt(MAX_TRANSFERS))\n assert(accounts[1].credits_posted === BigInt(MAX_TRANSFERS))\n\n if (result < PREVIOUS_BENCHMARK * (100 - TOLERANCE)/100) {\n console.warn(`There has been a performance regression. Previous benchmark=${PREVIOUS_BENCHMARK}`)\n }\n}\n\nmain().catch(error => { \n console.log(error)\n}).finally(async () => {\n await client.destroy()\n})\n"]}
|
|
1
|
+
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert'\nimport {\n Account,\n createClient,\n Transfer,\n TransferFlags,\n CreateTransfersError,\n Operation\n} from '.'\n\nconst MAX_TRANSFERS = 51200\nconst MAX_REQUEST_BATCH_SIZE = 5120\nconst IS_TWO_PHASE_TRANSFER = false\nconst IS_RAW_REQUEST = false\nconst PREVIOUS_RAW_REQUEST_RESULT = IS_TWO_PHASE_TRANSFER ? 300000 : 620000\nconst PREVIOUS_RESULT = IS_TWO_PHASE_TRANSFER ? 150000 : 310000\nconst PREVIOUS_BENCHMARK = IS_RAW_REQUEST ? PREVIOUS_RAW_REQUEST_RESULT : PREVIOUS_RESULT\nconst TOLERANCE = 10 // percent that the benchmark is allowed to deviate from the previous benchmark\n\nconst client = createClient({\n cluster_id: 0,\n replica_addresses: ['3001']\n})\n\nconst TRANSFER_SIZE = 128\nconst accountA: Account = {\n id: 137n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n, \n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\n}\n\nconst accountB: Account = {\n id: 138n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n, \n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\n}\n\n// Helper function to promisify the raw_request:\nconst rawCreateTransfers = async (batch: Buffer): Promise<CreateTransfersError[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateTransfersError[]) => {\n if (error) {\n reject(error)\n }\n resolve(results)\n }\n\n try {\n client.rawRequest(Operation.create_transfers, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n}\n\n/**\n * This encoding function is only for this benchmark script.\n * \n * ID_OFFSET = 0 (0 -> 16)\n * DEBIT_ACCOUNT_ID_OFFSET = 0 + 16 = 16 (16 -> 32)\n * CREDIT_ACCOUNT_ID_OFFSET = 16 + 16 = 32 (32 -> 48)\n * AMOUNT_OFFSET = 48 + 16 = 64 (48 -> 64)\n * PENDING_ID_OFFSET = 64 + 16 = 80 (64 -> 80)\n * USER_DATA_128_OFFSET = 80 + 16 = 96 (80 -> 96)\n * USER_DATA_64_OFFSET = 96 + 8 = 104 (96 -> 104)\n * USER_DATA_32_OFFSET = 104 + 4 = 108 (104 -> 108)\n * TIMEOUT_OFFSET = 108 + 4 = 112 (108 -> 112)\n * LEDGER_OFFSET = 112 + 4 = 116 (112 -> 116)\n * CODE_OFFSET = 116 + 2 = 118 (116 -> 118)\n * FLAGS_OFFSET = 118 + 2 = 120 (118 -> 120)\n * TIMESTAMP = 120 + 8 = 128 (120 -> 128)\n */ \nconst encodeTransfer = (transfer: Transfer, offset: number, output: Buffer): void => {\n assert(BigInt((offset + TRANSFER_SIZE)) <= BigInt(output.length), `Transfer ${transfer} exceeds buffer of ${output}!`)\n\n output.writeBigUInt64LE(transfer.id, offset)\n output.writeBigUInt64LE(transfer.debit_account_id, offset + 16)\n output.writeBigUInt64LE(transfer.credit_account_id, offset + 32)\n output.writeBigUInt64LE(transfer.amount, offset + 48)\n output.writeBigUInt64LE(transfer.pending_id, offset + 64)\n output.writeBigUInt64LE(transfer.user_data_128, offset + 80)\n output.writeBigUInt64LE(transfer.user_data_64, offset + 96)\n output.writeInt32LE(transfer.user_data_32, offset + 104) \n output.writeInt32LE(transfer.timeout, offset + 108)\n output.writeUInt32LE(transfer.ledger, offset + 112)\n output.writeUInt32LE(transfer.code, offset + 116)\n output.writeUInt32LE(transfer.flags, offset + 118)\n output.writeBigUInt64LE(transfer.timestamp, offset + 120)\n}\n\nconst runBenchmarkRawRequest = async () => {\n assert(\n MAX_TRANSFERS % MAX_REQUEST_BATCH_SIZE === 0,\n \"The raw request benchmark requires MAX_TRANSFERS to be a multiple of MAX_REQUEST_BATCH_SIZE\"\n )\n console.log(`pre-allocating ${MAX_TRANSFERS} transfers and posts...`)\n const transfers: Buffer[] = []\n const posts: Buffer[] = []\n\n let count = 0\n while (count < MAX_TRANSFERS) {\n const transferBatch = Buffer.alloc(MAX_REQUEST_BATCH_SIZE * TRANSFER_SIZE, 0)\n const postTransferBatch = Buffer.alloc(MAX_REQUEST_BATCH_SIZE * TRANSFER_SIZE, 0)\n for (let i = 0; i < MAX_REQUEST_BATCH_SIZE; i++) {\n if (count === MAX_TRANSFERS) break\n\n count += 1\n encodeTransfer(\n {\n id: BigInt(count),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n amount: 1n,\n pending_id: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: IS_TWO_PHASE_TRANSFER ? 2 : 0,\n ledger: 1,\n code: 1,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.pending : 0,\n timestamp: 0n,\n },\n i * TRANSFER_SIZE,\n transferBatch\n )\n \n if (IS_TWO_PHASE_TRANSFER) {\n encodeTransfer(\n {\n id: BigInt((MAX_TRANSFERS + count)),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n amount: 1n,\n pending_id: BigInt(count),\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.post_pending_transfer,\n timestamp: 0n,\n },\n i * TRANSFER_SIZE,\n postTransferBatch\n )\n }\n }\n\n transfers.push(transferBatch)\n if (IS_TWO_PHASE_TRANSFER) posts.push(postTransferBatch)\n if (count % 100) console.log(`${Number((count / MAX_TRANSFERS) * 100).toFixed(1)}%`)\n }\n assert(count === MAX_TRANSFERS)\n\n console.log(`starting benchmark. MAX_TRANSFERS=${MAX_TRANSFERS} REQUEST_BATCH_SIZE=${MAX_REQUEST_BATCH_SIZE} NUMBER_OF_BATCHES=${transfers.length}`)\n let maxCreateTransfersLatency = 0\n let maxCommitTransfersLatency = 0\n const start = Date.now()\n\n for (let i = 0; i < transfers.length; i++) {\n const ms1 = Date.now()\n\n const transferErrors = await rawCreateTransfers(transfers[i])\n assert(transferErrors.length === 0)\n\n const ms2 = Date.now()\n const createTransferLatency = ms2 - ms1\n if (createTransferLatency > maxCreateTransfersLatency) {\n maxCreateTransfersLatency = createTransferLatency\n }\n\n if (IS_TWO_PHASE_TRANSFER) {\n const commitErrors = await rawCreateTransfers(posts[i])\n assert(commitErrors.length === 0)\n\n const ms3 = Date.now()\n const commitTransferLatency = ms3 - ms2\n if (commitTransferLatency > maxCommitTransfersLatency) {\n maxCommitTransfersLatency = commitTransferLatency\n }\n }\n }\n\n const ms = Date.now() - start\n\n return {\n ms,\n maxCommitTransfersLatency,\n maxCreateTransfersLatency\n }\n}\n\nconst runBenchmark = async () => {\n console.log(`pre-allocating ${MAX_TRANSFERS} transfers and posts...`)\n const transfers: Transfer[][] = []\n const posts: Transfer[][] = []\n\n let count = 0\n while (count < MAX_TRANSFERS) {\n const pendingBatch: Transfer[] = []\n const postBatch: Transfer[] = []\n for (let i = 0; i < MAX_REQUEST_BATCH_SIZE; i++) {\n if (count === MAX_TRANSFERS) break\n\n count += 1\n pendingBatch.push({\n id: BigInt(count),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n amount: 1n, \n pending_id: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: IS_TWO_PHASE_TRANSFER ? 2 : 0,\n code: 1,\n ledger: 1,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.pending : 0,\n timestamp: 0n,\n })\n \n if (IS_TWO_PHASE_TRANSFER) {\n postBatch.push({\n id: BigInt(MAX_TRANSFERS + count),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n amount: 1n,\n pending_id: BigInt(count),\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: 0,\n code: 1,\n ledger: 1,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.post_pending_transfer : 0,\n timestamp: 0n,\n })\n }\n }\n\n transfers.push(pendingBatch)\n if (IS_TWO_PHASE_TRANSFER) posts.push(postBatch)\n }\n assert(count === MAX_TRANSFERS)\n\n console.log(`starting benchmark. MAX_TRANSFERS=${MAX_TRANSFERS} REQUEST_BATCH_SIZE=${MAX_REQUEST_BATCH_SIZE} NUMBER_OF_BATCHES=${transfers.length}`)\n let maxCreateTransfersLatency = 0\n let maxCommitTransfersLatency = 0\n const start = Date.now()\n\n for (let i = 0; i < transfers.length; i++) {\n const ms1 = Date.now()\n\n const transferErrors = await client.createTransfers(transfers[i])\n assert(transferErrors.length === 0)\n\n const ms2 = Date.now()\n const createTransferLatency = ms2 - ms1\n if (createTransferLatency > maxCreateTransfersLatency) {\n maxCreateTransfersLatency = createTransferLatency\n }\n\n if (IS_TWO_PHASE_TRANSFER) {\n const commitErrors = await client.createTransfers(posts[i])\n assert(commitErrors.length === 0)\n\n const ms3 = Date.now()\n const commitTransferLatency = ms3 - ms2\n if (commitTransferLatency > maxCommitTransfersLatency) {\n maxCommitTransfersLatency = commitTransferLatency\n }\n }\n }\n\n const ms = Date.now() - start\n\n return {\n ms,\n maxCommitTransfersLatency,\n maxCreateTransfersLatency\n }\n}\n\nconst main = async () => { \n console.log(\"creating the accounts...\")\n await client.createAccounts([accountA, accountB])\n const accountResults = await client.lookupAccounts([accountA.id, accountB.id])\n assert(accountResults.length === 2)\n assert(accountResults[0].debits_posted === 0n)\n assert(accountResults[1].debits_posted === 0n)\n\n const benchmark = IS_RAW_REQUEST ? await runBenchmarkRawRequest() : await runBenchmark()\n \n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n const result = Math.floor((1000 * MAX_TRANSFERS)/benchmark.ms)\n console.log(\"=============================\")\n console.log(`${IS_TWO_PHASE_TRANSFER ? 'two-phase ' : ''}transfers per second: ${result}`)\n console.log(`create transfers max p100 latency per 10 000 transfers = ${benchmark.maxCreateTransfersLatency}ms`)\n console.log(`commit transfers max p100 latency per 10 000 transfers = ${benchmark.maxCommitTransfersLatency}ms`)\n assert(accounts.length === 2)\n assert(accounts[0].debits_posted === BigInt(MAX_TRANSFERS))\n assert(accounts[1].credits_posted === BigInt(MAX_TRANSFERS))\n\n if (result < PREVIOUS_BENCHMARK * (100 - TOLERANCE)/100) {\n console.warn(`There has been a performance regression. Previous benchmark=${PREVIOUS_BENCHMARK}`)\n }\n}\n\nmain().catch(error => { \n console.log(error)\n}).finally(async () => {\n await client.destroy()\n})\n"]}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|