update for lsts
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
parent
06de29f771
commit
55b80a500e
|
@ -50,6 +50,15 @@ export const SB_ORACLES = [
|
|||
['CHAI', 'GXRCfroqu9k4ZoS5MyjUSiuoRb1bhps7nacEQLkLBVgr'],
|
||||
];
|
||||
|
||||
export const SB_LST_ORACLES = [
|
||||
['JSOL', '91yrNSV8mofYcP6NCsHNi2YgNxwukBenv5MCRFD92Rgp'],
|
||||
['HUBSOL', '318uRUE2RuYpvv1VwxC4eJwViDrRrxUTTqoUBV1cgUYi'],
|
||||
['DUALSOL', '6zBkSKhAqLT2SNRbzTbrom2siKhVZ6SLQcFPnvyexdTE'],
|
||||
['DIGITSOL', 'Am5rswhcxQhqviDXuaiZnLvkpmB4iJEdxmhqMMZDV3KJ'],
|
||||
['MANGOSOL', 'FLroEBBA4Fa8ENqfBmqyypq8U6ai2mD7c5k6Vfb2PWzv'],
|
||||
['COMPASSSOL', '9gFehBozPdWafFfPiZRbub2yUmwYJrGMvguKHii7cMTA'],
|
||||
];
|
||||
|
||||
export const PYTH_SPONSORED_ORACLES = [
|
||||
['SOL/USD', '7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE'],
|
||||
['JITOSOL/USD', 'AxaxyeDT8JnWERSaTKvFXvPKkEdxnamKSqpWbsSjYg1g'],
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
import { PublicKey } from '@solana/web3.js';
|
||||
import { SB_ON_DEMAND_PID } from '@switchboard-xyz/on-demand';
|
||||
import { isSwitchboardOracle } from '../src/accounts/oracle';
|
||||
import { MangoClient } from '../src/client';
|
||||
|
||||
async function main(): Promise<void> {
|
||||
|
@ -6,6 +8,36 @@ async function main(): Promise<void> {
|
|||
const group = await client.getGroup(
|
||||
new PublicKey('78b8f4cGCwmZ9ysPFMWLaLTkkaYnUjwMJYStWe5RTSSX'),
|
||||
);
|
||||
|
||||
const allOracles = Array.from(group.banksMapByName.values())
|
||||
.flat()
|
||||
.map((b) => [b.name, b.oracle])
|
||||
.concat(
|
||||
Array.from(group.banksMapByName.values())
|
||||
.flat()
|
||||
.map((b) => [b.name, b.fallbackOracle])
|
||||
.filter(
|
||||
(item) =>
|
||||
item[1] instanceof PublicKey && !item[1].equals(PublicKey.default),
|
||||
),
|
||||
);
|
||||
|
||||
const oraclePublicKeys = allOracles.map((item) => item[1] as PublicKey);
|
||||
const ais = await client.program.provider.connection.getMultipleAccountsInfo(
|
||||
oraclePublicKeys,
|
||||
);
|
||||
|
||||
const result = ais
|
||||
.map((ai, idx) => {
|
||||
return [
|
||||
isSwitchboardOracle(ai!) && !ai?.owner.equals(SB_ON_DEMAND_PID),
|
||||
allOracles[idx],
|
||||
];
|
||||
})
|
||||
.filter((item) => item[0])
|
||||
.map((item) => item[1]);
|
||||
|
||||
console.log(result);
|
||||
}
|
||||
|
||||
main();
|
||||
|
|
|
@ -23,7 +23,6 @@ import fs from 'fs';
|
|||
import { Bank } from '../src/accounts/bank';
|
||||
import { Group } from '../src/accounts/group';
|
||||
import { MangoAccount } from '../src/accounts/mangoAccount';
|
||||
import { OracleProvider } from '../src/accounts/oracle';
|
||||
import { MangoClient } from '../src/client';
|
||||
import { NullTokenEditParams } from '../src/clientIxParamBuilder';
|
||||
import { MANGO_V4_MAIN_GROUP as MANGO_V4_PRIMARY_GROUP } from '../src/constants';
|
||||
|
@ -38,7 +37,7 @@ import {
|
|||
MANGO_GOVERNANCE_PROGRAM,
|
||||
MANGO_MINT,
|
||||
MANGO_REALM_PK,
|
||||
PYTH_SPONSORED_ORACLES,
|
||||
SB_LST_ORACLES,
|
||||
} from './governanceInstructions/constants';
|
||||
import { createProposal } from './governanceInstructions/createProposal';
|
||||
import {
|
||||
|
@ -207,15 +206,6 @@ async function updateTokenParams(): Promise<void> {
|
|||
.map((banks) => banks[0])
|
||||
.sort((a, b) => a.name.localeCompare(b.name))
|
||||
.forEach(async (bank) => {
|
||||
if (bank.oracleProvider != OracleProvider.Pyth) {
|
||||
console.log(`Skipping ${bank.name}, since not pyth`);
|
||||
return;
|
||||
}
|
||||
if (bank.reduceOnly == 1) {
|
||||
console.log(`Skipping ${bank.name}, since reduceOnly`);
|
||||
return;
|
||||
}
|
||||
|
||||
const builder = Builder(NullTokenEditParams);
|
||||
let change = false;
|
||||
|
||||
|
@ -229,34 +219,51 @@ async function updateTokenParams(): Promise<void> {
|
|||
bank?.initLiabWeight.toNumber().toFixed(1),
|
||||
);
|
||||
|
||||
const maybePythV2Feed = PYTH_SPONSORED_ORACLES.filter(
|
||||
(x) =>
|
||||
x[0].replace('/USD', '') ==
|
||||
(bank.name.includes('BTC')
|
||||
? 'BTC'
|
||||
: bank.name.includes('ETH')
|
||||
? 'ETH'
|
||||
: bank.name.toUpperCase()),
|
||||
const maybeSbOracle = SB_LST_ORACLES.filter(
|
||||
(x) => x[0] === bank.name.toLocaleUpperCase(),
|
||||
);
|
||||
|
||||
if (maybePythV2Feed.length > 0) {
|
||||
console.log(` - ${bank.name} ${bank.oracle} ${maybePythV2Feed[0][0]}`);
|
||||
builder.oracle(new PublicKey(maybePythV2Feed[0][1]));
|
||||
if (maybeSbOracle.length > 0) {
|
||||
console.log(` - ${bank.name} ${bank.oracle} ${maybeSbOracle[0][0]}`);
|
||||
builder.oracle(new PublicKey(maybeSbOracle[0][1]));
|
||||
change = true;
|
||||
} else {
|
||||
console.log(`Skipping ${bank.name}, cant find pyth feed`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
bank.reduceOnly != 1 &&
|
||||
maybePythV2Feed.length == 0 &&
|
||||
bank.oracleProvider == OracleProvider.Pyth &&
|
||||
!['CHAI', 'DAI', 'BLZE', 'MNGO', 'RENDER'].some(
|
||||
(item) => item == bank.name,
|
||||
)
|
||||
) {
|
||||
throw new Error(`No pyth feed for ${bank.name}`);
|
||||
}
|
||||
// if (bank.oracleProvider != OracleProvider.Pyth) {
|
||||
// console.log(`Skipping ${bank.name}, since not pyth`);
|
||||
// return;
|
||||
// }
|
||||
// if (bank.reduceOnly == 1) {
|
||||
// console.log(`Skipping ${bank.name}, since reduceOnly`);
|
||||
// return;
|
||||
// }
|
||||
// const maybePythV2Feed = PYTH_SPONSORED_ORACLES.filter(
|
||||
// (x) =>
|
||||
// x[0].replace('/USD', '') ==
|
||||
// (bank.name.includes('BTC')
|
||||
// ? 'BTC'
|
||||
// : bank.name.includes('ETH')
|
||||
// ? 'ETH'
|
||||
// : bank.name.toUpperCase()),
|
||||
// );
|
||||
// if (maybePythV2Feed.length > 0) {
|
||||
// console.log(` - ${bank.name} ${bank.oracle} ${maybePythV2Feed[0][0]}`);
|
||||
// builder.oracle(new PublicKey(maybePythV2Feed[0][1]));
|
||||
// change = true;
|
||||
// } else {
|
||||
// console.log(`Skipping ${bank.name}, cant find pyth feed`);
|
||||
// }
|
||||
// if (
|
||||
// bank.reduceOnly != 1 &&
|
||||
// maybePythV2Feed.length == 0 &&
|
||||
// bank.oracleProvider == OracleProvider.Pyth &&
|
||||
// !['CHAI', 'DAI', 'BLZE', 'MNGO', 'RENDER'].some(
|
||||
// (item) => item == bank.name,
|
||||
// )
|
||||
// ) {
|
||||
// throw new Error(`No pyth feed for ${bank.name}`);
|
||||
// }
|
||||
|
||||
// // eslint-disable-next-line no-constant-condition
|
||||
// if (true) {
|
||||
|
@ -547,7 +554,9 @@ async function updateTokenParams(): Promise<void> {
|
|||
walletSigner,
|
||||
MANGO_DAO_WALLET_GOVERNANCE,
|
||||
tokenOwnerRecord,
|
||||
PROPOSAL_TITLE ? PROPOSAL_TITLE : 'Switch feeds from Pyth V1 to Pyth V2',
|
||||
PROPOSAL_TITLE
|
||||
? PROPOSAL_TITLE
|
||||
: 'Switch switchboard oracles for LSTs in mango-v4',
|
||||
PROPOSAL_LINK ?? '',
|
||||
Object.values(proposals).length,
|
||||
instructions,
|
||||
|
|
Loading…
Reference in New Issue