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