From 84cade559fddb5789a59959ccb12c8a408f780dc Mon Sep 17 00:00:00 2001 From: stanlou Date: Tue, 14 Apr 2026 16:22:51 +0100 Subject: [PATCH 1/3] feat: add timestamp --- .../migration.sql | 20 +++++++++++++++++++ packages/indexer/prisma/schema.prisma | 4 ++++ packages/indexer/src/tasks/IndexBatchTask.ts | 6 +++++- .../indexer/src/tasks/IndexSettlementTask.ts | 6 +++++- .../migration.sql | 11 ++++++++++ packages/persistance/prisma/schema.prisma | 4 ++++ .../src/services/prisma/PrismaBatchStore.ts | 1 + .../services/prisma/mappers/BatchMapper.ts | 2 ++ .../services/prisma/mappers/BlockMapper.ts | 2 ++ .../prisma/mappers/SettlementMapper.ts | 2 ++ .../prisma/mappers/TransactionMapper.ts | 2 ++ .../src/graphql/GraphqlTransactionSender.ts | 3 +-- .../src/mempool/PendingTransaction.ts | 7 +++++++ .../production/BatchProducerModule.ts | 1 + .../sequencing/BlockProductionService.ts | 1 + .../bridging/BridgingSettlementInteraction.ts | 1 + .../vanilla/VanillaSettlementInteraction.ts | 1 + packages/sequencer/src/storage/model/Batch.ts | 1 + packages/sequencer/src/storage/model/Block.ts | 2 ++ .../sequencer/src/storage/model/Settlement.ts | 1 + 20 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 packages/indexer/prisma/migrations/20260414141248_add_timestamp/migration.sql create mode 100644 packages/persistance/prisma/migrations/20260414141346_add_timestamp/migration.sql diff --git a/packages/indexer/prisma/migrations/20260414141248_add_timestamp/migration.sql b/packages/indexer/prisma/migrations/20260414141248_add_timestamp/migration.sql new file mode 100644 index 000000000..eab2fcb6c --- /dev/null +++ b/packages/indexer/prisma/migrations/20260414141248_add_timestamp/migration.sql @@ -0,0 +1,20 @@ +/* + Warnings: + + - Added the required column `createdAt` to the `Batch` table without a default value. This is not possible if the table is not empty. + - Added the required column `createdAt` to the `Block` table without a default value. This is not possible if the table is not empty. + - Added the required column `createdAt` to the `Settlement` table without a default value. This is not possible if the table is not empty. + - Added the required column `createdAt` to the `Transaction` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "Batch" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL; + +-- AlterTable +ALTER TABLE "Block" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL; + +-- AlterTable +ALTER TABLE "Settlement" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL; + +-- AlterTable +ALTER TABLE "Transaction" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL; diff --git a/packages/indexer/prisma/schema.prisma b/packages/indexer/prisma/schema.prisma index 557665db9..e099fa4fc 100644 --- a/packages/indexer/prisma/schema.prisma +++ b/packages/indexer/prisma/schema.prisma @@ -42,6 +42,7 @@ model Transaction { signature_s String isMessage Boolean + createdAt DateTime executionResult TransactionExecutionResult? priority TransactionPriority? @@ -88,6 +89,7 @@ model Block { fromStateRoot String beforeBlockStateTransitions Json @db.Json + createdAt DateTime parentHash String? @unique parent Block? @relation("Parent", fields: [parentHash], references: [hash]) @@ -104,6 +106,7 @@ model Batch { height Int @id proof Json @db.Json + createdAt DateTime blocks Block[] @@ -128,6 +131,7 @@ model Settlement { // transaction String transactionHash String @id promisedMessagesHash String + createdAt DateTime batches Batch[] } diff --git a/packages/indexer/src/tasks/IndexBatchTask.ts b/packages/indexer/src/tasks/IndexBatchTask.ts index 04c1c87fb..e3dee1aa4 100644 --- a/packages/indexer/src/tasks/IndexBatchTask.ts +++ b/packages/indexer/src/tasks/IndexBatchTask.ts @@ -46,7 +46,11 @@ export class IndexBatchTask }, fromJSON: (parameter: string) => { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - return JSON.parse(parameter) as Batch; + const parsed = JSON.parse(parameter) as Batch; + return { + ...parsed, + createdAt: new Date(parsed.createdAt), + }; }, }; } diff --git a/packages/indexer/src/tasks/IndexSettlementTask.ts b/packages/indexer/src/tasks/IndexSettlementTask.ts index 87aca62ff..cb66f02bb 100644 --- a/packages/indexer/src/tasks/IndexSettlementTask.ts +++ b/packages/indexer/src/tasks/IndexSettlementTask.ts @@ -46,7 +46,11 @@ export class IndexSettlementTask }, fromJSON: (parameter: string) => { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - return JSON.parse(parameter) as Settlement; + const parsed = JSON.parse(parameter) as Settlement; + return { + ...parsed, + createdAt: new Date(parsed.createdAt), + }; }, }; } diff --git a/packages/persistance/prisma/migrations/20260414141346_add_timestamp/migration.sql b/packages/persistance/prisma/migrations/20260414141346_add_timestamp/migration.sql new file mode 100644 index 000000000..20a8f9e97 --- /dev/null +++ b/packages/persistance/prisma/migrations/20260414141346_add_timestamp/migration.sql @@ -0,0 +1,11 @@ +-- AlterTable +ALTER TABLE "Batch" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; + +-- AlterTable +ALTER TABLE "Block" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; + +-- AlterTable +ALTER TABLE "Settlement" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; + +-- AlterTable +ALTER TABLE "Transaction" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; diff --git a/packages/persistance/prisma/schema.prisma b/packages/persistance/prisma/schema.prisma index 3613a00a6..a5958b290 100644 --- a/packages/persistance/prisma/schema.prisma +++ b/packages/persistance/prisma/schema.prisma @@ -50,6 +50,7 @@ model Transaction { signature_s String isMessage Boolean + createdAt DateTime @default(now()) executionResult TransactionExecutionResult? @@ -108,6 +109,7 @@ model Block { fromStateRoot String beforeBlockStateTransitions Json @db.Json + createdAt DateTime @default(now()) parentHash String? @unique parent Block? @relation("Parent", fields: [parentHash], references: [hash]) @@ -124,6 +126,7 @@ model Batch { height Int @id proof Json @db.Json + createdAt DateTime @default(now()) blocks Block[] @@ -148,6 +151,7 @@ model Settlement { // transaction String transactionHash String @id promisedMessagesHash String + createdAt DateTime @default(now()) batches Batch[] } diff --git a/packages/persistance/src/services/prisma/PrismaBatchStore.ts b/packages/persistance/src/services/prisma/PrismaBatchStore.ts index eceaa84a7..52db9d43d 100644 --- a/packages/persistance/src/services/prisma/PrismaBatchStore.ts +++ b/packages/persistance/src/services/prisma/PrismaBatchStore.ts @@ -52,6 +52,7 @@ export class PrismaBatchStore implements BatchStorage { data: { proof: entity.proof as Prisma.InputJsonValue, height, + createdAt: batch.createdAt, blocks: { connect: batch.blockHashes.map((hash) => ({ hash, diff --git a/packages/persistance/src/services/prisma/mappers/BatchMapper.ts b/packages/persistance/src/services/prisma/mappers/BatchMapper.ts index e944d8766..17d5fc711 100644 --- a/packages/persistance/src/services/prisma/mappers/BatchMapper.ts +++ b/packages/persistance/src/services/prisma/mappers/BatchMapper.ts @@ -15,6 +15,7 @@ export class BatchMapper implements ObjectMapper< blockHashes: input[1], proof: input[0].proof as JsonProof, height: input[0].height, + createdAt: input[0].createdAt, }; } @@ -23,6 +24,7 @@ export class BatchMapper implements ObjectMapper< proof: input.proof, height: input.height, settlementTransactionHash: null, + createdAt: input.createdAt, }; return [batch, []]; } diff --git a/packages/persistance/src/services/prisma/mappers/BlockMapper.ts b/packages/persistance/src/services/prisma/mappers/BlockMapper.ts index bd5ee9b06..fb2aaa8ff 100644 --- a/packages/persistance/src/services/prisma/mappers/BlockMapper.ts +++ b/packages/persistance/src/services/prisma/mappers/BlockMapper.ts @@ -45,6 +45,7 @@ export class BlockMapper implements ObjectMapper { beforeBlockStateTransitions: this.stArrayMapper.mapIn( input.beforeBlockStateTransitions ), + createdAt: input.createdAt, }; } @@ -68,6 +69,7 @@ export class BlockMapper implements ObjectMapper { beforeBlockStateTransitions: this.stArrayMapper.mapOut( input.beforeBlockStateTransitions ), + createdAt: input.createdAt, }; } } diff --git a/packages/persistance/src/services/prisma/mappers/SettlementMapper.ts b/packages/persistance/src/services/prisma/mappers/SettlementMapper.ts index 8d495334c..1d1fe57bb 100644 --- a/packages/persistance/src/services/prisma/mappers/SettlementMapper.ts +++ b/packages/persistance/src/services/prisma/mappers/SettlementMapper.ts @@ -15,6 +15,7 @@ export class SettlementMapper implements ObjectMapper< batches, transactionHash: settlement.transactionHash, promisedMessagesHash: settlement.promisedMessagesHash, + createdAt: settlement.createdAt, }; } @@ -23,6 +24,7 @@ export class SettlementMapper implements ObjectMapper< { promisedMessagesHash: input.promisedMessagesHash, transactionHash: input.transactionHash, + createdAt: input.createdAt, }, input.batches, ]; diff --git a/packages/persistance/src/services/prisma/mappers/TransactionMapper.ts b/packages/persistance/src/services/prisma/mappers/TransactionMapper.ts index 3e04bf831..5495ecabe 100644 --- a/packages/persistance/src/services/prisma/mappers/TransactionMapper.ts +++ b/packages/persistance/src/services/prisma/mappers/TransactionMapper.ts @@ -23,6 +23,7 @@ export class TransactionMapper implements ObjectMapper< public mapIn(input: DBTransaction): PendingTransaction { return PendingTransaction.fromJSON({ ...input, + createdAt: input.createdAt, signature: { r: input.signature_r, s: input.signature_s, @@ -42,6 +43,7 @@ export class TransactionMapper implements ObjectMapper< signature_r: json.signature.r, signature_s: json.signature.s, hash: input.hash().toString(), + createdAt: input.createdAt, }; } } diff --git a/packages/sdk/src/graphql/GraphqlTransactionSender.ts b/packages/sdk/src/graphql/GraphqlTransactionSender.ts index 6bf97b774..52399a4c7 100644 --- a/packages/sdk/src/graphql/GraphqlTransactionSender.ts +++ b/packages/sdk/src/graphql/GraphqlTransactionSender.ts @@ -24,9 +24,8 @@ export class GraphqlTransactionSender } `; const tx = transaction.toJSON(); - const queryResult = await this.graphqlClient.client - .mutation(query, { tx }) + .mutation(query, { tx: { ...tx, createdAt: undefined } }) .toPromise(); if (queryResult.error === undefined) { diff --git a/packages/sequencer/src/mempool/PendingTransaction.ts b/packages/sequencer/src/mempool/PendingTransaction.ts index 3b81066e4..6447ddcd2 100644 --- a/packages/sequencer/src/mempool/PendingTransaction.ts +++ b/packages/sequencer/src/mempool/PendingTransaction.ts @@ -130,6 +130,7 @@ interface PendingTransactionJSONType { s: string; }; isMessage: boolean; + createdAt?: Date; } export class PendingTransaction extends UnsignedTransaction { @@ -145,6 +146,7 @@ export class PendingTransaction extends UnsignedTransaction { signature: Signature.fromJSON(object.signature), auxiliaryData: object.auxiliaryData.slice(), isMessage: object.isMessage, + createdAt: object.createdAt ?? new Date(), }, Field(object.hash) ); @@ -152,6 +154,8 @@ export class PendingTransaction extends UnsignedTransaction { public signature: Signature; + public createdAt: Date; + public constructor( data: { methodId: Field; @@ -161,11 +165,13 @@ export class PendingTransaction extends UnsignedTransaction { argsFields: Field[]; auxiliaryData: string[]; isMessage: boolean; + createdAt?: Date; }, memoizedHash?: Field ) { super(data, memoizedHash); this.signature = data.signature; + this.createdAt = data.createdAt ?? new Date(); } public toJSON(): PendingTransactionJSONType { @@ -177,6 +183,7 @@ export class PendingTransaction extends UnsignedTransaction { argsFields: this.argsFields.map((x) => x.toJSON()), auxiliaryData: this.auxiliaryData.slice(), isMessage: this.isMessage, + createdAt: this.createdAt, signature: { r: this.signature.r.toJSON(), diff --git a/packages/sequencer/src/protocol/production/BatchProducerModule.ts b/packages/sequencer/src/protocol/production/BatchProducerModule.ts index 1dad75eaa..499eb422e 100644 --- a/packages/sequencer/src/protocol/production/BatchProducerModule.ts +++ b/packages/sequencer/src/protocol/production/BatchProducerModule.ts @@ -120,6 +120,7 @@ export class BatchProducerModule extends SequencerModule { height, fromNetworkState: batch.fromNetworkState, toNetworkState: batch.toNetworkState, + createdAt: new Date(), }, changes: batch.changes, diff --git a/packages/sequencer/src/protocol/production/sequencing/BlockProductionService.ts b/packages/sequencer/src/protocol/production/sequencing/BlockProductionService.ts index ceaba6a79..23f42a387 100644 --- a/packages/sequencer/src/protocol/production/sequencing/BlockProductionService.ts +++ b/packages/sequencer/src/protocol/production/sequencing/BlockProductionService.ts @@ -186,6 +186,7 @@ export class BlockProductionService { during: networkState, }, beforeBlockStateTransitions, + createdAt: new Date(), }; const hash = Block.hash(block); diff --git a/packages/sequencer/src/settlement/interactions/bridging/BridgingSettlementInteraction.ts b/packages/sequencer/src/settlement/interactions/bridging/BridgingSettlementInteraction.ts index ee8b74983..ab06f097a 100644 --- a/packages/sequencer/src/settlement/interactions/bridging/BridgingSettlementInteraction.ts +++ b/packages/sequencer/src/settlement/interactions/bridging/BridgingSettlementInteraction.ts @@ -121,6 +121,7 @@ export class BridgingSettlementInteraction implements SettleInteraction { batches: [batch.height], promisedMessagesHash: latestSequenceStateHash.toString(), transactionHash, + createdAt: new Date(), }; } } diff --git a/packages/sequencer/src/settlement/interactions/vanilla/VanillaSettlementInteraction.ts b/packages/sequencer/src/settlement/interactions/vanilla/VanillaSettlementInteraction.ts index 096438ab5..d5ba0ab18 100644 --- a/packages/sequencer/src/settlement/interactions/vanilla/VanillaSettlementInteraction.ts +++ b/packages/sequencer/src/settlement/interactions/vanilla/VanillaSettlementInteraction.ts @@ -113,6 +113,7 @@ export class VanillaSettlementInteraction implements SettleInteraction { batches: [batch.height], promisedMessagesHash: latestSequenceStateHash.toString(), transactionHash, + createdAt: new Date(), }; } } diff --git a/packages/sequencer/src/storage/model/Batch.ts b/packages/sequencer/src/storage/model/Batch.ts index 65e325a5b..f80e3d171 100644 --- a/packages/sequencer/src/storage/model/Batch.ts +++ b/packages/sequencer/src/storage/model/Batch.ts @@ -5,6 +5,7 @@ export interface Batch { proof: JsonProof; blockHashes: string[]; height: number; + createdAt: Date; } export interface SettleableBatch extends Batch { diff --git a/packages/sequencer/src/storage/model/Block.ts b/packages/sequencer/src/storage/model/Block.ts index 2a9ea57d5..08b36eaa5 100644 --- a/packages/sequencer/src/storage/model/Block.ts +++ b/packages/sequencer/src/storage/model/Block.ts @@ -50,6 +50,7 @@ export interface Block { toMessagesHash: Field; beforeBlockStateTransitions: UntypedStateTransition[]; + createdAt: Date; } // eslint-disable-next-line @typescript-eslint/no-redeclare @@ -106,6 +107,7 @@ export const BlockWithResult = { beforeBlockStateTransitions: [], previousBlockHash: undefined, + createdAt: new Date(), }, result: { afterNetworkState: NetworkState.empty(), diff --git a/packages/sequencer/src/storage/model/Settlement.ts b/packages/sequencer/src/storage/model/Settlement.ts index f3b91ab73..07f032677 100644 --- a/packages/sequencer/src/storage/model/Settlement.ts +++ b/packages/sequencer/src/storage/model/Settlement.ts @@ -2,4 +2,5 @@ export interface Settlement { transactionHash: string; promisedMessagesHash: string; batches: number[]; + createdAt: Date; } From d01f2bc281e8bba8d3e2213b278813ff0fae47c7 Mon Sep 17 00:00:00 2001 From: stanlou Date: Tue, 14 Apr 2026 16:43:31 +0100 Subject: [PATCH 2/3] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb77b2d31..a0c64e603 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## Unreleased ### Added - +- Added createdAt timestamp to transaction, block, batch and settlement models.[#502](https://github.com/proto-kit/framework/pull/502) - `@dependencyFactory` for static dependency factory type safety - Added Mempool sorting [#395](https://github.com/proto-kit/framework/pull/395) - Introduced dynamic block building and JIT transaction fetching [#394](https://github.com/proto-kit/framework/pull/394) From d8c9c5664a6c8e11cb5335df44a04728982f639c Mon Sep 17 00:00:00 2001 From: stanlou Date: Tue, 21 Apr 2026 18:07:07 +0100 Subject: [PATCH 3/3] remove transaction timestamp --- CHANGELOG.md | 2 +- .../migration.sql | 4 ---- packages/indexer/prisma/schema.prisma | 1 - packages/indexer/src/tasks/IndexBatchTask.ts | 6 +----- packages/indexer/src/tasks/IndexSettlementTask.ts | 6 +----- .../migration.sql | 3 --- packages/persistance/prisma/schema.prisma | 1 - .../persistance/src/services/prisma/PrismaBatchStore.ts | 2 +- .../persistance/src/services/prisma/mappers/BatchMapper.ts | 4 ++-- .../persistance/src/services/prisma/mappers/BlockMapper.ts | 4 ++-- .../src/services/prisma/mappers/SettlementMapper.ts | 4 ++-- .../src/services/prisma/mappers/TransactionMapper.ts | 2 -- packages/sdk/src/graphql/GraphqlTransactionSender.ts | 2 +- packages/sequencer/src/mempool/PendingTransaction.ts | 7 ------- .../src/protocol/production/BatchProducerModule.ts | 2 +- .../production/sequencing/BlockProductionService.ts | 2 +- .../interactions/bridging/BridgingSettlementInteraction.ts | 2 +- .../interactions/vanilla/VanillaSettlementInteraction.ts | 2 +- packages/sequencer/src/storage/model/Batch.ts | 2 +- packages/sequencer/src/storage/model/Block.ts | 4 ++-- packages/sequencer/src/storage/model/Settlement.ts | 2 +- 21 files changed, 19 insertions(+), 45 deletions(-) rename packages/indexer/prisma/migrations/{20260414141248_add_timestamp => 20260421115835_add_timestamp}/migration.sql (74%) rename packages/persistance/prisma/migrations/{20260414141346_add_timestamp => 20260421120404_add_timestamp}/migration.sql (74%) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0c64e603..395cc31d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## Unreleased ### Added -- Added createdAt timestamp to transaction, block, batch and settlement models.[#502](https://github.com/proto-kit/framework/pull/502) +- Added createdAt timestamp to block, batch and settlement models.[#502](https://github.com/proto-kit/framework/pull/502) - `@dependencyFactory` for static dependency factory type safety - Added Mempool sorting [#395](https://github.com/proto-kit/framework/pull/395) - Introduced dynamic block building and JIT transaction fetching [#394](https://github.com/proto-kit/framework/pull/394) diff --git a/packages/indexer/prisma/migrations/20260414141248_add_timestamp/migration.sql b/packages/indexer/prisma/migrations/20260421115835_add_timestamp/migration.sql similarity index 74% rename from packages/indexer/prisma/migrations/20260414141248_add_timestamp/migration.sql rename to packages/indexer/prisma/migrations/20260421115835_add_timestamp/migration.sql index eab2fcb6c..a6bd08dbd 100644 --- a/packages/indexer/prisma/migrations/20260414141248_add_timestamp/migration.sql +++ b/packages/indexer/prisma/migrations/20260421115835_add_timestamp/migration.sql @@ -4,7 +4,6 @@ - Added the required column `createdAt` to the `Batch` table without a default value. This is not possible if the table is not empty. - Added the required column `createdAt` to the `Block` table without a default value. This is not possible if the table is not empty. - Added the required column `createdAt` to the `Settlement` table without a default value. This is not possible if the table is not empty. - - Added the required column `createdAt` to the `Transaction` table without a default value. This is not possible if the table is not empty. */ -- AlterTable @@ -15,6 +14,3 @@ ALTER TABLE "Block" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL; -- AlterTable ALTER TABLE "Settlement" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL; - --- AlterTable -ALTER TABLE "Transaction" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL; diff --git a/packages/indexer/prisma/schema.prisma b/packages/indexer/prisma/schema.prisma index e099fa4fc..7ef1da406 100644 --- a/packages/indexer/prisma/schema.prisma +++ b/packages/indexer/prisma/schema.prisma @@ -42,7 +42,6 @@ model Transaction { signature_s String isMessage Boolean - createdAt DateTime executionResult TransactionExecutionResult? priority TransactionPriority? diff --git a/packages/indexer/src/tasks/IndexBatchTask.ts b/packages/indexer/src/tasks/IndexBatchTask.ts index e3dee1aa4..04c1c87fb 100644 --- a/packages/indexer/src/tasks/IndexBatchTask.ts +++ b/packages/indexer/src/tasks/IndexBatchTask.ts @@ -46,11 +46,7 @@ export class IndexBatchTask }, fromJSON: (parameter: string) => { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - const parsed = JSON.parse(parameter) as Batch; - return { - ...parsed, - createdAt: new Date(parsed.createdAt), - }; + return JSON.parse(parameter) as Batch; }, }; } diff --git a/packages/indexer/src/tasks/IndexSettlementTask.ts b/packages/indexer/src/tasks/IndexSettlementTask.ts index cb66f02bb..87aca62ff 100644 --- a/packages/indexer/src/tasks/IndexSettlementTask.ts +++ b/packages/indexer/src/tasks/IndexSettlementTask.ts @@ -46,11 +46,7 @@ export class IndexSettlementTask }, fromJSON: (parameter: string) => { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - const parsed = JSON.parse(parameter) as Settlement; - return { - ...parsed, - createdAt: new Date(parsed.createdAt), - }; + return JSON.parse(parameter) as Settlement; }, }; } diff --git a/packages/persistance/prisma/migrations/20260414141346_add_timestamp/migration.sql b/packages/persistance/prisma/migrations/20260421120404_add_timestamp/migration.sql similarity index 74% rename from packages/persistance/prisma/migrations/20260414141346_add_timestamp/migration.sql rename to packages/persistance/prisma/migrations/20260421120404_add_timestamp/migration.sql index 20a8f9e97..34b6b0f33 100644 --- a/packages/persistance/prisma/migrations/20260414141346_add_timestamp/migration.sql +++ b/packages/persistance/prisma/migrations/20260421120404_add_timestamp/migration.sql @@ -6,6 +6,3 @@ ALTER TABLE "Block" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CUR -- AlterTable ALTER TABLE "Settlement" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; - --- AlterTable -ALTER TABLE "Transaction" ADD COLUMN "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP; diff --git a/packages/persistance/prisma/schema.prisma b/packages/persistance/prisma/schema.prisma index a5958b290..8ad2d0a1b 100644 --- a/packages/persistance/prisma/schema.prisma +++ b/packages/persistance/prisma/schema.prisma @@ -50,7 +50,6 @@ model Transaction { signature_s String isMessage Boolean - createdAt DateTime @default(now()) executionResult TransactionExecutionResult? diff --git a/packages/persistance/src/services/prisma/PrismaBatchStore.ts b/packages/persistance/src/services/prisma/PrismaBatchStore.ts index 52db9d43d..51de78d9f 100644 --- a/packages/persistance/src/services/prisma/PrismaBatchStore.ts +++ b/packages/persistance/src/services/prisma/PrismaBatchStore.ts @@ -52,7 +52,7 @@ export class PrismaBatchStore implements BatchStorage { data: { proof: entity.proof as Prisma.InputJsonValue, height, - createdAt: batch.createdAt, + createdAt: new Date(batch.createdAt), blocks: { connect: batch.blockHashes.map((hash) => ({ hash, diff --git a/packages/persistance/src/services/prisma/mappers/BatchMapper.ts b/packages/persistance/src/services/prisma/mappers/BatchMapper.ts index 17d5fc711..e6c5547d7 100644 --- a/packages/persistance/src/services/prisma/mappers/BatchMapper.ts +++ b/packages/persistance/src/services/prisma/mappers/BatchMapper.ts @@ -15,7 +15,7 @@ export class BatchMapper implements ObjectMapper< blockHashes: input[1], proof: input[0].proof as JsonProof, height: input[0].height, - createdAt: input[0].createdAt, + createdAt: input[0].createdAt.getTime(), }; } @@ -24,7 +24,7 @@ export class BatchMapper implements ObjectMapper< proof: input.proof, height: input.height, settlementTransactionHash: null, - createdAt: input.createdAt, + createdAt: new Date(input.createdAt), }; return [batch, []]; } diff --git a/packages/persistance/src/services/prisma/mappers/BlockMapper.ts b/packages/persistance/src/services/prisma/mappers/BlockMapper.ts index fb2aaa8ff..c16576ad1 100644 --- a/packages/persistance/src/services/prisma/mappers/BlockMapper.ts +++ b/packages/persistance/src/services/prisma/mappers/BlockMapper.ts @@ -45,7 +45,7 @@ export class BlockMapper implements ObjectMapper { beforeBlockStateTransitions: this.stArrayMapper.mapIn( input.beforeBlockStateTransitions ), - createdAt: input.createdAt, + createdAt: new Date(input.createdAt).getTime(), }; } @@ -69,7 +69,7 @@ export class BlockMapper implements ObjectMapper { beforeBlockStateTransitions: this.stArrayMapper.mapOut( input.beforeBlockStateTransitions ), - createdAt: input.createdAt, + createdAt: new Date(input.createdAt), }; } } diff --git a/packages/persistance/src/services/prisma/mappers/SettlementMapper.ts b/packages/persistance/src/services/prisma/mappers/SettlementMapper.ts index 1d1fe57bb..53b096a18 100644 --- a/packages/persistance/src/services/prisma/mappers/SettlementMapper.ts +++ b/packages/persistance/src/services/prisma/mappers/SettlementMapper.ts @@ -15,7 +15,7 @@ export class SettlementMapper implements ObjectMapper< batches, transactionHash: settlement.transactionHash, promisedMessagesHash: settlement.promisedMessagesHash, - createdAt: settlement.createdAt, + createdAt: settlement.createdAt.getTime(), }; } @@ -24,7 +24,7 @@ export class SettlementMapper implements ObjectMapper< { promisedMessagesHash: input.promisedMessagesHash, transactionHash: input.transactionHash, - createdAt: input.createdAt, + createdAt: new Date(input.createdAt), }, input.batches, ]; diff --git a/packages/persistance/src/services/prisma/mappers/TransactionMapper.ts b/packages/persistance/src/services/prisma/mappers/TransactionMapper.ts index 5495ecabe..3e04bf831 100644 --- a/packages/persistance/src/services/prisma/mappers/TransactionMapper.ts +++ b/packages/persistance/src/services/prisma/mappers/TransactionMapper.ts @@ -23,7 +23,6 @@ export class TransactionMapper implements ObjectMapper< public mapIn(input: DBTransaction): PendingTransaction { return PendingTransaction.fromJSON({ ...input, - createdAt: input.createdAt, signature: { r: input.signature_r, s: input.signature_s, @@ -43,7 +42,6 @@ export class TransactionMapper implements ObjectMapper< signature_r: json.signature.r, signature_s: json.signature.s, hash: input.hash().toString(), - createdAt: input.createdAt, }; } } diff --git a/packages/sdk/src/graphql/GraphqlTransactionSender.ts b/packages/sdk/src/graphql/GraphqlTransactionSender.ts index 52399a4c7..7a0c481e5 100644 --- a/packages/sdk/src/graphql/GraphqlTransactionSender.ts +++ b/packages/sdk/src/graphql/GraphqlTransactionSender.ts @@ -25,7 +25,7 @@ export class GraphqlTransactionSender `; const tx = transaction.toJSON(); const queryResult = await this.graphqlClient.client - .mutation(query, { tx: { ...tx, createdAt: undefined } }) + .mutation(query, { tx }) .toPromise(); if (queryResult.error === undefined) { diff --git a/packages/sequencer/src/mempool/PendingTransaction.ts b/packages/sequencer/src/mempool/PendingTransaction.ts index 6447ddcd2..3b81066e4 100644 --- a/packages/sequencer/src/mempool/PendingTransaction.ts +++ b/packages/sequencer/src/mempool/PendingTransaction.ts @@ -130,7 +130,6 @@ interface PendingTransactionJSONType { s: string; }; isMessage: boolean; - createdAt?: Date; } export class PendingTransaction extends UnsignedTransaction { @@ -146,7 +145,6 @@ export class PendingTransaction extends UnsignedTransaction { signature: Signature.fromJSON(object.signature), auxiliaryData: object.auxiliaryData.slice(), isMessage: object.isMessage, - createdAt: object.createdAt ?? new Date(), }, Field(object.hash) ); @@ -154,8 +152,6 @@ export class PendingTransaction extends UnsignedTransaction { public signature: Signature; - public createdAt: Date; - public constructor( data: { methodId: Field; @@ -165,13 +161,11 @@ export class PendingTransaction extends UnsignedTransaction { argsFields: Field[]; auxiliaryData: string[]; isMessage: boolean; - createdAt?: Date; }, memoizedHash?: Field ) { super(data, memoizedHash); this.signature = data.signature; - this.createdAt = data.createdAt ?? new Date(); } public toJSON(): PendingTransactionJSONType { @@ -183,7 +177,6 @@ export class PendingTransaction extends UnsignedTransaction { argsFields: this.argsFields.map((x) => x.toJSON()), auxiliaryData: this.auxiliaryData.slice(), isMessage: this.isMessage, - createdAt: this.createdAt, signature: { r: this.signature.r.toJSON(), diff --git a/packages/sequencer/src/protocol/production/BatchProducerModule.ts b/packages/sequencer/src/protocol/production/BatchProducerModule.ts index 499eb422e..53e2bd372 100644 --- a/packages/sequencer/src/protocol/production/BatchProducerModule.ts +++ b/packages/sequencer/src/protocol/production/BatchProducerModule.ts @@ -120,7 +120,7 @@ export class BatchProducerModule extends SequencerModule { height, fromNetworkState: batch.fromNetworkState, toNetworkState: batch.toNetworkState, - createdAt: new Date(), + createdAt: Date.now(), }, changes: batch.changes, diff --git a/packages/sequencer/src/protocol/production/sequencing/BlockProductionService.ts b/packages/sequencer/src/protocol/production/sequencing/BlockProductionService.ts index 23f42a387..706c27848 100644 --- a/packages/sequencer/src/protocol/production/sequencing/BlockProductionService.ts +++ b/packages/sequencer/src/protocol/production/sequencing/BlockProductionService.ts @@ -186,7 +186,7 @@ export class BlockProductionService { during: networkState, }, beforeBlockStateTransitions, - createdAt: new Date(), + createdAt: Date.now(), }; const hash = Block.hash(block); diff --git a/packages/sequencer/src/settlement/interactions/bridging/BridgingSettlementInteraction.ts b/packages/sequencer/src/settlement/interactions/bridging/BridgingSettlementInteraction.ts index ab06f097a..6106233c0 100644 --- a/packages/sequencer/src/settlement/interactions/bridging/BridgingSettlementInteraction.ts +++ b/packages/sequencer/src/settlement/interactions/bridging/BridgingSettlementInteraction.ts @@ -121,7 +121,7 @@ export class BridgingSettlementInteraction implements SettleInteraction { batches: [batch.height], promisedMessagesHash: latestSequenceStateHash.toString(), transactionHash, - createdAt: new Date(), + createdAt: Date.now(), }; } } diff --git a/packages/sequencer/src/settlement/interactions/vanilla/VanillaSettlementInteraction.ts b/packages/sequencer/src/settlement/interactions/vanilla/VanillaSettlementInteraction.ts index d5ba0ab18..59d0add1e 100644 --- a/packages/sequencer/src/settlement/interactions/vanilla/VanillaSettlementInteraction.ts +++ b/packages/sequencer/src/settlement/interactions/vanilla/VanillaSettlementInteraction.ts @@ -113,7 +113,7 @@ export class VanillaSettlementInteraction implements SettleInteraction { batches: [batch.height], promisedMessagesHash: latestSequenceStateHash.toString(), transactionHash, - createdAt: new Date(), + createdAt: Date.now(), }; } } diff --git a/packages/sequencer/src/storage/model/Batch.ts b/packages/sequencer/src/storage/model/Batch.ts index f80e3d171..aff22dee2 100644 --- a/packages/sequencer/src/storage/model/Batch.ts +++ b/packages/sequencer/src/storage/model/Batch.ts @@ -5,7 +5,7 @@ export interface Batch { proof: JsonProof; blockHashes: string[]; height: number; - createdAt: Date; + createdAt: number; } export interface SettleableBatch extends Batch { diff --git a/packages/sequencer/src/storage/model/Block.ts b/packages/sequencer/src/storage/model/Block.ts index 08b36eaa5..44402d0f6 100644 --- a/packages/sequencer/src/storage/model/Block.ts +++ b/packages/sequencer/src/storage/model/Block.ts @@ -50,7 +50,7 @@ export interface Block { toMessagesHash: Field; beforeBlockStateTransitions: UntypedStateTransition[]; - createdAt: Date; + createdAt: number; } // eslint-disable-next-line @typescript-eslint/no-redeclare @@ -107,7 +107,7 @@ export const BlockWithResult = { beforeBlockStateTransitions: [], previousBlockHash: undefined, - createdAt: new Date(), + createdAt: Date.now(), }, result: { afterNetworkState: NetworkState.empty(), diff --git a/packages/sequencer/src/storage/model/Settlement.ts b/packages/sequencer/src/storage/model/Settlement.ts index 07f032677..d8b589dab 100644 --- a/packages/sequencer/src/storage/model/Settlement.ts +++ b/packages/sequencer/src/storage/model/Settlement.ts @@ -2,5 +2,5 @@ export interface Settlement { transactionHash: string; promisedMessagesHash: string; batches: number[]; - createdAt: Date; + createdAt: number; }