UNPKG

zkverifyjs

Version:

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

142 lines 5.53 kB
import { TransactionStatus, TransactionType, ZkVerifyEvents, } from '../../../enums.js'; import { handleTransactionEvents } from '../events/index.js'; import { safeEmit } from '../../helpers/index.js'; import { handleError } from '../errors/index.js'; /** * Handles "In Block" transaction updates. */ export const handleInBlock = async (api, events, transactionInfo, emitter, transactionType) => { if (transactionInfo.status === TransactionStatus.Error) return; transactionInfo.status = TransactionStatus.InBlock; const updatedTransactionInfo = handleTransactionEvents(api, events, transactionInfo, emitter, transactionType); Object.assign(transactionInfo, updatedTransactionInfo); safeEmit(emitter, ZkVerifyEvents.IncludedInBlock, transactionInfo); }; /** * Handles "Finalized" transaction updates. */ export const handleFinalized = async (api, transactionInfo, dispatchError, emitter, transactionType) => { if (transactionInfo.status === TransactionStatus.Error) return; if (dispatchError) { handleError(emitter, api, transactionInfo, dispatchError); return; } transactionInfo.status = TransactionStatus.Finalized; switch (transactionType) { case TransactionType.Verify: { const info = transactionInfo; const hasDomainId = !!info.domainId; const hasAggregationId = !!info.aggregationId; if (!hasDomainId || hasAggregationId) { safeEmit(emitter, ZkVerifyEvents.Finalized, info); } else { safeEmit(emitter, ZkVerifyEvents.ErrorEvent, { ...info, error: 'Finalized but no aggregation ID found.', }); } break; } case TransactionType.BatchVerify: { const info = transactionInfo; if (typeof info.batchCount === 'number' && info.batchCount > 0) { safeEmit(emitter, ZkVerifyEvents.Finalized, info); } else { safeEmit(emitter, ZkVerifyEvents.ErrorEvent, { ...info, error: 'Finalized but batchCount is missing or invalid.', }); } break; } case TransactionType.VKRegistration: { const info = transactionInfo; if (info.statementHash) { safeEmit(emitter, ZkVerifyEvents.Finalized, info); } else { safeEmit(emitter, ZkVerifyEvents.ErrorEvent, { ...info, error: 'Finalized but no statement hash found.', }); } break; } case TransactionType.DomainRegistration: { const info = transactionInfo; if (info.domainId !== undefined) { safeEmit(emitter, ZkVerifyEvents.NewDomain, { domainId: info.domainId, }); safeEmit(emitter, ZkVerifyEvents.Finalized, info); } else { safeEmit(emitter, ZkVerifyEvents.ErrorEvent, { ...info, error: 'Finalized but no domain ID found.', }); } break; } case TransactionType.DomainHold: case TransactionType.DomainUnregister: { const info = transactionInfo; if (info.domainState !== undefined) { safeEmit(emitter, ZkVerifyEvents.DomainStateChanged, { domainId: info.domainId, domainState: info.domainState, }); safeEmit(emitter, ZkVerifyEvents.Finalized, info); } else { safeEmit(emitter, ZkVerifyEvents.ErrorEvent, { ...info, error: 'Finalized but no domain state returned.', }); } break; } case TransactionType.DomainRemoveSubmitters: { const info = transactionInfo; if (info.domainState !== undefined) { safeEmit(emitter, ZkVerifyEvents.DomainStateChanged, { domainId: info.domainId, domainState: info.domainState, }); } safeEmit(emitter, ZkVerifyEvents.Finalized, transactionInfo); break; } case TransactionType.DomainAddSubmitters: { safeEmit(emitter, ZkVerifyEvents.Finalized, transactionInfo); break; } case TransactionType.Aggregate: { const info = transactionInfo; if (info.domainId !== undefined || info.aggregationId !== undefined || info.receipt !== undefined) { safeEmit(emitter, ZkVerifyEvents.Finalized, info); } else { const missingFields = ['domainId', 'aggregationId', 'receipt'] .filter((key) => info[key] === undefined) .join(', '); safeEmit(emitter, ZkVerifyEvents.ErrorEvent, { ...info, error: `Finalized but missing fields: ${missingFields}`, }); } break; } default: { console.warn('Unknown transaction type finalized:', transactionType); break; } } }; //# sourceMappingURL=index.js.map