@ardier16/q-js-sdk
Version:
Typescript Library to interact with Q System Contracts
105 lines • 4.08 kB
JavaScript
;
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