@sentio/sdk 2.1.5-rc.2 → 2.1.5-rc.3

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.
@@ -31,19 +31,56 @@ export function getProvider(networkish) {
31
31
  providers.set(network.chainId.toString(), provider);
32
32
  return provider;
33
33
  }
34
+ function getTag(prefix, value) {
35
+ return (prefix +
36
+ ':' +
37
+ JSON.stringify(value, (k, v) => {
38
+ if (v == null) {
39
+ return 'null';
40
+ }
41
+ if (typeof v === 'bigint') {
42
+ return `bigint:${v.toString()}`;
43
+ }
44
+ if (typeof v === 'string') {
45
+ return v.toLowerCase();
46
+ }
47
+ // Sort object keys
48
+ if (typeof v === 'object' && !Array.isArray(v)) {
49
+ const keys = Object.keys(v);
50
+ keys.sort();
51
+ return keys.reduce((accum, key) => {
52
+ accum[key] = v[key];
53
+ return accum;
54
+ }, {});
55
+ }
56
+ return v;
57
+ }));
58
+ }
34
59
  class QueuedStaticJsonRpcProvider extends JsonRpcProvider {
35
60
  executor;
61
+ #performCache = new Map();
36
62
  constructor(url, network, concurrency) {
37
63
  // TODO re-enable match when possible
38
64
  super(url, network, { staticNetwork: network, batchMaxCount: 1 });
39
65
  this.executor = new PQueue({ concurrency: concurrency });
40
66
  }
41
67
  async send(method, params) {
42
- const res = await this.executor.add(() => super.send(method, params));
43
- if (!res) {
68
+ const tag = getTag(method, params);
69
+ let perform = this.#performCache.get(tag);
70
+ if (!perform) {
71
+ perform = this.executor.add(() => super.send(method, params));
72
+ this.#performCache.set(tag, perform);
73
+ setTimeout(() => {
74
+ if (this.#performCache.get(tag) === perform) {
75
+ this.#performCache.delete(tag);
76
+ }
77
+ }, 500);
78
+ }
79
+ const result = await perform;
80
+ if (!result) {
44
81
  throw Error('Unexpected null response');
45
82
  }
46
- return res;
83
+ return result;
47
84
  }
48
85
  }
49
86
  //# sourceMappingURL=provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/eth/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAG3D,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAErE,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAA;AAEpD,MAAM,UAAU,WAAW,CAAC,UAAuB;IACjD,IAAI,CAAC,UAAU,EAAE;QACf,UAAU,GAAG,CAAC,CAAA;KACf;IACD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAA;QAC/B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YACd,UAAU,GAAG,CAAC,CAAA;SACf;KACF;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACxC,iCAAiC;IAEjC,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC9E,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG,OAAO,CAAA;IACtD,IAAI,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAEjC,IAAI,QAAQ,EAAE;QACZ,OAAO,QAAQ,CAAA;KAChB;IAED,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,MAAM,KAAK,CACT,+BAA+B;YAC7B,OAAO,CAAC,OAAO;YACf,uBAAuB;YACvB,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACvD,CAAA;KACF;IACD,QAAQ,GAAG,IAAI,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAC1G,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAA;IACnD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,2BAA4B,SAAQ,eAAe;IACvD,QAAQ,CAAQ;IAEhB,YAAY,GAAW,EAAE,OAAgB,EAAE,WAAmB;QAC5D,qCAAqC;QACrC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAA;QACjE,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,MAAkB;QAC3C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QACrE,IAAI,CAAC,GAAG,EAAE;YACR,MAAM,KAAK,CAAC,0BAA0B,CAAC,CAAA;SACxC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;CACF","sourcesContent":["import { Provider, Network, JsonRpcProvider } from 'ethers'\nimport { Networkish } from 'ethers/providers'\n\nimport PQueue from 'p-queue'\nimport { Endpoints } from '@sentio/runtime'\n\nexport const DummyProvider = new JsonRpcProvider('', Network.from(1))\n\nconst providers = new Map<string, JsonRpcProvider>()\n\nexport function getProvider(networkish?: Networkish): Provider {\n if (!networkish) {\n networkish = 1\n }\n if (typeof networkish === 'string') {\n const id = parseInt(networkish)\n if (!isNaN(id)) {\n networkish = 1\n }\n }\n const network = Network.from(networkish)\n // TODO check if other key needed\n\n const address = Endpoints.INSTANCE.chainServer.get(network.chainId.toString())\n const key = network.chainId.toString() + '-' + address\n let provider = providers.get(key)\n\n if (provider) {\n return provider\n }\n\n if (address === undefined) {\n throw Error(\n 'Provider not found for chain ' +\n network.chainId +\n ', configured chains: ' +\n [...Endpoints.INSTANCE.chainServer.keys()].join(' ')\n )\n }\n provider = new QueuedStaticJsonRpcProvider(address, Network.from(network), Endpoints.INSTANCE.concurrency)\n providers.set(network.chainId.toString(), provider)\n return provider\n}\n\nclass QueuedStaticJsonRpcProvider extends JsonRpcProvider {\n executor: PQueue\n\n constructor(url: string, network: Network, concurrency: number) {\n // TODO re-enable match when possible\n super(url, network, { staticNetwork: network, batchMaxCount: 1 })\n this.executor = new PQueue({ concurrency: concurrency })\n }\n\n async send(method: string, params: Array<any>): Promise<any> {\n const res = await this.executor.add(() => super.send(method, params))\n if (!res) {\n throw Error('Unexpected null response')\n }\n return res\n }\n}\n"]}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/eth/provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { Provider, Network, JsonRpcProvider } from 'ethers'\nimport { Networkish } from 'ethers/providers'\n\nimport PQueue from 'p-queue'\nimport { Endpoints } from '@sentio/runtime'\n\nexport const DummyProvider = new JsonRpcProvider('', Network.from(1))\n\nconst providers = new Map<string, JsonRpcProvider>()\n\nexport function getProvider(networkish?: Networkish): Provider {\n if (!networkish) {\n networkish = 1\n }\n if (typeof networkish === 'string') {\n const id = parseInt(networkish)\n if (!isNaN(id)) {\n networkish = 1\n }\n }\n const network = Network.from(networkish)\n // TODO check if other key needed\n\n const address = Endpoints.INSTANCE.chainServer.get(network.chainId.toString())\n const key = network.chainId.toString() + '-' + address\n let provider = providers.get(key)\n\n if (provider) {\n return provider\n }\n\n if (address === undefined) {\n throw Error(\n 'Provider not found for chain ' +\n network.chainId +\n ', configured chains: ' +\n [...Endpoints.INSTANCE.chainServer.keys()].join(' ')\n )\n }\n provider = new QueuedStaticJsonRpcProvider(address, Network.from(network), Endpoints.INSTANCE.concurrency)\n providers.set(network.chainId.toString(), provider)\n return provider\n}\n\nfunction getTag(prefix: string, value: any): string {\n return (\n prefix +\n ':' +\n JSON.stringify(value, (k, v) => {\n if (v == null) {\n return 'null'\n }\n if (typeof v === 'bigint') {\n return `bigint:${v.toString()}`\n }\n if (typeof v === 'string') {\n return v.toLowerCase()\n }\n\n // Sort object keys\n if (typeof v === 'object' && !Array.isArray(v)) {\n const keys = Object.keys(v)\n keys.sort()\n return keys.reduce((accum, key) => {\n accum[key] = v[key]\n return accum\n }, <any>{})\n }\n\n return v\n })\n )\n}\n\nclass QueuedStaticJsonRpcProvider extends JsonRpcProvider {\n executor: PQueue\n #performCache = new Map<string, Promise<any>>()\n\n constructor(url: string, network: Network, concurrency: number) {\n // TODO re-enable match when possible\n super(url, network, { staticNetwork: network, batchMaxCount: 1 })\n this.executor = new PQueue({ concurrency: concurrency })\n }\n\n async send(method: string, params: Array<any>): Promise<any> {\n const tag = getTag(method, params)\n let perform = this.#performCache.get(tag)\n if (!perform) {\n perform = this.executor.add(() => super.send(method, params))\n this.#performCache.set(tag, perform)\n\n setTimeout(() => {\n if (this.#performCache.get(tag) === perform) {\n this.#performCache.delete(tag)\n }\n }, 500)\n }\n\n const result = await perform\n if (!result) {\n throw Error('Unexpected null response')\n }\n return result\n }\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sentio/sdk",
3
3
  "license": "Apache-2.0",
4
- "version": "2.1.5-rc.2",
4
+ "version": "2.1.5-rc.3",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "compile": "tsc -p . && cp src/utils/*.csv lib/utils && cp src/tsup.config.ts lib",
@@ -18,9 +18,9 @@
18
18
  "@project-serum/anchor": "^0.26.0",
19
19
  "@sentio/bigdecimal": "^9.1.1-patch.3",
20
20
  "@sentio/ethers-v6": "^1.0.25",
21
- "@sentio/protos": "^2.1.5-rc.2",
22
- "@sentio/runtime": "^2.1.5-rc.2",
23
- "@sentio/sdk": "^2.1.5-rc.2",
21
+ "@sentio/protos": "^2.1.5-rc.3",
22
+ "@sentio/runtime": "^2.1.5-rc.3",
23
+ "@sentio/sdk": "^2.1.5-rc.3",
24
24
  "@solana/web3.js": "^1.47.3",
25
25
  "@types/prettier": "^2.7.2",
26
26
  "aptos-sdk": "npm:@sentio/aptos@^1.6.0",
@@ -71,5 +71,5 @@
71
71
  "typedoc": {
72
72
  "entryPoint": "./src/index.ts"
73
73
  },
74
- "gitHead": "2f6c9508283b607314915ef801d97419561ce985"
74
+ "gitHead": "2a56b34cc14f22e0da27e16a20e16009d027664e"
75
75
  }
