@indexing/jiti 0.0.3 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/module.js CHANGED
@@ -1,4 +1,5 @@
1
- import {keccak256 as $hgUW1$keccak256, decodeEventLog as $hgUW1$decodeEventLog, parseAbi as $hgUW1$parseAbi} from "viem";
1
+ import {decodeEventLog as $hgUW1$decodeEventLog, parseAbi as $hgUW1$parseAbi, keccak256 as $hgUW1$keccak256} from "viem";
2
+ import $hgUW1$isomorphicfetch from "isomorphic-fetch";
2
3
 
3
4
 
4
5
  function $parcel$exportWildcard(dest, source) {
@@ -21,22 +22,154 @@ function $parcel$exportWildcard(dest, source) {
21
22
  function $parcel$export(e, n, v, s) {
22
23
  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
23
24
  }
24
- const $a4b307b872b01f44$var$rawTemplate = {
25
- key: "raw",
26
- name: "Raw Block Data",
25
+ const $8369cdd4433d3a57$var$allBlocks = {
26
+ key: "allBlocks",
27
+ name: "All Blocks",
27
28
  description: "Get all blocks with all available fields",
28
29
  tags: [
29
30
  "EVM",
30
- "RAW"
31
+ "TRANSACTIONS"
31
32
  ],
32
33
  disabled: false,
33
34
  params: [],
34
- transform: (payload)=>payload,
35
- tests: []
35
+ function: ()=>{
36
+ return `
37
+ function allBlocks(block, _ctx) {
38
+ return block;
39
+ }`;
40
+ }
41
+ };
42
+ var $8369cdd4433d3a57$export$2e2bcd8739ae039 = $8369cdd4433d3a57$var$allBlocks;
43
+
44
+
45
+ const $c18434deda90759d$var$tokenTransfers = {
46
+ key: "tokenTransfers",
47
+ name: "Token Transfers",
48
+ description: "Get all blocks for a set of token types.",
49
+ tags: [
50
+ "EVM",
51
+ "NFTs",
52
+ "ERC20",
53
+ "ERC721"
54
+ ],
55
+ disabled: false,
56
+ params: [],
57
+ function: ()=>{
58
+ return `
59
+ function tokenTransfers(block, _ctx) {
60
+ return block;
61
+ }`;
62
+ }
36
63
  };
37
- var $a4b307b872b01f44$export$2e2bcd8739ae039 = $a4b307b872b01f44$var$rawTemplate;
64
+ var $c18434deda90759d$export$2e2bcd8739ae039 = $c18434deda90759d$var$tokenTransfers;
65
+
66
+
67
+ const $70cb039dbeb3c65a$export$a8fc3402335b0b04 = [
68
+ (0, $8369cdd4433d3a57$export$2e2bcd8739ae039),
69
+ (0, $c18434deda90759d$export$2e2bcd8739ae039)
70
+ ];
71
+
72
+
73
+ var $aedb69bdc766818f$exports = {};
74
+ var $2b06dfb983c1c46f$exports = {};
75
+
76
+ $parcel$export($2b06dfb983c1c46f$exports, "erc20Transfers", () => $2b06dfb983c1c46f$export$b830a1966711a4f4);
77
+ var $cfa23334cbdf9391$exports = {};
78
+
79
+ $parcel$export($cfa23334cbdf9391$exports, "evmDecodeLog", () => $cfa23334cbdf9391$export$18467e329ea485c9);
80
+ $parcel$export($cfa23334cbdf9391$exports, "evmDecodeLogWithMetadata", () => $cfa23334cbdf9391$export$cf548b70626e2eb9);
81
+
82
+ var $f6a81337d3532e59$exports = {};
83
+
84
+ $parcel$export($f6a81337d3532e59$exports, "evmMethodSignatureToHex", () => $f6a81337d3532e59$export$49d5c9473f8f70f2);
85
+
86
+ function $f6a81337d3532e59$export$49d5c9473f8f70f2(sig) {
87
+ const [method, rest] = sig.split("(");
88
+ const params = rest.split(")")[0].split(",").map((p)=>p.trim());
89
+ const topic0 = (0, $hgUW1$keccak256)(`${method.split(" ").pop()}(${params.map((p)=>p.split(" ")[0]).join(",")})`);
90
+ return topic0;
91
+ }
92
+
93
+
94
+ function $cfa23334cbdf9391$export$18467e329ea485c9(log, signatures) {
95
+ if (Array.isArray(signatures)) {
96
+ for (const sig of signatures){
97
+ const decoded = $cfa23334cbdf9391$export$18467e329ea485c9(log, sig);
98
+ if (decoded) return decoded;
99
+ }
100
+ return null;
101
+ }
102
+ if (typeof signatures !== "string" && Array.isArray(signatures.addresses) && signatures.addresses.length) {
103
+ const addresses = signatures.addresses.map((a)=>a?.toLowerCase());
104
+ if (!addresses.includes(log.address.toLowerCase())) return null;
105
+ }
106
+ let sig = (typeof signatures === "string" ? signatures : signatures.signature).trim();
107
+ if (!sig.startsWith("event ")) sig = "event " + sig;
108
+ const topic0 = typeof signatures !== "string" && signatures.topic0 ? signatures.topic0 : (0, $f6a81337d3532e59$export$49d5c9473f8f70f2)(sig);
109
+ if ((sig.match(/ indexed /g)?.length || 0) === log.topics.length - 1) {
110
+ if (log.topics[0] === topic0) try {
111
+ const result = (0, $hgUW1$decodeEventLog)({
112
+ abi: (0, $hgUW1$parseAbi)([
113
+ sig
114
+ ]),
115
+ data: log.data,
116
+ topics: log.topics
117
+ });
118
+ return result.args;
119
+ } catch (e) {
120
+ // ignore this
121
+ }
122
+ }
123
+ return null;
124
+ }
125
+ function $cfa23334cbdf9391$export$cf548b70626e2eb9(log, signatures) {
126
+ for (const sig of [
127
+ signatures
128
+ ].flat()){
129
+ const decoded = $cfa23334cbdf9391$export$18467e329ea485c9(log, sig);
130
+ if (decoded) return {
131
+ decoded: decoded,
132
+ metadata: {
133
+ name: (typeof sig === "string" ? sig : sig.signature).split("(")[0]
134
+ }
135
+ };
136
+ }
137
+ return null;
138
+ }
139
+
140
+
141
+ function $2b06dfb983c1c46f$export$b830a1966711a4f4(block) {
142
+ const txfers = [];
143
+ for (const tx of block.transactions){
144
+ if (!tx.receipt) continue;
145
+ for (const log of tx.receipt.logs){
146
+ const txfer = (0, $cfa23334cbdf9391$export$18467e329ea485c9)(log, "Transfer(address indexed from, address indexed to, uint256 value)");
147
+ if (txfer) txfers.push({
148
+ blockNumber: block.number,
149
+ timestamp: new Date(block.timestamp * 1000).toISOString(),
150
+ transactionHash: tx.hash,
151
+ ...txfer
152
+ });
153
+ }
154
+ }
155
+ return txfers;
156
+ }
38
157
 
39
158
 
159
+ var $8a3c50b8cb33d9fb$exports = {};
160
+
161
+ $parcel$export($8a3c50b8cb33d9fb$exports, "tokenPrice", () => $8a3c50b8cb33d9fb$export$e8386b633cdbc2d7);
162
+
163
+ function $8a3c50b8cb33d9fb$export$e8386b633cdbc2d7(tokenAddress, opts) {
164
+ let url = `https://jiti.indexing.co/presets/token-price/${opts?.network || "ethereum"}?tokenAddress=${tokenAddress}`;
165
+ if (opts?.timestamp) url += "&priceTimestamp=" + new Date(opts.timestamp).toISOString();
166
+ return (0, $hgUW1$isomorphicfetch)(url).then((r)=>r.json()).then((r)=>r.data);
167
+ }
168
+
169
+
170
+ var $8dd8a21b1d9a9d2a$exports = {};
171
+
172
+ $parcel$export($8dd8a21b1d9a9d2a$exports, "tokenTransfers", () => $8dd8a21b1d9a9d2a$export$b62520a34e11070c);
40
173
  var $fde9406d76ec24a9$exports = {};
41
174
  var $42564d9f228fe302$exports = {};
42
175
 
@@ -99,7 +232,6 @@ const $68871103c7bc00cf$var$CHAIN_ID = {
99
232
  STACK: 78225,
100
233
  SYNDICATE_FRAME_CHAIN: 5101,
101
234
  TRON: 728126428,
102
- ZER0: 543210,
103
235
  ZK_LINK: 810180,
104
236
  ZORA: 7777777,
105
237
  ZORA_SEPOLIA: 999999999
@@ -109,69 +241,6 @@ function $68871103c7bc00cf$export$f93b8abed77a4120(chain) {
109
241
  }
110
242
 
111
243
 
112
- var $cfa23334cbdf9391$exports = {};
113
-
114
- $parcel$export($cfa23334cbdf9391$exports, "evmDecodeLog", () => $cfa23334cbdf9391$export$18467e329ea485c9);
115
- $parcel$export($cfa23334cbdf9391$exports, "evmDecodeLogWithMetadata", () => $cfa23334cbdf9391$export$cf548b70626e2eb9);
116
-
117
- var $f6a81337d3532e59$exports = {};
118
-
119
- $parcel$export($f6a81337d3532e59$exports, "evmMethodSignatureToHex", () => $f6a81337d3532e59$export$49d5c9473f8f70f2);
120
-
121
- function $f6a81337d3532e59$export$49d5c9473f8f70f2(sig) {
122
- const [method, rest] = sig.split("(");
123
- const params = rest.split(")")[0].split(",").map((p)=>p.trim());
124
- const topic0 = (0, $hgUW1$keccak256)(`${method.split(" ").pop()}(${params.map((p)=>p.split(" ")[0]).join(",")})`);
125
- return topic0;
126
- }
127
-
128
-
129
- function $cfa23334cbdf9391$export$18467e329ea485c9(log, signatures) {
130
- if (Array.isArray(signatures)) {
131
- for (const sig of signatures){
132
- const decoded = $cfa23334cbdf9391$export$18467e329ea485c9(log, sig);
133
- if (decoded) return decoded;
134
- }
135
- return null;
136
- }
137
- if (typeof signatures !== "string" && Array.isArray(signatures.addresses) && signatures.addresses.length) {
138
- const addresses = signatures.addresses.map((a)=>a?.toLowerCase());
139
- if (!addresses.includes(log.address.toLowerCase())) return null;
140
- }
141
- let sig = (typeof signatures === "string" ? signatures : signatures.signature).trim();
142
- if (!sig.startsWith("event ")) sig = "event " + sig;
143
- const topic0 = typeof signatures !== "string" && signatures.topic0 ? signatures.topic0 : (0, $f6a81337d3532e59$export$49d5c9473f8f70f2)(sig);
144
- if ((sig.match(/ indexed /g)?.length || 0) === log.topics.length - 1) {
145
- if (log.topics[0] === topic0) try {
146
- const result = (0, $hgUW1$decodeEventLog)({
147
- abi: (0, $hgUW1$parseAbi)([
148
- sig
149
- ]),
150
- data: log.data,
151
- topics: log.topics
152
- });
153
- return result.args;
154
- } catch (e) {
155
- // ignore this
156
- }
157
- }
158
- return null;
159
- }
160
- function $cfa23334cbdf9391$export$cf548b70626e2eb9(log, signatures) {
161
- for (const sig of [
162
- signatures
163
- ].flat()){
164
- const decoded = $cfa23334cbdf9391$export$18467e329ea485c9(log, sig);
165
- if (decoded) return {
166
- decoded: decoded,
167
- metadata: {
168
- name: (typeof sig === "string" ? sig : sig.signature).split("(")[0]
169
- }
170
- };
171
- }
172
- return null;
173
- }
174
-
175
244
 
176
245
 
177
246
  var $8f1e0ae1ead9a2a9$exports = {};
@@ -248,225 +317,80 @@ $parcel$exportWildcard($fde9406d76ec24a9$exports, $f6a81337d3532e59$exports);
248
317
  $parcel$exportWildcard($fde9406d76ec24a9$exports, $8f1e0ae1ead9a2a9$exports);
249
318
 
250
319
 
251
- const $c18434deda90759d$var$NULL_ADDRESS = "0x0000000000000000000000000000000000000000";
252
- const $c18434deda90759d$var$tokenTransfersTemplate = {
253
- key: "token_transfers",
254
- name: "Token Transfers",
255
- description: "Get all token transfers for a set of token types.",
256
- tags: [
257
- "EVM",
258
- "ERC20",
259
- "ERC721",
260
- "NFT",
261
- "TOKEN"
262
- ],
263
- disabled: false,
264
- params: [
265
- {
266
- key: "network",
267
- name: "Network",
268
- type: "NETWORK",
269
- optional: false
270
- },
271
- {
272
- key: "tokenAddress",
273
- name: "Token Address",
274
- type: "ADDRESS",
275
- optional: true
276
- },
277
- {
278
- key: "walletAddress",
279
- name: "Wallet Address",
280
- type: "ADDRESS",
281
- optional: true
282
- },
283
- {
284
- key: "tokenTypes",
285
- name: "Token Types",
286
- type: "STRING",
287
- multiple: true,
288
- optional: true
289
- }
290
- ],
291
- transform: (block, _ctx)=>{
292
- const TOKEN_TYPES = _ctx.params.tokenTypes || [];
293
- let transfers = [];
294
- switch(block._network){
295
- // @TODO: expand to non-EVM
296
- // assume EVM as default for now
297
- default:
298
- for (const tx of block.transactions){
299
- if (!tx.receipt) continue;
300
- const timestamp = new Date(block.timestamp * 1000).toISOString();
301
- const transactionGasFee = BigInt(tx.receipt.gasUsed) * BigInt(tx.receipt.effectiveGasPrice);
302
- // track direct ETH transfers
303
- if (!TOKEN_TYPES.length || TOKEN_TYPES.includes("NATIVE")) {
304
- // pull from traces, if available
305
- if (Array.isArray(tx.traces)) for (const trace of tx.traces.filter((t)=>t.action)){
306
- const action = trace.action;
307
- if (!action?.value) continue;
308
- transfers.push({
309
- amount: BigInt(action.value),
310
- blockNumber: tx.blockNumber,
311
- from: action.from?.toLowerCase() || $c18434deda90759d$var$NULL_ADDRESS,
312
- index: trace.traceAddress?.join("-"),
313
- timestamp: timestamp,
314
- to: action.to?.toLowerCase() || $c18434deda90759d$var$NULL_ADDRESS,
315
- tokenType: "NATIVE",
316
- transactionGasFee: transactionGasFee,
317
- transactionHash: tx.hash
318
- });
319
- }
320
- else if (tx.value?.length >= 3 || /\d+/.test(tx.value)) transfers.push({
321
- amount: BigInt(tx.value),
322
- blockNumber: tx.blockNumber,
323
- from: tx.from?.toLowerCase() || $c18434deda90759d$var$NULL_ADDRESS,
324
- timestamp: timestamp,
325
- to: tx.to?.toLowerCase() || $c18434deda90759d$var$NULL_ADDRESS,
326
- tokenType: "NATIVE",
327
- transactionGasFee: transactionGasFee,
328
- transactionHash: tx.hash
329
- });
330
- }
331
- // track ERC20 transfers
332
- if (!TOKEN_TYPES.length || TOKEN_TYPES.includes("TOKEN")) for (const log of tx.receipt.logs){
333
- const txfer = (0, $cfa23334cbdf9391$export$cf548b70626e2eb9)(log, [
334
- "Transfer(address indexed from, address indexed to, uint256 value)"
335
- ]);
336
- if (txfer) transfers.push({
337
- amount: txfer.decoded.value,
338
- blockNumber: tx.blockNumber,
339
- from: txfer.decoded.from?.toLowerCase() || $c18434deda90759d$var$NULL_ADDRESS,
340
- index: log.logIndex,
341
- timestamp: timestamp,
342
- to: txfer.decoded.to?.toLowerCase() || $c18434deda90759d$var$NULL_ADDRESS,
343
- token: log.address.toLowerCase(),
344
- tokenType: "TOKEN",
345
- transactionGasFee: transactionGasFee,
346
- transactionHash: tx.hash
347
- });
348
- }
349
- // @TODO: add NFT transfers
350
- if (!TOKEN_TYPES.length || TOKEN_TYPES.includes("NFT")) for (const log of tx.receipt.logs){
351
- const txfer = (0, $cfa23334cbdf9391$export$cf548b70626e2eb9)(log, [
352
- "Transfer(address indexed from, address indexed to, uint256 indexed value)",
353
- "TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)",
354
- "TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)"
355
- ]);
356
- if (!txfer) continue;
357
- switch(txfer.metadata.name){
358
- case "Transfer":
359
- transfers.push({
360
- amount: 1,
361
- blockNumber: tx.blockNumber,
362
- from: txfer.decoded.from?.toLowerCase() || $c18434deda90759d$var$NULL_ADDRESS,
363
- index: log.logIndex,
364
- timestamp: timestamp,
365
- to: txfer.decoded.to?.toLowerCase() || $c18434deda90759d$var$NULL_ADDRESS,
366
- token: log.address.toLowerCase(),
367
- tokenId: txfer.decoded.value.toString(),
368
- tokenType: "NFT",
369
- transactionGasFee: transactionGasFee,
370
- transactionHash: tx.hash
371
- });
372
- break;
373
- case "TransferSingle":
374
- transfers.push({
375
- amount: txfer.decoded.value,
376
- blockNumber: tx.blockNumber,
377
- from: txfer.decoded.from?.toLowerCase() || $c18434deda90759d$var$NULL_ADDRESS,
378
- index: log.logIndex,
379
- timestamp: timestamp,
380
- to: txfer.decoded.to?.toLowerCase() || $c18434deda90759d$var$NULL_ADDRESS,
381
- token: log.address.toLowerCase(),
382
- tokenId: txfer.decoded.id.toString(),
383
- tokenType: "NFT",
384
- transactionGasFee: transactionGasFee,
385
- transactionHash: tx.hash
386
- });
387
- break;
388
- case "TransferBatch":
389
- for(let i = 0; i < txfer.decoded.ids.length; i += 1)transfers.push({
390
- amount: txfer.decoded.values[i],
391
- blockNumber: tx.blockNumber,
392
- from: txfer.decoded.from?.toLowerCase() || $c18434deda90759d$var$NULL_ADDRESS,
393
- index: log.logIndex,
394
- timestamp: timestamp,
395
- to: txfer.decoded.to?.toLowerCase() || $c18434deda90759d$var$NULL_ADDRESS,
396
- token: log.address.toLowerCase(),
397
- tokenId: txfer.decoded.ids[i].toString(),
398
- tokenType: "NFT",
399
- transactionGasFee: transactionGasFee,
400
- transactionHash: tx.hash
401
- });
402
- break;
403
- }
404
- }
320
+ const $8dd8a21b1d9a9d2a$var$NULL_ADDRESS = "0x0000000000000000000000000000000000000000";
321
+ function $8dd8a21b1d9a9d2a$export$b62520a34e11070c(block) {
322
+ const transfers = [];
323
+ switch(block._network){
324
+ // @TODO: port non-EVM handlers over
325
+ // assume EVM as default for now
326
+ default:
327
+ for (const tx of block.transactions){
328
+ if (!tx.receipt) continue;
329
+ const timestamp = new Date(block.timestamp * 1000).toISOString();
330
+ const transactionGasFee = BigInt(tx.receipt.gasUsed) * BigInt(tx.receipt.effectiveGasPrice);
331
+ // track direct ETH transfers
332
+ if (tx.value?.length >= 3 || /\d+/.test(tx.value)) transfers.push({
333
+ amount: BigInt(tx.value),
334
+ blockNumber: tx.blockNumber,
335
+ from: (0, $42564d9f228fe302$export$db81f9ea057ab646)(tx.from) || $8dd8a21b1d9a9d2a$var$NULL_ADDRESS,
336
+ timestamp: timestamp,
337
+ to: (0, $42564d9f228fe302$export$db81f9ea057ab646)(tx.to) || $8dd8a21b1d9a9d2a$var$NULL_ADDRESS,
338
+ transactionGasFee: transactionGasFee,
339
+ transactionHash: tx.hash
340
+ });
341
+ // track ERC20 transfers
342
+ for (const log of tx.receipt.logs){
343
+ const txfer = (0, $cfa23334cbdf9391$export$cf548b70626e2eb9)(log, [
344
+ "Transfer(address indexed from, address indexed to, uint256 value)"
345
+ ]);
346
+ if (txfer) transfers.push({
347
+ amount: txfer.decoded.value,
348
+ blockNumber: tx.blockNumber,
349
+ from: (0, $42564d9f228fe302$export$db81f9ea057ab646)(txfer.decoded.from) || $8dd8a21b1d9a9d2a$var$NULL_ADDRESS,
350
+ index: log.logIndex,
351
+ timestamp: timestamp,
352
+ to: (0, $42564d9f228fe302$export$db81f9ea057ab646)(txfer.decoded.to) || $8dd8a21b1d9a9d2a$var$NULL_ADDRESS,
353
+ token: (0, $42564d9f228fe302$export$db81f9ea057ab646)(log.address),
354
+ transactionGasFee: transactionGasFee,
355
+ transactionHash: tx.hash
356
+ });
405
357
  }
406
- if (typeof _ctx.params.contractAddress === "string") _ctx.params.contractAddress = _ctx.params.contractAddress.toLowerCase();
407
- if (typeof _ctx.params.walletAddress === "string") _ctx.params.walletAddress = _ctx.params.walletAddress.toLowerCase();
408
- break;
409
- }
410
- transfers = transfers.filter((txfer)=>{
411
- if (txfer.amount <= BigInt(0)) return false;
412
- if (_ctx.params.tokenAddress && _ctx.params.tokenAddress !== txfer.token) return false;
413
- if (_ctx.params.walletAddress && ![
414
- txfer.from,
415
- txfer.to
416
- ].includes(_ctx.params.walletAddress)) return false;
417
- return true;
418
- });
419
- return transfers;
420
- },
421
- tests: [
422
- {
423
- params: {
424
- network: "BASE",
425
- walletAddress: "0x4F80864cD68782144e3736626896990acAe15a11",
426
- contractAddress: "0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed"
427
- },
428
- payload: "https://jiti.indexing.co/networks/base/23507423",
429
- output: [
430
- {
431
- amount: 1000000000000000000000n,
432
- blockNumber: 23507423,
433
- from: "0x053002b4b332b422733c9469ddf9990bb6235e3d",
434
- index: 536,
435
- timestamp: "2024-12-10T04:16:33.000Z",
436
- to: "0x4f80864cd68782144e3736626896990acae15a11",
437
- token: "0x4ed4e862860bed51a9570b96d89af5e1b0efefed",
438
- tokenType: "TOKEN",
439
- transactionGasFee: 1192354854229n,
440
- transactionHash: "0x69c9b12ccbe2d4f2f1dfc7c4a8557fc099fc5df276424417815acbc79a06fd56"
358
+ if (Array.isArray(tx.traces)) for (const trace of tx.traces.filter((t)=>t.action)){
359
+ const action = trace.action;
360
+ if (!action?.value) continue;
361
+ transfers.push({
362
+ amount: BigInt(action.value),
363
+ blockNumber: tx.blockNumber,
364
+ from: (0, $42564d9f228fe302$export$db81f9ea057ab646)(action.from) || $8dd8a21b1d9a9d2a$var$NULL_ADDRESS,
365
+ index: trace.traceAddress?.join("-"),
366
+ timestamp: timestamp,
367
+ to: (0, $42564d9f228fe302$export$db81f9ea057ab646)(action.to) || $8dd8a21b1d9a9d2a$var$NULL_ADDRESS,
368
+ transactionGasFee: transactionGasFee,
369
+ transactionHash: tx.hash
370
+ });
441
371
  }
442
- ]
443
- }
444
- ]
445
- };
446
- var $c18434deda90759d$export$2e2bcd8739ae039 = $c18434deda90759d$var$tokenTransfersTemplate;
372
+ }
373
+ }
374
+ return transfers.filter((txfer)=>txfer.amount > BigInt(0));
375
+ }
447
376
 
448
377
 
449
- const $70cb039dbeb3c65a$export$a8fc3402335b0b04 = [
450
- (0, $a4b307b872b01f44$export$2e2bcd8739ae039),
451
- (0, $c18434deda90759d$export$2e2bcd8739ae039)
452
- ];
378
+ $parcel$exportWildcard($aedb69bdc766818f$exports, $2b06dfb983c1c46f$exports);
379
+ $parcel$exportWildcard($aedb69bdc766818f$exports, $8a3c50b8cb33d9fb$exports);
380
+ $parcel$exportWildcard($aedb69bdc766818f$exports, $8dd8a21b1d9a9d2a$exports);
453
381
 
454
382
 
455
383
 
456
384
  var $81c1b644006d48ec$exports = {};
457
385
 
458
386
 
459
- const $149c1bd638913645$export$a8fc3402335b0b04 = (0, $70cb039dbeb3c65a$export$a8fc3402335b0b04).reduce((a, b)=>({
460
- ...a,
461
- [b.key]: Object.assign({}, b)
462
- }), {});
463
387
  function $149c1bd638913645$export$cceb5167b935aafb() {
464
- return (0, $70cb039dbeb3c65a$export$a8fc3402335b0b04).slice();
388
+ return 0, $70cb039dbeb3c65a$export$a8fc3402335b0b04;
465
389
  }
466
390
  function $149c1bd638913645$export$a07bfd14bbc36e4b(key) {
467
- return (0, $70cb039dbeb3c65a$export$a8fc3402335b0b04).slice().find((template)=>template.key === key);
391
+ return (0, $70cb039dbeb3c65a$export$a8fc3402335b0b04).find((template)=>template.key === key);
468
392
  }
469
393
 
470
394
 
471
- export {$149c1bd638913645$export$a8fc3402335b0b04 as templates, $149c1bd638913645$export$cceb5167b935aafb as getAllTemplates, $149c1bd638913645$export$a07bfd14bbc36e4b as getTemplateByKey};
395
+ export {$149c1bd638913645$export$cceb5167b935aafb as getAllTemplates, $149c1bd638913645$export$a07bfd14bbc36e4b as getTemplateByKey};
472
396
  //# sourceMappingURL=module.js.map
@@ -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: false,\n params: [],\n transform: (payload) => payload,\n tests: [],\n};\n\nexport default rawTemplate;\n","import { evmDecodeLogWithMetadata } from '../utils';\nimport { Template } from '../types';\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: 'tokenAddress', name: 'Token Address', type: 'ADDRESS', optional: true },\n { key: 'walletAddress', name: 'Wallet Address', type: 'ADDRESS', optional: true },\n { key: 'tokenTypes', name: 'Token Types', type: 'STRING', multiple: true, optional: true },\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 // @TODO: expand to non-EVM\n\n // assume EVM as default for now\n default: {\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 // @TODO: add NFT transfers\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.tokenAddress && _ctx.params.tokenAddress !== 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 {\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};\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';\n multiple?: boolean;\n optional?: boolean;\n};\n\nexport type TemplateTest = {\n params: Record<string, unknown>;\n payload: `https://${string}` | Record<string, unknown>;\n output: Record<string, unknown>[];\n};\n"],"names":[],"version":3,"file":"module.js.map"}
1
+ {"mappings":"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","sources":["src/index.ts","src/templates/index.ts","src/templates/all-blocks.ts","src/templates/token-transfers.ts","src/presets/index.ts","src/presets/erc20-transfers.ts","src/utils/evm-decode-log.ts","src/utils/evm-method-signature-to-hex.ts","src/presets/token-price.ts","src/presets/token-transfers.ts","src/utils/index.ts","src/utils/evm-address-to-checksum.ts","src/utils/evm-chain-to-id.ts","src/utils/evm-normalize-raw-block.ts","src/types.ts"],"sourcesContent":["import { templates } from './templates';\nimport * as presets from './presets';\nimport * as utils from './utils';\nimport * as types from './types';\n\nexport { presets, utils, types };\n\nexport function getAllTemplates() {\n return templates;\n }\n\nexport function getTemplateByKey(key: string) {\n return templates.find((template) => template.key === key);\n }","import allBlocks from './all-blocks';\nimport tokenTransfers from './token-transfers';\n\nexport const templates = [allBlocks, tokenTransfers];","import { Template, Param } from \"../types\";\n\nconst allBlocks: Template = {\n key: \"allBlocks\",\n name: \"All Blocks\",\n description: \"Get all blocks with all available fields\",\n tags: [\"EVM\", \"TRANSACTIONS\"],\n disabled: false,\n params: [],\n function: () => {\n return `\n function allBlocks(block, _ctx) {\n return block;\n }`;\n },\n};\n\nexport default allBlocks;","import { Template, Param } from \"../types\";\n\nconst tokenTransfers: Template = {\n key: \"tokenTransfers\",\n name: \"Token Transfers\",\n description: \"Get all blocks for a set of token types.\",\n tags: [\"EVM\", \"NFTs\", \"ERC20\", \"ERC721\"],\n disabled: false,\n params: [],\n function: () => {\n return `\n function tokenTransfers(block, _ctx) {\n return block;\n }`;\n },\n};\n\nexport default tokenTransfers;","export * from './erc20-transfers';\nexport * from './token-price';\nexport * from './token-transfers';\n","import { evmDecodeLog } from '../utils/evm-decode-log';\n\nexport function erc20Transfers(block) {\n const txfers = [];\n\n for (const tx of block.transactions) {\n if (!tx.receipt) continue;\n\n for (const log of tx.receipt.logs) {\n const txfer = evmDecodeLog(log, 'Transfer(address indexed from, address indexed to, uint256 value)');\n if (txfer) {\n txfers.push({\n blockNumber: block.number,\n timestamp: new Date(block.timestamp * 1000).toISOString(),\n transactionHash: tx.hash,\n ...txfer,\n });\n }\n }\n }\n\n return txfers;\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 _fetch from 'isomorphic-fetch';\n\nexport function tokenPrice(tokenAddress: string, opts?: { network?: string; timestamp?: string }) {\n let url = `https://jiti.indexing.co/presets/token-price/${opts?.network || 'ethereum'}?tokenAddress=${tokenAddress}`;\n if (opts?.timestamp) {\n url += '&priceTimestamp=' + new Date(opts.timestamp).toISOString();\n }\n\n return _fetch(url)\n .then((r) => r.json())\n .then((r) => r.data);\n}\n","import { evmAddressToChecksum, evmDecodeLogWithMetadata } from '../utils';\n\ntype NetworkTransfer = {\n amount: bigint;\n blockNumber: number;\n from: string;\n index?: string;\n timestamp: string;\n to: string;\n token?: string;\n tokenId?: string;\n // @TODO: tokenType: 'CURRENCY' | 'NFT';\n transactionGasFee: bigint;\n transactionHash: string;\n};\n\nconst NULL_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nexport function tokenTransfers(block) {\n const transfers: NetworkTransfer[] = [];\n\n switch (block._network) {\n // @TODO: port non-EVM handlers over\n\n // assume EVM as default for now\n default: {\n for (const tx of block.transactions) {\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 ((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: evmAddressToChecksum(tx.from) || NULL_ADDRESS,\n timestamp,\n to: evmAddressToChecksum(tx.to) || NULL_ADDRESS,\n transactionGasFee,\n transactionHash: tx.hash,\n });\n }\n\n // track ERC20 transfers\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: evmAddressToChecksum(txfer.decoded.from as string) || NULL_ADDRESS,\n index: log.logIndex,\n timestamp,\n to: evmAddressToChecksum(txfer.decoded.to as string) || NULL_ADDRESS,\n token: evmAddressToChecksum(log.address as string),\n transactionGasFee,\n transactionHash: tx.hash,\n });\n }\n }\n\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: evmAddressToChecksum(action.from) || NULL_ADDRESS,\n index: trace.traceAddress?.join('-'),\n timestamp,\n to: evmAddressToChecksum(action.to) || NULL_ADDRESS,\n transactionGasFee,\n transactionHash: tx.hash,\n });\n }\n }\n }\n }\n }\n\n return transfers.filter((txfer) => txfer.amount > BigInt(0));\n}\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 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 { 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 function: (params: Record<string, unknown>) => string;\n};\n\nexport type Param = {\n key: string;\n name: string;\n type: \"NETWORK\" | \"ADDRESS\";\n multiple?: boolean;\n optional?: boolean;\n};"],"names":[],"version":3,"file":"module.js.map"}