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 2, 2025
1 parent 1af6e7d commit 5ffc4c1
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 } 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";

Expand All @@ -16,5 +17,5 @@ export interface AppConfig {
tokens: TokenConfig[];
protocols: typeof protocols;
yieldSources: typeof yieldSources;
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 @@ -63,7 +65,7 @@ const hyperdriveKindResolvers: Record<
isBaseTokenWithdrawalEnabled: false,
isShareTokenWithdrawalEnabled: true,
},
rewards: {
rewardsMap: {
short: ["fetchLineaRewards"],
lp: ["fetchLineaRewards"],
},
Expand All @@ -83,7 +85,7 @@ const hyperdriveKindResolvers: Record<
isBaseTokenDepositEnabled: false,
isShareTokenDepositsEnabled: true,
},
rewards: {
rewardsMap: {
short: ["fetchLineaRewards"],
lp: ["fetchLineaRewards"],
},
Expand Down Expand Up @@ -133,7 +135,7 @@ const hyperdriveKindResolvers: Record<
isBaseTokenDepositEnabled: true,
isShareTokenDepositsEnabled: true,
},
rewards: {
rewardsMap: {
short: ["fetchEtherfiRewards"],
lp: ["fetchEtherfiRewards"],
},
Expand Down Expand Up @@ -216,7 +218,7 @@ const hyperdriveKindResolvers: Record<
isBaseTokenWithdrawalEnabled: true,
isShareTokenWithdrawalEnabled: true,
},
rewards: {
rewardsMap: {
short: ["fetchGyroscopeRewards"],
lp: ["fetchGyroscopeRewards"],
},
Expand Down Expand Up @@ -356,7 +358,7 @@ const hyperdriveKindResolvers: Record<
isShareTokenWithdrawalEnabled: true,
},
tokenPlaces: 4,
rewards: {
rewardsMap: {
short: ["fetchMorphoMwethRewards"],
lp: ["fetchMorphoMwethRewards"],
},
Expand All @@ -379,7 +381,7 @@ const hyperdriveKindResolvers: Record<
isShareTokenWithdrawalEnabled: true,
},
tokenPlaces: 2,
rewards: {
rewardsMap: {
short: ["fetchMorphoMwusdcRewards"],
lp: ["fetchMorphoMwusdcRewards"],
},
Expand All @@ -402,7 +404,7 @@ const hyperdriveKindResolvers: Record<
isShareTokenWithdrawalEnabled: true,
},
tokenPlaces: 2,
rewards: {
rewardsMap: {
short: ["fetchMorphoMweurcRewards"],
lp: ["fetchMorphoMweurcRewards"],
},
Expand Down Expand Up @@ -479,7 +481,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 @@ -554,7 +556,7 @@ const hyperdriveKindResolvers: Record<
baseTokenIconUrl: USDC_ICON_URL,
baseTokenPlaces: 2,
yieldSourceId: "morphoCbethUsdc",
rewards: {
rewardsMap: {
short: ["fetchMorphoCbethUsdcRewards"],
lp: ["fetchMorphoCbethUsdcRewards"],
},
Expand All @@ -577,6 +579,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 @@ -597,7 +600,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 @@ -609,6 +612,13 @@ export async function getAppConfig({
tokens.push(sharesTokenConfig);
}

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

return hyperdriveConfig;
}),
);
Expand All @@ -622,7 +632,7 @@ export async function getAppConfig({
protocols,
yieldSources,
chains,
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,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 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 @@ -67,12 +68,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 5ffc4c1

Please sign in to comment.