@indexing/jiti 0.0.25 → 0.0.27
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 +84 -24
- package/dist/main.js.map +1 -1
- package/dist/module.js +84 -24
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -650,10 +650,12 @@ const $6144a02851f23907$var$tokenTransfersTemplate = {
|
|
|
650
650
|
{
|
|
651
651
|
const typedBlock = block;
|
|
652
652
|
const blockNumber = typedBlock.blockNumber;
|
|
653
|
-
const blockHash = typedBlock.blockHash;
|
|
654
653
|
const timestampExtrinsic = typedBlock.extrinsics.find((ex)=>ex.method === "timestamp.set");
|
|
655
654
|
const blockTimestamp = timestampExtrinsic ? new Date(Number(timestampExtrinsic.args[0].toString().replace(/,/g, ""))).toISOString() : new Date().toISOString();
|
|
656
|
-
for (const extrinsic of typedBlock.extrinsics)if (
|
|
655
|
+
for (const extrinsic of typedBlock.extrinsics)if ([
|
|
656
|
+
"balances.transfer",
|
|
657
|
+
"balances.transferKeepAlive"
|
|
658
|
+
].includes(extrinsic.method)) {
|
|
657
659
|
const from = extrinsic.signer;
|
|
658
660
|
const to = extrinsic.args[0]?.Id || "";
|
|
659
661
|
const amount = BigInt(extrinsic.args[1].replace(/,/g, ""));
|
|
@@ -666,11 +668,43 @@ const $6144a02851f23907$var$tokenTransfersTemplate = {
|
|
|
666
668
|
tokenType: "NATIVE",
|
|
667
669
|
timestamp: blockTimestamp,
|
|
668
670
|
transactionGasFee: 0n,
|
|
669
|
-
transactionHash:
|
|
671
|
+
transactionHash: extrinsic.hash
|
|
670
672
|
});
|
|
671
673
|
}
|
|
672
674
|
break;
|
|
673
675
|
}
|
|
676
|
+
case "FILECOIN":
|
|
677
|
+
{
|
|
678
|
+
const typedBlock = block;
|
|
679
|
+
const blockNumber = typedBlock.Height;
|
|
680
|
+
const blockTimestamp = new Date(typedBlock.Blocks[0].Timestamp * 1000).toISOString();
|
|
681
|
+
const parentBaseFee = BigInt(typedBlock.Blocks[0].ParentBaseFee);
|
|
682
|
+
let receiptIndex = 0;
|
|
683
|
+
for (const msgGroup of typedBlock.messages){
|
|
684
|
+
const secpkMessages = msgGroup.blockMessages.SecpkMessages || [];
|
|
685
|
+
for (const msg of secpkMessages){
|
|
686
|
+
const receipt = typedBlock.receipts[receiptIndex++];
|
|
687
|
+
const gasUsed = BigInt(receipt.GasUsed);
|
|
688
|
+
const gasFeeCap = BigInt(msg.Message.GasFeeCap);
|
|
689
|
+
const gasPremium = BigInt(msg.Message.GasPremium);
|
|
690
|
+
const baseFeeBurn = gasUsed * parentBaseFee;
|
|
691
|
+
const minerTip = gasUsed * (gasPremium < gasFeeCap - parentBaseFee ? gasPremium : gasFeeCap - parentBaseFee);
|
|
692
|
+
const transactionGasFee = baseFeeBurn + minerTip;
|
|
693
|
+
transfers.push({
|
|
694
|
+
amount: BigInt(msg.Message.Value),
|
|
695
|
+
blockNumber: blockNumber,
|
|
696
|
+
from: msg.Message.From,
|
|
697
|
+
to: msg.Message.To,
|
|
698
|
+
token: null,
|
|
699
|
+
tokenType: "NATIVE",
|
|
700
|
+
timestamp: blockTimestamp,
|
|
701
|
+
transactionGasFee: transactionGasFee,
|
|
702
|
+
transactionHash: msg.CID["/"]
|
|
703
|
+
});
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
break;
|
|
707
|
+
}
|
|
674
708
|
// attempt to introspect data types
|
|
675
709
|
default:
|
|
676
710
|
// try Cosmos
|
|
@@ -815,6 +849,7 @@ const $6144a02851f23907$var$tokenTransfersTemplate = {
|
|
|
815
849
|
if (typeof _ctx.params.walletAddress === "string") _ctx.params.walletAddress = _ctx.params.walletAddress.toLowerCase();
|
|
816
850
|
break;
|
|
817
851
|
}
|
|
852
|
+
const seenTransfers = new Set();
|
|
818
853
|
transfers = transfers.filter((txfer)=>{
|
|
819
854
|
if (txfer.amount <= BigInt(0)) return false;
|
|
820
855
|
if (_ctx.params.contractAddress && _ctx.params.contractAddress !== txfer.token && txfer.token) return false;
|
|
@@ -822,6 +857,9 @@ const $6144a02851f23907$var$tokenTransfersTemplate = {
|
|
|
822
857
|
txfer.from,
|
|
823
858
|
txfer.to
|
|
824
859
|
].includes(_ctx.params.walletAddress)) return false;
|
|
860
|
+
const key = `${txfer.transactionHash}-${txfer.from}-${txfer.to}-${txfer.amount}-${txfer.token}`;
|
|
861
|
+
if (seenTransfers.has(key)) return false;
|
|
862
|
+
seenTransfers.add(key);
|
|
825
863
|
return true;
|
|
826
864
|
});
|
|
827
865
|
return transfers;
|
|
@@ -872,25 +910,47 @@ const $6144a02851f23907$var$tokenTransfersTemplate = {
|
|
|
872
910
|
}
|
|
873
911
|
]
|
|
874
912
|
},
|
|
875
|
-
//BITTENSOR
|
|
913
|
+
// BITTENSOR
|
|
876
914
|
{
|
|
877
915
|
params: {
|
|
878
916
|
network: "BITTENSOR",
|
|
879
|
-
walletAddress: "
|
|
917
|
+
walletAddress: "5G6WmJ4mym9oSQzUF5tr7LvsNMvH5vWtutZM8vMvRv1Wwy6J",
|
|
880
918
|
contractAddress: ""
|
|
881
919
|
},
|
|
882
|
-
payload: "https://jiti.indexing.co/networks/bittensor/
|
|
920
|
+
payload: "https://jiti.indexing.co/networks/bittensor/2652896",
|
|
883
921
|
output: [
|
|
884
922
|
{
|
|
885
|
-
amount:
|
|
886
|
-
blockNumber:
|
|
887
|
-
from: "
|
|
888
|
-
|
|
889
|
-
to: "5CWgT5vMteM2fUabZ7oPYHPmXi6xPHKUxd6wEWnUvFuxsdJX",
|
|
923
|
+
amount: 2154999850n,
|
|
924
|
+
blockNumber: 2652896,
|
|
925
|
+
from: "5G6WmJ4mym9oSQzUF5tr7LvsNMvH5vWtutZM8vMvRv1Wwy6J",
|
|
926
|
+
to: "5CFwmfLfL1Z6vXU6hgGksh6irDFpcVXaTTNRoqDGMyHrDKK1",
|
|
890
927
|
token: null,
|
|
891
928
|
tokenType: "NATIVE",
|
|
929
|
+
timestamp: "2024-03-28T12:53:36.001Z",
|
|
892
930
|
transactionGasFee: 0n,
|
|
893
|
-
transactionHash: "
|
|
931
|
+
transactionHash: "0x9ea55a8f40b8d7704f27964155476ab9c744ec2ef2b1f431ad0e05a3a6f3c1ab"
|
|
932
|
+
}
|
|
933
|
+
]
|
|
934
|
+
},
|
|
935
|
+
// CARDANO
|
|
936
|
+
{
|
|
937
|
+
params: {
|
|
938
|
+
network: "CARDANO",
|
|
939
|
+
walletAddress: "addr1q9syxu908lef7r6rsvk0h7gsx3rxj22cuykgx2a2l4hcfd8e9y2e9vtv4w9dyej96w99wwj8hwgc273862lk6a3vt30qjjrund",
|
|
940
|
+
contractAddress: ""
|
|
941
|
+
},
|
|
942
|
+
payload: "https://jiti.indexing.co/networks/cardano/11443286",
|
|
943
|
+
output: [
|
|
944
|
+
{
|
|
945
|
+
amount: 1110000n,
|
|
946
|
+
blockNumber: 11443286,
|
|
947
|
+
from: "addr1qymdv285few5tyqvya86rl97r9e608njs37shfew6l2nn473aw2pcnrcvfwfgg2dnew99m4tjj0apsu7232w2euzwpysndh0h3",
|
|
948
|
+
timestamp: "+057068-01-19T05:23:20.000Z",
|
|
949
|
+
to: "addr1q9syxu908lef7r6rsvk0h7gsx3rxj22cuykgx2a2l4hcfd8e9y2e9vtv4w9dyej96w99wwj8hwgc273862lk6a3vt30qjjrund",
|
|
950
|
+
token: null,
|
|
951
|
+
tokenType: "NATIVE",
|
|
952
|
+
transactionGasFee: 174257n,
|
|
953
|
+
transactionHash: "261c42ba9124f55d8e169ebb692cd3759d796a54369acb316ee449b546e79309"
|
|
894
954
|
}
|
|
895
955
|
]
|
|
896
956
|
},
|
|
@@ -916,25 +976,25 @@ const $6144a02851f23907$var$tokenTransfersTemplate = {
|
|
|
916
976
|
}
|
|
917
977
|
]
|
|
918
978
|
},
|
|
919
|
-
//
|
|
979
|
+
//FILECOIN
|
|
920
980
|
{
|
|
921
981
|
params: {
|
|
922
|
-
network: "
|
|
923
|
-
walletAddress: "
|
|
924
|
-
contractAddress: ""
|
|
982
|
+
network: "FILECOIN",
|
|
983
|
+
walletAddress: "f1e3aa3z6gkaqxxwmbbna5gf2frggswwjaeavx7bq",
|
|
984
|
+
contractAddress: "f1bqdligg7ipuiizvmdn7ijobhbkwaieh6z6lah5y"
|
|
925
985
|
},
|
|
926
|
-
payload: "https://jiti.indexing.co/networks/
|
|
986
|
+
payload: "https://jiti.indexing.co/networks/filecoin/4818438",
|
|
927
987
|
output: [
|
|
928
988
|
{
|
|
929
|
-
amount:
|
|
930
|
-
blockNumber:
|
|
931
|
-
from: "
|
|
932
|
-
timestamp: "
|
|
933
|
-
to: "
|
|
989
|
+
amount: 7896300000000000000n,
|
|
990
|
+
blockNumber: 4818438,
|
|
991
|
+
from: "f1e3aa3z6gkaqxxwmbbna5gf2frggswwjaeavx7bq",
|
|
992
|
+
timestamp: "2025-03-24T23:39:00.000Z",
|
|
993
|
+
to: "f1bqdligg7ipuiizvmdn7ijobhbkwaieh6z6lah5y",
|
|
934
994
|
token: null,
|
|
935
995
|
tokenType: "NATIVE",
|
|
936
|
-
transactionGasFee:
|
|
937
|
-
transactionHash: "
|
|
996
|
+
transactionGasFee: 1592498365133760n,
|
|
997
|
+
transactionHash: "bafy2bzacecxud3tayyq3caagjej5srufcx5fufjuqkz3ltgfty27wdsrmqeew"
|
|
938
998
|
}
|
|
939
999
|
]
|
|
940
1000
|
},
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["src/index.ts","src/templates/index.ts","src/templates/raw.ts","src/templates/token-transfers.ts","src/utils/index.ts","src/utils/evm-address-to-checksum.ts","src/utils/evm-chain-to-id.ts","src/utils/evm-decode-log.ts","src/utils/evm-method-signature-to-hex.ts","src/utils/evm-normalize-raw-block.ts","src/types.ts"],"sourcesContent":["import { templates as templateList } from './templates';\nimport * as utils from './utils';\nimport * as types from './types';\n\nconst templates = templateList.reduce((a, b) => ({ ...a, [b.key]: Object.assign({}, b) }), {});\n\nexport { utils, templates, types };\n\nexport function getAllTemplates() {\n return templateList.slice();\n}\n\nexport function getTemplateByKey(key: string) {\n return templateList.slice().find((template) => template.key === key);\n}\n","import rawTemplate from './raw';\nimport tokenTransfersTemplate from './token-transfers';\n\nexport const templates = [rawTemplate, tokenTransfersTemplate];\n","import { Template } from '../types';\n\nconst rawTemplate: Template = {\n key: 'raw',\n name: 'Raw Block Data',\n description: 'Get all blocks with all available fields',\n tags: ['EVM', 'RAW'],\n disabled: true,\n params: [],\n transform: (payload) => payload,\n tests: [\n {\n params: {},\n payload: { a: 'b', c: 1, d: { e: true } },\n output: { a: 'b', c: 1, d: { e: true } },\n },\n ],\n};\n\nexport default rawTemplate;\n","import { evmDecodeLogWithMetadata } from '../utils';\nimport { Template } from '../types';\nimport { decodeTxRaw, Registry } from '@cosmjs/proto-signing';\nimport { defaultRegistryTypes as defaultStargateTypes, SigningStargateClient } from '@cosmjs/stargate';\n\ntype NetworkTransfer = {\n amount: number | bigint;\n blockNumber: number;\n from: string;\n index?: string;\n timestamp: string;\n to: string;\n token?: string;\n tokenId?: string;\n tokenType: 'NATIVE' | 'TOKEN' | 'NFT';\n transactionGasFee: bigint;\n transactionHash: string;\n};\n\nconst NULL_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nconst tokenTransfersTemplate: Template = {\n key: 'token_transfers',\n name: 'Token Transfers',\n description: 'Get all token transfers for a set of token types.',\n tags: ['EVM', 'ERC20', 'ERC721', 'NFT', 'TOKEN'],\n disabled: false,\n params: [\n { key: 'network', name: 'Network', type: 'NETWORK', optional: false },\n { key: 'contractAddress', name: 'Contract Address', type: 'ADDRESS', optional: true },\n { key: 'walletAddress', name: 'Wallet Address', type: 'ADDRESS', optional: true },\n {\n key: 'tokenTypes',\n name: 'Token Types',\n type: 'STRING',\n multiple: true,\n optional: true,\n values: ['NATIVE', 'TOKEN', 'NFT'],\n },\n ],\n\n transform: (block, _ctx) => {\n const TOKEN_TYPES = (_ctx.params.tokenTypes as NetworkTransfer['tokenType'][]) || [];\n let transfers: NetworkTransfer[] = [];\n\n switch (block._network) {\n case 'APTOS':\n case 'APTOS_TESTNET': {\n for (const tx of block.transactions as Record<string, unknown>[]) {\n if (!tx?.events || !Array.isArray(tx.events)) {\n continue;\n }\n\n const timestamp = tx.timestamp ? new Date(parseInt(tx.timestamp as string) / 1000).toISOString() : null;\n const txfersByKey: Record<string, Record<string, string>> = {};\n\n for (const evt of tx.events as Record<string, unknown>[]) {\n if (['0x1::coin::WithdrawEvent', '0x1::coin::DepositEvent'].includes(evt.type as string)) {\n const amount = (evt.data as Record<string, string>)?.amount;\n const key = `0x1-${amount}`;\n txfersByKey[key] ||= { amount, tokenAddress: null };\n if ((evt.type as string).endsWith('WithdrawEvent')) {\n txfersByKey[key].from = (evt.guid as Record<string, string>)?.account_address;\n } else {\n txfersByKey[key].to = (evt.guid as Record<string, string>)?.account_address;\n }\n }\n }\n\n for (const partial of Object.values(txfersByKey)) {\n if (!partial.from || !partial.to) continue;\n transfers.push({\n amount: BigInt(partial.amount),\n blockNumber: parseInt(block.block_height as string),\n from: partial.from?.length < 66 ? `0x0${partial.from?.slice(2)}` : partial.from,\n timestamp,\n to: partial.to?.length < 66 ? `0x0${partial.to?.slice(2)}` : partial.to,\n token: partial.tokenAddress,\n tokenType: 'NATIVE',\n transactionGasFee: BigInt(tx.gas_used as string),\n transactionHash: tx.hash as string,\n });\n }\n }\n break;\n }\n\n case 'BITCOIN':\n case 'BITCOIN_TESTNET':\n case 'LITCOIN': // @TODO\n case 'DOGECOIN': {\n for (const tx of block.tx as Record<string, unknown>[]) {\n const timestamp = tx.time ? new Date((tx.time as number) * 1000).toISOString() : null;\n const vin = tx.vin[0] as { prevout?: { scriptPubKey: { address: string } }; vout?: number };\n const vout = tx.vout as { value: number; scriptPubKey?: { address: string; addresses?: string[] } }[];\n\n const fromVout = Math.min(vin.vout || 1000, vout.length - 1);\n const fromAddress =\n vin.prevout?.scriptPubKey?.address ||\n vout[fromVout]?.scriptPubKey?.address ||\n vout[fromVout]?.scriptPubKey?.addresses?.[0];\n if (!fromAddress) {\n continue;\n }\n\n for (const v of vout) {\n transfers.push({\n amount: BigInt(Math.round(v.value * Math.pow(10, 8))),\n blockNumber: block.height as number,\n from: fromAddress,\n timestamp,\n to: v.scriptPubKey.address || v.scriptPubKey.addresses?.[0],\n transactionGasFee: BigInt(Math.round(((tx.fee as number) || 0) * Math.pow(10, 8))),\n transactionHash: tx.txid as string,\n token: null,\n tokenType: 'NATIVE',\n });\n }\n }\n break;\n }\n\n case 'CARDANO': {\n const blockTimestamp = new Date((block.timestamp as number) * 1000).toISOString();\n\n for (const tx of block.transactions as unknown[]) {\n const typedTx = tx as {\n transaction_identifier?: { hash?: string };\n operations?: {\n type: string;\n account?: { address?: string };\n amount?: {\n value?: string;\n currency?: {\n symbol?: string;\n decimals?: number;\n };\n };\n }[];\n };\n\n if (!Array.isArray(typedTx.operations)) {\n continue;\n }\n\n const transactionHash = typedTx.transaction_identifier?.hash || '';\n\n const inputs = typedTx.operations.filter((op) => op.type === 'input');\n const outputs = typedTx.operations.filter((op) => op.type === 'output');\n\n if (!inputs.length && !outputs.length) {\n continue;\n }\n\n const fromAddress = inputs[0]?.account?.address;\n if (!fromAddress) {\n continue;\n }\n\n const sumInputs = inputs.reduce((acc, op) => {\n const val = BigInt(op.amount?.value || '0');\n return acc + val;\n }, BigInt(0));\n const sumOutputs = outputs.reduce((acc, op) => {\n const val = BigInt(op.amount?.value || '0');\n return acc + val;\n }, BigInt(0));\n\n const transactionFee = sumInputs + BigInt(sumOutputs);\n\n for (const out of outputs) {\n const rawValue = out.amount?.value || '0';\n const absoluteValue = BigInt(rawValue);\n transfers.push({\n amount: absoluteValue < 0 ? -absoluteValue : absoluteValue,\n blockNumber: (block.block_identifier as { index: number }).index,\n from: fromAddress,\n timestamp: blockTimestamp,\n to: out.account?.address || '',\n token: out.amount?.currency?.symbol?.toUpperCase() === 'ADA' ? null : out.amount?.currency?.symbol,\n tokenType: out.amount?.currency?.symbol?.toUpperCase() === 'ADA' ? 'NATIVE' : 'TOKEN',\n transactionGasFee: transactionFee < 0 ? -transactionFee : transactionFee,\n transactionHash,\n });\n }\n }\n break;\n }\n\n case 'RIPPLE': {\n if (!Array.isArray(block.transactions)) {\n break;\n }\n\n for (const rawTx of block.transactions) {\n const typedTx = rawTx as {\n Account?: string;\n Amount?: string | { currency: string; issuer: string; value: string };\n Destination?: string;\n Fee?: string;\n hash?: string;\n TransactionType?: string;\n date?: number;\n metaData?: {\n delivered_amount?: string | { currency: string; issuer: string; value: string };\n };\n };\n if (typedTx.TransactionType !== 'Payment') {\n continue;\n }\n const deliveredOrAmount = typedTx.metaData?.delivered_amount ?? typedTx.Amount ?? '0';\n let tokenSymbol = 'XRP';\n let tokenType: 'NATIVE' | 'TOKEN' | 'NFT' = 'NATIVE';\n\n let parsedAmount: bigint;\n\n if (typeof deliveredOrAmount === 'object') {\n tokenSymbol = deliveredOrAmount.currency?.toUpperCase() ?? 'UNKNOWN';\n tokenType = 'TOKEN';\n const floatVal = parseFloat(deliveredOrAmount.value);\n const smallestUnit = Math.round(floatVal * 1_000_000);\n parsedAmount = BigInt(smallestUnit);\n } else {\n parsedAmount = BigInt(String(deliveredOrAmount));\n }\n transfers.push({\n amount: parsedAmount,\n blockNumber: parseInt(block.ledger_index as string, 10),\n from: typedTx.Account ?? 'UNKNOWN',\n timestamp: block.close_time_iso ? (block.close_time_iso as string) : null,\n to: typedTx.Destination ?? 'UNKNOWN',\n token: tokenSymbol,\n tokenType: tokenType,\n transactionGasFee: BigInt(typedTx.Fee ?? '0'),\n transactionHash: typedTx.hash ?? '',\n });\n }\n\n break;\n }\n\n case 'SOLANA': {\n for (const tx of block.transactions as unknown[]) {\n const solanaTx = tx as {\n meta: {\n fee: number;\n postTokenBalances: {\n accountIndex: number;\n mint: string;\n owner: string;\n uiTokenAmount: { amount: string };\n }[];\n preTokenBalances: {\n accountIndex: number;\n mint: string;\n owner: string;\n uiTokenAmount: { amount: string };\n }[];\n postBalances: number[];\n preBalances: number[];\n };\n transaction: {\n message: { accountKeys: (string | { pubkey: string })[]; instructions: unknown[] };\n signatures: string[];\n };\n };\n const txHash = solanaTx.transaction.signatures[0];\n const timestamp = block.blockTime ? new Date((block.blockTime as number) * 1000).toISOString() : null;\n\n let txFee = BigInt(solanaTx.meta.fee);\n if (txFee < BigInt(10)) {\n txFee = txFee * BigInt(Math.pow(10, 9));\n }\n\n const transfersByKey: Record<string, NetworkTransfer> = {};\n for (const post of solanaTx.meta.postTokenBalances) {\n let matched = false;\n for (const pre of solanaTx.meta.preTokenBalances) {\n if (post.mint === pre.mint && post.owner === pre.owner) {\n let diff = BigInt(post.uiTokenAmount.amount) - BigInt(pre.uiTokenAmount.amount);\n if (diff === BigInt(0)) {\n continue;\n }\n const isNegDiff = diff < 0;\n if (diff < 0) {\n diff = -diff;\n }\n\n const key = `${post.mint}-${diff.toString()}`;\n const txfer: NetworkTransfer = {\n amount: diff,\n blockNumber: block.blockHeight as number,\n from: pre.owner,\n timestamp,\n to: post.owner,\n transactionGasFee: txFee,\n transactionHash: txHash,\n token: post.mint,\n tokenType: 'TOKEN',\n };\n if (transfersByKey[key]) {\n if (isNegDiff) {\n delete txfer.to;\n } else {\n delete txfer.from;\n }\n }\n transfersByKey[key] = Object.assign(transfersByKey[key] || {}, txfer);\n matched = true;\n }\n }\n\n if (!matched) {\n let diff = BigInt(post.uiTokenAmount.amount);\n const isNegDiff = diff < 0;\n if (diff < 0) {\n diff = -diff;\n }\n const key = `${post.mint}-${diff.toString()}`;\n const txfer: NetworkTransfer = {\n amount: diff,\n blockNumber: block.blockHeight as number,\n from: null,\n timestamp,\n to: post.owner,\n token: post.mint,\n tokenType: 'TOKEN',\n transactionGasFee: txFee,\n transactionHash: txHash,\n };\n if (transfersByKey[key]) {\n if (isNegDiff) {\n delete txfer.to;\n } else {\n delete txfer.from;\n }\n }\n transfersByKey[key] = Object.assign(transfersByKey[key] || {}, txfer);\n }\n }\n\n for (let i = 1; i < solanaTx.meta.postBalances.length; i += 1) {\n const post = solanaTx.meta.postBalances[i];\n const pre = solanaTx.meta.preBalances[i];\n if (post !== undefined && pre !== undefined && post !== pre) {\n let diff = BigInt(post) - BigInt(pre);\n if (diff < 0) {\n diff = -diff;\n }\n const key = `null-${diff.toString()}`;\n\n const txfer: NetworkTransfer = {\n amount: diff,\n blockNumber: block.blockHeight as number,\n from:\n post > pre\n ? typeof solanaTx.transaction.message.accountKeys[0] === 'string'\n ? solanaTx.transaction.message.accountKeys[0]\n : (solanaTx.transaction.message.accountKeys[0] as { pubkey: string })?.pubkey\n : typeof solanaTx.transaction.message.accountKeys[i] === 'string'\n ? (solanaTx.transaction.message.accountKeys[i] as string)\n : (solanaTx.transaction.message.accountKeys[i] as { pubkey: string })?.pubkey,\n timestamp,\n to:\n typeof solanaTx.transaction.message.accountKeys[i] === 'string'\n ? (solanaTx.transaction.message.accountKeys[i] as string)\n : (solanaTx.transaction.message.accountKeys[i] as { pubkey: string })?.pubkey?.toString(),\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: txFee,\n transactionHash: txHash,\n };\n if (transfersByKey[key]) {\n if (post > pre) {\n delete txfer.from;\n } else {\n delete txfer.to;\n }\n }\n transfersByKey[key] = Object.assign(transfersByKey[key] || {}, txfer);\n }\n }\n\n transfers.push(...Object.values(transfersByKey));\n }\n break;\n }\n\n case 'STARKNET': {\n if (!Array.isArray(block.transactions)) {\n break;\n }\n\n for (const tx of block.transactions) {\n const typedTx = tx as {\n transaction_hash: string;\n sender_address: string;\n receipt?: {\n actual_fee?: {\n amount?: string;\n unit?: string;\n };\n events?: {\n keys: string[];\n data: string[];\n }[];\n };\n timestamp?: number | string;\n data_availability?: Record<string, unknown>;\n };\n\n const timestamp = block.timestamp ? new Date((block.timestamp as number) * 1000).toISOString() : null;\n\n let transactionGasFee = BigInt(0);\n if (typedTx?.receipt?.actual_fee?.amount) {\n transactionGasFee = BigInt(typedTx.receipt.actual_fee.amount);\n }\n\n const transactionHash = typedTx.transaction_hash;\n\n if (!typedTx.receipt?.events) {\n continue;\n }\n\n for (const event of typedTx.receipt.events) {\n if (!event.keys.includes('0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9')) {\n continue;\n }\n if (event.data.length < 3) {\n continue;\n }\n\n const [from, to, amountHex] = event.data;\n const amount = BigInt(amountHex);\n\n transfers.push({\n amount,\n blockNumber: block.block_number as number,\n from,\n timestamp,\n to,\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee,\n transactionHash,\n });\n }\n }\n break;\n }\n\n case 'STELLAR': {\n for (const tx of block.transactions as unknown[]) {\n const typedTx = tx as {\n hash: string;\n created_at: string;\n fee_charged: string;\n operations: {\n type: string;\n from: string;\n to: string;\n amount: string;\n asset_type: string;\n asset_issuer: string;\n }[];\n };\n for (const op of typedTx.operations) {\n if (op.type === 'payment') {\n transfers.push({\n amount: BigInt(op.amount.replace('.', '')),\n blockNumber: block.sequence as number,\n from: op.from,\n timestamp: typedTx.created_at,\n to: op.to,\n token: op.asset_type === 'native' ? null : op.asset_issuer,\n tokenType: op.asset_type === 'native' ? 'NATIVE' : 'TOKEN',\n transactionGasFee: BigInt(typedTx.fee_charged),\n transactionHash: typedTx.hash,\n });\n }\n }\n }\n break;\n }\n\n case 'SUI': {\n const blockNumber = block.sequence as number;\n const blockTimestamp = new Date(block.timestamp as number).toISOString();\n\n for (const tx of (block.transactions as any[]) || []) {\n const transactionHash = tx.digest as string;\n const transactionGasFee = BigInt((tx.gasFee as string) || '0');\n\n for (const bc of (tx.balanceChanges as any[]) || []) {\n transfers.push({\n blockNumber,\n from: tx.sender ? (tx.sender as string) : undefined,\n to: tx.receiver ? (tx.receiver as string) : undefined,\n amount: BigInt(bc.amount as string),\n token: bc.coinRepr as string,\n tokenType: 'NATIVE',\n timestamp: blockTimestamp,\n transactionHash,\n transactionGasFee,\n });\n }\n }\n\n break;\n }\n\n case 'TON': {\n const blockNumber = block.seqno as number;\n const blockTimestamp = new Date((block.shards?.[0]?.gen_utime as number) * 1000).toISOString();\n\n for (const shard of (block.shards as any[]) || []) {\n for (const tx of (shard.transactions as any[]) || []) {\n const transactionLT = tx.transaction_id.lt as string;\n const transactionHash = tx.transaction_id.hash as string;\n const transactionFee = BigInt((tx.fee as string) || '0');\n\n const inVal = BigInt((tx.in_msg?.value as string) || '0');\n if (inVal > 0n) {\n transfers.push({\n blockNumber,\n from: tx.in_msg?.source?.account_address as string,\n to: tx.address?.account_address as string,\n amount: inVal,\n token: 'TON',\n tokenType: 'NATIVE',\n timestamp: blockTimestamp,\n transactionHash,\n transactionGasFee: transactionFee,\n });\n }\n\n for (const outMsg of (tx.out_msgs as any[]) || []) {\n const outVal = BigInt((outMsg.value as string) || '0');\n if (outVal > 0n) {\n transfers.push({\n blockNumber,\n from: outMsg.source?.account_address as string,\n to: outMsg.destination?.account_address as string,\n amount: outVal,\n token: 'TON',\n tokenType: 'NATIVE',\n timestamp: blockTimestamp,\n transactionHash,\n transactionGasFee: transactionFee,\n });\n }\n }\n }\n }\n\n break;\n }\n\n case 'ASTAR':\n case 'ENJIN':\n case 'KUSAMA':\n case 'POLKADOT':\n case 'BITTENSOR': {\n const typedBlock = block as {\n blockNumber: number;\n blockHash: string;\n header: { number: string };\n extrinsics: {\n method: string;\n signer: string;\n args: any[];\n hash: string;\n }[];\n };\n \n const blockNumber = typedBlock.blockNumber;\n const blockHash = typedBlock.blockHash;\n \n const timestampExtrinsic = typedBlock.extrinsics.find(ex => ex.method === 'timestamp.set');\n const blockTimestamp = timestampExtrinsic\n ? new Date(Number(timestampExtrinsic.args[0].toString().replace(/,/g, ''))).toISOString()\n : new Date().toISOString();\n \n for (const extrinsic of typedBlock.extrinsics) {\n if (extrinsic.method === 'balances.transferKeepAlive') {\n const from = extrinsic.signer;\n const to = (extrinsic.args[0] as { Id?: string })?.Id || '';\n const amount = BigInt((extrinsic.args[1] as string).replace(/,/g, ''));\n \n transfers.push({\n amount,\n blockNumber,\n from,\n to,\n token: null,\n tokenType: 'NATIVE',\n timestamp: blockTimestamp,\n transactionGasFee: 0n,\n transactionHash: blockHash,\n });\n }\n }\n break;\n }\n\n // attempt to introspect data types\n default: {\n // try Cosmos\n if (block.block) {\n const typedBlock = block as {\n block: { header: { height: string; time: string }; data: { txs?: string[] } };\n block_id: { hash: string };\n };\n\n const blockNumber = Number(typedBlock.block.header.height);\n const blockTimestamp = new Date(typedBlock.block.header.time).toISOString();\n const blockHash = typedBlock.block_id.hash;\n\n for (const txRaw of typedBlock.block.data.txs || []) {\n const decoded = decodeTxRaw(new Uint8Array(Buffer.from(txRaw, 'base64')));\n const transactionGasFee = BigInt(decoded.authInfo.fee?.amount?.[0]?.amount || '0');\n\n const registry = new Registry(defaultStargateTypes);\n for (const message of decoded.body.messages) {\n if (\n ['/ibc.applications.transfer.v1.MsgTransfer', '/cosmos.bank.v1beta1.MsgSend'].includes(message.typeUrl)\n ) {\n const decodedMsg = registry.decode(message);\n transfers.push({\n blockNumber,\n from: decodedMsg.sender,\n to: decodedMsg.receiver,\n amount: BigInt(decodedMsg.token.amount),\n token: decodedMsg.token.denom,\n tokenType: 'NATIVE',\n timestamp: blockTimestamp,\n transactionHash: blockHash,\n transactionGasFee,\n });\n }\n }\n }\n\n break;\n }\n\n // otherwise assume EVM\n for (const tx of block.transactions as any[]) {\n if (!tx.receipt) {\n continue;\n }\n\n const timestamp = new Date((block.timestamp as number) * 1000).toISOString();\n const transactionGasFee = BigInt(tx.receipt.gasUsed) * BigInt(tx.receipt.effectiveGasPrice);\n\n // track direct ETH transfers\n if (!TOKEN_TYPES.length || TOKEN_TYPES.includes('NATIVE')) {\n // pull from traces, if available\n if (Array.isArray(tx.traces)) {\n for (const trace of tx.traces.filter((t) => t.action)) {\n const action = trace.action as unknown as { from: string; to: string; value: string };\n if (!action?.value) continue;\n\n transfers.push({\n amount: BigInt(action.value),\n blockNumber: tx.blockNumber as number,\n from: action.from?.toLowerCase() || NULL_ADDRESS,\n index: trace.traceAddress?.join('-'),\n timestamp,\n to: action.to?.toLowerCase() || NULL_ADDRESS,\n tokenType: 'NATIVE',\n transactionGasFee,\n transactionHash: tx.hash,\n });\n }\n } else if ((tx.value as string)?.length >= 3 || /\\d+/.test(tx.value as string)) {\n transfers.push({\n amount: BigInt(tx.value as string),\n blockNumber: tx.blockNumber as number,\n from: tx.from?.toLowerCase() || NULL_ADDRESS,\n timestamp,\n to: tx.to?.toLowerCase() || NULL_ADDRESS,\n tokenType: 'NATIVE',\n transactionGasFee,\n transactionHash: tx.hash,\n });\n }\n }\n\n // track ERC20 transfers\n if (!TOKEN_TYPES.length || TOKEN_TYPES.includes('TOKEN')) {\n for (const log of tx.receipt.logs) {\n const txfer = evmDecodeLogWithMetadata(log, [\n 'Transfer(address indexed from, address indexed to, uint256 value)',\n ]);\n if (txfer) {\n transfers.push({\n amount: txfer.decoded.value as bigint,\n blockNumber: tx.blockNumber as number,\n from: (txfer.decoded.from as string)?.toLowerCase() || NULL_ADDRESS,\n index: log.logIndex,\n timestamp,\n to: (txfer.decoded.to as string)?.toLowerCase() || NULL_ADDRESS,\n token: (log.address as string).toLowerCase(),\n tokenType: 'TOKEN',\n transactionGasFee,\n transactionHash: tx.hash,\n });\n }\n }\n }\n\n if (!TOKEN_TYPES.length || TOKEN_TYPES.includes('NFT')) {\n for (const log of tx.receipt.logs) {\n const txfer = evmDecodeLogWithMetadata(log, [\n 'Transfer(address indexed from, address indexed to, uint256 indexed value)',\n 'TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)',\n 'TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)',\n ]);\n\n if (!txfer) continue;\n\n switch (txfer.metadata.name) {\n case 'Transfer': {\n transfers.push({\n amount: 1,\n blockNumber: tx.blockNumber as number,\n from: (txfer.decoded.from as string)?.toLowerCase() || NULL_ADDRESS,\n index: log.logIndex,\n timestamp,\n to: (txfer.decoded.to as string)?.toLowerCase() || NULL_ADDRESS,\n token: (log.address as string).toLowerCase(),\n tokenId: (txfer.decoded.value as bigint).toString(),\n tokenType: 'NFT',\n transactionGasFee,\n transactionHash: tx.hash,\n });\n break;\n }\n case 'TransferSingle': {\n transfers.push({\n amount: txfer.decoded.value as bigint,\n blockNumber: tx.blockNumber as number,\n from: (txfer.decoded.from as string)?.toLowerCase() || NULL_ADDRESS,\n index: log.logIndex,\n timestamp,\n to: (txfer.decoded.to as string)?.toLowerCase() || NULL_ADDRESS,\n token: (log.address as string).toLowerCase(),\n tokenId: (txfer.decoded.id as bigint).toString(),\n tokenType: 'NFT',\n transactionGasFee,\n transactionHash: tx.hash,\n });\n break;\n }\n case 'TransferBatch': {\n for (let i = 0; i < (txfer.decoded.ids as bigint[]).length; i += 1) {\n transfers.push({\n amount: txfer.decoded.values[i] as bigint,\n blockNumber: tx.blockNumber as number,\n from: (txfer.decoded.from as string)?.toLowerCase() || NULL_ADDRESS,\n index: log.logIndex,\n timestamp,\n to: (txfer.decoded.to as string)?.toLowerCase() || NULL_ADDRESS,\n token: (log.address as string).toLowerCase(),\n tokenId: (txfer.decoded.ids[i] as bigint).toString(),\n tokenType: 'NFT',\n transactionGasFee,\n transactionHash: tx.hash,\n });\n }\n break;\n }\n }\n }\n }\n }\n if (typeof _ctx.params.contractAddress === 'string') {\n _ctx.params.contractAddress = _ctx.params.contractAddress.toLowerCase();\n }\n if (typeof _ctx.params.walletAddress === 'string') {\n _ctx.params.walletAddress = _ctx.params.walletAddress.toLowerCase();\n }\n break;\n }\n }\n\n transfers = transfers.filter((txfer) => {\n if (txfer.amount <= BigInt(0)) {\n return false;\n }\n if (_ctx.params.contractAddress && _ctx.params.contractAddress !== txfer.token && txfer.token) {\n return false;\n }\n if (_ctx.params.walletAddress && ![txfer.from, txfer.to].includes(_ctx.params.walletAddress as string)) {\n return false;\n }\n return true;\n });\n\n return transfers;\n },\n\n tests: [\n // APTOS\n {\n params: {\n network: 'APTOS',\n walletAddress: '0x04b2b6bc8c2c5794c51607c962f482593f9b5ea09373a8ce249a1f799cca7a1e',\n contractAddress: '0x1',\n },\n payload: 'https://jiti.indexing.co/networks/aptos/297956660',\n output: [\n {\n amount: 1502138836n,\n blockNumber: 297956660,\n from: '0x5bd7de5c56d5691f32ea86c973c73fec7b1445e59736c97158020018c080bb00',\n timestamp: '2025-03-02T21:07:06.002Z',\n to: '0x04b2b6bc8c2c5794c51607c962f482593f9b5ea09373a8ce249a1f799cca7a1e',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 13n,\n transactionHash: '0xfbdef795d11df124cca264f3370b09fb04fb1c1d24a2d2e1df0693c096a76d13',\n },\n ],\n },\n\n // BASE\n {\n params: {\n network: 'BASE',\n walletAddress: '0x4F80864cD68782144e3736626896990acAe15a11',\n contractAddress: '0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed',\n },\n payload: 'https://jiti.indexing.co/networks/base/23507423',\n output: [\n {\n amount: 1000000000000000000000n,\n blockNumber: 23507423,\n from: '0x053002b4b332b422733c9469ddf9990bb6235e3d',\n index: 536,\n timestamp: '2024-12-10T04:16:33.000Z',\n to: '0x4f80864cd68782144e3736626896990acae15a11',\n token: '0x4ed4e862860bed51a9570b96d89af5e1b0efefed',\n tokenType: 'TOKEN',\n transactionGasFee: 1192354854229n,\n transactionHash: '0x69c9b12ccbe2d4f2f1dfc7c4a8557fc099fc5df276424417815acbc79a06fd56',\n },\n ],\n },\n\n //BITTENSOR\n {\n params: {\n network: 'BITTENSOR',\n walletAddress: '5G4TazaYLvMd8g7sYCd7Z6GpnFM5Kw4nt5tsydkw7gu3BnLC',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/bittensor/5149839',\n output: [\n {\n amount: 3210000000n,\n blockNumber: 5149839,\n from: '5G4TazaYLvMd8g7sYCd7Z6GpnFM5Kw4nt5tsydkw7gu3BnLC',\n timestamp: '2025-03-17T18:41:24.000Z',\n to: '5CWgT5vMteM2fUabZ7oPYHPmXi6xPHKUxd6wEWnUvFuxsdJX',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 0n,\n transactionHash: '0x26eb4c29a49a67033cdd6eb1ef0887faeb764836b0cf0322716e7f783248236e',\n },\n ],\n },\n\n // DOGECOIN\n {\n params: {\n network: 'DOGECOIN',\n walletAddress: 'DMqRVLrhbam3Kcfddpxd6EYvEBbpi3bEpP',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/dogecoin/1000075',\n output: [\n {\n amount: 1008521000000n,\n blockNumber: 1000075,\n from: 'DMqRVLrhbam3Kcfddpxd6EYvEBbpi3bEpP',\n to: 'DMqRVLrhbam3Kcfddpxd6EYvEBbpi3bEpP',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 0n,\n transactionHash: '9873fe46ab29f61cefdec498b691af68e0ad29a7599c94f42d2d4e9a5d461dbe',\n timestamp: '2015-12-13T19:59:52.000Z',\n },\n ],\n },\n\n // CARDANO\n {\n params: {\n network: 'CARDANO',\n walletAddress:\n 'addr1q9syxu908lef7r6rsvk0h7gsx3rxj22cuykgx2a2l4hcfd8e9y2e9vtv4w9dyej96w99wwj8hwgc273862lk6a3vt30qjjrund',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/cardano/11443286',\n output: [\n {\n amount: 1110000n,\n blockNumber: 11443286,\n from: 'addr1qymdv285few5tyqvya86rl97r9e608njs37shfew6l2nn473aw2pcnrcvfwfgg2dnew99m4tjj0apsu7232w2euzwpysndh0h3',\n timestamp: '+057068-01-19T05:23:20.000Z',\n to: 'addr1q9syxu908lef7r6rsvk0h7gsx3rxj22cuykgx2a2l4hcfd8e9y2e9vtv4w9dyej96w99wwj8hwgc273862lk6a3vt30qjjrund',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 174257n,\n transactionHash: '261c42ba9124f55d8e169ebb692cd3759d796a54369acb316ee449b546e79309',\n },\n ],\n },\n\n // RIPPLE\n {\n params: {\n network: 'RIPPLE',\n walletAddress: 'rUUgoiJmjTPEbxfZ4RsS9pVS9Kv813Wpui',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/ripple/88104659',\n output: [\n {\n amount: 238n,\n blockNumber: 88104659,\n from: 'rMAGnTv4eMWktZnhKa5cHcDiY84ZiKUaQm',\n timestamp: '2024-05-19T22:18:52Z',\n to: 'rUUgoiJmjTPEbxfZ4RsS9pVS9Kv813Wpui',\n token: 'XRP',\n tokenType: 'NATIVE',\n transactionGasFee: 15n,\n transactionHash: '03564E6109261CDE73FCC5062C2A0A70F365CB1A0F9408C065B60EC3E94E4DBF',\n },\n ],\n },\n\n // STELLAR\n {\n params: {\n network: 'STELLAR',\n walletAddress: 'GA5KLTNAWV27IOTBX5PKUOMVWFMLX4X7CPMQJ4QLR3G266MMVL7NMA4X',\n contractAddress: 'GC4Z2TDXU4GXVLHOS5P5SU6HKBCP7NKN4TJ5ZGTVRBW7MCBZTU7SNUSA',\n },\n payload: 'https://jiti.indexing.co/networks/stellar/51720546',\n output: [\n {\n amount: 150000n,\n blockNumber: 51720546,\n from: 'GA5KLTNAWV27IOTBX5PKUOMVWFMLX4X7CPMQJ4QLR3G266MMVL7NMA4X',\n timestamp: '2024-05-18T04:41:39Z',\n to: 'GC4Z2TDXU4GXVLHOS5P5SU6HKBCP7NKN4TJ5ZGTVRBW7MCBZTU7SNUSA',\n token: 'GC4Z2TDXU4GXVLHOS5P5SU6HKBCP7NKN4TJ5ZGTVRBW7MCBZTU7SNUSA',\n tokenType: 'TOKEN',\n transactionGasFee: 100n,\n transactionHash: '4fb2441210cbe87f5003abdfa86f03bafa54f789ed041feccbda0bd054297c4d',\n },\n ],\n },\n // STARKNET\n {\n params: {\n network: 'STARKNET',\n walletAddress: '0x309e6b209031362268d62d646a067365e6f6d6eb7f571b5212cbdfd5f26fe54',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/starknet/1149460',\n output: [\n {\n amount: 0x1c286f74458fc6n,\n blockNumber: 1149460,\n from: '0x309e6b209031362268d62d646a067365e6f6d6eb7f571b5212cbdfd5f26fe54',\n timestamp: '2025-02-13T17:36:52.000Z',\n to: '0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 7925758505095110n,\n transactionHash: '0x707203dba31f442ae9a5477e6a8906f3676effa0f1d3bb19cbbc14e1ddfe21',\n },\n ],\n },\n //SUI\n {\n params: {\n network: 'SUI',\n walletAddress: '0xfd0fb434d076e4cca300cf6534a5235b19ad184eedf49066726664ded42c6b5e',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/sui/112336044',\n output: [\n {\n blockNumber: 112336044,\n from: '0xfd0fb434d076e4cca300cf6534a5235b19ad184eedf49066726664ded42c6b5e',\n to: undefined,\n amount: 180772n,\n token: '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI',\n tokenType: 'NATIVE',\n timestamp: '2025-02-13T23:10:54.529Z',\n transactionHash: '336V3wP8cHDAnB1Aku3j6n9948i8FG5N1eVP6Ac68BaE',\n transactionGasFee: -4165572n,\n },\n ],\n },\n // TON\n {\n params: {\n network: 'TON',\n walletAddress: 'EQAFukUyzmHjUvOYDOjNE-wbZFFl2FWas1rFJoh8IiTsWD40',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/ton/44919328',\n output: [\n {\n blockNumber: 44919328,\n from: 'EQAFukUyzmHjUvOYDOjNE-wbZFFl2FWas1rFJoh8IiTsWD40',\n to: 'EQCFTFAHOU3vFt2NiZhRD5dwuS0k7GS59vIg3WfCKwfaQGW2',\n amount: 10000000n,\n token: 'TON',\n tokenType: 'NATIVE',\n timestamp: '2025-02-13T23:10:18.000Z',\n transactionHash: 'Vh5cWr2uvCsdhoouBQ+EiUcF54os9oqvh8A/62EroQc=',\n transactionGasFee: 2355233n,\n },\n ],\n },\n\n // COSMOS\n {\n params: {\n network: 'COSMOS',\n walletAddress: 'cosmos1x4qvmtcfc02pklttfgxzdccxcsyzklrxavteyz',\n contractAddress: 'ibc/F663521BF1836B00F5F177680F74BFB9A8B5654A694D0D2BC249E03CF2509013',\n },\n payload: 'https://jiti.indexing.co/networks/cosmos/24419691',\n output: [\n {\n blockNumber: 24419691,\n from: 'cosmos1x4qvmtcfc02pklttfgxzdccxcsyzklrxavteyz',\n to: 'noble1x4qvmtcfc02pklttfgxzdccxcsyzklrx4073uv',\n amount: 500000n,\n token: 'ibc/F663521BF1836B00F5F177680F74BFB9A8B5654A694D0D2BC249E03CF2509013',\n tokenType: 'NATIVE',\n timestamp: '2025-02-14T21:48:22.809Z',\n transactionHash: 'DF5FB086E60EE2ADA3A842751337E06A40696D7983CC1C038ADE236B36ED8AEB',\n transactionGasFee: 4860n,\n },\n ],\n },\n\n // SOLANA\n {\n params: {\n network: 'SOLANA',\n walletAddress: 'D89hHJT5Aqyx1trP6EnGY9jJUB3whgnq3aUvvCqedvzf',\n contractAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n },\n payload: 'https://jiti.indexing.co/networks/solana/326286476',\n output: [\n {\n amount: 3000350n,\n blockNumber: 304546603,\n from: 'D89hHJT5Aqyx1trP6EnGY9jJUB3whgnq3aUvvCqedvzf',\n timestamp: '2025-03-12T14:42:16.000Z',\n to: 'HTd5J9YhYnN1nwCAQiykpNBjoDrgtPVUcpk9TBPMCV4b',\n transactionGasFee: 105000n,\n transactionHash: '3HKaqRRPyA2NHvmf3xzJpgTemxXcextCRmgwWfHpKhDqDbJSqCdy8GtH5zG8tHQU2Dcznf7JgMP7sCLQSoNPw2E5',\n token: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n tokenType: 'TOKEN',\n },\n ],\n },\n {\n params: {\n network: 'SOLANA',\n walletAddress: '5u3gUxSsiqddQf1QhRDRQqDaFe9f5S3pyVkVWy77gB85',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/solana/291562718',\n output: [\n {\n amount: 239999n,\n blockNumber: 270452291,\n from: '5u3gUxSsiqddQf1QhRDRQqDaFe9f5S3pyVkVWy77gB85',\n timestamp: '2024-09-23T16:45:56.000Z',\n to: 'CebN5WGQ4jvEPvsVU4EoHEpgzq1VV7AbicfhtW4xC9iM',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 45000n,\n transactionHash: '2TKq9VXjQocvyQGraxqRjyF8iASRPCmjJcGXkxYQbTknjFTToVB2rRSLMFCi5VwBx9uJ2fAN1YNt4Wr8TUVRuoMi',\n },\n {\n amount: 1n,\n blockNumber: 270452291,\n from: '5u3gUxSsiqddQf1QhRDRQqDaFe9f5S3pyVkVWy77gB85',\n timestamp: '2024-09-23T16:45:56.000Z',\n to: '8MCjBNEBEyT5uAnDBupUxQ8eiKHJcf4vh546g4uM7cjF',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 45000n,\n transactionHash: '2TKq9VXjQocvyQGraxqRjyF8iASRPCmjJcGXkxYQbTknjFTToVB2rRSLMFCi5VwBx9uJ2fAN1YNt4Wr8TUVRuoMi',\n },\n ],\n },\n {\n params: {\n network: 'SOLANA',\n walletAddress: '5cuy7pMhTPhVZN9xuhgSbykRb986siGJb6vnEtkuBrSU',\n contractAddress: '27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4',\n },\n payload: 'https://jiti.indexing.co/networks/solana/325076237',\n output: [\n {\n amount: 14216129n,\n blockNumber: 303338729,\n from: '8KbrpeSRYXYjWSSdG7gE1tR7Go8MmKKxKaei1gGc4U7Q',\n timestamp: '2025-03-07T01:16:59.000Z',\n to: '5cuy7pMhTPhVZN9xuhgSbykRb986siGJb6vnEtkuBrSU',\n transactionGasFee: 353096n,\n transactionHash: '54qvCYcmUvPX6K3KuKG1nGRJWq6696LxwPNsx7DX5rcRsLbFntGEuWCjHTVc5wMcUZhKs1MuXeqpuDswrvNjETNQ',\n token: '27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4',\n tokenType: 'TOKEN',\n },\n ],\n },\n ],\n};\n\nexport default tokenTransfersTemplate;\n","export * from './evm-address-to-checksum';\nexport * from './evm-chain-to-id';\nexport * from './evm-decode-log';\nexport * from './evm-method-signature-to-hex';\nexport * from './evm-normalize-raw-block';\n","import { keccak256 } from 'viem';\n\nexport function evmAddressToChecksum(address: string) {\n if (!address || !/^(0x)?[0-9a-f]{40}$/i.test(address)) {\n return null;\n }\n\n const stripAddress = address.slice(2).toLowerCase();\n const keccakHash = keccak256(stripAddress as `0x${string}`);\n let checksumAddress = '0x';\n\n for (let i = 0; i < stripAddress.length; i++) {\n checksumAddress += parseInt(keccakHash[i], 16) >= 8 ? stripAddress[i].toUpperCase() : stripAddress[i];\n }\n\n return checksumAddress;\n}\n","const CHAIN_ID = {\n ARBITRUM: 42161,\n AVALANCHE: 43114,\n BASE: 8453,\n BASE_SEPOLIA: 84532,\n BERACHAIN_BARTIO: 80084,\n BLAST: 81457,\n BSC: 56,\n CELO: 42220,\n CYBER: 7560,\n DEGEN: 666666666,\n ETHEREUM: 1,\n ETH_HOLESKY: 17000,\n ETH_SEPOLIA: 11155111,\n FRAXTAL: 252,\n FRAXTAL_SEPOLIA: 2522,\n FUSE: 122,\n GNOSIS: 100,\n GOLD: 4653,\n HAM: 5112,\n HEMI_TESTNET: 743111,\n LINEA: 59144,\n LINEA_SEPOLIA: 59141,\n LISK_SEPOLIA: 4202,\n LYRA: 957,\n LYRA_SEPOLIA: 901,\n MODE: 34443,\n MODE_SEPOLIA: 919,\n NEON: 245022934,\n OASIS_SAPPHIRE: 23294,\n OPTIMISM: 10,\n OP_SEPOLIA: 11155420,\n ORDERLY: 291,\n ORDERLY_SEPOLIA: 4460,\n PGN_SEPOLIA: 58008,\n POLYGON: 137,\n POLYGON_AMOY: 80002,\n POLYGON_ZKEVM: 1101,\n PUBLIC_GOODS_NETWORK: 424,\n SCROLL: 534352,\n SCROLL_SEPOLIA: 534351,\n STACK: 78225,\n SYNDICATE_FRAME_CHAIN: 5101,\n TRON: 728126428,\n ZER0: 543210,\n ZK_LINK: 810180,\n ZORA: 7777777,\n ZORA_SEPOLIA: 999999999,\n};\n\nexport function evmChainToId(chain: string) {\n return CHAIN_ID[chain?.toUpperCase()];\n}\n","import { decodeEventLog, parseAbi } from 'viem';\n\nimport { evmMethodSignatureToHex } from './evm-method-signature-to-hex';\n\ntype BasicLog = Record<string, unknown> & { address: string; topics: string[] };\ntype SignaturesToDecode = string | { addresses?: string[]; signature: string; topic0?: string };\n\nexport function evmDecodeLog(\n log: BasicLog,\n signatures: SignaturesToDecode | SignaturesToDecode[]\n): Record<string, unknown> {\n if (Array.isArray(signatures)) {\n for (const sig of signatures) {\n const decoded = evmDecodeLog(log, sig);\n if (decoded) {\n return decoded;\n }\n }\n\n return null;\n }\n\n if (typeof signatures !== 'string' && Array.isArray(signatures.addresses) && signatures.addresses.length) {\n const addresses = signatures.addresses.map((a) => a?.toLowerCase());\n if (!addresses.includes(log.address.toLowerCase())) {\n return null;\n }\n }\n\n let sig = (typeof signatures === 'string' ? signatures : signatures.signature).trim();\n if (!sig.startsWith('event ')) {\n sig = 'event ' + sig;\n }\n const topic0 = typeof signatures !== 'string' && signatures.topic0 ? signatures.topic0 : evmMethodSignatureToHex(sig);\n if ((sig.match(/ indexed /g)?.length || 0) === log.topics.length - 1) {\n if (log.topics[0] === topic0) {\n try {\n const result = decodeEventLog({\n abi: parseAbi([sig]),\n data: log.data as `0x${string}`,\n topics: log.topics as [],\n });\n return result.args as unknown as Record<string, unknown>;\n } catch (e) {\n // ignore this\n }\n }\n }\n\n return null;\n}\n\nexport function evmDecodeLogWithMetadata(\n log: BasicLog,\n signatures: SignaturesToDecode | SignaturesToDecode[]\n): { decoded: Record<string, unknown>; metadata: { name: string } } {\n for (const sig of [signatures].flat()) {\n const decoded = evmDecodeLog(log, sig);\n if (decoded) {\n return {\n decoded,\n metadata: {\n name: (typeof sig === 'string' ? sig : sig.signature).split('(')[0],\n },\n };\n }\n }\n\n return null;\n}\n","import { keccak256 } from 'viem';\n\nexport function evmMethodSignatureToHex(sig: string): string {\n const [method, rest] = sig.split('(');\n const params = rest\n .split(')')[0]\n .split(',')\n .map((p) => p.trim());\n const topic0 = keccak256(\n `${method.split(' ').pop()}(${params.map((p) => p.split(' ')[0]).join(',')})` as `0x${string}`\n );\n return topic0;\n}\n","import { evmAddressToChecksum } from './evm-address-to-checksum';\n\nexport function normalizeEVMBlock(rawBlock: Record<string, unknown>): Record<string, unknown> {\n for (const k of ['baseFeePerGas', 'gasLimit', 'gasUsed', 'number', 'size', 'timestamp']) {\n if (typeof rawBlock[k] === 'string') {\n rawBlock[k] = parseInt(rawBlock[k] as string);\n }\n }\n\n for (const k of ['difficulty', 'totalDifficulty']) {\n if (typeof rawBlock[k] === 'string') {\n rawBlock[k] = BigInt(rawBlock[k] as string).toString();\n }\n }\n for (const k of ['miner']) {\n rawBlock[k] = evmAddressToChecksum(rawBlock[k] as string);\n }\n\n rawBlock.transactions = (\n rawBlock.transactions as { receipt: Record<string, unknown>; traces: Record<string, unknown>[] } & Record<\n string,\n unknown\n >[]\n ).map((tx) => {\n for (const k of [\n 'blockNumber',\n 'cumulativeGasUsed',\n 'effectiveGasPrice',\n 'gas',\n 'gasUsed',\n 'nonce',\n 'status',\n 'transactionIndex',\n ]) {\n if (typeof tx[k] === 'string') {\n tx[k] = parseInt(tx[k] as string);\n }\n if (typeof tx.receipt[k] === 'string') {\n tx.receipt[k] = parseInt(tx.receipt[k] as string);\n }\n }\n\n for (const k of ['gasPrice', 'maxFeePerGas', 'maxPriorityFeePerGas', 'value']) {\n if (typeof tx[k] === 'string') {\n tx[k] = BigInt(tx[k] as string).toString();\n }\n if (typeof tx.receipt[k] === 'string') {\n tx.receipt[k] = BigInt(tx.receipt[k] as string).toString();\n }\n }\n\n for (const k of ['from', 'to']) {\n if (typeof tx[k] === 'string') {\n tx[k] = evmAddressToChecksum(tx[k] as string);\n }\n }\n for (const k of ['contractAddress']) {\n if (typeof tx.receipt[k] === 'string') {\n tx.receipt[k] = evmAddressToChecksum(tx.receipt[k] as string);\n }\n }\n\n tx.type = parseInt(tx.type as string);\n tx.receipt['status'] = Boolean(tx.receipt['status'] as string);\n\n tx.receipt['logs'] = (tx.receipt['logs'] as Record<string, unknown>[])?.map((log) => {\n for (const k of ['blockNumber', 'logIndex', 'transactionIndex']) {\n if (typeof log[k] === 'string') {\n log[k] = parseInt(log[k] as string);\n }\n }\n log['address'] = evmAddressToChecksum(log['address'] as string);\n return log;\n });\n\n return tx;\n });\n\n return rawBlock;\n}\n","export type Template = {\n key: string;\n name: string;\n description: string;\n disabled: boolean;\n tags: string[];\n params: Param[];\n transform: (\n payload: Record<string, unknown>,\n _ctx?: Record<string, unknown> & { params: Record<string, unknown> }\n ) => unknown;\n tests: TemplateTest[];\n};\n\nexport type Param = {\n key: string;\n name: string;\n type: 'NETWORK' | 'ADDRESS' | 'STRING' | 'NUMBER' | 'BOOLEAN';\n multiple?: boolean;\n optional?: boolean;\n values?: string[];\n default?: string;\n};\n\nexport type TemplateTest = {\n params: Record<string, unknown>;\n payload: `https://${string}` | Record<string, unknown>;\n output: unknown;\n};\n"],"names":[],"version":3,"file":"main.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["src/index.ts","src/templates/index.ts","src/templates/raw.ts","src/templates/token-transfers.ts","src/utils/index.ts","src/utils/evm-address-to-checksum.ts","src/utils/evm-chain-to-id.ts","src/utils/evm-decode-log.ts","src/utils/evm-method-signature-to-hex.ts","src/utils/evm-normalize-raw-block.ts","src/types.ts"],"sourcesContent":["import { templates as templateList } from './templates';\nimport * as utils from './utils';\nimport * as types from './types';\n\nconst templates = templateList.reduce((a, b) => ({ ...a, [b.key]: Object.assign({}, b) }), {});\n\nexport { utils, templates, types };\n\nexport function getAllTemplates() {\n return templateList.slice();\n}\n\nexport function getTemplateByKey(key: string) {\n return templateList.slice().find((template) => template.key === key);\n}\n","import rawTemplate from './raw';\nimport tokenTransfersTemplate from './token-transfers';\n\nexport const templates = [rawTemplate, tokenTransfersTemplate];\n","import { Template } from '../types';\n\nconst rawTemplate: Template = {\n key: 'raw',\n name: 'Raw Block Data',\n description: 'Get all blocks with all available fields',\n tags: ['EVM', 'RAW'],\n disabled: true,\n params: [],\n transform: (payload) => payload,\n tests: [\n {\n params: {},\n payload: { a: 'b', c: 1, d: { e: true } },\n output: { a: 'b', c: 1, d: { e: true } },\n },\n ],\n};\n\nexport default rawTemplate;\n","import { evmDecodeLogWithMetadata } from '../utils';\nimport { Template } from '../types';\nimport { decodeTxRaw, Registry } from '@cosmjs/proto-signing';\nimport { defaultRegistryTypes as defaultStargateTypes, SigningStargateClient } from '@cosmjs/stargate';\n\ntype NetworkTransfer = {\n amount: number | bigint;\n blockNumber: number;\n from: string;\n index?: string;\n timestamp: string;\n to: string;\n token?: string;\n tokenId?: string;\n tokenType: 'NATIVE' | 'TOKEN' | 'NFT';\n transactionGasFee: bigint;\n transactionHash: string;\n};\n\nconst NULL_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nconst tokenTransfersTemplate: Template = {\n key: 'token_transfers',\n name: 'Token Transfers',\n description: 'Get all token transfers for a set of token types.',\n tags: ['EVM', 'ERC20', 'ERC721', 'NFT', 'TOKEN'],\n disabled: false,\n params: [\n { key: 'network', name: 'Network', type: 'NETWORK', optional: false },\n { key: 'contractAddress', name: 'Contract Address', type: 'ADDRESS', optional: true },\n { key: 'walletAddress', name: 'Wallet Address', type: 'ADDRESS', optional: true },\n {\n key: 'tokenTypes',\n name: 'Token Types',\n type: 'STRING',\n multiple: true,\n optional: true,\n values: ['NATIVE', 'TOKEN', 'NFT'],\n },\n ],\n\n transform: (block, _ctx) => {\n const TOKEN_TYPES = (_ctx.params.tokenTypes as NetworkTransfer['tokenType'][]) || [];\n let transfers: NetworkTransfer[] = [];\n\n switch (block._network) {\n case 'APTOS':\n case 'APTOS_TESTNET': {\n for (const tx of block.transactions as Record<string, unknown>[]) {\n if (!tx?.events || !Array.isArray(tx.events)) {\n continue;\n }\n\n const timestamp = tx.timestamp ? new Date(parseInt(tx.timestamp as string) / 1000).toISOString() : null;\n const txfersByKey: Record<string, Record<string, string>> = {};\n\n for (const evt of tx.events as Record<string, unknown>[]) {\n if (['0x1::coin::WithdrawEvent', '0x1::coin::DepositEvent'].includes(evt.type as string)) {\n const amount = (evt.data as Record<string, string>)?.amount;\n const key = `0x1-${amount}`;\n txfersByKey[key] ||= { amount, tokenAddress: null };\n if ((evt.type as string).endsWith('WithdrawEvent')) {\n txfersByKey[key].from = (evt.guid as Record<string, string>)?.account_address;\n } else {\n txfersByKey[key].to = (evt.guid as Record<string, string>)?.account_address;\n }\n }\n }\n\n for (const partial of Object.values(txfersByKey)) {\n if (!partial.from || !partial.to) continue;\n transfers.push({\n amount: BigInt(partial.amount),\n blockNumber: parseInt(block.block_height as string),\n from: partial.from?.length < 66 ? `0x0${partial.from?.slice(2)}` : partial.from,\n timestamp,\n to: partial.to?.length < 66 ? `0x0${partial.to?.slice(2)}` : partial.to,\n token: partial.tokenAddress,\n tokenType: 'NATIVE',\n transactionGasFee: BigInt(tx.gas_used as string),\n transactionHash: tx.hash as string,\n });\n }\n }\n break;\n }\n\n case 'BITCOIN':\n case 'BITCOIN_TESTNET':\n case 'LITCOIN': // @TODO\n case 'DOGECOIN': {\n for (const tx of block.tx as Record<string, unknown>[]) {\n const timestamp = tx.time ? new Date((tx.time as number) * 1000).toISOString() : null;\n const vin = tx.vin[0] as { prevout?: { scriptPubKey: { address: string } }; vout?: number };\n const vout = tx.vout as { value: number; scriptPubKey?: { address: string; addresses?: string[] } }[];\n\n const fromVout = Math.min(vin.vout || 1000, vout.length - 1);\n const fromAddress =\n vin.prevout?.scriptPubKey?.address ||\n vout[fromVout]?.scriptPubKey?.address ||\n vout[fromVout]?.scriptPubKey?.addresses?.[0];\n if (!fromAddress) {\n continue;\n }\n\n for (const v of vout) {\n transfers.push({\n amount: BigInt(Math.round(v.value * Math.pow(10, 8))),\n blockNumber: block.height as number,\n from: fromAddress,\n timestamp,\n to: v.scriptPubKey.address || v.scriptPubKey.addresses?.[0],\n transactionGasFee: BigInt(Math.round(((tx.fee as number) || 0) * Math.pow(10, 8))),\n transactionHash: tx.txid as string,\n token: null,\n tokenType: 'NATIVE',\n });\n }\n }\n break;\n }\n\n case 'CARDANO': {\n const blockTimestamp = new Date((block.timestamp as number) * 1000).toISOString();\n\n for (const tx of block.transactions as unknown[]) {\n const typedTx = tx as {\n transaction_identifier?: { hash?: string };\n operations?: {\n type: string;\n account?: { address?: string };\n amount?: {\n value?: string;\n currency?: {\n symbol?: string;\n decimals?: number;\n };\n };\n }[];\n };\n\n if (!Array.isArray(typedTx.operations)) {\n continue;\n }\n\n const transactionHash = typedTx.transaction_identifier?.hash || '';\n\n const inputs = typedTx.operations.filter((op) => op.type === 'input');\n const outputs = typedTx.operations.filter((op) => op.type === 'output');\n\n if (!inputs.length && !outputs.length) {\n continue;\n }\n\n const fromAddress = inputs[0]?.account?.address;\n if (!fromAddress) {\n continue;\n }\n\n const sumInputs = inputs.reduce((acc, op) => {\n const val = BigInt(op.amount?.value || '0');\n return acc + val;\n }, BigInt(0));\n const sumOutputs = outputs.reduce((acc, op) => {\n const val = BigInt(op.amount?.value || '0');\n return acc + val;\n }, BigInt(0));\n\n const transactionFee = sumInputs + BigInt(sumOutputs);\n\n for (const out of outputs) {\n const rawValue = out.amount?.value || '0';\n const absoluteValue = BigInt(rawValue);\n transfers.push({\n amount: absoluteValue < 0 ? -absoluteValue : absoluteValue,\n blockNumber: (block.block_identifier as { index: number }).index,\n from: fromAddress,\n timestamp: blockTimestamp,\n to: out.account?.address || '',\n token: out.amount?.currency?.symbol?.toUpperCase() === 'ADA' ? null : out.amount?.currency?.symbol,\n tokenType: out.amount?.currency?.symbol?.toUpperCase() === 'ADA' ? 'NATIVE' : 'TOKEN',\n transactionGasFee: transactionFee < 0 ? -transactionFee : transactionFee,\n transactionHash,\n });\n }\n }\n break;\n }\n\n case 'RIPPLE': {\n if (!Array.isArray(block.transactions)) {\n break;\n }\n\n for (const rawTx of block.transactions) {\n const typedTx = rawTx as {\n Account?: string;\n Amount?: string | { currency: string; issuer: string; value: string };\n Destination?: string;\n Fee?: string;\n hash?: string;\n TransactionType?: string;\n date?: number;\n metaData?: {\n delivered_amount?: string | { currency: string; issuer: string; value: string };\n };\n };\n if (typedTx.TransactionType !== 'Payment') {\n continue;\n }\n const deliveredOrAmount = typedTx.metaData?.delivered_amount ?? typedTx.Amount ?? '0';\n let tokenSymbol = 'XRP';\n let tokenType: 'NATIVE' | 'TOKEN' | 'NFT' = 'NATIVE';\n\n let parsedAmount: bigint;\n\n if (typeof deliveredOrAmount === 'object') {\n tokenSymbol = deliveredOrAmount.currency?.toUpperCase() ?? 'UNKNOWN';\n tokenType = 'TOKEN';\n const floatVal = parseFloat(deliveredOrAmount.value);\n const smallestUnit = Math.round(floatVal * 1_000_000);\n parsedAmount = BigInt(smallestUnit);\n } else {\n parsedAmount = BigInt(String(deliveredOrAmount));\n }\n transfers.push({\n amount: parsedAmount,\n blockNumber: parseInt(block.ledger_index as string, 10),\n from: typedTx.Account ?? 'UNKNOWN',\n timestamp: block.close_time_iso ? (block.close_time_iso as string) : null,\n to: typedTx.Destination ?? 'UNKNOWN',\n token: tokenSymbol,\n tokenType: tokenType,\n transactionGasFee: BigInt(typedTx.Fee ?? '0'),\n transactionHash: typedTx.hash ?? '',\n });\n }\n\n break;\n }\n\n case 'SOLANA': {\n for (const tx of block.transactions as unknown[]) {\n const solanaTx = tx as {\n meta: {\n fee: number;\n postTokenBalances: {\n accountIndex: number;\n mint: string;\n owner: string;\n uiTokenAmount: { amount: string };\n }[];\n preTokenBalances: {\n accountIndex: number;\n mint: string;\n owner: string;\n uiTokenAmount: { amount: string };\n }[];\n postBalances: number[];\n preBalances: number[];\n };\n transaction: {\n message: { accountKeys: (string | { pubkey: string })[]; instructions: unknown[] };\n signatures: string[];\n };\n };\n const txHash = solanaTx.transaction.signatures[0];\n const timestamp = block.blockTime ? new Date((block.blockTime as number) * 1000).toISOString() : null;\n\n let txFee = BigInt(solanaTx.meta.fee);\n if (txFee < BigInt(10)) {\n txFee = txFee * BigInt(Math.pow(10, 9));\n }\n\n const transfersByKey: Record<string, NetworkTransfer> = {};\n for (const post of solanaTx.meta.postTokenBalances) {\n let matched = false;\n for (const pre of solanaTx.meta.preTokenBalances) {\n if (post.mint === pre.mint && post.owner === pre.owner) {\n let diff = BigInt(post.uiTokenAmount.amount) - BigInt(pre.uiTokenAmount.amount);\n if (diff === BigInt(0)) {\n continue;\n }\n const isNegDiff = diff < 0;\n if (diff < 0) {\n diff = -diff;\n }\n\n const key = `${post.mint}-${diff.toString()}`;\n const txfer: NetworkTransfer = {\n amount: diff,\n blockNumber: block.blockHeight as number,\n from: pre.owner,\n timestamp,\n to: post.owner,\n transactionGasFee: txFee,\n transactionHash: txHash,\n token: post.mint,\n tokenType: 'TOKEN',\n };\n if (transfersByKey[key]) {\n if (isNegDiff) {\n delete txfer.to;\n } else {\n delete txfer.from;\n }\n }\n transfersByKey[key] = Object.assign(transfersByKey[key] || {}, txfer);\n matched = true;\n }\n }\n\n if (!matched) {\n let diff = BigInt(post.uiTokenAmount.amount);\n const isNegDiff = diff < 0;\n if (diff < 0) {\n diff = -diff;\n }\n const key = `${post.mint}-${diff.toString()}`;\n const txfer: NetworkTransfer = {\n amount: diff,\n blockNumber: block.blockHeight as number,\n from: null,\n timestamp,\n to: post.owner,\n token: post.mint,\n tokenType: 'TOKEN',\n transactionGasFee: txFee,\n transactionHash: txHash,\n };\n if (transfersByKey[key]) {\n if (isNegDiff) {\n delete txfer.to;\n } else {\n delete txfer.from;\n }\n }\n transfersByKey[key] = Object.assign(transfersByKey[key] || {}, txfer);\n }\n }\n\n for (let i = 1; i < solanaTx.meta.postBalances.length; i += 1) {\n const post = solanaTx.meta.postBalances[i];\n const pre = solanaTx.meta.preBalances[i];\n if (post !== undefined && pre !== undefined && post !== pre) {\n let diff = BigInt(post) - BigInt(pre);\n if (diff < 0) {\n diff = -diff;\n }\n const key = `null-${diff.toString()}`;\n\n const txfer: NetworkTransfer = {\n amount: diff,\n blockNumber: block.blockHeight as number,\n from:\n post > pre\n ? typeof solanaTx.transaction.message.accountKeys[0] === 'string'\n ? solanaTx.transaction.message.accountKeys[0]\n : (solanaTx.transaction.message.accountKeys[0] as { pubkey: string })?.pubkey\n : typeof solanaTx.transaction.message.accountKeys[i] === 'string'\n ? (solanaTx.transaction.message.accountKeys[i] as string)\n : (solanaTx.transaction.message.accountKeys[i] as { pubkey: string })?.pubkey,\n timestamp,\n to:\n typeof solanaTx.transaction.message.accountKeys[i] === 'string'\n ? (solanaTx.transaction.message.accountKeys[i] as string)\n : (solanaTx.transaction.message.accountKeys[i] as { pubkey: string })?.pubkey?.toString(),\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: txFee,\n transactionHash: txHash,\n };\n if (transfersByKey[key]) {\n if (post > pre) {\n delete txfer.from;\n } else {\n delete txfer.to;\n }\n }\n transfersByKey[key] = Object.assign(transfersByKey[key] || {}, txfer);\n }\n }\n\n transfers.push(...Object.values(transfersByKey));\n }\n break;\n }\n\n case 'STARKNET': {\n if (!Array.isArray(block.transactions)) {\n break;\n }\n\n for (const tx of block.transactions) {\n const typedTx = tx as {\n transaction_hash: string;\n sender_address: string;\n receipt?: {\n actual_fee?: {\n amount?: string;\n unit?: string;\n };\n events?: {\n keys: string[];\n data: string[];\n }[];\n };\n timestamp?: number | string;\n data_availability?: Record<string, unknown>;\n };\n\n const timestamp = block.timestamp ? new Date((block.timestamp as number) * 1000).toISOString() : null;\n\n let transactionGasFee = BigInt(0);\n if (typedTx?.receipt?.actual_fee?.amount) {\n transactionGasFee = BigInt(typedTx.receipt.actual_fee.amount);\n }\n\n const transactionHash = typedTx.transaction_hash;\n\n if (!typedTx.receipt?.events) {\n continue;\n }\n\n for (const event of typedTx.receipt.events) {\n if (!event.keys.includes('0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9')) {\n continue;\n }\n if (event.data.length < 3) {\n continue;\n }\n\n const [from, to, amountHex] = event.data;\n const amount = BigInt(amountHex);\n\n transfers.push({\n amount,\n blockNumber: block.block_number as number,\n from,\n timestamp,\n to,\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee,\n transactionHash,\n });\n }\n }\n break;\n }\n\n case 'STELLAR': {\n for (const tx of block.transactions as unknown[]) {\n const typedTx = tx as {\n hash: string;\n created_at: string;\n fee_charged: string;\n operations: {\n type: string;\n from: string;\n to: string;\n amount: string;\n asset_type: string;\n asset_issuer: string;\n }[];\n };\n for (const op of typedTx.operations) {\n if (op.type === 'payment') {\n transfers.push({\n amount: BigInt(op.amount.replace('.', '')),\n blockNumber: block.sequence as number,\n from: op.from,\n timestamp: typedTx.created_at,\n to: op.to,\n token: op.asset_type === 'native' ? null : op.asset_issuer,\n tokenType: op.asset_type === 'native' ? 'NATIVE' : 'TOKEN',\n transactionGasFee: BigInt(typedTx.fee_charged),\n transactionHash: typedTx.hash,\n });\n }\n }\n }\n break;\n }\n\n case 'SUI': {\n const blockNumber = block.sequence as number;\n const blockTimestamp = new Date(block.timestamp as number).toISOString();\n\n for (const tx of (block.transactions as any[]) || []) {\n const transactionHash = tx.digest as string;\n const transactionGasFee = BigInt((tx.gasFee as string) || '0');\n\n for (const bc of (tx.balanceChanges as any[]) || []) {\n transfers.push({\n blockNumber,\n from: tx.sender ? (tx.sender as string) : undefined,\n to: tx.receiver ? (tx.receiver as string) : undefined,\n amount: BigInt(bc.amount as string),\n token: bc.coinRepr as string,\n tokenType: 'NATIVE',\n timestamp: blockTimestamp,\n transactionHash,\n transactionGasFee,\n });\n }\n }\n\n break;\n }\n\n case 'TON': {\n const blockNumber = block.seqno as number;\n const blockTimestamp = new Date((block.shards?.[0]?.gen_utime as number) * 1000).toISOString();\n\n for (const shard of (block.shards as any[]) || []) {\n for (const tx of (shard.transactions as any[]) || []) {\n const transactionLT = tx.transaction_id.lt as string;\n const transactionHash = tx.transaction_id.hash as string;\n const transactionFee = BigInt((tx.fee as string) || '0');\n\n const inVal = BigInt((tx.in_msg?.value as string) || '0');\n if (inVal > 0n) {\n transfers.push({\n blockNumber,\n from: tx.in_msg?.source?.account_address as string,\n to: tx.address?.account_address as string,\n amount: inVal,\n token: 'TON',\n tokenType: 'NATIVE',\n timestamp: blockTimestamp,\n transactionHash,\n transactionGasFee: transactionFee,\n });\n }\n\n for (const outMsg of (tx.out_msgs as any[]) || []) {\n const outVal = BigInt((outMsg.value as string) || '0');\n if (outVal > 0n) {\n transfers.push({\n blockNumber,\n from: outMsg.source?.account_address as string,\n to: outMsg.destination?.account_address as string,\n amount: outVal,\n token: 'TON',\n tokenType: 'NATIVE',\n timestamp: blockTimestamp,\n transactionHash,\n transactionGasFee: transactionFee,\n });\n }\n }\n }\n }\n\n break;\n }\n\n case 'ASTAR':\n case 'ENJIN':\n case 'KUSAMA':\n case 'POLKADOT':\n case 'BITTENSOR': {\n const typedBlock = block as {\n blockNumber: number;\n blockHash: string;\n header: { number: string };\n extrinsics: {\n method: string;\n signer: string;\n args: any[];\n hash: string;\n }[];\n };\n\n const blockNumber = typedBlock.blockNumber;\n\n const timestampExtrinsic = typedBlock.extrinsics.find((ex) => ex.method === 'timestamp.set');\n const blockTimestamp = timestampExtrinsic\n ? new Date(Number(timestampExtrinsic.args[0].toString().replace(/,/g, ''))).toISOString()\n : new Date().toISOString();\n\n for (const extrinsic of typedBlock.extrinsics) {\n if (['balances.transfer', 'balances.transferKeepAlive'].includes(extrinsic.method)) {\n const from = extrinsic.signer;\n const to = (extrinsic.args[0] as { Id?: string })?.Id || '';\n const amount = BigInt((extrinsic.args[1] as string).replace(/,/g, ''));\n\n transfers.push({\n amount,\n blockNumber,\n from,\n to,\n token: null,\n tokenType: 'NATIVE',\n timestamp: blockTimestamp,\n transactionGasFee: 0n,\n transactionHash: extrinsic.hash,\n });\n }\n }\n break;\n }\n\n case 'FILECOIN': {\n const typedBlock = block as {\n Height: number;\n Blocks: Array<{ ParentBaseFee: string; Timestamp: number }>;\n messages: Array<{\n blockMessages: {\n BlsMessages?: Array<unknown>;\n SecpkMessages?: Array<{\n Message: {\n From: string;\n To: string;\n Value: string;\n GasFeeCap: string;\n GasPremium: string;\n };\n CID: { '/': string };\n }>;\n };\n }>;\n receipts: Array<{ GasUsed: number }>;\n };\n\n const blockNumber = typedBlock.Height;\n const blockTimestamp = new Date(typedBlock.Blocks[0].Timestamp * 1000).toISOString();\n const parentBaseFee = BigInt(typedBlock.Blocks[0].ParentBaseFee);\n\n let receiptIndex = 0;\n\n for (const msgGroup of typedBlock.messages) {\n const secpkMessages = msgGroup.blockMessages.SecpkMessages || [];\n\n for (const msg of secpkMessages) {\n const receipt = typedBlock.receipts[receiptIndex++];\n const gasUsed = BigInt(receipt.GasUsed);\n const gasFeeCap = BigInt(msg.Message.GasFeeCap);\n const gasPremium = BigInt(msg.Message.GasPremium);\n const baseFeeBurn = gasUsed * parentBaseFee;\n const minerTip =\n gasUsed * (gasPremium < gasFeeCap - parentBaseFee ? gasPremium : gasFeeCap - parentBaseFee);\n const transactionGasFee = baseFeeBurn + minerTip;\n\n transfers.push({\n amount: BigInt(msg.Message.Value),\n blockNumber,\n from: msg.Message.From,\n to: msg.Message.To,\n token: null,\n tokenType: 'NATIVE',\n timestamp: blockTimestamp,\n transactionGasFee,\n transactionHash: msg.CID['/'],\n });\n }\n }\n break;\n }\n\n // attempt to introspect data types\n default: {\n // try Cosmos\n if (block.block) {\n const typedBlock = block as {\n block: { header: { height: string; time: string }; data: { txs?: string[] } };\n block_id: { hash: string };\n };\n\n const blockNumber = Number(typedBlock.block.header.height);\n const blockTimestamp = new Date(typedBlock.block.header.time).toISOString();\n const blockHash = typedBlock.block_id.hash;\n\n for (const txRaw of typedBlock.block.data.txs || []) {\n const decoded = decodeTxRaw(new Uint8Array(Buffer.from(txRaw, 'base64')));\n const transactionGasFee = BigInt(decoded.authInfo.fee?.amount?.[0]?.amount || '0');\n\n const registry = new Registry(defaultStargateTypes);\n for (const message of decoded.body.messages) {\n if (\n ['/ibc.applications.transfer.v1.MsgTransfer', '/cosmos.bank.v1beta1.MsgSend'].includes(message.typeUrl)\n ) {\n const decodedMsg = registry.decode(message);\n transfers.push({\n blockNumber,\n from: decodedMsg.sender,\n to: decodedMsg.receiver,\n amount: BigInt(decodedMsg.token.amount),\n token: decodedMsg.token.denom,\n tokenType: 'NATIVE',\n timestamp: blockTimestamp,\n transactionHash: blockHash,\n transactionGasFee,\n });\n }\n }\n }\n\n break;\n }\n\n // otherwise assume EVM\n for (const tx of block.transactions as any[]) {\n if (!tx.receipt) {\n continue;\n }\n\n const timestamp = new Date((block.timestamp as number) * 1000).toISOString();\n const transactionGasFee = BigInt(tx.receipt.gasUsed) * BigInt(tx.receipt.effectiveGasPrice);\n\n // track direct ETH transfers\n if (!TOKEN_TYPES.length || TOKEN_TYPES.includes('NATIVE')) {\n // pull from traces, if available\n if (Array.isArray(tx.traces)) {\n for (const trace of tx.traces.filter((t) => t.action)) {\n const action = trace.action as unknown as { from: string; to: string; value: string };\n if (!action?.value) continue;\n\n transfers.push({\n amount: BigInt(action.value),\n blockNumber: tx.blockNumber as number,\n from: action.from?.toLowerCase() || NULL_ADDRESS,\n index: trace.traceAddress?.join('-'),\n timestamp,\n to: action.to?.toLowerCase() || NULL_ADDRESS,\n tokenType: 'NATIVE',\n transactionGasFee,\n transactionHash: tx.hash,\n });\n }\n } else if ((tx.value as string)?.length >= 3 || /\\d+/.test(tx.value as string)) {\n transfers.push({\n amount: BigInt(tx.value as string),\n blockNumber: tx.blockNumber as number,\n from: tx.from?.toLowerCase() || NULL_ADDRESS,\n timestamp,\n to: tx.to?.toLowerCase() || NULL_ADDRESS,\n tokenType: 'NATIVE',\n transactionGasFee,\n transactionHash: tx.hash,\n });\n }\n }\n\n // track ERC20 transfers\n if (!TOKEN_TYPES.length || TOKEN_TYPES.includes('TOKEN')) {\n for (const log of tx.receipt.logs) {\n const txfer = evmDecodeLogWithMetadata(log, [\n 'Transfer(address indexed from, address indexed to, uint256 value)',\n ]);\n if (txfer) {\n transfers.push({\n amount: txfer.decoded.value as bigint,\n blockNumber: tx.blockNumber as number,\n from: (txfer.decoded.from as string)?.toLowerCase() || NULL_ADDRESS,\n index: log.logIndex,\n timestamp,\n to: (txfer.decoded.to as string)?.toLowerCase() || NULL_ADDRESS,\n token: (log.address as string).toLowerCase(),\n tokenType: 'TOKEN',\n transactionGasFee,\n transactionHash: tx.hash,\n });\n }\n }\n }\n\n if (!TOKEN_TYPES.length || TOKEN_TYPES.includes('NFT')) {\n for (const log of tx.receipt.logs) {\n const txfer = evmDecodeLogWithMetadata(log, [\n 'Transfer(address indexed from, address indexed to, uint256 indexed value)',\n 'TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)',\n 'TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)',\n ]);\n\n if (!txfer) continue;\n\n switch (txfer.metadata.name) {\n case 'Transfer': {\n transfers.push({\n amount: 1,\n blockNumber: tx.blockNumber as number,\n from: (txfer.decoded.from as string)?.toLowerCase() || NULL_ADDRESS,\n index: log.logIndex,\n timestamp,\n to: (txfer.decoded.to as string)?.toLowerCase() || NULL_ADDRESS,\n token: (log.address as string).toLowerCase(),\n tokenId: (txfer.decoded.value as bigint).toString(),\n tokenType: 'NFT',\n transactionGasFee,\n transactionHash: tx.hash,\n });\n break;\n }\n case 'TransferSingle': {\n transfers.push({\n amount: txfer.decoded.value as bigint,\n blockNumber: tx.blockNumber as number,\n from: (txfer.decoded.from as string)?.toLowerCase() || NULL_ADDRESS,\n index: log.logIndex,\n timestamp,\n to: (txfer.decoded.to as string)?.toLowerCase() || NULL_ADDRESS,\n token: (log.address as string).toLowerCase(),\n tokenId: (txfer.decoded.id as bigint).toString(),\n tokenType: 'NFT',\n transactionGasFee,\n transactionHash: tx.hash,\n });\n break;\n }\n case 'TransferBatch': {\n for (let i = 0; i < (txfer.decoded.ids as bigint[]).length; i += 1) {\n transfers.push({\n amount: txfer.decoded.values[i] as bigint,\n blockNumber: tx.blockNumber as number,\n from: (txfer.decoded.from as string)?.toLowerCase() || NULL_ADDRESS,\n index: log.logIndex,\n timestamp,\n to: (txfer.decoded.to as string)?.toLowerCase() || NULL_ADDRESS,\n token: (log.address as string).toLowerCase(),\n tokenId: (txfer.decoded.ids[i] as bigint).toString(),\n tokenType: 'NFT',\n transactionGasFee,\n transactionHash: tx.hash,\n });\n }\n break;\n }\n }\n }\n }\n }\n if (typeof _ctx.params.contractAddress === 'string') {\n _ctx.params.contractAddress = _ctx.params.contractAddress.toLowerCase();\n }\n if (typeof _ctx.params.walletAddress === 'string') {\n _ctx.params.walletAddress = _ctx.params.walletAddress.toLowerCase();\n }\n break;\n }\n }\n\n const seenTransfers = new Set<string>();\n\n transfers = transfers.filter((txfer) => {\n if (txfer.amount <= BigInt(0)) {\n return false;\n }\n if (_ctx.params.contractAddress && _ctx.params.contractAddress !== txfer.token && txfer.token) {\n return false;\n }\n if (_ctx.params.walletAddress && ![txfer.from, txfer.to].includes(_ctx.params.walletAddress as string)) {\n return false;\n }\n\n const key = `${txfer.transactionHash}-${txfer.from}-${txfer.to}-${txfer.amount}-${txfer.token}`;\n\n if (seenTransfers.has(key)) {\n return false;\n }\n\n seenTransfers.add(key);\n\n return true;\n });\n\n return transfers;\n },\n\n tests: [\n // APTOS\n {\n params: {\n network: 'APTOS',\n walletAddress: '0x04b2b6bc8c2c5794c51607c962f482593f9b5ea09373a8ce249a1f799cca7a1e',\n contractAddress: '0x1',\n },\n payload: 'https://jiti.indexing.co/networks/aptos/297956660',\n output: [\n {\n amount: 1502138836n,\n blockNumber: 297956660,\n from: '0x5bd7de5c56d5691f32ea86c973c73fec7b1445e59736c97158020018c080bb00',\n timestamp: '2025-03-02T21:07:06.002Z',\n to: '0x04b2b6bc8c2c5794c51607c962f482593f9b5ea09373a8ce249a1f799cca7a1e',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 13n,\n transactionHash: '0xfbdef795d11df124cca264f3370b09fb04fb1c1d24a2d2e1df0693c096a76d13',\n },\n ],\n },\n\n // BASE\n {\n params: {\n network: 'BASE',\n walletAddress: '0x4F80864cD68782144e3736626896990acAe15a11',\n contractAddress: '0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed',\n },\n payload: 'https://jiti.indexing.co/networks/base/23507423',\n output: [\n {\n amount: 1000000000000000000000n,\n blockNumber: 23507423,\n from: '0x053002b4b332b422733c9469ddf9990bb6235e3d',\n index: 536,\n timestamp: '2024-12-10T04:16:33.000Z',\n to: '0x4f80864cd68782144e3736626896990acae15a11',\n token: '0x4ed4e862860bed51a9570b96d89af5e1b0efefed',\n tokenType: 'TOKEN',\n transactionGasFee: 1192354854229n,\n transactionHash: '0x69c9b12ccbe2d4f2f1dfc7c4a8557fc099fc5df276424417815acbc79a06fd56',\n },\n ],\n },\n\n // BITTENSOR\n {\n params: {\n network: 'BITTENSOR',\n walletAddress: '5G6WmJ4mym9oSQzUF5tr7LvsNMvH5vWtutZM8vMvRv1Wwy6J',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/bittensor/2652896',\n output: [\n {\n amount: 2154999850n,\n blockNumber: 2652896,\n from: '5G6WmJ4mym9oSQzUF5tr7LvsNMvH5vWtutZM8vMvRv1Wwy6J',\n to: '5CFwmfLfL1Z6vXU6hgGksh6irDFpcVXaTTNRoqDGMyHrDKK1',\n token: null,\n tokenType: 'NATIVE',\n timestamp: '2024-03-28T12:53:36.001Z',\n transactionGasFee: 0n,\n transactionHash: '0x9ea55a8f40b8d7704f27964155476ab9c744ec2ef2b1f431ad0e05a3a6f3c1ab',\n },\n ],\n },\n\n // CARDANO\n {\n params: {\n network: 'CARDANO',\n walletAddress:\n 'addr1q9syxu908lef7r6rsvk0h7gsx3rxj22cuykgx2a2l4hcfd8e9y2e9vtv4w9dyej96w99wwj8hwgc273862lk6a3vt30qjjrund',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/cardano/11443286',\n output: [\n {\n amount: 1110000n,\n blockNumber: 11443286,\n from: 'addr1qymdv285few5tyqvya86rl97r9e608njs37shfew6l2nn473aw2pcnrcvfwfgg2dnew99m4tjj0apsu7232w2euzwpysndh0h3',\n timestamp: '+057068-01-19T05:23:20.000Z',\n to: 'addr1q9syxu908lef7r6rsvk0h7gsx3rxj22cuykgx2a2l4hcfd8e9y2e9vtv4w9dyej96w99wwj8hwgc273862lk6a3vt30qjjrund',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 174257n,\n transactionHash: '261c42ba9124f55d8e169ebb692cd3759d796a54369acb316ee449b546e79309',\n },\n ],\n },\n\n // DOGECOIN\n {\n params: {\n network: 'DOGECOIN',\n walletAddress: 'DMqRVLrhbam3Kcfddpxd6EYvEBbpi3bEpP',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/dogecoin/1000075',\n output: [\n {\n amount: 1008521000000n,\n blockNumber: 1000075,\n from: 'DMqRVLrhbam3Kcfddpxd6EYvEBbpi3bEpP',\n to: 'DMqRVLrhbam3Kcfddpxd6EYvEBbpi3bEpP',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 0n,\n transactionHash: '9873fe46ab29f61cefdec498b691af68e0ad29a7599c94f42d2d4e9a5d461dbe',\n timestamp: '2015-12-13T19:59:52.000Z',\n },\n ],\n },\n\n //FILECOIN\n {\n params: {\n network: 'FILECOIN',\n walletAddress: 'f1e3aa3z6gkaqxxwmbbna5gf2frggswwjaeavx7bq',\n contractAddress: 'f1bqdligg7ipuiizvmdn7ijobhbkwaieh6z6lah5y',\n },\n payload: 'https://jiti.indexing.co/networks/filecoin/4818438',\n output: [\n {\n amount: 7896300000000000000n,\n blockNumber: 4818438,\n from: 'f1e3aa3z6gkaqxxwmbbna5gf2frggswwjaeavx7bq',\n timestamp: '2025-03-24T23:39:00.000Z',\n to: 'f1bqdligg7ipuiizvmdn7ijobhbkwaieh6z6lah5y',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 1592498365133760n,\n transactionHash: 'bafy2bzacecxud3tayyq3caagjej5srufcx5fufjuqkz3ltgfty27wdsrmqeew',\n },\n ],\n },\n\n // RIPPLE\n {\n params: {\n network: 'RIPPLE',\n walletAddress: 'rUUgoiJmjTPEbxfZ4RsS9pVS9Kv813Wpui',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/ripple/88104659',\n output: [\n {\n amount: 238n,\n blockNumber: 88104659,\n from: 'rMAGnTv4eMWktZnhKa5cHcDiY84ZiKUaQm',\n timestamp: '2024-05-19T22:18:52Z',\n to: 'rUUgoiJmjTPEbxfZ4RsS9pVS9Kv813Wpui',\n token: 'XRP',\n tokenType: 'NATIVE',\n transactionGasFee: 15n,\n transactionHash: '03564E6109261CDE73FCC5062C2A0A70F365CB1A0F9408C065B60EC3E94E4DBF',\n },\n ],\n },\n\n // STELLAR\n {\n params: {\n network: 'STELLAR',\n walletAddress: 'GA5KLTNAWV27IOTBX5PKUOMVWFMLX4X7CPMQJ4QLR3G266MMVL7NMA4X',\n contractAddress: 'GC4Z2TDXU4GXVLHOS5P5SU6HKBCP7NKN4TJ5ZGTVRBW7MCBZTU7SNUSA',\n },\n payload: 'https://jiti.indexing.co/networks/stellar/51720546',\n output: [\n {\n amount: 150000n,\n blockNumber: 51720546,\n from: 'GA5KLTNAWV27IOTBX5PKUOMVWFMLX4X7CPMQJ4QLR3G266MMVL7NMA4X',\n timestamp: '2024-05-18T04:41:39Z',\n to: 'GC4Z2TDXU4GXVLHOS5P5SU6HKBCP7NKN4TJ5ZGTVRBW7MCBZTU7SNUSA',\n token: 'GC4Z2TDXU4GXVLHOS5P5SU6HKBCP7NKN4TJ5ZGTVRBW7MCBZTU7SNUSA',\n tokenType: 'TOKEN',\n transactionGasFee: 100n,\n transactionHash: '4fb2441210cbe87f5003abdfa86f03bafa54f789ed041feccbda0bd054297c4d',\n },\n ],\n },\n // STARKNET\n {\n params: {\n network: 'STARKNET',\n walletAddress: '0x309e6b209031362268d62d646a067365e6f6d6eb7f571b5212cbdfd5f26fe54',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/starknet/1149460',\n output: [\n {\n amount: 0x1c286f74458fc6n,\n blockNumber: 1149460,\n from: '0x309e6b209031362268d62d646a067365e6f6d6eb7f571b5212cbdfd5f26fe54',\n timestamp: '2025-02-13T17:36:52.000Z',\n to: '0x1176a1bd84444c89232ec27754698e5d2e7e1a7f1539f12027f28b23ec9f3d8',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 7925758505095110n,\n transactionHash: '0x707203dba31f442ae9a5477e6a8906f3676effa0f1d3bb19cbbc14e1ddfe21',\n },\n ],\n },\n //SUI\n {\n params: {\n network: 'SUI',\n walletAddress: '0xfd0fb434d076e4cca300cf6534a5235b19ad184eedf49066726664ded42c6b5e',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/sui/112336044',\n output: [\n {\n blockNumber: 112336044,\n from: '0xfd0fb434d076e4cca300cf6534a5235b19ad184eedf49066726664ded42c6b5e',\n to: undefined,\n amount: 180772n,\n token: '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI',\n tokenType: 'NATIVE',\n timestamp: '2025-02-13T23:10:54.529Z',\n transactionHash: '336V3wP8cHDAnB1Aku3j6n9948i8FG5N1eVP6Ac68BaE',\n transactionGasFee: -4165572n,\n },\n ],\n },\n // TON\n {\n params: {\n network: 'TON',\n walletAddress: 'EQAFukUyzmHjUvOYDOjNE-wbZFFl2FWas1rFJoh8IiTsWD40',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/ton/44919328',\n output: [\n {\n blockNumber: 44919328,\n from: 'EQAFukUyzmHjUvOYDOjNE-wbZFFl2FWas1rFJoh8IiTsWD40',\n to: 'EQCFTFAHOU3vFt2NiZhRD5dwuS0k7GS59vIg3WfCKwfaQGW2',\n amount: 10000000n,\n token: 'TON',\n tokenType: 'NATIVE',\n timestamp: '2025-02-13T23:10:18.000Z',\n transactionHash: 'Vh5cWr2uvCsdhoouBQ+EiUcF54os9oqvh8A/62EroQc=',\n transactionGasFee: 2355233n,\n },\n ],\n },\n\n // COSMOS\n {\n params: {\n network: 'COSMOS',\n walletAddress: 'cosmos1x4qvmtcfc02pklttfgxzdccxcsyzklrxavteyz',\n contractAddress: 'ibc/F663521BF1836B00F5F177680F74BFB9A8B5654A694D0D2BC249E03CF2509013',\n },\n payload: 'https://jiti.indexing.co/networks/cosmos/24419691',\n output: [\n {\n blockNumber: 24419691,\n from: 'cosmos1x4qvmtcfc02pklttfgxzdccxcsyzklrxavteyz',\n to: 'noble1x4qvmtcfc02pklttfgxzdccxcsyzklrx4073uv',\n amount: 500000n,\n token: 'ibc/F663521BF1836B00F5F177680F74BFB9A8B5654A694D0D2BC249E03CF2509013',\n tokenType: 'NATIVE',\n timestamp: '2025-02-14T21:48:22.809Z',\n transactionHash: 'DF5FB086E60EE2ADA3A842751337E06A40696D7983CC1C038ADE236B36ED8AEB',\n transactionGasFee: 4860n,\n },\n ],\n },\n\n // SOLANA\n {\n params: {\n network: 'SOLANA',\n walletAddress: 'D89hHJT5Aqyx1trP6EnGY9jJUB3whgnq3aUvvCqedvzf',\n contractAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n },\n payload: 'https://jiti.indexing.co/networks/solana/326286476',\n output: [\n {\n amount: 3000350n,\n blockNumber: 304546603,\n from: 'D89hHJT5Aqyx1trP6EnGY9jJUB3whgnq3aUvvCqedvzf',\n timestamp: '2025-03-12T14:42:16.000Z',\n to: 'HTd5J9YhYnN1nwCAQiykpNBjoDrgtPVUcpk9TBPMCV4b',\n transactionGasFee: 105000n,\n transactionHash: '3HKaqRRPyA2NHvmf3xzJpgTemxXcextCRmgwWfHpKhDqDbJSqCdy8GtH5zG8tHQU2Dcznf7JgMP7sCLQSoNPw2E5',\n token: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n tokenType: 'TOKEN',\n },\n ],\n },\n {\n params: {\n network: 'SOLANA',\n walletAddress: '5u3gUxSsiqddQf1QhRDRQqDaFe9f5S3pyVkVWy77gB85',\n contractAddress: '',\n },\n payload: 'https://jiti.indexing.co/networks/solana/291562718',\n output: [\n {\n amount: 239999n,\n blockNumber: 270452291,\n from: '5u3gUxSsiqddQf1QhRDRQqDaFe9f5S3pyVkVWy77gB85',\n timestamp: '2024-09-23T16:45:56.000Z',\n to: 'CebN5WGQ4jvEPvsVU4EoHEpgzq1VV7AbicfhtW4xC9iM',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 45000n,\n transactionHash: '2TKq9VXjQocvyQGraxqRjyF8iASRPCmjJcGXkxYQbTknjFTToVB2rRSLMFCi5VwBx9uJ2fAN1YNt4Wr8TUVRuoMi',\n },\n {\n amount: 1n,\n blockNumber: 270452291,\n from: '5u3gUxSsiqddQf1QhRDRQqDaFe9f5S3pyVkVWy77gB85',\n timestamp: '2024-09-23T16:45:56.000Z',\n to: '8MCjBNEBEyT5uAnDBupUxQ8eiKHJcf4vh546g4uM7cjF',\n token: null,\n tokenType: 'NATIVE',\n transactionGasFee: 45000n,\n transactionHash: '2TKq9VXjQocvyQGraxqRjyF8iASRPCmjJcGXkxYQbTknjFTToVB2rRSLMFCi5VwBx9uJ2fAN1YNt4Wr8TUVRuoMi',\n },\n ],\n },\n {\n params: {\n network: 'SOLANA',\n walletAddress: '5cuy7pMhTPhVZN9xuhgSbykRb986siGJb6vnEtkuBrSU',\n contractAddress: '27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4',\n },\n payload: 'https://jiti.indexing.co/networks/solana/325076237',\n output: [\n {\n amount: 14216129n,\n blockNumber: 303338729,\n from: '8KbrpeSRYXYjWSSdG7gE1tR7Go8MmKKxKaei1gGc4U7Q',\n timestamp: '2025-03-07T01:16:59.000Z',\n to: '5cuy7pMhTPhVZN9xuhgSbykRb986siGJb6vnEtkuBrSU',\n transactionGasFee: 353096n,\n transactionHash: '54qvCYcmUvPX6K3KuKG1nGRJWq6696LxwPNsx7DX5rcRsLbFntGEuWCjHTVc5wMcUZhKs1MuXeqpuDswrvNjETNQ',\n token: '27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4',\n tokenType: 'TOKEN',\n },\n ],\n },\n ],\n};\n\nexport default tokenTransfersTemplate;\n","export * from './evm-address-to-checksum';\nexport * from './evm-chain-to-id';\nexport * from './evm-decode-log';\nexport * from './evm-method-signature-to-hex';\nexport * from './evm-normalize-raw-block';\n","import { keccak256 } from 'viem';\n\nexport function evmAddressToChecksum(address: string) {\n if (!address || !/^(0x)?[0-9a-f]{40}$/i.test(address)) {\n return null;\n }\n\n const stripAddress = address.slice(2).toLowerCase();\n const keccakHash = keccak256(stripAddress as `0x${string}`);\n let checksumAddress = '0x';\n\n for (let i = 0; i < stripAddress.length; i++) {\n checksumAddress += parseInt(keccakHash[i], 16) >= 8 ? stripAddress[i].toUpperCase() : stripAddress[i];\n }\n\n return checksumAddress;\n}\n","const CHAIN_ID = {\n ARBITRUM: 42161,\n AVALANCHE: 43114,\n BASE: 8453,\n BASE_SEPOLIA: 84532,\n BERACHAIN_BARTIO: 80084,\n BLAST: 81457,\n BSC: 56,\n CELO: 42220,\n CYBER: 7560,\n DEGEN: 666666666,\n ETHEREUM: 1,\n ETH_HOLESKY: 17000,\n ETH_SEPOLIA: 11155111,\n FRAXTAL: 252,\n FRAXTAL_SEPOLIA: 2522,\n FUSE: 122,\n GNOSIS: 100,\n GOLD: 4653,\n HAM: 5112,\n HEMI_TESTNET: 743111,\n LINEA: 59144,\n LINEA_SEPOLIA: 59141,\n LISK_SEPOLIA: 4202,\n LYRA: 957,\n LYRA_SEPOLIA: 901,\n MODE: 34443,\n MODE_SEPOLIA: 919,\n NEON: 245022934,\n OASIS_SAPPHIRE: 23294,\n OPTIMISM: 10,\n OP_SEPOLIA: 11155420,\n ORDERLY: 291,\n ORDERLY_SEPOLIA: 4460,\n PGN_SEPOLIA: 58008,\n POLYGON: 137,\n POLYGON_AMOY: 80002,\n POLYGON_ZKEVM: 1101,\n PUBLIC_GOODS_NETWORK: 424,\n SCROLL: 534352,\n SCROLL_SEPOLIA: 534351,\n STACK: 78225,\n SYNDICATE_FRAME_CHAIN: 5101,\n TRON: 728126428,\n ZER0: 543210,\n ZK_LINK: 810180,\n ZORA: 7777777,\n ZORA_SEPOLIA: 999999999,\n};\n\nexport function evmChainToId(chain: string) {\n return CHAIN_ID[chain?.toUpperCase()];\n}\n","import { decodeEventLog, parseAbi } from 'viem';\n\nimport { evmMethodSignatureToHex } from './evm-method-signature-to-hex';\n\ntype BasicLog = Record<string, unknown> & { address: string; topics: string[] };\ntype SignaturesToDecode = string | { addresses?: string[]; signature: string; topic0?: string };\n\nexport function evmDecodeLog(\n log: BasicLog,\n signatures: SignaturesToDecode | SignaturesToDecode[]\n): Record<string, unknown> {\n if (Array.isArray(signatures)) {\n for (const sig of signatures) {\n const decoded = evmDecodeLog(log, sig);\n if (decoded) {\n return decoded;\n }\n }\n\n return null;\n }\n\n if (typeof signatures !== 'string' && Array.isArray(signatures.addresses) && signatures.addresses.length) {\n const addresses = signatures.addresses.map((a) => a?.toLowerCase());\n if (!addresses.includes(log.address.toLowerCase())) {\n return null;\n }\n }\n\n let sig = (typeof signatures === 'string' ? signatures : signatures.signature).trim();\n if (!sig.startsWith('event ')) {\n sig = 'event ' + sig;\n }\n const topic0 = typeof signatures !== 'string' && signatures.topic0 ? signatures.topic0 : evmMethodSignatureToHex(sig);\n if ((sig.match(/ indexed /g)?.length || 0) === log.topics.length - 1) {\n if (log.topics[0] === topic0) {\n try {\n const result = decodeEventLog({\n abi: parseAbi([sig]),\n data: log.data as `0x${string}`,\n topics: log.topics as [],\n });\n return result.args as unknown as Record<string, unknown>;\n } catch (e) {\n // ignore this\n }\n }\n }\n\n return null;\n}\n\nexport function evmDecodeLogWithMetadata(\n log: BasicLog,\n signatures: SignaturesToDecode | SignaturesToDecode[]\n): { decoded: Record<string, unknown>; metadata: { name: string } } {\n for (const sig of [signatures].flat()) {\n const decoded = evmDecodeLog(log, sig);\n if (decoded) {\n return {\n decoded,\n metadata: {\n name: (typeof sig === 'string' ? sig : sig.signature).split('(')[0],\n },\n };\n }\n }\n\n return null;\n}\n","import { keccak256 } from 'viem';\n\nexport function evmMethodSignatureToHex(sig: string): string {\n const [method, rest] = sig.split('(');\n const params = rest\n .split(')')[0]\n .split(',')\n .map((p) => p.trim());\n const topic0 = keccak256(\n `${method.split(' ').pop()}(${params.map((p) => p.split(' ')[0]).join(',')})` as `0x${string}`\n );\n return topic0;\n}\n","import { evmAddressToChecksum } from './evm-address-to-checksum';\n\nexport function normalizeEVMBlock(rawBlock: Record<string, unknown>): Record<string, unknown> {\n for (const k of ['baseFeePerGas', 'gasLimit', 'gasUsed', 'number', 'size', 'timestamp']) {\n if (typeof rawBlock[k] === 'string') {\n rawBlock[k] = parseInt(rawBlock[k] as string);\n }\n }\n\n for (const k of ['difficulty', 'totalDifficulty']) {\n if (typeof rawBlock[k] === 'string') {\n rawBlock[k] = BigInt(rawBlock[k] as string).toString();\n }\n }\n for (const k of ['miner']) {\n rawBlock[k] = evmAddressToChecksum(rawBlock[k] as string);\n }\n\n rawBlock.transactions = (\n rawBlock.transactions as { receipt: Record<string, unknown>; traces: Record<string, unknown>[] } & Record<\n string,\n unknown\n >[]\n ).map((tx) => {\n for (const k of [\n 'blockNumber',\n 'cumulativeGasUsed',\n 'effectiveGasPrice',\n 'gas',\n 'gasUsed',\n 'nonce',\n 'status',\n 'transactionIndex',\n ]) {\n if (typeof tx[k] === 'string') {\n tx[k] = parseInt(tx[k] as string);\n }\n if (typeof tx.receipt[k] === 'string') {\n tx.receipt[k] = parseInt(tx.receipt[k] as string);\n }\n }\n\n for (const k of ['gasPrice', 'maxFeePerGas', 'maxPriorityFeePerGas', 'value']) {\n if (typeof tx[k] === 'string') {\n tx[k] = BigInt(tx[k] as string).toString();\n }\n if (typeof tx.receipt[k] === 'string') {\n tx.receipt[k] = BigInt(tx.receipt[k] as string).toString();\n }\n }\n\n for (const k of ['from', 'to']) {\n if (typeof tx[k] === 'string') {\n tx[k] = evmAddressToChecksum(tx[k] as string);\n }\n }\n for (const k of ['contractAddress']) {\n if (typeof tx.receipt[k] === 'string') {\n tx.receipt[k] = evmAddressToChecksum(tx.receipt[k] as string);\n }\n }\n\n tx.type = parseInt(tx.type as string);\n tx.receipt['status'] = Boolean(tx.receipt['status'] as string);\n\n tx.receipt['logs'] = (tx.receipt['logs'] as Record<string, unknown>[])?.map((log) => {\n for (const k of ['blockNumber', 'logIndex', 'transactionIndex']) {\n if (typeof log[k] === 'string') {\n log[k] = parseInt(log[k] as string);\n }\n }\n log['address'] = evmAddressToChecksum(log['address'] as string);\n return log;\n });\n\n return tx;\n });\n\n return rawBlock;\n}\n","export type Template = {\n key: string;\n name: string;\n description: string;\n disabled: boolean;\n tags: string[];\n params: Param[];\n transform: (\n payload: Record<string, unknown>,\n _ctx?: Record<string, unknown> & { params: Record<string, unknown> }\n ) => unknown;\n tests: TemplateTest[];\n};\n\nexport type Param = {\n key: string;\n name: string;\n type: 'NETWORK' | 'ADDRESS' | 'STRING' | 'NUMBER' | 'BOOLEAN';\n multiple?: boolean;\n optional?: boolean;\n values?: string[];\n default?: string;\n};\n\nexport type TemplateTest = {\n params: Record<string, unknown>;\n payload: `https://${string}` | Record<string, unknown>;\n output: unknown;\n};\n"],"names":[],"version":3,"file":"main.js.map"}
|