UNPKG

zkverifyjs

Version:

Submit proofs to zkVerify and query proof state with ease using our npm package.

50 lines (49 loc) 2.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.optimisticVerify = void 0; const extrinsic_1 = require("../extrinsic"); const format_1 = require("../format"); const helpers_1 = require("../../utils/helpers"); const optimisticVerify = async (connection, options, input) => { const { api } = connection; try { const transaction = buildTransaction(api, options, input); const selectedAccount = (0, helpers_1.getKeyringAccountIfAvailable)(connection, options.accountAddress); if (!selectedAccount) { throw new Error('No active session account available for optimisticVerify'); } const nonce = options.nonce ?? -1; await transaction.signAsync(selectedAccount, { nonce }); const submittableExtrinsicHex = transaction.toHex(); const dryRunResult = await api.rpc.system.dryRun(submittableExtrinsicHex); const { success, message } = await (0, helpers_1.interpretDryRunResponse)(api, dryRunResult.toHex()); return { success, message }; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); return { success: false, message: `Optimistic verification failed: ${errorMessage}`, }; } }; exports.optimisticVerify = optimisticVerify; /** * Builds a transaction from the provided input. * @param api - The Polkadot.js API instance. * @param options - Options for the proof. * @param input - Input for the verification (proofData or extrinsic). * @returns A SubmittableExtrinsic ready for dryRun. * @throws If input is invalid or cannot be formatted. */ const buildTransaction = (api, options, input) => { if ('proofData' in input && input.proofData) { const { proof, publicSignals, vk } = input.proofData; const formattedProofData = (0, format_1.format)(options.proofOptions, proof, publicSignals, vk, options.registeredVk); return (0, extrinsic_1.createSubmitProofExtrinsic)(api, options.proofOptions.proofType, formattedProofData, input.domainId); } if ('extrinsic' in input && input.extrinsic) { return (0, helpers_1.toSubmittableExtrinsic)(input.extrinsic, api); } throw new Error(`Invalid input provided. Expected either 'proofData' or 'extrinsic'. Received: ${JSON.stringify(input)}`); };