serum market code on client
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
parent
2587cd914c
commit
f7fb0bbec8
|
@ -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,
|
||||
|
|
83
ts/client.ts
83
ts/client.ts
|
@ -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(
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue