From 23bf8f24eb7b01fbc8b4bbd9c6eacaaff4687143 Mon Sep 17 00:00:00 2001 From: 0xodia <0xodia@solend.fi> Date: Fri, 19 Jul 2024 16:11:43 -0400 Subject: [PATCH] fix sb pull oracles --- solend-sdk/package.json | 2 +- solend-sdk/src/core/actions.ts | 29 +++++++++++++++++++---------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/solend-sdk/package.json b/solend-sdk/package.json index 97221649..670e02b8 100644 --- a/solend-sdk/package.json +++ b/solend-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@solendprotocol/solend-sdk", - "version": "0.11.10", + "version": "0.11.13", "private": true, "main": "src/index.ts", "module": "src/index.ts", diff --git a/solend-sdk/src/core/actions.ts b/solend-sdk/src/core/actions.ts index 22692848..136c405a 100644 --- a/solend-sdk/src/core/actions.ts +++ b/solend-sdk/src/core/actions.ts @@ -935,29 +935,38 @@ export class SolendActionCore { (_o, index) => oracleAccounts[index]?.owner.toBase58() === sbod.programId.toBase58() ); - if (sbPulledOracles.length) { - const feedAccounts = sbPulledOracles.map( - (oracleKey) => new PullFeed(sbod as any, oracleKey) - ); + const feedAccounts = sbPulledOracles.map( + (oracleKey) => new PullFeed(sbod as any, oracleKey) + ); + + const feedData = await Promise.all( + feedAccounts.map((feedAccount) => feedAccount.loadData()) + ); + + const feedsThatNeedUpdate = feedData.map( + (feed) => + Date.now() / 1000 - Number(feed.lastUpdateTimestamp.toString()) > 70 + ); + const updateFeeds = feedAccounts.filter( + (_, index) => feedsThatNeedUpdate[index] + ); + + if (updateFeeds.length) { const crossbar = new CrossbarClient( "https://crossbar-fvumormova-uc.a.run.app" ); // Responses is Array<[pullIx, responses, success]> const responses = await Promise.all( - feedAccounts.map((feedAccount) => + updateFeeds.map((feedAccount) => feedAccount.fetchUpdateIx({ - numSignatures: 1, crossbarClient: crossbar, gateway: "https://xoracle-1-mn.switchboard.xyz", }) ) ); const oracles = responses.flatMap((x) => x[1].map((y) => y.oracle)); - const lookupTables = await loadLookupTables([ - ...oracles, - ...feedAccounts, - ]); + const lookupTables = await loadLookupTables([...oracles, ...updateFeeds]); const priorityFeeIx = ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 100_000,