@moonwell-fi/moonwell-sdk
Version:
TypeScript Interface for Moonwell
88 lines • 5.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getUserVotingPowers = getUserVotingPowers;
const viem_1 = require("viem");
const index_js_1 = require("../../common/index.js");
const warnedNoViewsEnvs = new Set();
async function getUserVotingPowers(client, args) {
const { governanceToken, userAddress, blockNumber, snapshotTimestamp } = args;
const environments = (0, index_js_1.getEnvironmentsFromArgs)(client, args);
const tokenEnvironments = environments.flatMap((env) => {
if (env.custom?.governance?.token !== governanceToken) {
return [];
}
const views = env.contracts.views;
if (views === undefined) {
const key = `${env.chainId}:${governanceToken}`;
if (!warnedNoViewsEnvs.has(key)) {
warnedNoViewsEnvs.add(key);
console.warn(`[moonwell-sdk] getUserVotingPowers: skipping chainId=${env.chainId} for governanceToken=${governanceToken} — environment holds the token but has no views contract.`);
}
return [];
}
return [{ env, views }];
});
const perChainBlockNumbers = snapshotTimestamp !== undefined
? await Promise.all(tokenEnvironments.map(({ env }) => (0, index_js_1.getBlockNumberAtTimestamp)(env.publicClient, BigInt(snapshotTimestamp))))
: undefined;
const resolvedVotingPowers = await Promise.all(tokenEnvironments.map(async ({ env, views }, index) => {
const blockForChain = perChainBlockNumbers
? perChainBlockNumbers[index]
: blockNumber;
const votingPowers = await views.read.getUserVotingPower([userAddress], {
blockNumber: blockForChain,
});
return { env, votingPowers };
}));
return resolvedVotingPowers.map(({ env: environment, votingPowers }) => {
return {
chainId: environment.chainId,
claimsDelegates: votingPowers.claimsVotes.delegates,
claimsBalance: new index_js_1.Amount(votingPowers.claimsVotes.votingPower, 18),
claimsDelegated: new index_js_1.Amount(votingPowers.claimsVotes.delegatedVotingPower, 18),
claimsDelegatedOthers: new index_js_1.Amount(votingPowers.claimsVotes.delegatedVotingPower -
(votingPowers.claimsVotes.delegates === userAddress
? votingPowers.claimsVotes.votingPower
: 0n), 18),
claimsDelegatedSelf: new index_js_1.Amount(votingPowers.claimsVotes.delegates === userAddress
? votingPowers.claimsVotes.votingPower
: 0n, 18),
claimsUndelegated: new index_js_1.Amount(votingPowers.claimsVotes.delegates === viem_1.zeroAddress
? votingPowers.claimsVotes.votingPower
: 0n, 18),
tokenDelegates: votingPowers.tokenVotes.delegates,
tokenBalance: new index_js_1.Amount(votingPowers.tokenVotes.votingPower, 18),
tokenDelegated: new index_js_1.Amount(votingPowers.tokenVotes.delegatedVotingPower, 18),
tokenDelegatedOthers: new index_js_1.Amount(votingPowers.tokenVotes.delegatedVotingPower -
(votingPowers.tokenVotes.delegates === userAddress
? votingPowers.tokenVotes.votingPower
: 0n), 18),
tokenDelegatedSelf: new index_js_1.Amount(votingPowers.tokenVotes.delegates === userAddress
? votingPowers.tokenVotes.votingPower
: 0n, 18),
tokenUndelegated: new index_js_1.Amount(votingPowers.tokenVotes.delegates === viem_1.zeroAddress
? votingPowers.tokenVotes.votingPower
: 0n, 18),
stakingDelegated: new index_js_1.Amount(votingPowers.stakingVotes.delegatedVotingPower, 18),
totalDelegated: new index_js_1.Amount(votingPowers.claimsVotes.delegatedVotingPower +
votingPowers.tokenVotes.delegatedVotingPower +
votingPowers.stakingVotes.delegatedVotingPower, 18),
totalDelegatedOthers: new index_js_1.Amount(votingPowers.claimsVotes.delegatedVotingPower -
(votingPowers.claimsVotes.delegates === userAddress
? votingPowers.claimsVotes.votingPower
: 0n) +
(votingPowers.tokenVotes.delegatedVotingPower -
(votingPowers.tokenVotes.delegates === userAddress
? votingPowers.tokenVotes.votingPower
: 0n)), 18),
totalDelegatedSelf: new index_js_1.Amount((votingPowers.claimsVotes.delegates === userAddress
? votingPowers.claimsVotes.votingPower
: 0n) +
(votingPowers.tokenVotes.delegates === userAddress
? votingPowers.tokenVotes.votingPower
: 0n) +
votingPowers.stakingVotes.delegatedVotingPower, 18),
};
});
}
//# sourceMappingURL=getUserVotingPowers.js.map