From ef6f5967fafc79667a4d45841c015acafc30ba61 Mon Sep 17 00:00:00 2001 From: Abhivansh <31abhivanshj@gmail.com> Date: Wed, 24 Dec 2025 23:16:05 +0530 Subject: [PATCH 1/4] replace getMaxProvingPeriod() and getChallengeWindow() by getPDPConfig() --- packages/synapse-sdk/src/storage/context.ts | 23 +++++-------- .../src/test/warm-storage-service.test.ts | 8 +++-- .../synapse-sdk/src/warm-storage/service.ts | 33 +++++++++---------- 3 files changed, 29 insertions(+), 35 deletions(-) diff --git a/packages/synapse-sdk/src/storage/context.ts b/packages/synapse-sdk/src/storage/context.ts index a5cd06cdf..76b8938ce 100644 --- a/packages/synapse-sdk/src/storage/context.ts +++ b/packages/synapse-sdk/src/storage/context.ts @@ -1310,18 +1310,11 @@ export class StorageContext { // If piece exists, get provider info for retrieval URL and proving params in parallel if (exists) { - const [providerInfo, provingParams] = await Promise.all([ + const [providerInfo, pdpConfig] = await Promise.all([ // Get provider info for retrieval URL this.getProviderInfo().catch(() => null), - // Get proving period configuration (only if we have data set data) - dataSetData != null - ? Promise.all([this._warmStorageService.getMaxProvingPeriod(), this._warmStorageService.getChallengeWindow()]) - .then(([maxProvingPeriod, challengeWindow]) => ({ - maxProvingPeriod, - challengeWindow, - })) - .catch(() => null) - : Promise.resolve(null), + // Get PDP config (only if we have data set data) + dataSetData != null ? this._warmStorageService.getPDPConfig().catch(() => null) : Promise.resolve(null), ]) // Set retrieval URL if we have provider info @@ -1336,8 +1329,8 @@ export class StorageContext { )}/piece/${parsedPieceCID.toString()}` } - // Process proof timing data if we have data set data and proving params - if (dataSetData != null && provingParams != null) { + // Process proof timing data if we have data set data and PDP config + if (dataSetData != null && pdpConfig != null) { // Check if this PieceCID is in the data set const pieceData = dataSetData.pieces.find((piece) => piece.pieceCid.toString() === parsedPieceCID.toString()) @@ -1347,9 +1340,9 @@ export class StorageContext { // Calculate timing based on nextChallengeEpoch if (dataSetData.nextChallengeEpoch > 0) { // nextChallengeEpoch is when the challenge window STARTS, not ends! - // The proving deadline is nextChallengeEpoch + challengeWindow + // The proving deadline is nextChallengeEpoch + challengeWindowSize const challengeWindowStart = dataSetData.nextChallengeEpoch - const provingDeadline = challengeWindowStart + provingParams.challengeWindow + const provingDeadline = challengeWindowStart + pdpConfig.challengeWindowSize // Calculate when the next proof is due (end of challenge window) nextProofDue = epochToDate(provingDeadline, network) @@ -1357,7 +1350,7 @@ export class StorageContext { // Calculate last proven date (one proving period before next challenge) const lastProvenDate = calculateLastProofDate( dataSetData.nextChallengeEpoch, - provingParams.maxProvingPeriod, + pdpConfig.maxProvingPeriod, network ) if (lastProvenDate != null) { diff --git a/packages/synapse-sdk/src/test/warm-storage-service.test.ts b/packages/synapse-sdk/src/test/warm-storage-service.test.ts index 7eda0f81a..ed99e4e16 100644 --- a/packages/synapse-sdk/src/test/warm-storage-service.test.ts +++ b/packages/synapse-sdk/src/test/warm-storage-service.test.ts @@ -1462,7 +1462,8 @@ describe('WarmStorageService', () => { }) ) const warmStorageService = await createWarmStorageService() - const result = await warmStorageService.getMaxProvingPeriod() + const pdpConfig = await warmStorageService.getPDPConfig() + const result = pdpConfig.maxProvingPeriod assert.equal(result, 2880) }) @@ -1477,7 +1478,8 @@ describe('WarmStorageService', () => { }) ) const warmStorageService = await createWarmStorageService() - const result = await warmStorageService.getChallengeWindow() + const pdpConfig = await warmStorageService.getPDPConfig() + const result = pdpConfig.challengeWindowSize assert.equal(result, 60) }) @@ -1496,7 +1498,7 @@ describe('WarmStorageService', () => { const warmStorageService = await createWarmStorageService() try { - await warmStorageService.getMaxProvingPeriod() + await warmStorageService.getPDPConfig() assert.fail('Should have thrown error') } catch (error: any) { assert.include(error.message, 'Contract call failed') diff --git a/packages/synapse-sdk/src/warm-storage/service.ts b/packages/synapse-sdk/src/warm-storage/service.ts index 5dcbad7ca..b42977e40 100644 --- a/packages/synapse-sdk/src/warm-storage/service.ts +++ b/packages/synapse-sdk/src/warm-storage/service.ts @@ -1051,26 +1051,25 @@ export class WarmStorageService { return signerAddress.toLowerCase() === ownerAddress.toLowerCase() } - // ========== Proving Period Operations ========== - /** - * Get the maximum proving period from the WarmStorage contract - * @returns Maximum proving period in epochs + * Get the PDP config from the WarmStorage contract. + * Returns maxProvingPeriod, challengeWindowSize, challengesPerProof, initChallengeWindowStart */ - async getMaxProvingPeriod(): Promise { - const viewContract = this._getWarmStorageViewContract() - const maxPeriod = await viewContract.getMaxProvingPeriod() - return Number(maxPeriod) - } - - /** - * Get the challenge window size from the WarmStorage contract - * @returns Challenge window size in epochs - */ - async getChallengeWindow(): Promise { + async getPDPConfig(): Promise<{ + maxProvingPeriod: number + challengeWindowSize: number + challengesPerProof: number + initChallengeWindowStart: number + }> { const viewContract = this._getWarmStorageViewContract() - const window = await viewContract.challengeWindow() - return Number(window) + const [maxProvingPeriod, challengeWindowSize, challengesPerProof, initChallengeWindowStart] = + await viewContract.getPDPConfig() + return { + maxProvingPeriod, + challengeWindowSize, + challengesPerProof, + initChallengeWindowStart, + } } /** * Increments the fixed locked-up amounts for CDN payment rails. From e8f9466d4a11247c89202e4b5cbeffb7f0eabd9e Mon Sep 17 00:00:00 2001 From: Abhivansh <31abhivanshj@gmail.com> Date: Wed, 24 Dec 2025 23:17:06 +0530 Subject: [PATCH 2/4] modify desc in tests --- packages/synapse-sdk/src/test/warm-storage-service.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/synapse-sdk/src/test/warm-storage-service.test.ts b/packages/synapse-sdk/src/test/warm-storage-service.test.ts index ed99e4e16..be7909632 100644 --- a/packages/synapse-sdk/src/test/warm-storage-service.test.ts +++ b/packages/synapse-sdk/src/test/warm-storage-service.test.ts @@ -1450,7 +1450,7 @@ describe('WarmStorageService', () => { }) }) - describe('getMaxProvingPeriod() and getChallengeWindow()', () => { + describe('getPDPConfig().maxProvingPeriod and getPDPConfig().challengeWindowSize', () => { it('should return max proving period from WarmStorage contract', async () => { server.use( Mocks.JSONRPC({ From 3277d4c4bfd0b62bcaf3988e9ac58217d36ff7e5 Mon Sep 17 00:00:00 2001 From: Abhivansh <31abhivanshj@gmail.com> Date: Sat, 27 Dec 2025 14:49:06 +0530 Subject: [PATCH 3/4] trying to fix tests --- packages/synapse-sdk/src/storage/context.ts | 8 ++++++-- packages/synapse-sdk/src/warm-storage/service.ts | 9 +++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/synapse-sdk/src/storage/context.ts b/packages/synapse-sdk/src/storage/context.ts index 76b8938ce..699b7b36c 100644 --- a/packages/synapse-sdk/src/storage/context.ts +++ b/packages/synapse-sdk/src/storage/context.ts @@ -1313,8 +1313,12 @@ export class StorageContext { const [providerInfo, pdpConfig] = await Promise.all([ // Get provider info for retrieval URL this.getProviderInfo().catch(() => null), - // Get PDP config (only if we have data set data) - dataSetData != null ? this._warmStorageService.getPDPConfig().catch(() => null) : Promise.resolve(null), + dataSetData != null + ? this._warmStorageService.getPDPConfig().catch((error) => { + console.debug('Failed to get PDP config:', error) + return null + }) + : Promise.resolve(null), ]) // Set retrieval URL if we have provider info diff --git a/packages/synapse-sdk/src/warm-storage/service.ts b/packages/synapse-sdk/src/warm-storage/service.ts index b42977e40..1f54df00d 100644 --- a/packages/synapse-sdk/src/warm-storage/service.ts +++ b/packages/synapse-sdk/src/warm-storage/service.ts @@ -1064,11 +1064,12 @@ export class WarmStorageService { const viewContract = this._getWarmStorageViewContract() const [maxProvingPeriod, challengeWindowSize, challengesPerProof, initChallengeWindowStart] = await viewContract.getPDPConfig() + return { - maxProvingPeriod, - challengeWindowSize, - challengesPerProof, - initChallengeWindowStart, + maxProvingPeriod: Number(maxProvingPeriod), + challengeWindowSize: Number(challengeWindowSize), + challengesPerProof: Number(challengesPerProof), + initChallengeWindowStart: Number(initChallengeWindowStart), } } /** From 5904f69d9068670c2495a98b1995f40afc6feb05 Mon Sep 17 00:00:00 2001 From: Abhivansh <31abhivanshj@gmail.com> Date: Thu, 8 Jan 2026 17:43:15 +0530 Subject: [PATCH 4/4] fix tests --- .../docs/developer-guides/components.mdx | 9 ++++--- .../synapse-core/src/mocks/jsonrpc/index.ts | 7 ++---- .../src/mocks/jsonrpc/warm-storage.ts | 25 ++++++------------- .../src/test/warm-storage-service.test.ts | 6 ++--- 4 files changed, 18 insertions(+), 29 deletions(-) diff --git a/docs/src/content/docs/developer-guides/components.mdx b/docs/src/content/docs/developer-guides/components.mdx index 5414ed12d..152ae8fa2 100644 --- a/docs/src/content/docs/developer-guides/components.mdx +++ b/docs/src/content/docs/developer-guides/components.mdx @@ -390,9 +390,12 @@ interface WarmStorageServiceAPI { getApprovedProviderIds(): Promise isProviderIdApproved(providerId: number): Promise - // Proving Period - getMaxProvingPeriod(): Promise - getChallengeWindow(): Promise + getPDPConfig(): Promise<{ + maxProvingPeriod: number + challengeWindowSize: number + challengesPerProof: number + initChallengeWindowStart: number + }> } ``` diff --git a/packages/synapse-core/src/mocks/jsonrpc/index.ts b/packages/synapse-core/src/mocks/jsonrpc/index.ts index 65f5653e5..661e9b34c 100644 --- a/packages/synapse-core/src/mocks/jsonrpc/index.ts +++ b/packages/synapse-core/src/mocks/jsonrpc/index.ts @@ -464,11 +464,8 @@ export const presets = { clientNonces: () => { return [BigInt(0)] }, - getMaxProvingPeriod: () => { - return [BigInt(2880)] - }, - challengeWindow: () => { - return [BigInt(60)] + getPDPConfig: () => { + return [BigInt(2880), BigInt(60), BigInt(1), BigInt(0)] }, }, pdpVerifier: { diff --git a/packages/synapse-core/src/mocks/jsonrpc/warm-storage.ts b/packages/synapse-core/src/mocks/jsonrpc/warm-storage.ts index b24886aca..97aa7e3df 100644 --- a/packages/synapse-core/src/mocks/jsonrpc/warm-storage.ts +++ b/packages/synapse-core/src/mocks/jsonrpc/warm-storage.ts @@ -19,8 +19,7 @@ export type getDataSetMetadata = ExtractAbiFunction export type getPieceMetadata = ExtractAbiFunction export type clientNonces = ExtractAbiFunction -export type getMaxProvingPeriod = ExtractAbiFunction -export type challengeWindow = ExtractAbiFunction +export type getPDPConfig = ExtractAbiFunction export interface WarmStorageViewOptions { isProviderApproved?: (args: AbiToType) => AbiToType @@ -36,8 +35,7 @@ export interface WarmStorageViewOptions { getAllPieceMetadata?: (args: AbiToType) => AbiToType getPieceMetadata?: (args: AbiToType) => AbiToType clientNonces?: (args: AbiToType) => AbiToType - getMaxProvingPeriod?: (args: AbiToType) => AbiToType - challengeWindow?: (args: AbiToType) => AbiToType + getPDPConfig?: (args: AbiToType) => AbiToType } /** @@ -293,22 +291,13 @@ export function warmStorageViewCallHandler(data: Hex, options: JSONRPCOptions): options.warmStorageView.clientNonces(args) ) } - case 'getMaxProvingPeriod': { - if (!options.warmStorageView?.getMaxProvingPeriod) { - throw new Error('Warm Storage View: getMaxProvingPeriod is not defined') + case 'getPDPConfig': { + if (!options.warmStorageView?.getPDPConfig) { + throw new Error('Warm Storage View: getPDPConfig is not defined') } return encodeAbiParameters( - Abis.storageView.find((abi) => abi.type === 'function' && abi.name === 'getMaxProvingPeriod')!.outputs, - options.warmStorageView.getMaxProvingPeriod(args) - ) - } - case 'challengeWindow': { - if (!options.warmStorageView?.challengeWindow) { - throw new Error('Warm Storage View: challengeWindow is not defined') - } - return encodeAbiParameters( - Abis.storageView.find((abi) => abi.type === 'function' && abi.name === 'challengeWindow')!.outputs, - options.warmStorageView.challengeWindow(args) + Abis.storageView.find((abi) => abi.type === 'function' && abi.name === 'getPDPConfig')!.outputs, + options.warmStorageView.getPDPConfig(args) ) } diff --git a/packages/synapse-sdk/src/test/warm-storage-service.test.ts b/packages/synapse-sdk/src/test/warm-storage-service.test.ts index b503eab87..e7da1dd57 100644 --- a/packages/synapse-sdk/src/test/warm-storage-service.test.ts +++ b/packages/synapse-sdk/src/test/warm-storage-service.test.ts @@ -1456,7 +1456,7 @@ describe('WarmStorageService', () => { ...Mocks.presets.basic, warmStorageView: { ...Mocks.presets.basic.warmStorageView, - getMaxProvingPeriod: () => [BigInt(2880)], + getPDPConfig: () => [BigInt(2880), BigInt(60), BigInt(1), BigInt(0)], }, }) ) @@ -1472,7 +1472,7 @@ describe('WarmStorageService', () => { ...Mocks.presets.basic, warmStorageView: { ...Mocks.presets.basic.warmStorageView, - challengeWindow: () => [BigInt(60)], + getPDPConfig: () => [BigInt(2880), BigInt(60), BigInt(1), BigInt(0)], }, }) ) @@ -1488,7 +1488,7 @@ describe('WarmStorageService', () => { ...Mocks.presets.basic, warmStorageView: { ...Mocks.presets.basic.warmStorageView, - getMaxProvingPeriod: () => { + getPDPConfig: () => { throw new Error('Contract call failed') }, },