@indexing/jiti 0.0.18 → 0.0.20

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/dist/module.js CHANGED
@@ -315,9 +315,318 @@ const $c18434deda90759d$var$tokenTransfersTemplate = {
315
315
  const TOKEN_TYPES = _ctx.params.tokenTypes || [];
316
316
  let transfers = [];
317
317
  switch(block._network){
318
- // @TODO: expand to non-EVM
319
- // assume EVM as default for now
318
+ case "APTOS":
319
+ case "APTOS_TESTNET":
320
+ for (const tx of block.transactions){
321
+ if (!tx?.events || !Array.isArray(tx.events)) break;
322
+ const timestamp = tx.timestamp ? new Date(parseInt(tx.timestamp) / 1000).toISOString() : null;
323
+ const txfersByKey = {};
324
+ for (const evt of tx.events)if ([
325
+ "0x1::coin::WithdrawEvent",
326
+ "0x1::coin::DepositEvent"
327
+ ].includes(evt.type)) {
328
+ const amount = evt.data?.amount;
329
+ const key = `0x1-${amount}`;
330
+ txfersByKey[key] ||= {
331
+ amount: amount,
332
+ tokenAddress: null
333
+ };
334
+ if (evt.type.endsWith("WithdrawEvent")) txfersByKey[key].from = evt.guid?.account_address;
335
+ else txfersByKey[key].to = evt.guid?.account_address;
336
+ }
337
+ for (const partial of Object.values(txfersByKey)){
338
+ if (!partial.from || !partial.to) continue;
339
+ transfers.push({
340
+ amount: BigInt(partial.amount),
341
+ blockNumber: parseInt(block.block_height),
342
+ from: partial.from,
343
+ timestamp: timestamp,
344
+ to: partial.to,
345
+ token: partial.tokenAddress,
346
+ tokenType: "NATIVE",
347
+ transactionGasFee: BigInt(tx.gas_used),
348
+ transactionHash: tx.hash
349
+ });
350
+ }
351
+ }
352
+ break;
353
+ case "BITCOIN":
354
+ case "BITCOIN_TESTNET":
355
+ case "LITCOIN":
356
+ case "DOGECOIN":
357
+ for (const tx of block.tx){
358
+ const timestamp = tx.time ? new Date(tx.time * 1000).toISOString() : null;
359
+ const vin = tx.vin[0];
360
+ const vout = tx.vout;
361
+ const fromVout = Math.min(vin.vout || 1000, vout.length - 1);
362
+ const fromAddress = vin.prevout?.scriptPubKey?.address || vout[fromVout]?.scriptPubKey?.address || vout[fromVout]?.scriptPubKey?.addresses?.[0];
363
+ if (!fromAddress) break;
364
+ for (const v of vout)transfers.push({
365
+ amount: BigInt(Math.round(v.value * Math.pow(10, 8))),
366
+ blockNumber: block.height,
367
+ from: fromAddress,
368
+ timestamp: timestamp,
369
+ to: v.scriptPubKey.address || v.scriptPubKey.addresses?.[0],
370
+ transactionGasFee: BigInt(tx.fee || 0) * BigInt(Math.pow(10, 8)),
371
+ transactionHash: tx.txid,
372
+ token: null,
373
+ tokenType: "NATIVE"
374
+ });
375
+ break;
376
+ }
377
+ break;
378
+ case "CARDANO":
379
+ for (const tx of block.transactions){
380
+ const typedTx = tx;
381
+ if (!Array.isArray(typedTx.operations)) continue;
382
+ const transactionHash = typedTx.transaction_identifier?.hash || "";
383
+ const timestamp = typedTx.timestamp ? new Date(typedTx.timestamp).toISOString() : null;
384
+ const inputs = typedTx.operations.filter((op)=>op.type === "input");
385
+ const outputs = typedTx.operations.filter((op)=>op.type === "output");
386
+ if (!inputs.length && !outputs.length) break;
387
+ const fromAddress = inputs[0]?.account?.address;
388
+ if (!fromAddress) continue;
389
+ const sumInputs = inputs.reduce((acc, op)=>{
390
+ const val = BigInt(op.amount?.value || "0");
391
+ return acc + val;
392
+ }, BigInt(0));
393
+ const sumOutputs = outputs.reduce((acc, op)=>{
394
+ const val = BigInt(op.amount?.value || "0");
395
+ return acc + val;
396
+ }, BigInt(0));
397
+ const transactionFee = sumInputs + BigInt(sumOutputs);
398
+ for (const out of outputs){
399
+ const rawValue = out.amount?.value || "0";
400
+ const absoluteValue = BigInt(rawValue);
401
+ transfers.push({
402
+ amount: absoluteValue < 0 ? -absoluteValue : absoluteValue,
403
+ blockNumber: block.block_identifier.index,
404
+ from: fromAddress,
405
+ timestamp: timestamp,
406
+ to: out.account?.address || "",
407
+ token: out.amount?.currency?.symbol?.toUpperCase() === "ADA" ? null : out.amount?.currency?.symbol,
408
+ tokenType: out.amount?.currency?.symbol?.toUpperCase() === "ADA" ? "NATIVE" : "TOKEN",
409
+ transactionGasFee: transactionFee < 0 ? -transactionFee : transactionFee,
410
+ transactionHash: transactionHash
411
+ });
412
+ }
413
+ }
414
+ break;
415
+ case "RIPPLE":
416
+ if (!Array.isArray(block.transactions)) break;
417
+ for (const rawTx of block.transactions){
418
+ const typedTx = rawTx;
419
+ if (typedTx.TransactionType !== "Payment") continue;
420
+ const deliveredOrAmount = typedTx.metaData?.delivered_amount ?? typedTx.Amount ?? "0";
421
+ let tokenSymbol = "XRP";
422
+ let tokenType = "NATIVE";
423
+ let parsedAmount;
424
+ if (typeof deliveredOrAmount === "object") {
425
+ tokenSymbol = deliveredOrAmount.currency?.toUpperCase() ?? "UNKNOWN";
426
+ tokenType = "TOKEN";
427
+ const floatVal = parseFloat(deliveredOrAmount.value);
428
+ const smallestUnit = Math.round(floatVal * 1000000);
429
+ parsedAmount = BigInt(smallestUnit);
430
+ } else parsedAmount = BigInt(String(deliveredOrAmount));
431
+ transfers.push({
432
+ amount: parsedAmount,
433
+ blockNumber: parseInt(block.ledger_index, 10),
434
+ from: typedTx.Account ?? "UNKNOWN",
435
+ timestamp: typedTx.date ? new Date((typedTx.date + 946684800) * 1000).toISOString() : null,
436
+ to: typedTx.Destination ?? "UNKNOWN",
437
+ token: tokenSymbol,
438
+ tokenType: tokenType,
439
+ transactionGasFee: BigInt(typedTx.Fee ?? "0"),
440
+ transactionHash: typedTx.hash ?? ""
441
+ });
442
+ }
443
+ break;
444
+ case "SOLANA":
445
+ for (const tx of block.transactions){
446
+ const solanaTx = tx;
447
+ const txHash = solanaTx.transaction.signatures[0];
448
+ const timestamp = block.blockTime ? new Date(block.blockTime * 1000).toISOString() : null;
449
+ let txFee = BigInt(solanaTx.meta.fee);
450
+ if (txFee < BigInt(10)) txFee = txFee * BigInt(Math.pow(10, 9));
451
+ const transfersByKey = {};
452
+ for (const post of solanaTx.meta.postTokenBalances){
453
+ let matched = false;
454
+ for (const pre of solanaTx.meta.preTokenBalances)if (post.mint === pre.mint && post.owner === pre.owner) {
455
+ let diff = BigInt(post.uiTokenAmount.amount) - BigInt(pre.uiTokenAmount.amount);
456
+ if (diff === BigInt(0)) continue;
457
+ if (diff < 0) diff = -diff;
458
+ const key = `${post.mint}-${diff.toString()}`;
459
+ const txfer = {
460
+ amount: diff,
461
+ blockNumber: block.blockHeight,
462
+ from: pre.owner,
463
+ timestamp: timestamp,
464
+ to: post.owner,
465
+ transactionGasFee: txFee,
466
+ transactionHash: txHash,
467
+ token: post.mint,
468
+ tokenType: "TOKEN"
469
+ };
470
+ if (transfersByKey[key]) {
471
+ if (diff > 0) delete txfer.from;
472
+ else delete txfer.to;
473
+ }
474
+ transfersByKey[key] = Object.assign(transfersByKey[key] || {}, txfer);
475
+ matched = true;
476
+ }
477
+ if (!matched) {
478
+ let diff = BigInt(post.uiTokenAmount.amount);
479
+ if (diff < 0) diff = -diff;
480
+ const key = `${post.mint}-${diff.toString()}`;
481
+ const txfer = {
482
+ amount: diff,
483
+ blockNumber: block.blockHeight,
484
+ from: null,
485
+ timestamp: timestamp,
486
+ to: post.owner,
487
+ token: post.mint,
488
+ tokenType: "TOKEN",
489
+ transactionGasFee: txFee,
490
+ transactionHash: txHash
491
+ };
492
+ delete txfer.from;
493
+ transfersByKey[key] = Object.assign(transfersByKey[key] || {}, txfer);
494
+ }
495
+ }
496
+ for(let i = 1; i < solanaTx.meta.postBalances.length; i += 1){
497
+ const post = solanaTx.meta.postBalances[i];
498
+ const pre = solanaTx.meta.preBalances[i];
499
+ if (post !== undefined && pre !== undefined && post !== pre) {
500
+ let diff = BigInt(post) - BigInt(pre);
501
+ if (diff < 0) diff = -diff;
502
+ const key = `null-${diff.toString()}`;
503
+ const txfer = {
504
+ amount: diff,
505
+ blockNumber: block.blockHeight,
506
+ from: post > pre ? typeof solanaTx.transaction.message.accountKeys[0] === "string" ? solanaTx.transaction.message.accountKeys[0] : solanaTx.transaction.message.accountKeys[0]?.pubkey : typeof solanaTx.transaction.message.accountKeys[i] === "string" ? solanaTx.transaction.message.accountKeys[i] : solanaTx.transaction.message.accountKeys[i]?.pubkey,
507
+ timestamp: timestamp,
508
+ to: typeof solanaTx.transaction.message.accountKeys[i] === "string" ? solanaTx.transaction.message.accountKeys[i] : solanaTx.transaction.message.accountKeys[i]?.pubkey?.toString(),
509
+ token: null,
510
+ tokenType: "NATIVE",
511
+ transactionGasFee: txFee,
512
+ transactionHash: txHash
513
+ };
514
+ if (transfersByKey[key]) {
515
+ if (post > pre) delete txfer.from;
516
+ else delete txfer.to;
517
+ }
518
+ transfersByKey[key] = Object.assign(transfersByKey[key] || {}, txfer);
519
+ }
520
+ }
521
+ transfers.push(...Object.values(transfersByKey));
522
+ }
523
+ break;
524
+ case "STARKNET":
525
+ if (!Array.isArray(block.transactions)) break;
526
+ for (const tx of block.transactions){
527
+ const typedTx = tx;
528
+ const timestamp = block.timestamp ? new Date(block.timestamp * 1000).toISOString() : null;
529
+ let transactionGasFee = BigInt(0);
530
+ if (typedTx?.receipt?.actual_fee?.amount) transactionGasFee = BigInt(typedTx.receipt.actual_fee.amount);
531
+ const transactionHash = typedTx.transaction_hash;
532
+ if (!typedTx.receipt?.events) continue;
533
+ for (const event of typedTx.receipt.events){
534
+ if (!event.keys.includes("0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9")) continue;
535
+ if (event.data.length < 3) continue;
536
+ const [from, to, amountHex] = event.data;
537
+ const amount = BigInt(amountHex);
538
+ transfers.push({
539
+ amount: amount,
540
+ blockNumber: block.block_number,
541
+ from: from,
542
+ timestamp: timestamp,
543
+ to: to,
544
+ token: null,
545
+ tokenType: "NATIVE",
546
+ transactionGasFee: transactionGasFee,
547
+ transactionHash: transactionHash
548
+ });
549
+ }
550
+ }
551
+ break;
552
+ case "STELLAR":
553
+ for (const tx of block.transactions){
554
+ const typedTx = tx;
555
+ for (const op of typedTx.operations)if (op.type === "payment") transfers.push({
556
+ amount: BigInt(op.amount.replace(".", "")),
557
+ blockNumber: block.sequence,
558
+ from: op.from,
559
+ timestamp: typedTx.created_at,
560
+ to: op.to,
561
+ token: op.asset_type === "native" ? null : op.asset_issuer,
562
+ tokenType: op.asset_type === "native" ? "NATIVE" : "TOKEN",
563
+ transactionGasFee: BigInt(typedTx.fee_charged),
564
+ transactionHash: typedTx.hash
565
+ });
566
+ }
567
+ break;
568
+ case "SUI":
569
+ {
570
+ const blockNumber = block.sequence;
571
+ const blockTimestamp = new Date(block.timestamp).toISOString();
572
+ for (const tx of block.transactions || []){
573
+ const transactionHash = tx.digest;
574
+ const transactionGasFee = BigInt(tx.gasFee || "0");
575
+ for (const bc of tx.balanceChanges || [])transfers.push({
576
+ blockNumber: blockNumber,
577
+ from: tx.sender ? tx.sender : undefined,
578
+ to: tx.receiver ? tx.receiver : undefined,
579
+ amount: BigInt(bc.amount),
580
+ token: bc.coinRepr,
581
+ tokenType: "NATIVE",
582
+ timestamp: blockTimestamp,
583
+ transactionHash: transactionHash,
584
+ transactionGasFee: transactionGasFee
585
+ });
586
+ }
587
+ break;
588
+ }
589
+ case "TON":
590
+ {
591
+ const blockNumber = block.seqno;
592
+ const blockTimestamp = new Date(block.shards?.[0]?.gen_utime * 1000).toISOString();
593
+ for (const shard of block.shards || [])for (const tx of shard.transactions || []){
594
+ const transactionLT = tx.transaction_id.lt;
595
+ const transactionHash = tx.transaction_id.hash;
596
+ const transactionFee = BigInt(tx.fee || "0");
597
+ const inVal = BigInt(tx.in_msg?.value || "0");
598
+ if (inVal > 0n) transfers.push({
599
+ blockNumber: blockNumber,
600
+ from: tx.in_msg?.source?.account_address,
601
+ to: tx.address?.account_address,
602
+ amount: inVal,
603
+ token: "TON",
604
+ tokenType: "NATIVE",
605
+ timestamp: blockTimestamp,
606
+ transactionHash: transactionHash,
607
+ transactionGasFee: transactionFee
608
+ });
609
+ for (const outMsg of tx.out_msgs || []){
610
+ const outVal = BigInt(outMsg.value || "0");
611
+ if (outVal > 0n) transfers.push({
612
+ blockNumber: blockNumber,
613
+ from: outMsg.source?.account_address,
614
+ to: outMsg.destination?.account_address,
615
+ amount: outVal,
616
+ token: "TON",
617
+ tokenType: "NATIVE",
618
+ timestamp: blockTimestamp,
619
+ transactionHash: transactionHash,
620
+ transactionGasFee: transactionFee
621
+ });
622
+ }
623
+ }
624
+ break;
625
+ }
626
+ // attempt to introspect data types
320
627
  default:
628
+ // @TODO: COSMOS
629
+ // otherwise assume EVM
321
630
  for (const tx of block.transactions){
322
631
  if (!tx.receipt) continue;
323
632
  const timestamp = new Date(block.timestamp * 1000).toISOString();
@@ -369,7 +678,6 @@ const $c18434deda90759d$var$tokenTransfersTemplate = {
369
678
  transactionHash: tx.hash
370
679
  });
371
680
  }
372
- // @TODO: add NFT transfers
373
681
  if (!TOKEN_TYPES.length || TOKEN_TYPES.includes("NFT")) for (const log of tx.receipt.logs){
374
682
  const txfer = (0, $cfa23334cbdf9391$export$cf548b70626e2eb9)(log, [
375
683
  "Transfer(address indexed from, address indexed to, uint256 indexed value)",
@@ -430,9 +738,10 @@ const $c18434deda90759d$var$tokenTransfersTemplate = {
430
738
  if (typeof _ctx.params.walletAddress === "string") _ctx.params.walletAddress = _ctx.params.walletAddress.toLowerCase();
431
739
  break;
432
740
  }
741
+ //console.log(transfers[0]);
433
742
  transfers = transfers.filter((txfer)=>{
434
743
  if (txfer.amount <= BigInt(0)) return false;
435
- if (_ctx.params.contractAddress && _ctx.params.contractAddress !== txfer.token) return false;
744
+ if (_ctx.params.contractAddress && _ctx.params.contractAddress !== txfer.token && txfer.token) return false;
436
745
  if (_ctx.params.walletAddress && ![
437
746
  txfer.from,
438
747
  txfer.to
@@ -442,6 +751,29 @@ const $c18434deda90759d$var$tokenTransfersTemplate = {
442
751
  return transfers;
443
752
  },
444
753
  tests: [
754
+ // APTOS
755
+ {
756
+ params: {
757
+ network: "APTOS",
758
+ walletAddress: "0xb3589951a7d8579a2918a749260804047abc60438bf0738c4e67683e972b41cd",
759
+ contractAddress: "0x1"
760
+ },
761
+ payload: "https://jiti.indexing.co/networks/aptos/237372198",
762
+ output: [
763
+ {
764
+ amount: 12776498n,
765
+ blockNumber: 237372198,
766
+ from: "0xb3589951a7d8579a2918a749260804047abc60438bf0738c4e67683e972b41cd",
767
+ timestamp: "2024-10-10T16:59:34.414Z",
768
+ to: "0x1f5d15c9a1330389bda239ed2f40d8d2a2ba446e7a48ee57483a047d5ed1aafe",
769
+ token: null,
770
+ tokenType: "NATIVE",
771
+ transactionGasFee: 507n,
772
+ transactionHash: "0xbabaf20c07c80ace9f1f2f6539e0df6c57c9a6b24d5e62fa4989b46c0807d9bb"
773
+ }
774
+ ]
775
+ },
776
+ // BASE
445
777
  {
446
778
  params: {
447
779
  network: "BASE",
@@ -463,6 +795,160 @@ const $c18434deda90759d$var$tokenTransfersTemplate = {
463
795
  transactionHash: "0x69c9b12ccbe2d4f2f1dfc7c4a8557fc099fc5df276424417815acbc79a06fd56"
464
796
  }
465
797
  ]
798
+ },
799
+ // DOGECOIN
800
+ {
801
+ params: {
802
+ network: "DOGECOIN",
803
+ walletAddress: "DMqRVLrhbam3Kcfddpxd6EYvEBbpi3bEpP",
804
+ contractAddress: ""
805
+ },
806
+ payload: "https://jiti.indexing.co/networks/dogecoin/1000075",
807
+ output: [
808
+ {
809
+ amount: 1008521000000n,
810
+ blockNumber: 1000075,
811
+ from: "DMqRVLrhbam3Kcfddpxd6EYvEBbpi3bEpP",
812
+ to: "DMqRVLrhbam3Kcfddpxd6EYvEBbpi3bEpP",
813
+ token: null,
814
+ tokenType: "NATIVE",
815
+ transactionGasFee: 0n,
816
+ transactionHash: "9873fe46ab29f61cefdec498b691af68e0ad29a7599c94f42d2d4e9a5d461dbe",
817
+ timestamp: "2015-12-13T19:59:52.000Z"
818
+ }
819
+ ]
820
+ },
821
+ // CARDANO
822
+ {
823
+ params: {
824
+ network: "CARDANO",
825
+ walletAddress: "addr1q9syxu908lef7r6rsvk0h7gsx3rxj22cuykgx2a2l4hcfd8e9y2e9vtv4w9dyej96w99wwj8hwgc273862lk6a3vt30qjjrund",
826
+ contractAddress: ""
827
+ },
828
+ payload: "https://jiti.indexing.co/networks/cardano/11443286",
829
+ output: [
830
+ {
831
+ amount: 1110000n,
832
+ blockNumber: 11443286,
833
+ from: "addr1qymdv285few5tyqvya86rl97r9e608njs37shfew6l2nn473aw2pcnrcvfwfgg2dnew99m4tjj0apsu7232w2euzwpysndh0h3",
834
+ timestamp: null,
835
+ to: "addr1q9syxu908lef7r6rsvk0h7gsx3rxj22cuykgx2a2l4hcfd8e9y2e9vtv4w9dyej96w99wwj8hwgc273862lk6a3vt30qjjrund",
836
+ token: null,
837
+ tokenType: "NATIVE",
838
+ transactionGasFee: 174257n,
839
+ transactionHash: "261c42ba9124f55d8e169ebb692cd3759d796a54369acb316ee449b546e79309"
840
+ }
841
+ ]
842
+ },
843
+ // RIPPLE
844
+ {
845
+ params: {
846
+ network: "RIPPLE",
847
+ walletAddress: "rUUgoiJmjTPEbxfZ4RsS9pVS9Kv813Wpui",
848
+ contractAddress: ""
849
+ },
850
+ payload: "https://jiti.indexing.co/networks/ripple/88104659",
851
+ output: [
852
+ {
853
+ amount: 238n,
854
+ blockNumber: 88104659,
855
+ from: "rMAGnTv4eMWktZnhKa5cHcDiY84ZiKUaQm",
856
+ timestamp: null,
857
+ to: "rUUgoiJmjTPEbxfZ4RsS9pVS9Kv813Wpui",
858
+ token: "XRP",
859
+ tokenType: "NATIVE",
860
+ transactionGasFee: 15n,
861
+ transactionHash: "03564E6109261CDE73FCC5062C2A0A70F365CB1A0F9408C065B60EC3E94E4DBF"
862
+ }
863
+ ]
864
+ },
865
+ // STELLAR
866
+ {
867
+ params: {
868
+ network: "STELLAR",
869
+ walletAddress: "GA5KLTNAWV27IOTBX5PKUOMVWFMLX4X7CPMQJ4QLR3G266MMVL7NMA4X",
870
+ contractAddress: "GC4Z2TDXU4GXVLHOS5P5SU6HKBCP7NKN4TJ5ZGTVRBW7MCBZTU7SNUSA"
871
+ },
872
+ payload: "https://jiti.indexing.co/networks/stellar/51720546",
873
+ output: [
874
+ {
875
+ amount: 150000n,
876
+ blockNumber: 51720546,
877
+ from: "GA5KLTNAWV27IOTBX5PKUOMVWFMLX4X7CPMQJ4QLR3G266MMVL7NMA4X",
878
+ timestamp: "2024-05-18T04:41:39Z",
879
+ to: "GC4Z2TDXU4GXVLHOS5P5SU6HKBCP7NKN4TJ5ZGTVRBW7MCBZTU7SNUSA",
880
+ token: "GC4Z2TDXU4GXVLHOS5P5SU6HKBCP7NKN4TJ5ZGTVRBW7MCBZTU7SNUSA",
881
+ tokenType: "TOKEN",
882
+ transactionGasFee: 100n,
883
+ transactionHash: "4fb2441210cbe87f5003abdfa86f03bafa54f789ed041feccbda0bd054297c4d"
884
+ }
885
+ ]
886
+ },
887
+ // STARKNET
888
+ {
889
+ params: {
890
+ network: "STARKNET",
891
+ walletAddress: "0x309e6b209031362268d62d646a067365e6f6d6eb7f571b5212cbdfd5f26fe54",
892
+ contractAddress: ""
893
+ },
894
+ payload: "https://jiti.indexing.co/networks/starknet/1149460",
895
+ output: [
896
+ {
897
+ amount: 0x1c286f74458fc6n,
898
+ blockNumber: 1149460,
899
+ from: "0x309e6b209031362268d62d646a067365e6f6d6eb7f571b5212cbdfd5f26fe54",
900
+ timestamp: "2025-02-13T17:36:52.000Z",
901
+ to: "0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8",
902
+ token: null,
903
+ tokenType: "NATIVE",
904
+ transactionGasFee: 7925758505095110n,
905
+ transactionHash: "0x707203dba31f442ae9a5477e6a8906f3676effa0f1d3bb19cbbc14e1ddfe21"
906
+ }
907
+ ]
908
+ },
909
+ //SUI
910
+ {
911
+ params: {
912
+ network: "SUI",
913
+ walletAddress: "0xfd0fb434d076e4cca300cf6534a5235b19ad184eedf49066726664ded42c6b5e",
914
+ contractAddress: ""
915
+ },
916
+ payload: "https://jiti.indexing.co/networks/sui/112336044",
917
+ output: [
918
+ {
919
+ blockNumber: 112336044,
920
+ from: "0xfd0fb434d076e4cca300cf6534a5235b19ad184eedf49066726664ded42c6b5e",
921
+ to: undefined,
922
+ amount: 180772n,
923
+ token: "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
924
+ tokenType: "NATIVE",
925
+ timestamp: "2025-02-13T23:10:54.529Z",
926
+ transactionHash: "336V3wP8cHDAnB1Aku3j6n9948i8FG5N1eVP6Ac68BaE",
927
+ transactionGasFee: -4165572n
928
+ }
929
+ ]
930
+ },
931
+ // TON
932
+ {
933
+ params: {
934
+ network: "TON",
935
+ walletAddress: "EQAFukUyzmHjUvOYDOjNE-wbZFFl2FWas1rFJoh8IiTsWD40",
936
+ contractAddress: ""
937
+ },
938
+ payload: "https://jiti.indexing.co/networks/ton/44919328",
939
+ output: [
940
+ {
941
+ blockNumber: 44919328,
942
+ from: "EQAFukUyzmHjUvOYDOjNE-wbZFFl2FWas1rFJoh8IiTsWD40",
943
+ to: "EQCFTFAHOU3vFt2NiZhRD5dwuS0k7GS59vIg3WfCKwfaQGW2",
944
+ amount: 10000000n,
945
+ token: "TON",
946
+ tokenType: "NATIVE",
947
+ timestamp: "2025-02-13T23:10:18.000Z",
948
+ transactionHash: "Vh5cWr2uvCsdhoouBQ+EiUcF54os9oqvh8A/62EroQc=",
949
+ transactionGasFee: 2355233n
950
+ }
951
+ ]
466
952
  }
467
953
  ]
468
954
  };