Compare commits
68 Commits
d4b6db7649
...
d42bd9135b
Author | SHA1 | Date |
---|---|---|
Riordan Panayides | d42bd9135b | |
Riordan Panayides | 3a548b48bb | |
silas | ac8a3b8a96 | |
Riordan Panayides | 9d731bb883 | |
silas | 05031a51f7 | |
silas | 2dfa344948 | |
silas | 0dc29be23d | |
silas | 1f1306aacb | |
silas | 3921835822 | |
silas | 1f849879c3 | |
silas | 7b5719b636 | |
silas | 623b76f413 | |
silas | 3cf987a018 | |
silas | 78dddd8986 | |
silas | da66fc3fa6 | |
silas | e3456c27fd | |
silas | a17bf25d07 | |
silas | db4e445a66 | |
silas | 34eddad635 | |
silas | d8d17efb78 | |
silas | a6c97874aa | |
silas | 793a1ac104 | |
silas | df6d52b7f3 | |
silas | e55f0a66e9 | |
silas | 620d0fc674 | |
silas | 87bca3084b | |
silas | b3f91d0a18 | |
silas | bb3781b88d | |
silas | ab3b296137 | |
silas | 3d07218d26 | |
silas | cdc89bfd44 | |
silas | 8a2e51ed4c | |
silas | b1a9fe27a2 | |
silas | 50f83646c2 | |
silas | cbc03b5eb5 | |
silas | 9b173d721d | |
silas | 5cb93c54bb | |
silas | 6f4f62e4ed | |
silas | 9e6e1c3132 | |
silas | 624f78a203 | |
silas | e70e290695 | |
silas | 2edab4a298 | |
silas | 211931fd9c | |
silas | 2722c1a0ae | |
silas | 6b8c5343f6 | |
silas | bca3df32bb | |
silas | b7d2a6bfe1 | |
silas | 30f59ce507 | |
silas | 45a8d81bbe | |
silas | 86695d3269 | |
Riordan Panayides | e1fb7ca23d | |
silas | c6ae81fafc | |
silas | 47921e76b3 | |
Riordan Panayides | 14eee32799 | |
silas | 441bfe1a17 | |
silas | d81419c47b | |
Riordan Panayides | 3594cc0d8d | |
Riordan Panayides | c81f6afce3 | |
odyzzey | ee6b97dbe5 | |
Riordan Panayides | 1e71444db4 | |
Riordan Panayides | c76d4f9258 | |
Riordan Panayides | 5c2f027a7a | |
Riordan Panayides | da1a5195f5 | |
Riordan Panayides | 3435a7680b | |
Riordan Panayides | 410bfc5691 | |
Riordan Panayides | 14736b4308 | |
Ricardo J. Mendez | 79e5caa158 | |
Ricardo J. Mendez | 6655afee8f |
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
251
yarn.lock
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue