@sentio/sdk 2.40.0-rc.22 → 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.
- package/lib/eth/generic-processor.js +1 -1
- package/lib/eth/generic-processor.js.map +1 -1
- package/lib/eth/index.d.ts +1 -1
- package/lib/eth/index.d.ts.map +1 -1
- package/lib/eth/index.js +1 -1
- package/lib/eth/index.js.map +1 -1
- package/package.json +3 -3
- package/src/eth/generic-processor.ts +1 -1
- package/src/eth/index.ts +3 -1
- package/lib/eth/provider.d.ts +0 -5
- package/lib/eth/provider.d.ts.map +0 -1
- package/lib/eth/provider.js +0 -134
- package/lib/eth/provider.js.map +0 -1
- package/src/eth/provider.ts +0 -163
@@ -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 '
|
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,
|
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"}
|
package/lib/eth/index.d.ts
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 '
|
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';
|
package/lib/eth/index.d.ts.map
CHANGED
@@ -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;
|
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 '
|
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';
|
package/lib/eth/index.js.map
CHANGED
@@ -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;
|
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.
|
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.
|
86
|
-
"@sentio/runtime": "^2.40.0-rc.
|
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 '
|
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
|
-
|
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'
|
package/lib/eth/provider.d.ts
DELETED
@@ -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"}
|
package/lib/eth/provider.js
DELETED
@@ -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
|
package/lib/eth/provider.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/eth/provider.ts"],"names":[],"mappings":"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"}
|
package/src/eth/provider.ts
DELETED
@@ -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
|
-
}
|