envio
Version:
A latency and sync speed optimized, developer friendly blockchain data indexer.
85 lines (78 loc) • 3.77 kB
JavaScript
// Generated by ReScript, PLEASE EDIT WITH CARE
;
var Utils = require("./Utils.res.js");
var Js_exn = require("rescript/lib/js/js_exn.js");
var ChainMap = require("./ChainMap.res.js");
var Belt_Array = require("rescript/lib/js/belt_Array.js");
function make(shouldRollbackOnReorgOpt, shouldSaveFullHistoryOpt, chainsOpt, enableRawEventsOpt, preloadHandlersOpt, ecosystemOpt, batchSizeOpt, lowercaseAddressesOpt, multichainOpt, shouldUseHypersyncClientDecoderOpt, maxAddrInPartitionOpt) {
var shouldRollbackOnReorg = shouldRollbackOnReorgOpt !== undefined ? shouldRollbackOnReorgOpt : true;
var shouldSaveFullHistory = shouldSaveFullHistoryOpt !== undefined ? shouldSaveFullHistoryOpt : false;
var chains = chainsOpt !== undefined ? chainsOpt : [];
var enableRawEvents = enableRawEventsOpt !== undefined ? enableRawEventsOpt : false;
var preloadHandlers = preloadHandlersOpt !== undefined ? preloadHandlersOpt : false;
var ecosystem = ecosystemOpt !== undefined ? ecosystemOpt : "evm";
var batchSize = batchSizeOpt !== undefined ? batchSizeOpt : 5000;
var lowercaseAddresses = lowercaseAddressesOpt !== undefined ? lowercaseAddressesOpt : false;
var multichain = multichainOpt !== undefined ? multichainOpt : "unordered";
var shouldUseHypersyncClientDecoder = shouldUseHypersyncClientDecoderOpt !== undefined ? shouldUseHypersyncClientDecoderOpt : true;
var maxAddrInPartition = maxAddrInPartitionOpt !== undefined ? maxAddrInPartitionOpt : 5000;
if (lowercaseAddresses && !shouldUseHypersyncClientDecoder) {
Js_exn.raiseError("lowercase addresses is not supported when event_decoder is 'viem'. Please set event_decoder to 'hypersync-client' or change address_format to 'checksum'.");
}
var chainMap = ChainMap.fromArrayUnsafe(chains.map(function (n) {
return [
ChainMap.Chain.makeUnsafe(n.id),
n
];
}));
var addContractNameToContractNameMapping = {};
Belt_Array.forEach(chains, (function (chainConfig) {
Belt_Array.forEach(chainConfig.contracts, (function (contract) {
var addKey = "add" + Utils.$$String.capitalize(contract.name);
addContractNameToContractNameMapping[addKey] = contract.name;
}));
}));
return {
shouldRollbackOnReorg: shouldRollbackOnReorg,
shouldSaveFullHistory: shouldSaveFullHistory,
multichain: multichain,
chainMap: chainMap,
defaultChain: Belt_Array.get(chains, 0),
ecosystem: ecosystem,
enableRawEvents: enableRawEvents,
preloadHandlers: preloadHandlers,
maxAddrInPartition: maxAddrInPartition,
batchSize: batchSize,
lowercaseAddresses: lowercaseAddresses,
addContractNameToContractNameMapping: addContractNameToContractNameMapping
};
}
function shouldSaveHistory(config, isInReorgThreshold) {
if (config.shouldSaveFullHistory) {
return true;
} else if (config.shouldRollbackOnReorg) {
return isInReorgThreshold;
} else {
return false;
}
}
function shouldPruneHistory(config, isInReorgThreshold) {
if (!config.shouldSaveFullHistory && config.shouldRollbackOnReorg) {
return isInReorgThreshold;
} else {
return false;
}
}
function getChain(config, chainId) {
var chain = ChainMap.Chain.makeUnsafe(chainId);
if (ChainMap.has(config.chainMap, chain)) {
return chain;
} else {
return Js_exn.raiseError("No chain with id " + ChainMap.Chain.toString(chain) + " found in config.yaml");
}
}
exports.make = make;
exports.shouldSaveHistory = shouldSaveHistory;
exports.shouldPruneHistory = shouldPruneHistory;
exports.getChain = getChain;
/* Utils Not a pure module */