@moonwell-fi/moonwell-sdk
Version:
TypeScript Interface for Moonwell
107 lines • 4.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getProposal = getProposal;
const chains_1 = require("viem/chains");
const index_js_1 = require("../../../common/index.js");
const governor_api_client_js_1 = require("../governor-api-client.js");
const common_js_1 = require("./common.js");
async function getProposal(client, args) {
const { proposalId } = args;
const environment = (0, index_js_1.getEnvironmentFromArgs)(client, args);
if (!environment) {
return undefined;
}
if (environment.chainId !== chains_1.moonbeam.id &&
environment.chainId !== chains_1.moonriver.id) {
return undefined;
}
try {
if (environment.chainId === chains_1.moonbeam.id) {
return await getMoonbeamProposal(environment, proposalId);
}
else {
return await getMoonriverProposal(environment, proposalId);
}
}
catch (error) {
console.error(`[getProposal] Error fetching proposal ${proposalId}:`, error);
return undefined;
}
}
async function getMoonbeamProposal(governanceEnvironment, proposalId) {
const apiProposalId = `${proposalId}`;
const apiProposal = await (0, governor_api_client_js_1.fetchProposal)(governanceEnvironment, apiProposalId);
const formattedData = (0, common_js_1.formatApiProposalData)(apiProposal);
const onChainDataList = await (0, common_js_1.getProposalsOnChainData)([apiProposal], governanceEnvironment);
const onChainData = onChainDataList[0];
const isMultichain = (0, common_js_1.isMultichainProposal)(apiProposal.targets);
let proposalState = onChainData.state;
const now = Math.floor(Date.now() / 1000);
if (proposalState === 0 &&
now >= apiProposal.votingStartTime &&
now <= apiProposal.votingEndTime) {
proposalState = 1;
}
if (formattedData.executed) {
proposalState = 7;
}
else if (isMultichain &&
onChainData.votesCollected &&
now > apiProposal.votingEndTime &&
proposalState < 5) {
proposalState = 5;
}
const proposal = {
id: apiProposal.proposalId,
chainId: apiProposal.chainId,
proposalId: apiProposal.proposalId,
proposer: apiProposal.proposer,
eta: onChainData.eta,
startTimestamp: apiProposal.votingStartTime,
endTimestamp: apiProposal.votingEndTime,
startBlock: Number(apiProposal.blockNumber),
forVotes: formattedData.forVotes,
againstVotes: formattedData.againstVotes,
abstainVotes: formattedData.abstainVotes,
totalVotes: formattedData.totalVotes,
canceled: formattedData.canceled,
executed: formattedData.executed,
quorum: new index_js_1.Amount(onChainData.quorum, 18),
state: proposalState,
title: formattedData.title,
subtitle: formattedData.subtitle,
description: apiProposal.description,
targets: apiProposal.targets,
calldatas: apiProposal.calldatas,
signatures: [],
stateChanges: formattedData.stateChanges,
environment: governanceEnvironment,
};
if (isMultichain) {
proposal.multichain = {
id: apiProposal.proposalId,
votesCollected: onChainData.votesCollected,
};
}
return proposal;
}
async function getMoonriverProposal(governanceEnvironment, proposalId) {
const [_proposals, _xcProposals, _extendedDatas] = await Promise.all([
(0, common_js_1.getProposalData)({ environment: governanceEnvironment, id: proposalId }),
(0, common_js_1.getCrossChainProposalData)({
environment: governanceEnvironment,
id: proposalId,
}),
(0, common_js_1.getExtendedProposalData)({
environment: governanceEnvironment,
id: proposalId,
}),
]);
const proposals = [..._proposals, ..._xcProposals];
proposals.forEach((proposal) => {
proposal.environment = governanceEnvironment;
});
(0, common_js_1.appendProposalExtendedData)(proposals, _extendedDatas);
return proposals.find((p) => p.proposalId === proposalId || p.id === proposalId);
}
//# sourceMappingURL=getProposal.js.map