serum market code on client

Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
microwavedcola1 2022-04-08 08:29:35 +02:00
parent 2587cd914c
commit f7fb0bbec8
4 changed files with 122 additions and 0 deletions

View File

@ -45,6 +45,7 @@ export class Serum3Market {
) {}
}
/** @deprecated */
export async function serum3RegisterMarket(
client: MangoClient,
groupPk: PublicKey,
@ -70,6 +71,7 @@ export async function serum3RegisterMarket(
return await client.program.provider.send(tx);
}
/** @deprecated */
export async function serum3RegisterMarketIx(
client: MangoClient,
groupPk: PublicKey,
@ -94,6 +96,7 @@ export async function serum3RegisterMarketIx(
.instruction();
}
/** @deprecated */
export async function getSerum3MarketForBaseAndQuote(
client: MangoClient,
groupPk: PublicKey,

View File

@ -6,11 +6,13 @@ import {
SYSVAR_RENT_PUBKEY,
TransactionSignature,
} from '@solana/web3.js';
import bs58 from 'bs58';
import { Bank, getMintInfoForTokenIndex } from './accounts/types/bank';
import { Group } from './accounts/types/group';
import { I80F48 } from './accounts/types/I80F48';
import { MangoAccount } from './accounts/types/mangoAccount';
import { StubOracle } from './accounts/types/oracle';
import { Serum3Market } from './accounts/types/serum3';
import { IDL, MangoV4 } from './mango_v4';
export const MANGO_V4_ID = new PublicKey(
@ -254,6 +256,87 @@ export class MangoClient {
.rpc();
}
// Serum
public async serum3RegisterMarket(
group: Group,
serum3ProgramId: PublicKey,
serum3MarketExternalPk: PublicKey,
baseBank: Bank,
quoteBank: Bank,
marketIndex: number,
): Promise<TransactionSignature> {
return await this.program.methods
.serum3RegisterMarket(marketIndex)
.accounts({
group: group.publicKey,
admin: this.program.provider.wallet.publicKey,
serumProgram: serum3ProgramId,
serumMarketExternal: serum3MarketExternalPk,
baseBank: baseBank.publicKey,
quoteBank: quoteBank.publicKey,
payer: this.program.provider.wallet.publicKey,
})
.rpc();
}
public async serum3GetMarketForBaseAndQuote(
group: Group,
baseTokenIndex: number,
quoteTokenIndex: number,
): Promise<Serum3Market[]> {
const bbuf = Buffer.alloc(2);
bbuf.writeUInt16LE(baseTokenIndex);
const qbuf = Buffer.alloc(2);
qbuf.writeUInt16LE(quoteTokenIndex);
const bumpfbuf = Buffer.alloc(1);
bumpfbuf.writeUInt8(255);
return (
await this.program.account.serum3Market.all([
{
memcmp: {
bytes: group.publicKey.toBase58(),
offset: 8,
},
},
{
memcmp: {
bytes: bs58.encode(bbuf),
offset: 106,
},
},
{
memcmp: {
bytes: bs58.encode(qbuf),
offset: 108,
},
},
])
).map((tuple) => Serum3Market.from(tuple.publicKey, tuple.account));
}
public async serum3CreateOpenOrders(
group: Group,
mangoAccount: MangoAccount,
serum3Market: Serum3Market,
): Promise<TransactionSignature> {
return await this.program.methods
.serum3CreateOpenOrders()
.accounts({
group: group.publicKey,
account: mangoAccount.publicKey,
serumMarket: serum3Market.publicKey,
serumProgram: serum3Market.serumProgram,
serumMarketExternal: serum3Market.serumMarketExternal,
owner: this.program.provider.wallet.publicKey,
payer: this.program.provider.wallet.publicKey,
})
.rpc();
}
/// static
static async connect(

View File

@ -66,6 +66,31 @@ async function main() {
);
}
// register serum market
const serumProgramId = new PublicKey(
'DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY',
);
const serumMarketExternalPk = new PublicKey(
'DW83EpHFywBxCHmyARxwj3nzxJd7MUdSeznmrdzZKNZB',
);
try {
} catch (error) {
await client.serum3RegisterMarket(
group,
serumProgramId,
serumMarketExternalPk,
banks[0],
banks[1],
0,
);
}
const markets = await client.serum3GetMarketForBaseAndQuote(
group,
banks[0].tokenIndex,
banks[1].tokenIndex,
);
console.log(`Serum3 market ${markets[0].publicKey}`);
process.exit();
}

View File

@ -52,6 +52,17 @@ async function main() {
await client.deposit(group, mangoAccount, banks[0], 1000);
console.log(`Withdrawing...500`);
await client.withdraw(group, mangoAccount, banks[0], 500, false);
// serum3
const markets = await client.serum3GetMarketForBaseAndQuote(
group,
banks[1].tokenIndex,
banks[0].tokenIndex,
);
console.log(markets);
await client.serum3CreateOpenOrders(group, mangoAccount, markets[0]);
process.exit();
}
main();