From 74bfcdd27730434ee29861ecb5958b4ab160b147 Mon Sep 17 00:00:00 2001 From: Raphael Panic Date: Tue, 18 Feb 2025 10:59:00 +0100 Subject: [PATCH 1/3] Moved HistoricalBlockStorage into BlockStorage --- packages/api/src/graphql/modules/BlockResolver.ts | 8 ++------ packages/api/src/graphql/modules/QueryGraphqlModule.ts | 3 +-- .../src/services/prisma/PrismaBlockStorage.ts | 5 +---- .../sdk/src/query/BlockStorageNetworkStateModule.ts | 9 ++++----- .../src/settlement/messages/WithdrawalQueue.ts | 7 ++----- .../src/storage/inmemory/InMemoryBlockStorage.ts | 10 ++-------- .../src/storage/inmemory/InMemoryTransactionStorage.ts | 7 ++----- .../sequencer/src/storage/repositories/BlockStorage.ts | 2 -- .../test/integration/StorageIntegration.test.ts | 5 +---- 9 files changed, 15 insertions(+), 41 deletions(-) diff --git a/packages/api/src/graphql/modules/BlockResolver.ts b/packages/api/src/graphql/modules/BlockResolver.ts index bfed77c0a..036184873 100644 --- a/packages/api/src/graphql/modules/BlockResolver.ts +++ b/packages/api/src/graphql/modules/BlockResolver.ts @@ -1,9 +1,5 @@ import { inject } from "tsyringe"; -import { - HistoricalBlockStorage, - Block, - BlockStorage, -} from "@proto-kit/sequencer"; +import { Block, BlockStorage } from "@proto-kit/sequencer"; import { Arg, Field, ObjectType, Query } from "type-graphql"; import { GraphqlModule, graphqlModule } from "../GraphqlModule"; @@ -62,7 +58,7 @@ export class BlockModel { export class BlockResolver extends GraphqlModule { public constructor( @inject("BlockStorage") - private readonly blockStorage: HistoricalBlockStorage & BlockStorage + private readonly blockStorage: BlockStorage ) { super(); } diff --git a/packages/api/src/graphql/modules/QueryGraphqlModule.ts b/packages/api/src/graphql/modules/QueryGraphqlModule.ts index da2ce8413..0f7b487e8 100644 --- a/packages/api/src/graphql/modules/QueryGraphqlModule.ts +++ b/packages/api/src/graphql/modules/QueryGraphqlModule.ts @@ -39,7 +39,6 @@ import { QueryTransportModule, NetworkStateQuery, BlockStorage, - HistoricalBlockStorage, NetworkStateTransportModule, } from "@proto-kit/sequencer"; import { @@ -80,7 +79,7 @@ export class QueryGraphqlModule< MandatoryProtocolModulesRecord & ProtocolModulesRecord >, @inject("BlockStorage") - private readonly blockStorage: BlockStorage & HistoricalBlockStorage + private readonly blockStorage: BlockStorage ) { super(); } diff --git a/packages/persistance/src/services/prisma/PrismaBlockStorage.ts b/packages/persistance/src/services/prisma/PrismaBlockStorage.ts index 51ebaed62..99f8ab355 100644 --- a/packages/persistance/src/services/prisma/PrismaBlockStorage.ts +++ b/packages/persistance/src/services/prisma/PrismaBlockStorage.ts @@ -1,5 +1,4 @@ import { - HistoricalBlockStorage, TransactionExecutionResult, Block, BlockResult, @@ -25,9 +24,7 @@ import { BlockResultMapper } from "./mappers/BlockResultMapper"; import { BlockMapper } from "./mappers/BlockMapper"; @injectable() -export class PrismaBlockStorage - implements BlockQueue, BlockStorage, HistoricalBlockStorage -{ +export class PrismaBlockStorage implements BlockQueue, BlockStorage { public constructor( @inject("Database") private readonly connection: PrismaConnection, private readonly transactionResultMapper: TransactionExecutionResultMapper, diff --git a/packages/sdk/src/query/BlockStorageNetworkStateModule.ts b/packages/sdk/src/query/BlockStorageNetworkStateModule.ts index 908b63db6..26245df7f 100644 --- a/packages/sdk/src/query/BlockStorageNetworkStateModule.ts +++ b/packages/sdk/src/query/BlockStorageNetworkStateModule.ts @@ -1,7 +1,6 @@ import { inject, injectable } from "tsyringe"; import { BlockStorage, - HistoricalBlockStorage, HistoricalBatchStorage, NetworkStateTransportModule, Sequencer, @@ -29,10 +28,10 @@ export class BlockStorageNetworkStateModule return this.sequencer.dependencyContainer.resolve("BlockQueue"); } - private get unprovenStorage(): BlockStorage & HistoricalBlockStorage { - return this.sequencer.dependencyContainer.resolve< - BlockStorage & HistoricalBlockStorage - >("BlockStorage"); + private get unprovenStorage(): BlockStorage { + return this.sequencer.dependencyContainer.resolve( + "BlockStorage" + ); } private get provenStorage(): BatchStorage & HistoricalBatchStorage { diff --git a/packages/sequencer/src/settlement/messages/WithdrawalQueue.ts b/packages/sequencer/src/settlement/messages/WithdrawalQueue.ts index e8770e7bc..171dc28fd 100644 --- a/packages/sequencer/src/settlement/messages/WithdrawalQueue.ts +++ b/packages/sequencer/src/settlement/messages/WithdrawalQueue.ts @@ -8,10 +8,7 @@ import { SequencerModule } from "../../sequencer/builder/SequencerModule"; import { Sequencer } from "../../sequencer/executor/Sequencer"; import { Block } from "../../storage/model/Block"; import { BridgingModule } from "../BridgingModule"; -import { - BlockStorage, - HistoricalBlockStorage, -} from "../../storage/repositories/BlockStorage"; +import { BlockStorage } from "../../storage/repositories/BlockStorage"; import { SettlementStorage } from "../../storage/repositories/SettlementStorage"; import { HistoricalBatchStorage } from "../../storage/repositories/BatchStorage"; @@ -60,7 +57,7 @@ export class WithdrawalQueue SettlementModule: typeof SettlementModule; }>, @inject("BlockStorage") - private readonly blockStorage: BlockStorage & HistoricalBlockStorage, + private readonly blockStorage: BlockStorage, @inject("BatchStorage") private readonly batchStorage: HistoricalBatchStorage, @inject("SettlementStorage") diff --git a/packages/sequencer/src/storage/inmemory/InMemoryBlockStorage.ts b/packages/sequencer/src/storage/inmemory/InMemoryBlockStorage.ts index 9a14f7d8c..5c5306e7b 100644 --- a/packages/sequencer/src/storage/inmemory/InMemoryBlockStorage.ts +++ b/packages/sequencer/src/storage/inmemory/InMemoryBlockStorage.ts @@ -1,10 +1,6 @@ import { inject, injectable } from "tsyringe"; -import { - HistoricalBlockStorage, - BlockQueue, - BlockStorage, -} from "../repositories/BlockStorage"; +import { BlockQueue, BlockStorage } from "../repositories/BlockStorage"; import type { Block, BlockResult, @@ -14,9 +10,7 @@ import type { import { BatchStorage } from "../repositories/BatchStorage"; @injectable() -export class InMemoryBlockStorage - implements BlockStorage, HistoricalBlockStorage, BlockQueue -{ +export class InMemoryBlockStorage implements BlockStorage, BlockQueue { public constructor( @inject("BatchStorage") private readonly batchStorage: BatchStorage ) {} diff --git a/packages/sequencer/src/storage/inmemory/InMemoryTransactionStorage.ts b/packages/sequencer/src/storage/inmemory/InMemoryTransactionStorage.ts index c50b06b1b..011e7d26d 100644 --- a/packages/sequencer/src/storage/inmemory/InMemoryTransactionStorage.ts +++ b/packages/sequencer/src/storage/inmemory/InMemoryTransactionStorage.ts @@ -3,10 +3,7 @@ import { Field } from "o1js"; import { TransactionStorage } from "../repositories/TransactionStorage"; import { PendingTransaction } from "../../mempool/PendingTransaction"; -import { - HistoricalBlockStorage, - BlockStorage, -} from "../repositories/BlockStorage"; +import { BlockStorage } from "../repositories/BlockStorage"; import { InMemoryBatchStorage } from "./InMemoryBatchStorage"; @@ -18,7 +15,7 @@ export class InMemoryTransactionStorage implements TransactionStorage { public constructor( @inject("BlockStorage") - private readonly blockStorage: BlockStorage & HistoricalBlockStorage, + private readonly blockStorage: BlockStorage, @inject("BatchStorage") private readonly batchStorage: InMemoryBatchStorage ) {} diff --git a/packages/sequencer/src/storage/repositories/BlockStorage.ts b/packages/sequencer/src/storage/repositories/BlockStorage.ts index 4803ba5a5..2d803a38c 100644 --- a/packages/sequencer/src/storage/repositories/BlockStorage.ts +++ b/packages/sequencer/src/storage/repositories/BlockStorage.ts @@ -16,9 +16,7 @@ export interface BlockStorage { getCurrentBlockHeight: () => Promise; getLatestBlock: () => Promise; pushBlock: (block: Block) => Promise; -} -export interface HistoricalBlockStorage { getBlockAt: (height: number) => Promise; getBlock: (hash: string) => Promise; } diff --git a/packages/sequencer/test/integration/StorageIntegration.test.ts b/packages/sequencer/test/integration/StorageIntegration.test.ts index 88213a936..f7954a38e 100644 --- a/packages/sequencer/test/integration/StorageIntegration.test.ts +++ b/packages/sequencer/test/integration/StorageIntegration.test.ts @@ -11,7 +11,6 @@ import { AsyncStateService, BatchStorage, HistoricalBatchStorage, - HistoricalBlockStorage, InMemoryDatabase, Sequencer, SequencerModule, @@ -158,9 +157,7 @@ describe.each([["InMemory", InMemoryDatabase]])( generatedBlock.hash.toBigInt() ); - const blockStorage = sequencer.resolve( - "BlockStorage" - ) as HistoricalBlockStorage & BlockStorage; + const blockStorage = sequencer.resolve("BlockStorage") as BlockStorage; const block2 = await blockStorage.getBlockAt( Number(blocks[0].block.height.toString()) ); From f11fe2c8002992c7c19cec7a12931053d6d0596a Mon Sep 17 00:00:00 2001 From: Raphael Panic Date: Tue, 28 Oct 2025 16:35:46 +0100 Subject: [PATCH 2/3] Removed HistoricalBatchStorage --- .../api/src/graphql/modules/BatchStorageResolver.ts | 9 ++------- .../src/services/prisma/PrismaBatchStore.ts | 8 ++------ .../sdk/src/query/BlockStorageNetworkStateModule.ts | 9 ++++----- .../src/settlement/messages/WithdrawalQueue.ts | 4 ++-- .../src/storage/inmemory/InMemoryBatchStorage.ts | 9 ++------- .../sequencer/src/storage/repositories/BatchStorage.ts | 4 ---- .../sequencer/src/storage/repositories/BlockStorage.ts | 1 + .../sequencer/test/integration/BlockProduction.test.ts | 10 ++-------- .../test/integration/StorageIntegration.test.ts | 5 +---- 9 files changed, 16 insertions(+), 43 deletions(-) diff --git a/packages/api/src/graphql/modules/BatchStorageResolver.ts b/packages/api/src/graphql/modules/BatchStorageResolver.ts index 47fca0ab5..1d235ddaf 100644 --- a/packages/api/src/graphql/modules/BatchStorageResolver.ts +++ b/packages/api/src/graphql/modules/BatchStorageResolver.ts @@ -1,10 +1,6 @@ import { inject } from "tsyringe"; import { Arg, Field, ObjectType, Query } from "type-graphql"; -import { - Batch, - BatchStorage, - HistoricalBatchStorage, -} from "@proto-kit/sequencer"; +import { Batch, BatchStorage } from "@proto-kit/sequencer"; import { MOCK_PROOF } from "@proto-kit/common"; import { graphqlModule, GraphqlModule } from "../GraphqlModule"; @@ -39,10 +35,9 @@ export class ComputedBlockModel { @graphqlModule() export class BatchStorageResolver extends GraphqlModule { - // TODO seperate these two block interfaces public constructor( @inject("BatchStorage") - private readonly batchStorage: BatchStorage & HistoricalBatchStorage, + private readonly batchStorage: BatchStorage, private readonly blockResolver: BlockResolver ) { super(); diff --git a/packages/persistance/src/services/prisma/PrismaBatchStore.ts b/packages/persistance/src/services/prisma/PrismaBatchStore.ts index ed59a7f09..eceaa84a7 100644 --- a/packages/persistance/src/services/prisma/PrismaBatchStore.ts +++ b/packages/persistance/src/services/prisma/PrismaBatchStore.ts @@ -1,8 +1,4 @@ -import { - Batch, - HistoricalBatchStorage, - BatchStorage, -} from "@proto-kit/sequencer"; +import { Batch, BatchStorage } from "@proto-kit/sequencer"; import { Prisma } from "@prisma/client"; import { inject, injectable } from "tsyringe"; @@ -11,7 +7,7 @@ import type { PrismaConnection } from "../../PrismaDatabaseConnection"; import { BatchMapper } from "./mappers/BatchMapper"; @injectable() -export class PrismaBatchStore implements BatchStorage, HistoricalBatchStorage { +export class PrismaBatchStore implements BatchStorage { public constructor( @inject("Database") private readonly connection: PrismaConnection, private readonly batchMapper: BatchMapper diff --git a/packages/sdk/src/query/BlockStorageNetworkStateModule.ts b/packages/sdk/src/query/BlockStorageNetworkStateModule.ts index 26245df7f..b813f1b95 100644 --- a/packages/sdk/src/query/BlockStorageNetworkStateModule.ts +++ b/packages/sdk/src/query/BlockStorageNetworkStateModule.ts @@ -1,7 +1,6 @@ import { inject, injectable } from "tsyringe"; import { BlockStorage, - HistoricalBatchStorage, NetworkStateTransportModule, Sequencer, SequencerModulesRecord, @@ -34,10 +33,10 @@ export class BlockStorageNetworkStateModule ); } - private get provenStorage(): BatchStorage & HistoricalBatchStorage { - return this.sequencer.dependencyContainer.resolve< - BatchStorage & HistoricalBatchStorage - >("BatchStorage"); + private get provenStorage(): BatchStorage { + return this.sequencer.dependencyContainer.resolve( + "BatchStorage" + ); } public async getUnprovenNetworkState(): Promise { diff --git a/packages/sequencer/src/settlement/messages/WithdrawalQueue.ts b/packages/sequencer/src/settlement/messages/WithdrawalQueue.ts index 171dc28fd..b68b69582 100644 --- a/packages/sequencer/src/settlement/messages/WithdrawalQueue.ts +++ b/packages/sequencer/src/settlement/messages/WithdrawalQueue.ts @@ -10,7 +10,7 @@ import { Block } from "../../storage/model/Block"; import { BridgingModule } from "../BridgingModule"; import { BlockStorage } from "../../storage/repositories/BlockStorage"; import { SettlementStorage } from "../../storage/repositories/SettlementStorage"; -import { HistoricalBatchStorage } from "../../storage/repositories/BatchStorage"; +import { BatchStorage } from "../../storage/repositories/BatchStorage"; export interface OutgoingMessage { index: number; @@ -59,7 +59,7 @@ export class WithdrawalQueue @inject("BlockStorage") private readonly blockStorage: BlockStorage, @inject("BatchStorage") - private readonly batchStorage: HistoricalBatchStorage, + private readonly batchStorage: BatchStorage, @inject("SettlementStorage") private readonly settlementStorage: SettlementStorage ) { diff --git a/packages/sequencer/src/storage/inmemory/InMemoryBatchStorage.ts b/packages/sequencer/src/storage/inmemory/InMemoryBatchStorage.ts index 6f0a2b572..dfe21fddf 100644 --- a/packages/sequencer/src/storage/inmemory/InMemoryBatchStorage.ts +++ b/packages/sequencer/src/storage/inmemory/InMemoryBatchStorage.ts @@ -1,14 +1,9 @@ import { log } from "@proto-kit/common"; -import { - BatchStorage, - HistoricalBatchStorage, -} from "../repositories/BatchStorage"; +import { BatchStorage } from "../repositories/BatchStorage"; import { Batch } from "../model/Batch"; -export class InMemoryBatchStorage - implements BatchStorage, HistoricalBatchStorage -{ +export class InMemoryBatchStorage implements BatchStorage { private readonly batches: Batch[] = []; public async getCurrentBatchHeight(): Promise { diff --git a/packages/sequencer/src/storage/repositories/BatchStorage.ts b/packages/sequencer/src/storage/repositories/BatchStorage.ts index d9a3ca67d..7dc47e4b9 100644 --- a/packages/sequencer/src/storage/repositories/BatchStorage.ts +++ b/packages/sequencer/src/storage/repositories/BatchStorage.ts @@ -1,12 +1,8 @@ import { Batch } from "../model/Batch"; export interface BatchStorage { - // TODO Rename to getCurrentChainLength(), blockheight seems misleading here getCurrentBatchHeight: () => Promise; getLatestBatch: () => Promise; pushBatch: (block: Batch) => Promise; -} - -export interface HistoricalBatchStorage { getBatchAt: (height: number) => Promise; } diff --git a/packages/sequencer/src/storage/repositories/BlockStorage.ts b/packages/sequencer/src/storage/repositories/BlockStorage.ts index 2d803a38c..7ec488754 100644 --- a/packages/sequencer/src/storage/repositories/BlockStorage.ts +++ b/packages/sequencer/src/storage/repositories/BlockStorage.ts @@ -13,6 +13,7 @@ export interface BlockQueue { } export interface BlockStorage { + // TODO Rename to getCurrentChainLength(), blockheight seems misleading here getCurrentBlockHeight: () => Promise; getLatestBlock: () => Promise; pushBlock: (block: Block) => Promise; diff --git a/packages/sequencer/test/integration/BlockProduction.test.ts b/packages/sequencer/test/integration/BlockProduction.test.ts index 049b5d223..28e07b7b2 100644 --- a/packages/sequencer/test/integration/BlockProduction.test.ts +++ b/packages/sequencer/test/integration/BlockProduction.test.ts @@ -25,12 +25,7 @@ import { Bool, Field, PrivateKey, PublicKey, Struct, UInt64 } from "o1js"; import "reflect-metadata"; import { container } from "tsyringe"; -import { - BatchStorage, - HistoricalBatchStorage, - Sequencer, - VanillaTaskWorkerModules, -} from "../../src"; +import { BatchStorage, Sequencer, VanillaTaskWorkerModules } from "../../src"; import { DefaultTestingSequencerModules, testingSequencerModules, @@ -221,8 +216,7 @@ describe("block production", () => { ).toStrictEqual(batch!.toNetworkState.hash().toString()); // Check if the batchstorage has received the block - const batchStorage = sequencer.resolve("BatchStorage") as BatchStorage & - HistoricalBatchStorage; + const batchStorage = sequencer.resolve("BatchStorage") as BatchStorage; const retrievedBatch = await batchStorage.getBatchAt(0); expect(retrievedBatch).toBeDefined(); diff --git a/packages/sequencer/test/integration/StorageIntegration.test.ts b/packages/sequencer/test/integration/StorageIntegration.test.ts index f7954a38e..bbc6267dd 100644 --- a/packages/sequencer/test/integration/StorageIntegration.test.ts +++ b/packages/sequencer/test/integration/StorageIntegration.test.ts @@ -10,7 +10,6 @@ import { TypedClass, expectDefined } from "@proto-kit/common"; import { AsyncStateService, BatchStorage, - HistoricalBatchStorage, InMemoryDatabase, Sequencer, SequencerModule, @@ -193,9 +192,7 @@ describe.each([["InMemory", InMemoryDatabase]])( const blocks = await sequencer.resolve("BlockQueue").getNewBlocks(); expect(blocks).toHaveLength(0); - const batchStorage = sequencer.resolve( - "BatchStorage" - ) as HistoricalBatchStorage & BatchStorage; + const batchStorage = sequencer.resolve("BatchStorage") as BatchStorage; const batch = await batchStorage.getBatchAt(0); expectDefined(batch); From d9966c38660819c12e9f67fcf6140b7511d02d66 Mon Sep 17 00:00:00 2001 From: Raphael Panic Date: Tue, 28 Oct 2025 16:38:35 +0100 Subject: [PATCH 3/3] Fixed merge conflicts --- .../messages/outgoing/OutgoingMessageCollector.ts | 7 ++----- .../sequencer/test/integration/BlockProduction-test.ts | 4 +--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/sequencer/src/settlement/messages/outgoing/OutgoingMessageCollector.ts b/packages/sequencer/src/settlement/messages/outgoing/OutgoingMessageCollector.ts index fd1f88638..217155a35 100644 --- a/packages/sequencer/src/settlement/messages/outgoing/OutgoingMessageCollector.ts +++ b/packages/sequencer/src/settlement/messages/outgoing/OutgoingMessageCollector.ts @@ -3,10 +3,7 @@ import { OutgoingMessageEvent } from "@proto-kit/protocol"; import { filterNonUndefined } from "@proto-kit/common"; import { Block } from "../../../storage/model/Block"; -import { - BlockStorage, - HistoricalBlockStorage, -} from "../../../storage/repositories/BlockStorage"; +import { BlockStorage } from "../../../storage/repositories/BlockStorage"; import { Batch } from "../../../storage/model/Batch"; /** @@ -25,7 +22,7 @@ export interface OutgoingMessageAdapter { export class OutgoingMessageCollector { public constructor( @inject("BlockStorage") - private readonly blockStorage: BlockStorage & HistoricalBlockStorage, + private readonly blockStorage: BlockStorage, @inject("OutgoingMessageAdapter") private readonly messageAdapter: OutgoingMessageAdapter ) {} diff --git a/packages/sequencer/test/integration/BlockProduction-test.ts b/packages/sequencer/test/integration/BlockProduction-test.ts index 537d8e322..888e71d7a 100644 --- a/packages/sequencer/test/integration/BlockProduction-test.ts +++ b/packages/sequencer/test/integration/BlockProduction-test.ts @@ -29,7 +29,6 @@ import { afterEach } from "@jest/globals"; import { BatchStorage, - HistoricalBatchStorage, Sequencer, SequencerModule, VanillaTaskWorkerModules, @@ -251,8 +250,7 @@ export function testBlockProduction< ).toStrictEqual(batch!.toNetworkState.hash().toString()); // Check if the batchstorage has received the block - const batchStorage = sequencer.resolve("BatchStorage") as BatchStorage & - HistoricalBatchStorage; + const batchStorage = sequencer.resolve("BatchStorage") as BatchStorage; const retrievedBatch = await batchStorage.getBatchAt(0); expect(retrievedBatch).toBeDefined();