Merge branch 'partial_liq' into main

This commit is contained in:
dd 2021-04-20 10:57:26 -04:00
commit 82237df167
3 changed files with 90 additions and 76 deletions

View File

@ -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');

View File

@ -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()

View File

@ -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)
} }