@defillama/sdk 3.0.7 → 3.0.9

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.
@@ -19,7 +19,7 @@ export declare function multiCall(params: {
19
19
  block?: number;
20
20
  target?: Address;
21
21
  chain?: Chain;
22
- requery?: boolean;
22
+ chunkSize?: number;
23
23
  }): Promise<{
24
24
  output: any[];
25
25
  }>;
@@ -56,9 +56,9 @@ var ethers_1 = require("ethers");
56
56
  var general_1 = require("../general");
57
57
  var multicall_1 = __importDefault(require("./multicall"));
58
58
  var convertResults_1 = __importDefault(require("./convertResults"));
59
- var promise_pool_1 = require("@supercharge/promise-pool");
60
59
  var debugLog_1 = require("../util/debugLog");
61
- var defaultChunkSize = !!process.env.SDK_MULTICALL_CHUNK_SIZE ? +process.env.SDK_MULTICALL_CHUNK_SIZE : 250;
60
+ var util_1 = require("../util");
61
+ var defaultChunkSize = !!process.env.SDK_MULTICALL_CHUNK_SIZE ? +process.env.SDK_MULTICALL_CHUNK_SIZE : 500;
62
62
  function resolveABI(providedAbi) {
63
63
  var abi = providedAbi;
64
64
  if (typeof abi === "string") {
@@ -109,13 +109,13 @@ function call(params) {
109
109
  }
110
110
  exports.call = call;
111
111
  function multiCall(params) {
112
- var _a;
112
+ var _a, _b;
113
113
  return __awaiter(this, void 0, void 0, function () {
114
- var abi, contractCalls, chunkSize, contractChunks, i, _b, results, errors, flatResults, failedQueries, failed, newResults_1;
115
- var _this = this;
114
+ var chain, chunkSize, abi, contractCalls, results, flatResults, failedQueries;
116
115
  return __generator(this, function (_c) {
117
116
  switch (_c.label) {
118
117
  case 0:
118
+ chain = (_a = params.chain) !== null && _a !== void 0 ? _a : 'ethereum';
119
119
  if (!params.calls)
120
120
  throw new Error('Missing calls parameter');
121
121
  if (params.target && !params.target.startsWith('0x'))
@@ -123,6 +123,11 @@ function multiCall(params) {
123
123
  if (!params.calls.length) {
124
124
  return [2 /*return*/, { output: [] }];
125
125
  }
126
+ chunkSize = params.chunkSize;
127
+ if (!params.chunkSize) {
128
+ // Only a max of around 500 calls are supported by multicall, we have to split bigger batches
129
+ chunkSize = defaultChunkSize;
130
+ }
126
131
  abi = resolveABI(params.abi);
127
132
  contractCalls = (params.calls).map(function (call) {
128
133
  var _a;
@@ -132,59 +137,20 @@ function multiCall(params) {
132
137
  contract: (_a = call.target) !== null && _a !== void 0 ? _a : params.target,
133
138
  };
134
139
  });
135
- chunkSize = defaultChunkSize;
136
- if (['dogechain'].includes(params.chain)) {
137
- chunkSize = 100;
138
- }
139
- contractChunks = [];
140
- for (i = 0; i < contractCalls.length; i += chunkSize)
141
- contractChunks.push(contractCalls.slice(i, i + chunkSize));
142
- return [4 /*yield*/, promise_pool_1.PromisePool
143
- .withConcurrency(20)
144
- .for(contractChunks)
145
- .process(function (calls, i) { return __awaiter(_this, void 0, void 0, function () {
146
- var _a;
147
- return __generator(this, function (_b) {
148
- return [2 /*return*/, (0, multicall_1.default)(abi, calls, (_a = params.chain) !== null && _a !== void 0 ? _a : "ethereum", params.block).then(function (calls) { return [calls, i]; })];
149
- });
150
- }); })];
140
+ return [4 /*yield*/, (0, util_1.runInPromisePool)({
141
+ items: (0, util_1.sliceIntoChunks)(contractCalls, chunkSize),
142
+ concurrency: 20,
143
+ processor: function (calls) { return (0, multicall_1.default)(abi, calls, chain, params.block); }
144
+ })];
151
145
  case 1:
152
- _b = _c.sent(), results = _b.results, errors = _b.errors;
153
- if (errors.length)
154
- throw errors[0];
155
- flatResults = [].concat.apply([], results
156
- .sort(function (_a, _b) {
157
- var c1 = _a[0], i1 = _a[1];
158
- var c2 = _b[0], i2 = _b[1];
159
- return i1 - i2;
160
- }).map(function (_a) {
161
- var c = _a[0], i = _a[1];
162
- return c;
163
- }));
146
+ results = _c.sent();
147
+ flatResults = [].concat.apply([], results);
164
148
  failedQueries = flatResults.filter(function (r) { return !r.success; });
165
149
  if (failedQueries.length)
166
- (0, debugLog_1.debugLog)("[chain: ".concat((_a = params.chain) !== null && _a !== void 0 ? _a : "ethereum", "] Failed multicalls:"), failedQueries.map(function (r) { return r.input; }));
167
- if (!(params.requery === true && flatResults.some(function (r) { return !r.success; }))) return [3 /*break*/, 3];
168
- failed = flatResults.map(function (r, i) { return [r, i]; }).filter(function (r) { return !r[0].success; });
169
- return [4 /*yield*/, multiCall({
170
- abi: params.abi,
171
- chain: params.chain,
172
- calls: failed.map(function (f) { return f[0].input; }),
173
- block: params.block,
174
- requery: params.requery,
175
- }).then(function (_a) {
176
- var output = _a.output;
177
- return output;
178
- })];
179
- case 2:
180
- newResults_1 = _c.sent();
181
- failed.forEach(function (f, i) {
182
- flatResults[f[1]] = newResults_1[i];
183
- });
184
- _c.label = 3;
185
- case 3: return [2 /*return*/, {
186
- output: flatResults, // flatten array
187
- }];
150
+ (0, debugLog_1.debugLog)("[chain: ".concat((_b = params.chain) !== null && _b !== void 0 ? _b : "ethereum", "] Failed multicalls:"), failedQueries.map(function (r) { return r.input; }));
151
+ return [2 /*return*/, {
152
+ output: flatResults, // flatten array
153
+ }];
188
154
  }
189
155
  });
190
156
  });
@@ -19,3 +19,4 @@ export default function makeMultiCall(functionABI: any, calls: {
19
19
  contract: string;
20
20
  params: any[];
21
21
  }[], chain: Chain, block?: number): Promise<any>;
22
+ export declare function networkSupportsMulticall(chain: Chain): boolean;
@@ -39,12 +39,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
39
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
40
  };
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.AGGREGATE_SELECTOR = exports.MULTICALL_ADDRESS_OPTIMISM = exports.MULTICALL_ADDRESS_AURORA = exports.MULTICALL_ADDRESS_MOONRIVER = exports.MULTICALL_ADDRESS_AVAX = exports.MULTICALL_ADDRESS_ARBITRUM = exports.MULTICALL_ADDRESS_HARMONY = exports.MULTICALL_ADDRESS_HECO = exports.MULTICALL_ADDRESS_XDAI = exports.MULTICALL_ADDRESS_FANTOM = exports.MULTICALL_ADDRESS_BSC = exports.MULTICALL_ADDRESS_POLYGON = exports.MULTICALL_ADDRESS_GOERLI = exports.MULTICALL_ADDRESS_RINKEBY = exports.MULTICALL_ADDRESS_KOVAN = exports.MULTICALL_ADDRESS_MAINNET = void 0;
42
+ exports.networkSupportsMulticall = exports.AGGREGATE_SELECTOR = exports.MULTICALL_ADDRESS_OPTIMISM = exports.MULTICALL_ADDRESS_AURORA = exports.MULTICALL_ADDRESS_MOONRIVER = exports.MULTICALL_ADDRESS_AVAX = exports.MULTICALL_ADDRESS_ARBITRUM = exports.MULTICALL_ADDRESS_HARMONY = exports.MULTICALL_ADDRESS_HECO = exports.MULTICALL_ADDRESS_XDAI = exports.MULTICALL_ADDRESS_FANTOM = exports.MULTICALL_ADDRESS_BSC = exports.MULTICALL_ADDRESS_POLYGON = exports.MULTICALL_ADDRESS_GOERLI = exports.MULTICALL_ADDRESS_RINKEBY = exports.MULTICALL_ADDRESS_KOVAN = exports.MULTICALL_ADDRESS_MAINNET = void 0;
43
43
  var ethers_1 = require("ethers");
44
44
  var utils_1 = require("ethers/lib/utils");
45
45
  var general_1 = require("../general");
46
46
  var convertResults_1 = __importDefault(require("./convertResults"));
47
47
  var rpcCall_1 = require("./rpcCall");
48
+ var debugLog_1 = require("../util/debugLog");
49
+ var util_1 = require("../util");
48
50
  exports.MULTICALL_ADDRESS_MAINNET = "0xeefba1e63905ef1d7acba5a8513c70307c1ce441";
49
51
  exports.MULTICALL_ADDRESS_KOVAN = "0x2cc8688c5f75e365aaeeb4ea8d6a480405a48d2a";
50
52
  exports.MULTICALL_ADDRESS_RINKEBY = "0x42ad527de7d4e9d9d011ac45b31d8551f8fe9821";
@@ -103,16 +105,15 @@ function makeMultiCall(functionABI, calls, chain, block) {
103
105
  exports.default = makeMultiCall;
104
106
  function executeCalls(contractCalls, chain, block) {
105
107
  return __awaiter(this, void 0, void 0, function () {
106
- var multicallData, address, callData, tx, returnData, _a, blockNumber, returnValues, e_1, values;
108
+ var multicallData, address, callData, tx, returnData, _a, blockNumber, returnValues, e_1, chunkSize, chunks, response;
107
109
  var _this = this;
108
110
  return __generator(this, function (_b) {
109
111
  switch (_b.label) {
110
- case 0: return [4 /*yield*/, networkSupportsMulticall(chain)];
112
+ case 0:
113
+ if (!networkSupportsMulticall(chain)) return [3 /*break*/, 7];
114
+ _b.label = 1;
111
115
  case 1:
112
- if (!_b.sent()) return [3 /*break*/, 6];
113
- _b.label = 2;
114
- case 2:
115
- _b.trys.push([2, 5, , 6]);
116
+ _b.trys.push([1, 4, , 7]);
116
117
  multicallData = ethers_1.ethers.utils.defaultAbiCoder.encode([
117
118
  utils_1.ParamType.fromObject({
118
119
  components: [
@@ -124,7 +125,7 @@ function executeCalls(contractCalls, chain, block) {
124
125
  }),
125
126
  ], [contractCalls.map(function (call) { return [call.to, call.data]; })]);
126
127
  return [4 /*yield*/, multicallAddressOrThrow(chain)];
127
- case 3:
128
+ case 2:
128
129
  address = _b.sent();
129
130
  callData = exports.AGGREGATE_SELECTOR + multicallData.substr(2);
130
131
  tx = {
@@ -132,37 +133,55 @@ function executeCalls(contractCalls, chain, block) {
132
133
  data: callData,
133
134
  };
134
135
  return [4 /*yield*/, (0, rpcCall_1.call)((0, general_1.getProvider)(chain), tx, block !== null && block !== void 0 ? block : "latest", chain)];
135
- case 4:
136
+ case 3:
136
137
  returnData = _b.sent();
137
138
  _a = ethers_1.ethers.utils.defaultAbiCoder.decode(["uint256", "bytes[]"], returnData), blockNumber = _a[0], returnValues = _a[1];
138
139
  return [2 /*return*/, returnValues];
139
- case 5:
140
+ case 4:
140
141
  e_1 = _b.sent();
141
- if (!process.env.DEFILLAMA_SDK_MUTED) {
142
- console.log("Multicall failed, defaulting to single transactions...");
143
- }
144
- return [3 /*break*/, 6];
145
- case 6: return [4 /*yield*/, Promise.all(contractCalls.map(function (_a) {
146
- var to = _a.to, data = _a.data;
147
- return __awaiter(_this, void 0, void 0, function () {
148
- var e_2;
149
- return __generator(this, function (_b) {
150
- switch (_b.label) {
151
- case 0:
152
- _b.trys.push([0, 2, , 3]);
153
- return [4 /*yield*/, (0, rpcCall_1.call)((0, general_1.getProvider)(chain), { to: to, data: data }, block !== null && block !== void 0 ? block : "latest", chain)];
154
- case 1: return [2 /*return*/, _b.sent()];
155
- case 2:
156
- e_2 = _b.sent();
157
- return [2 /*return*/, null];
158
- case 3: return [2 /*return*/];
159
- }
142
+ if (!(contractCalls.length > 10)) return [3 /*break*/, 6];
143
+ chunkSize = Math.ceil(contractCalls.length / 5);
144
+ chunks = (0, util_1.sliceIntoChunks)(contractCalls, chunkSize);
145
+ (0, debugLog_1.debugLog)("Multicall failed, call size: ".concat(contractCalls.length, ", splitting into smaller chunks and trying again, new call size: ").concat(chunks[0].length));
146
+ return [4 /*yield*/, (0, util_1.runInPromisePool)({
147
+ items: chunks,
148
+ concurrency: 2,
149
+ processor: function (calls) { return executeCalls(calls, chain, block); }
150
+ })];
151
+ case 5:
152
+ response = _b.sent();
153
+ return [2 /*return*/, response.flat()];
154
+ case 6:
155
+ (0, debugLog_1.debugLog)("Multicall failed, defaulting to single transactions...");
156
+ return [3 /*break*/, 7];
157
+ case 7: return [2 /*return*/, (0, util_1.runInPromisePool)({
158
+ items: contractCalls,
159
+ concurrency: networkSupportsMulticall(chain) ? 2 : 10,
160
+ processor: function (_a) {
161
+ var to = _a.to, data = _a.data;
162
+ return __awaiter(_this, void 0, void 0, function () {
163
+ var result, e_2;
164
+ return __generator(this, function (_b) {
165
+ switch (_b.label) {
166
+ case 0:
167
+ result = null;
168
+ _b.label = 1;
169
+ case 1:
170
+ _b.trys.push([1, 3, , 4]);
171
+ return [4 /*yield*/, (0, rpcCall_1.call)((0, general_1.getProvider)(chain), { to: to, data: data }, block !== null && block !== void 0 ? block : "latest", chain)];
172
+ case 2:
173
+ result = _b.sent();
174
+ return [3 /*break*/, 4];
175
+ case 3:
176
+ e_2 = _b.sent();
177
+ (0, debugLog_1.debugLog)(e_2);
178
+ return [3 /*break*/, 4];
179
+ case 4: return [2 /*return*/, result];
180
+ }
181
+ });
160
182
  });
161
- });
162
- }))];
163
- case 7:
164
- values = _b.sent();
165
- return [2 /*return*/, values];
183
+ }
184
+ })];
166
185
  }
167
186
  });
168
187
  });
@@ -187,19 +206,11 @@ function multicallAddressOrThrow(chain) {
187
206
  });
188
207
  }
189
208
  function networkSupportsMulticall(chain) {
190
- return __awaiter(this, void 0, void 0, function () {
191
- var network, address;
192
- return __generator(this, function (_a) {
193
- switch (_a.label) {
194
- case 0: return [4 /*yield*/, (0, general_1.getProvider)(chain).network];
195
- case 1:
196
- network = _a.sent();
197
- address = multicallAddress(network.chainId);
198
- return [2 /*return*/, address !== null];
199
- }
200
- });
201
- });
209
+ var network = (0, general_1.getProvider)(chain).network;
210
+ var address = multicallAddress(network.chainId);
211
+ return address !== null;
202
212
  }
213
+ exports.networkSupportsMulticall = networkSupportsMulticall;
203
214
  function multicallAddress(chainId) {
204
215
  switch (chainId) {
205
216
  case 1:
@@ -1,3 +1,5 @@
1
1
  import { Deferrable } from "@ethersproject/properties";
2
2
  import { BaseProvider, BlockTag, TransactionRequest } from "@ethersproject/providers";
3
- export declare function call(provider: BaseProvider, data: Deferrable<TransactionRequest>, block: BlockTag, chain?: string): Promise<string>;
3
+ export declare function call(provider: BaseProvider, data: Deferrable<TransactionRequest>, block: BlockTag, chain?: string, options?: {
4
+ retry: boolean;
5
+ }): Promise<any>;
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
14
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
15
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -39,11 +50,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
50
  exports.call = void 0;
40
51
  var events_1 = require("events");
41
52
  var debugLog_1 = require("../util/debugLog");
42
- var maxParallelCalls = !!process.env.LLAMA_SDK_MAX_PARALLEL ? +process.env.LLAMA_SDK_MAX_PARALLEL : 30;
53
+ var maxParallelCalls = !!process.env.LLAMA_SDK_MAX_PARALLEL ? +process.env.LLAMA_SDK_MAX_PARALLEL : 100;
43
54
  var COUNTERS = {};
44
55
  var emitter = new events_1.EventEmitter();
45
56
  emitter.setMaxListeners(500000);
46
- function call(provider, data, block, chain) {
57
+ function call(provider, data, block, chain, options) {
58
+ var _a;
59
+ if (options === void 0) { options = { retry: true }; }
47
60
  return __awaiter(this, void 0, void 0, function () {
48
61
  function onComplete() {
49
62
  counter.activeWorkers--;
@@ -53,10 +66,11 @@ function call(provider, data, block, chain) {
53
66
  emitter.emit(nextRequestId);
54
67
  }
55
68
  }
56
- var counter, currentId, eventId, showEveryX, response, e_1;
57
- return __generator(this, function (_a) {
58
- switch (_a.label) {
69
+ var retry, counter, currentId, eventId, showEveryX, response, e_1;
70
+ return __generator(this, function (_b) {
71
+ switch (_b.label) {
59
72
  case 0:
73
+ retry = (_a = options.retry) !== null && _a !== void 0 ? _a : true;
60
74
  if (!chain)
61
75
  chain = 'noChain';
62
76
  counter = getChainCounter(chain);
@@ -66,27 +80,29 @@ function call(provider, data, block, chain) {
66
80
  counter.queue.push(eventId);
67
81
  return [4 /*yield*/, (0, events_1.once)(emitter, eventId)];
68
82
  case 1:
69
- _a.sent();
70
- _a.label = 2;
83
+ _b.sent();
84
+ _b.label = 2;
71
85
  case 2:
72
86
  counter.activeWorkers++;
73
87
  if (debugLog_1.DEBUG_ENABLED) {
74
88
  showEveryX = counter.queue.length > 100 ? 50 : 10 // show log fewer times if lot more are queued up
75
89
  ;
76
90
  if (currentId % showEveryX === 0)
77
- console.log("chain: ".concat(chain, " request #: ").concat(currentId, " queue: ").concat(counter.queue.length, " active requests: ").concat(counter.activeWorkers));
91
+ (0, debugLog_1.debugLog)("chain: ".concat(chain, " request #: ").concat(currentId, " queue: ").concat(counter.queue.length, " active requests: ").concat(counter.activeWorkers));
78
92
  }
79
- _a.label = 3;
93
+ _b.label = 3;
80
94
  case 3:
81
- _a.trys.push([3, 5, , 6]);
95
+ _b.trys.push([3, 5, , 6]);
82
96
  return [4 /*yield*/, provider.call(data, block)];
83
97
  case 4:
84
- response = _a.sent();
98
+ response = _b.sent();
85
99
  onComplete();
86
100
  return [3 /*break*/, 6];
87
101
  case 5:
88
- e_1 = _a.sent();
102
+ e_1 = _b.sent();
89
103
  onComplete();
104
+ if (retry)
105
+ return [2 /*return*/, call(provider, data, block, chain, __assign(__assign({}, options), { retry: false }))];
90
106
  throw e_1;
91
107
  case 6: return [2 /*return*/, response];
92
108
  }
@@ -2,7 +2,7 @@ import { ethers, BigNumber } from "ethers";
2
2
  export declare const providers: {
3
3
  [chain: string]: ethers.providers.BaseProvider;
4
4
  };
5
- export type Chain = "ethereum" | "bsc" | "polygon" | "heco" | "fantom" | "rsk" | "tomochain" | "xdai" | "avax" | "wan" | "iotex" | "harmony" | "thundercore" | "okexchain" | "optimism" | "arbitrum" | "kcc" | "celo" | "moonriver" | "shiden" | "palm" | "energyweb" | "energi" | "songbird" | "hpb" | "gochain" | "ethereumclassic" | "xdaiarb" | "kardia" | "fuse" | "smartbch" | "elastos" | "hoo" | "fusion" | "aurora" | "ronin" | "boba" | "cronos" | "polis" | "zyx" | "telos" | "metis" | "ubiq" | "velas" | "callisto" | "csc" | "nahmii" | "liquidchain" | "meter" | "theta" | "oasis" | "syscoin" | "moonbeam" | "curio" | "astar" | "godwoken" | "evmos" | "conflux" | "milkomeda" | "milkomeda_a1" | "dfk" | "bittorrent" | "findora" | "candle" | "lachain" | "reichain" | "rei" | "clv" | "echelon" | "multivac" | "sx" | "karura_evm" | "nova" | "ontology_evm" | "jfin" | "bitkub" | "bitgert" | "canto" | "dogechain" | "posi" | "arbitrum_nova" | "ultron" | "tombchain" | "vision" | "ethpow" | "functionx" | "cube" | "xdc" | "step" | "kekchain" | "muuchain";
5
+ export type Chain = "ethereum" | "bsc" | "polygon" | "heco" | "fantom" | "rsk" | "tomochain" | "xdai" | "avax" | "wan" | "iotex" | "harmony" | "thundercore" | "okexchain" | "optimism" | "arbitrum" | "kcc" | "celo" | "moonriver" | "shiden" | "palm" | "energyweb" | "energi" | "songbird" | "hpb" | "gochain" | "ethereumclassic" | "xdaiarb" | "kardia" | "fuse" | "smartbch" | "elastos" | "hoo" | "fusion" | "aurora" | "ronin" | "boba" | "cronos" | "polis" | "zyx" | "telos" | "metis" | "ubiq" | "velas" | "callisto" | "csc" | "nahmii" | "liquidchain" | "meter" | "theta" | "oasis" | "syscoin" | "moonbeam" | "curio" | "astar" | "godwoken" | "evmos" | "conflux" | "milkomeda" | "milkomeda_a1" | "dfk" | "bittorrent" | "findora" | "candle" | "lachain" | "reichain" | "rei" | "clv" | "echelon" | "multivac" | "sx" | "karura_evm" | "nova" | "ontology_evm" | "jfin" | "bitkub" | "bitgert" | "canto" | "dogechain" | "posi" | "arbitrum_nova" | "ultron" | "tombchain" | "vision" | "ethpow" | "functionx" | "cube" | "xdc" | "step" | "kekchain" | "muuchain" | "dexit";
6
6
  export declare function getProvider(chain?: Chain): ethers.providers.BaseProvider;
7
7
  export declare const TEN: ethers.BigNumber;
8
8
  export declare function handleDecimals(num: BigNumber, decimals?: number): string;
package/build/general.js CHANGED
@@ -133,6 +133,7 @@ exports.providers = {
133
133
  kekchain: createProvider("kekchain", "https://mainnet.kekchain.com", 420420),
134
134
  step: createProvider("step", "https://rpc.step.network/", 1234),
135
135
  muuchain: createProvider("muu", "https://mainnet-rpc.muuchain.com", 20402),
136
+ dexit: createProvider("dexit", "https://dxt.dexit.network", 877),
136
137
  };
137
138
  function getProvider(chain) {
138
139
  if (chain === void 0) { chain = "ethereum"; }
@@ -1,6 +1,9 @@
1
1
  import { Chain } from "../general";
2
2
  import type { Address } from "../types";
3
3
  import type { Log } from "@ethersproject/abstract-provider";
4
+ import runInPromisePoolOrig from "./promisePool";
5
+ export declare const runInPromisePool: typeof runInPromisePoolOrig;
6
+ export declare function sliceIntoChunks(arr: any[], chunkSize?: number): any[][];
4
7
  interface TimestampBlock {
5
8
  number: number;
6
9
  timestamp: number;
@@ -50,12 +50,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
50
50
  return (mod && mod.__esModule) ? mod : { "default": mod };
51
51
  };
52
52
  Object.defineProperty(exports, "__esModule", { value: true });
53
- exports.normalizeBalances = exports.normalizePrefixes = exports.normalizeAddress = exports.getLogs = exports.lookupBlock = exports.getLatestBlock = void 0;
53
+ exports.normalizeBalances = exports.normalizePrefixes = exports.normalizeAddress = exports.getLogs = exports.lookupBlock = exports.getLatestBlock = exports.sliceIntoChunks = exports.runInPromisePool = void 0;
54
54
  var general_1 = require("../general");
55
55
  var node_fetch_1 = __importDefault(require("node-fetch"));
56
56
  var ethers_1 = require("ethers");
57
57
  var generalUtil_1 = require("../generalUtil");
58
58
  var debugLog_1 = require("./debugLog");
59
+ var promisePool_1 = __importDefault(require("./promisePool"));
60
+ exports.runInPromisePool = promisePool_1.default;
61
+ function sliceIntoChunks(arr, chunkSize) {
62
+ if (chunkSize === void 0) { chunkSize = 100; }
63
+ var res = [];
64
+ for (var i = 0; i < arr.length; i += chunkSize) {
65
+ var chunk = arr.slice(i, i + chunkSize);
66
+ res.push(chunk);
67
+ }
68
+ return res;
69
+ }
70
+ exports.sliceIntoChunks = sliceIntoChunks;
59
71
  var kavaBlockProvider = {
60
72
  getBlock: function (height) { return __awaiter(void 0, void 0, void 0, function () {
61
73
  return __generator(this, function (_a) {
@@ -0,0 +1,5 @@
1
+ export default function runInPromisePool(params: {
2
+ items: any[];
3
+ concurrency: number;
4
+ processor: any;
5
+ }): Promise<any[]>;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ var promise_pool_1 = require("@supercharge/promise-pool");
40
+ function runInPromisePool(params) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ var _a, results, errors, flatResults;
43
+ var _this = this;
44
+ return __generator(this, function (_b) {
45
+ switch (_b.label) {
46
+ case 0: return [4 /*yield*/, promise_pool_1.PromisePool
47
+ .withConcurrency(params.concurrency)
48
+ .for(params.items)
49
+ .process(function (item, i) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
50
+ switch (_a.label) {
51
+ case 0: return [4 /*yield*/, params.processor(item, i)];
52
+ case 1: return [2 /*return*/, [_a.sent(), i]];
53
+ }
54
+ }); }); })];
55
+ case 1:
56
+ _a = _b.sent(), results = _a.results, errors = _a.errors;
57
+ if (errors.length)
58
+ throw errors[0];
59
+ flatResults = results.sort(function (a, b) { return a[1] - b[1]; }).map((function (i) { return i[0]; }));
60
+ return [2 /*return*/, flatResults];
61
+ }
62
+ });
63
+ });
64
+ }
65
+ exports.default = runInPromisePool;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defillama/sdk",
3
- "version": "3.0.7",
3
+ "version": "3.0.9",
4
4
  "description": "SDK for calculating TVL",
5
5
  "main": "build/index.js",
6
6
  "scripts": {