@admin-jigsaw/jigsaw-sdk
Version:
Returns predefined data for Jigsaw platform and exposes functionality to retrieve the necessary data
46 lines (45 loc) • 2 kB
JavaScript
import { encodeAbiParameters, getAddress, zeroAddress } from "viem";
import { getChainConfig } from "../constants/chains";
import { PENDLE_EMPTY_SWAP_DATA } from "../constants/strategiesSharedConstants";
import { removePendleLiquidityAbi } from "../contracts/removePendleLiquidityAbi";
export const generatePendleRemoveLiquidityDataString = async (resp) => {
const TokenOutput = resp.contractCallParams[3];
// Ensure data is properly formatted for encoding
const encodedData = encodeAbiParameters(removePendleLiquidityAbi, // Using the JSON ABI
[
{
tokenOut: TokenOutput.tokenOut,
minTokenOut: TokenOutput.minTokenOut,
tokenRedeemSy: TokenOutput.tokenRedeemSy,
pendleSwap: zeroAddress,
swapData: PENDLE_EMPTY_SWAP_DATA,
},
]);
return encodedData;
};
/**
* Returns the Pendle market address based on the provided strategy address.
* @param {Address} stratAddress - The strategy address to look up.
* @param {number} chainId - The chain ID to get the correct constants.
* @returns {Address | null} - The corresponding market address or null if not found.
*/
export function getPendleMarketByStrategy(stratAddress, chainId = 1) {
const chainConfig = getChainConfig(chainId);
if (chainConfig.strategies === null)
return null;
if (!chainConfig.strategies.pendle?.strategies ||
!chainConfig.strategies.pendle?.markets) {
return null;
}
const normalizedStratAddress = getAddress(stratAddress);
// Find the strategy that matches the given strategy address and return its market address
for (const [_, strategies] of Object.entries(chainConfig.strategies.pendle.strategies)) {
for (const strategy of strategies) {
if (getAddress(strategy.stratAddress) === normalizedStratAddress) {
return strategy.marketAddress;
}
}
}
// If no matching strategy found, return null
return null;
}