Skip to content

Commit ae15f92

Browse files
feat: add zkApp command schema (#13)
* feat: add zkApp command schema * feat: add converters for zkappCommand between Node API and mina-signer formats
1 parent 124b0ee commit ae15f92

File tree

13 files changed

+587
-59
lines changed

13 files changed

+587
-59
lines changed

apps/docs/src/components/test-zkapp.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,9 @@ export const TestZkApp = () => {
201201
},
202202
},
203203
feePayer: {
204-
feePayer: accounts[0],
204+
publicKey: accounts[0],
205205
fee: transactionBody.fee,
206206
nonce: transactionBody.nonce,
207-
memo: transactionBody.memo,
208207
},
209208
};
210209
const { result } = await provider.request({

apps/docs/src/pages/connect/wallet-interface.mdx

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,24 @@ const { result } = await provider.request<'mina_signTransaction'>({
126126
method: 'mina_signTransaction',
127127
params: [{
128128
command: {
129-
zkappCommand: {},
129+
zkappCommand: {
130+
accountUpdates: [],
131+
memo: 'E4YM2vTHhWEg66xpj52JErHUBU4pZ1yageL4TVDDpTTSsv8mK6YaH',
132+
feePayer: {
133+
body: {
134+
publicKey: 'B62qmWKtvNQTtUqo1LxfEEDLyWMg59cp6U7c4uDC7aqgaCEijSc3Hx5',
135+
fee: '100000000',
136+
validUntil: '100000',
137+
nonce: '1',
138+
},
139+
authorization: '',
140+
},
141+
},
130142
feePayer: {
131-
feePayer: 'B62qmWKtvNQTtUqo1LxfEEDLyWMg59cp6U7c4uDC7aqgaCEijSc3Hx5',
143+
publicKey: 'B62qmWKtvNQTtUqo1LxfEEDLyWMg59cp6U7c4uDC7aqgaCEijSc3Hx5',
132144
fee: '100000000',
145+
validUntil: '100000',
133146
nonce: '1',
134-
memo: 'Hello, Mina!',
135147
}
136148
}
137149
}]
@@ -175,7 +187,23 @@ const store = createStore()
175187
const { provider } = store.getProviders()[0]
176188
const { result } = await provider.request<'mina_sendTransaction'>({
177189
method: 'mina_sendTransaction',
178-
params: [{ input: {}, signature: { field: 'xyz', scalar: 'xyz' } }, 'payment']
190+
params: [
191+
{
192+
input: {
193+
from: "B62qmWKtvNQTtUqo1LxfEEDLyWMg59cp6U7c4uDC7aqgaCEijSc3Hx5",
194+
to: "B62qnVUL6A53E4ZaGd3qbTr6RCtEZYTu3kTijVrrquNpPo4d3MuJ3nb",
195+
amount: "3000000000",
196+
fee: "100000000",
197+
memo: "Hello from MinaJS!",
198+
nonce: "0",
199+
},
200+
signature: {
201+
field: 'xyz',
202+
scalar: 'xyz'
203+
}
204+
},
205+
'payment'
206+
]
179207
})
180208
```
181209

bun.lockb

25.7 KB
Binary file not shown.

packages/accounts/src/accounts/__snapshots__/private-key-to-account.spec.ts.snap

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,26 +59,25 @@ exports[`signs a zkapp command 1`] = `
5959
"data": {
6060
"feePayer": {
6161
"fee": "100000000",
62-
"feePayer": "B62qmWKtvNQTtUqo1LxfEEDLyWMg59cp6U7c4uDC7aqgaCEijSc3Hx5",
63-
"memo": "Test",
6462
"nonce": "0",
65-
"validUntil": "null",
63+
"publicKey": "B62qmWKtvNQTtUqo1LxfEEDLyWMg59cp6U7c4uDC7aqgaCEijSc3Hx5",
64+
"validUntil": null,
6665
},
6766
"zkappCommand": {
6867
"accountUpdates": [],
6968
"feePayer": {
70-
"authorization": "7mXWqNfmqMTM5uSCS2xLfsRBLTjGZKTtpEakdsrdQz1EUgYXogSvKxxtfGbBkqQ2mZRMA3uPAM8riaCF56pkqpZBLr2kNBLa",
69+
"authorization": "7mWy2iLxnZaVmGtCAwVs1EQu8TCdjbSQjQVvUtDFmB9zaiYVet61cN7jDnd5BBqUupQup159H32CV8xAdRc4By5fXLT1T1qi",
7170
"body": {
7271
"fee": "100000000",
7372
"nonce": "0",
7473
"publicKey": "B62qmWKtvNQTtUqo1LxfEEDLyWMg59cp6U7c4uDC7aqgaCEijSc3Hx5",
7574
"validUntil": null,
7675
},
7776
},
78-
"memo": "E4YVT4x3A9rUhmjkjGn8ZYBLZn7zK4cfvnMtBYZFdWkg37n2s3nrP",
77+
"memo": "E4YM2vTHhWEg66xpj52JErHUBU4pZ1yageL4TVDDpTTSsv8mK6YaH",
7978
},
8079
},
8180
"publicKey": "B62qmWKtvNQTtUqo1LxfEEDLyWMg59cp6U7c4uDC7aqgaCEijSc3Hx5",
82-
"signature": "7mXWqNfmqMTM5uSCS2xLfsRBLTjGZKTtpEakdsrdQz1EUgYXogSvKxxtfGbBkqQ2mZRMA3uPAM8riaCF56pkqpZBLr2kNBLa",
81+
"signature": "7mWy2iLxnZaVmGtCAwVs1EQu8TCdjbSQjQVvUtDFmB9zaiYVet61cN7jDnd5BBqUupQup159H32CV8xAdRc4By5fXLT1T1qi",
8382
}
8483
`;

packages/accounts/src/accounts/private-key-to-account.spec.ts

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -37,28 +37,28 @@ it("signs a zkapp command", async () => {
3737
const account = privateKeyToAccount({
3838
privateKey: Test.accounts[0].privateKey,
3939
});
40-
const command = {
41-
zkappCommand: {
42-
accountUpdates: [],
43-
memo: "E4YM2vTHhWEg66xpj52JErHUBU4pZ1yageL4TVDDpTTSsv8mK6YaH",
44-
feePayer: {
45-
body: {
46-
publicKey: "B62qmWKtvNQTtUqo1LxfEEDLyWMg59cp6U7c4uDC7aqgaCEijSc3Hx5",
47-
fee: "100000000",
48-
validUntil: "100000",
49-
nonce: "1",
40+
const signedTransaction = await account.signTransaction({
41+
command: {
42+
zkappCommand: {
43+
accountUpdates: [],
44+
memo: "E4YM2vTHhWEg66xpj52JErHUBU4pZ1yageL4TVDDpTTSsv8mK6YaH",
45+
feePayer: {
46+
body: {
47+
publicKey:
48+
"B62qmWKtvNQTtUqo1LxfEEDLyWMg59cp6U7c4uDC7aqgaCEijSc3Hx5",
49+
fee: "100000000",
50+
nonce: "0",
51+
},
52+
authorization: "",
5053
},
51-
authorization: "",
54+
},
55+
feePayer: {
56+
publicKey: "B62qmWKtvNQTtUqo1LxfEEDLyWMg59cp6U7c4uDC7aqgaCEijSc3Hx5",
57+
fee: "100000000",
58+
nonce: "0",
5259
},
5360
},
54-
feePayer: {
55-
feePayer: "B62qmWKtvNQTtUqo1LxfEEDLyWMg59cp6U7c4uDC7aqgaCEijSc3Hx5",
56-
fee: "100000000",
57-
nonce: "0",
58-
memo: "Test",
59-
},
60-
};
61-
const signedTransaction = await account.signTransaction({ command });
61+
});
6262
expect(signedTransaction).toMatchSnapshot();
6363
});
6464

packages/accounts/src/accounts/private-key-to-account.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
SignedMessageSchema,
55
SignedTransactionSchema,
66
} from "@mina-js/utils";
7+
import { toMinaSignerFormat, toNodeApiFormat } from "@mina-js/utils";
78
import MinaSigner from "mina-signer";
89
import type { PrivateKeyAccount } from "../types";
910
import { toAccount } from "./to-account";
@@ -35,9 +36,12 @@ export function privateKeyToAccount({
3536
client.signTransaction(signable.transaction, privateKey),
3637
);
3738
}
38-
return SignedTransactionSchema.parse(
39-
client.signTransaction(signable.command as never, privateKey),
40-
);
39+
const signablePayload = toMinaSignerFormat(signable.command);
40+
const signed = client.signTransaction(signablePayload, privateKey);
41+
return SignedTransactionSchema.parse({
42+
...signed,
43+
data: toNodeApiFormat(signed.data),
44+
});
4145
},
4246
async createNullifier({ message }) {
4347
return NullifierSchema.parse(

packages/klesia-utils/src/handle-json-rpc-request.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { PublicKeySchema } from "@mina-js/utils";
1+
import { PublicKeySchema, TokenIdSchema } from "@mina-js/utils";
22
import { match } from "ts-pattern";
3-
import { z } from "zod";
43
import { buildResponse } from "./build-response";
54
import { mina } from "./methods/mina";
65
import { getNodeClient } from "./node";
@@ -32,7 +31,7 @@ export async function handleJsonRpcRequest(
3231
const [publicKey, tokenId] = params;
3332
const result = await mina(client).getBalance({
3433
publicKey: PublicKeySchema.parse(publicKey),
35-
tokenId: tokenId !== undefined ? z.string().parse(tokenId) : "1",
34+
tokenId: tokenId !== undefined ? TokenIdSchema.parse(tokenId) : "1",
3635
});
3736
return buildResponse({ result });
3837
},
@@ -64,7 +63,7 @@ export async function handleJsonRpcRequest(
6463
const [publicKey, tokenId] = params;
6564
const result = await mina(client).getAccount({
6665
publicKey: PublicKeySchema.parse(publicKey),
67-
tokenId: tokenId !== undefined ? z.string().parse(tokenId) : "1",
66+
tokenId: tokenId !== undefined ? TokenIdSchema.parse(tokenId) : "1",
6867
});
6968
return buildResponse({ result });
7069
},

0 commit comments

Comments
 (0)