@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.
- package/lib/utils/block.d.ts +3 -0
- package/lib/utils/block.d.ts.map +1 -0
- package/lib/utils/block.js +35 -0
- package/lib/utils/block.js.map +1 -0
- package/lib/utils/block.test.d.ts +2 -0
- package/lib/utils/block.test.d.ts.map +1 -0
- package/lib/utils/block.test.js.map +1 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.d.ts.map +1 -1
- package/lib/utils/index.js +1 -0
- package/lib/utils/index.js.map +1 -1
- package/package.json +3 -3
- package/src/utils/block.ts +44 -0
- package/src/utils/index.ts +1 -0
@@ -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 @@
|
|
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"}
|
package/lib/utils/index.d.ts
CHANGED
package/lib/utils/index.d.ts.map
CHANGED
@@ -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"}
|
package/lib/utils/index.js
CHANGED
package/lib/utils/index.js.map
CHANGED
@@ -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
|
+
"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.
|
88
|
-
"@sentio/runtime": "^2.41.
|
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
|
+
}
|
package/src/utils/index.ts
CHANGED