Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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 apps/extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"test:e2e:ui": "playwright test --ui"
},
"dependencies": {
"@mina-js/providers": "0.1.0",
"@mina-js/providers": "0.1.2",
"@palladco/common": "workspace:*",
"@palladco/features": "workspace:*",
"@palladco/key-management": "workspace:*",
Expand Down
Binary file added bun.lockb
Binary file not shown.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@
"devDependencies": {
"@biomejs/biome": "1.9.4",
"@happy-dom/global-registrator": "^15.11.0",
"@mina-js/utils": "0.1.2",
"@testing-library/react": "16.2.0",
"@tsconfig/strictest": "2.0.5",
"@turbo/gen": "2.4.4",
"@mina-js/utils": "0.1.0",
"@types/bun": "1.2.5",
"autoprefixer": "10.4.21",
"happy-dom": "14.12.3",
Expand Down
16 changes: 14 additions & 2 deletions packages/key-management/src/chains/Mina/signingOperations.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import Client from "mina-signer"

import {
SignedTransactionSchema,
toMinaSignerFormat,
toNodeApiFormat,
} from "@mina-js/utils"
import { SignableData } from "../../../../mina-core/src/borrowed-types"
import * as errors from "../../errors"
import type { ChainOperationArgs } from "../../types"
Expand All @@ -25,10 +30,17 @@ export function MinaSigningOperations<T extends MinaSignablePayload>(
return minaClient.signTransaction<string>(payload.message, privateKey)
}
if ("transaction" in payload) {
return minaClient.signTransaction(payload.transaction, privateKey)
return SignedTransactionSchema.parse(
minaClient.signTransaction(payload.transaction, privateKey),
)
}
if ("command" in payload) {
return minaClient.signTransaction(payload.command, privateKey)
const signablePayload = toMinaSignerFormat(payload.command)
const signed = minaClient.signTransaction(signablePayload, privateKey)
return SignedTransactionSchema.parse({
...signed,
data: toNodeApiFormat(signed.data),
})
}
throw new Error("Invalid transaction payload")
}
Expand Down
6 changes: 2 additions & 4 deletions packages/key-management/src/chains/Mina/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ import type {
SignedFields,
SignedMessage,
SignedTransaction,
TransactionPayload,
ZkAppCommandProperties,
TransactionOrZkAppCommandProperties,
} from "@mina-js/utils"
import type {
ChainSpecificPayload,
Expand Down Expand Up @@ -72,8 +71,7 @@ export type MinaSessionCredentials = {
}

export type MinaSignablePayload =
| TransactionPayload
| ZkAppCommandProperties
| TransactionOrZkAppCommandProperties
| Mina.MessageBody
| Mina.SignableFields
| Mina.CreatableNullifer
Expand Down
2 changes: 1 addition & 1 deletion packages/web-provider/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
},
"dependencies": {
"@mina-js/klesia-sdk": "0.1.0",
"@mina-js/providers": "0.1.0",
"@mina-js/providers": "0.1.2",
"@noble/hashes": "1.4.0",
"@palladco/key-management": "workspace:*",
"@palladco/mina-core": "workspace:*",
Expand Down
44 changes: 23 additions & 21 deletions packages/web-provider/src/vault-service/vault-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ import { useVault } from "@palladco/vault"
import dayjs from "dayjs"
import Client from "mina-signer"

import type { SignedTransaction } from "@mina-js/utils"
import { type SignedTransaction, toMinaSignerFormat } from "@mina-js/utils"
import type {
Payment,
StakeDelegation,
SignableData,
Signed,
SignedLegacy,
ZkappCommand,
} from "mina-signer/dist/node/mina-signer/src/types"
import type { IVaultService } from "./types"
Expand Down Expand Up @@ -79,30 +80,31 @@ export const createVaultService = (): IVaultService => {
const accounts = await getAccounts()
const publicKey = accounts?.[0]
if (!publicKey) throw new Error("Wallet is not initialized.")
const type = getTxType(sendable.input as never)
const signedData: StakeDelegation | Payment | ZkappCommand =
sendable.input as any
const type = getTxType(sendable.input)
const verifyTransactionParams =
"feePayer" in signedData
? {
signature: signedData.zkappCommand.feePayer.authorization,
publicKey: signedData.zkappCommand.feePayer.body.publicKey,
data: signedData,
}
: {
signature: (sendable as any).signature,
publicKey: signedData.from,
data: signedData,
}
"signature" in sendable
? ({
signature: sendable.signature,
publicKey: sendable.input.from,
data: sendable.input,
} as SignedLegacy<SignableData>)
: ({
signature: sendable.input.zkappCommand.feePayer.authorization,
publicKey: sendable.input.zkappCommand.feePayer.body.publicKey,
data: toMinaSignerFormat(sendable.input),
} as Signed<ZkappCommand>)
if (!signer.verifyTransaction(verifyTransactionParams))
throw new Error("Invalid transaction.")
const payload =
type === "zkapp"
? { input: sendable.input }
: { input: sendable.input, signature: (sendable as any).signature }
"signature" in sendable
? {
input: sendable.input,
signature: sendable.signature,
}
: { input: sendable.input }
const result = await klesia.request<"mina_sendTransaction">({
method: "mina_sendTransaction",
params: [payload as never, type],
params: [payload, type],
})
addPendingTransaction({
hash: result,
Expand Down
Loading