remove extra signers from tokenDeposit, tokenWithdraw, createMangoAccount, liquidation ixs (#141)

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
microwavedcola1 2022-08-04 17:35:05 +02:00 committed by GitHub
parent 681c69e3a5
commit 38a5951558
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 51 additions and 169 deletions

View File

@ -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,

View File

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

View File

@ -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 {

View File

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

View File

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

View File

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

View File

@ -101,7 +101,6 @@ async function main() {
group.findBank(token.tokenIndex)!.name,
token.native(group.findBank(token.tokenIndex)!).toNumber(),
false,
user,
);
}
} catch (error) {

View File

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

View File

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

View File

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

View File

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

View File

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