Merge branch 'partial_liq' into main
This commit is contained in:
commit
82237df167
|
@ -6,7 +6,7 @@ import {
|
||||||
SimulatedTransactionResponse,
|
SimulatedTransactionResponse,
|
||||||
SYSVAR_CLOCK_PUBKEY,
|
SYSVAR_CLOCK_PUBKEY,
|
||||||
SYSVAR_RENT_PUBKEY,
|
SYSVAR_RENT_PUBKEY,
|
||||||
Transaction,
|
Transaction, TransactionConfirmationStatus,
|
||||||
TransactionInstruction,
|
TransactionInstruction,
|
||||||
TransactionSignature,
|
TransactionSignature,
|
||||||
} from '@solana/web3.js';
|
} from '@solana/web3.js';
|
||||||
|
@ -388,6 +388,10 @@ export class MangoSrmAccount {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MangoClient {
|
export class MangoClient {
|
||||||
|
confirmLevel: TransactionConfirmationStatus;
|
||||||
|
constructor(confirmLevel: TransactionConfirmationStatus = 'processed') {
|
||||||
|
this.confirmLevel = confirmLevel
|
||||||
|
}
|
||||||
|
|
||||||
async sendTransaction(
|
async sendTransaction(
|
||||||
connection: Connection,
|
connection: Connection,
|
||||||
|
@ -403,7 +407,6 @@ export class MangoClient {
|
||||||
const signers = [payer].concat(additionalSigners)
|
const signers = [payer].concat(additionalSigners)
|
||||||
transaction.sign(...signers)
|
transaction.sign(...signers)
|
||||||
const rawTransaction = transaction.serialize()
|
const rawTransaction = transaction.serialize()
|
||||||
console.log('Transaction size:', rawTransaction.length)
|
|
||||||
const startTime = getUnixTs();
|
const startTime = getUnixTs();
|
||||||
|
|
||||||
const txid: TransactionSignature = await connection.sendRawTransaction(
|
const txid: TransactionSignature = await connection.sendRawTransaction(
|
||||||
|
@ -425,7 +428,7 @@ export class MangoClient {
|
||||||
})();
|
})();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await awaitTransactionSignatureConfirmation(txid, timeout, connection);
|
await awaitTransactionSignatureConfirmation(txid, timeout, connection, this.confirmLevel);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err.timeout) {
|
if (err.timeout) {
|
||||||
throw new Error('Timed out awaiting confirmation on transaction');
|
throw new Error('Timed out awaiting confirmation on transaction');
|
||||||
|
|
141
src/index.ts
141
src/index.ts
|
@ -16,72 +16,75 @@ import { nativeToUi, sleep, uiToNative } from './utils';
|
||||||
import { NUM_MARKETS, NUM_TOKENS } from './layout';
|
import { NUM_MARKETS, NUM_TOKENS } from './layout';
|
||||||
|
|
||||||
|
|
||||||
// async function tests() {
|
async function tests() {
|
||||||
// const cluster = "mainnet-beta";
|
const cluster = "mainnet-beta";
|
||||||
// const client = new MangoClient();
|
const client = new MangoClient();
|
||||||
// const clusterIds = IDS[cluster]
|
const clusterIds = IDS[cluster]
|
||||||
//
|
|
||||||
// const connection = new Connection(IDS.cluster_urls[cluster], 'singleGossip')
|
const connection = new Connection(IDS.cluster_urls[cluster], 'singleGossip')
|
||||||
// const mangoGroupPk = new PublicKey(clusterIds.mango_groups['BTC_ETH_USDT'].mango_group_pk);
|
const mangoGroupPk = new PublicKey(clusterIds.mango_groups['BTC_ETH_USDT'].mango_group_pk);
|
||||||
// const mangoProgramId = new PublicKey(clusterIds.mango_program_id);
|
const mangoProgramId = new PublicKey(clusterIds.mango_program_id);
|
||||||
//
|
|
||||||
// const keyPairPath = process.env.KEYPAIR || homedir() + '/.config/solana/id.json'
|
const keyPairPath = process.env.KEYPAIR || homedir() + '/.config/solana/id.json'
|
||||||
// const payer = new Account(JSON.parse(fs.readFileSync(keyPairPath, 'utf-8')))
|
const payer = new Account(JSON.parse(fs.readFileSync(keyPairPath, 'utf-8')))
|
||||||
//
|
|
||||||
//
|
async function testSolink() {
|
||||||
// async function testSolink() {
|
|
||||||
//
|
const oraclePk = new PublicKey(IDS[cluster].oracles['ETH/USDT'])
|
||||||
// const oraclePk = new PublicKey(IDS[cluster].oracles['ETH/USDT'])
|
const agg = await Aggregator.loadWithConnection(oraclePk, connection)
|
||||||
// const agg = await Aggregator.loadWithConnection(oraclePk, connection)
|
|
||||||
//
|
// const agg = await Aggregator.loadWithConnection(oraclePk, connection)
|
||||||
// // const agg = await Aggregator.loadWithConnection(oraclePk, connection)
|
console.log(agg.answer.median.toNumber(), agg.answer.updatedAt.toNumber(), agg.round.id.toNumber())
|
||||||
// console.log(agg.answer.median.toNumber(), agg.answer.updatedAt.toNumber(), agg.round.id.toNumber())
|
|
||||||
//
|
}
|
||||||
// }
|
|
||||||
//
|
async function testDepositSrm() {
|
||||||
// async function testDepositSrm() {
|
const srmVaultPk = new PublicKey(clusterIds['mango_groups']['BTC_ETH_USDT']['srm_vault_pk'])
|
||||||
// const srmVaultPk = new PublicKey(clusterIds['mango_groups']['BTC_ETH_USDT']['srm_vault_pk'])
|
const mangoGroup = await client.getMangoGroup(connection, mangoGroupPk, srmVaultPk)
|
||||||
// const mangoGroup = await client.getMangoGroup(connection, mangoGroupPk, srmVaultPk)
|
const srmAccountPk = new PublicKey("6utvndL8EEjpwK5QVtguErncQEPVbkuyABmXu6FeygeV")
|
||||||
// const srmAccountPk = new PublicKey("6utvndL8EEjpwK5QVtguErncQEPVbkuyABmXu6FeygeV")
|
const mangoSrmAccountPk = await client.depositSrm(connection, mangoProgramId, mangoGroup, payer, srmAccountPk, 100)
|
||||||
// const mangoSrmAccountPk = await client.depositSrm(connection, mangoProgramId, mangoGroup, payer, srmAccountPk, 100)
|
console.log(mangoSrmAccountPk.toBase58())
|
||||||
// console.log(mangoSrmAccountPk.toBase58())
|
await sleep(2000)
|
||||||
// await sleep(2000)
|
const mangoSrmAccount = await client.getMangoSrmAccount(connection, mangoSrmAccountPk)
|
||||||
// const mangoSrmAccount = await client.getMangoSrmAccount(connection, mangoSrmAccountPk)
|
const txid = await client.withdrawSrm(connection, mangoProgramId, mangoGroup, mangoSrmAccount, payer, srmAccountPk, 50)
|
||||||
// const txid = await client.withdrawSrm(connection, mangoProgramId, mangoGroup, mangoSrmAccount, payer, srmAccountPk, 50)
|
console.log('success', txid)
|
||||||
// console.log('success', txid)
|
}
|
||||||
// }
|
|
||||||
//
|
async function getMarginAccountDetails() {
|
||||||
// async function getMarginAccountDetails() {
|
const mangoGroup = await client.getMangoGroup(connection, mangoGroupPk);
|
||||||
// const mangoGroup = await client.getMangoGroup(connection, mangoGroupPk);
|
const marginAccountPk = new PublicKey("6vAry8oHVvWqPJV6SMzzJ9EcQr5kkQYHef6ui2ewaagQ")
|
||||||
// const marginAccountPk = new PublicKey("BSFaizvArm1dpVGwJvrsqbWTpT8nh3xD7ERrdHuaY1C1")
|
const marginAccount = await client.getMarginAccount(connection, marginAccountPk, mangoGroup.dexProgramId)
|
||||||
// const marginAccount = await client.getMarginAccount(connection, marginAccountPk, mangoGroup.dexProgramId)
|
const prices = await mangoGroup.getPrices(connection)
|
||||||
// const prices = await mangoGroup.getPrices(connection)
|
|
||||||
//
|
console.log(marginAccount.toPrettyString(mangoGroup, prices))
|
||||||
// console.log(marginAccount.toPrettyString(mangoGroup, prices))
|
console.log(marginAccount.beingLiquidated)
|
||||||
//
|
console.log(marginAccount.getUiDeposit(mangoGroup, 0), marginAccount.getUiBorrow(mangoGroup, 0))
|
||||||
// for (let i = 0; i < NUM_MARKETS; i++) {
|
console.log(marginAccount.getUiDeposit(mangoGroup, 1), marginAccount.getUiBorrow(mangoGroup, 1))
|
||||||
// let openOrdersAccount = marginAccount.openOrdersAccounts[i]
|
console.log(marginAccount.getUiDeposit(mangoGroup, 2), marginAccount.getUiBorrow(mangoGroup, 2))
|
||||||
// if (openOrdersAccount === undefined) {
|
console.log(marginAccount.getCollateralRatio(mangoGroup, prices))
|
||||||
// continue
|
// for (let i = 0; i < NUM_MARKETS; i++) {
|
||||||
// }
|
// let openOrdersAccount = marginAccount.openOrdersAccounts[i]
|
||||||
//
|
// if (openOrdersAccount === undefined) {
|
||||||
// for (const oid of openOrdersAccount.orders) {
|
// continue
|
||||||
// console.log(oid.toString())
|
// }
|
||||||
// }
|
//
|
||||||
// console.log(i,
|
// for (const oid of openOrdersAccount.orders) {
|
||||||
// nativeToUi(openOrdersAccount.quoteTokenTotal.toNumber(), mangoGroup.mintDecimals[NUM_MARKETS]),
|
// console.log(oid.toString())
|
||||||
// nativeToUi(openOrdersAccount.quoteTokenFree.toNumber(), mangoGroup.mintDecimals[NUM_MARKETS]),
|
// }
|
||||||
//
|
// console.log(i,
|
||||||
// nativeToUi(openOrdersAccount.baseTokenTotal.toNumber(), mangoGroup.mintDecimals[i]),
|
// nativeToUi(openOrdersAccount.quoteTokenTotal.toNumber(), mangoGroup.mintDecimals[NUM_MARKETS]),
|
||||||
// nativeToUi(openOrdersAccount.baseTokenFree.toNumber(), mangoGroup.mintDecimals[i])
|
// nativeToUi(openOrdersAccount.quoteTokenFree.toNumber(), mangoGroup.mintDecimals[NUM_MARKETS]),
|
||||||
//
|
//
|
||||||
// )
|
// nativeToUi(openOrdersAccount.baseTokenTotal.toNumber(), mangoGroup.mintDecimals[i]),
|
||||||
// }
|
// nativeToUi(openOrdersAccount.baseTokenFree.toNumber(), mangoGroup.mintDecimals[i])
|
||||||
//
|
//
|
||||||
// }
|
// )
|
||||||
// await getMarginAccountDetails()
|
// }
|
||||||
// // await testSolink()
|
|
||||||
// // testDepositSrm()
|
}
|
||||||
// }
|
await getMarginAccountDetails()
|
||||||
//
|
// await testSolink()
|
||||||
// tests()
|
// testDepositSrm()
|
||||||
|
}
|
||||||
|
|
||||||
|
tests()
|
16
src/utils.ts
16
src/utils.ts
|
@ -3,7 +3,7 @@ import {
|
||||||
AccountInfo, Commitment,
|
AccountInfo, Commitment,
|
||||||
Connection,
|
Connection,
|
||||||
PublicKey, RpcResponseAndContext, SimulatedTransactionResponse,
|
PublicKey, RpcResponseAndContext, SimulatedTransactionResponse,
|
||||||
SystemProgram, Transaction,
|
SystemProgram, Transaction, TransactionConfirmationStatus,
|
||||||
TransactionInstruction,
|
TransactionInstruction,
|
||||||
TransactionSignature,
|
TransactionSignature,
|
||||||
} from '@solana/web3.js';
|
} from '@solana/web3.js';
|
||||||
|
@ -49,8 +49,18 @@ export async function awaitTransactionSignatureConfirmation(
|
||||||
txid: TransactionSignature,
|
txid: TransactionSignature,
|
||||||
timeout: number,
|
timeout: number,
|
||||||
connection: Connection,
|
connection: Connection,
|
||||||
|
confirmLevel: TransactionConfirmationStatus
|
||||||
) {
|
) {
|
||||||
let done = false;
|
let done = false;
|
||||||
|
|
||||||
|
const confirmLevels: (TransactionConfirmationStatus | null)[] = ['finalized']
|
||||||
|
if (confirmLevel === 'confirmed') {
|
||||||
|
confirmLevels.push('confirmed')
|
||||||
|
} else if (confirmLevel === 'processed') {
|
||||||
|
confirmLevels.push('confirmed')
|
||||||
|
confirmLevels.push('processed')
|
||||||
|
}
|
||||||
|
|
||||||
const result = await new Promise((resolve, reject) => {
|
const result = await new Promise((resolve, reject) => {
|
||||||
(async () => {
|
(async () => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@ -95,7 +105,7 @@ export async function awaitTransactionSignatureConfirmation(
|
||||||
console.log('REST error for', txid, result);
|
console.log('REST error for', txid, result);
|
||||||
done = true;
|
done = true;
|
||||||
reject(result.err);
|
reject(result.err);
|
||||||
} else if (!(result.confirmations || result.confirmationStatus === "confirmed" || result.confirmationStatus === "finalized")) {
|
} else if (!(result.confirmations || confirmLevels.includes(result.confirmationStatus))) {
|
||||||
console.log('REST not confirmed', txid, result);
|
console.log('REST not confirmed', txid, result);
|
||||||
} else {
|
} else {
|
||||||
console.log('REST confirmed', txid, result);
|
console.log('REST confirmed', txid, result);
|
||||||
|
@ -168,9 +178,7 @@ export function uiToNative(amount: number, decimals: number): BN {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function nativeToUi(amount: number, decimals: number): number {
|
export function nativeToUi(amount: number, decimals: number): number {
|
||||||
|
|
||||||
return amount / Math.pow(10, decimals)
|
return amount / Math.pow(10, decimals)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue