@dydxfoundation/governance
Version:
dYdX governance smart contracts
49 lines (48 loc) • 1.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeGetSortedProposalVotesQuery = exports.getSortedProposalVotesQuery = void 0;
const utils_1 = require("ethers/lib/utils");
const getSortedProposalVotesQuery = (proposalId, support, limit) => {
if (limit <= 0 || limit > 1000) {
throw new Error('The limit parameter must be between 0 and 1000 (exclusive).');
}
return `query {
proposalVotes(first: ${limit}, where: {
support: ${support},
proposal: "${proposalId}",
}, orderBy:votingPower, orderDirection:desc) {
proposal {
id
}
user {
id
}
votingPower
}
}`;
};
exports.getSortedProposalVotesQuery = getSortedProposalVotesQuery;
const executeGetSortedProposalVotesQuery = async (client, proposalId, support, limit) => {
const query = (0, exports.getSortedProposalVotesQuery)(proposalId, support, limit);
const queryResult = await client.query(query).toPromise();
if (!queryResult.data) {
throw new Error(`Invalid GraphQL query ${query}`);
}
// assume query executed successfully if `data` is defined and is formatted correctly.
// If not, error will be thrown below.
const topVotes = [];
queryResult.data.proposalVotes.forEach((vote) => {
var _a;
if (!((_a = vote === null || vote === void 0 ? void 0 : vote.user) === null || _a === void 0 ? void 0 : _a.id) || !(vote === null || vote === void 0 ? void 0 : vote.votingPower)) {
throw new Error(`
Vote object returned from subgraph malformed. ProposalId: ${proposalId}, support: ${support}, limit: ${limit}.`);
}
topVotes.push({
userAddress: vote.user.id,
votingPower: (0, utils_1.formatEther)(vote.votingPower),
support,
});
});
return topVotes;
};
exports.executeGetSortedProposalVotesQuery = executeGetSortedProposalVotesQuery;