@xelis/sdk 0.11.44 → 0.12.1

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 (43) hide show
  1. package/dist/cjs/address/index.spec.js +34 -0
  2. package/dist/cjs/daemon/rpc.js +17 -2
  3. package/dist/cjs/daemon/rpc.spec.js +640 -0
  4. package/dist/cjs/daemon/types.js +8 -3
  5. package/dist/cjs/daemon/websocket.js +16 -1
  6. package/dist/cjs/daemon/websocket.spec.js +103 -0
  7. package/dist/cjs/data/element.spec.js +67 -0
  8. package/dist/cjs/rpc/parse_json/parse_json.spec.js +24 -0
  9. package/dist/cjs/wallet/rpc.js +24 -0
  10. package/dist/cjs/wallet/rpc.spec.js +270 -0
  11. package/dist/cjs/wallet/types.js +10 -1
  12. package/dist/cjs/wallet/websocket.js +26 -2
  13. package/dist/cjs/wallet/websocket.spec.js +20 -0
  14. package/dist/cjs/xswd/websocket.spec.js +34 -0
  15. package/dist/esm/address/index.spec.js +29 -0
  16. package/dist/esm/daemon/rpc.js +17 -2
  17. package/dist/esm/daemon/rpc.spec.js +635 -0
  18. package/dist/esm/daemon/types.js +8 -3
  19. package/dist/esm/daemon/websocket.js +16 -1
  20. package/dist/esm/daemon/websocket.spec.js +98 -0
  21. package/dist/esm/data/element.spec.js +65 -0
  22. package/dist/esm/rpc/parse_json/parse_json.spec.js +19 -0
  23. package/dist/esm/wallet/rpc.js +24 -0
  24. package/dist/esm/wallet/rpc.spec.js +265 -0
  25. package/dist/esm/wallet/types.js +10 -1
  26. package/dist/esm/wallet/websocket.js +26 -2
  27. package/dist/esm/wallet/websocket.spec.js +15 -0
  28. package/dist/esm/xswd/websocket.spec.js +29 -0
  29. package/dist/types/address/index.spec.d.ts +1 -0
  30. package/dist/types/daemon/rpc.d.ts +7 -2
  31. package/dist/types/daemon/rpc.spec.d.ts +1 -0
  32. package/dist/types/daemon/types.d.ts +56 -4
  33. package/dist/types/daemon/websocket.d.ts +8 -9
  34. package/dist/types/daemon/websocket.spec.d.ts +1 -0
  35. package/dist/types/data/element.spec.d.ts +1 -0
  36. package/dist/types/rpc/parse_json/parse_json.spec.d.ts +1 -0
  37. package/dist/types/wallet/rpc.d.ts +8 -0
  38. package/dist/types/wallet/rpc.spec.d.ts +1 -0
  39. package/dist/types/wallet/types.d.ts +46 -1
  40. package/dist/types/wallet/websocket.d.ts +12 -0
  41. package/dist/types/wallet/websocket.spec.d.ts +1 -0
  42. package/dist/types/xswd/websocket.spec.d.ts +1 -0
  43. package/package.json +1 -1
