From 89f936c14ae60fe3f3591514a0de67c2a4c61510 Mon Sep 17 00:00:00 2001 From: microwavedcola1 <89031858+microwavedcola1@users.noreply.github.com> Date: Wed, 22 Mar 2023 09:58:20 +0100 Subject: [PATCH] add script to sim accounts with leverage change (#514) Signed-off-by: microwavedcola1 --- .../mb-sim-accounts-with-param-change.ts | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 ts/client/scripts/mb-sim-accounts-with-param-change.ts diff --git a/ts/client/scripts/mb-sim-accounts-with-param-change.ts b/ts/client/scripts/mb-sim-accounts-with-param-change.ts new file mode 100644 index 000000000..afecf1229 --- /dev/null +++ b/ts/client/scripts/mb-sim-accounts-with-param-change.ts @@ -0,0 +1,73 @@ +import { AnchorProvider, Wallet } from '@coral-xyz/anchor'; +import { Cluster, Connection, Keypair, PublicKey } from '@solana/web3.js'; +import fs from 'fs'; +import { HealthType } from '../src/accounts/mangoAccount'; +import { PerpMarketIndex } from '../src/accounts/perp'; +import { MangoClient } from '../src/client'; +import { MANGO_V4_ID } from '../src/constants'; +import { I80F48 } from '../src/numbers/I80F48'; +import { toUiDecimalsForQuote } from '../src/utils'; + +const CLUSTER_URL = + process.env.CLUSTER_URL_OVERRIDE || process.env.MB_CLUSTER_URL; +const SOME_KEYPAIR = + process.env.PAYER_KEYPAIR_OVERRIDE || process.env.MB_PAYER_KEYPAIR; +const CLUSTER: Cluster = + (process.env.CLUSTER_OVERRIDE as Cluster) || 'mainnet-beta'; + +const GROUP_PK = '78b8f4cGCwmZ9ysPFMWLaLTkkaYnUjwMJYStWe5RTSSX'; + +async function main(): Promise { + const options = AnchorProvider.defaultOptions(); + const connection = new Connection(CLUSTER_URL!, options); + + const someKeypair = Keypair.fromSecretKey( + Buffer.from(JSON.parse(fs.readFileSync(SOME_KEYPAIR!, 'utf-8'))), + ); + + const someWallet = new Wallet(someKeypair); + const someProvider = new AnchorProvider(connection, someWallet, options); + const client = MangoClient.connect( + someProvider, + CLUSTER, + MANGO_V4_ID[CLUSTER], + { + idsSource: 'api', + }, + ); + + const group = await client.getGroup(new PublicKey(GROUP_PK)); + const btcPerpPerpMarket = group.perpMarketsMapByMarketIndex.get( + 0 as PerpMarketIndex, + )!; + + // e.g. change btc-perp leverage to 5/10x + btcPerpPerpMarket.maintBaseAssetWeight = I80F48.fromNumber(0.9); + btcPerpPerpMarket.initBaseAssetWeight = I80F48.fromNumber(0.8); + btcPerpPerpMarket.maintBaseLiabWeight = I80F48.fromNumber(1.1); + btcPerpPerpMarket.initBaseLiabWeight = I80F48.fromNumber(1.2); + + const mangoAccountsWithHealth = ( + await client.getAllMangoAccounts(group, true) + ) + .map((a) => { + return { account: a, health: a.getHealth(group, HealthType.maint) }; + }) + .sort((a, b) => a.health.toNumber() - b.health.toNumber()); + + for (const obj of mangoAccountsWithHealth) { + console.log( + `${obj.account.publicKey}: ${toUiDecimalsForQuote(obj.health).toFixed( + 2, + )} `, + ); + } + + process.exit(); +} + +try { + main(); +} catch (error) { + console.log(error); +}