@sentio/sdk 2.41.3-rc.5 → 2.41.4-rc.1

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.
@@ -0,0 +1,3 @@
1
+ import { Provider } from 'ethers';
2
+ export declare function estimateBlockNumberAtDate(provider: Provider, targetDate: Date, startBlock?: number): Promise<number>;
3
+ //# sourceMappingURL=block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../src/utils/block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAUxC,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,IAAI,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CA6BjB"}
@@ -0,0 +1,35 @@
1
+ async function getBlockSafely(provider, blockNumber) {
2
+ const block = await provider.getBlock(blockNumber);
3
+ if (!block) {
4
+ throw new Error(`Block ${blockNumber} not found.`);
5
+ }
6
+ return block;
7
+ }
8
+ export async function estimateBlockNumberAtDate(provider, targetDate, startBlock) {
9
+ // Convert the Date object to a Unix timestamp (in seconds)
10
+ const targetTimestamp = Math.floor(targetDate.getTime() / 1000);
11
+ // Step 1: Get the current block number and its timestamp
12
+ const latestBlock = await getBlockSafely(provider, 'latest');
13
+ const earliestBlockNumber = startBlock !== undefined ? startBlock : 0;
14
+ const earliestBlock = await getBlockSafely(provider, earliestBlockNumber);
15
+ // Binary search initialization
16
+ let low = earliestBlock.number;
17
+ let high = latestBlock.number;
18
+ while (low <= high) {
19
+ const mid = Math.floor((low + high) / 2);
20
+ const midBlock = await getBlockSafely(provider, mid);
21
+ if (midBlock.timestamp === targetTimestamp) {
22
+ return midBlock.number; // Exact match
23
+ }
24
+ else if (midBlock.timestamp < targetTimestamp) {
25
+ low = mid + 1; // Target is in the upper half
26
+ }
27
+ else {
28
+ high = mid - 1; // Target is in the lower half
29
+ }
30
+ }
31
+ // If exact timestamp is not found, return the closest block number
32
+ const closestBlock = await getBlockSafely(provider, high);
33
+ return closestBlock.number;
34
+ }
35
+ //# sourceMappingURL=block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/utils/block.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,cAAc,CAAC,QAAkB,EAAE,WAA4B;IAC5E,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,SAAS,WAAW,aAAa,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAAkB,EAClB,UAAgB,EAChB,UAAmB;IAEnB,2DAA2D;IAC3D,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;IAE/D,yDAAyD;IACzD,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC5D,MAAM,mBAAmB,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACrE,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAA;IAEzE,+BAA+B;IAC/B,IAAI,GAAG,GAAG,aAAa,CAAC,MAAM,CAAA;IAC9B,IAAI,IAAI,GAAG,WAAW,CAAC,MAAM,CAAA;IAE7B,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACxC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QAEpD,IAAI,QAAQ,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;YAC3C,OAAO,QAAQ,CAAC,MAAM,CAAA,CAAC,cAAc;QACvC,CAAC;aAAM,IAAI,QAAQ,CAAC,SAAS,GAAG,eAAe,EAAE,CAAC;YAChD,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA,CAAC,8BAA8B;QAC9C,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,GAAG,GAAG,CAAC,CAAA,CAAC,8BAA8B;QAC/C,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACzD,OAAO,YAAY,CAAC,MAAM,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=block.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.test.d.ts","sourceRoot":"","sources":["../../src/utils/block.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.test.js","sourceRoot":"","sources":["../../src/utils/block.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAE7B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,KAAK,CAAC,KAAK,EAAE,CAAA;IAEb,MAAM,aAAa,GAAG,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAErD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IAE/C,MAAM,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAA;QACnD,MAAM,oBAAoB,GAAG,MAAM,yBAAyB,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;QAC1F,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,3 +1,4 @@
1
+ export * from './block.js';
1
2
  export * from './conversion.js';
2
3
  export * as token from './token.js';
3
4
  export * from './dex-price.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACnG,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACnG,cAAc,WAAW,CAAA"}
@@ -1,3 +1,4 @@
1
+ export * from './block.js';
1
2
  export * from './conversion.js';
2
3
  export * as token from './token.js';
3
4
  export * from './dex-price.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACnG,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACnG,cAAc,WAAW,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentio/sdk",
3
- "version": "2.41.3-rc.5",
3
+ "version": "2.41.4-rc.1",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -84,8 +84,8 @@
84
84
  "typechain": "^8.3.2",
85
85
  "utility-types": "^3.11.0",
86
86
  "yaml": "^2.3.4",
87
- "@sentio/protos": "2.41.3-rc.5",
88
- "@sentio/runtime": "^2.41.3-rc.5"
87
+ "@sentio/protos": "2.41.4-rc.1",
88
+ "@sentio/runtime": "^2.41.4-rc.1"
89
89
  },
90
90
  "peerDependencies": {
91
91
  "tsup": "npm:@sentio/tsup@^6.7.2"
@@ -0,0 +1,44 @@
1
+ import { Block, Provider } from 'ethers'
2
+
3
+ async function getBlockSafely(provider: Provider, blockNumber: number | string): Promise<Block> {
4
+ const block = await provider.getBlock(blockNumber)
5
+ if (!block) {
6
+ throw new Error(`Block ${blockNumber} not found.`)
7
+ }
8
+ return block
9
+ }
10
+
11
+ export async function estimateBlockNumberAtDate(
12
+ provider: Provider,
13
+ targetDate: Date,
14
+ startBlock?: number
15
+ ): Promise<number> {
16
+ // Convert the Date object to a Unix timestamp (in seconds)
17
+ const targetTimestamp = Math.floor(targetDate.getTime() / 1000)
18
+
19
+ // Step 1: Get the current block number and its timestamp
20
+ const latestBlock = await getBlockSafely(provider, 'latest')
21
+ const earliestBlockNumber = startBlock !== undefined ? startBlock : 0
22
+ const earliestBlock = await getBlockSafely(provider, earliestBlockNumber)
23
+
24
+ // Binary search initialization
25
+ let low = earliestBlock.number
26
+ let high = latestBlock.number
27
+
28
+ while (low <= high) {
29
+ const mid = Math.floor((low + high) / 2)
30
+ const midBlock = await getBlockSafely(provider, mid)
31
+
32
+ if (midBlock.timestamp === targetTimestamp) {
33
+ return midBlock.number // Exact match
34
+ } else if (midBlock.timestamp < targetTimestamp) {
35
+ low = mid + 1 // Target is in the upper half
36
+ } else {
37
+ high = mid - 1 // Target is in the lower half
38
+ }
39
+ }
40
+
41
+ // If exact timestamp is not found, return the closest block number
42
+ const closestBlock = await getBlockSafely(provider, high)
43
+ return closestBlock.number
44
+ }
@@ -1,3 +1,4 @@
1
+ export * from './block.js'
1
2
  export * from './conversion.js'
2
3
  export * as token from './token.js'
3
4
  export * from './dex-price.js'