UNPKG

@nucypher/shared

Version:

## [`nucypher/taco-web`](../../README.md)

84 lines 4.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DkgCoordinatorAgent = exports.DkgRitualState = void 0; const nucypher_contracts_1 = require("@nucypher/nucypher-contracts"); const nucypher_core_1 = require("@nucypher/nucypher-core"); const utils_1 = require("../../utils"); const const_1 = require("../const"); const ethers_typechain_1 = require("../ethers-typechain"); var DkgRitualState; (function (DkgRitualState) { DkgRitualState[DkgRitualState["NON_INITIATED"] = 0] = "NON_INITIATED"; DkgRitualState[DkgRitualState["DKG_AWAITING_TRANSCRIPTS"] = 1] = "DKG_AWAITING_TRANSCRIPTS"; DkgRitualState[DkgRitualState["DKG_AWAITING_AGGREGATIONS"] = 2] = "DKG_AWAITING_AGGREGATIONS"; DkgRitualState[DkgRitualState["DKG_TIMEOUT"] = 3] = "DKG_TIMEOUT"; DkgRitualState[DkgRitualState["DKG_INVALID"] = 4] = "DKG_INVALID"; DkgRitualState[DkgRitualState["ACTIVE"] = 5] = "ACTIVE"; DkgRitualState[DkgRitualState["EXPIRED"] = 6] = "EXPIRED"; })(DkgRitualState || (exports.DkgRitualState = DkgRitualState = {})); class DkgCoordinatorAgent { static async getParticipants(provider, domain, ritualId, maxParticipants) { const coordinator = await this.connectReadOnly(provider, domain); const participants = await coordinator['getParticipants(uint32,uint256,uint256,bool)'](ritualId, 0, maxParticipants, false); return participants.map((participant) => { return { provider: participant.provider, aggregated: participant.aggregated, decryptionRequestStaticKey: nucypher_core_1.SessionStaticKey.fromBytes((0, utils_1.fromHexString)(participant.decryptionRequestStaticKey)), }; }); } static async initializeRitual(provider, signer, domain, providers, authority, duration, feeModel, accessController) { const coordinator = await this.connectReadWrite(provider, domain, signer); const tx = await coordinator.initiateRitual(feeModel, providers, authority, duration, accessController); const txReceipt = await tx.wait(const_1.DEFAULT_WAIT_N_CONFIRMATIONS); const [ritualStartEvent] = txReceipt.events ?? []; if (!ritualStartEvent) { throw new Error('Ritual start event not found'); } return ritualStartEvent.args?.ritualId; } static async getRitual(provider, domain, ritualId) { const coordinator = await this.connectReadOnly(provider, domain); return await coordinator.rituals(ritualId); } static async getRitualState(provider, domain, ritualId) { const coordinator = await this.connectReadOnly(provider, domain); return await coordinator.getRitualState(ritualId); } static async onRitualEndEvent(provider, domain, ritualId, callback) { const coordinator = await this.connectReadOnly(provider, domain); // We leave `initiator` undefined because we don't care who the initiator is // We leave `successful` undefined because we don't care if the ritual was successful const eventFilter = coordinator.filters.EndRitual(ritualId, undefined); coordinator.once(eventFilter, (_ritualId, successful) => { callback(successful); }); } static async getRitualIdFromPublicKey(provider, domain, dkgPublicKey) { const coordinator = await this.connectReadOnly(provider, domain); const dkgPublicKeyBytes = dkgPublicKey.toBytes(); const pointStruct = { word0: dkgPublicKeyBytes.slice(0, 32), word1: dkgPublicKeyBytes.slice(32, 48), }; return await coordinator.getRitualIdFromPublicKey(pointStruct); } static async isEncryptionAuthorized(provider, domain, ritualId, thresholdMessageKit) { const coordinator = await this.connectReadOnly(provider, domain); return await coordinator.isEncryptionAuthorized(ritualId, thresholdMessageKit.acp.authorization, thresholdMessageKit.ciphertextHeader.toBytes()); } static async connectReadOnly(provider, domain) { return await this.connect(provider, domain); } static async connectReadWrite(provider, domain, signer) { return await this.connect(provider, domain, signer); } static async connect(provider, domain, signer) { const network = await provider.getNetwork(); const contractAddress = (0, nucypher_contracts_1.getContract)(domain, network.chainId, 'Coordinator'); return ethers_typechain_1.Coordinator__factory.connect(contractAddress, signer ?? provider); } } exports.DkgCoordinatorAgent = DkgCoordinatorAgent; //# sourceMappingURL=coordinator.js.map