@sentio/sdk 2.40.0-rc.21 → 2.40.0-rc.23

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.
@@ -1,7 +1,7 @@
1
1
  import { BaseContract } from 'ethers';
2
2
  import { BoundContractView, ContractView } from './context.js';
3
3
  import { BaseProcessor } from './base-processor.js';
4
- import { getProvider } from './provider.js';
4
+ import { getProvider } from '@sentio/runtime';
5
5
  import { addProcessor } from './binds.js';
6
6
  export class GenericProcessor extends BaseProcessor {
7
7
  eventABI;
@@ -1 +1 @@
1
- {"version":3,"file":"generic-processor.js","sourceRoot":"","sources":["../../src/eth/generic-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,OAAO,gBAAiB,SAAQ,aAGrC;IACC,QAAQ,CAAU;IAClB,YAAY,QAAkB,EAAE,OAAoB;QAClD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAES,uBAAuB;QAC/B,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QACvG,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,YAAY,CAAe,QAAQ,CAAC,CAAC,CAAA;IAC7F,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,QAA2B,EAAE,OAAoB;QAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAA;QACvB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,GAAG,SAAS,CAAA;QAC1B,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACzD,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAChC,OAAO,SAAS,CAAA;IAClB,CAAC;CACF"}
1
+ {"version":3,"file":"generic-processor.js","sourceRoot":"","sources":["../../src/eth/generic-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,OAAO,gBAAiB,SAAQ,aAGrC;IACC,QAAQ,CAAU;IAClB,YAAY,QAAkB,EAAE,OAAoB;QAClD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAES,uBAAuB;QAC/B,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QACvG,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,YAAY,CAAe,QAAQ,CAAC,CAAC,CAAA;IAC7F,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,QAA2B,EAAE,OAAoB;QAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAA;QACvB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,GAAG,SAAS,CAAA;QAC1B,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACzD,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAChC,OAAO,SAAS,CAAA;IAClB,CAAC;CACF"}
@@ -2,7 +2,7 @@ export { BaseProcessor, GlobalProcessor, defaultPreprocessHandler } from './base
2
2
  export { GenericProcessor } from './generic-processor.js';
3
3
  export { BaseProcessorTemplate } from './base-processor-template.js';
4
4
  export { AccountProcessor } from './account-processor.js';
5
- export { getProvider, DummyProvider } from './provider.js';
5
+ export { getProvider, DummyProvider } from '@sentio/runtime';
6
6
  export { EthContext } from './context.js';
7
7
  export * from './eth.js';
8
8
  export { BindOptions, AccountBindOptions } from './bind-options.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAE9G,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAE9G,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA"}
package/lib/eth/index.js CHANGED
@@ -2,7 +2,7 @@ export { BaseProcessor, GlobalProcessor, defaultPreprocessHandler } from './base
2
2
  export { GenericProcessor } from './generic-processor.js';
3
3
  export { BaseProcessorTemplate } from './base-processor-template.js';
4
4
  export { AccountProcessor } from './account-processor.js';
5
- export { getProvider, DummyProvider } from './provider.js';
5
+ export { getProvider, DummyProvider } from '@sentio/runtime';
6
6
  export { EthContext } from './context.js';
7
7
  export * from './eth.js';
8
8
  export { BindOptions, AccountBindOptions } from './bind-options.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAE9G,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAE9G,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentio/sdk",
3
- "version": "2.40.0-rc.21",
3
+ "version": "2.40.0-rc.23",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -82,8 +82,8 @@
82
82
  "typechain": "^8.3.2",
83
83
  "utility-types": "^3.11.0",
84
84
  "yaml": "^2.3.4",
85
- "@sentio/protos": "2.40.0-rc.21",
86
- "@sentio/runtime": "^2.40.0-rc.21"
85
+ "@sentio/protos": "2.40.0-rc.23",
86
+ "@sentio/runtime": "^2.40.0-rc.23"
87
87
  },
88
88
  "peerDependencies": {
89
89
  "tsup": "npm:@sentio/tsup@^6.7.2"
@@ -2,7 +2,7 @@ import { BaseContract } from 'ethers'
2
2
  import { BoundContractView, ContractView } from './context.js'
3
3
  import { BindOptions } from './bind-options.js'
4
4
  import { BaseProcessor } from './base-processor.js'
5
- import { getProvider } from './provider.js'
5
+ import { getProvider } from '@sentio/runtime'
6
6
  import { addProcessor } from './binds.js'
7
7
 
8
8
  export class GenericProcessor extends BaseProcessor<
package/src/eth/index.ts CHANGED
@@ -2,7 +2,9 @@ export { BaseProcessor, GlobalProcessor, defaultPreprocessHandler } from './base
2
2
  export { GenericProcessor } from './generic-processor.js'
3
3
  export { BaseProcessorTemplate } from './base-processor-template.js'
4
4
  export { AccountProcessor } from './account-processor.js'
5
- export { getProvider, DummyProvider } from './provider.js'
5
+
6
+ export { getProvider, DummyProvider } from '@sentio/runtime'
7
+
6
8
  export { EthContext } from './context.js'
7
9
  export * from './eth.js'
8
10
  export { BindOptions, AccountBindOptions } from './bind-options.js'
@@ -1,5 +0,0 @@
1
- import { JsonRpcProvider, Provider } from 'ethers';
2
- import { EthChainId } from '@sentio/chain';
3
- export declare const DummyProvider: JsonRpcProvider;
4
- export declare function getProvider(chainId?: EthChainId): Provider;
5
- //# sourceMappingURL=provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/eth/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAW,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAI3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI1C,eAAO,MAAM,aAAa,iBAA2C,CAAA;AAqBrE,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,QAAQ,CAgC1D"}
@@ -1,134 +0,0 @@
1
- import { JsonRpcProvider, Network } from 'ethers';
2
- import PQueue from 'p-queue';
3
- import { Endpoints } from '@sentio/runtime';
4
- import { EthChainId } from '@sentio/chain';
5
- import { LRUCache } from 'lru-cache';
6
- import { metrics } from '@opentelemetry/api';
7
- export const DummyProvider = new JsonRpcProvider('', Network.from(1));
8
- const meter = metrics.getMeter('processor_provider');
9
- const hit_count = meter.createCounter('provider_hit_count');
10
- const miss_count = meter.createCounter('provider_miss_count');
11
- const queue_size = meter.createGauge('provider_queue_size');
12
- const total_duration = meter.createCounter('provider_total_duration');
13
- const total_queued = meter.createCounter('provider_total_queued');
14
- const providers = new Map();
15
- // export function getEthChainId(networkish?: EthContext | EthChainId): EthChainId {
16
- // if (!networkish) {
17
- // networkish = EthChainId.ETHEREUM
18
- // }
19
- // if (networkish instanceof BaseContext) {
20
- // networkish = networkish.getChainId()
21
- // }
22
- // return networkish
23
- // }
24
- export function getProvider(chainId) {
25
- // const network = getNetworkFromCtxOrNetworkish(networkish)
26
- if (!chainId) {
27
- chainId = EthChainId.ETHEREUM;
28
- }
29
- const network = Network.from(parseInt(chainId));
30
- // TODO check if other key needed
31
- const address = Endpoints.INSTANCE.chainServer.get(chainId);
32
- const key = network.chainId.toString() + '-' + address;
33
- let provider = providers.get(key);
34
- if (provider) {
35
- return provider;
36
- }
37
- if (address === undefined) {
38
- throw Error('Provider not found for chain ' +
39
- network.chainId +
40
- ', configured chains: ' +
41
- [...Endpoints.INSTANCE.chainServer.keys()].join(' '));
42
- }
43
- provider = new QueuedStaticJsonRpcProvider(address, network, Endpoints.INSTANCE.concurrency, Endpoints.INSTANCE.batchCount);
44
- providers.set(key, provider);
45
- return provider;
46
- }
47
- function getTag(prefix, value) {
48
- return (prefix +
49
- ':' +
50
- JSON.stringify(value, (k, v) => {
51
- if (v == null) {
52
- return 'null';
53
- }
54
- if (typeof v === 'bigint') {
55
- return `bigint:${v.toString()}`;
56
- }
57
- if (typeof v === 'string') {
58
- return v.toLowerCase();
59
- }
60
- // Sort object keys
61
- if (typeof v === 'object' && !Array.isArray(v)) {
62
- const keys = Object.keys(v);
63
- keys.sort();
64
- return keys.reduce((accum, key) => {
65
- accum[key] = v[key];
66
- return accum;
67
- }, {});
68
- }
69
- return v;
70
- }));
71
- }
72
- class QueuedStaticJsonRpcProvider extends JsonRpcProvider {
73
- executor;
74
- #performCache = new LRUCache({
75
- max: 300000 // 300k items
76
- // maxSize: 300 * 1024 * 1024, // 300mb for cache
77
- // ttl: 1000 * 60 * 60, // 1 hour no ttl for better performance
78
- // sizeCalculation: (value: any) => {
79
- // assume each item is 1kb for simplicity
80
- // return 1024
81
- // }
82
- });
83
- constructor(url, network, concurrency, batchCount = 1) {
84
- // TODO re-enable match when possible
85
- super(url, network, { staticNetwork: network, batchMaxCount: batchCount });
86
- this.executor = new PQueue({ concurrency: concurrency });
87
- }
88
- async send(method, params) {
89
- if (method !== 'eth_call') {
90
- return await this.executor.add(() => super.send(method, params));
91
- }
92
- const tag = getTag(method, params);
93
- const block = params[params.length - 1];
94
- let perform = this.#performCache.get(tag);
95
- if (!perform) {
96
- miss_count.add(1);
97
- const queued = Date.now();
98
- perform = this.executor.add(() => {
99
- const started = Date.now();
100
- total_queued.add(started - queued);
101
- return super.send(method, params).finally(() => {
102
- total_duration.add(Date.now() - started);
103
- });
104
- });
105
- perform.catch((e) => {
106
- // if (e.code !== 'CALL_EXCEPTION' && e.code !== 'BAD_DATA') {
107
- setTimeout(() => {
108
- if (this.#performCache.get(tag) === perform) {
109
- this.#performCache.delete(tag);
110
- }
111
- }, 1000);
112
- });
113
- queue_size.record(this.executor.size);
114
- this.#performCache.set(tag, perform);
115
- // For non latest block call, we cache permanently, otherwise we cache for one minute
116
- if (block === 'latest') {
117
- setTimeout(() => {
118
- if (this.#performCache.get(tag) === perform) {
119
- this.#performCache.delete(tag);
120
- }
121
- }, 60 * 1000);
122
- }
123
- }
124
- else {
125
- hit_count.add(1);
126
- }
127
- const result = await perform;
128
- if (!result) {
129
- throw Error('Unexpected null response');
130
- }
131
- return result;
132
- }
133
- }
134
- //# sourceMappingURL=provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/eth/provider.ts"],"names":[],"mappings":"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"}
@@ -1,163 +0,0 @@
1
- import { JsonRpcProvider, Network, Provider } from 'ethers'
2
-
3
- import PQueue from 'p-queue'
4
- import { Endpoints } from '@sentio/runtime'
5
- import { EthChainId } from '@sentio/chain'
6
- import { LRUCache } from 'lru-cache'
7
- import { metrics } from '@opentelemetry/api'
8
-
9
- export const DummyProvider = new JsonRpcProvider('', Network.from(1))
10
-
11
- const meter = metrics.getMeter('processor_provider')
12
- const hit_count = meter.createCounter('provider_hit_count')
13
- const miss_count = meter.createCounter('provider_miss_count')
14
- const queue_size = meter.createGauge('provider_queue_size')
15
- const total_duration = meter.createCounter('provider_total_duration')
16
- const total_queued = meter.createCounter('provider_total_queued')
17
-
18
- const providers = new Map<string, JsonRpcProvider>()
19
-
20
- // export function getEthChainId(networkish?: EthContext | EthChainId): EthChainId {
21
- // if (!networkish) {
22
- // networkish = EthChainId.ETHEREUM
23
- // }
24
- // if (networkish instanceof BaseContext) {
25
- // networkish = networkish.getChainId()
26
- // }
27
- // return networkish
28
- // }
29
-
30
- export function getProvider(chainId?: EthChainId): Provider {
31
- // const network = getNetworkFromCtxOrNetworkish(networkish)
32
- if (!chainId) {
33
- chainId = EthChainId.ETHEREUM
34
- }
35
- const network = Network.from(parseInt(chainId))
36
- // TODO check if other key needed
37
-
38
- const address = Endpoints.INSTANCE.chainServer.get(chainId)
39
- const key = network.chainId.toString() + '-' + address
40
- let provider = providers.get(key)
41
-
42
- if (provider) {
43
- return provider
44
- }
45
-
46
- if (address === undefined) {
47
- throw Error(
48
- 'Provider not found for chain ' +
49
- network.chainId +
50
- ', configured chains: ' +
51
- [...Endpoints.INSTANCE.chainServer.keys()].join(' ')
52
- )
53
- }
54
- provider = new QueuedStaticJsonRpcProvider(
55
- address,
56
- network,
57
- Endpoints.INSTANCE.concurrency,
58
- Endpoints.INSTANCE.batchCount
59
- )
60
- providers.set(key, provider)
61
- return provider
62
- }
63
-
64
- function getTag(prefix: string, value: any): string {
65
- return (
66
- prefix +
67
- ':' +
68
- JSON.stringify(value, (k, v) => {
69
- if (v == null) {
70
- return 'null'
71
- }
72
- if (typeof v === 'bigint') {
73
- return `bigint:${v.toString()}`
74
- }
75
- if (typeof v === 'string') {
76
- return v.toLowerCase()
77
- }
78
-
79
- // Sort object keys
80
- if (typeof v === 'object' && !Array.isArray(v)) {
81
- const keys = Object.keys(v)
82
- keys.sort()
83
- return keys.reduce(
84
- (accum, key) => {
85
- accum[key] = v[key]
86
- return accum
87
- },
88
- <any>{}
89
- )
90
- }
91
-
92
- return v
93
- })
94
- )
95
- }
96
-
97
- class QueuedStaticJsonRpcProvider extends JsonRpcProvider {
98
- executor: PQueue
99
- #performCache = new LRUCache<string, Promise<any>>({
100
- max: 300000 // 300k items
101
- // maxSize: 300 * 1024 * 1024, // 300mb for cache
102
- // ttl: 1000 * 60 * 60, // 1 hour no ttl for better performance
103
- // sizeCalculation: (value: any) => {
104
- // assume each item is 1kb for simplicity
105
- // return 1024
106
- // }
107
- })
108
-
109
- constructor(url: string, network: Network, concurrency: number, batchCount = 1) {
110
- // TODO re-enable match when possible
111
- super(url, network, { staticNetwork: network, batchMaxCount: batchCount })
112
- this.executor = new PQueue({ concurrency: concurrency })
113
- }
114
-
115
- async send(method: string, params: Array<any>): Promise<any> {
116
- if (method !== 'eth_call') {
117
- return await this.executor.add(() => super.send(method, params))
118
- }
119
- const tag = getTag(method, params)
120
- const block = params[params.length - 1]
121
- let perform = this.#performCache.get(tag)
122
- if (!perform) {
123
- miss_count.add(1)
124
- const queued: number = Date.now()
125
- perform = this.executor.add(() => {
126
- const started = Date.now()
127
- total_queued.add(started - queued)
128
-
129
- return super.send(method, params).finally(() => {
130
- total_duration.add(Date.now() - started)
131
- })
132
- })
133
- perform.catch((e) => {
134
- // if (e.code !== 'CALL_EXCEPTION' && e.code !== 'BAD_DATA') {
135
- setTimeout(() => {
136
- if (this.#performCache.get(tag) === perform) {
137
- this.#performCache.delete(tag)
138
- }
139
- }, 1000)
140
- })
141
-
142
- queue_size.record(this.executor.size)
143
-
144
- this.#performCache.set(tag, perform)
145
- // For non latest block call, we cache permanently, otherwise we cache for one minute
146
- if (block === 'latest') {
147
- setTimeout(() => {
148
- if (this.#performCache.get(tag) === perform) {
149
- this.#performCache.delete(tag)
150
- }
151
- }, 60 * 1000)
152
- }
153
- } else {
154
- hit_count.add(1)
155
- }
156
-
157
- const result = await perform
158
- if (!result) {
159
- throw Error('Unexpected null response')
160
- }
161
- return result
162
- }
163
- }