envio 2.29.2 → 2.30.0

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.
@@ -11,6 +11,7 @@ var Ethers = require("../bindings/Ethers.res.js");
11
11
  var Hrtime = require("../bindings/Hrtime.res.js");
12
12
  var Js_exn = require("rescript/lib/js/js_exn.js");
13
13
  var Source = require("./Source.res.js");
14
+ var Address = require("../Address.res.js");
14
15
  var Logging = require("../Logging.res.js");
15
16
  var $$Promise = require("../bindings/Promise.res.js");
16
17
  var Belt_Int = require("rescript/lib/js/belt_Int.js");
@@ -22,6 +23,7 @@ var Caml_option = require("rescript/lib/js/caml_option.js");
22
23
  var EventRouter = require("./EventRouter.res.js");
23
24
  var LogSelection = require("../LogSelection.res.js");
24
25
  var Caml_exceptions = require("rescript/lib/js/caml_exceptions.js");
26
+ var HyperSyncClient = require("./HyperSyncClient.res.js");
25
27
  var Caml_splice_call = require("rescript/lib/js/caml_splice_call.js");
26
28
  var S$RescriptSchema = require("rescript-schema/src/S.res.js");
27
29
  var Caml_js_exceptions = require("rescript/lib/js/caml_js_exceptions.js");
@@ -38,9 +40,10 @@ function getKnownBlock(provider, blockNumber) {
38
40
  });
39
41
  }
40
42
 
41
- async function getKnownBlockWithBackoff(provider, sourceName, chain, blockNumber, backoffMsOnFailure) {
43
+ async function getKnownBlockWithBackoff(provider, sourceName, chain, blockNumber, backoffMsOnFailure, lowercaseAddresses) {
44
+ var result;
42
45
  try {
43
- return await getKnownBlock(provider, blockNumber);
46
+ result = await getKnownBlock(provider, blockNumber);
44
47
  }
45
48
  catch (raw_err){
46
49
  var err = Caml_js_exceptions.internalToOCamlException(raw_err);
@@ -52,8 +55,12 @@ async function getKnownBlockWithBackoff(provider, sourceName, chain, blockNumber
52
55
  type: "EXPONENTIAL_BACKOFF"
53
56
  });
54
57
  await Time.resolvePromiseAfterDelay(backoffMsOnFailure);
55
- return await getKnownBlockWithBackoff(provider, sourceName, chain, blockNumber, (backoffMsOnFailure << 1));
58
+ return await getKnownBlockWithBackoff(provider, sourceName, chain, blockNumber, (backoffMsOnFailure << 1), lowercaseAddresses);
56
59
  }
60
+ if (lowercaseAddresses) {
61
+ result.miner = Address.Evm.fromAddressLowercaseOrThrow(result.miner);
62
+ }
63
+ return result;
57
64
  }
58
65
 
59
66
  var suggestedRangeRegExp = /retry with the range (\d+)-(\d+)/;
@@ -485,6 +492,9 @@ function sanitizeUrl(url) {
485
492
  }
486
493
 
487
494
  function make(param) {
495
+ var lowercaseAddresses = param.lowercaseAddresses;
496
+ var shouldUseHypersyncClientDecoder = param.shouldUseHypersyncClientDecoder;
497
+ var allEventSignatures = param.allEventSignatures;
488
498
  var eventRouter = param.eventRouter;
489
499
  var chain = param.chain;
490
500
  var url = param.url;
@@ -510,7 +520,7 @@ function make(param) {
510
520
  });
511
521
  }), undefined, undefined, undefined, undefined);
