zkverifyjs
Version:
Submit proofs to zkVerify and query proof state with ease using our npm package.
43 lines • 1.87 kB
JavaScript
import { EventEmitter } from 'events';
import { handleTransaction } from "../../utils/transactions/index.js";
import { extractErrorMessage, getProofPallet, getProofProcessor, getSelectedAccount } from "../../utils/helpers/index.js";
import { TransactionType, ZkVerifyEvents } from "../../enums.js";
export async function registerVk(connection, options, verificationKey) {
const {
api
} = connection;
const emitter = new EventEmitter();
const transactionResult = new Promise((resolve, reject) => {
(async () => {
try {
const processor = await getProofProcessor(options.proofOptions.proofType);
if (!processor) {
throw new Error(`Unsupported proof type: ${options.proofOptions.proofType}`);
}
if (!verificationKey || verificationKey === '') {
throw new Error('verificationKey cannot be null, undefined, or an empty string');
}
const formattedVk = processor.formatVk(verificationKey, options.proofOptions);
const pallet = getProofPallet(options.proofOptions.proofType);
if (!pallet) {
throw new Error(`Unsupported proof type: ${options.proofOptions.proofType}`);
}
const selectedAccount = getSelectedAccount(connection, options.accountAddress);
const extrinsic = api.tx[pallet].registerVk(formattedVk);
emitter.once(ZkVerifyEvents.ErrorEvent, err => {
reject(new Error(extractErrorMessage(err)));
});
const result = await handleTransaction(api, extrinsic, selectedAccount, undefined, emitter, options, TransactionType.VKRegistration);
emitter.removeAllListeners();
resolve(result);
} catch (err) {
emitter.removeAllListeners();
reject(new Error(extractErrorMessage(err)));
}
})();
});
return {
events: emitter,
transactionResult
};
}