Compare commits

...

68 Commits

Author SHA1 Message Date
Riordan Panayides d42bd9135b Upgrade mango-client for GMT 2022-06-02 19:08:21 +01:00
Riordan Panayides 3a548b48bb Revert "Merge branch 'k8s' into main"
This reverts commit ac8a3b8a96, reversing
changes made to 9d731bb883.
2022-05-13 14:10:25 +01:00
silas ac8a3b8a96
Merge branch 'k8s' into main 2022-05-13 12:15:01 +01:00
Riordan Panayides 9d731bb883 Update mango client 2022-05-13 11:13:34 +01:00
silas 05031a51f7 fixes 2022-05-13 08:46:38 +01:00
silas 2dfa344948 float 2022-05-13 07:33:55 +01:00
silas 0dc29be23d ping 2022-05-13 07:32:02 +01:00
silas 1f1306aacb up value 2022-05-12 22:38:51 +01:00
silas 3921835822 crank 2022-05-12 16:13:35 +01:00
silas 1f849879c3 reduce 2022-05-12 12:15:18 +01:00
silas 7b5719b636 limits 2022-05-12 11:54:28 +01:00
silas 623b76f413 remove limit 2022-05-10 13:02:43 +01:00
silas 3cf987a018 back to 0 2022-05-10 12:49:24 +01:00
silas 78dddd8986 tweaks 2022-05-10 12:43:31 +01:00
silas da66fc3fa6 change to parseFloat 2022-05-10 12:34:31 +01:00
silas e3456c27fd tweaksss 2022-05-10 11:57:00 +01:00
silas a17bf25d07 tweaks 2022-05-10 11:51:51 +01:00
silas db4e445a66 tweak equity 2022-05-10 11:43:49 +01:00
silas 34eddad635 temp equity change 2022-05-10 11:35:44 +01:00
silas d8d17efb78 move gke to aks 2022-05-09 14:46:05 +01:00
silas a6c97874aa kustomiz 2022-05-09 13:30:26 +01:00
silas 793a1ac104 kus 2022-05-09 13:30:19 +01:00
silas df6d52b7f3 more laf 2022-05-09 13:25:40 +01:00
silas e55f0a66e9 tag tag tag 2022-05-08 22:41:23 +01:00
silas 620d0fc674 all the tags 2022-05-08 22:33:58 +01:00
silas 87bca3084b tags 2022-05-08 22:29:58 +01:00
silas b3f91d0a18 add checlout 2022-05-08 22:28:19 +01:00
silas bb3781b88d fix job order 2022-05-08 22:23:27 +01:00
silas ab3b296137 add latest tag 2022-05-08 22:21:21 +01:00
silas 3d07218d26 image path 2022-05-08 22:05:39 +01:00
silas cdc89bfd44 update path 2022-05-08 21:32:30 +01:00
silas 8a2e51ed4c deploy steps 2022-05-08 21:27:22 +01:00
silas b1a9fe27a2 fix 2022-05-08 21:03:54 +01:00
silas 50f83646c2 add docker login 2022-05-08 21:02:45 +01:00
silas cbc03b5eb5 creds 2022-05-08 20:54:01 +01:00
silas 9b173d721d docker login 2022-05-08 20:50:34 +01:00
silas 5cb93c54bb whoops 2022-05-08 20:43:49 +01:00
silas 6f4f62e4ed change to az 2022-05-08 20:35:06 +01:00
silas 9e6e1c3132 aks intro 2022-05-08 20:20:14 +01:00
silas 624f78a203 update ip 2022-05-08 15:09:01 +01:00
silas e70e290695 revert os 2022-05-08 15:00:03 +01:00
silas 2edab4a298 slim 2022-05-08 14:51:22 +01:00
silas 211931fd9c cluster service 2022-05-06 19:28:55 +01:00
silas 2722c1a0ae update url 2022-05-06 17:15:10 +01:00
silas 6b8c5343f6 url change 2022-05-06 17:09:43 +01:00
silas bca3df32bb expose 2022-05-06 16:58:11 +01:00
silas b7d2a6bfe1 herp 2022-05-06 16:44:53 +01:00
silas 30f59ce507 Merge branch 'k8s' of https://github.com/silas-x/liquidator-v3 into k8s 2022-05-06 16:40:53 +01:00
silas 45a8d81bbe add laf pod 2022-05-06 16:40:50 +01:00
silas 86695d3269
Merge branch 'blockworks-foundation:main' into k8s 2022-05-06 13:25:56 +01:00
Riordan Panayides e1fb7ca23d Reenable balanceAccount 2022-05-06 13:24:06 +01:00
silas c6ae81fafc force push 2022-05-06 13:14:32 +01:00
silas 47921e76b3
Merge branch 'blockworks-foundation:main' into k8s 2022-05-06 13:11:19 +01:00
Riordan Panayides 14eee32799 Fix spot order cancellation 2022-05-06 12:59:15 +01:00
silas 441bfe1a17 rate change 2022-05-05 22:28:33 +01:00
silas d81419c47b gke 2022-05-05 15:55:11 +01:00
Riordan Panayides 3594cc0d8d Add CONFIRMATION_TIMEOUT env variable 2022-05-03 17:36:21 +01:00
Riordan Panayides c81f6afce3
Merge pull request #22 from odyzzey/patch-1
Restore balanceAccount functionality
2022-04-18 09:41:56 +01:00
odyzzey ee6b97dbe5
Restore balanceAccount functionality 2022-04-17 23:13:28 -05:00
Riordan Panayides 1e71444db4 Print stack trace 2022-04-14 17:48:36 +01:00
Riordan Panayides c76d4f9258 remove log line 2022-04-12 20:08:58 +01:00
Riordan Panayides 5c2f027a7a
Merge pull request #20 from ricardojmendez/commitment-level
Optional commitment level
2022-04-12 12:52:53 +01:00
Riordan Panayides da1a5195f5
Merge branch 'main' into commitment-level 2022-04-12 12:51:10 +01:00
Riordan Panayides 3435a7680b
Merge pull request #21 from blockworks-foundation/settle
Settle positive PNL
2022-04-12 12:48:55 +01:00
Riordan Panayides 410bfc5691 Upgrade mango-client 2022-04-12 12:13:19 +01:00
Riordan Panayides 14736b4308
Merge pull request #17 from ricardojmendez/settling-perp-pnl
Settling Perp PnL on an account before we liquidate perp and token
2022-04-12 11:51:12 +01:00
Ricardo J. Mendez 79e5caa158 Optional commitment level
The Triton team recommends using the commitment level `confirmed` in
order to avoid BlockhashNotFound errors. Adding a parameter.
2022-02-24 14:03:10 +01:00
Ricardo J. Mendez 6655afee8f Improvements on settling perp pnl
This is an optimization on f97370f following Dafy's suggestion here:

