tigerbeetle-node 0.8.1 → 0.9.143

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.
Files changed (83) hide show
  1. package/README.md +584 -184
  2. package/dist/benchmark.js +59 -51
  3. package/dist/benchmark.js.map +1 -1
  4. package/dist/bin/aarch64-linux-gnu/client.node +0 -0
  5. package/dist/bin/aarch64-linux-musl/client.node +0 -0
  6. package/dist/bin/aarch64-macos/client.node +0 -0
  7. package/dist/bin/x86_64-linux-gnu/client.node +0 -0
  8. package/dist/bin/x86_64-linux-musl/client.node +0 -0
  9. package/dist/bin/x86_64-macos/client.node +0 -0
  10. package/dist/bin/x86_64-windows/client.node +0 -0
  11. package/dist/bindings.d.ts +141 -0
  12. package/dist/bindings.js +112 -0
  13. package/dist/bindings.js.map +1 -0
  14. package/dist/index.d.ts +2 -125
  15. package/dist/index.js +51 -101
  16. package/dist/index.js.map +1 -1
  17. package/dist/test.js +69 -55
  18. package/dist/test.js.map +1 -1
  19. package/package-lock.json +26 -0
  20. package/package.json +17 -28
  21. package/src/benchmark.ts +58 -49
  22. package/src/bindings.ts +631 -0
  23. package/src/index.ts +71 -163
  24. package/src/node.zig +169 -148
  25. package/src/test.ts +71 -57
  26. package/src/translate.zig +19 -36
  27. package/.yarn/releases/yarn-berry.cjs +0 -55
  28. package/.yarnrc.yml +0 -1
  29. package/scripts/download_node_headers.sh +0 -25
  30. package/scripts/postinstall.sh +0 -6
  31. package/src/tigerbeetle/scripts/benchmark.bat +0 -46
  32. package/src/tigerbeetle/scripts/benchmark.sh +0 -55
  33. package/src/tigerbeetle/scripts/install.sh +0 -6
  34. package/src/tigerbeetle/scripts/install_zig.bat +0 -109
  35. package/src/tigerbeetle/scripts/install_zig.sh +0 -84
  36. package/src/tigerbeetle/scripts/lint.zig +0 -199
  37. package/src/tigerbeetle/scripts/upgrade_ubuntu_kernel.sh +0 -39
  38. package/src/tigerbeetle/scripts/vopr.bat +0 -48
  39. package/src/tigerbeetle/scripts/vopr.sh +0 -33
  40. package/src/tigerbeetle/scripts/vr_state_enumerate +0 -46
  41. package/src/tigerbeetle/src/benchmark.zig +0 -290
  42. package/src/tigerbeetle/src/cli.zig +0 -244
  43. package/src/tigerbeetle/src/config.zig +0 -239
  44. package/src/tigerbeetle/src/demo.zig +0 -125
  45. package/src/tigerbeetle/src/demo_01_create_accounts.zig +0 -35
  46. package/src/tigerbeetle/src/demo_02_lookup_accounts.zig +0 -7
  47. package/src/tigerbeetle/src/demo_03_create_transfers.zig +0 -24
  48. package/src/tigerbeetle/src/demo_04_create_pending_transfers.zig +0 -61
  49. package/src/tigerbeetle/src/demo_05_post_pending_transfers.zig +0 -37
  50. package/src/tigerbeetle/src/demo_06_void_pending_transfers.zig +0 -24
  51. package/src/tigerbeetle/src/demo_07_lookup_transfers.zig +0 -7
  52. package/src/tigerbeetle/src/fifo.zig +0 -104
  53. package/src/tigerbeetle/src/io/benchmark.zig +0 -213
  54. package/src/tigerbeetle/src/io/darwin.zig +0 -793
  55. package/src/tigerbeetle/src/io/linux.zig +0 -1038
  56. package/src/tigerbeetle/src/io/test.zig +0 -643
  57. package/src/tigerbeetle/src/io/windows.zig +0 -1161
  58. package/src/tigerbeetle/src/io.zig +0 -34
  59. package/src/tigerbeetle/src/main.zig +0 -144
  60. package/src/tigerbeetle/src/message_bus.zig +0 -1000
  61. package/src/tigerbeetle/src/message_pool.zig +0 -142
  62. package/src/tigerbeetle/src/ring_buffer.zig +0 -289
  63. package/src/tigerbeetle/src/simulator.zig +0 -417
  64. package/src/tigerbeetle/src/state_machine.zig +0 -2470
  65. package/src/tigerbeetle/src/storage.zig +0 -308
  66. package/src/tigerbeetle/src/test/cluster.zig +0 -351
  67. package/src/tigerbeetle/src/test/message_bus.zig +0 -93
  68. package/src/tigerbeetle/src/test/network.zig +0 -179
  69. package/src/tigerbeetle/src/test/packet_simulator.zig +0 -387
  70. package/src/tigerbeetle/src/test/state_checker.zig +0 -145
  71. package/src/tigerbeetle/src/test/state_machine.zig +0 -76
  72. package/src/tigerbeetle/src/test/storage.zig +0 -438
  73. package/src/tigerbeetle/src/test/time.zig +0 -84
  74. package/src/tigerbeetle/src/tigerbeetle.zig +0 -222
  75. package/src/tigerbeetle/src/time.zig +0 -113
  76. package/src/tigerbeetle/src/unit_tests.zig +0 -14
  77. package/src/tigerbeetle/src/vsr/client.zig +0 -505
  78. package/src/tigerbeetle/src/vsr/clock.zig +0 -812
  79. package/src/tigerbeetle/src/vsr/journal.zig +0 -2293
  80. package/src/tigerbeetle/src/vsr/marzullo.zig +0 -309
  81. package/src/tigerbeetle/src/vsr/replica.zig +0 -5015
  82. package/src/tigerbeetle/src/vsr.zig +0 -1017
  83. package/yarn.lock +0 -42
