@vlayer/sdk 0.1.0-nightly-20241209-1e00031 → 0.1.0-nightly-20241210-34a8354

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,4 @@
1
+ import { VGetProofReceiptStatus, } from "./types/vlayer.js";
1
2
  import { prove, getProofReceipt } from "../prover.js";
2
3
  import { createExtensionWebProofProvider } from "../webProof/index.js";
3
4
  import { decodeFunctionResult, } from "viem";
@@ -12,6 +13,9 @@ async function getHash(vcall_response) {
12
13
  const result = await vcall_response;
13
14
  return result.result;
14
15
  }
16
+ async function sleep(ms) {
17
+ return new Promise((resolve) => setTimeout(resolve, ms));
18
+ }
15
19
  export const createVlayerClient = ({ url = "http://127.0.0.1:3000", webProofProvider = createExtensionWebProofProvider(), } = {
16
20
  url: "http://127.0.0.1:3000",
17
21
  webProofProvider: createExtensionWebProofProvider(),
@@ -33,19 +37,32 @@ export const createVlayerClient = ({ url = "http://127.0.0.1:3000", webProofProv
33
37
  resultHashMap.set(hash, [proverAbi, functionName]);
34
38
  return { hash };
35
39
  },
36
- waitForProvingResult: async ({ hash, }) => {
37
- const { result: { proof, evm_call_result }, } = await getProofReceipt({ hash }, url);
38
- const savedProvingData = resultHashMap.get(hash);
40
+ waitForProvingResult: async ({ hash, numberOfRetries = 120, sleepDuration = 1000, }) => {
41
+ const getProof = async () => {
42
+ for (let retry = 0; retry < numberOfRetries; retry++) {
43
+ const resp = await getProofReceipt(hash, url);
44
+ if (resp.result.status === VGetProofReceiptStatus.done) {
45
+ if (resp.result.data === undefined) {
46
+ throw new Error("No ZK proof returned from server for hash " + hash.hash);
47
+ }
48
+ return resp.result.data;
49
+ }
50
+ await sleep(sleepDuration);
51
+ }
52
+ throw new Error(`Timed out waiting for ZK proof generation after {numberOfRetries * sleepDuration}ms. Consider increasing numberOfRetries in waitForProvingResult`);
53
+ };
54
+ const data = await getProof();
55
+ const savedProvingData = resultHashMap.get(hash.hash);
39
56
  if (!savedProvingData) {
40
- throw new Error("No result found for hash " + hash);
57
+ throw new Error("No result found for hash " + hash.hash);
41
58
  }
42
59
  const [proverAbi, functionName] = savedProvingData;
43
60
  const result = dropEmptyProofFromArgs(decodeFunctionResult({
44
61
  abi: proverAbi,
45
- data: evm_call_result,
62
+ data: data?.evm_call_result,
46
63
  functionName,
47
64
  }));
48
- return [proof, ...result];
65
+ return [data?.proof, ...result];
49
66
  },
50
67
  proveWeb: async function ({ address, proverAbi, functionName, chainId, args, }) {
51
68
  const webProofPlaceholder = args[0];
@@ -28,11 +28,11 @@ function generateRandomHash() {
28
28
  return hash;
29
29
  }
30
30
  describe("Success zk-proving", () => {
31
- let hash;
31
+ let hashStr;
32
32
  let zkProvingSpy;
33
33
  let vlayer;
34
34
  beforeAll(() => {
35
- hash = generateRandomHash();
35
+ hashStr = generateRandomHash();
36
36
  const webProofProvider = createExtensionWebProofProvider();
37
37
  zkProvingSpy = vi.spyOn(webProofProvider, "notifyZkProvingStatus");
38
38
  vlayer = createVlayerClient({ webProofProvider });
@@ -41,7 +41,7 @@ describe("Success zk-proving", () => {
41
41
  fetchMocker.mockResponseOnce(() => {
42
42
  return {
43
43
  body: JSON.stringify({
44
- result: hash,
44
+ result: hashStr,
45
45
  }),
46
46
  };
47
47
  });
@@ -52,7 +52,7 @@ describe("Success zk-proving", () => {
52
52
  args: [],
53
53
  chainId: 42,
54
54
  });
55
- expect(result.hash).toBe(hash);
55
+ expect(result.hash).toBe(hashStr);
56
56
  expect(zkProvingSpy).toBeCalledTimes(2);
57
57
  expect(zkProvingSpy).toHaveBeenNthCalledWith(1, ZkProvingStatus.Proving);
58
58
  });
@@ -61,11 +61,13 @@ describe("Success zk-proving", () => {
61
61
  return {
62
62
  body: JSON.stringify({
63
63
  result: {
64
- proof: {},
64
+ status: "done",
65
+ data: {},
65
66
  },
66
67
  }),
67
68
  };
68
69
  });
70
+ const hash = { hash: hashStr };
69
71
  await vlayer.waitForProvingResult({ hash });
70
72
  expect(zkProvingSpy).toBeCalledTimes(2);
71
73
  expect(zkProvingSpy).toHaveBeenNthCalledWith(2, ZkProvingStatus.Done);
@@ -94,7 +96,7 @@ describe("Failed zk-proving", () => {
94
96
  args: [],
95
97
  chainId: 42,
96
98
  });
97
- await vlayer.waitForProvingResult(hash);
99
+ await vlayer.waitForProvingResult({ hash });
98
100
  }
99
101
  catch (e) {
100
102
  console.log("Error waiting for proving result", e);
@@ -38,9 +38,16 @@ export interface VCallResponse {
38
38
  export type VGetProofReceiptParams = {
39
39
  hash: Hex;
40
40
  };
41
+ export declare enum VGetProofReceiptStatus {
42
+ pending = "pending",
43
+ done = "done"
44
+ }
41
45
  export interface VGetProofReceiptResult {
42
- evm_call_result: Hex;
43
- proof: Proof;
46
+ status: VGetProofReceiptStatus;
47
+ data?: {
48
+ evm_call_result: Hex;
49
+ proof: Proof;
50
+ };
44
51
  }
45
52
  export interface VGetProofReceiptResponse {
46
53
  jsonrpc: string;
@@ -56,7 +63,11 @@ export type VlayerClient = {
56
63
  gasLimit?: number;
57
64
  args: ContractFunctionArgs<T, AbiStateMutability, F>;
58
65
  }) => Promise<BrandedHash<T, F>>;
59
- waitForProvingResult: <T extends Abi, F extends ContractFunctionName<T>>(hash: BrandedHash<T, F>) => Promise<ContractFunctionReturnType<T, AbiStateMutability, F>>;
66
+ waitForProvingResult: <T extends Abi, F extends ContractFunctionName<T>>(args: {
67
+ hash: BrandedHash<T, F>;
68
+ numberOfRetries?: number;
69
+ sleepDuration?: number;
70
+ }) => Promise<ContractFunctionReturnType<T, AbiStateMutability, F>>;
60
71
  proveWeb: <T extends Abi, F extends ContractFunctionName<T>>(args: {
61
72
  address: Hex;
62
73
  proverAbi: T;
@@ -1 +1,5 @@
1
- export {};
1
+ export var VGetProofReceiptStatus;
2
+ (function (VGetProofReceiptStatus) {
3
+ VGetProofReceiptStatus["pending"] = "pending";
4
+ VGetProofReceiptStatus["done"] = "done";
5
+ })(VGetProofReceiptStatus || (VGetProofReceiptStatus = {}));
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "types": "./dist/config/index.d.ts"
16
16
  }
17
17
  },
18
- "version": "0.1.0-nightly-20241209-1e00031",
18
+ "version": "0.1.0-nightly-20241210-34a8354",
19
19
  "scripts": {
20
20
  "build": "bun tsc && bun tsc-alias",
21
21
  "test:unit": "vitest --run",