UNPKG

@moonwell-fi/moonwell-sdk

Version:

TypeScript Interface for Moonwell

107 lines 4.25 kB
"use strict"; 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