Merge branch '5_tokens' of github.com:blockworks-foundation/mango-client-ts into 5_tokens
This commit is contained in:
commit
e4d2998912
|
@ -35,7 +35,14 @@ import {
|
|||
uiToNative,
|
||||
zeroKey,
|
||||
} from './utils';
|
||||
import { getFeeRates, getFeeTier, Market, OpenOrders, Orderbook } from '@project-serum/serum';
|
||||
import {
|
||||
getFeeRates,
|
||||
getFeeTier,
|
||||
Market,
|
||||
OpenOrders,
|
||||
Orderbook,
|
||||
TOKEN_MINTS
|
||||
} from '@project-serum/serum';
|
||||
import { SRM_DECIMALS } from '@project-serum/serum/lib/token-instructions';
|
||||
import { Order } from '@project-serum/serum/lib/market';
|
||||
import Wallet from '@project-serum/sol-wallet-adapter';
|
||||
|
@ -52,12 +59,13 @@ import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
|
|||
export const tokenToDecimals = {
|
||||
"BTC": 4,
|
||||
"ETH": 3,
|
||||
"SOL": 2,
|
||||
"SRM": 2,
|
||||
"USDT": 2,
|
||||
"USDC": 2
|
||||
"USDC": 2,
|
||||
"WUSDT": 2,
|
||||
}
|
||||
|
||||
|
||||
|
||||
export class MangoGroup {
|
||||
publicKey: PublicKey;
|
||||
|
||||
|
@ -158,6 +166,9 @@ export class MangoGroup {
|
|||
getUiTotalBorrow(tokenIndex: number): number {
|
||||
return nativeToUi(this.totalBorrows[tokenIndex] * this.indexes[tokenIndex].borrow, this.mintDecimals[tokenIndex])
|
||||
}
|
||||
getTokenSymbol(tokenIndex: number): string {
|
||||
return TOKEN_MINTS.find((m) => m.address.toString() === this.tokens[tokenIndex].toString())?.name || '';
|
||||
}
|
||||
}
|
||||
|
||||
export class MarginAccount {
|
||||
|
@ -223,16 +234,14 @@ export class MarginAccount {
|
|||
`${"Token".padEnd(5)} ${"Assets".padEnd(10)} ${"Deposits".padEnd(10)} ${"Borrows".padEnd(10)}`,
|
||||
]
|
||||
|
||||
|
||||
const tokenNames = ["BTC", "ETH", "USDT"] // TODO pull this from somewhere
|
||||
|
||||
for (let i = 0; i < mangoGroup.tokens.length; i++) {
|
||||
const decimals = tokenToDecimals[tokenNames[i]]
|
||||
const tokenSymbol = mangoGroup.getTokenSymbol(i)
|
||||
const decimals = tokenToDecimals[tokenSymbol]
|
||||
const assetStr = this.getAssets(mangoGroup)[i].toFixed(decimals).toString().padEnd(10)
|
||||
const depositStr = this.getUiDeposit(mangoGroup, i).toFixed(decimals).toString().padEnd(10)
|
||||
const borrowStr = this.getUiBorrow(mangoGroup, i).toFixed(decimals).toString().padEnd(10)
|
||||
lines.push(
|
||||
`${tokenNames[i].padEnd(5)} ${assetStr} ${depositStr} ${borrowStr}`
|
||||
`${tokenSymbol.padEnd(5)} ${assetStr} ${depositStr} ${borrowStr}`
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -1326,23 +1335,27 @@ export class MangoClient {
|
|||
async getAllMarginAccounts(
|
||||
connection: Connection,
|
||||
programId: PublicKey,
|
||||
mangoGroup: MangoGroup
|
||||
mangoGroup: MangoGroup,
|
||||
filters?: [any]
|
||||
): Promise<MarginAccount[]> {
|
||||
|
||||
const filters = [
|
||||
const marginAccountsFilters = [
|
||||
{
|
||||
memcmp: {
|
||||
offset: MarginAccountLayout.offsetOf('mangoGroup'),
|
||||
bytes: mangoGroup.publicKey.toBase58(),
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
dataSize: MarginAccountLayout.span,
|
||||
},
|
||||
];
|
||||
|
||||
const marginAccountsProms = getFilteredProgramAccounts(connection, programId, filters)
|
||||
if(filters && filters.length) {
|
||||
marginAccountsFilters.push(...filters);
|
||||
}
|
||||
|
||||
const marginAccountsProms = getFilteredProgramAccounts(connection, programId, marginAccountsFilters)
|
||||
.then((accounts) => (
|
||||
accounts.map(({ publicKey, accountInfo }) =>
|
||||
new MarginAccount(publicKey, MarginAccountLayout.decode(accountInfo == null ? undefined : accountInfo.data))
|
||||
|
@ -1391,6 +1404,19 @@ export class MangoClient {
|
|||
return marginAccounts
|
||||
}
|
||||
|
||||
async getAllMarginAccountsWithBorrows(
|
||||
connection: Connection,
|
||||
programId: PublicKey,
|
||||
mangoGroup: MangoGroup
|
||||
): Promise<MarginAccount[]> {
|
||||
return await this.getAllMarginAccounts(connection, programId, mangoGroup, [{
|
||||
memcmp: {
|
||||
offset: MarginAccountLayout.offsetOf('hasBorrows'),
|
||||
bytes: 1
|
||||
}
|
||||
}])
|
||||
}
|
||||
|
||||
async getMarginAccountsForOwner(
|
||||
connection: Connection,
|
||||
programId: PublicKey,
|
||||
|
|
|
@ -156,7 +156,8 @@ export const MarginAccountLayout = struct([
|
|||
seq(U64F64(), NUM_TOKENS, 'borrows'),
|
||||
seq(publicKeyLayout(), NUM_MARKETS, 'openOrders'),
|
||||
u8('beingLiquidated'),
|
||||
seq(u8(), 7, 'padding')
|
||||
u8('hasBorrows'),
|
||||
seq(u8(), 6, 'padding')
|
||||
]);
|
||||
|
||||
export const MangoSrmAccountLayout = struct([
|
||||
|
|
Loading…
Reference in New Issue