Skip to content

Commit

Permalink
Add rewardsMap parsing to getHyperdriveConfig functions
Browse files Browse the repository at this point in the history
  • Loading branch information
DannyDelott committed Jan 3, 2025
1 parent e82430a commit efc8686
Show file tree
Hide file tree
Showing 11 changed files with 128 additions and 59 deletions.
5 changes: 3 additions & 2 deletions packages/hyperdrive-appconfig/src/appconfig/AppConfig.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { Address } from "abitype";
import { ChainConfig, ChainId } from "src/chains/chains";
import { HyperdriveConfig } from "src/hyperdrives/HyperdriveConfig";
import { AnyRewardKey } from "src/hyperdrives/rewards";
import { protocols } from "src/protocols";
import { RewardFunctionKey } from "src/rewards/rewards";
import { RewardResolverKey } from "src/rewards/rewards";
import { TokenConfig } from "src/tokens/types";
import { yieldSources } from "src/yieldSources/yieldSources";
import { ZapConfig } from "src/zaps/ZapsConfig";
Expand All @@ -18,5 +19,5 @@ export interface AppConfig {
protocols: typeof protocols;
yieldSources: typeof yieldSources;
zaps: Record<ChainId, ZapConfig>;
rewards: Record<string, RewardFunctionKey[]>;
rewards: Record<AnyRewardKey, RewardResolverKey[]>;
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
import { ReadHyperdrive } from "@delvtech/hyperdrive-viem";
import { HyperdriveConfig } from "src/hyperdrives/HyperdriveConfig";
import { AnyRewardKey } from "src/hyperdrives/rewards";
import { RewardResolverKey } from "src/rewards/rewards";
import { TokenConfig } from "src/tokens/types";
import { PublicClient } from "viem";

export interface HyperdriveConfigResolverResult {
hyperdriveConfig: HyperdriveConfig;
sharesTokenConfig?: TokenConfig;
baseTokenConfig?: TokenConfig;
rewards?: Record<AnyRewardKey, RewardResolverKey[]>;
}

export type HyperdriveConfigResolver = (
hyperdrive: ReadHyperdrive,
publicClient: PublicClient,
Expand All @@ -12,9 +21,4 @@ export type HyperdriveConfigResolver = (
* would timeout.
*/
earliestBlock?: bigint,
) => Promise<{
hyperdriveConfig: HyperdriveConfig;
sharesTokenConfig?: TokenConfig;
baseTokenConfig?: TokenConfig;
rewards?: string[];
}>;
) => Promise<HyperdriveConfigResolverResult>;
32 changes: 21 additions & 11 deletions packages/hyperdrive-appconfig/src/appconfig/getAppConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ import { getCbethHyperdrive } from "src/hyperdrives/cbeth/getCbethHyperdrive";
import { getCustomHyperdrive } from "src/hyperdrives/custom/getCustomHyperdrive";
import { getGnosisWstethHyperdrive } from "src/hyperdrives/gnosisWsteth/getGnosisWstethHyperdrive";
import { getMorphoHyperdrive } from "src/hyperdrives/morpho/getMorphoHyperdrive";
import { AnyRewardKey } from "src/hyperdrives/rewards";
import { getStethHyperdrive } from "src/hyperdrives/steth/getStethHyperdrive";
import { protocols } from "src/protocols";
import { RewardResolverKey } from "src/rewards/rewards";
import {
AERO_ICON_URL,
DAI_ICON_URL,
Expand Down Expand Up @@ -64,7 +66,7 @@ const hyperdriveKindResolvers: Record<
isBaseTokenWithdrawalEnabled: false,
isShareTokenWithdrawalEnabled: true,
},
rewards: {
rewardsMap: {
short: ["fetchLineaRewards"],
lp: ["fetchLineaRewards"],
},
Expand All @@ -84,7 +86,7 @@ const hyperdriveKindResolvers: Record<
isBaseTokenDepositEnabled: false,
isShareTokenDepositsEnabled: true,
},
rewards: {
rewardsMap: {
short: ["fetchLineaRewards"],
lp: ["fetchLineaRewards"],
},
Expand Down Expand Up @@ -134,7 +136,7 @@ const hyperdriveKindResolvers: Record<
isBaseTokenDepositEnabled: true,
isShareTokenDepositsEnabled: true,
},
rewards: {
rewardsMap: {
short: ["fetchEtherfiRewards"],
lp: ["fetchEtherfiRewards"],
},
Expand Down Expand Up @@ -218,7 +220,7 @@ const hyperdriveKindResolvers: Record<
isBaseTokenWithdrawalEnabled: true,
isShareTokenWithdrawalEnabled: true,
},
rewards: {
rewardsMap: {
short: ["fetchGyroscopeRewards"],
lp: ["fetchGyroscopeRewards"],
},
Expand Down Expand Up @@ -358,7 +360,7 @@ const hyperdriveKindResolvers: Record<
isShareTokenWithdrawalEnabled: true,
},
tokenPlaces: 4,
rewards: {
rewardsMap: {
short: ["fetchMorphoMwethRewards"],
lp: ["fetchMorphoMwethRewards"],
},
Expand All @@ -381,7 +383,7 @@ const hyperdriveKindResolvers: Record<
isShareTokenWithdrawalEnabled: true,
},
tokenPlaces: 2,
rewards: {
rewardsMap: {
short: ["fetchMorphoMwusdcRewards"],
lp: ["fetchMorphoMwusdcRewards"],
},
Expand All @@ -404,7 +406,7 @@ const hyperdriveKindResolvers: Record<
isShareTokenWithdrawalEnabled: true,
},
tokenPlaces: 2,
rewards: {
rewardsMap: {
short: ["fetchMorphoMweurcRewards"],
lp: ["fetchMorphoMweurcRewards"],
},
Expand Down Expand Up @@ -481,7 +483,7 @@ const hyperdriveKindResolvers: Record<
yieldSourceId: "aeroUsdcAero",
baseTokenPlaces: 9, // aero lp tokens are super small
baseTokenTags: [],
rewards: {
rewardsMap: {
short: ["fetchAeroRewards"],
lp: ["fetchAeroRewards"],
},
Expand Down Expand Up @@ -556,7 +558,7 @@ const hyperdriveKindResolvers: Record<
baseTokenIconUrl: USDC_ICON_URL,
baseTokenPlaces: 2,
yieldSourceId: "morphoCbethUsdc",
rewards: {
rewardsMap: {
short: ["fetchMorphoCbethUsdcRewards"],
lp: ["fetchMorphoCbethUsdcRewards"],
},
Expand All @@ -579,6 +581,7 @@ export async function getAppConfig({
earliestBlock?: bigint;
}): Promise<AppConfig> {
const tokens: TokenConfig[] = [];
let allRewards: Record<AnyRewardKey, RewardResolverKey[]> = {};
const chainId = publicClient.chain?.id as number;

// Get ReadHyperdrive instances from the registry to ensure
Expand All @@ -599,7 +602,7 @@ export async function getAppConfig({
throw new Error(`Missing resolver for hyperdrive kind: ${kind}.`);
}

const { hyperdriveConfig, baseTokenConfig, sharesTokenConfig } =
const { hyperdriveConfig, baseTokenConfig, sharesTokenConfig, rewards } =
await hyperdriveResolver(hyperdrive, publicClient, earliestBlock);

// Not all hyperdrives have a base or shares token, so only add them if
Expand All @@ -611,6 +614,13 @@ export async function getAppConfig({
tokens.push(sharesTokenConfig);
}

if (rewards) {
allRewards = {
...allRewards,
...rewards,
};
}

return hyperdriveConfig;
}),
);
Expand All @@ -625,7 +635,7 @@ export async function getAppConfig({
yieldSources,
chains,
zaps,
rewards: {},
rewards: allRewards,
};

return config;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { PoolConfig } from "@delvtech/hyperdrive-viem";
import { RewardFunctionKey } from "src/rewards/rewards";
import { RewardResolverKey } from "src/rewards/rewards";
import { YieldSourceId } from "src/yieldSources/types";
import { Address } from "viem";

Expand Down Expand Up @@ -42,9 +42,9 @@ export interface HyperdriveConfig {
};

rewards?: {
long?: RewardFunctionKey[];
short?: RewardFunctionKey[];
lp?: RewardFunctionKey[];
long?: RewardResolverKey[];
short?: RewardResolverKey[];
lp?: RewardResolverKey[];
};

poolConfig: PoolConfig;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import { ReadHyperdrive } from "@delvtech/hyperdrive-viem";
import { HyperdriveConfigResolverResult } from "src/appconfig/HyperdriveConfigResolver";
import { HyperdriveConfig } from "src/hyperdrives/HyperdriveConfig";
import { formatHyperdriveName } from "src/hyperdrives/formatHyperdriveName";
import {
HyperdriveRewardsMap,
parseHyperdriveRewardsMap,
} from "src/hyperdrives/rewards";
import { getTokenConfig } from "src/tokens/getTokenConfig";
import { TokenConfig } from "src/tokens/types";
import { YieldSourceId } from "src/yieldSources/types";
import { yieldSources } from "src/yieldSources/yieldSources";

Expand All @@ -12,18 +16,15 @@ export async function getAeroLpHyperdrive({
baseTokenTags,
baseTokenIconUrl,
baseTokenPlaces,
rewards,
rewardsMap,
}: {
hyperdrive: ReadHyperdrive;
yieldSourceId: YieldSourceId;
baseTokenTags: string[];
baseTokenIconUrl: string;
baseTokenPlaces: number;
rewards?: HyperdriveConfig["rewards"];
}): Promise<{
baseTokenConfig: TokenConfig;
hyperdriveConfig: HyperdriveConfig;
}> {
rewardsMap?: HyperdriveRewardsMap;
}): Promise<HyperdriveConfigResolverResult> {
const version = await hyperdrive.getVersion();
const poolConfig = await hyperdrive.getPoolConfig();

Expand Down Expand Up @@ -65,12 +66,13 @@ export async function getAeroLpHyperdrive({
poolConfig,
};

if (rewards) {
hyperdriveConfig.rewards = rewards;
}
const rewards = rewardsMap
? parseHyperdriveRewardsMap(hyperdrive.address, rewardsMap)
: undefined;

return {
baseTokenConfig,
hyperdriveConfig,
rewards,
};
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import { ReadHyperdrive } from "@delvtech/hyperdrive-viem";
import { HyperdriveConfigResolverResult } from "src/appconfig/HyperdriveConfigResolver";
import { HyperdriveConfig } from "src/hyperdrives/HyperdriveConfig";
import { formatHyperdriveName } from "src/hyperdrives/formatHyperdriveName";
import {
HyperdriveRewardsMap,
parseHyperdriveRewardsMap,
} from "src/hyperdrives/rewards";
import { getTokenConfig } from "src/tokens/getTokenConfig";
import { TokenConfig } from "src/tokens/types";
import { yieldSources } from "src/yieldSources/yieldSources";

type DepositOptions = HyperdriveConfig["depositOptions"];
Expand All @@ -19,7 +23,7 @@ interface GetHyperdriveConfigParams {
tokenPlaces: number;
sharesTokenTags?: string[];
baseTokenTags?: string[];
rewards?: HyperdriveConfig["rewards"];
rewardsMap?: HyperdriveRewardsMap;
}

export async function getCustomHyperdrive({
Expand All @@ -33,12 +37,8 @@ export async function getCustomHyperdrive({
tokenPlaces,
sharesTokenTags = [],
baseTokenTags = [],
rewards,
}: GetHyperdriveConfigParams): Promise<{
sharesTokenConfig: TokenConfig;
baseTokenConfig: TokenConfig;
hyperdriveConfig: HyperdriveConfig;
}> {
rewardsMap,
}: GetHyperdriveConfigParams): Promise<HyperdriveConfigResolverResult> {
const version = await hyperdrive.getVersion();
const poolConfig = await hyperdrive.getPoolConfig();
const sharesToken = await hyperdrive.getSharesToken();
Expand Down Expand Up @@ -84,13 +84,14 @@ export async function getCustomHyperdrive({
poolConfig,
};

if (rewards) {
hyperdriveConfig.rewards = rewards;
}
const rewards = rewardsMap
? parseHyperdriveRewardsMap(hyperdrive.address, rewardsMap)
: {};

return {
sharesTokenConfig,
baseTokenConfig,
hyperdriveConfig,
rewards,
};
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import { ReadHyperdrive } from "@delvtech/hyperdrive-viem";
import retry from "p-retry";
import { HyperdriveConfigResolverResult } from "src/appconfig/HyperdriveConfigResolver";
import { HyperdriveConfig } from "src/hyperdrives/HyperdriveConfig";
import { formatHyperdriveName } from "src/hyperdrives/formatHyperdriveName";
import {
HyperdriveRewardsMap,
parseHyperdriveRewardsMap,
} from "src/hyperdrives/rewards";
import { getTokenConfig } from "src/tokens/getTokenConfig";
import { TokenConfig } from "src/tokens/types";
import { YieldSourceId } from "src/yieldSources/types";
import { yieldSources } from "src/yieldSources/yieldSources";

Expand All @@ -13,18 +17,15 @@ export async function getMorphoHyperdrive({
baseTokenTags,
baseTokenIconUrl,
baseTokenPlaces,
rewards,
rewardsMap,
}: {
hyperdrive: ReadHyperdrive;
yieldSourceId: YieldSourceId;
baseTokenTags: string[];
baseTokenIconUrl: string;
baseTokenPlaces: number;
rewards?: HyperdriveConfig["rewards"];
}): Promise<{
baseTokenConfig: TokenConfig;
hyperdriveConfig: HyperdriveConfig;
}> {
rewardsMap?: HyperdriveRewardsMap;
}): Promise<HyperdriveConfigResolverResult> {
const version = await hyperdrive.getVersion();
const poolConfig = await hyperdrive.getPoolConfig();

Expand Down Expand Up @@ -78,12 +79,13 @@ export async function getMorphoHyperdrive({
poolConfig,
};

if (rewards) {
hyperdriveConfig.rewards = rewards;
}
const rewards = rewardsMap
? parseHyperdriveRewardsMap(hyperdrive.address, rewardsMap)
: undefined;

return {
baseTokenConfig,
hyperdriveConfig,
rewards,
};
}
Loading

0 comments on commit efc8686

Please sign in to comment.