https://github.com/blockworks-foundation/liquidator-v3/pull/17#issuecomment-1020808416

It uses the client's settlePosPnl function instead of doing all the work
itself. It required making the mangoAccounts array global so we can have
access to it when liquidating from the RPC endpoint, but I'm not getting
any movement from the feed anyway.
2022-02-16 11:44:26 +01:00
5 changed files with 269 additions and 223 deletions

View File

@ -66,6 +66,8 @@ This mode never triggers advanced orders.
| `LIAB_LIMIT` | `0.9` | Percentage of your available margin to use when taking on liabilities |
| `MIN_EQUITY` | `0` | Minimum account equity required to liquidate |
| `LIQUIDATABLE_FEED_WEBSOCKET_ADDRESS` | N/A | Websocket URL of the liquidatable-accounts-feed service, see above |
| `COMMITMENT_LEVEL` | `processed` | Commitment level for the connection |
| `CONFIRMATION_TIMEOUT` | `30000` | Milliseconds to wait for transaction confirmation |
You can add these variables to a `.env` file in the project root to load automatically on liquidator startup. For example:
```bash

View File

@ -37,8 +37,8 @@
"trailingComma": "all"
},
"dependencies": {
"@blockworks-foundation/mango-client": "latest",
"@project-serum/anchor": "^0.16.2",
"@blockworks-foundation/mango-client": "^3.4.6",
"@project-serum/anchor": "^0.21.0",
"@project-serum/serum": "0.13.55",
"@project-serum/sol-wallet-adapter": "^0.2.0",
"@solana/spl-token": "^0.1.6",
@ -51,5 +51,10 @@
"dotenv": "^10.0.0",
"dotenv-expand": "^5.1.0",
"ts-node": "^9.1.1"
},
"resolutions": {
"bn.js": "5.1.3",
"@types/bn.js": "5.1.0",
"@solana/web3.js": "^1.31.0"
}
}

View File

@ -22,14 +22,14 @@ import {
sleep,
ZERO_I80F48,
} from '@blockworks-foundation/mango-client';
import { Account, Commitment, Connection, PublicKey } from '@solana/web3.js';
import { Commitment, Connection, Keypair, PublicKey } from '@solana/web3.js';
import { Market, OpenOrders } from '@project-serum/serum';
import BN from 'bn.js';
import { Orderbook } from '@project-serum/serum/lib/market';
import axios from 'axios';
import * as Env from 'dotenv';
import envExpand from 'dotenv-expand';
import {Client as RpcWebSocketClient} from 'rpc-websockets';
import { Client as RpcWebSocketClient } from 'rpc-websockets';
import { AsyncBlockingQueue } from './AsyncBlockingQueue';
envExpand(Env.config());
@ -41,7 +41,8 @@ const refreshAccountsInterval = parseInt(
const refreshWebsocketInterval = parseInt(
process.env.INTERVAL_WEBSOCKET || '300000',
);
const liquidatableFeedWebsocketAddress = process.env.LIQUIDATABLE_FEED_WEBSOCKET_ADDRESS;
const liquidatableFeedWebsocketAddress =
process.env.LIQUIDATABLE_FEED_WEBSOCKET_ADDRESS;
const rebalanceInterval = parseInt(process.env.INTERVAL_REBALANCE || '10000');
const checkTriggers = process.env.CHECK_TRIGGERS
? process.env.CHECK_TRIGGERS === 'true'
@ -55,40 +56,55 @@ const config = new Config(IDS);
const cluster = (process.env.CLUSTER || 'mainnet') as Cluster;
const groupName = process.env.GROUP || 'mainnet.1';
const groupIds = config.getGroup(cluster, groupName) ?? (() => { throw new Error(`Group ${groupName} not found`); })();
const groupIds =
config.getGroup(cluster, groupName) ??
(() => {
throw new Error(`Group ${groupName} not found`);
})();
// The Triton team recommends using the commitment level `confirmed` in order
// to avoid BlockhashNotFound errors. Adding a parameter.
const commitmentLevel = process.env.COMMITMENT_LEVEL || 'processed';
// Target values to keep in spot, ordered the same as in mango client's ids.json
// Example:
//
// MNGO BTC ETH SOL USDT SRM RAY COPE FTT MSOL
// TARGETS=0 0 0 1 0 0 0 0 0 0
const TARGETS = process.env.TARGETS?.replace(/\s+/g,' ').trim().split(' ').map((s) => parseFloat(s))
?? [0, 0, 0, 0, 0, 0, 0, 0, 0];
const TARGETS = process.env.TARGETS?.replace(/\s+/g, ' ')
.trim()
.split(' ')
.map((s) => parseFloat(s)) ?? [0, 0, 0, 0, 0, 0, 0, 0, 0];
// Do not liquidate accounts that have less than this much in value
const minEquity = parseInt(
process.env.MIN_EQUITY || '0',
);
if(minEquity > 0) {
const minEquity = parseInt(process.env.MIN_EQUITY || '0');
if (minEquity > 0) {
console.log(`Minimum equity required to liquidate: ${minEquity}`);
}
const mangoProgramId = groupIds.mangoProgramId;
const mangoGroupKey = groupIds.publicKey;
const payer = new Account(
JSON.parse(
process.env.PRIVATE_KEY ||
fs.readFileSync(
process.env.KEYPAIR || os.homedir() + '/.config/solana/id.json',
'utf-8',
),
const payer = Keypair.fromSecretKey(
Uint8Array.from(
JSON.parse(
process.env.PRIVATE_KEY ||
fs.readFileSync(
process.env.KEYPAIR || os.homedir() + '/.config/solana/id.json',
'utf-8',
),
),
),
);
console.log(`Commitment level: ${commitmentLevel}`);
console.log(`Payer: ${payer.publicKey.toBase58()}`);
const rpcEndpoint = process.env.ENDPOINT_URL || config.cluster_urls[cluster];
const connection = new Connection(rpcEndpoint, 'processed' as Commitment);
const client = new MangoClient(connection, mangoProgramId);
const connection = new Connection(rpcEndpoint, commitmentLevel as Commitment);
const client = new MangoClient(connection, mangoProgramId, {
timeout: parseInt(process.env.CONFIRMATION_TIMEOUT || '30000'),
});
let mangoSubscriptionId = -1;
let dexSubscriptionId = -1;
@ -99,6 +115,7 @@ let liqorMangoAccount: MangoAccount;
let spotMarkets: Market[];
let perpMarkets: PerpMarket[];
let rootBanks: (RootBank | undefined)[];
let mangoAccounts: MangoAccount[] = [];
async function main() {
console.log(`Starting liquidator for ${groupName}...`);
@ -172,7 +189,6 @@ async function main() {
// never returns
async function liquidatableFromSolanaRpc() {
let mangoAccounts: MangoAccount[] = [];
await refreshAccounts(mangoGroup, mangoAccounts);
watchAccounts(groupIds.mangoProgramId, mangoGroup, mangoAccounts);
@ -274,56 +290,51 @@ async function liquidatableFromSolanaRpc() {
}
}
async function maybeLiquidateAccount(mangoAccount: MangoAccount): Promise<boolean> {
const mangoAccountKeyString = mangoAccount.publicKey.toBase58();
async function maybeLiquidateAccount(
mangoAccount: MangoAccount,
): Promise<boolean> {
const mangoAccountKeyString = mangoAccount.publicKey.toBase58();
if (!mangoAccount.isLiquidatable(mangoGroup, cache)) {
console.log(
`Account ${mangoAccountKeyString} no longer liquidatable`,
);
return false;
}
if (!mangoAccount.isLiquidatable(mangoGroup, cache)) {
console.log(`Account ${mangoAccountKeyString} no longer liquidatable`);
return false;
}
const equity = mangoAccount.computeValue(mangoGroup, cache).toNumber()
if (equity < minEquity && minEquity > 0) {
// console.log(`Account ${mangoAccountKeyString} only has ${equity}, PASS`);
return false;
}
const equity = mangoAccount.computeValue(mangoGroup, cache).toNumber();
if (equity < minEquity && minEquity > 0) {
// console.log(`Account ${mangoAccountKeyString} only has ${equity}, PASS`);
return false;
}
const health = mangoAccount.getHealthRatio(mangoGroup, cache, 'Maint');
const accountInfoString = mangoAccount.toPrettyString(
groupIds,
const health = mangoAccount.getHealthRatio(mangoGroup, cache, 'Maint');
const accountInfoString = mangoAccount.toPrettyString(
groupIds,
mangoGroup,
cache,
);
console.log(
`Sick account ${mangoAccountKeyString} health ratio: ${health.toString()}\n${accountInfoString}`,
);
notify(`Sick account\n${accountInfoString}`);
try {
await liquidateAccount(
mangoGroup,
cache,
spotMarkets,
rootBanks,
perpMarkets,
mangoAccount,
liqorMangoAccount,
);
console.log(
`Sick account ${mangoAccountKeyString} health ratio: ${health.toString()}\n${accountInfoString}`,
);
notify(`Sick account\n${accountInfoString}`);
try {
await liquidateAccount(
mangoGroup,
cache,
spotMarkets,
rootBanks,
perpMarkets,
mangoAccount,
liqorMangoAccount,
);
console.log('Liquidated account', mangoAccountKeyString);
notify(`Liquidated account ${mangoAccountKeyString}`);
} catch (err: any) {
console.error(
`Failed to liquidate account ${mangoAccountKeyString}: ${err}`,
);
notify(
`Failed to liquidate account ${mangoAccountKeyString}: ${err}`,
);
}
console.log('Liquidated account', mangoAccountKeyString);
notify(`Liquidated account ${mangoAccountKeyString}`);
} catch (err: any) {
console.error(`Failed to liquidate account ${mangoAccountKeyString}:`, err);
notify(`Failed to liquidate account ${mangoAccountKeyString}: ${err}`);
}
return true;
return true;
}
async function newAccountOnLiquidatableFeed(account) {
@ -332,7 +343,7 @@ async function newAccountOnLiquidatableFeed(account) {
const mangoAccountKey = new PublicKey(account);
const mangoAccount = new MangoAccount(mangoAccountKey, null);
[cache, liqorMangoAccount, ] = await Promise.all([
[cache, liqorMangoAccount] = await Promise.all([
mangoGroup.loadCache(connection),
liqorMangoAccount.reload(connection, mangoGroup.dexProgramId),
mangoAccount.reload(connection, mangoGroup.dexProgramId),
@ -364,15 +375,15 @@ async function liquidatableFromLiquidatableFeed() {
const ws = new RpcWebSocketClient(liquidatableFeedWebsocketAddress, {
max_reconnects: Infinity,
});
ws.on('open', (x) => console.log("opened liquidatable feed"));
ws.on('error', (status) => console.log("error on liquidatable feed", status));
ws.on('close', (err) => console.log("closed liquidatable feed", err));
ws.on('open', (x) => console.log('opened liquidatable feed'));
ws.on('error', (status) => console.log('error on liquidatable feed', status));
ws.on('close', (err) => console.log('closed liquidatable feed', err));
ws.on('candidate', (params) => {
const account = params.account;
if (!candidatesSet.has(account)) {
candidatesSet.add(account);
candidates.enqueue(account);
}
const account = params.account;
if (!candidatesSet.has(account)) {
candidatesSet.add(account);
candidates.enqueue(account);
}
});
while (true) {
@ -592,10 +603,11 @@ async function liquidateAccount(
}
for (let r = 0; r < 5 && liqee.hasAnySpotOrders(); r++) {
for (let i = 0; i < mangoGroup.spotMarkets.length; i++) {
for (let i = 0; i < groupIds.spotMarkets.length; i++) {
if (liqee.inMarginBasket[i]) {
const spotMarket = spotMarkets[i];
const baseRootBank = rootBanks[i];
const spotMarketConfig = groupIds.spotMarkets[i];
const spotMarket = spotMarkets[spotMarketConfig.marketIndex];
const baseRootBank = rootBanks[spotMarketConfig.marketIndex];
const quoteRootBank = rootBanks[QUOTE_INDEX];
if (baseRootBank && quoteRootBank) {
@ -867,8 +879,8 @@ async function liquidatePerps(
const liqorInitHealth = liqor.getHealth(mangoGroup, cache, 'Init');
let maxLiabTransfer = liqorInitHealth.mul(liabLimit);
const quoteRootBank = rootBanks[QUOTE_INDEX];
if (liqee.isBankrupt) {
const quoteRootBank = rootBanks[QUOTE_INDEX];
if (quoteRootBank) {
// don't do anything it if quote position is zero
console.log('resolvePerpBankruptcy', maxLiabTransfer.toString());
@ -888,6 +900,24 @@ async function liquidatePerps(
let maxNet = ZERO_I80F48;
let maxNetIndex = mangoGroup.tokens.length - 1;
// We need to settle the positive PnLs to make sure that the account has funds
// to actually compensate for a liquidation. Otherwise we may end up with a
// token liquidation of 0.
//
// https://discord.com/channels/791995070613159966/826034521261604874/934629112734167060
if (quoteRootBank) {
await client.settlePosPnl(
mangoGroup,
cache,
liqee,
perpMarkets,
quoteRootBank,
payer,
mangoAccounts,
);
}
for (let i = 0; i < mangoGroup.tokens.length; i++) {
const price = cache.priceCache[i]
? cache.priceCache[i].price
@ -1006,7 +1036,13 @@ function getDiffsAndNet(
const marketIndex = groupIds!.spotMarkets[i].marketIndex;
const diff = mangoAccount
.getUiDeposit(cache.rootBankCache[marketIndex], mangoGroup, marketIndex)
.sub(mangoAccount.getUiBorrow(cache.rootBankCache[marketIndex], mangoGroup, marketIndex))
.sub(
mangoAccount.getUiBorrow(
cache.rootBankCache[marketIndex],
mangoGroup,
marketIndex,
),
)
.sub(I80F48.fromNumber(target));
diffs.push(diff);
netValues.push([i, diff.mul(cache.priceCache[i].price), marketIndex]);
@ -1064,7 +1100,7 @@ async function balanceTokens(
console.log('balanceTokens');
await mangoAccount.reload(connection, mangoGroup.dexProgramId);
const cache = await mangoGroup.loadCache(connection);
const cancelOrdersPromises: Promise<string>[] = [];
const cancelOrdersPromises: Promise<string | undefined>[] = [];
const bidsInfo = await getMultipleAccounts(
connection,
markets.map((m) => m.bidsAddress),
@ -1105,7 +1141,7 @@ async function balanceTokens(
connection,
mangoGroup.dexProgramId,
);
const settlePromises: Promise<string>[] = [];
const settlePromises: Promise<string | undefined>[] = [];
for (let i = 0; i < markets.length; i++) {
const marketIndex = mangoGroup.getSpotMarketIndex(markets[i].publicKey);
const oo = openOrders[marketIndex];
@ -1132,8 +1168,12 @@ async function balanceTokens(
for (let i = 0; i < groupIds!.spotMarkets.length; i++) {
const marketIndex = netValues[i][2];
const netIndex = netValues[i][0];
const marketConfig = groupIds!.spotMarkets.find((m) => m.marketIndex == marketIndex)!
const market = markets.find((m) => m.publicKey.equals(mangoGroup.spotMarkets[marketIndex].spotMarket))!;
const marketConfig = groupIds!.spotMarkets.find(
(m) => m.marketIndex == marketIndex,
)!;
const market = markets.find((m) =>
m.publicKey.equals(mangoGroup.spotMarkets[marketIndex].spotMarket),
)!;
const liquidationFee = mangoGroup.spotMarkets[marketIndex].liquidationFee;
if (Math.abs(diffs[netIndex].toNumber()) > market!.minOrderSize) {
const side = netValues[i][1].gt(ZERO_I80F48) ? 'sell' : 'buy';
@ -1284,7 +1324,7 @@ function notify(content: string) {
}
process.on('unhandledRejection', (err: any, p: any) => {
console.error(`Unhandled rejection: ${err} promise: ${p})`);
console.error(`Unhandled rejection: ${err} promise: ${p})`, err);
});
main();

View File

@ -14,11 +14,7 @@ import {
QUOTE_INDEX,
IDS,
} from '@blockworks-foundation/mango-client';
import {
Account,
Commitment,
Connection,
} from '@solana/web3.js';
import { Account, Commitment, Connection, Keypair } from '@solana/web3.js';
import { Market } from '@project-serum/serum';
import { Token, TOKEN_PROGRAM_ID } from '@solana/spl-token';
import { spawn } from 'child_process';
@ -28,13 +24,12 @@ async function testPerpLiquidationAndBankruptcy() {
const cluster = (process.env.CLUSTER || 'devnet') as Cluster;
const config = new Config(IDS);
const keypairPath = os.homedir() + '/.config/solana/devnet.json';
const payer = new Account(
JSON.parse(
process.env.KEYPAIR ||
fs.readFileSync(keypairPath, 'utf-8'),
const payer = Keypair.fromSecretKey(
new Uint8Array(
JSON.parse(process.env.KEYPAIR || fs.readFileSync(keypairPath, 'utf-8')),
),
);
const connection = new Connection(
config.cluster_urls[cluster],
'processed' as Commitment,
@ -75,7 +70,7 @@ async function testPerpLiquidationAndBankruptcy() {
env: {
CLUSTER: 'devnet',
GROUP: 'devnet.3',
PATH: process.env.PATH
PATH: process.env.PATH,
},
});
// keeper.stdout.on('data', (data) => {
@ -97,7 +92,7 @@ async function testPerpLiquidationAndBankruptcy() {
env: {
CLUSTER: 'devnet',
GROUP: 'devnet.3',
PATH: process.env.PATH
PATH: process.env.PATH,
},
});
@ -139,21 +134,21 @@ async function testPerpLiquidationAndBankruptcy() {
payer.publicKey,
);
const liqorPk = await client.initMangoAccount(mangoGroup, payer);
const liqorPk = (await client.initMangoAccount(mangoGroup, payer))!;
const liqorAccount = await client.getMangoAccount(
liqorPk,
mangoGroup.dexProgramId,
);
console.log('Created Liqor:', liqorPk.toBase58());
const liqeePk = await client.initMangoAccount(mangoGroup, payer);
const liqeePk = (await client.initMangoAccount(mangoGroup, payer))!;
const liqeeAccount = await client.getMangoAccount(
liqeePk,
mangoGroup.dexProgramId,
);
console.log('Created Liqee:', liqeePk.toBase58());
const makerPk = await client.initMangoAccount(mangoGroup, payer);
const makerPk = (await client.initMangoAccount(mangoGroup, payer))!;
const makerAccount = await client.getMangoAccount(
makerPk,
mangoGroup.dexProgramId,
@ -301,7 +296,8 @@ async function testPerpLiquidationAndBankruptcy() {
GROUP: 'devnet.3',
KEYPAIR: keypairPath,
LIQOR_PK: liqorAccount.publicKey.toBase58(),
PATH: process.env.PATH
ENDPOINT_URL: config.cluster_urls[cluster],
PATH: process.env.PATH,
},
});

251
yarn.lock
View File

@ -30,27 +30,29 @@
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa"
integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==
"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2":
version "7.17.9"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72"
integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==
dependencies:
regenerator-runtime "^0.13.4"
"@blockworks-foundation/mango-client@latest":
version "3.2.24"
resolved "https://registry.yarnpkg.com/@blockworks-foundation/mango-client/-/mango-client-3.2.24.tgz#c46f2cff3dca06d88e304610643f40fddbf0ee76"
integrity sha512-1rWvmMBK1wGVLG7UfTpHI2FPnXfRNTLFWifGa9q/FkRLp07GzGDY3fGhquJW2NxGv2KPwzX/YJEAHX+2x485OA==
"@blockworks-foundation/mango-client@^3.4.6":
version "3.5.0"
resolved "https://registry.yarnpkg.com/@blockworks-foundation/mango-client/-/mango-client-3.5.0.tgz#485e7762bc39d08a22afdea8d9ae9aeae381dd30"
integrity sha512-MtdHjz0J08IFaWKyBC1LmQmErS4nluU2ra8QOdR1jC0q1NEZkMXeSAx51U8SbpqShepRTBN/s44iLUzc7D4EaA==
dependencies:
"@project-serum/anchor" "^0.16.2"
"@project-serum/anchor" "^0.21.0"
"@project-serum/serum" "0.13.55"
"@project-serum/sol-wallet-adapter" "^0.2.0"
"@solana/spl-token" "^0.1.6"
"@solana/web3.js" "^1.31.0"
"@solana/web3.js" "^1.43.1"
big.js "^6.1.1"
bn.js "^5.2.0"
bn.js "^5.1.0"
buffer-layout "^1.2.1"
cross-fetch "^3.1.5"
dotenv "^10.0.0"
toformat "^2.0.0"
yargs "^17.0.1"
"@eslint/eslintrc@^0.4.3":
@ -68,25 +70,25 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
"@ethersproject/bytes@^5.5.0":
version "5.5.0"
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c"
integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==
"@ethersproject/bytes@^5.6.0":
version "5.6.1"
resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7"
integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==
dependencies:
"@ethersproject/logger" "^5.5.0"
"@ethersproject/logger" "^5.6.0"
"@ethersproject/logger@^5.5.0":
version "5.5.0"
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d"
integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==
"@ethersproject/logger@^5.6.0":
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a"
integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==
"@ethersproject/sha2@^5.5.0":
version "5.5.0"
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7"
integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==
version "5.6.0"
resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.0.tgz#364c4c11cc753bda36f31f001628706ebadb64d9"
integrity sha512-1tNWCPFLu1n3JM9t4/kytz35DkuF9MxqkGGEHNauEbaARdm2fafnOyw1s0tIQDPKF/7bkP1u3dbrmjpn5CelyA==
dependencies:
"@ethersproject/bytes" "^5.5.0"
"@ethersproject/logger" "^5.5.0"
"@ethersproject/bytes" "^5.6.0"
"@ethersproject/logger" "^5.6.0"
hash.js "1.1.7"
"@humanwhocodes/config-array@^0.5.0":
@ -144,18 +146,19 @@
snake-case "^3.0.4"
toml "^3.0.0"
"@project-serum/anchor@^0.16.2":
version "0.16.2"
resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.16.2.tgz#b8b4ec4c749d59a224108f8d82ab68217ef752ae"
integrity sha512-wOJwObd4wOZ5tRRMCKYjeMNsEmf7vuC71KQRnw6wthhErL8c/818n4gYIZCf/1ZPl/8WPruIlmtQHDSEyy2+0Q==
"@project-serum/anchor@^0.21.0":
version "0.21.0"
resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.21.0.tgz#ad5fb33744991ec1900cdb2fd22707c908b12b5f"
integrity sha512-flRuW/F+iC8mitNokx82LOXyND7Dyk6n5UUPJpQv/+NfySFrNFlzuQZaBZJ4CG5g9s8HS/uaaIz1nVkDR8V/QA==
dependencies:
"@project-serum/borsh" "^0.2.2"
"@project-serum/borsh" "^0.2.4"
"@solana/web3.js" "^1.17.0"
base64-js "^1.5.1"
bn.js "^5.1.2"
bs58 "^4.0.1"
buffer-layout "^1.2.0"
buffer-layout "^1.2.2"
camelcase "^5.3.1"
cross-fetch "^3.1.5"
crypto-hash "^1.3.0"
eventemitter3 "^4.0.7"
find "^0.3.0"
@ -172,6 +175,14 @@
bn.js "^5.1.2"
buffer-layout "^1.2.0"
"@project-serum/borsh@^0.2.4":
version "0.2.5"
resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663"
integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q==
dependencies:
bn.js "^5.1.2"
buffer-layout "^1.2.0"
"@project-serum/serum@0.13.55":
version "0.13.55"
resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.55.tgz#2ac44fe7b07651274eb57ac54ea9325789df5dd7"
@ -210,27 +221,7 @@
buffer-layout "^1.2.0"
dotenv "10.0.0"
"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0":
version "1.30.2"
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.30.2.tgz#e85da75e0825dc64f53eb64a1ff0115b27bec135"
integrity sha512-hznCj+rkfvM5taRP3Z+l5lumB7IQnDrB4l55Wpsg4kDU9Zds8pE5YOH5Z9bbF/pUzZJKQjyBjnY/6kScBm3Ugg==
dependencies:
"@babel/runtime" "^7.12.5"
"@ethersproject/sha2" "^5.5.0"
"@solana/buffer-layout" "^3.0.0"
bn.js "^5.0.0"
borsh "^0.4.0"
bs58 "^4.0.1"
buffer "6.0.1"
cross-fetch "^3.1.4"
jayson "^3.4.4"
js-sha3 "^0.8.0"
rpc-websockets "^7.4.2"
secp256k1 "^4.0.2"
superstruct "^0.14.2"
tweetnacl "^1.0.0"
"@solana/web3.js@^1.31.0":
"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.43.1":
version "1.31.0"
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.31.0.tgz#7a313d4c1a90b77f27ddbfe845a10d6883e06452"
integrity sha512-7nHHx1JNFnrt15e9y8m38I/EJCbaB+bFC3KZVM1+QhybCikFxGMtGA5r7PDC3GEL1R2RZA8yKoLkDKo3vzzqnw==
@ -260,14 +251,7 @@
resolved "https://registry.yarnpkg.com/@types/big.js/-/big.js-6.1.2.tgz#68a952b629a6aaa2b5855a2f63363d1e77f6dd91"
integrity sha512-h24JIZ52rvSvi2jkpYDk2yLH99VzZoCJiSfDWwjst7TwJVuXN61XVCUlPCzRl7mxKEMsGf8z42Q+J4TZwU3z2w==
"@types/bn.js@^4.11.5":
version "4.11.6"
resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c"
integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==
dependencies:
"@types/node" "*"
"@types/bn.js@^5.1.0":
"@types/bn.js@5.1.0", "@types/bn.js@^4.11.5", "@types/bn.js@^5.1.0":
version "5.1.0"
resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68"
integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==
@ -287,9 +271,9 @@
"@types/node" "*"
"@types/express-serve-static-core@^4.17.9":
version "4.17.27"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.27.tgz#7a776191e47295d2a05962ecbb3a4ce97e38b401"
integrity sha512-e/sVallzUTPdyOTiqi8O8pMdBBphscvI6E4JYaKlja4Lm+zh7UFSSdW5VMkRbhDtmrONqOUHOXRguPsDckzxNA==
version "4.17.28"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8"
integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==
dependencies:
"@types/node" "*"
"@types/qs" "*"
@ -309,9 +293,9 @@
integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
"@types/lodash@^4.14.159":
version "4.14.178"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8"
integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==
version "4.14.182"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2"
integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==
"@types/mocha@^9.0.0":
version "9.0.0"
@ -319,14 +303,14 @@
integrity sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==
"@types/node@*":
version "17.0.8"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b"
integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==
version "17.0.33"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.33.tgz#3c1879b276dc63e73030bb91165e62a4509cd506"
integrity sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==
"@types/node@^12.12.54":
version "12.20.41"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.41.tgz#81d7734c5257da9f04354bd9084a6ebbdd5198a5"
integrity sha512-f6xOqucbDirG7LOzedpvzjP3UTmHttRou3Mosx3vL9wr9AIQGhcPgVnqa8ihpZYnxyM1rxeNCvTyukPKZtq10Q==
version "12.20.52"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.52.tgz#2fd2dc6bfa185601b15457398d4ba1ef27f81251"
integrity sha512-cfkwWw72849SNYp3Zx0IcIs25vABmFh73xicxhCkTcvtZQeIez15PpwQN8fY3RD7gv1Wrxlc9MEtfMORZDEsGw==
"@types/node@^15.12.4":
version "15.14.9"
@ -592,21 +576,16 @@ bindings@^1.3.0:
dependencies:
file-uri-to-path "1.0.0"
bn.js@^4.11.9:
version "4.12.0"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
bn.js@^5.0.0, bn.js@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
bn.js@^5.1.0, bn.js@^5.1.2:
bn.js@5.1.3, bn.js@^4.11.9, bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2:
version "5.1.3"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b"
integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==
bn.js@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
borsh@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.4.0.tgz#9dd6defe741627f1315eac2a73df61421f6ddb9f"
@ -654,7 +633,7 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
buffer-layout@^1.2.0, buffer-layout@^1.2.1:
buffer-layout@^1.2.0, buffer-layout@^1.2.1, buffer-layout@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5"
integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==
@ -746,11 +725,6 @@ chokidar@3.5.2:
optionalDependencies:
fsevents "~2.3.2"
circular-json@^0.5.9:
version "0.5.9"
resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d"
integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==
cliui@^7.0.2:
version "7.0.4"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
@ -806,12 +780,12 @@ cross-env@^7.0.2:
dependencies:
cross-spawn "^7.0.1"
cross-fetch@^3.1.4:
version "3.1.4"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39"
integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==
cross-fetch@^3.1.4, cross-fetch@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
dependencies:
node-fetch "2.6.1"
node-fetch "2.6.7"
cross-spawn@^7.0.1, cross-spawn@^7.0.2:
version "7.0.3"
@ -1646,15 +1620,17 @@ node-addon-api@^2.0.0:
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32"
integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==
node-fetch@2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
node-fetch@2.6.7:
version "2.6.7"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
dependencies:
whatwg-url "^5.0.0"
node-gyp-build@^4.2.0, node-gyp-build@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3"
integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==
version "4.4.0"
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4"
integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
@ -1834,15 +1810,14 @@ rimraf@^3.0.2:
glob "^7.1.3"
rpc-websockets@^7.4.2:
version "7.4.16"
resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.4.16.tgz#eb701cdef577d4357ba5f526d50e25f370396fac"
integrity sha512-0b7OVhutzwRIaYAtJo5tqtaQTWKfwAsKnaThOSOy+VkhVdleNUgb8eZnWSdWITRZZEigV5uPEIDr5KZe4DBrdQ==
version "7.4.18"
resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.4.18.tgz#274c825c0efadbf6fe75f10289229ae537fe9ffb"
integrity sha512-bVu+4qM5CkGVlTqJa6FaAxLbb5uRnyH4te7yjFvoCzbnif7PT4BcvXtNTprHlNvsH+/StB81zUQicxMrUrIomA==
dependencies:
"@babel/runtime" "^7.11.2"
circular-json "^0.5.9"
"@babel/runtime" "^7.17.2"
eventemitter3 "^4.0.7"
uuid "^8.3.0"
ws "^7.4.5"
uuid "^8.3.2"
ws "^8.5.0"
optionalDependencies:
bufferutil "^4.0.1"
utf-8-validate "^5.0.2"
@ -2023,11 +1998,21 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
toformat@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/toformat/-/toformat-2.0.0.tgz#7a043fd2dfbe9021a4e36e508835ba32056739d8"
integrity sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==
toml@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee"
integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==
tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
traverse-chain@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1"
@ -2051,9 +2036,9 @@ tslib@^1.8.1:
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.0.3:
version "2.3.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
version "2.4.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
tsutils@^3.21.0:
version "3.21.0"
@ -2108,13 +2093,13 @@ uri-js@^4.2.2:
punycode "^2.1.0"
utf-8-validate@^5.0.2:
version "5.0.8"
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.8.tgz#4a735a61661dbb1c59a0868c397d2fe263f14e58"
integrity sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==
version "5.0.9"
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3"
integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==
dependencies:
node-gyp-build "^4.3.0"
uuid@^8.3.0, uuid@^8.3.2:
uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
@ -2129,6 +2114,19 @@ vscode-textmate@5.2.0:
resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e"
integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==
webidl-conversions@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
whatwg-url@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
dependencies:
tr46 "~0.0.3"
webidl-conversions "^3.0.0"
which@2.0.2, which@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
@ -2161,9 +2159,14 @@ wrappy@1:
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
ws@^7.4.5:
version "7.5.6"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b"
integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==
version "7.5.7"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67"
integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==
ws@^8.5.0:
version "8.6.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.6.0.tgz#e5e9f1d9e7ff88083d0c0dd8281ea662a42c9c23"
integrity sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==
y18n@^5.0.5:
version "5.0.8"
@ -2191,9 +2194,9 @@ yargs-parser@^20.2.2:
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
yargs-parser@^21.0.0:
version "21.0.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55"
integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==
version "21.0.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35"
integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==
yargs-unparser@2.0.0:
version "2.0.0"
@ -2219,9 +2222,9 @@ yargs@16.2.0:
yargs-parser "^20.2.2"
yargs@^17.0.1:
version "17.3.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9"
integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==
version "17.5.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e"
integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==
dependencies:
cliui "^7.0.2"
escalade "^3.1.1"