Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/api/src/graphql/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
} from "@apollo/client";
import { setContext } from "@apollo/client/link/context/index.js";
import { removeTypenameFromVariables } from "@apollo/client/link/remove-typename/index.js";
import { Context } from "@authentication";
import { Context } from "../authentication";
import { collection } from "./collection";
import { collectionIndex } from "./collection-index";
import { database } from "./database";
Expand Down
15 changes: 12 additions & 3 deletions packages/api/src/graphql/database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
TPagination,
TPaginationResponse,
} from "./types";
import { TDbTransaction } from "./types/transaction.js";

const DATABASE_CHANGE_OWNER = gql`
mutation DbChangeOwner($databaseName: String!, $newOwner: String!) {
Expand All @@ -20,7 +21,15 @@ const DATABASE_CHANGE_OWNER = gql`

const DATABASE_CREATE = gql`
mutation DbCreate($databaseName: String!, $merkleHeight: Int!) {
dbCreate(databaseName: $databaseName, merkleHeight: $merkleHeight)
dbCreate(databaseName: $databaseName, merkleHeight: $merkleHeight) {
databaseName
transactionType
status
id
tx
zkAppPublicKey
error
}
}
`;

Expand Down Expand Up @@ -102,9 +111,9 @@ export const database = <T>(client: TApolloClient<T>) => ({
{ dbChangeOwner: boolean }
>(client, DATABASE_CHANGE_OWNER, (data) => data.dbChangeOwner),
create: createMutateFunction<
boolean,
TDbTransaction,
{ databaseName: string; merkleHeight: number },
{ dbCreate: boolean }
{ dbCreate: TDbTransaction }
>(client, DATABASE_CREATE, (data) => data.dbCreate),
setting: createQueryFunction<
TDatabaseSettings,
Expand Down
15 changes: 12 additions & 3 deletions packages/api/src/graphql/rollup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,19 @@ import {
TCreateRollUpRequest,
TGetRollUpHistoryResponse,
} from "./types/rollup.js";
import { TDbTransaction } from "./types/transaction.js";

const ROLLUP_CREATE = gql`
mutation CreateRollUp($databaseName: String!) {
createRollUp(databaseName: $databaseName)
createRollUp(databaseName: $databaseName) {
databaseName
transactionType
status
id
tx
zkAppPublicKey
error
}
}
`;

Expand All @@ -31,9 +40,9 @@ const ROLLUP_HISTORY_GET = gql`
`;
export const rollup = <T>(client: TApolloClient<T>) => ({
createRollUp: createMutateFunction<
boolean,
TDbTransaction,
TCreateRollUpRequest,
{ createRollUp: boolean }
{ createRollUp: TDbTransaction }
>(client, ROLLUP_CREATE, (data) => data.createRollUp),
getRollUpHistory: createMutateFunction<
TGetRollUpHistoryResponse,
Expand Down
25 changes: 25 additions & 0 deletions packages/api/src/graphql/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
} from "./common.js";
import {
TDbTransaction,
TTransactionByIdRequest,
TTransactionConfirmRequest,
TTransactionRequest,
} from "./types/transaction.js";
Expand All @@ -25,6 +26,25 @@ const TRANSACTION_GET = gql`
id
tx
zkAppPublicKey
error
}
}
`;

const TRANSACTION_BY_ID_GET = gql`
query GetTransactionById(
$id: String!
) {
getTransactionById(
id: $id
) {
databaseName
transactionType
status
id
tx
zkAppPublicKey
error
}
}
`;
Expand All @@ -49,6 +69,11 @@ export const transaction = <T>(client: TApolloClient<T>) => ({
TTransactionRequest,
{ getTransaction: TDbTransaction }
>(client, TRANSACTION_GET, (data) => data.getTransaction),
getTransactionById: createQueryFunction<
TDbTransaction,
TTransactionByIdRequest,
{ getTransactionById: TDbTransaction }
>(client, TRANSACTION_BY_ID_GET, (data) => data.getTransactionById),
confirmTransaction: createMutateFunction<
boolean,
TTransactionConfirmRequest,
Expand Down
6 changes: 6 additions & 0 deletions packages/api/src/graphql/types/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ export type TTransactionRequest = {
transactionType: "deploy" | "rollup";
};

export type TTransactionByIdRequest = {
id: string;
};


export type TTransactionConfirmRequest = {
databaseName: string;
confirmTransactionId: string;
Expand All @@ -23,4 +28,5 @@ export type TDbTransaction = {
transactionType: TTransactionType;
tx: string;
zkAppPublicKey: string;
error: string;
};
18 changes: 15 additions & 3 deletions packages/serverless/src/apollo/app/database.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import { DB, ModelDatabase, ModelDbSetting } from '@zkdb/storage';
import {
DB,
ModelDatabase,
ModelDbSetting,
withTransaction,
} from '@zkdb/storage';
import GraphQLJSON from 'graphql-type-json';
import Joi from 'joi';
import {
Expand Down Expand Up @@ -107,7 +112,7 @@ extend type Query {
}

extend type Mutation {
dbCreate(databaseName: String!, merkleHeight: Int!): Boolean
dbCreate(databaseName: String!, merkleHeight: Int!): DbTransaction
dbChangeOwner(databaseName: String!, newOwner: String!): Boolean
dbDeployedUpdate(databaseName: String!, appPublicKey: String!): Boolean
#dbDrop(databaseName: String!): Boolean
Expand Down Expand Up @@ -175,7 +180,14 @@ const dbDeployedUpdate = authorizeWrapper(
const dbCreate = authorizeWrapper(
DatabaseCreateRequest,
async (_root: unknown, args: TDatabaseCreateRequest, ctx) =>
createDatabase(args.databaseName, args.merkleHeight, ctx.userName)
withTransaction((session) =>
createDatabase(
args.databaseName,
args.merkleHeight,
ctx.userName,
session
)
)
);

const dbChangeOwner = authorizeWrapper(
Expand Down
2 changes: 1 addition & 1 deletion packages/serverless/src/apollo/app/rollup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ type RollUpHistory {

extend type Mutation {
getRollUpHistory(databaseName: String!): RollUpHistory!
createRollUp(databaseName: String!): Boolean
createRollUp(databaseName: String!): DbTransaction
}
`;

Expand Down
37 changes: 17 additions & 20 deletions packages/serverless/src/apollo/app/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,19 @@ import {
enqueueTransaction as enqueueTransactionDomain,
getTransactionForSigning,
confirmTransaction as confirmTransactionDomain,
getTransactionById as getTransactionByIdDomain
} from '../../domain/use-case/transaction.js';
import GraphQLJSON from 'graphql-type-json';
import { ModelDbTransaction, withTransaction } from '@zkdb/storage';

export const typeDefsTransaction = `#graphql
scalar JSON
type Query
type Mutation

enum TransactionType {
deploy
rollup
}

type DbTransaction {
databaseName: String!
transactionType: TransactionType!
zkAppPublicKey: String!
status: TransactionStatus!
tx: String!
id: String!
}

extend type Query {
getTransaction(databaseName: String!, transactionType: TransactionType!): DbTransaction!
getTransactionById(id: String!): DbTransaction
}

extend type Mutation {
Expand All @@ -42,6 +31,10 @@ export type TTransactionRequest = TDatabaseRequest & {
transactionType: 'deploy' | 'rollup';
};

export type TTransactionByIdRequest = {
id: string;
};

export type TTransactionIdRequest = TDatabaseRequest & {
id: string;
};
Expand All @@ -62,7 +55,6 @@ const getTransaction = authorizeWrapper(
args.transactionType
);

transaction.status
return {
databaseName: transaction.databaseName,
transactionType: transaction.transactionType,
Expand All @@ -74,17 +66,20 @@ const getTransaction = authorizeWrapper(
}
);

const getTransactionById = authorizeWrapper(
Joi.object({
id: Joi.string().required(),
}),
async (_root: unknown, args: TTransactionByIdRequest, ctx) => withTransaction((session) => getTransactionByIdDomain(args.id, session))
);

const enqueueDeployTransaction = authorizeWrapper(
Joi.object({
databaseName,
}),
async (_root: unknown, args: TDatabaseRequest, ctx) =>
(
await enqueueTransactionDomain(
args.databaseName,
ctx.userName,
'deploy'
)
await enqueueTransactionDomain(args.databaseName, ctx.userName, 'deploy')
).toString()
);

Expand All @@ -107,6 +102,7 @@ type TTransactionResolver = {
JSON: typeof GraphQLJSON;
Query: {
getTransaction: typeof getTransaction;
getTransactionById: typeof getTransactionById;
};
Mutation: {
enqueueDeployTransaction: typeof enqueueDeployTransaction;
Expand All @@ -118,6 +114,7 @@ export const resolversTransaction: TTransactionResolver = {
JSON: GraphQLJSON,
Query: {
getTransaction,
getTransactionById
},
Mutation: {
enqueueDeployTransaction,
Expand Down
16 changes: 16 additions & 0 deletions packages/serverless/src/apollo/app/types/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,20 @@ enum TransactionStatus {
success
unknown
}

enum TransactionType {
deploy
rollup
}

type DbTransaction {
databaseName: String!
transactionType: TransactionType!
zkAppPublicKey: String
status: TransactionStatus!
tx: String
id: String!
error: String
}

`;
14 changes: 11 additions & 3 deletions packages/serverless/src/domain/use-case/database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ import { MinaNetwork } from '@zkdb/smart-contract';
export async function createDatabase(
databaseName: string,
merkleHeight: number,
actor: string
actor: string,
session?: ClientSession
) {
const user = await new ModelUser().findOne({ userName: actor });

Expand All @@ -44,9 +45,16 @@ export async function createDatabase(
databaseOwner: actor,
});

await enqueueTransaction(databaseName, actor, 'deploy');
const id = await enqueueTransaction(databaseName, actor, 'deploy', session);

return true;
const modelTransaction = ModelDbTransaction.getInstance();

const tx = await modelTransaction.findById(id.toString(), { session });

return {
id: id.toString(),
...tx,
};
}

throw Error(`User ${actor} has not been found`);
Expand Down
9 changes: 9 additions & 0 deletions packages/serverless/src/domain/use-case/rollup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,15 @@ export async function createRollUp(
},
{ session: compoundSession?.sessionService }
);

const tx = await modelTransaction.findById(txId.toString(), {
session: compoundSession?.sessionService,
});

return {
id: txId.toString(),
...tx,
};
}

export async function getRollUpHistory(
Expand Down
Loading