A package that manages community voting strategies for Prop House
yarn
yarn build
import { getVotingPower } from '@prophouse/communities';
const votes = await getVotingPower(address, communityAddress, provider, blockTag);
Strategies can be found in the strategies/
directory. A strategy is a function that returns a function of Strategy
type. Put another way, custom strategies are functions that return the implementation of the base Strategy
type.
// base Strategy type
export type Strategy = (
userAddress: string,
communityAddress: string,
blockTag: number,
provider: Provider,
) => Promise<number>;
// example strategy
export const myCustomStrategy = (optionalParams: string): Strategy => {
return async (
userAddress: string
communityAddress: string,
blockTag: number,
provider: Provider,
) => {
// my custom implementation
return numVotesForAddress
};
};
- Strategies may add additional parameters particular to the community (optional)
- Strategies may use the ethers.js
Provider
to make calls on-chain - Strategies must return a
Promise<number>
denoting the number of votes theuserAddress
has forcommunityAddress
at snapshot blockblockTag
.
The balanceOfErc20
strategy requires two additional parameters (decimals
and multiplier
). It uses said parameters to implement and return a function of Strategy
type.
export const balanceOfErc20 = (decimals: number, multiplier: number = 1): Strategy => {
return async (
userAddress: string,
communityAddress: string,
blockTag: number,
provider: Provider,
) => {
const contract = new Contract(communityAddress, BalanceOfABI, provider);
const balance = await contract.balanceOf(userAddress, { blockTag: parseBlockTag(blockTag) });
return new BigNumber(formatUnits(balance, decimals).toString()).times(multiplier).toNumber();
};
};