cosmjs-util/packages/launchpad/src/lcdapi/distribution.ts
2020-07-28 14:54:38 +02:00

100 lines
3.6 KiB
TypeScript

/* eslint-disable @typescript-eslint/naming-convention */
import { Coin } from "../coins";
import { LcdClient } from "./lcdclient";
export interface RewardContainer {
readonly validator_address: string;
readonly reward: readonly Coin[] | null;
}
export interface DistributionDelegatorRewardsResponse {
readonly height: string;
readonly result: {
readonly rewards: readonly RewardContainer[] | null;
readonly total: readonly Coin[] | null;
};
}
export interface DistributionDelegatorRewardResponse {
readonly height: string;
readonly result: readonly Coin[];
}
export interface DistributionWithdrawAddressResponse {
readonly height: string;
readonly result: string;
}
export interface DistributionValidatorResponse {
readonly height: string;
readonly result: {
readonly operator_address: string;
readonly self_bond_rewards: readonly Coin[];
readonly val_commission: readonly Coin[];
};
}
export interface DistributionValidatorRewardsResponse {
readonly height: string;
readonly result: readonly Coin[];
}
export interface DistributionValidatorOutstandingRewardsResponse {
readonly height: string;
readonly result: readonly Coin[];
}
export interface DistributionParametersResponse {
readonly height: string;
readonly result: {
readonly community_tax: string;
readonly base_proposer_reward: string;
readonly bonus_proposer_reward: string;
readonly withdraw_addr_enabled: boolean;
};
}
export interface DistributionCommunityPoolResponse {
readonly height: string;
readonly result: readonly Coin[];
}
export interface DistributionExtension {
readonly distribution: {
readonly delegatorRewards: (delegatorAddress: string) => Promise<DistributionDelegatorRewardsResponse>;
readonly delegatorReward: (
delegatorAddress: string,
validatorAddress: string,
) => Promise<DistributionDelegatorRewardResponse>;
readonly withdrawAddress: (delegatorAddress: string) => Promise<DistributionWithdrawAddressResponse>;
readonly validator: (validatorAddress: string) => Promise<DistributionValidatorResponse>;
readonly validatorRewards: (validatorAddress: string) => Promise<DistributionValidatorRewardsResponse>;
readonly validatorOutstandingRewards: (
validatorAddress: string,
) => Promise<DistributionValidatorOutstandingRewardsResponse>;
readonly parameters: () => Promise<DistributionParametersResponse>;
readonly communityPool: () => Promise<DistributionCommunityPoolResponse>;
};
}
export function setupDistributionExtension(base: LcdClient): DistributionExtension {
return {
distribution: {
delegatorRewards: async (delegatorAddress: string) =>
base.get(`/distribution/delegators/${delegatorAddress}/rewards`),
delegatorReward: async (delegatorAddress: string, validatorAddress: string) =>
base.get(`/distribution/delegators/${delegatorAddress}/rewards/${validatorAddress}`),
withdrawAddress: async (delegatorAddress: string) =>
base.get(`/distribution/delegators/${delegatorAddress}/withdraw_address`),
validator: async (validatorAddress: string) => base.get(`/distribution/validators/${validatorAddress}`),
validatorRewards: async (validatorAddress: string) =>
base.get(`/distribution/validators/${validatorAddress}/rewards`),
validatorOutstandingRewards: async (validatorAddress: string) =>
base.get(`/distribution/validators/${validatorAddress}/outstanding_rewards`),
parameters: async () => base.get(`/distribution/parameters`),
communityPool: async () => base.get(`/distribution/community_pool`),
},
};
}