Skip to content

Commit

Permalink
feat: can get historical pool info and oracle prices (#221)
Browse files Browse the repository at this point in the history
  • Loading branch information
gidonkatten authored Feb 5, 2025
1 parent 81ffba7 commit a10e450
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 8 deletions.
5 changes: 5 additions & 0 deletions .changeset/pretty-ducks-fry.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@folks-finance/xchain-sdk": patch
---

can get historical pool info
5 changes: 5 additions & 0 deletions .changeset/tasty-games-lie.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@folks-finance/xchain-sdk": patch
---

can get historical oracle prices
11 changes: 9 additions & 2 deletions src/chains/evm/hub/modules/folks-hub-oracle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,25 @@ import type { OraclePrice, OraclePrices } from "../types/oracle.js";
import type { HubTokenData } from "../types/token.js";
import type { Client, ContractFunctionParameters, ReadContractReturnType } from "viem";

export async function getOraclePrice(provider: Client, network: NetworkType, poolId: number): Promise<OraclePrice> {
export async function getOraclePrice(
provider: Client,
network: NetworkType,
poolId: number,
blockNumber?: bigint,
): Promise<OraclePrice> {
const hubChain = getHubChain(network);

const oracleManager = getOracleManagerContract(provider, hubChain.oracleManagerAddress);

const { price, decimals } = await oracleManager.read.processPriceFeed([poolId]);
const { price, decimals } = await oracleManager.read.processPriceFeed([poolId], { blockNumber });
return { price: [price, 18], decimals };
}

export async function getOraclePrices(
provider: Client,
network: NetworkType,
tokens: Array<HubTokenData>,
blockNumber?: bigint,
): Promise<OraclePrices> {
const hubChain = getHubChain(network);
const oracleManager = getOracleManagerContract(provider, hubChain.oracleManagerAddress);
Expand All @@ -36,6 +42,7 @@ export async function getOraclePrices(
const priceFeeds = (await multicall(provider, {
contracts: processPriceFeeds,
allowFailure: false,
blockNumber,
})) as Array<ReadContractReturnType<typeof OracleManagerAbi, "processPriceFeed">>;

const oraclePrices: OraclePrices = {};
Expand Down
2 changes: 2 additions & 0 deletions src/chains/evm/hub/modules/folks-hub-pool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export async function getPoolInfo(
provider: Client,
network: NetworkType,
folksTokenId: FolksTokenId,
blockNumber?: bigint,
): Promise<PoolInfo> {
const {
poolAddress,
Expand Down Expand Up @@ -87,6 +88,7 @@ export async function getPoolInfo(
},
],
allowFailure: false,
blockNumber,
});

const {
Expand Down
8 changes: 4 additions & 4 deletions src/xchain/modules/folks-oracle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,21 @@ import type { OraclePrice, OraclePrices } from "../../chains/evm/hub/types/oracl
import type { FolksTokenId } from "../../common/types/token.js";

export const read = {
async oraclePrice(folksTokenId: FolksTokenId): Promise<OraclePrice> {
async oraclePrice(folksTokenId: FolksTokenId, blockNumber?: bigint): Promise<OraclePrice> {
const network = FolksCore.getSelectedNetwork();

const { poolId } = getHubTokenData(folksTokenId, network);

return await FolksHubOracle.getOraclePrice(FolksCore.getHubProvider(), network, poolId);
return await FolksHubOracle.getOraclePrice(FolksCore.getHubProvider(), network, poolId, blockNumber);
},

async oraclePrices(folksTokenIds?: Array<FolksTokenId>): Promise<OraclePrices> {
async oraclePrices(folksTokenIds?: Array<FolksTokenId>, blockNumber?: bigint): Promise<OraclePrices> {
const network = FolksCore.getSelectedNetwork();

const tokensData = folksTokenIds
? folksTokenIds.map((folksTokenId) => getHubTokenData(folksTokenId, network))
: Object.values(getHubTokensData(network));

return FolksHubOracle.getOraclePrices(FolksCore.getHubProvider(), network, tokensData);
return FolksHubOracle.getOraclePrices(FolksCore.getHubProvider(), network, tokensData, blockNumber);
},
};
9 changes: 7 additions & 2 deletions src/xchain/modules/folks-pool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,12 @@ import type { PoolInfo } from "../../chains/evm/hub/types/pool.js";
import type { FolksTokenId } from "../../common/types/token.js";

export const read = {
async poolInfo(folksTokenId: FolksTokenId): Promise<PoolInfo> {
return FolksHubPool.getPoolInfo(FolksCore.getHubProvider(), FolksCore.getSelectedNetwork(), folksTokenId);
async poolInfo(folksTokenId: FolksTokenId, blockNumber?: bigint): Promise<PoolInfo> {
return FolksHubPool.getPoolInfo(
FolksCore.getHubProvider(),
FolksCore.getSelectedNetwork(),
folksTokenId,
blockNumber,
);
},
};

0 comments on commit a10e450

Please sign in to comment.