@@ -0,0 +1,635 @@
1
+ import { to } from 'await-to-js';
2
+ import { MAINNET_NODE_RPC } from '../config.js';
3
+ import DaemonRPC from './rpc.js';
4
+ describe('DaemonRPC', () => {
5
+ const daemon = new DaemonRPC(MAINNET_NODE_RPC);
6
+ let realAddress;
7
+ let realContract;
8
+ let realBlockHash;
9
+ beforeAll(async () => {
10
+ // Fetch real data from the daemon for dependent tests
11
+ const [err1, accounts] = await to(daemon.getAccounts({ maximum: 1 }));
12
+ if (!err1 && accounts && accounts.length > 0) {
13
+ realAddress = accounts[0];
14
+ }
15
+ const [err2, contracts] = await to(daemon.getContracts({ maximum: 1 }));
16
+ if (!err2 && contracts && contracts.length > 0) {
17
+ realContract = contracts[0];
18
+ }
19
+ const [err3, topBlock] = await to(daemon.getTopBlock());
20
+ if (!err3 && topBlock) {
21
+ realBlockHash = topBlock.hash;
22
+ }
23
+ });
24
+ test('getVersion', async () => {
25
+ const [err, res] = await to(daemon.getVersion());
26
+ expect(err).toBeNull();
27
+ expect(res).toBeDefined();
28
+ console.log('Version:', res);
29
+ });
30
+ test('getHeight', async () => {
31
+ const [err, res] = await to(daemon.getHeight());
32
+ expect(err).toBeNull();
33
+ expect(res).toBeGreaterThan(0);
34
+ console.log('Height:', res);
35
+ });
36
+ test('getTopoheight', async () => {
37
+ const [err, res] = await to(daemon.getTopoheight());
38
+ expect(err).toBeNull();
39
+ expect(res).toBeGreaterThan(0);
40
+ console.log('Topoheight:', res);
41
+ });
42
+ test('getPrunedTopoheight', async () => {
43
+ const [err, res] = await to(daemon.getPrunedTopoheight());
44
+ expect(err).toBeNull();
45
+ console.log('Pruned topoheight:', res);
46
+ });
47
+ test('getInfo', async () => {
48
+ const [err, res] = await to(daemon.getInfo());
49
+ expect(err).toBeNull();
50
+ expect(res).toBeDefined();
51
+ expect(res.height).toBeGreaterThan(0);
52
+ expect(res.version).toBeDefined();
53
+ console.log('Info:', res);
54
+ });
55
+ test('getDifficulty', async () => {
56
+ const [err, res] = await to(daemon.getDifficulty());
57
+ expect(err).toBeNull();
58
+ expect(res).toBeDefined();
59
+ expect(res.difficulty).toBeDefined();
60
+ console.log('Difficulty:', res);
61
+ });
62
+ test('getTips', async () => {
63
+ const [err, res] = await to(daemon.getTips());
64
+ expect(err).toBeNull();
65
+ expect(Array.isArray(res)).toBe(true);
66
+ console.log('Tips count:', res?.length);
67
+ });
68
+ test('getDevFeeThresholds', async () => {
69
+ const [err, res] = await to(daemon.getDevFeeThresholds());
70
+ expect(err).toBeNull();
71
+ expect(Array.isArray(res)).toBe(true);
72
+ console.log('Dev fee thresholds:', res);
73
+ });
74
+ test('getSizeOnDisk', async () => {
75
+ const [err, res] = await to(daemon.getSizeOnDisk());
76
+ expect(err).toBeNull();
77
+ expect(res).toBeDefined();
78
+ expect(res.size_bytes).toBeGreaterThan(0);
79
+ console.log('Size on disk:', res);
80
+ });
81
+ test('getStableHeight', async () => {
82
+ const [err, res] = await to(daemon.getStableHeight());
83
+ expect(err).toBeNull();
84
+ expect(res).toBeGreaterThan(0);
85
+ console.log('Stable height:', res);
86
+ });
87
+ test('getStableTopoheight', async () => {
88
+ const [err, res] = await to(daemon.getStableTopoheight());
89
+ expect(err).toBeNull();
90
+ expect(res).toBeGreaterThan(0);
91
+ console.log('Stable topoheight:', res);
92
+ });
93
+ test('getHardForks', async () => {
94
+ const [err, res] = await to(daemon.getHardForks());
95
+ expect(err).toBeNull();
96
+ expect(Array.isArray(res)).toBe(true);
97
+ console.log('Hard forks:', res);
98
+ });
99
+ test('getTopBlock', async () => {
100
+ const [err, res] = await to(daemon.getTopBlock());
101
+ expect(err).toBeNull();
102
+ expect(res).toBeDefined();
103
+ expect(res.hash).toBeDefined();
104
+ console.log('Top block:', res.hash);
105
+ });
106
+ test('getTopBlock with txs', async () => {
107
+ const [err, res] = await to(daemon.getTopBlock({ include_txs: true }));
108
+ expect(err).toBeNull();
109
+ expect(res).toBeDefined();
110
+ expect(res.transactions).toBeDefined();
111
+ console.log('Top block txs:', res.transactions?.length);
112
+ });
113
+ test('getAssets', async () => {
114
+ const [err, res] = await to(daemon.getAssets({ maximum: 5 }));
115
+ expect(err).toBeNull();
116
+ expect(Array.isArray(res)).toBe(true);
117
+ console.log('Assets:', res);
118
+ });
119
+ test('countAssets', async () => {
120
+ const [err, res] = await to(daemon.countAssets());
121
+ expect(err).toBeNull();
122
+ expect(res).toBeGreaterThan(0);
123
+ console.log('Asset count:', res);
124
+ });
125
+ test('countTransactions', async () => {
126
+ const [err, res] = await to(daemon.countTransactions());
127
+ expect(err).toBeNull();
128
+ expect(res).toBeGreaterThan(0);
129
+ console.log('Tx count:', res);
130
+ });
131
+ test('countAccounts', async () => {
132
+ const [err, res] = await to(daemon.countAccounts());
133
+ expect(err).toBeNull();
134
+ expect(res).toBeGreaterThan(0);
135
+ console.log('Account count:', res);
136
+ });
137
+ test('countContracts', async () => {
138
+ const [err, res] = await to(daemon.countContracts());
139
+ expect(err).toBeNull();
140
+ expect(res).toBeGreaterThanOrEqual(0);
141
+ console.log('Contract count:', res);
142
+ });
143
+ test('p2pStatus', async () => {
144
+ const [err, res] = await to(daemon.p2pStatus());
145
+ expect(err).toBeNull();
146
+ expect(res).toBeDefined();
147
+ expect(res.peer_count).toBeGreaterThanOrEqual(0);
148
+ console.log('P2P status:', res);
149
+ });
150
+ test('getPeers', async () => {
151
+ const [err, res] = await to(daemon.getPeers());
152
+ expect(err).toBeNull();
153
+ expect(res).toBeDefined();
154
+ expect(res.total_peers).toBeGreaterThanOrEqual(0);
155
+ console.log('Peers:', res);
156
+ });
157
+ test('getMempool', async () => {
158
+ const [err, res] = await to(daemon.getMemPool({ maximum: 5 }));
159
+ expect(err).toBeNull();
160
+ expect(res).toBeDefined();
161
+ console.log('Mempool total:', res?.total);
162
+ });
163
+ test('getMempoolSummary', async () => {
164
+ const [err, res] = await to(daemon.getMempoolSummary({ maximum: 5 }));
165
+ expect(err).toBeNull();
166
+ expect(res).toBeDefined();
167
+ console.log('Mempool summary total:', res?.total);
168
+ });
169
+ test('getEstimatedFeeRates', async () => {
170
+ const [err, res] = await to(daemon.getEstimatedFeeRates());
171
+ expect(err).toBeNull();
172
+ expect(res).toBeDefined();
173
+ expect(res.low).toBeGreaterThan(0);
174
+ console.log('Fee rates:', res);
175
+ });
176
+ test('getEstimatedFeePerKB', async () => {
177
+ const [err, res] = await to(daemon.getEstimatedFeePerKB());
178
+ expect(err).toBeNull();
179
+ expect(res).toBeDefined();
180
+ expect(res.fee_per_kb).toBeGreaterThan(0);
181
+ console.log('Fee per KB:', res);
182
+ });
183
+ test('getDAGOrder', async () => {
184
+ const [err, res] = await to(daemon.getDAGOrder({ start_topoheight: 0, end_topoheight: 10 }));
185
+ expect(err).toBeNull();
186
+ expect(Array.isArray(res)).toBe(true);
187
+ console.log('DAG order count:', res?.length);
188
+ });
189
+ test('getBlocksRangeByTopoheight', async () => {
190
+ const [err, res] = await to(daemon.getBlocksRangeByTopoheight({ start_topoheight: 0, end_topoheight: 2 }));
191
+ expect(err).toBeNull();
192
+ expect(Array.isArray(res)).toBe(true);
193
+ console.log('Blocks by topoheight count:', res?.length);
194
+ });
195
+ test('getBlocksRangeByHeight', async () => {
196
+ const [err, res] = await to(daemon.getBlocksRangeByHeight({ start_height: 0, end_height: 2 }));
197
+ expect(err).toBeNull();
198
+ expect(Array.isArray(res)).toBe(true);
199
+ console.log('Blocks by height count:', res?.length);
200
+ });
201
+ test('getAccounts', async () => {
202
+ const [err, res] = await to(daemon.getAccounts({ maximum: 5 }));
203
+ expect(err).toBeNull();
204
+ expect(Array.isArray(res)).toBe(true);
205
+ console.log('Accounts:', res);
206
+ });
207
+ test('validateAddress', async () => {
208
+ // Skip if no real address available
209
+ if (!realAddress) {
210
+ console.log('Skipping: no real address available');
211
+ return;
212
+ }
213
+ const [err, res] = await to(daemon.validateAddress({ address: realAddress, allow_integrated: false }));
214
+ expect(err).toBeNull();
215
+ expect(res).toBeDefined();
216
+ console.log('Validate address:', res);
217
+ });
218
+ test('getContractTransactions', async () => {
219
+ // Skip if no real contract available
220
+ if (!realContract) {
221
+ console.log('Skipping: no real contract available');
222
+ return;
223
+ }
224
+ const [err, res] = await to(daemon.getContractTransactions({ contract: realContract, maximum: 5 }));
225
+ expect(err).toBeNull();
226
+ expect(res).toBeDefined();
227
+ console.log('Contract transactions:', res);
228
+ });
229
+ test('simulateContractInvoke', async () => {
230
+ const [err, res] = await to(daemon.simulateContractInvoke({
231
+ source: realAddress || 'xel:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqp5uek2',
232
+ contract: realContract || '0000000000000000000000000000000000000000000000000000000000000000',
233
+ deposits: {},
234
+ entry_id: 0,
235
+ parameters: []
236
+ }));
237
+ // simulate may fail if entry doesn't exist, but we should get a response
238
+ console.log('Simulate result:', err, res);
239
+ });
240
+ test('getBlockAtTopoheight', async () => {
241
+ const [err, res] = await to(daemon.getBlockAtTopoheight({ topoheight: 0 }));
242
+ expect(err).toBeNull();
243
+ expect(res).toBeDefined();
244
+ expect(res.hash).toBeDefined();
245
+ console.log('Block at topoheight 0:', res.hash);
246
+ });
247
+ test('getBlocksAtHeight', async () => {
248
+ const [err, res] = await to(daemon.getBlocksAtHeight({ height: 0 }));
249
+ expect(err).toBeNull();
250
+ expect(Array.isArray(res)).toBe(true);
251
+ console.log('Blocks at height 0:', res?.length);
252
+ });
253
+ test('getBlockByHash', async () => {
254
+ const [err1, topBlock] = await to(daemon.getTopBlock());
255
+ expect(err1).toBeNull();
256
+ expect(topBlock).toBeDefined();
257
+ const [err2, res] = await to(daemon.getBlockByHash({ hash: topBlock.hash }));
258
+ expect(err2).toBeNull();
259
+ expect(res).toBeDefined();
260
+ expect(res.hash).toBe(topBlock.hash);
261
+ console.log('Block by hash:', res.hash);
262
+ });
263
+ test('getBlockDifficultyByHash', async () => {
264
+ const [err1, topBlock] = await to(daemon.getTopBlock());
265
+ expect(err1).toBeNull();
266
+ const [err2, res] = await to(daemon.getBlockDifficultyByHash({ block_hash: topBlock.hash }));
267
+ expect(err2).toBeNull();
268
+ expect(res).toBeDefined();
269
+ console.log('Block difficulty:', res);
270
+ });
271
+ test('getBlockBaseFeeByHash', async () => {
272
+ const [err1, topBlock] = await to(daemon.getTopBlock());
273
+ expect(err1).toBeNull();
274
+ const [err2, res] = await to(daemon.getBlockBaseFeeByHash({ block_hash: topBlock.hash }));
275
+ expect(err2).toBeNull();
276
+ expect(res).toBeDefined();
277
+ console.log('Block base fee:', res);
278
+ });
279
+ test('getBlockSummaryAtTopoheight', async () => {
280
+ const [err, res] = await to(daemon.getBlockSummaryAtTopoheight({ topoheight: 0 }));
281
+ expect(err).toBeNull();
282
+ expect(res).toBeDefined();
283
+ console.log('Block summary at topoheight 0:', res);
284
+ });
285
+ test('getBlockSummaryByHash', async () => {
286
+ const [err1, topBlock] = await to(daemon.getTopBlock());
287
+ expect(err1).toBeNull();
288
+ const [err2, res] = await to(daemon.getBlockSummaryByHash({ hash: topBlock.hash }));
289
+ expect(err2).toBeNull();
290
+ expect(res).toBeDefined();
291
+ console.log('Block summary by hash:', res);
292
+ });
293
+ test('getAsset', async () => {
294
+ const [err, res] = await to(daemon.getAsset({ asset: '0000000000000000000000000000000000000000000000000000000000000000' }));
295
+ expect(err).toBeNull();
296
+ expect(res).toBeDefined();
297
+ console.log('XELIS asset:', res);
298
+ });
299
+ test('getAssetSupply', async () => {
300
+ const [err, res] = await to(daemon.getAssetSupply({ asset: '0000000000000000000000000000000000000000000000000000000000000000' }));
301
+ expect(err).toBeNull();
302
+ expect(res).toBeDefined();
303
+ expect(res.data).toBeGreaterThan(0);
304
+ console.log('XELIS supply:', res);
305
+ });
306
+ test('getAssetSupplyAtTopoheight', async () => {
307
+ const [err, res] = await to(daemon.getAssetSupplyAtTopoheight({ asset: '0000000000000000000000000000000000000000000000000000000000000000', topoheight: 0 }));
308
+ expect(err).toBeNull();
309
+ expect(res).toBeDefined();
310
+ console.log('XELIS supply at topoheight 0:', res);
311
+ });
312
+ test('getContractModule', async () => {
313
+ if (!realContract) {
314
+ console.log('Skipping: no real contract available');
315
+ return;
316
+ }
317
+ const [err, res] = await to(daemon.getContractModule({ contract: realContract }));
318
+ // Module may not be available for all contracts
319
+ console.log('Contract module:', err, res);
320
+ });
321
+ test('getContractData', async () => {
322
+ if (!realContract) {
323
+ console.log('Skipping: no real contract available');
324
+ return;
325
+ }
326
+ const [err, res] = await to(daemon.getContractData({ contract: realContract, key: '0' }));
327
+ // May fail if key doesn't exist
328
+ console.log('Contract data:', err, res);
329
+ });
330
+ test('getContractDataAtTopoheight', async () => {
331
+ if (!realContract) {
332
+ console.log('Skipping: no real contract available');
333
+ return;
334
+ }
335
+ const [err, res] = await to(daemon.getContractDataAtTopoheight({ contract: realContract, key: '0', topoheight: 0 }));
336
+ console.log('Contract data at topoheight:', err, res);
337
+ });
338
+ test('getContractBalance', async () => {
339
+ if (!realContract) {
340
+ console.log('Skipping: no real contract available');
341
+ return;
342
+ }
343
+ const [err, res] = await to(daemon.getContractBalance({ contract: realContract, asset: '0000000000000000000000000000000000000000000000000000000000000000' }));
344
+ expect(err).toBeNull();
345
+ expect(res).toBeDefined();
346
+ console.log('Contract balance:', res);
347
+ });
348
+ test('getContractBalanceAtTopoheight', async () => {
349
+ if (!realContract) {
350
+ console.log('Skipping: no real contract available');
351
+ return;
352
+ }
353
+ const [errTopo, topoheight] = await to(daemon.getTopoheight());
354
+ if (errTopo || !topoheight) {
355
+ console.log('Skipping: cannot get topoheight');
356
+ return;
357
+ }
358
+ const [err, res] = await to(daemon.getContractBalanceAtTopoheight({ contract: realContract, asset: '0000000000000000000000000000000000000000000000000000000000000000', topoheight }));
359
+ if (err) {
360
+ console.log('Contract balance at topoheight (soft fail):', err.message);
361
+ return;
362
+ }
363
+ expect(err).toBeNull();
364
+ expect(res).toBeDefined();
365
+ console.log('Contract balance at topoheight:', res);
366
+ });
367
+ test('getContractAssets', async () => {
368
+ if (!realContract) {
369
+ console.log('Skipping: no real contract available');
370
+ return;
371
+ }
372
+ const [err, res] = await to(daemon.getContractAssets({ contract: realContract }));
373
+ expect(err).toBeNull();
374
+ expect(Array.isArray(res)).toBe(true);
375
+ console.log('Contract assets:', res);
376
+ });
377
+ test('getContracts', async () => {
378
+ const [err, res] = await to(daemon.getContracts({ maximum: 5 }));
379
+ expect(err).toBeNull();
380
+ expect(Array.isArray(res)).toBe(true);
381
+ console.log('Contracts:', res);
382
+ });
383
+ test('getContractDataEntries', async () => {
384
+ if (!realContract) {
385
+ console.log('Skipping: no real contract available');
386
+ return;
387
+ }
388
+ const [err, res] = await to(daemon.getContractDataEntries({ contract: realContract, maximum: 5 }));
389
+ expect(err).toBeNull();
390
+ expect(res).toBeDefined();
391
+ console.log('Contract data entries:', res);
392
+ });
393
+ test('getContractLogs', async () => {
394
+ const [err, res] = await to(daemon.getContractLogs({ caller: realContract || '0000000000000000000000000000000000000000000000000000000000000000' }));
395
+ console.log('Contract logs:', err, res);
396
+ });
397
+ test('getTransactionExecutor', async () => {
398
+ const [err, res] = await to(daemon.getTransactionExecutor('0000000000000000000000000000000000000000000000000000000000000000'));
399
+ console.log('Tx executor:', err, res);
400
+ });
401
+ test('getTransaction', async () => {
402
+ const [err, res] = await to(daemon.getTransaction('0000000000000000000000000000000000000000000000000000000000000000'));
403
+ console.log('Transaction:', err, res);
404
+ });
405
+ test('getTransactions', async () => {
406
+ const [err, res] = await to(daemon.getTransactions([]));
407
+ expect(err).toBeNull();
408
+ expect(Array.isArray(res)).toBe(true);
409
+ console.log('Transactions:', res);
410
+ });
411
+ test('getTransactionsSummary', async () => {
412
+ const [err, res] = await to(daemon.getTransactionsSummary({ tx_hashes: [] }));
413
+ expect(err).toBeNull();
414
+ expect(Array.isArray(res)).toBe(true);
415
+ console.log('Transactions summary:', res);
416
+ });
417
+ test('isTxExecutedInBlock', async () => {
418
+ const [err1, topBlock] = await to(daemon.getTopBlock());
419
+ expect(err1).toBeNull();
420
+ const [err2, res] = await to(daemon.isTxExecutedInBlock({ tx_hash: '0000000000000000000000000000000000000000000000000000000000000000', block_hash: topBlock.hash }));
421
+ expect(err2).toBeNull();
422
+ expect(res).toBeDefined();
423
+ console.log('Is tx executed in block:', res);
424
+ });
425
+ test('getP2PBlockPropagation', async () => {
426
+ const [err1, topBlock] = await to(daemon.getTopBlock());
427
+ expect(err1).toBeNull();
428
+ const [err2, res] = await to(daemon.getP2PBlockPropagation({ hash: topBlock.hash, outgoing: false, incoming: false }));
429
+ expect(err2).toBeNull();
430
+ expect(res).toBeDefined();
431
+ console.log('P2P block propagation:', res);
432
+ });
433
+ test('splitAddress', async () => {
434
+ if (!realAddress) {
435
+ console.log('Skipping: no real address available');
436
+ return;
437
+ }
438
+ const [err, res] = await to(daemon.splitAddress({ address: realAddress }));
439
+ if (err) {
440
+ console.log('Split address (not an integrated address):', err.message);
441
+ return;
442
+ }
443
+ expect(err).toBeNull();
444
+ expect(res).toBeDefined();
445
+ console.log('Split address:', res);
446
+ });
447
+ test('extractKeyFromAddress', async () => {
448
+ if (!realAddress) {
449
+ console.log('Skipping: no real address available');
450
+ return;
451
+ }
452
+ const [err, res] = await to(daemon.extractKeyFromAddress({ address: realAddress, as_hex: true }));
453
+ expect(err).toBeNull();
454
+ expect(res).toBeDefined();
455
+ console.log('Extract key:', res);
456
+ });
457
+ test('makeIntegratedAddress', async () => {
458
+ if (!realAddress) {
459
+ console.log('Skipping: no real address available');
460
+ return;
461
+ }
462
+ const [err, res] = await to(daemon.makeIntegratedAddress({ address: realAddress, integrated_data: 'test' }));
463
+ expect(err).toBeNull();
464
+ expect(res).toBeDefined();
465
+ console.log('Integrated address:', res);
466
+ });
467
+ test('decryptExtraData', async () => {
468
+ const [err, res] = await to(daemon.decryptExtraData({ shared_key: [], extra_data: [] }));
469
+ console.log('Decrypt extra data:', err, res);
470
+ });
471
+ test('getMempoolCache', async () => {
472
+ if (!realAddress) {
473
+ console.log('Skipping: no real address available');
474
+ return;
475
+ }
476
+ const [err, res] = await to(daemon.getMempoolCache(realAddress));
477
+ console.log('Mempool cache:', err, res);
478
+ });
479
+ test('getMinerWork', async () => {
480
+ if (!realAddress) {
481
+ console.log('Skipping: no real address available');
482
+ return;
483
+ }
484
+ const [err1, template] = await to(daemon.getBlockTemplate(realAddress));
485
+ if (err1 || !template) {
486
+ console.log('Skipping miner work: block template failed:', err1);
487
+ return;
488
+ }
489
+ const [err2, res] = await to(daemon.getMinerWork({ template: template.template }));
490
+ expect(err2).toBeNull();
491
+ expect(res).toBeDefined();
492
+ console.log('Miner work:', res);
493
+ });
494
+ test('getBlockTemplate', async () => {
495
+ if (!realAddress) {
496
+ console.log('Skipping: no real address available');
497
+ return;
498
+ }
499
+ const [err, res] = await to(daemon.getBlockTemplate(realAddress));
500
+ expect(err).toBeNull();
501
+ expect(res).toBeDefined();
502
+ expect(res.template).toBeDefined();
503
+ console.log('Block template:', res);
504
+ });
505
+ test('getBalance', async () => {
506
+ if (!realAddress) {
507
+ console.log('Skipping: no real address available');
508
+ return;
509
+ }
510
+ const [err, res] = await to(daemon.getBalance({ address: realAddress, asset: '0000000000000000000000000000000000000000000000000000000000000000' }));
511
+ expect(err).toBeNull();
512
+ expect(res).toBeDefined();
513
+ console.log('Balance:', res);
514
+ });
515
+ test('getStableBalance', async () => {
516
+ if (!realAddress) {
517
+ console.log('Skipping: no real address available');
518
+ return;
519
+ }
520
+ const [err, res] = await to(daemon.getStableBalance({ address: realAddress, asset: '0000000000000000000000000000000000000000000000000000000000000000' }));
521
+ expect(err).toBeNull();
522
+ expect(res).toBeDefined();
523
+ console.log('Stable balance:', res);
524
+ });
525
+ test('hasBalance', async () => {
526
+ if (!realAddress) {
527
+ console.log('Skipping: no real address available');
528
+ return;
529
+ }
530
+ const [err, res] = await to(daemon.hasBalance({ address: realAddress, asset: '0000000000000000000000000000000000000000000000000000000000000000' }));
531
+ expect(err).toBeNull();
532
+ expect(res).toBeDefined();
533
+ console.log('Has balance:', res);
534
+ });
535
+ test('getNonce', async () => {
536
+ if (!realAddress) {
537
+ console.log('Skipping: no real address available');
538
+ return;
539
+ }
540
+ const [err, res] = await to(daemon.getNonce({ address: realAddress }));
541
+ expect(err).toBeNull();
542
+ expect(res).toBeDefined();
543
+ console.log('Nonce:', res);
544
+ });
545
+ test('hasNonce', async () => {
546
+ if (!realAddress) {
547
+ console.log('Skipping: no real address available');
548
+ return;
549
+ }
550
+ const [err, res] = await to(daemon.hasNonce({ address: realAddress }));
551
+ expect(err).toBeNull();
552
+ expect(res).toBeDefined();
553
+ console.log('Has nonce:', res);
554
+ });
555
+ test('getAccountHistory', async () => {
556
+ if (!realAddress) {
557
+ console.log('Skipping: no real address available');
558
+ return;
559
+ }
560
+ const [err, res] = await to(daemon.getAccountHistory({ address: realAddress, maximum_topoheight: 10 }));
561
+ expect(err).toBeNull();
562
+ expect(Array.isArray(res)).toBe(true);
563
+ console.log('Account history:', res);
564
+ });
565
+ test('getAccountAssets', async () => {
566
+ if (!realAddress) {
567
+ console.log('Skipping: no real address available');
568
+ return;
569
+ }
570
+ const [err, res] = await to(daemon.getAccountAssets({ address: realAddress }));
571
+ expect(err).toBeNull();
572
+ expect(Array.isArray(res)).toBe(true);
573
+ console.log('Account assets:', res);
574
+ });
575
+ test('isAccountRegistered', async () => {
576
+ if (!realAddress) {
577
+ console.log('Skipping: no real address available');
578
+ return;
579
+ }
580
+ const [err, res] = await to(daemon.isAccountRegistered({ address: realAddress, in_stable_height: false }));
581
+ expect(err).toBeNull();
582
+ expect(res).toBeDefined();
583
+ console.log('Is account registered:', res);
584
+ });
585
+ test('getAccountRegistrationTopoheight', async () => {
586
+ if (!realAddress) {
587
+ console.log('Skipping: no real address available');
588
+ return;
589
+ }
590
+ const [err, res] = await to(daemon.getAccountRegistrationTopoheight(realAddress));
591
+ expect(err).toBeNull();
592
+ expect(res).toBeGreaterThanOrEqual(0);
593
+ console.log('Account registration topoheight:', res);
594
+ });
595
+ test('getMultisig', async () => {
596
+ if (!realAddress) {
597
+ console.log('Skipping: no real address available');
598
+ return;
599
+ }
600
+ const [err, res] = await to(daemon.getMultisig({ address: realAddress }));
601
+ console.log('Multisig:', err, res);
602
+ });
603
+ test('hasMultisig', async () => {
604
+ if (!realAddress) {
605
+ console.log('Skipping: no real address available');
606
+ return;
607
+ }
608
+ const [err, res] = await to(daemon.hasMultisig({ address: realAddress }));
609
+ expect(err).toBeNull();
610
+ expect(res).toBeDefined();
611
+ console.log('Has multisig:', res);
612
+ });
613
+ test('getContractsOutputs', async () => {
614
+ if (!realAddress) {
615
+ console.log('Skipping: no real address available');
616
+ return;
617
+ }
618
+ const [err, res] = await to(daemon.getContractsOutputs({ address: realAddress, topoheight: 0 }));
619
+ expect(err).toBeNull();
620
+ expect(res).toBeDefined();
621
+ console.log('Contract outputs:', res);
622
+ });
623
+ test('getContractScheduledExecutionsAtTopoheight', async () => {
624
+ const [err, res] = await to(daemon.getContractScheduledExecutionsAtTopoheight({ topoheight: 0 }));
625
+ expect(err).toBeNull();
626
+ expect(Array.isArray(res)).toBe(true);
627
+ console.log('Scheduled executions:', res);
628
+ });
629
+ test('getContractRegisteredExecutionsAtTopoheight', async () => {
630
+ const [err, res] = await to(daemon.getContractRegisteredExecutionsAtTopoheight({ topoheight: 0 }));
631
+ expect(err).toBeNull();
632
+ expect(Array.isArray(res)).toBe(true);
633
+ console.log('Registered executions:', res);
634
+ });
635
+ });
@@ -101,9 +101,15 @@ export var RPCMethod;
101
101
  RPCMethod["GetBlockTemplate"] = "get_block_template";
