Skip to content

Commit 7d6145b

Browse files
committed
Adapted persistence schema
1 parent 4b44136 commit 7d6145b

File tree

5 files changed

+81
-23
lines changed

5 files changed

+81
-23
lines changed

packages/persistance/prisma/schema.prisma

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ model Transaction {
4040
}
4141

4242
model TransactionExecutionResult {
43-
stateTransitions Json @db.Json
44-
protocolTransitions Json @db.Json
45-
status Boolean
46-
statusMessage String?
47-
events Json @db.Json
43+
// TODO Make StateTransitionBatch and StateTransition Table
44+
stateTransitions Json @db.Json
45+
status Boolean
46+
statusMessage String?
47+
events Json @db.Json
4848
4949
tx Transaction @relation(fields: [txHash], references: [hash])
5050
txHash String @id
@@ -65,6 +65,9 @@ model Block {
6565
fromBlockHashRoot String
6666
fromMessagesHash String
6767
toMessagesHash String
68+
fromStateRoot String
69+
70+
beforeBlockStateTransitions Json @db.Json
6871
6972
parentHash String? @unique
7073
parent Block? @relation("Parent", fields: [parentHash], references: [hash])
@@ -91,11 +94,12 @@ model Batch {
9194
model BlockResult {
9295
blockHash String @id @unique
9396
94-
stateRoot String
95-
blockHashRoot String
96-
afterNetworkState Json @db.Json
97-
blockStateTransitions Json @db.Json
98-
blockHashWitness Json @db.Json
97+
stateRoot String
98+
blockHashRoot String
99+
witnessedRoots String[]
100+
afterNetworkState Json @db.Json
101+
afterBlockStateTransitions Json @db.Json
102+
blockHashWitness Json @db.Json
99103
100104
block Block? @relation(fields: [blockHash], references: [hash])
101105
}

packages/persistance/src/services/prisma/mappers/BlockMapper.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,14 @@ import { Field } from "o1js";
66

77
import { ObjectMapper } from "../../../ObjectMapper";
88

9+
import { StateTransitionArrayMapper } from "./StateTransitionMapper";
10+
911
@singleton()
1012
export class BlockMapper implements ObjectMapper<Block, PrismaBlock> {
13+
public constructor(
14+
private readonly stArrayMapper: StateTransitionArrayMapper
15+
) {}
16+
1117
public mapIn(input: PrismaBlock): Block {
1218
return {
1319
transactions: [],
@@ -30,10 +36,15 @@ export class BlockMapper implements ObjectMapper<Block, PrismaBlock> {
3036
fromBlockHashRoot: Field(input.fromBlockHashRoot),
3137
fromMessagesHash: Field(input.fromMessagesHash),
3238
toMessagesHash: Field(input.toMessagesHash),
39+
fromStateRoot: Field(input.fromStateRoot),
3340

3441
transactionsHash: Field(input.transactionsHash),
3542
previousBlockHash:
3643
input.parentHash !== null ? Field(input.parentHash) : undefined,
44+
45+
beforeBlockStateTransitions: this.stArrayMapper.mapIn(
46+
input.beforeBlockStateTransitions
47+
),
3748
};
3849
}
3950

@@ -47,11 +58,16 @@ export class BlockMapper implements ObjectMapper<Block, PrismaBlock> {
4758
fromBlockHashRoot: input.fromBlockHashRoot.toString(),
4859
fromMessagesHash: input.fromMessagesHash.toString(),
4960
toMessagesHash: input.toMessagesHash.toString(),
61+
fromStateRoot: input.fromStateRoot.toString(),
5062

5163
hash: input.hash.toString(),
5264
transactionsHash: input.transactionsHash.toString(),
5365
parentHash: input.previousBlockHash?.toString() ?? null,
5466
batchHeight: null,
67+
68+
beforeBlockStateTransitions: this.stArrayMapper.mapOut(
69+
input.beforeBlockStateTransitions
70+
),
5571
};
5672
}
5773
}

packages/persistance/src/services/prisma/mappers/BlockResultMapper.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@ export class BlockResultMapper
2828
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
2929
BlockHashMerkleTreeWitness.fromJSON(input.blockHashWitness as any)
3030
),
31-
blockStateTransitions: this.stArrayMapper.mapIn(
32-
input.blockStateTransitions
31+
afterBlockStateTransitions: this.stArrayMapper.mapIn(
32+
input.afterBlockStateTransitions
3333
),
3434
blockHash: BigInt(input.blockHash),
35+
36+
witnessedRoots: [BigInt(input.witnessedRoots[0])],
3537
};
3638
}
3739

@@ -44,10 +46,12 @@ export class BlockResultMapper
4446
blockHashWitness: BlockHashMerkleTreeWitness.toJSON(
4547
input.blockHashWitness
4648
),
47-
blockStateTransitions: this.stArrayMapper.mapOut(
48-
input.blockStateTransitions
49+
afterBlockStateTransitions: this.stArrayMapper.mapOut(
50+
input.afterBlockStateTransitions
4951
),
5052
afterNetworkState: NetworkState.toJSON(input.afterNetworkState),
53+
54+
witnessedRoots: [input.witnessedRoots[0].toString()],
5155
};
5256
}
5357
}

