remove extra signers from tokenDeposit, tokenWithdraw, createMangoAccount, liquidation ixs (#141)
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
parent
681c69e3a5
commit
38a5951558
|
@ -1,15 +1,10 @@
|
|||
import * as anchor from '@project-serum/anchor';
|
||||
import { Program, AnchorProvider } from '@project-serum/anchor';
|
||||
import { MangoV4 } from '../target/types/mango_v4';
|
||||
import * as spl from '@solana/spl-token';
|
||||
import { AnchorProvider, Program } from '@project-serum/anchor';
|
||||
import NodeWallet from '@project-serum/anchor/dist/cjs/nodewallet';
|
||||
import { PublicKey, LAMPORTS_PER_SOL, Connection } from '@solana/web3.js';
|
||||
import {
|
||||
Group,
|
||||
MangoClient,
|
||||
StubOracle,
|
||||
AccountSize,
|
||||
} from '../ts/client/src/index';
|
||||
import * as spl from '@solana/spl-token';
|
||||
import { Connection, LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js';
|
||||
import { MangoV4 } from '../target/types/mango_v4';
|
||||
import { Group, MangoClient, StubOracle } from '../ts/client/src/index';
|
||||
|
||||
enum MINTS {
|
||||
USDC = 'USDC',
|
||||
|
@ -118,7 +113,7 @@ describe('mango-v4', () => {
|
|||
// I think this is only for getting the serum market though?
|
||||
envClient = await MangoClient.connect(envProvider, 'devnet', programId);
|
||||
await envClient.groupCreate(groupNum, false, 1, insuranceMintPk);
|
||||
group = await envClient.getGroupForAdmin(adminPk, groupNum);
|
||||
group = await envClient.getGroupForCreator(adminPk, groupNum);
|
||||
|
||||
await envClient.stubOracleCreate(group, mintsMap['USDC']!.publicKey, 1.0);
|
||||
usdcOracle = (
|
||||
|
@ -215,49 +210,19 @@ describe('mango-v4', () => {
|
|||
const mangoAccount = await client.getOrCreateMangoAccount(
|
||||
group,
|
||||
users[0].keypair.publicKey,
|
||||
users[0].keypair,
|
||||
0,
|
||||
AccountSize.small,
|
||||
'my_mango_account',
|
||||
);
|
||||
await mangoAccount.reload(client, group);
|
||||
|
||||
await client.tokenDeposit(
|
||||
group,
|
||||
mangoAccount,
|
||||
'USDC',
|
||||
100.5,
|
||||
users[0].keypair,
|
||||
);
|
||||
await client.tokenDeposit(group, mangoAccount, 'USDC', 100.5);
|
||||
await mangoAccount.reload(client, group);
|
||||
|
||||
await client.tokenDeposit(
|
||||
group,
|
||||
mangoAccount,
|
||||
'BTC',
|
||||
50.5,
|
||||
users[0].keypair,
|
||||
);
|
||||
await client.tokenDeposit(group, mangoAccount, 'BTC', 50.5);
|
||||
await mangoAccount.reload(client, group);
|
||||
|
||||
await client.tokenWithdraw(
|
||||
group,
|
||||
mangoAccount,
|
||||
'USDC',
|
||||
100,
|
||||
false,
|
||||
users[0].keypair,
|
||||
);
|
||||
await client.tokenWithdraw(group, mangoAccount, 'USDC', 100, false);
|
||||
await mangoAccount.reload(client, group);
|
||||
|
||||
await client.tokenWithdraw(
|
||||
group,
|
||||
mangoAccount,
|
||||
'BTC',
|
||||
50,
|
||||
false,
|
||||
users[0].keypair,
|
||||
);
|
||||
await client.tokenWithdraw(group, mangoAccount, 'BTC', 50, false);
|
||||
await mangoAccount.reload(client, group);
|
||||
});
|
||||
|
||||
|
@ -284,59 +249,26 @@ describe('mango-v4', () => {
|
|||
const mangoAccountA = await clientA.getOrCreateMangoAccount(
|
||||
group,
|
||||
users[0].keypair.publicKey,
|
||||
users[0].keypair,
|
||||
0,
|
||||
AccountSize.small,
|
||||
'my_mango_account',
|
||||
);
|
||||
await mangoAccountA.reload(clientA, group);
|
||||
|
||||
const mangoAccountB = await clientB.getOrCreateMangoAccount(
|
||||
group,
|
||||
users[1].keypair.publicKey,
|
||||
users[1].keypair,
|
||||
0,
|
||||
AccountSize.small,
|
||||
'my_mango_account',
|
||||
);
|
||||
await mangoAccountB.reload(clientB, group);
|
||||
|
||||
await envClient.stubOracleSet(group, btcOracle.publicKey, 100);
|
||||
|
||||
// Initialize liquidator
|
||||
await clientA.tokenDeposit(
|
||||
group,
|
||||
mangoAccountA,
|
||||
'USDC',
|
||||
1000,
|
||||
users[0].keypair,
|
||||
);
|
||||
await clientA.tokenDeposit(
|
||||
group,
|
||||
mangoAccountA,
|
||||
'BTC',
|
||||
100,
|
||||
users[0].keypair,
|
||||
);
|
||||
await clientA.tokenDeposit(group, mangoAccountA, 'USDC', 1000);
|
||||
await clientA.tokenDeposit(group, mangoAccountA, 'BTC', 100);
|
||||
|
||||
// Deposit collateral
|
||||
await clientB.tokenDeposit(
|
||||
group,
|
||||
mangoAccountB,
|
||||
'BTC',
|
||||
100,
|
||||
users[1].keypair,
|
||||
);
|
||||
await clientB.tokenDeposit(group, mangoAccountB, 'BTC', 100);
|
||||
await mangoAccountB.reload(clientB, group);
|
||||
// // Borrow
|
||||
await clientB.tokenWithdraw(
|
||||
group,
|
||||
mangoAccountB,
|
||||
'USDC',
|
||||
200,
|
||||
true,
|
||||
users[1].keypair,
|
||||
);
|
||||
await clientB.tokenWithdraw(group, mangoAccountB, 'USDC', 200, true);
|
||||
// // Set price so health is below maintanence
|
||||
await envClient.stubOracleSet(group, btcOracle.publicKey, 1);
|
||||
|
||||
|
@ -346,7 +278,6 @@ describe('mango-v4', () => {
|
|||
group,
|
||||
mangoAccountA,
|
||||
mangoAccountB,
|
||||
users[0].keypair,
|
||||
'BTC',
|
||||
'USDC',
|
||||
1000,
|
||||
|
|
|
@ -1,10 +1,4 @@
|
|||
import {
|
||||
AnchorProvider,
|
||||
BN,
|
||||
Program,
|
||||
Provider,
|
||||
web3,
|
||||
} from '@project-serum/anchor';
|
||||
import { AnchorProvider, BN, Program, Provider } from '@project-serum/anchor';
|
||||
import { getFeeRates, getFeeTier } from '@project-serum/serum';
|
||||
import { Order } from '@project-serum/serum/lib/market';
|
||||
import {
|
||||
|
@ -472,20 +466,13 @@ export class MangoClient {
|
|||
public async getOrCreateMangoAccount(
|
||||
group: Group,
|
||||
ownerPk: PublicKey,
|
||||
payer: web3.Keypair,
|
||||
accountNumber?: number,
|
||||
accountSize?: AccountSize,
|
||||
name?: string,
|
||||
): Promise<MangoAccount> {
|
||||
let mangoAccounts = await this.getMangoAccountsForOwner(group, ownerPk);
|
||||
if (mangoAccounts.length === 0) {
|
||||
await this.createMangoAccount(
|
||||
group,
|
||||
payer,
|
||||
accountNumber ?? 0,
|
||||
accountSize ?? AccountSize.small,
|
||||
name ?? '',
|
||||
);
|
||||
await this.createMangoAccount(group, accountNumber, accountSize, name);
|
||||
mangoAccounts = await this.getMangoAccountsForOwner(group, ownerPk);
|
||||
}
|
||||
return mangoAccounts[0];
|
||||
|
@ -493,19 +480,21 @@ export class MangoClient {
|
|||
|
||||
public async createMangoAccount(
|
||||
group: Group,
|
||||
payer: web3.Keypair,
|
||||
accountNumber: number,
|
||||
accountSize: AccountSize,
|
||||
accountNumber?: number,
|
||||
accountSize?: AccountSize,
|
||||
name?: string,
|
||||
): Promise<TransactionSignature> {
|
||||
return await this.program.methods
|
||||
.accountCreate(accountNumber, accountSize, name ?? '')
|
||||
.accountCreate(
|
||||
accountNumber ?? 0,
|
||||
accountSize ?? AccountSize.small,
|
||||
name ?? '',
|
||||
)
|
||||
.accounts({
|
||||
group: group.publicKey,
|
||||
owner: (this.program.provider as AnchorProvider).wallet.publicKey,
|
||||
payer: payer.publicKey,
|
||||
payer: (this.program.provider as AnchorProvider).wallet.publicKey,
|
||||
})
|
||||
.signers([payer])
|
||||
.rpc();
|
||||
}
|
||||
|
||||
|
@ -631,7 +620,6 @@ export class MangoClient {
|
|||
mangoAccount: MangoAccount,
|
||||
tokenName: string,
|
||||
amount: number,
|
||||
signer: Signer,
|
||||
) {
|
||||
const bank = group.banksMap.get(tokenName)!;
|
||||
|
||||
|
@ -698,7 +686,7 @@ export class MangoClient {
|
|||
)
|
||||
.preInstructions(preInstructions)
|
||||
.postInstructions(postInstructions)
|
||||
.signers([signer].concat(additionalSigners))
|
||||
.signers(additionalSigners)
|
||||
.rpc({ skipPreflight: true });
|
||||
}
|
||||
|
||||
|
@ -708,7 +696,6 @@ export class MangoClient {
|
|||
tokenName: string,
|
||||
amount: number,
|
||||
allowBorrow: boolean,
|
||||
signer: Signer,
|
||||
) {
|
||||
const bank = group.banksMap.get(tokenName)!;
|
||||
|
||||
|
@ -741,7 +728,6 @@ export class MangoClient {
|
|||
({ pubkey: pk, isWritable: false, isSigner: false } as AccountMeta),
|
||||
),
|
||||
)
|
||||
.signers([signer])
|
||||
.rpc({ skipPreflight: true });
|
||||
}
|
||||
|
||||
|
@ -751,7 +737,6 @@ export class MangoClient {
|
|||
tokenName: string,
|
||||
nativeAmount: number,
|
||||
allowBorrow: boolean,
|
||||
signer: Signer,
|
||||
) {
|
||||
const bank = group.banksMap.get(tokenName)!;
|
||||
|
||||
|
@ -784,7 +769,6 @@ export class MangoClient {
|
|||
({ pubkey: pk, isWritable: false, isSigner: false } as AccountMeta),
|
||||
),
|
||||
)
|
||||
.signers([signer])
|
||||
.rpc({ skipPreflight: true });
|
||||
}
|
||||
|
||||
|
@ -1581,7 +1565,6 @@ export class MangoClient {
|
|||
group: Group,
|
||||
liqor: MangoAccount,
|
||||
liqee: MangoAccount,
|
||||
liqorOwner: Signer,
|
||||
assetTokenName: string,
|
||||
liabTokenName: string,
|
||||
maxLiabTransfer: number,
|
||||
|
@ -1617,10 +1600,9 @@ export class MangoClient {
|
|||
group: group.publicKey,
|
||||
liqor: liqor.publicKey,
|
||||
liqee: liqee.publicKey,
|
||||
liqorOwner: liqorOwner.publicKey,
|
||||
liqorOwner: liqor.owner,
|
||||
})
|
||||
.remainingAccounts(parsedHealthAccounts)
|
||||
.signers([liqorOwner])
|
||||
.rpc();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { AnchorProvider, Wallet } from '@project-serum/anchor';
|
||||
import { Connection, Keypair } from '@solana/web3.js';
|
||||
import fs from 'fs';
|
||||
import { AccountSize } from '../accounts/mangoAccount';
|
||||
import { MangoClient } from '../client';
|
||||
import { MANGO_V4_ID } from '../constants';
|
||||
|
||||
|
@ -44,10 +43,6 @@ async function main() {
|
|||
const mangoAccount = await client.getOrCreateMangoAccount(
|
||||
group,
|
||||
user.publicKey,
|
||||
user,
|
||||
0,
|
||||
AccountSize.small,
|
||||
'my_mango_account',
|
||||
);
|
||||
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
|
||||
console.log(mangoAccount.toString());
|
||||
|
@ -55,11 +50,11 @@ async function main() {
|
|||
if (false) {
|
||||
// deposit and withdraw
|
||||
console.log(`Depositing...50 USDC`);
|
||||
await client.tokenDeposit(group, mangoAccount, 'USDC', 50, user);
|
||||
await client.tokenDeposit(group, mangoAccount, 'USDC', 50);
|
||||
await mangoAccount.reload(client, group);
|
||||
|
||||
console.log(`Depositing...0.0005 BTC`);
|
||||
await client.tokenDeposit(group, mangoAccount, 'BTC', 0.0005, user);
|
||||
await client.tokenDeposit(group, mangoAccount, 'BTC', 0.0005);
|
||||
await mangoAccount.reload(client, group);
|
||||
}
|
||||
try {
|
||||
|
|
|
@ -92,11 +92,11 @@ async function main() {
|
|||
if (true) {
|
||||
// deposit
|
||||
console.log(`...depositing 50 USDC`);
|
||||
await client.tokenDeposit(group, mangoAccount, 'USDC', 50, user);
|
||||
await client.tokenDeposit(group, mangoAccount, 'USDC', 50);
|
||||
await mangoAccount.reload(client, group);
|
||||
|
||||
console.log(`...depositing 0.0005 BTC`);
|
||||
await client.tokenDeposit(group, mangoAccount, 'BTC', 0.0005, user);
|
||||
await client.tokenDeposit(group, mangoAccount, 'BTC', 0.0005);
|
||||
await mangoAccount.reload(client, group);
|
||||
|
||||
// serum3
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { AnchorProvider, Wallet } from '@project-serum/anchor';
|
||||
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
|
||||
import fs from 'fs';
|
||||
import { AccountSize, HealthType } from '../accounts/mangoAccount';
|
||||
import { HealthType } from '../accounts/mangoAccount';
|
||||
import { OrderType, Side } from '../accounts/perp';
|
||||
import {
|
||||
Serum3OrderType,
|
||||
|
@ -50,7 +50,10 @@ async function main() {
|
|||
JSON.parse(fs.readFileSync(process.env.ADMIN_KEYPAIR!, 'utf-8')),
|
||||
),
|
||||
);
|
||||
const group = await client.getGroupForCreator(admin.publicKey, GROUP_NUM);
|
||||
// const group = await client.getGroupForCreator(admin.publicKey, GROUP_NUM);
|
||||
const group = await client.getGroup(
|
||||
new PublicKey('FdynL6q7CNJMMiTZpfnYVkqQRYaoiBWgWkFYvvpx9uA8'),
|
||||
);
|
||||
console.log(group.toString());
|
||||
|
||||
// create + fetch account
|
||||
|
@ -58,10 +61,6 @@ async function main() {
|
|||
const mangoAccount = await client.getOrCreateMangoAccount(
|
||||
group,
|
||||
user.publicKey,
|
||||
user,
|
||||
0,
|
||||
AccountSize.small,
|
||||
'my_mango_account',
|
||||
);
|
||||
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
|
||||
console.log(mangoAccount.toString());
|
||||
|
@ -98,11 +97,15 @@ async function main() {
|
|||
|
||||
try {
|
||||
console.log(`...depositing 50 USDC`);
|
||||
await client.tokenDeposit(group, mangoAccount, 'USDC', 50, user);
|
||||
await client.tokenDeposit(group, mangoAccount, 'USDC', 50);
|
||||
await mangoAccount.reload(client, group);
|
||||
|
||||
console.log(`...withdrawing 1 USDC`);
|
||||
await client.tokenWithdraw(group, mangoAccount, 'USDC', 1, true);
|
||||
await mangoAccount.reload(client, group);
|
||||
|
||||
console.log(`...depositing 0.0005 BTC`);
|
||||
await client.tokenDeposit(group, mangoAccount, 'BTC', 0.0005, user);
|
||||
await client.tokenDeposit(group, mangoAccount, 'BTC', 0.0005);
|
||||
await mangoAccount.reload(client, group);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { AnchorProvider, Wallet } from '@project-serum/anchor';
|
||||
import { Connection, Keypair } from '@solana/web3.js';
|
||||
import fs from 'fs';
|
||||
import { AccountSize, HealthType } from '../accounts/mangoAccount';
|
||||
import { HealthType } from '../accounts/mangoAccount';
|
||||
import { MangoClient } from '../client';
|
||||
import { MANGO_V4_ID } from '../constants';
|
||||
import { toUiDecimals } from '../utils';
|
||||
|
@ -43,9 +43,6 @@ async function main() {
|
|||
const mangoAccount = await client.getOrCreateMangoAccount(
|
||||
group,
|
||||
user.publicKey,
|
||||
0,
|
||||
AccountSize.small,
|
||||
'my_mango_account',
|
||||
);
|
||||
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
|
||||
console.log(mangoAccount.toString());
|
||||
|
|
|
@ -101,7 +101,6 @@ async function main() {
|
|||
group.findBank(token.tokenIndex)!.name,
|
||||
token.native(group.findBank(token.tokenIndex)!).toNumber(),
|
||||
false,
|
||||
user,
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
|
|
|
@ -44,22 +44,18 @@ async function main() {
|
|||
console.log(`Creating mangoaccount...`);
|
||||
const mangoAccount = await client.getOrCreateMangoAccount(
|
||||
group,
|
||||
user.publicKey,
|
||||
user,
|
||||
0,
|
||||
AccountSize.small,
|
||||
'my_mango_account',
|
||||
user.publicKey
|
||||
);
|
||||
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
|
||||
console.log(mangoAccount.toString(group));
|
||||
|
||||
if (false) {
|
||||
console.log(`...depositing 10 USDC`);
|
||||
await client.tokenDeposit(group, mangoAccount, 'USDC', 10, user);
|
||||
await client.tokenDeposit(group, mangoAccount, 'USDC', 10);
|
||||
await mangoAccount.reload(client, group);
|
||||
|
||||
console.log(`...depositing 1 SOL`);
|
||||
await client.tokenDeposit(group, mangoAccount, 'SOL', 1, user);
|
||||
await client.tokenDeposit(group, mangoAccount, 'SOL', 1);
|
||||
await mangoAccount.reload(client, group);
|
||||
}
|
||||
|
||||
|
|
|
@ -59,11 +59,7 @@ async function main() {
|
|||
console.log(`Creating mangoaccount...`);
|
||||
const mangoAccount = await client.getOrCreateMangoAccount(
|
||||
group,
|
||||
user.publicKey,
|
||||
user,
|
||||
0,
|
||||
AccountSize.small,
|
||||
'my_mango_account',
|
||||
user.publicKey
|
||||
);
|
||||
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
|
||||
console.log(`start balance \n${mangoAccount.toString(group)}`);
|
||||
|
|
|
@ -39,11 +39,7 @@ async function main() {
|
|||
|
||||
const user1MangoAccount = await user1Client.getOrCreateMangoAccount(
|
||||
group,
|
||||
user1.publicKey,
|
||||
user1,
|
||||
0,
|
||||
AccountSize.small,
|
||||
'my_mango_account',
|
||||
user1.publicKey
|
||||
);
|
||||
|
||||
console.log(`...mangoAccount1 ${user1MangoAccount.publicKey}`);
|
||||
|
@ -52,7 +48,7 @@ async function main() {
|
|||
let amount = 0.001;
|
||||
let token = 'BTC';
|
||||
console.log(`Depositing...${amount} 'BTC'`);
|
||||
await user1Client.tokenDeposit(group, user1MangoAccount, token, amount, user1);
|
||||
await user1Client.tokenDeposit(group, user1MangoAccount, token, amount);
|
||||
await user1MangoAccount.reload(user1Client, group);
|
||||
console.log(`${user1MangoAccount.toString(group)}`);
|
||||
|
||||
|
@ -74,10 +70,6 @@ async function main() {
|
|||
const user2MangoAccount = await user2Client.getOrCreateMangoAccount(
|
||||
group,
|
||||
user2.publicKey,
|
||||
user2,
|
||||
0,
|
||||
AccountSize.small,
|
||||
'my_mango_account',
|
||||
);
|
||||
console.log(`...mangoAccount2 ${user2MangoAccount.publicKey}`);
|
||||
|
||||
|
@ -98,7 +90,7 @@ async function main() {
|
|||
/// user2 deposits some collateral and borrows BTC
|
||||
amount = 1;
|
||||
console.log(`Depositing...${amount} 'USDC'`);
|
||||
await user2Client.tokenDeposit(group, user2MangoAccount, 'USDC', amount, user2);
|
||||
await user2Client.tokenDeposit(group, user2MangoAccount, 'USDC', amount);
|
||||
await user2MangoAccount.reload(user2Client, group);
|
||||
console.log(`${user2MangoAccount.toString(group)}`);
|
||||
|
||||
|
@ -113,7 +105,6 @@ async function main() {
|
|||
token,
|
||||
amount,
|
||||
true,
|
||||
user2
|
||||
);
|
||||
await user2MangoAccount.reload(user2Client, group);
|
||||
console.log(`${user2MangoAccount.toString(group)}`);
|
||||
|
|
|
@ -44,11 +44,7 @@ async function main() {
|
|||
console.log(`Creating mangoaccount...`);
|
||||
const mangoAccount = await client.getOrCreateMangoAccount(
|
||||
group,
|
||||
user.publicKey,
|
||||
user,
|
||||
0,
|
||||
AccountSize.small,
|
||||
'my_mango_account',
|
||||
user.publicKey
|
||||
);
|
||||
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
|
||||
|
||||
|
|
|
@ -45,11 +45,7 @@ async function main() {
|
|||
console.log(`Creating mangoaccount...`);
|
||||
const mangoAccount = await client.getOrCreateMangoAccount(
|
||||
group,
|
||||
user.publicKey,
|
||||
user,
|
||||
0,
|
||||
AccountSize.small,
|
||||
'my_mango_account',
|
||||
user.publicKey
|
||||
);
|
||||
console.log(`...created/found mangoAccount ${mangoAccount.publicKey}`);
|
||||
|
||||
|
|
Loading…
Reference in New Issue