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(
|
export async function serum3RegisterMarket(
|
||||||
client: MangoClient,
|
client: MangoClient,
|
||||||
groupPk: PublicKey,
|
groupPk: PublicKey,
|
||||||
|
@ -70,6 +71,7 @@ export async function serum3RegisterMarket(
|
||||||
return await client.program.provider.send(tx);
|
return await client.program.provider.send(tx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @deprecated */
|
||||||
export async function serum3RegisterMarketIx(
|
export async function serum3RegisterMarketIx(
|
||||||
client: MangoClient,
|
client: MangoClient,
|
||||||
groupPk: PublicKey,
|
groupPk: PublicKey,
|
||||||
|
@ -94,6 +96,7 @@ export async function serum3RegisterMarketIx(
|
||||||
.instruction();
|
.instruction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @deprecated */
|
||||||
export async function getSerum3MarketForBaseAndQuote(
|
export async function getSerum3MarketForBaseAndQuote(
|
||||||
client: MangoClient,
|
client: MangoClient,
|
||||||
groupPk: PublicKey,
|
groupPk: PublicKey,
|
||||||
|
|
83
ts/client.ts
83
ts/client.ts
|
@ -6,11 +6,13 @@ import {
|
||||||
SYSVAR_RENT_PUBKEY,
|
SYSVAR_RENT_PUBKEY,
|
||||||
TransactionSignature,
|
TransactionSignature,
|
||||||
} from '@solana/web3.js';
|
} from '@solana/web3.js';
|
||||||
|
import bs58 from 'bs58';
|
||||||
import { Bank, getMintInfoForTokenIndex } from './accounts/types/bank';
|
import { Bank, getMintInfoForTokenIndex } from './accounts/types/bank';
|
||||||
import { Group } from './accounts/types/group';
|
import { Group } from './accounts/types/group';
|
||||||
import { I80F48 } from './accounts/types/I80F48';
|
import { I80F48 } from './accounts/types/I80F48';
|
||||||
import { MangoAccount } from './accounts/types/mangoAccount';
|
import { MangoAccount } from './accounts/types/mangoAccount';
|
||||||
import { StubOracle } from './accounts/types/oracle';
|
import { StubOracle } from './accounts/types/oracle';
|
||||||
|
import { Serum3Market } from './accounts/types/serum3';
|
||||||
import { IDL, MangoV4 } from './mango_v4';
|
import { IDL, MangoV4 } from './mango_v4';
|
||||||
|
|
||||||
export const MANGO_V4_ID = new PublicKey(
|
export const MANGO_V4_ID = new PublicKey(
|
||||||
|
@ -254,6 +256,87 @@ export class MangoClient {
|
||||||
.rpc();
|
.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
|
||||||
|
|
||||||
static async connect(
|
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();
|
process.exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,17 @@ async function main() {
|
||||||
await client.deposit(group, mangoAccount, banks[0], 1000);
|
await client.deposit(group, mangoAccount, banks[0], 1000);
|
||||||
console.log(`Withdrawing...500`);
|
console.log(`Withdrawing...500`);
|
||||||
await client.withdraw(group, mangoAccount, banks[0], 500, false);
|
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();
|
main();
|
||||||
|
|
Loading…
Reference in New Issue