packages/persistance/src/services/prisma/mappers/StateTransitionMapper.ts

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { singleton } from "tsyringe";
2-
import { UntypedStateTransition } from "@proto-kit/sequencer";
2+
import {
3+
StateTransitionBatch,
4+
UntypedStateTransition,
5+
} from "@proto-kit/sequencer";
36
import { Prisma } from "@prisma/client";
47

58
import { ObjectMapper } from "../../../ObjectMapper";
@@ -40,3 +43,38 @@ export class StateTransitionArrayMapper
4043
return input.map((st) => this.stMapper.mapOut(st)) as Prisma.JsonArray;
4144
}
4245
}
46+
47+
@singleton()
48+
export class StateTransitionBatchArrayMapper
49+
implements ObjectMapper<StateTransitionBatch[], Prisma.JsonValue>
50+
{
51+
public constructor(
52+
private readonly stArrayMapper: StateTransitionArrayMapper
53+
) {}
54+
55+
public mapOut(input: StateTransitionBatch[]): Prisma.JsonValue {
56+
return input.map((st) => ({
57+
stateTransitions: this.stArrayMapper.mapOut(
58+
st.stateTransitions
59+
) as Prisma.JsonArray,
60+
applied: st.applied,
61+
}));
62+
}
63+
64+
public mapIn(input: Prisma.JsonValue): StateTransitionBatch[] {
65+
if (input === undefined) return [];
66+
67+
if (Array.isArray(input)) {
68+
return (input as Prisma.JsonArray).map((stJson) => {
69+
const batchJsonObject = stJson as Prisma.JsonObject;
70+
return {
71+
stateTransitions: this.stArrayMapper.mapIn(
72+
batchJsonObject.stateTransitions
73+
),
74+
applied: batchJsonObject.applied as boolean,
75+
};
76+
});
77+
}
78+
return [];
79+
}
80+
}

packages/persistance/src/services/prisma/mappers/TransactionMapper.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { Bool } from "o1js";
1111

1212
import { ObjectMapper } from "../../../ObjectMapper";
1313

14-
import { StateTransitionArrayMapper } from "./StateTransitionMapper";
14+
import { StateTransitionBatchArrayMapper } from "./StateTransitionMapper";
1515
import { EventArrayMapper } from "./EventMapper";
1616

1717
@singleton()
@@ -55,7 +55,7 @@ export class TransactionExecutionResultMapper
5555
{
5656
public constructor(
5757
private readonly transactionMapper: TransactionMapper,
58-
private readonly stArrayMapper: StateTransitionArrayMapper,
58+
private readonly stBatchMapper: StateTransitionBatchArrayMapper,
5959
private readonly eventArrayMapper: EventArrayMapper
6060
) {}
6161

@@ -67,12 +67,9 @@ export class TransactionExecutionResultMapper
6767
tx: this.transactionMapper.mapIn(input[1]),
6868
status: Bool(executionResult.status),
6969
statusMessage: executionResult.statusMessage ?? undefined,
70-
stateTransitions: this.stArrayMapper.mapIn(
70+
stateTransitions: this.stBatchMapper.mapIn(
7171
executionResult.stateTransitions
7272
),
73-
protocolTransitions: this.stArrayMapper.mapIn(
74-
executionResult.protocolTransitions
75-
),
7673
events: this.eventArrayMapper.mapIn(executionResult.events),
7774
};
7875
}
@@ -84,8 +81,7 @@ export class TransactionExecutionResultMapper
8481
const executionResult = {
8582
status: input.status.toBoolean(),
8683
statusMessage: input.statusMessage ?? null,
87-
stateTransitions: this.stArrayMapper.mapOut(input.stateTransitions),
88-
protocolTransitions: this.stArrayMapper.mapOut(input.protocolTransitions),
84+
stateTransitions: this.stBatchMapper.mapOut(input.stateTransitions),
8985
events: this.eventArrayMapper.mapOut(input.events),
9086
txHash: tx.hash,
9187
};

0 commit comments

Comments
 (0)