102
102
  RPCMethod["GetMinerWork"] = "get_miner_work";
103
103
  RPCMethod["SubmitBlock"] = "submit_block";
104
+ RPCMethod["GetContractTransactions"] = "get_contract_transactions";
105
+ RPCMethod["SimulateContractInvoke"] = "simulate_contract_invoke";
106
+ RPCMethod["RewindChain"] = "rewind_chain";
107
+ RPCMethod["ClearCaches"] = "clear_caches";
108
+ RPCMethod["PruneChain"] = "prune_chain";
104
109
  })(RPCMethod || (RPCMethod = {}));
105
110
  export var RPCEvent;
106
111
  (function (RPCEvent) {
112
+ RPCEvent["NewTopoHeight"] = "new_topo_height";
107
113
  RPCEvent["NewBlock"] = "new_block";
108
114
  RPCEvent["BlockOrdered"] = "block_ordered";
109
115
  RPCEvent["BlockOrphaned"] = "block_orphaned";
@@ -112,11 +118,10 @@ export var RPCEvent;
112
118
  RPCEvent["TransactionOrphaned"] = "transaction_orphaned";
113
119
  RPCEvent["TransactionAddedInMempool"] = "transaction_added_in_mempool";
114
120
  RPCEvent["TransactionExecuted"] = "transaction_executed";
115
- RPCEvent["InvokeContract"] = "invoke_contract";
121
+ RPCEvent["ContractInvoke"] = "contract_invoke";
116
122
  RPCEvent["ContractTransfers"] = "contract_transfers";
117
- RPCEvent["InvokeContractError"] = "invoke_contract_error";
118
123
  RPCEvent["ContractEvent"] = "contract_event";
119
- RPCEvent["DeployContract"] = "deploy_contract";
124
+ RPCEvent["ContractDeploy"] = "contract_deploy";
120
125
  RPCEvent["NewAsset"] = "new_asset";
121
126
  RPCEvent["PeerConnected"] = "peer_connected";
122
127
  RPCEvent["PeerDisconnected"] = "peer_disconnected";