UNPKG

@chainwayxyz/phase2cli

Version:

All-in-one interactive command-line for interfacing with zkSNARK Phase 2 Trusted Setup ceremonies

57 lines (49 loc) 2.5 kB
import { collection, doc, getDocs } from "firebase/firestore" import { ParticipantDocument, UserDocument, commonTerms, getAllCeremonies } from "@p0tion/actions" import theme from "../../lib/theme.js" import { bootstrapCommandExecutionAndServices } from "../../lib/services.js" import { showError } from "../../lib/errors.js" import { promptForCeremonySelection } from "../../lib/prompts.js" const listParticipants = async () => { try { const { firestoreDatabase } = await bootstrapCommandExecutionAndServices() const allCeremonies = await getAllCeremonies(firestoreDatabase) const selectedCeremony = await promptForCeremonySelection( allCeremonies, true, "Which ceremony would you like to see participants?" ) const docRef = doc(firestoreDatabase, commonTerms.collections.ceremonies.name, selectedCeremony.id) const participantsRef = collection(docRef, "participants") const participantsSnapshot = await getDocs(participantsRef) const participants = participantsSnapshot.docs.map( (participantDoc) => participantDoc.data() as ParticipantDocument ) const usersRef = collection(firestoreDatabase, "users") const usersSnapshot = await getDocs(usersRef) const users = usersSnapshot.docs.map((userDoc) => { const data = userDoc.data() as UserDocument return { id: userDoc.id, ...data } }) const participantDetails = participants .map((participant) => { const user = users.find((_user) => _user.id === participant.userId) if (!user) return null return { id: user.name, status: participant.status, contributionStep: participant.contributionStep, lastUpdated: new Date(participant.lastUpdated) } }) .filter((user) => user !== null) const participantsDone = participantDetails.filter((participant) => participant.status === "DONE") console.log(participantDetails) console.log(`${theme.text.underlined("Total participants:")} ${participantDetails.length}`) console.log(`${theme.text.underlined("Total participants finished:")} ${participantsDone.length}`) } catch (err: any) { showError(`Something went wrong: ${err.toString()}`, true) } process.exit(0) } export default listParticipants