UNPKG

@ardier16/q-js-sdk

Version:

Typescript Library to interact with Q System Contracts

105 lines 4.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseVotingInstance = void 0; const types_1 = require("../types"); const BaseContractInstance_1 = require("./BaseContractInstance"); /** * Voting interface to interact with Voting implementation contracts. * See [onchain documentation](@system-contracts-repo/@network/IVoting/) for more details. */ class BaseVotingInstance extends BaseContractInstance_1.BaseContractInstance { /** * Get all proposals in specific block diapason * @param fromBlock start block from which we get proposals * @param toBlock end block from which we get proposals * @returns proposals */ async getProposalIds(fromBlock = 0, toBlock = 'latest') { const proposalEvents = await this.instance.getPastEvents('ProposalCreated', { fromBlock, toBlock }); const proposalIds = proposalEvents.map((evt) => evt.returnValues._id); return proposalIds; } /** * Get proposal information * @param proposalId proposal id * @returns information about proposal */ async getProposalWithStatus(proposalId) { const p = await this.getProposal(proposalId); const status = await this.getStatus(proposalId); return { id: proposalId.toString(), ...p, status }; } /** * Get proposals by ids * @param proposalIds proposal ids * @returns proposals */ async getProposals(...proposalIds) { if (!proposalIds || proposalIds.length == 0) { proposalIds = await this.getProposalIds(); } const promises = proposalIds.map(async (id) => (await this.getProposalWithStatus(id))); return Promise.all(promises); } /** * Get proposal statistics * @param proposalId proposal id * @returns proposal statistics */ async getProposalStats(proposalId) { return await this.instance.methods.getProposalStats(proposalId).call(); } /** * Get proposal status * @param proposalId proposal id * @returns status of proposal */ async getStatus(proposalId) { const statusMethod = this.instance.methods['getStatus']; if (!statusMethod) throw Error('status not supported on this kind of voting'); return statusMethod(proposalId).call(); } mapStatus(rawStatus) { switch (rawStatus) { case types_1.ProposalStatus.NONE: return 'NONE'; case types_1.ProposalStatus.PENDING: return 'PENDING'; case types_1.ProposalStatus.REJECTED: return 'REJECTED'; case types_1.ProposalStatus.ACCEPTED: return 'ACCEPTED'; case types_1.ProposalStatus.PASSED: return 'PASSED'; case types_1.ProposalStatus.EXECUTED: return 'EXECUTED'; case types_1.ProposalStatus.OBSOLETE: return 'OBSOLETE'; case types_1.ProposalStatus.EXPIRED: return 'EXPIRED'; default: throw new Error(`cannot convert unknown proposal status ${rawStatus}`); } } /** * Vote for proposal * @param proposalId current proposal id * @param txOptions transaction options * @returns transaction receipt */ async voteFor(proposalId, txOptions) { return this.submitTransaction(this.instance.methods.voteFor(proposalId), txOptions); } /** * Vote against proposal * @param proposalId current proposal id * @param txOptions transaction options * @returns transaction receipt */ async voteAgainst(proposalId, txOptions) { return this.submitTransaction(this.instance.methods.voteAgainst(proposalId), txOptions); } /** * execute proposal * @param proposalId current proposal id * @param txOptions transaction options * @returns transaction receipt */ async execute(proposalId, txOptions) { return this.submitTransaction(this.instance.methods.execute(proposalId), txOptions); } } exports.BaseVotingInstance = BaseVotingInstance; //# sourceMappingURL=BaseVotingInstance.js.map