@admin-jigsaw/jigsaw-sdk
Version:
Returns predefined data for Jigsaw platform and exposes functionality to retrieve the necessary data
132 lines (131 loc) • 5.96 kB
JavaScript
import { zeroAddress } from "viem";
import { PROTOCOLS_DATA } from "../../strategiesSharedConstants";
import { COLLATERALS_ETHEREUM } from "./coinsConstants";
// One strategy per collateral
export const AAVE_STRATEGIES_ETHEREUM = {
[COLLATERALS_ETHEREUM.WETH.symbol]: {
stratAddress: "0x0EE2B97EA5e8c69bE42539439E052A1C6627bBd7",
},
[COLLATERALS_ETHEREUM.wstETH.symbol]: {
stratAddress: "0xDD9C98758c39D7b631ac93c6537d950C02DdB13C",
},
[COLLATERALS_ETHEREUM.weETH.symbol]: {
stratAddress: "0x99e15e69ceDd7233E00AcA77c0312072C3FB087c",
},
[COLLATERALS_ETHEREUM.WBTC.symbol]: {
stratAddress: "0x1CACe39d1D0A43Bb95f40e3F2B623cB0E138318a",
},
[COLLATERALS_ETHEREUM.USDT.symbol]: {
stratAddress: "0x05329BbE8b9DEcf80A09ee84998250e6B137Bda2",
},
[COLLATERALS_ETHEREUM.USDC.symbol]: {
stratAddress: "0x37AAd25a5DA6738E1B7E5Af29604618D00232A9d",
},
};
export const RESERVOIR_STRATEGIES_ETHEREUM = {
[COLLATERALS_ETHEREUM.USDC.symbol]: {
apy: "12",
stratAddress: "0x8EE9Cc2D6788EEf59593d77733592314BE317209",
},
[COLLATERALS_ETHEREUM.rUSD.symbol]: {
apy: "10",
stratAddress: "0x0a1754Fab76bd3963F5413523B4054B6670F5434",
},
};
export const DINERO_STRATEGIES_ETHEREUM = {
[COLLATERALS_ETHEREUM.WETH.symbol]: {
apy: "3.78",
stratAddress: "0x883Fc3E0C4719c0A113F2ef4bB19a26781E88E4D",
},
};
// Array-based strategies with expiry dates for dynamic maturity detection
export const PENDLE_STRATEGIES_ETHEREUM = {
[COLLATERALS_ETHEREUM["USD0++"].symbol]: [
{
stratAddress: "0x30C57337482110Cd7891bAC5236743cc71781804",
expiryDate: "2025-06-26", // 26 June 2025
marketAddress: "0x048680F64d6DFf1748ba6D9a01F578433787e24B", // USD0++ market
},
{
stratAddress: "0x27C70b007567b96c874A17Ed9AEa5450C96df043", // new USD0++ strategy
expiryDate: "2025-11-27", // 27 November 2025
marketAddress: "0xf8094570485b124b4f2abe98909a87511489c162", // USD0++ market
},
],
[COLLATERALS_ETHEREUM.lvlUSD.symbol]: [
{
stratAddress: "0xe12b93B12b369f1Fe0Eb4FCC9878DE3F605B9d1E",
expiryDate: "2025-09-25", // 25 September 2025
marketAddress: "0x461bc2ac3f80801BC11B0F20d63B73feF60C8076", // lvlUSD market address
},
],
[COLLATERALS_ETHEREUM.cUSDO.symbol]: [
{
stratAddress: "0xB588C4D441ED64bED86AE0732A387085c703e8B6",
expiryDate: "2025-06-19", // 19 June 2025
marketAddress: "0xA77c0DE4d26B7C97D1D42ABD6733201206122E25", // cUSDO market
},
{
stratAddress: "0xD744C84C1C09B580F4b1796DAaeBca913a88D31d",
expiryDate: "2025-11-20", // 20 November 2025
marketAddress: "0x3F53eb4c57c7E7118BE8566bCd503EA502639581", // cUSDO market
},
],
[COLLATERALS_ETHEREUM.rUSD.symbol]: [
{
stratAddress: "0xE801d4cF6DbF22666cB481D866F9218fc8e1069d",
expiryDate: "2025-07-31", // 31 July 2025
marketAddress: "0x88c4f34b86907b7221c0061f7a0bbec9391ea727", // rUSD market address
},
],
[COLLATERALS_ETHEREUM.hwHLP.symbol]: [
{
stratAddress: "0xA743cBb8e18F9F4781A9F44ABc6d81344dC55284",
expiryDate: "2025-09-25", // 25 September 2025
marketAddress: "0x71d4a6bAc0FE7210309b6A3807cf2BaD13d7C1E1", // hwHLP market
},
],
};
export const ACTIVE_PENDLE_STRATEGIES_ETHEREUM = Object.fromEntries(Object.entries(PENDLE_STRATEGIES_ETHEREUM)
.map(([asset, strategies]) => [
asset,
strategies.filter((strategy) => !(new Date() > new Date(strategy.expiryDate))),
])
.filter(([_, activeStrategies]) => activeStrategies.length > 0));
export const generateProtocolStrategyMap = () => {
const protocolStrategyMap = {};
protocolStrategyMap[PROTOCOLS_DATA.AAVE.name] = Object.values(AAVE_STRATEGIES_ETHEREUM).map((strategy) => strategy.stratAddress || zeroAddress);
protocolStrategyMap[PROTOCOLS_DATA.PENDLE.name] = Object.values(PENDLE_STRATEGIES_ETHEREUM)
.flatMap((strategies) => strategies.map((strategy) => strategy.stratAddress))
.filter(Boolean);
protocolStrategyMap[PROTOCOLS_DATA.RESERVOIR.name] = Object.values(RESERVOIR_STRATEGIES_ETHEREUM).map((strategy) => strategy.stratAddress || zeroAddress);
protocolStrategyMap[PROTOCOLS_DATA.DINERO.name] = Object.values(DINERO_STRATEGIES_ETHEREUM).map((strategy) => strategy.stratAddress || zeroAddress);
return protocolStrategyMap;
};
const generateProtocolAssets = () => {
const protocolAssets = [];
const protocolSources = {
[PROTOCOLS_DATA.AAVE.name]: AAVE_STRATEGIES_ETHEREUM,
[PROTOCOLS_DATA.PENDLE.name]: ACTIVE_PENDLE_STRATEGIES_ETHEREUM,
[PROTOCOLS_DATA.RESERVOIR.name]: RESERVOIR_STRATEGIES_ETHEREUM,
[PROTOCOLS_DATA.DINERO.name]: DINERO_STRATEGIES_ETHEREUM,
};
Object.entries(protocolSources).forEach(([protocol, strategies]) => {
const assets = new Set();
Object.keys(strategies).forEach((asset) => {
assets.add(asset);
});
protocolAssets.push({
name: protocol,
icon: PROTOCOLS_DATA[protocol]?.icon || "",
assets: Array.from(assets),
});
});
return protocolAssets;
};
// Assets for each protocol, keep in sync with strategies dictionaries
export const PROTOCOLS_ASSETS_ETHEREUM = generateProtocolAssets();
// Strategies for each protocol in a flat array, keep in sync with PROTOCOLS_ASSETS
export const PROTOCOL_STRATEGY_MAP_ETHEREUM = generateProtocolStrategyMap();
// Dynamically generated Pendle markets based on strategies
export const PENDLE_MARKETS_ETHEREUM = Object.values(PENDLE_STRATEGIES_ETHEREUM).flatMap((strategies) => strategies.map((strategy) => strategy.marketAddress || zeroAddress));