@@ -42,8 +42,39 @@ export function getProvider(networkish?: Networkish): Provider {
42
42
  return provider
43
43
  }
44
44
 
45
+ function getTag(prefix: string, value: any): string {
46
+ return (
47
+ prefix +
48
+ ':' +
49
+ JSON.stringify(value, (k, v) => {
50
+ if (v == null) {
51
+ return 'null'
52
+ }
53
+ if (typeof v === 'bigint') {
54
+ return `bigint:${v.toString()}`
55
+ }
56
+ if (typeof v === 'string') {
57
+ return v.toLowerCase()
58
+ }
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
+ }, <any>{})
68
+ }
69
+
70
+ return v
71
+ })
72
+ )
73
+ }
74
+
45
75
  class QueuedStaticJsonRpcProvider extends JsonRpcProvider {
46
76
  executor: PQueue
77
+ #performCache = new Map<string, Promise<any>>()
47
78
 
48
79
  constructor(url: string, network: Network, concurrency: number) {
49
80
  // TODO re-enable match when possible
@@ -52,10 +83,23 @@ class QueuedStaticJsonRpcProvider extends JsonRpcProvider {
52
83
  }
53
84
 
54
85
  async send(method: string, params: Array<any>): Promise<any> {
55
- const res = await this.executor.add(() => super.send(method, params))
56
- if (!res) {
86
+ const tag = getTag(method, params)
87
+ let perform = this.#performCache.get(tag)
88
+ if (!perform) {
89
+ perform = this.executor.add(() => super.send(method, params))
90
+ this.#performCache.set(tag, perform)
91
+
92
+ setTimeout(() => {
93
+ if (this.#performCache.get(tag) === perform) {
94
+ this.#performCache.delete(tag)
95
+ }
96
+ }, 500)
97
+ }
98
+
99
+ const result = await perform
100
+ if (!result) {
57
101
  throw Error('Unexpected null response')
58
102
  }
59
- return res
103
+ return result
60
104
  }
61
105
  }