use provider connection to fetch switchboard idl

This commit is contained in:
tjs 2022-11-21 16:48:35 -05:00
parent 20ff7c99c6
commit 717d3f7711
2 changed files with 11 additions and 4 deletions

View File

@ -303,6 +303,7 @@ export class Group {
bank.oracle,
ai,
this.getMintDecimals(bank.mint),
client,
);
bank._price = price;
bank._uiPrice = uiPrice;
@ -333,6 +334,7 @@ export class Group {
perpMarket.oracle,
ai,
perpMarket.baseDecimals,
client,
);
perpMarket._price = price;
perpMarket._uiPrice = uiPrice;
@ -344,6 +346,7 @@ export class Group {
oracle: PublicKey,
ai: AccountInfo<Buffer>,
baseDecimals: number,
client: MangoClient,
): Promise<{ price: I80F48; uiPrice: number }> {
let price, uiPrice;
if (
@ -358,7 +361,10 @@ export class Group {
uiPrice = parsePriceData(ai.data).previousPrice;
price = this?.toNativePrice(uiPrice, baseDecimals);
} else if (isSwitchboardOracle(ai)) {
uiPrice = await parseSwitchboardOracle(ai);
uiPrice = await parseSwitchboardOracle(
ai,
client.program.provider.connection,
);
price = this?.toNativePrice(uiPrice, baseDecimals);
} else {
throw new Error(

View File

@ -1,5 +1,5 @@
import { Magic as PythMagic } from '@pythnetwork/client';
import { AccountInfo, PublicKey } from '@solana/web3.js';
import { AccountInfo, Connection, PublicKey } from '@solana/web3.js';
import SwitchboardProgram from '@switchboard-xyz/sbv2-lite';
import BN from 'bn.js';
import { I80F48, I80F48Dto } from '../numbers/I80F48';
@ -72,17 +72,18 @@ export function parseSwitcboardOracleV2(
*/
export async function parseSwitchboardOracle(
accountInfo: AccountInfo<Buffer>,
connection: Connection,
): Promise<number> {
if (accountInfo.owner.equals(SwitchboardProgram.devnetPid)) {
if (!sbv2DevnetProgram) {
sbv2DevnetProgram = await SwitchboardProgram.loadDevnet();
sbv2DevnetProgram = await SwitchboardProgram.loadDevnet(connection);
}
return parseSwitcboardOracleV2(sbv2DevnetProgram, accountInfo);
}
if (accountInfo.owner.equals(SwitchboardProgram.mainnetPid)) {
if (!sbv2MainnetProgram) {
sbv2MainnetProgram = await SwitchboardProgram.loadMainnet();
sbv2MainnetProgram = await SwitchboardProgram.loadMainnet(connection);
}
return parseSwitcboardOracleV2(sbv2MainnetProgram, accountInfo);
}