512
522
  var blockLoader = LazyLoader.make((function (blockNumber) {
513
- return getKnownBlockWithBackoff(provider, name, chain, blockNumber, 1000);
523
+ return getKnownBlockWithBackoff(provider, name, chain, blockNumber, 1000, lowercaseAddresses);
514
524
  }), (function (am, exn) {
515
525
  Logging.error({
516
526
  err: exn,
@@ -526,13 +536,51 @@ function make(param) {
526
536
  var getEventBlockOrThrow = makeThrowingGetEventBlock(function (blockNumber) {
527
537
  return LazyLoader.get(blockLoader, blockNumber);
528
538
  });
529
- var getEventTransactionOrThrow = makeThrowingGetEventTransaction(Ethers.JsonRpcProvider.makeGetTransactionFields(function (__x) {
530
- return LazyLoader.get(transactionLoader, __x);
531
- }));
539
+ var getEventTransactionOrThrow = makeThrowingGetEventTransaction(Ethers.JsonRpcProvider.makeGetTransactionFields((function (__x) {
540
+ return LazyLoader.get(transactionLoader, __x);
541
+ }), lowercaseAddresses));
532
542
  var contractNameAbiMapping = {};
533
543
  Belt_Array.forEach(param.contracts, (function (contract) {
534
544
  contractNameAbiMapping[contract.name] = contract.abi;
535
545
  }));
546
+ var convertEthersLogToHyperSyncEvent = function (log) {
547
+ var hyperSyncLog_removed = Belt_Option.getWithDefault(log.removed, false);
548
+ var hyperSyncLog_logIndex = log.index;
549
+ var hyperSyncLog_transactionIndex = log.transactionIndex;
550
+ var hyperSyncLog_transactionHash = log.transactionHash;
551
+ var hyperSyncLog_blockHash = log.blockHash;
552
+ var hyperSyncLog_blockNumber = log.blockNumber;
553
+ var hyperSyncLog_address = Caml_option.some(log.address);
554
+ var hyperSyncLog_data = log.data;
555
+ var hyperSyncLog_topics = Belt_Array.map(log.topics, (function (topic) {
556
+ return topic;
557
+ }));
558
+ var hyperSyncLog = {
559
+ removed: hyperSyncLog_removed,
560
+ logIndex: hyperSyncLog_logIndex,
561
+ transactionIndex: hyperSyncLog_transactionIndex,
562
+ transactionHash: hyperSyncLog_transactionHash,
563
+ blockHash: hyperSyncLog_blockHash,
564
+ blockNumber: hyperSyncLog_blockNumber,
565
+ address: hyperSyncLog_address,
566
+ data: hyperSyncLog_data,
567
+ topics: hyperSyncLog_topics
568
+ };
569
+ return {
570
+ log: hyperSyncLog
571
+ };
572
+ };
573
+ var hscDecoder = {
574
+ contents: undefined
575
+ };
576
+ var getHscDecoder = function () {
577
+ var decoder = hscDecoder.contents;
578
+ if (decoder !== undefined) {
579
+ return decoder;
580
+ } else {
581
+ return HyperSyncClient.Decoder.fromSignatures(allEventSignatures);
582
+ }
583
+ };
536
584
  var getItemsOrThrow = async function (fromBlock, toBlock, addressesByContractName, indexingContracts, currentBlockHeight, partitionId, selection, param, param$1) {
537
585
  var startFetchingBatchTimeRef = Hrtime.makeTimer();
538
586
  var maxSuggestedBlockInterval = mutSuggestedBlockIntervals[maxSuggestedBlockIntervalKey];
@@ -548,77 +596,151 @@ function make(param) {
548
596
  return LazyLoader.get(blockLoader, blockNumber);
549
597
  }), syncConfig, provider, mutSuggestedBlockIntervals, partitionId);
550
598
  var latestFetchedBlock = match$2.latestFetchedBlock;
599
+ var logs = match$2.logs;
551
600
  var executedBlockInterval = (suggestedToBlock - fromBlock | 0) + 1 | 0;
552
601
  if (executedBlockInterval >= suggestedBlockInterval && !Utils.Dict.has(mutSuggestedBlockIntervals, maxSuggestedBlockIntervalKey)) {
553
602
  mutSuggestedBlockIntervals[partitionId] = Caml.int_min(executedBlockInterval + syncConfig.accelerationAdditive | 0, syncConfig.intervalCeiling);
554
603
  }
555
- var parsedQueueItems = await Promise.all(Belt_Array.keepMap(match$2.logs, (function (log) {
556
- var topic0 = log.topics[0];
557
- var eventConfig = EventRouter.get(eventRouter, EventRouter.getEvmEventId(topic0, log.topics.length), log.address, log.blockNumber, indexingContracts);
558
- if (eventConfig === undefined) {
559
- return ;
560
- }
561
- var blockNumber = log.blockNumber;
562
- var logIndex = log.index;
563
- return Caml_option.some((async function () {
564
- var match;
565
- try {
566
- match = await Promise.all([
567
- getEventBlockOrThrow(log),
568
- getEventTransactionOrThrow(log, eventConfig.transactionSchema)
569
- ]);
570
- }
571
- catch (raw_exn){
572
- var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
573
- throw {
574
- RE_EXN_ID: Source.GetItemsError,
575
- _1: {
576
- TAG: "FailedGettingFieldSelection",
577
- exn: exn,
578
- blockNumber: blockNumber,
579
- logIndex: logIndex,
580
- message: "Failed getting selected fields. Please double-check your RPC provider returns correct data."
581
- },
582
- Error: new Error()
583
- };
584
- }
585
- var block = match[0];
586
- var decodedEvent;
587
- try {
588
- decodedEvent = Viem.parseLogOrThrow(contractNameAbiMapping, eventConfig.contractName, log.topics, log.data);
589
- }
590
- catch (raw_exn$1){
591
- var exn$1 = Caml_js_exceptions.internalToOCamlException(raw_exn$1);
592
- throw {
593
- RE_EXN_ID: Source.GetItemsError,
594
- _1: {
595
- TAG: "FailedParsingItems",
596
- exn: exn$1,
597
- blockNumber: blockNumber,
598
- logIndex: logIndex,
599
- message: "Failed to parse event with viem, please double-check your ABI."
600
- },
601
- Error: new Error()
602
- };
603
- }
604
- return {
605
- kind: 0,
606
- eventConfig: eventConfig,
607
- timestamp: block.timestamp,
608
- chain: chain,
609
- blockNumber: block.number,
610
- logIndex: log.index,
611
- event: {
612
- params: decodedEvent.args,
613
- chainId: chain,
614
- srcAddress: log.address,
604
+ var parsedQueueItems;
605
+ if (shouldUseHypersyncClientDecoder) {
606
+ var hyperSyncEvents = Belt_Array.map(logs, convertEthersLogToHyperSyncEvent);
607
+ var parsedEvents;
608
+ try {
609
+ parsedEvents = await getHscDecoder().decodeEvents(hyperSyncEvents);
610
+ }
611
+ catch (raw_exn){
612
+ var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
613
+ throw {
614
+ RE_EXN_ID: Source.GetItemsError,
615
+ _1: {
616
+ TAG: "FailedParsingItems",
617
+ exn: exn,
618
+ blockNumber: fromBlock,
619
+ logIndex: 0,
620
+ message: "Failed to parse events using hypersync client decoder. Please double-check your ABI."
621
+ },
622
+ Error: new Error()
623
+ };
624
+ }
625
+ parsedQueueItems = await Promise.all(Belt_Array.keepMap(Belt_Array.zip(logs, parsedEvents), (function (param) {
626
+ var maybeDecodedEvent = param[1];
627
+ var log = param[0];
628
+ var topic0 = Belt_Option.getWithDefault(Belt_Array.get(log.topics, 0), "0x0");
629
+ var routedAddress = lowercaseAddresses ? Address.Evm.fromAddressLowercaseOrThrow(log.address) : log.address;
630
+ var eventConfig = EventRouter.get(eventRouter, EventRouter.getEvmEventId(topic0, log.topics.length), routedAddress, log.blockNumber, indexingContracts);
631
+ if (eventConfig !== undefined && !(maybeDecodedEvent === null || maybeDecodedEvent === undefined)) {
632
+ return Caml_option.some((async function () {
633
+ var match;
634
+ try {
635
+ match = await Promise.all([
636
+ getEventBlockOrThrow(log),
637
+ getEventTransactionOrThrow(log, eventConfig.transactionSchema)
638
+ ]);
639
+ }
640
+ catch (raw_exn){
641
+ var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
642
+ throw {
643
+ RE_EXN_ID: Source.GetItemsError,
644
+ _1: {
645
+ TAG: "FailedGettingFieldSelection",
646
+ exn: exn,
647
+ blockNumber: log.blockNumber,
648
+ logIndex: log.index,
649
+ message: "Failed getting selected fields. Please double-check your RPC provider returns correct data."
650
+ },
651
+ Error: new Error()
652
+ };
653
+ }
654
+ var block = match[0];
655
+ return {
656
+ kind: 0,
657
+ eventConfig: eventConfig,
658
+ timestamp: block.timestamp,
659
+ chain: chain,
660
+ blockNumber: block.number,
661
+ logIndex: log.index,
662
+ event: {
663
+ params: eventConfig.convertHyperSyncEventArgs(maybeDecodedEvent),
664
+ chainId: chain,
665
+ srcAddress: routedAddress,
666
+ logIndex: log.index,
667
+ transaction: match[1],
668
+ block: block
669
+ }
670
+ };
671
+ })());
672
+ }
673
+
674
+ })));
675
+ } else {
676
+ parsedQueueItems = await Promise.all(Belt_Array.keepMap(logs, (function (log) {
677
+ var topic0 = log.topics[0];
678
+ var eventConfig = EventRouter.get(eventRouter, EventRouter.getEvmEventId(topic0, log.topics.length), log.address, log.blockNumber, indexingContracts);
679
+ if (eventConfig === undefined) {
680
+ return ;
681
+ }
682
+ var blockNumber = log.blockNumber;
683
+ var logIndex = log.index;
684
+ return Caml_option.some((async function () {
685
+ var match;
686
+ try {
687
+ match = await Promise.all([
688
+ getEventBlockOrThrow(log),
689
+ getEventTransactionOrThrow(log, eventConfig.transactionSchema)
690
+ ]);
691
+ }
692
+ catch (raw_exn){
693
+ var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
694
+ throw {
695
+ RE_EXN_ID: Source.GetItemsError,
696
+ _1: {
697
+ TAG: "FailedGettingFieldSelection",
698
+ exn: exn,
699
+ blockNumber: blockNumber,
700
+ logIndex: logIndex,
701
+ message: "Failed getting selected fields. Please double-check your RPC provider returns correct data."
702
+ },
703
+ Error: new Error()
704
+ };
705
+ }
706
+ var block = match[0];
707
+ var decodedEvent;
708
+ try {
709
+ decodedEvent = Viem.parseLogOrThrow(contractNameAbiMapping, eventConfig.contractName, log.topics, log.data);
710
+ }
711
+ catch (raw_exn$1){
712
+ var exn$1 = Caml_js_exceptions.internalToOCamlException(raw_exn$1);
713
+ throw {
714
+ RE_EXN_ID: Source.GetItemsError,
715
+ _1: {
716
+ TAG: "FailedParsingItems",
717
+ exn: exn$1,
718
+ blockNumber: blockNumber,
719
+ logIndex: logIndex,
720
+ message: "Failed to parse event with viem, please double-check your ABI."
721
+ },
722
+ Error: new Error()
723
+ };
724
+ }
725
+ return {
726
+ kind: 0,
727
+ eventConfig: eventConfig,
728
+ timestamp: block.timestamp,
729
+ chain: chain,
730
+ blockNumber: block.number,
615
731
  logIndex: log.index,
616
- transaction: match[1],
617
- block: block
618
- }
619
- };
620
- })());
621
- })));
732
+ event: {
733
+ params: decodedEvent.args,
734
+ chainId: chain,
735
+ srcAddress: log.address,
736
+ logIndex: log.index,
737
+ transaction: match[1],
738
+ block: block
739
+ }
740
+ };
741
+ })());
742
+ })));
743
+ }
622
744
  var optFirstBlockParent = await firstBlockParentPromise;
623
745
  var totalTimeElapsed = Hrtime.intFromMillis(Hrtime.toMillis(Hrtime.timeSince(startFetchingBatchTimeRef)));
624
746
  var reorgGuard_rangeLastBlock = {