package/dist/benchmark.js CHANGED
@@ -13,36 +13,39 @@ const PREVIOUS_RAW_REQUEST_RESULT = IS_TWO_PHASE_TRANSFER ? 300000 : 620000;
13
13
  const PREVIOUS_RESULT = IS_TWO_PHASE_TRANSFER ? 150000 : 310000;
14
14
  const PREVIOUS_BENCHMARK = IS_RAW_REQUEST ? PREVIOUS_RAW_REQUEST_RESULT : PREVIOUS_RESULT;
15
15
  const TOLERANCE = 10;
16
- const client = _1.createClient({
16
+ const client = (0, _1.createClient)({
17
17
  cluster_id: 0,
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) => {
@@ -54,7 +57,7 @@ const rawCreateTransfers = async (batch) => {
54
57
  resolve(results);
55
58
  };
56
59
  try {
57
- client.rawRequest(_1.Operation.CREATE_TRANSFER, batch, callback);
60
+ client.rawRequest(_1.Operation.create_transfers, batch, callback);
58
61
  }
59
62
  catch (error) {
60
63
  reject(error);
@@ -62,22 +65,23 @@ const rawCreateTransfers = async (batch) => {
62
65
  });
63
66
  };
64
67
  const encodeTransfer = (transfer, offset, output) => {
65
- assert_1.default(BigInt((offset + TRANSFER_SIZE)) <= BigInt(output.length), `Transfer ${transfer} exceeds buffer of ${output}!`);
68
+ (0, assert_1.default)(BigInt((offset + TRANSFER_SIZE)) <= BigInt(output.length), `Transfer ${transfer} exceeds buffer of ${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.user_data, offset + 48);
70
- output.writeBigUInt64LE(transfer.reserved, offset + 64);
71
- output.writeBigUInt64LE(transfer.pending_id, offset + 80);
72
- output.writeBigUInt64LE(transfer.timeout, offset + 96);
73
- output.writeUInt32LE(transfer.ledger, offset + 104);
74
- output.writeUInt32LE(transfer.code, offset + 108);
75
- output.writeUInt32LE(transfer.flags, offset + 110);
76
- output.writeBigUInt64LE(transfer.amount, offset + 112);
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 () => {
80
- assert_1.default(MAX_TRANSFERS % MAX_REQUEST_BATCH_SIZE === 0, "The raw request benchmark requires MAX_TRANSFERS to be a multiple of MAX_REQUEST_BATCH_SIZE");
84
+ (0, assert_1.default)(MAX_TRANSFERS % MAX_REQUEST_BATCH_SIZE === 0, "The raw request benchmark requires MAX_TRANSFERS to be a multiple of MAX_REQUEST_BATCH_SIZE");
81
85
  console.log(`pre-allocating ${MAX_TRANSFERS} transfers and posts...`);
82
86
  const transfers = [];
83
87
  const posts = [];
@@ -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
- user_data: 0n,
97
- reserved: 0n,
100
+ amount: 1n,
98
101
  pending_id: 0n,
99
- timeout: IS_TWO_PHASE_TRANSFER ? BigInt(2e9) : 0n,
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
- user_data: 0n,
112
- reserved: 0n,
116
+ amount: 1n,
113
117
  pending_id: BigInt(count),
114
- timeout: 0n,
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
  }
@@ -126,7 +132,7 @@ const runBenchmarkRawRequest = async () => {
126
132
  if (count % 100)
127
133
  console.log(`${Number((count / MAX_TRANSFERS) * 100).toFixed(1)}%`);
128
134
  }
129
- assert_1.default(count === MAX_TRANSFERS);
135
+ (0, assert_1.default)(count === MAX_TRANSFERS);
130
136
  console.log(`starting benchmark. MAX_TRANSFERS=${MAX_TRANSFERS} REQUEST_BATCH_SIZE=${MAX_REQUEST_BATCH_SIZE} NUMBER_OF_BATCHES=${transfers.length}`);
131
137
  let maxCreateTransfersLatency = 0;
132
138
  let maxCommitTransfersLatency = 0;
@@ -134,7 +140,7 @@ const runBenchmarkRawRequest = async () => {
134
140
  for (let i = 0; i < transfers.length; i++) {
135
141
  const ms1 = Date.now();
136
142
  const transferErrors = await rawCreateTransfers(transfers[i]);
137
- assert_1.default(transferErrors.length === 0);
143
+ (0, assert_1.default)(transferErrors.length === 0);
138
144
  const ms2 = Date.now();
139
145
  const createTransferLatency = ms2 - ms1;
140
146
  if (createTransferLatency > maxCreateTransfersLatency) {
@@ -142,7 +148,7 @@ const runBenchmarkRawRequest = async () => {
142
148
  }
143
149
  if (IS_TWO_PHASE_TRANSFER) {
144
150
  const commitErrors = await rawCreateTransfers(posts[i]);
145
- assert_1.default(commitErrors.length === 0);
151
+ (0, assert_1.default)(commitErrors.length === 0);
146
152
  const ms3 = Date.now();
147
153
  const commitTransferLatency = ms3 - ms2;
148
154
  if (commitTransferLatency > maxCommitTransfersLatency) {
@@ -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
  }
@@ -204,7 +212,7 @@ const runBenchmark = async () => {
204
212
  if (IS_TWO_PHASE_TRANSFER)
205
213
  posts.push(postBatch);
206
214
  }
207
- assert_1.default(count === MAX_TRANSFERS);
215
+ (0, assert_1.default)(count === MAX_TRANSFERS);
208
216
  console.log(`starting benchmark. MAX_TRANSFERS=${MAX_TRANSFERS} REQUEST_BATCH_SIZE=${MAX_REQUEST_BATCH_SIZE} NUMBER_OF_BATCHES=${transfers.length}`);
209
217
  let maxCreateTransfersLatency = 0;
210
218
  let maxCommitTransfersLatency = 0;
@@ -212,7 +220,7 @@ const runBenchmark = async () => {
212
220
  for (let i = 0; i < transfers.length; i++) {
213
221
  const ms1 = Date.now();
214
222
  const transferErrors = await client.createTransfers(transfers[i]);
215
- assert_1.default(transferErrors.length === 0);
223
+ (0, assert_1.default)(transferErrors.length === 0);
216
224
  const ms2 = Date.now();
217
225
  const createTransferLatency = ms2 - ms1;
218
226
  if (createTransferLatency > maxCreateTransfersLatency) {
@@ -220,7 +228,7 @@ const runBenchmark = async () => {
220
228
  }
221
229
  if (IS_TWO_PHASE_TRANSFER) {
222
230
  const commitErrors = await client.createTransfers(posts[i]);
223
- assert_1.default(commitErrors.length === 0);
231
+ (0, assert_1.default)(commitErrors.length === 0);
224
232
  const ms3 = Date.now();
225
233
  const commitTransferLatency = ms3 - ms2;
226
234
  if (commitTransferLatency > maxCommitTransfersLatency) {
@@ -239,9 +247,9 @@ const main = async () => {
239
247
  console.log("creating the accounts...");
240
248
  await client.createAccounts([accountA, accountB]);
241
249
  const accountResults = await client.lookupAccounts([accountA.id, accountB.id]);
242
- assert_1.default(accountResults.length === 2);
243
- assert_1.default(accountResults[0].debits_posted === 0n);
244
- assert_1.default(accountResults[1].debits_posted === 0n);
250
+ (0, assert_1.default)(accountResults.length === 2);
251
+ (0, assert_1.default)(accountResults[0].debits_posted === 0n);
252
+ (0, assert_1.default)(accountResults[1].debits_posted === 0n);
245
253
  const benchmark = IS_RAW_REQUEST ? await runBenchmarkRawRequest() : await runBenchmark();
246
254
  const accounts = await client.lookupAccounts([accountA.id, accountB.id]);
247
255
  const result = Math.floor((1000 * MAX_TRANSFERS) / benchmark.ms);
@@ -249,9 +257,9 @@ const main = async () => {
249
257
  console.log(`${IS_TWO_PHASE_TRANSFER ? 'two-phase ' : ''}transfers per second: ${result}`);
250
258
  console.log(`create transfers max p100 latency per 10 000 transfers = ${benchmark.maxCreateTransfersLatency}ms`);
251
259
  console.log(`commit transfers max p100 latency per 10 000 transfers = ${benchmark.maxCommitTransfersLatency}ms`);
252
- assert_1.default(accounts.length === 2);
253
- assert_1.default(accounts[0].debits_posted === BigInt(MAX_TRANSFERS));
254
- assert_1.default(accounts[1].credits_posted === BigInt(MAX_TRANSFERS));
260
+ (0, assert_1.default)(accounts.length === 2);
261
+ (0, assert_1.default)(accounts[0].debits_posted === BigInt(MAX_TRANSFERS));
262
+ (0, assert_1.default)(accounts[1].credits_posted === BigInt(MAX_TRANSFERS));
255
263
  if (result < PREVIOUS_BENCHMARK * (100 - TOLERANCE) / 100) {
256
264
  console.warn(`There has been a performance regression. Previous benchmark=${PREVIOUS_BENCHMARK}`);
257
265
  }
@@ -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_TRANSFER, 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"]}
@@ -0,0 +1,141 @@
1
+ export declare enum AccountFlags {
2
+ none = 0,
3
+ linked = 1,
4
+ debits_must_not_exceed_credits = 2,
5
+ credits_must_not_exceed_debits = 4
6
+ }
7
+ export declare enum TransferFlags {
8
+ none = 0,
9
+ linked = 1,
10
+ pending = 2,
11
+ post_pending_transfer = 4,
12
+ void_pending_transfer = 8,
13
+ balancing_debit = 16,
14
+ balancing_credit = 32
15
+ }
16
+ export declare type Account = {
17
+ id: bigint;
18
+ debits_pending: bigint;
19
+ debits_posted: bigint;
20
+ credits_pending: bigint;
21
+ credits_posted: bigint;
22
+ user_data_128: bigint;
23
+ user_data_64: bigint;
24
+ user_data_32: number;
25
+ reserved: number;
26
+ ledger: number;
27
+ code: number;
28
+ flags: number;
29
+ timestamp: bigint;
30
+ };
31
+ export declare type Transfer = {
32
+ id: bigint;
33
+ debit_account_id: bigint;
34
+ credit_account_id: bigint;
35
+ amount: bigint;
36
+ pending_id: bigint;
37
+ user_data_128: bigint;
38
+ user_data_64: bigint;
39
+ user_data_32: number;
40
+ timeout: number;
41
+ ledger: number;
42
+ code: number;
43
+ flags: number;
44
+ timestamp: bigint;
45
+ };
46
+ export declare enum CreateAccountError {
47
+ ok = 0,
48
+ linked_event_failed = 1,
49
+ linked_event_chain_open = 2,
50
+ timestamp_must_be_zero = 3,
51
+ reserved_field = 4,
52
+ reserved_flag = 5,
53
+ id_must_not_be_zero = 6,
54
+ id_must_not_be_int_max = 7,
55
+ flags_are_mutually_exclusive = 8,
56
+ debits_pending_must_be_zero = 9,
57
+ debits_posted_must_be_zero = 10,
58
+ credits_pending_must_be_zero = 11,
59
+ credits_posted_must_be_zero = 12,
60
+ ledger_must_not_be_zero = 13,
61
+ code_must_not_be_zero = 14,
62
+ exists_with_different_flags = 15,
63
+ exists_with_different_user_data_128 = 16,
64
+ exists_with_different_user_data_64 = 17,
65
+ exists_with_different_user_data_32 = 18,
66
+ exists_with_different_ledger = 19,
67
+ exists_with_different_code = 20,
68
+ exists = 21
69
+ }
70
+ export declare enum CreateTransferError {
71
+ ok = 0,
72
+ linked_event_failed = 1,
73
+ linked_event_chain_open = 2,
74
+ timestamp_must_be_zero = 3,
75
+ reserved_flag = 4,
76
+ id_must_not_be_zero = 5,
77
+ id_must_not_be_int_max = 6,
78
+ flags_are_mutually_exclusive = 7,
79
+ debit_account_id_must_not_be_zero = 8,
80
+ debit_account_id_must_not_be_int_max = 9,
81
+ credit_account_id_must_not_be_zero = 10,
82
+ credit_account_id_must_not_be_int_max = 11,
83
+ accounts_must_be_different = 12,
84
+ pending_id_must_be_zero = 13,
85
+ pending_id_must_not_be_zero = 14,
86
+ pending_id_must_not_be_int_max = 15,
87
+ pending_id_must_be_different = 16,
88
+ timeout_reserved_for_pending_transfer = 17,
89
+ amount_must_not_be_zero = 18,
90
+ ledger_must_not_be_zero = 19,
91
+ code_must_not_be_zero = 20,
92
+ debit_account_not_found = 21,
93
+ credit_account_not_found = 22,
94
+ accounts_must_have_the_same_ledger = 23,
95
+ transfer_must_have_the_same_ledger_as_accounts = 24,
96
+ pending_transfer_not_found = 25,
97
+ pending_transfer_not_pending = 26,
98
+ pending_transfer_has_different_debit_account_id = 27,
99
+ pending_transfer_has_different_credit_account_id = 28,
100
+ pending_transfer_has_different_ledger = 29,
101
+ pending_transfer_has_different_code = 30,
102
+ exceeds_pending_transfer_amount = 31,
103
+ pending_transfer_has_different_amount = 32,
104
+ pending_transfer_already_posted = 33,
105
+ pending_transfer_already_voided = 34,
106
+ pending_transfer_expired = 35,
107
+ exists_with_different_flags = 36,
108
+ exists_with_different_debit_account_id = 37,
109
+ exists_with_different_credit_account_id = 38,
110
+ exists_with_different_amount = 39,
111
+ exists_with_different_pending_id = 40,
112
+ exists_with_different_user_data_128 = 41,
113
+ exists_with_different_user_data_64 = 42,
114
+ exists_with_different_user_data_32 = 43,
115
+ exists_with_different_timeout = 44,
116
+ exists_with_different_code = 45,
117
+ exists = 46,
118
+ overflows_debits_pending = 47,
119
+ overflows_credits_pending = 48,
120
+ overflows_debits_posted = 49,
121
+ overflows_credits_posted = 50,
122
+ overflows_debits = 51,
123
+ overflows_credits = 52,
124
+ overflows_timeout = 53,
125
+ exceeds_credits = 54,
126
+ exceeds_debits = 55
127
+ }
128
+ export declare type CreateAccountsError = {
129
+ index: number;
130
+ result: CreateAccountError;
131
+ };
132
+ export declare type CreateTransfersError = {
133
+ index: number;
134
+ result: CreateTransferError;
135
+ };
136
+ export declare enum Operation {
137
+ create_accounts = 128,
138
+ create_transfers = 129,
139
+ lookup_accounts = 130,
140
+ lookup_transfers = 131
141
+ }
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Operation = exports.CreateTransferError = exports.CreateAccountError = exports.TransferFlags = exports.AccountFlags = void 0;
4
+ var AccountFlags;
5
+ (function (AccountFlags) {
6
+ AccountFlags[AccountFlags["none"] = 0] = "none";
7
+ AccountFlags[AccountFlags["linked"] = 1] = "linked";
8
+ AccountFlags[AccountFlags["debits_must_not_exceed_credits"] = 2] = "debits_must_not_exceed_credits";
9
+ AccountFlags[AccountFlags["credits_must_not_exceed_debits"] = 4] = "credits_must_not_exceed_debits";
10
+ })(AccountFlags = exports.AccountFlags || (exports.AccountFlags = {}));
11
+ var TransferFlags;
12
+ (function (TransferFlags) {
13
+ TransferFlags[TransferFlags["none"] = 0] = "none";
14
+ TransferFlags[TransferFlags["linked"] = 1] = "linked";
15
+ TransferFlags[TransferFlags["pending"] = 2] = "pending";
16
+ TransferFlags[TransferFlags["post_pending_transfer"] = 4] = "post_pending_transfer";
17
+ TransferFlags[TransferFlags["void_pending_transfer"] = 8] = "void_pending_transfer";
18
+ TransferFlags[TransferFlags["balancing_debit"] = 16] = "balancing_debit";
19
+ TransferFlags[TransferFlags["balancing_credit"] = 32] = "balancing_credit";
20
+ })(TransferFlags = exports.TransferFlags || (exports.TransferFlags = {}));
21
+ var CreateAccountError;
22
+ (function (CreateAccountError) {
23
+ CreateAccountError[CreateAccountError["ok"] = 0] = "ok";
24
+ CreateAccountError[CreateAccountError["linked_event_failed"] = 1] = "linked_event_failed";
25
+ CreateAccountError[CreateAccountError["linked_event_chain_open"] = 2] = "linked_event_chain_open";
26
+ CreateAccountError[CreateAccountError["timestamp_must_be_zero"] = 3] = "timestamp_must_be_zero";
27
+ CreateAccountError[CreateAccountError["reserved_field"] = 4] = "reserved_field";
28
+ CreateAccountError[CreateAccountError["reserved_flag"] = 5] = "reserved_flag";
29
+ CreateAccountError[CreateAccountError["id_must_not_be_zero"] = 6] = "id_must_not_be_zero";
30
+ CreateAccountError[CreateAccountError["id_must_not_be_int_max"] = 7] = "id_must_not_be_int_max";
31
+ CreateAccountError[CreateAccountError["flags_are_mutually_exclusive"] = 8] = "flags_are_mutually_exclusive";
32
+ CreateAccountError[CreateAccountError["debits_pending_must_be_zero"] = 9] = "debits_pending_must_be_zero";
33
+ CreateAccountError[CreateAccountError["debits_posted_must_be_zero"] = 10] = "debits_posted_must_be_zero";
34
+ CreateAccountError[CreateAccountError["credits_pending_must_be_zero"] = 11] = "credits_pending_must_be_zero";
35
+ CreateAccountError[CreateAccountError["credits_posted_must_be_zero"] = 12] = "credits_posted_must_be_zero";
36
+ CreateAccountError[CreateAccountError["ledger_must_not_be_zero"] = 13] = "ledger_must_not_be_zero";
37
+ CreateAccountError[CreateAccountError["code_must_not_be_zero"] = 14] = "code_must_not_be_zero";
38
+ CreateAccountError[CreateAccountError["exists_with_different_flags"] = 15] = "exists_with_different_flags";
39
+ CreateAccountError[CreateAccountError["exists_with_different_user_data_128"] = 16] = "exists_with_different_user_data_128";
40
+ CreateAccountError[CreateAccountError["exists_with_different_user_data_64"] = 17] = "exists_with_different_user_data_64";
41
+ CreateAccountError[CreateAccountError["exists_with_different_user_data_32"] = 18] = "exists_with_different_user_data_32";
42
+ CreateAccountError[CreateAccountError["exists_with_different_ledger"] = 19] = "exists_with_different_ledger";
43
+ CreateAccountError[CreateAccountError["exists_with_different_code"] = 20] = "exists_with_different_code";
44
+ CreateAccountError[CreateAccountError["exists"] = 21] = "exists";
45
+ })(CreateAccountError = exports.CreateAccountError || (exports.CreateAccountError = {}));
46
+ var CreateTransferError;
47
+ (function (CreateTransferError) {
48
+ CreateTransferError[CreateTransferError["ok"] = 0] = "ok";
49
+ CreateTransferError[CreateTransferError["linked_event_failed"] = 1] = "linked_event_failed";
50
+ CreateTransferError[CreateTransferError["linked_event_chain_open"] = 2] = "linked_event_chain_open";
51
+ CreateTransferError[CreateTransferError["timestamp_must_be_zero"] = 3] = "timestamp_must_be_zero";
52
+ CreateTransferError[CreateTransferError["reserved_flag"] = 4] = "reserved_flag";
53
+ CreateTransferError[CreateTransferError["id_must_not_be_zero"] = 5] = "id_must_not_be_zero";
54
+ CreateTransferError[CreateTransferError["id_must_not_be_int_max"] = 6] = "id_must_not_be_int_max";
55
+ CreateTransferError[CreateTransferError["flags_are_mutually_exclusive"] = 7] = "flags_are_mutually_exclusive";
56
+ CreateTransferError[CreateTransferError["debit_account_id_must_not_be_zero"] = 8] = "debit_account_id_must_not_be_zero";
57
+ CreateTransferError[CreateTransferError["debit_account_id_must_not_be_int_max"] = 9] = "debit_account_id_must_not_be_int_max";
58
+ CreateTransferError[CreateTransferError["credit_account_id_must_not_be_zero"] = 10] = "credit_account_id_must_not_be_zero";
59
+ CreateTransferError[CreateTransferError["credit_account_id_must_not_be_int_max"] = 11] = "credit_account_id_must_not_be_int_max";
60
+ CreateTransferError[CreateTransferError["accounts_must_be_different"] = 12] = "accounts_must_be_different";
61
+ CreateTransferError[CreateTransferError["pending_id_must_be_zero"] = 13] = "pending_id_must_be_zero";
62
+ CreateTransferError[CreateTransferError["pending_id_must_not_be_zero"] = 14] = "pending_id_must_not_be_zero";
63
+ CreateTransferError[CreateTransferError["pending_id_must_not_be_int_max"] = 15] = "pending_id_must_not_be_int_max";
64
+ CreateTransferError[CreateTransferError["pending_id_must_be_different"] = 16] = "pending_id_must_be_different";
65
+ CreateTransferError[CreateTransferError["timeout_reserved_for_pending_transfer"] = 17] = "timeout_reserved_for_pending_transfer";
66
+ CreateTransferError[CreateTransferError["amount_must_not_be_zero"] = 18] = "amount_must_not_be_zero";
67
+ CreateTransferError[CreateTransferError["ledger_must_not_be_zero"] = 19] = "ledger_must_not_be_zero";
68
+ CreateTransferError[CreateTransferError["code_must_not_be_zero"] = 20] = "code_must_not_be_zero";
69
+ CreateTransferError[CreateTransferError["debit_account_not_found"] = 21] = "debit_account_not_found";
70
+ CreateTransferError[CreateTransferError["credit_account_not_found"] = 22] = "credit_account_not_found";
71
+ CreateTransferError[CreateTransferError["accounts_must_have_the_same_ledger"] = 23] = "accounts_must_have_the_same_ledger";
72
+ CreateTransferError[CreateTransferError["transfer_must_have_the_same_ledger_as_accounts"] = 24] = "transfer_must_have_the_same_ledger_as_accounts";
73
+ CreateTransferError[CreateTransferError["pending_transfer_not_found"] = 25] = "pending_transfer_not_found";
74
+ CreateTransferError[CreateTransferError["pending_transfer_not_pending"] = 26] = "pending_transfer_not_pending";
75
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_debit_account_id"] = 27] = "pending_transfer_has_different_debit_account_id";
76
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_credit_account_id"] = 28] = "pending_transfer_has_different_credit_account_id";
77
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_ledger"] = 29] = "pending_transfer_has_different_ledger";
78
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_code"] = 30] = "pending_transfer_has_different_code";
79
+ CreateTransferError[CreateTransferError["exceeds_pending_transfer_amount"] = 31] = "exceeds_pending_transfer_amount";
80
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_amount"] = 32] = "pending_transfer_has_different_amount";
81
+ CreateTransferError[CreateTransferError["pending_transfer_already_posted"] = 33] = "pending_transfer_already_posted";
82
+ CreateTransferError[CreateTransferError["pending_transfer_already_voided"] = 34] = "pending_transfer_already_voided";
83
+ CreateTransferError[CreateTransferError["pending_transfer_expired"] = 35] = "pending_transfer_expired";
84
+ CreateTransferError[CreateTransferError["exists_with_different_flags"] = 36] = "exists_with_different_flags";
85
+ CreateTransferError[CreateTransferError["exists_with_different_debit_account_id"] = 37] = "exists_with_different_debit_account_id";
86
+ CreateTransferError[CreateTransferError["exists_with_different_credit_account_id"] = 38] = "exists_with_different_credit_account_id";
87
+ CreateTransferError[CreateTransferError["exists_with_different_amount"] = 39] = "exists_with_different_amount";
88
+ CreateTransferError[CreateTransferError["exists_with_different_pending_id"] = 40] = "exists_with_different_pending_id";
89
+ CreateTransferError[CreateTransferError["exists_with_different_user_data_128"] = 41] = "exists_with_different_user_data_128";
90
+ CreateTransferError[CreateTransferError["exists_with_different_user_data_64"] = 42] = "exists_with_different_user_data_64";
91
+ CreateTransferError[CreateTransferError["exists_with_different_user_data_32"] = 43] = "exists_with_different_user_data_32";
92
+ CreateTransferError[CreateTransferError["exists_with_different_timeout"] = 44] = "exists_with_different_timeout";
93
+ CreateTransferError[CreateTransferError["exists_with_different_code"] = 45] = "exists_with_different_code";
94
+ CreateTransferError[CreateTransferError["exists"] = 46] = "exists";
95
+ CreateTransferError[CreateTransferError["overflows_debits_pending"] = 47] = "overflows_debits_pending";
96
+ CreateTransferError[CreateTransferError["overflows_credits_pending"] = 48] = "overflows_credits_pending";
97
+ CreateTransferError[CreateTransferError["overflows_debits_posted"] = 49] = "overflows_debits_posted";
98
+ CreateTransferError[CreateTransferError["overflows_credits_posted"] = 50] = "overflows_credits_posted";
99
+ CreateTransferError[CreateTransferError["overflows_debits"] = 51] = "overflows_debits";
100
+ CreateTransferError[CreateTransferError["overflows_credits"] = 52] = "overflows_credits";
101
+ CreateTransferError[CreateTransferError["overflows_timeout"] = 53] = "overflows_timeout";
102
+ CreateTransferError[CreateTransferError["exceeds_credits"] = 54] = "exceeds_credits";
103
+ CreateTransferError[CreateTransferError["exceeds_debits"] = 55] = "exceeds_debits";
104
+ })(CreateTransferError = exports.CreateTransferError || (exports.CreateTransferError = {}));
105
+ var Operation;
106
+ (function (Operation) {
107
+ Operation[Operation["create_accounts"] = 128] = "create_accounts";
108
+ Operation[Operation["create_transfers"] = 129] = "create_transfers";
109
+ Operation[Operation["lookup_accounts"] = 130] = "lookup_accounts";
110
+ Operation[Operation["lookup_transfers"] = 131] = "lookup_transfers";
111
+ })(Operation = exports.Operation || (exports.Operation = {}));
112
+ //# sourceMappingURL=bindings.js.map